ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZjExNDgKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTQgQEAKK3NyYy8qLm8KK3NyYy8qLm1vCitzcmMvZG5zbWFzcS5wb3QKK3NyYy9kbnNtYXNxCitzcmMvZG5zbWFzcV9iYXNlbGluZQorc3JjLy5jb3B0c18qCitjb250cmliL3dydC9kaGNwX2xlYXNlX3RpbWUKK2NvbnRyaWIvd3J0L2RoY3BfcmVsZWFzZQorZGViaWFuL2Jhc2UvCitkZWJpYW4vZGFlbW9uLworZGViaWFuL2ZpbGVzCitkZWJpYW4vc3Vic3R2YXJzCitkZWJpYW4vdXRpbHMtc3Vic3R2YXJzCitkZWJpYW4vdXRpbHMvCmRpZmYgLS1naXQgYS9BbmRyb2lkLm1rIGIvQW5kcm9pZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTE4N2E2Ci0tLSAvZGV2L251bGwKKysrIGIvQW5kcm9pZC5tawpAQCAtMCwwICsxLDMgQEAKK2lmbmVxICgkKFRBUkdFVF9TSU1VTEFUT1IpLHRydWUpCitpbmNsdWRlICQoY2FsbCBhbGwtc3ViZGlyLW1ha2VmaWxlcykKK2VuZGlmCmRpZmYgLS1naXQgYS9DSEFOR0VMT0cgYi9DSEFOR0VMT0cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNmYzZkMAotLS0gL2Rldi9udWxsCisrKyBiL0NIQU5HRUxPRwpAQCAtMCwwICsxLDE4NDkgQEAKK3ZlcnNpb24gMi43MworICAgICAgICAgICAgRml4IGNyYXNoIGF0IHN0YXJ0dXAgd2hlbiBhbiBlbXB0eSBzdWZmaXggaXMgc3VwcGxpZWQgdG8KKwkgICAgLS1jb25mLWRpciwgYWxzbyB0cml2aWFsIG1lbW9yeSBsZWFrLiBUaGFua3MgdG8gCisJICAgIFRvbWFzIEhvenphIGZvciBzcG90dGluZyB0aGlzLgorCisJICAgIFJlbW92ZSBmbG9vciBvZiA0MDk2IG9uIGFkdmVydGlzZWQgRUROUzAgcGFja2V0IHNpemUgd2hlbiAKKwkgICAgRE5TU0VDIGluIHVzZSwgdGhlIG9yaWdpbmFsIHJhdGlvbmFsZSBmb3IgdGhpcyBoYXMgbG9uZyBnb25lLgorCSAgICBUaGFua3MgdG8gQW5kZXJzIEthc2VvcmcgZm9yIHNwb3R0aW5nIHRoaXMuCisKKwkgICAgVXNlIGlub3RpZnkgZm9yIGNoZWNraW5nIG9uIHVwZGF0ZXMgdG8gL2V0Yy9yZXNvbHYuY29uZiBhbmQKKwkgICAgZnJpZW5kcyB1bmRlciBMaW51eC4gVGhpcyBmaXhlcyByYWNlIGNvbmRpdGlvbnMgd2hlbiB0aGUgZmlsZXMgYXJlIAorCSAgICB1cGRhdGVkIHJhcGlkbHkgYW5kIHNhdmVzIENQVSBieSBub3kgcG9sbGluZy4KKworCSAgICBGaXggYnJlYWthZ2Ugb2YgLS1kb21haW49PGRvbWFpbj4sPHN1Ym5ldD4sbG9jYWwgLSBvbmx5IHJldmVyc2UKKwkgICAgcXVlcmllcyB3ZXJlIGludGVyY2VwdGVkLiBUSGlzIGFwcGVhcnMgdG8gaGF2ZSBiZWVuIGJyb2tlbiAKKwkgICAgc2luY2UgMi42OS4gVGhhbmtzIHRvIEpvc2ggU3RvbmUgZm9yIGZpbmRpbmcgdGhlIGJ1Zy4KKworCSAgICBFbGltaW5hdGUgSVB2NiBwcml2YWN5IGFkZHJlc3NlcyBhbmQgZGVwcmVjYXRlZCBhZGRyZXNzZXMgZnJvbQorCSAgICB0aGUgYW5zd2VycyBnaXZlbiBieSAtLWludGVyZmFjZS1uYW1lLiBOb3RlIHRoYXQgcmV2ZXJzZSBxdWVyaWVzCisJICAgIChpZSBsb29raW5nIGZvciBuYW1lcywgZ2l2ZW4gYWRkcmVzc2VzKSBhcmUgbm90IGFmZmVjdGVkLiAKKwkgICAgVGhhbmtzIHRvIE1pY2hhZWwgR29yYmFjaCBmb3IgdGhlIHN1Z2dlc3Rpb24uCisKKwkgICAgRml4IGNyYXNoIGluIEROU1NFQyBjb2RlIHdpdGggbG9uZyBSUnMuIFRoYW5rcyB0byBNYXJjbyBEYXZpZHMKKwkgICAgZm9yIHRoZSBidWcgcmVwb3J0LgorCSAgICAKKwkgICAgQWRkIC0taWdub3JlLWFkZHJlc3Mgb3B0aW9uLiBJZ25vcmUgcmVwbGllcyB0byBBLXJlY29yZCAKKwkgICAgcXVlcmllcyB3aGljaCBpbmNsdWRlIHRoZSBzcGVjaWZpZWQgYWRkcmVzcy4gTm8gZXJyb3IgaXMKKwkgICAgZ2VuZXJhdGVkLCBkbnNtYXNxIHNpbXBseSBjb250aW51ZXMgdG8gbGlzdGVuIGZvciBhbm90aGVyIAorCSAgICByZXBseS4gVGhpcyBpcyB1c2VmdWwgdG8gZGVmZWF0IGJsb2NraW5nIHN0cmF0ZWdpZXMgd2hpY2gKKwkgICAgcmVseSBvbiBxdWlja2x5IHN1cHBseWluZyBhIGZvcmdlZCBhbnN3ZXIgdG8gYSBETlMgCisJICAgIHJlcXVlc3QgZm9yIGNlcnRhaW4gZG9tYWlucywgYmVmb3JlIHRoZSBjb3JyZWN0IGFuc3dlciBjYW4KKyAgICAgICAgICAgIGFycml2ZS4gVGhhbmtzIHRvIEdsZW4gSHVhbmcgZm9yIHRoZSBwYXRjaC4KKwkKKwkgICAgUmV2aXNpdCB0aGUgcGFydCBvZiBETlNTRUMgdmFsaWRhdGlvbiB3aGljaCBkZXRlcm1pbmVzIGlmIGFuIAorCSAgICB1bnNpZ25lZCBhbnN3ZXIgaXMgbGVnaXQsIG9yIGlzIGluIHNvbWUgcGFydCBvZiB0aGUgRE5TIAorCSAgICB0cmVlIHdoaWNoIHNob3VsZCBiZSBzaWduZWQuIERuc21hc3Egbm93IHdvcmtzIGZyb20gdGhlIAorCSAgICBETlMgcm9vdCBkb3dud2FyZCBsb29raW5nIGZvciB0aGUgbGltaXQgb2Ygc2lnbmVkIAorCSAgICBkZWxlZ2F0aW9ucywgcmF0aGVyIHRoYW4gd29ya2luZyBib3R0b20gdXAuIFRoaXMgaXMgCisJICAgIGJvdGggbW9yZSBjb3JyZWN0LCBhbmQgbGVzcyBsaWtlbHkgdG8gdHJpcCBvdmVyIGJyb2tlbiAKKwkgICAgbmFtZXNlcnZlcnMgaW4gdGhlIHVuc2lnbmVkIHBhcnRzIG9mIHRoZSBETlMgdHJlZSAKKwkgICAgd2hpY2ggZG9uJ3QgcmVzcG9uZCB3ZWxsIHRvIEROU1NFQyBxdWVyaWVzLgorCisJICAgIEFkZCAtLWxvZy1xdWVyaWVzPWV4dHJhIG9wdGlvbiwgd2hpY2ggbWFrZXMgbG9ncyBlYXNpZXIKKwkgICAgdG8gc2VhcmNoIGF1dG9tYXRpY2FsbHkuCisKKwkgICAgQWRkIC0tbWluLWNhY2hlLXR0bCBvcHRpb24uIEkndmUgcmVzaXN0ZWQgdGhpcyBmb3IgYSBsb25nIAorCSAgICB0aW1lLCBvbiB0aGUgZ3JvdW5kcyB0aGF0IGRpc2JlbGlldmluZyBUVExzIGlzIG5ldmVyIGEgCisJICAgIGdvb2QgaWRlYSwgYnV0IEkndmUgYmVlbiBwZXJzdWFkZWQgdGhhdCB0aGVyZSBhcmUgCisJICAgIHNvbWV0aW1lcyByZWFzb25zIHRvIGRvIGl0LiAoU3RlcCBmb3J3YXJkLCBHRlcpLgorCSAgICBUbyBhdm9pZCBtaXN1c2UsIHRoZXJlJ3MgYSBoYXJkIGxpbWl0IG9uIHRoZSBUVEwgCisJICAgIGZsb29yIG9mIG9uZSBob3VyLiBUaGFuc2sgdG8gUmluU2F0c3VraSBmb3IgdGhlIHBhdGNoLgorCQorCQordmVyc2lvbiAyLjcyCisgICAgICAgICAgICBBZGQgcmEtYWR2cm91dGVyIG1vZGUsIGZvciBSRkMtMzc3NSBtb2JpbGUgSVB2NiBzdXBwb3J0LgorCisJICAgIEFkZCBzdXBwb3J0IGZvciAiaXBzZXRzIiBpbiAqQlNELCB1c2luZyBwZi4gVGhhbmtzIHRvIAorCSAgICBTdmVuIEZhbGVtcGltIGZvciB0aGUgcGF0Y2guCisKKwkgICAgRml4IHJhY2UgY29uZGl0aW9uIHdoaWNoIGNvdWxkIGxvY2sgdXAgZG5zbWFzcSB3aGVuIGFuIAorCSAgICBpbnRlcmZhY2UgZ29lcyBkb3duIGFuZCB1cCByYXBpZGx5LiBUaGFua3MgdG8gQ29ucmFkIAorCSAgICBLb3N0ZWNraSBmb3IgaGVscGluZyB0byBjaGFzZSB0aGlzIGRvd24uCisKKwkgICAgQWRkIERCdXMgbWV0aG9kcyBTZXRGaWx0ZXJXaW4yS09wdGlvbiBhbmQgU2V0Qm9ndXNQcml2T3B0aW9uCisJICAgIFRoYW5rcyB0byB0aGUgU21vb3Rod2FsbCBwcm9qZWN0IGZvciB0aGUgcGF0Y2guCisKKwkgICAgRml4IGZhaWx1cmUgdG8gYnVpbGQgYWdhaW5zdCBOZXR0bGUtMy4wLiBUaGFua3MgdG8gU3RldmVuIAorCSAgICBCYXJ0aCBmb3Igc3BvdHRpbmcgdGhpcyBhbmQgZmluZGluZyB0aGUgZml4LiAKKwkgICAgCisJICAgIFdoZW4gYXNzaWduaW5nIGV4aXN0aW5nIERIQ1AgbGVhc2VzIHRvIGludGVmYWNlcyBieSBjb21wYXJpbmcgCisJICAgIG5ldHdvcmtzLCBoYW5kbGUgdGhlIGNhc2UgdGhhdCB0d28gb3IgbW9yZSBpbnRlcmZhY2VzIGhhdmUgdGhlCisJICAgIHNhbWUgbmV0d29yayBwYXJ0LCBidXQgZGlmZmVyZW50IHByZWZpeCBsZW5ndGhzIChmYXZvdXIgdGhlCisJICAgIGxvbmdlciBwcmVmaXggbGVuZ3RoLikgVGhhbmtzIHRvIEx1bmctUGluIENoYW5nIGZvciB0aGUgCisJICAgIHBhdGNoLgorCSAgICAKKwkgICAgQWRkIGEgbW9kZSB3aGljaCBkZXRlY3RzIGFuZCByZW1vdmVzIEROUyBmb3J3YXJkaW5nIGxvb3BzLCBpZSAKKwkgICAgYSBxdWVyeSBzZW50IHRvIGFuIHVwc3RyZWFtIHNlcnZlciByZXR1cm5zIGFzIGEgbmV3IHF1ZXJ5IHRvIAorCSAgICBkbnNtYXNxLCBhbmQgd291bGQgdGhlcmVmb3JlIGJlIGZvcndhcmRlZCBhZ2FpbiwgcmVzdWx0aW5nIGluIAorCSAgICBhIHF1ZXJ5IHdoaWNoIGxvb3BzIG1hbnkgdGltZXMgYmVmb3JlIGJlaW5nIGRyb3BwZWQuIFVwc3RyZWFtCisJICAgIHNlcnZlcnMgd2hpY2ggbG9vcCBiYWNrIGFyZSBkaXNhYmxlZCBhbmQgdGhpcyBldmVudCBpcyBsb2dnZWQuCisJICAgIFRoYW5rcyB0byBTbW9vdGh3YWxsIGZvciB0aGVpciBzcG9uc29yc2hpcCBvZiB0aGlzIGZlYXR1cmUuCisKKwkgICAgRXh0ZW5kIC0tY29uZi1kaXIgdG8gYWxsb3cgZmlsdGVyaW5nIG9mIGZpbGVzLiBTbworCSAgICAtLWNvbmYtZGlyPS9ldGMvZG5zbWFzcS5kLFwqLmNvbmYKKwkgICAgd2lsbCBsb2FkIGFsbCB0aGUgZmlsZXMgaW4gL2V0Yy9kbnNtYXNxLmQgd2hpY2ggZW5kIGluIC5jb25mCisgCisgICAgICAgICAgICBGaXggYnVnIHdoZW4gcmVzdWx0ZWQgaW4gTlhET01BSU4gYW5zd2VycyBpbnN0ZWFkIG9mIE5PREFUQSBpbgorICAgICAgICAgICAgc29tZSBjaXJjdW1zdGFuY2VzLgorCisJICAgIEZpeCBidWcgd2hpY2ggY2F1c2VkIGRuc21hc3EgdG8gYmVjb21lIHVucmVzcG9uc2l2ZSBpZiBpdCAKKwkgICAgZmFpbGVkIHRvIHNlbmQgcGFja2V0cyBkdWUgdG8gYSBuZXR3b3JrIGludGVyZmFjZSBkaXNhcHBlYXJpbmcuCisJICAgIFRoYW5rcyB0byBOaWVscyBQZWVuIGZvciBzcG90dGluZyB0aGlzLgorCSAgICAJICAgIAorICAgICAgICAgICAgRml4IHByb2JsZW0gd2l0aCAtLWxvY2FsLXNlcnZpY2Ugb3B0aW9uIG9uIGJpZy1lbmRpYW4gcGxhdGZvcm1zCisJICAgIFRoYW5rcyB0byBSaWNoYXJkIEdlbm91ZCBmb3IgdGhlIHBhdGNoLgorCisKK3ZlcnNpb24gMi43MQorICAgICAgICAgICAgU3VidGxlIGNoYW5nZSB0byBlcnJvciBoYW5kbGluZyB0byBoZWxwIEROU1NFQyB2YWxpZGF0aW9uIAorCSAgICB3aGVuIHNlcnZlcnMgZmFpbCB0byBwcm92aWRlIE5PREFUQSBhbnN3ZXJzIGZvciAKKwkgICAgbm9uLWV4aXN0ZW50IERTIHJlY29yZHMuCisKKwkgICAgVHdlYWsgY29kZSB3aGljaCByZW1vdmVzIEROU1NFQyByZWNvcmRzIGZyb20gYW5zd2VycyB3aGVuCisJICAgIG5vdCByZXF1aXJlZC4gRml4ZXMgYnJva2VuIGFuc3dlcnMgd2hlbiBhZGRpdGlvbmFsIHNlY3Rpb24KKwkgICAgaGFzIHJlYWwgcmVjb3JkcyBpbiBpdC4gVGhhbmtzIHRvIE1hcmNvIERhdmlkcyBmb3IgdGhlIGJ1ZyAKKwkgICAgcmVwb3J0LgorCisJICAgIEZpeCBETlNTRUMgdmFsaWRhdGlvbiBvZiBBTlkgcXVlcmllcy4gVGhhbmtzIHRvIE1hcmNvIERhdmlkcworCSAgICBmb3Igc3BvdHRpbmcgdGhhdCB0b28uCisKKwkgICAgRml4IHRvdGFsIEROUyBmYWlsdXJlIGFuZCAxMDAlIENQVSB1c2UgaWYgY2FjaGVzaXplIHNldCB0byB6ZXJvLAorCSAgICByZWdyZXNzaW9uIGludHJvZHVjZWQgaW4gMi42OS4gVGhhbmtzIHRvIEphbWVzIEh1bnQgYW5kCisJICAgIHRoZSBVYnVudHUgY3Jvd2QgZm9yIGFzc2lzdGFuY2UgaW4gZml4aW5nIHRoaXMuCisKKwordmVyc2lvbiAyLjcwCisgICAgICAgICAgICBGaXggY3Jhc2gsIGludHJvZHVjZWQgaW4gMi42OSwgb24gVENQIHJlcXVlc3Qgd2hlbiBkbnNtYXNxCisJICAgIGNvbXBpbGVkIHdpdGggRE5TU0VDIHN1cHBvcnQsIGJ1dCBydW5uaW5nIHdpdGhvdXQgRE5TU0VDCisJICAgIGVuYWJsZWQuIFRoYW5rcyB0byBNYW5pc2ggU2luZyBmb3Igc3BvdHRpbmcgdGhhdCBvbmUuCisKKwkgICAgRml4IHJlZ3Jlc3Npb24gd2hpY2ggYnJva2UgaXBzZXQgZnVuY3Rpb25hbGl0eS4gVGhhbmtzIHRvIAorCSAgICBXYW5nIEppYW4gZm9yIHRoZSBidWcgcmVwb3J0LgorCisKK3ZlcnNpb24gMi42OQorCSAgICBJbXBsZW1lbnQgZHluYW1pYyBpbnRlcmZhY2UgZGlzY292ZXJ5IG9uICpCU0QuIFRoaXMgYWxsb3dzCisJICAgIHRoZSBjb250cnVjdG9yOiBzeW50YXggdG8gYmUgdXNlZCBpbiBkaGNwLXJhbmdlIGZvciBESENQdjYKKwkgICAgb24gdGhlIEJTRCBwbGF0Zm9ybS4gVGhhbmtzIHRvIE1hdHRoaWFzIEFuZHJlZSBmb3IKKwkgICAgdmFsdWFibGUgcmVzZWFyY2ggb24gaG93IHRvIGltcGxlbWVudCB0aGlzLgorCisJICAgIEZpeCBpbmZpbml0ZSBsb29wIGFzc29jaWF0ZWQgd2l0aCBzb21lIC0tYm9ndXMtbnhkb21haW4KKwkgICAgY29uZmlncy4gVGhhbmtzIGZvZ29ib2dvIGZvciB0aGUgYnVnIHJlcG9ydC4KKworCSAgICBGaXggbWlzc2luZyBSQSBSRE5TIG9wdGlvbiB3aXRoIGNvbmZpZ3VyYXRpb24gbGlrZQorCSAgICAtLWRoY3Atb3B0aW9uPW9wdGlvbjY6MjMsWzo6XSBUaGFua3MgdG8gVHNhY2hpIEtpbWVsZG9yZmVyCisJICAgIGZvciBzcG90dGluZyB0aGUgcHJvYmxlbS4KKworCSAgICBBZGQgW2ZkMDA6Ol0gYW5kIFtmZTgwOjpdIGFzIHNwZWNpYWwgYWRkcmVzc2VzIGluIERIQ1B2NgorCSAgICBvcHRpb25zLCBhbmFsb2dvdXMgdG8gWzo6XS4gW2ZkMDA6Ol0gaXMgcmVwbGFjZWQgd2l0aCB0aGUKKwkgICAgYWN0dWFsIFVMQSBvZiB0aGUgaW50ZXJmYWNlIG9uIHRoZSBtYWNoaW5lIHJ1bm5pbmcKKwkgICAgZG5zbWFzcSwgW2ZlODA6Ol0gd2l0aCB0aGUgbGluay1sb2NhbCBhZGRyZXNzLiAKKwkgICAgVGhhbmtzIHRvIFRzYWNoaSBLaW1lbGRvcmZlciBmb3IgY2hhbXBpb25pbmcgdGhpcy4KKworCSAgICBETlNTRUMgdmFsaWRhdGlvbiBhbmQgY2FjaGluZy4gRG5zbWFzcSBuZWVkcyB0byBiZQorCSAgICBjb21waWxlZCB3aXRoIHRoaXMgZW5hYmxlZCwgd2l0aCAKKwkgICAgCisJICAgIG1ha2UgZG5zbWFzcSBDT1BUUz0tREhBVkVfRE5TU0VDCisJICAgIAorCSAgICB0aGlzIGFkZCBkZXBlbmRlbmNpZXMgb24gdGhlIG5ldHRsZSBjcnlwdG8gbGlicmFyeSBhbmQgdGhlIAorCSAgICBnbXAgbWF0aHMgbGlicmFyeS4gSXQncyBwb3NzaWJsZSB0byBoYXZlIHRoZXNlIGxpbmtlZAorCSAgICBzdGF0aWNhbGx5IHdpdGgKKwkgICAgCisJICAgIG1ha2UgZG5zbWFzcSBDT1BUUz0nLURIQVZFX0ROU1NFQyAtREhBVkVfRE5TU0VDX1NUQVRJQycKKwkgICAgCisJICAgIHdoaWNoIGJsb2F0cyB0aGUgZG5zbWFzcSBiaW5hcnksIGJ1dCBzYXZlcyB0aGUgc2l6ZSBvZiAKKwkgICAgdGhlIHNoYXJlZCBsaWJyYXJpZXMgd2hpY2ggYXJlIG11Y2ggYmlnZ2VyLgorCisJICAgIFRvIGVuYWJsZSwgRE5TU0VDLCB5b3Ugd2lsbCBuZWVkIGEgc2V0IG9mCisJICAgIHRydXN0LWFuY2hvcnMuIE5vdyB0aGF0IHRoZSBUTERzIGFyZSBzaWduZWQsIHRoaXMgY2FuIGJlCisJICAgIHRoZSBrZXlzIGZvciB0aGUgcm9vdCB6b25lLCBhbmQgZm9yIGNvbnZlbmllbmNlIHRoZXkgYXJlCisJICAgIGluY2x1ZGVkIGluIHRydXN0LWFuY2hvcnMuY29uZiBpbiB0aGUgZG5zbWFzcQorCSAgICBkaXN0cmlidXRpb24uIFlvdSBzaG91bGQgb2YgY291cnNlIGNoZWNrIHRoYXQgdGhlc2UgYXJlCisJICAgIGxlZ2l0aW1hdGUgYW5kIHVwLXRvLWRhdGUuIFNvLCBhZGRpbmcKKwkgICAgCisJICAgIGNvbmYtZmlsZT0vcGF0aC90by90cnVzdC1hbmNob3JzLmNvbmYKKwkgICAgZG5zc2VjCisKKwkgICAgdG8geW91ciBjb25maWcgaXMgYWxsIHRoYXRzIG5lZWRlZCB0byBnZXQgdGhpbmdzCisJICAgIHdvcmtpbmcuIFRoZSB1cHN0cmVhbSBuYW1lc2VydmVycyBoYXZlIHRvIGJlIEROU1NFQy1jYXBhYmxlCisJICAgIHRvbywgb2YgY291cnNlLiBNYW55IElTUCBuYW1lc2VydmVycyBhcmVuJ3QsIGJ1dCB0aGUKKwkgICAgR29vZ2xlIHB1YmxpYyBuYW1lc2VydmVycyAoOC44LjguOCBhbmQgOC44LjQuNCkgYXJlLgorCSAgICBXaGVuIEROU1NFQyBpcyBjb25maWd1cmVkLCBkbnNtYXNxIHZhbGlkYXRlcyBhbnkgcXVlcmllcyAKKwkgICAgZm9yIGRvbWFpbnMgd2hpY2ggYXJlIHNpZ25lZC4gUXVlcnkgcmVzdWx0cyB3aGljaCBhcmUgCisJICAgIGJvZ3VzIGFyZSByZXBsYWNlZCB3aXRoIFNFUlZGQUlMIHJlcGxpZXMsIGFuZCByZXN1bHRzIAorCSAgICB3aGljaCBhcmUgY29ycmVjdGx5IHNpZ25lZCBoYXZlIHRoZSBBRCBiaXQgc2V0LiBJbiAKKwkgICAgYWRkaXRpb24sIGFuZCBqdXN0IGFzIGltcG9ydGFudGx5LCBkbnNtYXNxIHN1cHBsaWVzIAorCSAgICBjb3JyZWN0IEROU1NFQyBpbmZvcm1hdGlvbiB0byBjbGllbnRzIHdoaWNoIGFyZSBkb2luZyAKKwkgICAgdGhlaXIgb3duIHZhbGlkYXRpb24sIGFuZCBjYWNoZXMgRE5TS0VZLCBEUyBhbmQgUlJTSUcKKwkgICAgcmVjb3Jkcywgd2hpY2ggc2lnbmlmaWNhbnRseSBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiAKKwkgICAgZG93bnN0cmVhbSB2YWxpZGF0b3JzLiBTZXR0aW5nIC0tbG9nLXF1ZXJpZXMgd2lsbCBzaG93IAorCSAgICBETlNTRUMgaW4gYWN0aW9uLgorCisJICAgIElmIGEgZG9tYWluIGlzIHJldHVybmVkIGZyb20gYW4gdXBzdHJlYW0gbmFtZXNlcnZlciB3aXRob3V0IAorCSAgICBETlNTRUMgc2lnbmF0dXJlLCBkbnNtYXNxIGJ5IGRlZmF1bHQgdHJ1c3RzIHRoaXMuIFRoaXMgCisJICAgIG1lYW5zIHRoYXQgZm9yIHVuc2lnbmVkIHpvbmUgKHN0aWxsIHRoZSBtYWpvcml0eSkgdGhlcmUgCisJICAgIGlzIGVmZmVjdGl2ZWx5IG5vIGNvc3QgZm9yIGhhdmluZyBETlNTRUMgZW5hYmxlZC4gT2YgY291cnNlCisJICAgIHRoaXMgYWxsb3dzIGFuIGF0dGFja2VyIHRvIHJlcGxhY2UgYSBzaWduZWQgcmVjb3JkIHdpdGggYSAKKwkgICAgZmFsc2UgdW5zaWduZWQgcmVjb3JkLiBUaGlzIGlzIGFkZHJlc3NlZCBieSB0aGUgCisJICAgIC0tZG5zc2VjLWNoZWNrLXVuc2lnbmVkIGZsYWcsIHdoaWNoIGluc3RydWN0cyBkbnNtYXNxCisJICAgIHRvIHByb3ZlIHRoYXQgYW4gdW5zaWduZWQgcmVjb3JkIGlzIGxlZ2l0aW1hdGUsIGJ5IGZpbmRpbmcgIAorCSAgICBhIHNlY3VyZSBwcm9vZiB0aGF0IHRoZSB6b25lIGNvbnRhaW5pbmcgdGhlIHJlY29yZCBpcyBub3QKKwkgICAgc2lnbmVkLiBEb2luZyB0aGlzIGhhcyBjb3N0cyAodHlwaWNhbGx5IG9uZSBvciB0d28gZXh0cmEKKwkgICAgdXBzdHJlYW0gcXVlcmllcykuIEl0IGFsc28gaGFzIGEgbmFzdHkgZmFpbHVyZSBtb2RlIGlmCisJICAgIGRuc21hc3EncyB1cHN0cmVhbSBuYW1lc2VydmVycyBhcmUgbm90IEROU1NFQyBjYXBhYmxlLiAKKwkgICAgV2l0aG91dCAtLWRuc3NlYy1jaGVjay11bnNpZ25lZCB1c2luZyBzdWNoIGFuIHVwc3RyZWFtCisJICAgIHNlcnZlciB3aWxsIHNpbXBseSByZXN1bHQgaW4gbm90IHF1ZXJpZXMgYmVpbmcgdmFsaWRhdGVkOyAKKwkgICAgd2l0aCAtLWRuc3NlYy1jaGVjay11bnNpZ25lZCBlbmFibGVkIGFuZCBhIAorCSAgICBETlNTRUMtaWdub3JhbnQgdXBzdHJlYW0gc2VydmVyLCBfYWxsXyBxdWVyaWVzIHdpbGwgZmFpbC4KKworCSAgICBOb3RlIHRoYXQgRE5TU0VDIHJlcXVpcmVzIHRoYXQgdGhlIGxvY2FsIHRpbWUgaXMgdmFsaWQgYW5kIAorCSAgICBhY2N1cmF0ZSwgaWYgbm90IHRoZW4gRE5TU0VDIHZhbGlkYXRpb24gd2lsbCBmYWlsLiBOVFAgCisJICAgIHNob3VsZCBiZSBydW5uaW5nLiBUaGlzIHByZXNlbnRzIGEgcHJvYmxlbSBmb3Igcm91dGVycworCSAgICB3aXRob3V0IGEgYmF0dGVyeS1iYWNrZWQgY2xvY2suIFRvIHNldCB0aGUgdGltZSBuZWVkcyBOVFAgCisJICAgIHRvIGRvIEROUyBsb29rdXBzLCBidXQgbG9va3VwcyB3aWxsIGZhaWwgdW50aWwgTlRQIGhhcyBydW4uCisJICAgIFRvIGFkZHJlc3MgdGhpcywgdGhlcmUncyBhIGZsYWcsIC0tZG5zc2VjLW5vLXRpbWVjaGVjayAKKwkgICAgd2hpY2ggZGlzYWJsZXMgdGhlIHRpbWUgY2hlY2tzIChvbmx5KSBpbiBETlNTRUMuIFdoZW4gZG5zbWFzcQorCSAgICBpcyBzdGFydGVkIGFuZCB0aGUgY2xvY2sgaXMgbm90IHN5bmNlZCwgdGhpcyBmbGFnIHNob3VsZAorCSAgICBiZSB1c2VkLiBBcyBzb29uIGFzIHRoZSBjbG9jayBpcyBzeW5jZWQsIFNJR0hVUCBkbnNtYXNxLiAKKwkgICAgVGhlIFNJR0hVUCBjbGVhcnMgdGhlIGNhY2hlIG9mIHBhcnRpYWxseS12YWxpZGF0ZWQgZGF0YSBhbmQKKwkgICAgcmVzZXRzIHRoZSBuby10aW1lY2hlY2sgZmxhZywgc28gdGhhdCBhbGwgRE5TU0VDIGNoZWNrcyAKKwkgICAgaGVuY2Vmb3J3YXJkIHdpbGwgYmUgY29tcGxldGUuCisJICAgIAorCSAgICBUaGUgZGV2ZWxvcG1lbnQgb2YgRE5TU0VDIGluIGRuc21hc3Egd2FzIHN0YXJ0ZWQgYnkgCisJICAgIEdpb3Zhbm5pIEJham8sIHRvIHdob20gaHVnZSB0aGFua3MgYXJlIG93ZWQuIEl0IGhhcyBiZWVuCisJICAgIHN1cHBvcnRlZCBieSBDb21jYXN0LCB3aG9zZSB0ZWNoZnVuZCBncmFudCBoYXMgYWxsb3dlZCBmb3IgCisJICAgIGFuIGludmFsdWFibGUgcGVyaW9kIG9mIGZ1bGwtdGltZSB3b3JrIHRvIGdldCBpdCB0byAKKwkgICAgYSB3b3JrYWJsZSBzdGF0ZS4KKyAKKwkgICAgQWRkIC0tcmV2LXNlcnZlci4gVGhhbmtzIHRvIERhdmUgVGFodCBmb3Igc3VnZ2VzdGluZyB0aGlzLgorCSAgICAKKwkgICAgQWRkIC0tc2VydmVycy1maWxlLiBBbGxvd3MgZHluYW1pYyB1cGRhdGUgb2YgdXBzdHJlYW0gc2VydmVycyAKKwkgICAgZnVsbCBhY2Nlc3MgdG8gY29uZmlndXJhdGlvbi4gCisKKwkgICAgQWRkIC0tbG9jYWwtc2VydmljZS4gQWNjZXB0IEROUyBxdWVyaWVzIG9ubHkgZnJvbSBob3N0cyAKKyAgICAgICAgICAgIHdob3NlIGFkZHJlc3MgaXMgb24gYSBsb2NhbCBzdWJuZXQsIGllIGEgc3VibmV0IGZvciB3aGljaCAKKyAgICAgICAgICAgIGFuIGludGVyZmFjZSBleGlzdHMgb24gdGhlIHNlcnZlci4gVGhpcyBvcHRpb24KKyAgICAgICAgICAgIG9ubHkgaGFzIGVmZmVjdCBpZiB0aGVyZSBhcmUgbm8gLS1pbnRlcmZhY2UgLS1leGNlcHQtaW50ZXJmYWNlLAorICAgICAgICAgICAgLS1saXN0ZW4tYWRkcmVzcyBvciAtLWF1dGgtc2VydmVyIG9wdGlvbnMuIEl0IGlzIGludGVuZGVkIAorICAgICAgICAgICAgdG8gYmUgc2V0IGFzIGEgZGVmYXVsdCBvbiBpbnN0YWxsYXRpb24sIHRvIGFsbG93CisgICAgICAgICAgICB1bmNvbmZpZ3VyZWQgaW5zdGFsbGF0aW9ucyB0byBiZSB1c2VmdWwgYnV0IGFsc28gc2FmZSBmcm9tIAorCSAgICBiZWluZyB1c2VkIGZvciBETlMgYW1wbGlmaWNhdGlvbiBhdHRhY2tzLgorCisJICAgIEZpeCBjcmFzaGVzIGluIGNhY2hlX2dldF9jbmFtZV90YXJnZXQoKSB3aGVuIGRhbmdsaW5nIENOQU1FcworCSAgICBlbmNvdW50ZXJlZC4gVGhhbmtzIHRvIEFuZHkgYW5kIHRoZSBydC1uNTZ1IHByb2plY3QgZm9yCisJICAgIGZpbmQgdGhpcyBhbmQgaGVscGluZyB0byBjaGFzZSBpdCBkb3duLgorCisJICAgIEZpeCB3cm9uZyBSQ09ERSBpbiBhdXRob3JpdGF0aXZlIEROUyByZXBsaWVzIHRvIFBUUiBxdWVyaWVzLiBUaGUKKwkgICAgY29ycmVjdCBhbnN3ZXIgd2FzIGluY2x1ZGVkLCBidXQgdGhlIFJDT0RFIHdhcyBzZXQgdG8gTlhET01BSU4uCisJICAgIFRoYW5rcyB0byBDcmFpZyBNY1F1ZWVuIGZvciBzcG90dGluZyB0aGlzLgorCisJICAgIE1ha2Ugc3RhdGlzdGljcyBhdmFpbGFibGUgYXMgRE5TIHF1ZXJpZXMgaW4gdGhlIC5iaW5kIFRMRCBhcyAKKwkgICAgd2VsbCBhcyBsb2dnaW5nIHRoZW0uCisKKwordmVyc2lvbiAyLjY4CisgICAgICAgICAgICBVc2UgcmFuZG9tIGFkZHJlc3NlcyBmb3IgREhDUHY2IHRlbXBvcmFyeSBhZGRyZXNzCisgICAgICAgICAgICBhbGxvY2F0aW9ucywgaW5zdGVhZCBvZiBhbGdvcml0aG1pY2FsbHkgZGV0ZXJtaW5lZCBzdGFibGUKKyAgICAgICAgICAgIGFkZHJlc3Nlcy4KKworCSAgICBGaXggYnVnIHdoaWNoIG1lYW50IHRoYXQgdGhlIERIQ1B2NiBEVUlEIHdhcyBub3QgYXZhaWxhYmxlCisJICAgIGluIERIQ1Agc2NyaXB0IHJ1bnMgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGUgZG5zbWFzcQorCSAgICBwcm9jZXNzIHdoaWNoIGNyZWF0ZWQgdGhlIERVSUQgZGUtbm92by4gT25jZSB0aGUgRFVJRCB3YXMKKwkgICAgY3JlYXRlZCBhbmQgc3RvcmVkIGluIHRoZSBsZWFzZSBmaWxlIGFuZCBkbnNtYXNxCisJICAgIHJlc3RhcnRlZCwgdGhpcyBidWcgZGlzYXBwZWFyZWQuCisKKwkgICAgRml4IGJ1ZyBpbnRyb2R1Y2VkIGluIDIuNjcgd2hpY2ggY291bGQgcmVzdWx0IGluIGVycm9uZW91cworCSAgICBOWERPTUFJTiByZXR1cm5zIHRvIENOQU1FIHF1ZXJpZXMuCisKKwkgICAgRml4IGJ1aWxkIGZhaWx1cmVzIG9uIE1hY09TIFggYW5kIG9wZW5CU0QuCisKKwkgICAgQWxsb3cgc3VibmV0IHNwZWNpZmljYXRpb25zIGluIC0tYXV0aC16b25lIHRvIGJlIGludGVyZmFjZSAKKwkgICAgbmFtZXMgYXMgd2VsbCBhcyBhZGRyZXNzIGxpdGVyYWxzLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlCisJICAgIHRvIGNvbmZpZ3VyZSBhdXRob3JpdGF0aXZlIEROUyB3aGVuIGxvY2FsIGFkZHJlc3MgcmFuZ2VzCisJICAgIGFyZSBkeW5hbWljIGFuZCB3b3JrcyBtdWNoIGJldHRlciB0aGFuIHRoZSBwcmV2aW91cworCSAgICB3b3JrLWFyb3VuZCB3aGljaCBleGVtcHRlZCBjb250cnVjdGVkIERIQ1AgcmFuZ2VzIGZyb20gdGhlCisJICAgIElQIGFkZHJlc3MgZmlsdGVyaW5nLiBBcyBhIGNvbnNlcXVlbmNlLCB0aGF0IHdvcmstYXJvdW5kCisJICAgIGlzIHJlbW92ZWQuIFVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcywgdGhpcyBjaGFuZ2Ugd2lsCisJICAgIGJyZWFrIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb246IGlmIHlvdSdyZSByZWx5aW5nIG9uIHRoZQorCSAgICBjb250cnVjdGVkLXJhbmdlIGV4Y2VwdGlvbiwgeW91IG5lZWQgdG8gY2hhbmdlIC0tYXV0aC16b25lCisJICAgIHRvIHNwZWNpZnkgdGhlIHNhbWUgaW50ZXJmYWNlIGFzIGlzIHVzZWQgdG8gY29uc3RydWN0IHlvdXIKKwkgICAgREhDUCByYW5nZXMsIHByb2JhYmx5IHdpdGggYSB0cmFpbGluZyAiLzYiIGxpa2UgdGhpczogCisJICAgIC0tYXV0aC16b25lPWV4YW1wbGUuY29tLGV0aDAvNiB0byBsaW1pdCB0aGUgYWRkcmVzc2VzIHRvCisJICAgIElQdjYgYWRkcmVzc2VzIG9mIGV0aDAuCisKKwkgICAgRml4IHByb2JsZW1zIHdoZW4gYWR2ZXJ0aXNpbmcgZGVsZXRlZCBJUHY2IHByZWZpeGVzLiBJZgorCSAgICB0aGUgcHJlZml4IGlzIGRlbGV0ZWQgKHJhdGhlciB0aGFuIHJlcGxhY2VkKSwgaXQgZG9lc24ndAorCSAgICBnZXQgYWR2ZXJ0aXNlZCB3aXRoIHplcm8gcHJlZmVycmVkIHRpbWUuIFRoYW5rcyB0byBUc2FjaGkKKwkgICAgZm9yIHRoZSBidWcgcmVwb3J0LiAKKworCSAgICBGaXggc2VnZmF1bHQgd2l0aCBzb21lIGxvY2FsbHkgY29uZmlndXJlZCBDTkFNRXMuIFRoYW5rcworCSAgICB0byBBbmRyZXcgQ2hpbGRzIGZvciBzcG90dGluZyB0aGUgcHJvYmxlbS4KKworCSAgICBGaXggbWVtb3J5IGxlYWsgb24gcmUtcmVhZGluZyAvZXRjL2hvc3RzIGFuZCBmcmllbmRzLAorCSAgICBpbnRyb2R1Y2VkIGluIDIuNjcuCisKKwkgICAgQ2hlY2sgdGhlIGFycml2YWwgaW50ZXJmYWNlIG9mIGluY29taW5nIEROUyBhbmQgVEZUUAorCSAgICByZXF1ZXN0cyB2aWEgSVB2NiwgZXZlbiBpbiAtLWJpbmQtaW50ZXJmYWNlcyBtb2RlLiBUaGlzCisJICAgIGlzbid0IHBvc3NpYmxlIGZvciBJUHY0IGFuZCBjYW4gZ2VuZXJhdGUgc2Nhcnkgd2FybmluZ3MsCisJICAgIGJ1dCBhcyBpdCdzIGFsd2F5cyBwb3NzaWJsZSBmb3IgSVB2NiAodGhlIEFQSSBhbHdheXMKKwkgICAgZXhpc3RzKSB0aGVuIHdlIHNob3VsZCBkbyBpdCBhbHdheXMuIAorCSAgICAKKwkgICAgVHdlYWsgdGhlIHJ1bGVzIG9uIHByZWZpeC1sZW5ndGhzIGluIC0tZGhjcC1yYW5nZSBmb3IKKwkgICAgSVB2Ni4gVGhlIG5ldyBydWxlIGlzIHRoYXQgdGhlIHNwZWNpZmllZCBwcmVmaXggbGVuZ3RoCisJICAgIG11c3QgYmUgbGFyZ2VyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHByZWZpeCBsZW5ndGggb2YgdGhlCisJICAgIGNvcnJlc3BvbmRpbmcgYWRkcmVzcyBvbiB0aGUgbG9jYWwgaW50ZXJmYWNlLiAKKworCit2ZXJzaW9uIDIuNjcKKwkgICAgRml4IGNyYXNoIGlmIHVwc3RyZWFtIHNlcnZlciByZXR1cm5zIFNFUlZGQUlMIHdoZW4KKwkgICAgLS1jb25udHJhY2sgaW4gdXNlLiBUaGFua3MgdG8gR2lhY29tbyBUYXp6YXJpIGZvciBmaW5kaW5nCisJICAgIHRoaXMgYW5kIHN1cHBseWluZyB0aGUgcGF0Y2guIAorCisJICAgIFJlcGFpciByZWdyZXNzaW9uIGluIDIuNjQuIFRoYXQgcmVsZWFzZSBzdG9wcGVkIHNlbmRpbmcKKwkgICAgbGVhc2UtdGltZSBpbmZvcm1hdGlvbiBpbiB0aGUgcmVwbHkgdG8gREhDUElORk9STQorCSAgICByZXF1ZXN0cywgb24gdGhlIGNvcnJlY3QgZ3JvdW5kcyB0aGF0IGl0IHdhcyBhIHN0YW5kYXJkcworCSAgICB2aW9sYXRpb24uIEhvd2V2ZXIsIHRoaXMgYnJva2UgdGhlIGRuc21hc3Etc3BlY2lmaWMKKwkgICAgZGhjcF9sZWFzZV90aW1lIHV0aWxpdHkuIE5vdywgREhDUElORk9STSByZXR1cm5zCisJICAgIGxlYXNlLXRpbWUgb25seSBpZiBpdCdzIHNwZWNpZmljYWxseSByZXF1ZXN0ZWQKKwkgICAgKG1haW50YWluaW5nIHN0YW5kYXJkcykgYW5kIHRoZSBkaGNwX2xlYXNlX3RpbWUgdXRpbGl0eQorCSAgICBoYXMgYmVlbiB0YXVnaHQgdG8gYXNrIGZvciBpdCAocmVzdG9yaW5nIGZ1bmN0aW9uYWxpdHkpLiAKKworCSAgICBGaXggLS1kaGNwLW1hdGNoLCAtLWRoY3AtdmVuZG9yY2xhc3MgYW5kIC0tZGhjcC11c2VyY2xhc3MKKwkgICAgdG8gd29yayB3aXRoIEJPT1RQIGFuZCB3ZWxsIGFzIERIQ1AuIFRoYW5rcyB0byBQZXRlcgorCSAgICBLb3JzZ2FhcmQgZm9yIHNwb3R0aW5nIHRoZSBwcm9ibGVtLiAKKworCSAgICBBZGQgLS1zeW50aC1kb21haW4uIFRoYW5rcyB0byBWaXNodmFuYW5kYSBJc2hheWEgZm9yCisJICAgIHN1Z2dlc3RpbmcgdGhpcy4KKworCSAgICBGaXggZmFpbHVyZSB0byBjb21waWxlIGlwc2V0LmMgaWYgb2xkIGtlcm5lbCBoZWFkZXJzIGFyZQorCSAgICBpbiB1c2UuIFRoYW5rcyB0byBFdWdlbmUgUnVkb3kgZm9yIHBvaW50aW5nIHRoaXMgb3V0LgorCisJICAgIEhhbmRsZSBJUHY0IGludGVyZmFjZS1hZGRyZXNzIGxhYmVscyBpbiBMaW51eC4gVGhlc2UgYXJlCisJICAgIG9mdGVuIHVzZWQgdG8gZW11bGF0ZSB0aGUgb2xkIElQLWFsaWFzIGFkZHJlc3Nlcy4gQmVmb3JlLAorCSAgICB1c2luZyAtLWludGVyZmFjZT1ldGgwIHdvdWxkIHNlcnZpY2UgYWxsIHRoZSBhZGRyZXNzZXMgb2YKKwkgICAgZXRoMCwgaW5jbHVkaW5nIG9uZXMgY29uZmlndXJlZCBhcyBhbGlhc2VzLCB3aGljaCBhcHBlYXIKKwkgICAgaW4gaWZjb25maWcgYXMgZXRoMDowLiBOb3csIG9ubHkgYWRkcmVzc2VzIHdpdGggdGhlIGxhYmVsCisJICAgIGV0aDAgYXJlIGFjdGl2ZS4gVGhpcyBpcyBub3QgYmFja3dhcmRzIGNvbXBhdGlibGU6IGlmIHlvdQorCSAgICB3YW50IHRvIGNvbnRpbnVlIHRvIGJpbmQgdGhlIGFsaWFzZXMgdG9vLCB5b3UgbmVlZCB0byBhZGQKKwkgICAgZWcuIC0taW50ZXJmYWNlPWV0aDA6MCB0byB0aGUgY29uZmlnLiAKKwkKKwkgICAgRml4ICJmYWlsZWQgdG8gc2V0IFNPX0JJTkRUT0RFVklDRSBvbiBESENQIHNvY2tldDogU29ja2V0IAorCSAgICBvcGVyYXRpb24gb24gbm9uLXNvY2tldCIgZXJyb3Igb24gc3RhcnR1cCB3aXRoCisJICAgIGNvbmZpZ3VyYXRpb25zIHdoaWNoIGhhdmUgZXhhY3RseSBvbmUgLS1pbnRlcmZhY2Ugb3B0aW9uCisJICAgIGFuZCBkbyBSQSBidXQgX25vdF8gREhDUHY2LiBUaGFua3MgdG8gVHJldmVyIEFkYW1zIGZvciB0aGUKKwkgICAgYnVnIHJlcG9ydC4KKworCSAgICBHZW5lcmFsaXNlIC0taW50ZXJmYWNlLW5hbWUgdG8gY29wZSB3aXRoIElQdjYgYWRkcmVzc2VzCisJICAgIGFuZCBtdWx0aXBsZSBhZGRyZXNzZXMgcGVyIGludGVyZmFjZSBwZXIgYWRkcmVzcyBmYW1pbHkuCisKKwkgICAgRml4IG9wdGlvbiBwYXJzaW5nIGZvciAtLWRoY3AtaG9zdCwgd2hpY2ggd2FzIGdlbmVyYXRpbmcgYQorCSAgICBzcHVyaW91cyBlcnJvciB3aGVuIGFsbCBzZXZlbiBwb3NzaWJsZSBpdGVtcyB3ZXJlCisJICAgIGluY2x1ZGVkLiBUaGFua3MgdG8gWmhpcWlhbmcgV2FuZyBmb3IgdGhlIGJ1ZyByZXBvcnQuCisKKwkgICAgUmVtb3ZlIHJlc3RyaWN0aW9uIG9uIHByZWZpeC1sZW5ndGggaW4gLS1hdXRoLXpvbmUuIFRoYW5rcworCSAgICB0byBUb2tlIEhvaWxhbmQtSm9yZ2Vuc2VuIGZvciBzdWdnZXN0aW5nIHRoaXMuCisKKwkgICAgTG9nIHdoZW4gdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRE5TIHF1ZXJpZXMgaXMKKwkgICAgcmVhY2hlZC4gVGhhbmtzIHRvIE1hcmNlbG8gU2FsaGFiIEJyb2dsaWF0byBmb3IgdGhlIHBhdGNoLgorCisJICAgIElmIHdpbGRjYXJkcyBhcmUgdXNlZCBpbiAtLWludGVyZmFjZSwgZG9uJ3QgYXNzdW1lIHRoYXQgCisJICAgIHRoZXJlIHdpbGwgb25seSBldmVyIGJlIG9uZSBhdmFpbGFibGUgaW50ZXJmYWNlIGZvciBESENQCisJICAgIGp1c3QgYmVjYXVzZSB0aGVyZSBpcyBvbmUgYXQgc3RhcnQtdXAuIE1vcmUgbWF5IGFwcGVhciwgc28KKwkgICAgd2UgY2FuJ3QgdXNlIFNPX0JJTkRUT0RFVklDRS4gVGhhbmtzIHRvIE5hdHJpbyBmb3IgdGhlIGJ1ZworCSAgICByZXBvcnQuIAorCisJICAgIEluY3JlYXNlIHRpbWVvdXQvbnVtYmVyIG9mIHJldHJpZXMgaW4gVEZUUCB0byBhY2NvbW9kYXRlCisJICAgIEF1ZGlvQ29kZXMgVm9pY2UgR2F0ZXdheXMgZG9pbmcgc3RyZWFtaW5nIHdyaXRlcyB0byBmbGFzaC4KKwkgICAgVGhhbmtzIHRvIERhbWlhbiBLYWN6a293c2tpIGZvciBzcG90dGluZyB0aGUgcHJvYmxlbS4KKworCSAgICBGaXggY3Jhc2ggd2l0aCBlbXB0eSBESENQIHN0cmluZyBvcHRpb25zIHdoZW4gYWRkaW5nIHplcm8KKwkgICAgdGVybWluYXRvci4gVGhhbmtzIHRvIFBhdHJpY2sgTWNMZWFuIGZvciB0aGUgYnVnIHJlcG9ydC4KKworCSAgICBBbGxvdyBob3N0bmFtZXMgdG8gc3RhcnQgd2l0aCBhIG51bWJlciwgYXMgYWxsb3dlZCBpbgorCSAgICBSRkMtMTEyMy4gVGhhbmtzIHRvIEt5bGUgTWVzdGVyeSBmb3IgdGhlIHBhdGNoLiAKKworCSAgICBGaXhlcyB0byBESENQIEZRRE4gb3B0aW9uIGhhbmRsaW5nOiBkb24ndCB0ZXJtaW5hdGUgRlFETgorCSAgICBpZiBkb21haW4gbm90IGtub3duIGFuZCBhbGxvdyBhIEZRRE4gb3B0aW9uIHdpdGggYmxhbmsKKwkgICAgbmFtZSB0byByZXF1ZXN0IHRoYXQgYSBGUUROIG9wdGlvbiBpcyByZXR1cm5lZCBpbiB0aGUKKwkgICAgcmVwbHkuIFRoYW5rcyB0byBSb3kgTWFycGxlcyBmb3IgdGhlIHBhdGNoLgorCisJICAgIE1ha2UgLS1jbGVhci1vbi1yZWxvYWQgYXBwbHkgdG8gc2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzCisJICAgIHZpYSBEQnVzIHRvby4KKworCSAgICBXaGVuIHRoZSBhZGRyZXNzIHdoaWNoIHRyaWdnZXJlZCB0aGUgY29uc3RydWN0aW9uIG9mIGFuCisJICAgIGFkdmVydGlzZWQgSVB2NiBwcmVmaXggZGlzYXBwZWFycywgY29udGludWUgdG8gYWR2ZXJ0aXNlIAorCSAgICB0aGUgcHJlZml4IGZvciB1cCB0byAyIGhvdXJzLCB3aXRoIHRoZSBwcmVmZXJyZWQgbGlmZXRpbWUKKwkgICAgc2V0IHRvIHplcm8uIFRoaXMgc2F0aXNmaWVzIFJGQyA2MjA0IDQuMyBMLTEzIGFuZCBtYWtlcworCSAgICB0aGluZ3Mgd29yayBiZXR0ZXIgaWYgYSBwcmVmaXggZGlzYXBwZWFycyB3aXRob3V0IGJlaW5nCisJICAgIGRlcHJlY2F0ZWQgZmlyc3QuIFRoYW5rcyB0byBVd2UgU2NoaW5kbGVyIGZvciBwZXJzdWFzaXZlbHkKKwkgICAgYXJndWluZyBmb3IgdGhpcy4KKworCSAgICBGaXggTUFDIGFkZHJlc3MgZW51bWVyYXRpb24gb24gKkJTRC4gVGhhbmtzIHRvIEJyYWQgU21pdGgKKwkgICAgZm9yIHRoZSBidWcgcmVwb3J0LgorCisJICAgIFN1cHBvcnQgUkZDLTQyNDIgaW5mb3JtYXRpb24tcmVmcmVzaC10aW1lIG9wdGlvbnMgaW4gdGhlIAorCSAgICByZXBseSB0byBESENQdjYgaW5mb3JtYXRpb24tcmVxdWVzdC4gVGhlIGxlYXNlIHRpbWUgb2YgdGhlCisgICAgICAgICAgICBzbWFsbGVzdCB2YWxpZCBkaGNwLXJhbmdlIGlzIHNlbnQuIFRoYW5rcyB0byBVd2UgU2NoaW5kbGVyIAorCSAgICBmb3Igc3VnZ2VzdGluZyB0aGlzLgorCisJICAgIE1ha2UgLS1saXN0ZW4tYWRkcmVzcyBoaWdoZXIgcHJpb3JpdHkgdGhhbiAtLWV4Y2VwdC1pbnRlcmZhY2UKKwkgICAgaW4gYWxsIGNpcmN1bXN0YW5jZXMuIFRoYW5rcyB0byBUaG9tYXMgSG9vZCBmb3IgdGhlIGJ1Z3JlcG9ydC4KKworCSAgICBQcm92aWRlIGluZGVwZW5kZW50IGNvbnRyb2wgb3ZlciB3aGljaCBpbnRlcmZhY2VzIGdldCBURlRQIAorCSAgICBzZXJ2aWNlLiBJZiBlbmFibGUtdGZ0cCBpcyBnaXZlbiBhIGxpc3Qgb2YgaW50ZXJmYWNlcywgdGhlbiBURlRQIAorCSAgICBpcyBwcm92aWRlZCBvbiB0aG9zZS4gV2l0aG91dCB0aGUgbGlzdCwgdGhlIHByZXZpb3VzIGJlaGF2aW91cgorCSAgICAocHJvdmlkZSBURlRQIHRvIHRoZSBzYW1lIGludGVyZmFjZXMgd2UgcHJvdmlkZSBESENQIHRvKSAKKwkgICAgaXMgcmV0YWluZWQuIFRoYW5rcyB0byBMb25uaWUgQWJlbGJlY2sgZm9yIHRoZSBzdWdnZXN0aW9uLgorCisJICAgIEFkZCAtLWRoY3AtcmVsYXkgY29uZmlnIG9wdGlvbi4gTWFueSB0aGFua3MgdG8gdnRzbC5uZXQKKwkgICAgZm9yIHNwb25zb3JpbmcgdGhpcyBkZXZlbG9wbWVudC4KKworCSAgICBGaXggY3Jhc2ggd2l0aCBlbXB0eSB0YWc6IGluIC0tZGhjcC1yYW5nZS4gVGhhbmtzIHRvCisJICAgIEthc3BhciBTY2hsZWlzZXIgZm9yIHRoZSBidWcgcmVwb3J0LgorCisJICAgIEFkZCAiYmFzZWxpbmUiIGFuZCAiYmxvYXRjaGVjayIgbWFrZWZpbGUgdGFyZ2V0cywgZm9yIAorCSAgICByZXZlYWxpbmcgc2l6ZSBjaGFuZ2VzIGR1cmluZyBkZXZlbG9wbWVudC4gVGhhbmtzIHRvCisJICAgIFZsYWRpc2xhdiBHcmlzaGVua28gZm9yIHRoZSBwYXRjaC4gCisKKwkgICAgQ29wZSB3aXRoIERIQ1B2NiBjbGllbnRzIHdoaWNoIHNlbmQgUkVRVUVTVHMgd2l0aG91dAorCSAgICBhZGRyZXNzIG9wdGlvbnMgLSB0cmVhdCB0aGVtIGFzIFNPTElDSVQgd2l0aCByYXBpZCBjb21taXQuCisKKwkgICAgU3VwcG9ydCBpZGVudGlmaWNhdGlvbiBvZiBjbGllbnRzIGJ5IE1BQyBhZGRyZXNzIGluCisJICAgIERIQ1B2Ni4gV2hlbiB1c2luZyBhIHJlbGF5LCB0aGUgcmVsYXkgbXVzdCBzdXBwb3J0IFJGQworCSAgICA2OTM5IGZvciB0aGlzIHRvIHdvcmsuIEl0IGFsd2F5cyB3b3JrcyBmb3IgZGlyZWN0bHkKKwkgICAgY29ubmVjdGVkIGNsaWVudHMuIFRoYW5rcyB0byBWbGFkaXNsYXYgR3Jpc2hlbmtvCisJICAgIGZvciBwcm9tcHRpbmcgdGhpcyBmZWF0dXJlLgorCSAgICAKKwkgICAgUmVtb3ZlIHRoZSBydWxlIGZvciBjb25zdHJ1Y3RlZCBESENQIHJhbmdlcyB0aGF0IHRoZSBsb2NhbAorCSAgICBhZGRyZXNzIG11c3QgYmUgZWl0aGVyIHRoZSBmaXJzdCBvciBsYXN0IGFkZHJlc3MgaW4gdGhlCisJICAgIHJhbmdlLiBUaGlzIHdhcyBvcmlnaW5hbGx5IHRvIGF2b2lkIFNMQUFDIGFkZHJlc3NlcywgYnV0CisJICAgIHdlIG5vdyBleHBsaWNpdGx5IGF1dG9jb25maWcgYW5kIHByaXZhY3kgYWRkcmVzc2VzIGluc3RlYWQuICAKKworCSAgICBVcGRhdGUgUG9saXNoIHRyYW5zbGF0aW9uLiBUaGFua3MgdG8gSmFuIFBzb3RhLgorCisJICAgIEZpeCBwcm9ibGVtIGluIERIQ1B2NiB2ZW5kb3JjbGFzcy91c2VyY2xhc3MgbWF0Y2hpbmcKKwkgICAgY29kZS4gVGhhbmtzIHRvIFRhbmd1eSBCb3V6ZWxvYyBmb3IgdGhlIHBhdGNoLgorCisgCSAgICBVcGRhdGUgU3BhbmlzaCB0cmFuc2FsYXRpb24uIFRoYW5rcyB0byBWaWNlbnRlIFNvcmlhbm8uCisKKwkgICAgQWRkIC0tcmEtcGFyYW0gb3B0aW9uLiBUaGFua3MgdG8gVmxhZGlzbGF2IEdyaXNoZW5rbyBmb3IKKwkgICAgaW5zcGlyYXRpb24gb24gdGhpcy4KKworCSAgICBBZGQgLS1hZGQtc3VibmV0IGNvbmZpZ3VyYXRpb24sIHRvIHRlbGwgdXBzdHJlYW0gRE5TCisJICAgIHNlcnZlcnMgd2hlcmUgdGhlIG9yaWdpbmFsIGNsaWVudCBpcy4gVGhhbmtzIHRvIEROU3RoaW5neQorCSAgICBmb3Igc3BvbnNvcmluZyB0aGlzIGZlYXR1cmUuCisKKwkgICAgQWRkIC0tcXVpZXQtZGhjcCwgLS1xdWlldC1kaGNwNiBhbmQgLS1xdWlldC1yYS4gVGhhbmtzIHRvCisJICAgIEtldmluIERhcmJ5c2hpcmUtQnJ5YW50IGZvciB0aGUgaW5pdGlhbCBwYXRjaC4KKworCSAgICBBbGxvdyBBL0FBQUEgcmVjb3JkcyBjcmVhdGVkIGJ5IC0taW50ZXJmYWNlLW5hbWUgdG8gYmUgdGhlCisJICAgIHRhcmdldCBvZiAtLWNuYW1lLiBUaGFua3MgdG8gSGFkbXV0IERhbmlzY2ggZm9yIHRoZQorCSAgICBzdWdnZXN0aW9uLiAKKworCSAgICBBdm9pZCB0cmVhdGluZyBhIC0tZGhjcC1ob3N0IHdoaWNoIGhhcyBhbiBJUHY2IGFkZHJlc3MKKwkgICAgYXMgZWxpZ2FibGUgZm9yIHVzZSB3aXRoIERIQ1B2NCBvbiB0aGUgZ3JvdW5kcyB0aGF0IGl0IGhhcworCSAgICBubyBhZGRyZXNzLCBhbmQgdmljZS12ZXJzYS4gVGhhbmtzIHRvIFl1cnkgS29ub3ZhbG92IGZvcgorCSAgICBzcG90dGluZyB0aGUgcHJvYmxlbS4KKworCSAgICBEbyBhIGJldHRlciBqb2IgY2FjaGluZyBkYW5nbGluZyBDTkFNRXMuIFRoYW5rcyB0byBZdmVzCisJICAgIERvcmZzbWFuIGZvciBzcG90dGluZyB0aGUgcHJvYmxlbS4KKworIAordmVyc2lvbiAyLjY2CisgICAgICAgICAgICBBZGQgdGhlIGFiaWxpdHkgdG8gYWN0IGFzIGFuIGF1dGhvcml0YXRpdmUgRE5TCisgICAgICAgICAgICBzZXJ2ZXIuIERuc21hc3EgY2FuIG5vdyBhbnN3ZXIgcXVlcmllcyBmcm9tIHRoZSB3aWRlciAnbmV0CisgICAgICAgICAgICB3aXRoIGxvY2FsIGRhdGEsIGFzIGxvbmcgYXMgdGhlIGNvcnJlY3QgTlMgcmVjb3JkcyBhcmUgc2V0CisgICAgICAgICAgICB1cC4gT25seSBsb2NhbCBkYXRhIGlzIHByb3ZpZGVkLCB0byBhdm9pZCBjcmVhdGluZyBhbiBvcGVuCisgICAgICAgICAgICBETlMgcmVsYXkuIFpvbmUgdHJhbnNmZXIgaXMgc3VwcG9ydGVkLCB0byBhbGxvdyBzZWNvbmRhcnkKKyAgICAgICAgICAgIHNlcnZlcnMgdG8gYmUgY29uZmlndXJlZC4KKworCSAgICBBZGQgImNvbnN0cnVjdGVkIERIQ1AgcmFuZ2VzIiBmb3IgREhDUHY2LiBUaGlzIGlzIGludGVuZGVkCisJICAgIGZvciBJUHY2IHJvdXRlcnMgd2hpY2ggZ2V0IHByZWZpeGVzIGR5bmFtaWNhbGx5IHZpYSBwcmVmaXgKKwkgICAgZGVsZWdhdGlvbi4gV2l0aCBzdWl0YWJsZSBjb25maWd1cmF0aW9uLCBzdGF0ZWZ1bCBESENQdjYKKwkgICAgYW5kIFJBIGNhbiBoYXBwZW4gYXV0b21hdGljYWxseSBhcyBwcmVmaXhlcyBhcmUgZGVsZWdhdGVkCisJICAgIGFuZCB0aGVuIGRlcHJlY2F0ZWQsIHdpdGhvdXQgaGF2aW5nICB0byByZS13cml0ZSB0aGUKKwkgICAgZG5zbWFzcSBjb25maWd1cmF0aW9uIGZpbGUgb3IgcmVzdGFydCB0aGUgZGFlbW9uLiBUaGFua3MgdG8KKwkgICAgU3RldmVuIEJhcnRoIGZvciBleHRlbnNpdmUgdGVzdGluZyBhbmQgZGV2ZWxvcG1lbnQgd29yayBvbgorCSAgICB0aGlzIGlkZWEuCisKKwkgICAgRml4IGNyYXNoIG9uIHN0YXJ0dXAgb24gU29sYXJpcyAxMS4gUmVncmVzc2lvbiBwcm9iYWJseQorCSAgICBpbnRyb2R1Y2VkIGluIDIuNjEuICBUaGFua3MgdG8gR2VvZmYgSm9obnN0b25lIGZvciB0aGUKKwkgICAgcGF0Y2guCisKKwkgICAgQWRkIGNvZGUgdG8gbWFrZSBiZWhhdmlvdXIgZm9yIFRDUCBETlMgcmVxdWVzdHMgdGhhdCBzYW1lCisJICAgIGFzIGZvciBVRFAgcmVxdWVzdHMsIHdoZW4gYSByZXF1ZXN0IGFycml2ZXMgZm9yIGFuIGFsbG93ZWQgCisJICAgIGFkZHJlc3MsIGJ1dCB2aWEgYSBiYW5uZWQgaW50ZXJmYWNlLiBUaGlzIGNoYW5nZSBpcyBvbmx5CisJICAgIGFjdGl2ZSBvbiBMaW51eCwgc2luY2UgdGhlIHJlbGV2YW50IEFQSSBpcyBtaXNzaW5nIChBRkFJSykKKwkgICAgb24gb3RoZXIgcGxhdGZvcm1zLiBNYW55IHRoYW5rcyB0byBUb21hcyBIb3p6YSBmb3IKKwkgICAgc3BvdHRpbmcgdGhlIHByb2JsZW0sIGFuZCBkb2luZyBpbnZhbHVhYmxlIGRpc2NvdmVyeSBvZgorCSAgICB0aGUgb2JzY3VyZSBhbmQgdW5kb2N1bWVudGVkIEFQSSByZXF1aXJlZCBmb3IgdGhlIHNvbHV0aW9uLgorCisJICAgIERvbid0IHNlbmQgdGhlIGRlZmF1bHQgREhDUCBvcHRpb24gYWR2ZXJ0aXNpbmcgZG5zbWFzcSBhcworCSAgICB0aGUgbG9jYWwgRE5TIHNlcnZlciBpZiBkbnNtYXNxIGlzIGNvbmZpZ3VyZWQgdG8gbm90IGFjdAorCSAgICBhcyBETlMgc2VydmVyLCBvciBpdCdzIGNvbmZpZ3VyZWQgdG8gYSBub24tc3RhbmRhcmQgcG9ydC4KKyAKKyAgICAgICAgICAgIEFkZCBETlNNQVNRX0NJUkNVSVRfSUQsIEROU01BU1FfU1VCQ1JJQkVSX0lELAorICAgICAgICAgICAgRE5TTUFTUV9SRU1PVEVfSUQgdmFyaWFibGVzIHRvIHRoZSBlbnZpcm9ubWVudCBvZiB0aGUKKyAgICAgICAgICAgIGxlYXNlLWNoYW5nZSBzY3JpcHQgKGFuZCB0aGUgY29ycmVzcG9uZGluZyBMdWEpLiBUaGVzZSBob2xkCisgICAgICAgICAgICBpbmZvcm1hdGlvbiBpbnNlcnRlZCBpbnRvIHRoZSBESENQIHJlcXVlc3QgYnkgYSBESENQIHJlbGF5CisgICAgICAgICAgICBhZ2VudC4gVGhhbmtzIHRvIExha2VmaWVsZCBDb21tdW5pY2F0aW9ucyBmb3IgcHJvdmlkaW5nIGEKKyAgICAgICAgICAgIGJvdW50eSBmb3IgdGhpcyBhZGRpdGlvbi4KKyAKKwkgICAgRml4ZWQgY3Jhc2gsIGludHJvZHVjZWQgaW4gMi42NCwgd2hpbHN0IGhhbmRsaW5nIERIQ1B2NgorCSAgICBpbmZvcm1hdGlvbi1yZXF1ZXN0cyB3aXRoIHNvbWUgY29tbW9uIGNvbmZpZ3VyYXRpb25zLgorCSAgICBUaGFua3MgdG8gUm9iZXJ0IE0uIEFsYnJlY2h0IGZvciB0aGUgYnVnIHJlcG9ydCBhbmQgCisJICAgIGNoYXNpbmcgdGhlIHByb2JsZW0uCisKKwkgICAgQWRkIC0taXBzZXQgb3B0aW9uLiBUaGFua3MgdG8gSmFzb24gQS4gRG9uZW5mZWxkIGZvciB0aGUgCisJICAgIHBhdGNoLgorCisJICAgIERvbid0IGVycm9uZW91c2x5IHJlamVjdCBzb21lIG9wdGlvbiBuYW1lcyBpbiAtLWRoY3AtbWF0Y2gKKwkgICAgb3B0aW9ucy4gVGhhbmtzIHRvIEJlbmVkaWt0IEhvY2hzdHJhc3NlciBmb3IgdGhlIGJ1ZyByZXBvcnQuCisJICAgIAorCSAgICBBbGxvdyBhIHRyYWlsaW5nICcqJyB3aWxkY2FyZCBpbiBhbGwgaW50ZXJmYWNlLW5hbWUKKwkgICAgY29uZmlndXJhdGlvbnMuIFRoYW5rcyB0byBDaHJpc3RpYW4gUGFycGFydCBmb3IgdGhlIHBhdGNoLgorCisJICAgIEhhbmRsZSB0aGUgc2l0dWF0aW9uIHdoZXJlIGxpYmMgaGVhZGVycyBkZWZpbmUKKwkgICAgU09fUkVVU0VQT1JULCBidXQgdGhlIGtlcm5lbCBpbiB1c2UgZG9lc24ndCwgdG8gY29wZSB3aXRoCisJICAgIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBvcHRpb24gdG8gTGludXguIFRoYW5rcyB0byBSaWNoCisJICAgIEZlbGtlciBmb3IgdGhlIGJ1ZyByZXBvcnQuCisKKwkgICAgVXBkYXRlIFBvbGlzaCB0cmFuc2xhdGlvbi4gVGhhbmtzIHRvIEphbiBQc290YS4KKworCSAgICBGaXggY3Jhc2ggaWYgdGhlIGNvbmZpZ3VyZWQgREhDUCBsZWFzZSBsaW1pdCBpcworCSAgICByZWFjaGVkLiBSZWdyZXNzaW9uIG9jY3VycmVkIGluIDIuNjEuIFRoYW5rcyB0byBUc2FjaGkgZm9yCisJICAgIHRoZSBidWcgcmVwb3J0LiAKKwkgICAgCisJICAgIFVwZGF0ZSB0aGUgRnJlbmNoIHRyYW5zbGF0aW9uLiBUaGFua3MgdG8gR2lsZGFzIGxlIE5hZGFuLgorCisgIAordmVyc2lvbiAyLjY1CisJICAgIEZpeCByZWdyZXNzaW9uIHdoaWNoIGJyb2tlIGZvcndhcmRpbmcgb2YgcXVlcmllcyBzZW50IHZpYQorCSAgICBUQ1Agd2hpY2ggYXJlIG5vdCBmb3IgQSBhbmQgQUFBQSBhbmQgd2hpY2ggd2VyZSBkaXJlY3RlZCB0bworCSAgICBub24tZGVmYXVsdCBzZXJ2ZXJzLiBUaGFua3MgdG8gTmlheCBmb3IgdGhlIGJ1ZyByZXBvcnQuCisKKwkgICAgRml4IGZhaWx1cmUgdG8gYnVpbGQgd2l0aCBESENQIHN1cHBvcnQgZXhjbHVkZWQuIFRoYW5rcyB0byAKKwkgICAgR3VzdGF2byBaYWNhcmlhcyBmb3IgdGhlIHBhdGNoLgorCSAgICAKKwkgICAgRml4IG5hc3R5IHJlZ3Jlc3Npb24gaW4gMi42NCB3aGljaCBjb21wbGV0ZWx5IGJyb2tlIGNhY2hlaW5nLgorCisKK3ZlcnNpb24gMi42NAorICAgICAgICAgICAgSGFuZGxlIERIQ1AgRlFETiBvcHRpb25zIHdpdGggYWxsIGZsYWcgYml0cyB6ZXJvIGFuZAorICAgICAgICAgICAgLS1kaGNwLWNsaWVudC11cGRhdGUgc2V0LiBUaGFua3MgdG8gQmVybmQgS3J1bWJyb2VjayBmb3IKKyAgICAgICAgICAgIHNwb3R0aW5nIHRoZSBwcm9ibGVtLgorCisJICAgIEZpbmVzc2UgdGhlIGNoZWNrIGZvciAvZXRjL2hvc3RzIG5hbWVzIHdoaWNoIGNvbmZsaWN0IHdpdGgKKwkgICAgREhDUCBuYW1lcy4gUHJldmlvdXNseSBhIG5hbWUvYWRkcmVzcyBwYWlyIGluIC9ldGMvaG9zdHMKKwkgICAgd2hpY2ggZGlkbid0IG1hdGNoIHRoZSBuYW1lL2FkZHJlc3Mgb2YgYSBESENQIGxlYXNlIHdvdWxkCisJICAgIGdlbmVyYXRlIGEgd2FybmluZy4gTm93IHRoYXQgb25seSBoYXBwZXNuIGlmIHRoZXJlIGlzIG5vdAorCSAgICBhbHNvIGEgbWF0Y2guIFRoaXMgYWxsb3dzIG11bHRpcGxlIGFkZHJlc3NlcyBmb3IgYSBuYW1lIGluIAorCSAgICAvZXRjL2hvc3RzIHdpdGggb25lIG9mIHRoZW0gYXNzaWduZWQgdmlhIERIQ1AuCisKKwkgICAgRml4IGJyb2tlbiB2ZW5kb3Itb3B0aW9uIHByb2Nlc3NpbmcgZm9yIEJPT1RQLiBUaGFua3MgdG8KKwkgICAgSGFucy1Kb2FjaGltIEJhYWRlciBmb3IgdGhlIGJ1ZyByZXBvcnQuCisKKwkgICAgRG9uJ3QgcmVwb3J0IHNwdXJpb3VzIG5ldGxpbmsgZXJyb3JzLCByZWdyZXNzaW9uIGluCisJICAgIDIuNjMuIFRoYW5rcyB0byBWbGFkaXNsYXYgR3Jpc2hlbmtvIGZvciB0aGUgcGF0Y2guCisKKwkgICAgRmxhZyBESENQIG9yIERIQ1B2NiBpbiBzdGFydXAgbG9nZ2luZy4gVGhhbmtzIHRvIAorCSAgICBWbGFkaXNsYXYgR3Jpc2hlbmtvIGZvciB0aGUgcGF0Y2guCisKKwkgICAgQWRkIFNldFNlcnZlcnNFeCBtZXRob2QgaW4gREJ1cyBpbnRlcmZhY2UuIFRoYW5rcyB0byBEYW4KKwkgICAgV2lsbGlhbXMgZm9yIHRoZSBwYXRjaC4KKworCSAgICBBZGQgU2V0RG9tYWluU2VydmVycyBtZXRob2QgaW4gREJ1cyBpbnRlcmZhY2UuIFRoYW5rcyB0bworCSAgICBSb3kgTWFycGxlcyBmb3IgdGhlIHBhdGNoLgorCisJICAgIEZpeCBidWlsZCB3aXRoIGxhdGVyIEx1YSBsaWJyYXJpZXMuIFRoYW5zayB0byBDcmlzdGlhbgorCSAgICBSb2RyaWd1ZXogZm9yIHRoZSBwYXRjaC4KKworCSAgICBBZGQgLS1tYXgtY2FjaGUtdHRsIG9wdGlvbi4gVGhhbmtzIHRvIERlbm5pcyBLYWFyc2VtYWtlcgorCSAgICBmb3IgdGhlIHBhdGNoLgorCisJICAgIEZpeCBicmVha2FnZSBvZiAtLWhvc3QtcmVjb3JkIHBhcnNpbmcsIHJlc3VsdGluZyBpbgorCSAgICBpbmZpbnRlIGxvb3AgYXQgc3RhcnR1cC4gUmVncmVzc2lvbiBpbiAyLjYzLiBUaGFua3MgdG8KKwkgICAgSGFpbSBHZWxmZW5iZXluIGZvciBzcG90dGluZyB0aGlzLgorCisJICAgIFNldCBTT19SRVVTRUFERFJFU1MgYW5kIFNPX1Y2T05MWSBvcHRpb25zIG9uIHRoZSBESENQdjYKKwkgICAgc29ja2V0LCB0aGlzIGFsbG93cyBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgZG5zbWFzcSBvbiBhCisJICAgIHNpbmdsZSBtYWNoaW5lLCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIERIQ1B2NC4gVGhhbmtzIHRvCisJICAgIEdlbmUgQ3phcmNpbnNraSBhbmQgVmxhZGlzbGF2IEdyaXNoZW5rbyBmb3Igd29yayBvbiB0aGlzLgorCisJICAgIEZpeCBESENQdjYgdG8gZG8gYWNjZXNzIGNvbnRyb2wgY29ycmVjdGx5IHdoZW4gaXQncyAKKwkgICAgY29uZmlndXJlZCB3aXRoIC0tbGlzdGVuLWFkZHJlc3MuIFRoYW5rcyB0bworCSAgICBHZW5lIEN6YXJjaW5za2kgZm9yIHNvcnRpbmcgdGhpcyBvdXQuIAorCisJICAgIEFkZCBhICJ3aWxkY2FyZCIgZGhjcC1yYW5nZSB3aGljaCB3b3JrcyBmb3IgYW55IElQdjYKKwkgICAgc3VibmV0LCAtLWRoY3AtcmFuZ2U9Ojosc3RhdGljIFVzZWZ1bCBmb3IgU3RhdGVsZXNzIAorCSAgICBESENQdjYuIFRoYW5rcyB0byBWbGFkaXNsYXYgR3Jpc2hlbmtvIGZvciB0aGUgcGF0Y2guCisKKwkgICAgRG9uJ3QgaW5jbHVkZSBsZWFzZS10aW1lIGluIERIQ1BBQ0sgcmVwbGllcyB0byBESENQSU5GT1JNCisJICAgIHF1ZXJpZXMsIHNpbmNlIFJGQy0yMTMxIHNheXMgd2Ugc2hvdWxkbid0LiBUaGFua3MgdG8KKwkgICAgV291dGVyIEliZW5zIGZvciBwb2ludGluZyB0aGlzIG91dC4gIAorCisJICAgIE1ha2VmaWxlIHR3ZWFrIHRvIGRvIGRlcGVuZGVuY3kgY2hlY2tpbmcgb24gaGVhZGVyIGZpbGVzLgorCSAgICBUaGFua3MgdG8gSm9oYW4gUGVldGVycyBmb3IgdGhlIHBhdGNoLgorCisJICAgIENoZWNrIGludGVyZmFjZSBmb3Igb3V0Z29pbmcgdW5zb2xpY2l0ZWQgcm91dGVyIAorCSAgICBhZHZlcnRpc2VtZW50cywgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBpbnRlcmZhY2UgYWRkcmVzcyAKKwkgICAgY29uZmlndXJhdGlvbi4gVGhhbmtzIHRvIEdlbmUgQ3phcmluc2tpIGZvciB0aGUgcGF0Y2guCisKKwkgICAgSGFuZGxlIGJldHRlciBhdHRlbXB0cyB0byB0cmFuc21pdCBvbiBpbnRlcmZhY2VzIHdoaWNoIGFyZQorCSAgICBzdGlsbCBkb2luZyBEQUQsIGFuZCBzcGVjaWZpY2FsbHkgZG8gbm90IGp1c3QgdHJhbnNtaXQKKwkgICAgd2l0aG91dCBzZXR0aW5nIHNvdXJjZSBhZGRyZXNzIGFuZCBpbnRlcmZhY2UsIHNpbmNlIHRoaXMKKwkgICAgY2FuIGNhdXNlIHZlcnkgcHV6emxpbmcgZWZmZWN0cyB3aGVuIGEgcm91dGVyCisJICAgIGFkdmVydGlzZW1lbnQgZ29lcyBhc3RyYXkuIFRoYW5rcyBhZ2FpbiB0byBHZW5lIEN6YXJpbnNraS4KKworCSAgICBHZXQgUkEgdGltZXJzIHJpZ2h0IHdoZW4gdGhlcmUgaXMgbW9yZSB0aGFuIG9uZQorCSAgICBkaGNwLXJhbmdlIG9uIGEgc3VibmV0LgorCSAgICAKKwordmVyc2lvbiAyLjYzCisgICAgICAgICAgICBEbyBkdXBsaWNhdGUgZGhjcC1ob3N0IGFkZHJlc3MgY2hlY2sgaW4gLS10ZXN0IG1vZGUuCisKKwkgICAgQ2hlY2sgdGhhdCB0ZnRwLXJvb3QgZGlyZWN0b3JpZXMgYXJlIGFjY2Vzc2libGUgYmVmb3JlCisJICAgIHN0YXJ0LXVwLiBUaGFua3MgdG8gRGFuaWVsIFZlaWxsYXJkIGZvciB0aGUgaW5pdGlhbCBwYXRjaC4KKworCSAgICBBbGxvdyBtb3JlIHRoYW4gb25lIC0tdGZwLXJvb3QgZmxhZy4gVGhlIHBlci1pbnRlcmZhY2UKKwkgICAgc3R1ZmYgaXMgcG9pbnRsZXNzIHdpdGhvdXQgdGhhdC4KKworCSAgICBBZGQgLS1iaW5kLWR5bmFtaWMuIEEgaHlicmlkIG1vZGUgYmV0d2VlbiB0aGUgZGVmYXVsdCBhbmQKKwkgICAgLS1iaW5kLWludGVyZmFjZXMgd2hpY2ggY29wZXMgd2l0aCBkeW5hbWljYWxseSBjcmVhdGVkCisJICAgIGludGVyZmFjZXMuIAorCSAgICAKKwkgICAgQSBjb3VwbGUgb2YgZml4ZXMgdG8gdGhlIGJ1aWxkIHN5c3RlbSBmb3IgQW5kcm9pZC4gVGhhbmtzCisJICAgIHRvIE1ldGluIEtheWEgZm9yIHRoZSBwYXRjaGVzLgorCisJICAgIFJlbW92ZSB0aGUgaW50ZXJmYWNlOjxpbnRlcmZhY2U+IGFyZ3VtZW50IGluIC0tZGhjcC1yYW5nZSwgYW5kCisJICAgIHRoZSBpbnRlcmZhY2UgYXJndW1lbnQgdG8gLS1lbmFibGUtdGZ0cC4gVGhlc2Ugd2VyZSBhCisJICAgIHN0aWxsLWJvcm4gYXR0ZW1wdCB0byBhbGxvdyBhdXRvbWF0aWMgaXNvbGF0ZWQKKwkgICAgY29uZmlndXJhdGlvbiBieSBsaWJ2aXJ0LCBidXQgaGF2ZSBuZXZlciAodG8gbXkga25vd2xlZGdlKQorCSAgICBiZWVuIHVzZWQsIGhhZCB2ZXJ5IHN0cmFuZ2Ugc2VtYW50aWNzLCBhbmQgaGF2ZSBiZWVuCisJICAgIHN1cGVyY2VkZWQgYnkgb3RoZXIgbWVjaGFuaXNtcy4gCisKKwkgICAgRml4ZWQgYnVnIGxvZ2dpbmcgZmlsZW5hbWVzIHdoZW4gZHVwbGljYXRlIGRoY3AtaG9zdAorCSAgICBhZGRyZXNzZXMgYXJlIGZvdW5kLiBUaGFua3MgdG8gSm9obiBIYW5rcyBmb3IgdGhlIHBhdGNoLgorCisJICAgIEZpeCByZWdyZXNzaW9uIGluIDIuNjEgd2hpY2ggYnJva2UgY2FjaGluZyBvZiBDTkFNRQorCSAgICBjaGFpbnMuIFRoYW5rcyB0byBBdHVsIEd1cHRhIGZvciB0aGUgYnVnIHJlcG9ydC4KKworCSAgICBBbGxvdyB0aGUgdGFyZ2V0IG9mIGEgLS1jbmFtZSBmbGFnIHRvIGJlIGFub3RoZXIgLS1jbmFtZS4KKworICAgICAgICAgICAgVGVhY2ggREhDUHY2IGFib3V0IHRoZSBSRkMgNDI0MiBpbmZvcm1hdGlvbi1yZWZyZXNoLXRpbWUKKwkgICAgb3B0aW9uLCBhbmQgYWRkIHBhcnNpbmcgaWYgdGhlIG1pbnV0ZXMsIGhvdXJzIGFuZCBkYXlzCisJICAgIGZvcm1hdCBmb3Igb3B0aW9ucy4gVGhhbmtzIHRvIEZyYW5jb2lzLVhhdmllciBMZSBCYWlsIGZvcgorCSAgICB0aGUgc3VnZ2VzdGlvbi4KKworCSAgICBBbGxvdyAidyIgKGZvciB3ZWVrKSBhcyBtdWx0aXBsaWVyIGluIGxlYXNlIHRpbWVzLCBhcyB3ZWxsCisJICAgIGFzIHNlY29uZHMsIG1pbnV0ZXMsIGhvdXJzIGFuZCBkYXlzLiAgw4FsdmFybyBHw6FtZXogTWFjaGFkbyAKKwkgICAgc3BvdHRlZCB0aGUgb21taXNzaW9uLgorIAorCSAgICBVcGRhdGUgRnJlbmNoIHRyYW5zbGF0aW9uLiBUaGFua3MgdG8gR2lsZGFzIExlIE5hZGFuLgorCisJICAgIEFsbG93IGEgREJ1cyBzZXJ2aWNlIG5hbWUgdG8gYmUgZ2l2ZW4gd2l0aCAtLWVuYWJsZS1kYnVzCisJICAgIHdoaWNoIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCwKKwkgICAgdWsub3JnLnRoZWtlbGxleXMuZG5zbWFzcS4gVGhhbmtzIHRvIE1hdGhpZXUKKwkgICAgVHJ1ZGVsLUxhcGllcnJlIGZvciB0aGUgcGF0Y2guIAorCisJICAgIFNldCB0aGUgInByZWZpeCBvbi1saW5rIiBiaXQgaW4gUm91dGVyCisJICAgIEFkdmVydGlzZW1lbnRzLiBUaGFua3MgdG8gR3VpIElyaWJhcnJlbiBmb3IgdGhlIHBhdGNoLgorCisKK3ZlcnNpb24gMi42MgorICAgICAgICAgICAgVXBkYXRlIEdlcm1hbiB0cmFuc2xhdGlvbi4gVGhhbmtzIHRvIENvbnJhZCBLb3N0ZWNraS4KKworCSAgICBDb3BlIHdpdGggcm91dGVyLXNvbGljdCBwYWNrZXRzIHdpY2ggZG9uJ3QgaGF2ZSBhIHZhbGlkIAorCSAgICBzb3VyY2UgYWRkcmVzcy4gVGhhbmtzIHRvIFZsYWRpc2xhdiBHcmlzaGVua28gZm9yIHRoZSBwYXRjaC4KKworCSAgICBGaXhlZCBidWcgd2hpY2ggY2F1c2VkIG1pc3NpbmcgcGVyaW9kaWMgcm91dGVyCisJICAgIGFkdmVydGlzZW1lbnRzIHdpdGggc29tZSBjb25maWd1cmF0aW9ucy4gVGhhbmtzIHRvCisJICAgIFZsYWRpc2xhdiBHcmlzaGVua28gZm9yIHRoZSBwYXRjaC4KKworCSAgICBGaXhlZCBidWcgd2hpY2ggYnJva2UgREhDUHY2L1JBIHdpdGggcHJlZml4IGxlbmd0aHMgCisJICAgIHdoaWNoIGFyZSBub3QgZGl2aXNpYmxlIGJ5IDguIFRoYW5rcyB0byBBbmRyZSBDb2V0emVlIAorCSAgICBmb3Igc3BvdHRpbmcgdGhpcy4KKworCSAgICBGaXggbm9uLXJlc3BvbnNlIHRvIHJvdXRlci1zb2xpY2l0YXRpb25zIHdoZW4KKwkgICAgcm91dGVyLWFkdmVydGlzZW1lbnQgY29uZmlndXJlZCwgYnV0IERIQ1B2NiBub3QKKwkgICAgY29uZmlndXJlZC4gVGhhbmtzIHRvIE1hcmllbiBad2FydCBmb3IgdGhlIHBhdGNoLgorCisJICAgIEFkZCAtLWRucy1yciwgdG8gYWxsb3cgYXJiaXRyYXJ5IEROUyByZXNvdXJjZSByZWNvcmRzLgorCisJICAgIEZpeGVkIGJ1ZyB3aGljaCBicm9rZSBSQSBzY2hlZHVsaW5nIHdoZW4gYW4gaW50ZXJmYWNlIGhhZAorCSAgICB0d28gYWRkcmVzc2VzIGluIHRoZSBzYW1lIG5ldHdvcmsuIFRoYW5rcyB0byBKaW0gQm9zIGZvcgorCSAgICBoaXMgaGVscCBuYWlsaW5nIHRoaXMuCisKK3ZlcnNpb24gMi42MQorCSAgICBSZS13cml0ZSBpbnRlcmZhY2UgZGlzY292ZXJ5IGNvZGUgb24gKkJTRCB0byB1c2UKKwkgICAgZ2V0aWZhZGRycy4gVGhpcyBpcyBtb3JlIHBvcnRhYmxlLCBtb3JlIHN0cmFpZ2h0Zm9yd2FyZCwKKwkgICAgYW5kIGFsbG93cyB1cyB0byBmaW5kIHRoZSBwcmVmaXggbGVuZ3RoIGZvciBJUHY2CisJICAgIGFkZHJlc3Nlcy4KKworCSAgICBBZGQgcmEtbmFtZXMsIHJhLXN0YXRlbGVzcyBhbmQgc2xhYWMga2V5d29yZHMgZm9yIERIQ1B2Ni4KKwkgICAgRG5zbWFzcSBjYW4gbm93IHN5bnRoZXNpc2UgQUFBQSByZWNvcmRzIGZvciBkdWFsLXN0YWNrIAorICAgICAgICAgICAgaG9zdHMgd2hpY2ggZ2V0IElQdjYgYWRkcmVzc2VzIHZpYSBTTEFBQy4gSXQgaXMgYWxzbyBub3cgCisJICAgIHBvc3NpYmxlIHRvIHVzZSBTTEFBQyBhbmQgc3RhdGVsZXNzIERIQ1B2NiwgYW5kIHRvIAorCSAgICB0ZWxsIGNsaWVudHMgdG8gdXNlIFNMQUFDIGFkZHJlc3NlcyBhcyB3ZWxsIGFzIERIQ1Agb25lcy4KKwkgICAgVGhhbmtzIHRvIERhdmUgVGFodCBmb3IgaGVscCB3aXRoIHRoaXMuCisKKwkgICAgQWRkIC0tZGhjcC1kdWlkIHRvIGFsbG93IERVSUQtRU4gdWlkcyB0byBiZSB1c2VkLgorCisJICAgIEV4cGxpY2l0eSBzZW5kIERIQ1B2NiByZXBsaWVzIHRvIHRoZSBjb3JyZWN0IHBvcnQsIGluc3RlYWQKKwkgICAgb2YgcmVseWluZyBvbiBjbGllbnRzIHRvIHNlbmQgcmVxdWVzdHMgd2l0aCB0aGUgY29ycmVjdAorCSAgICBzb3VyY2UgYWRkcmVzcywgc2luY2UgYXQgbGVhc3Qgb25lIGNsaWVudCBpbiB0aGUgd2lsZCBnZXRzCisJICAgIHRoaXMgd3JvbmcuIFRoYW5rcyB0byBDb25yYWQgS29zdGVja2kgZm9yIGhlbHAgdHJhY2tpbmcKKwkgICAgdGhpcyBkb3duLgorCisJICAgIFNlbmQgYSBwcmVmZXJlbmNlIHZhbHVlIG9mIDI1NSBpbiBESENQdjYgcmVwbGllcyB3aGVuIAorCSAgICAtLWRoY3AtYXV0aG9yaXRhdGl2ZSBpcyBpbiBlZmZlY3QuIFRoaXMgdGVsbHMgY2xpZW50cyBub3QKKwkgICAgdG8gd2FpdCBhcm91bmQgZm9yIG90aGVyIERIQ1Agc2VydmVycy4KKworCSAgICBCZXR0ZXIgbG9nZ2luZyBvZiBESENQdjYgb3B0aW9ucy4KKworCSAgICBBZGQgLS1ob3N0LXJlY29yZC4gVGhhbmtzIHRvIFJvYiBad2lzc2xlciBmb3IgdGhlCisJICAgIHN1Z2dlc3Rpb24uCisKKwkgICAgSW52b2tlIHRoZSBESENQIHNjcmlwdCB3aXRoIGFjdGlvbiAidGZ0cCIgd2hlbiBhIFRGVFAgZmlsZQorCSAgICB0cmFuc2ZlciBjb21wbGV0ZXMuIFRoZSBzaXplIG9mIHRoZSBmaWxlLCBhZGRyZXNzIHRvIHdoaWNoCisJICAgIGl0IHdhcyBzZW50IGFuZCBjb21wbGV0ZSBwYXRobmFtZSBhcmUgc3VwcGxpZWQuIE5vdGUgdGhhdAorCSAgICB2ZXJzaW9uIDIuNjAgaW50cm9kdWNlZCBzb21lIHNjcmlwdCBpbmNvbXBhdGliaWx0aWVzCisJICAgIGFzc29jaWF0ZWQgd2l0aCBESENQdjYsIGFuZCB0aGlzIGlzIGEgZnVydGhlciBjaGFuZ2UuIFRvCisJICAgIGJlIHNhZmUsIHNjcmlwdHMgc2hvdWxkIGlnbm9yZSB1bmtub3duIGFjdGlvbnMsIGFuZCBpZgorCSAgICBub3QgSVB2Ni1hd2FyZSwgc2hvdWxkIGV4aXQgaWYgdGhlIGVudmlyb25tZW50CisJICAgIHZhcmlhYmxlIEROU01BU1FfSUFJRCBpcyBzZXQuIFRoZSB1c2UtY2FzZSBmb3IgdGhpcyBpcworCSAgICB0byB0cmFjayBuZXRib290L2luc3RhbGwuICBTdWdnZXN0aW9uIGZyb20gU2hhbnRhbnUKKwkgICAgR2FkZ2lsLgorCisJICAgIFVwZGF0ZSBjb250cmliL3BvcnQtZm9yd2FyZC9kbnNtYXNxLXBvcnRmb3J3YXJkIHRvIHJlZmxlY3QKKwkgICAgdGhlIGFib3ZlLgorCisJICAgIFNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgRE5TTUFTUV9MT0dfREhDUCB3aGVuIHJ1bm5pbmcKKwkgICAgdGhlIHNjcmlwdCBpZCAtLWxvZy1kaGNwIGlzIGluIGVmZmVjdCwgc28gdGhhdCBzY3JpcHQgY2FuCisJICAgIHRheWxvciB0aGVpciBsb2dnaW5nIHZlcmJvc2l0eS4gU3VnZ2VzdGlvbiBmcm9tIE1hbHRlCisJICAgIEZvcmtlbC4KKwkgICAgCisJICAgIEFycmFuZ2UgdGhhdCBhZGRyZXNzZXMgc3BlY2lmaWVkIHdpdGggLS1saXN0ZW4tYWRkcmVzcworCSAgICB3b3JrIGV2ZW4gaWYgdGhlcmUgaXMgbm8gaW50ZXJmYWNlIGNhcnJ5aW5nIHRoZQorCSAgICBhZGRyZXNzLiBUaGlzIGlzIGNoaWVmbHkgdXNlZnVsIGZvciBJUHY0IGxvb3BiYWNrCisJICAgIGFkZHJlc3Nlcywgd2hlcmUgYW55IGFkZHJlc3MgaW4gMTI3LjAuMC4wLzggaXMgYSB2YWxpZAorCSAgICBsb29wYmFjayBhZGRyZXNzLCBidXQgbm9ybWFsbHkgb25seSAxMjcuMC4wLjEgYXBwZWFycyBvbgorCSAgICB0aGUgbG8gaW50ZXJmYWNlLiBUaGFua3MgdG8gTWF0aGlldSBUcnVkZWwtTGFwaWVycmUgZm9yCisJICAgIHRoZSBpZGVhIGFuZCBpbml0aWFsIHBhdGNoLiAKKworCSAgICBGaXggY3Jhc2gsIGludHJvZHVjZWQgaW4gMi42MCwgd2hlbiBhIERIQ1BJTkZPUk0gaXMKKwkgICAgcmVjZWl2ZWQgZnJvbSBhIG5ldHdvcmsgd2hpY2ggaGFzIG5vIHZhbGlkIGRoY3AtcmFuZ2UuCisJICAgIFRoYW5rcyB0byBTdGVwaGFuZSBHbG9uZHUgZm9yIHRoZSBidWcgcmVwb3J0LgorCisJICAgIEFkZCBhIG5ldyBESENQIGxlYXNlIHRpbWUga2V5d29yZCwgImRlcHJlY2F0ZWQiIGZvcgorCSAgICAtLWRoY3AtcmFuZ2UuIFRoaXMgaXMgb25seSB2YWxpZCBmb3IgSVB2NiwgYW5kIHNldHMgdGhlCisJICAgIHByZWZmZXJlZCBsZWFzZSB0aW1lIGZvciBib3RoIERIQ1AgYW5kIFJBIHRvIHplcm8uIFRoZQorCSAgICBlZmZlY3QgaXMgdGhhdCBjbGllbnRzIGNhbiBjb250aW51ZSB0byB1c2UgdGhlIGFkZHJlc3MgCisJICAgIGZvciBleGlzdGluZyBjb25uZWN0aW9ucywgYnV0IG5ldyBjb25uZWN0aW9ucyB3aWxsIHVzZQorICAgICAgICAgICAgb3RoZXIgYWRkcmVzc2VzLCBpZiB0aGV5IGV4aXN0LiBUaGlzIG1ha2VzIGhpdGxlc3MKKwkgICAgcmVudW1iZXJpbmcgYXQgbGVhc3QgcG9zc2libGUuCisKKwkgICAgRml4IGJ1ZyBpbiBhZGRyZXNzNl9hdmFpbGFibGUoKSB3aGljaCBjYXVzZWQgREhDUHY2IGxlYXNlCisJICAgIGFxdWlzaXRpb24gdG8gZmFpbCBpZiBtb3JlIHRoYW4gb25lIGRoY3AtcmFuZ2UgaW4gdXNlLgorCisJICAgIFByb3ZpZGUgUkROU1MgYW5kIEROU1NMIGRhdGEgaW4gcm91dGVyIGFkdmVydGlzZW1lbnRzLAorCSAgICB1c2luZyB0aGUgc2V0dGluZ3MgcHJvdmlkZWQgZm9yIERIQ1Agb3B0aW9ucworCSAgICBvcHRpb242OmRvbWFpbi1zZWFyY2ggYW5kIG9wdGlvbjY6ZG5zLXNlcnZlci4KKworCSAgICBUd2VhayBsb2dvL2Zhdmljb24uaWNvIHRvIGFkZCBzb21lIHRyYW5zcGFyZW5jeS4gVGhhbmtzIHRvCisJICAgIFNhbUxUIGZvciB3b3JrIG9uIHRoaXMuCisJICAgIAorCSAgICBEb24ndCBjYWNoZSBkYXRhIGZyb20gbm9uLXJlY3Vyc2l2ZSBuYW1lc2VydmVycywgc2luY2UgaXQKKwkgICAgbWF5IGVycm9uZW91c2x5IGxvb2sgbGlrZSBhIHZhbGlkIENOQU1FIHRvIGEgbm9uLWV4aXRhbnQKKwkgICAgbmFtZS4gVGhhbmtzIHRvIEJlbiBXaW5zbG93IGZvciBmaW5kaW5nIHRoaXMuCisKKwkgICAgQ2FsbCBTT19CSU5EVE9ERVZJQ0Ugb24gdGhlIERIQ1Agc29ja2V0KHMpIHdoZW4gZG9pbmcgREhDUAorCSAgICBvbiBleGFjdGx5IG9uZSBpbnRlcmZhY2UgYW5kIC0tYmluZC1pbnRlcmZhY2VzIGlzIHNldC4gVGhpcyAKKwkgICAgbWFrZXMgdGhlIE9wZW5TdGFjayB1c2UtY2FzZSBvZiBvbmUgZG5zbWFzcSBwZXIgdmlydHVhbAorCSAgICBpbnRlcmZhY2Ugd29yay4gVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBvbiBMaW51eDsgaXQncyBub3QKKwkgICAgc3VwcG9ydGVkIG9uIG90aGVyIHBsYXRmb3Jtcy4gVGhhbmtzIHRvIFZpc2h2YW5hbmRhIElzaGF5YQorCSAgICBhbmQgdGhlIE9wZW5TdGFjayB0ZWFtIGZvciB0aGUgc3VnZ2VzdGlvbi4KKworCSAgICBVcGRhdGVkIEZyZW5jaCB0cmFuc2xhdGlvbi4gVGhhbmtzIHRvIEdpbGRhcyBMZSBOYWRhbi4KKworCSAgICBHaXZlIGNvcnJlY3QgZnJvbS1jYWNoZSBhbnN3ZXJzIHRvIGV4cGxpY3QgQ05BTUUgcXVlcmllcy4KKwkgICAgVGhhbmtzIHRvIFJvYiBad2lzc2xlciBmb3Igc3BvdHRpbmcgdGhpcy4KKwkgICAgCisJICAgIEFkZCAtLXRmdHAtbG93ZXJjYXNlIG9wdGlvbi4gVGhhbmtzIHRvIE9saXZlciBSYXRoIGZvciB0aGUKKwkgICAgcGF0Y2guIAorCisJICAgIEVuc3VyZSB0aGF0IHRoZSBEQnVzIERoY3BMZWFzZVVwZGF0ZWQgZXZlbnRzIGFyZSBnZW5lcmF0ZWQKKwkgICAgd2hlbiBhIGxlYXNlIGdvZXMgdGhyb3VnaCBJTklUX1JFQk9PVCBzdGF0ZSwgZXZlbiBpZiB0aGUKKwkgICAgZGhjcC1zY3JpcHQgaXMgbm90IGluIHVzZS4gVGhhbmtzIHRvIEFudG9hbmV0YS1FY2F0ZXJpbmEKKwkgICAgRW5lIGZvciB0aGUgcGF0Y2guCisKKwkgICAgRml4IGZhaWx1cmUgb2YgVEZUUCBvdmVyIElQdjQgb24gT3BlbkJTRCBwbGF0Zm9ybS4gVGhhbmtzCisJICAgIHRvIEJyYWQgU21pdGggZm9yIHNwb3R0aW5nIHRoaXMuCisJICAgIAorCit2ZXJzaW9uIDIuNjAKKyAgICAgICAgICAgIEZpeCBjb21waWxhdGlvbiBwcm9ibGVtIGluIE1hYyBPUyBYIExpb24uIFRoYW5rcyB0byBPbGFmCisgICAgICAgICAgICBGbGViYmUgZm9yIHRoZSBwYXRjaC4KKworCSAgICBGaXggREhDUCB3aGVuIHVzaW5nIC0tbGlzdGVuLWFkZHJlc3Mgd2l0aCBhbiBJUCBhZGRyZXNzCisJICAgIHdoaWNoIGlzIG5vdCB0aGUgcHJpbWFyeSBhZGRyZXNzIG9mIGFuIGludGVyZmFjZS4KKworCSAgICBBZGQgLS1kaGNwLWNsaWVudC11cGRhdGUgb3B0aW9uLgorCisJICAgIEFkZCBMdWEgaW50ZWdyYXRpb24uIERuc21hc3EgY2FuIG5vdyBleGVjdXRlIGEgREhDUAorCSAgICBsZWFzZS1jaGFuZ2Ugc2NyaXB0IHdyaXR0ZW4gaW4gTHVhLiBUaGlzIG5lZWRzIHRvIGJlCisJICAgIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lIGJ5IHNldHRpbmcgSEFWRV9MVUFTQ1JJUFQgaW4gCisJICAgIHNyYy9jb25maWcuaCBvciBydW5uaW5nICJtYWtlIENPUFRTPS1ESEFWRV9MVUFTQ1JJUFQiCisJICAgIFRoYW5rcyB0byBKYW4tUGlldCBNZW5zIGZvciB0aGUgaWRlYSBhbmQgcHJvb2Ytb2YtY29uY2VwdCAKKwkgICAgaW1wbGVtZW50YXRpb24uCisJICAgIAorCSAgICBUaWRpZWQgc3JjL2NvbmZpZy5oIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4KKwkgICAgcGxhdGZvcm0tZGVwZW5kZW50IGNvbXBpbGUtdGltZSBvcHRpb25zIHdoaWNoIGFyZSBzZWxlY3RlZAorCSAgICBhdXRvbWF0aWNhbGx5LCBhbmQgYnVpbGRlci1zZWxlY3RhYmxlIGNvbXBpbGUgdGltZQorCSAgICBvcHRpb25zLiBEb2N1bWVudCB0aGUgbGF0dGVyIGJldHRlciwgYW5kIGRlc2NyaWJlIGhvdyB0bworCSAgICBzZXQgdGhlbSBmcm9tIHRoZSBtYWtlIGNvbW1hbmQgbGluZS4KKworCSAgICBUaWRpZWQgdXAgSVBQUk9UT19JUC9TT0xfSVAgKGFuZCBJUHY2IGVxdWl2YWxlbnQpCisJICAgIGNvbmZ1c2lvbi4gSVBQUk9UT19JUCB3b3JrcyBldmVyeXdoZXJlIG5vdy4KKwkgICAgCisJICAgIFNldCBUT1Mgb24gREhDUCBzb2NrZXRzLCB0aGlzIGltcHJvdmVzIHRoaW5ncyBvbiBidXN5CisJICAgIHdpcmVsZXNzIG5ldHdvcmtzLiBUaGFua3MgdG8gRGF2ZSBUYWh0IGZvciB0aGUgcGF0Y2guCisKKwkgICAgRGV0ZXJtaW5lIFZFUlNJT04gYXV0b21hdGljYWxseSBiYXNlZCBvbiBnaXQgbWFnaWM6CisJICAgIHJlbGVhc2UgdGFncyBvciBoYXNoIHZhbHVlcy4KKworCSAgICBJbXByb3ZlIHN0YXJ0LXVwIHNwZWVkIHdoZW4gcmVhZGluZyBsYXJnZSBob3N0cyBmaWxlcyAKKwkgICAgY29udGFpbmluZyBtYW55IGRpc3RpbmN0IGFkZHJlc3Nlcy4KKworCSAgICBGaXggcHJvYmxlbSBpZiBkbnNtYXNxIGlzIHN0YXJ0ZWQgd2l0aG91dCB0aGUgc3RkaW4sCisJICAgIHN0ZG91dCBhbmQgc3RkZXJyIGZpbGUgZGVzY3JpcHRvcnMgb3Blbi4gVGhpcyBjYW4gbWFuaWZlc3QKKwkgICAgaXRzZWxmIGFzIDEwMCUgQ1BVIHVzZS4gVGhhbmtzIHRvIENocmlzIE1vb3JlIGZvciBmaW5kaW5nCisJICAgIHRoaXMuCisKKwkgICAgRml4IHNoZWxsLXNjcmlwdGluZyBidWcgaW4gYmxkL3BrZy13cmFwcGVyLiBUaGFua3MgdG8gCisJICAgIE1hcmsgTWl0Y2hlbGwgZm9yIHRoZSBwYXRjaC4KKworCSAgICBBbGxvdyB0aGUgVEZQIHNlcnZlciBvciBib290IHNlcnZlciBpbiAtLXB4ZS1zZXJ2aWNlLCB0bworCSAgICBiZSBhIGRvbWFpbiBuYW1lIGluc3RlYWQgb2YgYW4gSVAgYWRkcmVzcy4gVGhpcyBhbGxvd3MgZm9yCisJICAgIHJvdW5kLXJvYmluCXRvIG11bHRpcGxlIHNlcnZlcnMsIGluIHRoZSBzYW1lIHdheSBhcworCSAgICAtLWRoY3AtYm9vdC4gQSBnb29kIHN1Z2dlc3Rpb24gZnJvbSBDcmlzdGlhbm8gQ3VtZXIuCisKKwkgICAgU3VwcG9ydCBCVUlMRERJUiB2YXJpYWJsZSBpbiB0aGUgTWFrZWZpbGUuIEFsbG93cyBidWlsZHMgCisJICAgIGZvciBtdWx0aXBsZSBhcmNocyBmcm9tIHRoZSBzYW1lIHNvdXJjZSB0cmVlIHdpdGggZWcuCisJICAgIG1ha2UgQlVJTERESVI9bGludXggICAgICAgICAgICAgKHJlbGF0aXZlIHRvIGRuc21hc3EgdHJlZSkKKwkgICAgbWFrZSBCVUlMRERJUj0vdG1wL29wZW5ic2QgICAgICAoYWJzb2x1dGUgcGF0aCkKKwkgICAgSWYgQlVJTERESVIgaXMgbm90IHNldCwgY29tcGlsYXRpb24gaGFwcGVucyBpbiB0aGUgc3JjCisJICAgIGRpcmVjdG9yeSwgYXMgYmVmb3JlLiBTdWdnZXN0aW9uIGZyb20gTWFyayBNaXRjaGVsbC4KKworCSAgICBTdXBwb3J0IERIQ1B2Ni4gU3VwcG9ydCBpcyB0aGVyZSBmb3IgdGhlIHNvcnQgb2YgdGhpbmdzCisJICAgIHRoZSBleGlzdGluZyB2NCBzZXJ2ZXIgZG9lcywgaW5jbHVkaW5nIHRhZ3MsIG9wdGlvbnMsIAorCSAgICBzdGF0aWMgYWRkcmVzc2VzIGFuZCByZWxheSBzdXBwb3J0LiBNaXNzaW5nIGlzIHByZWZpeCAKKwkgICAgZGVsZWdhdGlvbiwgd2hpY2ggaXMgcHJvYmFibHkgbm90IHJlcXVpcmVkIGluIHRoZSBkbnNtYXNxCisJICAgIG5pY2hlLCBhbmQgYW4gZWFzeSB3YXkgdG8gYWNjZXB0IHByZWZpeCBkZWxlZ2F0aW9ucyBmcm9tCisJICAgIGFuIHVwc3RyZWFtIERIQ1B2NiBzZXJ2ZXIsIHdoaWNoIGlzLiBGdXR1cmUgcGxhbnMgaW5jbHVkZQorCSAgICBzdXBwb3J0IGZvciBESENQdjYgcm91dGVyIG9wdGlvbiBhbmQgTUFDIGFkZHJlc3Mgb3B0aW9uCisJICAgICh0byBtYWtlIHNlbGVjdGluZyBjbGllbnRzIGJ5IE1BQyBhZGRyZXNzIHdvcmsgbGlrZSBJUHY0KS4KKwkgICAgVGhlc2Ugd2lsbCBiZSBhZGRlZCBhcyB0aGUgc3RhbmRhcmRzIG1hdHVyZS4KKwkgICAgVGhpcyBjb2RlIGhhcyBiZWVuIHRlc3RlZCwgYnV0IHRoaXMgaXMgdGhlIGZpcnN0IHJlbGVhc2UsCisJICAgIHNvIGRvbid0IGJldCB0aGUgZmFybSBvbiBpdCBqdXN0IHlldC4gTWFueSB0aGFua3MgdG8gYWxsIAorCSAgICB0ZXN0ZXJzIHdobyBoYXZlIGdvdCBpdCB0aGlzIGZhci4KKworCSAgICBTdXBwb3J0IElQdjYgcm91dGVyIGFkdmVydGlzZW1lbnRzLiBUaGlzIGlzIGEKKwkgICAgc2ltcGxlLW1pbmRlZCBpbXBsZW1lbnRhdGlvbiwgYWltZWQgYXQgcHJvdmlkaW5nIHRoZQorCSAgICB2ZXN0aWdpYWwgUkEgbmVlZGVkIHRvIGdvIGFsb25nc2lkZSBJUHY2LiBJcyBwaWNrcyB1cAorCSAgICBjb25maWd1cmF0aW9uIGZyb20gdGhlIERIQ1B2NiBjb25mLCBhbmQgc2hvdWxkIGp1c3QgbmVlZAorCSAgICBlbmFibGluZyB3aXRoIC0tZW5hYmxlLXJhLiAgIAorCisJICAgIEZpeCBsb25nLXN0YW5kaW5nIHdyaW5rbGUgd2l0aCAtLWxvY2FsaXNlLXF1ZXJpZXMgdGhhdAorCSAgICBjb3VsZCByZXN1bHQgaW4gd3JvbmcgYW5zd2VycyB3aGVuIEROUyBwYWNrZXRzIGFycml2ZQorCSAgICB2aWEgYW4gaW50ZXJmYWNlIG90aGVyIHRoYW4gdGhlIGV4cGVjdGVkIG9uZS4gVGhhbmtzIHRvIAorCSAgICBMb3JlbnpvIE1pbGVzaSBhbmQgSm9obiBIYW5rcyBmb3Igc3BvdHRpbmcgdGhpcyBvbmUuCisgCisgICAgICAgICAgICBVcGRhdGUgRnJlbmNoIHRyYW5zbGF0aW9uLiBUaGFua3MgdG8gR2lsZGFzIExlIE5hZGFuLgorCisJICAgIFVwZGF0ZSBQb2xpc2ggdHJhbnNsYXRpb24uIFRoYW5rcyB0byBKYW4gUHNvdGEuCisKKwordmVyc2lvbiAyLjU5CisgICAgICAgICAgICBGaXggcmVncmVzc2lvbiBpbiAyLjU4IHdoaWNoIGNhdXNlZCBmYWlsdXJlIHRvIHN0YXJ0IHVwCisgICAgICAgICAgICB3aXRoIHNvbWUgY29tYmluYXRpb25zIG9mIGRuc21hc3EgY29uZmlnIGFuZCBJUHY2IGtlcm5lbAorICAgICAgICAgICAgbmV0d29yayBjb25maWcuIFRoYW5rcyB0byBCcmllbGxlIEJydW5zIGZvciB0aGUgYnVnCisgICAgICAgICAgICByZXBvcnQuCisKKyAgICAgICAgICAgIEltcHJvdmUgZG5zbWFzcSdzIGJlaGF2aW91ciB3aGVuIG5ldHdvcmsgaW50ZXJmYWNlcyBhcmUKKyAgICAgICAgICAgIHN0aWxsIGRvaW5nIGR1cGxpY2F0ZSBhZGRyZXNzIGRldGVjdGlvbiAoREFEKS4gUHJldmlvdXNseSwKKyAgICAgICAgICAgIGRuc21hc3Egd291bGQgd2FpdCB1cCB0byAyMCBzZWNvbmRzIGF0IHN0YXJ0LXVwIGZvciB0aGUKKyAgICAgICAgICAgIERBRCBzdGF0ZSB0byB0ZXJtaW5hdGUuIFRoaXMgaXMgYnJva2VuIGZvciBicmlkZ2UKKyAgICAgICAgICAgIGludGVyZmFjZXMgb24gcmVjZW50IExpbnV4IGtlcm5lbHMsIHdoaWNoIGRvbid0IHN0YXJ0IERBRAorICAgICAgICAgICAgdW50aWwgdGhlIGJyaWRnZSBjb21lcyB1cCwgYW5kIHNvIGNhbiB0YWtlIGFyYml0cmFyeQorICAgICAgICAgICAgdGltZS4gVGhlIG5ldyBiZWhhdmlvdXIgbGV0cyBkbnNtYXNxIHBvbGwgZm9yIGFuIGFyYml0cmFyeQorICAgICAgICAgICAgdGltZSB3aGlsc3QgcHJvdmlkaW5nIHNlcnZpY2Ugb24gb3RoZXIgaW50ZXJmYWNlcy4gVGhhbmtzCisgICAgICAgICAgICB0byBTdGVwaGVuIEhlbW1pbmdlciBmb3IgcG9pbnRpbmcgb3V0IHRoZSBwcm9ibGVtLgorCisKK3ZlcnNpb24gMi41OAorCSAgICBQcm92aWRlIGEgZGVmaW5pdGlvbiBvZiB0aGUgU0FfU0laRSBtYWNybyB3aGVyZSBpdCdzIAorCSAgICBtaXNzaW5nLiBGaXhlcyBidWlsZCBmYWlsdXJlIG9uIG9wZW5CU0QuCisKKwkgICAgRG9uJ3QgaW5jbHVkZSBhIHplcm8gdGVybWluYXRvciBhdCB0aGUgZW5kIG9mIG1lc3NhZ2VzCisJICAgIHNlbnQgdG8gL2Rldi9sb2cgd2hlbiAvZGV2L2xvZyBpcyBhIGRhdGFncmFtIHNvY2tldC4KKwkgICAgVGhhbmtzIHRvIERpZGllciBSYWJvdW5kIGZvciBzcG90dGluZyB0aGUgcHJvYmxlbS4KKworCSAgICBBZGQgLS1kaGNwLXNlcXVlbnRpYWwtaXAgZmxhZywgdG8gZm9yY2UgYWxsb2NhdGlvbiBvZiBJUAorCSAgICBhZGRyZXNzZXMgaW4gYXNjZW5kaW5nIG9yZGVyLiBOb3RlIHRoYXQgdGhlIGRlZmF1bHQKKwkgICAgcHNldWRvLXJhbmRvbSBtb2RlIGlzIGluIGdlbmVyYWwgYmV0dGVyIGJ1dCBzb21lCisJICAgIHNlcnZlci1kZXBsb3ltZW50IGFwcGxpY2F0aW9ucyBuZWVkIHRoaXMuCisKKwkgICAgRml4IHByb2JsZW0gd2hlcmUgYSBzZXJ2ZXItaWQgb2YgMC4wLjAuMCBpcyBzZW50IHRvIGEKKwkgICAgY2xpZW50IHdoZW4gYSBkaGNwLXJlbGF5IGlzIGluIHVzZSBpZiBhIGNsaWVudCByZW5ld3MgYQorCSAgICBsZWFzZSBhZnRlciBkbnNtYXNxIHJlc3RhcnQgYW5kIGJlZm9yZSBhbnkgY2xpZW50cyBvbiB0aGUKKwkgICAgc3VibmV0IGdldCBhIG5ldyBsZWFzZS4gVGhhbmtzIHRvIE1pa2UgUnVpeiBmb3IgYXNzaXN0YW5jZQorCSAgICBpbiBjaGFzaW5nIHRoaXMgb25lIGRvd24uIAorCisJICAgIERvbid0IHJldHVybiBOWERPTUFJTiB0byBhbiBBQUFBIHF1ZXJ5IGlmIHdlIGhhdmUgQ05BTUUKKwkgICAgd2hpY2ggcG9pbnRzIHRvIGFuIEEgcmVjb3JkIG9ubHk6IE5PREFUQSBpcyB0aGUgY29ycmVjdAorCSAgICByZXBseSBpbiB0aGlzIGNhc2UuIFRoYW5rcyB0byBUb20gRmVybmFuZGVzIGZvciBzcG90dGluZworCSAgICB0aGUgcHJvYmxlbS4KKworCSAgICBSZWxheCB0aGUgbmVlZCB0byBzdXBwbHkgYSBuZXRtYXNrIGluIC0tZGhjcC1yYW5nZSBmb3IKKwkgICAgbmV0d29ya3Mgd2hpY2ggdXNlIGEgREhDUCByZWxheS4gV2hpbHN0IHRoaXMgaXMgc3RpbGwKKwkgICAgZGVzaXJlYWJsZSwgaW4gdGhlIGFic2VuY2Ugb2YgYSBuZXRtYXNrIGRuc21hc3Egd2lsbCB1c2UKKwkgICAgYSBkZWZhdWx0IGJhc2VkIG9uIHRoZSBjbGFzcyAoQSwgQiwgb3IgQykgb2YgdGhlIGFkZHJlc3MuIAorCSAgICBUaGlzIHNob3VsZCBhdCBsZWFzdCByZW1vdmUgYSBjYXVzZSBvZiBteXN0ZXJpb3VzIGZhaWx1cmUgCisJICAgIGZvciBwZW9wbGUgdXNpbmcgUkZDMTkxOCBhZGRyZXNzZXMgYW5kIHJlbGF5cy4KKworCSAgICBBZGQgc3VwcG9ydCBmb3IgTGludXggY29ubnRyYWNrIGNvbm5lY3Rpb24gbWFya2luZy4gSWYgCisJICAgIGVuYWJsZWQgd2l0aCAtLWNvbm50cmFjaywgdGhlIGNvbm5lY3Rpb24gbWFyayBmb3IgaW5jb21pbmcKKwkgICAgRE5TIHF1ZXJpZXMgd2lsbCBiZSBjb3BpZWQgIHRvIHRoZSBvdXRnb2luZyBjb25uZWN0aW9ucworCSAgICB1c2VkIHRvIGFuc3dlciB0aG9zZSBxdWVyaWVzLiBUaGlzIGFsbG93cyBjbGV2ZXIgZmlyZXdhbGwKKwkgICAgYW5kIGFjY291bnRpbmcgc3R1ZmYuIE9ubHkgYXZhaWxhYmxlIGlmIGRuc21hc3EgaXMKKwkgICAgY29tcGlsZWQgd2l0aCBIQVZFX0NPTk5UUkFDSyBhbmQgYWRkcyBhIGRlcGVuZGVuY3kgb24gCisJICAgIGxpYm5ldGZpbHRlci1jb25udHJhY2suIFRoYW5rcyB0byBFZCBXaWxkZ29vc2UgZm9yIHRoZQorCSAgICBpbml0aWFsIGlkZWEsIHRlc3RpbmcgYW5kIHNwb25zb3JzaGlwIG9mIHRoaXMgZnVuY3Rpb24uCisKKwkgICAgUHJvdmlkZSBhIHNhbmUgZXJyb3IgbWVzc2FnZSB3aGVuIHNvbWVvbmUgYXR0ZW1wdHMgdG8gCisJICAgIG1hdGNoIGEgdGFnIGluIC0tZGhjcC1ob3N0LgorCisJICAgIFR3ZWFrIHRoZSBiZWhhdmlvdXIgb2YgLS1kb21haW4tbmVlZGVkLCB0byBhdm9pZCBwcm9ibGVtcworCSAgICB3aXRoIHJlY3Vyc2l2ZSBuYW1lc2VydmVycyBkb3duc3RyZWFtIG9mIGRuc21hc3EuIFRoZSBuZXcKKwkgICAgYmVoYXZpb3VyIG9ubHkgc3RvcHMgQSBhbmQgQUFBQSBxdWVyaWVzLCBhbmQgcmV0dXJucworCSAgICBOT0RBVEEgcmF0aGVyIHRoYW4gTlhET01BSU4gcmVwbGllcy4gCisKKwkgICAgRWZmaWNpZW5jeSBmaXggZm9yIHZlcnkgbGFyZ2UgREhDUCBjb25maWd1cmF0aW9ucywgdGhhbmtzCisJICAgIHRvIEphbWVzIEdhcnRyZWxsIGFuZCBNaWtlIFJ1aXogZm9yIGhlbHAgd2l0aCB0aGlzLiAKKworCSAgICBBbGxvdyB0aGUgVEZUUC1zZXJ2ZXIgYWRkcmVzcyBpbiAtLWRoY3AtYm9vdCB0byBiZSBhCisJICAgIGRvbWFpbi1uYW1lIHdoaWNoIGlzIGxvb2tlZCB1cCBpbiAvZXRjL2hvc3RzLiBUaGlzIGNhbiAKKwkgICAgZ2l2ZSBtdWx0aXBsZSBJUCBhZGRyZXNzZXMgd2hpY2ggYXJlIHVzZWQgcm91bmQtcm9iaW4sCisJICAgIHRodXMgZG9pbmcgVEZUUCBzZXJ2ZXIgbG9hZC1iYWxhbmNpbmcuIFRoYW5rcyB0byBTdXNoaWwKKwkgICAgQWdyYXdhbCBmb3IgdGhlIHBhdGNoLgorCisJICAgIFdoZW4gdHdvIHRhZ2dlZCBkaGNwLW9wdGlvbnMgZm9yIGEgcGFydGljdWxhciBvcHRpb24KKwkgICAgbnVtYmVyIGFyZSBib3RoIHZhbGlkLCB1c2UgdGhlIG9uZSB3aGljaCBpcyB2YWxpZCB3aXRob3V0CisJICAgIGEgdGFnIGZyb20gdGhlIGRoY3AtcmFuZ2UuIEFsbG93cyBvdmVycmlkaW5nIG9mIHRoZSB2YWx1ZQorCSAgICBvZiBhIERIQ1Agb3B0aW9uIGZvciBhIHBhcnRpY3VsYXIgaG9zdCBhcyB3ZWxsIGFzCisJICAgIHBlci1uZXR3b3JrIHZhbHVlcy4gIFNvIAorCSAgICAtLWRoY3AtcmFuZ2U9c2V0OmludGVyZmFjZTEsLi4uLi4uCisJICAgIC0tZGhjcC1ob3N0PXNldDpteWhvc3QsLi4uLi4gIAorCSAgICAtLWRoY3Atb3B0aW9uPXRhZzppbnRlcmZhY2UxLG9wdGlvbjpuaXMtZG9tYWluLCJkb21haW4xIiAKKwkgICAgLS1kaGNwLW9wdGlvbj10YWc6bXlob3N0LG9wdGlvbjpuaXMtZG9tYWluLCJkb21haW4yIiAKKwkgICAgd2lsbCBzZXQgdGhlIE5JUy1kb21haW4gdG8gZG9tYWluMSBmb3IgaG9zdHMgaW4gdGhlIHJhbmdlLCBidXQKKyAgICAgICAJICAgIG92ZXJyaWRlIHRoYXQgdG8gZG9tYWluMiBmb3IgYSBwYXJ0aWN1bGFyIGhvc3QuCisKKwkgICAgRml4IGJ1ZyB3aGljaCByZXN1bHRlZCBpbiB0cnVuY2F0ZWQgZmlsZXMgYW5kIHRpbWVvdXRzIGZvcgorCSAgICBzb21lIFRGVFAgdHJhbnNmZXJzLiBUaGUgYnVnIG9ubHkgb2NjdXJzIHdpdGggbmV0YXNjaWkKKwkgICAgdHJhbnNmZXJzIGFuZCBuZWVkcyBhbiB1bmZvcnR1bmF0ZSByZWxhdGlvbnNoaXAgYmV0d2VlbgorCSAgICBmaWxlIHNpemUsIGJsb2Nrc2l6ZSBhbmQgdGhlIG51bWJlciBvZiBuZXdsaW5lcyBpbiB0aGUKKwkgICAgbGFzdCBibG9jayBiZWZvcmUgaXQgbWFuaWZlc3RzIGl0c2VsZi4gTWFueSB0aGFua3MgdG8gCisJICAgIEFsa2lzIEdlb3Jnb3BvdWxvcyBmb3Igc3BvdHRpbmcgdGhlIHByb2JsZW0gYW5kIHByb3ZpZGluZworCSAgICBhIGNvbXByZWhlbnNpdmUgdGVzdC1jYXNlLiAKKworCSAgICBGaXggcmVncmVzc2lvbiBpbiBURlRQIHNlcnZlciBvbiAqQlNEIHBsYXRmb3JtcyBpbnRyb2R1Y2VkCisJICAgIGluIHZlcnNpb24gMi41NiwgZHVlIHRvIGNvbmZ1c2lvbiB3aXRoIHNvY2thZGRyCisJICAgIGxlbmd0aC4gTWFueSB0aGFua3MgdG8gTG9pYyBQZWZmZXJrb3JuIGZvciBmaW5kaW5nIHRoaXMuCisKKwkgICAgU3VwcG9ydCBzY29wZS1pZHMgaW4gSVB2NiBhZGRyZXNzZXMgb2YgbmFtZXNlcnZlcnMgZnJvbQorCSAgICAvZXRjL3Jlc29sdi5jb25mIGFuZCBpbiAtLXNlcnZlciBvcHRpb25zLiBFZworCSAgICBuYW1lc2VydmVyIGZlODA6OjIwMjphNDEyOjQ1MTI6N2JiZiVldGgwIG9yCisJICAgIHNlcnZlcj1mZTgwOjoyMDI6YTQxMjo0NTEyOjdiYmYlZXRoMC4gVGhhbmtzIHRvIAorCSAgICBNaWNoYWVsIFN0YXBlbGJlcmcgZm9yIHRoZSBzdWdnZXN0aW9uLgorCisJICAgIFVwZGF0ZSBQb2xpc2ggdHJhbnNsYXRpb24sIHRoYW5rcyB0byBKYW4gUHNvdGEuCisKKwkgICAgVXBkYXRlIEZyZW5jaCB0cmFuc2xhdGlvbi4gVGhhbmtzIHRvIEdpbGRhcyBMZSBOYWRhbi4KKworCit2ZXJzaW9uIDIuNTcKKwkgICAgQWRkIHBhdGNoZXMgdG8gYWxsb3cgYnVpbGQgdW5kZXIgQW5kcm9pZC4KKworCSAgICBQcm92aWRlIG91ciBvd24gaGVhZGVyIGZvciB0aGUgRE5TIHByb3RvY29sLCByYXRoZXIgdGhhbgorCSAgICByZWx5aW5nIG9uIGFycGEvbmFtZXNlci5oLiBUaGlzIGhhcyBwcm92ZWQgbW9yZSBvciBsZXNzCisJICAgIGRlZmVjdGl2ZSBvdmVyIHRoZSB5ZWFycyBhbmQgdGhlIGZpbmFsIHN0cmF3IGlzIHRoYXQgaXQncworCSAgICBlZmZlY3RpdmVseSBlbXB0eSBvbiBBbmRyb2lkLgorCisJICAgIEZpeCByZWdyZXNzaW9uIGluIDIuNTYgd2hpY2ggY2F1c2VkIGhleCBjb25zdGFudHMgaW4KKwkgICAgY29uZmlndXJhdGlvbiB0byBiZSByZWplY3RlZCBpZiB0aGV5IGNvbnRhaW4gdGhlICcqJworCSAgICB3aWxkY2FyZC4KKworCSAgICBDb3JyZWN0IHdyb25nIGNhc3RzIG9mIGFyZ3VtZW50cyB0byBjdHlwZS5oIGZ1bmN0aW9ucywKKwkgICAgaXNkaWdpdCgpLCBpc3hkaWdpdCgpIGV0Yy4gVGhhbmtzIHRvIE1hdHRoaWFzIEFuZHJlZSBmb3IKKwkgICAgc3BvdHRpbmcgdGhpcy4KKworCSAgICBBbGxvdyBidWlsZCB3aXRoIElETiBzdXBwb3J0IGluZGVwZW5kZW50bHkgZnJvbSBpMThuLiAKKyAgICAgICAgICAgIElETiBzdXBwb3J0IGNvbnRpbnVlcyB0byBiZSBpbmNsdWRlZCBhdXRvbWF0aWNhbGx5IAorCSAgICB3aGVuIGkxOG4gaXMgaW5jbHVkZWQuIAorICAgICAgICAgICAgJ21ha2UgQ09QVFM9LURIQVZFX0lETicgaXMgdGhlIG1hZ2ljIGluY2FudGF0aW9uLiAKKworCSAgICBNb2RpZnkgY2hlY2sgb24gZXh0cmFuZW91cyBjb21tYW5kIGxpbmUganVuayAoYWRkZWQgaW4KKwkgICAgMi41Nikgc28gdGhhdCBpdCBkb2Vzbid0IGNvbXBsYWluIGFib3V0IGV4dHJhIF9lbXB0eV8gCisJICAgIGFyZ3VtZW50cy4gT3RoZXJ3aXNlIHRoaXMgYnJlYWtzIGxpYnZpcnQuCisKKwordmVyc2lvbiAyLjU2CisgICAgICAgICAgICBBZGQgYSBwYXRjaCB0byBhbGxvdyBkbnNtYXNxIHRvIGdldCBpbnRlcmZhY2UgbmFtZXMgcmlnaHQgaW4gYQorICAgICAgICAgICAgU29sYXJpcyB6b25lLiBUaGFua3MgdG8gRGogUGFkemVuc2t5IGZvciB0aGlzLgorCisJICAgIEltcHJvdmUgZGF0YS10eXBlIHBhcnNpbmcgaGV1cmlzdGljcyBzbyB0aGF0CisJICAgIC0tZGhjcC1vcHRpb249b3B0aW9uOmRvbWFpbi1zZWFyY2gsLiAKKwkgICAgdHJlYXRzIHRoZSB2YWx1ZSBhcyBhIHN0cmluZyBhbmQgbm90IGFuIElQIGFkZHJlc3MuCisJICAgIFRoYW5rcyB0byBDbGVtZW5zIEZpc2NoZXIgZm9yIHNwb3R0aW5nIHRoYXQuCisKKwkgICAgQWRkIElQdjYgc3VwcG9ydCB0byB0aGUgVEZUUCBzZXJ2ZXIuIE1hbnkgdGhhbmtzIHRvIEphbiAKKwkgICAgJ1JlZEJ1bGx5JyBTZWlmZmVydCBmb3IgdGhlIHBhdGNoZXMuCisJICAgIAorCSAgICBMb2cgRE5TIHF1ZXJpZXMgYXQgbGV2ZWwgTE9HX0lORk8sIHJhdGhlciB0aGVuCisJICAgIExPR19ERUJVRy4gVGhpcyBtYWtlcyB0aGluZ3MgY29uc2lzdGVudCB3aXRoIERIQ1AKKwkgICAgbG9nZ2luZy4gVGhhbmtzIHRvIEFkYW0gUHJpYnlsIGZvciBzcG90dGluZyB0aGUgcHJvYmxlbS4KKworICAgICAgICAgICAgRW5zdXJlIHRoYXQgZG5zbWFzcSB0ZXJtaW5hdGVzIGNsZWFubHkgd2hlbiB1c2luZworICAgICAgICAgICAgLS1zeXNsb2ctYXN5bmMgZXZlbiBpZiBpdCBjYW5ub3QgbWFrZSBhIGNvbm5lY3Rpb24gdG8gdGhlCisgICAgICAgICAgICBzeXNsb2dkLgorCisJICAgIEFkZCAtLWFkZC1tYWMgb3B0aW9uLiBUaGlzIGlzIHRvIHN1cHBvcnQgY3VycmVudGx5IAorCSAgICBleHBlcmltZW50YWwgRE5TIGZpbHRlcmluZyBmYWNpbGl0aWVzLiBUaGFua3MgdG8gQmVuamFtaW4KKwkgICAgUGV0cmluIGZvciB0aGUgb3JpZ25hbCBwYXRjaC4gCisKKwkgICAgRml4IGJ1ZyB3aGljaCBtZWFudCB0aGF0IHRhZ3Mgd2VyZSBpZ25vcmVkIGluIGRoY3AtcmFuZ2UKKwkgICAgY29uZmlndXJhdGlvbiBzcGVjaWZ5aW5nIFBYRS1wcm94eSBzZXJ2aWNlLiBUaGFua3MgdG8KKwkgICAgQ3Jpc3RpYW5vIEN1bWVyIGZvciBzcG90dGluZyB0aGlzLgorCisJICAgIFJhaXNlIGFuIGVycm9yIGlmIHRoZXJlIGlzIGV4dHJhIGp1bmssIG5vdCBwYXJ0IG9mIGFuCisgCSAgICBvcHRpb24sIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKwkgICAgRmxhZyBhIGNvdXBsZSBvZiBsb2cgbWVzc2FnZXMgaW4gY2FjaGUuYyBhcyBjb21pbmcgZnJvbQorCSAgICB0aGUgREhDUCBzdWJzeXN0ZW0uIFRoYW5rcyB0byBPbGFmIFdlc3RyaWsgZm9yIHRoZSBwYXRjaC4KKworCSAgICBPbWl0IHRpbWVzdGFtcHMgZnJvbSBsb2dzIHdoZW4gYSkgbG9nZ2luZyB0byBzdGRlcnIgYW5kIAorCSAgICBiKSAtLWtlZXAtaW4tZm9yZ3JvdW5kIGlzIHNldC4gVGhlIGxvZ2dpbmcgZmFjaWxpdHkgb24gdGhlCisJICAgIG90aGVyIGVuZCBvZiBzdGRlcnIgY2FuIGJlIGFzc3VtbmVkIHRvIHN1cHBseSB0aGVtLiBUaGFua3MKKwkgICAgdG8gSm9obiBIYWxsYW0gZm9yIHRoZSBwYXRjaC4KKworCSAgICBEb24ndCBjb21wbGFpbiBhYm91dCBzdHJpbmdzIGxvbmdlciB0aGFuIDI1NSBjaGFyYWN0ZXJzIGluCisJICAgIC0tdHh0LXJlY29yZCwganVzdCBzcGxpdCB0aGUgbG9uZyBzdHJpbmdzIGludG8gMjU1CisJICAgIGNoYXJhY3RlciBjaHVua3MgaW5zdGVhZC4KKworCSAgICBGaXggY3Jhc2ggb24gZG91YmxlLWZyZWUuIFRoaXMgYnVnIGNhbiBvbmx5IGhhcHBlbiB3aGVuCisJICAgIGRoY3Atc2NyaXB0IGlzIGluIHVzZSBhbmQgdGhlbiBvbmx5IGluIHJhcmUgY2lyY3Vtc3RhbmNlcworCSAgICB0cmlnZ2VyZWQgYnkgaGlnaCBESENQIHRyYW5zYWN0aW9uIHJhdGUgYW5kIGEgc2xvdworCSAgICBzY3JpcHQuIFRoYW5rcyB0byBGZXJlbmMgV2FnbmVyIGZvciBmaW5kaW5nIHRoZSBwcm9ibGVtLgorCisJICAgIE9ubHkgbG9nIHRoYXQgYSBmaWxlIGhhcyBiZWVuIHNlbnQgYnkgVEZUUCBhZnRlciB0aGUKKwkgICAgdHJhbnNmZXIgaGFzIGNvbXBsZXRlZCBzdWNjZXNmdWxseS4gCisKKwkgICAgQSBnb29kIHN1Z2dlc3Rpb24gZnJvbSBGZXJlbmMgV2FnbmVyOiBleHRlbmQKKwkgICAgdGhlIC0tZG9tYWluIG9wdGlvbiB0byBhbGxvdyB0aGlzIHNvcnQgb2YgdGhpbmc6CisgICAgICAgICAgICAtLWRvbWFpbj10aGVrZWxsZXlzLm9yZy51aywxOTIuMTY4LjAuMC8yNCxsb2NhbAorCSAgICB3aGljaCBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMKKwkgICAgLS1sb2NhbD0vdGhla2VsbGV5cy5vcmcudWsvCisJICAgIC0tbG9jYWw9LzAuMTY4LjE5Mi5pbi1hZGRyLmFycGEvIAorCisJICAgIFRpZ2h0ZW4gdXAgc3ludGF4IGNoZWNraW5nIG9mIGhleCBjb250YW50cyBpbiB0aGUgY29uZmlnCisJICAgIGZpbGUuICBUaGFua3MgdG8gRnJlZCBEYW1lbiBmb3Igc3BvdHRpbmcgdGhpcy4KKworCSAgICBBZGQgZG5zbWFzcSBsb2dvL2ljb24sIGNvbnRyaWJ1dGVkIGJ5IEp1c3RpbiBTd2lmdC4gTWFueQorCSAgICB0aGFua3MgZm9yIHRoYXQuCisKKwkgICAgTmV2ZXIgY2FjaGUgRE5TIHJlcGxpZXMgd2hpY2ggaGF2ZSB0aGUgJ2NkJyBiaXQgc2V0LCBvcgorCSAgICB3aGljaCByZXN1bHQgZnJvbSBxdWVyaWVzIGZvcndhcmRlZCB3aXRoIHRoZSAnY2QnIGJpdAorCSAgICBzZXQuIFRoZSAnY2QnIGJpdCBpbnN0cnVjdHMgYSBETlNTRUMgdmFsaWRhdGluZyBzZXJ2ZXIKKwkgICAgdXBzdHJlYW0gdG8gaWdub3JlIHNpZ25hdHVyZSBmYWlsdXJlcyBhbmQgcmV0dXJuIHJlcGxpZXMKKwkgICAgYW55d2F5LiBXaXRob3V0IHRoaXMgY2hhbmdlIGl0J3MgcG9zc2libGUgdG8gcG9sbHV0ZSB0aGUKKwkgICAgZG5zbWFzcSBjYWNoZSB3aXRoIGJhZCBkYXRhIGJ5IG1ha2luZyBhIHF1ZXJ5IHdpdGggdGhlCisJICAgICdjZCcgYml0IHNldCBhbmQgc3Vic2VxdWVudCBxdWVyaWVzIHdvdWxkIHJldHVybiB0aGlzIGRhdGEKKwkgICAgd2l0aG91dCBpdHMgYmVpbmcgbWFya2VkIGFzIHN1c3BlY3QuIFRoYW5rcyB0byBBbmRlcnMKKwkgICAgS2FzZW9yZyBmb3IgcG9pbnRpbmcgb3V0IHRoaXMgcHJvYmxlbS4KKworCSAgICBBZGQgLS1wcm94eS1kbnNzZWMgZmxhZywgZm9yIGNvbXBsaWFuY2Ugd2l0aCBSRkMKKwkgICAgNDAzNS4gRG5zbWFzcSB3aWxsIG5vdyBjbGVhciB0aGUgJ2FkJyBiaXQgaW4gYW5zd2VycyByZXR1cm5lZAorCSAgICBmcm9tIHVwc3RyZWFtIHZhbGlkYXRpbmcgbmFtZXNlcnZlcnMgdW5sZXNzIHRoaXMgb3B0aW9uIGlzCisJICAgIHNldC4KKworCSAgICBBbGxvdyBhIGZpbGVuYW1lIG9mICItIiBmb3IgLS1jb25mLWZpbGUgdG8gcmVhZAorCSAgICBzdGRpbi4gU3VnZ2VzdGlvbiBmcm9tIFRpbW90aHkgUmVkYWVsbGkuCisKKwkgICAgUm90YXRlIHRoZSBvcmRlciBvZiBTUlYgcmVjb3JkcyBpbiByZXBsaWVzLCB0byBwcm92aWRlCisJICAgIHJvdW5kLXJvYmluIGxvYWQgYmFsYW5jaW5nIHdoZW4gYWxsIHRoZSBwcmlvcml0aWVzIGFyZQorCSAgICBlcXVhbC4gVGhhbmtzIHRvIFBldGVyIE1jS2lubmV5IGZvciB0aGUgc3VnZ2VzdGlvbi4JCisKKwkgICAgRWRpdAorCSAgICBjb250cmliL01hY09TWC1sYXVuY2hkL3VrLm9yZy50aGVrZWxsZXlzLmRuc21hc3EucGxpc3QgCisJICAgIHNvIHRoYXQgaXQgZG9lc24ndCBsb2cgYWxsIHF1ZXJpZXMgdG8gYSBmaWxlIGJ5CisJICAgIGRlZmF1bHQuIFRoYW5rcyBhZ2FpbiB0byBQZXRlciBNY0tpbm5leS4gICAgCisKKwkgICAgQnkgZGVmYXVsdCwgc2V0dGluZyBhbiBJUHY0IGFkZHJlc3MgZm9yIGEgZG9tYWluIGJ1dCBub3QKKwkgICAgYW4gSVB2NiBhZGRyZXNzIGNhdXNlcyBkbnNtYXNxIHRvIHJldHVybgorCSAgICBhbiBOT0RBVEEgcmVwbHkgZm9yIElQdjYgKG9yIHZpY2UtdmVyc2EpLiBTbworCSAgICAtLWFkZHJlc3M9L2dvb2dsZS5jb20vMS4yLjMuNCBzdG9wcyBJUHY2IHF1ZXJpZXMgZm9yCisJICAgICpnb29nbGUuY29tIGZyb20gYmVpbmcgZm9yd2FyZGVkLiBNYWtlIGl0IHBvc3NpYmxlIHRvCisJICAgIG92ZXJyaWRlIHRoaXMgYmVoYXZpb3VyIGJ5IGRlZmluaW5nIHRoZSBzZW1hdGljcyBpZiB0aGUKKwkgICAgc2FtZSBkb21haW4gYXBwZWFycyBpbiAgYm90aCAtLXNlcnZlciBhbmQgLS1hZGRyZXNzLgorCSAgICBJbiB0aGF0IGNhc2UsIHRoZSAtLWFkZHJlc3MgaGFzIHByaW9yaXR5IGZvciB0aGUgYWRkcmVzcworCSAgICBmYW1pbHkgaW4gd2hpY2ggaXMgYXBwZWFycywgYnV0IHRoZSAtLXNlcnZlciBoYXMgcHJpb3JpdHkKKwkgICAgb2YgdGhlIGFkZHJlc3MgZmFtaWx5IHdoaWNoIGRvZXNuJ3QgYXBwZWFyIGluIC0tYWRkZHJlc3MgIAorCSAgICBTbzoKKwkgICAgLS1hZGRyZXNzPS9nb29nbGUuY29tLzEuMi4zLjQKKwkgICAgLS1zZXJ2ZXI9L2dvb2dsZS5jb20vIworCSAgICB3aWxsIHJldHVybiAxLjIuMy40IGZvciBJUHY0IHF1ZXJpZXMgZm9yICouZ29vZ2xlLmNvbSBidXQKKwkgICAgZm9yd2FyZCBJUHY2IHF1ZXJpZXMgdG8gdGhlIG5vcm1hbCB1cHN0cmVhbSBuYW1lc2VydmVyLgorCSAgICBTaW1pbGFybHkgd2hlbiBzZXR0aW5nIGFuIElQdjYgYWRkcmVzcworCSAgICBvbmx5IHRoaXMgd2lsbCBhbGxvdyBmb3J3YXJkaW5nIG9mIElQdjQgcXVlcmllcy4gVGhhbmtzIHRvCisJICAgIFdpbGxpYW0gZm9yIHBvaW50aW5nIG91dCB0aGUgbmVlZCBmb3IgdGhpcy4KKworCSAgICBBbGxvdyBtb3JlIHRoYW4gb25lIC0tZGhjcC1vcHRzZmlsZSBhbmQgLS1kaGNwLWhvc3RzZmlsZQorCSAgICBhbmQgbWFrZSB0aGVtIHVuZGVyc3RhbmQgZGlyZWN0b3JpZXMgYXMgYXJndW1lbnRzIGluIHRoZQorCSAgICBzYW1lIHdheSBhcyAtLWFkZG4taG9zdHMuIFN1Z2dlc3Rpb24gZnJvbSBKb2huIEhhbmtzLiAKKworCSAgICBJZ25vcmUgcmViaW5kaW5nIHJlcXVlc3RzIGZvciBsZWFzZXMgd2UgZG9uJ3Qga25vdworCSAgICBhYm91dC4gUmViaW5kIGlzIGJyb2FkY2FzdCwgc28gd2UgbWlnaHQgZ2V0IHRvIG92ZXJoZWFyIGEKKwkgICAgcmVxdWVzdCBtZWFudCBmb3IgYW5vdGhlciBESENQIHNlcnZlci4gTkFLaW5nIHRoaXMgaXMKKwkgICAgd3JvbmcuIFRoYW5rcyB0byBCcmFkIEQnSG9uZHQgZm9yIGFzc2lzdGFuY2Ugd2l0aCB0aGlzLgorCisgICAgICAgICAgICBGaXggY29zbWV0aWMgYnVnIHdoaWNoIHByb2R1Y2VkIHN0cmFuZ2Ugb3V0cHV0IHdoZW4KKyAgICAgICAgICAgIGR1bXBpbmcgY2FjaGUgc3RhdGlzdGljcyB3aXRoIHNvbWUgY29uZmlndXJhdGlvbnMuIFRoYW5rcworICAgICAgICAgICAgdG8gRmVkb3IgS296aGV2bmlrb3YgZm9yIHNwb3R0aW5nIHRoaXMuCisKKwordmVyc2lvbiAyLjU1CisgICAgICAgICAgICBGaXggY3Jhc2ggd2hlbiAvZXRjL2V0aGVycyBpcyBpbiB1c2UuIFRoYW5rcyB0byAKKwkgICAgR2lhbmx1aWdpIFRpZXNpIGZvciBmaW5kaW5nIHRoaXMuCisKKwkgICAgRml4IGNyYXNoIGluIG5ldGxpbmtfbXVsdGljYXN0KCkuIFRoYW5rcyB0byBBcm5vIFdhbGQgZm9yCisJICAgIGZpbmRpbmcgdGhpcyBvbmUuCisKKwkgICAgQWxsb3cgdGhlIGVtcHR5IGRvbWFpbiAiLiIgaW4gZGhjcCBkb21haW4tc2VhcmNoICgxMTkpCisJICAgIG9wdGlvbnMuIAorCisKK3ZlcnNpb24gMi41NAorICAgICAgICAgICAgVGhlcmUgaXMgbm8gdmVyc2lvbiAyLjU0IHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIDIuNTMsCisgICAgICAgICAgICB3aGljaCBpbmNvcnJlY3RseSBpZGVudGlmaWVzIGl0c2VsZiBhcyAyLjU0LgorCisKK3ZlcnNpb24gMi41MworICAgICAgICAgICAgRml4IGZhaWx1cmUgdG8gY29tcGlsZSBvbiBEZWJpYW4va0ZyZWVCU0QuIFRoYW5rcyB0byAKKwkgICAgQXhlbCBCZWNrZXJ0IGFuZCBQZXRyIFNhbGluZ2VyLgorCisJICAgIEZpeCBjb2RlIHRvIGF2b2lkIHNjYXJ5IHN0cmljdC1hbGlhc2luZyB3YXJuaW5ncworCSAgICBnZW5lcmF0ZWQgYnkgZ2NjIDQuNC4KKwkgICAgCisJICAgIEFkZGVkIEZBUSBlbnRyeSB3YXJuaW5nIGFib3V0IERIQ1AgZmFpbHVyZXMgd2l0aCBWaXN0YQorCSAgICB3aGVuIGZpcmV3YWxscyBibG9jayAyNTUuMjU1LjI1NS4yNTUuCisJICAgIAorCSAgICBGaXhlZCBidWcgd2hpY2ggY2F1c2VkIGJhZCB0aGluZ3MgdG8gaGFwcGVuIGlmIGEgCisJICAgIHJlc29sdi5jb25mIGZpbGUgd2hpY2ggZXhpc3RzIGlzIHN1YnNlcXVlbnRseSByZW1vdmVkLgorCSAgICBUaGFua3MgdG8gTmlrb2xhaSBTYW91a2ggZm9yIHRoZSBwYXRjaC4KKworCSAgICBSYXRpb25hbGlzZWQgdGhlIERIQ1AgdGFnIHN5c3RlbS4gRXZlcnkgY29uZmlndXJhdGlvbiBpdGVtCisJICAgIHdoaWNoIGNhbiBzZXQgYSB0YWcgZG9lcyBzbyBieSBhZGRpbmcgInNldDo8dGFnPiIgYW5kCisJICAgIGV2ZXJ5IGNvbmZpZ3VyYXRpb24gaXRlbSB3aGljaCBpcyBjb25kaXRpb25hbCBvbiBhIHRhZyBpcworCSAgICBtYWRlIHNvIGJ5ICJ0YWc6PHRhZz4iLiBUaGUgTk9UIG9wZXJhdG9yIGNoYW5nZXMgdG8gJyEnLAorCSAgICB3aGljaCBpcyBhIGJpdCBtb3JlIGludHVpdGl2ZSB0b28uIERoY3AtaG9zdCBkaXJlY3RpdmVzCisJICAgIGNhbiBzZXQgbW9yZSB0aGFuIG9uZSB0YWcgbm93LiBUaGUgb2xkICcjJyBOT1QsIAorCSAgICAibmV0OiIgcHJlZml4IGFuZCBuby1wcmVmaXhlcyBhcmUgc3RpbGwgaG9ub3VyZWQsIHNvIAorCSAgICBubyBleGlzdGluZyBjb25maWcgZmlsZSBuZWVkcyB0byBiZSBjaGFuZ2VkLCBidXQgCisJICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBuZXctc3R5bGUgY29uZmlnIGZpbGVzIHNob3VsZCBiZSAKKwkgICAgbXVjaCBsZXNzIGNvbmZ1c2luZy4gCisKKwkgICAgQWRkZWQgLS10YWctaWYgdG8gYWxsb3cgYm9vbGVhbiBvcGVyYXRpb25zIG9uIHRhZ3MuIAorCSAgICBUaGlzIGFsbG93cyBjb21wbGljYXRlZCBsb2dpYyB0byBiZSBjbGVhcmVyIGFuZCBtb3JlIAorCSAgICBnZW5lcmFsLiBBIGdyZWF0IHN1Z2dlc3Rpb24gZnJvbSBSaWNoYXJkIFZvaWd0LiAKKworCSAgICBBZGQgYnJvYWRjYXN0L3VuaWNhc3QgaW5mb3JtYXRpb24gdG8gREhDUCBsb2dnaW5nLgorCisJICAgIEFsbG93IC0tZGhjcC1icm9hZGNhc3QgdG8gYmUgdW5jb25kaXRpb25hbC4KKworCSAgICBGaXhlZCBpbmNvcnJlY3QgYmVoYXZpb3VyIHdpdGggTk9UIDx0YWc+IGNvbmRpdGlvbmFscyBpbgorCSAgICBkaGNwLW9wdGlvbnMuIFRoYW5rcyB0byBNYXggVHVya2V3aXR6IGZvciBhc3Npc3RhbmNlCisJICAgIGZpbmRpbmcgdGhpcy4KKworCSAgICBJZiB3ZSBzZW5kIHZlbmRvci1jbGFzcyBlbmNhcHN1bGF0ZWQgb3B0aW9ucyBiYXNlZCBvbiB0aGUKKwkgICAgdmVuZG9yLWNsYXNzIHN1cHBsaWVkIGJ5IHRoZSBjbGllbnQsIGFuZCBubyBleHBsaWNpdCAKKwkgICAgdmVuZG9yLWNsYXNzIG9wdGlvbiBpcyBnaXZlbiwgZWNobyBiYWNrIHRoZSB2ZW5kb3ItY2xhc3MKKwkgICAgZnJvbSB0aGUgY2xpZW50LgorIAorCSAgICBGaXggYnVnIHdoaWNoIHN0b3BwZWQgZG5zbWFzcSBmcm9tIG1hdGNoaW5nIGJvdGggYQorCSAgICBjaXJjdWl0aWQgYW5kIGEgcmVtb3RlaWQuIFRoYW5rcyB0byBJZ25hY2lvIEJyYXZvIGZvcgorCSAgICBmaW5kaW5nIHRoaXMuCisKKwkgICAgQWRkIC0tZGhjcC1wcm94eSwgd2hpY2ggbWFrZXMgaXQgcG9zc2libGUgdG8gY29uZmlndXJlCisJICAgIGRuc21hc3EgdG8gdXNlIGEgREhDUCByZWxheSBhZ2VudCBhcyBhIGZ1bGwgcHJveHksIHdpdGgKKwkgICAgYWxsIERIQ1AgbWVzc2FnZXMgcGFzc2luZyB0aHJvdWdoIHRoZSBwcm94eS4gVGhpcyBpcworCSAgICB1c2VmdWwgaWYgdGhlIHJlbGF5IGFkZHMgZXh0cmEgaW5mb3JtYXRpb24gdG8gdGhlIHBhY2tldHMKKwkgICAgaXQgZm9yd2FyZHMsIGJ1dCBjYW5ub3QgYmUgY29uZmlndXJlZCB3aXRoIHRoZSBSRkMgNTEwNyAKKwkgICAgc2VydmVyLW92ZXJyaWRlIG9wdGlvbi4KKworCSAgICBBZGRlZCBpbnRlcmZhY2U6PGlmYWNlIG5hbWU+IHBhcnQgdG8gZGhjcC1yYW5nZS4gVGhlCisJICAgIHNlbWFudGljcyBvZiB0aGlzIGFyZSB2ZXJ5IG9kZCBhdCBmaXJzdCBzaWdodCwgYnV0IGl0CisJICAgIGFsbG93cyBhIHNpbmdsZSBsaW5lICBvZiB0aGUgZm9ybQorCSAgICAgICAgZGhjcC1yYW5nZT1pbnRlcmZhY2U6dmlydDAsMTkyLjE2OC4wLjQsMTkyLjE2OC4wLjIwMAorCSAgICB0byBiZSBhZGRlZCB0byBkbnNtYXNxIGNvbmZpZ3VyYXRpb24gd2hpY2ggdGhlbiBzdXBwbGllcworCSAgICBESENQIGFuZCBETlMgc2VydmljZXMgdG8gdGhhdCBpbnRlcmZhY2UsIHdpdGhvdXQgYWZmZWN0aW5nCisJICAgIHdoYXQgc2VydmljZXMgYXJlIHN1cHBsaWVkIHRvIG90aGVyIGludGVyZmFjZXMgYW5kIAorCSAgICBpcnJlc3BlY3RpdmUgb2YgdGhlIGV4aXN0YW5jZSBvciBsYWNrIG9mIAorICAgICAgICAgICAgICAgIGludGVyZmFjZT08aW50ZXJmYWNlPiAKKyAgICAgICAgICAgIGxpbmVzIGVsc2V3aGVyZSBpbiB0aGUgZG5zbWFzcSBjb25maWd1cmF0aW9uLiBUaGUgaWRlYSBpcworCSAgICB0aGF0IHN1Y2ggYSBsaW5lIGNhbiBiZSBhZGRlZCBhdXRvbWF0aWNhbGx5IGJ5IGxpYnZpcnQKKwkgICAgb3IgZXF1aXZhbGVudCBzeXN0ZW1zLCB3aXRob3V0IGRpc3R1cmJpbmcgYW55IG1hbnVhbAorCSAgICBjb25maWd1cmF0aW9uLgorCisJICAgIFNpbWlsYXJseSB0byB0aGUgYWJvdmUsIGFsbG93IC0tZW5hYmxlLXRmdHA9PGludGVyZmFjZT4KKworCSAgICBBbGxvdyBhIFRGVFAgcm9vdCB0byBiZSBzZXQgc2VwYXJhdGVseSBmb3IgcmVxdWVzdHMgdmlhCisJICAgIGRpZmZlcmVudCBpbnRlcmZhY2VzLCAtLXRmdHAtcm9vdD08cGF0aD4sPGludGVyZmFjZT4JICAgICAKKworCSAgICBDb3JyZWN0bHkgaGFuZGxlIGFuZCBsb2cgY2xhc2hlcyBiZXR3ZWVuIENOQU1FUyBhbmQgCisJICAgIEROUyBuYW1lcyBiZWluZyBnaXZlbiB0byBESENQIGxlYXNlcy4gVGhpcyBmaXhlcyBhIGJ1ZyAKKwkgICAgd2hpY2ggY2F1c2VkIG5vbnNlbnNlIElQIGFkZHJlc3NlcyB0byBiZSBsb2dnZWQuIFRoYW5rcyB0byAKKyAgICAgICAgICAgIFNlcmdlaSBaaGlyaWtvdiBmb3IgZmluZGluZyBhbmQgYW5hbHlzaW5nIHRoZSBwcm9ibGVtLgorCisJICAgIFR3ZWFrIGZsdXNoX2xvZyBzbyBhcyB0byBhdm9pZCBsZWF2aW5nIHRoZSBsb2cKKwkgICAgZmlsZSBpbiBub24tYmxvY2tpbmcgbW9kZS4gT19OT05CTE9DSyBpcyBhIHByb3BlcnR5IG9mIHRoZQorCSAgICBmaWxlLCBub3QgdGhlIHByb2Nlc3MvZGVzY3JpcHRvci4KKworCSAgICBGaXggY29udHJpYi9Tb2xhcmlzMTAvY3JlYXRlX3BhY2thZ2UKKwkgICAgKC91c3IvbWFuIC0+IC91c3Ivc2hhcmUvbWFuKSBUaGFua3MgdG8gVml0YSBCYXRybGEuCisKKwkgICAgRml4IGEgcHJvYmxlbSB3aGVyZSwgaWYgYSBjbGllbnQgZ290IGEgbGVhc2UsIHRoZW4gd2VudAorCSAgICB0byBhbm90aGVyIHN1Ym5ldCBhbmQgZ290IGFub3RoZXIgbGVhc2UsIHRoZW4gbW92ZWQgYmFjaywKKwkgICAgaXQgY291bGRuJ3QgcmVzdW1lIHRoZSBvbGQgbGVhc2UsIGJ1dCB3b3VsZCBpbnN0ZWFkIGdldCAKKwkgICAgYSBuZXcgYWRkcmVzcy4gVGhhbmtzIHRvIExlb25hcmRvIFJvZHJpZ3VlcyBmb3Igc3BvdHRpbmcKKwkgICAgdGhpcyBhbmQgdGVzdGluZyB0aGUgZml4LgorCSAgICAKKwkgICAgRml4IHdlaXJkIGJ1ZyB3aGljaCBzb21ldGltZXMgb21pdHRlZCBjZXJ0YWluIGNoYXJhY3RlcnMKKwkgICAgZnJvbSB0aGUgc3RhcnQgb2YgcXVvdGVkIHN0cmluZ3MgaW4gZGhjcC1vcHRpb25zLiBUaGFua3MKKwkgICAgdG8gRGF5dG9uIFR1cm5lciBmb3Igc3BvdHRpbmcgdGhlIHByb2JsZW0uCisKKwkgICAgQWRkIGZhY2lsaXR5IHRvIHJlZGlyZWN0IHNvbWUgZG9tYWlucyB0byB0aGUgc3RhbmRhcmQKKwkgICAgdXBzdHJlYW0gc2VydmVyczogdGhpcyBhbGxvd3Mgc29tZXRoaW5nIGxpa2UgCisJICAgIC0tc2VydmVyPS9nb29nbGUuY29tLzEuMi4zLjQgLS1zZXJ2ZXI9L3d3dy5nb29nbGUuY29tLyMKKwkgICAgd2hpY2ggd2lsbCBzZW5kIHF1ZXJpZXMgZm9yICouZ29vZ2xlLmNvbSB0byAxLjIuMy40LAorCSAgICBleGNlcHQgKnd3dy5nb29nbGUuY29tIHdoaWNoIHdpbGwgYmUgZm9yd2FyZGVkIGFzIHVzdWFsLgorCSAgICBUaGFua3MgdG8gQUogV2ViZXIgZm9yIHByb21wdGluZyB0aGlzIGFkZGl0aW9uLgorIAorCSAgICBJbXByb3ZlIHRoZSBoYXNoLWFsZ29yaXRobSB1c2VkIHRvIGdlbmVyYXRlIElQIGFkZHJlc3NlcworCSAgICBmcm9tIE1BQyBhZGRyZXNzZXMgZHVyaW5nIGluaXRpYWwgREhDUCBhZGRyZXNzCisJICAgIGFsbG9jYXRpb24uIFRoaXMgaW1wcm92ZXMgcGVyZm9ybWFuY2Ugd2hlbiBsYXJnZSBudW1iZXJzCisJICAgIG9mIGhvc3RzIHdpdGggc2ltaWxhciBNQUMgYWRkcmVzc2VzIGFsbCB0cnkgYW5kIGdldCBhbiBJUAorCSAgICBhZGRyZXNzIGF0IHRoZSBzYW1lIHRpbWUuIFRoYW5rcyB0byBQYXVsIFNtaXRoIGZvciBoaXMKKwkgICAgd29yayBvbiB0aGlzLgorCisJICAgIFR3ZWFrIERIQ1AgY29kZSBzbyB0aGF0IC0tYnJpZGdlLWludGVyZmFjZSBjYW4gYmUgdXNlZCB0bworCSAgICBzZWxlY3Qgd2hpY2ggSVAgYWxpYXMgb2YgYW4gaW50ZXJmYWNlIHNob3VsZCBiZSB1c2VkIGZvcgorCSAgICBESENQIHB1cnBvc2VzIG9uIExpbnV4LiBJZiBldGgwIGhhcyBhbiBhbGlhcyBldGgwOmRoY3AKKwkgICAgdGhlbiBhZGRpbmcgIC0tYnJpZGdlLWludGVyZmFjZT1ldGgwOmRoY3AsZXRoMCB3aWxsIHVzZSAKKwkgICAgdGhlIGFkZHJlc3Mgb2YgZXRoMDpkaGNwIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCBzdWJuZXQgCisJICAgIGZvciBESENQIGFkZHJlc3MgYWxsb2NhdGlvbi4gVGhhbmtzIHRvIFBhd2VsIEdvbGFzemV3c2tpIAorICAgICAgICAgICAgZm9yIHByb21wdGluZyB0aGlzIGFuZCBFcmljIENvb3BlciBmb3IgZnVydGhlciB0ZXN0aW5nLgorCisJICAgIEFkZCAtLWRoY3AtZ2VuZXJhdGUtbmFtZXMuIFN1Z2dlc3Rpb24gYnkgRmVyZW5jIFdhZ25lci4KKworCSAgICBUd2VhayBETlMgc2VydmVyIHNlbGVjdGlvbiBhbGdvcml0aG0gd2hlbiB0aGVyZSBpcyBtb3JlCisJICAgIHRoYW4gb25lIHNlcnZlciBhdmFpbGFibGUgZm9yIGEgZG9tYWluLCBlZy4KKyAgICAgICAgICAgIC0tc2VydmVyPS9teWRvbWFpbi8xLjEuMS4xCisgICAgICAgICAgICAtLXNlcnZlcj0vbXlkb21haW4vMi4yLjIuMgorCSAgICBUaGFua3MgdG8gQWxiZXJ0byBDdWVzdGEtQ2FuYWRhIGZvciBzcG90dGluZyBhIHdlYWtuZXNzCisJICAgIGhlcmUuCisKKwkgICAgQWRkIC0tbWF4LXR0bC4gVGhhbmtzIHRvIEZyZWRyaWsgUmluZ2VydHogZm9yIHRoZSBwYXRjaC4KKworCSAgICBBbGxvdyAtLWxvZy1mYWNpbGl0eT0tIHRvIGZvcmNlIGFsbCBsb2dnaW5nIHRvCisJICAgIHN0ZGVyci4gU3VnZ2VzdGlvbiBmcm9tIENsZW1lbnMgRmlzY2hlci4KKworCSAgICBGaXggcmVncmVzc2lvbiB3aGljaCBjYXVzZWQgY29uZmlndXJhdGlvbiBsaWtlCisJICAgIC0tYWRkcmVzcz0vLmRvbWFpbi5jb20vMS4yLjMuNCB0byBiZSByZWplY3RlZC4gVGhlIGRvdCB0byB0aGUgCisJICAgIGxlZnQgb2YgdGhlIGRvbWFpbiBoYXMgYmVlbiBpbXBsaWVkIGFuZCBub3QgcmVxdWlyZWQgZm9yIGEKKwkgICAgbG9uZyB0aW1lLCBidXQgaXQgc2hvdWxkIGJlIGFjY2VwdGVkIGZvciBiYWNrd2FyZAorCSAgICBjb21wYXRpYmlsaXR5LiBUaGFua3MgdG8gQW5kcmV3IEJ1cmNpbiBmb3Igc3BvdHRpbmcgdGhpcy4KKyAgICAKKyAgICAgICAgICAgIEFkZCAtLXJlYmluZC1kb21haW4tb2sgYW5kIC0tcmViaW5kLWxvY2FsaG9zdC1vay4KKwkgICAgU3VnZ2VzdGlvbiBmcm9tIENsZW1lbnMgRmlzY2hlci4KKworCSAgICBMb2cgcmVwbGllcyB0byBxdWVyaWVzIG9mIHR5cGUgVFhULCB3aGVuIC0tbG9nLXF1ZXJpZXMgCisJICAgIGlzIHNldC4KKworCSAgICBGaXggY29tcGlsZXIgd2FybmluZ3Mgd2hlbiBjb21waWxlZCB3aXRoIC1ETk9fREhDUC4gVGhhbmtzCisJICAgIHRvIFNoYW50YW51IEdhZGdpbCBmb3IgdGhlIHBhdGNoLgorCisgICAgICAgICAgICBVcGRhdGVkIEZyZW5jaCB0cmFuc2xhdGlvbi4gVGhhbmtzIHRvIEdpbGRhcyBMZSBOYWRhbi4KKworCSAgICBVcGRhdGVkIFBvbGlzaCB0cmFuc2xhdGlvbi4gVGhhbmtzIHRvIEphbiBQc290YS4KKworCSAgICBVcGRhdGVkIEdlcm1hbiB0cmFuc2xhdGlvbi4gVGhhbmtzIHRvIE1hdHRoaWFzIEFuZHJlZS4KKworCSAgICBBZGRlZCBjb250cmliL3N0YXRpYy1hcnAsIHRoYW5rcyB0byBEYXJyZW4gSG9vLgorIAorCSAgICBGaXggY29ycnVwdGlvbiBvZiB0aGUgZG9tYWluIHdoZW4gYSBuYW1lIGZyb20gL2V0Yy9ob3N0cworCSAgICBvdmVycmlkZXMgb25lIHN1cHBsaWVkIGJ5IGEgREhDUCBjbGllbnQuIFRoYW5rcyB0byBGZWRvcgorCSAgICBLb3poZXZuaWtvdiBmb3Igc3BvdHRpbmcgdGhlIHByb2JsZW0uCisKKyAgICAgICAgICAgIFVwZGF0ZWQgU3BhbmlzaCB0cmFuc2xhdGlvbi4gVGhhbmtzIHRvIENocmlzIENoYXRoYW0uCisKKwordmVyc2lvbiAyLjUyCisgICAgICAgICAgICBXb3JrIGFyb3VuZCBhIExpbnV4IGtlcm5lbCBidWcgd2hpY2ggaW5zaXN0cyB0aGF0IHRoZSAKKwkgICAgbGVuZ3RoIG9mIHRoZSBvcHRpb24gcGFzc2VkIHRvIHNldHNvY2tvcHQgbXVzdCBiZSBhdCBsZWFzdAorICAgICAgICAgICAgc2l6ZW9mKGludCkgYnl0ZXMsIGV2ZW4gaWYgd2UncmUgY2FsbGluZyBTT19CSU5EVE9ERVZJQ0UKKyAgICAgICAgICAgIGFuZCB0aGUgZGV2aWNlIG5hbWUgaXMgImxvIi4gIE5vdGUgdGhhdCB0aGlzIGlzIGZpeGVkIAorCSAgICBpbiBrZXJuZWwgMi42LjMxLCBidXQgdGhlIHdvcmthcm91bmQgaXMgaGFybWxlc3MgYW5kIAorCSAgICBhbGxvd3MgZWFybGllciBrZXJuZWxzIHRvIGJlIHVzZWQuIEFsc28gZml4IGRuc21hc3EgCisJICAgIGJ1ZyB3aGljaCByZXBvcnRlZCB0aGUgd3JvbmcgYWRkcmVzcyB3aGVuIHRoaXMgZmFpbGVkLiAKKwkgICAgVGhhbmtzIHRvIEZlZG9yIGZvciBmaW5kaW5nIHRoaXMuCisKKwkgICAgVGhlIEFQSSBmb3IgSVB2NiBQS1RJTkZPIGNoYW5nZWQgYXJvdW5kIExpbnV4IGtlcm5lbAorCSAgICAyLjYuMTQuIFdvcmthcm91bmQgdGhlIGNhc2Ugd2hlcmUgZG5zbWFzcSBpcyBjb21waWxlZAorCSAgICBhZ2FpbnN0IG5ld2VyIGhlYWRlcnMsIGJ1dCB0aGVuIHJ1biBvbiBhbiBvbGQga2VybmVsOgorCSAgICBuZWNlc3NhcnkgZm9yIHNvbWUgKldSVCBkaXN0cm9zLgorCisJICAgIFJlLXJlYWQgdGhlIHNldCBvZiBuZXR3b3JrIGludGVyZmFjZXMgd2hlbiByZS1sb2FkaW5nCisJICAgIC9ldGMvcmVzb2x2LmNvbmYgaWYgLS1iaW5kLWludGVyZmFjZXMgaXMgbm90IHNldC4gVGhpcworCSAgICBoYW5kbGVzIHRoZSBjYXNlIHRoYXQgbG9vcGJhY2sgaW50ZXJmYWNlcyBkbyBub3QgZXhpc3QKKwkgICAgd2hlbiBkbnNtYXNxIGlzIGZpcnN0IHN0YXJ0ZWQuCisKKwkgICAgVHdlYWsgdGhlIFBYRSBjb2RlIHRvIHN1cHBvcnQgcG9ydCA0MDExLiBUaGlzIHNob3VsZAorCSAgICByZWR1Y2UgYnJvYWRjYXN0cyBhbmQgbWFrZSB0aGluZ3MgbW9yZSByZWxpYWJsZSB3aGVuIG90aGVyCisJICAgIHNlcnZlcnMgYXJlIGFyb3VuZC4gSXQgYWxzbyBpbXByb3ZlcyBpbnRlci1vcGVyYWJpbGl0eQorCSAgICB3aXRoIGNlcnRhaW4gY2xpZW50cy4KKworCSAgICBNYWtlIGEgcHhlLXNlcnZpY2UgY29uZmlndXJhdGlvbiB3aXRoIG5vIGZpbGVuYW1lIG9yIGJvb3QgCisJICAgIHNlcnZpY2UgdHlwZSBsZWdhbDogdGhpcyBkb2VzIGEgbG9jYWwgYm9vdC4gZWcuCisJICAgIHB4ZS1zZXJ2aWNlPXg4NlBDLCAiTG9jYWwgYm9vdCIgCisKKwkgICAgQmUgbW9yZSBjb25zZXJ2YXRpdmUgaW4gZGV0ZWN0aW5nICJBIGZvciBBIgorCSAgICBxdWVyaWVzLiBEbnNtYXNxIGNoZWNrcyBpZiB0aGUgbmFtZSBpbiBhIHR5cGU9QSBxdWVyeSBsb29rcworCSAgICBsaWtlIGEgZG90dGVkLXF1YWQgSVAgYWRkcmVzcyBhbmQgYW5zd2VycyB0aGUgcXVlcnkgaXRzZWxmCisJICAgIGlmIHNvLCByYXRoZXIgdGhhbiBmb3J3YXJkaW5nIGl0LiBQcmV2aW91c2x5IGRuc21hc3EKKwkgICAgcmVsaWVkIGluIHRoZSBsaWJyYXJ5IGZ1bmN0aW9uIGluZXRfYWRkcigpIHRvIGNvbnZlcnQKKwkgICAgYWRkcmVzc2VzLCBhbmQgdGhhdCB3aWxsIGFjY2VwdCBzb21lIHRoaW5ncyB3aGljaCBhcmUKKwkgICAgY29uZnVzaW5nIGluIHRoaXMgY29udGV4dCwgbGlrZSAxLjIuMyBvciBldmVuIGp1c3QKKwkgICAgMTIzNC4gTm93IHdlIG9ubHkgZG8gQSBmb3IgQSBwcm9jZXNzaW5nIGZvciBmb3VyIGRlY2ltYWwKKwkgICAgbnVtYmVycyBkZWxpbWl0ZWQgYnkgZG90cy4KKworCSAgICBBIGNvdXBsZSBvZiB0d2Vha3MgdG8gZml4IGNvbXBpbGF0aW9uIG9uIFNvbGFyaXMuIFRoYW5rcworCSAgICB0byBKb2VsIE1hY2tsb3cgZm9yIGhlbHAgd2l0aCB0aGlzLgorCisJICAgIEFub3RoZXIgU29sYXJpcyBjb21waWxhdGlvbiB0d2VhaywgbmVlZGVkIGZvciBTb2xhcmlzCisJICAgIDIwMDkuMDYuIFRoYW5rcyB0byBMZWUgRXNzZW4gZm9yIHRoYXQuCisKKwkgICAgQWRkZWQgZXh0cmFjdCBwYWNrYWdpbmcgc3R1ZmYgZnJvbSBMZWUgRXNzZW4gdG8gCisJICAgIGNvbnRyaWIvU29sYXJpczEwLgorICAgICAgICAgIAorICAgICAgICAgICAgSW5jcmVhc2VkIHRoZSBkZWZhdWx0IGxpbWl0IG9uIG51bWJlciBvZiBsZWFzZXMgdG8gMTAwMAorICAgICAgICAgICAgKGZyb20gMTUwKS4gVGhpcyBpcyBtYWlubHkgYSBkZWZlbmNlIGFnYWluc3QgRG9TIGF0dGFja3MsCisgICAgICAgICAgICBhbmQgZm9yIHRoZSBhdmVyYWdlICJvbmUgZm9yIHR3byBjbGFzcyBDIG5ldHdvcmtzIgorICAgICAgICAgICAgaW5zdGFsbGF0aW9uLCBJUCBhZGRyZXNzIGV4aGF1c3Rpb24gZG9lcyB0aGF0IGp1c3QgYXMKKyAgICAgICAgICAgIHdlbGwuIE1ha2luZyB0aGUgbGltaXQgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2YgSVAKKyAgICAgICAgICAgIGFkZHJlc3NlcyBhdmFpbGFibGUgaW4gc3VjaCBhbiBpbnN0YWxsYXRpb24gcmVtb3ZlcyBhCisgICAgICAgICAgICBzdXJwcmlzZSB3aGljaCBvdGhlcndpc2UgY2FuIGNhdGNoIHBlb3BsZSBvdXQuCisKKwkgICAgUmVtb3ZlZCBleHRyYW5lb3VzIHRyYWlsaW5nIHNwYWNlIGluIHRoZSB2YWx1ZSBvZiB0aGUKKwkgICAgRE5TTUFTUV9USU1FX1JFTUFJTklORyBETlNNQVNRX0xFQVNFX0xFTkdUSCBhbmQKKwkgICAgRE5TTUFTUV9MRUFTRV9FWFBJUkVTIGVudmlyb25tZW50IHZhcmlhYmxlcy4gVGhhbmtzIHRvCisJICAgIEdpbGRhcyBMZSBOYWRhbiBmb3Igc3BvdHRpbmcgdGhpcy4KKworCSAgICBQcm92aWRlIHRoZSBuZXR3b3JrLWlkIHRhZ3MgZm9yIGEgREhDUCB0cmFuc2FjdGlvbiB0byAKKwkgICAgdGhlIGxlYXNlLWNoYW5nZSBzY3JpcHQgaW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCisJICAgIEROU01BU1FfVEFHUy4gQSBnb29kIHN1Z2dlc3Rpb24gZnJvbSBHaWxkYXMgTGUgTmFkYW4uICAKKworCSAgICBBZGQgc3VwcG9ydCBmb3IgUkZDMzkyNSAiVmVuZG9yLUlkZW50aWZ5aW5nIFZlbmRvcgorCSAgICBPcHRpb25zIi4gVGhlIHN5bnRheCBsb29rcyBsaWtlIHRoaXM6ICAKKwkgICAgLS1kaGNwLW9wdGlvbj12aS1lbmNhcDo8ZW50ZXJwcmlzZSBudW1iZXI+LCAuLi4uLi4uLi4KKworCSAgICBBZGQgc3VwcG9ydCB0byAtLWRoY3AtbWF0Y2ggdG8gYWxsb3cgbWF0Y2hpbmcgYWdhaW5zdAorCSAgICBSRkMzOTI1ICJWZW5kb3ItSWRlbnRpZnlpbmcgVmVuZG9yIENsYXNzZXMiLiBUaGUgc3ludGF4CisJICAgIGxvb2tzIGxpa2UgdGhpczoKKwkgICAgLS1kaGNwLW1hdGNoPXRhZyx2aS1lbmNhcDxlbnRlcnByaXNlIG51bWJlcj4sIDx2YWx1ZT4KKwkgICAgCisJICAgIEFkZCBzb21lIGFwcGxpY2F0aW9uIHNwZWNpZmljIGNvZGUgdG8gYXNzaXN0IGluCisJICAgIGltcGxlbWVudGluZyB0aGUgQnJvYWRiYW5kIGZvcnVtIFRSMDY5IENQRS1XQU4KKwkgICAgc3BlY2lmaWNhdGlvbi4gVGhlIGRldGFpbHMgYXJlIGluIGNvbnRyaWIvQ1BFLVdBTi9SRUFETUUKKworCSAgICBJbmNyZWFzZSB0aGUgZGVmYXVsdCBETlMgcGFja2V0IHNpemUgbGltaXQgdG8gNDA5NiwgYXMKKwkgICAgcmVjb21tZW5kZWQgYnkgUkZDNTYyNSBzZWN0aW9uIDQuNC4zLiBUaGlzIGNhbiBiZQorCSAgICByZWNvbmZpZ3VyZWQgdXNpbmcgLS1lZG5zLXBhY2tldC1tYXggaWYgbmVlZGVkLiBUaGFua3MgdG8KKwkgICAgRnJhbmNpcyBEdXBvbnQgZm9yIHBvaW50aW5nIHRoaXMgb3V0LgorCisJICAgIFJld3JpdGUgcXVlcnktaWRzIGV2ZW4gZm9yIFRTSUcgc2lnbmVkIHBhY2tldHMsIHNpbmNlCisJICAgIHRoaXMgaXMgYWxsb3dlZCBieSBSRkM1NjI1IHNlY3Rpb24gNC41LgorCSAgICAKKwkgICAgVXNlIGdldG9wdF9sb25nIGJ5IGRlZmF1bHQgb24gT1MgWC4gSXQgaGFzIGJlZW4gc3VwcG9ydGVkCisJICAgIHNpbmNlIHZlcnNpb24gMTAuMy4wLiBUaGFua3MgdG8gQXJlayBEcmV5ZXIgZm9yIHNwb3R0aW5nCisJICAgIHRoaXMuCisKKwkgICAgQWRkZWQgdXAtdG8tZGF0ZSBzdGFydHVwIGNvbmZpZ3VyYXRpb24gZm9yIE1hY09TWC9sYXVuY2hkCisJICAgIGluIGNvbnRyaWIvTWFjT1NYLWxhdW5jaGQuIFRoYW5rcyB0byBBcmVrIERyZXllciBmb3IKKwkgICAgcHJvdmlkaW5nIHRoaXMuCisKKwkgICAgRml4IGxpbmsgZXJyb3Igd2hlbiBpbmNsdWRpbmcgRGJ1cyBidXQgZXhjbHVkaW5nIERIQ1AuIAorCSAgICBUaGFua3MgdG8gT3NjaHRhbiBmb3IgdGhlIGJ1ZyByZXBvcnQuCisKKyAgICAgICAgICAgIFVwZGF0ZWQgRnJlbmNoIHRyYW5zbGF0aW9uLiBUaGFua3MgdG8gR2lsZGFzIExlIE5hZGFuLgorIAorICAgICAgICAgICAgVXBkYXRlZCBQb2xpc2ggdHJhbnNsYXRpb24uIFRoYW5rcyB0byBKYW4gUHNvdGEuCisKKwkgICAgVXBkYXRlZCBTcGFuaXNoIHRyYW5zbGF0aW9uLiBUaGFua3MgdG8gQ2hyaXMgQ2hhdGhhbS4KKworCSAgICBGaXhlZCBjb25mdXNpb24gYWJvdXQgZG9tYWlucywgd2hlbiBsb29raW5nIHVwIERIQ1AgaG9zdHMKKwkgICAgaW4gL2V0Yy9ob3N0cy4gVGhpcyBjb3VsZCBjYXVzZSBzcHVyaW91cyAiSWdub3JpbmcKKwkgICAgZG9tYWluLi4uIiBtZXNzYWdlcy4gVGhhbmtzIHRvIEZlZG9yIEtvemhldm5pa292IGZvcgorCSAgICBmaW5kaW5nIGFuZCBhbmFseXNpbmcgdGhlIHByb2JsZW0uCisKKwkgICAgCit2ZXJzaW9uIDIuNTEKKyAgICAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBpbnRlcm5hdGlvbmFsaXNlZCBETlMuIE5vbi1BU0NJSSBjaGFyYWN0ZXJzCisgICAgICAgICAgICBpbiBkb21haW4gbmFtZXMgZm91bmQgaW4gL2V0Yy9ob3N0cywgL2V0Yy9ldGhlcnMgYW5kIAorCSAgICAvZXRjL2Ruc21hc3EuY29uZiB3aWxsIGJlIGNvcnJlY3RseSBoYW5kbGVkIGJ5IHRyYW5zbGF0aW9uIHRvCisgICAgICAgICAgICBwdW55Y29kZSwgYXMgc3BlY2lmaWVkIGluIFJGQzM0OTAuIFRoaXMgZnVuY3Rpb24gaXMgb25seQorICAgICAgICAgICAgYXZhaWxhYmxlIGlmIGRuc21hc3EgaXMgY29tcGlsZWQgd2l0aCBpbnRlcm5hdGlvbmFsaXNhdGlvbgorICAgICAgICAgICAgc3VwcG9ydCwgYW5kIGFkZHMgYSBkZXBlbmRlbmN5IG9uIEdOVSBsaWJpZG4uIFdpdGhvdXQgaTE4bgorICAgICAgICAgICAgc3VwcG9ydCwgZG5zbWFzcSBjb250aW51ZXMgdG8gYmUgY29tcGlsYWJsZSB3aXRoIGp1c3QKKyAgICAgICAgICAgIHN0YW5kYXJkIHRvb2xzLiBUaGFua3MgdG8gWXZlcyBEb3Jmc21hbiBmb3IgdGhlCisgICAgICAgICAgICBzdWdnZXN0aW9uLiAKKworICAgICAgICAgICAgQWRkIHR3byBtb3JlIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgbGVhc2UtY2hhbmdlIHNjcmlwdHM6CisJICAgIEZpcnN0LCBETlNNQVNRX1NVUFBMSUVEX0hPU1ROQU1FOyB0aGlzIGlzIHNldCB0byB0aGUgaG9zdG5hbWUKKwkgICAgc3VwcGxpZWQgYnkgYSBjbGllbnQsIGV2ZW4gaWYgdGhlIGFjdHVhbCBob3N0bmFtZSB1c2VkIGlzCisJICAgIG92ZXItcmlkZGVuIGJ5IGRoY3AtaG9zdCBvciBkaGNwLWlnbm9yZS1uYW1lcyBkaXJlY3RpdmVzLgorCSAgICBBbHNvIEROU01BU1FfUkVMQVlfQUREUkVTUyB3aGljaCBnaXZlcyB0aGUgYWRkcmVzcyBvZiAKKyAgICAgICAgICAgIGEgREhDUCByZWxheSwgaWYgdXNlZC4KKwkgICAgU3VnZ2VzdGlvbnMgZnJvbSBNaWNoYWVsIFJhY2suCisKKwkgICAgRml4IHJlZ3Jlc3Npb24gd2hpY2ggYnJva2UgZWNobyBvZiByZWxheS1hZ2VudAorCSAgICBvcHRpb25zLiBUaGFua3MgdG8gTWljaGFlbCBSYWNrIGZvciBzcG90dGluZyB0aGlzLgorICAgICAgICAgIAorICAgICAgICAgICAgRG9uJ3QgdHJlYXQgb3B0aW9uIDY3IGFzIGJlaW5nIGludGVyY2hhbmdlYWJsZSB3aXRoCisgICAgICAgICAgICBkaGNwLWJvb3QgcGFyYW1ldGVycyBpZiBpdCdzIHNwZWNpZmllZCBhcworICAgICAgICAgICAgZGhjcC1vcHRpb24tZm9yY2UuCisKKwkgICAgTWFrZSB0aGUgY29kZSB0byBjYWxsIHNjcmlwdHMgb24gbGVhc2UtY2hhbmdlIGNvbXBpbGUtdGltZQorCSAgICBvcHRpb25hbC4gSXQgY2FuIGJlIHN3aXRjaGVkIG9mZiBieSBlZGl0aW5nIHNyYy9jb25maWcuaAorCSAgICBvciBidWlsZGluZyB3aXRoICJtYWtlIENPUFRTPS1ETk9fU0NSSVBUIi4KKyAKKwkgICAgTWFrZSB0aGUgVEZUUCBzZXJ2ZXIgY29wZSB3aXRoIGZpbGVuYW1lcyBmcm9tIFdpbmRvd3MvRE9TCisJICAgIHdoaWNoIHVzZSAnXCcgYXMgcGF0aG5hbWUgc2VwYXJhdG9yLiBUaGFua3MgdG8gUmFsZiBmb3IKKwkgICAgdGhlIHBhdGNoLgorCisJICAgIFVwZGF0ZWQgUG9saXNoIHRyYW5zbGF0aW9uLiBUaGFua3MgdG8gSmFuIFBzb3RhLgorIAorCSAgICBXYXJuIGlmIGFuIElQIGFkZHJlc3MgaXMgZHVwbGljYXRlZCBpbiAvZXRjL2V0aGVycy4gVGhhbmtzCisJICAgIHRvIEZlbGl4IFNjaHdhcnogZm9yIHBvaW50aW5nIHRoaXMgb3V0LgorCisJICAgIFRlYWNoIC0tY29uZi1kaXIgdG8gdGFrZSBhbiBvcHRpb24gbGlzdCBvZiBmaWxlIHN1ZmZpY2VzCisJICAgIHdoaWNoIHdpbGwgYmUgaWdub3JlZCB3aGVuIHNjYW5uaW5nIHRoZSBkaXJlY3RvcnkuIFVzZWZ1bAorCSAgICBmb3IgYmFja3VwIGZpbGVzIGV0Yy4gVGhhbmtzIHRvIEhlbG11dCBIdWxsZW4gZm9yIHRoZQorCSAgICBzdWdnZXN0aW9uLiAKKworCSAgICBBZGQgbmV3IERIQ1Agb3B0aW9uIG5hbWVkIHRmdHBzZXJ2ZXItYWRkcmVzcywgd2hpY2gKKwkgICAgY29ycmVzcG9uZHMgdG8gdGhlIHRoaXJkIGFyZ3VtZW50IG9mIGRoY3AtYm9vdC4gVGhpcworCSAgICBhbGxvd3MgdGhlIGNvbXBsZXRlIGZ1bmN0aW9uYWxpdHkgb2YgZGhjcC1ib290IHRvIGJlCisJICAgIHJlcGxpY2F0ZWQgd2l0aCBkaGNwLW9wdGlvbi4gVXNlZnVsIHdoZW4gdXNpbmcgCisJICAgIGRoY3Atb3B0c2ZpbGUuCisKKwkgICAgVGVzdCB3aGljaCB1cHN0cmVhbSBuYW1lc2VydmVyIHRvIHVzZSBldmVyeSAxMCBzZWNvbmRzCisgICAgICAgICAgICBvciA1MCBxdWVyaWVzIGFuZCBub3QganVzdCB3aGVuIGEgcXVlcnkgdGltZXMgb3V0IGFuZCAKKyAgICAgICAgICAgIGlzIHJldHJpZWQuIFRoaXMgc2hvdWxkIGltcHJvdmUgcGVyZm9ybWFuY2Ugd2hlbiB0aGVyZQorICAgICAgICAgICAgaXMgYSBzbG93IG5hbWVzZXJ2ZXIgaW4gdGhlIGxpc3QuIFRoYW5rcyB0byBKb2UgZm9yIHRoZQorICAgICAgICAgICAgc3VnZ2VzdGlvbi4gCisKKwkgICAgRG9uJ3QgZG8gYW55IFBYRSBwcm9jZXNzaW5nLCBldmVuIGZvciBjbGllbnRzIHdpdGggdGhlIAorCSAgICBjb3JyZWN0IHZlbmRvcmNsYXNzLCB1bmxlc3MgYXQgbGVhc3Qgb25lIHB4ZS1wcm9tcHQgb3IgCisgICAgICAgICAgICBweGUtc2VydmljZSBvcHRpb24gaXMgZ2l2ZW4uIFRoaXMgc3RvcHMgZG5zbWFzcSAKKyAgICAgICAgICAgIGludGVyZmVyaW5nIHdpdGggcHJveHkgUFhFIHN1YnN5c3RlbXMgd2hlbiBpdCBpcyBqdXN0IAorICAgICAgICAgICAgdGhlIERIQ1Agc2VydmVyLiBUaGFua3MgdG8gU3BlbmNlciBDbGFyayBmb3Igc3BvdHRpbmcgdGhpcy4KKworCSAgICBMaW1pdCB0aGUgYmxvY2tzaXplIHVzZWQgZm9yIFRGVFAgdHJhbnNmZXJzIHRvIGEgdmFsdWUKKwkgICAgd2hpY2ggYXZvaWRzIHBhY2tldCBmcmFnbWVudGF0aW9uLCBiYXNlZCBvbiB0aGUgTVRVIG9mIHRoZQorCSAgICBsb2NhbCBpbnRlcmZhY2UuIE1hbnkgbmV0Ym9vdCBST01zIGNhbid0IGNvcGUgd2l0aAorCSAgICBmcmFnbWVudGVkIHBhY2tldHMuCisKKwkgICAgSG9ub3VyIGRoY3AtaWdub3JlIGNvbmZpZ3VyYXRpb24gZm9yIFBYRSBhbmQgcHJveHktUFhFIAorCSAgICByZXF1ZXN0cy4gVGhhbmtzIHRvIE5pZWxzIEJhc2plcyBmb3IgdGhlIGJ1ZyByZXBvcnQuCisKKyAgICAgICAgICAgIFVwZGF0ZWQgRnJlbmNoIHRyYW5zbGF0aW9uLiBUaGFua3MgdG8gR2lsZGFzIExlIE5hZGFuLgorCisKK3ZlcnNpb24gMi41MAorCSAgICBGaXggc2VjdXJpdHkgcHJvYmxlbSB3aGljaCBhbGxvd2VkIGFueSBob3N0IHBlcm1pdHRlZCB0byAKKyAgICAgICAgICAgIGRvIFRGVFAgdG8gcG9zc2libHkgY29tcHJvbWlzZSBkbnNtYXNxIGJ5IHJlbW90ZSBidWZmZXIgCisgICAgICAgICAgICBvdmVyZmxvdyB3aGVuIFRGVFAgZW5hYmxlZC4gVGhhbmtzIHRvIENvcmUgU2VjdXJpdHkgCisJICAgIFRlY2hub2xvZ2llcyBhbmQgSXbDoW4gQXJjZSwgUGFibG8gSGVybsOhbiBKb3JnZSwgQWxlamFuZHJvIAorCSAgICBQYWJsbyBSb2RyaWd1ZXosIE1hcnTDrW4gQ29jbywgQWxiZXJ0byBTb2xpw7FvIFRlc3RhIGFuZAorCSAgICBQYWJsbyBBbm5ldHRhLiBUaGlzIHByb2JsZW0gaGFzIEJ1Z3RyYXEgaWQ6IDM2MTIxIAorICAgICAgICAgICAgYW5kIENWRTogMjAwOS0yOTU3CisKKyAgICAgICAgICAgIEZpeCBhIHByb2JsZW0gd2hpY2ggYWxsb3dlZCBhIG1hbGljaW91cyBURlRQIGNsaWVudCB0byAKKyAgICAgICAgICAgIGNyYXNoIGRuc21hc3EuIFRoYW5rcyB0byBTdGV2ZSBHcnViYiBhdCBSZWQgSGF0IGZvciAKKyAgICAgICAgICAgIHNwb3R0aW5nIHRoaXMuIFRoaXMgcHJvYmxlbSBoYXMgQnVndHJhcSBpZDogMzYxMjAgYW5kIAorICAgICAgICAgICAgQ1ZFOiAyMDA5LTI5NTgKKworCit2ZXJzaW9uIDIuNDkKKyAgICAgICAgICAgIEZpeCByZWdyZXNzaW9uIGluIDIuNDggd2hpY2ggZGlzYWJsZXMgdGhlIGxlYXNlLWNoYW5nZQorICAgICAgICAgICAgc2NyaXB0LiBUaGFua3MgdG8gSm9zZSBMdWlzIER1cmFuIGZvciBzcG90dGluZyB0aGlzLgorCisJICAgIExvZyBURlRQICJmaWxlIG5vdCBmb3VuZCIgZXJyb3JzLiBUaGVzZSB3ZXJlIG5vdCBsb2dnZWQsCisJICAgIHNpbmNlIGEgbm9ybWFsIFBYRUxpbnV4IGJvb3QgZ2VuZXJhdGVzIG1hbnkgb2YgdGhlbSwgYnV0CisJICAgIHRoZSBsYWNrIG9mIHRoZSBtZXNzYWdlcyBzZWVtcyB0byBiZSBtb3JlIGNvbmZ1c2luZyB0aGFuCisJICAgIHJvdXRpbmVseSBzZWVpbmcgdGhlbSB3aGVuIHRoZXJlIGlzIG5vIHJlYWwgZXJyb3IuCisKKwkgICAgVXBkYXRlIFNwYW5pc2ggdHJhbnNsYXRpb24uIFRoYW5rcyB0byBDaHJpcyBDaGF0aGFtLgorIAorCit2ZXJzaW9uIDIuNDgKKyAgICAgICAgICAgIEFyY2hpdmVkIHRoZSBleHRlbnNpdmUsIGJhY2t3YXJkcywgY2hhbmdlbG9nIHRvCisgICAgICAgICAgICBDSEFOR0VMT0cuYXJjaGl2ZS4gVGhlIGN1cnJlbnQgY2hhbmdlbG9nIG5vdyBydW5zIGZyb20KKyAgICAgICAgICAgIHZlcnNpb24gMi40MyBhbmQgcnVucyBjb252ZW50aW9uYWxseS4KKworCSAgICBGaXhlZCBidWcgd2hpY2ggYnJva2UgYmluZGluZyBvZiBzZXJ2ZXJzIHRvIHBoeXNpY2FsCisJICAgIGludGVyZmFjZXMgd2hlbiBpbnRlcmZhY2UgbmFtZXMgd2VyZSBsb25nZXIgdGhhbiBmb3VyCisJICAgIGNoYXJhY3RlcnMuIFRoYW5rcyB0byBNVVJBU0UgS2F0c3Vub3JpIGZvciB0aGUgcGF0Y2guCisKKwkgICAgRml4ZWQgbmV0bGluayBjb2RlIHRvIGNoZWNrIHRoYXQgbWVzc2FnZXMgY29tZSBmcm9tIHRoZQorCSAgICBjb3JyZWN0IHNvdXJjZSwgYW5kIG5vdCBhbm90aGVyIHVzZXJzcGFjZSBwcm9jZXNzLiBUaGFua3MKKwkgICAgdG8gU3RldmUgR3J1YmIgZm9yIHRoZSBwYXRjaC4KKworCSAgICBNYWludGFpbmFiaWxpdHkgZHJpdmU6IHJlbW92ZWQgYnVnIGFuZCBtaXNzaW5nIGZlYXR1cmUKKwkgICAgd29ya2Fyb3VuZHMgZm9yIHNvbWUgb2xkIHBsYXRmb3Jtcy4gU29sYXJpcyA5LCBPcGVuQlNECisJICAgIG9sZGVyIHRoYW4gNC4xLCBHbGliYyBvbGRlciB0aGFuIDIuMiwgTGludXggMi4yLnggYW5kIAorICAgICAgICAgICAgREJ1cyBvbGRlciB0aGFuIDEuMS54IGFyZSBubyBsb25nZXIgc3VwcG9ydGVkLiAKKworCSAgICBEb24ndCByZWFkIGluY2x1ZGVkIGNvbmZpZ3VyYXRpb24gZmlsZXMgbW9yZSB0aGFuIG9uY2U6CisJICAgIGFsbG93cyBjb21wbGV4IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlcyB3aXRob3V0IHByb2JsZW1zLgorCisJICAgIE1hcmsgbG9nIG1lc3NhZ2VzIGZyb20gdGhlIHZhcmlvdXMgc3Vic3lzdGVtcyBpbiBkbnNtYXNxOgorCSAgICBtZXNzYWdlcyBmcm9tIHRoZSBESENQIHN1YnN5c3RlbSBub3cgaGF2ZSB0aGUgaWRlbnQgc3RyaW5nCisJICAgICJkbnNtYXNxLWRoY3AiIGFuZCBtZXNzYWdlcyBmcm9tIFRGVFAgaGF2ZSBpZGVudAorCSAgICAiZG5zbWFzcS10ZnRwIi4gVGhhbmtzIHRvIE9sYWYgV2VzdHJpayBmb3IgdGhlIHBhdGNoLgorCisJICAgIEZpeCBwb3NzaWJsZSBpbmZpbml0ZSBESENQIHByb3RvY29sIGxvb3Agd2hlbiBhbiBJUAorCSAgICBhZGRyZXNzIG5haWxlZCB0byBhIGhvc3RuYW1lIChub3QgYSBNQUMgYWRkcmVzcykgIGFuZCBhIAorCSAgICBob3N0IHNvbWV0aW1lcyBwcm92aWRlcyB0aGUgbmFtZSwgc29tZXRpbWVzIG5vdC4KKworCSAgICBBbGxvdyAtLWFkZG4taG9zdHMgdG8gdGFrZSBhIGRpcmVjdG9yeTogYWxsIHRoZSBmaWxlcyAKKwkgICAgaW4gdGhlIGRpcmVjdG9yeSBhcmUgcmVhZC4gVGhhbmtzIHRvIFBoaWwgQ29ybmVsaXVzIGZvciAKKwkgICAgdGhlIHN1Z2dlc3Rpb24uIAorCisJICAgIFN1cHBvcnQgLS1icmlkZ2UtaW50ZXJmYWNlIG9uIGFsbCBwbGF0Zm9ybXMsIG5vdCBqdXN0IEJTRC4KKyAKKyAgICAgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIGFkdmFuY2VkIFBYRSBmdW5jdGlvbnMuIEl0J3Mgbm93CisgICAgICAgICAgICBwb3NzaWJsZSB0byBkZWZpbmUgYSBwcm9tcHQgYW5kIG1lbnUgb3B0aW9ucyB3aGljaCB3aWxsCisgICAgICAgICAgICBiZSBkaXNwbGF5ZWQgd2hlbiBhIGNsaWVudCBQWEUgYm9vdHMuIEl0J3MgYWxzbyBwb3NzaWJsZSB0bworICAgICAgICAgICAgaGFuZC1vZmYgYm9vdGluZyB0byBvdGhlciBib290IHNlcnZlcnMuIFByb3h5LURIQ1AsIHdoZXJlCisgICAgICAgICAgICBkbnNtYXNxIGp1c3Qgc3VwcGxpZXMgdGhlIFBYRSBpbmZvcm1hdGlvbiBhbmQgYW5vdGhlciBESENQCisgICAgICAgICAgICBzZXJ2ZXIgZG9lcyBhZGRyZXNzIGFsbG9jYXRpb24sIGlzIGFsc28gYWxsb3dlZC4gU2VlIHRoZQorICAgICAgICAgICAgLS1weGUtcHJvbXB0IGFuZCAtLXB4ZS1zZXJ2aWNlIGtleXdvcmRzLiBUaGFua3MgdG8gCisJICAgIEFsa2lzIEdlb3Jnb3BvdWxvcyBmb3IgdGhlIHN1Z2dlc3Rpb24gYW5kIEd1aWxoZXJtZSBNb3JvCisgICAgICAgICAgICBhbmQgTWljaGFlbCBCcm93biBmb3IgYXNzaXN0YW5jZS4KKworCSAgICBJbXByb3ZlbWVudHMgdG8gREhDUCBsb2dnaW5nLiBUaGFua3MgdG8gVG9tIE1ldHJvIGZvcgorCSAgICB1c2VmdWwgc3VnZ2VzdGlvbnMuCisJICAgIAorCSAgICBBZGQgYWJpbGl0eSB0byBidWlsZCBkbnNtYXNxIHdpdGhvdXQgREhDUCBzdXBwb3J0LiBUbyBkbworCSAgICB0aGlzLCBlZGl0IHNyYy9jb25maWcuaCBvciBidWlsZCB3aXRoCisJICAgICJtYWtlIENPUFRTPS1ETk9fREhDUCIuIFRoYW5rcyB0byBNYWhhdmlyIEphaW4gZm9yIHRoZSBwYXRjaC4gCisJICAgIAorCSAgICBBZGRlZCAtLXRlc3QgY29tbWFuZC1saW5lIHN3aXRjaCAtIHN5bnRheCBjaGVjaworCSAgICBjb25maWd1cmF0aW9uIGZpbGVzIG9ubHkuCisgCisgICAgICAgICAgICBVcGRhdGVkIEZyZW5jaCB0cmFuc2xhdGlvbi4gVGhhbmtzIHRvIEdpbGRhcyBMZSBOYWRhbi4KKworCit2ZXJzaW9uIDIuNDcKKwkgICAgVXBkYXRlZCBGcmVuY2ggdHJhbnNsYXRpb24uIFRoYW5rcyB0byBHaWxkYXMgTGUgTmFkYW4uCisKKwkgICAgRml4ZWQgaW50ZXJmYWNlIGVudW1lcmF0aW9uIGNvZGUgdG8gd29yayBvbiBOZXRCU0QKKwkgICAgNS4wLiBUaGFua3MgdG8gUm95IE1hcnBsZXMgZm9yIHRoZSBwYXRjaC4gCisKKwkgICAgVXBkYXRlZCBjb25maWcuaCB0byB1c2UgdGhlIHNhbWUgbG9jYXRpb24gZm9yIHRoZSBsZWFzZQorCSAgICBmaWxlIG9uIE5ldEJTRCBhcyB0aGUgb3RoZXIgKkJTRCB2YXJpYW50cy4gQWxzbyBhbGxvdworCSAgICBMRUFTRUZJTEUgYW5kIENPTkZGSUxFIHN5bWJvbHMgdG8gYmUgb3ZlcnJpZGVuIGluIENGTEFHUy4gIAorCisgICAgICAgICAgICBIYW5kbGUgZHVwbGljYXRlIGFkZHJlc3MgZGV0ZWN0aW9uIG9uIElQdjYgbW9yZQorICAgICAgICAgICAgaW50ZWxsaWdlbnRseS4gSW4gSVB2NiwgYW4gaW50ZXJmYWNlIGNhbiBoYXZlIGFuIGFkZHJlc3MKKyAgICAgICAgICAgIHdoaWNoIGlzIG5vdCB1c2FibGUsIGJlY2F1c2UgaXQgaXMgc3RpbGwgdW5kZXJnb2luZyBEQUQKKyAgICAgICAgICAgIChzdWNoIGFkZHJlc3NlcyBhcmUgbWFya2VkICJ0ZW50YXRpdmUiKS4gQXR0ZW1wdGluZyB0bworICAgICAgICAgICAgYmluZCB0byBhbiBhZGRyZXNzIGluIHRoaXMgc3RhdGUgcmV0dXJucyBhbiBlcnJvciwKKyAgICAgICAgICAgIEVBRERSTk9UQVZBSUwuIFByZXZpb3VzbHksIG9uIGdldHRpbmcgc3VjaCBhbiBlcnJvciwKKyAgICAgICAgICAgIGRuc21hc3Egd291bGQgc2lsZW50bHkgYWJhbmRvbiB0aGUgYWRkcmVzcywgYW5kIG5ldmVyCisgICAgICAgICAgICBsaXN0ZW4gb24gaXQuIE5vdywgaXQgcmV0cmllcyBvbmNlIHBlciBzZWNvbmQgZm9yIDIwCisgICAgICAgICAgICBzZWNvbmRzIGJlZm9yZSBnZW5lcmF0aW5nIGEgZmF0YWwgZXJyb3IuIDIwIHNlY29uZHMgc2hvdWxkCisgICAgICAgICAgICBiZSBsb25nIGVub3VnaCBmb3IgYW55IERBRCBwcm9jZXNzIHRvIGNvbXBsZXRlLCBidXQgY2FuIGJlCisgICAgICAgICAgICBhZGp1c3RlZCBpbiBzcmMvY29uZmlnLmggaWYgbmVjZXNzYXJ5LiBUaGFua3MgdG8gTWFydGluCisgICAgICAgICAgICBLcmFmZnQgZm9yIHRoZSBidWcgcmVwb3J0LgorCisJICAgIEFkZCBEQnVzIGludHJvc3BlY3Rpb24uIFBhdGNoIGZyb20gSmVyZW15IExhaW5lLgorCisJICAgIFVwZGF0ZSBEYnVzIGNvbmZpZ3VyYXRpb24gZmlsZS4gUGF0Y2ggZnJvbSBDb2xpbiBXYWx0ZXJzLgorCSAgICBGaXggZm9yIHRoaXMgYnVnOgorICAgICAgICAgICAgaHR0cDovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD0xODk2MQorCisJICAgIFN1cHBvcnQgYXJiaXRyYXJpbHkgZW5jYXBzdWxhdGVkIERIQ1Agb3B0aW9ucywgc3VnZ2VzdGlvbgorCSAgICBhbmQgaW5pdGlhbCBwYXRjaCBmcm9tIFNhbWl1bSBHcm9tb2ZmLiBUaGlzIGlzIHVzZWZ1bCBmb3IKKwkgICAgKGVnKSBnUFhFLCB3aGljaCBleHBlY3QgYWxsIGl0cyBwcml2YXRlIG9wdGlvbnMgdG8gYmUKKwkgICAgZW5jYXBzdWxhdGVkIGluc2lkZSBhIHNpbmdsZSBvcHRpb24gMTc1LiBTbywgZWcsIAorCisgICAgICAgICAgICBkaGNwLW9wdGlvbiA9IGVuY2FwOjE3NSwgMTkwLCAiaXNjc2ktY2xpZW50MCIKKyAgICAgICAgICAgIGRoY3Atb3B0aW9uID0gZW5jYXA6MTc1LCAxOTEsICJpc2NzaS1jbGllbnQwLXNlY3JldCIKKwkgICAgCisJICAgIHdpbGwgcHJvdmlkZSBpU0NTSSBwYXJhbWV0ZXJzIHRvIGdQWEUuCisKKwkgICAgRW5oYW5jZSAtLWRoY3AtbWF0Y2ggdG8gYWxsb3cgdGVzdGluZyBvZiB0aGUgY29udGVudHMgb2YgYQorCSAgICBjbGllbnQtc2VudCBvcHRpb24sIGFzIHdlbGwgYXMgaXRzIHByZXNlbmNlLiBUaGlzCisJICAgIGFwcGxpY2F0aW9uIGluIG1pbmQgZm9yIHRoaXMgaXMgUkZDIDQ1NzgKKwkgICAgY2xpZW50LWFyY2hpdGVjdHVyZSBzcGVjaWZpZXJzLCBidXQgaXQncyBnZW5lcmFsbHkgdXNlZnVsLgorCSAgICBKb2V5IEtvcmthbWVzIHN1Z2dlc3RlZCB0aGUgZW5oYW5jZW1lbnQuIAorCisJICAgIE1vdmUgZnJvbSB1c2luZyB0aGUgSVBfWE1JVF9JRiBpb2N0bCB0byBJUF9CT1VORF9JRiBvbgorCSAgICBPcGVuU29sYXJpcy4gVGhhbmtzIHRvIEJhc3RpYW4gTWFjaGVrIGZvciB0aGUgaGVhZHMtdXAuCisKKwkgICAgTm8gbG9uZ2VyIGNvbXBsYWluIGFib3V0IGJsYW5rIGxpbmVzIGluCisJICAgIC9ldGMvZXRoZXJzLiBUaGFua3MgdG8gSm9uIE5lbHNvbiBmb3IgdGhlIHBhdGNoLgorCisJICAgIEZpeCBiaW5kaW5nIG9mIHNlcnZlcnMgdG8gcGh5c2ljYWwgZGV2aWNlcywgZWcKKwkgICAgLS1zZXJ2ZXI9L2RvbWFpbi8xLjIuMy40QGV0aDAgd2hpY2ggd2FzIGJyb2tlbiBmcm9tIDIuNDMKKwkgICAgb253YXJkcyB1bmxlc3MgLS1xdWVyeS1wb3J0PTAgc2V0LiBUaGFua3MgdG8gUGV0ZXIgTmF1bGxzCisJICAgIGZvciB0aGUgYnVnIHJlcG9ydC4KKworCSAgICBSZXBseSB0byBESENQSU5GT1JNIHJlcXVlc3RzIGV2ZW4gd2hlbiB0aGUgc3VwcGxpZWQgY2lhZGRyCisJICAgIGRvZXNuJ3QgZmFsbCBpbiBhbnkgZGhjcC1yYW5nZS4gSW4gdGhpcyBjYXNlIGl0J3Mgbm90CisJICAgIHBvc3NpYmxlIHRvIHN1cHBseSBhIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24sIGJ1dAorCSAgICBpbmRpdmlkdWFsbHktY29uZmlndXJlZCBvcHRpb25zIChlZyBQQUMpIG1heSBiZSB1c2VmdWwuCisKKwkgICAgQWxsb3cgdGhlIHNvdXJjZSBhZGRyZXNzIG9mIGFuIGFsaWFzIHRvIGJlIGEgcmFuZ2U6CisJICAgIC0tYWxpYXM9MTkyLjE2OC4wLjAsMTAuMC4wLjAsMjU1LjI1NS4yNTUuMCBtYXBzIHRoZSB3aG9sZQorCSAgICBzdWJuZXQgMTkyLjE2OC4wLjAtPjE5Mi4xNjguMC4yNTUgdG8gMTAuMC4wLjAtPjEwLjAuMC4yNTUsCisJICAgIGFzIGJlZm9yZS4KKwkgICAgLS1hbGlhcz0xOTIuMTY4LjAuMTAtMTkyLjE2OC4wLjQwLDEwLjAuMC4wLDI1NS4yNTUuMjU1LjAKKwkgICAgbWFwcyBvbmx5IHRoZSAxOTIuMTY4LjAuMTAtPjE5Mi4xNjguMC40MCByZWdpb24uIFRoYW5rcyB0bworCSAgICBJYiBVaHJza292IGZvciB0aGUgc3VnZ2VzdGlvbi4KKworCSAgICBEb24ndCBkeW5hbWljYWxseSBhbGxvY2F0ZSBESENQIGFkZHJlc3NlcyB3aGljaCBtYXkgYnJlYWsKKwkgICAgV2luZG93cy4gIEFkZHJlc3NlcyB3aGljaCBlbmQgaW4gLjI1NSBvciAuMCBhcmUgYnJva2VuIGluCisJICAgIFdpbmRvd3MgZXZlbiB3aGVuIHVzaW5nIHN1cGVybmV0dGluZy4KKwkgICAgLS1kaGNwLXJhbmdlPTE5Mi4xNjguMC4xLDE5Mi4xNjguMS4yNTQsMjU1LDI1NSwyNTQuMCBtZWFucyAKKwkgICAgMTkyLjE2OC4wLjI1NSBpcyBhIHZhbGlkIElQIGFkZHJlc3MsIGJ1dCBub3QgZm9yIFdpbmRvd3MuIAorCSAgICBTZWUgTWljcm9zb2Z0IEtCMjgxNTc5LiBXZSB0aGVyZWZvcmUgbm8gbG9uZ2VyIGFsbG9jYXRlIAorCSAgICB0aGVzZSBhZGRyZXNzZXMgdG8gYXZvaWQgaGFyZC10by1kaWFnbm9zZSBwcm9ibGVtcy4gCisKKwkgICAgVXBkYXRlIFBvbGlzaCB0cmFuc2xhdGlvbi4gVGhhbmtzIHRvIEphbiBQc290YS4KKworCSAgICBEZWxldGUgdGhlIFBJRC1maWxlIHdoZW4gZG5zbWFzcSBzaHV0cyBkb3duLiBOb3RlIHRoYXQgYnkKKwkgICAgdGhpcyB0aW1lLCBkbnNtYXNxIGlzIG5vcm1hbGx5IG5vdCBydW5uaW5nIGFzIHJvb3QsIHNvCisJICAgIHRoaXMgd2lsbCBmYWlsIGlmIHRoZSBQSUQtZmlsZSBpcyBzdG9yZWQgaW4gYSByb290LW93bmVkCisJICAgIGRpcmVjdG9yeTsgc3VjaCBmYWlsdXJlIGlzIHNpbGVudGx5IGlnbm9yZWQuIFRvIHRha2UKKwkgICAgYWR2YW50YWdlIG9mIHRoaXMgZmVhdHVyZSwgdGhlIFBJRC1maWxlIG11c3QgYmUgc3RvcmVkIGluIGEKKwkgICAgZGlyZWN0b3J5IG93bmVkIGFuZCB3cml0ZS1hYmxlIGJ5IHRoZSB1c2VyIHJ1bm5pbmcKKwkgICAgZG5zbWFzcS4KKworCit2ZXJzaW9uIDIuNDYKKwkgICAgQWxsb3cgLS1ib290cC1keW5hbWljIHRvIHRha2UgYSBuZXRpZCB0YWcsIHNvIHRoYXQgaXQgbWF5CisJICAgIGJlIHNlbGVjdGl2ZWx5IGVuYWJsZWQuIFRoYW5rcyB0byBPbGFmIFdlc3RyaWsgZm9yIHRoZQorCSAgICBzdWdnZXN0aW9uLiAKKworCSAgICBSZW1vdmUgSVNDLWxlYXNlZmlsZSByZWFkaW5nIGNvZGUuIFRoaXMgaGFzIGJlZW4KKwkgICAgZGVwcmVjYXRlZCBmb3IgYSBsb25nIHRpbWUsIGFuZCBsYXN0IHRpbWUgSSByZW1vdmVkIGl0LCBpdAorCSAgICBlbmRlZCB1cCBnb2luZyBiYWNrIGJ5IHJlcXVlc3Qgb2Ygb25lIHVzZXIuIFRoaXMgdGltZSwKKwkgICAgaXQncyBnb25lIGZvciBnb29kOyBvdGhlcndpc2UgaXQgd291bGQgbmVlZCB0byBiZQorCSAgICByZS13b3JrZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSBkb21haW5zIChzZWUgYmVsb3cpLgorCisJICAgIFN1cHBvcnQgREhDUCBjbGllbnRzIGluIG11bHRpcGxlIEROUyBkb21haW5zLiBUaGlzIGlzIGEKKwkgICAgbG9uZy1zdGFuZGluZyByZXF1ZXN0LiBDbGllbnRzIGFyZSBhc3NpZ25lZCB0byBhIGRvbWFpbgorCSAgICBiYXNlZCBpbiB0aGVpciBJUCBhZGRyZXNzLiAgCisKKyAgICAgICAgICAgIEFkZCAtLWRoY3AtZnFkbiBmbGFnLCB3aGljaCBjaGFuZ2VzIGJlaGF2aW91ciBpZiBETlMgbmFtZXMKKyAgICAgICAgICAgIGFzc2lnbmVkIHRvIERIQ1AgY2xpZW50cy4gV2hlbiB0aGlzIGlzIHNldCwgdGhlcmUgbXVzdCBiZQorICAgICAgICAgICAgYSBkb21haW4gYXNzb2NpYXRlZCB3aXRoIGVhY2ggY2xpZW50LCBhbmQgb25seQorICAgICAgICAgICAgZnVsbHktcXVhbGlmaWVkIGRvbWFpbiBuYW1lcyBhcmUgYWRkZWQgdG8gdGhlIEROUy4gVGhlCisgICAgICAgICAgICBhZHZhbnRhZ2UgaXMgdGhhdCB0aGUgb25seSB0aGUgRlFETiBuZWVkcyB0byBiZSB1bmlxdWUsCisgICAgICAgICAgICBzbyB0aGF0IHR3byBvciBtb3JlIERIQ1AgY2xpZW50cyBjYW4gc2hhcmUgYSBob3N0bmFtZSwgYXMKKyAgICAgICAgICAgIGxvbmcgYXMgdGhleSBhcmUgaW4gZGlmZmVyZW50IGRvbWFpbnMuCisKKwkgICAgU2V0IGVudmlyb25tZW50IHZhcmlhYmxlIEROU01BU1FfRE9NQUlOIHdoZW4gaW52b2tpbmcKKwkgICAgbGVhc2UtY2hhbmdlIHNjcmlwdC4gVGhpcyBtYXkgYmUgdXNlZnVsIGluZm9ybWF0aW9uIHRvCisJICAgIGhhdmUgbm93IHRoYXQgaXQncyB2YXJpYWJsZS4KKworCSAgICBUaWdodGVuIHVwIGRhdGEtY2hlY2tpbmcgY29kZSBmb3IgRE5TIHBhY2tldAorCSAgICBoYW5kbGluZy4gVGhhbmtzIHRvIFN0ZXZlIERvZGQgd2hvIGZvdW5kIGNlcnRhaW4gaWxsZWdhbAorCSAgICBwYWNrZXRzIHdoaWNoIGNvdWxkIGNyYXNoIGRuc21hc3EuIE5vIG1lbW9yeSBvdmVyd3JpdGUgd2FzCisJICAgIHBvc3NpYmxlLCBzbyB0aGlzIGlzIG5vdCBhIHNlY3VyaXR5IGlzc3VlIGJleW9uZCB0aGUgRG9TCisJICAgIHBvdGVudGlhbC4gIAorCisJICAgIFVwZGF0ZSBleGFtcGxlIGNvbmZpZyBkaGNwIG9wdGlvbiA0NywgdGhlIHByZXZpb3VzCisJICAgIHN1Z2dlc3Rpb24gZ2VuZXJhdGVkIGFuIGlsbGVnYWwsIHplcm8tbGVuZ3RoLAorCSAgICBvcHRpb24uIFRoYW5rcyB0byBNYXR0aGlhcyBBbmRyZWUgZm9yIGZpbmRpbmcgdGhpcy4KKworCSAgICBSZXdyaXRlIGhvc3RzLWZpbGUgcmVhZGluZyBjb2RlIHRvIHJlbW92ZSB0aGUgbGltaXQgb2YKKwkgICAgMTAyNCBjaGFyYWN0ZXJzIHBlciBsaW5lLiBKb2huIEMgTWV1c2VyIGZvdW5kIHRoaXMuCisKKwkgICAgQ3JlYXRlIGEgbmV0LWlkIHRhZyB3aXRoIHRoZSBuYW1lIG9mIHRoZSBpbnRlcmZhY2Ugb24KKwkgICAgd2hpY2ggdGhlIERIQ1AgcmVxdWVzdCB3YXMgcmVjZWl2ZWQuCisKKwkgICAgRml4ZWQgbWlub3IgbWVtb3J5IGxlYWsgaW4gREJ1cyBjb2RlLCB0aGFua3MgdG8gSmVyZW15CisJICAgIExhaW5lIGZvciB0aGUgcGF0Y2guCisKKwkgICAgRW1pdCBEQnVzIHNpZ25hbHMgYXMgdGhlIERIQ1AgbGVhc2UgZGF0YWJhc2UKKwkgICAgY2hhbmdlcy4gVGhhbmtzIHRvIEplcmVteSBMYWluZSBmb3IgdGhlIHBhdGNoLgorCisJICAgIEFsbG93IGZvciBtb3JlIHRoYXQgb25lIE1BQyBhZGRyZXNzIGluIGEgZGhjcC1ob3N0CisJICAgIGxpbmUuIFRoaXMgY29uZmlndXJhdGlvbiB0ZWxscyBkbnNtYXNxIHRoYXQgaXQncyBPSyB0bworCSAgICBhYmFuZG9uIGEgREhDUCBsZWFzZSBvZiB0aGUgZml4ZWQgYWRkcmVzcyB0byBvbmUgTUFDCisJICAgIGFkZHJlc3MsIGlmIGFub3RoZXIgTUFDIGFkZHJlc3MgaW4gdGhlIGRoY3AtaG9zdCBzdGF0ZW1lbnQgCisJICAgIGFza3MgZm9yIGFuIGFkZHJlc3MuIFRoaXMgaXMgdXNlZnVsIHRvIGdpdmUgYSBmaXhlZAorCSAgICBhZGRyZXNzIHRvIGEgaG9zdCB3aGljaCBoYXMgdHdvIG5ldHdvcmsgaW50ZXJmYWNlcworCSAgICAoc2F5LCBhIGxhcHRvcCB3aXRoIHdpcmVkIGFuZCB3aXJlbGVzcyBpbnRlcmZhY2VzLikgCisgICAgICAgICAgICBJdCdzIHZlcnkgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IG9ubHkgb25lIGludGVyZmFjZSAKKwkgICAgYXQgYSB0aW1lIGlzIHVwLCBzaW5jZSBkbnNtYXNxIGFiYW5kb25zIHRoZSBmaXJzdCBsZWFzZSAKKwkgICAgYW5kIHJlLXVzZXMgdGhlIGFkZHJlc3MgYmVmb3JlIHRoZSBsZWFzZWQgdGltZSBoYXMKKwkgICAgZWxhcHNlZC4gSm9obiBHcmF5IHN1Z2dlc3RlZCB0aGlzLgorCisJICAgIFR3ZWFrIHRoZSByZXNwb25zZSB0byBhIERIQ1AgcmVxdWVzdCBwYWNrZXQgd2l0aCBhIHdyb25nCisJICAgIHNlcnZlci1pZCB3aGVuIC0tZGhjcC1hdXRob3JpdGF0aXZlIGlzIHNldDsgZG5zbWFzcSBub3cKKwkgICAgcmV0dXJucyBhIERIQ1BOQUssIHJhdGhlciB0aGFuIHNpbGVudGx5IGlnbm9yaW5nIHRoZQorCSAgICBwYWNrZXQuIFRoYW5rcyB0byBDaHJpcyBNYXJnZXQgZm9yIHNwb3R0aW5nIHRoaXMKKwkgICAgaW1wcm92ZW1lbnQuCisKKwkgICAgQWRkIC0tY25hbWUgb3B0aW9uLiBUaGlzIHByb3ZpZGVzIGEgbGltaXRlZCBhbGlhcworCSAgICBmdW5jdGlvbiwgdXNhYmxlIGZvciBESENQIG5hbWVzLiBUaGFua3MgdG8gQUogV2ViZXIgZm9yCisJICAgIHN1Z2dlc3Rpb25zIG9uIHRoaXMuCisKKwkgICAgVXBkYXRlZCBjb250cmliL3dlYm1pbiB3aXRoIGxhdGVzdCB2ZXJzaW9uIGZyb20gTmVpbAorCSAgICBGaXNoZXIuCisKKwkgICAgVXBkYXRlZCBQb2xpc2ggdHJhbnNsYXRpb24uIFRoYW5rcyB0byBKYW4gUHNvdGEuCisJICAgIAorCSAgICBDb3JyZWN0IHRoZSB0ZXh0IG5hbWVzIGZvciBESENQIG9wdGlvbnMgNjQgYW5kIDY1IHRvIGJlCisJICAgICJuaXMrLWRvbWFpbiIgYW5kICJuaXMrLXNlcnZlcnMiLgorCisJICAgIFVwZGF0ZWQgU3BhbmlzaCB0cmFuc2xhdGlvbi4gVGhhbmtzIHRvIENocmlzIENoYXRoYW0uCisKKwkgICAgRm9yY2UgcmUtcmVhZGluZyBvZiAvZXRjL3Jlc29sdi5jb25mIHdoZW4gYW4gImludGVyZmFjZQorCSAgICB1cCIgZXZlbnQgb2NjdXJzLgorCisKK3ZlcnNpb24gMi40NQorICAgICAgICAgICAgRml4IHRvdGFsIEROUyBmYWlsdXJlIGluIHJlbGVhc2UgMi40NCB1bmxlc3MgLS1taW4tcG9ydCAKKyAgICAgICAgICAgIHNwZWNpZmllZC4gVGhhbmtzIHRvIFN0ZXZlbiBCYXJ0aCBhbmQgR3JhbnQgQ29hZHkgZm9yCisgICAgICAgICAgICBidWdyZXBvcnQuIEFsc28gcmVqZWN0IG91dC1vZi1yYW5nZSBwb3J0IHNwZWMsIHdoaWNoIGNvdWxkCisgICAgICAgICAgICBicmVhayB0aGluZ3MgdG9vOiBzdWdnZXN0aW9uIGZyb20gR2lsbGVzIEVzcGluYXNzZS4KKwkgICAgCisKK3ZlcnNpb24gMi40NAorICAgICAgICAgICAgRml4ICBjcmFzaCB3aGVuIHVua25vd24gY2xpZW50IGF0dGVtcHRzIHRvIHJlbmV3IGEgREhDUAorICAgICAgICAgICAgbGVhc2UsIHByb2JsZW0gaW50cm9kdWNlZCBpbiB2ZXJzaW9uIDIuNDMuIFRoYW5rcyB0bworICAgICAgICAgICAgQ2FybG9zIENhcnZhbGhvIGZvciBoZWxwIGNoYXNpbmcgdGhpcyBkb3duLgorCisJICAgIEZpeCBwb3RlbnRpYWwgY3Jhc2ggd2hlbiBhIGhvc3Qgd2hpY2ggZG9lc24ndCBoYXZlIGEgbGVhc2UKKwkgICAgZG9lcyBESENQSU5GT1JNLiBBZ2FpbiBpbnRyb2R1Y2VkIGluIDIuNDMuIFRoaXMgYnVnIGhhcworCSAgICBuZXZlciBiZWVuIHJlcG9ydGVkIGluIHRoZSB3aWxkLgorCisgICAgICAgICAgICBGaXggY3Jhc2ggaW4gbmV0bGluayBjb2RlIGludHJvZHVjZWQgaW4gMi40My4gVGhhbmtzIHRvCisgICAgICAgICAgICBKZWFuIFdvbHRlciBmb3IgZmluZGluZyB0aGlzLgorCisJICAgIENoYW5nZSBpbXBsZW1lbnRhdGlvbiBvZiBtaW5fcG9ydCB0byB3b3JrIGV2ZW4gaWYgbWluLXBvcnQKKwkgICAgaXMgbGFyZ2UuCisKKwkgICAgUGF0Y2ggdG8gZW5hYmxlIGNvbXBpbGF0aW9uIG9mIGxhdGVzdCBNYWMgT1MgWC4gVGhhbmtzIHRvCisJICAgIERhdmlkIEdpbG1hbi4KKworCSAgICBVcGRhdGUgU3BhbmlzaCB0cmFuc2xhdGlvbi4gVGhhbmtzIHRvIENocmlzdG9waGVyIENoYXRoYW0uCisKKwordmVyc2lvbiAyLjQzCisJICAgIFVwZGF0ZWQgUG9saXNoIHRyYW5zbGF0aW9uLiBUaGFua3MgdG8gSmFuIFBzb3RhLgorCisJICAgIEZsYWcgZXJyb3JzIHdoZW4gY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZXBlYXRlZAorCSAgICBpbGxlZ2FsbHkuCisKKwkgICAgRnVydGhlciB0d2Vha3MgZm9yIEdOVS9rRnJlZUJTRAorCisJICAgIEFkZCAtLW5vLXdyYXAgdG8gbXNnbWVyZ2UgY2FsbCAtIHByb3ZpZGVzIG5pY2VyIC5wbyBmaWxlCisJICAgIGZvcm1hdC4KKworCSAgICBIb25vdXIgbGVhc2UtdGltZSBzcGVjIGluIGRoY3AtaG9zdCBsaW5lcyBldmVuIGZvcgorCSAgICBCT09UUC4gVGhlIHVzZXIgaXMgYXNzdW1lZCB0byBrbm93biB3aGF0IHRoZXkgYXJlIGRvaW5nIGluCisJICAgIHRoaXMgY2FzZS4gKEhvc3RzIHdpdGhvdXQgdGhlIHRpbWUgc3BlYyBzdGlsbCBnZXQgaW5maW5pdGUKKwkgICAgbGVhc2VzIGZvciBCT09UUCwgb3Zlci1yaWRpbmcgdGhlIGRlZmF1bHQgaW4gdGhlCisJICAgIGRoY3AtcmFuZ2UuKSBUaGFua3MgdG8gUGV0ZXIgS2F0em1hbm4gZm9yIHVuY292ZXJpbmcgdGhpcy4KKworCSAgICBGaXggcHJvYmxlbSBtYXRjaGluZyByZWxheS1hZ2VudCBpZHMuIFRoYW5rcyB0byBNaWNoYWVsCisJICAgIFJhY2sgZm9yIHRoZSBidWcgcmVwb3J0LgorCisJICAgIEFkZCAtLW5hcHRyLXJlY29yZCBvcHRpb24uIFN1Z2dlc3Rpb24gZnJvbSBKb2hhbgorCSAgICBCZXJncXVpc3QuCisKKwkgICAgSW1wbGVtZW50IFJGQyA1MTA3IHNlcnZlci1pZC1vdmVycmlkZSBESENQIHJlbGF5IGFnZW50CisJICAgIG9wdGlvbi4KKworCSAgICBBcHBseSBwYXRjaGVzIGZyb20gU3RlZmFuIEtydWdlciBmb3IgY29tcGlsYXRpb24gb24KKwkgICAgU29sYXJpcyAxMCB1bmRlciBTdW4gc3R1ZGlvLgorCisJICAgIFlldCBtb3JlIHR3ZWFraW5nIG9mIExpbnV4IGNhcGFiaWxpdHkgY29kZSwgdG8gc3VwcHJlc3MKKwkgICAgcG9pbnRsZXNzIHdpbmdlaW5nIGZyb20ga2VybmVsIDIuNi4yNSBhbmQgYWJvdmUuCisKKwkgICAgSW1wcm92ZSBlcnJvciBjaGVja2luZyBkdXJpbmcgc3RhcnR1cC4gUHJldmlvdXNseSwgc29tZQorCSAgICBlcnJvcnMgd2hpY2ggb2NjdXJyZWQgZHVyaW5nIHN0YXJ0dXAgd291bGQgYmUgd29ya2VkCisJICAgIGFyb3VuZCwgd2l0aCBkbnNtYXNxIHN0aWxsIHN0YXJ0aW5nIHVwLiBTb21lIHdlcmUgbG9nZ2VkLAorICAgICAgICAgICAgc29tZSBzaWxlbnQuIE5vdywgdGhleSBhbGwgY2F1c2UgYSBmYXRhbCBlcnJvciBhbmQgZG5zbWFzcSAKKyAgICAgICAgICAgIHRlcm1pbmF0ZXMgd2l0aCBhIG5vbi16ZXJvIGV4aXQgY29kZS4gVGhlIGVycm9ycyBhcmUgdGhvc2UKKyAgICAgICAgICAgIGFzc29jaWF0ZWQgd2l0aCBjaGFuZ2luZyB1aWQgYW5kIGdpZCwgc2V0dGluZyBwcm9jZXNzIAorICAgICAgICAgICAgY2FwYWJpbGl0aWVzIGFuZCB3cml0aW5nIHRoZSBwaWRmaWxlLiBUaGFua3MgdG8gVXdlCisJICAgIEdhbnNlcnQgYW5kIHRoZSBTdXNlIHNlY3VyaXR5IHRlYW0gZm9yIHBvaW50aW5nIG91dCAKKwkgICAgdGhpcyBpbXByb3ZlbWVudCwgYW5kIEJpbGwgUmVpbWVycyBmb3IgZ29vZCBpbXBsZW1lbnRhdGlvbgorCSAgICBzdWdnZXN0aW9ucy4KKworCSAgICBQcm92aWRlIE5PX0xBUkdFRklMRSBjb21waWxlIG9wdGlvbiB0byBzd2l0Y2ggb2ZmIGxhcmdlZmlsZQorCSAgICBzdXBwb3J0IHdoZW4gY29tcGlsaW5nIGFnYWluc3QgdmVyc2lvbnMgb2YgdWNsaWJjIHdoaWNoCisJICAgIGRvbid0IHN1cHBvcnQgaXQuIFRoYW5rcyB0byBTdGVwaGFuZSBCaWxsaWFydCBmb3IgdGhlIHBhdGNoLgorICAKKyAgICAgICAgICAgIEltcGxlbWVudCByYW5kb20gc291cmNlIHBvcnRzIGZvciBpbnRlcmFjdGlvbnMgd2l0aAorICAgICAgICAgICAgdXBzdHJlYW0gbmFtZXNlcnZlcnMuIE5ldyBzcG9vZmluZyBhdHRhY2tzIGhhdmUgYmVlbiBmb3VuZAorICAgICAgICAgICAgYWdhaW5zdCBuYW1lc2VydmVycyB3aGljaCBkbyBub3QgZG8gdGhpcywgdGhvdWdoIGl0IGlzIG5vdAorICAgICAgICAgICAgY2xlYXIgaWYgZG5zbWFzcSBpcyB2dWxuZXJhYmxlLCBzaW5jZSB0byBkb2Vzbid0IGltcGxlbWVudAorICAgICAgICAgICAgcmVjdXJzaW9uLiBCeSBkZWZhdWx0IGRuc21hc3Egd2lsbCBub3cgdXNlIGEgZGlmZmVyZW50CisgICAgICAgICAgICBzb3VyY2UgcG9ydCAoYW5kIHNvY2tldCkgZm9yIGVhY2ggcXVlcnkgaXQgc2VuZHMKKyAgICAgICAgICAgIHVwc3RyZWFtLiBUaGlzIGJlaGF2aW91ciBjYW4gc3VwcHJlc3NlZCB1c2luZyB0aGUKKyAgICAgICAgICAgIC0tcXVlcnktcG9ydCBvcHRpb24sIGFuZCB0aGUgb2xkIGRlZmF1bHQgYmVoYXZpb3VyCisgICAgICAgICAgICByZXN0b3JlZCB1c2luZyAtLXF1ZXJ5LXBvcnQ9MC4gRXhwbGljaXQgc291cmNlLXBvcnQKKyAgICAgICAgICAgIHNwZWNpZmljYXRpb25zIGluIC0tc2VydmVyIGNvbmZpZ3MgYXJlIHN0aWxsIGhvbm91cmVkLgorCisJICAgIFJlcGxhY2UgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLCBmb3IgYmV0dGVyCisJICAgIHNlY3VyaXR5LiBPbiBtb3N0IEJTRCBzeXN0ZW1zLCBkbnNtYXNxIHVzZXMgdGhlCisJICAgIGFyYzRyYW5kb20oKSBSTkcsIHdoaWNoIGlzIHNlY3VyZSwgYnV0IG9uIG90aGVyIHBsYXRmb3JtcywKKwkgICAgaXQgcmVsaWVkIG9uIHRoZSBDLWxpYnJhcnkgUk5HLCB3aGljaCBtYXkgYmUKKwkgICAgZ3Vlc3NhYmxlIGFuZCB0aGVyZWZvcmUgYWxsb3cgc3Bvb2ZpbmcuIFRoaXMgcmVsZWFzZQorCSAgICByZXBsYWNlcyB0aGUgbGliYyBSTkcgd2l0aCB0aGUgU1VSRiBSTkcsIGZyb20gRGFuaWVsCisJICAgIEouIEJlcnN0ZWluJ3MgREpCRE5TIHBhY2thZ2UuICAKKworCSAgICBEb24ndCBhdHRlbXB0IHRvIGNoYW5nZSB1c2VyIG9yIGdyb3VwIG9yIHNldCBjYXBhYmlsaXRpZXMKKwkgICAgaWYgZG5zbWFzcSBpcyBydW4gYXMgYSBub24tcm9vdCB1c2VyLiBXaXRob3V0IHRoaXMsIHRoZQorCSAgICBjaGFuZ2UgZnJvbSBzb2Z0IHRvIGhhcmQgZXJyb3JzIHdoZW4gdGhlc2UgZmFpbCBjYXVzZXMKKwkgICAgcHJvYmxlbXMgZm9yIG5vbi1yb290IGRhZW1vbnMgbGlzdGVuaW5nIG9uIGhpZ2gKKwkgICAgcG9ydHMuIFRoYW5rcyB0byBQYXRyaWNrIE1jTGVhbiBmb3Igc3BvdHRpbmcgdGhpcy4KKworCSAgICBVcGRhdGVkIEZyZW5jaCB0cmFuc2xhdGlvbi4gVGhhbmtzIHRvIEdpbGRhcyBMZSBOYWRhbi4KKworCit2ZXJzaW9uIDIuNDIKKyAgICAgICAgICAgIFRoZSBjaGFuZ2Vsb2cgZm9yIHZlcnNpb24gMi40MiBhbmQgZWFybGllciBpcyAKKyAgICAgICAgICAgIGF2YWlsYWJsZSBpbiBDSEFOR0VMT0cuYXJjaGl2ZS4KZGlmZiAtLWdpdCBhL0NIQU5HRUxPRy5hcmNoaXZlIGIvQ0hBTkdFTE9HLmFyY2hpdmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk5NzNjYwotLS0gL2Rldi9udWxsCisrKyBiL0NIQU5HRUxPRy5hcmNoaXZlCkBAIC0wLDAgKzEsMjUwOSBAQAorcmVsZWFzZSAwLjQgLSBpbml0aWFsIHB1YmxpYyByZWxlYXNlCisKK3JlbGVhc2UgMC41IC0gYWRkZWQgY2FjaGluZywgcmVtb3ZlZCBjb21waWxlciB3YXJuaW5nIG9uIGxpbnV4IFBQQworCityZWxlYXNlIDAuNiAtIFRDUCBoYW5kbGluZzogY2xvc2Ugc29ja2V0IGFuZCByZXR1cm4gdG8gY29ubmVjdCBzdGF0ZSBpZiB3ZSAKKyAgICAgICAgICAgICAgY2FuJ3QgcmVhZCB0aGUgZmlyc3QgYnl0ZS4gVGhpcyBjb3JyZWN0cyBhIHByb2JsZW0gc2VlbiB2ZXJ5IAorICAgICAgICAgICAgICBvY2Nhc2lvbmFsbHkgd2hlcmUgZG5zbWFzcSB3b3VsZCBsb29wIHVzaW5nIGFsbCBhdmFpbGFibGUgQ1BVLgorCisJICAgICAgQWRkZWQgYSBwYXRjaCBmcm9tIENyaXMgQmFpbGlmZiA8Yy5iYWlsaWZmQGUtc2VjdXJlLmNvbS5hdT4KKwkgICAgICB0byBzZXQgU09fUkVVU0VBRERSIG9uIHRoZSB0Y3Agc29ja2V0IHdoaWNoIHN0b3BzIHByb2JsZW1zIHdoZW4KKyAgICAgICAgICAgICAgZG5zbWFzcSBpcyByZXN0YXJ0ZWQgYW5kIG9sZCBjb25uZWN0aW9ucyBzdGlsbCBleGlzdC4KKworCSAgICAgIFN0b3BwZWQgY2xhaW1pbmcgaW4gZG9jLmh0bWwgdGhhdCBzbWFpbCBpcyB0aGUgZGVmYXVsdCBEZWJpYW4KKwkgICAgICBtYWlsZXIsIHNpbmNlIGl0IGlzbid0IGFueSBsb25nZXIuIChQb2ludGVkIG91dCBieQorCSAgICAgIERhdmlkIEthcmxpbiA8ZGthcmxpbkBjb2xvcmFkb210bi5lZHU+KQorCityZWxlYXNlIDAuNyAgIENyZWF0ZSBhIHBpZGZpbGUgYXQgL3Zhci9ydW4vZG5zbWFzcS5waWQKKworCSAgICAgIEV4dGVuc2l2ZSBhcm1vdXJpbmcgYWdhaW5zdCAicG9pc29uIHBhY2tldHMiIGNvdXJ0ZXN5IG9mCisgICAgICAgICAgICAgIFRob21hcyBNb2VzdGwgPHRtb2VzdGxAZ214Lm5ldD4KKworCSAgICAgIFNldCBzb2NrYWRkci5zYV9mYW1pbHkgb24gb3V0Z29pbmcgYWRkcmVzcywgcGF0Y2ggZnJvbQorCSAgICAgIERhdmlkIFN5bW9uZHMgPHhveHVzQHVzYS5uZXQ+CisKKyAgICAgICAgICAgICAgUGF0Y2ggdG8gY2xlYXIgY2FjaGUgb24gU0lHSFVQIAorCSAgICAgIGZyb20gSmFzb24gTC4gV2FnbmVyIDxuaWFsc2NvcnZhQHlhaG9vLmNvbT4gCisKKwkgICAgICBGaXggYmFkIGJ1ZyByZXN1bHRpbmcgZnJvbSBub3QgaW5pdGlhbGlzaW5nIHZhbHVlLXJlc3VsdAkKKwkgICAgICBhZGRyZXNzLWxlbmd0aCBwYXJhbWV0ZXIgdG8gcmVjdmZyb20oKSBhbmQgYWNjZXB0KCkgLSBpdAorCSAgICAgIHdvcmtlZCBieSBsdWNrIGJlZm9yZSEKKworcmVsZWFzZSAwLjk1ICBNYWpvciByZXdyaXRlOiByZW1vdmUgY2FsbHMgdG8gZ2V0aG9zdGJ5bmFtZSgpIGFuZCB0YWxrCisgICAgICAgICAgICAgIGRpcmVjdGx5IHRvIHRoZSB1cHN0cmVhbSBzZXJ2ZXIocykgaW5zdGVhZC4KKyAgICAgICAgICAgICAgVGhpcyBoYXMgbWFueSBhZHZhbnRhZ2VzLgorICAgICAgICAgICAgICAoMSkgRG5zbWFzcSBubyBsb25nZXIgYmxvY2tzIGR1cmluZyBsb25nIGxvb2t1cHMuCisgICAgICAgICAgICAgICgyKSBBbGwgcXVlcnkgdHlwZXMgYXJlIGhhbmRsZWQgbm93LCAoZWcgTVgpIG5vdCBqdXN0IGludGVybmV0CisgICAgICAgICAgICAgICAgICBhZGRyZXNzIHF1ZXJpZXMuIEFkZHJlc3NlcyBhcmUgY2FjaGVkLCBhbGwgb3RoZXIKKyAgICAgICAgICAgICAgICAgIHF1ZXJpZXMgYXJlIGZvcndhcmRlZCBkaXJlY3RseS4KKyAgICAgICAgICAgICAgKDMpIFRpbWUtdG8tbGl2ZSBkYXRhIGZyb20gdXBzdHJlYW0gc2VydmVyIGlzIHJlYWQgYW5kCisgICAgICAgICAgICAgICAgICB1c2VkIGJ5IGRuc21hc3EgdG8gcHVyZ2UgZW50cmllcyBmcm9tIHRoZSBjYWNoZS4KKyAgICAgICAgICAgICAgKDQpIC9ldGMvaG9zdHMgaXMgc3RpbGwgcmVhZCBhbmQgaXRzIGNvbnRlbnRzIHNlcnZlZCAodW5sZXNzIAorCSAgICAgICAgICB0aGUgLWggb3B0aW9uIGlzIGdpdmVuKS4KKyAgICAgICAgICAgICAgKDUpIERuc21hc3EgY2FuIGdldCBpdHMgdXBzdHJlYW0gc2VydmVycyBmcm9tCisgICAgICAgICAgICAgICAgICBhIGZpbGUgb3RoZXIgdGhhbiAvZXRjL3Jlc29sdi5jb25mICgtciBvcHRpb24pIHRoaXMgYWxsb3dzCisgICAgICAgICAgICAgICAgICBkbnNtYXNxIHRvIHNlcnZlIG5hbWVzIHRvIHRoZSBtYWNoaW5lIGl0IGlzIHJ1bm5pbmcKKyAgICAgICAgICAgICAgICAgIG9uIChwdXQgbmFtZXNlcnZlciAxMjcuMC4wLjEgaW4gL2V0Yy9yZXNvbHYuY29uZiBhbmQKKyAgICAgICAgICAgICAgICAgIGdpdmUgZG5zbWFzcSB0aGUgb3B0aW9uIC1yIC9ldGMvcmVzb2x2LmRuc21hc3EpCisgICAgICAgICAgICAgICg2KSBEbnNtYXNxIHdpbGwgcmUtcmVhZCBpdHMgc2VydmVycyBpZiB0aGUKKyAgICAgICAgICAgICAgICAgIG1vZGlmaWNhdGlvbiB0aW1lIG9mIHJlc29sdi5jb25mIGNoYW5nZXMuIEFsb25nIHdpdGgKKyAgICAgICAgICAgICAgICAgIDQgYWJvdmUgdGhpcyBhbGxvd3MgbmFtZXNlcnZlcnMgdG8gYmUgc2V0CisJCSAgYXV0b21hdGljYWxseSBieSBwcHAgb3IgZGhjcC4JIAorCisgICAgICAgICAgICAgIEEgcmVhbGx5IGNsZXZlciBOQVQtbGlrZSB0ZWNobmlxdWUgYWxsb3dzIHRoZSBkYWVtb24gdG8gaGF2ZSBsb3RzCisgICAgICAgICAgICAgIG9mIHF1ZXJpZXMgaW4gcHJvZ3Jlc3MsIGJ1dCBzdGlsbCByZW1haW4gdmVyeSBsaWdodHdlaWdodC4KKwkgICAgICBEbnNtYXNxIGhhcyBhIHNtYWxsIGZvb3RwcmludCBhbmQgbm9ybWFsbHkgZG9lc24ndCBhbGxvY2F0ZQorICAgICAgICAgICAgICBhbnkgbW9yZSBtZW1vcnkgYWZ0ZXIgc3RhcnQtdXAuIFRoZSBOQVQtbGlrZSBmb3J3YXJkaW5nIHdhcworICAgICAgICAgICAgICBpbnNwaXJlZCBieSBhIHN1Z2dlc3Rpb24gZnJvbSBFbGkgQ2hlbiA8ZWxpQHJvdXRlZnJlZS5jb20+CisKK3JlbGVhc2UgMC45NiAgRml4ZWQgZW1iYXJyYXNpbmcgdGhpbmtvIGluIGNhY2hlIGxpbmtlZC1saXN0IGNvZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorcmVsZWFzZSAwLjk4ICBTb21lIGVuaGFuY2VtZW50cyBhbmQgYnVnLWZpeGVzLiAKKyAgICAgICAgICAgICAgVGhhbmtzIHRvICJEZW5pcyBDYXJyZSIgPGRlbmlzLmNhcnJlQGxhcG9zdGUubmV0PiBhbmQgTWFydGluIAorICAgICAgICAgICAgICBPdHRlIDxvdHRlQGVzc2MucHN1LmVkdT4JCisgICAgICAgICAgICAgIAorCSAgICAgICgxKSBEbnNtYXNxIG5vdyBhbHdheXMgc2V0cyB0aGUgSVAgc291cmNlIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAgIG9mIGl0cyByZXBsaWVzIGNvcnJlY3RseS4gT2xkZXIgdmVyc2lvbnMgd291bGQgbm90IGFsd2F5cworICAgICAgICAgICAgICAgICAgZG8gdGhpcyBvbiBtdWx0aS1ob21lZCBhbmQgSVAgYWxpYXNlZCBob3N0cywgd2hpY2ggdmlvbGF0ZXMgCisgICAgICAgICAgICAgICAgICB0aGUgUkZDLgorICAgICAgICAgICAgICAoMikgRG5zbWFzcSBubyBsb25nZXIgY3Jhc2hlcyBpZiBhIHNlcnZlciBsb29wIGlzIGNyZWF0ZWQKKwkgICAgICAgICAgKGllIGRuc21hc3EgaXMgdG9sZCB0byB1c2UgaXRzZWxmIGFzIGFuIHVwc3RyZWFtIHNlcnZlci4pCisgICAgICAgICAgICAgICAgICBOb3cgaXQganVzdCBsb2dzIHRoZSBwcm9ibGVtIGFuZCBkb2Vzbid0IHVzZSB0aGUgYmFkIAorICAgICAgICAgICAgICAgICAgc2VydmVyIGFkZHJlc3MuCisgICAgICAgICAgICAgICgzKSBEbnNtYXNxIHNob3VsZCBub3cgZm9yd2FyZCAoYnV0IG5vdCBjYWNoZSkgaW52ZXJzZSBxdWVyaWVzIAorICAgICAgICAgICAgICAgICAgYW5kIHNlcnZlciBzdGF0dXMgcXVlcmllczsgdGhpcyBmZWF0dXJlIGhhcyBub3QgYmVlbiB0ZXN0ZWQuCisgICAgICAgICAgICAgICg0KSBEb24ndCB3cml0ZSB0aGUgcGlkIGZpbGUgd2hlbiBpbiBub24tZGFlbW9uIG1vZGUuCisJICAgICAgKDUpIENyZWF0ZSB0aGUgcGlkIGZpbGUgbW9kZSA2NDQsIHJhdGhlciB0aGVuIDY2NiAoISkuCisgICAgICAgICAgICAgICg2KSBHZW5lcmF0ZSBxdWVyaWVzIHRvIHVwc3RyZWFtIG5hbWVzZXJ2ZXJzIHdpdGggdW5wcmVkaWN0YWJsZQorICAgICAgICAgICAgICAgICAgaWRzLCB0byB0aHdhcnQgRE5TIHNwb29mZXJzLgorICAgICAgICAgICAgICAoNykgRG5zbWFzcSBubyBsb25nZXIgZm9yd2FyZHMgcXVlcmllcyB3aGVuIHRoZSAKKwkgICAgICAgICAgInJlY3Vyc2lvbiBkZXNpcmVkIiBiaXQgaXMgbm90IHNldCBpbiB0aGUgaGVhZGVyLgorCSAgICAgICg4KSBGaXhlZCBnZXRvcHQgY29kZSB0byB3b3JrIG9uIGNvbXBsaWVycyB3aXRoIHVuc2lnbmVkIGNoYXIuCisgICAgICAgICAgICAgIAorcmVsZWFzZSAwLjk5MSBBZGRlZCAtYiBmbGFnOiB3aGVuIHNldCBjYXVzZXMgZG5zbWFzcSB0byBhbHdheXMgYW5zd2VyCisJICAgICAgcmV2ZXJzZSBxdWVyaWVzIG9uIHRoZSBSRkMgMTkxOCBwcml2YXRlIElQIHNwYWNlIGl0c2VsZiBhbmQKKyAgICAgICAgICAgICAgbmV2ZXIgZm9yd2FyZCB0aGVtIHRvIGFuIHVwc3RyZWFtIHNlcnZlci4gSWYgdGhlIG5hbWUgaXMgbm90IGluCisJICAgICAgL2V0Yy9ob3N0cywgZG5zbWFzcSByZXBsaWVzIHdpdGggdGhlIGRvdHRlZC1xdWFkIGFkZHJlc3MuCisgICAgICAgICAgICAgIAorICAgICAgICAgICAgICBGaXhlZCBhIGJ1ZyB3aGljaCBzdG9wcGVkIGRuc21hc3Egd29ya2luZyBvbiBhIGJveCB3aXRoCisgICAgICAgICAgICAgIHR3byBvciBtb3JlIGludGVyZmFjZXMgd2l0aCB0aGUgc2FtZSBJUCBhZGRyZXNzLiAKKworICAgICAgICAgICAgICBGaXhlZCBjYWNoZWluZyBvZiBDTkFNRXMuIFByZXZpb3VzbHksIGEgQ05BTUUgd2hpY2ggcG9pbnRlZAorICAgICAgICAgICAgICB0byAgYSBuYW1lIHdpdGggbWFueSBBIHJlY29yZHMgd291bGQgbm90IGhhdmUgYWxsIHRoZSBhZGRyZXNzZXMKKyAgICAgICAgICAgICAgcmV0dXJuZWQgd2hlbiBiZWluZyBhbnN3ZXJlZCBmcm9tIHRoZSBjYWNoZS4KKworCSAgICAgIFRoYW5rcyB0byAiU3RldmUgSGFyZHkiIDxzLmEuaGFyZHlAY29ubmVjdHV4LmNvbT4gZm9yIGhpcyBpbnB1dCAKKyAgICAgICAgICAgICAgb24gdGhlc2UgZml4ZXMuCisKKyAgICAgICAgICAgICAgRml4ZWQgcmFjZSB3aGljaCBjb3VsZCBjYXVzZSBkbnNtYXNxIHRvIG1pc3MgdGhlIHNlY29uZCBvZgorICAgICAgICAgICAgICB0d28gY2xvc2VseS1zcGFjZWQgdXBkYXRlcyBvZiByZXNvbHYuY29uZiAoVGhhbmtzIHRvIEVsaSBDaGVuCisgICAgICAgICAgICAgIGZvciBwb2ludGluZyB0aGlzIG91dC4pCisKKwkgICAgICBGaXhlZCBhIGJ1ZyB3aGljaCBjb3VsZCBjYXVzZSBkbnNtYXNxIHRvIGZhaWwgdG8gY2FjaGUgc29tZQorICAgICAgICAgICAgICBkbnMgbmFtZXMuCisKK3JlbGVhc2UgMC45OTIgU21hbGwgY2hhbmdlIHRvIG1lbW9yeSBhbGxvY2F0aW9uIHNvIHRoYXQgbmFtZXMgaW4gL2V0Yy9ob3N0cworICAgICAgICAgICAgICBkb24ndCB1c2UgY2FjaGUgc2xvdHMuIEFsc28gbWFrZSAiLWMgMCIgZmxhZyBtZWFuaW5nZnVsbHkgCisgICAgICAgICAgICAgIGRpc2FibGUgY2FjaGluZyBjb21wbGV0ZWx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKworcmVsZWFzZSAwLjk5MyBSZXR1cm4gb25seSB0aGUgZmlyc3QgKGNhbm9uaWNhbCkgbmFtZSBmcm9tIGFuIGVudHJ5IGluCisJICAgICAgL2V0Yy9ob3N0cyBhcyByZXBseSB0byByZXZlcnNlIHF1ZXJ5LgorICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgSGFuZGxlIHdpbGRjYXJkIHF1ZXJpZXMgZm9yIG5hbWVzL2FkZHJlc3NlcyBpbiAvZXRjL2hvc3RzCisJICAgICAgdGhpcyBpcyBtYWlubHkgdG8gYWxsb3cgcmV2ZXJzZSBsb29rdXBzIGJ5IGRpZyB0byBzdWNjZWVkLgorCSAgICAgIChCdWcgcmVwb3J0ZWQgYnkgU2ltb24gSi4gUm93ZSIgPHNyb3dlQG1vc2Uub3JnLnVrPikgIAorICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgU3VidGxlIGNoYW5nZSB0byB0aGUgbG9naWMgd2hpY2ggc2VsZWN0cyB3aGljaCBvZiBtdWx0aXBsZQorCSAgICAgIHVwc3RyZWFtIHNlcnZlcnMgd2Ugc2VuZCBxdWVyaWVzIHRvLiBUaGlzIGZpeGVzIGEgcHJvYmxlbSAKKyAgICAgICAgICAgICAgd2hlcmUgZG5zbWFzcSBjb250aW51b3VzbHkgc2VuZHMgcXVlcmllcyB0byBhIHNlcnZlciB3aGljaAorCSAgICAgIGlzIHJldHVybmluZyBlcnJvciBjb2RlcyBhbmQgaWdub3JlcyBvbmUgd2hpY2ggaXMgd29ya2luZy4KKyAgICAgICAgICAgICAgCityZWxlYXNlIDAuOTk0IEZpeGVkIGJ1ZyB3aGljaCBicm9rZSBsb29rdXAgb2YgbmFtZXMgaW4gL2V0Yy9ob3N0cworICAgICAgICAgICAgICB3aGljaCBoYXZlIHVwcGVyLWNhc2UgbGV0dGVycyBpbiB0aGVtLiBUaGFua3MgZm9yIEpvYW8gQ2xlbWVudGUKKyAgICAgICAgICAgICAgZm9yIHNwb3R0aW5nIHRoYXQgb25lLiAKKworCSAgICAgIE91dHB1dCBjYWNoZSBzdGF0aXN0aWNzIG9uIHJlY2VpcHQgb2YgU0lHVVNSMS4gVGhlc2UgZ28KKyAgICAgICAgICAgICAgdG8gc3lzbG9nIGV4Y2VwdCBpbiBkZWJ1ZyAoLWQpIG1vZGUsIHdoZW4gYSBjb21wbGV0ZSBjYWNoZQorCSAgICAgIGR1bXAgZ29lcyB0byBzdGRvdXQuIFN1Z2dlc3Rpb24gZnJvbSBKb2FvIENsZW1lbnRlLCBjb2RlCisgICAgICAgICAgICAgIGJhc2VkIGluIEpvaG4gVm9scGUncy4KKyAgICAgICAgICAgICAgCisJICAgICAgQWNjZXB0IEdOVSBsb25nIG9wdGlvbnMgb24gdGhlIGNvbW1hbmQgbGluZS4gQ29kZSBmcm9tIAorCSAgICAgIEpvaG4gVm9scGUgZm9yIHRoaXMuIAorCisgICAgICAgICAgICAgIFNwbGl0IHNvdXJjZSBjb2RlIGludG8gbXVsdGlwbGUgZmlsZXMgYW5kIHByb2R1Y2VkIAorCSAgICAgIGEgcHJvcGVyIG1ha2VmaWxlLiAKKyAgICAgICAgICAgICAgCisgICAgICAgICAgICAgIEluY2x1ZGVkIGNvZGUgZnJvbSBKb2huIFZvbHBlIHRvIHBhcnNlIGRoY3AubGVhc2VzIGZpbGUKKyAgICAgICAgICAgICAgd3JpdHRlbiBieSBJU0MgZGhjcGQuIFRoZSBob3N0bmFtZXMgaW4gdGhlIGxlYXNlcyBmaWxlIGFyZQorICAgICAgICAgICAgICBhZGRlZCB0byB0aGUgY2FjaGUgYW5kIHVwZGF0ZWQgYXMgZGhjcGQgdXBkYXRlcyB0aGUgCisgICAgICAgICAgICAgIGxlYXNlcyBmaWxlLiBUaGUgY29kZSBoYXMgYmVlbiBoZWF2aWx5IHJlLXdvcmtlZCBieSBtZSwKKyAgICAgICAgICAgICAgc28gYW55IGJ1Z3MgYXJlIHByb2JhYmx5IG1pbmUuCisKK3JlbGVhc2UgMC45OTUgU21hbGwgdGlkeS11cHMgdG8gc2lnbmFsIGhhbmRsaW5nIGFuZCBjYWNoZSBjb2RlLgorCityZWxlYXNlIDAuOTk2IEFkZGVkIG5lZ2F0aXZlIGNhY2hpbmc6IElmIGRuc21hc3EgZ2V0cyBhICJubyBzdWNoIGRvbWFpbiIgcmVwbHkKKyAgICAgICAgICAgICAgZnJvbSBhbiB1cHN0cmVhbSBuYW1lc2VydmVyLCBpdCB3aWxsIGNhY2hlIHRoYXQgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgZm9yIGEgdGltZSBzcGVjaWZpZWQgYnkgdGhlIFNPQSBSUiBpbiB0aGUgcmVwbHkuIFNlZSBSRkMgMjMwOAorICAgICAgICAgICAgICBmb3IgZGV0YWlscy4gVGhpcyBpcyB1c2VmdWwgd2l0aCAgcmVzb2x2ZXIgbGlicmFyaWVzCisgICAgICAgICAgICAgIHdoaWNoIGFwcGVuZCBhc3NvcnRlZCBzdWZmaWNlcyB0byBub24tRlFETiBpbiBhbiBhdHRlbXB0IHRvIAorICAgICAgICAgICAgICByZXNvbHZlIHRoZW0sIGNhdXNpbmcgdXNlbGVzcyBjYWNoZSBtaXNzZXMuCisKKyAgICAgICAgICAgICAgQWRkZWQgLWkgZmxhZywgd2hpY2ggcmVzdHJpY3RzIGRuc21hc3EgdG8gb2ZmZXJpbmcgbmFtZSBzZXJ2aWNlCisgICAgICAgICAgICAgIG9ubHkgb24gc3BlY2lmaWVkIGludGVyZmFjZXMuCisKK3JlbGVhc2UgMC45OTcgRGVsZXRlZCBJTlNUQUxMIHNjcmlwdCBhbmQgYWRkZWQgImluc3RhbGwiIHRhcmdldCB0byBtYWtlZmlsZS4KKworICAgICAgICAgICAgICBTdG9wcGVkIGRpc3RyaWJ1dGluZyBiaW5hcmllcyBpbiB0aGUgdGFyYmFsbCB0byBhdm9pZCAKKyAgICAgICAgICAgICAgbGliYyB2ZXJzaW9uIGNsYXNoZXMuCisKKyAgICAgICAgICAgICAgRml4ZWQgIGludGVyZmFjZSBkZXRlY3Rpb24gY29kZSB0bworICAgICAgICAgICAgICByZW1vdmUgc3B1cmlvdXMgc3RhcnR1cCBlcnJvcnMgaW4gcmFyZSBjaXJjdW1zdGFuY2VzLgorCisgICAgICAgICAgICAgIERuc21hc3Egbm93IGNoYW5nZXMgaXRzIHVpZCwgaXJyZXZvY2FibHksIHRvIG5vYm9keSBhZnRlcgorICAgICAgICAgICAgICBzdGFydHVwIGZvciBzZWN1cml0eSByZWFzb25zLiBUaGFua3MgdG8gUGV0ZXIgQmFpbGV5IGZvcgorICAgICAgICAgICAgICB0aGlzIHBhdGNoLgorCisJICAgICAgQ29wZSB3aXRoIGluZmluaXRlIERIQ1AgbGVhc2VzLiBQYXRjaCB0aGFua3MgdG8gCisJICAgICAgWWFhY292IEFraWJhIFNsYW1hLgorCisJICAgICAgQWRkZWQgcnBtIGNvbnRyb2wgZmlsZXMgdG8gLnRhci5neiBkaXN0cmlidXRpb24uIFRoYW5rcyB0bworICAgICAgICAgICAgICBQZXRlciBCYWxkd2luIGF0IENsYXJrQ29ubmVjdCBmb3IgdGhvc2UuCisKKyAgICAgICAgICAgICAgSW1wcm92ZWQgc3RhcnR1cCBzY3JpcHQgZm9yIHJwbXMuIFRoYW5rcyB0byBZYWFjb3YgQWtpYmEgU2xhbWEuCisKK3JlbGVhc2UgMS4wICAgU3RhYmxlIHJlbGVhc2U6IGRuc21hc3EgaXMgbm93IGNvbnNpZGVyZWQgZmVhdHVyZS1jb21wbGV0ZQorICAgICAgICAgICAgICBhbmQgc3RhYmxlLgorICAgICAgICAgICAgICAKK3JlbGVhc2UgMS4xICAgQWRkZWQgLS11c2VyIGFyZ3VtZW50IHRvIGFsbG93IHVzZXIgdG8gY2hhbmdlIHRvCisgICAgICAgICAgICAgIGEgZGlmZmVyZW50IHVzZXJpZC4KKworICAgICAgICAgICAgICBBZGRlZCAtLW14LXRhcmdldCBhcmd1bWVudCB0byBhbGxvdyBtYWlsIHRvIGJlIGRlbGl2ZXJlZAorICAgICAgICAgICAgICBhd2F5IGZyb20gdGhlIGdhdGV3YXkgbWFjaGluZSBydW5uaW5nIGRuc21hc3EuCisKKyAgICAgICAgICAgICAgRml4ZWQgaGlnaGx5ICBvYnNjdXJlIGJ1ZyB3aXRoIHdpbGRjYXJkIHF1ZXJpZXMgZm9yCisgICAgICAgICAgICAgIERIQ1AgbGVhc2UgZGVyaXZlZCBuYW1lcy4KKworICAgICAgICAgICAgICBNb3ZlZCBtYW5wYWdlIGZyb20gc2VjdGlvbiAxIHRvIHNlY3Rpb24gOC4KKworICAgICAgICAgICAgICBBZGRlZCAtLW5vLXBvbGwgb3B0aW9uLgorICAgICAgICAgICAgICBBZGRlZCBTdXNlLXJwbSBzdXBwb3J0LgorICAgICAgICAgICAgICBUaGFua3MgdG8gSm9lcmcgTWF5ZXIgZm9yIHRoZSBsYXN0IHR3by4KKworcmVsZWFzZSAxLjIgICBBZGRlZCBJUHY2IEROUyByZWNvcmQgc3VwcG9ydC4gQUFBQSByZWNvcmRzIGFyZSBjYWNoZWQKKyAgICAgICAgICAgICAgYW5kIHJlYWQgZnJvbSAvZXRjL2hvc3RzLiBSZXZlcnNlLWxvb2t1cHMgaW4gdGhlCisJICAgICAgaXA2LmludCBhbmQgaXA2LmFycGEgZG9tYWlucyBhcmUgc3VwcG9yZWQuIERuc21hc3EgY2FuCisgICAgICAgICAgICAgIHRhbGsgdG8gdXBzdHJlYW0gc2VydmVycyB2aWEgSVB2NiBpZiBpdCBmaW5kcyBJUDYgYWRkcmVzc2VzCisgICAgICAgICAgICAgIGluIC9ldGMvcmVzb2x2LmNvbmYgYW5kIGl0IG9mZmVycyBETlMgc2VydmljZSBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgIGlmIElQdjYgc3VwcG9ydCBpcyBwcmVzZW50IGluIHRoZSBrZXJuZWwuCisKKyAgICAgICAgICAgICAgRXh0ZW5kZWQgbmVnYXRpdmUgY2FjaGluZyB0byBOT0RBVEEgcmVwbGllcy4KKworICAgICAgICAgICAgICBSZS12YW1wZWQgQ05BTUUgcHJvY2Vzc2luZyB0byBjb3BlIHdpdGggUkZDIDIzMTcncyB1c2Ugb2YKKyAgICAgICAgICAgICAgQ05BTUVTIHRvIFBUUiBSUnMgaW4gQ0lEUi4KKworICAgICAgICAgICAgICBBZGRlZCBjb25maWcuaCBhbmQgYSBjb3VwbGUgb2Ygc3ltYm9scyB0byBhaWQKKyAgICAgICAgICAgICAgY29tcGlsYXRpb24gb24gbm9uLWxpbnV4IHN5c3RlbXMuCisKK3JlbGVhc2UgMS4zICAgU29tZSB2ZXJzaW9ucyBvZiB0aGUgTGludXgga2VybmVsIHJldHVybiBFSU5WQUwgcmF0aGVyCisgICAgICAgICAgICAgIHRoZW4gRU5QUk9UT05PU1VQUE9SVCB3aGVuIElQdjYgaXMgbm90IGF2YWlsYWJsZSwgCisgICAgICAgICAgICAgIGNhdXNpbmcgZG5zbWFzcSB0byBib21iIG91dC4gVGhpcyByZWxlYXNlIGZpeGVzIHRoYXQuCisgICAgICAgICAgICAgIFRoYW5rcyB0byBTdGV2ZSBEYXZpcyBmb3IgcG9pbnRpbmcgdGhpcyBvbmUgb3V0LgorCisgICAgICAgICAgICAgIFRyaXZpYWwgY2hhbmdlIHRvIHN0YXJ0dXAgbG9naWMgc28gdGhhdCBkbnNtYXNxIGxvZ3MKKyAgICAgICAgICAgICAgaXRzIHN0dWZmIGFuZCByZWFkcyBjb25maWcgZmlsZXMgc3RyYWlnaHQgYXdheSBvbgorICAgICAgICAgICAgICBzdGFydGluZywgcmF0aGVyIHRoYW4gYWZ0ZXIgdGhlIGZpcnN0IHF1ZXJ5IC0gcHJpbmNpcGxlIAorICAgICAgICAgICAgICBvZiBsZWFzdCBzdXJwcmlzZSBhcHBsaWVzIGhlcmUuICAgICAKKworcmVsZWFzZSAxLjQgICBGaXggYSBidWcgd2l0aCBESFBDIGxlYXNlIHBhcnNpbmcgd2hpY2ggYnJva2UgaW4KKyAgICAgICAgICAgICAgbm9uLVVUQyB0aW1lem9uZXMuIFRoYW5rcyB0byBNYXJrIFdvcm1nb29yIGZvcgorICAgICAgICAgICAgICBzcG90dGluZyBhbmQgZGlhZ25vc2luZyB0aGlzLiBGaXhlZCB2ZXJzaW9ucyBpbgorICAgICAgICAgICAgICB0aGUgLnNwZWMgZmlsZXMgdGhpcyB0aW1lLiBGaXhlZCBidWcgaW4gU3VzZSBzdGFydHVwCisgICAgICAgICAgICAgIHNjcmlwdC4gVGhhbmtzIHRvIERpZGkgTmlrbGF1cyBmb3IgcG9pbnRpbmcgdGhpcyBvdXQuCisKK3JlbGVhc2UgMS41ICAgQWRkZWQgLS1maWx0ZXJ3aW4yayBvcHRpb24gd2hpY2ggc3RvcHMgZG5zbWFzcSBmcm9tIGZvcndhcmRpbmcKKwkgICAgICAic3BhbSIgcXVlcmllcyBmcm9tIHdpbjJrIGJveGVzLiBUaGlzIGlzIHVzZWZ1bCB0byBzdG9wIHNwdXJpb3VzCisgICAgICAgICAgICAgIGNvbm5lY3Rpb25zIG92ZXIgZGlhbC1vbi1kZW1hbmQgbGlua3MuIFRoYW5rcyB0byBTdGV2ZSBIYXJkeSAKKyAgICAgICAgICAgICAgZm9yIHRoaXMgY29kZS4KKworICAgICAgICAgICAgICBDbGVhciAidHJ1bmNhdGVkIiBiaXQgaW4gcmVwbGllcyB3ZSByZXR1cm4gZnJvbSB1cHN0cmVhbS4gVGhpcworICAgICAgICAgICAgICBzdG9wcyByZXNvbHZlcnMgZnJvbSBzd2l0Y2hpbmcgdG8gVENQLCB3aGljaCBpcyBwb2ludGxlc3Mgc2luY2UKKyAgICAgICAgICAgICAgZG5zbWFzcSBkb2Vzbid0IHN1cHBvcnQgVENQLiBUaGlzIHNob3VsZCBzb2x2ZSBwcm9ibGVtcworICAgICAgICAgICAgICBpbiByZXNvbHZpbmcgaG90bWFpbC5jb20gZG9tYWlucy4KKworICAgICAgICAgICAgICBEb24ndCBpbmNsdWRlIGdldG9wdC5oIHdoZW4gR251LWxvbmctb3B0aW9ucyBhcmUgZGlzYWJsZWQgLQorICAgICAgICAgICAgICBob3BlZnVsbHkgdGhpcyB3aWxsIGFsbG93IGNvbXBpbGF0aW9uIG9uIEZyZWVCU0QuCisKKwkgICAgICBBZGRlZCB0aGUgLS1saXN0ZW4tYWRkcmVzcyBhbmQgLS1waWQtZmlsZSBmbGFncy4KKworICAgICAgICAgICAgICBGaXhlZCBhIGJ1ZyB3aGljaCBjYXVzZWQgb2xkIGVudHJpZXMgaW4gdGhlIERIQ1AgbGVhc2VzIGZpbGUKKyAgICAgICAgICAgICAgdG8gYmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIGN1cnJlbnQgb25lcyB1bmRlciBjZXJ0YWluCisgICAgICAgICAgICAgIGNpcmN1bXN0YW5jZXMuCisKK3JlbGVhc2UgMS42ICAgSWYgYSBtYWNoaW5lIGdldHMgbmFtZWQgdmlhIERIQ1AgYW5kIHRoZSBESENQIG5hbWUgZG9lc24ndCBoYXZlCisgICAgICAgICAgICAgIGEgZG9tYWluIHBhcnQgYW5kIGRvbWFpbiBzdWZmaXggaXMgc2V0IHVzaW5nIHRoZSAtcyBmbGFnLCB0aGVuCisgICAgICAgICAgICAgIHRoYXQgbWFjaGluZSBoYXMgdHdvIG5hbWVzIHdpdGggdGhlIHNhbWUgYWRkcmVzcywgd2l0aCBhbmQgCisgICAgICAgICAgICAgIHdpdGhvdXQgdGhlIGRvbWFpbiBzdWZmaXguIFdoZW4gZG9pbmcgYSBfcmV2ZXJzZV8gbG9va3VwIHRvCisgICAgICAgICAgICAgIGdldCB0aGUgbmFtZSwgdGhlICJ3aXRob3V0IHN1ZmZpeCIgbmFtZSB1c2VkIHRvIGJlIHJldHVybmVkLAorICAgICAgICAgICAgICBub3cgdGhlICJ3aXRoIHN1ZmZpeCIgb25lIGdldHMgcmV0dXJuZWQgaW5zdGVhZC4gVGhpcyBjaGFuZ2UKKwkgICAgICBzdWdnZXN0ZWQgYnkgQXJub2xkIFNjaHVsei4KKworICAgICAgICAgICAgICBGaXhlZCBhc3NvcnRlZCB0eXBvcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gVGhhbmtzIAorICAgICAgICAgICAgICB0byBEYXZpZCBLaW1kb24uCisKKyAgICAgICAgICAgICAgU3VidGxlIHJlYXJyYW5nZW1lbnQgdG8gdGhlIGRvd25sb2FkYWJsZSB0YXJiYWxsLCBhbmQgc3RvcHBlZAorICAgICAgICAgICAgICBkaXN0cmlidXRpbmcgLmRlYnMsIHNpbmNlIGRuc21hc3EgaXMgbm93IGFuIG9mZmljaWFsIERlYmlhbgorICAgICAgICAgICAgICBwYWNrYWdlLgorCityZWxlYXNlIDEuNyAgIEZpeCBhIHByb2JsZW0gd2l0aCBjYWNoZSBub3QgY2xlYXJpbmcgcHJvcGVybHkKKyAgICAgICAgICAgICAgb24gcmVjZWlwdCBvZiBTSUdIVVAuIEJ1ZyBzcG90dGVkIGJ5IFNhdCBEZXNocGFuZGUuCisKKyAgICAgICAgICAgICAgSW4gZ3JvdXAtaWQgY2hhbmdpbmcgY29kZToKKwkgICAgICAxKSBEcm9wIHN1cHBsaW1lbnRhcnkgZ3JvdXBzLgorICAgICAgICAgICAgICAyKSBDaGFuZ2UgZ2lkIGJlZm9yZSBkcm9wcGluZyByb290IChwYXRjaCBmcm9tIFNvZXdvbm8gRWZmZW5kaS4pCisgICAgICAgICAgICAgIDMpIENoYW5nZSBncm91cCB0byAiZGlwIiBpZiBpdCBleGlzdHMsIHRvIGFsbG93IGFjY2VzcworICAgICAgICAgICAgICAgICB0byAvZXRjL3BwcC9yZXNvbHYuY29uZiAoc3VnZ2VzdGlvbiBmcm9tIEpvcmcgU29tbWVyLikKKyAgICAgICAgICAgICAgVXBkYXRlIGRvY3MgdG8gcmVmbGVjdCBhYm92ZSBjaGFuZ2VzLgorCisgICAgICAgICAgICAgIE90aGVyIGRvY3VtZW50YXRpb24gY2hhbmdlcyBmcm9tIERhdmlkIE1pbGxlci4KKyAgICAgICAgICAgICAgQWRkZWQgc3VnZ2VzdGVkIHNjcmlwdCBmcmFnbWVudCBmb3IgZGhjcGNkLmV4ZS4KKworcmVsZWFzZSAxLjggICBGaXggdW5zYWZlIHVzZSBvZiB0b2xvd2VyKCkgbWFjcm8gLSBhbGxvd3MgbGlua2luZyBhZ2FpbnN0IAorICAgICAgICAgICAgICB1bGliYy4gKFBhdGNoZXMgZnJvbSBTb2V3b25vIEVmZmVuZGkgYW5kIEJqb3JuIEFuZGVyc3Nvbi4pCisKKyAgICAgICAgICAgICAgRml4IHR5cG8gaW4gdXNhZ2Ugc3RyaW5nLgorCisJICAgICAgQWRkZWQgYWR2aWNlIGFib3V0IFJlZEhhdCBQUFAgY29uZmlndXJhdGlvbiB0bworICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uLiAoVGhhbmtzIHRvIEMuIExlZSBUYXlsb3IuKQorCisJICAgICAgUGF0Y2hlcyB0byBmaXggcHJvYmxlbXMgb24gQlNEIHN5c3RlbXMgZnJvbSBNYXJjIEh1YmVyCisgICAgICAgICAgICAgIGFuZCBDYW4gRXJraW4gQWNhci4gVGhlc2UgYWRkIHRoZSBvcHRpb25zCisgICAgICAgICAgICAgIEhBVkVfQVJDNFJBTkRPTSBhbmQgSEFWRV9TT0NLQUREUl9TQV9MRU4gdG8gY29uZmlnLmguCisJICAgICAgRWxhYm9yYXRlZCBjb25maWcuaCAtIHNob3VsZCByZWFsbHkgdXNlIGF1dG9jb25mLgorCisJICAgICAgRml4IHRpbWUtdG8tbGl2ZSBjYWxjdWxhdGlvbiB3aGVuIGNoYXNpbmcgQ05BTUVzLgorCisJICAgICAgRml4IHVzZS1hZnRlci1mcmVlIGFuZCBtaXNzaW5nIGluaXRpYWxpc2F0aW9uIGJ1Z3MgaW4KKyAgICAgICAgICAgICAgdGhlIGNhY2hlIGNvZGUuIChUaGFua3MgdG8gTWFyYyBIdWJlci4pCisKKyAgICAgICAgICAgICAgQnVpbGRzIG9uIFNvbGFyaXMgOS4gKFRoYW5rcyB0byBNYXJjIEh1YmVyLikgICAgICAgICAgIAorCityZWxlYXNlIDEuOSAgIEZpeGVzIHRvIHJwbSAuc3BlYyBmaWxlcy4KKworICAgICAgICAgICAgICBEb24ndCBwdXQgZXhwaXJlZCBESENQIGVudHJpZXMgaW50byB0aGUgY2FjaGUgb25seSB0byAKKwkgICAgICB0aHJvdyB0aGVtIGF3YXkgYWdhaW4uCisKKyAgICAgICAgICAgICAgUHV0IGRuc21hc3Egb24gYSBzZXZlcmUgbWVtb3J5IGRpZXQ6IHRoaXMgcmVkdWNlcyBib3RoCisgICAgICAgICAgICAgIHRoZSBhbW91bnQgb2YgaGVhcCBzcGFjZSB1c2VkIGFuZCB0aGUgc3RhY2sgc2l6ZQorICAgICAgICAgICAgICByZXF1aXJlZC4gVGhlIGRpZmZlcmVuY2UgaXMgbm90IHJlYWxseSB2aXNpYmxlIHdpdGgKKyAgICAgICAgICAgICAgYmxvYXRlZCBsaWJjcyBsaWtlIGdsaWJjLCBidXQgc2hvdWxkIGRyYW1hdGljYWxseSByZWR1Y2UKKyAgICAgICAgICAgICAgbWVtb3J5IHJlcXVpcmVtZW50cyB3aGVuIGxpbmtlZCBhZ2FpbnN0IHVsaWJjIGZvciB1c2Ugb24KKyAgICAgICAgICAgICAgZW1iZWRlZCByb3V0ZXJzLCBhbmQgdGhhdCdzIHRoZSBwb2ludCByZWFsbHkuIFRoYW5rcyB0bworICAgICAgICAgICAgICBNYXR0aGV3IE5hdGFsaWVyIGZvciBwcm9tcHRpbmcgdGhpcy4gICAKKworCSAgICAgIENoYW5nZWQgZGVidWcgbW9kZSAoLWQpIHNvIHRoYXQgYWxsIGxvZ2dpbmcgYXBwZWFycyBvbgorICAgICAgICAgICAgICBzdGRlcnIgYXMgd2VsbCBhcyBnb2luZyB0byBzeXNsb2dkLiAKKworCSAgICAgIEFkZGVkIEhBVkVfSVBWNiBjb25maWcgc3ltYm9sIHRvIGFsbG93IGNvbXBpbGF0aW9uCisgICAgICAgICAgICAgIGFnYWluc3QgYSBsaWJjIHdoaWNoIGRvZXNuJ3QgaGF2ZSBJUHY2IHN1cHBvcnQuCisKKwkgICAgICBBZGRlZCBhIGZhY2lsaXR5IHRvIGxvZyBhbGwgcXVlcmllcywgZW5hYmxlZCB3aXRoIC1xIGZsYWcuCisKKwkgICAgICBGaXhlZCBwYWNrZXQgc2l6ZSBjaGVja2luZyBidWcgaW4gYWRkcmVzcyBleHRyYWN0aW9uIGNvZGUuCisKKwkgICAgICBIYWx2ZWQgZGVmYXVsdCBjYWNoZSBzaXplIC0gMzAwIHdhcyB3YXkgT1RUIGluIHR5cGljYWwgdXNlLgorCisJICAgICAgQWRkZWQgc2VsZi1NWCBmdW5jdGlvbiwgZW5hYmxlZCBieSAtZSBmbGFnLiBUaGFua3MgdG8KKyAgICAgICAgICAgICAgTHlvbmVsIFZpbmNlbnQgZm9yIHRoZSBwYXRjaC4KKworCSAgICAgIEFkZGVkIEhBVkVfRk9SSyBjb25maWcgc3ltYm9sIGFuZCBzdHVmZiB0byBzdXBwb3J0CisgICAgICAgICAgICAgIHVDbGludXguIFRoYW5rcyB0byBNYXR0aGV3IE5hdGFsaWVyIGZvciB1Q2xpbnV4IHN0dWZmLiAKKworcmVsZWFzZSAxLjEwICBMb2cgd2FybmluZ3MgaWYgcmVzb2x2LmNvbmYgb3IgZGhjcC5sZWFzZXMgYXJlIG5vdAorICAgICAgICAgICAgICBhY2Nlc3NhYmxlIGZvciBhbnkgcmVhc29uLCBhcyBzdWdnZXN0ZWQgYnkgSGlucmljaCBFaWx0cy4KKworCSAgICAgIEZpeGVkIHdyb25nIGFkZHJlc3MgcHJpbnRpbmcgaW4gZXJyb3IgbWVzc2FnZSBhYm91dAorCSAgICAgIG5vIGludGVyZmFjZSB3aXRoIGFkZHJlc3MuCisKKwkgICAgICBVcGRhdGVkIGRvY3MgYW5kIHNwbGl0IGluc3RhbGxhdGlvbiBpbnN0dWN0aW9ucyBpbnRvIHNldHVwLmh0bWwuCisKKwkgICAgICBGaXggYnVnIGluIENOQU1FIGNoYXNpbmcgY29kZTogT25lIENOQU1FIHBvaW50aW5nCisJICAgICAgdG8gbWFueSBBIHJlY29yZHMgd291bGQgbG9zZSBBIHJlY29yZHMgYWZ0ZXIgdGhlIAorCSAgICAgIGZpcnN0LiBUaGlzIGJ1ZyB3YXMgaW50cm9kdWNlZCBpbiB2ZXJzaW9uIDEuOS4KKworCSAgICAgIExvZyBzdGFydHVwIGZhaWx1cmVzIGF0IGxldmVsIENyaXRpY2FsIGFzIHdlbGwgYXMgCisJICAgICAgcHJpbnRpbmcgdGhlbSB0byBzdGFuZGFyZCBlcnJvci4KKwkgICAgICBFeGl0IHdpdGggcmV0dXJuIGNvZGUgMSB3aGVuIGdpdmVuIGJhZCBvcHRpb25zLgorCisJICAgICAgQ2xlYW5lZCB1cCBjb2RlIGZvciBuby1jYWNoZSBvcGVyYXRpb24uCisKKyAgICAgICAgICAgICAgQWRkZWQgLW8gb3B0aW9uIHdoaWNoIGZvcmNlcyBkbnNtYXNxIHRvIHVzZSB0bworICAgICAgICAgICAgICB1cHN0cmVhbSBzZXJ2ZXJzIGluIHRoZSBvcmRlciB0aGV5IGFwcGVhciBpbiAvZXRjL3Jlc29sdi5jb25mLgorCisgICAgICAgICAgICAgIEFkZGVkIHVwc3RyZWFtIHNlcnZlciB1c2UgbG9nZ2luZy4KKworICAgICAgICAgICAgICBMb2cgZnVsbCBjYWNoZSBkdW1wIG9uIHJlY2VpcHQgb2YgU0lHVVNSMSB3aGVuIHF1ZXJ5IAorICAgICAgICAgICAgICBsb2dnaW5nIGlzIGVuYWJsZWQgKC1xIHN3aXRjaCkuCisKKwkgICAgICBBZGRlZCAtUyBvcHRpb24gdG8gZGlyZWN0bHkgc3BlY2lmeSB1cHN0cmVhbSBzZXJ2ZXJzIGFuZAorICAgICAgICAgICAgICBhZGRlZCBhYmlsaXR5IHRvIGRpcmVjdCBxdWVyaWVzIGZvciBzcGVjaWZpYyBkb21haW5zIHRvCisgICAgICAgICAgICAgIHNwZWNmaWMgc2VydmVycy4gU3VnZ2VzdGVkIGJ5IEplbnMgVm9uZGVyaGVpZGUuCisKKwkgICAgICBVcGdyYWRlZCByYW5kb20gSUQgZ2VuZXJhdGlvbiAtIHBhdGNoIGZyb20gUm9iIEZ1bmsuCSAgICAgIAorCisJICAgICAgRml4ZWQgcmVhZGluZyBvZiBkb21haW5zIGluIGFyZ3VtZW50cyB3aXRoIGNhcGl0YWwKKyAgICAgICAgICAgICAgbGV0dGVycyBvciB0cmFpbGluZyBwZXJpb2RzLgorCisJICAgICAgRml4ZWQgcG90ZW50aWFsIFNFR1Ygd2hlbiBnaXZlbiBiYWQgb3B0aW9ucy4KKworCSAgICAgIFJlYWQgb3B0aW9ucyBmcm9tIC9ldGMvZG5zbWFzcS5jb25mIGlmIGl0IGV4aXN0cy4KKyAgICAgICAgICAgICAgRG8gc2Vuc2libGUgdGhpbmdzIHdpdGggbWlzc2luZyBwYXJhbWV0ZXJzLCBlZyAKKyAgICAgICAgICAgICAgIi0tcmVzb2x2LWZpbGU9IiB0dXJucyBvZmYgcmVhZGluZyAvZXRjL3Jlc29sdi5jb25mLgorCityZWxlYXNlIDEuMTEgIEFjdHVhbGx5IGltcGxlbWVudCB0aGUgLVIgZmxhZyBwcm9taXNlZCBpbiB0aGUgMS4xMCBtYW4gcGFnZS4KKworICAgICAgICAgICAgICBJbXByb3ZlIGFuZCByYXRpb25hbGlzZSB0aGUgcmV0dXJuIGNvZGVzIGluIGFuc3dlcnMgdG8KKyAgICAgICAgICAgICAgcXVlcmllcy4gSW4gdGhlIGNhc2UgdGhhdCB0aGVyZSBhcmUgbm8gYXZhaWxhYmxlCisgICAgICAgICAgICAgIHVwc3RyZWFtIHNlcnZlcnMgdG8gZm9yd2FyZCBhIHF1ZXJ5IHRvLCByZXR1cm4gUkVGVVNFRC4KKyAgICAgICAgICAgICAgVGhpcyBtYWtlcyBzZW5kbWFpbCB3b3JrIGJldHRlciBvbiBtb2RlbSBjb25uZWN0ZWQKKyAgICAgICAgICAgICAgc3lzdGVtcyB3aGVuIHRoZSBtb2RlbSBsaW5rIGlzIGRvd24gKFRoYW5rcyB0byBSb2dlciBQbGFudCkuCisJICAgICAgQ2FjaGUgYW5kIHJldHVybiB0aGUgTlhET01BSU4gc3RhdHVzIG9mIGZhaWxlZCBxdWVyaWVzOgorICAgICAgICAgICAgICB0aGlzIG1ha2VzIHRoZSBgaG9zdGAgY29tbWFuZCB3b3JrIHdoZW4gdHJhdmVyc2luZyBzZWFyY2gKKyAgICAgICAgICAgICAgcGF0aHMgKFRoYW5rcyB0byBQZXRlciBCYWlsZXkpLiBTZXQgdGhlICJhdXRob3JpdGF0aXZlIgorICAgICAgICAgICAgICBiaXQgaW4gcmVwbGllcyBjb250YWluaW5nIG5hbWVzIGZyb20gL2V0Yy9ob3N0cyBvciBESENQLgorCisgICAgICAgICAgICAgIFRvbGVyYXRlIE1TLURPUyBzdHlsZSBsaW5lIGVuZGluZyBjb2RlcyBpbiAvZXRjL2hvc3RzCisJICAgICAgYW5kIC9ldGMvcmVzb2x2LmNvbmYsIGZvciBwZW9wbGUgd2hvIGNvcHkgZnJvbSB3aW5zb2NrCisgICAgICAgICAgICAgIGluc3RhbGxhdGlvbnMuCisKKwkgICAgICBBbGxvdyBzcGVjaWZpY2F0aW9uIG9mIG1vcmUgdGhhbiBvbmUgcmVzb2x2LmNvbmYgZmlsZS4gVGhpcyBpcyAKKyAgICAgICAgICAgICAgaW50ZW5kZWQgZm9yIGxhcHRvcHMgd2hpY2ggY29ubmVjdCB2aWEgREhDUCBvcgorICAgICAgICAgICAgICBQUFAuIFdoaWNoZXZlciByZXNvbHYuY29uZiB3YXMgdXBkYXRlZCBsYXN0IGlzIHVzZWQuCisKKyAgICAgICAgICAgICAgQWxsb3cgLVMgZmxhZ3Mgd2hpY2ggc3BlY2lmeSBhIGRvbWFpbiBidXQgbm8gc2VydmVyCisgICAgICAgICAgICAgIGFkZHJlc3MuIFRoaXMgZ2l2ZXMgbG9jYWwgZG9tYWlucyB3aGljaCBhcmUgbmV2ZXIgZm9yd2FyZGVkLgorCisJICAgICAgQWRkIC1FIGZsYWcgdG8gYXV0b21hdGljYWxseSBhZGQgdGhlIGRvbWFpbiBzdWZmaXggdG8KKyAgICAgICAgICAgICAgbmFtZXMgaW4gL2V0Yy9ob3N0cyAtc3VnZ2VzdGlvbiBmcm9tIFBoaWwgSGFybWFuLgorCisJICAgICAgQWx3YXlzIHJldHVybiBhIHplcm8gdGltZS10by1saXZlIGZvciBuYW1lcyBkZXJpdmVkIGZyb20gCisJICAgICAgREhDUCB3aGljaCBzdG9wcyBhbnRoaW5nIGVsc2UgY2FjaGluZyB0aGVzZQorICAgICAgICAgICAgICBuYW1lcy4gUHJldmlvdXNseSB0aGUgVFRMIHdhcyBkZXJpdmVkIGZyb20gdGhlIGxlYXNlCisgICAgICAgICAgICAgIHRpbWUgYnV0IHRoYXQgaXMgaW5jb3JyZWN0IHNpbmNlIGEgbGVhc2UgY2FuIGJlIGdpdmVuCisgICAgICAgICAgICAgIHVwIGVhcmx5OiBkbnNtYXNxIHdvdWxkIGtub3cgdGhpcyBidXQgYW55dGhpbmcgd2l0aCB0aGUKKyAgICAgICAgICAgICAgbmFtZSBjYWNoZWQgd2l0aCBsb25nIFRUTCB3b3VsZCBub3QgYmUgdXBkYXRlZC4KKworCSAgICAgIEV4dGVuZGVkIEhBVkVfSVBWNiBjb25maWcgZmxhZyB0byBhbGxvdyBjb21wbGlhdGlvbiBvbgorCSAgICAgIG9sZCBzeXN0ZW1zIHdoaWNoIGRvbid0IGhhdmUgbW9kZXJuIGxpYnJhcnkgcm91dGluZXMKKwkgICAgICBsaWtlIGluZXRfbnRvcCgpLiBUaGFua3MgdG8gUGhpbCBIYXJtYW4gZm9yIHRoZSBwYXRjaC4KKworcmVsZWFzZSAxLjEyICBBbGxvdyBtb3JlIHRoYW4gb25lIGRvbWFpbiBpbiBzZXJ2ZXIgY29uZmlnIGxpbmVzIGFuZAorCSAgICAgIG1ha2UgImxvY2FsIiBhIHN5bm9ueW0gZm9yICJzZXJ2ZXIiLiBUaGlzIG1ha2VzIHRoaW5ncworCSAgICAgIGxpa2UgImxvY2FsPS9sb2NhbG5ldC90aGVrZWxsZXlzLm9yZy51ay8iIGxlZ2FsLiBBbGxvdworICAgICAgICAgICAgICBwb3J0IHRvIHNwZWNpZmllZCBhcyBwYXJ0IG9mIHNlcnZlciBhZGRyZXNzLgorCisJICAgICAgQWxsb3cgd2hvbGUgZG9tYWlucyB0byBoYXZlIGFuIElQIGFkZHJlc3Mgc3BlY2lmaWVkCisgICAgICAgICAgICAgIGluIC9ldGMvZG5zbWFzcS5jb25mLiAoL2V0Yy9ob3N0cyBkb2Vzbid0IHdvcmsgZG9tYWlucykuCisgICAgICAgICAgICAgIGFkZHJlc3M9L2RvdWJsZWNsaWNrLm5ldC8xMjcuMC4wLjEgc2hvdWxkIGNhdGNoIGFsbAorICAgICAgICAgICAgICB0aG9zZSBuYXN0eSBiYW5uZXIgYWRzLiBJbnNwaXJlZCBieSBhIHBhdGNoIAorCSAgICAgIGZyb20gRGFuaWVsIEdyeW5pZXdpY3oKKworCSAgICAgIExvZyB0aGUgc291cmNlIG9mIGVhY2ggcXVlcnkgd2hlbiBsb2dnaW5nIHN3aXRjaGVkIG9uLiAKKworCSAgICAgIEZpeCBidWcgaW4gc2NyaXB0IGZyYWdtZW50IGZvciBkaGNwY2QgLSB0aGFua3MgdG8gQmFycnkgU3Rld2FydC4KKwkgICAgICAKKwkgICAgICBGaXggYnVnIHdoaWNoIG1lYW50IHRoYXQgc3RyaWN0LW9yZGVyIGFuZCBzZWxmLW14IHdlcmUKKwkgICAgICBhbHdheXMgZW5hYmxlZC4KKworCSAgICAgIEJ1aWxkcyB3aXRoIExpbnV4IGxpYmM1IG5vdyAtIGZvciB0aGUgRnJlZXNjbyBwcm9qZWN0LgorCisJICAgICAgRml4ZWQgTWFrZWZpbGUgaW5zdGFsbGF0aW9uIHNjcmlwdCAocGF0Y2ggZnJvbSBTaWx2YW4KKwkgICAgICBNaW5naGV0dGkpIGFuZCBhZGRlZCBDQyBhbmQgQ0ZMQUdTIHZhcmlhYmxlcy4KKworCSAgICAgIEltcHJvdmUgcmVzb3VyY2UgYWxsb2NhdGlvbiB0byByZWR1Y2UgdnVsbmVyYWJpbGl0eSB0bworCSAgICAgIERPUyBhdHRhY2tzIC0gdGhlIG9sZCB2ZXJzaW9uIGNvdWxkIGhhdmUgYWxsIHF1ZXJpZXMKKwkgICAgICBibG9ja2VkIGJ5IGEgY29udGludW91cyBoaWdoLXNwZWVkIHN0cmVhbSBvZgorCSAgICAgIHF1ZXJpZXMuIE5vdyBzb21lIHF1ZXJpZXMgd2lsbCBzdWNjZWVkLCBhbmQgdGhlIGV4Y2VzcworCSAgICAgIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCBhIHNlcnZlciBmYWlsIGVycm9yLiBUaGlzIGNoYW5nZSBhbHNvCisJICAgICAgcHJvdGVjdHMgYWdhaW5zdCBzZXJ2ZXItbG9vcHM7IHNldHRpbmcgdXAgYSByZXNvbHZpbmcKKyAgICAgICAgICAgICAgbG9vcCBiZXR3ZWVuIHR3byBpbnN0YW5jZXMgb2YgZG5zbWFzcSBpcyBubyBsb25nZXIKKwkgICAgICBjYXRhc3Ryb3BoaWMuIFRoZSBzZXJ2ZXJzIHdpbGwgY29udGludWUgdG8gcnVuLCBsb29wZWQKKwkgICAgICBxdWVyaWVzIGZhaWwgYW5kIGEgd2FybmluZyBpcyBsb2dnZWQuIFRoYW5rcyB0byBDLiBMZWUKKwkgICAgICBUYXlsb3IgZm9yIGhlbHAgd2l0aCB0aGlzLgorCSAgICAgIAorcmVsZWFzZSAxLjEzICBBZGRlZCBzdXBwb3J0IGZvciBidWlsZGluZyBycG1zIHN1aXRhYmxlIGZvciBtb2Rlcm4gU3VzZSAKKwkgICAgICBzeXN0ZW1zLiAocGF0Y2ggZnJvbSBBbmRpIDxjYW1iZWlzQG5ldHBsYWNlLmRlPikKKwkgICAgICAKKwkgICAgICBBZGRlZCBvcHRpb25zIC0tZ3JvdXAsIC0tbG9jYWxteCwgLS1sb2NhbC10dGwsCisJICAgICAgLS1uby1uZWdjYWNoZSwgLS1hZGRuLWhvc3QuCisJICAgICAgCisJICAgICAgTW92ZWQgYWxsIHRoZSB2YXJpb3VzIHJwbS1idWlsZGluZyBiaXRzIGludG8gL3JwbS4KKwkgICAgICAKKwkgICAgICBGaXggYnVpbGRzIHdpdGggZ2xpYmMgMi4xICh0aGFua3MgdG8gQ3Jpc3RpYW4KKwkgICAgICBJb25lc2N1LUlkYm9ocm4pCisJICAgICAgCisJICAgICAgUHJlc2VydmUgY2FzZSBpbiBkb21haW4gbmFtZXMsIGFzIHBlciBSRkMxMDM1LgorCSAgICAgIAorCSAgICAgIEZpeGVkIEFOWSBxdWVyaWVzIHRvIGRvbWFpbnMgd2l0aCAtLWFkZHJlc3Mgc3BlY2lmaWNhdGlvbi4KKwkgICAgICAKKwkgICAgICBGaXhlZCBGcmVlQlNEIGJ1aWxkLiAodGhhbmtzIHRvIFN0ZXZlbiBIb25zb24pCisJICAgICAgCisJICAgICAgQWRkZWQgLVEgb3B0aW9uIHdoaWNoIGFsbG93cyBhIHNwZWNpZmllZCBwb3J0IHRvIGJlIHVzZWQKKwkgICAgICB0byB0YWxrIHRvIHVwc3RyZWFtIHNlcnZlcnMuIFVzZWZ1bCBmb3IgcGVvcGxlIHdobyB3YW50CisJICAgICAgdmVyeSBwYXJhbm9pZCBmaXJld2FsbHMgd2hpY2ggb3BlbiBpbmRpdmlkdWFsIFVEUCBwb3J0LgorCSAgICAgICh0aGFua3MgdG8gRGF2aWQgQ29lIGZvciB0aGUgcGF0Y2gpCisJICAgICAgCSAgICAgIAorcmVsZWFzZSAxLjE0ICBGaXhlZCBtYW4gcGFnZSBkZXNjcmlwdGlvbiBvZiAtYiBvcHRpb24gd2hpY2ggY29uZnVzZWQgCisJICAgICAgL2V0Yy9ob3N0cyB3aXRoIC9ldGMvcmVzb2x2LmNvbmYuICh0aGFua3MgdG8gQ2hyaXN0b3BoZXIKKwkgICAgICBXZWltYW5uKQorCSAgICAgIAorCSAgICAgIEZpeGVkIGNvbmZpZy5oIHRvIGFsbG93IGJ1aWxkaW5nIHVuZGVyIE1BQ09TIFggYW5kIGdsaWJjCisJICAgICAgMi4wLnguICh0aGFua3MgdG8gTWF0dGhldyBHcmVnYW4gYW5kIFNlcmdlIENhcm9uKQorCSAgICAgIAorCSAgICAgIEFkZGVkIC0tZXhjZXB0LWludGVyZmFjZSBvcHRpb24uIChTdWdnZXN0ZWQgYnkgU2VyZ2UgQ2Fyb24pCisKKwkgICAgICBBZGRlZCBTSUdVU1IyIGZhY2lsaXR5IHRvIHJlLXNjYW4gZm9yIG5ldworCSAgICAgIGludGVyZmFjZXMuIChTdWdnZXN0ZWQgYnkgU2VyZ2UgQ2Fyb24pCisKKwkgICAgICBGaXhlZCBTRUdWIGluIG9wdGlvbi1yZWFkaW5nIGNvZGUgZm9yIGludmFsaWQgb3B0aW9ucy4KKwkgICAgICAoVGhhbmtzIHRvIEtsYWFzIFRlc2NoYXVlcikKKworICAgICAgICAgICAgICBGaXhlZCBtYW4gcGFnZSB0byBjbGFyaWZ5IGVmZmVjdCBvZiBTSUdVU1IxIG9uCisJICAgICAgL2V0Yy9yZXNvbHYuY29uZi4KKwkgICAgICAoVGhhbmtzIHRvIEtsYWFzIFRlc2NoYXVlcikKKwkgICAgICAKKwkgICAgICBDaGVjayB0aGF0IHJlY2lldmVkIHF1ZXJpZXMgaGF2ZSBvbmx5IHJmYzEwMzUtbGVnYWwgY2hhcmFjdGVycworCSAgICAgIGluIHRoZW0uIFRoaXMgY2hlY2sgaXMgbWFpbmx5IHRvIGF2b2lkIGJhZCBzdHJpbmdzIGJlaW5nCisJICAgICAgc2VudCB0byBzeXNsb2cuCisKKwkgICAgICBGaXhlZCAmJi8mIGNvbmZ1c2lvbiBpbiBvcHRpb24uYyBhbmQgYWRkZWQgREVTVERJUgorCSAgICAgIHZhcmlhYmxlIGZvciAibWFrZSBpbnN0YWxsIiAoVGhhbmtzIHRvIE9zdmFsZG8gCisgICAgICAgICAgICAgIE1hcnF1ZXMgZm9yIHRoZSBwYXRjaC4pCisKKwkgICAgICBGaXhlZCAvZXRjL2hvc3RzIHBhcnNpbmcgY29kZSB0byBjb3BlIHdpdGggTVMtRE9TCisJICAgICAgbGluZS1lbmRzIGluIHRoZSBmaWxlLiBUaGlzIHdhcyBzdXBwb3NlZCB0byBiZSBkb25lIGluCisJICAgICAgdmVyc2lvbiAxLjExLCBidXQgc29tZXRoaW5nIGdvdCBtaXNzZWQuIChUaGFua3MgdG8gRG91ZworCSAgICAgIENvcGVzdGFrZSBmb3IgaGVscGluZyB0byBmaW5kIHRoaXMuKQorCisJICAgICAgU3F1YXNoIHJlcGVhdGVkIG5hbWUvYWRkcmVzcyBwYWlycyByZWFkIGZyb20gaG9zdHMKKwkgICAgICBmaWxlcy4KKworCSAgICAgIFRpZGllZCB1cCByZXNvdXJjZSBoYW5kbGluZyBpbiB1dGlsLmMgKFRoYW5rcyB0bworCSAgICAgIENyaXN0aWFuIElvbmVzY3UtSWRib2hybikuCisKKwkgICAgICBBZGRlZCBoYXNoZWQgc2VhcmNoaW5nIG9mIGRvbWFpbiBuYW1lcy4gUGVvcGxlIGFyZSBzdGFydGluZworCSAgICAgIHRvIHVzZSBkbnNtYXNxIHdpdGggbGFyZ2VyIGxvYWRzIG5vdywgYW5kIGJpZ2dlciBjYWNoZXMsCisJICAgICAgYW5kIGxhcmdlIGxpc3RzIG9mIGFkLWJsb2NrIGFkZHJlc3Nlcy4gVGhpcyBtZWFucyBkb2luZworCSAgICAgIGxpbmVhciBzZWFyY2hlcyBjYW4gc3RhcnQgdG8gdXNlIGxvdHMgb2YgQ1BVIHNvIEkgYWRkZWQgaGFzaGVkCisJICAgICAgc2VhcmNoaW5nIGFuZCBzZXJpb3VzbHkgb3B0aW1pc2VkIHRoZSBjYWNoZSBjb2RlIGZvciAKKwkgICAgICBhbGdvcml0aG1pYyBlZmZpY2llbmN5LiBBbHNvIHVwcGVkIHRoZSBsaW1pdCBvbiBjYWNoZSAKKwkgICAgICBzaXplIHRvIDEwMDAwLgorCisJICAgICAgRml4ZWQgbG9nZ2luZyBvZiB0aGUgc291cmNlIG9mIG5hbWVzIGZyb20gdGhlIGFkZGl0aW9uYWwKKwkgICAgICBob3N0cyBmaWxlIGFuZCBmcm9tIHRoZSAiYm9ndXMgcHJpdmF0ZSBhZGRyZXNzIiBvcHRpb24uCisKKwkgICAgICBGaXhlZCBzcHVyaW91cyByZS1yZWFkaW5nIG9mIGVtcHR5IGxlYXNlIGZpbGVzLiAoVGhhbmtzCisJICAgICAgdG8gTGV3aXMgQmF1Z2htYW4gZm9yIHNwb3R0aW5nIHRoaXMuKQorCisJICAgICAgRml4ZWQgYnVpbGRpbmcgdW5kZXIgdWNsaWJjIChwYXRjaCBmcm9tIENyaXN0aWFuIElvbmVzY3UtSWRib2hybikKKwkgICAgICAKKwkgICAgICBEbyBzb21lIHNvY2tldCB0d2Vha2luZyB0byBhbGxvdyBkbnNtYXNxIHRvIGNvLWV4aXN0CisJICAgICAgd2l0aCBCSU5ELiBUaGFua3MgdG8gU3RlZmFuICdTZWMnIFplaGwgZm9yIHRoZSBwYXRjaC4KKworcmVsZWFzZSAxLjE1ICBBZGRlZCAtLWJvZ3VzLW54ZG9tYWluIG9wdGlvbi4KKworICAgICAgICAgICAgICBSZXN0cmljdCBjaGVja2luZyBvZiByZXNvbHYuY29uZiBhbmQgREhDUCBsZWFzZXMgZmlsZXMKKyAgICAgICAgICAgICAgdG8gb25jZSBwZXIgc2Vjb25kLiBUaGlzIGlzIGludGVuZGVkIHRvIGltcHJvdmUKKyAgICAgICAgICAgICAgcGVyZm9ybWFuY2UgdW5kZXIgaGVhdnkgbG9hZHMuIEFsc28gbWFrZSBhIHN5c3RlbSBjYWxsCisJICAgICAgdG8gZ2V0IHRoZSBjdXJyZW50IHRpbWUgb25jZSBwZXIgcXVlcnksIHJhdGhlciB0aGFuIGZvdXIKKyAgICAgICAgICAgICAgdGltZXMuCisKKwkgICAgICBJbmNyZWFzZWQgbnVtYmVyIG9mIG91dHN0YW5kaW5nIHF1ZXJpZXMgdG8gMTUwIGluCisJICAgICAgY29uZmlnLmgKKworcmVsZWFzZSAxLjE2ICBBbGxvdyAiLyIgY2hhcmFjdGVycyBpbiBkb21haW4gbmFtZXMgLSB0aGlzIGZpeGVzCisgICAgICAgICAgICAgIGNhY2hpbmcgb2YgUkZDIDIzMTcgQ05BTUUtUFRSIHJlY29yZHMuCisKKwkgICAgICBGaXhlZCBicmFpbi1mYXJ0IGluIC1CIG9wdGlvbiB3aGVuIEdFVE9QVF9MT05HIG5vdAorCSAgICAgIGVuYWJsZWQgLSB0aGFua3MgdG8gU3RldmVuIFlvdW5nIGFuZCBKYXNvbiBNaWxsZXIgCisJICAgICAgZm9yIHBvaW50aW5nIHRoaXMgb3V0LgorCisJICAgICAgR2VuZXJhbGlzZWQgYm9ndXMtbnhkb21haW4gY29kZTogYWxsb3cgbW9yZSB0aGFuIG9uZQorCSAgICAgIGFkZHJlc3MgdG8gY2hlY2ssIGFuZCBkZWFsIHdpdGggcmVwbGllcyB3aXRoIG11bHRpcGxlCisJICAgICAgYW5zd2VyIHJlY29yZHMuIChCYXNlZCBvbiBjb250cmlidXRpb24gZnJvbSBIdW1iZXJ0bworCSAgICAgIE1hc3NhLikKKworCSAgICAgIFVwZGF0ZWQgdGhlIGRvY3VtZW50YXRpb24gdG8gaW5jbHVkZSBpbmZvcm1hdGlvbiBhYm91dAorCSAgICAgIGJvZ3VzLW54ZG9tYWluIGFuZCB0aGUgVmVyaXNpZ24gdHJhZ2VkeS4KKworCSAgICAgIEFkZGVkIGxpYnJhcmllcyBuZWVkZWQgb24gU29sYXJpcyB0byBNYWtlZmlsZS4KKworCSAgICAgIEFkZGVkIGZhY2lsaXR5IHRvIHNldCBzb3VyY2UgYWRkcmVzcyBpbiBxdWVyaWVzIHRvCisJICAgICAgdXBzdHJlYW0gbmFtZXNlcnZlcnMuIFRoaXMgaXMgdXNlZnVsIHdpdGggbXVsdGlob21lZAorCSAgICAgIGhvc3RzLCBlc3BlY2lhbGx5IHdoZW4gdXNpbmcgVlBOcy4gVGhhbmtzIHRvIFRvbSBGYW5uaW5nCisJICAgICAgZm9yIHN1Z2dlc3RpbmcgdGhpcyBmZWF0dXJlLgorCisJICAgICAgVHdlYWtlZCBsb2dnaW5nOiBsb2cgdG8gZmFjaWxpdHkgTE9DQUwwIHdoZW4gaW4KKwkgICAgICBkZWJ1Zy9uby1kYWVtb24gbW9kZSBhbmQgY2hhbmdlZCBsZXZlbCBvZiBxdWVyeSBsb2dnaW5nCisJICAgICAgZnJvbSBJTkZPIHRvIERFQlVHLiBNYWtlIGxvZyBvcHRpb25zIGNvbnRyb2xsYWJsZSBpbgorCSAgICAgIGNvbmZpZy5oCisKK3JlbGVhc2UgMS4xNyAgRml4ZWQgY3Jhc2ggd2l0aCBESENQIGhvc3RuYW1lcyA+IDQwIGNoYXJhY3RlcnMuCisKKyAgICAgICAgICAgICAgRml4ZWQgbmFtZS1jb21wYXJpc2lvbiByb3V0aW5lcyB0byBub3QgZGVwZW5kIG9uIExvY2FsZSwKKyAgICAgICAgICAgICAgaW4gdGhlb3J5IHRoaXMgdmVyc2lvbnMgc2luY2UgMS4xNSBjb3VsZCBsb2NrIHVwIG9yIGdpdmUKKyAgICAgICAgICAgICAgd3JvbmcgcmVzdWx0cyB3aGVuIHJ1biB3aXRoIGxvY2FsZSAhPSAnQycuCisKKwkgICAgICBGaXggcG90ZW50aWFsIGxvY2t1cCBpbiBjYWNoZSBjb2RlLiAodGhhbmtzIHRvIEhlbm5pbmcKKwkgICAgICBHbGF3ZSBmb3IgaGVscCBjaGFzaW5nIHRoaXMgZG93bi4pCisKKwkgICAgICBNYWRlIGxlYXNlLWZpbGUgcmVhZGVyIGJ1bGxldC1wcm9vZi4KKworCSAgICAgIEFkZGVkIC1EIG9wdGlvbiwgc3VnZ2VzdGVkIGJ5IFBldGVyIEZpY2h0bmVyLgorCityZWxlYXNlIDEuMTggIEFkZGVkIHJvdW5kLXJvYmluIEROUyBmb3IgbmFtZXMgd2hpY2ggaGF2ZSBtb3JlIHRoYW4gb25lCisgICAgICAgICAgICAgIGFkZHJlc3MuIEluIHRoaXMgY2FzZSBhbGwgdGhlIGFkZHJlc3NlcyB3aWxsIGJlCisgICAgICAgICAgICAgIHJldHVybmVkLCBhcyBiZWZvcmUsIGJ1dCB0aGUgb3JkZXIgd2lsbCBjaGFuZ2Ugb24gZWFjaAorICAgICAgICAgICAgICBxdWVyeS4KKworCSAgICAgIFJlbW92ZSBzdHJheSB0b2xvd2VyKCkgYW5kIGlzYWxudW0oKSBjYWxscyBtaXNzZWQgaW4gCisJICAgICAgbGFzdCByZWxlYXNlIHRvIGNvbXBsZXRlIExPQ0FMRSBpbmRlcGVuZGVuY2UuCisKKwkgICAgICBBbGxvdyBwb3J0IG51bWJlcnMgaW4gc291cmNlLWFkZHJlc3Mgc3BlY2lmaWNhdGlvbnMuCisKKwkgICAgICBGb3IgaG9zdG5hbWVzIHdpdGhvdXQgYSBkb21haW4gcGFydCB3aGljaCBkb24ndCBnZXQKKwkgICAgICBmb3J3YXJkZWQgYmVjYXVzZSAtRCBpcyBpbiBlZmZlY3QsIHJldHVybiBOWERPTUFJTiBub3QKKwkgICAgICBhbiBlbXB0eSByZXBseS4KKworCSAgICAgIEFkZCBjb2RlIHRvIHJldHVybiB0aGUgc29mdHdhcmUgdmVyc2lvbiBpbiByZXBzb25zZSB0byB0aGUKKwkgICAgICBjb3JyZWN0IG1hZ2ljIHF1ZXJ5IGluIHRoZSBzYW1lIHdheSBhcyBCSU5ELiBVc2UgIAorCSAgICAgICJkaWcgdmVyc2lvbi5iaW5kIGNoYW9zIHR4dCIgdG8gbWFrZSB0aGUgcXVlcnkuCisKKwkgICAgICBBZGRlZCBuZWdhdGl2ZSBjYWNoaW5nIGZvciBQVFIgKGFkZHJlc3MgdG8gbmFtZSkgcmVjb3Jkcy4KKworCSAgICAgICBFbnN1cmUgdGhhdCBuYW1lcyBvZiB0aGUgZm9ybSB0eXBpY2FsbHkgdXNlZCBpbiBQVFIgcXVlcmllcworICAgICAgICAgICAgICAoaWUgdy54Lnl6LmluLWFkZHIuYXJwYSBhbmQgSVB2NiBlcXVpdmFsZW50cykgZ2V0CisgICAgICAgICAgICAgIGNvcnJlY3QgYW5zd2VycyB3aGVuIHF1ZXJpZWQgYXMgb3RoZXIgdHlwZXMuIEl0J3MKKyAgICAgICAgICAgICAgdW5saWtlbHkgdGhhdCBhbnlvbmUgd291bGQgZG8gdGhpcywgYnV0IHRoZSBjaGFuZ2UgbWFrZXMKKyAgICAgICAgICAgICAgdGhpbmdzIHBlZGFudGljYWxseSBjb3JyZWN0LgorCisJICAgICAgVGF1Z2h0IGRuc21hc3EgdG8gdW5kZXJzdGFuZCAiYml0c3RyaW5nIiBuYW1lcywgYXMgdGhlc2UKKwkgICAgICBhcmUgdXNlZCBmb3IgUFRSIGxvb2t1cHMgb2YgSVB2NiBhZGRyZXNzZXMgYnkgc29tZSAKKwkgICAgICByZXNvbHZlcnMgYW5kIGxvb2t1cCB0b29scy4gRG5zbWFzcSBub3cgdW5kZXJzdGFuZHMgYm90aAorCSAgICAgIHRoZSBpcDYuaW50IGRvbWFpbiBhbmQgdGhlIGlwNi5hcnBhIGRvbWFpbiBhbmQgYm90aAorCSAgICAgIG5pYmJsZSBhbmQgYml0c3RyaW5nIGZvcm1hdHMgc28gaXQgc2hvdWxkIHdvcmsgd2l0aCBhbnkKKwkgICAgICBjbGllbnQgY29kZS4gU3RhbmRhcmRzIGZvciB0aGlzIHN0dWZmIGhhdmUgZmxpcC1mbG9wcGVkCisJICAgICAgb3ZlciB0aGUgbGFzdCBmZXcgeWVhcnMsIGxlYXZpbmcgbWFueSBkaWZmZXJlbnQgY2xpZW50cworCSAgICAgIGluIHRoZWlyIHdha2UuIFNlZSBSRkMyNjczIGZvciBkZXRhaWxzIG9mIGJpdHN0cmluZ3MuCisJICAgICAgCisJICAgICAgQWxsb3cgJ18nIGNoYXJhY3RlcnMgaW4gZG9tYWluIG5hbWVzOiBMZWdhbCBjaGFyYWN0ZXJzCisJICAgICAgYXJlIG5vdyBbYS16XVtBLVpdLi1fIENoZWNrIG5hbWVzIHJlYWQgZnJvbSBob3N0cyBmaWxlcworCSAgICAgIGFuZCBsZWFzZXMgZmlsZXMgYW5kIHJlamVjdCBpbGxlZ2FsIG9uZXMgd2l0aCBhIG1lc3NhZ2UKKwkgICAgICBpbiBzeXNsb2cuIAorCisJICAgICAgTWFrZSBlbXB0eSBkb21haW4gbmFtZXMgaW4gc2VydmVyIGFuZCBhZGRyZXNzIG9wdGlvbnMgCisJICAgICAgaGF2ZSB0aGUgc3BlY2lhbCBtZWFuaW5nICJ1bnF1YWxpZmllZAorCSAgICAgIG5hbWVzIi4gKHVucXVhbGlmaWVkIG5hbWVzIGFyZSBuYW1lcyB3aXRob3V0IGFueSBkb3RzIGluCisJICAgICAgdGhlbSkuIEl0J3Mgbm93IHBvc3NpYmxlIHRvIGRvIHNlcnZlcj0vLzEuMi4zLjQgYW5kIGhhdmUgCisJICAgICAgdW5xdWFsaWZpZWQgbmFtZXMgc2VudCB0byBhIHNwZWNpYWwgbmFtZXNlcnZlci4KKworcmVsZWFzZSAyLjByYzEgIAorICAgICAgICAgICAgICBNb3ZlZCBzb3VyY2UgY29kZSBpbnRvIHNyYy8gZGlyZWN0b3J5LgorCisJICAgICAgRml4ZXMgdG8gY3VyZSBjb21waWxhdGlvbiBicmVha2FnZSB3aGVuIEhBVkVfSVBWNiBub3QKKwkgICAgICBzZXQsIHRoYW5rcyB0byBDbGFhcyBIaWxicmVjaHQuCisKKwkgICAgICBCSUcgQ0hBTkdFOiBhZGRlZCBhbiBpbnRlZ3JhdGVkIERIQ1Agc2VydmVyIGFuZCByZW1vdmVkCisJICAgICAgdGhlIGNvZGUgdG8gcmVhZCBJU0MgZGhjcC5sZWFzZXMuIFRoaXMgd2lucyBpbiB0ZXJtcyAKKwkgICAgICBvZiBlYXNlIG9mIHNldHVwIGFuZCBjb25maWd1cmF0aW9uIGZsZXhpYmlsaXR5IGFuZCAKKwkgICAgICB0b3RhbCBtYWNoaW5lIHJlc291cmNlcyBjb25zdW1lZC4gCisKKwkgICAgICBSZS1qaWdlZCB0aGUgc2lnbmFsIGhhbmRsaW5nIGNvZGUgdG8gcmVtb3ZlIGEgcmFjZQorCSAgICAgIGNvbmRpdGlvbiBhbmQgdG8gYmUgbW9yZSBwb3J0YWJsZS4KKworcmVsZWFzZSAyLjAKKwkgICAgIFRoYW5rcyB0byBEYXZpZCBBc2h3b3J0aCBmb3IgZmVlZGJhY2sgd2hpY2ggaW5mb3JtZWQgbWFueSAKKwkgICAgIG9mIHRoZSBmaXhlcyBiZWxvdy4KKworICAgICAgICAgICAgIEFsbG93IGhvc3RzIHRvIGJlIHNwZWNpZmllZCBieSBjbGllbnQgSUQgaW4gZGhjcC1ob3N0cworICAgICAgICAgICAgIG9wdGlvbnMuIFRoZXNlIGFyZSBub3cgb25lIG9mIAorICAgICAgICAgICAgIGRoY3AtaG9zdD08aGFyZHdhcmUgYWRkcj4sLi4uLiAKKyAgICAgICAgICAgICBkaGNwLWhvc3Q9aWQ6PGhleCBjbGllbnQgaWQ+LC4uLi4uIAorICAgICAgICAgICAgIGRoY3AtaG9zdD1pZDo8YXNjaWkgY2xpZW50IGlkPiwuLi4uLgorCSAgICAgCisJICAgICBBbGxvdyBkaGNwLWhvc3Qgb3B0aW9ucyB0byBzcGVjaWZ5IGFueSBJUCBhZGRyZXNzIG9uIHRoZQorICAgICAgICAgICAgIERIQ1Atc2VydmVkIG5ldHdvcmssIG5vdCBqdXN0IHRoZSByYW5nZSBhdmFpbGFibGUgZm9yCisgICAgICAgICAgICAgZHluYW1pYyBhbGxvY2F0aW9uLgorCisJICAgICBBbGxvdyBkaGNwLWhvc3Qgb3B0aW9ucyBmb3IgdGhlIHNhbWUgaG9zdCB3aXRoIGRpZmZlcmVudAorCSAgICAgSVAgYWRyZXNzZXMgd2hlcmUgdGhlIGNvcnJlY3Qgb25lIHdpbGwgYmUgc2VsZWN0ZWQgZm9yCisJICAgICB0aGUgbmV0d29yayB0aGUgaG9zdCBhcHBlYXJzIG9uLgorCisJICAgICBGaXggcGFyc2luZyBvZiAtLWRoY3Atb3B0aW9uIHRvIGFsbG93IG1vcmUgdGhhbiBvbmUKKwkgICAgIElQIGFkZHJlc3MgYW5kIHRvIGFsbG93IHRleHQtdHlwZSBvcHRpb25zLgkgICAgIAorCisJICAgICBJbmhpYml0IHVzZSBvZiAtLWRoY3Atb3B0aW9uIHRvIHNlbmQgaG9zdG5hbWUgREhDUCBvcHRpb25zLgorCSAgICAgCisJICAgICBVcGRhdGUgdGhlIEROUyB3aXRoIERIQ1AgaW5mb3JtYXRpb24gYWZ0ZXIgcmUtcmVhZGluZworCSAgICAgL2V0Yy9ob3N0cyBzbyB0aGF0IGFueSBESENQIGRlcml2ZWQgbmFtZXMgd2hpY2ggaGF2ZSBiZWVuCisJICAgICBzaGFkb3dlZCBieSBub3ctZGVsZXRlZCBob3N0cyBlbnRyaWVzIGJlY29tZSB2aXNpYmxlLgorCisJICAgICBGaXggdHlwb3MgaW4gZG5zbWFzcS5jb25mLmV4YW1wbGUKKworCSAgICAgRml4ZXMgdG8gTWFrZWZpbGUocykgdG8gaGVscCBwa2dzcmMgcGFja2FnaW5nIC0gcGF0Y2ggCisJICAgICBmcm9tICJwYW5jYWtlIi4KKworCSAgICAgQWRkIGRoY3AtYm9vdCBvcHRpb24gdG8gc3VwcG9ydCBuZXR3b3JrIGJvb3QuCisKKwkgICAgIENoZWNrIGZvciBkdXBsaWNhdGUgSVAgYWRkcmVzc2VzIGluIGRoY3AtaG9zdHMgbGluZXMKKwkgICAgIGFuZCByZWZ1c2UgdG8gcnVuIGlmIGZvdW5kLiBJZiBhbGxvd2VkIHRvIHJlbWFpbiB0aGVzZSAKKwkgICAgIGNhbiBwcm92b2tlIGFuIGluZmluaXRlIGxvb3AgaW4gdGhlIERIQ1AgcHJvdG9jb2wuCisKKwkgICAgIEF0dGVtcHRlZCB0byByYXRpb25hbGlzZSB0aGUgLnNwZWMgZmlsZXMgZm9yIHJwbQorCSAgICAgYnVpbGRpbmcuIFRoZXJlIGFyZSBub3cgZmlsZXMgZm9yIFJlZGhhdCwgU3VzZSBhbmQKKwkgICAgIE1hbmRyYWtlLiBJIGhvcGUgdGhleSB3b3JrIE9LLgorCisJICAgICBGaXhlZCBoYXJkLXRvLXJlcHJvZHVjZSBjcmFzaCBpbnZvbHZpbmcgdXNlIG9mIGxvY2FsCisJICAgICBkb21haW5zIGFuZCBJUHY2IHF1ZXJpZXMuIFRoYW5rcyB0byBSb3kgTWFycGxlcyBmb3IKKwkgICAgIGhlbHBpbmcgdG8gdHJhY2sgdGhhdCBvbmUgZG93bi4KKworcmVsZWFzZSAyLjEgIAorICAgICAgICAgICAgIFRoYW5rcyB0byBNYXR0IFN3aWZ0IGFuZCBEYWcgV2llZXJzIGZvciBtYW55IHN1Z2dlc3Rpb25zIAorCSAgICAgd2hpY2ggd2VudCBpbnRvIHRoaXMgcmVsZWFzZS4KKwkgICAgCisJICAgICBUd2VhayBpbmNsdWRlIGZpbGVzIHRvIGFsbG93IGNvbXBpbGF0aW9uIG9uIEZyZWVCU0QgNQorICAgICAgICAgICAgIAorICAgICAgICAgICAgIEZpeCB1bmFsaWduZWQgYWNjZXNzIHdhcm5pbmdzIG9uIEJTRC9BbHBoYS4KKworCSAgICAgQWxsb3cgZW1wdHkgREhDUCBvcHRpb25zLCBsaWtlIHNvOiBkaHBjLW9wdGlvbj00NAorIAorICAgICAgICAgICAgIEFsbG93IHNpbmdsZS1ieXRlIERIQ1Agb3B0aW9ucyBsaWtlIHNvOiBkaGNwLW9wdGlvbj0yMCwxCisKKwkgICAgIEFsbG93IGNvbW1lbnRzIG9uIHRoZSBzYW1lIGxpbmUgYXMgb3B0aW9ucyBpbgorCSAgICAgL2V0Yy9kbnNtYXNxLmNvbmYKKworCSAgICAgRG9uJ3QgY29tcGxhaW4gd2hlbiB0aGUgc2FtZSBuYW1lIGFuZCBhZGRyZXNzIGlzCisJICAgICBhbGxvY2F0ZWQgdG8gYSBob3N0IHVzaW5nIERIQ1AgYW5kIC9ldGMvaG9zdHMuCisJICAgICAKKwkgICAgIEFkZGVkIHRvIHRoZSBleGFtcGxlIGNvbmZpZ3VyYXRpb24gdGhlIGRuc21hc3EgZXF1aXZhbGVudAorCSAgICAgb2YgdGhlIElTQyBkaGNwZCBzZXR0aW5ncyBnaXZlbiBpbiAKKyAgICAgICAgICAgICBodHRwOi8vd3d3LnNhbWJhLm9yZy9zYW1iYS9mdHAvZG9jcy90ZXh0ZG9jcy9ESENQLVNlcnZlci1Db25maWd1cmF0aW9uLnR4dAorCisJICAgICBGaXhlZCBsb25nLWV4aXN0aW5nIHN0cmFuZ2VuZXNzIGluIExpbnV4IElQdjYgaW50ZXJmYWNlCisJICAgICBkaXNjb3ZlcnkgY29kZS4gVGhlIGZsYWdzIGZpZWxkIGluIC9wcm9jL25ldC9pZl9pbmV0NiBpcworCSAgICAgX25vdF8gdGhlIGludGVyZmFjZSBmbGFncy4gCisKKwkgICAgIEZhaWwgZ3JhY2VmdWxseSB3aGVuIGdldHRpbmcgYW4gRU5PREVWIGVycm9yIHdoZW4gdHJ5aW5nCisJICAgICB0byBiaW5kIGFuIElQdjYgc29ja2V0LCByYXRoZXIgdGhhbiBiYWlsaW5nIG91dC4gVGhhbmtzCisJICAgICB0byBKYW4gSXNjaGViZWNrIGZvciBmZWVkYmFjayBvbiB0aGF0LgorCisJICAgICBBbGxvdyB0aGUgbmFtZS0+YWRkcmVzcyBtYXBwaW5nIGZvciBzdGF0aWMgREhDUCBsZWFzZXMgdG8KKwkgICAgIGJlIHNldCBieSAvZXRjL2hvc3RzLiBJdCdzIG5vdyBwb3NzaWJsZSB0byBoYXZlCisgICAgIAkgICAgICAgIGRoY3AtaG9zdD08bWFjIGFkZHI+LHdpYmJsZQorCSAgICAgb3IgZXZlbgorICAgICAgICAgICAgICAgIGRoY3AtaG9zdD13aWJibGUKKwkgICAgIGFuZCBpbiAvZXRjL2hvc3RzIGhhdmUKKwkgICAgICAgIHdpYmJsZSAxLjIuMy40CisJICAgICBhbmQgZm9yIHRoZSBjb3JyZWN0IHRoaW5nIHRvIGhhcHBlbi4gTm90ZSB0aGF0IHNvbWUgc29ydAorCSAgICAgb2YgZGhjcC1ob3N0IGxpbmUgaXMgc3RpbGwgbmVlZGVkLCBpdCdzIG5vdCBwb3NzaWJsZSBmb3IKKwkgICAgIHJhbmRvbSBob3N0IHRvIGNsYWltIGFuIGFkZHJlc3MgaW4gL2V0Yy9ob3N0cyB3aXRob3V0CisJICAgICBzb21lIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb24uCisKKwkgICAgIE1ha2UgMC4wLjAuMCBpbiBhIGRoY3Atb3B0aW9uIHRvIG1lYW4gInRoZSBtYWNoaW5lCisJICAgICBydW5uaW5nIGRuc21hc3EiLgorICAgIAkJICAgIAorICAgICAgICAgICAgIEZpeCBsZWFzZSB0aW1lIHNwZWMgd2hlbiBzcGVjaWZpZWQgaW4gZGhjcC1yYW5nZSBhbmQgbm90CisJICAgICBpbiBkaGNwLWhvc3QsIHByZXZpb3VzbHkgdGhpcyB3YXMgYWx3YXlzIG9uZSBob3VyLgorCisgICAgICAgICAgICAgRml4IHByb2JsZW0gd2l0aCBzZXR0aW5nIGRvbWFpbnMgYXMgImxvY2FsIG9ubHkiLiAtCisgICAgICAgICAgICAgdGhhbmtzIHRvIENocmlzIFNjaGFuay4KKworCSAgICAgQWRkZWQgc3VwcG9ydCBmb3IgbWF4IG1lc3NhZ2Ugc2l6ZSBESENQIG9wdGlvbi4KKworcmVsZWFzZSAyLjIKKyAgICAgICAgICAgICBGaXggdG90YWwgbGFjayBmb3IgREhDUCBmdW5jdGlvbmFsaXR5IG9uCisJICAgICBMaW51eCBzeXN0ZW1zIHdpdGggSVB2NiBlbmFibGVkLiAtIHRoYW5rcyB0bworCSAgICAgSm9uYXRob24gSHVkc29uIGZvciBzcG90dGluZyB0aGF0LgorCisJICAgICBNb3ZlIGRlZmF1bHQgY29uZmlnIGZpbGUgdW5kZXIgRnJlZUJTRCAtIHBhdGNoIGZyb20KKwkgICAgIFN0ZXZlbiBIb25zb24gCisKK3JlbGVhc2UgMi4zCisgICAgICAgICAgICAgRml4ICJpbnN0YWxsIiBtYWtlZmlsZSB0YXJnZXQuIChyZXBvcnRlZCBieSBSb2IgU3RldmVucykKKworCSAgICAgRW5zdXJlIHRoYXQgImxvY2FsPS9kb21haW4vIiBmbGFnIGlzIG9iZXllZCBmb3IgYWxsCisJICAgICBxdWVyaWVzIG9uIGEgZG9tYWluLCBub3QganVzdCBBIGFuZCBBQUFBLiAoUmVwb3J0ZWQgYnkKKwkgICAgIFBldGVyIEZpY2h0bmVyLikKKworCSAgICAgSGFuZGxlIERIQ1BERUNMSU5FIG1lc3NhZ2VzIGFuZCBwcm92aWRlIGFuIGVycm9yIG1lc3NhZ2UKKwkgICAgIGluIERIQ1BOQUsgbWVzc2FnZXMuCisJICAgICAKKwkgICAgIEFkZCAiZG9tYWluIiBzZXR0aW5nIGV4YW1wbGUgdG8KKwkgICAgIGRuc21hc3EuY29uZi5leGFtcGxlLiBUaGFua3MgdG8gSyBQIEtpcmNoZG9yZmVyIGZvcgorCSAgICAgc3BvdHRpbmcgdGhhdCBpdCB3YXMgbWlzc2luZy4KKworCSAgICAgU3VidGxlIGNoYW5nZSB0byB0aGUgREhDUFJFUVVFU1QgaGFuZGxpbmcgY29kZSB0byB3b3JrCisJICAgICBhcm91bmQgYSBidWcgaW4gdGhlIERIQ1AgY2xpZW50IGluIEhQIEpldGRpcmVjdCBwcmludGVycy4KKwkgICAgIFRoYW5rcyB0byBNYXJrbyBTdG9sbGUgZm9yIGZpbmRpbmcgdGhpcyBwcm9ibGVtLgorCisJICAgICBSZXR1cm4gREhDUCBUMSBhbmQgVDIgdGltZXMsIHdpdGggImZ1enoiIHRvIGRlc3ljaHJvbmlzZSBsZWFzZQorCSAgICAgcmVuZXdhbHMsIGFzIHNwZWNpZmllZCBpbiB0aGUgUkZDLgorCSAgICAgCisJICAgICBFbnN1cmUgdGhhdCB0aGUgRU5EIG9wdGlvbiBpcyBhbHdheXMgcHJlc2VudCBpbiBESENQCisJICAgICBwYWNrZXRzICwgZXZlbiBpZiB0aGUgcGFja2V0IGlzIHRvbyBzbWFsbCB0byBmaXQgYWxsIAorCSAgICAgdGhlIHJlcXVlc3RlZCBvcHRpb25zLgorCisJICAgICBIYW5kbGUgbGFyZ2VyLXRoYW4tZGVmYXVsdCBESENQIHBhY2tldHMgaWYgcmVxdWlyZWQsIHVwCisJICAgICB0byB0aGUgZXRoZXJuZXQgTVRVLgorCisJICAgICBGaXggYSBjb3VwbGUgb2YgcGxhY2VzIHdoZXJlIHRoZSByZXR1cm4gY29kZSBmcm9tCisJICAgICBtYWxsb2MoKSB3YXMgbm90IGNoZWNrZWQuCisKKwkgICAgIENvcGUgd2l0aCBhIG1hY2hpbmUgdGFraW5nIGEgREhDUCBsZWFzZSBhbmQgdGhlbiBtb3ZpbmcKKwkgICAgIG5ldHdvcmsgc28gdGhhdCB0aGUgbGVhc2UgYWRkcmVzcyBpcyBubyBsb25nZXIgdmFsaWQuCisKKwkgICAgIFRoZSBESENQIHNlcnZlciB3aWxsIG5vdyB3b3JrIHZpYSBhIEJPT1RQIHJlbGF5IC0gcmVtb3RlCisJICAgICBuZXR3b3JrcyBhcmUgY29uZmlndXJlZCB3aXRoIHRoZSBkaGNwLXJhbmdlIG9wdGlvbiB0aGUKKwkgICAgIHNhbWUgYXMgZGlyZWN0bHkgY29ubmVjdGVkIG9uZXMsIGJ1dCB0aGV5IG5lZWQgYW4KKwkgICAgIGFkZGl0aW9uYWwgbmV0bWFzayBwYXJhbWV0ZXIuIEVnCisJICAgICAtLWRoY3AtcmFuZ2U9MTkyLjE2OC40LjEwLDE5Mi4xNjguNC41MCwyNTUuMjU1LDI1NS4wCisgICAgICAgICAgICAgd2lsbCBlbmFibGUgREhDUCBzZXJ2aWNlIHZpYSBhIEJPT1RQIHJlbGF5IG9uIHRoZQorCSAgICAgMTkyLjE2OC40LjAgbmV0d29yay4gCisKKwkgICAgIEFkZCBhIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIERIQ1AgbGVhc2VzLAorCSAgICAgb3RoZXJ3aXNlIHRoZSBkYWVtb24gY291bGQgYmUgRE9TZWQgYnkgYSBtYWxpY2lvdXMKKwkgICAgIGhvc3QuIFRoZSBkZWZhdWx0IGlzIDE1MCwgYnV0IGl0IGNhbiBiZSBjaGFuZ2VkIGJ5IHRoZSAKKwkgICAgIGRoY3AtbGVhc2UtbWF4IG9wdGlvbi4KKworCSAgICAgRml4ZWQgY29tcGlsYXRpb24gb24gT3BlbkJTRCAodGhhbmtzIHRvIEZyZWRlcmljIEJyb2RiZWNrCisJICAgICBmb3IgaGVscCB3aXRoIHRoYXQuKQorCSAgICAgCisJICAgICBSZXdvcmtlZCB0aGUgREhDUCBuZXR3b3JrIGhhbmRsaW5nIGNvZGUgZm9yIHR3byBnb29kCisJICAgICBlZmZlY3RzOiAoMSkgVGhlIGxpbWl0IG9mIG9uZSBuZXR3b3JrIG9ubHkgZm9yIERIQ1Agb24KKwkgICAgIEZyZWVCU0QgaXMgbm93IGdvbmUsICgyKSBUaGUgREhDUCBzZXJ2ZXIgY29wZXMgd2l0aAorCSAgICAgZHluYW1pY2FsbHkgY3JlYXRlZCBpbnRlcmZhY2VzLiBUaGUgb25lLWludGVyZmFjZQorCSAgICAgbGltaXRhdGlvbiByZW1haW5zIGZvciBPcGVuQlNELCB3aGljaCBpcyBtaXNzaW5nCisJICAgICBleHRlbnNpb25zIHRvIHRoZSBzb2NrZXQgQVBJIHdoaWNoIGhhdmUgYmVlbiBpbiBMaW51eAorCSAgICAgc2luY2UgdmVyc2lvbiAyLjIgYW5kIEZyZWVCU0Qgc2luY2UgdmVyc2lvbiA0LjguCisKKwkgICAgIFJld29ya2VkIHRoZSBETlMgbmV0d29yayBjb2RlIHRvIGFsc28gY29wZSB3aXRoCisJICAgICBkeW5hbWljYWxseSBjcmVhdGVkIGludGVyZmFjZXMuIGRuc21hc3Egd2lsbCBub3cgbGlzdGVuCisJICAgICB0byB0aGUgd2lsZGNhcmQgYWRkcmVzcyBhbmQgcG9ydCA1MyBieSBkZWZhdWx0LCBzbyBpZiBubworCSAgICAgLS1pbnRlcmZhY2Ugb3IgLS1hZGRyZXNzIG9wdGlvbnMgYXJlIGdpdmVuIGl0IHdpbGwgaGFuZGxlCisJICAgICBkeW5hbWljYWxseSBjcmVhdGVkIGludGVyZmFjZXMuIFRoZSBvbGQgYmVoYXZpb3VyIGNhbiBiZQorCSAgICAgcmVzdG9yZWQgd2l0aCAtLWJpbmQtaW50ZXJmYWNlcyBmb3IgcGVvcGxlIHJ1bm5pbmcgQklORAorCSAgICAgb24gb25lIGludGVyZmFjZSBhbmQgZG5zbWFzcSBvbiBhbm90aGVyLiBOb3RlIHRoYXQKKwkgICAgIC0taW50ZXJmYWNlIGFuZCAtLWFkZHJlc3Mgb3B0aW9ucyBzdGlsbCB3b3JrLCBidXQgdGhlCisJICAgICBmaWx0ZXJpbmcgaXMgZG9uZSBieSBkbnNtYXNxLCByYXRoZXIgdGhlbiB0aGUga2VybmVsLgorCSAgICAgVGhpcyB3b3JrcyBvbiBMaW51eCwgYW5kIEZyZWVCU0Q+PTUuMC4gT24gc3lzdGVtcyB3aGljaAorCSAgICAgZG9uJ3Qgc3VwcG9ydCB0aGUgcmVxdWlyZWQgQVBJIGV4dGVuc2lvbnMsIHRoZSBvbGQgCisJICAgICBiZWhhdmlvdXIgaXMgdXNlZCwganVzdCBhcyBpZiAtLWJpbmQtaW50ZXJmYWNlcyBoYWQgYmVlbiBzZXQuCisKKwkgICAgIEFsbG93IElQdjYgc3VwcG9ydCB0byBiZSBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUuIFRvIGRvCisJICAgICB0aGF0LCBhZGQgLUROT19JUFY2IHRvIHRoZSBDRkxBR1MuIFRoYW5rcyB0byBPbGVnCisJICAgICBJLiBWZG92aWtpbiBmb3IgdGhlIHN1Z2dlc3Rpb24gdG8gZG8gdGhhdC4KKworCSAgICAgQWRkIGFiaWxpdHkgdG8gc2V0IERIQ1Agb3B0aW9ucyBwZXIgbmV0d29yay4gVGhpcyBpcyBkb25lCisJICAgICBieSBnaXZpbmcgYSBuZXR3b3JrIGFuIGlkZW50aWZpZXIgbGlrZSB0aGlzOgorCSAgICAgZGhjcC1yYW5nZT1yZWQtbmV0LDE5Mi4xNjguMC4xMCwxOTIuMTY4LjAuNTAKKwkgICAgIGFuZCB0aGVuIGxhYmVsaW5nIG9wdGlvbnMgaW50ZW5kZWQgZm9yIHRoYXQgbmV0d29yayBvbmx5CisJICAgICBsaWtlIHRoaXM6CisJICAgICBkaGNwLW9wdGlvbj1yZWQtbmV0LDYsMS4xLjEuMQorCSAgICAgVGhhbmtzIHRvIE9sZWcgVmRvdmlraW4gZm9yIGFyZ3VpbmcgdGhhdCBvbmUgdGhyb3VnaC4KKworCSAgICAgTWFkZSBlcnJvcnMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBub24tZmF0YWw6IGRuc21hc3EKKwkgICAgIHdpbGwgbm93IGNvbXBsYWluIGJpdHRlcmx5LCBidXQgY29udGludWUuCisKKwkgICAgIEFkZGVkIC0tcmVhZC1ldGhlcnMgb3B0aW9uLCB0byBhbGxvdyBkbnNtYXNxIHRvIHB1bGwKKwkgICAgIHN0YXRpYyBESENQIGluZm9ybWF0aW9uIGZyb20gdGhhdCBmaWxlLiAKKwkgICAgIFRoYW5rcyB0byBBbmRpIENhbWJlaXMgZm9yIHRoYXQgc3VnZ2VzdGlvbi4KKworCSAgICAgQWRkZWQgSEFWRV9CUk9LRU5fUlRDIGNvbXBpbGF0aW9uIG9wdGlvbiB0byBzdXBwb3J0CisJICAgICBlbWJlZGRlZCBzeXN0ZW1zIHdpdGhvdXQgYSBzdGFibGUgUlRDLiBPbGVnIFZkb3Zpa2luCisJICAgICBoZWxwZWQgd29yayBvdXQgaG93IHRvIG1ha2UgdGhhdCB3b3JrLgorCityZWxlYXNlIDIuNAorCSAgICAgRml4ZWQgaW5hYmlsaXR5IHRvIHN0YXJ0IHdoZW4gdGhlIGxlYXNlIGZpbGUgZG9lc24ndAorCSAgICAgYWxyZWFkeSBleGlzdC4gVGhhbmtzIHRvIERhZyBXaWVlcnMgZm9yIHJlcG9ydGluZyB0aGF0LgorCisJICAgICBGaXhlZCBwcm9ibGVtIHdlcmUgZGhjcC1ob3N0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkaWQKKwkgICAgIG5vdCBwbGF5IHdlbGwgd2l0aCBlbnRyaWVzIGluIC9ldGMvZXRoZXJzIGZvciB0aGUgc2FtZQorCSAgICAgaG9zdC4gVGhhbmtzIGFnYWluIHRvIERhZyBXaWVlcnMuCisKKwkgICAgIFR3ZWFrZWQgREhDUCBjb2RlIHRvIGZhdm91ciBtb3ZpbmcgdG8gYSBuZXdseS1jb25maWd1cmVkCisJICAgICBzdGF0aWMgSVAgYWRkcmVzcyByYXRoZXIgdGhhbiBhbiBvbGQgbGVhc2Ugd2hlbiBkb2luZworCSAgICAgREhDUCBhbGxvY2F0aW9uLgorCisJICAgICBBZGRlZCAtLWFsaWFzIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGlzIHByb3ZpZGVzIElQdjQKKwkgICAgIHJld3JpdGUgZmFjaWxpdGllcyBsaWtlIENpc2NvICJETlMgZG9jdG9yaW5nIi4gU3VnZ2VzdGVkCisJICAgICBieSBDaGFkIFNrZWV0ZXJzLgorCisJICAgICBGaXhlZCBidWcgaW4gL2V0Yy9ldGhlcnMgcGFyc2luZyBjb2RlIHRyaWdnZXJlZCBieSB0YWIKKwkgICAgIGNoYXJhY3RlcnMuIFF1ZG9zIHRvIERhZyBXaWVlcnMgZm9yIGhlcGxpbmcgdG8gbmFpbCB0aGF0CisJICAgICBvbmUuCisgCSAgICAgCisJICAgICBBZGRlZCAiYmluZC1pbnRlcmZhY2VzIiBvcHRpb24gY29ycmVjdGx5LgkgICAgIAorCityZWxlYXNlIDIuNQorCSAgICAgTWFkZSAid2hlcmUgYXJlIHdlIGFsbG9jYXRpbmcgYWRkcmVzc2VzPyIgY29kZSBpbiBESENQCisJICAgICBzZXJ2ZXIgY29wZSB3aXRoIHJlcXVlc3RzIHZpYSBhIHJlbGF5IHdoaWNoIGlzIG9uIGEKKwkgICAgIGRpcmVjdGx5IGNvbm5lY3RlZCBuZXR3b3JrIGZvciB3aGljaCB0aGVyZSBpcyBub3QgYQorCSAgICAgY29uZmlndXJlZCBuZXRtYXNrLiBUaGlzIHN0cmFuZ2Ugc3RhdGUgb2YgYWZmYWlycyBvY2N1cnMKKwkgICAgIHdpdGggd2luNGxpbi4gVGhhbmtzIHRvIEFsZXggTWVsdCBhbmQgSmltIEhvcm5lciBmb3IgYnVnCisJICAgICByZXBvcnRzIGFuZCB0ZXN0aW5nIHdpdGggdGhpcy4gCisKKwkgICAgIEZpeGVkIHRyaXZpYWwtYnV0LWlycml0YXRpbmcgbWlzc2luZyAjaW5jbHVkZSB3aGljaCBicm9rZQorCSAgICAgY29tcGlsYXRpb24gb24gKkJTRC4KKworCSAgICAgRm9yY2UgLS1iaW5kLWludGVyZmFjZXMgaWYgSVAtYWxpYXNlZCBpbnRlcmZhY2UKKwkgICAgIHNwZWNpZmljYXRpb25zIGFyZSB1c2VkLCBzaW5jZSB0aGUgc29ja2V0cyBBUEkgcHJvdmlkZXMKKwkgICAgIG5vIG90aGVyIHNhbmUgd2F5IHRvIGRldGVybWluZSB3aGljaCBhbGlhcyBvZiBhbgorCSAgICAgaW50ZXJmYWNlIGEgcGFja2V0IHdhcyBzZW50IHRvLiBUaGFua3MgdG8gSmF2aWVyIEtvaGVuCisJICAgICBmb3IgdGhlIGJ1ZyByZXBvcnQuCisKK3JlbGVhc2UgMi42IAorCSAgICAgU3VwcG9ydCBUb2tlbiBSaW5nIERIQ1AuIFRoYW5rcyB0byBEYWcgV2llZXJzIGZvciBoZWxwCisJICAgICB0ZXN0aW5nLiBOb3RlIHRoYXQgVG9rZW4gcmluZyBzdXBwb3J0IG9ubHkgd29ya3Mgb24gTGludXggCisJICAgICBjdXJyZW50bHkuCisKKwkgICAgIEZpeCBjb21waWxhdGlvbiBvbiBNYWNPUyBYLiBUaGFua3MgdG8gQmVybmhhcmQgRWhsZXJzIGZvcgorCSAgICAgdGhlIHBhdGNoLgorCisJICAgICBBZGRlZCBuZXcgImlnbm9yZSIga2V5d29yZCBmb3IKKwkgICAgIGRoY3AtaG9zdC4gImRoY3AtaG9zdD0xMToyMjozMzo0NDo1NTo2NixpZ25vcmUiIHdpbGwKKwkgICAgIGNhdXNlIHRoZSBESENQIHNlcnZlciB0byBpZ25vcmUgYW55IGhvc3Qgd2l0aCB0aGUgZ2l2ZW4KKwkgICAgIE1BQyBhZGRyZXNzLCBsZWF2aW5nIGl0IHRvIG90aGVyIHNlcnZlcnMgb24gdGhlCisJICAgICBuZXR3b3JrLiBUaGlzIGFsc28gd29ya3Mgd2l0aCBjbGllbnQtaWQgYW5kIGhvc3RuYW1lcy4KKwkgICAgIFN1Z2dlc3Rpb24gYnkgQWxleCBNZWx0LgorCisJICAgICBGaXhlZCBwYXJzaW5nIG9mIGhleCBjbGllbnQgSURzLiBQcm9ibGVtIHNwb3R0ZWQgYnkgUGV0ZXIKKwkgICAgIEZpY2h0bmVyLgorCisJICAgICBBbGxvdyBjb25mLWZpbGUgb3B0aW9ucyBpbiBjb25maWd1cmF0aW9uIGZpbGUsIHRvCisJICAgICBwcm92aWRlIGFuIGluY2x1ZGUgZnVuY3Rpb24uCisJICAgICAKKwkgICAgIFJlLXJlYWQgL2V0Yy9ldGhlcnMgb24gcmVjZWlwdCBvZiBTSUdIVVAuCisKKwkgICAgIEFkZGVkIGJhY2sgdGhlIGFiaWxpdHkgdG8gcmVhZCBJU0MgZGhjcGQgbGVhc2UgZmlsZXMsIGJ5CisJICAgICBwb3B1bGFyIGRlbWFuZC4gTm90ZSB0aGF0IHRoaXMgaXMgZGVwcmVjYXRlZCBhbmQgZm9yCisJICAgICBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBvbmx5LiBZb3UgY2FuIGdldCBiYWNrIHRoZSA0SyBvZgorCSAgICAgbWVtb3J5IHRoYXQgdGhlIGNvZGUgb2NjdXBpZXMgYnkgdW5kZWZpbmluZworCSAgICAgIkhBVkVfSVNDX1JFQURFUiIgaW4gc3JjL2NvbmZpZy5oCisKKwkgICAgIEFkZGVkIGFiaWxpdHkgdG8gZGlzYWJsZSAicG9vbCIgREhDUCBhZGRyZXNzIGFsbG9jYXRpb24KKwkgICAgIHdoaWxzdCBsZWF2aW5nIHN0YXRpYyBsZWFzZXMgd29ya2luZy4gVGhlIHN5bnRheCBpcworCSAgICAgImRoY3AtcmFuZ2U9MTkyLjE2OC4wLjAsc3RhdGljIgorCSAgICAgVGhhbmtzIHRvIEdyemVnb3J6IE5vc2VrIGZvciB0aGUgc3VnZ2VzdGlvbi4KKworCSAgICAgR2VuZXJhbGl6ZWQgZG5zbWFzcS1yaC5zcGVjIGZpbGUgdG8gd29yayBvbiBNYW5kcmFrZSB0b28sCisJICAgICBhbmQgcmVtb3ZlZCBkbnNtYXNxLW1kay5zcGVjLiBUaGFua3MgdG8gRG91ZyBLZWxsZXIuCisKKwkgICAgIEFsbG93IERIQ1Agb3B0aW9ucyB3aGljaCBhcmUgdGllZCB0byBzcGVjaWZpYyBzdGF0aWMKKwkgICAgIGxlYXNlcyBpbiB0aGUgc2FtZSB3YXkgYXMgdG8gc3BlY2lmaWMgbmV0d29ya3MuCisKKwkgICAgIEdlbmVyYWxpc2VkIHRoZSBkaGNwLW9wdGlvbiBwYXJzZXIgYSBiaXQgdG8gYWxsb3cgaGV4CisJICAgICBzdHJpbmdzIGFzIHBhcmFtZXRlcnMuIFRoaXMgaXMgbm93IGxlZ2FsOgorCSAgICAgZGhjcC1vcHRpb249MTI4LGU0OjQ1Ojc0OjY4OjAwOjAwCisJICAgICBJbnNwaXJlZCBieSBhIHBhdGNoIGZyb20gSm9lbCBOb3JkZWxsLgorCisJICAgICBDaGFuZ2VkIHRoZSBzZW1hbnRpY3Mgb2YgYXJndW1lbnQtbGVzcyBkaGNwLW9wdGlvbnMgZm9yCisJICAgICB0aGUgZGVmYXVsdC1zZXR0aW5nIG9uZXMsIGllIDEsIDMsIDYgYW5kIDI4LiBOb3csIGRvaW5nCisJICAgICBlZywgZGhjcC1vcHRpb249MyBzdG9wcyBkbnNtYXNxIGZyb20gc2VuZGluZyBhIGRlZmF1bHQKKwkgICAgIHJvdXRlciBvcHRpb24gYXQgYWxsLiBUaGFua3MgdG8gU2NvdHQgRW1tb25zIGZvciBwb2ludGluZworCSAgICAgb3V0IHRoYXQgdGhpcyBpcyB1c2VmdWwuCisKKwkgICAgIEZpeGVkIGRuc21hc3EuY29uZiBwYXJzaW5nIGJ1ZyB3aGljaCBpbnRlcnByZXRlZCBwb3J0CisJICAgICBudW1iZXJzIGluIHNlcnZlcj0gbGluZXMgYXMgYSBjb21tZW50LiBUbyBzdGFydCBhCisJICAgICBjb21tZW50LCBhICcjJyBjaGFyYWN0ZXIgbXVzdCBub3cgYmUgYSB0aGUgc3RhcnQgb2YgYQorCSAgICAgbGluZSBvciBwcmVjZWRlZCBieSB3aGl0ZXNwYWNlLiBUaGFua3MgdG8gQ2hyaXN0aWFuCisJICAgICBIYWdnc3Ryb20gZm9yIHRoZSBidWcgcmVwb3J0LgorCityZWxlYXNlIDIuNyAgCisgICAgICAgICAgICAgQWxsb3cgdGhlIGRoY3AtaG9zdCBzcGVjaWZpY2F0aW9uIG9mIGlkOiogd2hpY2ggbWFrZXMgCisJICAgICBkbnNtYXNxIGlnbm9yZSBhbnkgY2xpZW50LWlkLiBUaGlzIGlzIHVzZWZ1bCB0byBlbnN1cmUgCisJICAgICB0aGF0IGEgZHVhbC1ib290IG1hY2hpbmUgc2VlcyB0aGUgc2FtZSBsZWFzZSB3aGVuIG9uZSBPUyAKKwkgICAgIGdpdmVzIGEgY2xpZW50LWlkIGFuZCB0aGUgb3RoZXIgZG9lc24ndC4gSXQncyBhbHNvIHVzZWZ1bAorCSAgICAgd2hlbiBQWEUgYm9vdCBESENQIGRvZXMgbm90IHVzZSBjbGllbnQgSURzIGJ1dCB0aGUgT1MgaXQgYm9vdHMgCisgICAgICAgICAgICAgZG9lcy4gVGhhbmtzIHRvIEdyemVnb3J6IE5vc2VrIGZvciBzdWdnZXN0aW5nIHRoaXMgZW5oYW5jZW1lbnQuCisKKwkgICAgIE5vIGxvbmdlciBhc3N1bWUgdGhhdCBjaWFkZHIgaXMgemVybyBpbiByZWNlaXZlZCBESENQRElTQ09WRVIgCisJICAgICBtZXNzYWdlcywganVzdCBmb3Igc2VjdXJpdHkgYWdhaW5zdCBicm9rZW4gY2xpZW50cy4KKworCSAgICAgU2V0IGRlZmF1bHQgb2Ygc2lhZGRyIGZpZWxkIHRvIHRoZSBhZGRyZXNzIG9mIHRoZSBtYWNoaW5lIHJ1bm5pbmcgCisgICAgICAgICAgICAgZG5zbWFzcSB3aGVuIG5vdCBleHBsaWNpdGx5IHNldCB1c2luZyBkaGNwLWJvb3QKKyAgICAgICAgICAgICBvcHRpb24uIFRoaXMgaXMgdGhlIElTQyBkaGNwZCBiZWhhdmlvdXIuICAKKworICAgICAgICAgICAgIFNlbmQgVDEgYW5kIFQyIG9wdGlvbnMgaW4gREhDUE9GRkVSIHBhY2tldHMuIFRoaXMgaXMgcmVxdWlyZWQKKwkgICAgIGJ5IHRoZSBESENQIGNsaWVudCBpbiBzb21lIEpldERpcmVjdCBwcmludGVycy4gVGhhbmtzIAorICAgICAgICAgICAgIHRvIFBhdWwgTWF0dGFsIGZvciB3b3JrIG9uIHRoaXMuCisKKwkgICAgIEZpeGVkIGJ1ZyB3aXRoIERIQ1Agb24gT3BlbkJTRCByZXBvcnRlZCBieSBEb21pbmlxdWUgSmFjcXVlbC4KKwkgICAgIFRoZSBjb2RlIHdoaWNoIGFkZGVkIGxvb3BiYWNrIGludGVyZmFjZXMgdG8gdGhlIGxpc3QKKwkgICAgIHdhcyBjb25mdXNpbmcgdGhlIERIQ1AgY29kZSwgd2hpY2ggZXhwZWN0ZWQgb25lIGludGVyZmFjZSBvbmx5LgorCSAgICAgU29sdmVkIGJ5IGFkZGluZyBsb29wYmFjayBpbnRlcmZhY2VzIHRvIGFkZHJlc3MgbGlzdCBpbnN0ZWFkLgorCisJICAgICBBZGQgZGhjcC12ZW5kb3JjbGFzcyBvcHRpb24gdG8gYWxsb3cgb3B0aW9ucyB0byBiZSBzZW50IG9ubHkKKwkgICAgIHRvIGNlcnRhaW4gY2xhc3NlcyBvZiBjbGllbnRzLgorCisJICAgICBUd2Vha2VkIG9wdGlvbiBzZWFyY2ggY29kZSBzbyB0aGF0IGlmIGEgbmV0aWQtcXVhbGlmaWVkCisJICAgICBvcHRpb24gaXMgdXNlZCwgYW55IHVucXVhbGlmaWVkIG9wdGlvbiBpcyBpZ25vcmVkLgorCSAgICAgCisJICAgICBDaGFuZ2VkIHRoZSBtZXRob2Qgb2YgcGlja2luZyBuZXcgZHluYW1pYyBJUAorCSAgICAgYWRkcmVzc2VzLiBUaGlzIHVzZWQgdG8gdXNlIHRoZSBuZXh0IGNvbnNlY3V0aXZlCisJICAgICBhZGRyZXNzIGFzIGxvbmcgaXQgd2FzIGZyZWUsIG5vdyBpdCB1c2VzIGEgaGFzaAorCSAgICAgZnJvbSB0aGUgY2xpZW50IGhhcmR3YXJlIGFkZHJlc3MuIFRoaXMgcmVkdWNlcyB0aGUgYW1vdW50CisJICAgICBvZiBhZGRyZXNzIG1vdmVtZW50IGZvciBjbGllbnRzIHdoaWNoIGxldCB0aGVpciBsZWFzZQorCSAgICAgZXhwaXJlIGFuZCBhbGxvd3MgY29uc2VjdXRpdmUgREhDUE9GRkVSUyB0byB0aGUgc2FtZSBob3N0CisJICAgICB0byAoYWxtb3N0IGFsd2F5cykgYmUgZm9yIHRoZSBzYW1lIGFkZHJlc3MsIHdpdGhvdXQKKwkgICAgIHN0b3Jpbmcgc3RhdGUgYmVmb3JlIGEgbGVhc2UgaXMgZ3JhbnRlZC4KKyAKKwkgICAgIFR3ZWFrZWQgb3B0aW9uIGhhbmRsaW5nIGNvZGUgdG8gcmV0dXJuIGFsbCBwb3NzaWJsZQorCSAgICAgb3B0aW9ucyByYXRoZXIgdGhhbiBub25lIHdoZW4gREhDUCAicmVxdWVzdGVkIG9wdGlvbnMiCisJICAgICBmaWVsZCBpcyBtaXNzaW5nLiBUaGlzIGZpeGVzIGludGVyb3BlcmFiaWxpdHkgd2l0aAorCSAgICAgYW5jaWVudCBJQk0gTEFOTUFOIERIQ1AgY2xpZW50cy4gVGhhbmtzIHRvIEppbSBMb3V2YXUgZm9yCisJICAgICBoZWxwIHdpdGggdGhpcy4KKworcmVsZWFzZSAyLjgKKwkgICAgIFBhZCBESENQIHBhY2tldHMgdG8gYSBtaW5pbXVtIHNpemUgb2YgMzAwIGJ5dGVzLiBUaGlzCisJICAgICBmaXhlcyBpbnRlcm9wZXJhYmlsaXR5IHByb2JsZW1zIHdpdGggdGhlIExpbnV4IGluLWtlcm5lbAorCSAgICAgREhDUC9CT09UUCBjbGllbnQuIFRoYW5rcyB0byBSaWNoYXJkIE11c2lsIGZvcgorCSAgICAgZGlhZ25vc2luZyB0aGlzIGFuZCBzdXBwbHlpbmcgYSBwYXRjaC4KKworCSAgICAgRml4ZWQgb3B0aW9uLXBhcnNpbmcgYnVnIGFuZCBwb3RlbnRpYWwgbWVtb3J5IGxlYWsuIFBhdGNoCisJICAgICBmcm9tIFJpY2hhcmQgTXVzaWwuCisKKwkgICAgIEltcHJvdmVkIHZlbmRvciBjbGFzcyBjb25maWd1cmF0aW9uIGFuZCBhZGRlZCB1c2VyIGNsYXNzCisJICAgICBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHk6ICgxKSBvcHRpb25zIGFyZSBtYXRjaGVkIG9uCisJICAgICB0aGUgbmV0aWRzIGZyb20gZGhjcC1yYW5nZSwgZGhjcC1ob3N0LCB2ZW5kb3IgY2xhc3MgYW5kCisJICAgICB1c2VyIGNsYXNzKGVzKS4gTXVsdGlwbGUgbmV0LWlkcyBhcmUgYWxsb3dlZCBhbmQgb3B0aW9ucworCSAgICAgYXJlIHNlYXJjaGVkIG9uIHRoZW0gYWxsLiAoMikgbWF0Y2hlcyBhZ2FpbnMgdmVuZG9yIGNsYXNzCisJICAgICBhbmQgdXNlciBjbGFzcyBhcmUgbm93IG9uIGEgc3Vic3RyaW5nLCBpZiB0aGUgZ2l2ZW4KKwkgICAgIHN0cmluZyBpcyBhIHN1YnN0cmluZyBvZiB0aGUgdmVuZG9yL3VzZXIgY2xhc3MsIHRoZW4gYQorCSAgICAgbWF0Y2ggb2NjdXJzLiBUaGFua3MgYWdhaW4gdG8gUmljaGFyZCBNdXNpbCBmb3IgcHJvbXB0aW5nCisJICAgICB0aGlzLgorCisJICAgICBNYWtlICIjIiBtYXRjaCBhbnkgZG9tYWluIG9uIC0tYWRkcmVzcyBhbmQgLS1zZXJ2ZXIKKwkgICAgIGZsYWdzLiAtLWFkZHJlc3M9LyMvMS4yLjMuNCB3aWxsIHJldHVybiAxLjIuMy40IGZvciBfYW55XworCSAgICAgZG9tYWluIG5vdCBvdGhlcndpc2UgbWF0Y2hlZC4gT2YgY291cnNlCisJICAgICAtLXNlcnZlcj0vIy8xLjIuMy40IGlzIGV4YWN0bHkgZXF1aXZhbGVudCB0bworCSAgICAgLS1zZXJ2ZXI9MS4yLjMuNC4gU3BlY2lhbCByZXF1ZXN0IGZyb20gSm9zaCBIb3dsZXR0LgorCQorCSAgICAgRml4ZWQgYSBuYXN0eSBidWcgd2hpY2ggd291bGQgY2F1c2UgZG5zbWFzcSB0byBsb3NlIHRyYWNrCisJICAgICBvZiBsZWFzZXMgZm9yIGhvc3RzIHdoaWNoIGhhZCBhIC0tZGhjcC1ob3N0IGZsYWcgd2l0aG91dAorCSAgICAgYSBuYW1lIHNwZWNpZmljYXRpb24uIFRoZSBtZWNoYW5pc20gZm9yIHRoaXMgd2FzIHRoYXQKKwkgICAgIHRoZSBob3N0bmFtZSBjb3VsZCBnZXQgZXJyb25lb3VzbHkgc2V0IGFzIGEgemVyby1sZW5ndGgKKwkgICAgIHN0cmluZyBhbmQgdGhlbiB3cml0dGVuIHRvIHRoZSBsZWFzZXMgZmlsZSBhcyBhCisJICAgICBtYWwtZm9ybWVkIGxpbmUuIFJlc3RhcnRpbmcgZG5zbWFzcSB3b3VsZCB0aGVuIGxvc2UgdGhlIGxlYXNlLgorCSAgICAgQWxleCBIZXJtYW5uJ3Mgd29yayBoZWxwZWQgY2hhc2UgZG93biB0aGlzIHByb2JsZW0uCisKKwkgICAgIEFkZCBjaGVja3MgYWdhaW5zdCBESENQIGNsaWVudHMgd2hpY2ggcmV0dXJuIHplcm8tbGVuZ3RoCisJICAgICBob3N0bmFtZXMuIFRoaXMgYXZvaWRzIHRoZSBwb3RlbnRpYWwgbGVhc2UtbG9zcyBwcm9ibGVtcworCSAgICAgcmVmZmVyZWQgdG8gYWJvdmUuIEFsc28sIGlmIGEgY2xpZW50IHNlbmRzIGEgaG9zdG5hbWUgd2hlbgorCSAgICAgaXQgY3JlYXRlcyBhIGxlYXNlIGJ1dCBzdWJzZXF1ZW50bHkgc2VuZHMgbm8gb3IgYQorCSAgICAgemVyby1sZW5ndGggaG9zdG5hbWUgd2hpbHN0IHJlbmV3aW5nLCBjb250aW51ZSB0byB1c2UgdGhlCisJICAgICBleGlzdGluZyBob3N0bmFtZSwgZG9uJ3Qgd2lwZSBpdCBvdXQuIAorCSAgICAgCisJICAgICBUd2Vha2VkIG9wdGlvbiBwYXJzaW5nIHRvIGZsYWcgc29tZSBwYXJhbWV0ZXIgZXJyb3JzLgorCityZWxlYXNlIDIuOQorCSAgICAgRml4ZWQgaW50ZXJmYWNlIGZpbHRlciBjb2RlIGZvciB0d28gZWZmZWN0czogMSkgRml4ZWQgYnVnCisJICAgICB3aGVyZSBxdWVyaWVzIHNlbnQgdmlhIGxvb3BiYWNrIGludGVyZmFjZQorCSAgICAgYnV0IHRvIHRoZSBhZGRyZXNzIG9mIGFub3RoZXIgaW50ZXJmYWNlIHdlcmUgaWdub3JlZAorCSAgICAgdW5sZXNzIHRoZSBsb29wYmFjayBpbnRlcmZhY2Ugd2FzIGV4cGxpY2l0bHkgY29uZmlndXJlZC4KKwkgICAgIDIpIG9uIE9wZW5CU0QgZmFpbHVyZSB0byBjb25maWd1cmUgb25lIGludGVyZmFjZSBub3cKKwkgICAgIGNhdXNlcyBhIGZhdGFsIGVycm9yIG9uIHN0YXJ0dXAgcmF0aGVyIHRoYW4gYW4gaHVnZQorCSAgICAgc3RyZWFtIG9mIGxvZyBtZXNzYWdlcy4gVGhhbmtzIHRvIEVyaWsgSmFuIFRyb21wIGZvciAKKwkgICAgIGZpbmRpbmcgdGhhdCBidWcuCisKKwkgICAgIENoYW5nZWQgc2VydmVyIHNlbGVjdGlvbiBzdHJhdGVneSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlCisJICAgICB3aGVuIHRoZXJlIGFyZSBtYW55IGF2YWlsYWJsZSBzZXJ2ZXJzIGFuZCBzb21lIGFyZQorCSAgICAgYnJva2VuLiBUaGUgbmV3IGFsZ29yaXRobSBpcyB0byBwaWNrIGFzIGJlZm9yZSBmb3IgdGhlCisJICAgICBmaXJzdCB0cnksIGJ1dCBpZiBhIHF1ZXJ5IGlzIHJldHJpZWQsIHRvIHNlbmQgdG8gYWxsCisJICAgICBhdmFpbGFibGUgc2VydmVycyBpbiBwYXJhbGxlbC4gVGhlIGZpcnN0IG9uZSB0byByZXBseQorCSAgICAgdGhlbiBiZWNvbWVzIHByZWZlcmVkIGZvciB0aGUgbmV4dCBxdWVyeS4gVGhpcyBzaG91bGQgCisJICAgICBpbXByb3ZlIHJlbGlhYmlsaXR5IHdpdGhvdXQgZ2VuZXJhdGluZyBzaWduaWZpY2FudCBleHRyYQorCSAgICAgdXBzdHJlYW0gbG9hZC4KKworCSAgICAgRml4ZWQgYnJlYWthZ2Ugb2Ygc3BlY2lhbCBzZXJ2ZXJzL2FkZHJlc3NlcyBmb3IKKwkgICAgIHVucXVhbGlmaWVkIGRvbWFpbnMgaW50cm9kdWNlZCBpbiB2ZXJzaW9uIDIuOCAKKwkgICAgICAKKwkgICAgIEFsbG93IGZhbGxiYWNrIHRvICJiaW5kLWludGVyZmFjZXMiIGF0IHJ1bnRpbWU6IFNvbWUKKwkgICAgIHZlcmlvbnMgb2YgKkJTRCBzZWVtIHRvIGhhdmUgZW5vdWdoIHN0dWZmIGluIHRoZSBoZWFkZXIKKwkgICAgIGZpbGVzIHRvIGJ1aWxkIGJ1dCBubyBrZXJuZWwgc3VwcG9ydC4gQWxzbyBub3cgbG9nIGlmCisJICAgICAiYmluZC1pbnRlcmZhY2VzIiBpcyBmb3JjZWQgb24uCisKKwkgICAgIExvZyByZXBsaWVzIGZyb20gdXBzdHJlYW0gc2VydmVycyB3aGljaCByZWZ1c2UgdG8gZG8KKwkgICAgIHJlY3Vyc2lvbiAtIGRuc21hc3EgaXMgbm90IGEgcmVjdXJzaXZlIG5hbWVzZXJ2ZXIgYW5kCisJICAgICByZWxpZXMgb24gdXBzdHJlYW0gc2VydmVycyB0byBkbyB0aGUgcmVjdXJzaW9uLCB0aGlzCisJICAgICBmbGFncyBhIGNvbmZpZ3VyYXRpb24gZXJyb3IuCisKKwkgICAgIERpc2FibGUgY2xpZW50LWlkIG1hdGNoaW5nIGZvciBob3N0cyB3aG9zZSBNQUMgYWRkcmVzcyBpcworCSAgICAgcmVhZCBmcm9tIC9ldGMvZXRoZXJzLiBQYXRjaCBmcm9tIE9sZWcgSS4gVmRvdmlraW4uCisKKwkgICAgIEV4dGVuZGVkIC0tbXgtaG9zdCBmbGFnIHRvIGFsbG93IGFyYml0cmFyeSB0YXJnZXRzIGZvciBNWAorCSAgICAgcmVjb3Jkcywgc3VnZ2VzdGVkIGJ5IE1vcml0eiBCdW5rdXMuCisKKwkgICAgIEZpeGVkIGJ1aWxkIHVuZGVyIE5ldEJTRCAyLjAgLSB0aGFua3MgdG8gRmVsaXggRGVpY2htYW5uCisJICAgICBmb3IgdGhlIHBhdGNoLgorCSAgICAgCisJICAgICBEZWFsIGNvcnJlY3RseSB3aXRoIHJlcGVhdGVkIGFkZHJlc3NlcyBpbiAvZXRjL2hvc3RzLiBUaGUKKwkgICAgIGZpcnN0IG5hbWUgZm91bmQgaXMgbm93IHJldHVybmVkIGZvciByZXZlcnNlIGxvb2t1cHMsCisJICAgICByYXRoZXIgdGhhbiBhbGwgb2YgdGhlbS4KKworCSAgICAgQWRkIGJhY2sgZmF0YWwgZXJyb3JzIHdoZW4gbm9uZXhpc3RhbnQgCisJICAgICBpbnRlcmZhY2VzIG9yIGludGVyZmFjZSBhZGRyZXNzZXMgYXJlIGdpdmVuIGJ1dCBvbmx5IGluCisJICAgICAiYmluZC1pbnRlcmZhY2VzIiBtb2RlLiBQcmluY2lwbGUgb2YgbGVhc3Qgc3VycHJpc2UgYXBwbGllcy4KKwkgICAgIAorCSAgICAgQWxsb3cgIyBhcyB0aGUgYXJndW1lbnQgdG8gLS1kb21haW4sIG1lYW5pbmcgInJlYWQgdGhlCisJICAgICBkb21haW4gZnJvbSB0aGUgZmlyc3Qgc2VhcmNoIGRpcmVjdGl2ZSBpbgorCSAgICAgL2V0Yy5yZXNvbHYuY29uZiIuIEZlYXR1cmUgc3VnZ2VzdGVkIGJ5IEV2YW4gSm9uZXMuCisKK3JlbGVhc2UgMi4xMAorCSAgICBBbGxvdyAtLXF1ZXJ5LXBvcnQgdG8gYmUgc2V0IHRvIGEgbG93IHBvcnQgYnkgY3JlYXRpbmcgYW5kCisJICAgIGJpbmRpbmcgdGhlIHNvY2tldCBiZWZvcmUgZHJvcHBpbmcgcm9vdC4gKFN1Z2dlc3Rpb24gZnJvbQorCSAgICBKYW1pZSBMb2tpZXIpIAorCisJICAgIFN1cHBvcnQgVENQIHF1ZXJpZXMuIEl0IHR1cm5lZCBvdXQgdG8gYmUgcG9zc2libGUgdG8gZG8KKwkgICAgdGhpcyB3aXRoIGEgY291cGxlIG9mIGh1bmRyZWQgbGluZXMgb2YgY29kZSwgb25jZSBJIGtuZXcKKwkgICAgaG93LiBUaGUgZXhlY3V0YWJsZSBzaXplIHdlbnQgdXAgYnkgYSBmZXcgSyBvbiBpMzg2LgorCSAgICBUaGVyZSBhcmUgYSBmZXcgbGltaXRhdGlvbnM6IGRhdGEgb2J0YWluZWQgdmlhIFRDUCBpcyBub3QKKwkgICAgY2FjaGVkLCBhbmQgZHluYW1pY2FsbHktY3JlYXRlZCBpbnRlcmZhY2VzIG1heSBicmVhayB1bmRlcgorCSAgICBjZXJ0YWluIGNpcmN1bXN0YW5jZXMuIFNvdXJjZS1hZGRyZXNzIG9yIHF1ZXJ5LXBvcnQKKwkgICAgc3BlY2lmaWNhdGlvbnMgYXJlIGlnbm9yZWQgZm9yIFRDUC4KKworCSAgICBOQUsgYXR0ZW1wdHMgdG8gcmVuZXcgYSBESENQIGxlYXNlIHdoZXJlIHRoZSBESENQIHJhbmdlCisJICAgIGhhcyBjaGFuZ2VkIGFuZCB0aGUgbGVhc2UgaXMgbm8gbG9uZ2VyIGluIHRoZSBhbGxvd2VkCisJICAgIHJhbmdlLiBKYW1pZSBMb2tpZXIgcG9pbnRlZCBvdXQgdGhpcyBidWcuCisKKwkgICAgTkFLIGF0dGVtcHRzIHRvIHJlbmV3IGEgcG9vbCBESENQIGxlYXNlIHdoZW4gYSBzdGF0aWNhbGx5CisJICAgIGFsbG9jYXRlZCBhZGRyZXNzIGhhcyBiZWNvbWUgYXZhaWxhYmxlLCBmb3JjaW5nIGEgaG9zdCB0bworCSAgICBtb3ZlIHRvIGl0cyBhbGxvY2F0ZWQgYWRkcmVzcy4gTG90cyBvZiBwZW9wbGUgaGF2ZQorCSAgICBzdWdnZXN0ZWQgdGhpcyBjaGFuZ2UgYW5kIGJlZW4gcmVidWZmZWQgKHRoZXkga25vdyB3aG8KKwkgICAgdGhleSBhcmUpIHRoZSBzdHJhd3MgdGhhdCBicm9rZSB0aGUgY2FtZWwncyBiYWNrIHdlcmUgVGltCisJICAgIEN1dHRzIGFuZCBKYW1pZSBMb2tpZXIuCisKKwkgICAgUmVtb3ZlIGFueSBuYW1lc2VydmVyIHJlY29yZHMgZnJvbSBhbnN3ZXJzIHdoaWNoIGFyZQorCSAgICBtb2RpZmllZCBieSAtLWFsaWFzIGZsYWdzLiBJZiB0aGUgYW5zd2VyIGlzIG1vZGlmaWVkLCBpdAorCSAgICBjYW5ub3QgYW55IGxvbmdlciBiZSBhdXRob3JpdGF0aXZlLgorCisJICAgIENoYW5nZSBiZWhhdmlvdXIgb2YgImJvZ3VzLXByaXYiIG9wdGlvbiB0byByZXR1cm4gTlhET01BSU4KKwkgICAgcmF0aGVyIHRoYW4gYSBQVFIgcmVjb3JkIHdpdGggdGhlIGRvdHRlZC1xdWFkIGFkZHJlc3MgYXMKKwkgICAgbmFtZS4gVGhlIG5ldyBiZWhhdmlvdXIgZG9lc24ndCBwcm92b2tlIHRjcHdyYXBwZXJzIGxpa2UKKwkgICAgdGhlIG9sZCBiZWhhdmlvciBkaWQuCisKKwkgICAgQWRkZWQgYSBwYXRjaCBmb3IgdGhlIFN1c2UgcnBtLiBUaGF0IGNoYW5nZXMgdGhlIGRlZmF1bHQKKwkgICAgZ3JvdXAgdG8gb25lIHN1aXRhYmxlIGZvciBTdXNlIGFuZCBkaXNhYmxlcyBpbmNsdXNpb24gb2YKKwkgICAgdGhlIElTQyBsZWFzZS1maWxlIHJlYWRlciBjb2RlLiBUaGFua3MgdG8gQW5keSBDYW1iZWlzIGZvcgorCSAgICBoaXMgb25nb2luZyB3b3JrIG9uIFN1c2UgcGFja2FnaW5nLgorCisJICAgIFN1cHBvcnQgZm9yd2FyZGluZyBvZiBFRE5TLjAgVGhlIG1heGltdW0gVURQIHBhY2tldCBzaXplIAorCSAgICBkZWZhdWx0cyB0byAxMjgwLCBidXQgbWF5IGJlIGNoYW5nZWQgd2l0aCB0aGUKKwkgICAgLS1lZG5zLXBhY2tldC1tYXggb3B0aW9uLiBEZXRlY3QgcXVlcmllcyB3aXRoIHRoZSBkbyBiaXQKKwkgICAgc2V0IGFuZCBhbHdheXMgZm9yd2FyZCB0aGVtLCBzaW5jZSBETlNTRUMgcmVjb3JkcyBhcmUgCisJICAgIG5vdCBjYWNoZWQuIFRoaXMgYmVoYXZpb3VyIGlzIHJlcXVpcmVkIHRvIG1ha2UKKwkgICAgRE5TU0VDYmlzIHdvcmsgcHJvcGVybHkgdGhvdWdoIGRuc21hc3EuIFRoYW5rcyB0byBTaW1vbgorCSAgICBKb3NlZnNzb24gZm9yIGhlbHAgd2l0aCB0aGlzLgorCisJICAgIE1vdmUgZGVmYXVsdCBjb25maWcgZmlsZSBsb2NhdGlvbiB1bmRlciBPcGVuQlNEIGZyb20KKwkgICAgL3Vzci9sb2NhbC9ldGMvZG5zbWFzcS5jb25mIHRvIC9ldGMvZG5zbWFzcS5jb25mLiBCdWcKKwkgICAgcmVwb3J0IGZyb20gSm9uYXRoYW4gV2Vpc3MuCisKKwkgICAgVXNlIGEgbGVhc2Ugd2l0aCBtYXRjaGluZyBNQUMgYWRkcmVzcyBmb3IgYSBob3N0IHdoaWNoCisJICAgIGRvZXNuJ3QgcHJlc2VudCBhIGNsaWVudC1pZCwgZXZlbiBpZiB0aGVyZSB3YXMgYSBjbGllbnQgSUQgCisJICAgIGF0IHNvbWUgcG9pbnQgaW4gdGhlIHBhc3QuIFRoaXMgcmVkdWNlcyBzdXJwcmlzZXMgd2hlbgorCSAgICBjaGFuZ2luZyBESENQIGNsaWVudHMsIGFkZGluZyBpZDoqIHRvIGEgaG9zdCwgYW5kIGZyb20gdGhlCisJICAgIHNlbWFudGljcyBjaGFuZ2Ugb2YgL2V0Yy9ldGhlcnMgaW4gMi45LiBUaGFua3MgdG8gQmVybmFyZAorCSAgICBTYW1tZXIgZm9yIGZpbmRpbmcgdGhhdC4KKworCSAgICBBZGRlZCBhICJjb250cmliIiBkaXJlY3RvcnkgYW5kIGluIGl0IHRoZSBkbnNsaXN0IHV0aWxpdHksCisJICAgIGZyb20gVGhvbWFzIFR1dHRsZS4KKworCSAgICBGaXhlZCAiZmFpbCB0byBzdGFydCB1cCIgcHJvYmxlbXMgdW5kZXIgTGludXggd2l0aCBJUHY2CisJICAgIGVuYWJsZWQuIEl0J3Mgbm90IGNsZWFyIHRoYXQgdGhlc2Ugd2VyZSBhbiBpc3N1ZSBpbgorCSAgICByZWxlYXNlZCB2ZXJzaW9ucywgYnV0IHRoZXkgbWFuaWZlc3RlZCB0aGVtc2VsdmVzIHdoZW4gVENQCisJICAgIHN1cHBvcnQgd2FzIGFkZGVkLiBUaGFua3MgdG8gTWljaGFlbCBIYW1pbHRvbiBmb3IKKwkgICAgYXNzaXN0YW5jZSB3aXRoIHRoaXMuCisKK3ZlcnNpb24gMi4xMQorCSAgICBGaXhlZCBESENQIHByb2JsZW0gd2hpY2ggY291bGQgcmVzdWx0IGluIHR3byBsZWFzZXMgaW4gdGhlCisgICAgICAgICAgICBkYXRhYmFzZSB3aXRoIHRoZSBzYW1lIGFkZHJlc3MuIFRoaXMgbG9va2VkIG11Y2ggbW9yZQorICAgICAgICAgICAgYWxhcm1pbmcgdGhlbiBpdCB3YXMsIHNpbmNlIGl0IGNvdWxkIG9ubHkgaGFwcGVuIHdoZW4gYQorICAgICAgICAgICAgbWFjaGluZSBjaGFuZ2VzIE1BQyBhZGRyZXNzIGJ1dCBrZXB0IHRoZSBzYW1lIG5hbWUuIFRoZQorICAgICAgICAgICAgb2xkIGxlYXNlIHdvdWxkIHBlcnNpc3QgdW50aWwgaXQgdGltZWQgb3V0IGJ1dCB0aGluZ3MKKyAgICAgICAgICAgIHdvdWxkIHN0aWxsIHdvcmsgT0suIAorCisJICAgIENoZWNrIHRoYXQgSVAgYWRkcmVzc2VzIGluIGFsbCBkaGNwLWhvc3QgZGlyZWN0aXZlcyBhcmUKKwkgICAgdW5pcXVlIGFuZCBkaWUgaG9ycmlibHkgaWYgdGhleSBhcmUgbm90LCBzaW5jZSBvdGhlcndpc2UKKwkgICAgZW5kbGVzcyBwcm90b2NvbCBsb29wcyBjYW4gb2NjdXIuIAorCSAgICAKKwkgICAgVXNlIElQVjZfUkVDVlBLVElORk8gYXMgc29ja2V0IG9wdGlvbiByYXRoZXIgdGhhbgorCSAgICBJUFY2X1BLVElORk8gd2hlcmUgYXZhaWxhYmxlLiBUaGlzIGtlZXBzIGxhdGUtbW9kZWwgRnJlZUJTRAorCSAgICBoYXBweS4KKworCSAgICBTZXQgc291cmNlIGludGVyZmFjZSB3aGVuIHJlcGx5aW5nIHRvIElQdjYgVURQCisJICAgIHF1ZXJpZXMuIFRoaXMgaXMgbmVlZGVkIHRvIGNvcGUgd2l0aCBsaW5rLWxvY2FsIGFkZHJlc3Nlcy4KKwordmVyc2lvbiAyLjEyCisgICAgICAgICAgICBBZGRlZCBleHRyYSBjaGVja3MgdG8gZW5zdXJlIHRoYXQgREhDUCBjcmVhdGVkIEROUyBlbnRyaWVzIAorCSAgICBjYW5ub3QgZ2VuZXJhdGUgbXVsdGlwbGUgRE5TIGFkZHJlc3MtPm5hbWUgZW50cmllcy4gVGhhbmtzIHRvIAorCSAgICBTdGVmYW4gTW9ubmllciBmb3IgZmluZGluZyB0aGUgZXhhY3Qgc2V0IG9mIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIG9wdGlvbnMgd2hpY2ggY291bGQgY3JlYXRlIHRoaXMuCisKKwkgICAgRG9uJ3Qgc2V0IHRoZSB0aGUgZmlsdGVyd2luMmsgb3B0aW9uIGluIHRoZSBleGFtcGxlIGNvbmZpZworCSAgICBmaWxlIGFuZCBhZGQgd2FybmluZ3MgdGhhdCBpcyBicmVha3MgS2VyYmVyb3MuIFRoYW5rcyB0bworCSAgICBTaW1vbiBKb3NlZnNzb24gYW5kIFRpbW90aHkgRm9sa3MgZm9yIHBvaW50aW5nIHRoYXQgb3V0LgorCSAgICAKKwkgICAgTG9nIHR5cGVzIG9mIGluY29taW5nIHF1ZXJpZXMgYXMgd2VsbCBhcyBzb3VyY2UgYW5kIGRvbWFpbi4KKworCSAgICBMb2cgTk9EQVRBIHJlcGxpZXMgZ2VuZXJhdGVkIGFzIGEgcmVzdWx0IG9mIHRoZQorCSAgICBmaWx0ZXJ3aW4yayBvcHRpb24uCisKK3ZlcnNpb24gMi4xMworCSAgICBGaXhlZCBjcmFzaCB3aXRoIHVuLW5hbWVkIERIQ1AgaG9zdHMgaW50cm9kdWNlZCBpbiAyLjEyLgorCSAgICBUaGFua3MgdG8gTmljb2xvIFdvamV3b2RhIGFuZCBHcmVnb3J5IEdhdGh5IGZvciBidWcgcmVwb3J0cy4KKwordmVyc2lvbiAyLjE0CisJICAgIEZpeCBESENQIG5ldHdvcmsgZGV0ZWN0aW9uIGZvciBob3N0cyB3aGljaCB0YWxrIHZpYSBhCisJICAgIHJlbGF5LiBUaGlzIG1ha2VzIGxlYXNlIHJlbmV3YWwgZm9yIHN1Y2ggaG9zdHMgd29yaworCSAgICBjb3JyZWN0bHkuCisKKwkgICAgU3VwcG9ydCBSRkMzMDExIHN1Ym5ldCBzZWxlY3RvcnMgaW4gdGhlIERIQ1Agc2VydmVyLgorCisJICAgIEZpeCBESENQIGNvZGUgdG8gZ2VuZXJhdGUgUkZDLWNvbXBsaWFudCByZXNwb25zZXMKKyAgICAgICAgICAgIHRvIGhvc3RzIGluIHRoZSBJTklULVJFQk9PVCBzdGF0ZS4KKworCSAgICBJbiB0aGUgREhDUCBzZXJ2ZXIsIHNldCB0aGUgcmVjZWl2ZSBidWZmZXIgc2l6ZSBvbiAKKwkgICAgdGhlIHRyYW5zbWl0LW9ubHkgcGFja2V0IHNvY2tldCB0byB6ZXJvLCB0byBhdm9pZCAKKwkgICAgd2FzdGUgb2Yga2VybmVsIGJ1ZmZlcnMuCisKKwkgICAgRml4IERIQ1AgYWRkcmVzcyBhbGxvY2F0aW9uIGNvZGUgdG8gdXNlIHRoZSB3aG9sZSBvZgorCSAgICB0aGUgREhDUCByYW5nZSwgaW5jbHVkaW5nIHRoZSBzdGFydCBhbmQgZW5kIGFkZHJlc3Nlcy4KKwkgICAgCisJICAgIEF0dGVtcHQgYW4gSUNNUCAicGluZyIgb24gbmV3IGFkZHJlc3NlcyBiZWZvcmUgYWxsb2NhdGluZyAKKwkgICAgdGhlbSB0byBsZWFzZXMsIHRvIGF2b2lkIGFsbG9jYXRpbmcgYWRkcmVzc2VzIHdoaWNoIGFyZSBpbiB1c2UuCisKKwkgICAgSGFuZGxlIHJmYzk1MSBCT09UUCBhcyB3ZWxsIGFzIERIQ1AgZm9yIGhvc3RzIHdoaWNoIGhhdmUKKwkgICAgTUFDIGFkZHJlc3MgdG8gSVAgYWRkcmVzcyBtYXBwaW5nIGRlZmluZWQuCisKKwkgICAgRml4IGNvbXBpbGF0aW9uIHVuZGVyIE1hY09TIFguIFRoYW5rcyB0byBDaHJpcyBUb21saW5zb24uCisKKwkgICAgRml4IGNvbXBpbGF0aW9uIHVuZGVyIE5ldEJTRC4gVGhhbmtzIHRvIEZlbGl4IERlaWNobWFubi4KKworCSAgICBBZGRlZCAia2VlcC1pbi1mb3JlZ3JvdW5kIiBvcHRpb24uIFRoYW5rcyB0byBTZWFuCisJICAgIE1hY0xlbm5hbiBmb3IgdGhlIHBhdGNoLgorCit2ZXJzaW9uIDIuMTUKKyAgICAgICAgICAgIEZpeGVkIE5YRE9NQUlOL05PREFUQSBjb25mdXNpb24gZm9yIGxvY2FsbHkga25vd24KKyAgICAgICAgICAgIG5hbWVzLiBXZSBub3cgcmV0dXJuIGEgTk9EQVRBIHJlcG9uc2UgZm9yIG5hbWVzIHdoaWNoIGFyZQorICAgICAgICAgICAgbG9jYWxseSBrbm93bi4gTm93IGEgcXVlcnkgZm9yIChlZyBBQUFBIG9yIE1YKSBmb3IgYSBuYW1lCisJICAgIHdpdGggYW4gSVB2NCBhZGRyZXNzIGluIC9ldGMvaG9zdHMgd2hpY2ggZmFpbHMgdXBzdHJlYW0KKyAgICAgICAgICAgIHdpbGwgZ2VuZXJhdGUgYSBOT0RBVEEgcmVzcG9uc2UuIE5vdGUgdGhhdCB0aGUgcXVlcnkgCisJICAgIGlzIHN0aWxsIHRyaWVkIHVwc3RyZWFtLCBidXQgYSBOWERPTUFJTiByZXBseSBnZXRzCisgICAgICAgICAgICBjb252ZXJ0ZWQgdG8gTk9EQVRBLiBUaGFua3MgdG8gRXJpYyBkZSBUaG91YXJzLCBFcmljCisgICAgICAgICAgICBTcGFrbWFuIGFuZCBNaWtlIE1lc3RuaWsgZm9yIGJ1ZyByZXBvcnRzL3Rlc3RpbmcuCisKKwkgICAgQWxsb3cgbXVsdGlwbGUgZGhjcC1yYW5nZXMgd2l0aGluIHRoZSBzYW1lIG5ldHdvcmsuIFRoZQorCSAgICBvcmlnaW5hbCBpbnRlbnRpb24gd2FzIHRoYXQgdGhlcmUgd291bGQgYmUgYSBkaGNwLXJhbmdlCisJICAgIG9wdGlvbiBmb3IgZWFjaCBuZXR3b3JrIHNlcnZlZCwgYnV0IHRoZXJlJ3Mgbm8gcmVhbCByZWFzb24KKwkgICAgbm90IHRvIGFsbG93IGRpc2NvbnRpbnVvdXMgcmFuZ2VzIHdpdGhpbiBhIG5ldHdvcmsgc28gdGhpcworCSAgICByZWxlYXNlIGFkZHMgc3VwcG9ydCBmb3IgdGhhdC4KKworCSAgICBDaGVjayBmb3IgZGhjcC1yYW5nZXMgd2hpY2ggYXJlIGluY29uc2lzdGVudCB3aXRoIHRoZWlyIAorCSAgICBuZXRtYXNrLCBhbmQgZ2VuZXJhdGUgZXJyb3JzIG9yIHdhcm5pbmdzLgorCSAgICAKKwkgICAgSW1wcm92ZSBlcnJvciBtZXNzYWdlcyB3aGVuIHRoZXJlIGFyZSBwcm9ibGVtcyB3aXRoCisJICAgIGNvbmZpZ3VyYXRpb24uCisKK3ZlcnNpb24gMi4xNgorCSAgICBGaXhlZCB0eXBvIGluIE9wZW5CU0Qtb25seSBjb2RlIHdoaWNoIHN0b3BwZWQgY29tcGlsYXRpb24KKyAgICAgICAgICAgIHVuZGVyIHRoYXQgT1MuIENocmlzIFdlaW5oYXVwbCBnZXRzIGNyZWRpdCBmb3IgcmVwb3J0aW5nIAorICAgICAgICAgICAgdGhpcy4KKworCSAgICBBZGRlZCBkaGNwLWF1dGhvcml0YXRpdmUgb3B0aW9uIHdoaWNoIHJlc3RvcmVzIG5vbi1SRkMgCisJICAgIGNvbXBsaWFudCBidXQgZGVzaXJhYmxlIGJlaGF2aW91ciBvZiBwcmUtMi4xNCB2ZXJzaW9ucyBhbmQKKyAgICAgICAgICAgIGF2b2lkcyBsb25nIHRpbWVvdXRzIHdoaWxlIERIQ1AgY2xpZW50cyB0cnkgdG8gcmVuZXcgbGVhc2VzCisgICAgICAgICAgICB3aGljaCBhcmUgdW5rbm93biB0byBkbnNtYXNxLiBUaGFua3MgdG8gSm9obiBNYXN0d2lqayBmb3IgCisJICAgIGhlbHAgd2l0aCB0aGlzLgkgCisKKwkgICAgQWRkZWQgc3VwcG9ydCB0byB0aGUgREhDUCBvcHRpb24gY29kZSB0byBhbGxvdyBSRkMtMzM5NyAKKwkgICAgZG9tYWluIHNlYXJjaCBESENQIG9wdGlvbiAoMTE5KSB0byBiZSBzZW50LgorCisgICAgICAgICAgICBTZXQgTk9OQkxPQ0sgb24gYWxsIGxpc3RlbmluZyBzb2NrZXRzIHRvIHdvcmthcm91bmQgbm9uLVBPU0lYCisgICAgICAgICAgICBjb21wbGlhbmNlIGluIExpbnV4IDIuNCBhbmQgMi42LiBUaGlzIGZpeGVzIHJhcmUgaGFuZ3Mgd2hpY2gKKyAgICAgICAgICAgIG9jY3VyZWQgd2hlbiBjb3JydXB0ZWQgcGFja2V0cyB3ZXJlIHJlY2VpdmVkLiBUaGFua3MgdG8KKwkgICAgSm9yaXMgdmFuIFJhbnR3aWprIGZvciBjaGFzaW5nIHRoYXQgZG93bi4KKyAKKwkgICAgVXBkYXRlZCBjb25maWcuaCBmb3IgTmV0QlNELiBUaGFua3MgdG8gTWFydGluIExhbWJlcnMuCisKKyAgICAgICAgICAgIERvIGEgYmV0dGVyIGpvYiBvZiBkaXN0aW5ndWlzaGluZyBiZXR3ZWVuIHJldHJhbnNtaXNzaW9ucworCSAgICBhbmQgbmV3IHF1ZXJpZXMgd2hlbiBmb3J3YXJkaW5nLiBUaGlzIGZpeGVzIGEgYnVnCisJICAgIHRyaWdnZXJlZCBieSB0aGUgcG9saXBvIHdlYiBjYWNoZSB3aGljaCBzZW5kcyBBIGFuZCBBQUFBCisJICAgIHF1ZXJpZXMgYm90aCB3aXRoIHRoZSBzYW1lIHRyYW5zYWN0aW9uLUlELiBUaGFua3MgdG8gCisJICAgIEpvYWNoaW0gQmVyZGFsIEhhZ2EgYW5kIEp1bGl1c3ogQ2hyb2JvY3playBmb3IgaGVscCB3aXRoIHRoaXMuCisKKwkgICAgUmV3cm90ZSBjYWNoZSBjb2RlIHRvIHN0b3JlIENOQU1FUywgcmF0aGVyIHRoZW4gY2hhc2luZworCSAgICB0aGVtIGJlZm9yZSBzdG9yYWdlLiBUaGlzIGVsaW1pbmF0ZXMgYmFkIHNpdHVhdGlvbnMgd2hlbgorCSAgICBjbGllbnRzIGdldCBpbmNvbnNpc3RlbnQgdmlld3MgZGVwZW5kaW5nIG9uIGlmIGRhdGEgY29tZXMKKwkgICAgZnJvbSB0aGUgY2FjaGUuCisKKwkgICAgQWxsb3cgZm9yIG1vcmUgdGhhbiBvbmUgLS1hZGRuLWhvc3RzIGZsYWcuCisKKwkgICAgQ2xhcmlmeSBsb2dnZWQgbWVzc2FnZSB3aGVuIGEgREhDUCBsZWFzZSBjbGFzaGVzIHdpdGggYW4KKwkgICAgL2V0Yy9ob3N0cyBlbnRyeS4gVGhhbmtzIHRvIE1hdCBTd2lmdCBmb3IgdGhlIHN1Z2dlc3Rpb24uCisKKwkgICAgQWRkZWQgZHluYW1pYy1kbnNtYXNxIGZyb20gUGV0ZXIgV2lsbGlzIHRvIHRoZSBjb250cmliCisJICAgIHNlY3Rpb24uCisKK3ZlcnNpb24gMi4xNworCSAgICBDb3JyZWN0bHkgZGVkdWNlIHRoZSBzaXplIG9mIG51bWVyaWMgZGhjcC1vcHRpb25zLCByYXRoZXIKKwkgICAgdGhhbiBtYWtpbmcgd2lsZCBndWVzc2VzLiBBbHNvIGNvcGUgd2l0aCBuZWdhdGl2ZSB2YWx1ZXMuCisKKwkgICAgRml4ZWQgdXNlIG9mIEMgbGlicmFyeSByZXNlcnZlZCBzeW1ib2wgImluZGV4IiB3aGljaCBicm9rZQorCSAgICB1bmRlciBjZXJ0YWluIGNvbWJpbmF0aW9ucyBvZiBsaWJyYXJ5IGFuZCBjb21waWxlci4KKworCSAgICBNYWtlIGJpbmQtaW50ZXJmYWNlcyB3b3JrIGZvciBJUHY2IGludGVyZmFjZXMgdG9vLgorCisJICAgIFdhcm4gaWYgYW4gaW50ZXJmYWNlIGlzIGdpdmVuIGZvciBsaXN0ZW5pbmcgd2hpY2ggZG9lc24ndAorCSAgICBjdXJyZW50bHkgZXhpc3Qgd2hlbiBub3QgaW4gYmluZC1pbnRlcmZhY2VzIG1vZGUuIChUaGlzIGlzCisJICAgIGFscmVhZHkgYSBmYXRhbCBlcnJvciB3aGVuIGJpbmQtaW50ZXJmYWNlcyBpcyBzZXQuKQorCisJICAgIEFsbG93IHRoZSAtLWludGVyZmFjZSBhbmQgLS1leGNlcHQtaW50ZXJmYWNlIG9wdGlvbnMgdG8KKwkgICAgdGFrZSBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGludGVyZmFjZXMuCisKKwkgICAgVHdlYWsgLS1kaGNwLXVzZXJjbGFzcyBtYXRjaGluZyBjb2RlIHRvIHdvcmsgd2l0aCB0aGUKKwkgICAgSVNDIGRoY2xpZW50IHdoaWNoIHZpb2xhdGVzIFJGQzMwMDQgdW5sZXNzIGl0cworCSAgICBjb25maWd1cmF0aW9uIGlzIHZlcnkgd2FycGVkLiBUaGFua3MgdG8gQ2VkcmljIER1dmFsIGZvcgorCSAgICB0aGUgYnVnIHJlcG9ydC4gCisKKwkgICAgQWxsb3cgbW9yZSB0aGFuIG9uZSBuZXR3b3JrLWlkIHRhZyBpbiBhIGRoY3Atb3B0aW9uLiBBbGwKKwkgICAgdGhlIHRhZ3MgbXVzdCBtYXRjaCB0byBlbmFibGUgdGhlIG9wdGlvbi4KKworCSAgICBBZGRlZCBkaGNwLWlnbm9yZSBvcHRpb24gdG8gZGlzYWJsZSBjbGFzc2VzIG9mIGhvc3RzIGJhc2VkCisJICAgIG9uIG5ldHdvcmstaWQgdGFncy4gQWxzbyBhbGxvdyBCT09UUCBvcHRpb25zIHRvIGJlCisJICAgIGNvbnRyb2xsZWQgYnkgbmV0d29yayB0YWdzLgorCisJICAgIEZpbGwgaW4gc25hbWUsIGZpbGUgYW5kIHNpYWRkciBmaWVsZHMgaW4gcmVwbGllcyB0bworCSAgICBESENQSU5GT1JNIG1lc3NhZ2VzLgorCisJICAgIERvbid0IHNlbmQgTkFLIHJlcGxpZXMgdG8gREhDUFJFUVVFU1QgcGFja2V0cyBmb3IgZGlzYWJsZWQKKwkgICAgY2xpZW50cy4gQ3JlZGl0IHRvIENlZHJpYyBEdXZhbCBmb3Igc3BvdHRpbmcgdGhpcy4KKworCSAgICBGaXggcmFyZSBjcmFzaCBhc3NvY2lhdGVkIHdpdGggbG9uZyBETlMgbmFtZXMgYW5kIENOQU1FCisJICAgIHJlY29yZHMuIFRoYW5rcyB0byBIb2xnZXIgSG9mZnN0YXR0ZSBhbmQgZXNwZWNpYWxseSBTdGV2ZQorCSAgICBHcmVjbmkgZm9yIGhlbHAgY2hhc2luZyB0aGF0IG9uZSBkb3duLgorCit2ZXJzaW9uIDIuMTgKKyAgICAgICAgICAgIFJld29ya2VkIHRoZSBMaW51eCBpbnRlcmZhY2UgZGlzY292ZXJ5IGNvZGUgKGFnYWluKSB0bworCSAgICBjb3BlIHdpdGggaW50ZXJmYWNlcyB3aGljaCBoYXZlIG9ubHkgSVB2NiBhZGRyZXNzZXMgYW5kIAorCSAgICBpbnRlcmZhY2VzIHdpdGggbW9yZSB0aGFuIG9uZSBJUHY2IGFkZHJlc3MuIFRoYW5rcyB0bworICAgICAgICAgICAgTWFydGluIFBlbHMgZm9yIGhlbHAgd2l0aCB0aGF0LgorCisJICAgIEZpeCBwcm9ibGVtcyB3aGljaCBvY2N1cmVkIHdoZW4gbW9yZSB0aGFuIG9uZSBkaGNwLXJhbmdlCisJICAgIHdhcyBzcGVjaWZpZWQgaW4gdGhlIHNhbWUgc3VibmV0OiBzb21ldGltZXMgcGFyYW1ldGVycworCSAgICAobGVhc2UgdGltZSwgbmV0d29yay1pZCB0YWcpIGZyb20gdGhlIHdyb25nIG9uZSB3b3VsZCBiZQorCSAgICB1c2VkLiBUaGFua3MgdG8gUm9yeSBDYW1wYmVsbC1MYW5nZSBmb3IgdGhlIGJ1ZyByZXBvcnQuCisKKwkgICAgUmVzZXQgY2FjaGUgc3RhdGlzdGljcyB3aGVuIGNsZWFyaW5nIHRoZSBjYWNoZS4KKworCSAgICBFbmFibGUgbG9uZyBjb21tYW5kIGxpbmUgb3B0aW9ucyBvbiBGcmVlQlNEIHdoZW4gdGhlCisJICAgIEMgbGlicmFyeSBzdXBwb3J0cyB0aGVtLgorCit2ZXJzaW9uIDIuMTkgCisgICAgICAgICAgICBUd2Vha2VkIHRoZSBMaW51eC1vbmx5IGludGVyZmFjZSBkaXNjb3ZlcnkgY29kZSB0byBjb3BlIAorCSAgICB3aXRoIGludGVyZmFjZS1pbmRleGVzIGxhcmdlciB0aGFuIDggYml0cyBpbgorICAgICAgICAgICAgL3Byb2MvbmV0L2lmX2luZXQ2LiBUaGlzIG9ubHkgYWZmZWN0cyBMaW51eCwgb2J2aW91c2x5LiAgCisJICAgIFRoYW5rcyB0byBSaWNoYXJkIEF0dGVyZXIgZm9yIHRoZSBidWcgcmVwb3J0LgorCisJICAgIENoZWNrIGZvciB1bmRlci1sZW5ndGggb3B0aW9uIGZpZWxkcyBpbiBESENQIHBhY2tldHMsIGEKKwkgICAgemVybyBsZW5ndGggY2xpZW50LWlkLCBpbiBwYXJ0aWNsdWFyLCBjb3VsZCBzZXJpb3VzbHkKKwkgICAgY29uZnVzZSBkbnNtYXNxICd0aWxsIG5vdy4gVGhhbmtzIHRvIFdpbGwgTXVybmFtZSBmb3IgaGVscAorCSAgICB3aXRoIHRoYXQuCisKKwkgICAgSWYgYSBESENQLWFsbG9jYXRlZCBhZGRyZXNzIGhhcyBhbiBhc3NvY2lhdGVkIG5hbWUgaW4KKwkgICAgL2V0Yy9ob3N0cywgYW5kIHRoZSBjbGllbnQgZG9lcyBub3QgcHJvdmlkZSBhIGhvc3RuYW1lCisJICAgIHBhcmFtZXRlciBhbmQgdGhlcmUgaXMgbm8gaG9zdG5hbWUgaW4gYSBtYXRjaGluZyBkaGNwLWhvc3QKKwkgICAgb3B0aW9uLCBzZW5kIHRoZSAvZXRjL2hvc3RzIG5hbWUgYXMgdGhlIGhvc3RuYW1lIGluIAorCSAgICB0aGUgREhDUCBsZWFzZS4gVGhhbmtzIHRvIFdpbGwgTXVybmFtZSBmb3IgdGhlIHN1Z2dlc3Rpb24uCisKK3ZlcnNpb24gMi4yMAorCSAgICBBbGxvdyBtb3JlIHRoYW4gb25lIGluc3RhbmNlIG9mIGRuc21hc3EgdG8gcnVuIG9uIGEKKwkgICAgbWFjaGluZSwgZWFjaCBwcm92aWRpbmcgREhDUCBzZXJ2aWNlIG9uIGEgZGlmZmVyZW50CisJICAgIGludGVyZmFjZSwgcHJvdmlkZWQgdGhhdCAtLWJpbmQtaW50ZXJmYWNlcyBpcyBzZXQuIFRoaXMKKwkgICAgY29uZmlndXJhdGlvbiB1c2VkIHRvIHdvcmssIGJ1dCByZWdyZXNzZWQgaW4gdmVyc2lvbiAyLjE0CisKKwkgICAgRml4IGNvbXBpbGF0aW9uIG9uIE1hYyBPUyBYLiBUaGFua3MgdG8gS2V2aW4gQnVsbG9jay4KKwkKKwkgICAgUHJvdGVjdCBhZ2FpbnN0IG92ZXJsb25nIG5hbWVzIGFuZCBvdmVybG9uZworCSAgICBsYWJlbHMgaW4gY29uZmlndXJhdGlvbiBhbmQgZnJvbSBESENQLgorCisJICAgIEZpeCBpbnRlcmVzdGluZyBjb3JuZXIgY2FzZSBpbiBDTkFNRSBoYW5kbGluZy4gVGhpcyBvY2N1cnMKKwkgICAgd2hlbiBhIENOQU1FIGhhcyBhIHRhcmdldCB3aGljaCAic2hhZG93ZWQiIGJ5IGEgbmFtZSBpbgorCSAgICAvZXRjL2hvc3RzIG9yIGZyb20gREhDUC4gUmVzb2x2aW5nIHRoZSBDTkFNRSB3b3VsZCBzbmVhaworCSAgICB0aGUgdXBzdHJlYW0gdmFsdWUgb2YgdGhlIENOQU1FJ3MgdGFyZ2V0IGludG8gdGhlIGNhY2hlLAorCSAgICBhbG9uZ3NpZGUgdGhlIGxvY2FsIHZhbHVlLiBOb3cgdGhhdCBkb2Vzbid0IGhhcHBlbiwgdGhvdWdoCisJICAgIHJlc29sdmluZyB0aGUgQ05BTUUgc3RpbGwgZ2l2ZXMgdGhlIHVuc2hhZG93ZWQgdmFsdWUuIFRoaXMKKwkgICAgaXMgYXJndWFibHkgd3JvbmcgYnV0IHJhdGhlciBkaWZmaWN1bHQgdG8gZml4LiBUaGUgbWFpbgorCSAgICB0aGluZyBpcyB0byBhdm9pZCBnZXR0aW5nIHN0cmFuZ2UgcmVzdWx0cyBmb3IgdGhlIHRhcmdldAorCSAgICBkdWUgdG8gdGhlIGNhY2hlIHBvbGx1dGlvbiB3aGVuIHJlc29sdmluZyB0aGUKKwkgICAgQ05BTUUuIFRoYW5rcyB0byBQaWVycmUgSGFib3V6aXQgZm9yIGV4cGxvcmluZyB0aGUgY29ybmVyCisJICAgIGFuZCBzdWJtaXR0aW5nIGEgdmVyeSBjbGVhciBidWcgcmVwb3J0LgorCisJICAgIEZpeCBzdWJ0bGUgYnVnIGluIHRoZSBETlMgcGFja2V0IHBhcnNpbmcgY29kZS4gSXQncyBhbG1vc3QKKwkgICAgaW1wb3NzaWJsZSB0byBkZXNjcmliZSB0aGlzIHN1Y2NpbmN0bHksIGJ1dCB0aGUgb25lIGtub3duCisJICAgIG1hbmlmZXN0YXRpb24gaXMgdGhlIGluYWJpbGl0eSB0byBjYWNoZSB0aGUgQSByZWNvcmQgZm9yCisJICAgIHd3dy5hcHBsZS5jb20uIFRoYW5rcyB0byBCb2IgQWxleGFuZGVyIGZvciBzcG90dGluZyB0aGF0LgorCisJICAgIFN1cHBvcnQgU1JWIHJlY29yZHMuIFRoYW5rcyB0byBSb2JlcnQgS2VhbiBmb3IgdGhlIHBhdGNoZXMKKwkgICAgZm9yIHRoaXMuCisKKwkgICAgRml4ZWQgc2lnbiBjb25mdXNpb24gaW4gdGhlIHZlbmRvci1pZCBtYXRjaGluZyBjb2RlIHdoaWNoCisJICAgIGNvdWxkIGNhdXNlIGNyYXNoZXMgc29tZXRpbWVzLiAoQ3JlZGl0IHRvIE1hcmsgV2lhdGVyIGZvcgorCSAgICBoZWxwIGZpbmRpbmcgdGhpcy4pCisKKwkgICAgQWRkZWQgdGhlIGFiaWxpdHkgdG8gbWF0Y2ggdGhlIG5ldGlkIHRhZyBpbiBhCisJICAgIGRoY3AtcmFuZ2UuIENvbWJpbmVkIHdpdGggdGhlIGFiaWxpdHkgdG8gaGF2ZSBtdWx0aXBsZQorCSAgICByYW5nZXMgaW4gYSBzaW5nbGUgc3VibmV0LCB0aGlzIHByb3ZpZGVzIGEgbWVhbnMgdG8KKwkgICAgc2VncmVnYXRlIGhvc3RzIG9uIGRpZmZlcmVudCBhZGRyZXNzIHJhbmdlcyBiYXNlZCBvbgorCSAgICB2ZW5kb3JjbGFzcyBvciB1c2VyY2xhc3MuIFRoYW5rcyB0byBNYXJrIFdpYXRlciBmb3IKKwkgICAgcHJvbXB0aW5nIHRoaXMgZW5oYW5jZW1lbnQuICAgIAorCisJICAgIEFkZGVkIHByZWZlcmVuY2UgdmFsdWVzIGZvciBNWCByZWNvcmRzLgorCisJICAgIEFkZGVkIHRoZSAtLWxvY2FsaXNlLXF1ZXJpZXMgb3B0aW9uLgorCit2ZXJzaW9uIDIuMjEKKyAgICAgICAgICAgIEltcHJvdmUgaGFuZGxpbmcgb2YgU0VSVkZBSUwgYW5kIFJFRlVTRUQgZXJyb3JzLiBSZWNlaXZpbmcKKwkgICAgdGhlc2Ugbm93IGluaXRpYXRlcyBzZWFyY2ggZm9yIGEgbmV3IGdvb2Qgc2VydmVyLCBhbmQgYSAKKwkgICAgc2VydmVyIHdoaWNoIHJldHVybnMgdGhlbSBpcyBub3QgYSBjYW5kaWRhdGUgYXMgYSBnb29kCisgICAgICAgICAgICBzZXJ2ZXIuIFRoYW5rcyB0byBJc3R2YW4gVmFyYWRpIGZvciBwb2ludGluZyBvdXQgdGhlCisgICAgICAgICAgICBwcm9ibGVtLgorCisJICAgIFR3ZWFrIHRoZSB0aW1lIGNvZGUgaW4gQlJPS0VOX1JUQyBtb2RlLgorCisJICAgIFNhbml0eSBjaGVjayBsZWFzZSB0aW1lcyBpbiBkaGNwLXJhbmdlIGFuZCBkaGNwLWhvc3QKKwkgICAgY29uZmlndXJhdGlvbnMgYW5kIGZvcmNlIHRoZW0gdG8gYmUgYXQgbGVhc3QgdHdvIG1pbnV0ZXMKKwkgICAgKDEyMHMpIGxlYXNlcyBzaG9ydGVyIHRoYW4gYSBtaW51dGUgY29uZnVzZSBzb21lIGNsaWVudHMsCisJICAgIG5vdGFibHkgQXBwbGUgTWFjT1MgWC4gUm9yeSBDYW1wYmVsbC1MYW5nZSBmb3VuZCB0aGlzCisJICAgIHByb2JsZW0uCisKKwkgICAgT25seSB3YXJuIG9uY2UgYWJvdXQgYW4gdXBzdHJlYW0gc2VydmVyIHdoaWNoIGlzIHJlZnVzaW5nIHRvIGRvCisJICAgIHJlY3Vyc2l2ZSBxdWVyaWVzLgorCisJICAgIEZpeCBESENQIGFkZHJlc3MgYWxsb2NhdGlvbiBwcm9ibGVtIHdoZW4gbmV0aWQgdGFncyBhcmUgaW4KKwkgICAgdXNlLiBUaGFua3MgdG8gV2lsbCBNdXJuYW5lIGZvciB0aGUgYnVnIHJlcG9ydCBhbmQKKwkgICAgc3Vic2VxdWVudCB0ZXN0aW5nLgorCisJICAgIEFkZCBhbiBhZGRpdGlvbmFsIGRhdGEgc2VjdGlvbiB0byB0aGUgcmVwbHkgZm9yIE1YIGFuZCBTUlYKKwkgICAgcXVlcmllcy4gQWRkIHN1cHBvcnQgZm9yIEROUyBUWFQgcmVjb3Jkcy4gVGhhbmtzIHRvIFJvYmVydCAKKwkgICAgS2VhbiBhbmQgSm9obiBIYW1wdG9uIGZvciBwcm9tcHRzIGFuZCB0ZXN0aW5nIG9mIHRoZXNlLgorCisJICAgIEFwcGx5IGFkZHJlc3MgcmV3cml0aW5nIHRvIHJlY29yZHMgaW4gdGhlIGFkZGl0aW9uYWwgZGF0YSBzZWN0aW9uCisJICAgIG9mIEROUyBwYWNrZXRzLiBUaGlzIG1ha2VzIHRoaW5ncyBsaWtlIE1YIHJlY29yZHMgd29yaworCSAgICB3aXRoIHRoZSBhbGlhcyBmdW5jdGlvbi4gVGhhbmtzIHRvIENoYWQgU2tlZXRlcnMgZm9yCisJICAgIHBvaW50aW5nIG91dCB0aGUgbmVlZCBmb3IgdGhpcy4KKworCSAgICBBZGRlZCBzdXBwb3J0IGZvciBxdW90ZWQgc3RyaW5ncyBpbiBjb25maWcgZmlsZS4KKworCSAgICBEZXRlY3QgYW5kIGRlZmVhdCBjYWNoZS1wb2lzb25pbmcgYXR0YWNrcyB3aGljaCBhdHRlbXB0IHRvCisJICAgIHNlbmQgKG1hbGljaW91cykgYW5zd2VycyB0byBxdWVzdGlvbnMgd2UgZGlkbid0CisJICAgIHNlbmQuIFRoZXNlIGFyZSBpZ25vcmVkIG5vdyBldmVuIGlmIHRoZSBhdHRhY2tlciBtYW5hZ2VzCisJICAgIHRvIGd1ZXNzIGEgcmFuZG9tIHF1ZXJ5LWlkLgorCisJICAgIFByb3ZpZGUgREhDUCBzdXBwb3J0IGZvciBpbnRlcmZhY2VzIHdpdGggbXVsdGlwbGUgSVAKKwkgICAgYWRkcmVzc2VzIG9yIGFsaWFzZXMuIFRoaXMgaW4gb25seSBlbmFibGVkIHVuZGVyIExpbnV4LgorCSAgICBTZWUgdGhlIEZBUSBlbnRyeSBmb3IgZGV0YWlscy4KKworCSAgICBSZXZpc2l0IHRoZSBNQUMtYWRkcmVzcyBhbmQgY2xpZW50LWlkIG1hdGNoaW5nIGNvZGUgdG8KKwkgICAgcHJvdmlkZSBzYW5lciBiZWhhdmlvdXIgd2l0aCBQWEUgYm9vdHMsIHdoZXJlIHNvbWUKKwkgICAgcmVxdWVzdHMgaGF2ZSBhIGNsaWVudC1pZCBhbmQgc29tZSBkb24ndC4KKworCSAgICBGaXhlZCBvZmYtYnktb25lIGJ1ZmZlciBvdmVyZmxvdyBpbiBsZWFzZSBmaWxlIHJlYWRpbmcKKwkgICAgY29kZS4gVGhhbmtzIHRvIFJvYiBIb2xsYW5kIGZvciB0aGUgYnVnIHJlcG9ydC4KKworCSAgICBBZGRlZCB3aWxkY2FyZCBtYXRjaGluZyBmb3IgTUFDIGFkZHJlc3NlcyBpbiBkaGNwLWhvc3QKKwkgICAgb3B0aW9ucy4gQSBzZW5zaWJsZSBzdWdnZXN0aW9uIGJ5IE5hdGhhbmllbCBNY0NhbGx1bS4KKwordmVyc2lvbiAyLjIyCisgICAgICAgICAgICBGaXhlZCBidWlsZCBwcm9ibGVtcyBvbiAobWFueSkgc3lzdGVtcyB3aXRoIG9sZGVyIGxpYmMKKyAgICAgICAgICAgIGhlYWRlcnMgd2hlcmUgPGxpbnV4L3R5cGVzLmg+IGlzIHJlcXVpcmVkIGJlZm9yZQorICAgICAgICAgICAgPGxpbnV4L25ldGxpbmsuaD4uIEVuYWJsZWQgSEFWRV9SVE5FVExJTksgdW5kZXIgdWNsaWJjIG5vdworICAgICAgICAgICAgdGhhdCB0aGlzIGZpeCBpcyBpbiBwbGFjZS4KKworCSAgICBBZGRlZCBzdXBwb3J0IGZvciBlbmNhcHN1bGF0ZWQgdmVuZG9yLWNsYXNzLXNwZWNpZmljIERIQ1AKKwkgICAgb3B0aW9ucy4gVGhhbmtzIHRvIEVyaWMgU2hhdHRvdyBmb3IgaGVscCB3aXRoIHRoaXMuCisKKwkgICAgRml4IHJlZ3Jlc3Npb24gaW4gMi4yMSB3aGljaCBicm9rZSBjb21tYXMgaW4gZmlsZW5hbWVzIGFuZAorCSAgICBjb3JydXB0ZWQgYXJndi4gVGhhbmtzIHRvIEVyaWMgU2NvdHQgZm9yIHRoZSBidWdyZXBvcnQuCisKKwkgICAgRml4ZWQgc3R1cGlkIHRoaW5rbyB3aGljaCBjYXVzZWQgZG5zbWFzcSB0byB3ZWRnZSBkdXJpbmcKKwkgICAgc3RhcnR1cCB3aXRoIGNlcnRhaW4gTVgtcmVjb3JkIG9wdGlvbnMuIEFub3RoZXIgMi4yMSByZWdyZXNzaW9uLgorCisJICAgIEZpeGVkIGJyb2tlbi1uZXNzIHdoZW4gcmVhZGluZyAvZXRjL2V0aGVycy4gMi4yMSBicm9rZQorCSAgICB0aGlzIHRvby4KKworCSAgICBGaXhlZCB3ZWRnZSB3aXRoIGNlcnRhaW4gREhDUCBvcHRpb25zLiBZZXQgYW5vdGhlciAyLjIxCisJICAgIHJlZ3Jlc3Npb24uIFJvYiBIb2xsYW5kIGFuZCBSb3kgTWFycGxlcyBjaGFzZWQgdGhpcyBvbmUKKwkgICAgZG93bi4KKwordmVyc2lvbiAyLjIzCisJICAgIEFkZGVkIGEgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlcmUgY2Fubm90IGJlIG1vcmUgdGhhbiBvbmUKKwkgICAgZGhjcC1ob3N0IG9wdGlvbiBmb3IgYW55IG9uZSBJUCBhZGRyZXNzLCBldmVuIGlmIHRoZQorCSAgICBhZGRyZXNzZXMgYXJlIGFzc2lnbmVkIGluZGlyZWN0bHkgdmlhIGEgaG9zdG5hbWUgYW5kCisJICAgIC9ldGMvaG9zdHMuCisKKwkgICAgSW5jbHVkZSBhICJzZXJ2ZXIgaWRlbnRpZmllciIgaW4gREhDUE5BSyByZXBsaWVzLCBhcworCSAgICByZXF1aXJlZCBieSBSRkMyMTMxLgorCisJICAgIEFkZGVkIG1ldGhvZCAgc3VwcG9ydCBmb3IgREJ1cworCSAgICAoaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvU29mdHdhcmUvZGJ1cykKKwkgICAgVGhpcyBpcyBhIHN1cGVyaW9yIHdheSB0byByZS1jb25maWd1cmUgZG5zbWFzcSBvbi10aGUtZmx5CisJICAgIHdpdGggZGlmZmVyZW50IHVwc3RyZWFtIG5hbWVzZXJ2ZXJzLCBhcyB0aGUgaG9zdCBtb3ZlcworCSAgICBiZXR3ZWVuIG5ldHdvcmtzLiBEQnVzIHN1cHBvcnQgbXVzdCBiZSBlbmFibGVkIGluCisJICAgIHNyYy9jb25maWcuaCBhbmQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZXhwZXJpbWVudGFsIGF0IHRoaXMKKwkgICAgcG9pbnQuIFNlZSBEQnVzLWludGVyZmFjZSBmb3IgdGhlIHNwZWNpZmljYXRpb24gb2YgdGhlCisJICAgIERCdXMgbWV0aG9kIGNhbGxzIHN1cHBvcnRlZC4KKworCSAgICBBZGRlZCBpbmZvcm1hdGlvbiB0byB0aGUgRkFRIGFib3V0IHNldHRpbmcgdGhlIEROUyBkb21haW4KKwkgICAgaW4gd2luZG93cyBYUCBhbmQgTWFjIE9TIFgsIHRoYW5rcyB0byBSaWNrIEh1bGwuCisKKwkgICAgQWRkZWQgc2FuaXR5IGNoZWNrIHRvIHJlc29sdi5jb25mIHBvbGxpbmcgY29kZSB0byBjb3BlCisJICAgIHdpdGggYmFja3dhcmRzLW1vdmluZyBjbG9ja3MuIFRoYW5rcyB0byBMZW9uYXJkbyBDYW5kdWNjaQorCSAgICBmb3IJaGVscCB3aXRoIHRoaXMuCisKKwkgICAgSGFuZGxlIHNvLWNhbGxlZCAiQS1mb3ItQSIgcXVlcmllcywgd2hpY2ggYXJlIHF1ZXJpZXMgZm9yCisJICAgIHRoZSBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCBhIG5hbWUgd2hpY2ggaXMgYWxyZWFkeSBhCisJICAgIGRvdHRlZC1xdWFkIGFkZHJlc3MuIFRoZXNlIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZQorCSAgICByZXNvbHZlciBjb2RlLCBidXQgc29tZXRpbWVzIGFyZW4ndCBhbmQgdGhlcmUncyBubyBwb2ludAorCSAgICBpbiBmb3J3YXJkaW5nIHRoZW0uCisKKwkgICAgQWRkZWQgIm5vLWRoY3AtaW50ZXJmYWNlIiBvcHRpb24gdG8gZGlzYWJsZSBESENQIHNlcnZpY2UKKyAgICAgICAgICAgIG9uIGFuIGludGVyZmFjZSwgd2hpbHN0IHN0aWxsIHByb3ZpZGluZyBETlMuCisKKwkgICAgRml4IGZvcm1hdC1zdHJpbmcgcHJvYmxlbSAtIGNvbmZpZyBmaWxlIG5hbWVzIGdldCBwYXNzZWQKKwkgICAgdG8gZnByaW50ZiBhcyBhIGZvcm1hdCBzdHJpbmcsIHNvICUgY2hhcmFjdGVycyBjb3VsZCBjYXVzZQorCSAgICBjcmFzaGVzLiBUaGFua3MgdG8gUm9iIEhvbGxhbmQgZm9yIHNsZXV0aGluZyB0aGF0IG9uZS4KKworCSAgICBGaXhlZCBtdWx0aXBsZSBjb21waWxlciB3YXJuaW5ncyBmcm9tIGdjYyA0LiBUaGFua3MgdG8gCisJICAgIFRpbSBDdXR0cyBmb3IgdGhlIHJlcG9ydC4KKworCSAgICBTZW5kIHRoZSBob3N0bmFtZSBvcHRpb24gb24gREhDUCBvZmZlciBtZXNzYWdlcyBhcyB3ZWxsIGFzCisJICAgIERIQ1AgYWNrIG1lc3NhZ2VzLiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBSaW8gRGlnaXRhbCAKKwkgICAgQXVkaW8gUmVjZWl2ZXIuIFRoYW5rcyB0byBSb24gRnJlZGVyaWNrIGZvciB0aGUgcGF0Y2guCisgCisgICAgICAgICAgICBBZGQgJ2QnIChmb3IgZGF5KSBhcyBhIHBvc3NpYmxlIHRpbWUgbXVsdGlwbGllciBpbiBsZWFzZSAKKwkgICAgdGltZSBzcGVjaWZpY2F0aW9ucy4gVGhhbmtzIHRvIE1pY2hhZWwgRGVlZ2FuLgorCisJICAgIE1ha2UgcXVvdGluZyBzdXBwcmVzcyByZWNvZ25pdGlvbiBvZiBJUCBhZGRyZXNzZXMsIHNvCisJICAgIGRoY3Atb3B0aW9uPTY2LDEuMi4zLjQgbm93IG1lYW5zIHNvbWV0aGluZyBkaWZmZXJlbnQgdG8KKyAgICAgICAgICAgIGRoY3Atb3B0aW9uPTY2LCIxLjIuMy40Iiwgd2hpY2ggc2V0cyB0aGUgb3B0aW9uIHRvIGEKKwkgICAgc3RyaW5nIHZhbHVlLiBUaGFua3MgdG8gQnJpYW4gTWFjYXVsZXkgZm9yIHRoZSBidWcgcmVwb3J0LgorCisJICAgIEZpeGVkIHRoZSBvcHRpb24gcGFyc2luZyBjb2RlIHRvIGF2b2lkIHNlZ2ZhdWx0cyBmcm9tIHNvbWUKKwkgICAgaW52YWxpZCBjb25maWd1cmF0aW9ucy4gVGhhbmtzIHRvIFdvb2tleSBmb3Igc3BvdHRpbmcgdGhhdCBvbmUuCisgCisgICAgICAgICAgICBQcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHdoaWNoIGNvbXBpbGUtdGltZSBvcHRpb25zIHdlcmUgCisJICAgIHNlbGVjdGVkLCBib3RoIGluIHRoZSBsb2cgYXQgc3RhcnR1cCBhbmQgYXMgcGFydCBvZiB0aGUgb3V0cHV0IAorICAgICAgICAgICAgZnJvbSBkbnNtYXNxIC0tdmVyc2lvbi4gVGhhbmtzIHRvIERpcmsgU2NoZW5rZXdpdHogZm9yIAorICAgICAgICAgICAgdGhlIHN1Z2dlc3Rpb24uIAorCisJICAgIEZpeCBwYXRoYWxvZ2ljYWwgYmVoYXZpb3VyIHdoZW4gYSBicm9rZW4gY2xpZW50IGtlZXBzIHNlbmRpbmcKKyAgICAgICAgICAgIERIQ1BESVNDT1ZFUiBtZXNzYWdlcyByZXBlYXRlZGx5IGFuZCBmYXN0LiBCZWNhdXNlIGRlYWxpbmcgd2l0aAorICAgICAgICAgICAgZWFjaCBvZiB0aGVzZSB0YWtlcyBhIGZldyBzZWNvbmRzLCAoYmVjYXVzZSBvZiB0aGUgcGluZykgdGhlbiBhIAorCSAgICBxdWV1ZSBvZiBESENQIHBhY2tldHMgY291bGQgYnVpbGQgdXAuIE5vdywgdGhlIHJlc3VsdHMgb2YgYSBwaW5nIAorICAgICAgICAgICAgdGVzdCBhcmUgYXNzdW1lZCB0byBiZSB2YWxpZCBmb3IgMzAgc2Vjb25kcywgc28gcmVwZWF0ZWQgd2FpdHMgYXJlCisgICAgICAgICAgICBub3QgcmVxdWlyZWQuIFRoYW5rcyB0byBMdWNhIExhbmRpIGZvciBmaW5kaW5nIHRoaXMuCisKKwkgICAgQWxsb3cgREhDUElORk9STSByZXF1ZXN0cyB3aXRob3V0IGhhcmR3YXJlIGFkZHJlc3MKKwkgICAgaW5mb3JtYXRpb24uIFRoZXNlIGFyZSBnZW5lcmF0ZWQgYnkgc29tZSBicm93c2VycywgbG9va2luZworCSAgICBmb3IgcHJveHkgaW5mb3JtYXRpb24uIFRoYW5rcyB0byBTdGFubGV5IEphZGRvZSBmb3IgdGhlCisJICAgIGJ1ZyByZXBvcnQgb24gdGhhdC4KKworCSAgICBBZGQgc3VwcG9ydCBvZiB0aGUgImNsaWVudCBGUUROIiBESENQIG9wdGlvbi4gSWYgcHJlc2VudCwKKwkgICAgdGhpcyBpcyB1c2VkIHRvIGFsbG93IHRoZSBjbGllbnQgdG8gdGVsbCBkbnNtYXNxIGl0cyBuYW1lLAorCSAgICBpbiBwcmVmZXJlbmNlIHRvIChtaXMpdXNpbmcgdGhlIGhvc3RuYW1lIG9wdGlvbi4gU2VlIAorICAgICAgICAgICAgICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvd2cvZGhjL2RyYWZ0LWlldGYtZGhjLWZxZG4tb3B0aW9uL1wKKyAgICAgICAgICAgICAgICBkcmFmdC1pZXRmLWRoYy1mcWRuLW9wdGlvbi0xMC50eHQKKyAgICAgICAgICAgIGZvciBkZXRhaWxzIG9mIHRoZSBkcmFmdCBzcGVjLgorCisJICAgIEFkZGVkIHN0YXJ0dXAgc2NyaXB0cyBmb3IgTWFjT1MgWCBUaWdlci9QYW50aGVyIHRvIHRoZSAKKyAgICAgICAgICAgIGNvbnRyaWIgY29sbGVjdGlvbi4gVGhhbmtzIHRvIFRpbSBDdXR0cy4KKworCSAgICBUd2VhayBESENQIG5ldHdvcmsgc2VsZWN0aW9uIHNvIHRoYXQgY2xpZW50cyB3aGljaCB0dXJuIHVwCisJICAgIG9uIG91ciBuZXR3b3JrIGluIFJFQklORElORyBzdGF0ZSBhbmQgd2l0aCBhIGxlYXNlIGZvciBhCisJICAgIGZvcmVpZ24gbmV0d29yayB3aWxsIGdldCBhIE5BSyByZXNwb25zZS4gVGhhbmtzIHRvIERhbgorCSAgICBTaGVjaHRlciBmb3Igd29yayBvbiB0aGlzIGFuZCBhbiBpbml0aWFsIHBhdGNoIGFuZCB0aGFua3MKKwkgICAgdG8gR3lvcmd5IEZhcmthcyBmb3IgZnVydGhlciB0ZXN0aW5nLgorCisJICAgIEZpeCBETlMgcXVlcnkgZm9yd2FyZGluZyBmb3IgZW1wdHkgcXVlcmllcyBhbmQgZm9yd2FyZAorCSAgICBxdWVyaWVzIGV2ZW4gd2hlbiB0aGUgcmVjdXJzaW9uLWRlc2lyZWQgYml0IGlzIGNsZWFyLiBUaGlzCisJICAgIGFsbG93cyAiZGlnICt0cmFjZSIgdG8gd29yay4gUHJvYmxlbSByZXBvcnQgZnJvbSBVd2UKKwkgICAgR2Fuc2VydC4KKworCSAgICBBZGRlZCAiY29uc3QiIGRlY2xhcmF0aW9ucyB3aGVyZSBhcHByb3ByaWF0ZSwgdGhhbmtzIHRvCisJICAgIEFuZHJlYXMgTW9ociBmb3IgdGhlIHBhdGNoLgorCisJICAgIEFkZGVkIC0tYm9vdHAtZHluYW1pYyBvcHRpb24gYW5kIGFzc29jaWF0ZWQKKwkgICAgZnVuY3Rpb25hbGl0eS4gVGhhbmtzIHRvIEpvc2VmIFdvbGYgZm9yIHRoZSBzdWdnZXN0aW9uLgorIAordmVyc2lvbiAyLjI0CisgICAgICAgICAgICBVcGRhdGVkIGNvbnRyaWIvb3BlbnZwbi9kbnNtYXNxLnBhdGNoIGZyb20gSm9zZXBoIFRhdGUuCisKKwkgICAgVHdlYWtlZCBESENQIE5BSyBjb2RlLCBhIERIQ1AgTkFLIGlzIG5vdyB1bmljYXN0IGFzIGEKKwkgICAgZmFsbGJhY2sgaW4gY2FzZXMgd2hlcmUgYSBicm9hZGNhc3QgaXMgZnV0aWxlOiBuYW1lbHkgaW4KKwkgICAgcmVzcG9uc2UgdG8gYSB1bmljYXN0IFJFUVVFU1QgZnJvbSBhIG5vbi1sb2NhbCBuZXR3b3JrCisJICAgIHdoaWNoIHdhcyBub3Qgc2VudCB2aWEgYSByZWxheS4KKworCSAgICBTbGlnaHRseSBjaGFuZ2VkIHRoZSBzZW1hbnRpY3Mgb2YgZG9tYWluIG1hdGNoaW5nIGluCisJICAgIC0tc2VydmVyIGFuZCAtLWFkZHJlc3MgY29uZmlncy4gLS1zZXJ2ZXI9L2RvbWFpbi5jb20vIHN0aWxsCisJICAgIG1hdGNoZXMgZG9tYWluLmNvbSBhbmQgc3ViLmRvbWFpbi5jb20gYnV0IGRvZXMgbm90IAorCSAgICBub3cgbWF0Y2ggbmV3ZG9tYWluLmNvbSBUaGUgc2VtYW50aWNzIG9mIAorICAgICAgICAgICAgLS1zZXJ2ZXI9Ly5kb21haW4uY29tLyBhcmUgdW5jaGFuZ2VkLiAKKwkgICAgVGhhbmtzIHRvIENocmlzIEJsYWlzZSBmb3IgdGhlIHBhdGNoLgorCisJICAgIEFkZGVkIGJhY2t3YXJkcy1jb21wYXRpYmxlIGludGVybmF0aW9uYWxpc2F0aW9uIHN1cHBvcnQuCisJICAgIFRoZSBleGlzdGluZyBtYWtlIHRhcmdldHMsIChhbGwsIGRuc21hc3EsIGluc3RhbGwpIHdvcmsgYXMKKwkgICAgYmVmb3JlLiBOZXcgb25lcyAoYWxsLWkxOG4sIGFuZCBpbnN0YWxsLWkxOG4pIGFkZCBnZXR0ZXh0LgorCSAgICBUaGUgdHJhbnNsYXRpb25zIGxpdmUgaW4gcG8vIFRoZXJlIGFyZSBub3QgdG9vIG1hbnkKKwkgICAgc3RyaW5ncywgc28gaWYgYW55Ym9keSBjYW4gcHJvdmlkZSB0cmFuc2xhdGlvbnMgKGFuZCBmb3IKKwkgICAgdGhlIG1hbnBhZ2UuLi4uKSBwbGVhc2Ugc2VuZCB0aGVtIGluLgorCisJICAgIFR3ZWFrIGJlaGF2aW91ciBvbiByZWNlaXB0IG9mIFJFRlVTRUQgb3IgU0VSVkZBSUwgcmNvZGVzLAorCSAgICBub3cgdGhlIHF1ZXJ5IGdldHMgcmV0cmllZCBvbiBhbGwgc2VydmVycyBiZWZvcmUgcmV0dXJuaW5nCisJICAgIHRoZSBlcnJvciB0byB0aGUgc291cmNlIG9mIHRoZSBxdWVyeS4gVGhhbmtzIHRvIEphdmllcgorCSAgICBLb2hlbiBmb3IgdGhlIHJlcG9ydC4KKyAKKwkgICAgQWRkZWQgUG9saXNoIHRyYW5zbGF0aW9uIC0gdGhhbmtzIHRvIFRvbWFzeiBTb2NoYW5za2kuCisKKwkgICAgQ2hhbmdlZCBkZWZhdWx0IG1hbnBhZ2UgaW5zdGFsbCBsb2NhdGlvbiBmcm9tIC91c3IvbWFuIAorCSAgICB0byAvdXNyL3NoYXJlL21hbiAKKworCSAgICBBZGRlZCBTcGFuaXNoIHRyYW5zbGF0aW9uIC0gdGhhbmtzIHRvIENocmlzdG9waGVyIENoYXRoYW0uCisKKwkgICAgTG9nIGEgd2FybmluZyB3aGVuIGEgREhDUCBwYWNrZXQgaXMgdHJ1bmNhdGVkIGR1ZSB0byBsYWNrCisJICAgIG9mIHNwYWNlLiAoVGhhbmtzIHRvIE1pY2hhZWwgV2VsbGUgZm9yIHRoZSBwcm9tcHQgdG8gZG8KKwkgICAgdGhpcy4pCisJICAgIAorCSAgICBBZGRlZCBGcmVuY2ggdHJhbnNsYXRpb24gLSB0aGFua3MgdG8gTGlvbmVsIFRyaWNvbi4KKworCSAgICBBZGRlZCBJbmRvbmVzaWFuIHRyYW5zbGF0aW9uIC0gdGhhbmtzIHRvIFNhbG1hbiBBUy4KKworCSAgICBUd2Vha2VkIHRoZSBuZXRsaW5rIGNvZGUgdG8gY29wZSB3aXRoIGludGVyZmFjZSBicm9hZGNhc3QKKwkgICAgYWRkcmVzcyBub3Qgc2V0LCBvciBzZXQgdG8gMC4wLjAuMC4KKworCSAgICBGaXhlZCBwcm9ibGVtIGFzc2lnbmluZyBmaXhlZCBhZGRyZXNzZXMgdG8gaG9zdHMgd2hlbiBtb3JlCisJICAgIHRoYW4gb25lIGRoY3AtcmFuZ2UgaXMgYXZhaWxhYmxlLiBUaGFua3MgdG8gU29yaW4gUGFuY2EKKwkgICAgZm9yIGhlbHAgY2hhc2luZyB0aGlzIGRvd24uCisKKwkgICAgQWRkZWQgbW9yZSBleHBsaWN0IGVycm9yIG1lc2FnZXMgdG8gdGhlIGhvc3RzIGZpbGUgYW5kCisJICAgIGV0aGVycyBmaWxlIHJlYWRpbmcgY29kZS4gTWFya3VzIEthaXNlcnN3ZXJ0aCBzdWZmZXJlZCB0bworCSAgICBtYWtlIHRoaXMgaGFwcGVuLgorCisJICAgIEVuc3VyZSB0aGF0IGEgaG9zdG5hbWUgc3VwcGxpZWQgYnkgYSBESENQIGNsaWVudCBjYW4gbmV2ZXIKKwkgICAgb3ZlcnJpZGUgb25lIGNvbmZpZ3VyZWQgb24gdGhlIHNlcnZlci4gUHJldmlvdXNseSwgYW55CisJICAgIGhvc3QgY2xhaW1pbmcgYSBuYW1lIHdvdWxkIGJlIGdpdmVuIGl0LCBldmVuIGlmIHRoYXQKKwkgICAgb3Zlci1yb2RlIGEgZGhjcC1ob3N0IGRlY2xhcmF0aW9uLCBsZWFkaW5nIHRvIHBvdGVudGlhbGx5IAorICAgICAgICAgICAgY29uZnVzaW5nIHNpdHVhdGlvbnMuCisKKwkgICAgQWRkZWQgU2xhY2t3YXJlIHBhY2thZ2UtYnVpbGQgc3R1ZmYgaW50byBjb250cmliLyBUaGUgaTE4bgorCSAgICBlZmZvcnQgYnJva2UgdGhlIGN1cnJlbnQgc2NyaXB0cywgYW5kIHdvcmtpbmcgb25lcyB3ZXJlCisJICAgIG5lZWRlZCBmb3IgdGVzdGluZywgc28gdGhleSBlbmRlZCB1cCBoZXJlIHJhdGhlciB0aGFuIG1ha2UKKwkgICAgUGF0IHJlLWludmVudCB0aGUgd2hlZWwuCisJICAgIAorCSAgICBBZGRlZCBSb21hbmlhbiB0cmFuc2xhdGlvbiwgdGhhbmtzIHRvIFNvcmluIFBhbmNhIGZvcgorCSAgICB0aGF0LgorCit2ZXJzaW9uIDIuMjUKKyAgICAgICAgICAgIEZpeGVkIFJlZEhhdCBzcGVjIGZpbGUgZm9yIEZDNCAtIHRoYW5rcyB0byBXZXJuZXIgSG9lbHpsCisgICAgICAgICAgICBhbmQgQW5kcmV3IEJpcmQuCisKKyAgICAgICAgICAgIEZpeGVkIFN1c2Ugc3BlYyBmaWxlIC0gdGhhbmtzIHRvIFN0ZXZlbiBTcHJpbmdsLgorCisJICAgIEZpeGVkIERIQ1AgYnVnIHdoZW4gdHdvIGRpc3RpY3Qgc3VibmV0cyBhcmUgb24gdGhlIHNhbWUKKwkgICAgcGh5c2ljYWwgaW50ZXJmYWNlLiBUaGFua3MgdG8gUGF3ZWwgWmF3b3JhIGZvciBmaW5kaW5nCisJICAgIHRoaXMgYW5kIHN1Z2dlc3RpbmcgdGhlIGZpeC4KKworCSAgICBBZGRlZCBsb2dnaW5nIHRvIG1ha2UgaXQgZXhwbGljaXQgd2hlbiBkbnNtYXNxIGZhbGxzIGJhY2sKKwkgICAgZnJvbSB1c2luZyBSVC1uZXRsaW5rIHNvY2tldHMgdG8gdGhlIG9sZCBpb2N0bCBBUEkgZm9yCisJICAgIGdldHRpbmcgaW5mb3JtYXRpb24gYWJvdXQgaW50ZXJmYWNlcy4gRG9pbmcgdGhpcworCSAgICBjb21wbGV0ZWx5IHNpbGVudGx5IG1hZGUgcmVtb3RlIGRlYnVnZ2luZyBoYXJkLgorCisJICAgIE1lcmdlZCB1Y2xpYmMgYnVpbGQgZml4ZXMgZnJvbSB0aGUgT3BlbldSVCBwYWNrYWdlIGludG8KKwkgICAgc3JjL2NvbmZpZy5oIAorCisJICAgIEFkZGVkIE5vcndlZ2lhbiB0cmFuc2xhdGlvbiAtIHRoYW5rcyB0byBKYW4gRXJpayBBc2tpbGR0LgorCit2ZXJzaW9uIDIuMjYKKwkgICAgRml4ZWQgU3VTZSBycG0gcGF0Y2ggcHJvYmxlbSAtIHRoYW5rcyB0byBTdGV2ZW4gU3ByaW5nbC4KKworCSAgICBGaXhlZCBjcmFzaCB3aGVuIGF0dGVtcHRpbmcgdG8gc2VuZCBhIERIQ1AgTkFLIHRvIGEgaG9zdAorCSAgICB3aGljaCBiZWxpZXZlcyBpdCBoYXMgYSBsZWFzZSBvbiBhbiB1bmtub3duCisJICAgIG5ldHdvcmsuIFRoYW5rcyB0byBMdXR6IFByZXNzbGVyIGZvciB0aGUgYnVnIHJlcG9ydCBhbmQKKwkgICAgcGF0Y2guCisKK3ZlcnNpb24gMi4yNworCSAgICBUd2Vha2VkIERIQ1AgYmVoYXZpb3VyIHdoZW4gYSBjbGllbnQgYXR0ZW1wdHMgdG8gcmVuZXcgYSBsZWFzZQorICAgICAgICAgICAgd2hpY2ggZG5zbWFzcSBkb2Vzbid0IGtub3cgYWJvdXQuIFByZXZpb3VzbHkgdGhhdCB3b3VsZCBhbHdheXMKKyAgICAgICAgICAgIHJlc3VsdCBpbiBhIERIQ1BOQUsuIE5vdywgaW4gZGhjcC1hdXRob3JpdGF0aXZlIG1vZGUsIHRoZQorICAgICAgICAgICAgbGVhc2Ugd2lsbCBiZSBjcmVhdGVkLCBpZiBpdCdzIGxlZ2FsLiBUaGlzIG1ha2VzIGRuc21hc3Egd29yaworICAgICAgICAgICAgYmV0dGVyIGlmIHRoZSBsZWFzZSBkYXRhYmFzZSBpcyBsb3N0LCBmb3IgZXhhbXBsZSBvbiBhbiBPcGVuV1JUCisJICAgIHN5c3RlbSB3aGljaCByZWJvb3RzLiBUaGFua3MgdG8gU3RlcGhlbiBSb3NlIGZvciB3b3JrIG9uCisJICAgIHRoaXMuCisKKwkgICAgQWRkZWQgdGhlIGFiaWxpdHkgdG8gc3VwcG9ydCBSRkMtMzQ0MiBzdHlsZSBkZXN0aW5hdGlvbgorCSAgICBkZXNjcmlwdG9ycyBpbiBkaGNwLW9wdGlvbnMuIFRoaXMgbWFrZXMgY2xhc3NsZXNzIHN0YXRpYworCSAgICByb3V0ZXMgZWFzeSB0byBkbywgZWcgZGhjcC1vcHRpb249MTIxLDE5Mi4xNjguMS4wLzI0LDEuMi4zLjQKKworCSAgICBBZGRlZCBlcnJvci1jaGVja2luZyB0byB0aGUgY29kZSB3aGljaCB3cml0ZXMgdGhlIGxlYXNlCisJICAgIGZpbGUuIElmIHRoaXMgZmFpbHMgZm9yIGFueSByZWFzb24sIGFuIGVycm9yIGlzIGxvZ2dlZCwKKwkgICAgYW5kIGEgcmV0cnkgb2NjdXJzIGFmdGVyIG9uZSBtaW51dGUuIFRoaXMgc2hvdWxkIGltcHJvdmUKKwkgICAgdGhpbmdzIGVnIHdoZW4gYSBmaWxlc3lzdGVtIGlzIGZ1bGwuIFRoYW5rcyB0byBKZW5zIEhvbHplCisJICAgIGZvciB0aGUgYnVnIHJlcG9ydC4KKworCSAgICBGaXhlZCBicmVha2FnZSBvZiB0aGUgIi8jLyBtYXRjaGVzIGFueSBkb21haW4iIGZhY2lsaXR5CisJICAgIHdoaWNoIGhhcHBlbmVkIGluIDIuMjQuIFRoYW5rcyB0byBQZXRlciBTdXJkYSBmb3IgdGhlIGJ1ZworCSAgICByZXBvcnQuCisKKwkgICAgVXNlICJzaXplX3QiIGFuZCAic3NpemVfdCIgdHlwZXMgd2hlcmUgYXBwcm9wcmlhdGUgaW4gdGhlCisJICAgIGNvZGUuCisKKwkgICAgRml4IGJ1Z2d5IENOQU1FIGhhbmRsaW5nIGluIG1peGVkIElQdjQgYW5kIElQdjYKKwkgICAgcXVlcmllcy4gVGhhbmtzIHRvIEFuZHJlYXMgUGVsbWUgZm9yIGhlbHAgZmluZGluZyB0aGF0LgorCisJICAgIEFkZGVkIHNvbWUgY29kZSB0byBhdHRlbXB0IHRvIHJlLXRyYW5zbWl0IEROUyBxdWVyaWVzIHdoZW4gCisJICAgIGEgbmV0d29yayBpbnRlcmZhY2UgY29tZXMgdXAuICBUaGlzIGhlbHBzIG9uIERvRCBsaW5rcywgCisJICAgIHdoZXJlIGZyZXF1ZW50bHkgdGhlIHBhY2tldCB3aGljaCB0cmlnZ2VycyBkaWFsbGluZyBpcworICAgICAgICAgICAgYSBETlMgcXVlcnksIHdoaWNoIHRoZW4gZ2V0cyBsb3N0LiBCeSByZS1zZW5kaW5nLCB3ZSBjYW4gCisJICAgIGF2b2lkIHRoZSBsb29rdXAgZmFpbGluZy4gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGFjdGl2ZQorCSAgICB3aGVuIG5ldGxpbmsgc3VwcG9ydCBpcyBjb21waWxlZCBpbiwgYW5kIHRoZXJlZm9yZSBvbmx5CisJICAgIHVuZGVyIExpbnV4LiBUaGFua3MgdG8gSmVhbiBXb2x0ZXIgZm9yIGhlbHAgd2l0aCB0aGlzLgorCisJICAgIFR3ZWFrZWQgdGhlIERIQ1AgdGFnLW1hdGNoaW5nIGNvZGUgdG8gd29yayBjb3JyZWN0bHkgd2l0aAorCSAgICBOT1QtdGFnIGNvbmRpdGlvbnMuIFRoYW5rcyB0byBMdXR6IFByZXNzbGVyIGZvciBmaW5kaW5nCisJICAgIHRoZSBidWcuCisKKwkgICAgR2VuZXJhbGlzZWQgbmV0aWQtdGFnIG1hdGNoaW5nIGluIGRoY3AtcmFuZ2Ugc3RhdGVtZW50cyB0bworCSAgICBhbGxvdyBtb3JlIHRoYW4gb25lIHRhZy4KKworCSAgICBBZGRlZCAtLWRoY3AtbWFjIHRvIGRvIE1BQyBhZGRyZXNzIG1hdGNoaW5nIGluIHRoZSBzYW1lCisJICAgIHdheSBhcyB2ZW5kb3JjbGFzcyBhbmQgdXNlcmNsYXNzIG1hdGNoaW5nLiBBIGdvb2QKKwkgICAgc3VnZ2VzdGlvbiBmcm9tIEx1dHogUHJlc3NsZXIuCisKKwkgICAgQWRkIHdvcmthcm91bmQgZm9yIGJ1Z2d5IGVhcmx5IE1pY3Jvc29mdCBESENQIGNsaWVudHMKKwkgICAgd2hpY2ggbmVlZCB6ZXJvLXRlcm1pbmF0aW9uIGluIHN0cmluZyBvcHRpb25zLgorCSAgICBUaGFua3MgdG8gRmFiaWFubyBQaXJlcyBmb3IgaGVscCB3aXRoIHRoaXMuCisKKwkgICAgR2VuZXJhbGlzZWQgdGhlIERIQ1AgY29kZSB0byBjb3BlIHdpdGggYW55IGhhcmR3YXJlCisJICAgIGFkZHJlc3MgdHlwZSwgYXQgbGVhc3Qgb24gTGludXguICpCU0QgaXMgc3RpbGwgbGltaXRlZCB0bworCSAgICBldGhlcm5ldCBvbmx5LgorCit2ZXJzaW9uIDIuMjgKKyAgICAgICAgICAgIEVsaW1pbmF0ZWQgYWxsIHJhdyBuZXR3b3JrIGFjY2VzcyB3aGVuIHJ1bm5pbmcgb24KKyAgICAgICAgICAgIExpbnV4LiBBbGwgREhDUCBuZXR3b3JrIGFjdGl2aXR5IG5vdyBnb2VzIHRocm91Z2ggdGhlIElQCisgICAgICAgICAgICBzdGFjay4gUGFja2V0IHNvY2tldHMgYXJlIG5vIGxvbmdlciByZXF1aXJlZC4gQXBhcnQgZnJvbQorICAgICAgICAgICAgYmVpbmcgYSBuZWF0IGhhY2ssIHRoaXMgc2hvdWxkIGFsc28gYWxsb3cgREhDUCBvdmVyIElQc2VjCisgICAgICAgICAgICB0byB3b3JrIGJldHRlci4gT24gKkJTRCBhbmQgT1MgWCwgdGhlIG9sZCBtZXRob2Qgb2YgcmF3IG5ldAorICAgICAgICAgICAgYWNjZXNzIHRocm91Z2ggQlBGIGlzIHJldGFpbmVkLgorCisJICAgIFNpbXBsaWZpZWQgYnVpbGQgb3B0aW9ucy4gTmV0d29ya2luZyBpcyBub3cgc2xpbW1lZCBkb3duCisJICAgIHRvIGEgY2hvaWNlIG9mICJsaW51eCIgb3IgIm90aGVyIi4gTmV0bGluayBpcyBhbHdheXMgdXNlZAorCSAgICB1bmRlciBMaW51eC4gU2luY2UgbmV0bGluayBoYXMgYmVlbiBhdmFpbGFibGUgc2luY2UgMi4yCisJICAgIGFuZCBub24tb3B0aW9uYWwgaW4gYW4gSVB2NC1jb25maWd1cmVkICBrZXJuZWwgc2luY2UgMi40LAorCSAgICBhbmQgdGhlIGRuc21hc3EgbmV0bGluayBjb2RlIGlzIG5vdyB3ZWxsIHRlc3RlZCwgdGhpcyAKKwkgICAgc2hvdWxkIHdvcmsgb3V0IGZpbmUuIAorCisJICAgIFJlbW92ZWQgZGVjYXllZCBidWlsZCBzdXBwb3J0IGZvciBsaWJjNSBhbmQgU29sYXJpcy4KKwkgICAgCisJICAgIFJlbW92ZWQgcHNlbGVjdCBjb2RlOiB1c2UgYSBwaXBlIGZvciByYWNlLWZyZWUgc2lnbmFsCisJICAgIGhhbmRsaW5nIGluc3RlYWQsIGFzIHRoaXMgd29ya3MgZXZlcnl3aGVyZS4KKworCSAgICBObyBsb25nZXIgZW5hYmxlIHRoZSBJU0MgbGVhc2VmaWxlIHJlYWRpbmcgY29kZSBpbiB0aGUKKwkgICAgZGlzdHJpYnV0ZWQgc291cmNlcy4gSSBkb3VidCB0aGVyZSBhcmUgbWFueSBwZW9wbGUgbGVmdAorCSAgICB1c2luZyB0aGlzIDEueCBjb21wYXRpYmlsaXR5IGNvZGUuIFRob3NlIHRoYXQgYXJlIHdpbGwKKwkgICAgaGF2ZSB0byBleHBsaWNpdGx5IGVuYWJsZSBpdCBpbiBzcmMvY29uZmlnLmguCisKKwkgICAgRG9uJ3Qgc2VuZCB0aGUgIkRIQ1AgbWF4aW11bSBtZXNzYWdlIHNpemUiIG9wdGlvbiwgZXZlbiBpZiAKKwkgICAgcmVxdWVzdGVkLiBSRkMyMTMxIHNheXMgdGhpcyBpcyBhICJNVVNUIE5PVCIuCisKKwkgICAgU3VwcG9ydCBsYXJnZXItdGhhbi1taW5pbXVtIERIQ1AgbWVzc2FnZS4gRG5zbWFzcSBpcyBub3cKKwkgICAgaGFwcHkgdG8gZ2V0IGxhcmdlciB0aGFuIDU3Ni1ieXRlIERIQ1AgbWVzc2FnZXMsIGFuZCB3aWxsCisJICAgIHJldHVybiBsYXJnZSBtZXNzYWdlcywgaWYgcGVybWl0dGVkIGJ5IHRoZSAibWF4aW11bQorCSAgICBtZXNzYWdlIHNpemUiIG9wdGlvbiBvZiB0aGUgbWVzc2FnZSB0byB3aGljaCBpdCBpcworCSAgICByZXBseWluZy4gVGhlcmUncyBub3cgYW4gYXJiaXRyYXJ5IHNhbml0eSBsaW1pdCBvZiAxNjM4NAorCSAgICBieXRlcy4KKworCSAgICBBZGRlZCAtLW5vLXBpbmcgb3B0aW9uLiBUaGlzIGZpeGVzIGFuIFJGQzIxMzEgIlNIT1VMRCIuCisKKwkgICAgQnVpbGRpbmcgb24gdGhlIDIuMjcgTUFDLWFkZHJlc3MgY2hhbmdlcywgYWxsb3cgY2xpZW50cyB0byAKKwkgICAgcHJvdmlkZSBubyBNQUMgYWRkcmVzcyBhdCBhbGwsIHJlbHlpbmcgb24gdGhlIGNsaWVudC1pZCBhcworCSAgICBhIHVuaXF1ZSBpZGVudGlmaWVyLiBUaGlzIHNob3VsZCBtYWtlIHRoaW5ncyBsaWtlIERIQ1AgZm9yCisJICAgIFVTQiBjb21lIGVhc2llci4KKworCSAgICBGaXhlZCByZWdyZXNzaW9uIGluIG5ldGxpbmsgY29kZSB1bmRlciAyLjIueCBrZXJuZWxzIHdoaWNoIAorCSAgICBvY2N1cnJlZCBpbiAyLjI3LiBFcmlrIEphbiBUcm9tcCBpcyB0aGUgdmludGFnZSBrZXJuZWwgZmFuIAorCSAgICB3aG8gZm91bmQgdGhpcy4gUC5TLiBJdCBsb29rcyBsaWtlIHRoaXMgIm5ldGxpbmsgYmluZDoKKwkgICAgcGVybWlzc2lvbiBkZW5pZWQiIHByb2JsZW0gb2NjdXJlZCBpbiBrZXJuZWxzIGF0IGxlYXN0IGFzCisJICAgIGxhdGUgYSAyLjQuMTguIEdvb2QgaW5mb3JtYXRpb24gZnJvbSBBbGFpbiBSaWNob3V4LgorCisJICAgIEFkZGVkIGEgd2FybmluZyB3aGVuIGl0J3MgaW1wb3NzaWJsZSB0byBnaXZlIGEgaG9zdCBpdHMKKwkgICAgY29uZmlndXJlZCBhZGRyZXNzIGJlY2F1c2UgdGhlIGFkZHJlc3MgaXMgbGVhc2VkCisJICAgIGVsc2V3aGVyZS4gIEEgc2Vuc2libGUgc3VnZ2VzdGlvbiBmcm9tIE1pcmNlYSBCYXJkYWMuCisKKwkgICAgQWRkZWQgbWluaW1hbCBzdXBwb3J0IGZvciBSRkMgMzA0NiBESENQIHJlbGF5IGFnZW50LWlkCisJICAgIG9wdGlvbnMuIFRoZSBESENQIHNlcnZlciBub3cgZWNob2VzIHRoZXNlIGJhY2sgdG8gdGhlCisJICAgIHJlbGF5LCBhcyByZXF1aXJlZCBieSB0aGUgUkZDLiBBbHNvLCBSRkMgMzUyNyBsaW5rIHNlbGVjdGlvbiAKKwkgICAgc3ViLW9wdGlvbnMgYXJlIGhvbm91cmVkLgorCisJICAgIFNldCB0aGUgcHJvY2VzcyAiZHVtcGFibGUiIGZsYWcgd2hlbiBydW5uaW5nIGluIGRlYnVnCisJICAgIG1vZGU6IHRoaXMgbWFrZXMgZ2V0dGluZyBjb3JlIGR1bXBzIGZyb20gcm9vdCBwcm9jZXNzZXMKKwkgICAgbXVjaCBlYXNpZXIuCisJICAgIAorCSAgICBGaXhlZCBvbmUtYnl0ZSBidWZmZXIgb3ZlcmZsb3cgd2hpY2ggc2VlbXMgdG8gb25seSBjYXVzZQorCSAgICBwcm9ibGVtcyB3aGVuIGRuc21hc3EgaXMgbGlua2VkIHdpdGggdWNsaWJjLiBUaGFua3MgdG8KKwkgICAgRXJpYyBIb3VzZSBhbmQgRXJpYyBTcGFrbWFuIGZvciBoZWxwIGluIGNoYXNpbmcgdGhpcyBkb3duLgorCisJICAgIFRvbGVyYXRlIGNvbmZpZ3VyYXRpb24gc2NyZXd1cHMgd2hpY2ggbGVhZCB0byB0aGUgREhDUAorCSAgICBzZXJ2ZXIgYXR0ZW1waW5nIHRvIGFsbG9jYXRlIGl0cyBvd24gYWRkcmVzcyB0byBhCisJICAgIGNsaWVudDsgZWcgc2V0dGluZyB0aGUgd2hvbGUgc3VibmV0IHJhbmdlIGFzIGEgREhDUAorCSAgICByYW5nZS4gQWRkcmVzc2VzIGluIHVzZSBieSB0aGUgc2VydmVyIGFyZSBub3cgZXhjbHVkZWQKKwkgICAgZnJvbSB1c2UgYnkgY2xpZW50cy4KKworCSAgICBEaWQgc29tZSB0aGlua2luZyBhYm91dCBIQVZFX0JST0tFTl9SVEMgbW9kZSwgYW5kIG1hZGUgaXQKKwkgICAgbXVjaCBzaW1wbGVyIGFuZCBiZXR0ZXIuIFRoZSBrZXkgaXMgdG8ganVzdCBrZWVwIGxlYXNlCisJICAgIGxlbmd0aHMgaW4gdGhlIGxlYXNlIGZpbGUuIFNpbmNlIHRoZXNlIG5vcm1hbGx5IG5ldmVyCisJICAgIGNoYW5nZSwgZXZlbiBhcyB0aGUgbGVhc2UgaXMgcmVuZXdlZCwgdGhlIGxlYXNlIGZpbGUgbmV2ZXIKKwkgICAgbmVlZHMgdG8gY2hhbmdlIGV4Y2VwdCB3aGVuIG1hY2hpbmVzIGFycml2ZSBvbiB0aGUgbmV0d29yaworCSAgICBvciBsZWF2ZS4gVGhpcyBlbGltaW5hdGVzIHRoZSBjb2RlIGZvciB0aW1lZCB3cml0ZXMsIGFuZAorCSAgICByZWR1Y2VzIHRoZSBhbW91bnQgb2Ygd2VhciBvbiBhIGZsYXNoIGZpbGVzeXN0ZW0gdG8gdGhlCisJICAgIGFic29sdXRlIG1pbmltdW0uIEFsc28gcmUtZGlkIHRoZSBiYXNpYyB0aW1lIGZ1bmN0aW9uIGluCisJICAgIHRoaXMgbW9kZSB0byB1c2UgdGhlIHBvcnRhYmxlIHRpbWVzKCksIHJhdGhlciB0aGFuIHBhcnNpbmcKKwkgICAgL3Byb2MvdXB0aW1lLgorCisJICAgIEJlbGlldmUgdGhlIHNvdXJjZSBwb3J0IG51bWJlciB3aGVuIHJlcGx5aW5nIHRvIHVuaWNhc3QgCisJICAgIERIQ1AgcmVxdWVzdHMgYW5kIERIQ1AgcmVxdWVzdHMgdmlhIGEgcmVsYXksIGluc3RlYWQgb2YgYWx3YXlzIAorICAgICAgICAgICAgdXNpbmcgdGhlIHN0YW5kYXJkIHBvcnRzLiAgVGhpcyB3aWxsIGFsbG93IHJlbGF5cyBvbiAKKyAgICAgICAgICAgIG5vbi1zdGFuZGFyZCBwb3J0cyBhbmQgREhDUElORk9STSBmcm9tIHVucHJpdmlsZWdlZCBwb3J0cworICAgICAgICAgICAgdG8gd29yay4gVGhlIHNvdXJjZSBwb3J0IHNlbnQgYnkgdW5jb25maWd1cmVkIGNsaWVudHMgaXMgc3RpbGwgCisgICAgICAgICAgICBpZ25vcmVkLCBzaW5jZSB0aGlzIG1heSBiZSB1bnJlbGlhYmxlLiBUaGlzIG1lYW5zIHRoYXQgYSBESENQIAorICAgICAgICAgICAgY2xpZW50IG11c3QgdXNlIHRoZSBzdGFuZGFyZCBwb3J0IHRvIGRvIGZ1bGwgY29uZmlndXJhdGlvbi4KKyAKK3ZlcnNpb24gMi4yOQorCSAgICBGaXhlZCBjb21waWxhdGlvbiBvbiBPcGVuQlNEICh0aGFua3MgdG8gVG9tIEhlbnNlbCBmb3IgdGhlCisJICAgIHJlcG9ydCkuIAorCisJICAgIEZpeGVkIGZhbHNlICJubyBpbnRlcmZhY2UiIGVycm9ycyB3aGVuIC0tYmluZC1pbnRlcmZhY2VzIGlzCisJICAgIHNldCBhbG9uZyB3aXRoIC0taW50ZXJmYWNlPWxvIG9yIC0tbGlzdGVuLWFkZHJlc3MuIFRoYW5rcworCSAgICB0byBQYXVsIFdpc2UgZm9yIHRoZSByZXBvcnQuCisKKwkgICAgVXBkYXRlZCBwYXRjaCBmb3IgU3VTRSBycG0uIFRoYW5rcyB0byBTdGV2ZW4gU3ByaW5nbC4KKworCSAgICBJdCB0dXJucyBvdXQgdGhhdCB0aGVyZSBhcmUgc29tZSBMaW51eCBrZXJuZWwKKwkgICAgY29uZmlndXJhdGlvbnMgd2hpY2ggbWFrZSB1c2luZyB0aGUgY2FwYWJpbGl0eSBzeXN0ZW0KKwkgICAgaW1wb3NzaWJsZS4gSWYgdGhpcyBzaXR1YXRpb24gb2NjdXJzIHRoZW4gY29udGludWUsIHJ1bm5pbmcKKwkgICAgYXMgcm9vdCwgYW5kIGxvZyBhIHdhcm5pbmcuIFRoYW5rcyB0byBTY290dCBXZWhyZW5iZXJnCisJICAgIGZvciBoZWxwIHRyYWNraW5nIHRoaXMgZG93bi4KKwordmVyc2lvbiAyLjMwCisgICAgICAgICAgICBGaXhlZCBjcmFzaCB3aGVuIGEgREhDUCBjbGllbnQgcmVxdWVzdGVkIGEgYnJvYWRjYXN0CisgICAgICAgICAgICByZXBseS4gVGhpcyBwcm9ibGVtIHdhcyBpbnRyb2R1Y2VkIGluIHZlcnNpb24gMi4yOC4KKwkgICAgVGhhbmtzIHRvIFNhbmRyYSBEZWtrZXJzIGZvciB0aGUgYnVnIHJlcG9ydC4KKwordmVyc2lvbiAyLjMxCisJICAgIEFkZGVkIC0tZGhjcC1zY3JpcHQgb3B0aW9uLiBUaGVyZSBoYXZlIGJlZW4gY2FsbHMgZm9yIHRoaXMKKwkgICAgZm9yIGEgbG9uZyB0aW1lIGZyb20gbWFueSBnb29kIHBlb3BsZS4gRmFiaW8gTXV6emkgZ2V0cworCSAgICB0aGUgcHJpemUgZm9yIGZpbmFsbHkgY29udmluY2luZyBtZS4KKworCSAgICBBZGRlZCBleGFtcGxlIGRidXMgY29uZmlnIGZpbGUgYW5kIG1vdmVkIGRidXMgc3R1ZmYgaW50bworCSAgICBpdHMgb3duIGRpcmVjdG9yeS4KKworCSAgICBSZW1vdmVkIGhvcnJpYmx5IG91dGRhdGVkIFJlZGhhdCBSUE0gYnVpbGQgZmlsZXMuIFRoZXNlCisJICAgIGFyZSBvYnNvbGV0ZSBub3cgdGhhdCBkbnNtYXNxIGluIGluIEZlZG9yYSBleHRyYXMuIFRoYW5rcworCSAgICB0byBQYXRyaWNrICJKaW1hIiBMYXVnaHRvbiwgdGhlIEZlZG9yYSBwYWNrYWdlCisJICAgIG1haW50YWluZXIuCisKKwkgICAgQWRkZWQgd29ya2Fyb3VuZCBmb3IgTGludXgga2VybmVsIGJ1Zy4gVGhpcyBtYW5pZmVzdHMKKwkgICAgaXRzZWxmIGFzIGZhaWx1cmUgb2YgREhDUCBvbiBrZXJuZWxzIHdpdGggInN1cHBvcnQgZm9yCisJICAgIGNsYXNzaWNhbCBJUCBvdmVyIEFUTSIgY29uZmlndXJlZC4gVGhhdCBpbmNsdWRlcyBtb3N0CisJICAgIERlYmlhbiBrZXJuZWwgcGFja2FnZXMuIE1hbnkgdGhhbmtzIHRvIEEuIENvc3RhIGFuZAorCSAgICBCZW5qYW1pbiBLdWRyaWEgZm9yIHRoZWlyIGh1Z2UgZWZmb3J0cyBpbiBjaGFzaW5nIHRoaXMKKwkgICAgZG93bi4KKworCSAgICBGb3JjZS1raWxsIGNoaWxkIHByb2Nlc3NlcyB3aGVuIGRuc21hc3EgaXMgc2VudCBhIHNpZ3Rlcm0sCisJICAgIG90aGVyd2lzZSBhbiB1bmNsb3NlZCBUQ1AgY29ubmVjdGlvbiBjb3VsZCBrZWVwIGRuc21hc3EKKwkgICAgaGFuZ2luZyByb3VuZCBmb3IgYSBmZXcgbWludXRlcy4KKworCSAgICBUd2Vha2VkIGNvbmZpZy5oIGxvZ2ljIGZvciB1Y2xpYmMgYnVpbGQuIEl0IHdpbGwgbm93IHBpY2sKKwkgICAgdXAgTU1VIGFuZCBJUFY2IHN0YXR1cyBjb3JyZWN0bHkgb24gZXZlcnkgc3lzdGVtIEkgdGVzdGVkLgorCit2ZXJzaW9uIDIuMzIgCisJICAgIEF0dGVtcHQgYSBiZXR0ZXIgam9iIG9mIHJlcGxhY2luZyBwcmV2aW91cyBjb25maWd1cmF0aW9uCisJICAgIHdoZW4gcmUtcmVhZGluZyAvZXRjL2hvc3RzIGFuZCAvZXRjL2V0aGVycy4gU0lHSFVQIGlzCisJICAgIHN0aWxsIG5vdCBpZGVudGljYWwgdG8gYSByZXN0YXJ0IHVuZGVyIGFsbCBjaXJjdW1zdGFuY2VzLAorCSAgICBidXQgaXQgaXMgZm9yIHRoZSBjb21tb24gY2FzZSBvZiBuYW1lLT5NQUMgYWRkcmVzcyBpbgorCSAgICAvZXRjL2V0aGVycyBhbmQgbmFtZS0+SVAgYWRkcmVzcyBpbiAvZXRjL2hvc3RzLgorCisJICAgIEZhbGwgYmFjayB0byBicm9hZGNhc3QgZm9yIERIQ1AgdG8gYW4gdW5jb25maWd1cmVkIGNsaWVudAorCSAgICB3aGVuIHRoZSBNQUMgYWRkcmVzcyBzaXplIGlzIGdyZWF0ZXIgdGhhbiAxNCBieXRlcy4KKworCSAgICBGaXggcHJvYmxlbSBpbiAyLjI4LW9ud2FyZHMgcmVsZWFzZXMgd2hpY2ggYnJlYWtzIEROUyBvbgorCSAgICBNYWMgT1MgWC4gVGhhbmtzIHRvIERvdWcgRmllbGRzIGZvciB0aGUgYnVnIHJlcG9ydCBhbmQKKwkgICAgdGVzdGluZy4KKworCSAgICBBZGRlZCBmaXggdG8gYWxsb3cgY29tcGlsYXRpb24gb24gYzg5LW9ubHkgY29tcGlsZXJzLgorCSAgICBUaGFua3MgdG8gSm9obiBNYXN0d2lqayBmb3IgdGhlIHBhdGNoLgorCSAgIAorCSAgICBUd2VhayByZXNvbHYgZmlsZSBwb2xsaW5nIGNvZGUgdG8gd29yayBiZXR0ZXIgaWYgdGhlcmUgaXMKKwkgICAgYSByYWNlIGJldHdlZW4gdXBkYXRpbmcgdGhlIG10aW1lIGFuZCBmaWxlIGNvbnRlbnRzLiBUaGlzCisJICAgIGlzIG5vdCBub3JtYWxseSBhIHByb2JsZW0sIGJ1dCBpdCBjYW4gYmUgb24gc3lzdGVtcyB3aGljaAorCSAgICByZXBsYWNlIG5hbWVzZXJ2ZXJzIHdoaWxzdCBhY3RpdmUuIFRoZSBjb2RlIG5vdyBjb250aW51ZXMKKwkgICAgdG8gcmVhZCByZXNvbHYuY29uZiB1bnRpbCBpdCBnZXRzIGF0IGxlYXN0IG9uZSB1c2FibGUKKwkgICAgc2VydmVyLiBUaGFua3MgdG8gSG9sZ2VyIE1hdWVybWFubiBmb3IgaGVscCB3aXRoIHRoaXMuCisKKwkgICAgSWYgYSBjbGllbnQgREVDTElORXMgYW4gYWRkcmVzcyB3aGljaCBpcyBhbGxvY2F0ZWQgdG8gaXQKKwkgICAgdmlhIGRoY3AtaG9zdCBvciAvZXRjL2hvc3RzLCBsb2NrIHRoYXQgYWRkcmVzcyBvdXQgb2YgdXNlCisJICAgIGZvciB0ZW4gbWludXRlcywgaW5zdGVhZCBvZiBmb3JldmVyLCBhbmQgbG9nIHdoZW4gaXQncyBub3QKKwkgICAgYmVpbmcgdXNlZCBiZWNhdXNlIG9mIHRoZSBsb2NrLW91dC4gVGhpcyBzaG91bGQgcHJvdmlkZQorCSAgICBsZXNzIHN1cnByaXNpbmcgYmVoYXZpb3VyIHdoZW4gYSBjb25maWd1cmVkIGFkZHJlc3MgY2FuJ3QgYmUKKwkgICAgdXNlZC4gVGhhbmtzIHRvIFBldGVyIFN1cmRhIGFuZCBIZWlueiBEZWluaGFydCBmb3IgaW5wdXQKKwkgICAgb24gdGhpcy4KKworCSAgICBGaXhlZCAqQlNEIERIQ1AgYnJlYWthZ2Ugd2l0aCBvbmx5IHNvbWUKKwkgICAgYXJjaGVzL2NvbXBpbGVycywgZGVwZW5kaW5nIG9uIHN0cnVjdHVyZSBwYWRkaW5nIHJ1bGVzLgorCSAgICBUaGFua3MgdG8gSmViIENhbXBiZWxsIGFuZCBUb20gSGVuc2VsIGZvciBoZWxwIHdpdGggdGhpcy4KKworCSAgICBBZGRlZCAtLWNvbmYtZGlyIG9wdGlvbi4gU3VnZ2VzdGlvbiBmcm9tIEFhcm9uIFR5Z2FydC4KKworCSAgICBBcHBsaWVkIHBhdGNoIGZyb20gQnJlbnQgQ29vayB3aGljaCBhbGxvd3MgbmV0aWRzIGluCisJICAgIGRoY3Atb3B0aW9uIGNvbmZpZ3VyYXRpb24gbGluZXMgdG8gYmUgcHJlZml4ZWQgYnkKKwkgICAgIm5ldDoiLiBUaGlzIGlzIG5vdCByZXF1aXJlZCBieSB0aGUgc3ludGF4LCBidXQgaXQgaXMKKwkgICAgY29uc2lzdGVudCB3aXRoIG90aGVyIGNvbmZpZ3VyYXRpb24gaXRlbXMuCisKKwkgICAgQWRkZWQgLS1sb2ctZmFjaWxpdHkgb3B0aW9uLiBTdWdnZXN0aW9uIGZyb20gRmFiaW8gTXV6emkuCisKKwkgICAgTWFqb3IgdXBkYXRlIHRvIFNwYW5pc2ggdHJhbnNsYXRpb24uIE1hbnkgdGhhbmtzIHRvIENocmlzCisJICAgIENoYXRoYW0uIAorCisJICAgIEZpeGVkIGdjYy00LjEgc3RyaWN0LWFsaWFzIGNvbXBpbGF0aW9uIHdhcm5pbmcuCisKK3ZlcnNpb24gMi4zMworICAgICAgICAgICAgUmVtb3ZlIGJhc2gtc3BlY2lmaWMgc2hlbGxjb2RlIGZyb20gdGhlIE1ha2VmaWxlLgorCisJICAgIEZpeCBicmVha2FnZSB3aXRoIHNvbWUgREhDUCByZWxheSBpbXBsZW1lbnRhdGlvbnMgd2hpY2gKKwkgICAgd2FzIGludHJvZHVjZWQgaW4gMi4yOC4gQmVsaWV2aW5nIHRoZSBzb3VyY2UgcG9ydCBpbgorCSAgICBESENQIHJlcXVlc3RzIGFuZCBzZW5kaW5nIHRoZSByZXBseSB0aGVyZSBpcyBzb21ldGltZXMgYQorCSAgICBiYWQgdGhpbmcgdG8gZG8sIHNvIEkndmUgcmV2ZXJ0ZWQgdG8gYWx3YXlzIHNlbmRpbmcgdG8KKwkgICAgdGhlIHJlbGF5IG9uIHBvcnQgNjguIFRoYW5rcyB0byBEYW5pZWwgSGFtbGluIGFuZCBBbGV4CisJICAgIChhbGRlKSBmb3IgYnVnIHJlcG9ydHMgb24gdGhpcy4KKworCSAgICBNb3ZlZCB0aGUgU3VTZSBwYWNrYWdpbmcgZmlsZXMgdG8gY29udHJpYi4gSSB3aWxsIG5vCisJICAgIGxvbmdlciBhdHRlbXB0IHRvIG1haW50YWluIHRoaXMgaW4gdGhlIHNvdXJjZSB0YXJiYWxsLiBJdAorCSAgICB3aWxsIGJlIGRvbmUgZXh0ZXJuYWxseSwgaW4gdGhlIHNhbWUgd2F5IGFzIHBhY2thZ2luZyBmb3IKKwkgICAgb3RoZXIgZGlzdHJvcy4gU3VzZSBwYWNrYWdlcyBhcmUgYXZhaWxhYmxlIGZyb20gCisJICAgIGZ0cDovL2Z0cC5zdXNlLmNvbS9wdWIvcGVvcGxlL3VnLworCSAgICAKKwkgICAgTWVyZ2VkIHBhdGNoIGZyb20gR2VudG9vIHRvIGhvbm91ciAkTERGTEFHUyBlbnZpcm9ubWVudC4KKworCSAgICBGaXggYnVnIGluIHJlc29sdi5jb25mIHByb2Nlc3Npbmcgd2hlbiBtb3JlIHRoYW4gb25lIGZpbGUKKwkgICAgaXMgYmVpbmcgY2hlY2tlZC4KKworCSAgICBBZGQgLS1kbnMtZm9yd2FyZC1tYXggb3B0aW9uLgorCisJICAgIFdhcm4gaWYgLS1yZXNvbHYtZmlsZSBmbGFncyBhcmUgaWdub3JlZCBiZWNhdXNlIG9mCisJICAgIC0tbm8tcmVzb2x2LiBUaGFua3MgdG8gTWFydGluIEYgS3JhZmZ0IGZvciBzcG90dGluZyB0aGlzCisJICAgIG9uZS4KKworICAgICAgICAgICAgQWRkIC0tbGVhc2VmaWxlLXJvIG9wdGlvbiB3aGljaCBhbGxvd3MgdGhlIHVzZSBvZiBhbiAKKyAgICAgICAgICAgIGV4dGVybmFsIGxlYXNlIGRhdGFiYXNlLiBNYW55IHRoYW5rcyB0byBTdGV2ZSBIb3JiYWNodWsgCisJICAgIGZvciBhc3Npc3RhbmNlIGRldmVsb3BpbmcgdGhpcyBmZWF0dXJlLgorCisJICAgIFByb3ZpZGUgZXh0cmEgaW5mb3JtYXRpb24gdG8gbGVhc2UtY2hhbmdlIHNjcmlwdCB2aWEgaXRzCisJICAgIGVudmlyb25tZW50LiBJZiB0aGUgaG9zdCBoYXMgYSBjbGllbnQtaWQsIHRoZW4KKwkgICAgRE5TTUFTUV9DTElFTlRfSUQgd2lsbCBiZSBzZXQuIEVpdGhlciB0aGUgbGVhc2UgbGVuZ3RoIChpbgorCSAgICBETlNNQVNRX0xFQVNFX0xFTkdUSCkgb3IgbGVhc2UgZXhwaXJ5IHRpbWUgKGluCisJICAgIEROU01BU1FfTEVBU0VfRVhQSVJFUykgd2lsbCBiZSBzZXQsIGRlcGVuZGluZyBvbiB0aGUKKwkgICAgSEFWRV9CUk9LRU5fUlRDIGNvbXBpbGUtdGltZSBvcHRpb24uIFRoaXMgZXh0cmEKKwkgICAgaW5mb3JtYXRpb24gc2hvdWxkIG1ha2UgaXQgcG9zc2libGUgdG8gbWFpbnRhaW4gdGhlIGxlYXNlCisJICAgIGRhdGFiYXNlIGluIGV4dGVybmFsIHN0b3JhZ2Ugc3VjaCBhcyBMREFQIG9yIGEgcmVsYXRpb25hbAorCSAgICBkYXRhYmFzZS4gTm90ZSB0aGF0IHdoaWxlIGxlYXNlZmlsZS1ybyBpcyBzZXQsIHRoZSBzY3JpcHQKKyAgICAgICAgICAgIHdpbGwgYmUgY2FsbGVkIHdpdGggIm9sZCIgIGV2ZW50cyBtb3JlIG9mdGVuLCBzaW5jZSAKKwkgICAgY2hhbmdlcyB0byB0aGUgY2xpZW50LWlkIGFuZCBsZWFzZSBsZW5ndGgKKwkgICAgKEhBVkVfQlJPS0VOX1JUQykgb3IgbGVhc2UgZXhwaXJ5IHRpbWUgKG90aGVyd2lzZSkgCisJICAgIGFyZSBub3cgZmxhZ2dlZC4gCisKKwkgICAgQWRkIGNvbnRyaWIvd3J0Lyogd2hpY2ggaXMgYW4gZXhhbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiBhbgorCSAgICBleHRlcm5hbCBwZXJzaXN0ZW50IGxlYXNlIGRhdGFiYXNlIGZvciAqV1JUIGRpc3Ryb3Mgd2l0aCAKKwkgICAgdGhlIG52cmFtIGNvbW1hbmQuCisKKwkgICAgQWRkIGNvbnRyaWIvd3J0L2RoY3BfcmVsZWFzZS5jIHdoaWNoIGlzIGEgc21hbGwgdXRpbGl0eSAKKwkgICAgd2hpY2ggcmVtb3ZlcyBESENQIGxlYXNlcyB1c2luZyBESENQUkVMRUFTRSBvcGVyYXRpb24gaW4KKwkgICAgdGhlIERIQ1AgcHJvdG9jb2wuCisKK3ZlcnNpb24gMi4zNAorCSAgICBUd2VhayBuZXR3b3JrLWRldGVybWluYXRpb24gY29kZSBmb3IgYW5vdGhlciBjb3JuZXIgY2FzZToKKwkgICAgaW4gdGhpcyBjYXNlIGEgaG9zdCBmb3JjZWQgdG8gbW92ZSBiZXR3ZWVuIGRoY3AtcmFuZ2VzIG9uCisJICAgIHRoZSBzYW1lIHBoeXNpY2FsIGludGVyZmFjZS4gVGhhbmtzIHRvIE1hdHRoaWFzIEFuZHJlZS4KKwkgICAgCisJICAgIEltcHJvdmUgaGFuZGxpbmcgb2YgaGlnaCBETlMgbG9hZHMgYnkgdGhyb3R0bGluZyBhY2NlcHRhbmNlIG9mCisJICAgIG5ldyBxdWVyaWVzIHdoZW4gcmVzb3VyY2VzIGFyZSB0aWdodC4gVGhpcyBzaG91bGQgYmUgYQorCSAgICBiZXR0ZXIgcmVzcG9uc2UgdGhhbiB0aGUgImZvcndhcmRpbmcgdGFibGUgZnVsbC4uLiIKKwkgICAgbWVzc2FnZSB3aGljaCB3YXMgbG9nZ2VkIGJlZm9yZS4KKworCSAgICBGaXhlZCBpbnRlcm1pdHRlbnQgaW5maW5pdGUgbG9vcCB3aGVuIHJlLXJlYWRpbmcKKwkgICAgL2V0Yy9ldGhlcnMgYWZ0ZXIgU0lHSFVQLiBUaGFua3MgdG8gRWxkb24gWmllZ2xlciBmb3IgdGhlCisJICAgIGJ1ZyByZXBvcnQuCisKKwkgICAgUHJvdmlkZSBleHRyYSBpbmZvcm1hdGlvbiB0byB0aGUgbGVhc2UtY2hhbmdlIHNjcmlwdDogd2hlbgorCSAgICBhIGxlYXNlIGxvc2VzIGl0cyBob3N0bmFtZSAoYmVjYXVzZSBhIG5ldyBsZWFzZSBjb21lcworCSAgICBhbG9uZyBhbmQgY2xhaW1zIHRoZSBzYW1lIG5ldyksIHRoZSAib2xkIiBhY3Rpb24gaXMgY2FsbGVkIAorCSAgICB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBsZWFzZSwgaWUgbm8gbmFtZS4gVGhlCisJICAgIGNoYW5nZSBpcyB0byBwcm92aWRlIHRoZSBmb3JtZXIgbmFtZSB3aGljaCB0aGUgbGVhc2UgaGFkCisJICAgIGluIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBETlNNQVNRX09MRF9IT1NUTkFNRS4gVGhpcworCSAgICBoZWxwcyBzY3JpcHRzIHdoaWNoIGRvIHN0dWZmIGJhc2VkIG9uIGhvc3RuYW1lLCByYXRoZXIKKwkgICAgdGhhbiBJUCBhZGRyZXNzLiBBbHNvIHByb3ZpZGUgdmVuZG9yLWNsYXNzIGFuZCB1c2VyLWNsYXNzCisJICAgIGluZm9ybWF0aW9uIHRvIHRoZSBsZWFzZS1jaGFuZ2Ugc2NyaXB0IHdoZW4gYSBuZXcgbGVhc2UgaXMKKwkgICAgY3JlYXRlZCBpbiB0aGUgRE5TTUFTUV9WRU5ET1JfQ0xBU1MgYW5kCisJICAgIEROU01BU1FfVVNFUl9DTEFTUzxuPiBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIFN1Z2dlc3Rpb24gCisgICAgICAgICAgICBmcm9tIEZyYW5jb2lzLVhhdmllciBMZSBCYWlsLgorCisJICAgIFJ1biB0aGUgbGVhc2UgY2hhbmdlIHNjcmlwdCBhcyByb290LCBldmVuIHdoZW4gZG5zbWFzcSBpcworCSAgICBjb25maWd1cmVkIHRvIGNoYW5nZSBVSUQgdG8gYW4gdW5wcml2aWxlZ2VkIHVzZXIuIFNpbmNlCisJICAgIG1vc3QgdXNlcyBvZiB0aGUgbGVhc2UgY2hhbmdlIHNjcmlwdCBuZWVkIHJvb3QsIHRoaXMKKwkgICAgYWxsb3dzIGl0cyB1c2Ugd2hpbHN0IGtlZXBpbmcgdGhlIHNlY3VyaXR5IGFkdmFudGFnZXMgb2YKKwkgICAgcnVubmluZyB0aGUgZGFlbW9uIHdpdGhvdXQgcHJpdnMuIFRoZSBzY3JpcHQgaXMgaW52b2tlZAorCSAgICB2aWEgYSBzbWFsbCBoZWxwZXIgcHJvY2VzcyB3aGljaCBrZWVwcyByb290IFVJRCwgYW5kCisJICAgIHZhbGlkYXRlcyBhbGwgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBtYWluIHByb2Nlc3MuIFRvIGdldAorCSAgICByb290LCBhbiBhdHRhY2tlciB3b3VsZCBoYXZlIHRvIGJyZWFrIGRuc21hc3EgYW5kIHRoZW4KKwkgICAgYnJlYWsgdGhlIGhlbHBlciB0aHJvdWdoIHRoZSByZXN0cmljdGVkIGNvbW1zIGNoYW5uZWwgCisJICAgIGxpbmtpbmcgdGhlIHR3by4KKwkgICAgCisJICAgIEFkZCBjb250cmliL3BvcnQtZm9yd2FyZC8qIHdoaWNoIGlzIGEgc2NyaXB0IHRvIHNldCB1cCAKKwkgICAgcG9ydC1mb3J3YXJkcyB1c2luZyB0aGUgREhDUCBsZWFzZS1jaGFuZ2Ugc2NyaXB0LiBJdCdzCisJICAgIHBvc3NpYmxlIHRvIGFkZCBhIGhvc3QgdG8gYSBjb25maWcgZmlsZSBieSBuYW1lLCBhbmQgd2hlbgorCSAgICB0aGF0IGhvc3QgZ2V0cyBhIERIQ1AgbGVhc2UsIHRoZSBzY3JpcHQgd2lsbCB1c2UgaXB0YWJsZXMKKwkgICAgdG8gc2V0IHVwIHBvcnQtZm9yd2FyZHMgdG8gY29uZmlndXJlZCBwb3J0cyBhdCB0aGUgYWRkcmVzcworCSAgICB3aGljaCB0aGUgaG9zdCBpcyBhbGxvY2F0ZWQuIFRoZSBzY3JpcHQgYWxzbyBoYW5kbGVzCisJICAgIHNldHRpbmcgdXAgdGhlIHBvcnQtZm9yd2FyZCBpcHRhYmxlcyBlbnRyaWVzIGFmdGVyIHJlYm9vdCwKKwkgICAgdXNpbmcgdGhlIHBlcnNpc3RlbnQgbGVhc2UgZGF0YWJhc2UsIGFuZCByZW1vdmluZyB0aGVtCisJICAgIHdoZW4gYSBob3N0IGxlYXZlcyBhbmQgaXRzIERIQ1AgbGVhc2UgZXhwaXJlcy4KKworCSAgICBGaXggdW5hbGlnbmVkIGFjY2VzcyBwcm9ibGVtIHdoaWNoIGNhdXNlZCB3cm9uZyBsb2cKKwkgICAgbWVzc2FnZXMgd2l0aCBzb21lIGNsaWVudHMgb24gc29tZSBhcmNoaXRlY3R1cmVzLiBUaGFua3MKKwkgICAgdG8gRnJhbmNvaXMtWGF2aWVyIExlIEJhaWwgZm9yIHRoZSBidWdyZXBvcnQuCisKKwkgICAgRml4ZWQgcHJvYmxlbSB3aXRoIERIQ1BSRUxFQVNFIGFuZCBtdWx0aS1hZGRyZXNzCisJICAgIGludGVyZmFjZXMuIEVuaGFuY2VkIGNvbnRyaWIvd3J0L2RoY3BfcmVsZWFzZSB0byBjb3BlCisJICAgIHVuZGVyIHRoZXNlIGNpcmN1bXN0YW5jZXMgdG9vLiBUaGFua3MgdG8gRWxkb24gWmllZ2xlciBmb3IKKwkgICAgaW5wdXQgb24gdGhpcy4KKworCSAgICBVcGRhdGVkIEZyZW5jaCB0cmFuc2xhdGlvbjogdGhhbmtzIHRvIEdpbGRhcyBMZSBOYWRhbi4KKworCSAgICBVcGdyYWRlZCB0aGUgbmFtZSBoYXNoIGZ1bmN0aW9uIGluIHRoZSBETlMgY2FjaGUuIFRoYW5rcworCSAgICB0byBPbGVnIEtob3ZheWtvIGZvciBnb29kIHdvcmsgb24gdGhpcy4KKworCSAgICBBZGRlZCAtLWNsZWFyLW9uLXJlbG9hZCBmbGFnLiAgU3VnZ2VzdGlvbiBmcm9tIEpvaGFubmVzCisJICAgIFN0ZXplbmJhY2guCisKKwkgICAgVHJlYXQgYSBuYW1lc2VydmVyIGFkZHJlc3Mgb2YgMC4wLjAuMCBhcyAibm90aGluZyIuIEVyd2luIAorICAgICAgICAgICAgQ2FicmVyYSBzcG90dGVkIHRoYXQgc3BlY2lmeWluZyBhIG5hbWVzZXJ2ZXIgYXMgMC4wLjAuMCAKKwkgICAgYnJlYWtzIHRoaW5ncyBiYWRseTsgdGhpcyBpcyBiZWNhdXNlIHRoZSBuZXR3b3JrIHN0YWNrCisJICAgIHRyZWF0cyBpcyBhcyAidGhpcyBob3N0IiBhbmQgYW4gZW5kbGVzcyBsb29wIGVuc3Vlcy4KKwkJICAgCisgICAgICAgICAgICBBZGRlZCBXZWJtaW4gbW9kdWxlIGluIGNvbnRyaWIvd2VibWluLiBUaGFua3MgdG8gTmVpbAorICAgICAgICAgICAgRmlzaGVyIGZvciB0aGF0LgorCit2ZXJzaW9uIDIuMzUKKwkgICAgR2VuZXJhdGUgYW4gIm9sZCIgc2NyaXB0IGV2ZW50IHdoZW4gYSBjbGllbnQgZG9lcyBhIERIQ1BSRVFVRVNUCisJICAgIGluIElOSVQtUkVCT09UIG9yIFNFTEVDVElORyBzdGF0ZSBhbmQgdGhlIGxlYXNlIGFscmVhZHkKKwkgICAgZXhpc3RzLiBTdXBwbHkgdmVuZG9yIGFuZCB1c2VyIGNsYXNzIGluZm9ybWF0aW9uIHRvIHRoZXNlCisJICAgIHNjcmlwdCBjYWxscy4KKworCSAgICBBZGRlZCBzdXBwb3J0IGZvciBEcmFnb25mbHkgQlNEIHRvIHNyYy9jb25maWcuaAorCisJICAgIFJlbW92ZWQgIlVwZ3JhZGluZyB0byAyLjAiIGRvY3VtZW50LCB3aGljaCBpcyBhbmNpZW50CisJICAgIGhpc3Rvcnkgbm93LgorCisJICAgIFR3ZWFrIERIQ1AgbmV0d29ya2luZyBjb2RlIGZvciBCU0QsIGVzcCBPcGVuQlNELiBBZGRlZCBhIAorCSAgICB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBPcGVuQlNEIDQuMDogdGhlcmUgc2hvdWxkIGZpbmFsbHkKKyAgICAgICAgICAgIGJlIHN1cHBvcnQgZm9yIG11bHRpcGxlIGludGVyZmFjZXMgdW5kZXIgT3BlbkJTRCBub3cuCisJICAgIE5vdGUgdGhhdCBubyB2ZXJzaW9uIG9mIGRuc21hc3EgYmVmb3JlIDIuMzUgd2lsbCB3b3JrIGZvciAKKwkgICAgREhDUCB1bmRlciBPcGVuQlNEIDQuMCBiZWNhdXNlIG9mIGEga2VybmVsIGJ1Zy4KKwkgICAgVGhhbmtzIHRvIENsYXVkaW8gSmVrZXIsIEplYiBDYW1wYmVsbCBhbmQgQ3Jpc3RvYmFsIAorCSAgICBQYWxtZXIgZm9yIGhlbHAgd2l0aCB0aGlzLgorCisJICAgIE9wdGltaXNlZCB0aGUgY2FjaGUgY29kZSBmb3IgdGhlIGNhc2Ugb2YgbGFyZ2UKKwkgICAgL2V0Yy9ob3N0cy4gVGhpcyBpcyBtYWlubHkgdG8gcmVtb3ZlIHRoZSBPKG4tc3F1YXJlZCkKKwkgICAgYWxnb3JpdGhtIHdoaWNoIG1hZGUgcmVhZGluZyBsYXJnZSAoNTAwMDAgbGluZXMpIGZpbGVzIAorCSAgICBzbG93LCBidXQgaXQgYWxzbyB0YWtlcyBpbnRvIGFjY291bnQgdGhlIHNpemUgb2YgCisJICAgIC9ldGMvaG9zdHMgd2hlbiBidWlsZGluZyBoYXNoIHRhYmxlcywgc28gb3ZlcmFsbCAKKwkgICAgcGVyZm9ybWFuY2Ugc2hvdWxkIGJlIGJldHRlci4gVGhhbmtzIHRvICJrb2tvIiBmb3IgCisJICAgIHBvaW50aW5nIG91dCB0aGUgcHJvYmxlbS4KKwordmVyc2lvbiAyLjM2CisJICAgIEFkZGVkIC0tZGhjcC1pZ25vcmUtbmFtZXMgZmxhZyB3aGljaCB0ZWxscyBkbnNtYXNxIG5vdCB0bworCSAgICB1c2UgbmFtZXMgcHJvdmlkZWQgYnkgREhDUCBjbGllbnRzLiBTdWdnZXN0aW9uIGZyb20gCisJICAgIFRob21hcyBNIFN0ZWVuaG9sZHQuCisKKwkgICAgU2VuZCBuZXRtYXNrIGFuZCBicm9hZGNhc3QgYWRkcmVzcyBESENQIG9wdGlvbnMgYWx3YXlzLAorCSAgICBldmVuIGlmIHRoZSBjbGllbnQgZG9lc24ndCByZXF1ZXN0IHRoZW0uIFRoaXMgbWFrZXMgYSBmZXcKKwkgICAgb2RkIGNsaWVudHMgd29yayBiZXR0ZXIuCisKKwkgICAgQWRkZWQgc2ltcGxlIFRGVFAgZnVuY3Rpb24sIG9wdGltaXNlZCBmb3IgbmV0LWJvb3QuIEl0IGlzCisJICAgIG5vdyBwb3NzaWJsZSB0byBuZXQgYm9vdCBob3N0cyB1c2luZyBvbmx5IGRuc21hc3EuIFRoZQorCSAgICBURlRQIHNlcnZlciBpcyByZWFkLW9ubHksIGJpbmFyeS1tb2RlIG9ubHksIGFuZCBkZXNpZ25lZCB0byBiZQorCSAgICBzZWN1cmU7IGl0IGFkZHMgYWJvdXQgNEsgdG8gdGhlIGRuc21hc3EgYmluYXJ5LiAKKyAKKwkgICAgU3VwcG9ydCBESENQIG9wdGlvbiAxMjAsIFNJUCBzZXJ2ZXJzLCAoUkZDIDMzNjEpLiBCb3RoCisgICAgICAgICAgICBlbmNvZGluZ3MgYXJlIHN1cHBvcnRlZCwgc28gYm90aCAtLWRoY3Atb3B0aW9uPTEyMCwxOTIuMTY4LjIuMworICAgICAgICAgICAgYW5kCS0tZGhjcC1vcHRpb249MTIwLHNpcC5leGFtcGxlLm5ldCB3aWxsIHdvcmsuIEJyaWFuCisgICAgICAgICAgICBDYW5kbGVyIHBvaW50ZWQgb3V0IHRoZSBuZWVkIGZvciB0aGlzLgorCisJICAgIEFsbG93IHNwYWNlcyBpbiBkb21haW4gbmFtZXMsIHRvIHN1cHBvcnQgRE5TLVNELgorCisJICAgIEFkZCAtLXB0ci1yZWNvcmQgZmxhZywgYWdhaW4gZm9yIEROUy1TRC4gVGhhbmtzIHRvIFN0ZXBoYW4gCisJICAgIFNva29sb3cgZm9yIHRoZSBzdWdnZXN0aW9uLgorCSAgICAKKwkgICAgVG9sZXJhdGUgbGVhZGluZyBzcGFjZSBvbiBsaW5lcyBpbiB0aGUgY29uZmlnIGZpbGUuIFRoYW5rcworCSAgICB0byBMdWlnaSBSaXp6byBmb3IgcG9pbnRpbmcgdGhpcyBvdXQuCisKKwkgICAgRml4ZWQgbmV0bGluay5jIHRvIGNvcGUgd2l0aCBoZWFkZXJzIGZyb20gdGhlIExpbnV4IDIuNi4xOQorCSAgICBrZXJuZWwuIFRoYW5rcyB0byBQaGlsaXAgV2FsbCBmb3IgdGhlIGJ1ZyByZXBvcnQuCisKKwkgICAgQWRkZWQgLS1kaGNwLWJyaWRnZSBvcHRpb24sIGJ1dCBvbmx5IHRvIHRoZSBGcmVlQlNECisJICAgIGJ1aWxkLiBUaGlzIGZpeGVzIGFuIG9kZGl0eSB3aXRoIGEgYSBwYXJ0aWN1bGFyIGJyaWRnZWQKKwkgICAgbmV0d29yayBjb25maWd1cmF0aW9uIG9uIEZyZWVCU0QuIFRoYW5rcyB0byBMdWlnaSBSaXp6bworCSAgICBmb3IgdGhlIHBhdGNoLgorCisJICAgIEFkZGVkIEZBUSBlbnRyeSBhYm91dCBydW5uaW5nIGRuc21hc3EgaW4gYSBMaW51eAorCSAgICB2c2VydmVyLiBUaGFua3MgdG8gR2lsZGFzIGxlIE5hZGFuIGZvciB0aGUgaW5mb3JtYXRpb24uICAKKworCSAgICBGaXhlZCBwcm9ibGVtIHdpdGggb3B0aW9uIHBhcnNpbmcgd2hpY2ggaW50ZXJwcmV0ZWQgIi8iIGFzCisJICAgIGFuIGFkZHJlc3MgYW5kIG5vdCBhIHN0cmluZy4gVGhhbmtzIHRvIEx1aWdpIFJpenpvCisJICAgIGZvciB0aGUgcGF0Y2guCisKKwkgICAgSWdub3JlIHRoZSAtLWRvbWFpbi1uZWVkZWQgZmxhZyB3aGVuIGZvcndhcmRpbmcgTlMKKwkgICAgYW5kIFNPQSBxdWVyaWVzLCBzaW5jZSBOUyBxdWVyaWVzIG9mIFRMRHMgYXJlIGFsd2F5cyBsZWdpdC4KKwkgICAgTWFyY3VzIEJldHRlciBwb2ludGVkIG91dCB0aGlzIHByb2JsZW0uCisKKwkgICAgVGFrZSBjYXJlIHRvIGZvcndhcmQgc2lnbmVkIEROUyByZXF1ZXN0cyBiaXQtcGVyZmVjdCwgc28KKwkgICAgYXMgbm90IHRvIGFmZmVjdCB0aGUgdmFsaWRpdHkgb2YgdGhlIHNpZ25hdHVyZS4gVGhpcworCSAgICBzaG91bGQgYWxsb3cgREROUyB1cGRhdGVzIHRvIGJlIGZvcndhcmRlZC4KKwordmVyc2lvbiAyLjM3CisgICAgICAgICAgICBBZGQgYmV0dGVyIHN1cHBvcnQgZm9yIFJGQy0yODU1IERIQ1Atb3Zlci1maXJld2lyZSBhbmQgUkZDCisgICAgICAgICAgIC00MzkwIERIQ1Atb3Zlci1JbmZpbmlCYW5kLiBBIGdvb2Qgc3VnZ2VzdGlvbiBmcm9tIEthcmwgU3ZlYy4KKworCSAgICBTb21lIGVmZmljaWVuY3kgdHdlYWtzIHRvIHRoZSBjYWNoZSBjb2RlIGZvciB2ZXJ5IGxhcmdlCisJICAgIC9ldGMvaG9zdHMgZmlsZXMuIFNob3VsZCBpbXByb3ZlIHJldmVyc2UgKGFkZHJlc3MtPm5hbWUpCisJICAgIGxvb2t1cHMgYW5kIGdhcmJhZ2UgY29sbGVjdGlvbi4gVGhhbmtzIHRvIEphbiAnUmVkQnVsbHknCisJICAgIFNlaWZmZXJ0IGZvciBpbnB1dCBvbiB0aGlzLgorCisJICAgIEZpeCByZWdyZXNzaW9uIGluIDIuMzYgd2hpY2ggbWFkZSBib2d1cy1ueGRvbWFpbgorCSAgICBhbmQgRE5TIGNhY2hpbmcgdW5yZWxpYWJsZS4gVGhhbmtzIHRvIERlbm5pcyBEZURvbmF0aXMKKwkgICAgYW5kIEphbiBTZWlmZmVydCBmb3IgYnVnIHJlcG9ydHMuCisKKwkgICAgTWFrZSBESENQIGVuY2Fwc3VsYXRlZCB2ZW5kb3ItY2xhc3MJb3B0aW9ucyBzYW5lLiBCZQorCSAgICB3YXJuZWQgdGhhdCBzb21lIGNvbmNlaXZhYmxlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb25zIAorCSAgICB1c2luZyB0aGVzZSBtYXkgYnJlYWssIGJ1dCB0aGV5IHdvcmsgaW4gYSBtdWNoIAorCSAgICBzaW1wbGVyIGFuZCBtb3JlIGxvZ2ljYWwgd2F5IG5vdy4gUHJlcGVuZGluZworCSAgICAidmVuZG9yOjxjbGllbnQtaWQ+IiB0byBhbiBvcHRpb24gZW5jYXBzdWxhdGVzIGl0IAorCSAgICBpbiBvcHRpb24gNDMsIGFuZCB0aGUgb3B0aW9uIGlzIHNlbnQgb25seSBpZiB0aGUgCisJICAgIGNsaWVudC1zdXBwbGllZCB2ZW5kb3ItY2xhc3Mgc3Vic3RyaW5nLW1hdGNoZXMgd2l0aCAKKwkgICAgdGhlIGdpdmVuIGNsaWVudC1pZC4gVGhhbmtzIHRvIERlbm5pcyBEZURvbmF0aXMgZm9yIAorCSAgICBoZWxwIHdpdGggdGhpcy4KKworCSAgICBBcHBseSBwYXRjaCBmcm9tIEphbiBTZWlmZmVydCB0byB0aWR5IHVwIHRmdHAuYworCisJICAgIEFkZCBzdXBwb3J0IGZvciBvdmVybG9hZGluZyB0aGUgZmlsZW5hbWUgYW5kIHNlcnZlcm5hbWUgCisJICAgIGZpZWxkcyBpbiBESENQIHBhY2tldC4gVGhpcyBnaXZlcyBleHRyYSBvcHRpb24tc3BhY2Ugd2hlbgorCSAgICB0aGVzZSBmaWVsZHMgYXJlIG5vdCBiZWluZyB1c2VkIG9yIHdpdGggYSBtb2Rlcm4gY2xpZW50CisJICAgIHdoaWNoIHN1cHBvcnRzIG1vdmluZyB0aGVtIGludG8gb3B0aW9ucy4KKworCSAgICBBZGRlZCBhIExJTUlUUyBzZWN0aW9uIHRvIHRoZSBtYW4tcGFnZSwgd2l0aCBndWlkYW5jZSBvbgorCSAgICBtYXhpbXVtIG51bWJlcnMgb2YgY2xpZW50cywgZmlsZSBzaXplcyBhbmQgdHVuaW5nLgorCityZWxlYXNlIDIuMzgKKwkgICAgRml4IGNvbXBpbGF0aW9uIG9uICpCU0QuIFRoYW5rcyB0byBUb20gSGVuc2VsLgorCisJICAgIERvbid0IHNlbmQgbGVuZ3RoIHplcm8gREhDUCBvcHRpb24gNDMgYW5kIGNvcGUgd2l0aCAKKwkgICAgZW5jYXBzdWxhdGVkIG9wdGlvbnMgd2hvc2UgdG90YWwgbGVuZ3RoIGV4Y2VlZHMgMjU1IG9jdGV0cworCSAgICBieSBzcGxpdHRpbmcgdGhlbSBpbnRvIG11bHRpcGxlIG9wdGlvbiA0MyBwaWVjZXMuCisKKwkgICAgQXZvaWQgcXVlcmllcyBiZWluZyByZXRyaWVkIGZvcmV2ZXIgd2hlbiAtLXN0cmljdC1vcmRlciBpcworCSAgICBzZXQgYW5kIGFuIHVwc3RyZWFtIHNlcnZlciByZXR1cm5zIGEgU0VSVkZBSUwKKwkgICAgZXJyb3IuIFRoYW5rcyB0byBKb2hhbm5lcyBTdGV6ZW5iYWNoIGZvciBzcG90dGluZyB0aGlzLgorCisJICAgIEZpeCBCT09UUCBzdXBwb3J0LCBicm9rZW4gaW4gdmVyc2lvbiAyLjM3LgorCisJICAgIEFkZCBleGFtcGxlIGRoY3Atb3B0aW9ucyBmb3IgRXRoZXJib290LgorCisJICAgIEFkZCBcZSAoZm9yIEFTQ0lJIEVTQ2FwZSkgdG8gdGhlIHNldCBvZiB2YWxpZCBlc2NhcGVzCisJICAgIGluIGNvbmZpZy1maWxlIHN0cmluZ3MuCisKKwkgICAgQWRkZWQgLS1kaGNwLW9wdGlvbi1mb3JjZSBmbGFnIGFuZCBleGFtcGxlcyBpbiB0aGUKKwkgICAgY29uZmlndXJhdGlvbiBmaWxlIHdoaWNoIHVzZSB0aGlzIHRvIGNvbnRyb2wgUFhFTGludXguCisKKwkgICAgQWRkZWQgLS10ZnRwLW5vLWJsb2Nrc2l6ZSBvcHRpb24uCisKKwkgICAgU2V0IG5ldGlkIHRhZyAiYm9vdHAiIHdoZW4gQk9PVFAgKHJhdGhlciB0aGFuIERIQ1ApIGlzIGluCisJICAgIHVzZS4gVGhpcyBtYWtlcyBpdCBlYXN5IHRvIGN1c3RvbWlzZSB3aGljaCBvcHRpb25zIGFyZQorCSAgICBzZW50IHRvIEJPT1RQIGNsaWVudHMuIChCT09UUCBhbGxvd3Mgb25seSA2NCBvY3RldHMgZm9yCisJICAgIG9wdGlvbnMsIHNvIGl0IGNhbiBiZSBuZWNlc3NhcnkgdG8gdHJpbSB0aGluZ3MuKQorCisJICAgIEZpeCByYXJlIGhhbmcgaW4gY2FjaGUgY29kZSwgYSAyLjM3IHJlZ3Jlc3Npb24uIFRoaXMKKwkgICAgcHJvYmFibHkgbmVlZHMgYW4gaW5maW5pdGUgREhDUCBsZWFzZSBhbmQgc29tZSBiYWQgbHVjayB0bworCSAgICB0cmlnZ2VyLiBUaGFua3MgdG8gRGV0bGVmIFJlaWNoZWx0IGZvciBidWcgcmVwb3J0cyBhbmQgdGVzdGluZy4KKworcmVsZWFzZSAyLjM5CisJICAgIEFwcGx5IHBhdGNoIGZyb20gTWlrZSBCYWtlci9PcGVuV1JUIHRvIGVuc3VyZSB0aGF0IG5hbWVzCisJICAgIGxpa2UgImxvY2FsaG9zdC4iIGluIC9ldGMvaG9zdHMgd2l0aCB0cmFpbGluZyBwZXJpb2QgCisJICAgIGFyZSB0cmVhdGVkIGFzIGZ1bGx5LXF1YWxpZmllZC4KKworCSAgICBUb2xlcmF0ZSBhbmQgaWdub3JlIHNwYWNlcyBhcm91bmQgY29tbWFzIGluIHRoZQorCSAgICBjb25maWd1cmF0aW9uIGZpbGUgaW4gYWxsIGNpcmN1bXN0YW5jZXMuIE5vdGUgdGhhdCB0aGlzCisJICAgIG1heSBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgYSBmZXcgZXhpc3RpbmcgY29uZmlnIGZpbGVzLCBmb3IKKwkgICAgaW5zdGFuY2UKKwkgICAgdHh0LXJlY29yZD1teWRvbWFpbi5jb20sIHN0cmluZworCSAgICB3b3VsZCBoYXZlIGEgbGVhZGluZyBzcGFjZSBpbiB0aGUgc3RyaW5nIGJlZm9yZSwgYW5kIG5vdworCSAgICB3aWxsIG5vdC4gVG8gZ2V0IHRoZSBvbGQgYmVoYXZpb3VyIGJhY2ssIHVzZSBxdW90ZXM6CisJICAgIHR4dC1yZWNvcmQ9bXlkb21haW4uY29tLCIgc3RyaW5nIgorCisJICAgIC9hIGlzIG5vIGxvbmdlciBhIHZhbGlkIGVzY2FwZSBpbiBxdW90ZWQgc3RyaW5ncy4KKworCSAgICBBZGRlZCBzeW1ib2xpYyBESENQIG9wdGlvbiBuYW1lcy4gSW5zdGVhZCBvZgorCSAgICBkaGNwLW9wdGlvbiA9IDMsIDEuMi4zLjQgCisJICAgIGl0IGlzIG5vdyBwb3NzaWJsZSB0byBkbworCSAgICBkaGNwLW9wdGlvbiA9IG9wdGlvbjpyb3V0ZXIsIDEuMi4zLjQKKwkgICAgVG8gc2VlIHRoZSBsaXN0IG9mIGtub3duIERIQ1Agb3B0aW9ucywgdXNlIHRoZSAKKyAgICAgICAgICAgIGNvbW1hbmQgImRuc21hc3EgLS1oZWxwIGRoY3AiCisJICAgIFRoYW5rcyB0byBMdWlnaSBSaXp6byBmb3IgYSBwYXRjaCBhbmQgZ29vZCB3b3JrIG9uIHRoaXMuCisKKwkgICAgT3ZlcmhhdWxlZCB0aGUgbG9nIGNvZGUgc28gdGhhdCBsb2dnaW5nIGNhbiBiZSBhc3luY2hyb25vdXM7IAorCSAgICBkbnNtYXNxIHRoZW4gbm8gbG9uZ2VyIGJsb2NrcyB3YWl0aW5nIGZvciB0aGUgc3lzbG9nKCkgbGlicmFyeQorCSAgICBjYWxsLiBUaGlzIGlzIGltcG9ydGFudCBvbiBzeXN0ZW1zIHdoZXJlIHN5c2xvZworCSAgICBpcyBiZWluZyB1c2VkIHRvIGxvZyBvdmVyIHRoZSBuZXR3b3JrIChhbmQgdGhlcmVmb3JlIGRvaW5nCisJICAgIEROUyBsb29rdXBzKSBhbmQgc3lzbG9nIGlzIHVzaW5nIGRuc21hc3EgYXMgaXRzIEROUworCSAgICBzZXJ2ZXIuIEhhdmluZyBkbnNtYXNxIGJsb2NrIGF3YWl0aW5nIHN5c2xvZyB1bmRlciAKKwkgICAgc3VjaCBjaXJjdW1zdGFuY2VzIGNhbiBsZWFkIHRvIHN5c2xvZyBhbmQgZG5zbWFzcSAKKwkgICAgZGVhZGxvY2tpbmcuIFRoZSBuZXcgYmVoYXZpb3VyIGlzIGVuYWJsZWQgd2l0aCBhIG5ldworCSAgICAgLS1sb2ctYXN5bmMgZmxhZywgd2hpY2ggY2FuIGFsc28gYmUgdXNlZCB0byB0dW5lIHRoZQorCSAgICBxdWV1ZSBsZW5ndGguIFBhdWwgQ2hhbWJlcnMgZm91bmQgYW5kIGRpYWdub3NlZCAKKwkgICAgdGhpcyB0cmFwIGZvciB0aGUgdW53YXJ5LiBIZSBhbHNvIGRpZCBtdWNoIHRlc3Rpbmcgb2YgCisJICAgIHRoZSBzb2x1dGlvbiBhbG9uZyB3aXRoIENhcmxvcyBDYXJ2YWxoby4KKworCSAgICAtLWxvZy1mYWNpbGl0eSBjYW4gbm93IHRha2UgYSBmaWxlLW5hbWUgaW5zdGVhZCBvZiBhIAorCSAgICBmYWNpbGl0eSBuYW1lLiBXaGVuIHRoaXMgaXMgZG9uZSwgZG5zbWFzcSBsb2dzIHRvIHRoZSAKKwkgICAgZmlsZSBhbmQgbm90IHZpYSBzeXNsb2cuIChGYWlsdXJlcyBlYXJseSBpbiBzdGFydHVwLCAKKwkgICAgd2hpbHN0IHJlYWRpbmcgY29uZmlndXJhdGlvbiwgd2lsbCBzdGlsbCBnbyB0byBzeXNsb2csIAorCSAgICBhbmQgc3lzbG9nIGlzIHVzZWQgYXMgYSBsb2ctb2YtbGFzdC1yZXNvcnQgaWYgdGhlIGZpbGUKKwkgICAgY2Fubm90IGJlIHdyaXR0ZW4uKQorCisJICAgIEFkZGVkIC0tbG9nLWRoY3AgZmxhZy4gU3VnZ2VzdGlvbiBmcm9tIENhcmxvcyBDYXJ2YWxoby4KKworCSAgICBNYWRlIEJJTkRJUiwgTUFORElSIGFuZCBMT0NBTEVESVIgaW5kZXBlbmRlbnRseQorCSAgICBvdmVyLXJpZGVhYmxlIGluIHRoZSBtYWtlZmlsZS4gU3VnZ2VzdGlvbiBmcm9tIFRob21hcworCSAgICBLbGF1c25lci4KKworCSAgICBBZGRlZCAxMjcuMC4wLjAvOCBhbmQgMTY5LjI1NC4wLjAvMTYgdG8gdGhlIGFkZHJlc3MKKwkgICAgcmFuZ2VzIGFmZmVjdGVkIGJ5IC0tYm9ndXMtcHJpdi4gVGhhbmtzIHRvICBQYXVsIAorCSAgICBDaGFtYmVycyBmb3IgdGhlIHBhdGNoLgorCisJICAgIEZpeGVkIGZhaWx1cmUgb2YgVEZUUCBzZXJ2ZXIgd2l0aCAtLWxpc3Rlbi1hZGRyZXNzLiBUaGFua3MKKwkgICAgdG8gV2lsbGlhbSBEaW5rZWwgZm9yIHRoZSBidWcgcmVwb3J0LgorCisJICAgIEFkZGVkIC0tZGhjcC1jaXJjdWl0aWQgYW5kIC0tZGhjcC1yZW1vdGVpZCBmb3IgUkZDMzA0NgorCSAgICByZWxheSBhZ2VudCBkYXRhIG1hdGNoaW5nLgorIAorCSAgICBBZGRlZCAtLWRoY3Atc3Vic2NyaWQgZm9yIFJGQzM5OTMgc3Vic2NyaWJlci1pZCByZWxheQorCSAgICBhZ2VudCBkYXRhIG1hdGNoaW5nLgorCisJICAgIENvcnJlY3RseSBnYXJiYWdlLWNvbGxlY3QgY29ubmVjdGlvbnMgd2hlbiB1cHN0cmVhbQorCSAgICBzZXJ2ZXJzIGdvIGF3YXkgYXMgYSByZXN1bHQgb2YgREJ1cyB0cmFuc2FjdGlvbnMuCisKKwkgICAgQWxsb3cgYWJzb2x1dGUgcGF0aHMgZm9yIFRGVFAgdHJhbnNmZXJzIGV2ZW4gd2hlbgorCSAgICAtLXRmdHAtcm9vdCBpcyBzZXQsIGFzIGxvbmcgYXMgdGhlIHBhdGggbWF0Y2hlcyB0aGUgcm9vdCwKKwkgICAgc28gL3Zhci9mdHAvbXlmaWxlIGlzIE9LIHdpdGggdGZ0cC1yb290PS92YXIvZnRwLgorCSAgICBUaGFua3MgZm9yIFRob21hcyBNaXp6aSBmb3IgdGhlIHBhdGNoLgorCisJICAgIFVwZGF0ZWQgU3BhbmlzaCB0cmFuc2xhdGlvbiAtIHRoYW5rcyB0byBDaHJpcyBDaGF0aGFtLgorCisJICAgIFVwZGF0ZWQgRnJlbmNoIHRyYW5zbGF0aW9uIC0gdGhhbmtzIHRvIEdpbGRhcyBMZSBOYWRhbi4KKworCSAgICBBZGRlZCB0byBleGFtcGxlIGNvbmYgZmlsZSBleGFtcGxlIG9mIHJvdXRpbmcgUFRSIHF1ZXJpZXMKKwkgICAgZm9yIGEgc3VibmV0IHRvIGEgZGlmZmVyZW50IG5hbWVzZXJ2ZXIuIFN1Z2dlc3Rpb24gZnJvbQorCSAgICBKb24gTmljaG9sc29uLgorCisJICAgIEFkZGVkIC0taW50ZXJmYWNlLW5hbWUgb3B0aW9uLiBUaGlzIHByb3ZpZGVzIGEgZmFjaWxpdHkgCisJICAgIHRvIGFkZCBhIGRvbWFpbiBuYW1lIHdpdGggYSBkeW5hbWljIElQIGFkZHJlc3MgdGFrZW4gZnJvbQorCSAgICB0aGUgYWRkcmVzcyBvZiBhIGxvY2FsIG5ldHdvcmsgaW50ZXJmYWNlLiBVc2VmdWwgZm9yCisJICAgIG5ldHdvcmtzIHdpdGggZHluYW1pYyBJUHMuCisKK3ZlcnNpb24gMi40MAorICAgICAgICAgICAgTWFrZSBTSUdVU1IyIGNsb3NlLWFuZC1yZW9wZW4gdGhlIGxvZ2ZpbGUgd2hlbiBsb2dnaW5nIAorCSAgICBkaXJlY3QgdG8gYSBmaWxlLiBUaGFua3MgdG8gQ2FybG9zIENhcnZhbGhvIGZvciAKKwkgICAgc3VnZ2VzdGluZyB0aGlzLiBXaGVuIGEgbG9nZmlsZSBpcyBjcmVhdGVkLCBjaGFuZ2UKKwkgICAgaXRzIG93bmVyc2hpcCB0byB0aGUgdXNlciBkbnNtYXNxIHdpbGwgcnVuIGFzLCBkb24ndAorCSAgICBsZWF2ZSBpdCBvd25lZCBieSByb290LgorCisJICAgIFNldCBhIHNwZWNpYWwgdGFnLCAia25vd24iIGZvciBob3N0cyB3aGljaCBhcmUgbWF0Y2hlZCBieQorCSAgICBhIGRoY3AtaG9zdCBvciAvZXRjL2V0aGVycyBsaW5lLiBUaGlzIGlzIGVzcGVjaWFsbHkKKwkgICAgdXNlZnVsIHRvIGJlIGFibGUgdG8gZG8gLS1kaGNwLWlnbm9yZT0ja25vd24sIGxpa2UgSVNDcworCSAgICAiZGVueSB1bmtub3duLWNsaWVudHMiLgorCisJICAgIEV4cGxpY2l0bHkgc2V0IGEgdW1hc2sgYmVmb3JlIGNyZWF0aW5nIHRoZSBsZWFzZXMgZmlsZSwKKwkgICAgcmF0aGVyIHRoYW4gcmVseWluZyBvbiB3aGF0ZXZlciB3ZSBpbmhlcml0ZWQuIFRoZQorCSAgICBwZXJtaXNzaW9ucwlhcmUgc2V0IHRvIDY0NC4KKworCSAgICBGaXggaGFuZGxpbmcgb2YgZnVsbHktcXVhbGlmaWVkIG5hbWVzIGluIC0tZGhjcC1ob3N0CisJICAgIGRpcmVjdGl2ZXMgYW5kIGluIC9ldGMvZXRoZXJzLiBUaGVzZSBhcmUgbm93IHJlamVjdGVkIAorCSAgICBpZiB0aGUgZG9tYWluIGRvZXNuJ3QgbWF0Y2ggdGhhdCBnaXZlbiBieSAtLWRvbWFpbiwJICAKKwkgICAgYW5kIHVzZWQgY29ycmVjdGx5IG90aGVyd2lzZS4gQmVmb3JlLCBwdXR0aW5nCisJICAgIGEgRlFETiBoZXJlIGNvdWxkIGNhdXNlIHRoZSB3aG9sZSBGUUROIHRvIGJlIHVzZWQgYXMKKwkgICAgaG9zdG5hbWUuIFRoYW5rcyB0byBNaWNoYWVsIEhlaW1wb2xkIGZvciB0aGUgYnVnIHJlcG9ydC4KKworCSAgICBNYXNzaXZlIGJ1dCB0cml2aWFsIGVkaXQgdG8gbWFrZSB0aGUgImRhZW1vbiIgdmFyaWFibGUgCisJICAgIGdsb2JhbCwgaW5zdGVhZCBvZiBjb3B5aW5nIHRoZSBzYW1lIHZhbHVlIGFyb3VuZCBhcyB0aGUKKwkgICAgZmlyc3QgYXJndW1lbnQgdG8gaGFsZiB0aGUgZnVuY3Rpb25zIGluIHRoZSBwcm9ncmFtLgorCSAgICAKKwkgICAgVXBkYXRlZCBTcGFuaXNoIG1hbnBhZ2UgYW5kIG1lc3NhZ2UgY2F0YWxvZy4gVGhhbmtzIAorCSAgICB0byBDaHJpcyBDaGF0aGFtLgorCSAgICAKKwkgICAgQWRkZWQgcGF0Y2ggZm9yIHN1cHBvcnQgb2YgRE5TIExPQyByZWNvcmRzIGluCisJICAgIGNvbnRyaWIvZG5zLWxvYy4gVGhhbmtzIHRvIExvcmVueiBTY2hvcmkuCisKKwkgICAgRml4ZWQgZXJyb3IgaW4gbWFucGFnZTogZGhjcC1pZ25vcmUtbmFtZSAtPgorCSAgICBkaGNwLWlnbm9yZS1uYW1lcy4gVGhhbmtzIHRvIERhbmllbCBNZW50eiBmb3Igc3BvdHRpbmcKKwkgICAgdGhpcy4KKworCSAgICBVc2UgY2xpZW50LWlkIGFzIGhhc2gtc2VlZCBmb3IgREhDUCBhZGRyZXNzIGFsbG9jYXRpb24KKwkgICAgd2l0aCBGaXJld2lyZSBhbmQgSW5maW5pYmFuZCwgYXMgdGhlc2UgZG9uJ3Qgc3VwcGx5IGFuIE1BQworCSAgICBhZGRyZXNzLiAKKworCSAgICBUd2Vha2VkIFRGVFAgZmlsZS1vcGVuIGNvZGUgdG8gbWFrZSBpdCBiZWhhdmUgc2Vuc2libHkKKwkgICAgd2hlbiB0aGUgZmlsZXN5c3RlbSBjaGFuZ2VzIHVuZGVyIGl0cyBmZWV0LgorCisJICAgIEFkZGVkIEROU01BU1FfVElNRV9SRU1BSU5JTkcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIAorCSAgICBsZWFzZS1zY3JpcHQuCisKKwkgICAgQWx3YXlzIHNlbmQgcmVwbGllcyB0byBESENQSU5GT1JNIHJlcXVlc3RzIHRvIHRoZSBzb3VyY2UKKwkgICAgb2YgdGhlIHJlcXVlc3QgYW5kIG5vdCB0byB0aGUgYWRkcmVzcyBpbiBjaWFkZHIuIFRoaXMKKwkgICAgYWxsb3dzIHRoaXJkLXBhcnR5IHF1ZXJpZXMuCisJICAgIAorCSAgICBSZXR1cm4gImxlYXNlIHRpbWUgcmVtYWluaW5nIiBpbiB0aGUgcmVwbHkgdG8gYSBESENQSU5GT1JNCisJICAgIHJlcXVlc3QgaWYgdGhlcmUgZXhpc3RzIGEgbGVhc2UgZm9yIHRoZSBob3N0IHNlbmRpbmcgdGhlCisJICAgIHJlcXVlc3QuCisKKwkgICAgQWRkZWQgLS1kaGNwLWhvc3RzZmlsZSBvcHRpb24uIFRoaXMgZ2l2ZXMgYSBzdXBlcnNldCBvZgorCSAgICB0aGUgZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSAvZXRjL2V0aGVycy4gVGhhbmtzIHRvIAorCSAgICBHcmVnIEt1cnR6ZXIgZm9yIHRoZSBzdWdnZXN0aW9uLgorCisJICAgIEFjY2VwdCBrZXl3b3JkICJzZXJ2ZXIiIGFzIGEgc3lub255bSBmb3IgIm5hbWVzZXJ2ZXIiIGluIAorCSAgICByZXNvbHYuY29uZi4gVGhhbmtzIHRvIEFuZHJldyBCYXJ0bGV0dCBmb3IgdGhlIHJlcG9ydC4KKworCSAgICBBZGQgLS10ZnRwLXVuaXF1ZS1yb290IG9wdGlvbi4gU3VnZ2VzdGlvbiBmcm9tIERlcm1vdAorCSAgICBCcmFkbGV5LgorCisJICAgIFR3ZWFrIFRGVFAgcmV0cnkgdGltZXIgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBkaWZmaWN1bHQKKwkgICAgY2xpZW50cy4gVGhhbmtzIHRvIERlcm1vdCBCcmFkbGV5IGZvciBhc3Npc3RhbmNlIHdpdGgKKwkgICAgdGhpcy4gCisJICAgIAorCSAgICBDb250aW51ZSB0byB1c2UgdW5xdWFsaWZpZWQgaG9zdG5hbWVzIHByb3ZpZGVkIGJ5IERIQ1AKKwkgICAgY2xpZW50cywgZXZlbiBpZiB0aGUgZG9tYWluIHBhcnQgaXMgaWxsZWdhbC4gKFRoZSBkb21haW4KKwkgICAgaXMJaWdub3JlZCwgYW5kIGFuIGVycm9yIGxvZ2dlZC4pIFByZXZpb3VzbHkgaW4gdGhpcworCSAgICBzaXR1YXRpb24sIHRoZSB3aG9sZSBuYW1lIHdob3VsZCBoYXZlIGJlZW4KKwkgICAgcmVqZWN0ZWQuIFRoYW5rcyB0byBKaW1hIGZvciB0aGUgcGF0Y2guCisJICAgIAorCSAgICBIYW5kbGUgRUlOVFIgcmV0dXJucyBmcm9tIHdhaXQoKSBjb3JyZWN0bHkgYW5kIHJlYXAKKwkgICAgb3VyIGNoaWxkcmVuJ3MgY2hpbGRyZW4gaWYgbmVjZXNzYXJ5LiBUaGlzIGZpeGVzIAorCSAgICBhIHByb2JsZW0gd2l0aCB6b21iaWUtY3JlYXRpb24gdW5kZXIgKkJTRCB3aGVuIHVzaW5nCisJICAgIC0tZGhjcC1zY3JpcHQuCisKKwkgICAgRXNjYXBlIHNwYWNlcyBpbiBob3N0bmFtZXMgd2hlbiB0aGV5IGFyZSBzdG9yZWQgaW4gdGhlCisJICAgIGxlYXNlcyBmaWxlIGFuZCBwYXNzZWQgdG8gdGhlIGxlYXNlLWNoYW5nZQorCSAgICBzY3JpcHQuIFN1Z2dlc3Rpb24gZnJvbSBCZW4gVm9pZ3QuCisKKwkgICAgUmUtcnVuIHRoZSBsZWFzZSBjaGFtZ2Ugc2NyaXB0IHdpdGggYW4gIm9sZCIgZXZlbnQgZm9yCisJICAgIGVhY2ggbGVhc2Ugd2hlbiBkbnNtYXNxIHJlY2VpdmVzIGEgU0lHSFVQLgorCisJICAgIEFkZGVkIG1vcmUgdXNlZnVsIGV4aXQgY29kZXMsIGluY2x1ZGluZyBwYXNzaW5nIG9uIGEKKwkgICAgbm9uLXplcm8gZXhpdCBjb2RlIGZyb20gdGhlIGxlYXNlLXNjcmlwdCAiaW5pdCIgY2FsbCB3aGVuCisJICAgIC0tbGVhc2VmaWxlLXJvIGlzIHNldC4KKworCSAgICBMb2cgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSB3aGlsc3QgdGhlIGRhZW1vbiBpcworCSAgICBydW5uaW5nLiBBbGxvY2F0aW9uIGZhaWx1cmVzIGR1cmluZyBzdGFydHVwIGFyZSBmYXRhbCwgCisJICAgIGJ1dCBsYWNrIG9mIG1lbW9yeSB3aGlsc3QgcnVubmluZyBpcyB3b3JrZWQgYXJvdW5kLgorCSAgICBUaGlzIHVzZWQgdG8gYmUgc2lsZW50LCBidXQgbm93IGlzIGxvZ2dlZC4KKworCSAgICBGaXhlZCBtaXNhbGlnbmVkIG1lbW9yeSBhY2Nlc3Mgd2hpY2ggY2F1c2VkIHByb2JsZW1zIG9uCisJICAgIEJsYWNrZmluIENQVXMuIFRoYW5rcyB0byBBbGV4IExhbmRhdSBmb3IgdGhlIHBhdGNoLgorCisJICAgIERvbid0IGluY2x1ZGUgKHVzZWxlc3MpIHNjcmlwdC1jYWxsaW5nIGNvZGUgd2hlbiBOT19GT1JLCisJICAgIGlzIHNldC4gU2luY2UgdGhpcyB0ZW5kcyB0byBiZSB1c2VkIG9uIHZlcnkgc21hbGwgdWNsaW51eCAKKwkgICAgc3lzdGVtcywgaXQncyB3b3J0aC13aGlsZSB0byBzYXZlIHNvbWUgY29kZS1zaXplLgorCisJICAgIERvbid0IHNldCBSRVVTRUFERFIgb24gVEZUUCBsaXN0ZW5pbmcgc29ja2V0LiBUaGVyZSdzIG5vCisJICAgIG5lZWQgdG8gZG8gc28sIGFuZCBpdCBjcmVhdGVzIGNvbmZ1c2luZyBiZWhhdmlvdXIgd2hlbgorCSAgICBpbmV0ZCBpcyBhbHNvIGxpc3RlbmluZyBvbiB0aGUgc2FtZSBwb3J0LiBUaGFua3MgdG8gRXJpaworCSAgICBCcm93biBmb3Igc3BvdHRpbmcgdGhlIHByb2JsZW0uCisKK3ZlcnNpb24gMi40MQorICAgICAgICAgICAgUmVtb3ZlIGRlcHJlY2F0ZWQgY2FsbHMgd2hlbiBjb21waWxlZCBhZ2FpbnN0IGxpYmRidXMgMS4xLgorCSAgICAKKwkgICAgRml4ICJzdHJpY3QtYWxpYXMiIHdhcm5pbmcgaW4gYnBmLmMKKworCSAgICBSZWR1Y2UgZGVwZW5kZW5jeSBvbiBHbnUtbWFrZSBpbiBidWlsZCBzeXN0ZW06IGRuc21hc3Egbm93CisJICAgIGJ1aWxkcyB3aXRoIHN5c3RlbSBtYWtlIHVuZGVyIE9wZW5CU0QuCisKKwkgICAgUG9ydCB0byBTb2xhcmlzLiBEbnNtYXNxIDEueCB1c2VkIHRvIHJ1biB1bmRlciBTb2xhcmlzLAorCSAgICBhbmQgdGhpcyByZWxlYXNlIGRvZXMgc28gYWdhaW4sIGZvciBTb2xhcmlzIDkgb3IgYmV0dGVyLgorCisJICAgIEFsbG93IHRoZSBETlMgZnVuY3Rpb24gdG8gYmUgY29tcGxldGVseSBkaXNhYmxlZCwgYnkKKwkgICAgc2V0dGluZyB0aGUgcG9ydCB0byB6ZXJvICItLXBvcnQ9MCIuIFRoZSBhbGxvd3MgZG5zbWFzcSB0bworCSAgICBiZSB1c2VkIGFzIGEgc2ltcGxlIERIQ1Agc2VydmVyLCBzaW1wbGUgVEZUUCBzZXJ2ZXIsIG9yCisJICAgIGJvdGgsIGJ1dCB3aXRob3V0IHRoZSBETlMgc2VydmVyIGdldHRpbmcgaW4gdGhlIHdheS4KKworCSAgICBGaXggYSBidWcgd2hlcmUgTlhET01BSU4gY291bGQgYmUgcmV0dXJuZWQgZm9yIGEgcXVlcnkKKwkgICAgZXZlbiBpZiB0aGUgbmFtZSdzIHZhbHVlIHdhcyBrbm93biBmb3IgYSBkaWZmZXJlbnQgcXVlcnkKKwkgICAgdHlwZS4gVGhpcyBidWcgY291bGQgYmUgcHJvZGRlZCB3aXRoIAorICAgICAgICAgICAgLS1sb2NhbD0vZG9tYWluLyAtLWFkZHJlc3M9L25hbWUuZG9tYWluLzEuMi4zLjQgCisJICAgIEFuIElQdjYgcXVlcnkgZm9yIG5hbWUuZG9tYWluIHdvdWxkIHJldHVybiBOWERPTUFJTiwgYW5kCisJICAgIG5vdCB0aGUgY29ycmVjdCBOT0VSUk9SLiBUaGFua3MgdG8gTGFycyBOb29kZW4gZm9yCisJICAgIHNwb3R0aW5nIHRoZSBidWcgYW5kIEppbWEgZm9yIGRpYWdub3NpcyBvZiB0aGUgcHJvYmxlbS4KKworCSAgICBBZGRlZCBwZXItc2VydmVyIHN0YXRzIHRvIHRoZSBpbmZvcm1hdGlvbiBsb2dnZWQgd2hlbgorCSAgICBkbnNtYXNxIGdldHMgU0lHVVNSMS4KKworCSAgICBBZGRlZCBjb3VudHMgb2YgcXVlcmllcyBmb3J3YXJkZWQgYW5kIHF1ZXJpZXMgYW5zd2VyZWQKKwkgICAgbG9jYWxseSAoZnJvbSB0aGUgY2FjaGUsIC9ldGMvaG9zdHMgb3IgY29uZmlnKS4KKworCSAgICBGaXhlZCBwb3NzaWJsZSBjcmFzaCBidWcgaW4gREJ1cyBJUHY2IGNvZGUuIFRoYW5rcyB0byBNYXR0CisJICAgIERvbXNjaCBhbmQgSmltYS4KKworCSAgICBUaWdodGVuIGNoZWNrcyBmb3IgY2xhc2hlcyBiZXR3ZWVuIGhvc3RzLWZpbGUgYW5kCisJICAgIERIQ1AtZGVyaXZlZCBuYW1lcy4gTXVsdGlwbGUgYWRkcmVzc2VzIGFzc29jaWF0ZWQgd2l0aCBhCisJICAgIG5hbWUgaW4gaG9zdHMtZmlsZSBubyBsb25nZXIgY29uZnVzZXMgdGhlIGNoZWNrLgorCisJICAgIEFkZCAtLWRoY3Atbm8tb3ZlcnJpZGUgb3B0aW9uIHRvIGZpeCBwcm9ibGVtcyB3aXRoIHNvbWUKKwkgICAgY29tYmluYXRpb25zIG9mIHN0YWdlIHplcm8gYW5kIHN0YWdlIG9uZQorCSAgICBib290bG9hZGVycy4gVGhhbmtzIHRvIFN0ZXZlIEFsZXhhbmRlciBmb3IgdGhlIGJ1ZyByZXBvcnQuCisgIAorCSAgICBBZGQgLS10ZnRwLXBvcnQtcmFuZ2Ugb3B0aW9uLiBUaGFua3MgdG8gRGFuaWVsIE1pZXJzd2EgZm9yCisJICAgIHRoZSBzdWdnZXN0aW9uLgorIAorCSAgICBBZGQgLS1zdG9wLWRucy1yZWJpbmQgb3B0aW9uLiBUaGFua3MgdG8gQ29sbGluIE11bGxpbmVyCisJICAgIGZvciB0aGUgcGF0Y2guCisKKwkgICAgQWRkZWQgR1BMIHZlcnNpb24gMyBhcyBhIGxpY2Vuc2Ugb3B0aW9uLgorIAorCSAgICBBZGRlZCAtLWFsbC1zZXJ2ZXJzIG9wdGlvbi4gVGhhbmtzIHRvIFBldGVyIE5hdWxscyBmb3IgdGhlCisJICAgIHBhdGNoLgorCisJICAgIEV4dGVuZCBzb3VyY2UgYWRkcmVzcyBtZWNoYW5pc20gc28gdGhhdCB0aGUgaW50ZXJmYWNlIHVzZWQKKwkgICAgdG8gY29udGFjdCBhbiB1cHN0cmVhbSBETlMgc2VydmVyIGNhbiBiZSBuYWlsZWQKKwkgICAgZG93bi4gU29tZXRoaW5nIGxpa2UgIi0tc2VydmVyPTEuMi4zLjRAZXRoMSIgd2lsbCBmb3JjZQorCSAgICB0aGUgdXNlIG9mIGV0aDEgZm9yIHRyYWZmaWMgdG8gRE5TLXNlcnZlciAxLjIuMy40LiBUaGlzCisJICAgIGZhY2lsaXR5IGlzIG9ubHkgYXZhaWxhYmxlIG9uIExpbnV4IGFuZCBTb2xhcmlzLiBUaGFua3MgdG8KKwkgICAgUGV0ZXIgTmF1bGxzIGZvciBwcm9tcHRpbmcgdGhpcy4JICAgICAKKwkKKwkgICAgQWRkIC0tZGhjcC1vcHRzZmlsZSBvcHRpb24uIFRoYW5rcyB0byBDYXJsb3MgQ2FydmFsaG8gZm9yCisgICAgICAgICAgICB0aGUgc3VnZ2VzdGlvbi4KKworCSAgICBGaXhlZCBmYWlsdXJlIHRvIHNldCBzb3VyY2UgYWRkcmVzcyBmb3Igc2VydmVyIGNvbm5lY3Rpb25zCisJICAgIHdoZW4gdXNpbmcgVENQLiBUaGFua3MgdG8gU2ltb24gQ2FwcGVyIGZvciBmaW5kaW5nIHRoaXMKKwkgICAgYnVnLgorCisJICAgIFJlZnVzZSB0byBnaXZlIGEgREhDUCBjbGllbnQgdGhlIGFkZHJlc3MgaXQgYXNrcyBmb3IgaWYKKwkgICAgdGhlIGFkZHJlc3MgcmFuZ2UgaW4gcXVlc3Rpb24gaXMgbm90IGF2YWlsYWJsZSB0byB0aGF0CisJICAgIHBhcnRpY3VsYXIgaG9zdC4gVGhhbmtzIHRvIENlZHJpYyBEdXZhbCBmb3IgdGhlIGJ1ZworCSAgICByZXBvcnQuIAorCisJICAgIENoYW5nZWQgYmVoYXZpb3Igb2YgREhDUCBzZXJ2ZXIgdG8gYWx3YXlzIHJldHVybiB0b3RhbCBsZW5ndGggb2YKKwkgICAgYSBuZXcgbGVhc2UgaW4gREhDUE9GRkVSLCBldmVuIGlmIGFuIGV4aXN0aW5nIGxlYXNlCisJICAgIGV4aXN0cy4gKEl0IHVzZWQgdG8gcmV0dXJuIHRoZSB0aW1lIHJlbWFpbmluZyBvbiB0aGUgbGVhc2UKKwkgICAgd2huZSBvbmUgZXhpc3RlZC4pIFRoaXMgZml4ZXMgcHJvYmxlbXMgd2l0aCB0aGUgU29ueSBFcmljc3NvbgorCSAgICBLNjEwaSBwaG9uZS4gVGhhbmtzIHRvIEhha29uIFN0b3JkYWhsIGZvciBmaW5kaW5nIGFuZAorCSAgICBmaXhpbmcgdGhpcy4KKworCSAgICBBZGQgRE5TTUFTUV9JTlRFUkZBQ0UgdG8gdGhlIGVudmlyb25tZW50IG9mIHRoZQorCSAgICBsZWFzZS1jaGFuZ2Ugc2NyaXB0LiBUaGFua3MgdG8gTmlrb3MgTWF2cm9naWFubm9wb3Vsb3MgZm9yCisJICAgIHRoZSBwYXRjaC4KKworCSAgICBGaXhlZCBicm9rZW4gLS1hbGlhcyBmdW5jdGlvbmFsaXR5LiBUaGFua3MgdG8gTWljaGFlbAorCSAgICBNZWVsaXMgZm9yIHRoZSBidWcgcmVwb3J0LgorCisJICAgIEFkZGVkIEZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgbWFuIHBhZ2UuIFRoYW5rIHRvIEdpbGRhcworCSAgICBMZSBOYWRhbiBmb3IgdGhhdC4KKworCSAgICBBZGQgLS1kaGNwLW1hdGNoIGZsYWcsIHRvIGNoZWNrIGZvciBhcmJpdHJhcnkgb3B0aW9ucyBpbgorCSAgICBESENQIG1lc3NhZ2VzIGZyb20gY2xpZW50cy4gVGhpcyBlbmFibGVzIHVzZSBvZiBkbnNtYXNxCisJICAgIHdpdGggZ1BYRS4gVGhhbmtzIHRvIFJhbmNlIEhhbGwgZm9yIHRoZSBzdWdnZXN0aW9uLgorCisJICAgIEFkZGVkIC0tZGhjcC1icm9hZGNhc3QsIHRvIGZvcmNlIGJyb2FkY2FzdCByZXBsaWVzIHRvIERIQ1AKKwkgICAgY2xpZW50cyB3aGljaCBuZWVkIHRoZW0gYnV0IGFyZSB0b28gZHVtYiBvciB0b28gb2xkIHRvCisJICAgIGFzay4gVGhhbmtzIHRvIEJvZG8gQmVsbHV0IGZvciB0aGUgc3VnZ2VzdGlvbi4KKworCSAgICBEaXNhYmxlIHBhdGgtTVRVIGRpc2NvdmVyeSBvbiBESENQIGFuZCBURlRQIHNvY2tldHMuIFRoaXMKKwkgICAgaXMgbmV2ZXIgbmVlZGVkLCBhbmQgdGhlIHByZXNlbmNlIG9mIERGIGZsYWdzIGluIHRoZSBJUAorCSAgICBoZWFkZXIgY29uZnVzZXMgc29tZSBicm9rZW4gUFhFIFJPTVMuIFRoYW5rcyBhZ2FpbiB0byBCb2RvCisJICAgIEJlbGx1dCBmb3Igc3BvdHRpbmcgdGhpcy4KKworCSAgICBGaXggcHJvYmxlbXMgd2l0aCBhZGRyZXNzZXMgd2hpY2ggaGF2ZSBtdWx0aXBsZSBQVFIKKwkgICAgcmVjb3JkcyAtIGFsbCBidXQgb25lIG9mIHRoZXNlIGNvdWxkIGdldCBsb3N0LiAKKworCSAgICBGaXggYnVnIHdpdGggLS1hZGRyZXNzIGFuZCBBTlkgcXVlcnkgdHlwZSBzZWVpbmcgUkVGVVNFRAorCSAgICByZXR1cm4gY29kZSBpbiByZXBsaWVzLiBUaGFua3MgdG8gTWlrZSBXcmlnaHQgZm9yIHNwb3R0aW5nCisJICAgIHRoZSBwcm9ibGVtLgorCisJICAgIFVwZGF0ZSBTcGFuaXNoIHRyYW5zbGF0aW9uLiBUaGFua3MgdG8gQ2hyaXMgQ2hhdGhhbS4KKworCSAgICBBZGQgLS1uZWctdHRsIG9wdGlvbi4KKwkgICAgCisJICAgIEFkZCB3YXJuaW5ncyBhYm91dCB0aGUgYmFkIGVmZmVjdHMgb2YgLS1maWx0ZXJ3aW4yayBvbgorCSAgICBTSVAsIFhNUFAgYW5kIEdvb2dsZS10YWxrIHRvIHRoZSBleGFtcGxlIGNvbmZpZyBmaWxlLgorCSAgICAKKwkgICAgRml4IHZhX2xpc3QgYWJ1c2UgaW4gbG9nLmMuIFRoaXMgZml4ZXMgY3Jhc2hlcyBvbiBwb3dlcnBjCisJICAgIHdoZW4gZGVidWcgbW9kZSBpcyBzZXQuIFRoYW5rcyB0byBDZWRyaWMgRHV2YWwgZm9yIHRoZQorCSAgICBwYXRjaC4gCisKK3ZlcnNpb24gMi40MgorICAgICAgICAgICAgRGVmaW5lIF9HTlVfU09VUkNFIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggbGF0ZXIgZ2xpYmMKKyAgICAgICAgICAgIGhlYWRlcnMuIFRoYW5rcyB0byBKaW1hIGZvciBzcG90dGluZyB0aGUgcHJvYmxlbS4KKworCSAgICBBZGQgLS1kaGNwLWFsdGVybmF0ZS1wb3J0IG9wdGlvbi4gVGhhbmtzIHRvIEphbiBQc290YSBmb3IKKwkgICAgdGhlIHN1Z2dlc3Rpb24uCisKKwkgICAgRml4IHR5cG8gaW4gY29kZSB3aGljaCBpcyBvbmx5IHVzZWQgb24gQlNELCB3aGVuIERidXMgYW5kCisJICAgIElQdjYgc3VwcG9ydCBpcyBlbmFibGVkLiBUaGFua3MgdG8gUm95IE1hcnBsZXMuCisJICAgIAorCSAgICBVcGRhdGVkIFBvbGlzaCB0cmFuc2xhdGlvbnMgLSB0aGFuayB0byBKYW4gUHNvdGEuCisKKwkgICAgRml4IE9TIGRldGVjdGlvbiBsb2dpYyB0byBjb3BlIHdpdGggR05VL0ZyZWVCU0QuCisKKwkgICAgRml4IHVuaXRpYWxpc2VkIHZhcmlhYmxlIGluIERCdXMgY29kZSAtIHRoYW5rcyB0byBSb3kKKwkgICAgTWFycGxlcy4KKworCSAgICBGaXggbmV0d29yayBlbnVtZXJhdGlvbiBjb2RlIHRvIHdvcmsgb24gbGF0ZXIgTmV0QlNEIC0KKwkgICAgdGhhbmtzIHRvIFJveSBNYXJwbGVzLgorCSAgICAKKwkgICAgUHJvdmlkZSAtLWRoY3AtYnJpZGdlIG9uIGFsbCBCU0QgdmFyaWFudHMuCisKKwkgICAgRGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFIHdoaWNoIHJlbW92ZXMgYW4gYXJiaXRyYXJ5IDJHQgorICAgICAgICAgICAgbGltaXQgb24gbG9nZmlsZXMuIFRoYW5rcyB0byBQYXVsIENoYW1iZXJzIGZvciBzcG90dGluZyAKKyAgICAgICAgICAgIHRoZSBwcm9ibGVtLgorCisJICAgIEZpeCBSRkMzMDQ2IGFnZW50LWlkIGVjaG8gY29kZSwgYnJva2VuIGZvciBtYW55CisJICAgIHJlbGVhc2VzLiBUaGFua3MgdG8gSmVyZW15IExhaW5lIGZvciBzcG90dGluZyB0aGUgcHJvYmxlbQorCSAgICBhbmQgcHJvdmlkaW5nIGEgcGF0Y2guCisKKwkgICAgQWRkZWQgU29sYXJpcyAxMCBzZXJ2aWNlIG1hbmlmZXN0IGZyb20gRGF2aWQgQ29ubmVsbHkgaW4KKwkgICAgY29udHJpYi9Tb2xhcmlzMTAKKyAJICAgIAkgICAgIAorCSAgICBBZGQgLS1kaGNwLXNjcmlwdHVzZXIgb3B0aW9uLgkgICAgCisKKwkgICAgU3VwcG9ydCBuZXcgY2FwYWJpbGl0eSBpbnRlcmZhY2Ugb24gc3VpdGFibGUgTGludXggCisJICAgIGtlcm5lbHMsIHJlbW92ZXMgImxlZ2FjeSBzdXBwb3J0IGluIHVzZSIgbWVzc2FnZXMuIFRoYW5rcyAKKyAgICAgICAgICAgIHRvIEpvcmdlIEJhc3RvcyBmb3IgcG9pbnRpbmcgdGhpcyBvdXQuIAorCisJICAgIEZpeCBzdWJ0bGUgYnVnIGluIGNhY2hlIGNvZGUgd2hpY2ggY291bGQgY2F1c2UgZG5zbWFzcSB0bworCSAgICBsb2NrIHNwaW5uaW5nIENQVSBpbiByYXJlIGNpcmN1bXN0YW5jZXMuIFRoYW5rcyB0byBBbGV4CisJICAgIENoZWtob2xrbyBmb3IgYnVnIHJlcG9ydHMgYW5kIGhlbHAgZGVidWdnaW5nLiAKKworCSAgICBTdXBwb3J0IG5ldGFzY2lpIHRyYW5zZmVyIG1vZGUgZm9yIFRGVFAuCisKZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNTQ5YmUKLS0tIC9kZXYvbnVsbAorKysgYi9DT1BZSU5HCkBAIC0wLDAgKzEsMzQwIEBACisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgICAgICAgICAgICAgICAgICAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKwwKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKwwKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorDAorICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorDAorICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCittYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSAxOXl5ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIDE5eXkgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL0NPUFlJTkctdjMgYi9DT1BZSU5HLXYzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YTllZDAKLS0tIC9kZXYvbnVsbAorKysgYi9DT1BZSU5HLXYzCkBAIC0wLDAgKzEsNjc0IEBACisgICAgICAgICAgICAgICAgICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3CisKKyBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+CisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQorCisgIFRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBhIGZyZWUsIGNvcHlsZWZ0IGxpY2Vuc2UgZm9yCitzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MuCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFuZCBvdGhlciBwcmFjdGljYWwgd29ya3MgYXJlIGRlc2lnbmVkCit0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29udHJhc3QsCit0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0bworc2hhcmUgYW5kIGNoYW5nZSBhbGwgdmVyc2lvbnMgb2YgYSBwcm9ncmFtLS10byBtYWtlIHN1cmUgaXQgcmVtYWlucyBmcmVlCitzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB1c2UgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9zdCBvZiBvdXIgc29mdHdhcmU7IGl0IGFwcGxpZXMgYWxzbyB0bworYW55IG90aGVyIHdvcmsgcmVsZWFzZWQgdGhpcyB3YXkgYnkgaXRzIGF1dGhvcnMuICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhlbSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3UKK3dhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CitmcmVlIHByb2dyYW1zLCBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gZGVueWluZyB5b3UKK3RoZXNlIHJpZ2h0cyBvciBhc2tpbmcgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiAgVGhlcmVmb3JlLCB5b3UgaGF2ZQorY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmCit5b3UgbW9kaWZ5IGl0OiByZXNwb25zaWJpbGl0aWVzIHRvIHJlc3BlY3QgdGhlIGZyZWVkb20gb2Ygb3RoZXJzLgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IHBhc3Mgb24gdG8gdGhlIHJlY2lwaWVudHMgdGhlIHNhbWUKK2ZyZWVkb21zIHRoYXQgeW91IHJlY2VpdmVkLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlCitvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleQora25vdyB0aGVpciByaWdodHMuCisKKyAgRGV2ZWxvcGVycyB0aGF0IHVzZSB0aGUgR05VIEdQTCBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOgorKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIExpY2Vuc2UKK2dpdmluZyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgaXQuCisKKyAgRm9yIHRoZSBkZXZlbG9wZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4cGxhaW5zCit0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUgc29mdHdhcmUuICBGb3IgYm90aCB1c2VycycgYW5kCithdXRob3JzJyBzYWtlLCB0aGUgR1BMIHJlcXVpcmVzIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgYmUgbWFya2VkIGFzCitjaGFuZ2VkLCBzbyB0aGF0IHRoZWlyIHByb2JsZW1zIHdpbGwgbm90IGJlIGF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8KK2F1dGhvcnMgb2YgcHJldmlvdXMgdmVyc2lvbnMuCisKKyAgU29tZSBkZXZpY2VzIGFyZSBkZXNpZ25lZCB0byBkZW55IHVzZXJzIGFjY2VzcyB0byBpbnN0YWxsIG9yIHJ1bgorbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIHNvZnR3YXJlIGluc2lkZSB0aGVtLCBhbHRob3VnaCB0aGUgbWFudWZhY3R1cmVyCitjYW4gZG8gc28uICBUaGlzIGlzIGZ1bmRhbWVudGFsbHkgaW5jb21wYXRpYmxlIHdpdGggdGhlIGFpbSBvZgorcHJvdGVjdGluZyB1c2VycycgZnJlZWRvbSB0byBjaGFuZ2UgdGhlIHNvZnR3YXJlLiAgVGhlIHN5c3RlbWF0aWMKK3BhdHRlcm4gb2Ygc3VjaCBhYnVzZSBvY2N1cnMgaW4gdGhlIGFyZWEgb2YgcHJvZHVjdHMgZm9yIGluZGl2aWR1YWxzIHRvCit1c2UsIHdoaWNoIGlzIHByZWNpc2VseSB3aGVyZSBpdCBpcyBtb3N0IHVuYWNjZXB0YWJsZS4gIFRoZXJlZm9yZSwgd2UKK2hhdmUgZGVzaWduZWQgdGhpcyB2ZXJzaW9uIG9mIHRoZSBHUEwgdG8gcHJvaGliaXQgdGhlIHByYWN0aWNlIGZvciB0aG9zZQorcHJvZHVjdHMuICBJZiBzdWNoIHByb2JsZW1zIGFyaXNlIHN1YnN0YW50aWFsbHkgaW4gb3RoZXIgZG9tYWlucywgd2UKK3N0YW5kIHJlYWR5IHRvIGV4dGVuZCB0aGlzIHByb3Zpc2lvbiB0byB0aG9zZSBkb21haW5zIGluIGZ1dHVyZSB2ZXJzaW9ucworb2YgdGhlIEdQTCwgYXMgbmVlZGVkIHRvIHByb3RlY3QgdGhlIGZyZWVkb20gb2YgdXNlcnMuCisKKyAgRmluYWxseSwgZXZlcnkgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUgcGF0ZW50cy4KK1N0YXRlcyBzaG91bGQgbm90IGFsbG93IHBhdGVudHMgdG8gcmVzdHJpY3QgZGV2ZWxvcG1lbnQgYW5kIHVzZSBvZgorc29mdHdhcmUgb24gZ2VuZXJhbC1wdXJwb3NlIGNvbXB1dGVycywgYnV0IGluIHRob3NlIHRoYXQgZG8sIHdlIHdpc2ggdG8KK2F2b2lkIHRoZSBzcGVjaWFsIGRhbmdlciB0aGF0IHBhdGVudHMgYXBwbGllZCB0byBhIGZyZWUgcHJvZ3JhbSBjb3VsZAorbWFrZSBpdCBlZmZlY3RpdmVseSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgdGhlIEdQTCBhc3N1cmVzIHRoYXQKK3BhdGVudHMgY2Fubm90IGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBwcm9ncmFtIG5vbi1mcmVlLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisgICAgICAgICAgICAgICAgICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgMC4gRGVmaW5pdGlvbnMuCisKKyAgIlRoaXMgTGljZW5zZSIgcmVmZXJzIHRvIHZlcnNpb24gMyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKKyAgIkNvcHlyaWdodCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIga2luZHMgb2YKK3dvcmtzLCBzdWNoIGFzIHNlbWljb25kdWN0b3IgbWFza3MuCisKKyAgIlRoZSBQcm9ncmFtIiByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRlciB0aGlzCitMaWNlbnNlLiAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuICAiTGljZW5zZWVzIiBhbmQKKyJyZWNpcGllbnRzIiBtYXkgYmUgaW5kaXZpZHVhbHMgb3Igb3JnYW5pemF0aW9ucy4KKworICBUbyAibW9kaWZ5IiBhIHdvcmsgbWVhbnMgdG8gY29weSBmcm9tIG9yIGFkYXB0IGFsbCBvciBwYXJ0IG9mIHRoZSB3b3JrCitpbiBhIGZhc2hpb24gcmVxdWlyaW5nIGNvcHlyaWdodCBwZXJtaXNzaW9uLCBvdGhlciB0aGFuIHRoZSBtYWtpbmcgb2YgYW4KK2V4YWN0IGNvcHkuICBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgIm1vZGlmaWVkIHZlcnNpb24iIG9mIHRoZQorZWFybGllciB3b3JrIG9yIGEgd29yayAiYmFzZWQgb24iIHRoZSBlYXJsaWVyIHdvcmsuCisKKyAgQSAiY292ZXJlZCB3b3JrIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLgorCisgIFRvICJwcm9wYWdhdGUiIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQKK3Blcm1pc3Npb24sIHdvdWxkIG1ha2UgeW91IGRpcmVjdGx5IG9yIHNlY29uZGFyaWx5IGxpYWJsZSBmb3IKK2luZnJpbmdlbWVudCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcsIGV4Y2VwdCBleGVjdXRpbmcgaXQgb24gYQorY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiAgUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywKK2Rpc3RyaWJ1dGlvbiAod2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiksIG1ha2luZyBhdmFpbGFibGUgdG8gdGhlCitwdWJsaWMsIGFuZCBpbiBzb21lIGNvdW50cmllcyBvdGhlciBhY3Rpdml0aWVzIGFzIHdlbGwuCisKKyAgVG8gImNvbnZleSIgYSB3b3JrIG1lYW5zIGFueSBraW5kIG9mIHByb3BhZ2F0aW9uIHRoYXQgZW5hYmxlcyBvdGhlcgorcGFydGllcyB0byBtYWtlIG9yIHJlY2VpdmUgY29waWVzLiAgTWVyZSBpbnRlcmFjdGlvbiB3aXRoIGEgdXNlciB0aHJvdWdoCithIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgorCisgIEFuIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlIGRpc3BsYXlzICJBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzIgordG8gdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZQorZmVhdHVyZSB0aGF0ICgxKSBkaXNwbGF5cyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlLCBhbmQgKDIpCit0ZWxscyB0aGUgdXNlciB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgd29yayAoZXhjZXB0IHRvIHRoZQorZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZQord29yayB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgSWYKK3RoZSBpbnRlcmZhY2UgcHJlc2VudHMgYSBsaXN0IG9mIHVzZXIgY29tbWFuZHMgb3Igb3B0aW9ucywgc3VjaCBhcyBhCittZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgorCisgIDEuIFNvdXJjZSBDb2RlLgorCisgIFRoZSAic291cmNlIGNvZGUiIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrCitmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICAiT2JqZWN0IGNvZGUiIG1lYW5zIGFueSBub24tc291cmNlCitmb3JtIG9mIGEgd29yay4KKworICBBICJTdGFuZGFyZCBJbnRlcmZhY2UiIG1lYW5zIGFuIGludGVyZmFjZSB0aGF0IGVpdGhlciBpcyBhbiBvZmZpY2lhbAorc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgoraW50ZXJmYWNlcyBzcGVjaWZpZWQgZm9yIGEgcGFydGljdWxhciBwcm9ncmFtbWluZyBsYW5ndWFnZSwgb25lIHRoYXQKK2lzIHdpZGVseSB1c2VkIGFtb25nIGRldmVsb3BlcnMgd29ya2luZyBpbiB0aGF0IGxhbmd1YWdlLgorCisgIFRoZSAiU3lzdGVtIExpYnJhcmllcyIgb2YgYW4gZXhlY3V0YWJsZSB3b3JrIGluY2x1ZGUgYW55dGhpbmcsIG90aGVyCit0aGFuIHRoZSB3b3JrIGFzIGEgd2hvbGUsIHRoYXQgKGEpIGlzIGluY2x1ZGVkIGluIHRoZSBub3JtYWwgZm9ybSBvZgorcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgorQ29tcG9uZW50LCBhbmQgKGIpIHNlcnZlcyBvbmx5IHRvIGVuYWJsZSB1c2Ugb2YgdGhlIHdvcmsgd2l0aCB0aGF0CitNYWpvciBDb21wb25lbnQsIG9yIHRvIGltcGxlbWVudCBhIFN0YW5kYXJkIEludGVyZmFjZSBmb3Igd2hpY2ggYW4KK2ltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCisiTWFqb3IgQ29tcG9uZW50IiwgaW4gdGhpcyBjb250ZXh0LCBtZWFucyBhIG1ham9yIGVzc2VudGlhbCBjb21wb25lbnQKKyhrZXJuZWwsIHdpbmRvdyBzeXN0ZW0sIGFuZCBzbyBvbikgb2YgdGhlIHNwZWNpZmljIG9wZXJhdGluZyBzeXN0ZW0KKyhpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCitwcm9kdWNlIHRoZSB3b3JrLCBvciBhbiBvYmplY3QgY29kZSBpbnRlcnByZXRlciB1c2VkIHRvIHJ1biBpdC4KKworICBUaGUgIkNvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCit0aGUgc291cmNlIGNvZGUgbmVlZGVkIHRvIGdlbmVyYXRlLCBpbnN0YWxsLCBhbmQgKGZvciBhbiBleGVjdXRhYmxlCit3b3JrKSBydW4gdGhlIG9iamVjdCBjb2RlIGFuZCB0byBtb2RpZnkgdGhlIHdvcmssIGluY2x1ZGluZyBzY3JpcHRzIHRvCitjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKK1N5c3RlbSBMaWJyYXJpZXMsIG9yIGdlbmVyYWwtcHVycG9zZSB0b29scyBvciBnZW5lcmFsbHkgYXZhaWxhYmxlIGZyZWUKK3Byb2dyYW1zIHdoaWNoIGFyZSB1c2VkIHVubW9kaWZpZWQgaW4gcGVyZm9ybWluZyB0aG9zZSBhY3Rpdml0aWVzIGJ1dAord2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCitpbmNsdWRlcyBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcyBhc3NvY2lhdGVkIHdpdGggc291cmNlIGZpbGVzIGZvcgordGhlIHdvcmssIGFuZCB0aGUgc291cmNlIGNvZGUgZm9yIHNoYXJlZCBsaWJyYXJpZXMgYW5kIGR5bmFtaWNhbGx5CitsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwKK3N1Y2ggYXMgYnkgaW50aW1hdGUgZGF0YSBjb21tdW5pY2F0aW9uIG9yIGNvbnRyb2wgZmxvdyBiZXR3ZWVuIHRob3NlCitzdWJwcm9ncmFtcyBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIHdvcmsuCisKKyAgVGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCB1c2VycworY2FuIHJlZ2VuZXJhdGUgYXV0b21hdGljYWxseSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBDb3JyZXNwb25kaW5nCitTb3VyY2UuCisKKyAgVGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhIHdvcmsgaW4gc291cmNlIGNvZGUgZm9ybSBpcyB0aGF0CitzYW1lIHdvcmsuCisKKyAgMi4gQmFzaWMgUGVybWlzc2lvbnMuCisKKyAgQWxsIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBhcmUgZ3JhbnRlZCBmb3IgdGhlIHRlcm0gb2YKK2NvcHlyaWdodCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGFyZSBpcnJldm9jYWJsZSBwcm92aWRlZCB0aGUgc3RhdGVkCitjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCitwZXJtaXNzaW9uIHRvIHJ1biB0aGUgdW5tb2RpZmllZCBQcm9ncmFtLiAgVGhlIG91dHB1dCBmcm9tIHJ1bm5pbmcgYQorY292ZXJlZCB3b3JrIGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlIG9ubHkgaWYgdGhlIG91dHB1dCwgZ2l2ZW4gaXRzCitjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgorcmlnaHRzIG9mIGZhaXIgdXNlIG9yIG90aGVyIGVxdWl2YWxlbnQsIGFzIHByb3ZpZGVkIGJ5IGNvcHlyaWdodCBsYXcuCisKKyAgWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdAorY29udmV5LCB3aXRob3V0IGNvbmRpdGlvbnMgc28gbG9uZyBhcyB5b3VyIGxpY2Vuc2Ugb3RoZXJ3aXNlIHJlbWFpbnMKK2luIGZvcmNlLiAgWW91IG1heSBjb252ZXkgY292ZXJlZCB3b3JrcyB0byBvdGhlcnMgZm9yIHRoZSBzb2xlIHB1cnBvc2UKK29mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQord2l0aCBmYWNpbGl0aWVzIGZvciBydW5uaW5nIHRob3NlIHdvcmtzLCBwcm92aWRlZCB0aGF0IHlvdSBjb21wbHkgd2l0aAordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbiBjb252ZXlpbmcgYWxsIG1hdGVyaWFsIGZvciB3aGljaCB5b3UgZG8KK25vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKK2ZvciB5b3UgbXVzdCBkbyBzbyBleGNsdXNpdmVseSBvbiB5b3VyIGJlaGFsZiwgdW5kZXIgeW91ciBkaXJlY3Rpb24KK2FuZCBjb250cm9sLCBvbiB0ZXJtcyB0aGF0IHByb2hpYml0IHRoZW0gZnJvbSBtYWtpbmcgYW55IGNvcGllcyBvZgoreW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KKworICBDb252ZXlpbmcgdW5kZXIgYW55IG90aGVyIGNpcmN1bXN0YW5jZXMgaXMgcGVybWl0dGVkIHNvbGVseSB1bmRlcgordGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCittYWtlcyBpdCB1bm5lY2Vzc2FyeS4KKworICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgorCisgIE5vIGNvdmVyZWQgd29yayBzaGFsbCBiZSBkZWVtZWQgcGFydCBvZiBhbiBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbAorbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlCisxMSBvZiB0aGUgV0lQTyBjb3B5cmlnaHQgdHJlYXR5IGFkb3B0ZWQgb24gMjAgRGVjZW1iZXIgMTk5Niwgb3IKK3NpbWlsYXIgbGF3cyBwcm9oaWJpdGluZyBvciByZXN0cmljdGluZyBjaXJjdW12ZW50aW9uIG9mIHN1Y2gKK21lYXN1cmVzLgorCisgIFdoZW4geW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgeW91IHdhaXZlIGFueSBsZWdhbCBwb3dlciB0byBmb3JiaWQKK2NpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbgoraXMgZWZmZWN0ZWQgYnkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0bwordGhlIGNvdmVyZWQgd29yaywgYW5kIHlvdSBkaXNjbGFpbSBhbnkgaW50ZW50aW9uIHRvIGxpbWl0IG9wZXJhdGlvbiBvcgorbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0IHRoZSB3b3JrJ3MKK3VzZXJzLCB5b3VyIG9yIHRoaXJkIHBhcnRpZXMnIGxlZ2FsIHJpZ2h0cyB0byBmb3JiaWQgY2lyY3VtdmVudGlvbiBvZgordGVjaG5vbG9naWNhbCBtZWFzdXJlcy4KKworICA0LiBDb252ZXlpbmcgVmVyYmF0aW0gQ29waWVzLgorCisgIFlvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQorcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQKK2FwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZTsKK2tlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQorbm9uLXBlcm1pc3NpdmUgdGVybXMgYWRkZWQgaW4gYWNjb3JkIHdpdGggc2VjdGlvbiA3IGFwcGx5IHRvIHRoZSBjb2RlOwora2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgb2YgdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbGwKK3JlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCisgIFlvdSBtYXkgY2hhcmdlIGFueSBwcmljZSBvciBubyBwcmljZSBmb3IgZWFjaCBjb3B5IHRoYXQgeW91IGNvbnZleSwKK2FuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCisKKyAgNS4gQ29udmV5aW5nIE1vZGlmaWVkIFNvdXJjZSBWZXJzaW9ucy4KKworICBZb3UgbWF5IGNvbnZleSBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIG9yIHRoZSBtb2RpZmljYXRpb25zIHRvCitwcm9kdWNlIGl0IGZyb20gdGhlIFByb2dyYW0sIGluIHRoZSBmb3JtIG9mIHNvdXJjZSBjb2RlIHVuZGVyIHRoZQordGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgbW9kaWZpZWQKKyAgICBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCisKKyAgICBiKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBpdCBpcworICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgorICAgIDcuICBUaGlzIHJlcXVpcmVtZW50IG1vZGlmaWVzIHRoZSByZXF1aXJlbWVudCBpbiBzZWN0aW9uIDQgdG8KKyAgICAia2VlcCBpbnRhY3QgYWxsIG5vdGljZXMiLgorCisgICAgYykgWW91IG11c3QgbGljZW5zZSB0aGUgZW50aXJlIHdvcmssIGFzIGEgd2hvbGUsIHVuZGVyIHRoaXMKKyAgICBMaWNlbnNlIHRvIGFueW9uZSB3aG8gY29tZXMgaW50byBwb3NzZXNzaW9uIG9mIGEgY29weS4gIFRoaXMKKyAgICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNworICAgIGFkZGl0aW9uYWwgdGVybXMsIHRvIHRoZSB3aG9sZSBvZiB0aGUgd29yaywgYW5kIGFsbCBpdHMgcGFydHMsCisgICAgcmVnYXJkbGVzcyBvZiBob3cgdGhleSBhcmUgcGFja2FnZWQuICBUaGlzIExpY2Vuc2UgZ2l2ZXMgbm8KKyAgICBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90CisgICAgaW52YWxpZGF0ZSBzdWNoIHBlcm1pc3Npb24gaWYgeW91IGhhdmUgc2VwYXJhdGVseSByZWNlaXZlZCBpdC4KKworICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CisgICAgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlczsgaG93ZXZlciwgaWYgdGhlIFByb2dyYW0gaGFzIGludGVyYWN0aXZlCisgICAgaW50ZXJmYWNlcyB0aGF0IGRvIG5vdCBkaXNwbGF5IEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMsIHlvdXIKKyAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KKworICBBIGNvbXBpbGF0aW9uIG9mIGEgY292ZXJlZCB3b3JrIHdpdGggb3RoZXIgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50Cit3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAorYW5kIHdoaWNoIGFyZSBub3QgY29tYmluZWQgd2l0aCBpdCBzdWNoIGFzIHRvIGZvcm0gYSBsYXJnZXIgcHJvZ3JhbSwKK2luIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4KKyJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAordXNlZCB0byBsaW1pdCB0aGUgYWNjZXNzIG9yIGxlZ2FsIHJpZ2h0cyBvZiB0aGUgY29tcGlsYXRpb24ncyB1c2VycworYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwgd29ya3MgcGVybWl0LiAgSW5jbHVzaW9uIG9mIGEgY292ZXJlZCB3b3JrCitpbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgorcGFydHMgb2YgdGhlIGFnZ3JlZ2F0ZS4KKworICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KKworICBZb3UgbWF5IGNvbnZleSBhIGNvdmVyZWQgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcworb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlCittYWNoaW5lLXJlYWRhYmxlIENvcnJlc3BvbmRpbmcgU291cmNlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsCitpbiBvbmUgb2YgdGhlc2Ugd2F5czoKKworICAgIGEpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKKyAgICAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKKyAgICAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IGEKKyAgICB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMgYW5kIHZhbGlkIGZvciBhcworICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAorICAgIG1vZGVsLCB0byBnaXZlIGFueW9uZSB3aG8gcG9zc2Vzc2VzIHRoZSBvYmplY3QgY29kZSBlaXRoZXIgKDEpIGEKKyAgICBjb3B5IG9mIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYWxsIHRoZSBzb2Z0d2FyZSBpbiB0aGUKKyAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbAorICAgIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZSwgZm9yIGEgcHJpY2Ugbm8KKyAgICBtb3JlIHRoYW4geW91ciByZWFzb25hYmxlIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHRoaXMKKyAgICBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgZnJvbSBhIG5ldHdvcmsgc2VydmVyIGF0IG5vIGNoYXJnZS4KKworICAgIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlCisgICAgd3JpdHRlbiBvZmZlciB0byBwcm92aWRlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFRoaXMKKyAgICBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkgb2NjYXNpb25hbGx5IGFuZCBub25jb21tZXJjaWFsbHksIGFuZAorICAgIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAorICAgIHdpdGggc3Vic2VjdGlvbiA2Yi4KKworICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkCisgICAgcGxhY2UgKGdyYXRpcyBvciBmb3IgYSBjaGFyZ2UpLCBhbmQgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgaW4gdGhlIHNhbWUgd2F5IHRocm91Z2ggdGhlIHNhbWUgcGxhY2UgYXQgbm8KKyAgICBmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4gIElmIHRoZSBwbGFjZSB0bworICAgIGNvcHkgdGhlIG9iamVjdCBjb2RlIGlzIGEgbmV0d29yayBzZXJ2ZXIsIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZQorICAgIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KQorICAgIHRoYXQgc3VwcG9ydHMgZXF1aXZhbGVudCBjb3B5aW5nIGZhY2lsaXRpZXMsIHByb3ZpZGVkIHlvdSBtYWludGFpbgorICAgIGNsZWFyIGRpcmVjdGlvbnMgbmV4dCB0byB0aGUgb2JqZWN0IGNvZGUgc2F5aW5nIHdoZXJlIHRvIGZpbmQgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlLCB5b3UgcmVtYWluIG9ibGlnYXRlZCB0byBlbnN1cmUgdGhhdCBpdCBpcworICAgIGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyBuZWVkZWQgdG8gc2F0aXNmeSB0aGVzZSByZXF1aXJlbWVudHMuCisKKyAgICBlKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24sIHByb3ZpZGVkCisgICAgeW91IGluZm9ybSBvdGhlciBwZWVycyB3aGVyZSB0aGUgb2JqZWN0IGNvZGUgYW5kIENvcnJlc3BvbmRpbmcKKyAgICBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vCisgICAgY2hhcmdlIHVuZGVyIHN1YnNlY3Rpb24gNmQuCisKKyAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCitmcm9tIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBhcyBhIFN5c3RlbSBMaWJyYXJ5LCBuZWVkIG5vdCBiZQoraW5jbHVkZWQgaW4gY29udmV5aW5nIHRoZSBvYmplY3QgY29kZSB3b3JrLgorCisgIEEgIlVzZXIgUHJvZHVjdCIgaXMgZWl0aGVyICgxKSBhICJjb25zdW1lciBwcm9kdWN0Iiwgd2hpY2ggbWVhbnMgYW55Cit0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSB3aGljaCBpcyBub3JtYWxseSB1c2VkIGZvciBwZXJzb25hbCwgZmFtaWx5LAorb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbgoraW50byBhIGR3ZWxsaW5nLiAgSW4gZGV0ZXJtaW5pbmcgd2hldGhlciBhIHByb2R1Y3QgaXMgYSBjb25zdW1lciBwcm9kdWN0LAorZG91YnRmdWwgY2FzZXMgc2hhbGwgYmUgcmVzb2x2ZWQgaW4gZmF2b3Igb2YgY292ZXJhZ2UuICBGb3IgYSBwYXJ0aWN1bGFyCitwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCAibm9ybWFsbHkgdXNlZCIgcmVmZXJzIHRvIGEKK3R5cGljYWwgb3IgY29tbW9uIHVzZSBvZiB0aGF0IGNsYXNzIG9mIHByb2R1Y3QsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN0YXR1cworb2YgdGhlIHBhcnRpY3VsYXIgdXNlciBvciBvZiB0aGUgd2F5IGluIHdoaWNoIHRoZSBwYXJ0aWN1bGFyIHVzZXIKK2FjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdAoraXMgYSBjb25zdW1lciBwcm9kdWN0IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcHJvZHVjdCBoYXMgc3Vic3RhbnRpYWwKK2NvbW1lcmNpYWwsIGluZHVzdHJpYWwgb3Igbm9uLWNvbnN1bWVyIHVzZXMsIHVubGVzcyBzdWNoIHVzZXMgcmVwcmVzZW50Cit0aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KKworICAiSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIiBmb3IgYSBVc2VyIFByb2R1Y3QgbWVhbnMgYW55IG1ldGhvZHMsCitwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKK2FuZCBleGVjdXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGEgY292ZXJlZCB3b3JrIGluIHRoYXQgVXNlciBQcm9kdWN0IGZyb20KK2EgbW9kaWZpZWQgdmVyc2lvbiBvZiBpdHMgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBUaGUgaW5mb3JtYXRpb24gbXVzdAorc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QKK2NvZGUgaXMgaW4gbm8gY2FzZSBwcmV2ZW50ZWQgb3IgaW50ZXJmZXJlZCB3aXRoIHNvbGVseSBiZWNhdXNlCittb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZS4KKworICBJZiB5b3UgY29udmV5IGFuIG9iamVjdCBjb2RlIHdvcmsgdW5kZXIgdGhpcyBzZWN0aW9uIGluLCBvciB3aXRoLCBvcgorc3BlY2lmaWNhbGx5IGZvciB1c2UgaW4sIGEgVXNlciBQcm9kdWN0LCBhbmQgdGhlIGNvbnZleWluZyBvY2N1cnMgYXMKK3BhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQorVXNlciBQcm9kdWN0IGlzIHRyYW5zZmVycmVkIHRvIHRoZSByZWNpcGllbnQgaW4gcGVycGV0dWl0eSBvciBmb3IgYQorZml4ZWQgdGVybSAocmVnYXJkbGVzcyBvZiBob3cgdGhlIHRyYW5zYWN0aW9uIGlzIGNoYXJhY3Rlcml6ZWQpLCB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCitieSB0aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uLiAgQnV0IHRoaXMgcmVxdWlyZW1lbnQgZG9lcyBub3QgYXBwbHkKK2lmIG5laXRoZXIgeW91IG5vciBhbnkgdGhpcmQgcGFydHkgcmV0YWlucyB0aGUgYWJpbGl0eSB0byBpbnN0YWxsCittb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCitiZWVuIGluc3RhbGxlZCBpbiBST00pLgorCisgIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKK3JlcXVpcmVtZW50IHRvIGNvbnRpbnVlIHRvIHByb3ZpZGUgc3VwcG9ydCBzZXJ2aWNlLCB3YXJyYW50eSwgb3IgdXBkYXRlcworZm9yIGEgd29yayB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZCBieSB0aGUgcmVjaXBpZW50LCBvciBmb3IKK3RoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKK25ldHdvcmsgbWF5IGJlIGRlbmllZCB3aGVuIHRoZSBtb2RpZmljYXRpb24gaXRzZWxmIG1hdGVyaWFsbHkgYW5kCithZHZlcnNlbHkgYWZmZWN0cyB0aGUgb3BlcmF0aW9uIG9mIHRoZSBuZXR3b3JrIG9yIHZpb2xhdGVzIHRoZSBydWxlcyBhbmQKK3Byb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCisKKyAgQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQsIGFuZCBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gcHJvdmlkZWQsCitpbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5Citkb2N1bWVudGVkIChhbmQgd2l0aCBhbiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbgorc291cmNlIGNvZGUgZm9ybSksIGFuZCBtdXN0IHJlcXVpcmUgbm8gc3BlY2lhbCBwYXNzd29yZCBvciBrZXkgZm9yCit1bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KKworICA3LiBBZGRpdGlvbmFsIFRlcm1zLgorCisgICJBZGRpdGlvbmFsIHBlcm1pc3Npb25zIiBhcmUgdGVybXMgdGhhdCBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIGJ5IG1ha2luZyBleGNlcHRpb25zIGZyb20gb25lIG9yIG1vcmUgb2YgaXRzIGNvbmRpdGlvbnMuCitBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCitiZSB0cmVhdGVkIGFzIHRob3VnaCB0aGV5IHdlcmUgaW5jbHVkZWQgaW4gdGhpcyBMaWNlbnNlLCB0byB0aGUgZXh0ZW50Cit0aGF0IHRoZXkgYXJlIHZhbGlkIHVuZGVyIGFwcGxpY2FibGUgbGF3LiAgSWYgYWRkaXRpb25hbCBwZXJtaXNzaW9ucworYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQordW5kZXIgdGhvc2UgcGVybWlzc2lvbnMsIGJ1dCB0aGUgZW50aXJlIFByb2dyYW0gcmVtYWlucyBnb3Zlcm5lZCBieQordGhpcyBMaWNlbnNlIHdpdGhvdXQgcmVnYXJkIHRvIHRoZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zLgorCisgIFdoZW4geW91IGNvbnZleSBhIGNvcHkgb2YgYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgYXQgeW91ciBvcHRpb24KK3JlbW92ZSBhbnkgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBmcm9tIHRoYXQgY29weSwgb3IgZnJvbSBhbnkgcGFydCBvZgoraXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgorcmVtb3ZhbCBpbiBjZXJ0YWluIGNhc2VzIHdoZW4geW91IG1vZGlmeSB0aGUgd29yay4pICBZb3UgbWF5IHBsYWNlCithZGRpdGlvbmFsIHBlcm1pc3Npb25zIG9uIG1hdGVyaWFsLCBhZGRlZCBieSB5b3UgdG8gYSBjb3ZlcmVkIHdvcmssCitmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCisKKyAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBmb3IgbWF0ZXJpYWwgeW91CithZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCit0aGF0IG1hdGVyaWFsKSBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0ZXJtczoKKworICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZQorICAgIHRlcm1zIG9mIHNlY3Rpb25zIDE1IGFuZCAxNiBvZiB0aGlzIExpY2Vuc2U7IG9yCisKKyAgICBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IKKyAgICBhdXRob3IgYXR0cmlidXRpb25zIGluIHRoYXQgbWF0ZXJpYWwgb3IgaW4gdGhlIEFwcHJvcHJpYXRlIExlZ2FsCisgICAgTm90aWNlcyBkaXNwbGF5ZWQgYnkgd29ya3MgY29udGFpbmluZyBpdDsgb3IKKworICAgIGMpIFByb2hpYml0aW5nIG1pc3JlcHJlc2VudGF0aW9uIG9mIHRoZSBvcmlnaW4gb2YgdGhhdCBtYXRlcmlhbCwgb3IKKyAgICByZXF1aXJpbmcgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBvZiBzdWNoIG1hdGVyaWFsIGJlIG1hcmtlZCBpbgorICAgIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKKworICAgIGQpIExpbWl0aW5nIHRoZSB1c2UgZm9yIHB1YmxpY2l0eSBwdXJwb3NlcyBvZiBuYW1lcyBvZiBsaWNlbnNvcnMgb3IKKyAgICBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKKworICAgIGUpIERlY2xpbmluZyB0byBncmFudCByaWdodHMgdW5kZXIgdHJhZGVtYXJrIGxhdyBmb3IgdXNlIG9mIHNvbWUKKyAgICB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKKworICAgIGYpIFJlcXVpcmluZyBpbmRlbW5pZmljYXRpb24gb2YgbGljZW5zb3JzIGFuZCBhdXRob3JzIG9mIHRoYXQKKyAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgorICAgIGl0KSB3aXRoIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIG9mIGxpYWJpbGl0eSB0byB0aGUgcmVjaXBpZW50LCBmb3IKKyAgICBhbnkgbGlhYmlsaXR5IHRoYXQgdGhlc2UgY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgZGlyZWN0bHkgaW1wb3NlIG9uCisgICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgorCisgIEFsbCBvdGhlciBub24tcGVybWlzc2l2ZSBhZGRpdGlvbmFsIHRlcm1zIGFyZSBjb25zaWRlcmVkICJmdXJ0aGVyCityZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91CityZWNlaXZlZCBpdCwgb3IgYW55IHBhcnQgb2YgaXQsIGNvbnRhaW5zIGEgbm90aWNlIHN0YXRpbmcgdGhhdCBpdCBpcworZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggYSB0ZXJtIHRoYXQgaXMgYSBmdXJ0aGVyCityZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zCithIGZ1cnRoZXIgcmVzdHJpY3Rpb24gYnV0IHBlcm1pdHMgcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nIHVuZGVyIHRoaXMKK0xpY2Vuc2UsIHlvdSBtYXkgYWRkIHRvIGEgY292ZXJlZCB3b3JrIG1hdGVyaWFsIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcworb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMKK25vdCBzdXJ2aXZlIHN1Y2ggcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nLgorCisgIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKK211c3QgcGxhY2UsIGluIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMsIGEgc3RhdGVtZW50IG9mIHRoZQorYWRkaXRpb25hbCB0ZXJtcyB0aGF0IGFwcGx5IHRvIHRob3NlIGZpbGVzLCBvciBhIG5vdGljZSBpbmRpY2F0aW5nCit3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgorCisgIEFkZGl0aW9uYWwgdGVybXMsIHBlcm1pc3NpdmUgb3Igbm9uLXBlcm1pc3NpdmUsIG1heSBiZSBzdGF0ZWQgaW4gdGhlCitmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOwordGhlIGFib3ZlIHJlcXVpcmVtZW50cyBhcHBseSBlaXRoZXIgd2F5LgorCisgIDguIFRlcm1pbmF0aW9uLgorCisgIFlvdSBtYXkgbm90IHByb3BhZ2F0ZSBvciBtb2RpZnkgYSBjb3ZlcmVkIHdvcmsgZXhjZXB0IGFzIGV4cHJlc3NseQorcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgorbW9kaWZ5IGl0IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyCit0aGlzIExpY2Vuc2UgKGluY2x1ZGluZyBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhlIHRoaXJkCitwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCisKKyAgSG93ZXZlciwgaWYgeW91IGNlYXNlIGFsbCB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlLCB0aGVuIHlvdXIKK2xpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQorcHJvdmlzaW9uYWxseSwgdW5sZXNzIGFuZCB1bnRpbCB0aGUgY29weXJpZ2h0IGhvbGRlciBleHBsaWNpdGx5IGFuZAorZmluYWxseSB0ZXJtaW5hdGVzIHlvdXIgbGljZW5zZSwgYW5kIChiKSBwZXJtYW5lbnRseSwgaWYgdGhlIGNvcHlyaWdodAoraG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKK3ByaW9yIHRvIDYwIGRheXMgYWZ0ZXIgdGhlIGNlc3NhdGlvbi4KKworICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKK3JlaW5zdGF0ZWQgcGVybWFuZW50bHkgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIgbm90aWZpZXMgeW91IG9mIHRoZQordmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucywgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaGF2ZQorcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0Citjb3B5cmlnaHQgaG9sZGVyLCBhbmQgeW91IGN1cmUgdGhlIHZpb2xhdGlvbiBwcmlvciB0byAzMCBkYXlzIGFmdGVyCit5b3VyIHJlY2VpcHQgb2YgdGhlIG5vdGljZS4KKworICBUZXJtaW5hdGlvbiBvZiB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIHNlY3Rpb24gZG9lcyBub3QgdGVybWluYXRlIHRoZQorbGljZW5zZXMgb2YgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMgb3IgcmlnaHRzIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CityZWluc3RhdGVkLCB5b3UgZG8gbm90IHF1YWxpZnkgdG8gcmVjZWl2ZSBuZXcgbGljZW5zZXMgZm9yIHRoZSBzYW1lCittYXRlcmlhbCB1bmRlciBzZWN0aW9uIDEwLgorCisgIDkuIEFjY2VwdGFuY2UgTm90IFJlcXVpcmVkIGZvciBIYXZpbmcgQ29waWVzLgorCisgIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgorcnVuIGEgY29weSBvZiB0aGUgUHJvZ3JhbS4gIEFuY2lsbGFyeSBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQgd29yaworb2NjdXJyaW5nIHNvbGVseSBhcyBhIGNvbnNlcXVlbmNlIG9mIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24KK3RvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCitub3RoaW5nIG90aGVyIHRoYW4gdGhpcyBMaWNlbnNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBwcm9wYWdhdGUgb3IKK21vZGlmeSBhbnkgY292ZXJlZCB3b3JrLiAgVGhlc2UgYWN0aW9ucyBpbmZyaW5nZSBjb3B5cmlnaHQgaWYgeW91IGRvCitub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKK2NvdmVyZWQgd29yaywgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28uCisKKyAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgorCisgIEVhY2ggdGltZSB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkKK3JlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZAorcHJvcGFnYXRlIHRoYXQgd29yaywgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuICBZb3UgYXJlIG5vdCByZXNwb25zaWJsZQorZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aCB0aGlzIExpY2Vuc2UuCisKKyAgQW4gImVudGl0eSB0cmFuc2FjdGlvbiIgaXMgYSB0cmFuc2FjdGlvbiB0cmFuc2ZlcnJpbmcgY29udHJvbCBvZiBhbgorb3JnYW5pemF0aW9uLCBvciBzdWJzdGFudGlhbGx5IGFsbCBhc3NldHMgb2Ygb25lLCBvciBzdWJkaXZpZGluZyBhbgorb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKK3dvcmsgcmVzdWx0cyBmcm9tIGFuIGVudGl0eSB0cmFuc2FjdGlvbiwgZWFjaCBwYXJ0eSB0byB0aGF0Cit0cmFuc2FjdGlvbiB3aG8gcmVjZWl2ZXMgYSBjb3B5IG9mIHRoZSB3b3JrIGFsc28gcmVjZWl2ZXMgd2hhdGV2ZXIKK2xpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZAorZ2l2ZSB1bmRlciB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLCBwbHVzIGEgcmlnaHQgdG8gcG9zc2Vzc2lvbiBvZiB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGZyb20gdGhlIHByZWRlY2Vzc29yIGluIGludGVyZXN0LCBpZgordGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgorCisgIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIGV4ZXJjaXNlIG9mIHRoZQorcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKK25vdCBpbXBvc2UgYSBsaWNlbnNlIGZlZSwgcm95YWx0eSwgb3Igb3RoZXIgY2hhcmdlIGZvciBleGVyY2lzZSBvZgorcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgeW91IG1heSBub3QgaW5pdGlhdGUgbGl0aWdhdGlvbgorKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKK2FueSBwYXRlbnQgY2xhaW0gaXMgaW5mcmluZ2VkIGJ5IG1ha2luZywgdXNpbmcsIHNlbGxpbmcsIG9mZmVyaW5nIGZvcgorc2FsZSwgb3IgaW1wb3J0aW5nIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uIG9mIGl0LgorCisgIDExLiBQYXRlbnRzLgorCisgIEEgImNvbnRyaWJ1dG9yIiBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKK0xpY2Vuc2Ugb2YgdGhlIFByb2dyYW0gb3IgYSB3b3JrIG9uIHdoaWNoIHRoZSBQcm9ncmFtIGlzIGJhc2VkLiAgVGhlCit3b3JrIHRodXMgbGljZW5zZWQgaXMgY2FsbGVkIHRoZSBjb250cmlidXRvcidzICJjb250cmlidXRvciB2ZXJzaW9uIi4KKworICBBIGNvbnRyaWJ1dG9yJ3MgImVzc2VudGlhbCBwYXRlbnQgY2xhaW1zIiBhcmUgYWxsIHBhdGVudCBjbGFpbXMKK293bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRyaWJ1dG9yLCB3aGV0aGVyIGFscmVhZHkgYWNxdWlyZWQgb3IKK2hlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZAorYnkgdGhpcyBMaWNlbnNlLCBvZiBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLAorYnV0IGRvIG5vdCBpbmNsdWRlIGNsYWltcyB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBvbmx5IGFzIGEKK2NvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCitwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBpbmNsdWRlcyB0aGUgcmlnaHQgdG8gZ3JhbnQKK3BhdGVudCBzdWJsaWNlbnNlcyBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZgordGhpcyBMaWNlbnNlLgorCisgIEVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KK21ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHJ1biwgbW9kaWZ5IGFuZAorcHJvcGFnYXRlIHRoZSBjb250ZW50cyBvZiBpdHMgY29udHJpYnV0b3IgdmVyc2lvbi4KKworICBJbiB0aGUgZm9sbG93aW5nIHRocmVlIHBhcmFncmFwaHMsIGEgInBhdGVudCBsaWNlbnNlIiBpcyBhbnkgZXhwcmVzcworYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQsIGhvd2V2ZXIgZGVub21pbmF0ZWQsIG5vdCB0byBlbmZvcmNlIGEgcGF0ZW50Cisoc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCitzdWUgZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQpLiAgVG8gImdyYW50IiBzdWNoIGEgcGF0ZW50IGxpY2Vuc2UgdG8gYQorcGFydHkgbWVhbnMgdG8gbWFrZSBzdWNoIGFuIGFncmVlbWVudCBvciBjb21taXRtZW50IG5vdCB0byBlbmZvcmNlIGEKK3BhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KKworICBJZiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCBrbm93aW5nbHkgcmVseWluZyBvbiBhIHBhdGVudCBsaWNlbnNlLAorYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKK3RvIGNvcHksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aHJvdWdoIGEKK3B1YmxpY2x5IGF2YWlsYWJsZSBuZXR3b3JrIHNlcnZlciBvciBvdGhlciByZWFkaWx5IGFjY2Vzc2libGUgbWVhbnMsCit0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCithdmFpbGFibGUsIG9yICgyKSBhcnJhbmdlIHRvIGRlcHJpdmUgeW91cnNlbGYgb2YgdGhlIGJlbmVmaXQgb2YgdGhlCitwYXRlbnQgbGljZW5zZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHdvcmssIG9yICgzKSBhcnJhbmdlLCBpbiBhIG1hbm5lcgorY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudAorbGljZW5zZSB0byBkb3duc3RyZWFtIHJlY2lwaWVudHMuICAiS25vd2luZ2x5IHJlbHlpbmciIG1lYW5zIHlvdSBoYXZlCithY3R1YWwga25vd2xlZGdlIHRoYXQsIGJ1dCBmb3IgdGhlIHBhdGVudCBsaWNlbnNlLCB5b3VyIGNvbnZleWluZyB0aGUKK2NvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKK2luIGEgY291bnRyeSwgd291bGQgaW5mcmluZ2Ugb25lIG9yIG1vcmUgaWRlbnRpZmlhYmxlIHBhdGVudHMgaW4gdGhhdAorY291bnRyeSB0aGF0IHlvdSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlIGFyZSB2YWxpZC4KKworICBJZiwgcHVyc3VhbnQgdG8gb3IgaW4gY29ubmVjdGlvbiB3aXRoIGEgc2luZ2xlIHRyYW5zYWN0aW9uIG9yCithcnJhbmdlbWVudCwgeW91IGNvbnZleSwgb3IgcHJvcGFnYXRlIGJ5IHByb2N1cmluZyBjb252ZXlhbmNlIG9mLCBhCitjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKK3JlY2VpdmluZyB0aGUgY292ZXJlZCB3b3JrIGF1dGhvcml6aW5nIHRoZW0gdG8gdXNlLCBwcm9wYWdhdGUsIG1vZGlmeQorb3IgY29udmV5IGEgc3BlY2lmaWMgY29weSBvZiB0aGUgY292ZXJlZCB3b3JrLCB0aGVuIHRoZSBwYXRlbnQgbGljZW5zZQoreW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQKK3dvcmsgYW5kIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIEEgcGF0ZW50IGxpY2Vuc2UgaXMgImRpc2NyaW1pbmF0b3J5IiBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbgordGhlIHNjb3BlIG9mIGl0cyBjb3ZlcmFnZSwgcHJvaGliaXRzIHRoZSBleGVyY2lzZSBvZiwgb3IgaXMKK2NvbmRpdGlvbmVkIG9uIHRoZSBub24tZXhlcmNpc2Ugb2Ygb25lIG9yIG1vcmUgb2YgdGhlIHJpZ2h0cyB0aGF0IGFyZQorc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZAord29yayBpZiB5b3UgYXJlIGEgcGFydHkgdG8gYW4gYXJyYW5nZW1lbnQgd2l0aCBhIHRoaXJkIHBhcnR5IHRoYXQgaXMKK2luIHRoZSBidXNpbmVzcyBvZiBkaXN0cmlidXRpbmcgc29mdHdhcmUsIHVuZGVyIHdoaWNoIHlvdSBtYWtlIHBheW1lbnQKK3RvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nCit0aGUgd29yaywgYW5kIHVuZGVyIHdoaWNoIHRoZSB0aGlyZCBwYXJ0eSBncmFudHMsIHRvIGFueSBvZiB0aGUKK3BhcnRpZXMgd2hvIHdvdWxkIHJlY2VpdmUgdGhlIGNvdmVyZWQgd29yayBmcm9tIHlvdSwgYSBkaXNjcmltaW5hdG9yeQorcGF0ZW50IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yaworY29udmV5ZWQgYnkgeW91IChvciBjb3BpZXMgbWFkZSBmcm9tIHRob3NlIGNvcGllcyksIG9yIChiKSBwcmltYXJpbHkKK2ZvciBhbmQgaW4gY29ubmVjdGlvbiB3aXRoIHNwZWNpZmljIHByb2R1Y3RzIG9yIGNvbXBpbGF0aW9ucyB0aGF0Citjb250YWluIHRoZSBjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsCitvciB0aGF0IHBhdGVudCBsaWNlbnNlIHdhcyBncmFudGVkLCBwcmlvciB0byAyOCBNYXJjaCAyMDA3LgorCisgIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRpbmcgb3IgbGltaXRpbmcKK2FueSBpbXBsaWVkIGxpY2Vuc2Ugb3Igb3RoZXIgZGVmZW5zZXMgdG8gaW5mcmluZ2VtZW50IHRoYXQgbWF5CitvdGhlcndpc2UgYmUgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhcHBsaWNhYmxlIHBhdGVudCBsYXcuCisKKyAgMTIuIE5vIFN1cnJlbmRlciBvZiBPdGhlcnMnIEZyZWVkb20uCisKKyAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QgY29udmV5IGEKK2NvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkKK25vdCBjb252ZXkgaXQgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhZ3JlZSB0byB0ZXJtcyB0aGF0IG9ibGlnYXRlIHlvdQordG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nIGZyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5Cit0aGUgUHJvZ3JhbSwgdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggdGhvc2UgdGVybXMgYW5kIHRoaXMKK0xpY2Vuc2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseSBmcm9tIGNvbnZleWluZyB0aGUgUHJvZ3JhbS4KKworICAxMy4gVXNlIHdpdGggdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHlvdSBoYXZlCitwZXJtaXNzaW9uIHRvIGxpbmsgb3IgY29tYmluZSBhbnkgY292ZXJlZCB3b3JrIHdpdGggYSB3b3JrIGxpY2Vuc2VkCit1bmRlciB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnRvIGEgc2luZ2xlCitjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4gIFRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIHdpbGwgY29udGludWUgdG8gYXBwbHkgdG8gdGhlIHBhcnQgd2hpY2ggaXMgdGhlIGNvdmVyZWQgd29yaywKK2J1dCB0aGUgc3BlY2lhbCByZXF1aXJlbWVudHMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK3NlY3Rpb24gMTMsIGNvbmNlcm5pbmcgaW50ZXJhY3Rpb24gdGhyb3VnaCBhIG5ldHdvcmsgd2lsbCBhcHBseSB0byB0aGUKK2NvbWJpbmF0aW9uIGFzIHN1Y2guCisKKyAgMTQuIFJldmlzZWQgVmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLgorCisgIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mCit0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCisgIEVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlCitQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgY2VydGFpbiBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoZSBHTlUgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKK29wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IG51bWJlcmVkCit2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZAorYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBJZiB0aGUgUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIHByb3h5IGNhbiBkZWNpZGUgd2hpY2ggZnV0dXJlCit2ZXJzaW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgY2FuIGJlIHVzZWQsIHRoYXQgcHJveHkncworcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdQordG8gY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlIFByb2dyYW0uCisKKyAgTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQKK3Blcm1pc3Npb25zLiAgSG93ZXZlciwgbm8gYWRkaXRpb25hbCBvYmxpZ2F0aW9ucyBhcmUgaW1wb3NlZCBvbiBhbnkKK2F1dGhvciBvciBjb3B5cmlnaHQgaG9sZGVyIGFzIGEgcmVzdWx0IG9mIHlvdXIgY2hvb3NpbmcgdG8gZm9sbG93IGEKK2xhdGVyIHZlcnNpb24uCisKKyAgMTUuIERpc2NsYWltZXIgb2YgV2FycmFudHkuCisKKyAgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWQorQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVAorSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWQorT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQorSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GCitBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTYuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LgorCisgIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNT0RJRklFUyBBTkQvT1IgQ09OVkVZUworVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZCitHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUKK1VTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YKK0RBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJECitQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwKK0VWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFUy4KKworICAxNy4gSW50ZXJwcmV0YXRpb24gb2YgU2VjdGlvbnMgMTUgYW5kIDE2LgorCisgIElmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZAorYWJvdmUgY2Fubm90IGJlIGdpdmVuIGxvY2FsIGxlZ2FsIGVmZmVjdCBhY2NvcmRpbmcgdG8gdGhlaXIgdGVybXMsCityZXZpZXdpbmcgY291cnRzIHNoYWxsIGFwcGx5IGxvY2FsIGxhdyB0aGF0IG1vc3QgY2xvc2VseSBhcHByb3hpbWF0ZXMKK2FuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUKK1Byb2dyYW0sIHVubGVzcyBhIHdhcnJhbnR5IG9yIGFzc3VtcHRpb24gb2YgbGlhYmlsaXR5IGFjY29tcGFuaWVzIGEKK2NvcHkgb2YgdGhlIFByb2dyYW0gaW4gcmV0dXJuIGZvciBhIGZlZS4KKworICAgICAgICAgICAgICAgICAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5CitzdGF0ZSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKKyAgSWYgdGhlIHByb2dyYW0gZG9lcyB0ZXJtaW5hbCBpbnRlcmFjdGlvbiwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydAorbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgPHByb2dyYW0+ICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorICAgIFRoaXMgcHJvZ3JhbSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgeW91ciBwcm9ncmFtJ3MgY29tbWFuZHMKK21pZ2h0IGJlIGRpZmZlcmVudDsgZm9yIGEgR1VJIGludGVyZmFjZSwgeW91IHdvdWxkIHVzZSBhbiAiYWJvdXQgYm94Ii4KKworICBZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3Igc2Nob29sLAoraWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4KK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMsIGFuZCBob3cgdG8gYXBwbHkgYW5kIGZvbGxvdyB0aGUgR05VIEdQTCwgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyAgVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbQoraW50byBwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91CittYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGgKK3RoZSBsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuICBCdXQgZmlyc3QsIHBsZWFzZSByZWFkCis8aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWw+LgpkaWZmIC0tZ2l0IGEvRkFRIGIvRkFRCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNzE2OTEKLS0tIC9kZXYvbnVsbAorKysgYi9GQVEKQEAgLTAsMCArMSw1MDkgQEAKK1E6IFdoeSBkb2VzIGRuc21hc3Egb3BlbiBVRFAgcG9ydHMgPjEwMjQgYXMgd2VsbCBhcyBwb3J0IDUzLgorICAgSXMgdGhpcyBhIHNlY3VyaXR5IHByb2JsZW0vdHJvamFuL2JhY2tkb29yPworCitBOiBUaGUgaGlnaCBwb3J0cyB0aGF0IGRuc21hc3Egb3BlbnMgYXJlIGZvciByZXBsaWVzIGZyb20gdGhlIHVwc3RyZWFtCisgICBuYW1lc2VydmVyKHMpLiBRdWVyaWVzIGZyb20gZG5zbWFzcSB0byB1cHN0cmVhbSBuYW1lc2VydmVycyBhcmUgc2VudAorICAgZnJvbSB0aGVzZSBwb3J0cyBhbmQgcmVwbGllcyByZWNlaXZlZCB0byB0aGVtLiBUaGUgcmVhc29uIGZvciBkb2luZyB0aGlzIGlzCisgICB0aGF0IG1vc3QgZmlyZXdhbGwgc2V0dXBzIGJsb2NrIGluY29taW5nIHBhY2tldHMgX3RvXyBwb3J0IDUzLCBpbiBvcmRlcgorICAgdG8gc3RvcCBETlMgcXVlcmllcyBmcm9tIHRoZSBvdXRzaWRlIHdvcmxkLiBJZiBkbnNtYXNxIHNlbnQgaXRzIHF1ZXJpZXMKKyAgIGZyb20gcG9ydCA1MyB0aGUgcmVwbGllcyB3b3VsZCBiZSBfdG9fIHBvcnQgNTMgYW5kIGdldCBibG9ja2VkLgorCisgICBUaGlzIGlzIG5vdCBhIHNlY3VyaXR5IGhvbGUgc2luY2UgZG5zbWFzcSB3aWxsIG9ubHkgYWNjZXB0IHJlcGxpZXMgdG8gdGhhdAorICAgcG9ydDogcXVlcmllcyBhcmUgIGRyb3BwZWQuIFRoZSByZXBsaWVzIG11c3QgYmUgdG8gb3VzdGFuZGluZyBxdWVyaWVzCisgICB3aGljaCBkbnNtYXNxIGhhcyBmb3J3YXJkZWQsIG90aGVyd2lzZSB0aGV5IGFyZSBkcm9wcGVkIHRvby4KKyAKKyAgIEFkZGVuZHVtOiBkbnNtYXNxIG5vdyBoYXMgdGhlIG9wdGlvbiAicXVlcnktcG9ydCIgKC1RKSwgd2hpY2ggYWxsb3dzCisgICB5b3UgdG8gc3BlY2lmeSB0aGUgVURQIHBvcnQgdG8gYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLiAgSWYgbm90CisgICBzcGVjaWZpZWQsIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpbGwgc2VsZWN0IGFuIGF2YWlsYWJsZSBwb3J0IG51bWJlcgorICAganVzdCBhcyBpdCBkaWQgYmVmb3JlLgorCisgICBTZWNvbmQgYWRkZW5kdW06IGZvbGxvd2luZyB0aGUgZGlzY292ZXJ5IG9mIGEgc2VjdXJpdHkgZmxhdyBpbiB0aGUKKyAgIEROUyBwcm90b2NvbCwgZG5zbWFzcSBmcm9tIHZlcnNpb24gMi40MyBoYXMgY2hhbmdlZCBiZWhhdmlvci4gSXQKKyAgIG5vdyB1c2VzIGEgbmV3LCByYW5kb21seSBzZWxlY3RlZCwgcG9ydCBmb3IgZWFjaCBxdWVyeS4gVGhlIG9sZAorICAgZGVmYXVsdCBiZWhhdmlvdXIgKHVzZSBvbmUgcG9ydCBhbGxvY2F0ZWQgYnkgdGhlIE9TKSBpcyBhdmFpbGFibGUgYnkKKyAgIHNldHRpbmcgLS1xdWVyeS1wb3J0PTAsIGFuZCBzZXR0aW5nIHRoZSBxdWVyeSBwb3J0IHRvIGEgcG9zaXRpdmUKKyAgIHZhbHVlIHN0aWxsIHdvcmtzLiBZb3Ugc2hvdWxkIHRoaW5rIGhhcmQgYW5kIGtub3cgd2hhdCB5b3UgYXJlCisgICBkb2luZyBiZWZvcmUgdXNpbmcgZWl0aGVyIG9mIHRoZXNlIG9wdGlvbnMuCisgCitROiBXaHkgZG9lc24ndCBkbnNtYXNxIHN1cHBvcnQgRE5TIHF1ZXJpZXMgb3ZlciBUQ1A/IERvbid0IHRoZSBSRkMncyBzcGVjaWZ5CisgICB0aGF0PworCitBOiBVcGRhdGU6IGZyb20gdmVyc2lvbiAyLjEwLCBpdCBkb2VzLiBUaGVyZSBhcmUgYSBmZXcgbGltaXRhdGlvbnM6CisgICBkYXRhIG9idGFpbmVkIHZpYSBUQ1AgaXMgbm90IGNhY2hlZCwgYW5kIHNvdXJjZS1hZGRyZXNzCisgICBvciBxdWVyeS1wb3J0IHNwZWNpZmljYXRpb25zIGFyZSBpZ25vcmVkIGZvciBUQ1AuCisKK1E6IFdoZW4gSSBzZW5kIFNJR1VTUjEgdG8gZHVtcCB0aGUgY29udGVudHMgb2YgdGhlIGNhY2hlLCBzb21lIGVudHJpZXMgaGF2ZQorICAgbm8gSVAgYWRkcmVzcyBhbmQgYXJlIGZvciBuYW1lcyBsaWtlIG15bWFjaGluZS5teWRvbWFpbi5jb20ubXlkb21haW4uY29tLgorICAgV2hhdCBhcmUgdGhlc2U/CisKK0E6IFRoZXkgYXJlIG5lZ2F0aXZlIGVudHJpZXM6IHRoYXQncyB3aGF0IHRoZSBOIGZsYWcgbWVhbnMuIERuc21hc3EgYXNrZWQgCisgICBhbiB1cHN0cmVhbSBuYW1lc2VydmVyIHRvIHJlc29sdmUgdGhhdCBhZGRyZXNzIGFuZCBpdCByZXBsaWVkICJkb2Vzbid0IAorICAgZXhpc3QsIGFuZCB3b24ndCBleGlzdCBmb3IgPG4+IGhvdXJzIiBzbyBkbnNtYXNxIHNhdmVkIHRoYXQgaW5mb3JtYXRpb24gc28KKyAgIHRoYXQgaWYgX2l0XyBnZXRzIGFza2VkIHRoZSBzYW1lIHF1ZXN0aW9uIGl0IGNhbiBhbnN3ZXIgZGlyZWN0bHkgd2l0aG91dAorICAgaGF2aW5nIHRvIGdvIGJhY2sgdG8gdGhlIHVwc3RyZWFtIHNlcnZlciBhZ2Fpbi4gVGhlIHN0cmFuZ2UgcmVwZWF0ZWQgZG9tYWlucworICAgcmVzdWx0IGZyb20gdGhlIHdheSByZXNvbHZlcnMgc2VhcmNoIHNob3J0IG5hbWVzLiBTZWUgIm1hbiByZXNvbHYuY29uZiIgZm9yCisgICBkZXRhaWxzLgorCisKK1E6IFdpbGwgZG5zbWFzcSBjb21waWxlL3J1biBvbiBub24tTGludXggc3lzdGVtcz8KKworQTogWWVzLCB0aGVyZSBpcyBleHBsaWNpdCBzdXBwb3J0IGZvciAqQlNEIGFuZCBNYWNPUyBYIGFuZCBTb2xhcmlzLiAKKyAgIFRoZXJlIGFyZSBzdGFydC11cCBzY3JpcHRzIGZvciBNYWNPUyBYIFRpZ2VyIGFuZCBQYW50aGVyIAorICAgaW4gL2NvbnRyaWIuIERuc21hc3Egd2lsbCBsaW5rIHdpdGggdWNsaWJjIHRvIHByb3ZpZGUgc21hbGwKKyAgIGJpbmFyaWVzIHN1aXRhYmxlIGZvciB1c2UgaW4gZW1iZWRkZWQgc3lzdGVtcyBzdWNoIGFzCisgICByb3V0ZXJzLiAoVGhlcmUncyBzcGVjaWFsIGNvZGUgdG8gc3VwcG9ydCBtYWNoaW5lcyB3aXRoIGZsYXNoCisgICBmaWxlc3lzdGVtcyBhbmQgbm8gYmF0dGVyeS1iYWNrZWQgUlRDLikKKyAgIElmIHlvdSBlbmNvdW50ZXIgbWFrZSBlcnJvcnMgd2l0aCAqQlNELCB0cnkgaW5zdGFsbGluZyBnbWFrZSBmcm9tCisgICBwb3J0cyBhbmQgYnVpbGRpbmcgZG5zbWFzcSB3aXRoICJtYWtlIE1BS0U9Z21ha2UiIAorICAgRm9yIG90aGVyIHN5c3RlbXMsIHRyeSBhbHRlcmluZyB0aGUgc2V0dGluZ3MgaW4gY29uZmlnLmguCisgCitROiBNeSBjb21wYW55J3MgbmFtZXNlcnZlciBrbm93cyBhYm91dCBzb21lIG5hbWVzIHdoaWNoIGFyZW4ndCBpbiB0aGUKKyAgIHB1YmxpYyBETlMuIEV2ZW4gdGhvdWdoIEkgcHV0IGl0IGZpcnN0IGluIC9ldGMvcmVzb2x2LmNvbmYsIGl0CisgICBkb3Nlbid0IHdvcms6IGRuc21hc3Egc2VlbXMgbm90IHRvIHVzZSB0aGUgbmFtZXNlcnZlcnMgaW4gdGhlIG9yZGVyCisgICBnaXZlbi4gV2hhdCBhbSBJIGRvaW5nIHdyb25nPworCitBOiBCeSBkZWZhdWx0LCBkbnNtYXNxIHRyZWF0cyBhbGwgdGhlIG5hbWVzZXJ2ZXJzIGl0IGtub3dzIGFib3V0IGFzCisgICBlcXVhbDogaXQgcGlja3MgdGhlIG9uZSB0byB1c2UgdXNpbmcgYW4gYWxnb3JpdGhtIGRlc2lnbmVkIHRvIGF2b2lkIAorICAgbmFtZXNlcnZlcnMgd2hpY2ggYXJlbid0IHJlc3BvbmRpbmcuIFRvIG1ha2UgZG5zbWFzcSB1c2UgdGhlCisgICBzZXJ2ZXJzIGluIG9yZGVyLCBnaXZlIGl0IHRoZSAtbyBmbGFnLiBJZiB5b3Ugd2FudCBzb21lIHF1ZXJpZXMKKyAgIHNlbnQgdG8gYSBzcGVjaWFsIHNlcnZlciwgdGhpbmsgYWJvdXQgdXNpbmcgdGhlIC1TIGZsYWcgdG8gZ2l2ZSB0aGUKKyAgIElQIGFkZHJlc3Mgb2YgdGhhdCBzZXJ2ZXIsIGFuZCB0ZWxsaW5nIGRuc21hc3EgZXhhY3RseSB3aGljaAorICAgZG9tYWlucyB0byB1c2UgdGhlIHNlcnZlciBmb3IuCisKK1E6IE9LLCBJJ3ZlIGdvdCBxdWVyaWVzIHRvIGEgcHJpdmF0ZSBuYW1lc2VydmVyIHdvcmtpbmcsIG5vdyBob3cgYWJvdXQgCisgICByZXZlcnNlIHF1ZXJpZXMgZm9yIGEgcmFuZ2Ugb2YgSVAgYWRkcmVzc2VzPworCitBOiBVc2UgdGhlIHN0YW5kYXJkIEROUyBjb252ZW50aW9uIG9mIDxyZXZlcnNlZCBhZGRyZXNzPi5pbi1hZGRyLmFycGEuCisgICBGb3IgaW5zdGFuY2UgdG8gc2VuZCByZXZlcnNlIHF1ZXJpZXMgb24gdGhlIHJhbmdlIDE5Mi4xNjguMC4wIHRvIAorICAgMTkyLjE2OC4wLjI1NSB0byBhIG5hbWVzZXJ2ZXIgYXQgMTAuMC4wLjEgZG8KKyAgIHNlcnZlcj0vMC4xNjguMTkyLmluLWFkZHIuYXJwYS8xMC4wLjAuMQorICAgTm90ZSB0aGF0IHRoZSAiYm9ndXMtcHJpdiIgb3B0aW9uIHRha2UgcHJpb3JpdHkgb3ZlciB0aGlzIG9wdGlvbiwKKyAgIHNvIHRoZSBhYm92ZSB3aWxsIG5vdCB3b3JrIHdoZW4gdGhlIGJvZ3VzLXByaXYgb3B0aW9uIGlzIHNldC4KKworUTogRG5zbWFzcSBmYWlscyB0byBzdGFydCB3aXRoIGFuIGVycm9yIGxpa2UgdGhpczogImRuc21hc3E6IGJpbmQKKyAgIGZhaWxlZDogQ2Fubm90IGFzc2lnbiByZXF1ZXN0ZWQgYWRkcmVzcyIuIFdoYXQncyB0aGUgcHJvYmxlbT8KKworQTogVGhpcyBoYXMgYmVlbiBzZWVuIHdoZW4gYSBzeXN0ZW0gaXMgYnJpbmdpbmcgdXAgYSBQUFAgaW50ZXJmYWNlIGF0CisgICBib290IHRpbWU6IGJ5IHRoZSB0aW1lIGRuc21hc3Egc3RhcnQgdGhlIGludGVyZmFjZSBoYXMgYmVlbgorICAgY3JlYXRlZCwgYnV0IG5vdCBicm91Z2h0IHVwIGFuZCBhc3NpZ25lZCBhbiBhZGRyZXNzLiBUaGUgZWFzaWVzdAorICAgc29sdXRpb24gaXMgdG8gdXNlIC0taW50ZXJmYWNlIGZsYWdzIHRvIHNwZWNpZnkgd2hpY2ggaW50ZXJmYWNlcworICAgZG5zbWFzcSBzaG91bGQgbGlzdGVuIG9uLiBTaW5jZSB5b3UgYXJlIHVubGlrZWx5IHRvIHdhbnQgZG5zbWFzcSB0bworICAgbGlzdGVuIG9uIGEgUFBQIGludGVyZmFjZSBhbmQgb2ZmZXIgRE5TIHNlcnZpY2UgdG8gdGhlIHdvcmxkLCB0aGUKKyAgIHByb2JsZW0gaXMgc29sdmVkLgorCitROiBJJ20gcnVubmluZyBvbiBCU0QgYW5kIGRuc21hc3Egd29uJ3QgYWNjZXB0IGxvbmcgb3B0aW9ucyBvbiB0aGUKKyAgIGNvbW1hbmQgbGluZS4gCisKK0E6IERuc21hc3Egd2hlbiBidWlsdCBvbiBzb21lIEJTRCBzeXN0ZW1zIGRvZXNuJ3QgdXNlIEdOVSBnZXRvcHQgYnkKKyAgIGRlZmF1bHQuIFlvdSBjYW4gZWl0aGVyIGp1c3QgdXNlIHRoZSBzaW5nbGUtbGV0dGVyIG9wdGlvbnMgb3IKKyAgIGNoYW5nZSBjb25maWcuaCBhbmQgdGhlIE1ha2VmaWxlIHRvIHVzZSBnZXRvcHQtbG9uZy4gTm90ZSB0aGF0CisgICBvcHRpb25zIGluIC9ldGMvZG5zbWFzcS5jb25mIG11c3QgYWx3YXlzIGJlIHRoZSBsb25nIGZvcm0sCisgICBvbiBhbGwgcGxhdGZvcm1zLgorCitROiBOYW1lcyBvbiB0aGUgaW50ZXJuZXQgYXJlIHdvcmtpbmcgZmluZSwgYnV0IGxvb2tpbmcgdXAgbG9jYWwgbmFtZXMgCisgICBmcm9tIC9ldGMvaG9zdHMgb3IgREhDUCBkb2Vzbid0IHNlZW0gdG8gd29yay4KKworQTogUmVzb2x2ZXIgY29kZSBzb21ldGltZSBkb2VzIHN0cmFuZ2UgdGhpbmdzIHdoZW4gZ2l2ZW4gbmFtZXMgd2l0aG91dAorICAgYW55IGRvdHMgaW4uIFdpbjJrIGFuZCBXaW5YUCBtYXkgbm90IHVzZSB0aGUgRE5TIGF0IGFsbCBhbmQganVzdAorICAgdHJ5IGFuZCBsb29rIHVwIHRoZSBuYW1lIHVzaW5nIFdJTlMuIE9uIHVuaXggbG9vayBhdCAib3B0aW9ucyBuZG90czoiCisgICBpbiAibWFuIHJlc29sdi5jb25mIiBmb3IgZGV0YWlscyBvbiB0aGlzIHRvcGljLiBUZXN0aW5nIGxvb2t1cHMKKyAgIHVzaW5nICJuc2xvb2t1cCIgb3IgImRpZyIgd2lsbCB3b3JrLCBidXQgdGhlbiBhdHRlbXB0aW5nIHRvIHJ1bgorICAgInBpbmciIHdpbGwgZ2V0IGEgbG9va3VwIGZhaWx1cmUsIGFwcGVuZGluZyBhIGRvdCB0byB0aGUgZW5kIG9mIHRoZQorICAgaG9zdG5hbWUgIHdpbGwgZml4IHRoaW5ncy4gKGllICJwaW5nIG15aG9zdCIgZmFpbHMsIGJ1dCAicGluZworICAgbXlob3N0LiIgd29ya3MuIFRoZSBzb2x1dGlvbiBpcyB0byBtYWtlIHN1cmUgdGhhdCBhbGwgeW91ciBob3N0cworICAgaGF2ZSBhIGRvbWFpbiBzZXQgKCJkb21haW4iIGluIHJlc29sdi5jb25mLCBvciBzZXQgYSBkb21haW4gaW4gCisgICB5b3VyIERIQ1Agc2VydmVyLCBzZWUgYmVsb3cgZm9yIFdpbmRvd3MgWFAgYW5kIE1hYyBPUyBYKS4gCisgICBBbnkgZG9tYWluICB3aWxsIGRvLCBidXQgImxvY2FsbmV0IiBpcyB0cmFkaXRpb25hbC4gTm93IHdoZW4geW91CisgICByZXNvbHZlICJteWhvc3QiIHRoZSByZXNvbHZlciB3aWxsIGF0dGVtcHQgdG8gbG9vayB1cCAKKyAgICJteWhvc3QubG9jYWxuZXQiIHNvIHlvdSBuZWVkIHRvIGhhdmUgZG5zbWFzcSByZXBseSB0byB0aGF0IG5hbWUuIAorICAgVGhlIHdheSB0byBkbyB0aGF0IGlzIHRvIGluY2x1ZGUgdGhlIGRvbWFpbiBpbiBlYWNoIG5hbWUgb24KKyAgIC9ldGMvaG9zdHMgIGFuZC9vciB0byB1c2UgdGhlIC0tZXhwYW5kLWhvc3RzIGFuZCAtLWRvbWFpbiBvcHRpb25zLgorCitROiBIb3cgZG8gSSBzZXQgdGhlIEROUyBkb21haW4gaW4gV2luZG93cyBYUCBvciBNYWNPUyBYIChyZWY6IHByZXZpb3VzCisgICBxdWVzdGlvbik/CisKK0E6IGZvciBYUCwgQ29udHJvbCBQYW5lbCA+IE5ldHdvcmsgQ29ubmVjdGlvbnMgPiB7IENvbm5lY3Rpb24gdG8gZ2F0ZXdheSAvCisgICBETlMgfSA+IFByb3BlcnRpZXMgPiB7IEhpZ2hsaWdodCBUQ1AvSVAgfSA+IFByb3BlcnRpZXMgPiBBZHZhbmNlZCA+CisgICBETlMgVGFiID4gRE5TIHN1ZmZpeCBmb3IgdGhpcyBjb25uZWN0aW9uOiAKKworQTogZm9yIE9TIFgsIFN5c3RlbSBQcmVmZXJlbmNlcyA+IE5ldHdvcmsgPiB7Q29ubmVjdGlvbiB0byBnYXRld2F5IC8gRE5TIH0gPgorICAgU2VhcmNoIGRvbWFpbnM6CisKK1E6IENhbiBJIGdldCBkbnNtYXNxIHRvIHNhdmUgdGhlIGNvbnRlbnRzIG9mIGl0cyBjYWNoZSB0byBkaXNrIHdoZW4KKyAgIEkgc2h1dCBteSBtYWNoaW5lIGRvd24gYW5kIHJlLWxvYWQgd2hlbiBpdCBzdGFydHMgYWdhaW4/CisKK0E6IE5vLCB0aGF0IGZhY2lsaXR5IGlzIG5vdCBwcm92aWRlZC4gVmVyeSBmZXcgbmFtZXMgaW4gdGhlIEROUyBoYXZlCisgICB0aGVpciB0aW1lLXRvLWxpdmUgc2V0IGZvciBsb25nZXIgdGhhbiBhIGZldyBob3VycyBzbyBtb3N0IG9mIHRoZQorICAgY2FjaGUgZW50cmllcyB3b3VsZCBoYXZlIGV4cGlyZWQgYWZ0ZXIgYSBzaHV0ZG93bi4gRm9yIGxvbmdlci1saXZlZAorICAgbmFtZXMgaXQncyBtdWNoIGNoZWFwZXIgdG8ganVzdCByZWxvYWQgdGhlbSBmcm9tIHRoZSB1cHN0cmVhbQorICAgc2VydmVyLiBOb3RlIHRoYXQgZG5zbWFzcSBpcyBub3Qgc2h1dCBkb3duIGJldHdlZW4gUFBQIHNlc3Npb25zIHNvCisgICBnbyBvZmYtbGluZSBhbmQgdGhlbiBvbi1saW5lIGFnYWluIHdpbGwgbm90IGxvc2UgdGhlIGNvbnRlbnRzIG9mCisgICB0aGUgY2FjaGUuCisKK1E6IFdobyBhcmUgVmVyaXNpZ24sIHdoYXQgZG8gdGhleSBoYXZlIHRvIGRvIHdpdGggdGhlIGJvZ3VzLW54ZG9tYWluCisgICBvcHRpb24gaW4gZG5zbWFzcSBhbmQgd2h5IHNob3VsZCBJIHdvcnkgYWJvdXQgaXQ/CisKK0E6IFtub3RlOiB0aGlzIHdhcyB3cml0dGVuIGluIFNlcHRlbWJlciAyMDAzLCB0aGluZ3MgbWF5IHdlbGwgY2hhbmdlLl0KKyAgIFZlcnNpZ24gcnVuIHRoZSAuY29tIGFuZCAubmV0IHRvcC1sZXZlbC1kb21haW5zLiBUaGV5IGhhdmUganVzdAorICAgY2hhbmdlZCB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGVpciBzZXJ2ZXJzIHNvIHRoYXQgdW5rbm93biAuY29tIGFuZAorICAgLm5ldCBkb21haW5zLCBpbnN0ZWFkIG9mIHJldHVybmluZyBhbiBlcnJvciBjb2RlIE5YRE9NQUlOLCAobm8gc3VjaAorICAgZG9tYWluKSByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgYSBob3N0IGF0IFZlcnNpZ24gd2hpY2ggcnVucyBhIHdlYgorICAgc2VydmVyIHNob3dpbmcgYSBzZWFyY2ggcGFnZS4gTW9zdCByaWdodC10aGlua2luZyBwZW9wbGUgcmVnYXJkCisgICB0aGlzIG5ldyBiZWhhdmlvdXIgYXMgYnJva2VuIDotKS4gIFlvdSBjYW4gdGVzdCB0byBzZWUgaWYgeW91IGFyZQorICAgc3VmZmVyaW5nIFZlcnNpZ24gYnJva2VuZXNzIGJ5IHJ1biBhIGNvbW1hbmQgbGlrZSAKKyAgIAorICAgaG9zdCBqbHNkYWprZGFsbGQuY29tCisKKyAgIElmIHlvdSBnZXQgImpsc2RhamtkYWxsZC5jb20iIGRvZXMgbm90IGV4aXN0LCB0aGVuIGFsbCBpcyBmaW5lLCBpZgorICAgaG9zdCByZXR1cm5zIGFuIElQIGFkZHJlc3MsIHRoZW4gdGhlIEROUyBpcyBicm9rZW4uIChUcnkgYSBmZXcKKyAgIGRpZmZlcmVudCB1bmxpa2VseSBkb21haW5zLCBqdXN0IGluIGNhc2UgeW91IHBpY2tlZCBhIHdpZXJkIG9uZQorICAgd2hpY2ggcmVhbGx5IF9pc18gcmVnaXN0ZXJlZC4pCisKKyAgIEFzc3VtaW5nIHRoYXQgeW91ciBETlMgaXMgYnJva2VuLCBhbmQgeW91IHdhbnQgdG8gZml4IGl0LCBzaW1wbHkKKyAgIG5vdGUgdGhlIElQIGFkZHJlc3MgYmVpbmcgcmV0dXJuZWQgYW5kIHBhc3MgaXQgdG8gZG5zbWFzcSB1c2luZyB0aGUKKyAgIC0tYm9ndXMtbnhkb21haW4gZmxhZy4gRG5zbWFzcSB3aWxsIGNoZWNrIGZvciByZXN1bHRzIHJldHVybmluZworICAgdGhhdCBhZGRyZXNzIGFuZCBzdWJzdGl0dXRlIGFuIE5YRE9NQUlOIGluc3RlYWQuIAorCisgICBBcyBvZiB3cml0aW5nLCB0aGUgSVAgYWRkcmVzcyBpbiBxdWVzdGlvbiBmb3IgdGhlIC5jb20gYW5kIC5uZXQKKyAgIGRvbWFpbnMgaXMgaXMgNjQuOTQuMTEwLjExLiBWYXJpb3VzIG90aGVyLCBsZXNzIHByb21pbmVudCwKKyAgIHJlZ2lzdHJpZXMgcHVsbCB0aGUgc2FtZSBzdHVudDsgdGhlcmUgaXMgYSBsaXN0IG9mIHRoZW0gYWxsLCBhbmQKKyAgIHRoZSBhZGRyZXNzZXMgdG8gYmxvY2ssIGF0IGh0dHA6Ly93aW53YXJlLm9yZy9ib2d1cy1kb21haW5zLnR4dAorCitROiBUaGlzIG5ldyBESENQIHNlcnZlciBpcyB3ZWxsIGFuZCBnb29kLCBidXQgaXQgZG9lc24ndCB3b3JrIGZvciBtZS4KKyAgIFdoYXQncyB0aGUgcHJvYmxlbT8KKworQTogVGhlcmUgYXJlIGEgY291cGxlIG9mIGNvbmZpZ3VyYXRpb24gZ290Y2hhcyB3aGljaCBoYXZlIGJlZW4KKyAgIGVuY291bnRlcmVkIGJ5IHBlb3BsZSBtb3ZpbmcgZnJvbSB0aGUgSVNDIGRoY3BkIHRvIHRoZSBkbnNtYXNxCisgICBpbnRlZ3JhdGVkIERIQ1AgZGFlbW9uLiBCb3RoIGFyZSByZWxhdGVkIHRvIGRpZmZlcmVuY2VzIGluIAorICAgaW4gdGhlIHdheSB0aGUgdHdvIGRhZW1vbnMgYnlwYXNzIHRoZSBJUCBzdGFjayB0byBkbyAiZ3JvdW5kIHVwIgorICAgSVAgY29uZmlndXJhdGlvbiBhbmQgY2FuIGxlYWQgdG8gdGhlIGRuc21hc3EgZGFlbW9uIGZhaWxpbmcKKyAgIHdoaWxzdCB0aGUgSVNDIG9uZSB3b3Jrcy4KKworICAgVGhlIGZpcnN0IHRoaW5nIHRvIGNoZWNrIGlzIHRoZSBicm9hZGNhc3QgYWRkcmVzcyBzZXQgZm9yIHRoZQorICAgZXRoZXJuZXQgaW50ZXJmYWNlLiBUaGlzIGlzIG5vcm1hbGx5IHRoZSBhZGRkcmVzcyBvbiB0aGUgY29ubmVjdGVkCisgICBuZXR3b3JrIHdpdGggYWxsIG9uZXMgaW4gdGhlIGhvc3QgcGFydC4gRm9yIGluc3RhbmNlIGlmIHRoZSAKKyAgIGFkZHJlc3Mgb2YgdGhlIGV0aGVybmV0IGludGVyZmFjZSBpcyAxOTIuMTY4LjU1LjcgYW5kIHRoZSBuZXRtYXNrCisgICBpcyAyNTUuMjU1LjI1NS4wIHRoZW4gdGhlIGJyb2FkY2FzdCBhZGRyZXNzIHNob3VsZCBiZQorICAgMTkyLjE2OC41NS4yNTUuIEhhdmluZyBhIGJyb2FkY2FzdCBhZGRyZXNzIHdoaWNoIGlzIG5vdCBvbiB0aGUKKyAgIG5ldHdvcmsgdG8gd2hpY2ggdGhlIGludGVyZmFjZSBpcyBjb25uZWN0ZWQga2lsbHMgdGhpbmdzIHN0b25lCisgICBkZWFkLgorCisgICBUaGUgc2Vjb25kIHBvdGVudGlhbCBwcm9ibGVtIHJlbGF0ZXMgdG8gZmlyZXdhbGwgcnVsZXM6IHNpbmNlIHRoZSBJU0MgCisgICBkYWVtb24gaW4gc29tZSBjb25maWd1cmF0aW9ucyBieXBhc3NlcyB0aGUga2VybmVsIGZpcmV3YWxsIHJ1bGVzIAorICAgZW50aXJlbHksIHRoZSBhYmlsaXR5IHRvIHJ1biB0aGUgSVNDIGRhZW1vbiBkb2VzIG5vdCBpbmRpY2F0ZSAKKyAgIHRoYXQgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyBPSyBmb3IgdGhlIGRuc21hc3EgZGFlbW9uLgorICAgRm9yIHRoZSBkbnNtYXNxIGRhZW1vbiB0byBvcGVyYXRlIGl0J3Mgdml0YWwgdGhhdCBVRFAgcGFja2V0cyB0byAKKyAgIGFuZCBmcm9tIHBvcnRzIDY3IGFuZCA2OCBhbmQgYnJvYWRjYXN0IHBhY2tldHMgd2l0aCBzb3VyY2UgCisgICBhZGRyZXNzIDAuMC4wLjAgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3MgMjU1LjI1NS4yNTUuMjU1IGFyZSBub3QgCisgICBkcm9wcGVkIGJ5IGlwdGFibGVzL2lwY2hhaW5zLgorCitROiBJJ20gcnVubmluZyBEZWJpYW4sIGFuZCBteSBtYWNoaW5lcyBnZXQgYW4gYWRkcmVzcyBmaW5lIHdpdGggREhDUCwKKyAgIGJ1dCB0aGVpciBuYW1lcyBhcmUgbm90IGFwcGVhcmluZyBpbiB0aGUgRE5TLgorCitBOiBCeSBkZWZhdWx0LCBub25lIG9mIHRoZSBESENQIGNsaWVudHMgc2VuZCB0aGUgaG9zdC1uYW1lIHdoZW4gYXNraW5nCisgICBmb3IgYSBsZWFzZS4gRm9yIG1vc3Qgb2YgdGhlIGNsaWVudHMsIHlvdSBjYW4gc2V0IHRoZSBob3N0LW5hbWUgdG8KKyAgIHNlbmQgd2l0aCB0aGUgImhvc3RuYW1lIiBrZXl3b3JkIGluIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzLiAoU2VlCisgICAibWFuIGludGVyZmFjZXMiIGZvciBkZXRhaWxzLikgVGhhdCBkb2Vzbid0IHdvcmsgZm9yIGRoY2xpZW50LCB3ZXJlCisgICB5b3UgaGF2ZSB0byBhZGQgc29tZXRoaW5nIGxpa2UgInNlbmQgaG9zdC1uYW1lIGRhaXN5IiB0bworICAgL2V0Yy9kaGNsaWVudC5jb25mIFtVcGRhdGU6IHRoZSBsYXN0ZXN0IGRoY3BjZCBwYWNrYWdlcyBfZG9fIHNlbmQKKyAgIHRoZSBob3N0bmFtZSBieSBkZWZhdWx0LgorCitROiBJJ20gbmV0d29yayBib290aW5nIG15IG1hY2hpbmVzLCBhbmQgdHJ5aW5nIHRvIGdpdmUgdGhlbSBzdGF0aWMKKyAgIERIQ1AtYXNzaWduZWQgYWRkcmVzc2VzLiBUaGUgbWFjaGluZSBnZXRzIGl0cyBjb3JyZWN0IGFkZHJlc3MKKyAgIHdoaWxzdCBib290aW5nLCBidXQgdGhlbiB0aGUgT1Mgc3RhcnRzIGFuZCBpdCBzZWVtcyB0byBnZXQKKyAgIGFsbG9jYXRlZCBhIGRpZmZlcmVudCBhZGRyZXNzLgorCitBOiBXaGF0IGlzIGhhcHBlbmluZyBpcyB0aGlzOiBUaGUgYm9vdCBwcm9jZXNzIHNlbmRzIGEgREhDUAorICAgcmVxdWVzdCBhbmQgZ2V0cyBhbGxvY2F0ZWQgdGhlIHN0YXRpYyBhZGRyZXNzIGNvcnJlc3BvbmRpbmcgdG8gaXRzCisgICBNQUMgYWRkcmVzcy4gVGhlIGJvb3QgbG9hZGVyIGRvZXMgbm90IHNlbmQgYSBjbGllbnQtaWQuIFRoZW4gdGhlIE9TCisgICBzdGFydHMgYW5kIHJlcGVhdHMgdGhlIERIQ1AgcHJvY2VzcywgYnV0IGl0IGl0IGRvZXMgc2VuZCBhCisgICBjbGllbnQtaWQuIERuc21hc3EgY2Fubm90IGFzc3VtZSB0aGF0IHRoZSB0d28gcmVxdWVzdHMgYXJlIGZyb20gdGhlCisgICBzYW1lIG1hY2hpbmUgKHNpbmNlIHRoZSBjbGllbnQgSUQncyBkb24ndCBtYXRjaCkgYW5kIGV2ZW4gdGhvdWdoCisgICB0aGUgTUFDIGFkZHJlc3MgaGFzIGEgc3RhdGljIGFsbG9jYXRpb24sIHRoYXQgYWRkcmVzcyBpcyBzdGlsbCBpbgorICAgdXNlIGJ5IHRoZSBmaXJzdCBpbmNhcm5hdGlvbiBvZiB0aGUgbWFjaGluZSAodGhlIG9uZSBmcm9tIHRoZSBib290LAorICAgd2l0aG91dCBhIGNsaWVudCBJRC4pIGRuc21hc3EgdGhlcmVmb3JlIGhhcyB0byBnaXZlIHRoZSBtYWNoaW5lIGEKKyAgIGR5bmFtaWMgYWRkcmVzcyBmcm9tIGl0cyBwb29sLiBUaGVyZSBhcmUgdGhyZWUgd2F5cyB0byBzb2x2ZSB0aGlzOgorICAgKDEpIHBlcnN1YWRlIHlvdXIgREhDUCBjbGllbnQgbm90IHRvIHNlbmQgYSBjbGllbnQgSUQsIG9yICgyKSBzZXQgdXAKKyAgIHRoZSBzdGF0aWMgYXNzaWdubWVudCB0byB0aGUgY2xpZW50IElELCBub3QgdGhlIE1BQyBhZGRyZXNzLiBUaGUKKyAgIGRlZmF1bHQgY2xpZW50LWlkIHdpbGwgYmUgMDE6PE1BQyBhZGRyZXNzPiwgc28gY2hhbmdlIHRoZSBkaGNwLWhvc3QKKyAgIGxpbmUgZnJvbSAiZGhjcC1ob3N0PTExOjIyOjMzOjQ0OjU1OjY2LDEuMi4zLjQiIHRvCisgICAiZGhjcC1ob3N0PWlkOjAxOjExOjIyOjMzOjQ0OjU1OjY2LDEuMi4zLjQiIG9yICgzKSB0ZWxsIGRuc21hc3EgdG8KKyAgIGlnbm9yZSBjbGllbnQgSURzIGZvciBhIHBhcnRpY3VsYXIgTUFDIGFkZHJlc3MsIGxpa2UgdGhpczoKKyAgIGRoY3AtaG9zdD0xMToyMjozMzo0NDo1NTo2NixpZDoqCisKK1E6IFdoYXQgbmV0d29yayB0eXBlcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBESENQIHNlcnZlcj8KKyAgCitBOiBFdGhlcm5ldCAoYW5kIDgwMi4xMSB3aXJlbGVzcykgYXJlIHN1cHBvcnRlZCBvbiBhbGwgcGxhdGZvcm1zLiBPbgorICAgTGludXggYWxsIG5ldHdvcmsgdHlwZXMgKGluY2x1ZGluZyBGaXJlV2lyZSkgYXJlIHN1cHBvcnRlZC4KKworUTogV2hhdCBhcmUgdGhlc2Ugc3RyYW5nZSAiYmluZC1pbnRlcmZhY2UiIGFuZCAiYmluZC1keW5hbWljIiBvcHRpb25zPworCitBOiBEbnNtYXNxIGZyb20gdjIuNjMgY2FuIG9wZXJhdGUgaW4gb25lIG9mIHRocmVlIGRpZmZlcmVudCAibmV0d29ya2luZworICAgbW9kZXMiLiBUaGlzIGlzIHVuZm9ydHVuYXRlIGFzIGl0IHJlcXVpcmVzIHVzZXJzIGNvbmZpZ3VyaW5nIGRuc21hc3EKKyAgIHRvIHRha2UgaW50byBhY2NvdW50IHNvbWUgcmF0aGVyIGJpenphcmUgY29udHJhaW50cyBhbmQgc2VsZWN0IHRoZQorICAgbW9kZSB3aGljaCBiZXN0IGZpdHMgdGhlIHJlcXVpcmVtZW50cyBvZiBhIHBhcnRpY3VsYXIgaW5zdGFsbGF0aW9uLgorICAgVGhlIG9yaWdpbiBvZiB0aGVzZSBhcmUgZGVmaWNpZW5jaWVzIGluIHRoZSBVbml4IG5ldHdvcmtpbmcKKyAgIG1vZGVsIGFuZCBBUElzIGFuZCBlYWNoIG1vZGUgaGFzIGRpZmZlcmVudCBhZHZhbnRhZ2VzIGFuZAorICAgcHJvYmxlbXMuIEp1c3QgdG8gYWRkIHRvIHRoZSBjb25mdXNpb24sIG5vdCBhbGwgbW9kZXMgYXJlIGF2YWlsYWJsZSBvbgorICAgYWxsIHBsYXRmb3JtcyAoZHVlIHRoZSB0byBsYWNrIG9mIHN1cHBvcnRpbmcgbmV0d29yayBBUElzKS5UbyBmdXJ0aGVyCisgICBhZGQgdG8gdGhlIGNvbmZ1c2lvbiwgdGhlIHJ1bGVzIGZvciB0aGUgREhDUCBzdWJzeXN0ZW0gb24gZG5zbWFzcSBhcmUKKyAgIGRpZmZlcmVudCB0byB0aGUgcnVsZXMgZm9yIHRoZSBETlMgYW5kIFRGVFAgc3Vic3lzdGVtcy4KKworICAgVGhlIHRocmVlIG1vZGVzIGFyZSAid2lsZGNhcmQiLCAiYmluZC1pbnRlcmZhY2VzIiBhbmQgImJpbmQtZHluYW1pYyIuCisKKyAgIEluICJ3aWxkY2FyZCIgbW9kZSwgZG5zbWFzcSBiaW5kcyB0aGUgd2lsZGNhcmQgSVAgYWRkcmVzcyAoMC4wLjAuMCBvcgorICAgOjopLiBUaGlzIGFsbG93cyBpdCB0byByZWNpZXZlIGFsbCB0aGUgcGFja2V0cyBzZW50IHRvIHRoZSBzZXJ2ZXIgb24KKyAgIHRoZSByZWxldmFudCBwb3J0LiBBY2Nlc3MgY29udHJvbCAoLS1pbnRlcmZhY2UsIC0tZXhjZXB0LWludGVyZmFjZSwKKyAgIC0tbGlzdGVuLWFkZHJlc3MsIGV0YykgaXMgaW1wbGVtZW50ZWQgYnkgZG5zbWFzcTogaXQgcXVlcmllcyB0aGUKKyAgIGtlcm5lbCB0byBkZXRlcm1pbmUgdGhlIGludGVyZmFjZSBvbiB3aGljaCBhIHBhY2tldCB3YXMgcmVjaWV2ZWQgYW5kCisgICB0aGUgYWRkcmVzcyB0byB3aGljaCBpdCB3YXMgc2VudCwgYW5kIGFwcGxpZXMgdGhlIGNvbmZpZ3VyZWQKKyAgIHJ1bGVzLiBXaWxkY2FyZCBtb2RlIGlzIHRoZSBkZWZhdWx0IGlmIG5laXRoZXIgb2YgdGhlIG90aGVyIG1vZGVzIGFyZQorICAgc3BlY2lmaWVkLiAKKworICAgSW4gImJpbmQtaW50ZXJmYWNlcyIgbW9kZSwgZG5zbWFzcSBydW5zIHRocm91Z2ggYWxsIHRoZSBuZXR3b3JrCisgICBpbnRlcmZhY2VzIGF2YWlsYWJsZSB3aGVuIGl0IHN0YXJ0cywgZmluZHMgdGhlIHNldCBvZiBJUCBhZGRyZXNzZXMgb24KKyAgIHRob3NlIGludGVyZmFjZXMsIGZpbHRlcnMgdGhhdCBzZXQgdXNpbmcgdGhlIGFjY2VzcyBjb250cm9sCisgICBjb25maWd1cmF0aW9uLCBhbmQgdGhlbiBiaW5kcyB0aGUgc2V0IG9mIElQIGFkZHJlc3Nlcy4gT25seSBwYWNrZXRzCisgICBzZW50IHRvIHRoZSBhbGxvd2VkIGFkZHJlc3NlcyBhcmUgZGVsaXZlcmVkIGJ5IHRoZSBrZXJuZWwgdG8gZG5zbWFzcS4KKworICAgSW4gImJpbmQtZHluYW1pYyIgbW9kZSwgYWNjZXNzIGNvbnRyb2wgZmlsdGVyaW5nIGlzIGRvbmUgYm90aCBieQorICAgYmluZGluZyBpbmRpdmlkdWFsIElQIGFkZHJlc3NlcywgYXMgZm9yIGJpbmQtaW50ZXJmYWNlcywgYW5kIGJ5CisgICBpbnNwZWN0aW5nIGluZGl2aWR1YWwgcGFja2V0cyBvbiBhcnJpdmFsIGFzIGZvciB3aWxkY2FyZCBtb2RlLiBJbgorICAgYWRkaXRpb24sIGRuc21hc3Egbm90aWNlcyB3aGVuIG5ldyBpbnRlcmZhY2VzIGFwcGVhciBvciBuZXcgYWRkcmVzc2VzCisgICBhcHBlYXIgb24gZXhpc3RpbmcgaW50ZXJmYWNlcywgYW5kIHRoZSByZXN1bHRpbmcgSVAgYWRkcmVzc2VzIGFyZQorICAgYm91bmQgYXV0b21hdGljYWxseSB3aXRob3V0IGhhdmluZyB0byByZXN0YXJ0IGRuc21hc3EuCisKKyAgIFRoZSBtb2RlIGNob3NlbiBoYXMgZm91ciBkaWZmZXJlbnQgZWZmZWN0czogY28tZXhpc3RlbmNlIHdpdGggb3RoZXIKKyAgIHNlcnZlcnMsIHNlbWFudGljcyBvZiAtLWludGVyZmFjZSBhY2Nlc3MgY29udHJvbCwgZWZmZWN0IG9mIG5ldworICAgaW50ZXJmYWNlcywgYW5kIGxlZ2FsaXR5IG9mIC0taW50ZXJmYWNlIHNwZWNpZmljYXRpb25zIGZvcgorICAgbm9uLWV4aXN0ZW50IGluZmVyZmFjZXMuIFdlIHdpbGwgZGVhbCB3aXRoIHRoZXNlIGluIG9yZGVyLgorCisgICBBIGRuc21hc3EgaW5zdGFuY2UgcnVubmluZyBpbiB3aWxkY2FyZCBtb2RlIHByZWNsdWRlcyBhIG1hY2hpbmUgZnJvbQorICAgcnVubmluZyBhIHNlY29uZCBpbnN0YW5jZSBvZiBkbnNtYXNxIG9yIGFueSBvdGhlciBETlMsIFRGVFAgb3IgREhDUAorICAgc2VydmVyLiBBdHRlbXB0cyB0byBkbyBzbyB3aWxsIGZhaWwgd2l0aCBhbiAiYWRkcmVzcyBpbiB1c2UiIGVycm9yLiAKKyAgIERuc21hc3EgcnVubmluZyBpbiAtLWJpbmQtaW50ZXJmYWNlcyBvciBiaW5kLWR5bmFtaWMgbW9kZSBhbGxvdyBvdGhlcgorICAgaW5zdGFuY2VzIG9mIGRuc21hc3Egb3Igb3RoZXIgc2VydmVycywgYXMgbG9uZyBhcyBubyB0d28gc2VydmVycyBhcmUKKyAgIGNvbmZpZ3VyZWQgdG8gbGlzdGVuIG9uIHRoZSBzYW1lIGludGVyZmFjZSBhZGRyZXNzLiAKKworICAgVGhlIHNlbWFudGljcyBvZiAtLWludGVyZmFjZSB2YXJpZXMgc3VidGx5IGJldHdlZW4gd2lsZGNhcmQgb3IKKyAgIGJpbmQtZHluYW1pYyBtb2RlIGFuZCBiaW5kLWludGVyZmFjZXMgbW9kZS4gVGhlIHNpdHVhdGlvbiB3aGVyZSB0aGlzCisgICBtYXR0ZXJzIGlzIGEgcmVxdWVzdCB3aGljaCBhcnJpdmVzIHZpYSBvbmUgaW50ZXJmYWNlIChBKSwgYnV0IHdpdGggYQorICAgZGVzdGluYXRpb24gYWRkcmVzcyBvZiBhIHNlY29uZCBpbnRlcmZhY2UgKEIpIGFuZCB3aGVuIGRuc21hc3EgaXMKKyAgIGNvbmZpZ3VyZWQgdG8gbGlzdGVuIG9ubHkgb24gQi4gSW4gd2lsZGNhcmQgb3IgYmluZC1keW5hbWljIG1vZGUsIHN1Y2gKKyAgIGEgcmVxdWVzdCB3aWxsIGJlIGlnbm9yZWQsIGluIGJpbmQtaW50ZXJmYWNlcyBtb2RlLCBpdCB3aWxsIGJlCisgICBhY2NlcHRlZC4KKworICAgVGhlIGNyZWF0aW9uIG9mIG5ldyBuZXR3b3JrIGludGVyZmFjZXMgYWZ0ZXIgZG5zbWFzcSBzdGFydHMgaXMgaWdub3JlZAorICAgYnkgZG5zbWFzcSB3aGVuIGluIC0tYmluZC1pbnRlcmZhY2VzIG1vZGUuIEluIHdpbGRjYXJkIG9yIGJpbmQtZHluYW1pYworICAgbW9kZSwgc3VjaCBpbnRlcmZhY2VzIGFyZSBoYW5kbGVkIG5vcm1hbGx5LgorCisgICBBIC0taW50ZXJmYWNlIHNwZWNpZmljYXRpb24gZm9yIGEgbm9uLWV4aXN0ZW50IGludGVyZmFjZSBpcyBhIGZhdGFsCisgICBlcnJvciBhdCBzdGFydC11cCB3aGVuIGluIC0tYmluZC1pbnRlcmZhY2VzIG1vZGUsIGJ5IGp1c3QgZ2VuZXJhdGVzIGEKKyAgIHdhcm5pbmcgaW4gd2lsZGNhcmQgb3IgYmluZC1keW5hbWljIG1vZGUuCisKK1E6IFdoeSBkb2Vzbid0IEtlcmJlcm9zIHdvcmsvd2h5IGNhbid0IEkgZ2V0IHNlbnNpYmxlIGFuc3dlcnMgdG8KKyAgIHF1ZXJpZXMgZm9yIFNSViByZWNvcmRzLgorCitBOiBQcm9iYWJseSBiZWNhdXNlIHlvdSBoYXZlIHRoZSAiZmlsdGVyd2luMmsiIG9wdGlvbiBzZXQuIE5vdGUgdGhhdAorICAgaXQgd2FzIG9uIGJ5IGRlZmF1bHQgaW4gZXhhbXBsZSBjb25maWd1cmF0aW9uIGZpbGVzIGluY2x1ZGVkIGluIAorICAgdmVyc2lvbnMgYmVmb3JlIDIuMTIsIHNvIHlvdSBtaWdodCBoYXZlIGl0IHNldCBvbiB3aXRob3V0CisgICByZWFsaXNpbmcuCisKK1E6IENhbiBJIGdldCBlbWFpbCBub3RpZmljYXRpb24gd2hlbiBhIG5ldyB2ZXJzaW9uIG9mIGRuc21hc3EgaXMKKyAgIHJlbGVhc2VkPworCitBOiBZZXMsIG5ldyByZWxlYXNlcyBvZiBkbnNtYXNxIGFyZSBhbHdheXMgYW5ub3VuY2VkIHRocm91Z2gKKyAgIGZyZXNobWVhdC5uZXQsIGFuZCB0aGV5IGFsbG93IHlvdSB0byBzdWJjcmliZSB0byBlbWFpbCBhbGVydHMgd2hlbgorICAgbmV3IHZlcnNpb25zIG9mIHBhcnRpY3VsYXIgcHJvamVjdHMgYXJlIHJlbGVhc2VkLiBOZXcgcmVsZWFzZXMgYXJlCisgICBhbHNvIGFubm91bmNlZCBpbiB0aGUgZG5zbWFzcS1kaXNjdXNzIG1haWxpbmcgbGlzdCwgc3Vic2NyaWJlIGF0IAorICAgaHR0cDovL2xpc3RzLnRoZWtlbGxleXMub3JnLnVrL21haWxtYW4vbGlzdGluZm8vZG5zbWFzcS1kaXNjdXNzCisKK1E6IFdoYXQgZG9lcyB0aGUgZGhjcC1hdXRob3JpdGF0aXZlIG9wdGlvbiBkbz8gCisKK0E6IFNlZSBodHRwOi8vd3d3LmlzYy5vcmcvZmlsZXMvYXV0aC5odG1sIC0gdGhhdCdzCisgICBmb3IgdGhlIElTQyBkYWVtb24sIGJ1dCB0aGUgc2FtZSBhcHBsaWVzIHRvIGRuc21hc3EuCisKK1E6IFdoeSBkb2VzIG15IEdlbnRvbyBib3ggcGF1c2UgZm9yIGEgbWludXRlIGJlZm9yZSBnZXR0aW5nIGEgbmV3CisgICBsZWFzZT8KKworQTogQmVjYXVzZSB3aGVuIGEgR2VudG9vIGJveCBzaHV0cyBkb3duLCBpdCByZWxlYXNlcyBpdHMgbGVhc2Ugd2l0aAorICAgdGhlIHNlcnZlciBidXQgcmVtZW1iZXJzIGl0IG9uIHRoZSBjbGllbnQ7IHRoaXMgc2VlbXMgdG8gYmUgYSAKKyAgIEdlbnRvby1zcGVjaWZpYyBwYXRjaCB0byBkaGNwY2QuIE9uIHJlc3RhcnQgaXQgdHJpZXMgdG8gcmVuZXcKKyAgIGEgbGVhc2Ugd2hpY2ggaXMgbG9uZyBnb25lLCBhcyBmYXIgYXMgZG5zbWFzcSBpcyBjb25jZXJuZWQsIGFuZAorICAgZG5zbWFzcSBpZ25vcmVzIGl0IHVudGlsIGlzIHRpbWVzIG91dCBhbmQgcmVzdGFydHMgdGhlIHByb2Nlc3MuCisgICBUbyBmaXggdGhpcywgc2V0IHRoZSBkaGNwLWF1dGhvcml0YXRpdmUgZmxhZyBpbiBkbnNtYXNxLgorCitROiBNeSBsYXB0b3AgaGFzIHR3byBuZXR3b3JrIGludGVyZmFjZXMsIGEgd2lyZWQgb25lIGFuZCBhIHdpcmVsZXNzCisgICBvbmUuIEkgbmV2ZXIgdXNlIGJvdGggaW50ZXJmYWNlcyBhdCB0aGUgc2FtZSB0aW1lLCBhbmQgSSdkIGxpa2UgdGhlCisgICBzYW1lIElQIGFuZCBjb25maWd1cmF0aW9uIHRvIGJlIHVzZWQgaXJyZXNwZWN0aXZlIG9mIHdoaWNoCisgICBpbnRlcmZhY2UgaXMgaW4gdXNlLiBIb3cgY2FuIEkgZG8gdGhhdD8KKworQTogQnkgZGVmYXVsdCwgdGhlIGlkZW50aXR5IG9mIGEgbWFjaGluZSBpcyBkZXRlcm1pbmVkIGJ5IHVzaW5nIHRoZQorICAgTUFDIGFkZHJlc3MsIHdoaWNoIGlzIGFzc29jaWF0ZWQgd2l0aCBpbnRlcmZhY2UgaGFyZHdhcmUuIE9uY2UgYW4KKyAgIElQIGlzIGJvdW5kIHRvIHRoZSBNQUMgYWRkcmVzcyBvZiBvbmUgaW50ZXJmYWNlLCBpdCBjYW5ub3QgYmUKKyAgIGFzc29jaWF0ZWQgd2l0aCBhbm90aGVyIE1BQyBhZGRyZXNzIHVudGlsIGFmdGVyIHRoZSBESENQIGxlYXNlCisgICBleHBpcmVzLiBUaGUgc29sdXRpb24gdG8gdGhpcyBpcyB0byB1c2UgYSBjbGllbnQtaWQgYXMgdGhlIG1hY2hpbmUKKyAgIGlkZW50aXR5IHJhdGhlciB0aGFuIHRoZSBNQUMgYWRkcmVzcy4gSWYgeW91IGFycmFuZ2UgZm9yIHRoZSBzYW1lCisgICBjbGllbnQtaWQgdG8gc2VudCB3aGVuIGVpdGhlciBpbnRlcmZhY2UgaXMgaW4gdXNlLCB0aGUgREhDUCBzZXJ2ZXIKKyAgIHdpbGwgcmVjb2duaXNlIHRoZSBzYW1lIG1hY2hpbmUsIGFuZCB1c2UgdGhlIHNhbWUgYWRkcmVzcy4gVGhlCisgICBtZXRob2QgZm9yIHNldHRpbmcgdGhlIGNsaWVudC1pZCB2YXJpZXMgd2l0aCBESENQIGNsaWVudCBzb2Z0d2FyZSwKKyAgIGRoY3BjZCB1c2VzIHRoZSAiLUkiIGZsYWcuIFdpbmRvd3MgdXNlcyBhIHJlZ2lzdHJ5IHNldHRpbmcsCisgICBzZWUgaHR0cDovL3d3dy5qc2lpbmMuY29tL1NVQkYvVElQMjgwMC9yaDI4NDUuaHRtCitBZGRlbmR1bToKKyAgIEZyb20gdmVyc2lvbiAyLjQ2LCBkbnNtYXNxIGhhcyBhIHNvbHV0aW9uIHRvIHRoaXMgd2hpY2ggZG9lc24ndAorICAgaW52b2x2ZSBzZXR0aW5nIGNsaWVudC1JRHMuIEl0J3MgcG9zc2libGUgdG8gcHV0IG1vcmUgdGhhbiBvbmUgTUFDCisgICBhZGRyZXNzIGluIGEgLS1kaGNwLWhvc3QgY29uZmlndXJhdGlvbi4gVGhpcyB0ZWxscyBkbnNtYXNxIHRoYXQgaXQKKyAgIHNob3VsZCB1c2UgdGhlIHNwZWNpZmllZCBJUCBmb3IgYW55IG9mIHRoZSBzcGVjaWZpZWQgTUFDIGFkZHJlc3NlcywKKyAgIGFuZCBmdXJ0aGVybW9yZSBpdCBnaXZlcyBkbnNtYXNxIHBlcm1pc3Npb24gdG8gc3VtYXJpbHkgYWJhbmRvbiBhCisgICBsZWFzZSB0byBvbmUgb2YgdGhlIE1BQyBhZGRyZXNzZXMgaWYgYW5vdGhlciBvbmUgY29tZXMgYWxvbmcuIE5vdGUKKyAgIHRoYXQgdGhpcyB3aWxsIHdvcmsgZmluZSBvbmx5IGFzIGxvbmdlciBhcyBvbmx5IG9uZSBpbnRlcmZhY2UgaXMKKyAgIHVwIGF0IGFueSB0aW1lLiBUaGVyZSBpcyBubyB3YXkgZm9yIGRuc21hc3EgdG8gZW5mb3JjZSB0aGlzCisgICBjb25zdHJhaW50OiBpZiB5b3UgY29uZmlndXJlIG11bHRpcGxlIE1BQyBhZGRyZXNzZXMgYW5kIHZpb2xhdGUgCisgICB0aGlzIHJ1bGUsIGJhZCB0aGluZ3Mgd2lsbCBoYXBwZW4uCisKK1E6IENhbiBkbnNtYXNxIGRvIERIQ1Agb24gSVAtYWxpYXMgaW50ZXJmYWNlcz8KKworQTogWWVzLCBmcm9tIHZlcnNpb24tMi4yMS4gVGhlIHN1cHBvcnQgaXMgb25seSBhdmFpbGFibGUgcnVubmluZyB1bmRlcgorICAgTGludXgsIG9uIGEga2VybmVsIHdoaWNoIHByb3ZpZGVzIHRoZSBSVC1uZXRsaW5rIGZhY2lsaXR5LiBBbGwgMi40IAorICAgYW5kIDIuNiBrZXJuZWxzIHByb3ZpZGUgUlQtbmV0bGluayBhbmQgaXQncyBhbiBvcHRpb24gaW4gMi4yCisgICBrZXJuZWxzLiAKKyAgIAorICAgSWYgYSBwaHlzaWNhbCBpbnRlcmZhY2UgaGFzIG1vcmUgdGhhbiBvbmUgSVAgYWRkcmVzcyBvciBhbGlhc2VzCisgICB3aXRoIGV4dHJhIElQIGFkZHJlc3NlcywgdGhlbiBhbnkgZGhjcC1yYW5nZXMgY29ycmVzcG9uZGluZyB0bworICAgdGhlc2UgYWRkcmVzc2VzIGNhbiBiZSB1c2VkIGZvciBhZGRyZXNzIGFsbG9jYXRpb24uIFNvIGlmIGFuCisgICBpbnRlcmZhY2UgaGFzIGFkZHJlc3NlcyAxOTIuMTY4LjEuMC8yNCBhbmQgMTkyLjE2OC4yLjAvMjQgYW5kIHRoZXJlCisgICBhcmUgREhDUCByYW5nZXMgMTkyLjE2OC4xLjEwMC0xOTIuMTY4LjEuMjAwIGFuZAorICAgMTkyLjE2OC4yLjEwMC0xOTIuMTY4LjIuMjAwIHRoZW4gYm90aCByYW5nZXMgd291bGQgYmUgdXNlZCBmb3IgaG9zdAorICAgY29ubmVjdGVkIHRvIHRoZSBwaHlzaWNhbCBpbnRlcmZhY2UuIEEgbW9yZSB0eXBpY2FsIHVzZSBtaWdodCBiZSB0bworICAgaGF2ZSBvbmUgb2YgdGhlIGFkZHJlc3MtcmFuZ2VzIGFzIHN0YXRpYy1vbmx5LCBhbmQgaGF2ZSBrbm93bgorICAgaG9zdHMgYWxsb2NhdGVkIGFkZHJlc3NlcyBvbiB0aGF0IHN1Ym5ldCB1c2luZyBkaGNwLWhvc3Qgb3B0aW9ucywKKyAgIHdoaWxlICBhbm9ueW1vdXMgaG9zdHMgZ28gb24gdGhlIG90aGVyLgorCisKK1E6IERuc21hc3Egc29tZXRpbWVzIGxvZ3MgIm5hbWVzZXJ2ZXIgeHh4Lnh4eC54eHgueHh4IHJlZnVzZWQKKyAgIHRvIGRvIGEgcmVjdXJzaXZlIHF1ZXJ5IiBhbmQgRE5TIHN0b3BzIHdvcmtpbmcuIFdoYXQncyBnb2luZyBvbj8KKworQTogUHJvYmFibHkgdGhlIG5hbWVzZXJ2ZXIgaXMgYW4gYXV0aG9yaXRhdGl2ZSBuYW1lc2VydmVyIGZvciBhCisgICBwYXJ0aWN1bGFyIGRvbWFpbiwgYnV0IGlzIG5vdCBjb25maWd1cmVkIHRvIGFuc3dlciBnZW5lcmFsIEROUworICAgcXVlcmllcyBmb3IgYW4gYXJiaXRyYXJ5IGRvbWFpbi4gSXQgaXMgbm90IHN1aXRhYmxlIGZvciB1c2UgYnkKKyAgIGRuc21hc3EgYXMgYW4gdXBzdHJlYW0gc2VydmVyIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZQorICAgY29uZmlndXJhdGlvbi4gTm90ZSB0aGF0IGlmIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgdXBzdHJlYW0KKyAgIG5hbWVzZXJ2ZXIgY29uZmlndXJlZCBkbnNtYXNxIHdpbGwgbG9hZC1iYWxhbmNlIGFjcm9zcyB0aGVtIGFuZAorICAgaXQgbWF5IGJlIHNvbWUgdGltZSBiZWZvcmUgZG5zbWFzcSBnZXRzIGFyb3VuZCB0byB1c2luZyBhIAorICAgcGFydGljdWxhciBuYW1lc2VydmVyLiBUaGlzIG1lYW5zIHRoYXQgYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24KKyAgIG1heSB3b3JrIGZvciBzb21ldGltZSB3aXRoIGEgYnJva2VuIHVwc3RyZWFtIG5hbWVzZXJ2ZXIKKyAgIGNvbmZpZ3VyYXRpb24uCisKKworUTogRG9lcyB0aGUgZG5zbWFzcSBESENQIHNlcnZlciBwcm9iZSBhZGRyZXNzZXMgYmVmb3JlIGFsbG9jYXRpbmcKKyAgIHRoZW0sIGFzIHJlY29tbWVuZGVkIGluIFJGQzIxMzE/CisKK0E6IFllcywgZHluYW1pY2FsbHkgYWxsb2NhdGVkIElQIGFkZHJlc3NlcyBhcmUgY2hlY2tlZCBieSBzZW5kaW5nIGFuCisgICBJQ01QIGVjaG8gcmVxdWVzdCAocGluZykuIElmIGEgcmVwbHkgaXMgcmVjZWl2ZWQsIHRoZW4gZG5zbWFzcQorICAgYXNzdW1lcyB0aGF0IHRoZSBhZGRyZXNzIGlzIGluIHVzZSwgYW5kIGF0dGVtcHRzIHRvIGFsbG9jYXRlIGFuCisgICBkaWZmZXJlbnQgYWRkcmVzcy4gVGhlIHdhaXQgZm9yIGEgcmVwbHkgaXMgYmV0d2VlbiB0d28gYW5kIHRocmVlCisgICBzZWNvbmRzLiBCZWNhdXNlIHRoZSBESENQIHNlcnZlciBpcyBub3QgcmUtZW50cmFudCwgaXQgY2Fubm90IHNlcnZlCisgICBvdGhlciBESENQIHJlcXVlc3RzIGR1cmluZyB0aGlzIHRpbWUuIFRvIGF2b2lkIGRyb3BwaW5nIHJlcXVlc3RzLAorICAgdGhlIGFkZHJlc3MgcHJvYmUgbWF5IGJlIHNraXBwZWQgd2hlbiBkbnNtYXNxIGlzIHVuZGVyIGhlYXZ5IGxvYWQuCisKKworUTogSSdtIHVzaW5nIGRuc21hc3Egb24gYSBtYWNoaW5lIHdpdGggdGhlIEZpcmVzdGFydGVyIGZpcmV3YWxsLCBhbmQKKyAgIERIQ1AgZG9lc24ndCB3b3JrLiBXaGF0J3MgdGhlIHByb2JsZW0/CisKK0E6IFRoaXMgYSB2YXJpYW50IG9uIHRoZSBpcHRhYmxlcyBwcm9ibGVtLiBFeHBsaWNpdCBkZXRhaWxzIG9uIGhvdyB0bworICAgcHJvY2VlZCBjYW4gYmUgZm91bmQgYXQgCisgICBodHRwOi8vbGlzdHMudGhla2VsbGV5cy5vcmcudWsvcGlwZXJtYWlsL2Ruc21hc3EtZGlzY3Vzcy8yMDA1cTMvMDAwNDMxLmh0bWwKKyAKKworUTogSSdtIHVzaW5nIGRuc21hc3Egb24gYSBtYWNoaW5lIHdpdGggdGhlIHNob3Jld2FsbCBmaXJld2FsbCwgYW5kCisgICBESENQIGRvZXNuJ3Qgd29yay4gV2hhdCdzIHRoZSBwcm9ibGVtPworCitBOiBUaGlzIGEgdmFyaWFudCBvbiB0aGUgaXB0YWJsZXMgcHJvYmxlbS4gRXhwbGljaXQgZGV0YWlscyBvbiBob3cgdG8KKyAgIHByb2NlZWQgY2FuIGJlIGZvdW5kIGF0IAorICAgaHR0cDovL2xpc3RzLnRoZWtlbGxleXMub3JnLnVrL3BpcGVybWFpbC9kbnNtYXNxLWRpc2N1c3MvMjAwN3E0LzAwMTc2NC5odG1sCisKKworUTogRG5zbWFzcSBmYWlscyB0byBzdGFydCB1cCB3aXRoIGEgbWVzc2FnZSBhYm91dCBjYXBhYmlsaXRpZXMuCisgICBXaHkgZGlkIHRoYXQgaGFwcGVuIGFuZCB3aGF0IGNhbiBkbyB0byBmaXggaXQ/CisKK0E6IENoYW5nZSB5b3VyIGtlcm5lbCBjb25maWd1cmF0aW9uOiBlaXRoZXIgZGVzZWxlY3QgQ09ORklHX1NFQ1VSSVRZCisgICBfb3JfIHNlbGVjdCBDT05GSUdfU0VDVVJJVFlfQ0FQQUJJTElUSUVTLiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIAorICAgcmVtb3ZlIHRoZSBuZWVkIHRvIHNldCBjYXBhYmlsaXRpZXMgYnkgcnVubmluZyBkbnNtYXNxIGFzIHJvb3QuCisKKworUTogV2hlcmUgY2FuIEkgZ2V0IC5ycG1zIFN1aXRhYmxlIGZvciBvcGVuU1VTRS9TTEVTPworCitBOiBEbnNtYXNxIGlzIGluIG9wZW5TVVNFIGl0c2VsZiwgYW5kIHRoZSBsYXRlc3QgcmVsZWFzZXMgYXJlIGFsc28KKyAgIGF2YWlsYWJsZSBhdCBodHRwOi8vZG93bmxvYWQub3BlbnN1c2Uub3JnL3JlcG9zaXRvcmllcy9uZXR3b3JrLworCisKK1E6IENhbiBJIHJ1biBkbnNtYXNxIGluIGEgTGludXggdnNlcnZlcj8KKworQTogWWVzLCBhcyBhIEROUyBzZXJ2ZXIsIGRuc21hc3Egd2lsbCBqdXN0IHdvcmsgaW4gYSB2c2VydmVyLgorICAgVG8gdXNlIGRuc21hc3EncyBESENQIGZ1bmN0aW9uIHlvdSBuZWVkIHRvIGdpdmUgdGhlIHZzZXJ2ZXIKKyAgIGV4dHJhIHN5c3RlbSBjYXBhYmlsaXRpZXMuIFBsZWFzZSBub3RlIHRoYXQgZG9pbmcgc28gd2lsbCBsZXNzZXIgCisgICB0aGUgb3ZlcmFsbCBzZWN1cml0eSBvZiB5b3VyIHN5c3RlbS4gVGhlIGNhcGFiaWxpdGllcyAKKyAgIHJlcXVpcmVkIGFyZSBORVRfQURNSU4gYW5kIE5FVF9SQVcuIE5FVF9BRE1JTiBpcyBlc3NlbnRpYWwsIE5FVF9SQVcKKyAgIGlzIHJlcXVpcmVkIHRvIGRvIGFuIElDTVAgInBpbmciIGNoZWNrIG9uIG5ld2x5IGFsbG9jYXRlZAorICAgYWRkcmVzc2VzLiBJZiB5b3UgZG9uJ3QgbmVlZCB0aGlzIGNoZWNrLCB5b3UgY2FuIGRpc2FibGUgaXQgd2l0aAorICAgLS1uby1waW5nIGFuZCBvbWl0IHRoZSBORVRfUkFXIGNhcGFiaWxpdHkuIAorICAgQWRkaW5nIHRoZSBjYXBhYmlsaXRpZXMgaXMgZG9uZSBieSBhZGRpbmcgdGhlbSwgb25lIHBlciBsaW5lLCB0bworICAgZWl0aGVyIC9ldGMvdnNlcnZlcnMvPHZzZXJ2ZXJuYW1lPi9jY2FwYWJpbGl0aWVzIGZvciBhIDIuNCBrZXJuZWwgb3IKKyAgIC9ldGMvdnNlcnZlcnMvPHZzZXJ2ZXJuYW1lPi9iY2FwYWJpbGl0aWVzIGZvciBhIDIuNiBrZXJuZWwgKHBsZWFzZQorICAgcmVmZXIgdG8gdGhlIHZzZXJ2ZXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCisKKworUTogV2hhdCdzIHRoZSBwcm9ibGVtIHdpdGggc3lzbG9nIGFuZCBkbnNtYXNxPworCitBOiBJbiBhbG1vc3QgYWxsIGNhc2VzOiBub25lLiBJZiB5b3UgaGF2ZSB0aGUgbm9ybWFsIGFycmFuZ2VtZW50IHdpdGgKKyAgIGxvY2FsIGRhZW1vbnMgbG9nZ2luZyB0byBhIGxvY2FsIHN5c2xvZywgd2hpY2ggdGhlbiB3cml0ZXMgdG8gZGlzaywKKyAgIHRoZW4gdGhlcmUncyBuZXZlciBhIHByb2JsZW0uIElmIHlvdSB1c2UgbmV0d29yayBsb2dnaW5nLCB0aGVuCisgICB0aGVyZSdzIGEgcG90ZW50aWFsIHByb2JsZW0gd2l0aCBkZWFkbG9jazogdGhlIHN5c2xvZyBkYWVtb24gd2lsbAorICAgZG8gRE5TIGxvb2t1cHMgc28gdGhhdCBpdCBjYW4gbG9nIHRoZSBzb3VyY2Ugb2YgbG9nIG1lc3NhZ2VzLAorICAgdGhlc2UgbG9va3VwcyB3aWxsIChkZXBlbmRpbmcgb24gZXhhY3QgY29uZmlndXJhdGlvbikgZ28gdGhyb3VnaAorICAgZG5zbWFzcSwgd2hpY2ggYWxzbyBzZW5kcyBsb2cgbWVzc2FnZXMuIFdpdGggYmFkIHRpbWluZywgeW91IGNhbiAKKyAgIGFycml2ZSBhdCBhIHNpdHVhdGlvbiB3aGVyZSBzeXNsb2cgaXMgd2FpdGluZyBmb3IgZG5zbWFzcSwgYW5kCisgICBkbnNtYXNxIGlzIHdhaXRpbmcgZm9yIHN5c2xvZzsgdGhleSB3aWxsIGJvdGggd2FpdCBmb3JldmVyLiBUaGlzCisgICBwcm9ibGVtIGlzIGZpeGVkIGZyb20gZG5zbWFzcS0yLjM5LCB3aGljaCBpbnRyb2R1Y2VzIGFzeW5jaHJvbm91cworICAgbG9nZ2luZzogZG5zbWFzcSBubyBsb25nZXIgd2FpdHMgZm9yIHN5c2xvZyBhbmQgdGhlIGRlYWRsb2NrIGlzCisgICBicm9rZW4uIFRoZXJlIGlzIGEgcmVtYWluaW5nIHByb2JsZW0gaW4gMi4zOSwgd2hlcmUgImxvZy1xdWVyaWVzIgorICAgaXMgaW4gdXNlLiBJbiB0aGlzIGNhc2UgbW9zdCBETlMgcXVlcmllcyBnZW5lcmF0ZSB0d28gbG9nIGxpbmVzLCBpZgorICAgdGhlc2UgZ28gdG8gYSBzeXNsb2cgd2hpY2ggaXMgZG9pbmcgYSBETlMgbG9va3VwIGZvciBlYWNoIGxvZyBsaW5lLAorICAgdGhlbiB0aG9zZSBxdWVyaWVzIHdpbGwgaW4gdHVybiBnZW5lcmF0ZSB0d28gbW9yZSBsb2cgbGluZXMsIGFuZCBhIAorICAgY2hhaW4gcmVhY3Rpb24gcnVuYXdheSB3aWxsIG9jY3VyLiBUbyBhdm9pZCB0aGlzLCB1c2Ugc3lzbG9nLW5nCisgICBhbmQgdHVybiBvbiBzeXNsb2ctbmcncyBkbnMtY2FjaGUgZnVuY3Rpb24uCisKKworUTogREhDUCBkb2Vzbid0IHdvcmsgd2l0aCB3aW5kb3dzIFZpc3RhLCBidXQgZXZlcnl0aGluZyBlbHNlIGlzIGZpbmUuCisKK0E6IFRoZSBESENQIGNsaWVudCBvbiB3aW5kb3dzIFZpc3RhIChhbmQgcG9zc2libHkgbGF0ZXIgdmVyc2lvbnMpCisgICBkZW1hbmRzIHRoYXQgdGhlIERIQ1Agc2VydmVyIHNlbmQgcmVwbGllcyBhcyBicm9hZGNhc3RzLiBNb3N0IG90aGVyCisgICBjbGllbnRzIGRvbid0IGRvIHRoaXMuIFRoZSBicm9hZGNhc3RzIGFyZSBzZW5kIHRvCisgICAyNTUuMjU1LjI1NS4yNTUuIEEgYmFkbHkgY29uZmlndXJlZCBmaXJld2FsbCB3aGljaCBibG9ja3Mgc3VjaAorICAgcGFja2V0cyB3aWxsIHNob3cgZXhhY3RseSB0aGVzZSBzeW1wdG9tcyAoVmlzdGEgZmFpbHMsIG90aGVycworICAgd29yaykuCisKKyAgCitROiBESENQIGRvZXNuJ3Qgd29yayB3aXRoIHdpbmRvd3MgNyBidXQgZXZlcnl0aGluZyBlbHNlIGlzIGZpbmUuCisKK0E6IFRoZXJlIHNlZW1zIHRvIGJlIGEgcHJvYmxlbSBpZiBXaW5kb3dzIDcgZG9lc24ndCBnZXQgYSB2YWx1ZSBmb3IKKyAgIERIQ1Agb3B0aW9uIDI1MiBpbiBESENQIHBhY2tldHMgaXQgZ2V0cyBmcm9tIHRoZSBzZXJ2ZXIuIFRoZQorICAgc3ltdG9tcyBoYXZlIGJlZWVuIHZhcmlvdXNseSByZXBvcnRlZCBhcyBjb250aW51YWwgREhDUElORk9STQorICAgcmVxdWVzdHMgaW4gYW4gYXR0ZW1wdCB0byBnZXQgYW4gb3B0aW9uLTI1Miwgb3IgZXZlbiBpZ25vcmluZyBESENQCisgICBvZmZlcnMgY29tcGxldGVseSAoYW5kIGZhaWxpbmcgdG8gZ2V0IGFuIElQIGFkZHJlc3MpIGlmIHRoZXJlIGlzIG5vCisgICBvcHRpb24tMjUyIHN1cHBsaWVkLiBESENQIG9wdGlvbiAyNTIgaXMgZm9yIFdQQUQsIFdXVyBQcm94eSAKKyAgIEF1dG8gRGV0ZWN0aW9uIGFuZCBpZiB5b3UgZG9uJ3Qgd2FudCBvciBuZWVkIHRvIHVzZSB0aGF0LCB0aGVuIAorICAgc2ltcGxlc3QgZml4IHNlZW1zIHRvIGJlIHRvIHN1cHBseSBhbiBlbXB0eSBvcHRpb24gd2l0aDoKKworICAgZGhjcC1vcHRpb249MjUyLCJcbiIKKworCisKKyAKKworCisKKworICAgCisKKwkgICAgICAKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNiZDU1NwotLS0gL2Rldi9udWxsCisrKyBiL01ha2VmaWxlCkBAIC0wLDAgKzEsMTY1IEBACisjIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMTQgU2ltb24gS2VsbGV5CisjCisjICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorIyAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyMKKyMgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjICAgIAorIyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIE5PVEU6IEJ1aWxkaW5nIHRoZSBpMThuIHRhcmdldHMgcmVxdWlyZXMgR05VLW1ha2UgCisKKworIyBWYXJpYWJsZXMgeW91IG1heSB3ZWxsIHdhbnQgdG8gb3ZlcnJpZGUuCisKK1BSRUZJWCAgICAgICAgPSAvdXNyL2xvY2FsCitCSU5ESVIgICAgICAgID0gJChQUkVGSVgpL3NiaW4KK01BTkRJUiAgICAgICAgPSAkKFBSRUZJWCkvc2hhcmUvbWFuCitMT0NBTEVESVIgICAgID0gJChQUkVGSVgpL3NoYXJlL2xvY2FsZQorQlVJTERESVIgICAgICA9ICQoU1JDKQorREVTVERJUiAgICAgICA9IAorQ0ZMQUdTICAgICAgICA9IC1XYWxsIC1XIC1PMgorTERGTEFHUyAgICAgICA9IAorQ09QVFMgICAgICAgICA9IAorUlBNX09QVF9GTEFHUyA9IAorTElCUyAgICAgICAgICA9IAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFZhcmlhYmxlcyB5b3UgbWlnaHQgd2FudCB0byBvdmVycmlkZS4KKworUEtHX0NPTkZJRyA9IHBrZy1jb25maWcKK0lOU1RBTEwgICAgPSBpbnN0YWxsCitNU0dNRVJHRSAgID0gbXNnbWVyZ2UKK01TR0ZNVCAgICAgPSBtc2dmbXQKK1hHRVRURVhUICAgPSB4Z2V0dGV4dAorCitTUkMgPSBzcmMKK1BPICA9IHBvCitNQU4gPSBtYW4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBwbWFrZSB3YXkuIChOQiBubyBzcGFjZXMgdG8ga2VlcCBnbWFrZSAzLjgyIGhhcHB5KQordG9wIT1wd2QKKyMgR05VIG1ha2Ugd2F5LgordG9wPz0kKENVUkRJUikKKworZGJ1c19jZmxhZ3MgPSAgIGBlY2hvICQoQ09QVFMpIHwgJCh0b3ApL2JsZC9wa2ctd3JhcHBlciBIQVZFX0RCVVMgJChQS0dfQ09ORklHKSAtLWNmbGFncyBkYnVzLTFgIAorZGJ1c19saWJzID0gICAgIGBlY2hvICQoQ09QVFMpIHwgJCh0b3ApL2JsZC9wa2ctd3JhcHBlciBIQVZFX0RCVVMgJChQS0dfQ09ORklHKSAtLWxpYnMgZGJ1cy0xYCAKK2lkbl9jZmxhZ3MgPSAgICBgZWNobyAkKENPUFRTKSB8ICQodG9wKS9ibGQvcGtnLXdyYXBwZXIgSEFWRV9JRE4gJChQS0dfQ09ORklHKSAtLWNmbGFncyBsaWJpZG5gIAoraWRuX2xpYnMgPSAgICAgIGBlY2hvICQoQ09QVFMpIHwgJCh0b3ApL2JsZC9wa2ctd3JhcHBlciBIQVZFX0lETiAkKFBLR19DT05GSUcpIC0tbGlicyBsaWJpZG5gIAorY3RfY2ZsYWdzID0gICAgIGBlY2hvICQoQ09QVFMpIHwgJCh0b3ApL2JsZC9wa2ctd3JhcHBlciBIQVZFX0NPTk5UUkFDSyAkKFBLR19DT05GSUcpIC0tY2ZsYWdzIGxpYm5ldGZpbHRlcl9jb25udHJhY2tgCitjdF9saWJzID0gICAgICAgYGVjaG8gJChDT1BUUykgfCAkKHRvcCkvYmxkL3BrZy13cmFwcGVyIEhBVkVfQ09OTlRSQUNLICQoUEtHX0NPTkZJRykgLS1saWJzIGxpYm5ldGZpbHRlcl9jb25udHJhY2tgCitsdWFfY2ZsYWdzID0gICAgYGVjaG8gJChDT1BUUykgfCAkKHRvcCkvYmxkL3BrZy13cmFwcGVyIEhBVkVfTFVBU0NSSVBUICQoUEtHX0NPTkZJRykgLS1jZmxhZ3MgbHVhNS4xYCAKK2x1YV9saWJzID0gICAgICBgZWNobyAkKENPUFRTKSB8ICQodG9wKS9ibGQvcGtnLXdyYXBwZXIgSEFWRV9MVUFTQ1JJUFQgJChQS0dfQ09ORklHKSAtLWxpYnMgbHVhNS4xYCAKK25ldHRsZV9jZmxhZ3MgPSBgZWNobyAkKENPUFRTKSB8ICQodG9wKS9ibGQvcGtnLXdyYXBwZXIgSEFWRV9ETlNTRUMgJChQS0dfQ09ORklHKSAtLWNmbGFncyBuZXR0bGUgaG9nd2VlZGAKK25ldHRsZV9saWJzID0gICBgZWNobyAkKENPUFRTKSB8ICQodG9wKS9ibGQvcGtnLXdyYXBwZXIgSEFWRV9ETlNTRUMgJChQS0dfQ09ORklHKSAtLWxpYnMgbmV0dGxlIGhvZ3dlZWRgCitnbXBfbGlicyA9ICAgICAgYGVjaG8gJChDT1BUUykgfCAkKHRvcCkvYmxkL3BrZy13cmFwcGVyIEhBVkVfRE5TU0VDIE5PX0dNUCAtLWNvcHkgLWxnbXBgCitzdW5vc19saWJzID0gICAgYGlmIHVuYW1lIHwgZ3JlcCBTdW5PUyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gZWNobyAtbHNvY2tldCAtbG5zbCAtbHBvc2l4NDsgZmlgCit2ZXJzaW9uID0gICAgIC1EVkVSU0lPTj0nXCJgJCh0b3ApL2JsZC9nZXQtdmVyc2lvbiAkKHRvcClgXCInCitjb3B0c19jb25mID0gLmNvcHRzXyQoc2hlbGwgJChDQykgLURETlNNQVNRX0NPTVBJTEVfT1BUUyAkKENPUFRTKSAtRSAkKHRvcCkvJChTUkMpL2Ruc21hc3EuaCB8IFwKKwkJCSggbWQ1c3VtIDI+L2Rldi9udWxsIHx8IG1kNSApIHwgY3V0IC1mIDEgLWQgJyAnKQorCitvYmpzID0gY2FjaGUubyByZmMxMDM1Lm8gdXRpbC5vIG9wdGlvbi5vIGZvcndhcmQubyBuZXR3b3JrLm8gXAorICAgICAgIGRuc21hc3EubyBkaGNwLm8gbGVhc2UubyByZmMyMTMxLm8gbmV0bGluay5vIGRidXMubyBicGYubyBcCisgICAgICAgaGVscGVyLm8gdGZ0cC5vIGxvZy5vIGNvbm50cmFjay5vIGRoY3A2Lm8gcmZjMzMxNS5vIFwKKyAgICAgICBkaGNwLWNvbW1vbi5vIG91dHBhY2tldC5vIHJhZHYubyBzbGFhYy5vIGF1dGgubyBpcHNldC5vIFwKKyAgICAgICBkb21haW4ubyBkbnNzZWMubyBibG9ja2RhdGEubyB0YWJsZXMubyBsb29wLm8gaW5vdGlmeS5vCisKK2hkcnMgPSBkbnNtYXNxLmggY29uZmlnLmggZGhjcC1wcm90b2NvbC5oIGRoY3A2LXByb3RvY29sLmggXAorICAgICAgIGRucy1wcm90b2NvbC5oIHJhZHYtcHJvdG9jb2wuaCBpcDZhZGRyLmgKKworYWxsIDogJChCVUlMRERJUikKKwlAY2QgJChCVUlMRERJUikgJiYgJChNQUtFKSBcCisgdG9wPSIkKHRvcCkiIFwKKyBidWlsZF9jZmxhZ3M9IiQodmVyc2lvbikgJChkYnVzX2NmbGFncykgJChpZG5fY2ZsYWdzKSAkKGN0X2NmbGFncykgJChsdWFfY2ZsYWdzKSAkKG5ldHRsZV9jZmxhZ3MpIiBcCisgYnVpbGRfbGlicz0iJChkYnVzX2xpYnMpICQoaWRuX2xpYnMpICQoY3RfbGlicykgJChsdWFfbGlicykgJChzdW5vc19saWJzKSAkKG5ldHRsZV9saWJzKSAkKGdtcF9saWJzKSIgXAorIC1mICQodG9wKS9NYWtlZmlsZSBkbnNtYXNxIAorCittb3N0bHlfY2xlYW4gOgorCXJtIC1mICQoQlVJTERESVIpLyoubW8gJChCVUlMRERJUikvKi5wb3QgCisJcm0gLWYgJChCVUlMRERJUikvLmNvcHRzXyogJChCVUlMRERJUikvKi5vICQoQlVJTERESVIpL2Ruc21hc3EuYSAkKEJVSUxERElSKS9kbnNtYXNxCisKK2NsZWFuIDogbW9zdGx5X2NsZWFuCisJcm0gLWYgJChCVUlMRERJUikvZG5zbWFzcV9iYXNlbGluZQorCXJtIC1mIGNvcmUgKi9jb3JlCisJcm0gLWYgKn4gY29udHJpYi8qLyp+ICovKn4KKworaW5zdGFsbCA6IGFsbCBpbnN0YWxsLWNvbW1vbgorCitpbnN0YWxsLWNvbW1vbiA6CisJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJChCSU5ESVIpIC1kICQoREVTVERJUikkKE1BTkRJUikvbWFuOAorCSQoSU5TVEFMTCkgLW0gNjQ0ICQoTUFOKS9kbnNtYXNxLjggJChERVNURElSKSQoTUFORElSKS9tYW44IAorCSQoSU5TVEFMTCkgLW0gNzU1ICQoQlVJTERESVIpL2Ruc21hc3EgJChERVNURElSKSQoQklORElSKQorCithbGwtaTE4biA6ICQoQlVJTERESVIpCisJQGNkICQoQlVJTERESVIpICYmICQoTUFLRSkgXAorIHRvcD0iJCh0b3ApIiBcCisgaTE4bj0tRExPQ0FMRURJUj1cJ1wiJChMT0NBTEVESVIpXCJcJyBcCisgYnVpbGRfY2ZsYWdzPSIkKHZlcnNpb24pICQoZGJ1c19jZmxhZ3MpICQoY3RfY2ZsYWdzKSAkKGx1YV9jZmxhZ3MpICQobmV0dGxlX2NmbGFncykgYCQoUEtHX0NPTkZJRykgLS1jZmxhZ3MgbGliaWRuYCIgXAorIGJ1aWxkX2xpYnM9IiQoZGJ1c19saWJzKSAkKGN0X2xpYnMpICQobHVhX2xpYnMpICQoc3Vub3NfbGlicykgJChuZXR0bGVfbGlicykgJChnbXBfbGlicykgYCQoUEtHX0NPTkZJRykgLS1saWJzIGxpYmlkbmAiICBcCisgLWYgJCh0b3ApL01ha2VmaWxlIGRuc21hc3EKKwlmb3IgZiBpbiBgY2QgJChQTyk7IGVjaG8gKi5wb2A7IGRvIFwKKwkJY2QgJCh0b3ApICYmIGNkICQoQlVJTERESVIpICYmICQoTUFLRSkgdG9wPSIkKHRvcCkiIC1mICQodG9wKS9NYWtlZmlsZSAkJHtmJS5wb30ubW87IFwKKwlkb25lCisKK2luc3RhbGwtaTE4biA6IGFsbC1pMThuIGluc3RhbGwtY29tbW9uCisJY2QgJChCVUlMRERJUik7ICQodG9wKS9ibGQvaW5zdGFsbC1tbyAkKERFU1RESVIpJChMT0NBTEVESVIpICQoSU5TVEFMTCkKKwljZCAkKE1BTik7IC4uL2JsZC9pbnN0YWxsLW1hbiAkKERFU1RESVIpJChNQU5ESVIpICQoSU5TVEFMTCkKKworbWVyZ2UgOiAKKwlAY2QgJChCVUlMRERJUikgJiYgJChNQUtFKSAtZiAkKHRvcCkvTWFrZWZpbGUgZG5zbWFzcS5wb3QKKwlmb3IgZiBpbiBgY2QgJChQTyk7IGVjaG8gKi5wb2A7IGRvIFwKKwkJZWNobyAtbiBtc2dtZXJnZSAkKFBPKS8kJGYgJiYgJChNU0dNRVJHRSkgLS1uby13cmFwIC1VICQoUE8pLyQkZiAkKEJVSUxERElSKS9kbnNtYXNxLnBvdDsgXAorCWRvbmUKKworIyBDYW5ub25pY2FsaXNlIC5wbyBmaWxlLgorJS5wbyA6IAorCUBjZCAkKEJVSUxERElSKSAmJiAkKE1BS0UpIC1mICQodG9wKS9NYWtlZmlsZSBkbnNtYXNxLnBvdAorCW12ICQoUE8pLyQqLnBvICQoUE8pLyQqLnBvLm9yaWcgJiYgJChNU0dNRVJHRSkgLS1uby13cmFwICQoUE8pLyQqLnBvLm9yaWcgJChCVUlMRERJUikvZG5zbWFzcS5wb3QgPiQoUE8pLyQqLnBvOyAKKworJChCVUlMRERJUik6CisJbWtkaXIgLXAgJChCVUlMRERJUikKKworIyBydWxlcyBiZWxvdyBhcmUgaGVscGVycyBmb3Igc2l6ZSB0cmFja2luZworCitiYXNlbGluZSA6IG1vc3RseV9jbGVhbiBhbGwKKwlAY2QgJChCVUlMRERJUikgJiYgXAorCSAgIG12IGRuc21hc3EgZG5zbWFzcV9iYXNlbGluZQorCitibG9hdGNoZWNrIDogJChCVUlMRERJUikvZG5zbWFzcV9iYXNlbGluZSBtb3N0bHlfY2xlYW4gYWxsCisJQGNkICQoQlVJTERESVIpICYmIFwKKyAgICAgICAgICAgJCh0b3ApL2JsZC9ibG9hdC1vLW1ldGVyIGRuc21hc3FfYmFzZWxpbmUgZG5zbWFzcTsgXAorICAgICAgICAgICBzaXplIGRuc21hc3FfYmFzZWxpbmUgZG5zbWFzcQorCisjIHJ1bGVzIGJlbG93IGFyZSB0YXJnZXRzIGluIHJlY3VzaXZlIG1ha2VzIHdpdGggY3dkPSQoQlVJTERESVIpCisKKyQoY29wdHNfY29uZik6ICQoaGRycykKKwlAcm0gLWYgKi5vIC5jb3B0c18qCisJQHRvdWNoICRACisKKyQob2Jqczoubz0uYykgJChoZHJzKToKKwlsbiAtcyAkKHRvcCkvJChTUkMpLyRAIC4KKworJChvYmpzKTogJChjb3B0c19jb25mKSAkKGhkcnMpCisKKy5jLm86CisJJChDQykgJChDRkxBR1MpICQoQ09QVFMpICQoaTE4bikgJChidWlsZF9jZmxhZ3MpICQoUlBNX09QVF9GTEFHUykgLWMgJDwJCisKK2Ruc21hc3EgOiAkKG9ianMpCisJJChDQykgJChMREZMQUdTKSAtbyAkQCAkKG9ianMpICQoYnVpbGRfbGlicykgJChMSUJTKSAKKworZG5zbWFzcS5wb3QgOiAkKG9ianM6Lm89LmMpICQoaGRycykKKwkkKFhHRVRURVhUKSAtZCBkbnNtYXNxIC0tZm9yZWlnbi11c2VyIC0tb21pdC1oZWFkZXIgLS1rZXl3b3JkPV8gLW8gJEAgLWkgJChvYmpzOi5vPS5jKQorCislLm1vIDogJCh0b3ApLyQoUE8pLyUucG8gZG5zbWFzcS5wb3QKKwkkKE1TR01FUkdFKSAtbyAtICQodG9wKS8kKFBPKS8kKi5wbyBkbnNtYXNxLnBvdCB8ICQoTVNHRk1UKSAtbyAkKi5tbyAtCisKKy5QSE9OWSA6IGFsbCBjbGVhbiBtb3N0bHlfY2xlYW4gaW5zdGFsbCBpbnN0YWxsLWNvbW1vbiBhbGwtaTE4biBpbnN0YWxsLWkxOG4gbWVyZ2UgYmFzZWxpbmUgYmxvYXRjaGVjawpkaWZmIC0tZ2l0IGEvVkVSU0lPTiBiL1ZFUlNJT04KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk4ZWIxZgotLS0gL2Rldi9udWxsCisrKyBiL1ZFUlNJT04KQEAgLTAsMCArMSBAQAorJEZvcm1hdDolZCQKZGlmZiAtLWdpdCBhL2JsZC9BbmRyb2lkLm1rIGIvYmxkL0FuZHJvaWQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYyNzc5NgotLS0gL2Rldi9udWxsCisrKyBiL2JsZC9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsMjQgQEAKK0xPQ0FMX1BBVEggOj0gZXh0ZXJuYWwvZG5zbWFzcS9zcmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKK0xPQ0FMX1NSQ19GSUxFUyA6PSAgYnBmLmMgY2FjaGUuYyBkYnVzLmMgZGhjcC5jIGRuc21hc3EuYyBcCisgICAgICAgICAgICAgICAgICAgIGZvcndhcmQuYyBoZWxwZXIuYyBsZWFzZS5jIGxvZy5jIFwKKyAgICAgICAgICAgICAgICAgICAgbmV0bGluay5jIG5ldHdvcmsuYyBvcHRpb24uYyByZmMxMDM1LmMgXAorCQkgICAgcmZjMjEzMS5jIHRmdHAuYyB1dGlsLmMgY29ubnRyYWNrLmMgXAorCQkgICAgZGhjcDYuYyByZmMzMzE1LmMgZGhjcC1jb21tb24uYyBvdXRwYWNrZXQuYyBcCisJCSAgICByYWR2LmMgc2xhYWMuYyBhdXRoLmMgaXBzZXQuYyBkb21haW4uYyBcCisJICAgICAgICAgICAgZG5zc2VjLmMgZG5zc2VjLW9wZW5zc2wuYyBibG9ja2RhdGEuYyB0YWJsZXMuYyBcCisJCSAgICBsb29wLmMgaW5vdGlmeS5jCisKK0xPQ0FMX01PRFVMRSA6PSBkbnNtYXNxCisKK0xPQ0FMX0NfSU5DTFVERVMgOj0gZXh0ZXJuYWwvZG5zbWFzcS9zcmMKKworTE9DQUxfQ0ZMQUdTIDo9IC1PMiAtZyAtVyAtV2FsbCAtRF9fQU5EUk9JRF9fIC1ETk9fSVBWNiAtRE5PX1RGVFAgLUROT19TQ1JJUFQKK0xPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmMgbGliY3V0aWxzCisKK0xPQ0FMX0xETElCUyA6PSAtTCQoU1lTUk9PVCkvdXNyL2xpYiAtbGxvZworCitpbmNsdWRlICQoQlVJTERfRVhFQ1VUQUJMRSkKZGlmZiAtLWdpdCBhL2JsZC9ibG9hdC1vLW1ldGVyIGIvYmxkL2Jsb2F0LW8tbWV0ZXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmRiMmE1ZQotLS0gL2Rldi9udWxsCisrKyBiL2JsZC9ibG9hdC1vLW1ldGVyCkBAIC0wLDAgKzEsMTMwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IDIwMDQgTWF0dCBNYWNrYWxsIDxtcG1Ac2VsZW5pYy5jb20+CisjCisjIEluc3BpcmVkIGJ5IHBlcmwgQmxvYXQtTy1NZXRlciAoYykgMTk5NyBieSBBbmRpIEtsZWVuCisjCisjIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMKKyMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKworaW1wb3J0IHN5cywgb3MjLCByZQorCitkZWYgdXNhZ2UoKToKKyAgICBzeXMuc3RkZXJyLndyaXRlKCJ1c2FnZTogJXMgWy10XSBmaWxlMSBmaWxlMlxuIiAlIHN5cy5hcmd2WzBdKQorICAgIHN5cy5leGl0KC0xKQorCitmMSwgZjIgPSAoTm9uZSwgTm9uZSkKK2ZsYWdfdGltaW5nLCBkYXNoZXMgPSAoRmFsc2UsIEZhbHNlKQorCitmb3IgZiBpbiBzeXMuYXJndlsxOl06CisgICAgaWYgZi5zdGFydHN3aXRoKCItIik6CisgICAgICAgIGlmIGYgPT0gIi0tIjogIyBzeW1fYXJncworICAgICAgICAgICAgZGFzaGVzID0gVHJ1ZQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgZiA9PSAiLXQiOiAjIHRpbWluZ3MKKyAgICAgICAgICAgIGZsYWdfdGltaW5nID0gVHJ1ZQorICAgIGVsc2U6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmKToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkVycm9yOiBmaWxlICclcycgZG9lcyBub3QgZXhpc3RcbiIgJSBmKQorICAgICAgICAgICAgdXNhZ2UoKQorICAgICAgICBpZiBmMSBpcyBOb25lOgorICAgICAgICAgICAgZjEgPSBmCisgICAgICAgIGVsaWYgZjIgaXMgTm9uZToKKyAgICAgICAgICAgIGYyID0gZgoraWYgZmxhZ190aW1pbmc6CisgICAgaW1wb3J0IHRpbWUKK2lmIGYxIGlzIE5vbmUgb3IgZjIgaXMgTm9uZToKKyAgICB1c2FnZSgpCisKK3N5bV9hcmdzID0gIiAiLmpvaW4oc3lzLmFyZ3ZbMyArIGZsYWdfdGltaW5nICsgZGFzaGVzOl0pCitkZWYgZ2V0c2l6ZXMoZmlsZSk6CisgICAgc3ltLCBhbGlhcywgbHV0ID0ge30sIHt9LCB7fQorICAgIGZvciBsIGluIG9zLnBvcGVuKCJyZWFkZWxmIC1XIC1zICVzICVzIiAlIChzeW1fYXJncywgZmlsZSkpLnJlYWRsaW5lcygpOgorICAgICAgICBsID0gbC5zdHJpcCgpCisgICAgICAgIGlmIG5vdCAobGVuKGwpIGFuZCBsWzBdLmlzZGlnaXQoKSBhbmQgbGVuKGwuc3BsaXQoKSkgPT0gOCk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBudW0sIHZhbHVlLCBzaXplLCB0eXAsIGJpbmQsIHZpcywgbmR4LCBuYW1lID0gbC5zcGxpdCgpCisgICAgICAgIGlmIG5keCA9PSAiVU5EIjogY29udGludWUgIyBza2lwIHVuZGVmaW5lZAorICAgICAgICBpZiB0eXAgaW4gWyJTRUNUSU9OIiwgIkZJTEVTIl06IGNvbnRpbnVlICMgc2tpcCBzZWN0aW9ucyBhbmQgZmlsZXMKKyAgICAgICAgaWYgIi4iIGluIG5hbWU6IG5hbWUgPSAic3RhdGljLiIgKyBuYW1lLnNwbGl0KCIuIilbMF0KKyAgICAgICAgdmFsdWUgPSBpbnQodmFsdWUsIDE2KQorICAgICAgICBzaXplID0gaW50KHNpemUsIDE2KSBpZiBzaXplLnN0YXJ0c3dpdGgoJzB4JykgZWxzZSBpbnQoc2l6ZSkKKyAgICAgICAgaWYgdmlzICE9ICJERUZBVUxUIiBhbmQgYmluZCAhPSAiR0xPQkFMIjogIyBzZWUgaWYgaXQgaXMgYW4gYWxpYXMKKyAgICAgICAgICAgIGFsaWFzWyh2YWx1ZSwgc2l6ZSldID0geyJuYW1lIiA6IG5hbWV9CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzeW1bbmFtZV0gPSB7ImFkZHIiIDogdmFsdWUsICJzaXplIjogIHNpemV9CisgICAgICAgICAgICBsdXRbKHZhbHVlLCBzaXplKV0gPSAwCisgICAgZm9yIGFkZHIsIHN6IGluIGl0ZXIoYWxpYXMua2V5cygpKToKKyAgICAgICAgIyBJZiB0aGUgbm9uLUdMT0JBTCBzeW0gaGFzIGFuIGltcGxlbWVudGF0aW9uIGVsc2V3aGVyZSB0aGVuCisgICAgICAgICMgaXQncyBhbiBhbGlhcywgZGlzcmVnYXJkIGl0LgorICAgICAgICBpZiBub3QgKGFkZHIsIHN6KSBpbiBsdXQ6CisgICAgICAgICAgICAjIElmIHRoaXMgbm9uLUdMT0JBTCBzeW0gZG9lcyBub3QgaGF2ZSBhbiBpbXBsZW1lbnRhdGlvbiBhdAorICAgICAgICAgICAgIyBhbm90aGVyIGFkZHJlc3MsIHRoZW4gdHJlYXQgaXQgYXMgYSBub3JtYWwgc3ltYm9sLgorICAgICAgICAgICAgc3ltW2FsaWFzWyhhZGRyLCBzeildWyJuYW1lIl1dID0geyJhZGRyIiA6IGFkZHIsICJzaXplIjogc3p9CisgICAgZm9yIGwgaW4gb3MucG9wZW4oInJlYWRlbGYgLVcgLVMgIiArIGZpbGUpLnJlYWRsaW5lcygpOgorICAgICAgICB4ID0gbC5zcGxpdCgpCisgICAgICAgIGlmIGxlbih4KTw2OiBjb250aW51ZQorICAgICAgICAjIFNob3VsZCB0YWtlIHRoZXNlIGludG8gYWNjb3VudCB0b28hCisgICAgICAgICNpZiB4WzFdIG5vdCBpbiBbIi50ZXh0IiwgIi5yb2RhdGEiLCAiLnN5bXRhYiIsICIuc3RydGFiIl06IGNvbnRpbnVlCisgICAgICAgIGlmIHhbMV0gbm90IGluIFsiLnJvZGF0YSJdOiBjb250aW51ZQorICAgICAgICBzeW1beFsxXV0gPSB7ImFkZHIiIDogaW50KHhbM10sIDE2KSwgInNpemUiIDogaW50KHhbNV0sIDE2KX0KKyAgICByZXR1cm4gc3ltCisKK2lmIGZsYWdfdGltaW5nOgorICAgIHN0YXJ0X3QxID0gaW50KHRpbWUudGltZSgpICogMWU5KQorb2xkID0gZ2V0c2l6ZXMoZjEpCitpZiBmbGFnX3RpbWluZzoKKyAgICBlbmRfdDEgPSBpbnQodGltZS50aW1lKCkgKiAxZTkpCisgICAgc3RhcnRfdDIgPSBpbnQodGltZS50aW1lKCkgKiAxZTkpCituZXcgPSBnZXRzaXplcyhmMikKK2lmIGZsYWdfdGltaW5nOgorICAgIGVuZF90MiA9IGludCh0aW1lLnRpbWUoKSAqIDFlOSkKKyAgICBzdGFydF90MyA9IGludCh0aW1lLnRpbWUoKSAqIDFlOSkKK2dyb3csIHNocmluaywgYWRkLCByZW1vdmUsIHVwLCBkb3duID0gMCwgMCwgMCwgMCwgMCwgMAorZGVsdGEsIGNvbW1vbiA9IFtdLCB7fQorCitmb3IgbmFtZSBpbiBpdGVyKG9sZC5rZXlzKCkpOgorICAgIGlmIG5hbWUgaW4gbmV3OgorICAgICAgICBjb21tb25bbmFtZV0gPSAxCisKK2ZvciBuYW1lIGluIG9sZDoKKyAgICBpZiBuYW1lIG5vdCBpbiBjb21tb246CisgICAgICAgIHJlbW92ZSArPSAxCisgICAgICAgIHN6ID0gb2xkW25hbWVdWyJzaXplIl0KKyAgICAgICAgZG93biArPSBzegorICAgICAgICBkZWx0YS5hcHBlbmQoKC1zeiwgbmFtZSkpCisKK2ZvciBuYW1lIGluIG5ldzoKKyAgICBpZiBuYW1lIG5vdCBpbiBjb21tb246CisgICAgICAgIGFkZCArPSAxCisgICAgICAgIHN6ID0gbmV3W25hbWVdWyJzaXplIl0KKyAgICAgICAgdXAgKz0gc3oKKyAgICAgICAgZGVsdGEuYXBwZW5kKChzeiwgbmFtZSkpCisKK2ZvciBuYW1lIGluIGNvbW1vbjoKKyAgICAgICAgZCA9IG5ld1tuYW1lXS5nZXQoInNpemUiLCAwKSAtIG9sZFtuYW1lXS5nZXQoInNpemUiLCAwKQorICAgICAgICBpZiBkPjA6IGdyb3csIHVwID0gZ3JvdysxLCB1cCtkCisgICAgICAgIGVsaWYgZDwwOiBzaHJpbmssIGRvd24gPSBzaHJpbmsrMSwgZG93bi1kCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBkZWx0YS5hcHBlbmQoKGQsIG5hbWUpKQorCitkZWx0YS5zb3J0KCkKK2RlbHRhLnJldmVyc2UoKQoraWYgZmxhZ190aW1pbmc6CisgICAgZW5kX3QzID0gaW50KHRpbWUudGltZSgpICogMWU5KQorCitwcmludCgiJS00OHMgJTdzICU3cyAlKzdzIiAlICgiZnVuY3Rpb24iLCAib2xkIiwgIm5ldyIsICJkZWx0YSIpKQorZm9yIGQsIG4gaW4gZGVsdGE6CisgICAgaWYgZDoKKyAgICAgICAgb2xkX3N6ID0gb2xkLmdldChuLCB7fSkuZ2V0KCJzaXplIiwgIi0iKQorICAgICAgICBuZXdfc3ogPSBuZXcuZ2V0KG4sIHt9KS5nZXQoInNpemUiLCAiLSIpCisgICAgICAgIHByaW50KCIlLTQ4cyAlN3MgJTdzICUrN2QiICUgKG4sIG9sZF9zeiwgbmV3X3N6LCBkKSkKK3ByaW50KCItIio3OCkKK3RvdGFsPSIoYWRkL3JlbW92ZTogJXMvJXMgZ3Jvdy9zaHJpbms6ICVzLyVzIHVwL2Rvd246ICVzLyVzKSUlc1RvdGFsOiAlcyBieXRlcyJcCisgICAgJSAoYWRkLCByZW1vdmUsIGdyb3csIHNocmluaywgdXAsIC1kb3duLCB1cC1kb3duKQorcHJpbnQodG90YWwgJSAoIiAiKig4MC1sZW4odG90YWwpKSkpCitpZiBmbGFnX3RpbWluZzoKKyAgICBwcmludCgiXG4lZC8lZDsgJWQgUGFyc2Ugb3JpZ2luL25ldzsgcHJvY2Vzc2luZyBuc2VjcyIgJQorICAgICAgICAoZW5kX3QxLXN0YXJ0X3QxLCBlbmRfdDItc3RhcnRfdDIsIGVuZF90My1zdGFydF90MykpCisgICAgcHJpbnQoInRvdGFsIG5zZWNzOiAlZCIgJSAoZW5kX3QzLXN0YXJ0X3QxKSkKZGlmZiAtLWdpdCBhL2JsZC9nZXQtdmVyc2lvbiBiL2JsZC9nZXQtdmVyc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMjQ2YTNjCi0tLSAvZGV2L251bGwKKysrIGIvYmxkL2dldC12ZXJzaW9uCkBAIC0wLDAgKzEsMzAgQEAKKyMhL2Jpbi9zaAorCisjIERldGVybWluZSB0aGUgdmVyc2lvbiBzdHJpbmcgdG8gYnVpbGQgaW50byBhIGJpbmFyeS4KKyMgV2hlbiBidWlsZGluZyBpbiB0aGUgZ2l0IHJlcG9zaXRvcnksIHdlIGNhbiB1c2UgdGhlIG91dHB1dCAKKyMgb2YgImdpdCBkZXNjcmliZSIgd2hpY2ggZ2l2ZXMgYW4gdW5lcXVpdm9jYWwgYW5zd2VyLgorIworIyBGYWlsaW5nIHRoYXQsIHdlIHVzZSB0aGUgY29udGVudHMgb2YgdGhlIFZFUlNJT04gZmlsZQorIyB3aGljaCBoYXMgYSBzZXQgb2YgcmVmZXJlbmNlcyBzdWJzdGl0dXRlZCBpbnRvIGl0IGJ5IGdpdC4KKyMgSWYgd2UgY2FuIGZpbmQgb25lIHdoaWNoIG1hdGNoZXMgJHZbMC05XS4qIHRoZW4gd2UgYXNzdW1lIGl0J3MKKyMgYSB2ZXJzaW9uLW51bWJlciB0YWcsIGVsc2Ugd2UganVzdCB1c2UgdGhlIHdob2xlIHN0cmluZy4KKyMgSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSB2WzAtOV0uKiB0YWcsIHNvcnQgdGhlbSBhbmQgdXNlIHRoZQorIyBmaXJzdC4gVGhpcyBmYXZvdXJzLCBlZyB2Mi42MyBvdmVyIDIuNjNyYzYuCisKK2lmIHdoaWNoIGdpdCA+L2Rldi9udWxsIDI+JjEgJiYgWyAtZCAkMS8uZ2l0IF07IHRoZW4KKyAgICAgY2QgJDE7IGdpdCBkZXNjcmliZSB8IHNlZCAncy9edi8vJworZWxpZiBncmVwICdcJEZvcm1hdDolZFwkJyAkMS9WRVJTSU9OID4vZGV2L251bGwgMj4mMTsgdGhlbgorIyB1bnN1YnN0aXR1dGVkIFZFUlNJT04sIGJ1dCBubyBnaXQgYXZhaWxhYmxlLgorICAgIGVjaG8gVU5LTk9XTgorZWxzZQorICAgICB2ZXJzPWBjYXQgJDEvVkVSU0lPTiB8IHNlZCAncy9bKCksIF0vLC8gZycgfCB0ciAnLCcgJ1xuJyB8IGdyZXAgXnZbMC05XWAKKworICAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KKyAgICAgICAgIGVjaG8gIiR7dmVyc30iIHwgc29ydCB8IGhlYWQgLW4gMSB8IHNlZCAncy9edi8vJworICAgICBlbHNlCisgICAgICAgICBjYXQgJDEvVkVSU0lPTgorICAgICBmaQorZmkKKworZXhpdCAwCisKZGlmZiAtLWdpdCBhL2JsZC9pbnN0YWxsLW1hbiBiL2JsZC9pbnN0YWxsLW1hbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MjBjOWIxCi0tLSAvZGV2L251bGwKKysrIGIvYmxkL2luc3RhbGwtbWFuCkBAIC0wLDAgKzEsOSBAQAorIyEvYmluL3NoCisKK2ZvciBmIGluICo7IGRvCisgIGlmIFsgLWQgJGYgXTsgdGhlbgorICAgICAkMiAtbSA3NTUgLWQgJDEvJGYvbWFuOCAKKyAgICAgJDIgLW0gNjQ0ICRmL2Ruc21hc3EuOCAkMS8kZi9tYW44CisgICAgIGVjaG8gaW5zdGFsbGluZyAkZi9tYW44L2Ruc21hc3EuOAorICBmaQorZG9uZQpkaWZmIC0tZ2l0IGEvYmxkL2luc3RhbGwtbW8gYi9ibGQvaW5zdGFsbC1tbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYjU0MzAxCi0tLSAvZGV2L251bGwKKysrIGIvYmxkL2luc3RhbGwtbW8KQEAgLTAsMCArMSw5IEBACisjIS9iaW4vc2gKKworZm9yIGYgaW4gKi5tbzsgZG8KKyAgJDIgLW0gNzU1IC1kICQxLyR7ZiUubW99L0xDX01FU1NBR0VTCisgICQyIC1tIDY0NCAkZiAkMS8ke2YlLm1vfS9MQ19NRVNTQUdFUy9kbnNtYXNxLm1vCisgIGVjaG8gaW5zdGFsbGluZyAke2YlLm1vfS9MQ19NRVNTQUdFUy9kbnNtYXNxLm1vCitkb25lCisKKwpkaWZmIC0tZ2l0IGEvYmxkL3BrZy13cmFwcGVyIGIvYmxkL3BrZy13cmFwcGVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBkZGI2NzgKLS0tIC9kZXYvbnVsbAorKysgYi9ibGQvcGtnLXdyYXBwZXIKQEAgLTAsMCArMSw0MCBAQAorIyEvYmluL3NoCisKK3NlYXJjaD0kMQorc2hpZnQKK3BrZz0kMQorc2hpZnQKK29wPSQxCitzaGlmdAorCitpbj1gY2F0YAorCitpZiBncmVwICJeXCNbWzpzcGFjZTpdXSpkZWZpbmVbWzpzcGFjZTpdXSokc2VhcmNoIiBjb25maWcuaCA+L2Rldi9udWxsIDI+JjEgfHwgXAorICAgIGVjaG8gJGluIHwgZ3JlcCAkc2VhcmNoID4vZGV2L251bGwgMj4mMTsgdGhlbgorIyBOYXN0eSwgbmFzdHksIGluIC0tY29weSwgYXJnIDIgaXMgYW5vdGhlciBjb25maWcgdG8gc2VhcmNoIGZvciwgdXNlIHdpdGggTk9fR01QCisgICAgaWYgWyAkb3AgPSAiLS1jb3B5IiBdOyB0aGVuCisJaWYgZ3JlcCAiXlwjW1s6c3BhY2U6XV0qZGVmaW5lW1s6c3BhY2U6XV0qJHBrZyIgY29uZmlnLmggPi9kZXYvbnVsbCAyPiYxIHx8IFwKKyAgICAgICAgICAgIGVjaG8gJGluIHwgZ3JlcCAkcGtnID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICBwa2c9IiIKKwllbHNlIAorCSAgICBwa2c9IiQqIgorCWZpCisgICAgZWxpZiBncmVwICJeXCNbWzpzcGFjZTpdXSpkZWZpbmVbWzpzcGFjZTpdXSoke3NlYXJjaH1fU1RBVElDIiBjb25maWcuaCA+L2Rldi9udWxsIDI+JjEgfHwgXAorCSAgICAgIGVjaG8gJGluIHwgZ3JlcCAke3NlYXJjaH1fU1RBVElDID4vZGV2L251bGwgMj4mMTsgdGhlbgorCXBrZz1gJHBrZyAgLS1zdGF0aWMgJG9wICQqYAorICAgIGVsc2UKKwlwa2c9YCRwa2cgJG9wICQqYAorICAgIGZpCisKKyAgICBpZiBncmVwICJeXCNbWzpzcGFjZTpdXSpkZWZpbmVbWzpzcGFjZTpdXSoke3NlYXJjaH1fU1RBVElDIiBjb25maWcuaCA+L2Rldi9udWxsIDI+JjEgfHwgXAorCWVjaG8gJGluIHwgZ3JlcCAke3NlYXJjaH1fU1RBVElDID4vZGV2L251bGwgMj4mMTsgdGhlbgorCWlmIFsgJG9wID0gIi0tbGlicyIgXSB8fCBbICRvcCA9ICItLWNvcHkiIF07IHRoZW4KKwkgICAgZWNobyAiLVdsLC1Cc3RhdGljICRwa2cgLVdsLC1CZHluYW1pYyIKKwllbHNlCisJICAgIGVjaG8gIiRwa2ciIAorCWZpCisgICAgZWxzZQorCWVjaG8gIiRwa2ciCisgICAgZmkKK2ZpCisKZGlmZiAtLWdpdCBhL2NvbnRyaWIvQ1BFLVdBTi9SRUFETUUgYi9jb250cmliL0NQRS1XQU4vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNTYzNDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL0NQRS1XQU4vUkVBRE1FCkBAIC0wLDAgKzEsMzYgQEAKK0Ruc21hc3EgZnJvbSB2ZXJzaW9uIDIuNTIgaGFzIGEgY291cGxlIG9mIHJhdGhlciBhcHBsaWNhdGlvbi1zcGVjaWZpYworZmVhdHVyZXMgZGVzaWduZWQgdG8gYWxsb3cgZm9yIGltcGxlbWVudGF0aW9uIG9mIHRoZSBESENQIHBhcnQgb2YgQ1BFCitXQU4gbWFuYWdlbWVudCBwcm90b2NvbC4KKworaHR0cDovL3d3dy5icm9hZGJhbmQtZm9ydW0ub3JnL3RlY2huaWNhbC9kb3dubG9hZC9UUi0wNjlfQW1lbmRtZW50LTIucGRmCitodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RSLTA2OQorCitUaGUgcmVsZXZhbnQgc2VjdGlvbnMgYXJlIEYuMi4xICJHYXRld2F5IFJlcXVpcmVtZW50cyIgYW5kIEYuMi41ICJESENQCitWZW5kb3IgT3B0aW9ucyIuCisKK0ZpcnN0LCBkbnNtYXNxIGNoZWNrcyBmb3IgREhDUCByZXF1ZXN0cyB3aGljaCBjb250YWluIGFuIG9wdGlvbi0xMjUKK3ZlbmRvci1jbGFzcyBvcHRpb24gd2hpY2ggaW4gdHVybiBob2xkcyBhIHZlbmRvciBzZWN0aW9uIGZvciBJQU5BCitlbnRlcnByaXNlIG51bWJlciAzNTYxIHdoaWNoIGNvbnRhaW5zIHN1Yi1vcHRpb25zIGNvZGVzIDEgYW5kIDIuIElmCit0aGlzIGlzIHByZXNlbnQgIHRoZW4gdGhlIG5ldHdvcmstdGFnICJjcGV3YW4taWQiIGlzIHNldC4gCitUaGlzIGFsbG93cyBkbnNtYXNxIHRvIGJlIGNvbmZpZ3VyZWQgdG8gcmVwbHkgd2l0aCB0aGUgY29ycmVjdCAKK0dhdGV3YXlNYW51ZmFjdHVyZXJPVUksIEdhdGV3YXlTZXJpYWxOdW1iZXIgYW5kIEdhdGV3YXlQcm9kdWN0Q2xhc3MgbGlrZSB0aGlzOgorCitkaGNwLW9wdGlvbj1jcGV3YW4taWQsdmktZW5jYXA6MzU2MSw0LCI8R2F0ZXdheU1hbnVmYWN0dXJlck9VST4iCitkaGNwLW9wdGlvbj1jcGV3YW4taWQsdmktZW5jYXA6MzU2MSw1LCI8U2VyaWFsTnVtYmVyPiIKK2RoY3Atb3B0aW9uPWNwZXdhbi1pZCx2aS1lbmNhcDozNTYxLDYsIjxQcm9kdWN0Q2xhc3M+IgorCitTZWNvbmQsIHRoZSByZWNlaXZlZCBzdWItb3B0aW9ucyAxLCAyLCBhbmQgMyBhcmUgcGFzc2VkIHRvIHRoZSBESENQCitsZWFzZS1jaGFuZ2Ugc2NyaXB0IGFzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgRE5TTUFTUV9DUEVXQU5fT1VJLAorRE5TTUFTUV9DUEVXQU5fU0VSSUFMLCBhbmQgRE5TTUFTUV9DUEVXQU5fQ0xBU1MgcmVzcGVjdGl2ZWx5LiBUaGlzIGFsbG93cwordGhlIHNjcmlwdCB0byBiZSB1c2VkIHRvIG1haW50YWluIGEgTWFuYWdlYWJsZURldmljZSB0YWJsZSBhcworc3BlY2lmaWVkIGluIEYuMi4xLiBOb3RlIHRoYXQgdGhpcyBkYXRhIGlzIG5vdCByZXRhaW5lZCBpbiBkbnNtYXNxJ3MKK2ludGVybmFsIERIQ1AgbGVhc2UgZGF0YWJhc2UsIHNvIGl0IGlzIG5vdCBhdmFpbGFibGUgb24gZXZlcnkgY2FsbCB0byAKK3RoZSBzY3JpcHQgKHRoaXMgaXMgdGhlIHNhbWUgYXMgc29tZSBvdGhlciBkYXRhIHN1Y2ggYXMgdmVuZG9yIGFuZAordXNlciBjbGFzc2VzKS4gSXQgd2lsbCBob3dldmVyIGJlIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdGhlICJhZGQiCitjYWxsLCBhbmQgc2hvdWxkIGJlIHN0b3JlZCB0aGVuIGFnYWluc3QgdGhlIElQIGFkZHJlc3MgYXMgcHJpbWFyeSAKK2tleSBmb3IgZnV0dXJlIHVzZS4KKworCitUaGlzIGZlYXR1cmUgd2FzIGFkZGVkIHRvIGRuc21hc3EgdW5kZXIgc3BvbnNvcnNoaXAgZnJvbSBFcmljc3Nvbi4KKworCmRpZmYgLS1naXQgYS9jb250cmliL01hY09TWC1sYXVuY2hkL2xhdW5jaGQtUkVBRE1FLnR4dCBiL2NvbnRyaWIvTWFjT1NYLWxhdW5jaGQvbGF1bmNoZC1SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ODMyMjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL01hY09TWC1sYXVuY2hkL2xhdW5jaGQtUkVBRE1FLnR4dApAQCAtMCwwICsxLDM4IEBACitUaGlzIGlzIGEgbGF1bmNoZCBpdGVtIGZvciBNYWMgT1MgWCBhbmQgTWFjIE9TIFggU2VydmVyLgorRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgbGF1bmNoZCwgdGhlCisiU3lzdGVtIHdpZGUgYW5kIHBlci11c2VyIGRhZW1vbi9hZ2VudCBtYW5hZ2VyIiwgc2VlIHRoZSBsYXVuY2hkCittYW4gcGFnZSwgb3IgdGhlIHdpa2lwZWRpYSBwYWdlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xhdW5jaGQKKworVGhpcyBsYXVuY2hkIGl0ZW0gdXNlcyB0aGUgZm9sbG93aW5nIGZsYWdzOgorLS1rZWVwLWluLWZvcmVncm91bmQgLSB0aGlzIGlzIGNydWNpYWwgZm9yIHVzZSB3aXRoIGxhdW5jaGQKKy0tbG9nLXF1ZXJpZXMgLSB0aGlzIGlzIG9wdGlvbmFsIGFuZCB5b3UgY2FuIHJlbW92ZSBpdAorLS1sb2ctZmFjaWxpdHk9L3Zhci9sb2cvZG5zbWFzcS5sb2cgLSBhZ2FpbiBvcHRpb25hbCBpbnN0ZWFkIG9mIHN5c3RlbS5sb2cKKworVG8gdXNlIHRoaXMgbGF1bmNoZCBpdGVtIGZvciBkbnNtYXNxOgorCitJZiB5b3UgZG9uJ3QgYWxyZWFkeSBoYXZlIGEgZm9sZGVyIC9MaWJyYXJ5L0xhdW5jaERhZW1vbnMsIHRoZW4gY3JlYXRlIG9uZToKK3N1ZG8gbWtkaXIgL0xpYnJhcnkvTGF1bmNoRGFlbW9ucworc3VkbyBjaG93biByb290OmFkbWluIC9MaWJyYXJ5L0xhdW5jaERhZW1vbnMKK3N1ZG8gY2htb2QgNzc1IC9MaWJyYXJ5L0xhdW5jaERhZW1vbnMgCisKK0NvcHkgdWsub3JnLnRoZWtlbGxleXMuZG5zbWFzcS5wbGlzdCB0aGVyZSBhbmQgdGhlbiBzZXQgb3duZXJzaGlwL3Blcm1pc3Npb25zOgorc3VkbyBjcCB1ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxLnBsaXN0IC9MaWJyYXJ5L0xhdW5jaERhZW1vbnMvCitzdWRvIGNob3duIHJvb3Q6YWRtaW4gL0xpYnJhcnkvTGF1bmNoRGFlbW9ucy91ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxLnBsaXN0CitzdWRvIGNobW9kIDY0NCAvTGlicmFyeS9MYXVuY2hEYWVtb25zL3VrLm9yZy50aGVrZWxsZXlzLmRuc21hc3EucGxpc3QKKworT3B0aW9uYWxseSwgZWRpdCB5b3VyIGRuc21hc3EgY29uZmlndXJhdGlvbiBmaWxlIHRvIHlvdXIgbGlraW5nLgorCitUbyBzdGFydCB0aGUgbGF1bmNoZCBqb2IsIHdoaWNoIHN0YXJ0cyBkbnNtYXEsIHJlYm9vdCBvciB1c2UgdGhlIGNvbW1hbmQ6CitzdWRvIGxhdW5jaGN0bCBsb2FkIC9MaWJyYXJ5L0xhdW5jaERhZW1vbnMvdWsub3JnLnRoZWtlbGxleXMuZG5zbWFzcS5wbGlzdAorCitUbyBzdG9wIHRoZSBsYXVuY2hkIGpvYiwgd2hpY2ggc3RvcHMgZG5zbWFzcSwgdXNlIHRoZSBjb21tYW5kOgorc3VkbyBsYXVuY2hjdGwgdW5sb2FkIC9MaWJyYXJ5L0xhdW5jaERhZW1vbnMvdWsub3JnLnRoZWtlbGxleXMuZG5zbWFzcS5wbGlzdAorCitJZiB5b3Ugd2FudCB0byBwZXJtYW5lbnRseSBzdG9wIHRoZSBsYXVuY2hkIGpvYiwgc28gaXQgZG9lc24ndCBzdGFydCB0aGUgam9iIGV2ZW4gYWZ0ZXIgYSByZWJvb3QsIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CitzdWRvIGxhdW5jaGN0bCB1bmxvYWQgLXcgL0xpYnJhcnkvTGF1bmNoRGFlbW9ucy91ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxLnBsaXN0CisKK0lmIHlvdSBtYWtlIGEgY2hhbmdlIHRvIHRoZSBjb25maWd1cmF0aW9uIGZpbGUsIHlvdSBzaG91bGQgcmVsYXVuY2ggZG5zbWFzcTsKK3RvIGRvIHRoaXMgdW5sb2FkIGFuZCB0aGVuIGxvYWQgYWdhaW46CisKK3N1ZG8gbGF1bmNoY3RsIHVubG9hZCAvTGlicmFyeS9MYXVuY2hEYWVtb25zL3VrLm9yZy50aGVrZWxsZXlzLmRuc21hc3EucGxpc3QKK3N1ZG8gbGF1bmNoY3RsIGxvYWQgL0xpYnJhcnkvTGF1bmNoRGFlbW9ucy91ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxLnBsaXN0CmRpZmYgLS1naXQgYS9jb250cmliL01hY09TWC1sYXVuY2hkL3VrLm9yZy50aGVrZWxsZXlzLmRuc21hc3EucGxpc3QgYi9jb250cmliL01hY09TWC1sYXVuY2hkL3VrLm9yZy50aGVrZWxsZXlzLmRuc21hc3EucGxpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc3MjViMQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvTWFjT1NYLWxhdW5jaGQvdWsub3JnLnRoZWtlbGxleXMuZG5zbWFzcS5wbGlzdApAQCAtMCwwICsxLDE1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Cis8cGxpc3QgdmVyc2lvbj0iMS4wIj4KKzxkaWN0PgorCTxrZXk+TGFiZWw8L2tleT4KKwk8c3RyaW5nPnVrLm9yZy50aGVrZWxsZXlzLmRuc21hc3E8L3N0cmluZz4KKwk8a2V5PlByb2dyYW1Bcmd1bWVudHM8L2tleT4KKwk8YXJyYXk+CisJCTxzdHJpbmc+L3Vzci9sb2NhbC9zYmluL2Ruc21hc3E8L3N0cmluZz4KKwkJPHN0cmluZz4tLWtlZXAtaW4tZm9yZWdyb3VuZDwvc3RyaW5nPgorCTwvYXJyYXk+CisJPGtleT5SdW5BdExvYWQ8L2tleT4KKwk8dHJ1ZS8+Cis8L2RpY3Q+Cis8L3BsaXN0PgpkaWZmIC0tZ2l0IGEvY29udHJpYi9Tb2xhcmlzMTAvUkVBRE1FIGIvY29udHJpYi9Tb2xhcmlzMTAvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMzU4NzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL1NvbGFyaXMxMC9SRUFETUUKQEAgLTAsMCArMSwyOCBAQAorRnJvbTogRGF2aWQgQ29ubmVsbHkgPGRjb25uZWxseUBnbWFpbC5jb20+CitEYXRlOiBNb24sIEFwciA3LCAyMDA4IGF0IDM6MzEgQU0KK1N1YmplY3Q6IFNvbGFyaXMgMTAgc2VydmljZSBtYW5pZmVzdAorVG86IGRuc21hc3EtZGlzY3Vzc0BsaXN0cy50aGVrZWxsZXlzLm9yZy51aworCisKK0kndmUgZm91bmQgZG5zbWFzcSBtdWNoIGVhc2llciB0byBzZXQgdXAgb24gbXkgaG9tZSBzZXJ2ZXIgcnVubmluZyBTb2xhcmlzCisxMCB0aGFuIHRoZSBzdG9jayBkaGNwL2RucyBzZXJ2ZXIsIHdoaWNoIGlzIHByb2JhYmx5IG92ZXJraWxsIGFueXdheSBmb3IgbXkKK3NpbXBsZSBob21lIG5ldHdvcmsgbmVlZHMuIFNpbmNlIFNvbGFyaXMgbm93IHVzZXMgU01GIChTZXJ2aWNlIE1hbmFnZW1lbnQKK0ZhY2lsaXR5KSB0byBtYW5hZ2Ugc2VydmljZXMgSSB0aG91Z2h0IEknZCBjcmVhdGUgYSBzaW1wbGUgc2VydmljZSBtYW5pZmVzdAorZm9yIHRoZSBkbnNtYXNxIHNlcnZpY2UuIFRoZSBtYW5pZmVzdCBjdXJyZW50bHkgYXNzdW1lcyB0aGF0IGRuc21hc3EgaGFzCitiZWVuIGluc3RhbGxlZCBpbiAnL3Vzci9sb2NhbC9zYmluL2Ruc21hc3EnIGFuZCB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGluCisnL3Vzci9sb2NhbC9ldGMvZG5zbWFzcS5jb25mJywgc28geW91IG1heSBoYXZlIHRvIGFkanVzdCB0aGVzZSBwYXRocyBmb3IKK3lvdXIgbG9jYWwgaW5zdGFsbGF0aW9uLiBIZXJlIGFyZSB0aGUgc3RlcHMgSSBmb2xsb3dlZCB0byBpbnN0YWxsIGFuZCBlbmFibGUKK3RoZSBkbnNtYXNxIHNlcnZpY2U6CisgICMgc3ZjY2ZnIGltcG9ydCBkbnNtYXNxLnhtbAorICAjIHN2Y2FkbSBlbmFibGUgZG5zbWFzcQorCitUbyBjb25maXJtIHRoYXQgdGhlIHNlcnZpY2UgaXMgZW5hYmxlZCBhbmQgb25saW5lOgorCisgICMgc3ZjcyAtbCBkbnNtYXNxCisKK0kndmUganVzdCBzdGFydGVkIGxlYXJuaW5nIGFib3V0IFNNRiBzbyBpZiBhbnlvbmUgaGFzIGFueQorY29ycmVjdGlvbnMvZmVlZGJhY2sgdGhleSBhcmUgbW9yZSB0aGFuIHdlbGNvbWUuCisKK1RoYW5rcywKK0RhdmlkCisKZGlmZiAtLWdpdCBhL2NvbnRyaWIvU29sYXJpczEwL1JFQURNRS1zcGFyYyBiL2NvbnRyaWIvU29sYXJpczEwL1JFQURNRS1zcGFyYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjdiNjVjCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9Tb2xhcmlzMTAvUkVBRE1FLXNwYXJjCkBAIC0wLDAgKzEsOCBAQAorSGkgU2ltb24sCisKK0kganVzdCB3YW50ZWQgdG8gbGV0IHlvdSBrbm93IHRoYXQgSSBoYXZlIGJ1aWx0IGEgU29sYXJpcyAucGtnIGluc3RhbGwgcGFja2FnZSBvZiB5b3VyIGRuc21hc3EgdXRpbGl0eSBmb3IgcGVvcGxlIHRvIHVzZS4gIEZlZWwgZnJlZSB0byBwb2ludCB0aGVtIGluIG15IGRpcmVjdGlvbiBpZiB5b3UgaGF2ZSBwZW9wbGUgd2hvIHdhbnQgdGhpcyBzb3J0IG9mIHRoaW5nLgorCitodHRwOi8vZWplc2NvbnN1bHRpbmcud29yZHByZXNzLmNvbS8yMDEwLzA1LzEyL2dudS1kbnNtYXNxLWZvci1vcGVuc29sYXJpcy1zcGFyYy8KKworVGhhbmtzCistZXZhbgpkaWZmIC0tZ2l0IGEvY29udHJpYi9Tb2xhcmlzMTAvUkVBRE1FLmNyZWF0ZV9wYWNrYWdlIGIvY29udHJpYi9Tb2xhcmlzMTAvUkVBRE1FLmNyZWF0ZV9wYWNrYWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3Njg5OWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL1NvbGFyaXMxMC9SRUFETUUuY3JlYXRlX3BhY2thZ2UKQEAgLTAsMCArMSwyNSBAQAorT2ssIHNjcmlwdCBhdHRhY2hlZCAuLi4gc2VlbXMgdG8gYmUgd29ya2luZyBvayBmb3IgbWUsIAordHJpZWQgdG8gaW5zdGFsbCBhbmQgcmVtb3ZlIGEgZmV3IHRpbWVzLiBJdCBkb2VzIHRoZQorcmlnaHQgdGhpbmcgd2l0aCB0aGUgc21mIHdoZW4gaW5zdGFsbGluZywgeW91IGNhbiB0aGVuIAorc2ltcGx5IGVuYWJsZSB0aGUgc2VydmljZS4gVXBvbiByZW1vdmFsIGl0IGNsZWFucyB1cCB0aGUKK2ZpbGVzIGJ1dCB3b24ndCBjbGVhbiB1cCB0aGUgc2VydmljZXMgKEkgdGhpbmsgdW50aWwKK2EgcmVib290KSAuLi4gSSd2ZSBvbmx5IHN0YXJ0ZWQgbG9va2luZyBhdCB0aGUgbmV3IAorcGFja2FnZXMgc3R1ZmYgaW4gdGhlIGxhc3QgZGF5IG9yIHR3bywgc28gSSBjb3VsZCBiZSAKK21pc3Npbmcgc29tZXRoaW5nLCBidXQgSSBjYW4ndCBmaW5kIGFueSB3YXkgdG8gZm9yY2UKKyBhIHByb3BlciBjbGVhbnVwLgorCitJdCByZXF1aXJlcyB0aGF0IHlvdSBoYXZlIGEgd3JpdGFibGUgcmVwb3NpdG9yeSBzZXR1cCAKK2FzIHBlciB0aGUgZG9jcyBvbiB0aGUgb3BlbnNvbGFyaXMgd2Vic2l0ZSBhbmQgaXQgd2lsbAorY3JlYXRlIGEgZG5zbWFzcSBwYWNrYWdlIChwYWNrYWdlIG5hbWUgaXMgYSB2YXJpYWJsZSAKK2luIHRoZSBzY3JpcHQpLiBUaGUgc2NyaXB0IHRha2VzIGEgdmVyc2lvbiBudW1iZXIgZm9yIAordGhlIHBhY2thZ2UgYW5kIGFzc3VtZXMgdGhhdCBpdCdzIGluIHRoZSBjb250cmliL1NvbGFyaXMxMCAKK2RpcmVjdG9yeSwgaXQgdGhlbiB3b3JrcyBvdXQgdGhlIGJhc2UgdHJlZSBkaXJlY3RvcnkgCitmcm9tICQwLgorCitpLmUuICAkIGNvbnRyaWIvU29sYXJpczEwL2NyZWF0ZV9wYWNrYWdlIDIuNTItMQorb3IgICAkIGNkIGNvbnRyaWIvU29sYXJpczEwOyAuL2NyZWF0ZV9wYWNrYWdlIDIuNTItMQorCitJdCdzIGEgYml0IG1vcmUgY29tcGxleCB0aGFuIGl0IGNvdWxkIGJlIGJlY2F1c2UgSSAKK3ByZWZlciBwdXR0aW5nIHRoZSBkYWVtb24gaW4gL3Vzci9zYmluIGFuZCB0aGUgY29uZmlnIAoraW4gL2V0Yywgc28gdGhlIHNjcmlwdCB3aWxsIGFjdHVhbGx5IGNyZWF0ZSBhIG5ldyAKK3ZlcnNpb24gb2YgdGhlIGV4aXN0aW5nIGNvbnRyaWIgZG5zbWFzcS54bWwuCmRpZmYgLS1naXQgYS9jb250cmliL1NvbGFyaXMxMC9jcmVhdGVfcGFja2FnZSBiL2NvbnRyaWIvU29sYXJpczEwL2NyZWF0ZV9wYWNrYWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZmEyYTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL1NvbGFyaXMxMC9jcmVhdGVfcGFja2FnZQpAQCAtMCwwICsxLDg3IEBACisjIS9iaW4vc2gKKworIworIyBGb3Igb3VyIHBhY2thZ2UsIGFuZCBmb3IgdGhlIFNNRiBzY3JpcHQsIHdlIG5lZWQgdG8gZGVmaW5lIHdoZXJlIHdlCisjIHdhbnQgdGhpbmdzIHRvIGdvLi4uCisjCitCSU5fRElSPSIvdXNyL3NiaW4iCitDT05GX0RJUj0iL2V0YyIKK01BTl9ESVI9Ii91c3Ivc2hhcmUvbWFuL21hbjgiCisKK1BBQ0tBR0VfTkFNRT0iZG5zbWFzcSIKKworIworIyBTaW5jZSB3ZSBrbm93IHdlIGFyZSBpbiB0aGUgY29udHJpYiBkaXJlY3Rvcnkgd2UgY2FuIHdvcmsgb3V0IHdoZXJlCisjIHRoZSByZXN0IG9mIHRoZSB0cmVlIGlzLi4uCisjCitCQVNFRElSPSJgZGlybmFtZSAkMGAvLi4vLi4iCisKKyMKKyMgV2UgbmVlZCBhIHZlcnNpb24gbnVtYmVyIHRvIHVzZSBmb3IgdGhlIHBhY2thZ2UgY3JlYXRpb24uLi4KKyMKK2lmIFsgJCMgIT0gMSBdOyB0aGVuCisJZWNobyAiVXNhZ2U6ICQwIDxwYWNrYWdlX3ZlcnNpb25fbnVtYmVyPiIgPiYyCisJZXhpdCAxCitmaQorVkVSU0lPTj0iJDEiCisKKyMKKyMgRmlyc3QgdGhpbmcgd2UgZG8gaXMgZml4LXVwIHRoZSBzbWYgZmlsZSB0byB1c2UgdGhlIHBhdGhzIHdlIHByZWZlci4uLgorIworaWYgWyAhIC1mICIke0JBU0VESVJ9L2NvbnRyaWIvU29sYXJpczEwL2Ruc21hc3EueG1sIiBdOyB0aGVuCisJZWNobyAiJDA6IHVuYWJsZSB0byBmaW5kIGNvbnRyaWIvU29sYXJpczEwL2Ruc21hc3EueG1sIiA+JjIKKwlleGl0IDEKK2ZpCisKK2VjaG8gIkZpeGluZyB1cCBzbWYgZmlsZSAuLi4gXGMiCitjYXQgIiR7QkFTRURJUn0vY29udHJpYi9Tb2xhcmlzMTAvZG5zbWFzcS54bWwiIHwgXAorCXNlZCAJLWUgInMlL3Vzci9sb2NhbC9ldGMlJHtDT05GX0RJUn0lIiBcCisJCS1lICJzJS91c3IvbG9jYWwvc2JpbiUke0JJTl9ESVJ9JSIgXAorCQktZSAicyUvdXNyL2xvY2FsL21hbiUke01BTl9ESVJ9JSIgPiAke0JBU0VESVJ9L2NvbnRyaWIvU29sYXJpczEwL2Ruc21hc3EtcGtnLnhtbAorZWNobyAiZG9uZS4iCisKK2VjaG8gIkNyZWF0aW5nIHBhY2thZ2luZyBmaWxlIC4uLiBcYyIKK2NhdCA8PEVPRiA+JHtCQVNFRElSfS9jb250cmliL1NvbGFyaXMxMC9kbnNtYXNxX3BhY2thZ2UuaW5jCisjCisjIGhlYWRlcgorIworc2V0IG5hbWU9cGtnLm5hbWUJCXZhbHVlPSJkbnNtYXNxIgorc2V0IG5hbWU9cGtnLmRlc2NyaXB0aW9uCXZhbHVlPSJkbnNtYXNxIGRhZW1vbiAtIGRucywgZGhjcCwgdGZ0cCBldGMiCitzZXQgbmFtZT1wa2cuZGV0YWlsZWRfdXJsCXZhbHVlPSJodHRwOi8vd3d3LnRoZWtlbGxleXMub3JnLnVrL2Ruc21hc3EvZG9jLmh0bWwiCitzZXQgbmFtZT1pbmZvLm1haW50YWluZXIJdmFsdWU9IlRCRCAodGJkQHRiZC5jb20pIgorc2V0IG5hbWU9aW5mby51cHN0cmVhbQkJdmFsdWU9ImRuc21hc3EtZGlzY3Vzc0BsaXN0cy50aGVrZWxsZXlzLm9yZy51ayIKK3NldCBuYW1lPWluZm8udXBzdHJlYW1fdXJsCXZhbHVlPSJodHRwOi8vd3d3LnRoZWtlbGxleXMub3JnLnVrL2Ruc21hc3EvZG9jLmh0bWwiCisjCisjIGRlcGVuZGVuY2llcyAuLi4gbm9uZT8KKyMKKworIworIyBkaXJlY3RvcmllcworIworZGlyIG1vZGU9MDc1NSBvd25lcj1yb290IGdyb3VwPWJpbiBwYXRoPSR7QklOX0RJUn0vCitkaXIgbW9kZT0wNzU1IG93bmVyPXJvb3QgZ3JvdXA9c3lzIHBhdGg9JHtDT05GX0RJUn0vCitkaXIgbW9kZT0wNzU1IG93bmVyPXJvb3QgZ3JvdXA9c3lzIHBhdGg9JHtNQU5fRElSfS8KK2RpciBtb2RlPTA3NTUgb3duZXI9cm9vdCBncm91cD1zeXMgcGF0aD0vdmFyLworZGlyIG1vZGU9MDc1NSBvd25lcj1yb290IGdyb3VwPXN5cyBwYXRoPS92YXIvc3ZjCitkaXIgbW9kZT0wNzU1IG93bmVyPXJvb3QgZ3JvdXA9c3lzIHBhdGg9L3Zhci9zdmMvbWFuaWZlc3QKK2RpciBtb2RlPTA3NTUgb3duZXI9cm9vdCBncm91cD1zeXMgcGF0aD0vdmFyL3N2Yy9tYW5pZmVzdC9uZXR3b3JrCisKKyMKKyMgZmlsZXMKKyMKK2ZpbGUgJHtCQVNFRElSfS9zcmMvZG5zbWFzcSBtb2RlPTA1NTUgb3duZXI9cm9vdCBncm91cD1iaW4gcGF0aD0ke0JJTl9ESVJ9L2Ruc21hc3EKK2ZpbGUgJHtCQVNFRElSfS9tYW4vZG5zbWFzcS44IG1vZGU9MDU1NSBvd25lcj1yb290IGdyb3VwPWJpbiBwYXRoPSR7TUFOX0RJUn0vZG5zbWFzcS44CitmaWxlICR7QkFTRURJUn0vZG5zbWFzcS5jb25mLmV4YW1wbGUgbW9kZT0wNjQ0IG93bmVyPXJvb3QgZ3JvdXA9c3lzIHBhdGg9JHtDT05GX0RJUn0vZG5zbWFzcS5jb25mIHByZXNlcnZlPXN0cmF3YmVycnkKK2ZpbGUgJHtCQVNFRElSfS9jb250cmliL1NvbGFyaXMxMC9kbnNtYXNxLXBrZy54bWwgbW9kZT0wNjQ0IG93bmVyPXJvb3QgZ3JvdXA9c3lzIHBhdGg9L3Zhci9zdmMvbWFuaWZlc3QvbmV0d29yay9kbnNtYXNxLnhtbCByZXN0YXJ0X2Ztcmk9c3ZjOi9zeXN0ZW0vbWFuaWZlc3QtaW1wb3J0OmRlZmF1bHQKKworRU9GCitlY2hvICJkb25lLiIKKworZWNobyAiQ3JlYXRpbmcgcGFja2FnZS4uLiIKK2V2YWwgYHBrZ3NlbmQgb3BlbiAke1BBQ0tBR0VfTkFNRX1AJHtWRVJTSU9OfWAKK3BrZ3NlbmQgaW5jbHVkZSAke0JBU0VESVJ9L2NvbnRyaWIvU29sYXJpczEwL2Ruc21hc3FfcGFja2FnZS5pbmMKK2lmIFsgIiQ/IiA9IDAgXTsgdGhlbgorCXBrZ3NlbmQgY2xvc2UKK2Vsc2UKKwllY2hvICJFcnJvcnMiCitmaQpkaWZmIC0tZ2l0IGEvY29udHJpYi9Tb2xhcmlzMTAvZG5zbWFzcS54bWwgYi9jb250cmliL1NvbGFyaXMxMC9kbnNtYXNxLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGEwMjUzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9Tb2xhcmlzMTAvZG5zbWFzcS54bWwKQEAgLTAsMCArMSw2NSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8IURPQ1RZUEUgc2VydmljZV9idW5kbGUgU1lTVEVNICIvdXNyL3NoYXJlL2xpYi94bWwvZHRkL3NlcnZpY2VfYnVuZGxlLmR0ZC4xIj4KKworPCEtLSBTZXJ2aWNlIG1hbmlmZXN0IGZvciBkbnNtYXNxIC0tPgorCis8c2VydmljZV9idW5kbGUgdHlwZT0nbWFuaWZlc3QnIG5hbWU9J2Ruc21hc3EnPgorICA8c2VydmljZSBuYW1lPSduZXR3b3JrL2Ruc21hc3EnIHR5cGU9J3NlcnZpY2UnIHZlcnNpb249JzEnPgorCisgICAgPGNyZWF0ZV9kZWZhdWx0X2luc3RhbmNlIGVuYWJsZWQ9J2ZhbHNlJy8+CisgICAgPHNpbmdsZV9pbnN0YW5jZS8+CisKKyAgICA8ZGVwZW5kZW5jeSBuYW1lPSdtdWx0aS11c2VyJworICAgICAgICAgICAgICAgIGdyb3VwaW5nPSdyZXF1aXJlX2FsbCcKKyAgICAgICAgICAgICAgICByZXN0YXJ0X29uPSdyZWZyZXNoJworICAgICAgICAgICAgICAgIHR5cGU9J3NlcnZpY2UnPgorICAgICAgPHNlcnZpY2VfZm1yaSB2YWx1ZT0nc3ZjOi9taWxlc3RvbmUvbXVsdGktdXNlcicvPgorICAgIDwvZGVwZW5kZW5jeT4KKworICAgIDxkZXBlbmRlbmN5IG5hbWU9J2NvbmZpZycKKwkJZ3JvdXBpbmc9J3JlcXVpcmVfYWxsJworCQlyZXN0YXJ0X29uPSdyZXN0YXJ0JworCQl0eXBlPSdwYXRoJz4KKyAgICAgIDxzZXJ2aWNlX2ZtcmkgdmFsdWU9J2ZpbGU6Ly8vdXNyL2xvY2FsL2V0Yy9kbnNtYXNxLmNvbmYnLz4KKyAgICA8L2RlcGVuZGVuY3k+CisKKyAgICA8ZGVwZW5kZW50IG5hbWU9J2Ruc21hc3FfbXVsdGktdXNlci1zZXJ2ZXInCisgICAgICAgICAgICAgICBncm91cGluZz0nb3B0aW9uYWxfYWxsJworICAgICAgICAgICAgICAgcmVzdGFydF9vbj0nbm9uZSc+CisgICAgICA8c2VydmljZV9mbXJpIHZhbHVlPSdzdmM6L21pbGVzdG9uZS9tdWx0aS11c2VyLXNlcnZlcicgLz4KKyAgICA8L2RlcGVuZGVudD4KKworICAgIDxleGVjX21ldGhvZCB0eXBlPSdtZXRob2QnIG5hbWU9J3N0YXJ0JworICAgICAgICAgICAgICAgICBleGVjPScvdXNyL2xvY2FsL3NiaW4vZG5zbWFzcSAtQyAvdXNyL2xvY2FsL2V0Yy9kbnNtYXNxLmNvbmYnCisgICAgICAgICAgICAgICAgIHRpbWVvdXRfc2Vjb25kcz0nNjAnID4KKyAgICAgIDxtZXRob2RfY29udGV4dD4KKyAgICAgICAgPG1ldGhvZF9jcmVkZW50aWFsIHVzZXI9J3Jvb3QnIGdyb3VwPSdyb290JyBwcml2aWxlZ2VzPSdhbGwnLz4KKyAgICAgIDwvbWV0aG9kX2NvbnRleHQ+CisgICAgPC9leGVjX21ldGhvZD4KKworICAgIDxleGVjX21ldGhvZCB0eXBlPSdtZXRob2QnCisgICAgICAgICAgICAgICAgIG5hbWU9J3N0b3AnCisgICAgICAgICAgICAgICAgIGV4ZWM9JzpraWxsJworICAgICAgICAgICAgICAgICB0aW1lb3V0X3NlY29uZHM9JzYwJy8+CisKKyAgICA8ZXhlY19tZXRob2QgdHlwZT0nbWV0aG9kJworICAgICAgICAgICAgICAgICBuYW1lPSdyZWZyZXNoJworICAgICAgICAgICAgICAgICBleGVjPSc6a2lsbCAtSFVQJworICAgICAgICAgICAgICAgICB0aW1lb3V0X3NlY29uZHM9JzYwJyAvPgorCisgICAgPHRlbXBsYXRlPgorICAgICAgPGNvbW1vbl9uYW1lPgorICAgICAgICA8bG9jdGV4dCB4bWw6bGFuZz0nQyc+ZG5zbWFzcSBzZXJ2ZXI8L2xvY3RleHQ+CisgICAgICA8L2NvbW1vbl9uYW1lPgorICAgICAgPGRlc2NyaXB0aW9uPgorICAgICAgICA8bG9jdGV4dCB4bWw6bGFuZz0nQyc+CitkbnNtYXNxIC0gQSBsaWdodHdlaWdodCBESENQIGFuZCBjYWNoaW5nIEROUyBzZXJ2ZXIuCisgICAgICAgIDwvbG9jdGV4dD4KKyAgICAgIDwvZGVzY3JpcHRpb24+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgPG1hbnBhZ2UgdGl0bGU9J2Ruc21hc3EnIHNlY3Rpb249JzgnIG1hbnBhdGg9Jy91c3IvbG9jYWwvbWFuJy8+CisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgPC90ZW1wbGF0ZT4KKworICA8L3NlcnZpY2U+Cis8L3NlcnZpY2VfYnVuZGxlPgpkaWZmIC0tZ2l0IGEvY29udHJpYi9TdXNlL1JFQURNRSBiL2NvbnRyaWIvU3VzZS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZkYzE4NgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvU3VzZS9SRUFETUUKQEAgLTAsMCArMSw2IEBACitUaGlzIHBhY2thZ2luZyBpcyBub3cgdW5tYWludGFpbmVkIGluIHRoZSBkbnNtYXNxIHNvdXJjZTogZG5zbWFzcSBpcworaW5jbHVkZWQgaW4gU3VzZSBwcm9wZXIsIGFuZCB1cC10by1kYXRlIHBhY2thZ2VzIGFyZSBub3cgYXZhaWxhYmxlCitmcm9tIAorCitmdHA6Ly9mdHAuc3VzZS5jb20vcHViL3Blb3BsZS91Zy8KKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9TdXNlL1JFQURNRS5zdXNlZmlyZXdhbGwgYi9jb250cmliL1N1c2UvUkVBRE1FLnN1c2VmaXJld2FsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjE5Y2E2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9TdXNlL1JFQURNRS5zdXNlZmlyZXdhbGwKQEAgLTAsMCArMSwyNyBAQAorVGhpcyBpcyBhIHBhdGNoIGFnYWluc3QgU3VTRWZpcmV3YWxsMi0zLjEtMjA2IChTdVNFIDkueCBhbmQgb2xkZXIpCitJdCBmaXhlcyB0aGUgZGVwYW5jeSBmcm9tIHRoZSBkbnMgZGFlbW9uIG5hbWUgJ25hbWVkJworQWZ0ZXIgYXBwZW5kaW5nIHRoZSBwYXRjaCwgdGhlIFN1U0VmaXJld2FsbCBpcyBhZ2FpbiBhYmxlIHRvIGF1dG9kZXRlY3QgCit0aGUgZG5zbWFzcSBuYW1lZCBzZXJ2aWNlLgorVGhpcyBpcyBhIHZlcnkgb2xkIGJ1ZyBpbiB0aGUgU3VTRWZpcmV3YWxsIHNjcmlwdC4KK1RoZSBTdVNFIHBlb3BsZSB0aGluayB0aGUgbmFtZSBvZiB0aGUgZG5zIHNlcnZlciB3aWxsIGFsbHdheXMgJ25hbWVkJworCisKKy0tLSAvc2Jpbi9TdVNFZmlyZXdhbGwyLm9yaWcJMjAwNC0wMS0yMyAxMzozMDowOS4wMDAwMDAwMDAgKzAxMDAKKysrKyAvc2Jpbi9TdVNFZmlyZXdhbGwyCTIwMDQtMDEtMjMgMTM6MzE6NTYuMDAwMDAwMDAwICswMTAwCitAQCAtNzY0LDcgKzc2NCw3IEBACisgICAgIGVjaG8gJ0ZXX0FMTE9XX0lOQ09NSU5HX0hJR0hQT1JUU19VRFAgc2hvdWxkIGJlIHNldCB0byB5ZXMsIGlmIHlvdSBhcmUgcnVubmluZyBhIEROUyBzZXJ2ZXIhJworIAorIHRlc3QgIiRGV19TRVJWSUNFX0FVVE9ERVRFQ1QiID0geWVzIC1vICIkRldfU0VSVklDRV9BVVRPREVURUNUIiA9IGRteiAtbyAiJEZXX1NFUlZJQ0VfQVVUT0RFVEVDVCIgPSBleHQgJiYgeworLSAgICB0ZXN0ICIkRldfU0VSVklDRV9ETlMiID0gbm8gLWEgJyEnICIkU1RBUlRfTkFNRUQiID0gbm8gJiYgY2hlY2tfc3J2IG5hbWVkICYmIHsKKysgICAgdGVzdCAiJEZXX1NFUlZJQ0VfRE5TIiA9IG5vIC1hICchJyAiJFNUQVJUX05BTUVEIiA9IG5vICYmIGNoZWNrX3NydiBkbnNtYXNxICYmIHsKKyAJZWNobyAtZSAnV2FybmluZzogZGV0ZWN0ZWQgYWN0aXZhdGVkIG5hbWVkLCBlbmFibGluZyBGV19TRVJWSUNFX0ROUyEKKyBZb3Ugc3RpbGwgaGF2ZSB0byBhbGxvdyB0Y3AvdWRwIHBvcnQgNTMgb24gaW50ZXJuYWwsIGRteiBhbmQvb3IgZXh0ZXJuYWwuJworIAlGV19TRVJWSUNFX0ROUz0kRldfU0VSVklDRV9BVVRPREVURUNUCitAQCAtODc4LDcgKzg3OCw3IEBACisgdGVzdCAtZSAvZXRjL3Jlc29sdi5jb25mIHx8IGVjaG8gIldhcm5pbmc6IC9ldGMvcmVzb2x2LmNvbmYgbm90IGZvdW5kIgorICMgR2V0IHBvcnRzL0lQIGJpbmRpbmdzIG9mIE5BTUVEL1NRVUlECisgdGVzdCAiJEZXX1NFUlZJQ0VfRE5TIiA9IHllcyAtbyAiJEZXX1NFUlZJQ0VfRE5TIiA9IGRteiAtbyAiJEZXX1NFUlZJQ0VfRE5TIiA9IGV4dCAtbyAiJFNUQVJUX05BTUVEIiA9IHllcyAmJiBETlNfUE9SVD1gJExTT0YgLWkgLW4gLVAgfCBcCistICAgICRBV0sgLUY6ICcvXm5hbWVkIC4qIFVEUCAvIHtwcmludCAkMn0nfCAkR1JFUCAtdncgNTMgfCAkU09SVCAtdW5gCisrICAgICRBV0sgLUY6ICcvXmRuc21hc3EgLiogVURQIC8ge3ByaW50ICQyfSd8ICRHUkVQIC12dyA1MyB8ICRTT1JUIC11bmAKKyB0ZXN0ICIkRldfU0VSVklDRV9TUVVJRCIgPSB5ZXMgLW8gIiRGV19TRVJWSUNFX1NRVUlEIiA9IGRteiAtbyAiJEZXX1NFUlZJQ0VfU1FVSUQiID0gZXh0IC1vICIkU1RBUlRfU1FVSUQiID0geWVzICYmIFNRVUlEX1BPUlQ9YCRMU09GIC1pIC1uIC1QIHwgXAorICAgICAkQVdLIC1GOiAnL15zcXVpZCAuKiBVRFAvIHtwcmludCAkMn0nfCAkU09SVCAtdW5gCmRpZmYgLS1naXQgYS9jb250cmliL1N1c2UvZG5zbWFzcS1TdVNFLnBhdGNoIGIvY29udHJpYi9TdXNlL2Ruc21hc3EtU3VTRS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjYyNDVmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9TdXNlL2Ruc21hc3EtU3VTRS5wYXRjaApAQCAtMCwwICsxLDIzIEBACistLS0gbWFuL2Ruc21hc3EuOAkyMDA0LTA4LTA4IDIwOjU3OjU2LjAwMDAwMDAwMCArMDIwMAorKysrIG1hbi9kbnNtYXNxLjgJMjAwNC0wOC0xMiAwMDo0MDowMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC02OSw3ICs2OSw3IEBACisgLlRQCisgLkIgXC1nLCAtLWdyb3VwPTxncm91cG5hbWU+IAorIFNwZWNpZnkgdGhlIGdyb3VwIHdoaWNoIGRuc21hc3Egd2lsbCBydW4KKy1hcy4gVGhlIGRlZmF1bHRzIHRvICJkaXAiLCBpZiBhdmFpbGFibGUsIHRvIGZhY2lsaXRhdGUgYWNjZXNzIHRvCisrYXMuIFRoZSBkZWZhdWx0cyB0byAiZGlhbG91dCIsIGlmIGF2YWlsYWJsZSwgdG8gZmFjaWxpdGF0ZSBhY2Nlc3MgdG8KKyAvZXRjL3BwcC9yZXNvbHYuY29uZiB3aGljaCBpcyBub3Qgbm9ybWFsbHkgd29ybGQgcmVhZGFibGUuCisgLlRQCisgLkIgXC12LCAtLXZlcnNpb24KKy0tLSBzcmMvY29uZmlnLmgJMjAwNC0wOC0xMSAxMTozOToxOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBzcmMvY29uZmlnLmgJMjAwNC0wOC0xMiAwMDo0MDowMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC00NCw3ICs0NCw3IEBACisgI2VuZGlmCisgI2RlZmluZSBERUZMRUFTRSAzNjAwIC8qIGRlZmF1bHQgbGVhc2UgdGltZSwgMSBob3VyICovCisgI2RlZmluZSBDSFVTRVIgIm5vYm9keSIKKy0jZGVmaW5lIENIR1JQICJkaXAiCisrI2RlZmluZSBDSEdSUCAiZGlhbG91dCIKKyAjZGVmaW5lIERIQ1BfU0VSVkVSX1BPUlQgNjcKKyAjZGVmaW5lIERIQ1BfQ0xJRU5UX1BPUlQgNjgKKyAKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9TdXNlL2Ruc21hc3Etc3VzZS5zcGVjIGIvY29udHJpYi9TdXNlL2Ruc21hc3Etc3VzZS5zcGVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmOGJhOGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL1N1c2UvZG5zbWFzcS1zdXNlLnNwZWMKQEAgLTAsMCArMSwxMTEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgR2VuZXJhbAorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitOYW1lOiBkbnNtYXNxCitWZXJzaW9uOiAyLjMzCitSZWxlYXNlOiAxCitDb3B5cmlnaHQ6IEdQTAorR3JvdXA6IFByb2R1Y3Rpdml0eS9OZXR3b3JraW5nL0ROUy9TZXJ2ZXJzCitWZW5kb3I6IFNpbW9uIEtlbGxleQorUGFja2FnZXI6IFNpbW9uIEtlbGxleQorVVJMOiBodHRwOi8vd3d3LnRoZWtlbGxleXMub3JnLnVrL2Ruc21hc3EKK1Byb3ZpZGVzOiBkbnNfZGFlbW9uCitDb25mbGljdHM6IGJpbmQgYmluZDggYmluZDkKK1ByZVJlcTogJWZpbGx1cF9wcmVyZXEgJWluc3NlcnZfcHJlcmVxCitBdXRvcmVxcHJvdjogb24KK1NvdXJjZTA6ICV7bmFtZX0tJXt2ZXJzaW9ufS50YXIuYnoyCitCdWlsZFJvb3Q6IC92YXIvdG1wLyV7bmFtZX0tJXt2ZXJzaW9ufQorU3VtbWFyeTogQSBsaWdodHdlaWdodCBjYWNoaW5nIG5hbWVzZXJ2ZXIKKworJWRlc2NyaXB0aW9uCitEbnNtYXNxIGlzIGxpZ2h0d2VpZ2h0LCBlYXN5IHRvIGNvbmZpZ3VyZSBETlMgZm9yd2FyZGVyIGFuZCBESENQIHNlcnZlci4gSXQgCitpcyBkZXNpZ25lZCB0byBwcm92aWRlIEROUyBhbmQsIG9wdGlvbmFsbHksIERIQ1AsIHRvIGEgc21hbGwgbmV0d29yay4gSXQgY2FuCitzZXJ2ZSB0aGUgbmFtZXMgb2YgbG9jYWwgbWFjaGluZXMgd2hpY2ggYXJlIG5vdCBpbiB0aGUgZ2xvYmFsIEROUy4gVGhlIERIQ1AgCitzZXJ2ZXIgaW50ZWdyYXRlcyB3aXRoIHRoZSBETlMgc2VydmVyIGFuZCBhbGxvd3MgbWFjaGluZXMgd2l0aCBESENQLWFsbG9jYXRlZAorYWRkcmVzc2VzIHRvIGFwcGVhciBpbiB0aGUgRE5TIHdpdGggbmFtZXMgY29uZmlndXJlZCBlaXRoZXIgaW4gZWFjaCBob3N0IG9yIAoraW4gYSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gZmlsZS4gRG5zbWFzcSBzdXBwb3J0cyBzdGF0aWMgYW5kIGR5bmFtaWMgREhDUCAKK2xlYXNlcyBhbmQgQk9PVFAgZm9yIG5ldHdvcmsgYm9vdGluZyBvZiBkaXNrbGVzcyBtYWNoaW5lcy4KKworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQnVpbGQKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworJXByZXAKKyVzZXR1cCAtcQorcGF0Y2ggLXAwIDxycG0vJXtuYW1lfS1TdVNFLnBhdGNoCisKKyVidWlsZAorJXs/c3VzZV91cGRhdGVfY29uZmlnOiV7c3VzZV91cGRhdGVfY29uZmlnIC1mfX0KK21ha2UgYWxsLWkxOG4gREVTVERJUj0kUlBNX0JVSUxEX1JPT1QgUFJFRklYPS91c3IKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBJbnN0YWxsCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyVpbnN0YWxsCitybSAtcmYgJFJQTV9CVUlMRF9ST09UCitta2RpciAtcCAke1JQTV9CVUlMRF9ST09UfS9ldGMvaW5pdC5kCittYWtlIGluc3RhbGwtaTE4biBERVNURElSPSRSUE1fQlVJTERfUk9PVCBQUkVGSVg9L3VzcgoraW5zdGFsbCAtbyByb290IC1nIHJvb3QgLW0gNzU1IHJwbS9yYy5kbnNtYXNxLXN1c2UgJFJQTV9CVUlMRF9ST09UL2V0Yy9pbml0LmQvZG5zbWFzcQoraW5zdGFsbCAtbyByb290IC1nIHJvb3QgLW0gNjQ0IGRuc21hc3EuY29uZi5leGFtcGxlICRSUE1fQlVJTERfUk9PVC9ldGMvZG5zbWFzcS5jb25mCitzdHJpcCAkUlBNX0JVSUxEX1JPT1QvdXNyL3NiaW4vZG5zbWFzcQorbG4gLXNmIC4uLy4uL2V0Yy9pbml0LmQvZG5zbWFzcSAkUlBNX0JVSUxEX1JPT1QvdXNyL3NiaW4vcmNkbnNtYXNxCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQ2xlYW4gdXAKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworJWNsZWFuCitybSAtcmYgJFJQTV9CVUlMRF9ST09UCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgUG9zdC1pbnN0YWxsIHNjcmlwdGxldAorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCislcG9zdAorJXtmaWxsdXBfYW5kX2luc3NlcnYgZG5zbWFzcX0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBQb3N0LXVuaW5zdGFsbCBzY3JpcHRsZXQKKyMKKyMgVGhlICVwb3N0dW4gc2NyaXB0IGV4ZWN1dGVzIGFmdGVyIHRoZSBwYWNrYWdlIGhhcyBiZWVuIHJlbW92ZWQuIEl0IGlzIHRoZQorIyBsYXN0IGNoYW5jZSBmb3IgYSBwYWNrYWdlIHRvIGNsZWFuIHVwIGFmdGVyIGl0c2VsZi4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworJXBvc3R1bgorJXtpbnNzZXJ2X2NsZWFudXB9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgRmlsZSBsaXN0CisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyVmaWxlcworJWRlZmF0dHIoLSxyb290LHJvb3QpCislZG9jIENIQU5HRUxPRyBDT1BZSU5HIEZBUSBkb2MuaHRtbCBzZXR1cC5odG1sIFVQR1JBRElOR190b18yLjAgcnBtL1JFQURNRS5zdXNlZmlyZXdhbGwKKyVkb2MgY29udHJpYgorJWNvbmZpZyAvZXRjL2luaXQuZC9kbnNtYXNxCislY29uZmlnIC9ldGMvZG5zbWFzcS5jb25mCisvdXNyL3NiaW4vcmNkbnNtYXNxCisvdXNyL3NiaW4vZG5zbWFzcQorL3Vzci9zaGFyZS9sb2NhbGUvKi9MQ19NRVNTQUdFUy8qCislZG9jICV7X21hbmRpcn0vbWFuOC9kbnNtYXNxLjguZ3oKKyVkb2MgJXtfbWFuZGlyfS8qL21hbjgvZG5zbWFzcS44Lmd6CisKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9TdXNlL3JjLmRuc21hc3Etc3VzZSBiL2NvbnRyaWIvU3VzZS9yYy5kbnNtYXNxLXN1c2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFmNGM3MgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvU3VzZS9yYy5kbnNtYXNxLXN1c2UKQEAgLTAsMCArMSw3OSBAQAorIyEgL2Jpbi9zaAorIworIyBpbml0LmQvZG5zbWFzcQorIworIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgZG5zbWFzcQorIyBSZXF1aXJlZC1TdGFydDogJG5ldHdvcmsgJHJlbW90ZV9mcyAkc3lzbG9nCisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAzIDUKKyMgRGVmYXVsdC1TdG9wOgorIyBEZXNjcmlwdGlvbjogICAgU3RhcnRzIGludGVybmV0IG5hbWUgc2VydmljZSBtYXNxIGNhY2hpbmcgc2VydmVyIChETlMpCisjIyMgRU5EIElOSVQgSU5GTworCitOQU1FRF9CSU49L3Vzci9zYmluL2Ruc21hc3EKK05BTUVEX1BJRD0vdmFyL3J1bi9kbnNtYXNxLnBpZAorTkFNRURfQ09ORj0vZXRjL2Ruc21hc3EuY29uZgorCitpZiBbICEgLXggJE5BTUVEX0JJTiBdIDsgdGhlbgorCWVjaG8gLW4gImRuc21hc3Egbm90IGluc3RhbGxlZCAhICIKKwlleGl0IDUKK2ZpCisKKy4gL2V0Yy9yYy5zdGF0dXMKK3JjX3Jlc2V0CisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorCWVjaG8gLW4gIlN0YXJ0aW5nIG5hbWUgc2VydmljZSBtYXNxIGNhY2hpbmcgc2VydmVyICIKKyAgICAgICAgY2hlY2twcm9jIC1wICROQU1FRF9QSUQgJE5BTUVEX0JJTgorICAgICAgICBpZiBbICQ/IC1lcSAwIF0gOyB0aGVuCisgICAgICAgICAgIGVjaG8gLW4gIi0gV2FybmluZzogZG5zbWFzcSBhbHJlYWR5IHJ1bm5pbmcgISAiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgWyAtZSAkTkFNRURfUElEIF0gJiYgZWNobyAtbiAiLSBXYXJuaW5nOiAkTkFNRURfUElEIGV4aXN0cyAhICIKKwlmaQorCXN0YXJ0cHJvYyAtcCAkTkFNRURfUElEICROQU1FRF9CSU4gLXUgbm9ib2R5CisJcmNfc3RhdHVzIC12CisJOzsKKyAgICBzdG9wKQorCWVjaG8gLW4gIlNodXR0aW5nIG5hbWUgc2VydmljZSBtYXNxIGNhY2hpbmcgc2VydmVyICIKKwljaGVja3Byb2MgLXAgJE5BTUVEX1BJRCAkTkFNRURfQklOCisJWyAkPyAtbmUgMCBdICYmIGVjaG8gLW4gIi0gV2FybmluZzogZG5zbWFzcSBub3QgcnVubmluZyAhICIKKwlraWxscHJvYyAtcCAkTkFNRURfUElEIC1URVJNICROQU1FRF9CSU4KKwlyY19zdGF0dXMgLXYKKwk7OworICAgIHRyeS1yZXN0YXJ0KQorCSQwIHN0b3AgICYmICAkMCBzdGFydAorCXJjX3N0YXR1cworCTs7CisgICAgcmVzdGFydCkKKwkkMCBzdG9wCisJJDAgc3RhcnQKKwlyY19zdGF0dXMKKwk7OworICAgIGZvcmNlLXJlbG9hZCkKKwkkMCByZWxvYWQKKwlyY19zdGF0dXMKKwk7OworICAgIHJlbG9hZCkKKwllY2hvIC1uICJSZWxvYWRpbmcgbmFtZSBzZXJ2aWNlIG1hc3EgY2FjaGluZyBzZXJ2ZXIgIgorCWNoZWNrcHJvYyAtcCAkTkFNRURfUElEICROQU1FRF9CSU4KKwlbICQ/IC1uZSAwIF0gJiYgZWNobyAtbiAiLSBXYXJuaW5nOiBkbnNtYXNxIG5vdCBydW5uaW5nICEgIgorCWtpbGxwcm9jIC1wICROQU1FRF9QSUQgLUhVUCAkTkFNRURfQklOCisJcmNfc3RhdHVzIC12CisJOzsKKyAgICBzdGF0dXMpCisJZWNobyAtbiAiQ2hlY2tpbmcgZm9yIG5hbWUgc2VydmljZSBtYXNxIGNhY2hpbmcgc2VydmVyICIKKwljaGVja3Byb2MgLXAgJE5BTUVEX1BJRCAkTkFNRURfQklOCisJcmNfc3RhdHVzIC12CisJOzsKKyAgICBwcm9iZSkKKwl0ZXN0ICROQU1FRF9DT05GIC1udCAkTkFNRURfUElEICYmIGVjaG8gcmVsb2FkCisJOzsKKyAgICAqKQorCWVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxzdGF0dXN8dHJ5LXJlc3RhcnR8cmVzdGFydHxmb3JjZS1yZWxvYWR8cmVsb2FkfHByb2JlfSIKKwlleGl0IDEKKwk7OworZXNhYworcmNfZXhpdAorCmRpZmYgLS1naXQgYS9jb250cmliL2Nvbm50cmFjay9SRUFETUUgYi9jb250cmliL2Nvbm50cmFjay9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBkMTdhYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY29ubnRyYWNrL1JFQURNRQpAQCAtMCwwICsxLDU0IEBACitMaW51eCBpcHRhYmxlcyBpbmNsdWRlcyB0aGF0IGFiaWxpdHkgdG8gbWFyayBpbmRpdmlkdWFsIG5ldHdvcmsgcGFja2V0cword2l0aCBhICJmaXJld2FsbCBtYXJrIi4gIEFkZGl0aW9uYWxseSB0aGVyZSBpcyBhIGNvbXBvbmVudCBjYWxsZWQKKyJjb25udHJhY2siIHdoaWNoIHRyaWVzIHRvIHN0cmluZyBzZXF1ZW5jZXMgb2YgcmVsYXRlZCBwYWNrZXRzIHRvZ2V0aGVyCitpbnRvIGEgImNvbm5lY3Rpb24iIChpdCBldmVuIHJlbGF0ZXMgc2VxdWVuY2VzIG9mIFVEUCBhbmQgSUNNUCBwYWNrZXRzKS4KKyBUaGVyZSBpcyBhIHJlbGF0ZWQgbWFyayBmb3IgYSBjb25uZWN0aW9uIGNhbGxlZCBhICJjb25uZWN0aW9uIG1hcmsiLgorTWFya3MgY2FuIGJlIGNvcGllZCBmcmVlbHkgYmV0d2VlbiB0aGUgZmlyZXdhbGwgYW5kIGNvbm5lY3Rpb24gbWFya3MKKworVXNpbmcgdGhlc2UgdHdvIGZlYXR1cmVzIGl0IGJlY29tZSBwb3NzaWJsZSB0byB0YWcgYWxsIHJlbGF0ZWQgdHJhZmZpYworaW4gYXJiaXRyYXJ5IHdheXMsIGVnIGF1dGhlbnRpY2F0ZWQgdXNlcnMsIHRyYWZmaWMgZnJvbSBhIHBhcnRpY3VsYXIgSVAsCitwb3J0LCBldGMuIFVuZm9ydHVuYXRlbHkgYW55IGtpbmQgb2YgInByb3h5IiBicmVha3MgdGhpcyByZWxhdGlvbnNoaXAKK2JlY2F1c2UgbmV0d29yayBwYWNrZXRzIGdvIGluIG9uZSBzaWRlIG9mIHRoZSBwcm94eSBhbmQgYSBjb21wbGV0ZWx5IG5ldworY29ubmVjdGlvbiBjb21lcyBvdXQgb2YgdGhlIG90aGVyIHNpZGUuICBIb3dldmVyLCBzb21ldGltZXMsIHdlIHdhbnQgdG8KK21haW50YWluIHRoYXQgcmVsYXRpb25zaGlwIHRocm91Z2ggdGhlIHByb3h5IGFuZCBjb250aW51ZSB0aGUgY29ubmVjdGlvbgorbWFyayBvbiBwYWNrZXRzIHVwc3RyZWFtIG9mIG91ciBwcm94eQorCitETlNNYXNxIGluY2x1ZGVzIHN1Y2ggYSBmZWF0dXJlIGVuYWJsZWQgYnkgdGhlIC0tY29ubnRyYWNrCitvcHRpb24uIFRoaXMgYWxsb3dzLCBmb3IgZXhhbXBsZSwgdXNpbmcgaXB0YWJsZXMgdG8gbWFyayB0cmFmZmljIGZyb20KK2EgcGFydGljdWxhciBJUCwgYW5kIHRoYXQgbWFyayB0byBiZSBwZXJzaXN0ZWQgdG8gcmVxdWVzdHMgbWFkZSAqYnkqCitETlNNYXNxLiBTdWNoIGEgZmVhdHVyZSBjb3VsZCBiZSB1c2VmdWwgZm9yIGJhbmR3aWR0aCBhY2NvdW50aW5nLAorY2FwdGl2ZSBwb3J0YWxzIGFuZCB0aGUgbGlrZS4gTm90ZSBhIHNpbWlsYXIgZmVhdHVyZSBoYXMgYmVlbiAKK2ltcGxlbWVudGVkIGluIFNxdWlkIDIuMgorCisKK0FzIGFuIGV4YW1wbGUgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBpcHRhYmxlcyBydWxlczoKKworCisxKSBpcHRhYmxlcyAtdCBtYW5nbGUgLUEgUFJFUk9VVElORyAtaiBDT05OTUFSSyAtLXJlc3RvcmUtbWFyaworMikgaXB0YWJsZXMgLXQgbWFuZ2xlIC1BIFBSRVJPVVRJTkcgLW0gbWFyayAtLW1hcmsgMCAtcyAxOTIuMTY4LjExMS4xMzcKKy1qIE1BUksgLS1zZXQtbWFyayAxMzcKKzMpIGlwdGFibGVzIC10IG1hbmdsZSAtQSBQUkVST1VUSU5HIC1qIENPTk5NQVJLIC0tc2F2ZS1tYXJrCisKKzQpIGlwdGFibGVzIC10IG1hbmdsZSAtQSBPVVRQVVQgLW0gbWFyayAhIC0tbWFyayAwIC1qIENPTk5NQVJLIC0tc2F2ZS1tYXJrCisKKzEtMykgYXJlIGFsbCBhcHBsaWVkIHRvIHRoZSBQUkVST1VUSU5HIHRhYmxlIGFuZCBhZmZlY3QgYWxsIHBhY2tldHMKK2VudGVyaW5nIHRoZSBmaXJld2FsbC4KKworMSkgY29waWVzIGFueSBleGlzdGluZyBjb25uZWN0aW9uIG1hcmsgaW50byB0aGUgZmlyZXdhbGwgbWFyay4gMikgQ2hlY2tzCit0aGUgcGFja2V0IG5vdCBhbHJlYWR5IG1hcmtlZCBhbmQgaWYgbm90IGFwcGxpZXMgYW4gYXJiaXRyYXJ5IG1hcmsgYmFzZWQKK29uIElQIGFkZHJlc3MuIDMpIFNhdmVzIHRoZSBmaXJld2FsbCBtYXJrIGJhY2sgdG8gdGhlIGNvbm5lY3Rpb24gbWFyaworKHdoaWNoIHdpbGwgcGVyc2lzdCBpdCBhY3Jvc3MgcmVsYXRlZCBwYWNrZXRzKQorCis0KSBpcyBhcHBsaWVkIHRvIHRoZSBPVVRQVVQgdGFibGUsIHdoaWNoIGlzIHdoZXJlIHdlIGZpcnN0IHNlZSBwYWNrZXRzCitnZW5lcmF0ZWQgbG9jYWxseS4gRE5TTWFzcSB3aWxsIGhhdmUgYWxyZWFkeSBjb3BpZWQgdGhlIGZpcmV3YWxsIG1hcmsKK2Zyb20gdGhlIHJlcXVlc3QsIGFjcm9zcyB0byB0aGUgbmV3IHBhY2tldCwgYW5kIHNvIGFsbCB0aGF0IHJlbWFpbnMgaXMKK2ZvciBpcHRhYmxlcyB0byBjb3B5IGl0IHRvIHRoZSBjb25uZWN0aW9uIG1hcmsgc28gaXQncyBwZXJzaXN0ZWQgYWNyb3NzCitwYWNrZXRzLgorCitOb3RlOiBpcHRhYmxlcyBjYW4gYmUgcXVpdGUgY29uZnVzaW5nIHRvIHRoZSBiZWdpbm5lci4gVGhlIGZvbGxvd2luZworZGlhZ3JhbSBpcyBleHRyZW1lbHkgaGVscGZ1bCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBmbG93cworCWh0dHA6Ly9saW51eC1pcC5uZXQvbmYvbmZrLXRyYXZlcnNhbC5wbmcKK0FkZGl0aW9uYWxseSB0aGUgZm9sbG93aW5nIFVSTCBjb250YWlucyBhIHVzZWZ1bCAic3RhcnRpbmcgZ3VpZGUiIG9uCitsaW51eCBjb25uZWN0aW9uIHRyYWNraW5nL21hcmtpbmcKKwlodHRwOi8vaG9tZS5yZWdpdC5vcmcvbmV0ZmlsdGVyLWVuL25ldGZpbHRlci1jb25ubWFyay8KKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9kYnVzLXRlc3QvZGJ1cy10ZXN0LnB5IGIvY29udHJpYi9kYnVzLXRlc3QvZGJ1cy10ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI1ZDg4ODEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2RidXMtdGVzdC9kYnVzLXRlc3QucHkKQEAgLTAsMCArMSw0MyBAQAorIyEvdXNyL2Jpbi9weXRob24KK2ltcG9ydCBkYnVzCisKK2J1cyA9IGRidXMuU3lzdGVtQnVzKCkKK3AgPSBidXMuZ2V0X29iamVjdCgidWsub3JnLnRoZWtlbGxleXMuZG5zbWFzcSIsICIvdWsvb3JnL3RoZWtlbGxleXMvZG5zbWFzcSIpCitsID0gZGJ1cy5JbnRlcmZhY2UocCwgZGJ1c19pbnRlcmZhY2U9InVrLm9yZy50aGVrZWxsZXlzLmRuc21hc3EiKQorCisjIFRoZSBuZXcgbW9yZSBmbGV4aWJsZSBTZXRTZXJ2ZXJzRXggbWV0aG9kCithcnJheSA9IGRidXMuQXJyYXkoKQorYXJyYXkuYXBwZW5kKFsiMS4yLjMuNSJdKQorYXJyYXkuYXBwZW5kKFsiMS4yLjMuNCM2NjQiLCAiZm9vYmFyLmNvbSJdKQorYXJyYXkuYXBwZW5kKFsiMTAwMzoxMjM0OmFiY2Q6OjElZXRoMCIsICJlbmcubXljb3JwLmNvbSIsICJsYWIubXljb3JwLmNvbSJdKQorcHJpbnQgbC5TZXRTZXJ2ZXJzRXgoYXJyYXkpCisKKyMgTXVzdCBjcmVhdGUgYSBuZXcgb2JqZWN0IGZvciBkbnNtYXNxIGFzIHRoZSBpbnRyb3NwZWN0aW9uIGdpdmVzIHRoZSB3cm9uZworIyBzaWduYXR1cmUgZm9yIFNldFNlcnZlcnMgKGF2KSB3aGlsZSB0aGUgY29kZSBvbmx5IGV4cGVjdHMgYSBidW5jaCBvZiBhcmd1bWVudHMKKyMgaW5zdGVhZCBvZiBhbiBhcnJheSBvZiB2YXJpYW50cworcCA9IGJ1cy5nZXRfb2JqZWN0KCJ1ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxIiwgIi91ay9vcmcvdGhla2VsbGV5cy9kbnNtYXNxIiwgaW50cm9zcGVjdD1GYWxzZSkKK2wgPSBkYnVzLkludGVyZmFjZShwLCBkYnVzX2ludGVyZmFjZT0idWsub3JnLnRoZWtlbGxleXMuZG5zbWFzcSIpCisKKyMgVGhlIHByZXZpb3VzIG1ldGhvZDsgYWxsIGFkZHJlc3NlcyBpbiBtYWNoaW5lIGJ5dGUgb3JkZXIKK3ByaW50IGwuU2V0U2VydmVycyhkYnVzLlVJbnQzMigxNjkwOTA2MCksICMgMS4yLjMuNQorICAgICAgICAgICAgICAgICAgIGRidXMuVUludDMyKDE2OTA5MDYxKSwgIyAxLjIuMy40CisgICAgICAgICAgICAgICAgICAgImZvb2Jhci5jb20iLAorICAgICAgICAgICAgICAgICAgIGRidXMuQnl0ZSgweDEwKSwgICAgICAgIyAxMDAzOjEyMzQ6YWJjZDo6MQorICAgICAgICAgICAgICAgICAgIGRidXMuQnl0ZSgweDAzKSwKKyAgICAgICAgICAgICAgICAgICBkYnVzLkJ5dGUoMHgxMiksCisgICAgICAgICAgICAgICAgICAgZGJ1cy5CeXRlKDB4MzQpLAorICAgICAgICAgICAgICAgICAgIGRidXMuQnl0ZSgweGFiKSwKKyAgICAgICAgICAgICAgICAgICBkYnVzLkJ5dGUoMHhjZCksCisgICAgICAgICAgICAgICAgICAgZGJ1cy5CeXRlKDB4MDApLAorICAgICAgICAgICAgICAgICAgIGRidXMuQnl0ZSgweDAwKSwKKyAgICAgICAgICAgICAgICAgICBkYnVzLkJ5dGUoMHgwMCksCisgICAgICAgICAgICAgICAgICAgZGJ1cy5CeXRlKDB4MDApLAorICAgICAgICAgICAgICAgICAgIGRidXMuQnl0ZSgweDAwKSwKKyAgICAgICAgICAgICAgICAgICBkYnVzLkJ5dGUoMHgwMCksCisgICAgICAgICAgICAgICAgICAgZGJ1cy5CeXRlKDB4MDApLAorICAgICAgICAgICAgICAgICAgIGRidXMuQnl0ZSgweDAwKSwKKyAgICAgICAgICAgICAgICAgICBkYnVzLkJ5dGUoMHgwMCksCisgICAgICAgICAgICAgICAgICAgZGJ1cy5CeXRlKDB4MDEpLAorICAgICAgICAgICAgICAgICAgICJlbmcubXljb3JwLmNvbSIsCisgICAgICAgICAgICAgICAgICAgImxhYi5teWNvcnAuY29tIikKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9kbnMtbG9jL1JFQURNRSBiL2NvbnRyaWIvZG5zLWxvYy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY0M2E4ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZG5zLWxvYy9SRUFETUUKQEAgLTAsMCArMSwxMiBAQAorSGkgU2ltb24KKworSGVyZSBpcyBhIHBhdGNoIGFnYWluc3QgZG5zbWFzcSAyLjM5IHdoaWNoIHByb3ZpZGVzIHN1cHBvcnQgZm9yIExPQyAgCitlbnRyaWVzIGluIG9yZGVyIHRvIGFzc2lnbiBsb2NhdGlvbiBpbmZvcm1hdGlvbiB0byBkbnMgcmVjb3JkcyAgCisocmZjMTg3NikuIEkgdGVzdGVkIGl0IG9uIE9TWCBhbmQgb24gT3BlbldSVC4KKworQ2hlZXJzCitMb3JlbnoKKworTW9yZSBpbmZvOgoraHR0cDovL3d3dy5ja2Roci5jb20vZG5zLWxvYy8KK2h0dHA6Ly93d3cuZmFxcy5vcmcvcmZjcy9yZmMxODc2Lmh0bWwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZG5zLWxvYy9kbnNtYXNxMi1sb2MtcmZjMTg3Ni5wYXRjaCBiL2NvbnRyaWIvZG5zLWxvYy9kbnNtYXNxMi1sb2MtcmZjMTg3Ni5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTUwMzIxCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9kbnMtbG9jL2Ruc21hc3EyLWxvYy1yZmMxODc2LnBhdGNoCkBAIC0wLDAgKzEsNTIyIEBACitkaWZmIC1OdXIgZG5zbWFzcS0yLjM5LW9yaWcvYmxkL01ha2VmaWxlIGRuc21hc3EtMi4zOS9ibGQvTWFrZWZpbGUKKy0tLSBkbnNtYXNxLTIuMzktb3JpZy9ibGQvTWFrZWZpbGUJMjAwNy0wMi0xNyAxNDozNzowNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBkbnNtYXNxLTIuMzkvYmxkL01ha2VmaWxlCTIwMDctMDUtMjAgMTg6MjM6NDQuMDAwMDAwMDAwICswMjAwCitAQCAtMiw3ICsyLDcgQEAKKyBQS0dfQ09ORklHID89IHBrZy1jb25maWcKKyAKKyAKKy1PQkpTID0gY2FjaGUubyByZmMxMDM1Lm8gdXRpbC5vIG9wdGlvbi5vIGZvcndhcmQubyBpc2MubyBuZXR3b3JrLm8gXAorK09CSlMgPSBjYWNoZS5vIHJmYzEwMzUubyByZmMxODc2Lm8gdXRpbC5vIG9wdGlvbi5vIGZvcndhcmQubyBpc2MubyBuZXR3b3JrLm8gXAorICAgICAgICBkbnNtYXNxLm8gZGhjcC5vIGxlYXNlLm8gcmZjMjEzMS5vIG5ldGxpbmsubyBkYnVzLm8gYnBmLm8gXAorICAgICAgICBoZWxwZXIubyB0ZnRwLm8gbG9nLm8KKyAKK2RpZmYgLU51ciBkbnNtYXNxLTIuMzktb3JpZy9zcmMvZG5zbWFzcS5oIGRuc21hc3EtMi4zOS9zcmMvZG5zbWFzcS5oCistLS0gZG5zbWFzcS0yLjM5LW9yaWcvc3JjL2Ruc21hc3EuaAkyMDA3LTA0LTIwIDEyOjUzOjM4LjAwMDAwMDAwMCArMDIwMAorKysrIGRuc21hc3EtMi4zOS9zcmMvZG5zbWFzcS5oCTIwMDctMDUtMjAgMTk6NTA6MzcuMDAwMDAwMDAwICswMjAwCitAQCAtMTYyLDYgKzE2MiwxMiBAQAorICAgc3RydWN0IGludGVyZmFjZV9uYW1lICpuZXh0OworIH07CisgCisrc3RydWN0IGxvY19yZWNvcmQgeworKyAgY2hhciAqbmFtZSwgbG9jWzE2XTsKKysgIHVuc2lnbmVkIHNob3J0IGNsYXNzOworKyAgc3RydWN0IGxvY19yZWNvcmQgKm5leHQ7CisrfTsKKysKKyB1bmlvbiBiaWduYW1lIHsKKyAgIGNoYXIgbmFtZVtNQVhETkFNRV07CisgICB1bmlvbiBiaWduYW1lICpuZXh0OyAvKiBmcmVlbGlzdCAqLworQEAgLTQ3Niw2ICs0ODIsNyBAQAorICAgc3RydWN0IG14X3Nydl9yZWNvcmQgKm14bmFtZXM7CisgICBzdHJ1Y3QgdHh0X3JlY29yZCAqdHh0OworICAgc3RydWN0IHB0cl9yZWNvcmQgKnB0cjsKKysJc3RydWN0IGxvY19yZWNvcmQgKmxvYzsKKyAgIHN0cnVjdCBpbnRlcmZhY2VfbmFtZSAqaW50X25hbWVzOworICAgY2hhciAqbXh0YXJnZXQ7CisgICBjaGFyICpsZWFzZV9maWxlOyAKK0BAIC03MjUsMyArNzMyLDYgQEAKKyB2b2lkIHRmdHBfcmVxdWVzdChzdHJ1Y3QgbGlzdGVuZXIgKmxpc3Rlbiwgc3RydWN0IGRhZW1vbiAqZGFlbW9uLCB0aW1lX3Qgbm93KTsKKyB2b2lkIGNoZWNrX3RmdHBfbGlzdGVuZXJzKHN0cnVjdCBkYWVtb24gKmRhZW1vbiwgZmRfc2V0ICpyc2V0LCB0aW1lX3Qgbm93KTsKKyAjZW5kaWYKKysKKysvKiByZmMxODc2ICovCisrdV9pbnQzMl90IGxvY19hdG9uKGNvbnN0IGNoYXIgKmFzY2lpLCB1X2NoYXIgKmJpbmFyeSk7CitkaWZmIC1OdXIgZG5zbWFzcS0yLjM5LW9yaWcvc3JjL29wdGlvbi5jIGRuc21hc3EtMi4zOS9zcmMvb3B0aW9uLmMKKy0tLSBkbnNtYXNxLTIuMzktb3JpZy9zcmMvb3B0aW9uLmMJMjAwNy0wNC0xOSAyMzozNDo0OS4wMDAwMDAwMDAgKzAyMDAKKysrKyBkbnNtYXNxLTIuMzkvc3JjL29wdGlvbi5jCTIwMDctMDUtMjAgMjA6MTU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtNDMsNiArNDMsNyBAQAorICNkZWZpbmUgTE9QVF9SRU1PVEUgICAgMjY5CisgI2RlZmluZSBMT1BUX1NVQlNDUiAgICAyNzAKKyAjZGVmaW5lIExPUFRfSU5UTkFNRSAgIDI3MQorKyNkZWZpbmUgTE9QVF9MT0MgICAgICAgMjcyCisgCisgI2lmZGVmIEhBVkVfR0VUT1BUX0xPTkcKKyBzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRzW10gPSAgCitAQCAtMTIyLDYgKzEyMyw3IEBACisgICAgIHsidGZ0cC1yb290IiwgMSwgMCwgTE9QVF9QUkVGSVggfSwKKyAgICAgeyJ0ZnRwLW1heCIsIDEsIDAsIExPUFRfVEZUUF9NQVggfSwKKyAgICAgeyJwdHItcmVjb3JkIiwgMSwgMCwgTE9QVF9QVFIgfSwKKysgICAgeyJsb2MtcmVjb3JkIiwgMSwgMCwgTE9QVF9MT0MgfSwKKyAjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0RyYWdvbkZseV9fKQorICAgICB7ImJyaWRnZS1pbnRlcmZhY2UiLCAxLCAwICwgTE9QVF9CUklER0UgfSwKKyAjZW5kaWYKK0BAIC0yMzUsNiArMjM3LDcgQEAKKyAgIHsgIi15LCAtLWxvY2FsaXNlLXF1ZXJpZXMiLCBnZXR0ZXh0X25vb3AoIkFuc3dlciBETlMgcXVlcmllcyBiYXNlZCBvbiB0aGUgaW50ZXJmYWNlIGEgcXVlcnkgd2FzIHNlbnQgdG8uIiksIE5VTEwgfSwKKyAgIHsgIi1ZICAtLXR4dC1yZWNvcmQ9bmFtZSx0eHQuLi4uIiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IFRYVCBETlMgcmVjb3JkLiIpLCBOVUxMIH0sCisgICB7ICIgICAgLS1wdHItcmVjb3JkPW5hbWUsdGFyZ2V0IiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IFBUUiBETlMgcmVjb3JkLiIpLCBOVUxMIH0sCisrICB7ICIgICAgLS1sb2MtcmVjb3JkPW5hbWUsbGF0IGxvbiBhbHQiLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgTE9DIEROUyByZWNvcmQuIiksIE5VTEwgfSwKKyAgIHsgIiAgICAtLWludGVyZmFjZS1uYW1lPW5hbWUsaW50ZXJmYWNlIiwgZ2V0dGV4dF9ub29wKCJHaXZlIEROUyBuYW1lIHRvIElQdjQgYWRkcmVzcyBvZiBpbnRlcmZhY2UuIiksIE5VTEwgfSwKKyAgIHsgIi16LCAtLWJpbmQtaW50ZXJmYWNlcyIsIGdldHRleHRfbm9vcCgiQmluZCBvbmx5IHRvIGludGVyZmFjZXMgaW4gdXNlLiIpLCBOVUxMIH0sCisgICB7ICItWiwgLS1yZWFkLWV0aGVycyIsIGdldHRleHRfbm9vcCgiUmVhZCBESENQIHN0YXRpYyBob3N0IGluZm9ybWF0aW9uIGZyb20gJXMuIiksIEVUSEVSU0ZJTEUgfSwKK0BAIC0xODM1LDYgKzE4MzgsMzcgQEAKKyAJbmV3LT5pbnRyID0gc2FmZV9zdHJpbmdfYWxsb2MoY29tbWEpOworIAlicmVhazsKKyAgICAgICB9CisrICAgICAgCisrICAgIGNhc2UgTE9QVF9MT0M6CisrICAgICAgeworKwlzdHJ1Y3QgbG9jX3JlY29yZCAqbmV3OworKwl1bnNpZ25lZCBjaGFyICpwLCAqcTsKKysJCisrCWNvbW1hID0gc3BsaXQoYXJnKTsKKysJCisrCWlmICghY2Fub25pY2FsaXNlX29wdChhcmcpKQorKwkgIHsKKysJICAgIG9wdGlvbiA9ICc/JzsKKysJICAgIHByb2JsZW0gPSBfKCJiYWQgTE9DIHJlY29yZCIpOworKwkgICAgYnJlYWs7CisrCSAgfQorKwkKKysJbmV3ID0gc2FmZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBsb2NfcmVjb3JkKSk7CisrCW5ldy0+bmV4dCA9IGRhZW1vbi0+bG9jOworKwlkYWVtb24tPmxvYyA9IG5ldzsKKysJbmV3LT5jbGFzcyA9IENfSU47CisrCWlmICghY29tbWEgfHwgbG9jX2F0b24oY29tbWEsbmV3LT5sb2MpIT0xNikKKysJICB7CisrCSAgICBvcHRpb24gPSAnPyc7CisrCSAgICBwcm9ibGVtID0gXygiYmFkIExPQyByZWNvcmQiKTsKKysJICAgIGJyZWFrOworKwkgIH0KKysKKysJaWYgKGNvbW1hKQorKwkgICpjb21tYSA9IDA7CisrCW5ldy0+bmFtZSA9IHNhZmVfc3RyaW5nX2FsbG9jKGFyZyk7CisrCWJyZWFrOworKyAgICAgIH0KKyAKKyAgICAgY2FzZSBMT1BUX1BUUjogIC8qIC0tcHRyLXJlY29yZCAqLworICAgICAgIHsKK2RpZmYgLU51ciBkbnNtYXNxLTIuMzktb3JpZy9zcmMvcmZjMTAzNS5jIGRuc21hc3EtMi4zOS9zcmMvcmZjMTAzNS5jCistLS0gZG5zbWFzcS0yLjM5LW9yaWcvc3JjL3JmYzEwMzUuYwkyMDA3LTA0LTIwIDEyOjU0OjI2LjAwMDAwMDAwMCArMDIwMAorKysrIGRuc21hc3EtMi4zOS9zcmMvcmZjMTAzNS5jCTIwMDctMDUtMjAgMTg6MjI6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtMTExMiw2ICsxMTEyLDI3IEBACisgCSAgICB9CisgCX0KKyAKKysgICAgICBpZiAocXR5cGUgPT0gVF9MT0MgfHwgcXR5cGUgPT0gVF9BTlkpCisrCXsKKysJICBzdHJ1Y3QgbG9jX3JlY29yZCAqdDsKKysJICBmb3IodCA9IGRhZW1vbi0+bG9jOyB0IDsgdCA9IHQtPm5leHQpCisrCSAgICB7CisrCSAgICAgIGlmICh0LT5jbGFzcyA9PSBxY2xhc3MgJiYgaG9zdG5hbWVfaXNlcXVhbChuYW1lLCB0LT5uYW1lKSkKKysJCXsKKysJCSAgYW5zID0gMTsKKysJCSAgaWYgKCFkcnlydW4pCisrCQkgICAgeworKwkJICAgICAgbG9nX3F1ZXJ5KEZfQ05BTUUgfCBGX0ZPUldBUkQgfCBGX0NPTkZJRyB8IEZfTlhET01BSU4sIG5hbWUsIE5VTEwsIDAsIE5VTEwsIDApOworKwkJICAgICAgaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBuYW1lb2Zmc2V0LCAmYW5zcCwgCisrCQkJCQkgICAgICBkYWVtb24tPmxvY2FsX3R0bCwgTlVMTCwKKysJCQkJCSAgICAgIFRfTE9DLCB0LT5jbGFzcywgInQiLCAxNiwgdC0+bG9jKSkKKysJCQlhbnNjb3VudCsrOworKworKwkJICAgIH0KKysJCX0KKysJICAgIH0KKysJfQorKworICAgICAgIGlmIChxY2xhc3MgPT0gQ19JTikKKyAJeworIAkgIGlmIChxdHlwZSA9PSBUX1BUUiB8fCBxdHlwZSA9PSBUX0FOWSkKK2RpZmYgLU51ciBkbnNtYXNxLTIuMzktb3JpZy9zcmMvcmZjMTg3Ni5jIGRuc21hc3EtMi4zOS9zcmMvcmZjMTg3Ni5jCistLS0gZG5zbWFzcS0yLjM5LW9yaWcvc3JjL3JmYzE4NzYuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGRuc21hc3EtMi4zOS9zcmMvcmZjMTg3Ni5jCTIwMDctMDUtMjAgMTk6NTA6MTAuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDM3OSBAQAorKy8qCisrICogcm91dGluZXMgdG8gY29udmVydCBiZXR3ZWVuIG9uLXRoZS13aXJlIFJSIGZvcm1hdCBhbmQgem9uZSBmaWxlCisrICogZm9ybWF0LiAgRG9lcyBub3QgY29udGFpbiBjb252ZXJzaW9uIHRvL2Zyb20gZGVjaW1hbCBkZWdyZWVzOworKyAqIGRpdmlkZSBvciBtdWx0aXBseSBieSA2MCo2MCoxMDAwIGZvciB0aGF0LgorKyAqLworKworKyNpbmNsdWRlICJkbnNtYXNxLmgiCisrCisrc3RhdGljIHVuc2lnbmVkIGludCBwb3dlcm9mdGVuWzEwXSA9IHsxLCAxMCwgMTAwLCAxMDAwLCAxMDAwMCwgMTAwMDAwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAsMTAwMDAwMDAsMTAwMDAwMDAwLDEwMDAwMDAwMDB9OworKworKy8qIHRha2VzIGFuIFhlWSBwcmVjaXNpb24vc2l6ZSB2YWx1ZSwgcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbi4qLworK3N0YXRpYyBjb25zdCBjaGFyICoKKytwcmVjc2l6ZV9udG9hKHVfaW50OF90IHByZWMpCisreworKyAgICAgICAgc3RhdGljIGNoYXIgcmV0YnVmW3NpemVvZigiOTAwMDAwMDAuMDAiKV07CisrICAgICAgICB1bnNpZ25lZCBsb25nIHZhbDsKKysgICAgICAgIGludCBtYW50aXNzYSwgZXhwb25lbnQ7CisrCisrICAgICAgICBtYW50aXNzYSA9IChpbnQpKChwcmVjID4+IDQpICYgMHgwZikgJSAxMDsKKysgICAgICAgIGV4cG9uZW50ID0gKGludCkoKHByZWMgPj4gMCkgJiAweDBmKSAlIDEwOworKworKyAgICAgICAgdmFsID0gbWFudGlzc2EgKiBwb3dlcm9mdGVuW2V4cG9uZW50XTsKKysKKysgICAgICAgICh2b2lkKSBzcHJpbnRmKHJldGJ1ZiwiJWQuJS4yZCIsIHZhbC8xMDAsIHZhbCUxMDApOworKyAgICAgICAgcmV0dXJuIChyZXRidWYpOworK30KKysKKysvKiBjb252ZXJ0cyBhc2NpaSBzaXplL3ByZWNpc2lvbiBYICogMTAqKlkoY20pIHRvIDB4WFkuIG1vdmVzIHBvaW50ZXIuKi8KKytzdGF0aWMgdV9pbnQ4X3QKKytwcmVjc2l6ZV9hdG9uKGNoYXIgKipzdHJwdHIpCisreworKyAgICAgICAgdW5zaWduZWQgaW50IG12YWwgPSAwLCBjbXZhbCA9IDA7CisrICAgICAgICB1X2ludDhfdCByZXR2YWwgPSAwOworKyAgICAgICAgcmVnaXN0ZXIgY2hhciAqY3A7CisrICAgICAgICByZWdpc3RlciBpbnQgZXhwb25lbnQ7CisrICAgICAgICByZWdpc3RlciBpbnQgbWFudGlzc2E7CisrCisrICAgICAgICBjcCA9ICpzdHJwdHI7CisrCisrICAgICAgICB3aGlsZSAoaXNkaWdpdCgqY3ApKQorKyAgICAgICAgICAgICAgICBtdmFsID0gbXZhbCAqIDEwICsgKCpjcCsrIC0gJzAnKTsKKysKKysgICAgICAgIGlmICgqY3AgPT0gJy4nKSB7ICAgICAgICAgICAgICAgLyogY2VudGltZXRlcnMgKi8KKysgICAgICAgICAgICAgICAgY3ArKzsKKysgICAgICAgICAgICAgICAgaWYgKGlzZGlnaXQoKmNwKSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGNtdmFsID0gKCpjcCsrIC0gJzAnKSAqIDEwOworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc2RpZ2l0KCpjcCkpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtdmFsICs9ICgqY3ArKyAtICcwJyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBjbXZhbCA9IChtdmFsICogMTAwKSArIGNtdmFsOworKworKyAgICAgICAgZm9yIChleHBvbmVudCA9IDA7IGV4cG9uZW50IDwgOTsgZXhwb25lbnQrKykKKysgICAgICAgICAgICAgICAgaWYgKGNtdmFsIDwgcG93ZXJvZnRlbltleHBvbmVudCsxXSkKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIG1hbnRpc3NhID0gY212YWwgLyBwb3dlcm9mdGVuW2V4cG9uZW50XTsKKysgICAgICAgIGlmIChtYW50aXNzYSA+IDkpCisrICAgICAgICAgICAgICAgIG1hbnRpc3NhID0gOTsKKysKKysgICAgICAgIHJldHZhbCA9IChtYW50aXNzYSA8PCA0KSB8IGV4cG9uZW50OworKworKyAgICAgICAgKnN0cnB0ciA9IGNwOworKworKyAgICAgICAgcmV0dXJuIChyZXR2YWwpOworK30KKysKKysvKiBjb252ZXJ0cyBhc2NpaSBsYXQvbG9uIHRvIHVuc2lnbmVkIGVuY29kZWQgMzItYml0IG51bWJlci4KKysgKiAgbW92ZXMgcG9pbnRlci4gKi8KKytzdGF0aWMgdV9pbnQzMl90CisrbGF0bG9uMnVsKGNoYXIgKipsYXRsb25zdHJwdHIsaW50ICp3aGljaCkKKyt7CisrICAgICAgICByZWdpc3RlciBjaGFyICpjcDsKKysgICAgICAgIHVfaW50MzJfdCByZXR2YWw7CisrICAgICAgICBpbnQgZGVnID0gMCwgbWluID0gMCwgc2VjcyA9IDAsIHNlY3NmcmFjID0gMDsKKysKKysgICAgICAgIGNwID0gKmxhdGxvbnN0cnB0cjsKKysKKysgICAgICAgIHdoaWxlIChpc2RpZ2l0KCpjcCkpCisrICAgICAgICAgICAgICAgIGRlZyA9IGRlZyAqIDEwICsgKCpjcCsrIC0gJzAnKTsKKysKKysgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcCkpCisrICAgICAgICAgICAgICAgIGNwKys7CisrCisrICAgICAgICBpZiAoIShpc2RpZ2l0KCpjcCkpKQorKyAgICAgICAgICAgICAgICBnb3RvIGZuZGhlbWk7CisrCisrICAgICAgICB3aGlsZSAoaXNkaWdpdCgqY3ApKQorKyAgICAgICAgICAgICAgICBtaW4gPSBtaW4gKiAxMCArICgqY3ArKyAtICcwJyk7CisrICAgICAgICB3aGlsZSAoaXNzcGFjZSgqY3ApKQorKyAgICAgICAgICAgICAgICBjcCsrOworKworKyAgICAgICAgaWYgKCEoaXNkaWdpdCgqY3ApKSkKKysgICAgICAgICAgICAgICAgZ290byBmbmRoZW1pOworKworKyAgICAgICAgd2hpbGUgKGlzZGlnaXQoKmNwKSkKKysgICAgICAgICAgICAgICAgc2VjcyA9IHNlY3MgKiAxMCArICgqY3ArKyAtICcwJyk7CisrCisrICAgICAgICBpZiAoKmNwID09ICcuJykgeyAgICAgICAgICAgICAgIC8qIGRlY2ltYWwgc2Vjb25kcyAqLworKyAgICAgICAgICAgICAgICBjcCsrOworKyAgICAgICAgICAgICAgICBpZiAoaXNkaWdpdCgqY3ApKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc2ZyYWMgPSAoKmNwKysgLSAnMCcpICogMTAwOworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc2RpZ2l0KCpjcCkpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NmcmFjICs9ICgqY3ArKyAtICcwJykgKiAxMDsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc2RpZ2l0KCpjcCkpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc2ZyYWMgKz0gKCpjcCsrIC0gJzAnKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysKKysgICAgICAgIHdoaWxlICghaXNzcGFjZSgqY3ApKSAgIC8qIGlmIGFueSB0cmFpbGluZyBnYXJiYWdlICovCisrICAgICAgICAgICAgICAgIGNwKys7CisrCisrICAgICAgICB3aGlsZSAoaXNzcGFjZSgqY3ApKQorKyAgICAgICAgICAgICAgICBjcCsrOworKworKyBmbmRoZW1pOgorKyAgICAgICAgc3dpdGNoICgqY3ApIHsKKysgICAgICAgIGNhc2UgJ04nOiBjYXNlICduJzoKKysgICAgICAgIGNhc2UgJ0UnOiBjYXNlICdlJzoKKysgICAgICAgICAgICAgICAgcmV0dmFsID0gKCh1bnNpZ25lZCkxPDwzMSkKKysgICAgICAgICAgICAgICAgICAgICAgICArICgoKCgoZGVnICogNjApICsgbWluKSAqIDYwKSArIHNlY3MpICogMTAwMCkKKysgICAgICAgICAgICAgICAgICAgICAgICArIHNlY3NmcmFjOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgJ1MnOiBjYXNlICdzJzoKKysgICAgICAgIGNhc2UgJ1cnOiBjYXNlICd3JzoKKysgICAgICAgICAgICAgICAgcmV0dmFsID0gKCh1bnNpZ25lZCkxPDwzMSkKKysgICAgICAgICAgICAgICAgICAgICAgICAtICgoKCgoZGVnICogNjApICsgbWluKSAqIDYwKSArIHNlY3MpICogMTAwMCkKKysgICAgICAgICAgICAgICAgICAgICAgICAtIHNlY3NmcmFjOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIHJldHZhbCA9IDA7ICAgICAvKiBpbnZhbGlkIHZhbHVlIC0tIGluZGljYXRlcyBlcnJvciAqLworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysKKysgICAgICAgIHN3aXRjaCAoKmNwKSB7CisrICAgICAgICBjYXNlICdOJzogY2FzZSAnbic6CisrICAgICAgICBjYXNlICdTJzogY2FzZSAncyc6CisrICAgICAgICAgICAgICAgICp3aGljaCA9IDE7ICAgICAvKiBsYXRpdHVkZSAqLworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgJ0UnOiBjYXNlICdlJzoKKysgICAgICAgIGNhc2UgJ1cnOiBjYXNlICd3JzoKKysgICAgICAgICAgICAgICAgKndoaWNoID0gMjsgICAgIC8qIGxvbmdpdHVkZSAqLworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICp3aGljaCA9IDA7ICAgICAvKiBlcnJvciAqLworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysKKysgICAgICAgIGNwKys7ICAgICAgICAgICAgICAgICAgIC8qIHNraXAgdGhlIGhlbWlzcGhlcmUgKi8KKysKKysgICAgICAgIHdoaWxlICghaXNzcGFjZSgqY3ApKSAgIC8qIGlmIGFueSB0cmFpbGluZyBnYXJiYWdlICovCisrICAgICAgICAgICAgICAgIGNwKys7CisrCisrICAgICAgICB3aGlsZSAoaXNzcGFjZSgqY3ApKSAgICAvKiBtb3ZlIHRvIG5leHQgZmllbGQgKi8KKysgICAgICAgICAgICAgICAgY3ArKzsKKysKKysgICAgICAgICpsYXRsb25zdHJwdHIgPSBjcDsKKysKKysgICAgICAgIHJldHVybiAocmV0dmFsKTsKKyt9CisrCisrLyogY29udmVydHMgYSB6b25lIGZpbGUgcmVwcmVzZW50YXRpb24gaW4gYSBzdHJpbmcgdG8gYW4gUkRBVEEKKysgKiBvbi10aGUtd2lyZSByZXByZXNlbnRhdGlvbi4gKi8KKyt1X2ludDMyX3QKKytsb2NfYXRvbihjb25zdCBjaGFyICphc2NpaSwgdV9jaGFyICpiaW5hcnkpCisreworKyAgICAgICAgY29uc3QgY2hhciAqY3AsICptYXhjcDsKKysgICAgICAgIHVfY2hhciAqYmNwOworKworKyAgICAgICAgdV9pbnQzMl90IGxhdGl0ID0gMCwgbG9uZ2l0ID0gMCwgYWx0ID0gMDsKKysgICAgICAgIHVfaW50MzJfdCBsbHRlbXAxID0gMCwgbGx0ZW1wMiA9IDA7CisrICAgICAgICBpbnQgYWx0bWV0ZXJzID0gMCwgYWx0ZnJhYyA9IDAsIGFsdHNpZ24gPSAxOworKyAgICAgICAgdV9pbnQ4X3QgaHAgPSAweDE2OyAgICAvKiBkZWZhdWx0ID0gMWU2IGNtID0gMTAwMDAuMDBtID0gMTBrbSAqLworKyAgICAgICAgdV9pbnQ4X3QgdnAgPSAweDEzOyAgICAvKiBkZWZhdWx0ID0gMWUzIGNtID0gMTAuMDBtICovCisrICAgICAgICB1X2ludDhfdCBzaXogPSAweDEyOyAgIC8qIGRlZmF1bHQgPSAxZTIgY20gPSAxLjAwbSAqLworKyAgICAgICAgaW50IHdoaWNoMSA9IDAsIHdoaWNoMiA9IDA7CisrCisrICAgICAgICBjcCA9IGFzY2lpOworKyAgICAgICAgbWF4Y3AgPSBjcCArIHN0cmxlbihhc2NpaSk7CisrCisrICAgICAgICBsbHRlbXAxID0gbGF0bG9uMnVsKCZjcCwgJndoaWNoMSk7CisrICAgICAgICBsbHRlbXAyID0gbGF0bG9uMnVsKCZjcCwgJndoaWNoMik7CisrCisrICAgICAgICBzd2l0Y2ggKHdoaWNoMSArIHdoaWNoMikgeworKyAgICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgLyogMSArIDIsIHRoZSBvbmx5IHZhbGlkIGNvbWJpbmF0aW9uICovCisrICAgICAgICAgICAgICAgIGlmICgod2hpY2gxID09IDEpICYmICh3aGljaDIgPT0gMikpIHsgLyogbm9ybWFsIGNhc2UgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICBsYXRpdCA9IGxsdGVtcDE7CisrICAgICAgICAgICAgICAgICAgICAgICAgbG9uZ2l0ID0gbGx0ZW1wMjsKKysgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgod2hpY2gxID09IDIpICYmICh3aGljaDIgPT0gMSkpIHsvKnJldmVyc2VkKi8KKysgICAgICAgICAgICAgICAgICAgICAgICBsb25naXQgPSBsbHRlbXAxOworKyAgICAgICAgICAgICAgICAgICAgICAgIGxhdGl0ID0gbGx0ZW1wMjsKKysgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgIC8qIHNvbWUga2luZCBvZiBicm9rZW5uZXNzICovCisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAvKiB3ZSBkaWRuJ3QgZ2V0IG9uZSBvZiBlYWNoICovCisrICAgICAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgfQorKworKyAgICAgICAgLyogYWx0aXR1ZGUgKi8KKysgICAgICAgIGlmICgqY3AgPT0gJy0nKSB7CisrICAgICAgICAgICAgICAgIGFsdHNpZ24gPSAtMTsKKysgICAgICAgICAgICAgICAgY3ArKzsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmICgqY3AgPT0gJysnKQorKyAgICAgICAgICAgICAgICBjcCsrOworKworKyAgICAgICAgd2hpbGUgKGlzZGlnaXQoKmNwKSkKKysgICAgICAgICAgICAgICAgYWx0bWV0ZXJzID0gYWx0bWV0ZXJzICogMTAgKyAoKmNwKysgLSAnMCcpOworKworKyAgICAgICAgaWYgKCpjcCA9PSAnLicpIHsgICAgICAgICAgICAgICAvKiBkZWNpbWFsIG1ldGVycyAqLworKyAgICAgICAgICAgICAgICBjcCsrOworKyAgICAgICAgICAgICAgICBpZiAoaXNkaWdpdCgqY3ApKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgYWx0ZnJhYyA9ICgqY3ArKyAtICcwJykgKiAxMDsKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNkaWdpdCgqY3ApKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHRmcmFjICs9ICgqY3ArKyAtICcwJyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICBhbHQgPSAoMTAwMDAwMDAgKyAoYWx0c2lnbiAqIChhbHRtZXRlcnMgKiAxMDAgKyBhbHRmcmFjKSkpOworKworKyAgICAgICAgd2hpbGUgKCFpc3NwYWNlKCpjcCkgJiYgKGNwIDwgbWF4Y3ApKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZiB0cmFpbGluZyBnYXJiYWdlIG9yIG0gKi8KKysgICAgICAgICAgICAgICAgY3ArKzsKKysKKysgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcCkgJiYgKGNwIDwgbWF4Y3ApKQorKyAgICAgICAgICAgICAgICBjcCsrOworKyAgICAgICAgaWYgKGNwID49IG1heGNwKQorKyAgICAgICAgICAgICAgICBnb3RvIGRlZmF1bHRzOworKworKyAgICAgICAgc2l6ID0gcHJlY3NpemVfYXRvbigmY3ApOworKworKyAgICAgICAgd2hpbGUgKCFpc3NwYWNlKCpjcCkgJiYgKGNwIDwgbWF4Y3ApKS8qaWYgdHJhaWxpbmcgZ2FyYmFnZSBvciBtKi8KKysgICAgICAgICAgICAgICAgY3ArKzsKKysKKysgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcCkgJiYgKGNwIDwgbWF4Y3ApKQorKyAgICAgICAgICAgICAgICBjcCsrOworKworKyAgICAgICAgaWYgKGNwID49IG1heGNwKQorKyAgICAgICAgICAgICAgICBnb3RvIGRlZmF1bHRzOworKworKyAgICAgICAgaHAgPSBwcmVjc2l6ZV9hdG9uKCZjcCk7CisrCisrICAgICAgICB3aGlsZSAoIWlzc3BhY2UoKmNwKSAmJiAoY3AgPCBtYXhjcCkpLyppZiB0cmFpbGluZyBnYXJiYWdlIG9yIG0qLworKyAgICAgICAgICAgICAgICBjcCsrOworKworKyAgICAgICAgd2hpbGUgKGlzc3BhY2UoKmNwKSAmJiAoY3AgPCBtYXhjcCkpCisrICAgICAgICAgICAgICAgIGNwKys7CisrCisrICAgICAgICBpZiAoY3AgPj0gbWF4Y3ApCisrICAgICAgICAgICAgICAgIGdvdG8gZGVmYXVsdHM7CisrCisrICAgICAgICB2cCA9IHByZWNzaXplX2F0b24oJmNwKTsKKysKKysgZGVmYXVsdHM6CisrCisrICAgICAgICBiY3AgPSBiaW5hcnk7CisrICAgICAgICAqYmNwKysgPSAodV9pbnQ4X3QpIDA7ICAvKiB2ZXJzaW9uIGJ5dGUgKi8KKysgICAgICAgICpiY3ArKyA9IHNpejsKKysgICAgICAgICpiY3ArKyA9IGhwOworKyAgICAgICAgKmJjcCsrID0gdnA7CisrICAgICAgICBQVVRMT05HKGxhdGl0LGJjcCk7CisrICAgICAgICBQVVRMT05HKGxvbmdpdCxiY3ApOworKyAgICAgICAgUFVUTE9ORyhhbHQsYmNwKTsKKysKKysgICAgICAgIHJldHVybiAoMTYpOyAgICAgICAgICAgIC8qIHNpemUgb2YgUlIgaW4gb2N0ZXRzICovCisrfQorKworKy8qIHRha2VzIGFuIG9uLXRoZS13aXJlIExPQyBSUiBhbmQgcHJpbnRzIGl0IGluIHpvbmUgZmlsZQorKyAqIChodW1hbiByZWFkYWJsZSkgZm9ybWF0LiAqLworK2NoYXIgKgorK2xvY19udG9hKGNvbnN0IHVfY2hhciAqYmluYXJ5LGNoYXIgKmFzY2lpKQorK3sKKysgICAgICAgIHN0YXRpYyBjaGFyIHRtcGJ1ZlsyNTUqM107CisrCisrICAgICAgICByZWdpc3RlciBjaGFyICpjcDsKKysgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqcmNwOworKworKyAgICAgICAgaW50IGxhdGRlZywgbGF0bWluLCBsYXRzZWMsIGxhdHNlY2ZyYWM7CisrICAgICAgICBpbnQgbG9uZ2RlZywgbG9uZ21pbiwgbG9uZ3NlYywgbG9uZ3NlY2ZyYWM7CisrICAgICAgICBjaGFyIG5vcnRoc291dGgsIGVhc3R3ZXN0OworKyAgICAgICAgaW50IGFsdG1ldGVycywgYWx0ZnJhYywgYWx0c2lnbjsKKysKKysgICAgICAgIGNvbnN0IGludCByZWZlcmVuY2VhbHQgPSAxMDAwMDAgKiAxMDA7CisrCisrICAgICAgICBpbnQzMl90IGxhdHZhbCwgbG9uZ3ZhbCwgYWx0dmFsOworKyAgICAgICAgdV9pbnQzMl90IHRlbXBsOworKyAgICAgICAgdV9pbnQ4X3Qgc2l6ZXZhbCwgaHB2YWwsIHZwdmFsLCB2ZXJzaW9udmFsOworKworKyAgICAgICAgY2hhciAqc2l6ZXN0ciwgKmhwc3RyLCAqdnBzdHI7CisrCisrICAgICAgICByY3AgPSBiaW5hcnk7CisrICAgICAgICBpZiAoYXNjaWkpCisrICAgICAgICAgICAgICAgIGNwID0gYXNjaWk7CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICAgICAgY3AgPSB0bXBidWY7CisrICAgICAgICB9CisrCisrICAgICAgICB2ZXJzaW9udmFsID0gKnJjcCsrOworKworKyAgICAgICAgaWYgKHZlcnNpb252YWwpIHsKKysgICAgICAgICAgICAgICAgc3ByaW50ZihjcCwiOyBlcnJvcjogdW5rbm93biBMT0MgUlIgdmVyc2lvbiIpOworKyAgICAgICAgICAgICAgICByZXR1cm4gKGNwKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHNpemV2YWwgPSAqcmNwKys7CisrCisrICAgICAgICBocHZhbCA9ICpyY3ArKzsKKysgICAgICAgIHZwdmFsID0gKnJjcCsrOworKworKyAgICAgICAgR0VUTE9ORyh0ZW1wbCxyY3ApOworKyAgICAgICAgbGF0dmFsID0gKHRlbXBsIC0gKCh1bnNpZ25lZCkxPDwzMSkpOworKworKyAgICAgICAgR0VUTE9ORyh0ZW1wbCxyY3ApOworKyAgICAgICAgbG9uZ3ZhbCA9ICh0ZW1wbCAtICgodW5zaWduZWQpMTw8MzEpKTsKKysKKysgICAgICAgIEdFVExPTkcodGVtcGwscmNwKTsKKysgICAgICAgIGlmICh0ZW1wbCA8IHJlZmVyZW5jZWFsdCkgeyAvKiBiZWxvdyBXR1MgODQgc3BoZXJvaWQgKi8KKysgICAgICAgICAgICAgICAgYWx0dmFsID0gcmVmZXJlbmNlYWx0IC0gdGVtcGw7CisrICAgICAgICAgICAgICAgIGFsdHNpZ24gPSAtMTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgICAgIGFsdHZhbCA9IHRlbXBsIC0gcmVmZXJlbmNlYWx0OworKyAgICAgICAgICAgICAgICBhbHRzaWduID0gMTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmIChsYXR2YWwgPCAwKSB7CisrICAgICAgICAgICAgICAgIG5vcnRoc291dGggPSAnUyc7CisrICAgICAgICAgICAgICAgIGxhdHZhbCA9IC1sYXR2YWw7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIG5vcnRoc291dGggPSAnTic7CisrCisrICAgICAgICBsYXRzZWNmcmFjID0gbGF0dmFsICUgMTAwMDsKKysgICAgICAgIGxhdHZhbCA9IGxhdHZhbCAvIDEwMDA7CisrICAgICAgICBsYXRzZWMgPSBsYXR2YWwgJSA2MDsKKysgICAgICAgIGxhdHZhbCA9IGxhdHZhbCAvIDYwOworKyAgICAgICAgbGF0bWluID0gbGF0dmFsICUgNjA7CisrICAgICAgICBsYXR2YWwgPSBsYXR2YWwgLyA2MDsKKysgICAgICAgIGxhdGRlZyA9IGxhdHZhbDsKKysKKysgICAgICAgIGlmIChsb25ndmFsIDwgMCkgeworKyAgICAgICAgICAgICAgICBlYXN0d2VzdCA9ICdXJzsKKysgICAgICAgICAgICAgICAgbG9uZ3ZhbCA9IC1sb25ndmFsOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICBlYXN0d2VzdCA9ICdFJzsKKysKKysgICAgICAgIGxvbmdzZWNmcmFjID0gbG9uZ3ZhbCAlIDEwMDA7CisrICAgICAgICBsb25ndmFsID0gbG9uZ3ZhbCAvIDEwMDA7CisrICAgICAgICBsb25nc2VjID0gbG9uZ3ZhbCAlIDYwOworKyAgICAgICAgbG9uZ3ZhbCA9IGxvbmd2YWwgLyA2MDsKKysgICAgICAgIGxvbmdtaW4gPSBsb25ndmFsICUgNjA7CisrICAgICAgICBsb25ndmFsID0gbG9uZ3ZhbCAvIDYwOworKyAgICAgICAgbG9uZ2RlZyA9IGxvbmd2YWw7CisrCisrICAgICAgICBhbHRmcmFjID0gYWx0dmFsICUgMTAwOworKyAgICAgICAgYWx0bWV0ZXJzID0gKGFsdHZhbCAvIDEwMCkgKiBhbHRzaWduOworKworKyAgICAgICAgc2l6ZXN0ciA9IHN0cmR1cChwcmVjc2l6ZV9udG9hKHNpemV2YWwpKTsKKysgICAgICAgIGhwc3RyID0gc3RyZHVwKHByZWNzaXplX250b2EoaHB2YWwpKTsKKysgICAgICAgIHZwc3RyID0gc3RyZHVwKHByZWNzaXplX250b2EodnB2YWwpKTsKKysKKysgICAgICAgIHNwcmludGYoY3AsCisrICAgICAgICAgICAgICAgICIlZCAlLjJkICUuMmQuJS4zZCAlYyAlZCAlLjJkICUuMmQuJS4zZCAlYyAlZC4lLjJkbSAlc20gJXNtICVzbSIsCisrICAgICAgICAgICAgICAgIGxhdGRlZywgbGF0bWluLCBsYXRzZWMsIGxhdHNlY2ZyYWMsIG5vcnRoc291dGgsCisrICAgICAgICAgICAgICAgIGxvbmdkZWcsIGxvbmdtaW4sIGxvbmdzZWMsIGxvbmdzZWNmcmFjLCBlYXN0d2VzdCwKKysgICAgICAgICAgICAgICAgYWx0bWV0ZXJzLCBhbHRmcmFjLCBzaXplc3RyLCBocHN0ciwgdnBzdHIpOworKyAgICAgICAgZnJlZShzaXplc3RyKTsKKysgICAgICAgIGZyZWUoaHBzdHIpOworKyAgICAgICAgZnJlZSh2cHN0cik7CisrCisrICAgICAgICByZXR1cm4gKGNwKTsKKyt9CmRpZmYgLS1naXQgYS9jb250cmliL2Ruc2xpc3QvZGhjcC5jc3MgYi9jb250cmliL2Ruc2xpc3QvZGhjcC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzljZWEzOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZG5zbGlzdC9kaGNwLmNzcwpAQCAtMCwwICsxLDU3IEBACitib2R5Cit7CisJZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7CisJY29sb3I6ICMwMDA7Cit9CisKK2gxCit7CisJZm9udC1zaXplOiBtZWRpdW07CisJZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gxIC51cGRhdGVkCit7CisJY29sb3I6ICM5OTk7Cit9CisKK3RhYmxlCit7CisJYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKKwlib3JkZXItYm90dG9tOiAycHggc29saWQgIzAwMDsKK30KKwordGgKK3sKKwliYWNrZ3JvdW5kOiAjREREOworCWJvcmRlci10b3A6IDJweCBzb2xpZCAjMDAwOworCXRleHQtYWxpZ246IGxlZnQ7CisJZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy8qIEFueSByb3cgKi8KKwordHIKK3sKKwlib3JkZXItdG9wOiAycHggc29saWQgIzAwMDsKK30KKworLyogQW55IHJvdyBidXQgdGhlIGZpcnN0IG9yIHNlY29uZCAob3ZlcnJpZGVzIGFib3ZlIHJ1bGUpICovCisKK3RyICsgdHIgKyB0cgoreworCWJvcmRlci10b3A6IDJweCBzb2xpZCAjOTk5OworfQorCit0ci5vZmZsaW5lIHRkLmhvc3RuYW1lCit7CisJY29sb3I6ICM5OTk7Cit9CisKKy5ob3N0bmFtZSAgIHsgd2lkdGg6IDEwZW07IH0KKy5pcF9hZGRyICAgIHsgd2lkdGg6IDEwZW07IGJhY2tncm91bmQ6ICNEREQ7IH0KKy5ldGhlcl9hZGRyIHsgd2lkdGg6IDE1ZW07IH0KKy5jbGllbnRfaWQgIHsgd2lkdGg6IDE1ZW07IGJhY2tncm91bmQ6ICNEREQ7IH0KKy5zdGF0dXMgICAgIHsgd2lkdGg6IDVlbTsgIH0KKy5zaW5jZSAgICAgIHsgd2lkdGg6IDEwZW07IGJhY2tncm91bmQ6ICNEREQ7IH0KKy5sZWFzZSAgICAgIHsgd2lkdGg6IDEwZW07IH0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvZG5zbGlzdC9kbnNsaXN0LnBsIGIvY29udHJpYi9kbnNsaXN0L2Ruc2xpc3QucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2NlMjcyMAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZG5zbGlzdC9kbnNsaXN0LnBsCkBAIC0wLDAgKzEsNjA4IEBACisjIS91c3IvYmluL3BlcmwKKworIyBkbnNsaXN0IC0gUmVhZCBzdGF0ZSBmaWxlIGZyb20gZG5zbWFzcSBhbmQgY3JlYXRlIGEgbmljZSB3ZWIgcGFnZSB0byBkaXNwbGF5CisjICAgICAgICAgICBhIGxpc3Qgb2YgREhDUCBjbGllbnRzLgorIyAKKyMgQ29weXJpZ2h0IChDKSAyMDA0ICBUaG9tYXMgVHV0dGxlCisjIAorIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRJQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbSo7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIyAKKyMgKiBUaGUgbGljZW5zZSBpcyBpbiBmYWN0IGluY2x1ZGVkIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLCBhbmQgY2FuCisjICAgZWl0aGVyIGJlIHZpZXdlZCBieSByZWFkaW5nIGV2ZXJ5dGhpbmcgYWZ0ZXIgIl9fREFUQV9fIiBvciBieQorIyAgIHJ1bm5pbmcgZG5zbGlzdCB3aXRoIHRoZSAnLWwnIG9wdGlvbi4KKyMgCisjIFZlcnNpb246IDAuMgorIyBBdXRob3I6ICBUaG9tYXMgVHV0dGxlCisjIEVtYWlsOiAgIGRuc2xpc3QuMjAudGhpbmtpbmdpbmJpbmFyeUBzcGFtZ291cm1ldC5vcmcKKyMgTGljZW5zZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4wCisjCisjIHYuIDAuMDogVG9vIHVnbHkgdG8gcHVibGlzaCwgdGhyb3duIG91dC4KKyMKKyMgdi4gMC4xOiBGaXJzdCByZXdyaXRlLgorIyAgICAgICAgIEFkZGVkIG1hc3RlciBob3N0IGxpc3Qgc28gb2ZmbGluZSBob3N0cyBjYW4gc3RpbGwgYmUgZGlzcGxheWVkLgorIyAgICAgICAgIEZpeGVkIG1vZGlmaWNhdGlvbiBkZXRlY3Rpb24gKGEgbmV3ZXIgbW9kaWZpY2F0aW9uIHRpbWUgaXMgbG93ZXIuKQorIworIyB2LiAwLjI6IEZpeGVkIENsaWVudCBJRCA9ICIqIiA9PiAiTm9uZSIKKyMgICAgICAgICBGaXhlZCBIVE1MIGVudGl0aWVzIChhIGNsaWVudCBJRCBvZiA/Pz8/PD8gc2NyZXdlZCBpdCB1cCkKKyMgICAgICAgICBGaXhlZCBjb21tYW5kLWxpbmUgYXJndW1lbnQgcHJvY2Vzc2luZyAoYXBwYXJlbnRseSwgInNoaWZ0IEBBUkdWIiAhPQorIyAgICAgICAgICAgICAiJF8gPSBzaGlmdCBAQVJHViIuLi4pCisjICAgICAgICAgQWRkZWQgbGljZW5zZSBpbmZvcm1hdGlvbi4KKwordXNlIFRlbXBsYXRlOworCisjIExvY2F0aW9uIG9mIHN0YXRlIGZpbGUuICAoVGhpcyBpcyB0aGUgZG5zbWFzcSBkZWZhdWx0LikKKyMgQ2hhbmdlIHdpdGggLXMgPGZpbGU+CitteSAkZG5zbWFzcV9zdGF0ZV9maWxlID0gJy92YXIvbGliL21pc2MvZG5zbWFzcS5sZWFzZXMnOworIyBMb2NhdGlvbiBvZiB0ZW1wbGF0ZS4gIChBc3N1bWVkIHRvIGJlIGluIGN1cnJlbnQgZGlyZWN0b3J5LikKKyMgQ2hhbmdlIHdpdGggLXQgPGZpbGU+CitteSAkaHRtbF90ZW1wbGF0ZV9maWxlID0gJ2Ruc2xpc3QudHQyJzsKKyMgRmlsZSB0byB3cml0ZSBIVE1MIHBhZ2UgdG8uICAoVGhpcyBpcyB3aGVyZSBTbGFja3dhcmUgcHV0cyBXV1cgcGFnZXMuICBJdCBtYXkKKyMgYmUgZGlmZmVyZW50IG9uIG90aGVyIHN5c3RlbXMuICBNYWtlIHN1cmUgdGhlIHBlcm1pc3Npb25zIGFyZSBzZXQgY29ycmVjdGx5CisjIGZvciBpdC4pCitteSAkaHRtbF9vdXRwdXRfZmlsZSA9ICcvdmFyL3d3dy9odGRvY3MvZGhjcC5odG1sJzsKKyMgVGltZSB0byB3YWl0IGFmdGVyIGVhY2ggcGFnZSB1cGRhdGUuICAoVGhlIHN0YXRlIGZpbGUgaXMgY2hlY2tlZCBmb3IgY2hhbmdlcworIyBiZWZvcmUgZWFjaCB1cGRhdGUgYnV0IGlzIG5vdCByZWFkIGluIGVhY2ggdGltZSwgaW4gY2FzZSBpdCBpcyB2ZXJ5IGJpZy4gIFRoZQorIyBwYWdlIGlzIHJld3JpdHRlbiBqdXN0IHNvIHRoZSAiKHVwZGF0ZWQgX18vX18gX186X186X18pIiB0ZXh0IGNoYW5nZXMgOy0pCitteSAkd2FpdF90aW1lID0gMjsKKworIyBSZWFkIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuCit3aGlsZSAoJF8gPSBzaGlmdCBAQVJHVikgeworCWlmICgvLXMvKSB7ICRkbnNtYXNxX3N0YXRlX2ZpbGUgPSBzaGlmdDsgbmV4dDsgfQorCWlmICgvLXQvKSB7ICRodG1sX3RlbXBsYXRlX2ZpbGUgPSBzaGlmdDsgbmV4dDsgfQorCWlmICgvLW8vKSB7ICRodG1sX291dHB1dF9maWxlID0gc2hpZnQ7ICAgbmV4dDsgfQorCWlmICgvLWQvKSB7ICR3YWl0X3RpbWUgPSBzaGlmdDsgICAgICAgICAgbmV4dDsgfQorCWlmICgvLWwvKSB7IHNob3dfbGljZW5zZSgpOyAgICAgICAgICAgICAgZXhpdDsgfQorCWRpZSAidXNhZ2U6IGRuc2xpc3QgWy1zIHN0YXRlX2ZpbGVdIFstdCB0ZW1wbGF0ZV9maWxlXSBbLW8gb3V0cHV0X2ZpbGVdIFstZCBkZWxheV90aW1lXVxuIjsKK30KKworIyBNYXN0ZXIgbGlzdCBvZiBjbGllbnRzLCBvZmZsaW5lIGFuZCBvbmxpbmUuCitteSAkbGlzdCA9IHt9OworIyBTb3J0ZWQgaG9zdCBsaXN0LiAgKEl0J3MgYWN0dWFsbHkgc29ydGVkIGJ5IElQLS10aGUgc3ViICZieWlwKCkgY29tcGFyZXMgdHdvCisjIElQIGFkZHJlc3Nlcywgb2N0ZXQgYnkgb2N0ZXQsIGFuZCBmaWd1cmVzIG91dCB3aGljaCBpcyBoaWdoZXIuKQorbXkgQGhvc3RzID0gKCk7CisjIExhc3QgdGltZSB0aGUgc3RhdGUgZmlsZSB3YXMgY2hhbmdlZC4KK215ICRsYXN0X3N0YXRlX2NoYW5nZTsKKworIyBDaGVjayBmb3IgYSBjaGFuZ2UgdG8gdGhlIHN0YXRlIGZpbGUuCitzdWIgY2hlY2tfc3RhdGUgeworCWlmIChkZWZpbmVkICRsYXN0X3N0YXRlX2NoYW5nZSkgeworCQlpZiAoLU0gJGRuc21hc3Ffc3RhdGVfZmlsZSA8ICRsYXN0X3N0YXRlX2NoYW5nZSkgeworCQkJcHJpbnQgImNoZWNrX3N0YXRlOiBzdGF0ZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQuXG4iOworCQkJJGxhc3Rfc3RhdGVfY2hhbmdlID0gLU0gJGRuc21hc3Ffc3RhdGVfZmlsZTsKKwkJCXJldHVybiAxOworCQl9IGVsc2UgeworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQkjIExhc3QgY2hhbmdlIHVuZGVmaW5lZCwgc28gd2UgYXJlIHJ1bm5pbmcgZm9yIHRoZSBmaXJzdCB0aW1lLgorCQlwcmludCAiY2hlY2tfc3RhdGU6IHJlYWRpbmcgc3RhdGUgZmlsZSBhdCBzdGFydHVwLlxuIjsKKwkJcmVhZF9zdGF0ZSgpOworCQkkbGFzdF9zdGF0ZV9jaGFuZ2UgPSAtTSAkZG5zbWFzcV9zdGF0ZV9maWxlOworCQlyZXR1cm4gMTsKKwl9Cit9CisKKyMgUmVhZCBkYXRhIGluIHN0YXRlIGZpbGUuCitzdWIgcmVhZF9zdGF0ZSB7CisJbXkgJG9sZDsKKwlteSAkbmV3OworCSMgT3BlbiBmaWxlLgorCXVubGVzcyAob3BlbiBTVEFURSwgJGRuc21hc3Ffc3RhdGVfZmlsZSkgeworCQl3YXJuICJyZWFkX3N0YXRlOiBjYW4ndCBvcGVuICRkbnNtYXNxX3N0YXRlX2ZpbGUhXG4iOworCQlyZXR1cm4gMDsKKwl9CisJIyBNYXJrIGFsbCBob3N0cyBhcyBvZmZsaW5lLCBzYXZpbmcgb2xkIHN0YXRlLgorCWZvcmVhY2ggJGV0aGVyIChrZXlzICV7JGxpc3R9KSB7CisJCSRsaXN0LT57JGV0aGVyfS0+eydvbGRfb25saW5lJ30gPSAkbGlzdC0+eyRldGhlcn0tPnsnb25saW5lJ307CisJCSRsaXN0LT57JGV0aGVyfS0+eydvbmxpbmUnfSA9IDA7CisJfQorCSMgUmVhZCBob3N0cy4KKwl3aGlsZSAoPFNUQVRFPikgeworCQljaG9tcDsKKwkJQGhvc3R7cXcvcmF3X2xlYXNlIGV0aGVyX2FkZHIgaXBfYWRkciBob3N0bmFtZSByYXdfY2xpZW50X2lkL30gPSBzcGxpdCAvXHMrLzsKKwkJJGV0aGVyID0gJGhvc3R7ZXRoZXJfYWRkcn07CisJCSMgTWFyayBlYWNoIG9ubGluZSBob3N0IGFzIG9ubGluZS4KKwkJJGxpc3QtPnskZXRoZXJ9LT57J29ubGluZSd9ID0gMTsKKwkJIyBDb3B5IGRhdGEgdG8gbWFzdGVyIGxpc3QuCisJCWZvcmVhY2ggJGtleSAoa2V5cyAlaG9zdCkgeworCQkJJGxpc3QtPnskZXRoZXJ9LT57JGtleX0gPSAkaG9zdHska2V5fTsKKwkJfQorCX0KKwljbG9zZSBTVEFURTsKKwkjIEhhbmRsZSBjaGFuZ2VzIGluIG9mZmxpbmUvb25saW5lIHN0YXRlLiAgKFRoZSBzdWIgJmRvX2hvc3QoKSBoYW5kbGVzCisJIyBhbGwgb2YgdGhlIGV4dHJhIHN0dWZmIHRvIGRvIHdpdGggYSBob3N0J3MgZGF0YSBvbmNlIGl0IGlzIHJlYWQuCisJZm9yZWFjaCAkZXRoZXIgKGtleXMgJXskbGlzdH0pIHsKKwkJJG9sZCA9ICRsaXN0LT57JGV0aGVyfS0+eydvbGRfb25saW5lJ307CisJCSRuZXcgPSAkbGlzdC0+eyRldGhlcn0tPnsnb25saW5lJ307CisJCWlmIChub3QgJG9sZCkgeworCQkJaWYgKG5vdCAkbmV3KSB7CisJCQkJZG9faG9zdCgkZXRoZXIsICdvZmZsaW5lJyk7CisJCQl9IGVsc2UgeworCQkJCWRvX2hvc3QoJGV0aGVyLCAnam9pbicpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKG5vdCAkbmV3KSB7CisJCQkJZG9faG9zdCgkZXRoZXIsICdsZWF2ZScpOworCQkJfSBlbHNlIHsKKwkJCQlkb19ob3N0KCRldGhlciwgJ29ubGluZScpOworCQkJfQorCQl9CisJfQorCSMgU29ydCBob3N0cyBieSBJUCA7LSkKKwlAaG9zdHMgPSBzb3J0IGJ5aXAgdmFsdWVzICV7JGxpc3R9OworCSMgQ29weSBzb3J0ZWQgbGlzdCB0byB0ZW1wbGF0ZSBkYXRhIHN0b3JlLgorCSRkYXRhLT57J2hvc3RzJ30gPSBbIEBob3N0cyBdOworfQorCisjIERvIHN0dWZmIHBlciBob3N0Lgorc3ViIGRvX2hvc3QgeworCW15ICgkZXRoZXIsICRzdGF0dXMpID0gQF87CisJCisJIyBGaW5kIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgREhDUCBjbGllbnQgSUQuCisJaWYgKCRsaXN0LT57JGV0aGVyfS0+eydyYXdfY2xpZW50X2lkJ30gZXEgJyonKSB7CisJCSRsaXN0LT57JGV0aGVyfS0+eyd0ZXh0X2NsaWVudF9pZCd9ID0gJ05vbmUnOworCX0gZWxzZSB7CisJCW15ICR0ZXh0ID0gIiI7CisJCWZvcmVhY2ggJGNoYXIgKHNwbGl0IC86LywgJGxpc3QtPnskZXRoZXJ9LT57J3Jhd19jbGllbnRfaWQnfSkgeworCQkJJGNoYXIgPSBwYWNrKCdIMicsICRjaGFyKTsKKwkJCWlmIChvcmQoJGNoYXIpID49IDMyIGFuZCBvcmQoJGNoYXIpIDw9IDEyNykgeworCQkJCSR0ZXh0IC49ICRjaGFyOworCQkJfSBlbHNlIHsKKwkJCQkkdGV4dCAuPSAiPyI7CisJCQl9CisJCX0KKwkJJGxpc3QtPnskZXRoZXJ9LT57J3RleHRfY2xpZW50X2lkJ30gPSAkdGV4dDsKKwl9CisJCQorCSMgQ29udmVydCBsZWFzZSBleHBpcmF0aW9uIGRhdGUvdGltZSB0byB0ZXh0LgorCWlmICgkbGlzdC0+eyRldGhlcn0tPnsncmF3X2xlYXNlJ30gPT0gMCkgeworCQkkbGlzdC0+eyRldGhlcn0tPnsndGV4dF9sZWFzZSd9ID0gJ05ldmVyJzsKKwl9IGVsc2UgeworCQkkbGlzdC0+eyRldGhlcn0tPnsndGV4dF9sZWFzZSd9ID0gbmljZV90aW1lKCRsaXN0LT57JGV0aGVyfS0+eydyYXdfbGVhc2UnfSk7CisJfQorCQorCWlmICgkc3RhdHVzIGVxICdvZmZsaW5lJykgeworCQkjIE5vdGhpbmcgdG8gZG8uCisJfSBlbHNpZiAoJHN0YXR1cyBlcSAnb25saW5lJykgeworCQkjIE5vdGhpbmcgdG8gZG8uCisJfSBlbHNpZiAoJHN0YXR1cyBlcSAnam9pbicpIHsKKwkJIyBVcGRhdGUgdGltZXMgZm9yIGpvaW5pbmcgaG9zdC4KKwkJcHJpbnQgImRvX2hvc3Q6ICRldGhlciBqb2luZWQgdGhlIG5ldHdvcmsuXG4iOworCQkkbGlzdC0+eyRldGhlcn0tPnsnam9pbl90aW1lJ30gPSB0aW1lOworCQkkbGlzdC0+eyRldGhlcn0tPnsnc2luY2UnfSA9IG5pY2VfdGltZSh0aW1lKTsKKwl9IGVsc2lmICgkc3RhdHVzIGVxICdsZWF2ZScpIHsKKwkJIyBVcGRhdGUgdGltZXMgZm9yIGxlYXZpbmcgaG9zdC4KKwkJcHJpbnQgImRvX2hvc3Q6ICRldGhlciBsZWZ0IHRoZSBuZXR3b3JrLlxuIjsKKwkJJGxpc3QtPnskZXRoZXJ9LT57J2xlYXZlX3RpbWUnfSA9IHRpbWU7CisJCSRsaXN0LT57JGV0aGVyfS0+eydzaW5jZSd9ID0gbmljZV90aW1lKHRpbWUpOworCX0KKwkKK30KKworIyBDb252ZXJ0IHRpbWUgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uCitzdWIgbmljZV90aW1lIHsKKwlteSAkdGltZSA9IHNoaWZ0OworCW15ICgkc2VjLCAkbWluLCAkaG91ciwgJG1kYXksICRtb24sICR5ZWFyLCAkd2RheSwgJHlkYXksICRkc3QpID0gbG9jYWx0aW1lKCR0aW1lKTsKKwkkc2VjID0gcGFkKCRzZWMsICcwJywgMik7CisJJG1pbiA9IHBhZCgkbWluLCAnMCcsIDIpOworCSRob3VyID0gcGFkKCRob3VyLCAnMCcsIDIpOworCSRtb24gPSBwYWQoJG1vbiwgJzAnLCAyKTsKKwkkbWRheSA9IHBhZCgkbWRheSwgJzAnLCAyKTsKKwlyZXR1cm4gIiRtb24vJG1kYXkgJGhvdXI6JG1pbjokc2VjIjsKK30KKworIyBQYWQgc3RyaW5nIHRvIGEgY2VydGFpbiBsZW5ndGggYnkgcmVwZWF0ZWRseSBwcmVwZW5kaW5nIGFub3RoZXIgc3RyaW5nLgorc3ViIHBhZCB7CisJbXkgKCR0ZXh0LCAkcGFkLCAkbGVuZ3RoKSA9IEBfOworCXdoaWxlIChsZW5ndGgoJHRleHQpIDwgJGxlbmd0aCkgeworCQkkdGV4dCA9ICIkcGFkJHRleHQiOworCX0KKwlyZXR1cm4gJHRleHQ7Cit9CisKKyMgQ29tcGFyZSB0d28gSVAgYWRkcmVzc2VzLiAgKFVzZXMgJGEgYW5kICRiIGZyb20gc29ydC4pCitzdWIgYnlpcCB7CisJIyBTcGxpdCBpbnRvIG9jdGV0cy4KKwlteSBAYSA9IHNwbGl0IC9cLi8sICRhLT57aXBfYWRkcn07CisJbXkgQGIgPSBzcGxpdCAvXC4vLCAkYi0+e2lwX2FkZHJ9OworCSMgQ29tcGFyZSBvY3RldHMuCisJZm9yZWFjaCAkbiAoMC4uMykgeworCQlyZXR1cm4gJGFbJG5dIDw9PiAkYlskbl0gaWYgKCRhWyRuXSAhPSAkYlskbl0pOworCX0KKwkjIElmIHdlIGdldCBoZXJlIHRoZXJlIGlzIG5vIGRpZmZlcmVuY2UuCisJcmV0dXJuIDA7Cit9CisJCQorIyBPdXRwdXQgSFRNTCBmaWxlLgorc3ViIHdyaXRlX291dHB1dCB7CisJIyBDcmVhdGUgbmV3IHRlbXBsYXRlIG9iamVjdC4KKwlteSAkdGVtcGxhdGUgPSBUZW1wbGF0ZS0+bmV3KAorCQl7CisJCQlBQlNPTFVURSA9PiAxLCAjIC92YXIvd3d3Ly4uLiBpcyBhbiBhYnNvbHV0ZSBwYXRoCisJCQlPVVRQVVQgPT4gJGh0bWxfb3V0cHV0X2ZpbGUgIyBwdXQgaXQgaGVyZSwgbm90IFNURE9VVAorCQl9CisJKTsKKwkkZGF0YS0+eyd1cGRhdGVkJ30gPSBuaWNlX3RpbWUodGltZSk7ICMgYWRkICIodXBkYXRlZCAuLi4pIiB0byBmaWxlCisJdW5sZXNzICgkdGVtcGxhdGUtPnByb2Nlc3MoJGh0bWxfdGVtcGxhdGVfZmlsZSwgJGRhdGEpKSB7ICMgZG8gaXQKKwkJd2FybiAid3JpdGVfb3V0cHV0OiBUZW1wbGF0ZSBUb29sa2l0IGVycm9yOiAiIC4gJHRlbXBsYXRlLT5lcnJvcigpIC4gIlxuIjsKKwkJcmV0dXJuIDA7CisJfQorCXByaW50ICJ3cml0ZV9vdXRwdXQ6IHBhZ2UgdXBkYXRlZC5cbiI7CisJcmV0dXJuIDE7Cit9CisKK3N1YiBzaG93X2xpY2Vuc2UgeworCXdoaWxlICg8REFUQT4pIHsKKwkJcHJpbnQ7CisJCSRsaW5lKys7CisJCWlmICgkbGluZSA9PSAyNCkgeyA8PjsgJGxpbmUgPSAxOyB9CisJfQorfQorCisjIE1haW4gbG9vcC4KK3doaWxlICgxKSB7CisJIyBDaGVjayBmb3Igc3RhdGUgY2hhbmdlLgorCWlmIChjaGVja19zdGF0ZSgpKSB7CisJCXJlYWRfc3RhdGUoKTsKKwkJc2xlZXAgMTsgIyBTbGVlcCBmb3IgYSBzZWNvbmQganVzdCBzbyB3ZSBkb24ndCB3ZWFyIGFueXRoaW5nCisJCSAgICAgICAgICMgb3V0LiAgKEJ5IG5vdCBzbGVlcGluZyB0aGUgd2hvbGUgdGltZSBhZnRlciBhIGNoYW5nZQorCQkJICMgd2UgY2FuIGRldGVjdCByYXBpZCBjaGFuZ2VzIG1vcmUgZWFzaWx5LS1saWtlIGlmIDMwMAorCQkJICMgaG9zdHMgYWxsIGNvbWUgYmFjayBvbmxpbmUsIHRoZXkgc2hvdyB1cCBxdWlja2VyLikKKwl9IGVsc2UgeworCQlzbGVlcCAkd2FpdF90aW1lOyAjIFRha2UgYSBuYXAuCisJfQorCXdyaXRlX291dHB1dCgpOyAjIFdyaXRlIHRoZSBmaWxlIGFueXdheS4KK30KK19fREFUQV9fCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgICAgICAgICAgICAgICAgICAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvZG5zbGlzdC9kbnNsaXN0LnR0MiBiL2NvbnRyaWIvZG5zbGlzdC9kbnNsaXN0LnR0MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTk4ZTVmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9kbnNsaXN0L2Ruc2xpc3QudHQyCkBAIC0wLDAgKzEsMzIgQEAKKzxodG1sPgorCTxoZWFkPgorCQk8dGl0bGU+REhDUCBDbGllbnRzPC90aXRsZT4KKwkJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkaGNwLmNzcyIvPgorCQk8bWV0YSBodHRwLWVxdWl2PSJSZWZyZXNoIiBjb250ZW50PSIyIi8+CisJPC9oZWFkPgorCTxib2R5PgorCQk8aDE+REhDUCBDbGllbnRzIDxzcGFuIGNsYXNzPSJ1cGRhdGVkIj4odXBkYXRlZCBbJSB1cGRhdGVkICVdKTwvc3Bhbj48L2gxPgorCQk8dGFibGUgY29scz0iNyI+CisJCTx0cj4KKwkJCTx0aCBjbGFzcz0iaG9zdG5hbWUiPkhvc3RuYW1lPC90aD4KKwkJCTx0aCBjbGFzcz0iaXBfYWRkciI+SVAgQWRkcmVzczwvdGg+CisJCQk8dGggY2xhc3M9ImV0aGVyX2FkZHIiPkV0aGVybmV0IEFkZHJlc3M8L3RoPgorCQkJPHRoIGNsYXNzPSJjbGllbnRfaWQiPkRIQ1AgQ2xpZW50IElEPC90aD4KKwkJCTx0aCBjbGFzcz0ic3RhdHVzIj5TdGF0dXM8L3RoPgorCQkJPHRoIGNsYXNzPSJzaW5jZSI+U2luY2U8L3RoPgorCQkJPHRoIGNsYXNzPSJsZWFzZSI+TGVhc2UgRXhwaXJlczwvdGg+CisJCTwvdHI+CisJCVslIEZPUkVBQ0ggaG9zdCBJTiBob3N0cyAlXQorCQkJPHRyIGNsYXNzPSJbJSBJRiBob3N0Lm9ubGluZSAlXW9ubGluZVslIEVMU0UgJV1vZmZsaW5lWyUgRU5EICVdIj4KKwkJCQk8dGQgY2xhc3M9Imhvc3RuYW1lIj5bJSBob3N0Lmhvc3RuYW1lICVdPC90ZD4KKwkJCQk8dGQgY2xhc3M9ImlwX2FkZHIiPlslIGhvc3QuaXBfYWRkciAlXTwvdGQ+CisJCQkJPHRkIGNsYXNzPSJldGhlcl9hZGRyIj5bJSBob3N0LmV0aGVyX2FkZHIgJV08L3RkPgorCQkJCTx0ZCBjbGFzcz0iY2xpZW50X2lkIj5bJSBob3N0LnRleHRfY2xpZW50X2lkICVdIChbJSBob3N0LnJhd19jbGllbnRfaWQgJV0pPC90ZD4KKwkJCQk8dGQgY2xhc3M9InN0YXR1cyI+WyUgSUYgaG9zdC5vbmxpbmUgJV1PbmxpbmVbJSBFTFNFICVdT2ZmbGluZVslIEVORCAlXTwvdGQ+CisJCQkJPHRkIGNsYXNzPSJzaW5jZSI+WyUgaG9zdC5zaW5jZSAlXTwvdGQ+CisJCQkJPHRkIGNsYXNzPSJsZWFzZSI+WyUgaG9zdC50ZXh0X2xlYXNlICVdPC90ZD4KKwkJCTwvdHI+CisJCVslIEVORCAlXQorCQk8L3RhYmxlPgorCTwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvZG5zbWFzcV9NYWNPU1gtcHJlMTAuNC9ETlNtYXNxIGIvY29udHJpYi9kbnNtYXNxX01hY09TWC1wcmUxMC40L0ROU21hc3EKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmI2MjExOAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZG5zbWFzcV9NYWNPU1gtcHJlMTAuNC9ETlNtYXNxCkBAIC0wLDAgKzEsMjIgQEAKKyMhL2Jpbi9zaAorLiAvZXRjL3JjLmNvbW1vbgorCitTdGFydFNlcnZpY2UoKSB7CisgIGlmIFsgIiR7RE5TTUFTUTo9LU5PLX0iID0gIi1ZRVMtIiBdIDsgdGhlbgorICAgIC91c3IvbG9jYWwvc2Jpbi9kbnNtYXNxIC1xIC1uCisgIGZpCit9CisKK1N0b3BTZXJ2aWNlKCkgeworICBwaWQ9YEdldFBJRCBkbnNtYXNxYAorICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KKyAgICBraWxsICRwaWQKKyAgZmkKK30KKworUmVzdGFydFNlcnZpY2UoKSB7CisgIFN0b3BTZXJ2aWNlICIkQCIKKyAgU3RhcnRTZXJ2aWNlICIkQCIKK30KKworUnVuU2VydmljZSAiJDEiCmRpZmYgLS1naXQgYS9jb250cmliL2Ruc21hc3FfTWFjT1NYLXByZTEwLjQvUkVBRE1FLnJ0ZiBiL2NvbnRyaWIvZG5zbWFzcV9NYWNPU1gtcHJlMTAuNC9SRUFETUUucnRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNDg0MTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2Ruc21hc3FfTWFjT1NYLXByZTEwLjQvUkVBRE1FLnJ0ZgpAQCAtMCwwICsxLDQyIEBACit7XHJ0ZjFcbWFjXGFuc2ljcGcxMDAwMFxjb2NvYXJ0ZjgyNFxjb2NvYXN1YnJ0ZjEwMAore1xmb250dGJsXGYwXGZzd2lzc1xmY2hhcnNldDc3IEhlbHZldGljYTtcZjFcZm5pbFxmY2hhcnNldDc3IE1vbmFjbzt9Cit7XGNvbG9ydGJsO1xyZWQyNTVcZ3JlZW4yNTVcYmx1ZTI1NTt9CitccGFwZXJ3MTE5MDBccGFwZXJoMTY4NDBcbWFyZ2wxNDQwXG1hcmdyMTQ0MFx2aWV3dzExMTIwXHZpZXdoMTAxMDBcdmlld2tpbmQwCitccGFyZFx0eDU2Nlx0eDExMzNcdHgxNzAwXHR4MjI2N1x0eDI4MzRcdHgzNDAxXHR4Mzk2OFx0eDQ1MzVcdHg1MTAyXHR4NTY2OVx0eDYyMzZcdHg2ODAzXHFsXHFuYXR1cmFsXHBhcmRpcm5hdHVyYWwKKworXGYwXGZzMjQgXGNmMCAxLiAJSWYgeW91J3ZlIHVzZWQgRE5TZW5hYmxlciwgb3IgaWYgeW91J3JlIHVzaW5nIE1hYyBPUyBYIFNlcnZlciwgb3IgaWYgeW91IGhhdmUgaW4gYW55IG90aGVyIHdheSBhY3RpdmF0ZWQgTWFjIE9TIFgncyBidWlsdC1pbiBESENQIGFuZC9vciBETlMgc2VydmVycywgZGlzYWJsZSB0aGVtLiAgVGhpcyB3b3VsZCB1c3VhbGx5IGludm9sdmUgY2hlY2tpbmcgdGhhdCB0aGV5IGFyZSBlaXRoZXIgc2V0IHRvIC1OTy0gb3IgYWJzZW50IGFsdG9nZXRoZXIgaW4gCitcZjEgL2V0Yy9ob3N0Y29uZmlnCitcZjAgLiAgSWYgeW91J3ZlIG5ldmVyIGRvbmUgYW55dGhpbmcgdG8gZG8gd2l0aCBETlMgb3IgREhDUCBzZXJ2ZXJzIG9uIGEgY2xpZW50IHZlcnNpb24gb2YgTWFjT1MgWCwgeW91IHdvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhpczsgaXQgd2lsbCBhbHJlYWR5IGJlIGNvbmZpZ3VyZWQgZm9yIHlvdS5cCitcCisyLglBZGQgYSBjb25maWd1cmF0aW9uIGl0ZW0gdG8gCitcZjEgL2V0Yy9ob3N0Y29uZmlnCitcZjAgIGFzIGZvbGxvd3M6XAorXAorCitcZjEgRE5TTUFTUT0tWUVTLQorXGYwIFwKK1wKKzMuIAlDcmVhdGUgYSBzeXN0ZW0td2lkZSBTdGFydHVwSXRlbXMgZGlyZWN0b3J5IGZvciBkbnNtYXNxOlwKK1wKKworXGYxIHN1ZG8gbWtkaXIgLXAgL0xpYnJhcnkvU3RhcnR1cEl0ZW1zL0ROU21hc3FcCisKK1xmMCBcCis0LglDb3B5IHRoZSBmaWxlcyAKK1xmMSBETlNtYXNxCitcZjAgIGFuZCAKK1xmMSBTdGFydHVwUGFyYW1ldGVycy5wbGlzdAorXGYwICBpbnRvIHRoaXMgZGlyZWN0b3J5LCBhbmQgbWFrZSBzdXJlIHRoZSBmb3JtZXIgaXMgZXhlY3V0YWJsZTpcCitcCisKK1xmMSBzdWRvIGNwIEROU21hc3EgU3RhcnR1cFBhcmFtZXRlcnMucGxpc3QgL0xpYnJhcnkvU3RhcnR1cEl0ZW1zL0ROU21hc3FcCitzdWRvIGNobW9kIDc1NSAvTGlicmFyeS9TdGFydHVwSXRlbXMvRE5TbWFzcS9ETlNtYXNxXAorCitcZjAgXAorNS4JU3RhcnQgdGhlIHNlcnZpY2U6XAorXAorCitcZjEgc3VkbyAvTGlicmFyeS9TdGFydHVwSXRlbXMvRE5TbWFzcS9ETlNtYXNxIHN0YXJ0XAorCitcZjAgXGNmMCBcCitUaGF0IHNob3VsZCBiZSBhbGwuLi59ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9kbnNtYXNxX01hY09TWC1wcmUxMC40L1N0YXJ0dXBQYXJhbWV0ZXJzLnBsaXN0IGIvY29udHJpYi9kbnNtYXNxX01hY09TWC1wcmUxMC40L1N0YXJ0dXBQYXJhbWV0ZXJzLnBsaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NGJkYTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2Ruc21hc3FfTWFjT1NYLXByZTEwLjQvU3RhcnR1cFBhcmFtZXRlcnMucGxpc3QKQEAgLTAsMCArMSwxOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlIENvbXB1dGVyLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgorPHBsaXN0IHZlcnNpb249IjEuMCI+Cis8ZGljdD4KKwk8a2V5PkRlc2NyaXB0aW9uPC9rZXk+CisJPHN0cmluZz5ETlNtYXNxPC9zdHJpbmc+CisJPGtleT5PcmRlclByZWZlcmVuY2U8L2tleT4KKwk8c3RyaW5nPk5vbmU8L3N0cmluZz4KKwk8a2V5PlByb3ZpZGVzPC9rZXk+CisJPGFycmF5PgorCQk8c3RyaW5nPkROU21hc3E8L3N0cmluZz4KKwk8L2FycmF5PgorCTxrZXk+VXNlczwva2V5PgorCTxhcnJheT4KKwkJPHN0cmluZz5OZXR3b3JrPC9zdHJpbmc+CisJPC9hcnJheT4KKwk8L2RpY3Q+Cis8L3BsaXN0PgpkaWZmIC0tZ2l0IGEvY29udHJpYi9keW5hbWljLWRuc21hc3EvZHluYW1pYy1kbnNtYXNxLnBsIGIvY29udHJpYi9keW5hbWljLWRuc21hc3EvZHluYW1pYy1kbnNtYXNxLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNjNGExZjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2R5bmFtaWMtZG5zbWFzcS9keW5hbWljLWRuc21hc3EucGwKQEAgLTAsMCArMSwyNDkgQEAKKyMhL3Vzci9iaW4vcGVybAorIyBkeW5hbWljLWRuc21hc3EucGwgLSB1cGRhdGUgZG5zbWFzcSdzIGludGVybmFsIGRucyBlbnRyaWVzIGR5bmFtaWNhbGx5CisjIENvcHlyaWdodCAoQykgMjAwNCAgUGV0ZXIgV2lsbGlzCisjIAorIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisjIAorIyB0aGUgcHVycG9zZSBvZiB0aGlzIHNjcmlwdCBpcyB0byBiZSBhYmxlIHRvIHVwZGF0ZSBkbnNtYXNxJ3MgZG5zCisjIHJlY29yZHMgZnJvbSBhIHJlbW90ZSBkeW5hbWljIGRucyBjbGllbnQuCisjIAorIyBiYXNpYyB1c2Ugb2YgdGhpcyBzY3JpcHQ6CisjIGR5bmFtaWMtZG5zbWFzcS5wbCBhZGQgdGVzdGFjY291bnQgMTIzNCB0ZXN0YWNjb3VudC5teWRvbWFpbi5jb20KKyMgZHluYW1pYy1kbnNtYXNxLnBsIGxpc3RlbiAmCisjIAorIyB0aGlzIHNjcmlwdCB0cmllcyB0byBlbXVsYXRlIER5bkROUy5vcmcncyBkeW5hbWljIGRucyBzZXJ2aWNlLCBzbworIyB0ZWNobmljYWxseSB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlIGFueSBEeW5ETlMub3JnIGNsaWVudCB0bworIyB1cGRhdGUgdGhlIHJlY29yZHMgaGVyZS4gdGVzdGVkIGFuZCBjb25maXJtZWQgdG8gd29yayB3aXRoIGRkbnN1CisjIDEuMy4xLiBqdXN0IHBvaW50IHRoZSBjbGllbnQncyBob3N0IHRvIHRoZSBJUCBvZiB0aGlzIG1hY2hpbmUsCisjIHBvcnQgOTAyMCwgYW5kIGluY2x1ZGUgdGhlIGhvc3RuYW1lLCB1c2VyIGFuZCBwYXNzLCBhbmQgaXQgc2hvdWxkCisjIHdvcmsuCisjIAorIyBtYWtlIHN1cmUgImFkZG4taG9zdHM9L2V0Yy9keW5kbnMtaG9zdHMiIGlzIGluIHlvdXIgL2V0Yy9kbnNtYXNxLmNvbmYKKyMgZmlsZSBhbmQgIm5vcG9sbCIgaXMgY29tbWVudGVkIG91dC4KKwordXNlIHN0cmljdDsKK3VzZSBJTzo6U29ja2V0OwordXNlIE1JTUU6OkJhc2U2NDsKK3VzZSBEQl9GaWxlOwordXNlIEZjbnRsOworCitteSAkYWNjb3VudGRiID0gImFjY291bnRzLmRiIjsKK215ICRyZWNvcmRmaWxlID0gIi9ldGMvZHluZG5zLWhvc3RzIjsKK215ICRkbnNtYXNxcGlkZmlsZSA9ICIvdmFyL3J1bi9kbnNtYXNxLnBpZCI7ICMgaWYgdGhpcyBkb2Vzbid0IGV4aXN0LCB3aWxsIGxvb2sgZm9yIHByb2Nlc3MgaW4gL3Byb2MKK215ICRsaXN0ZW5hZGRyZXNzID0gIjAuMC4wLjAiOworbXkgJGxpc3RlbnBvcnQgPSA5MDIwOworCisjIG5vIGVkaXRpbmcgcGFzdCB0aGlzIHBvaW50IHNob3VsZCBiZSBuZWNlc3NhcnkKKworaWYgKCBAQVJHViA8IDEgKSB7CisJZGllICJVc2FnZTogJDAgQUREfERFTHxMSVNUVVNFUlN8V1JJVEVIT1NUU0ZJTEV8TElTVEVOXG4iOworfSBlbHNpZiAoIGxjICRBUkdWWzBdIGVxICJhZGQiICkgeworCWRpZSAiVXNhZ2U6ICQwIEFERCBVU0VSIFBBU1MgSE9TVE5BTUVcbiIgdW5sZXNzIEBBUkdWID09IDQ7CisJYWRkX2FjY3QoJEFSR1ZbMV0sICRBUkdWWzJdLCAkQVJHVlszXSk7Cit9IGVsc2lmICggbGMgJEFSR1ZbMF0gZXEgImRlbCIgKSB7CisJZGllICJVc2FnZTogJDAgREVMIFVTRVJcbiIgdW5sZXNzIEBBUkdWID09IDI7CisJcHJpbnQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdXNlciBcIiRBUkdWWzFdXCI/IFtOL3ldICI7CisJbXkgJHJlc3AgPSA8U1RESU4+OworCWNob21wICRyZXNwOworCWlmICggbGMgc3Vic3RyKCRyZXNwLDAsMSkgZXEgInkiICkgeworCQlkZWxfYWNjdCgkQVJHVlsxXSk7CisJfQorfSBlbHNpZiAoIGxjICRBUkdWWzBdIGVxICJsaXN0dXNlcnMiIG9yIGxjICRBUkdWWzBdIGVxICJ3cml0ZWhvc3RzZmlsZSIgKSB7CisJbXkgJFggPSB0aWUgbXkgJWgsICJEQl9GaWxlIiwgJGFjY291bnRkYiwgT19SRFdSfE9fQ1JFQVQsIDA2MDAsICREQl9IQVNIOworCW15ICRmaDsKKwlpZiAoIGxjICRBUkdWWzBdIGVxICJ3cml0ZWhvc3RzZmlsZSIgKSB7CisgICAgICAgIAlvcGVuKCRmaCwgIj4kcmVjb3JkZmlsZSIpIHx8IGRpZSAiQ291bGRuJ3Qgb3BlbiByZWNvcmRmaWxlIFwiJHJlY29yZGZpbGVcIjogJCFcbiI7CisJICAgICAgIAlmbG9jaygkZmgsIDIpOworCSAgICAgICAJc2VlaygkZmgsIDAsIDApOworCSAgICAgICAJdHJ1bmNhdGUoJGZoLCAwKTsKKyAgICAgICAgfQorCXdoaWxlICggbXkgKCRrZXksICR2YWwpID0gZWFjaCAlaCApIHsKKwkJbXkgKCRwYXNzLCAkZG9tYWluLCAkaXApID0gc3BsaXQoIlx0IiwkdmFsKTsKKwkJaWYgKCBsYyAkQVJHVlswXSBlcSAibGlzdHVzZXJzIiApIHsKKwkJCXByaW50ICJ1c2VyICRrZXksIGhvc3RuYW1lICRkb21haW4sIGlwICRpcFxuIjsKKwkJfSBlbHNlIHsKKwkJCWlmICggZGVmaW5lZCAkaXAgKSB7CisJCQkJcHJpbnQgJGZoICIkaXBcdCRkb21haW5cbiI7CisJCQl9CisJCX0KKwl9CisJaWYgKCBsYyAkQVJHVlswXSBlcSAid3JpdGVob3N0c2ZpbGUiICkgeworCQlmbG9jaygkZmgsIDgpOworCQljbG9zZSgkZmgpOworCQlkbnNtYXNxX3Jlc2Nhbl9jb25maWdzKCk7CisJfQorCXVuZGVmICRYOworCXVudGllICVoOworfSBlbHNpZiAoIGxjICRBUkdWWzBdIGVxICJsaXN0ZW4iICkgeworCWxpc3Rlbl9mb3JfdXBkYXRlcygpOworfQorCitzdWIgbGlzdGVuX2Zvcl91cGRhdGVzIHsKKwlteSAkc29jayA9IElPOjpTb2NrZXQ6OklORVQtPm5ldyhMaXN0ZW4gICAgPT4gNSwKKwkJTG9jYWxBZGRyID0+ICRsaXN0ZW5hZGRyZXNzLCBMb2NhbFBvcnQgPT4gJGxpc3RlbnBvcnQsCisJCVByb3RvICAgICA9PiAndGNwJywgUmV1c2VBZGRyID0+IDEsCisJCU11bHRpSG9tZWQgPT4gMSkgfHwgZGllICJDb3VsZCBub3Qgb3BlbiBsaXN0ZW5pbmcgc29ja2V0OiAkIVxuIjsKKwkkU0lHeydDSExEJ30gPSAnSUdOT1JFJzsKKwl3aGlsZSAoIG15ICRjbGllbnQgPSAkc29jay0+YWNjZXB0KCkgKSB7CisJCW15ICRwID0gZm9yaygpOworCQlpZiAoICRwICE9IDAgKSB7CisJCQluZXh0OworCQl9CisJCSRTSUd7J0NITEQnfSA9ICdERUZBVUxUJzsKKwkJbXkgQGhlYWRlcnM7CisJCW15ICVjZ2k7CisJCXdoaWxlICggPCRjbGllbnQ+ICkgeworCQkJcy8oXHJ8XG4pLy9nOworCQkJbGFzdCBpZiAkXyBlcSAiIjsKKwkJCXB1c2ggQGhlYWRlcnMsICRfOworCQl9CisJCWZvcmVhY2ggbXkgJGhlYWRlciAoQGhlYWRlcnMpIHsKKwkJCWlmICggJGhlYWRlciA9fiAvXkdFVCBcL25pY1wvdXBkYXRlXD8oW15cc10uKykgSFRUUFwvMVwuWzAxXSQvICkgeworCQkJCWZvcmVhY2ggbXkgJGVsZW1lbnQgKHNwbGl0KCcmJywgJDEpKSB7CisJCQkJCSRjZ2l7KHNwbGl0ICc9JywgJGVsZW1lbnQpWzBdfSA9IChzcGxpdCAnPScsICRlbGVtZW50KVsxXTsKKwkJCQl9CisJCQl9IGVsc2lmICggJGhlYWRlciA9fiAvXkF1dGhvcml6YXRpb246IGJhc2ljICguKykkLyApIHsKKwkJCQl1bmxlc3MgKCBkZWZpbmVkICRjZ2l7J2hvc3RuYW1lJ30gKSB7CisJCQkJCXByaW50X2h0dHBfcmVzcG9uc2UoJGNsaWVudCwgdW5kZWYsICJiYWRzeXMiKTsKKwkJCQkJZXhpdCgxKTsKKwkJCQl9CisJCQkJaWYgKCAhZXhpc3RzICRjZ2l7J215aXAnfSApIHsKKwkJCQkJJGNnaXsnbXlpcCd9ID0gJGNsaWVudC0+cGVlcmhvc3QoKTsKKwkJCQl9CisJCQkJbXkgKCR1c2VyLCRwYXNzKSA9IHNwbGl0ICI6IiwgTUlNRTo6QmFzZTY0OjpkZWNvZGUoJDEpOworCQkJCWlmICggYXV0aG9yaXplKCR1c2VyLCAkcGFzcywgJGNnaXsnaG9zdG5hbWUnfSwgJGNnaXsnbXlpcCd9KSA9PSAwICkgeworCQkJCQlwcmludF9odHRwX3Jlc3BvbnNlKCRjbGllbnQsICRjZ2l7J215aXAnfSwgImdvb2QiKTsKKwkJCQkJdXBkYXRlX2RucyhcJWNnaSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJcHJpbnRfaHR0cF9yZXNwb25zZSgkY2xpZW50LCB1bmRlZiwgImJhZGF1dGgiKTsKKwkJCQkJZXhpdCgxKTsKKwkJCQl9CisJCQkJbGFzdDsKKwkJCX0KKwkJfQorCQlleGl0KDApOworCX0KKwlyZXR1cm4oMCk7Cit9CisKK3N1YiBhZGRfYWNjdCB7CisJbXkgKCR1c2VyLCAkcGFzcywgJGhvc3RuYW1lKSA9IEBfOworCW15ICRYID0gdGllIG15ICVoLCAiREJfRmlsZSIsICRhY2NvdW50ZGIsIE9fUkRXUnxPX0NSRUFULCAwNjAwLCAkREJfSEFTSDsKKwkkWC0+cHV0KCR1c2VyLCBqb2luKCJcdCIsICgkcGFzcywgJGhvc3RuYW1lKSkpOworCXVuZGVmICRYOworCXVudGllICVoOworfQorCitzdWIgZGVsX2FjY3QgeworICAgICAgICBteSAoJHVzZXIsICRwYXNzLCAkaG9zdG5hbWUpID0gQF87CisgICAgICAgIG15ICRYID0gdGllIG15ICVoLCAiREJfRmlsZSIsICRhY2NvdW50ZGIsIE9fUkRXUnxPX0NSRUFULCAwNjAwLCAkREJfSEFTSDsKKyAgICAgICAgJFgtPmRlbCgkdXNlcik7CisgICAgICAgIHVuZGVmICRYOworICAgICAgICB1bnRpZSAlaDsKK30KKworCitzdWIgYXV0aG9yaXplIHsKKwlteSAkdXNlciA9IHNoaWZ0OworCW15ICRwYXNzID0gc2hpZnQ7CisJbXkgJGhvc3RuYW1lID0gc2hpZnQ7CisJbXkgJGlwID0gc2hpZnQ7OworCW15ICRYID0gdGllIG15ICVoLCAiREJfRmlsZSIsICRhY2NvdW50ZGIsIE9fUkRXUnxPX0NSRUFULCAwNjAwLCAkREJfSEFTSDsKKwlteSAoJHNwYXNzLCAkc2hvc3QpID0gc3BsaXQoIlx0IiwgJGh7JHVzZXJ9KTsKKwlpZiAoIGRlZmluZWQgJGh7JHVzZXJ9IGFuZCAoJHNwYXNzIGVxICRwYXNzKSBhbmQgKCRzaG9zdCBlcSAkaG9zdG5hbWUpICkgeworCQkkWC0+cHV0KCR1c2VyLCBqb2luKCJcdCIsICRzcGFzcywgJHNob3N0LCAkaXApKTsKKwkJdW5kZWYgJFg7CisJCXVudGllICVoOworCQlyZXR1cm4oMCk7CisJfQorCXVuZGVmICRYOworCXVudGllICVoOworCXJldHVybigxKTsKK30KKworc3ViIHByaW50X2h0dHBfcmVzcG9uc2UgeworCW15ICRzb2NrID0gc2hpZnQ7CisJbXkgJGlwID0gc2hpZnQ7CisJbXkgJHJlc3BvbnNlID0gc2hpZnQ7CisJcHJpbnQgJHNvY2sgIkhUVFAvMS4wIDIwMCBPS1xuIjsKKwlteSBAdG1wID0gc3BsaXQgL1xzKy8sIHNjYWxhciBnbXRpbWUoKTsKKwlwcmludCAkc29jayAiRGF0ZTogJHRtcFswXSwgJHRtcFsyXSAkdG1wWzFdICR0bXBbNF0gJHRtcFszXSBHTVRcbiI7CisJcHJpbnQgJHNvY2sgIlNlcnZlcjogUGV0ZXIncyBGYWtlIER5bkROUy5vcmcgU2VydmVyLzEuMFxuIjsKKwlwcmludCAkc29jayAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTFcbiI7CisJcHJpbnQgJHNvY2sgIkNvbm5lY3Rpb246IGNsb3NlXG4iOworCXByaW50ICRzb2NrICJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuIjsKKwlwcmludCAkc29jayAiXG4iOworCSNwcmludCAkc29jayAiMTJcbiI7ICMgdGhpcyB3YXMgcGFydCBvZiB0aGUgZHluZG5zIHJlc3BvbnNlIGJ1dCBpJ20gbm90IHN1cmUgd2hhdCBpdCBpcworCXByaW50ICRzb2NrICIkcmVzcG9uc2UiLCBkZWZpbmVkKCRpcCk/ICIgJGlwIiA6ICIiIC4gIlxuIjsKK30KKworc3ViIHVwZGF0ZV9kbnMgeworCW15ICRoYXNocmVmID0gc2hpZnQ7CisJbXkgQHJlY29yZHM7CisJbXkgJGZvdW5kID0gMDsKKwkjIHVwZGF0ZSB0aGUgYWRkbi1ob3N0cyBmaWxlCisJb3BlbihGSUxFLCAiKzwkcmVjb3JkZmlsZSIpIHx8IGRpZSAiQ291bGRuJ3Qgb3BlbiByZWNvcmRmaWxlIFwiJHJlY29yZGZpbGVcIjogJCFcbiI7CisJZmxvY2soRklMRSwgMik7CisJd2hpbGUgKCA8RklMRT4gKSB7CisJCWlmICggL14oXGQrXC5cZCtcLlxkK1wuXGQrKVxzKyQkaGFzaHJlZnsnaG9zdG5hbWUnfVxuJC9zaSApIHsKKwkJCWlmICggJDEgbmUgJCRoYXNocmVmeydteWlwJ30gKSB7CisJCQkJcHVzaCBAcmVjb3JkcywgIiQkaGFzaHJlZnsnbXlpcCd9XHQkJGhhc2hyZWZ7J2hvc3RuYW1lJ31cbiI7CisJCQkJJGZvdW5kID0gMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXB1c2ggQHJlY29yZHMsICRfOworCQl9CisJfQorCXVubGVzcyAoICRmb3VuZCApIHsKKwkJcHVzaCBAcmVjb3JkcywgIiQkaGFzaHJlZnsnbXlpcCd9XHQkJGhhc2hyZWZ7J2hvc3RuYW1lJ31cbiI7CisJfQorCXN5c3NlZWsoRklMRSwgMCwgMCk7CisJdHJ1bmNhdGUoRklMRSwgMCk7CisJc3lzd3JpdGUoRklMRSwgam9pbigiIiwgQHJlY29yZHMpKTsKKwlmbG9jayhGSUxFLCA4KTsKKwljbG9zZShGSUxFKTsKKwlkbnNtYXNxX3Jlc2Nhbl9jb25maWdzKCk7CisJcmV0dXJuKDApOworfQorCitzdWIgZG5zbWFzcV9yZXNjYW5fY29uZmlncyB7CisJIyBzZW5kIHRoZSBIVVAgc2lnbmFsIHRvIGRuc21hc3EKKwlpZiAoIC1yICRkbnNtYXNxcGlkZmlsZSApIHsKKwkJb3BlbihQSUQsIjwkZG5zbWFzcXBpZGZpbGUiKSB8fCBkaWUgIkNvdWxkIG5vdCBvcGVuIFBJRCBmaWxlIFwiJGRuc21hc3FwaWRmaWxlXCI6ICQhXG4iOworCQlteSAkcGlkID0gPFBJRD47CisJCWNsb3NlKFBJRCk7CisJCWNob21wICRwaWQ7CisJCWlmICgga2lsbCgwLCAkcGlkKSApIHsKKwkJCWtpbGwoMSwgJHBpZCk7CisJCX0gZWxzZSB7CisJCQlnb3RvIExPT0tGT1JETlNNQVNROworCQl9CisJfSBlbHNlIHsKKwkJTE9PS0ZPUkROU01BU1E6CisJCW9wZW5kaXIoRElSLCIvcHJvYyIpIHx8IGRpZSAiQ291bGRuJ3Qgb3BlbmRpciAvcHJvYzogJCFcbiI7CisJCW15IEBkaXJzID0gZ3JlcCgvXlxkKyQvLCByZWFkZGlyKERJUikpOworCQljbG9zZWRpcihESVIpOworCQlmb3JlYWNoIG15ICRwcm9jZXNzIChAZGlycykgeworCQkJaWYgKCBvcGVuKEZJTEUsIjwvcHJvYy8kcHJvY2Vzcy9jbWRsaW5lIikgKSB7CisJCQkJbXkgJGNtZGxpbmUgPSA8RklMRT47CisJCQkJY2xvc2UoRklMRSk7CisJCQkJaWYgKCAoc3BsaXQoL1wwLywkY21kbGluZSkpWzBdID1+IC9kbnNtYXNxLyApIHsKKwkJCQkJa2lsbCgxLCAkcHJvY2Vzcyk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCXJldHVybigwKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvbGVhc2UtYWNjZXNzL1JFQURNRSBiL2NvbnRyaWIvbGVhc2UtYWNjZXNzL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzY2YmRmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9sZWFzZS1hY2Nlc3MvUkVBRE1FCkBAIC0wLDAgKzEsMjAgQEAKK0hlbGxvLAorCitGb3Igc29tZSBzcGVjaWZpYyBhcHBsaWNhdGlvbiBJIG5lZWRlZCB0byBkZW55IGFjY2VzcyB0byBhIE1BQyBhZGRyZXNzCit0byBhIGxlYXNlLiBGb3IgdGhpcyByZWFzb24gSSBtb2RpZmllZCB0aGUgZGhjcC1zY3JpcHQgYmVoYXZpb3IgYW5kIGlzCitjYWxsZWQgd2l0aCBhbiBleHRyYSBwYXJhbWV0ZXIgImFjY2VzcyIgb25jZSBhIGRoY3AgcmVxdWVzdCBvciBkaXNjb3ZlcgoraXMgcmVjZWl2ZWQuIEluIHRoYXQgY2FzZSBpZiB0aGUgZXhpdCBjb2RlIG9mIHRoZSBzY3JpcHQgaXMgemVybywKK2Ruc21hc3EgY29udGludWVzIG5vcm1hbGx5LCBhbmQgaWYgbm9uLXplcm8gdGhlIHBhY2tldCBpcyBpZ25vcmVkLgorCitUaGlzIHdhcyBub3QgYWRkZWQgYXMgYSBzZWN1cml0eSBmZWF0dXJlIGJ1dCBhcyBhIG1lYW4gdG8gaGFuZGxlCitkaWZmZXJlbnRseSBzb21lIGFkZHJlc3Nlcy4gSXQgaXMgYWxzbyBxdWl0ZSBpbnRydXNpdmUgc2luY2UgaXQgcmVxdWlyZXMKK2NoYW5nZXMgaW4gc2V2ZXJhbCBvdGhlciBzdWJzeXN0ZW1zLgorCitJdCBhdHRhY2ggdGhlIHBhdGNoIGluIGNhc2Ugc29tZW9uZSBpcyBpbnRlcmVzdGVkLgorCityZWdhcmRzLAorTmlrb3MKKworbm1hdkBnZW5uZXRzYS5jb20KKworCmRpZmYgLS1naXQgYS9jb250cmliL2xlYXNlLWFjY2Vzcy9sZWFzZS5hY2Nlc3MucGF0Y2ggYi9jb250cmliL2xlYXNlLWFjY2Vzcy9sZWFzZS5hY2Nlc3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ3NmUyNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbGVhc2UtYWNjZXNzL2xlYXNlLmFjY2Vzcy5wYXRjaApAQCAtMCwwICsxLDU3OCBAQAorSW5kZXg6IHNyYy9kbnNtYXNxLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzcmMvZG5zbWFzcS5jCShyZXZpc2lvbiA2OTYpCisrKysgc3JjL2Ruc21hc3EuYwkocmV2aXNpb24gODIxKQorQEAgLTU5LDcgKzU5LDYgQEAKKyBzdGF0aWMgaW50IHNldF9kbnNfbGlzdGVuZXJzKHRpbWVfdCBub3csIGZkX3NldCAqc2V0LCBpbnQgKm1heGZkcCk7Cisgc3RhdGljIHZvaWQgY2hlY2tfZG5zX2xpc3RlbmVycyhmZF9zZXQgKnNldCwgdGltZV90IG5vdyk7Cisgc3RhdGljIHZvaWQgc2lnX2hhbmRsZXIoaW50IHNpZyk7Cistc3RhdGljIHZvaWQgYXN5bmNfZXZlbnQoaW50IHBpcGUsIHRpbWVfdCBub3cpOworIHN0YXRpYyB2b2lkIGZhdGFsX2V2ZW50KHN0cnVjdCBldmVudF9kZXNjICpldik7Cisgc3RhdGljIHZvaWQgcG9sbF9yZXNvbHYodm9pZCk7CisgCitAQCAtMjc1LDcgKzI3NCw3IEBACisgICBwaXBlcmVhZCA9IHBpcGVmZFswXTsKKyAgIHBpcGV3cml0ZSA9IHBpcGVmZFsxXTsKKyAgIC8qIHByaW1lIHRoZSBwaXBlIHRvIGxvYWQgc3R1ZmYgZmlyc3QgdGltZS4gKi8KKy0gIHNlbmRfZXZlbnQocGlwZXdyaXRlLCBFVkVOVF9SRUxPQUQsIDApOyAKKysgIHNlbmRfZXZlbnQocGlwZXdyaXRlLCBFVkVOVF9SRUxPQUQsIDAsIDApOyAKKyAKKyAgIGVycl9waXBlWzFdID0gLTE7CisgICAKK0BAIC0zNDAsNyArMzM5LDcgQEAKKyAJICAgIH0KKyAJICBlbHNlIGlmIChnZXR1aWQoKSA9PSAwKQorIAkgICAgeworLQkgICAgICBzZW5kX2V2ZW50KGVycl9waXBlWzFdLCBFVkVOVF9QSURGSUxFLCBlcnJubyk7CisrCSAgICAgIHNlbmRfZXZlbnQoZXJyX3BpcGVbMV0sIEVWRU5UX1BJREZJTEUsIGVycm5vLCAwKTsKKyAJICAgICAgX2V4aXQoMCk7CisgCSAgICB9CisgCX0KK0BAIC0zNzIsNyArMzcxLDcgQEAKKyAJICAoc2V0Z3JvdXBzKDAsICZkdW1teSkgPT0gLTEgfHwKKyAJICAgc2V0Z2lkKGdwLT5ncl9naWQpID09IC0xKSkKKyAJeworLQkgIHNlbmRfZXZlbnQoZXJyX3BpcGVbMV0sIEVWRU5UX0dST1VQX0VSUiwgZXJybm8pOworKwkgIHNlbmRfZXZlbnQoZXJyX3BpcGVbMV0sIEVWRU5UX0dST1VQX0VSUiwgZXJybm8sIDApOworIAkgIF9leGl0KDApOworIAl9CisgICAKK0BAIC00MTUsMTQgKzQxNCwxNCBAQAorIAorIAkgIGlmIChiYWRfY2FwYWJpbGl0aWVzICE9IDApCisgCSAgICB7CistCSAgICAgIHNlbmRfZXZlbnQoZXJyX3BpcGVbMV0sIEVWRU5UX0NBUF9FUlIsIGJhZF9jYXBhYmlsaXRpZXMpOworKwkgICAgICBzZW5kX2V2ZW50KGVycl9waXBlWzFdLCBFVkVOVF9DQVBfRVJSLCBiYWRfY2FwYWJpbGl0aWVzLCAwKTsKKyAJICAgICAgX2V4aXQoMCk7CisgCSAgICB9CisgCSAgCisgCSAgLyogZmluYWxseSBkcm9wIHJvb3QgKi8KKyAJICBpZiAoc2V0dWlkKGVudF9wdy0+cHdfdWlkKSA9PSAtMSkKKyAJICAgIHsKKy0JICAgICAgc2VuZF9ldmVudChlcnJfcGlwZVsxXSwgRVZFTlRfVVNFUl9FUlIsIGVycm5vKTsKKysJICAgICAgc2VuZF9ldmVudChlcnJfcGlwZVsxXSwgRVZFTlRfVVNFUl9FUlIsIGVycm5vLCAwKTsKKyAJICAgICAgX2V4aXQoMCk7CisgCSAgICB9ICAgICAKKyAKK0BAIC00MzQsNyArNDMzLDcgQEAKKyAJICAvKiBsb3NlIHRoZSBzZXR1aWQgYW5kIHNldGdpZCBjYXBiaWxpdGllcyAqLworIAkgIGlmIChjYXBzZXQoaGRyLCBkYXRhKSA9PSAtMSkKKyAJICAgIHsKKy0JICAgICAgc2VuZF9ldmVudChlcnJfcGlwZVsxXSwgRVZFTlRfQ0FQX0VSUiwgZXJybm8pOworKwkgICAgICBzZW5kX2V2ZW50KGVycl9waXBlWzFdLCBFVkVOVF9DQVBfRVJSLCBlcnJubywgMCk7CisgCSAgICAgIF9leGl0KDApOworIAkgICAgfQorICNlbmRpZgorQEAgLTY0Nyw3ICs2NDYsNyBAQAorIAl9CisgICAgICAgCisgICAgICAgaWYgKEZEX0lTU0VUKHBpcGVyZWFkLCAmcnNldCkpCistCWFzeW5jX2V2ZW50KHBpcGVyZWFkLCBub3cpOworKwlhc3luY19ldmVudChwaXBlcmVhZCwgbm93LCBOVUxMLCAwKTsKKyAgICAgICAKKyAjaWZkZWYgSEFWRV9MSU5VWF9ORVRXT1JLCisgICAgICAgaWYgKEZEX0lTU0VUKGRhZW1vbi0+bmV0bGlua2ZkLCAmcnNldCkpCitAQCAtNjc0LDcgKzY3Myw3IEBACisgI2VuZGlmICAgICAgCisgCisgICAgICAgaWYgKGRhZW1vbi0+ZGhjcCAmJiBGRF9JU1NFVChkYWVtb24tPmRoY3BmZCwgJnJzZXQpKQorLQlkaGNwX3BhY2tldChub3cpOworKwlkaGNwX3BhY2tldChwaXBlcmVhZCwgbm93KTsKKyAKKyAjaWZuZGVmIE5PX0ZPUksKKyAgICAgICBpZiAoZGFlbW9uLT5oZWxwZXJmZCAhPSAtMSAmJiBGRF9JU1NFVChkYWVtb24tPmhlbHBlcmZkLCAmd3NldCkpCitAQCAtNzE5LDE3ICs3MTgsMTggQEAKKyAgICAgICBlbHNlCisgCXJldHVybjsKKyAKKy0gICAgICBzZW5kX2V2ZW50KHBpcGV3cml0ZSwgZXZlbnQsIDApOyAKKysgICAgICBzZW5kX2V2ZW50KHBpcGV3cml0ZSwgZXZlbnQsIDAsIDApOyAKKyAgICAgICBlcnJubyA9IGVycnNhdmU7CisgICAgIH0KKyB9CisgCistdm9pZCBzZW5kX2V2ZW50KGludCBmZCwgaW50IGV2ZW50LCBpbnQgZGF0YSkKKyt2b2lkIHNlbmRfZXZlbnQoaW50IGZkLCBpbnQgZXZlbnQsIGludCBkYXRhLCBpbnQgcHJpdikKKyB7CisgICBzdHJ1Y3QgZXZlbnRfZGVzYyBldjsKKyAgIAorICAgZXYuZXZlbnQgPSBldmVudDsKKyAgIGV2LmRhdGEgPSBkYXRhOworKyAgZXYucHJpdiA9IHByaXY7CisgICAKKyAgIC8qIGVycm9yIHBpcGUsIGRlYnVnIG1vZGUuICovCisgICBpZiAoZmQgPT0gLTEpCitAQCAtNzcxLDE0ICs3NzEsMTcgQEAKKyAgICAgICBkaWUoXygiY2Fubm90IG9wZW4gJXM6ICVzIiksIGRhZW1vbi0+bG9nX2ZpbGUgPyBkYWVtb24tPmxvZ19maWxlIDogImxvZyIsIEVDX0ZJTEUpOworICAgICB9CisgfQkKKy0gICAgICAKKy1zdGF0aWMgdm9pZCBhc3luY19ldmVudChpbnQgcGlwZSwgdGltZV90IG5vdykKKysKKysvKiByZXR1cm5zIHRoZSBwcml2YXRlIGRhdGEgb2YgdGhlIGV2ZW50CisrICovCisraW50IGFzeW5jX2V2ZW50KGludCBwaXBlLCB0aW1lX3Qgbm93LCBzdHJ1Y3QgZXZlbnRfZGVzYyogZXZlbnQsIHVuc2lnbmVkIGludCBzZWNzKQorIHsKKyAgIHBpZF90IHA7CisgICBzdHJ1Y3QgZXZlbnRfZGVzYyBldjsKKyAgIGludCBpOworIAorLSAgaWYgKHJlYWRfd3JpdGUocGlwZSwgKHVuc2lnbmVkIGNoYXIgKikmZXYsIHNpemVvZihldiksIDEpKQorKyAgaWYgKHJlYWRfdGltZW91dChwaXBlLCAodW5zaWduZWQgY2hhciAqKSZldiwgc2l6ZW9mKGV2KSwgbm93LCBzZWNzKSA+IDApIAorKyAgICB7CisgICAgIHN3aXRjaCAoZXYuZXZlbnQpCisgICAgICAgeworICAgICAgIGNhc2UgRVZFTlRfUkVMT0FEOgorQEAgLTg3Miw2ICs4NzUsMTQgQEAKKyAJZmx1c2hfbG9nKCk7CisgCWV4aXQoRUNfR09PRCk7CisgICAgICAgfQorKyAgICB9CisrICBlbHNlCisrICAgIHJldHVybiAtMTsgLyogdGltZW91dCAqLworKworKyAgaWYgKGV2ZW50KQorKyAgICBtZW1jcHkoIGV2ZW50LCAmZXYsIHNpemVvZihldikpOworKyAgICAKKysgIHJldHVybiAwOworIH0KKyAKKyBzdGF0aWMgdm9pZCBwb2xsX3Jlc29sdigpCitJbmRleDogc3JjL2NvbmZpZy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3JjL2NvbmZpZy5oCShyZXZpc2lvbiA2OTYpCisrKysgc3JjL2NvbmZpZy5oCShyZXZpc2lvbiA4MjEpCitAQCAtNTEsNiArNTEsOCBAQAorICNkZWZpbmUgVEZUUF9NQVhfQ09OTkVDVElPTlMgNTAgLyogbWF4IHNpbXVsdGFuZW91cyBjb25uZWN0aW9ucyAqLworICNkZWZpbmUgTE9HX01BWCA1IC8qIGxvZy1xdWV1ZSBsZW5ndGggKi8KKyAjZGVmaW5lIFJBTkRGSUxFICIvZGV2L3VyYW5kb20iCisrI2RlZmluZSBTQ1JJUFRfVElNRU9VVCA2CisrI2RlZmluZSBMRUFTRV9DSEVDS19USU1FT1VUIDEwCisgCisgLyogREJVUyBpbnRlcmZhY2Ugc3BlY2lmaWNzICovCisgI2RlZmluZSBETlNNQVNRX1NFUlZJQ0UgInVrLm9yZy50aGVrZWxsZXlzLmRuc21hc3EiCitJbmRleDogc3JjL2Ruc21hc3EuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNyYy9kbnNtYXNxLmgJKHJldmlzaW9uIDY5NikKKysrKyBzcmMvZG5zbWFzcS5oCShyZXZpc2lvbiA4MjEpCitAQCAtMTE2LDYgKzExNiw3IEBACisgLyogQXN5bmMgZXZlbnQgcXVldWUgKi8KKyBzdHJ1Y3QgZXZlbnRfZGVzYyB7CisgICBpbnQgZXZlbnQsIGRhdGE7CisrICB1bnNpZ25lZCBpbnQgcHJpdjsKKyB9OworIAorICNkZWZpbmUgRVZFTlRfUkVMT0FEICAgIDEKK0BAIC0zOTAsNiArMzkxLDcgQEAKKyAjZGVmaW5lIEFDVElPTl9PTERfSE9TVE5BTUUgIDIKKyAjZGVmaW5lIEFDVElPTl9PTEQgICAgICAgICAgIDMKKyAjZGVmaW5lIEFDVElPTl9BREQgICAgICAgICAgIDQKKysjZGVmaW5lIEFDVElPTl9BQ0NFU1MgICAgICAgIDUKKyAKKyAjZGVmaW5lIERIQ1BfQ0hBRERSX01BWCAxNgorIAorQEAgLTcwOSw2ICs3MTEsNyBAQAorIGNoYXIgKnByaW50X21hYyhjaGFyICpidWZmLCB1bnNpZ25lZCBjaGFyICptYWMsIGludCBsZW4pOworIHZvaWQgYnVtcF9tYXhmZChpbnQgZmQsIGludCAqbWF4KTsKKyBpbnQgcmVhZF93cml0ZShpbnQgZmQsIHVuc2lnbmVkIGNoYXIgKnBhY2tldCwgaW50IHNpemUsIGludCBydyk7CisraW50IHJlYWRfdGltZW91dChpbnQgZmQsIHVuc2lnbmVkIGNoYXIgKnBhY2tldCwgaW50IHNpemUsIHRpbWVfdCBub3csIGludCBzZWNzKTsKKyAKKyAvKiBsb2cuYyAqLworIHZvaWQgZGllKGNoYXIgKm1lc3NhZ2UsIGNoYXIgKmFyZzEsIGludCBleGl0X2NvZGUpOworQEAgLTc0OCw3ICs3NTEsNyBAQAorIAorIC8qIGRoY3AuYyAqLworIHZvaWQgZGhjcF9pbml0KHZvaWQpOworLXZvaWQgZGhjcF9wYWNrZXQodGltZV90IG5vdyk7Cisrdm9pZCBkaGNwX3BhY2tldChpbnQgcGlwZXJlYWQsIHRpbWVfdCBub3cpOworIAorIHN0cnVjdCBkaGNwX2NvbnRleHQgKmFkZHJlc3NfYXZhaWxhYmxlKHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIAorIAkJCQkgICAgICAgc3RydWN0IGluX2FkZHIgYWRkciwKK0BAIC03OTIsMTQgKzc5NSwxNiBAQAorIHZvaWQgcmVydW5fc2NyaXB0cyh2b2lkKTsKKyAKKyAvKiByZmMyMTMxLmMgKi8KKy1zaXplX3QgZGhjcF9yZXBseShzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCBjaGFyICppZmFjZV9uYW1lLCBpbnQgaW50X2luZGV4LAorK3NpemVfdCBkaGNwX3JlcGx5KGludCBwaXBlZmQsIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIGNoYXIgKmlmYWNlX25hbWUsIGludCBpbnRfaW5kZXgsCisgCQkgIHNpemVfdCBzeiwgdGltZV90IG5vdywgaW50IHVuaWNhc3RfZGVzdCwgaW50ICppc19pbmZvcm0pOworIAorIC8qIGRuc21hc3EuYyAqLworIGludCBtYWtlX2ljbXBfc29jayh2b2lkKTsKKyBpbnQgaWNtcF9waW5nKHN0cnVjdCBpbl9hZGRyIGFkZHIpOworLXZvaWQgc2VuZF9ldmVudChpbnQgZmQsIGludCBldmVudCwgaW50IGRhdGEpOworK3ZvaWQgc2VuZF9ldmVudChpbnQgZmQsIGludCBldmVudCwgaW50IGRhdGEsIGludCBwcml2KTsKKyB2b2lkIGNsZWFyX2NhY2hlX2FuZF9yZWxvYWQodGltZV90IG5vdyk7CisraW50IHdhaXRfZm9yX2NoaWxkKGludCBwaXBlKTsKKytpbnQgYXN5bmNfZXZlbnQoaW50IHBpcGUsIHRpbWVfdCBub3csIHN0cnVjdCBldmVudF9kZXNjKiwgdW5zaWduZWQgaW50IHRpbWVvdXQpOworIAorIC8qIGlzYy5jICovCisgI2lmZGVmIEhBVkVfSVNDX1JFQURFUgorQEAgLTgzMiw5ICs4MzcsOSBAQAorIC8qIGhlbHBlci5jICovCisgI2lmbmRlZiBOT19GT1JLCisgaW50IGNyZWF0ZV9oZWxwZXIoaW50IGV2ZW50X2ZkLCBpbnQgZXJyX2ZkLCB1aWRfdCB1aWQsIGdpZF90IGdpZCwgbG9uZyBtYXhfZmQpOworLXZvaWQgaGVscGVyX3dyaXRlKHZvaWQpOworK2ludCBoZWxwZXJfd3JpdGUodm9pZCk7Cisgdm9pZCBxdWV1ZV9zY3JpcHQoaW50IGFjdGlvbiwgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlLCAKKy0JCSAgY2hhciAqaG9zdG5hbWUsIHRpbWVfdCBub3cpOworKwkJICBjaGFyICpob3N0bmFtZSwgdGltZV90IG5vdywgdW5zaWduZWQgaW50IHVpZCk7CisgaW50IGhlbHBlcl9idWZfZW1wdHkodm9pZCk7CisgI2VuZGlmCisgCitJbmRleDogc3JjL3V0aWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNyYy91dGlsLmMJKHJldmlzaW9uIDY5NikKKysrKyBzcmMvdXRpbC5jCShyZXZpc2lvbiA4MjEpCitAQCAtNDQ0LDMgKzQ0NCwzOCBAQAorICAgcmV0dXJuIDE7CisgfQorIAorK2ludCByZWFkX3RpbWVvdXQoaW50IGZkLCB1bnNpZ25lZCBjaGFyICpwYWNrZXQsIGludCBzaXplLCB0aW1lX3Qgbm93LCBpbnQgc2VjcykKKyt7CisrICBzc2l6ZV90IG4sIGRvbmU7CisrICB0aW1lX3QgZXhwaXJlOworKyAgCisrICBleHBpcmUgPSBub3cgKyBzZWNzOworKyAgCisrICBmb3IgKGRvbmUgPSAwOyBkb25lIDwgc2l6ZTsgZG9uZSArPSBuKQorKyAgICB7CisrICAgIHJldHJ5OgorKyAgICAgIGlmIChzZWNzID4gMCkgYWxhcm0oc2Vjcyk7CisrICAgICAgbiA9IHJlYWQoZmQsICZwYWNrZXRbZG9uZV0sIChzaXplX3QpKHNpemUgLSBkb25lKSk7CisrCisrICAgICAgaWYgKG4gPT0gMCkKKysgICAgICAgIHJldHVybiAwOworKyAgICAgIGVsc2UgaWYgKG4gPT0gLTEpCisrICAgICAgICB7CisrICAgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikgeworKyAgICAgICAgICAgIG15X3N5c2xvZyhMT0dfSU5GTywgXygicmVhZCB0aW1lZCBvdXQgKGVycm5vICVkKSIpLCBlcnJubyk7CisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICAgIH0KKysKKysgICAgICAgICAgaWYgKHJldHJ5X3NlbmQoKSB8fCBlcnJubyA9PSBFTk9NRU0gfHwgZXJybm8gPT0gRU5PQlVGUyB8fCBlcnJubyA9PSBFQUdBSU4pCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgaWYgKHNlY3MgPT0gMCB8fCAoc2VjcyA+IDAgJiYgZG5zbWFzcV90aW1lKCkgPCBleHBpcmUpKQorKyAgICAgICAgICAgICAgICBnb3RvIHJldHJ5OworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCJlcnJvciBpbiByZWFkICh0aW1lb3V0ICVkLCBlcnJubyAlZCkiKSwgc2VjcywgZXJybm8pOworKyAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIH0KKysgICAgfQorKyAgcmV0dXJuIDE7CisrfQorKworSW5kZXg6IHNyYy9kaGNwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzcmMvZGhjcC5jCShyZXZpc2lvbiA2OTYpCisrKysgc3JjL2RoY3AuYwkocmV2aXNpb24gODIxKQorQEAgLTEwMyw3ICsxMDMsNyBAQAorICAgZGFlbW9uLT5kaGNwX3BhY2tldC5pb3ZfYmFzZSA9IHNhZmVfbWFsbG9jKGRhZW1vbi0+ZGhjcF9wYWNrZXQuaW92X2xlbik7CisgfQorICAgCistdm9pZCBkaGNwX3BhY2tldCh0aW1lX3Qgbm93KQorK3ZvaWQgZGhjcF9wYWNrZXQoaW50IHBpcGVyZWFkLCB0aW1lX3Qgbm93KQorIHsKKyAgIHN0cnVjdCBkaGNwX3BhY2tldCAqbWVzczsKKyAgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQ7CitAQCAtMjM5LDcgKzIzOSw4IEBACisgICBpZiAoIWlmYWNlX2VudW1lcmF0ZSgmcGFybSwgY29tcGxldGVfY29udGV4dCwgTlVMTCkpCisgICAgIHJldHVybjsKKyAgIGxlYXNlX3BydW5lKE5VTEwsIG5vdyk7IC8qIGxvc2UgYW55IGV4cGlyZWQgbGVhc2VzICovCistICBpb3YuaW92X2xlbiA9IGRoY3BfcmVwbHkocGFybS5jdXJyZW50LCBpZnIuaWZyX25hbWUsIGlmYWNlX2luZGV4LCAoc2l6ZV90KXN6LCAKKysKKysgIGlvdi5pb3ZfbGVuID0gZGhjcF9yZXBseShwaXBlcmVhZCwgcGFybS5jdXJyZW50LCBpZnIuaWZyX25hbWUsIGlmYWNlX2luZGV4LCAoc2l6ZV90KXN6LCAKKyAJCQkgICBub3csIHVuaWNhc3RfZGVzdCwgJmlzX2luZm9ybSk7CisgICBsZWFzZV91cGRhdGVfZmlsZShub3cpOworICAgbGVhc2VfdXBkYXRlX2RucygpOworSW5kZXg6IHNyYy9oZWxwZXIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNyYy9oZWxwZXIuYwkocmV2aXNpb24gNjk2KQorKysrIHNyYy9oZWxwZXIuYwkocmV2aXNpb24gODIxKQorQEAgLTQ1LDYgKzQ1LDcgQEAKKyAjZW5kaWYKKyAgIHVuc2lnbmVkIGNoYXIgaHdhZGRyW0RIQ1BfQ0hBRERSX01BWF07CisgICBjaGFyIGludGVyZmFjZVtJRl9OQU1FU0laRV07CisrICB1bnNpZ25lZCBpbnQgdWlkOworIH07CisgCisgc3RhdGljIHN0cnVjdCBzY3JpcHRfZGF0YSAqYnVmID0gTlVMTDsKK0BAIC02MCw3ICs2MSw3IEBACisgICAgICB0aGVuIGZvcmsgb3VyIHByb2Nlc3MuICovCisgICBpZiAocGlwZShwaXBlZmQpID09IC0xIHx8ICFmaXhfZmQocGlwZWZkWzFdKSB8fCAocGlkID0gZm9yaygpKSA9PSAtMSkKKyAgICAgeworLSAgICAgIHNlbmRfZXZlbnQoZXJyX2ZkLCBFVkVOVF9QSVBFX0VSUiwgZXJybm8pOworKyAgICAgIHNlbmRfZXZlbnQoZXJyX2ZkLCBFVkVOVF9QSVBFX0VSUiwgZXJybm8sIDApOworICAgICAgIF9leGl0KDApOworICAgICB9CisgCitAQCAtODcsMTMgKzg4LDEzIEBACisgCXsKKyAJICBpZiAoZGFlbW9uLT5vcHRpb25zICYgT1BUX05PX0ZPUkspCisgCSAgICAvKiBzZW5kIGVycm9yIHRvIGRhZW1vbiBwcm9jZXNzIGlmIG5vLWZvcmsgKi8KKy0JICAgIHNlbmRfZXZlbnQoZXZlbnRfZmQsIEVWRU5UX0hVU0VSX0VSUiwgZXJybm8pOworKwkgICAgc2VuZF9ldmVudChldmVudF9mZCwgRVZFTlRfSFVTRVJfRVJSLCBlcnJubywgMCk7CisgCSAgZWxzZQorIAkgICAgeworIAkgICAgICAvKiBraWxsIGRhZW1vbiAqLworLQkgICAgICBzZW5kX2V2ZW50KGV2ZW50X2ZkLCBFVkVOVF9ESUUsIDApOworKwkgICAgICBzZW5kX2V2ZW50KGV2ZW50X2ZkLCBFVkVOVF9ESUUsIDAsIDApOworIAkgICAgICAvKiByZXR1cm4gZXJyb3IgKi8KKy0JICAgICAgc2VuZF9ldmVudChlcnJfZmQsIEVWRU5UX0hVU0VSX0VSUiwgZXJybm8pOzsKKysJICAgICAgc2VuZF9ldmVudChlcnJfZmQsIEVWRU5UX0hVU0VSX0VSUiwgZXJybm8sIDApOworIAkgICAgfQorIAkgIF9leGl0KDApOworIAl9CitAQCAtMTIyLDYgKzEyMyw4IEBACisgCWFjdGlvbl9zdHIgPSAiZGVsIjsKKyAgICAgICBlbHNlIGlmIChkYXRhLmFjdGlvbiA9PSBBQ1RJT05fQUREKQorIAlhY3Rpb25fc3RyID0gImFkZCI7CisrICAgICAgZWxzZSBpZiAoZGF0YS5hY3Rpb24gPT0gQUNUSU9OX0FDQ0VTUykKKysJYWN0aW9uX3N0ciA9ICJhY2Nlc3MiOworICAgICAgIGVsc2UgaWYgKGRhdGEuYWN0aW9uID09IEFDVElPTl9PTEQgfHwgZGF0YS5hY3Rpb24gPT0gQUNUSU9OX09MRF9IT1NUTkFNRSkKKyAJYWN0aW9uX3N0ciA9ICJvbGQiOworICAgICAgIGVsc2UKK0BAIC0xNzgsOSArMTgxLDExIEBACisgCQl7CisgCQkgIC8qIE9uIGVycm9yIHNlbmQgZXZlbnQgYmFjayB0byBtYWluIHByb2Nlc3MgZm9yIGxvZ2dpbmcgKi8KKyAJCSAgaWYgKFdJRlNJR05BTEVEKHN0YXR1cykpCistCQkgICAgc2VuZF9ldmVudChldmVudF9mZCwgRVZFTlRfS0lMTEVELCBXVEVSTVNJRyhzdGF0dXMpKTsKKy0JCSAgZWxzZSBpZiAoV0lGRVhJVEVEKHN0YXR1cykgJiYgV0VYSVRTVEFUVVMoc3RhdHVzKSAhPSAwKQorLQkJICAgIHNlbmRfZXZlbnQoZXZlbnRfZmQsIEVWRU5UX0VYSVRFRCwgV0VYSVRTVEFUVVMoc3RhdHVzKSk7CisrCQkgICAgc2VuZF9ldmVudChldmVudF9mZCwgRVZFTlRfS0lMTEVELCBXVEVSTVNJRyhzdGF0dXMpLCBkYXRhLnVpZCk7CisrCQkgIGVsc2UgaWYgKFdJRkVYSVRFRChzdGF0dXMpKQorKwkJICAgIHNlbmRfZXZlbnQoZXZlbnRfZmQsIEVWRU5UX0VYSVRFRCwgV0VYSVRTVEFUVVMoc3RhdHVzKSwgZGF0YS51aWQpOworKyAgICAgICAgICAgICAgICAgIGVsc2UKKysJCSAgICBzZW5kX2V2ZW50KGV2ZW50X2ZkLCBFVkVOVF9FWElURUQsIC0xLCBkYXRhLnVpZCk7CisgCQkgIGJyZWFrOworIAkJfQorIAkgICAgICAKK0BAIC0yNjMsNyArMjY4LDcgQEAKKyAJICBlcnIgPSBlcnJubzsKKyAJfQorICAgICAgIC8qIGZhaWxlZCwgc2VuZCBldmVudCBzbyB0aGUgbWFpbiBwcm9jZXNzIGxvZ3MgdGhlIHByb2JsZW0gKi8KKy0gICAgICBzZW5kX2V2ZW50KGV2ZW50X2ZkLCBFVkVOVF9FWEVDX0VSUiwgZXJyKTsKKysgICAgICBzZW5kX2V2ZW50KGV2ZW50X2ZkLCBFVkVOVF9FWEVDX0VSUiwgZXJyLCBkYXRhLnVpZCk7CisgICAgICAgX2V4aXQoMCk7IAorICAgICB9CisgfQorQEAgLTI5NSw3ICszMDAsNyBAQAorIH0KKyAgCisgLyogcGFjayB1cCBsZWFzZSBkYXRhIGludG8gYSBidWZmZXIgKi8gICAgCistdm9pZCBxdWV1ZV9zY3JpcHQoaW50IGFjdGlvbiwgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlLCBjaGFyICpob3N0bmFtZSwgdGltZV90IG5vdykKKyt2b2lkIHF1ZXVlX3NjcmlwdChpbnQgYWN0aW9uLCBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UsIGNoYXIgKmhvc3RuYW1lLCB0aW1lX3Qgbm93LCB1bnNpZ25lZCBpbnQgdWlkKQorIHsKKyAgIHVuc2lnbmVkIGNoYXIgKnA7CisgICBzaXplX3Qgc2l6ZTsKK0BAIC0zMzIsNiArMzM3LDcgQEAKKyAgICAgICBidWZfc2l6ZSA9IHNpemU7CisgICAgIH0KKyAKKysgIGJ1Zi0+dWlkID0gdWlkOworICAgYnVmLT5hY3Rpb24gPSBhY3Rpb247CisgICBidWYtPmh3YWRkcl9sZW4gPSBsZWFzZS0+aHdhZGRyX2xlbjsKKyAgIGJ1Zi0+aHdhZGRyX3R5cGUgPSBsZWFzZS0+aHdhZGRyX3R5cGU7CitAQCAtMzkzLDEyICszOTksMTUgQEAKKyAgIHJldHVybiBieXRlc19pbl9idWYgPT0gMDsKKyB9CisgCistdm9pZCBoZWxwZXJfd3JpdGUodm9pZCkKKysvKiByZXR1cm5zIC0xIGlmIHdyaXRlIGZhaWxlZCBmb3IgYSByZWFzb24sIDEgaWYgbm8gZGF0YSBleGlzdAorKyAqIGFuZCAwIGlmIGV2ZXJ5dGhpbmcgd2FzIG9rLgorKyAqLworK2ludCBoZWxwZXJfd3JpdGUodm9pZCkKKyB7CisgICBzc2l6ZV90IHJjOworIAorICAgaWYgKGJ5dGVzX2luX2J1ZiA9PSAwKQorLSAgICByZXR1cm47CisrICAgIHJldHVybiAxOworICAgCisgICBpZiAoKHJjID0gd3JpdGUoZGFlbW9uLT5oZWxwZXJmZCwgYnVmLCBieXRlc19pbl9idWYpKSAhPSAtMSkKKyAgICAgeworQEAgLTQwOSw5ICs0MTgsMTEgQEAKKyAgIGVsc2UKKyAgICAgeworICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRUlOVFIpCistCXJldHVybjsKKysJcmV0dXJuIC0xOworICAgICAgIGJ5dGVzX2luX2J1ZiA9IDA7CisgICAgIH0KKysgICAgCisrICByZXR1cm4gMDsKKyB9CisgCisgI2VuZGlmCitJbmRleDogc3JjL3JmYzIxMzEuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNyYy9yZmMyMTMxLmMJKHJldmlzaW9uIDY5NikKKysrKyBzcmMvcmZjMjEzMS5jCShyZXZpc2lvbiA4MjEpCitAQCAtMTAwLDggKzEwMCw0OSBAQAorIAkJCQkgICAgICBpbnQgY2xpZF9sZW4sIHVuc2lnbmVkIGNoYXIgKmNsaWQsIGludCAqbGVuX291dCk7Cisgc3RhdGljIHZvaWQgbWF0Y2hfdmVuZG9yX29wdHModW5zaWduZWQgY2hhciAqb3B0LCBzdHJ1Y3QgZGhjcF9vcHQgKmRvcHQpOyAKKyAKKytzdGF0aWMgaW50IGNoZWNrX2FjY2Vzc19zY3JpcHQoIGludCBwaXBlcmVhZCwgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlLCBzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHRpbWVfdCBub3cpCisreworKyNpZm5kZWYgTk9fRk9SSworK3Vuc2lnbmVkIGludCB1aWQ7Cisrc3RydWN0IGV2ZW50X2Rlc2MgZXY7CisraW50IHJldDsKKytzdHJ1Y3QgZGhjcF9sZWFzZSBfbGVhc2U7CisrCisrICBpZiAoZGFlbW9uLT5sZWFzZV9jaGFuZ2VfY29tbWFuZCA9PSBOVUxMKSByZXR1cm4gMDsgLyogb2sgKi8KKysKKysgIGlmICghbGVhc2UpIHsgLyogaWYgaG9zdCBoYXMgbm90IGJlZW4gc2VlbiBiZWZvcmUgbGVhc2UgaXMgTlVMTCAqLworKyAgICAgIG1lbXNldCgmX2xlYXNlLCAwLCBzaXplb2YoX2xlYXNlKSk7CisrICAgICAgbGVhc2UgPSAmX2xlYXNlOworKyAgICAgIGxlYXNlX3NldF9od2FkZHIobGVhc2UsIG1lc3MtPmNoYWRkciwgTlVMTCwgbWVzcy0+aGxlbiwgbWVzcy0+aHR5cGUsIDApOworKyAgfQorKworKyAgdWlkID0gcmFuZDE2KCk7CisrICBxdWV1ZV9zY3JpcHQoQUNUSU9OX0FDQ0VTUywgbGVhc2UsIE5VTEwsIG5vdywgdWlkKTsKKysKKysgIC8qIHNlbmQgYWxsIGRhdGEgdG8gaGVscGVyIHByb2Nlc3MgKi8KKysgIGRvIAorKyAgICB7CisrICAgICAgaGVscGVyX3dyaXRlKCk7CisrICAgIH0gd2hpbGUgKGhlbHBlcl9idWZfZW1wdHkoKSA9PSAwKTsKKysKKysgIC8qIHdhaXQgZm9yIG91ciBldmVudCAqLworKyAgcmV0ID0gMDsKKysgIGRvIAorKyAgICB7CisrICAgICAgcmV0ID0gYXN5bmNfZXZlbnQoIHBpcGVyZWFkLCBub3csICZldiwgU0NSSVBUX1RJTUVPVVQpOworKyAgICB9CisrICB3aGlsZShldi5wcml2ICE9IHVpZCAmJiByZXQgPj0gMCk7CisrCisrICBpZiAocmV0IDwgMCB8fCBldi5kYXRhICE9IDApIC8qIHRpbWVvdXQgb3IgZXJyb3IgKi8KKysgICAgeworKyAgICAgIHJldHVybiAtMTsKKysgICAgfQorKworKyNlbmRpZgorKyAgcmV0dXJuIDA7IC8qIG9rICovCisrfQorIAkgIAorLXNpemVfdCBkaGNwX3JlcGx5KHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIGNoYXIgKmlmYWNlX25hbWUsIGludCBpbnRfaW5kZXgsCisrc2l6ZV90IGRoY3BfcmVwbHkoaW50IHBpcGVyZWFkLCBzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCBjaGFyICppZmFjZV9uYW1lLCBpbnQgaW50X2luZGV4LAorIAkJICBzaXplX3Qgc3osIHRpbWVfdCBub3csIGludCB1bmljYXN0X2Rlc3QsIGludCAqaXNfaW5mb3JtKQorIHsKKyAgIHVuc2lnbmVkIGNoYXIgKm9wdCwgKmNsaWQgPSBOVUxMOworQEAgLTI1Miw3ICsyOTMsNyBAQAorIAltYWMtPm5ldGlkLm5leHQgPSBuZXRpZDsKKyAJbmV0aWQgPSAmbWFjLT5uZXRpZDsKKyAgICAgICB9CistICAKKysKKyAgIC8qIERldGVybWluZSBuZXR3b3JrIGZvciB0aGlzIHBhY2tldC4gT3VyIGNhbGxlciB3aWxsIGhhdmUgYWxyZWFkeSBsaW5rZWQgYWxsIHRoZSAKKyAgICAgIGNvbnRleHRzIHdoaWNoIG1hdGNoIHRoZSBhZGRyZXNzZXMgb2YgdGhlIHJlY2VpdmluZyBpbnRlcmZhY2UgYnV0IGlmIHRoZSAKKyAgICAgIG1hY2hpbmUgaGFzIGFuIGFkZHJlc3MgYWxyZWFkeSwgb3IgY2FtZSB2aWEgYSByZWxheSwgb3Igd2UgaGF2ZSBhIHN1Ym5ldCBzZWxlY3RvciwgCitAQCAtMzI5LDcgKzM3MCw3IEBACisgCSAgICBteV9zeXNsb2coTE9HX0lORk8sIF8oIkF2YWlsYWJsZSBESENQIHJhbmdlOiAlcyAtLSAlcyIpLCBkYWVtb24tPm5hbWVidWZmLCBpbmV0X250b2EoY29udGV4dF90bXAtPmVuZCkpOworIAl9CisgICAgIH0KKy0KKysgICAgCisgICBtZXNzLT5vcCA9IEJPT1RSRVBMWTsKKyAgIAorICAgY29uZmlnID0gZmluZF9jb25maWcoZGFlbW9uLT5kaGNwX2NvbmYsIGNvbnRleHQsIGNsaWQsIGNsaWRfbGVuLCAKK0BAIC00MTgsNyArNDU5LDcgQEAKKyAJICAgICAgZWxzZQorIAkJbWVzcy0+eWlhZGRyID0gbGVhc2UtPmFkZHI7CisgCSAgICB9CistCSAgCisrCisgCSAgaWYgKCFtZXNzYWdlICYmIAorIAkgICAgICAhbGVhc2UgJiYgCisgCSAgICAgICghKGxlYXNlID0gbGVhc2VfYWxsb2NhdGUobWVzcy0+eWlhZGRyKSkpKQorQEAgLTY0MSw3ICs2ODIsMTQgQEAKKyAgICAgICBtZW1jcHkocmVxX29wdGlvbnMsIG9wdGlvbl9wdHIob3B0LCAwKSwgb3B0aW9uX2xlbihvcHQpKTsKKyAgICAgICByZXFfb3B0aW9uc1tvcHRpb25fbGVuKG9wdCldID0gT1BUSU9OX0VORDsKKyAgICAgfQorLSAgCisrCisrICBpZiAobWVzc190eXBlID09IERIQ1BSRVFVRVNUIHx8IG1lc3NfdHlwZSA9PSBESENQRElTQ09WRVIpCisrICAgIGlmIChjaGVja19hY2Nlc3Nfc2NyaXB0KHBpcGVyZWFkLCBsZWFzZSwgbWVzcywgbm93KSA8IDApCisrICAgICAgeworKyAgICAgICAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCJJZ25vcmluZyBjbGllbnQgZHVlIHRvIGFjY2VzcyBzY3JpcHQiKSk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgICB9CisrCisgICBzd2l0Y2ggKG1lc3NfdHlwZSkKKyAgICAgeworICAgICBjYXNlIERIQ1BERUNMSU5FOgorSW5kZXg6IHNyYy9sb2cuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNyYy9sb2cuYwkocmV2aXNpb24gNjk2KQorKysrIHNyYy9sb2cuYwkocmV2aXNpb24gODIxKQorQEAgLTczLDcgKzczLDcgQEAKKyAKKyAgIGlmICghbG9nX3Jlb3BlbihkYWVtb24tPmxvZ19maWxlKSkKKyAgICAgeworLSAgICAgIHNlbmRfZXZlbnQoZXJyZmQsIEVWRU5UX0xPR19FUlIsIGVycm5vKTsKKysgICAgICBzZW5kX2V2ZW50KGVycmZkLCBFVkVOVF9MT0dfRVJSLCBlcnJubywgMCk7CisgICAgICAgX2V4aXQoMCk7CisgICAgIH0KKyAKK0luZGV4OiBzcmMvbGVhc2UuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNyYy9sZWFzZS5jCShyZXZpc2lvbiA2OTYpCisrKysgc3JjL2xlYXNlLmMJKHJldmlzaW9uIDgyMSkKK0BAIC01MTEsNyArNTExLDcgQEAKKyAgICAgICBpZiAobGVhc2UtPm9sZF9ob3N0bmFtZSkKKyAJeworICNpZm5kZWYgTk9fRk9SSworLQkgIHF1ZXVlX3NjcmlwdChBQ1RJT05fT0xEX0hPU1ROQU1FLCBsZWFzZSwgbGVhc2UtPm9sZF9ob3N0bmFtZSwgbm93KTsKKysJICBxdWV1ZV9zY3JpcHQoQUNUSU9OX09MRF9IT1NUTkFNRSwgbGVhc2UsIGxlYXNlLT5vbGRfaG9zdG5hbWUsIG5vdywgMCk7CisgI2VuZGlmCisgCSAgZnJlZShsZWFzZS0+b2xkX2hvc3RuYW1lKTsKKyAJICBsZWFzZS0+b2xkX2hvc3RuYW1lID0gTlVMTDsKK0BAIC01MjAsNyArNTIwLDcgQEAKKyAgICAgICBlbHNlIAorIAl7CisgI2lmbmRlZiBOT19GT1JLCistCSAgcXVldWVfc2NyaXB0KEFDVElPTl9ERUwsIGxlYXNlLCBsZWFzZS0+aG9zdG5hbWUsIG5vdyk7CisrCSAgcXVldWVfc2NyaXB0KEFDVElPTl9ERUwsIGxlYXNlLCBsZWFzZS0+aG9zdG5hbWUsIG5vdywgMCk7CisgI2VuZGlmCisgCSAgb2xkX2xlYXNlcyA9IGxlYXNlLT5uZXh0OworIAkgIAorQEAgLTU0MCw3ICs1NDAsNyBAQAorICAgICBpZiAobGVhc2UtPm9sZF9ob3N0bmFtZSkKKyAgICAgICB7CQorICNpZm5kZWYgTk9fRk9SSworLQlxdWV1ZV9zY3JpcHQoQUNUSU9OX09MRF9IT1NUTkFNRSwgbGVhc2UsIGxlYXNlLT5vbGRfaG9zdG5hbWUsIG5vdyk7CisrCXF1ZXVlX3NjcmlwdChBQ1RJT05fT0xEX0hPU1ROQU1FLCBsZWFzZSwgbGVhc2UtPm9sZF9ob3N0bmFtZSwgbm93LCAwKTsKKyAjZW5kaWYKKyAJZnJlZShsZWFzZS0+b2xkX2hvc3RuYW1lKTsKKyAJbGVhc2UtPm9sZF9ob3N0bmFtZSA9IE5VTEw7CitAQCAtNTUyLDcgKzU1Miw3IEBACisgCShsZWFzZS0+YXV4X2NoYW5nZWQgJiYgKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9MRUFTRV9STykpKQorICAgICAgIHsKKyAjaWZuZGVmIE5PX0ZPUksKKy0JcXVldWVfc2NyaXB0KGxlYXNlLT5uZXcgPyBBQ1RJT05fQUREIDogQUNUSU9OX09MRCwgbGVhc2UsIGxlYXNlLT5ob3N0bmFtZSwgbm93KTsKKysJcXVldWVfc2NyaXB0KGxlYXNlLT5uZXcgPyBBQ1RJT05fQUREIDogQUNUSU9OX09MRCwgbGVhc2UsIGxlYXNlLT5ob3N0bmFtZSwgbm93LCAwKTsKKyAjZW5kaWYKKyAJbGVhc2UtPm5ldyA9IGxlYXNlLT5jaGFuZ2VkID0gbGVhc2UtPmF1eF9jaGFuZ2VkID0gMDsKKyAJCitJbmRleDogbWFuL2Ruc21hc3EuOAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1hbi9kbnNtYXNxLjgJKHJldmlzaW9uIDY5NikKKysrKyBtYW4vZG5zbWFzcS44CShyZXZpc2lvbiA4MjEpCitAQCAtNzI0LDEyICs3MjQsMTUgQEAKKyAuQiBcLTYgLS1kaGNwLXNjcmlwdD08cGF0aD4KKyBXaGVuZXZlciBhIG5ldyBESENQIGxlYXNlIGlzIGNyZWF0ZWQsIG9yIGFuIG9sZCBvbmUgZGVzdHJveWVkLCB0aGUKKyBiaW5hcnkgc3BlY2lmaWVkIGJ5IHRoaXMgb3B0aW9uIGlzIHJ1bi4gVGhlIGFyZ3VtZW50cyB0byB0aGUgcHJvY2VzcworLWFyZSAiYWRkIiwgIm9sZCIgb3IgImRlbCIsIHRoZSBNQUMKKythcmUgImFkZCIsICJvbGQiLCAiYWNjZXNzIiBvciAiZGVsIiwgdGhlIE1BQworIGFkZHJlc3Mgb2YgdGhlIGhvc3QgKG9yICI8bnVsbD4iKSwgdGhlIElQIGFkZHJlc3MsIGFuZCB0aGUgaG9zdG5hbWUsCisgaWYga25vd24uICJhZGQiIG1lYW5zIGEgbGVhc2UgaGFzIGJlZW4gY3JlYXRlZCwgImRlbCIgbWVhbnMgaXQgaGFzCisgYmVlbiBkZXN0cm95ZWQsICJvbGQiIGlzIGEgbm90aWZpY2F0aW9uIG9mIGFuIGV4aXN0aW5nIGxlYXNlIHdoZW4KKyBkbnNtYXNxIHN0YXJ0cyBvciBhIGNoYW5nZSB0byBNQUMgYWRkcmVzcyBvciBob3N0bmFtZSBvZiBhbiBleGlzdGluZworIGxlYXNlIChhbHNvLCBsZWFzZSBsZW5ndGggb3IgZXhwaXJ5IGFuZCBjbGllbnQtaWQsIGlmIGxlYXNlZmlsZS1ybyBpcyBzZXQpLgorK1RoZSAiYWNjZXNzIiBrZXl3b3JkIG1lYW5zIHRoYXQgYSByZXF1ZXN0IHdhcyBqdXN0IHJlY2VpdmVkIGFuZCBkZXBlbmRpbmcKKytvbiB0aGUgc2NyaXB0IGV4aXQgc3RhdHVzIHJlcXVlc3QgZm9yIGFkZHJlc3Mgd2lsbCBiZSBncmFudGVkLCBpZiBleGl0IHN0YXR1cworK2lzIHplcm8gb3Igbm90IGlmIGl0IGlzIG5vbi16ZXJvLgorIFRoZSBwcm9jZXNzIGlzIHJ1biBhcyByb290IChhc3N1bWluZyB0aGF0IGRuc21hc3Egd2FzIG9yaWdpbmFsbHkgcnVuIGFzCisgcm9vdCkgZXZlbiBpZiBkbnNtYXNxIGlzIGNvbmZpZ3VyZWQgdG8gY2hhbmdlIFVJRCB0byBhbiB1bnByaXZpbGVnZWQgdXNlci4KKyBUaGUgZW52aXJvbm1lbnQgaXMgaW5oZXJpdGVkIGZyb20gdGhlIGludm9rZXIgb2YgZG5zbWFzcSwgYW5kIGlmIHRoZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9tYWN0YWJsZS9tYWNzY3JpcHQgYi9jb250cmliL21hY3RhYmxlL21hY3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NGE0NDc3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tYWN0YWJsZS9tYWNzY3JpcHQKQEAgLTAsMCArMSwzNiBAQAorIyEvYmluL2Jhc2gKKworU1RBVFVTX0ZJTEU9Ii90bXAvZG5zbWFzcS1pcC1tYWMuc3RhdHVzIgorCisjIFNjcmlwdCBmb3IgZG5zbWFzcSBsZWFzZS1jaGFuZ2UgaG9vay4KKyMgTWFpbnRhaW5zIHRoZSBhYm92ZSBmaWxlIHdpdGggYSBJUCBhZGRyZXNzL01BQyBhZGRyZXNzIHBhaXJzLAorIyBvbmUgbGVhc2UgcGVyIGxpbmUuIFdvcmtzIHdpdGggSVB2NCBhbmQgSVB2NiBsZWFzZXMsIGZpbGUgaXMKKyMgYXRvbWljYWxseSB1cGRhdGVkLCBzbyBubyByYWNlcyBmb3IgdXNlcnMgb2YgdGhlIGRhdGEuCisKK2FjdGlvbj0iJDEiCittYWM9IiQyIiAgICMgSVB2NAoraXA9IiQzIgorCisjIGVuc3VyZSBpdCBhbHdheXMgZXhpc3RzLgorCitpZiBbICEgLWYgIiRTVEFUVVNfRklMRSIgXTsgdGhlbgorICB0b3VjaCAiJFNUQVRVU19GSUxFIgorZmkKKworaWYgWyAgLW4gIiRETlNNQVNRX0lBSUQiIF07IHRoZW4KKyAgICBtYWM9IiRETlNNQVNRX01BQyIgICAjIElQdjYKK2ZpCisKKyMgd29ycnkgYWJvdXQgYW4gYWRkIG9yIG9sZCBhY3Rpb24gd2hlbiB0aGUgTUFDIGFkZHJlc3MgaXMgbm90IGtub3duOgorIyBsZWF2ZSBhbnkgb2xkIG9uZSBpbiBwbGFjZSBpbiB0aGF0IGNhc2UuCisKK2lmIFsgIiRhY3Rpb24iID0gImFkZCIgLW8gIiRhY3Rpb24iID0gIm9sZCIgLW8gIiRhY3Rpb24iID0gImRlbCIgXTsgdGhlbgorICBpZiBbIC1uICIkbWFjIiAtbyAiJGFjdGlvbiIgPSAiZGVsIiBdOyB0aGVuCisgICAgc2VkICIvXiR7aXAvLy4vXC59IC8gZCIgIiRTVEFUVVNfRklMRSIgPiAiJFNUQVRVU19GSUxFIi5uZXcKKyAgCisgICAgaWYgWyAiJGFjdGlvbiIgPSAiYWRkIiAtbyAiJGFjdGlvbiIgPSAib2xkIiBdOyB0aGVuCisgICAgICAgZWNobyAiJGlwICRtYWMiID4+ICIkU1RBVFVTX0ZJTEUiLm5ldworICAgIGZpCisgICAgbXYgICIkU1RBVFVTX0ZJTEUiLm5ldyAiJFNUQVRVU19GSUxFIiAjIGF0b21pYyB1cGRhdGUuCisgIGZpCitmaQpkaWZmIC0tZ2l0IGEvY29udHJpYi9vcGVudnBuL1JFQURNRSBiL2NvbnRyaWIvb3BlbnZwbi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ5OTYwMAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvb3BlbnZwbi9SRUFETUUKQEAgLTAsMCArMSw0NCBAQAorVGhlIHBhdGNoIEkgaGF2ZSBhdHRhY2hlZCBsZXRzIG1lIGdldCB0aGUgYmVoYXZpb3IgSSB3aXNoIG91dCBvZgorZG5zbWFzcS4gIEkgYWxzbyBpbmNsdWRlIG15IHZlcnNpb24gb2YgZGhjbGllbnQtZW50ZXItaG9va3MgYXMKK3JlcXVpcmVkIGZvciB0aGUgc3dpdGNob3ZlciBmcm9tIHByZS1kbnNtYXNxIGFuZCBkaGNsaWVudC4KKworT24gOC8xNi8wNSwgSm9zZXBoIFRhdGUgPGRyYWdvbnN0cmlkZXJAZ21haWwuY29tPiB3cm90ZToKKz4gSSdtIHRyeWluZyB0byB1c2UgZG5zbWFzcSBvbiBhIGxhcHRvcCBpbiBvcmRlciB0byBmYWNpbGl0YXRlIG9wZW52cG4KKz4gY29ubmVjdGlvbnMuICBBcyBzdWNoLCB0aGUgb25seSBjb25maWd1cmF0aW9uIG9wdGlvbiBJJ20gY29uY2VybmVkCis+IGFib3V0IGlzIGEgc2luZ2xlIHNlcnZlcj0zRC9leGFtcGxlLmNvbS8xOTIuMTY4LjAuMSBsaW5lLgorPgorPiBUaGUgd2F5IEkgY3VycmVudGx5IGhhdmUgaXQgc2V0IHVwIGlzIEkgbW9kaWZpZWQgZGhjbGllbnQgdG8gd3JpdGUgaXRzCis+IHJlc29sdi5jb25mIGRhdGEgdG8gL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudCBhbmQgY29uZmlndXJlZAorPiAvZXRjL2Ruc21hc3EuY29uZiB0byBsb29rIHRoZXJlIGZvciBpdHMgdXBzdHJlYW0gZG5zIHNlcnZlcnMuCis+IC9ldGMvcmVzb2x2LmNvbmYgaXMgc2V0IHRvIG5hbWVzZXJ2ZXIgMTI3LjAuMC4xCis+Cis+IEFsbCBvZiB0aGlzIHdvcmtzIGdyZWF0LiAgV2hlbiBJIHN0YXJ0IHRoZSBvcGVudnBuIHNlcnZpY2UsIGl0IHRoZQorPiByb3V0ZXMsIGFuZCBxdWVyaWVzIHRvIHRoZSBkb21haW4gaW4gdGhlIHNlcnZlcj0zRCBsaW5lIHdvcmsganVzdCBmaW5lLgorPgorPiBUaGUgb25seSBwcm9ibGVtIGlzIHRoYXQgdGhlIGhvc3RuYW1lIGZvciBteSBzeXN0ZW0gZG9lc24ndCBnZXQgc2V0Cis+IGNvcnJlY3RseS4gIFdpdGggdGhlIHJlc29sdi5jb25mIGRhdGEgd3JpdHRlbiB0byBzb21ldGhpbmcgb3RoZXIgdGhhbgorPiAvZXRjL3Jlc29sdi5jb25mLCB0aGUgaWZ1cCBzY3JpcHRzIGRvbid0IGhhdmUgYSB2YWxpZCBkbnMgc2VydmVyIHRvIGRvCis+IHRoZSBpcGNhbGMgY2FsbCB0byBzZXQgdGhlIGxhcHRvcCdzIGhvc3RuYW1lLiAgSWYgSSBzdGFydCBkbnNtYXNxCis+IGJlZm9yZSB0aGUgbmV0d29yayBjb21lcyB1cCwgc29tZXRoaW5nIGdldHMgZnViYXInZC4gIEknbSBub3Qgc3VyZSBob3cKKz4gdG8gZGVzY3JpYmUgaXQgZXhhY3RseSwgYnV0IG5ldHdvcmsgc2VydmljZXMgYXJlIHNsb3cgdG8gbG9hZCwgYW5kCis+IHJlc3RhcnRpbmcgbmV0d29ya2luZyBhbmQgZG5zbWFzcSBkb2Vzbid0IHNvbHZlIHRoZSBwcm9ibGVtLiAgUGVyaGFwcworPiBkbnNtYXNxIGlzIGFuc3dlcmluZyB0aGUgZGhjcCByZXF1ZXN0IHdoZW4gdGhlIG5ldHdvcmsgc3RhcnRzPworPiBDZXJ0YWlubHkgbm90IGRlc2lyZWQgYmVoYXZpb3IuCis+Cis+IEFueXdheSwgbXkgcXVlc3Rpb246IGlzIHRoZXJlIGEgd2F5IHRvIGhhdmUgdGhlIGJlc3Qgb2YgYm90aCB3b3JsZHM/Cis+IERIQ1AgcmVxdWVzdHMgdG8gYW5vdGhlciBzZXJ2ZXIsIGFuZCBETlMgbG9va3VwcyB0aGF0IHdvcmsgYXQgYWxsCis+IHRpbWVzPworPgorPiBNeSBjdXJyZW50IGJlc3QgaWRlYSBvbiBob3cgdG8gc29sdmUgdGhpcyBwcm9ibGVtIGlzIG1vZGlmeWluZyB0aGUKKz4gZG5zbWFzcSBpbml0c2NyaXB0IHRvIHR3ZWFrIC9ldGMvZGhjbGllbnQtZW50ZXItaG9va3MgdG8gY2hhbmdlIHdoZXJlCis+IGRoY2xpZW50IHdyaXRlcyByZXNvbHYuY29uZiBkYXRhLCBhbmQgZml4aW5nIHVwIC9ldGMvcmVzb2x2LmNvbmYgb24KKz4gdGhlIGZseSB0byBzZXQgMTI3LjAuMC4xIHRvIHRoZSBuYW1lc2VydmVyIChhbmQgc29tZWhvdyBrZWVwIHRoZQorPiBzZWFyY2ggZG9tYWlucyBpbnRhY3QpLCBidXQgSSdtIGhvcGluZyB0aGF0IEknbSBqdXN0IG1pc3Npbmcgc29tZSBrZXkKKz4gcGllY2Ugb2YgdGhlIHB1enpsZSBhbmQgdGhhdCB0aGlzIHByb2JsZW0gaGFzIGJlZW4gc29sdmVkIGJlZm9yZS4gIEFueQorPiBpbnNpZ2h0cz8KKz4KKz4gLS0KKz4gSm9zZXBoIFRhdGUKKz4gUGVyc29uYWwgZS1tYWlsOiBqdGF0ZSBBVCBkcmFnb25zdHJpZGVyIERPVCBjb20KKz4gV2ViOiBodHRwOi8vd3d3LmRyYWdvbnN0cmlkZXIuY29tCis+CmRpZmYgLS1naXQgYS9jb250cmliL29wZW52cG4vZGhjbGllbnQtZW50ZXItaG9va3MgYi9jb250cmliL29wZW52cG4vZGhjbGllbnQtZW50ZXItaG9va3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I3OGUyYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvb3BlbnZwbi9kaGNsaWVudC1lbnRlci1ob29rcwpAQCAtMCwwICsxLDMwIEBACisjIS9iaW4vYmFzaAorCitmdW5jdGlvbiBzYXZlX3ByZXZpb3VzKCkgeworICBpZiBbIC1lICQxIC1hICEgLWUgJDEucHJlZGhjbGllbnQgXTsgdGhlbgorICAgIG12ICQxICQxLnByZWRoY2xpZW50IAorICBmaQorfQorCitmdW5jdGlvbiB3cml0ZV9yZXNvbHZfY29uZigpIHsKKyAgUkVTT0xWQ09ORj0kMQorICBpZiBbIC1uICIkbmV3X2RvbWFpbl9uYW1lIiBdIHx8IFsgLW4gIiRuZXdfZG9tYWluX25hbWVfc2VydmVycyIgXTsgdGhlbgorICAgIHNhdmVfcHJldmlvdXMgJFJFU09MVkNPTkYKKyAgICBlY2hvICc7IGdlbmVyYXRlZCBieSAvZXRjL2RoY2xpZW50LWVudGVyLWhvb2tzJyA+ICRSRVNPTFZDT05GCisgICAgaWYgWyAtbiAiJFNFQVJDSCIgXTsgdGhlbgorIAllY2hvIHNlYXJjaCAkU0VBUkNIID4+ICRSRVNPTFZDT05GCisgICAgZWxzZQorCWlmIFsgLW4gIiRuZXdfZG9tYWluX25hbWUiIF07IHRoZW4KKyAJICAgIGVjaG8gc2VhcmNoICRuZXdfZG9tYWluX25hbWUgPj4gJFJFU09MVkNPTkYKKyAJZmkKKyAgICBmaQorICAgIGNobW9kIDY0NCAkUkVTT0xWQ09ORgorICAgIGZvciBuYW1lc2VydmVyIGluICRuZXdfZG9tYWluX25hbWVfc2VydmVyczsgZG8KKyAgICAgIGVjaG8gbmFtZXNlcnZlciAkbmFtZXNlcnZlciA+PiRSRVNPTFZDT05GCisgICAgZG9uZQorICBmaQorfQorCittYWtlX3Jlc29sdl9jb25mKCkgeworICB3cml0ZV9yZXNvbHZfY29uZiAvZXRjL3Jlc29sdi5jb25mCit9CmRpZmYgLS1naXQgYS9jb250cmliL29wZW52cG4vZG5zbWFzcS5wYXRjaCBiL2NvbnRyaWIvb3BlbnZwbi9kbnNtYXNxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMTE4ODEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL29wZW52cG4vZG5zbWFzcS5wYXRjaApAQCAtMCwwICsxLDYxIEBACistLS0gZG5zbWFzcS0yLjIyL3JwbS9kbnNtYXNxLnJoCTIwMDUtMDMtMjQgMDk6NTE6MTguMDAwMDAwMDAwIC0wNTAwCisrKysgZG5zbWFzcS0yLjIyL3JwbS9kbnNtYXNxLnJoLm5ldwkyMDA1LTA4LTI1IDEwOjUyOjA0LjMxMDU2ODc4NCAtMDQwMAorQEAgLTIsNyArMiw3IEBACisgIworICMgU3RhcnR1cCBzY3JpcHQgZm9yIHRoZSBETlMgY2FjaGluZyBzZXJ2ZXIKKyAjCistIyBjaGtjb25maWc6IDIzNDUgOTkgMDEKKysjIGNoa2NvbmZpZzogMjM0NSAwNyA4OQorICMgZGVzY3JpcHRpb246IFRoaXMgc2NyaXB0IHN0YXJ0cyB5b3VyIEROUyBjYWNoaW5nIHNlcnZlcgorICMgcHJvY2Vzc25hbWU6IGRuc21hc3EKKyAjIHBpZGZpbGU6IC92YXIvcnVuL2Ruc21hc3EucGlkCitAQCAtMTAsNiArMTAsMjUgQEAKKyAjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorIC4gL2V0Yy9yYy5kL2luaXQuZC9mdW5jdGlvbnMKKyAKKytmdW5jdGlvbiBzZXR1cF9kaGNsaWVudF9lbnRlcl9ob29rcygpIHsKKysgICAgaWYgWyAtZiAvZXRjL2RoY2xpZW50LWVudGVyLWhvb2tzIF07IHRoZW4KKysgICAgICAgIC4gL2V0Yy9kaGNsaWVudC1lbnRlci1ob29rcworKyAgICAgICAgY3AgL2V0Yy9yZXNvbHYuY29uZiAvZXRjL3Jlc29sdi5jb25mLmRuc21hc3EKKysgICAgICAgIGNwIC9ldGMvZGhjbGllbnQtZW50ZXItaG9va3MgL2V0Yy9kaGNsaWVudC1lbnRlci1ob29rcy5kbnNtYXNxCisrICAgICAgICBzZWQgLWUgJ3MvcmVzb2x2XC5jb25mJC9yZXNvbHYuY29uZi5kbnNtYXNxLycgL2V0Yy9kaGNsaWVudC1lbnRlci1ob29rcy5kbnNtYXNxID4gL2V0Yy9kaGNsaWVudC1lbnRlci1ob29rcworKyAgICAgICAgc2VkIC1lICdzL1wobmFtZXNlcnZlclsgdGFiXVwrXClbMC05XVwrXC5bMC05XVwrXC5bMC05XVwrXC5bMC05XVwrJC9cMTEyNy4wLjAuMS8nIC9ldGMvcmVzb2x2LmNvbmYuZG5zbWFzcSA+IC9ldGMvcmVzb2x2LmNvbmYKKysgICAgZmkKKyt9CisrCisrZnVuY3Rpb24gdGVhcmRvd25fZGhjbGllbnRfZW50ZXJfaG9va3MoKSB7CisrICAgIGlmIFsgLWYgL2V0Yy9kaGNsaWVudC1lbnRlci1ob29rcyAtYSAtZiAvZXRjL2RoY2xpZW50LWVudGVyLWhvb2tzLmRuc21hc3EgXTsgdGhlbgorKyAgICAgICAgaWYgWyAtZiAvZXRjL3Jlc29sdi5jb25mLmRuc21hc3EgXTsgdGhlbgorKyAgICAgICAgICAgIG12IC9ldGMvcmVzb2x2LmNvbmYuZG5zbWFzcSAvZXRjL3Jlc29sdi5jb25mCisrICAgICAgICBmaQorKyAgICAgICAgbXYgL2V0Yy9kaGNsaWVudC1lbnRlci1ob29rcy5kbnNtYXNxIC9ldGMvZGhjbGllbnQtZW50ZXItaG9va3MKKysgICAgZmkKKyt9CisrCisgIyBTb3VyY2UgbmV0d29ya2luZyBjb25maWd1cmF0aW9uLgorIC4gL2V0Yy9zeXNjb25maWcvbmV0d29yaworIAorQEAgLTI0LDcgKzQzLDcgQEAKKyBNQUlMSE9TVE5BTUU9IiIKKyAjIGNoYW5nZSB0aGlzIGxpbmUgaWYgeW91IHdhbnQgZG5zIHRvIGdldCBpdHMgdXBzdHJlYW0gc2VydmVycyBmcm9tCisgIyBzb21ld2hlcmUgb3RoZXIgdGhhdCAvZXRjL3Jlc29sdi5jb25mIAorLVJFU09MVl9DT05GPSIiCisrUkVTT0xWX0NPTkY9Ii9ldGMvcmVzb2x2LmNvbmYuZG5zbWFzcSIKKyAjIGNoYW5nZSB0aGlzIGlmIHlvdSB3YW50IGRuc21hc3EgdG8gY2FjaGUgYW55ICJob3N0bmFtZSIgb3IgImNsaWVudC1ob3N0bmFtZSIgZnJvbQorICMgYSBkaGNwZCdzIGxlYXNlIGZpbGUKK0BAIC01NCw2ICs3Myw3IEBACisgY2FzZSAiJDEiIGluCisgICBzdGFydCkKKyAgICAgICAgIGVjaG8gLW4gIlN0YXJ0aW5nIGRuc21hc3E6ICIKKysgICAgICAgIHNldHVwX2RoY2xpZW50X2VudGVyX2hvb2tzCisgICAgICAgICBkYWVtb24gJGRuc21hc3EgJE9QVElPTlMKKyAJUkVUVkFMPSQ/CisgICAgICAgICBlY2hvCitAQCAtNjIsNiArODIsNyBAQAorICAgc3RvcCkKKyAgICAgICAgIGlmIHRlc3QgInhgcGlkb2YgZG5zbWFzcWAiICE9IHg7IHRoZW4KKyAgICAgICAgICAgICBlY2hvIC1uICJTaHV0dGluZyBkb3duIGRuc21hc3E6ICIKKysgICAgICAgICAgICB0ZWFyZG93bl9kaGNsaWVudF9lbnRlcl9ob29rcworICAgICAgICAgICAgIGtpbGxwcm9jIGRuc21hc3EKKyAgICAgICAgIGZpCisgCVJFVFZBTD0kPwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3J0LWZvcndhcmQvZG5zbWFzcS1wb3J0Zm9yd2FyZCBiL2NvbnRyaWIvcG9ydC1mb3J3YXJkL2Ruc21hc3EtcG9ydGZvcndhcmQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzJjNjM0ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcG9ydC1mb3J3YXJkL2Ruc21hc3EtcG9ydGZvcndhcmQKQEAgLTAsMCArMSw3OCBAQAorIyEvYmluL2Jhc2gKKyMgCisjIC91c3Ivc2Jpbi9kbnNtYXNxLXBvcnRmb3J3YXJkCisjCisjIEEgc2NyaXB0IHdoaWNoIGdldHMgcnVuIHdoZW4gdGhlIGRuc21hc3EgREhDUCBsZWFzZSBkYXRhYmFzZSBjaGFuZ2VzLgorIyBJdCBsb2dzIHRvICRMT0dGSUxFLCBpZiBpdCBleGlzdHMsIGFuZCBtYWludGFpbnMgcG9ydC1mb3J3YXJkcyB1c2luZworIyBJUC10YWJsZXMgc28gdGhhdCB0aGV5IGFsd2F5cyBwb2ludCB0byB0aGUgY29ycmVjdCBob3N0LiBTZWUKKyMgJFBPUlRTRklMRSBmb3IgZGV0YWlscyBvbiBjb25maWd1cmluZyB0aGlzLiBkbnNtYXNxIG11c3QgYmUgdmVyc2lvbiAyLjM0IAorIyBvciBsYXRlci4KKyMKKyMgVG8gZW5hYmxlIHRoaXMgc2NyaXB0LCBhZGQgCisjICAgIGRoY3Atc2NyaXB0PS91c3Ivc2Jpbi9kbnNtYXNxLXBvcnRmb3J3YXJkCisjIHRvIC9ldGMvZG5zbWFzcS5jb25mCisjCisjIFRvIGVuYWJsZSBsb2dnaW5nLCB0b3VjaCAkTE9HRklMRQorIworCitQT1JUU0ZJTEU9L2V0Yy9wb3J0Zm9yd2FyZAorTE9HRklMRT0vdmFyL2xvZy9kaGNwLmxvZworSVBUQUJMRVM9L3NiaW4vaXB0YWJsZXMKKworYWN0aW9uPSR7MTotMH0KK2hvc3RuYW1lPSR7NH0KKworIyBsb2cgd2hhdCdzIGdvaW5nIG9uLgoraWYgWyAtZiAke0xPR0ZJTEV9IF0gOyB0aGVuCisgICAgZGF0ZSArIiVEICVUICQqIiA+PiR7TE9HRklMRX0KK2ZpCisKKyMgSWYgYSBsZWFzZSBnZXRzIHN0cmlwcGVkIG9mIGEgbmFtZSwgd2Ugc2VlIHRoYXQgYXMgYW4gIm9sZCIgYWN0aW9uCisjIHdpdGggRE5TTUFTUV9PTERfSE9TVE5BTUUgc2V0LCBjb252ZXJ0IGl0IGludG8gYSAiZGVsIiAKK2lmIFsgJHtETlNNQVNRX09MRF9IT1NUTkFNRX0gXSAmJiBbICR7YWN0aW9ufSA9IG9sZCBdIDsgdGhlbgorICAgIGFjdGlvbj1kZWwKKyAgICBob3N0bmFtZT0ke0ROU01BU1FfT0xEX0hPU1ROQU1FfQorZmkKKworIyBJUHY2IGxlYXNlcyBhcmUgbm90IG91ciBjb25jZXJuLiBubyBOQVQgdGhlcmUhCitpZiBbICR7RE5TTUFTUV9JQUlEfSBdIDsgdGhlbgorICAgZXhpdCAwCitmaQorCisjIGFjdGlvbiBpbml0IGlzIG5vdCByZWxldmFudCwgYW5kIHdpbGwgb25seSBiZSBzZWVuIHdoZW4gbGVhc2VmaWxlLXJvIGlzIHNldC4KK2lmIFsgJHthY3Rpb259ID0gaW5pdCBdIDsgdGhlbgorICAgIGV4aXQgMAorZmkKKworIyBhY3Rpb24gdGZ0cCBpcyBub3QgcmVsZXZhbnQuCitpZiBbICR7YWN0aW9ufSA9IHRmdHAgXSA7IHRoZW4KKyAgICBleGl0IDAKK2ZpCisKK2lmIFsgJHtob3N0bmFtZX0gXTsgdGhlbgorICAgIHBvcnRzPSQoc2VkIC1uIC1lICIvXiR7aG9zdG5hbWV9XCAuKi8gcy9eLiogLy9wIiAke1BPUlRTRklMRX0pCisKKyAgICBmb3IgcG9ydCBpbiAkcG9ydHM7IGRvCisJdmVyYj1yZW1vdmVkCisJcHJvdG9jb2w9dGNwCisJaWYgWyAke3BvcnQ6MDoxfSA9IHUgXSA7IHRoZW4KKwkgICAgcHJvdG9jb2w9dWRwIAorCSAgICBwb3J0PSR7cG9ydC91L30KKwlmaQorCXNyYz0ke3BvcnQvOiovfQorCWRzdD0ke3BvcnQvKjovfQorIyBkZWxldGUgZmlyc3QsIHRvIGF2b2lkIG11bHRpcGxlIGNvcGllcyBvZiBydWxlcy4KKwkke0lQVEFCTEVTfSAtdCBuYXQgLUQgUFJFUk9VVElORyAtcCAkcHJvdG9jb2wgLS1kZXN0aW5hdGlvbi1wb3J0ICRzcmMgLWogRE5BVCAtLXRvLWRlc3RpbmF0aW9uICR7M306JGRzdAorICAgICAgICBpZiBbICR7YWN0aW9ufSAhPSBkZWwgXSA7IHRoZW4KKwkgICAgJHtJUFRBQkxFU30gLXQgbmF0IC1BIFBSRVJPVVRJTkcgLXAgJHByb3RvY29sIC0tZGVzdGluYXRpb24tcG9ydCAkc3JjIC1qIEROQVQgLS10by1kZXN0aW5hdGlvbiAkezN9OiRkc3QKKwkgICAgdmVyYj1hZGRlZAorCWZpCisJaWYgWyAtZiAke0xPR0ZJTEV9IF0gOyB0aGVuCisJICAgIGVjaG8gIiAgICAgRE5BVCAkcHJvdG9jb2wgJHNyYyB0byAkezN9OiRkc3QgJHt2ZXJifS4iID4+JHtMT0dGSUxFfQorCWZpCisgICAgZG9uZQorZmkKKyAgICAKK2V4aXQgMAorCisKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9ydC1mb3J3YXJkL3BvcnRmb3J3YXJkIGIvY29udHJpYi9wb3J0LWZvcndhcmQvcG9ydGZvcndhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE5N2MzYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcG9ydC1mb3J3YXJkL3BvcnRmb3J3YXJkCkBAIC0wLDAgKzEsMjggQEAKKyMgVGhpcyBmaWxlIGlzIHJlYWQgYnkgL3Vzci9zYmluL2Ruc21hc3EtcG9ydGZvcndhcmQgYW5kIHVzZWQgdG8gc2V0IHVwIHBvcnQgCisjIGZvcndhcmRpbmcgdG8gaG9zdG5hbWVzLiBJZiB0aGUgZG5zbWFzcS1kZXRlcm1pbmVkIGhvc3RuYW1lIG1hdGNoZXMgdGhlCisjIGZpcnN0IGNvbHVtbiBvZiB0aGlzIGZpbGUsIHRoZW4gYSBETkFUIHBvcnQtZm9yd2FyZCB3aWxsIGJlIHNldCB1cCAKKyMgdG8gdGhlIGFkZHJlc3Mgd2hpY2ggaGFzIGp1c3QgYmVlbiBhbGxvY2F0ZWQgYnkgREhDUCAuIFRoZSBzZWNvbmQgZmllbGQgCisjIGlzIHBvcnQgbnVtYmVyKHMpLiBJZiB0aGVyZSBpcyBvbmx5IG9uZSwgdGhlbiB0aGUgcG9ydC1mb3J3YXJkIGdvZXMgdG8gCisjIHRoZSBzYW1lIHBvcnQgb24gdGhlIERIQ1AtY2xpZW50LCBpZiB0aGVyZSBhcmUgdHdvIHNlcGVyYXRlZCB3aXRoIGEgCisjIGNvbG9uLCB0aGVuIHRoZSBzZWNvbmQgbnVtYmVyIGlzIHRoZSBwb3J0IHRvIHdoaWNoIHRoZSBjb25uZWN0aW9uIAorIyBpcyBmb3J3YXJkZWQgb24gdGhlIERIQ1AtY2xpZW50LiBCeSBkZWZhdWx0LCBmb3J3YXJkaW5nIGlzIHNldCB1cCAKKyMgZm9yIFRDUCwgYnV0IGl0IGNhbiBkb25lIGZvciBVRFAgaW5zdGVhZCBieSBwcmVmaXhpbmcgdGhlIHBvcnQgdG8gInUiLiAKKyMgVG8gZm9yd2FyZCBib3RoIFRDUCBhbmQgVURQLCB0d28gbGluZXMgYXJlIHJlcXVpcmVkLiAKKyMKKyMgZWcuCisjIHd3d3NlcnZlciA4MAorIyB3aWxsIHNldCB1cCBhIHBvcnQgZm9yd2FyZCBmcm9tIHBvcnQgODAgb24gdGhpcyBob3N0IHRvIHBvcnQgODAgCisjIGF0IHRoZSBhZGRyZXNzIGFsbG9jYXRlZCB0byB3d3dzZXJ2ZXIgd2hlbmV2ZXIgd3d3c2VydmVyIGdldHMgYSBESENQIGxlYXNlLgorIworIyB3d3dzZXJ2ZXIgODA4MDo4MAorIyB3aWxsIHNldCB1cCBhIHBvcnQgZm9yd2FyZCBmcm9tIHBvcnQgODA4MCBvbiB0aGlzIGhvc3QgdG8gcG9ydCA4MAorIyBvbiB0aGUgREhDUC1jbGllbnQuCisjCisjIGRuc3NlcnZlciA1MworIyBkbnNzZXJ2ZXIgdTUzCisjIHdpbGwgcG9ydCBmb3J3YXJkIHBvcnQgNTMgVURQIGFuZCBUQ1AgZnJvbSB0aGlzIGhvc3QgdG8gcG9ydCA1MyBvbiBkbnNzZXJ2ZXIuCisjCisjIFBvcnQgZm9yd2FyZHMgd2lsbCByZWNyZWF0ZWQgd2hlbiBkbnNtYXNxIHJlc3RhcnRzIGFmdGVyIGEgcmVib290LCBhbmQKKyMgcmVtb3ZlZCB3aGVuIERIQ1AgbGVhc2VzIGV4cGlyZS4gQWZ0ZXIgZWRpdGluZyB0aGlzIGZpbGUsIHNlbmQKKyMgU0lHSFVQIHRvIGRuc21hc3EgdG8gaW5zdGFsbCBuZXcgaXB0YWJsZXMgZW50cmllcyBpbiB0aGUga2VybmVsLgorCmRpZmYgLS1naXQgYS9jb250cmliL3NsYWNrd2FyZS1kbnNtYXNxL2Ruc21hc3EuU2xhY2tCdWlsZCBiL2NvbnRyaWIvc2xhY2t3YXJlLWRuc21hc3EvZG5zbWFzcS5TbGFja0J1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM1YmEwODMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3NsYWNrd2FyZS1kbnNtYXNxL2Ruc21hc3EuU2xhY2tCdWlsZApAQCAtMCwwICsxLDU2IEBACisjIS9iaW4vc2gKK0NXRD1gcHdkYAorUEtHPS90bXAvcGFja2FnZS1kbnNtYXNxCisKK1ZFUlNJT049Mi4yNAorQVJDSD0ke0FSQ0g6LWk0ODZ9CitCVUlMRD0ke0JVSUxEOi0xfQorCitpZiBbICIkQVJDSCIgPSAiaTM4NiIgXTsgdGhlbgorICBTTEtDRkxBR1M9Ii1PMiAtbWFyY2g9aTM4NiAtbWNwdT1pNjg2IgorZWxpZiBbICIkQVJDSCIgPSAiaTQ4NiIgXTsgdGhlbgorICBTTEtDRkxBR1M9Ii1PMiAtbWFyY2g9aTQ4NiAtbWNwdT1pNjg2IgorZWxpZiBbICIkQVJDSCIgPSAiczM5MCIgXTsgdGhlbgorICBTTEtDRkxBR1M9Ii1PMiIKK2VsaWYgWyAiJEFSQ0giID0gIng4Nl82NCIgXTsgdGhlbgorICBTTEtDRkxBR1M9Ii1PMiIKK2ZpCisKK3JtIC1yZiAkUEtHCitta2RpciAtcCAkUEtHCitjZCAvdG1wCitybSAtcmYgZG5zbWFzcS0kVkVSU0lPTgordGFyIHh6dmYgJENXRC9kbnNtYXNxLSRWRVJTSU9OLnRhci5negorY2QgZG5zbWFzcS0kVkVSU0lPTgoremNhdCAkQ1dEL2Ruc21hc3EubGVhc2VkaXIuZGlmZi5neiB8IHBhdGNoIC1wMSAtLXZlcmJvc2UgLS1iYWNrdXAgLS1zdWZmaXg9Lm9yaWcgfHwgZXhpdAorY2hvd24gLVIgcm9vdC5yb290IC4KK21ha2UgaW5zdGFsbC1pMThuIFBSRUZJWD0vdXNyIERFU1RESVI9JFBLRyBNQU5ESVI9L3Vzci9tYW4KK2NobW9kIDc1NSAkUEtHL3Vzci9zYmluL2Ruc21hc3EKK2Nob3duIC1SIHJvb3QuYmluICRQS0cvdXNyL3NiaW4KK2d6aXAgLTkgJFBLRy91c3IvbWFuL21hbjgvZG5zbWFzcS44Citmb3IgZiBpbiAkUEtHL3Vzci9zaGFyZS9tYW4vKjsgZG8gCisgICBpZiBbIC1mICQkZi9tYW44L2Ruc21hc3EuOCBdOyB0aGVuIAorICAgICAgICBnemlwIC05ICQkZi9tYW44L2Ruc21hc3EuOCA7IAorICAgZmkgCitkb25lCitnemlwIC05ICRQS0cvdXNyL21hbi8qL21hbjgvZG5zbWFzcS44Citta2RpciAtcCAkUEtHL3Zhci9zdGF0ZS9kbnNtYXNxCisoIGNkICRQS0cKKyAgZmluZCAuIHwgeGFyZ3MgZmlsZSB8IGdyZXAgImV4ZWN1dGFibGUiIHwgZ3JlcCBFTEYgfCBjdXQgLWYgMSAtZCA6IHwgeGFyZ3Mgc3RyaXAgLS1zdHJpcC11bm5lZWRlZCAyPiAvZGV2L251bGwKKyAgZmluZCAuIHwgeGFyZ3MgZmlsZSB8IGdyZXAgInNoYXJlZCBvYmplY3QiIHwgZ3JlcCBFTEYgfCBjdXQgLWYgMSAtZCA6IHwgeGFyZ3Mgc3RyaXAgLS1zdHJpcC11bm5lZWRlZCAyPiAvZGV2L251bGwKKykKK21rZGlyICRQS0cvZXRjCitjYXQgZG5zbWFzcS5jb25mLmV4YW1wbGUgPiAkUEtHL2V0Yy9kbnNtYXNxLmNvbmYubmV3Citta2RpciAkUEtHL2V0Yy9yYy5kCit6Y2F0ICRDV0QvcmMuZG5zbWFzcS5neiA+ICRQS0cvZXRjL3JjLmQvcmMuZG5zbWFzcS5uZXcKK21rZGlyIC1wICRQS0cvdXNyL2RvYy9kbnNtYXNxLSRWRVJTSU9OCitjcCAtYSBcCisgIENIQU5HRUxPRyBDT1BZSU5HIEZBUSBVUEdSQURJTkdfdG9fMi4wIGRvYy5odG1sIHNldHVwLmh0bWwgXAorICAkUEtHL3Vzci9kb2MvZG5zbWFzcS0kVkVSU0lPTgorbWtkaXIgLXAgJFBLRy9pbnN0YWxsCitjYXQgJENXRC9zbGFjay1kZXNjID4gJFBLRy9pbnN0YWxsL3NsYWNrLWRlc2MKK3pjYXQgJENXRC9kb2luc3Quc2guZ3ogPiAkUEtHL2luc3RhbGwvZG9pbnN0LnNoCisKK2NkICRQS0cKK21ha2Vwa2cgLWwgeSAtYyBuIC4uL2Ruc21hc3EtJFZFUlNJT04tJEFSQ0gtJEJVSUxELnRnegorCmRpZmYgLS1naXQgYS9jb250cmliL3NsYWNrd2FyZS1kbnNtYXNxL2Ruc21hc3EubGVhc2VkaXIuZGlmZi5neiBiL2NvbnRyaWIvc2xhY2t3YXJlLWRuc21hc3EvZG5zbWFzcS5sZWFzZWRpci5kaWZmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZmMzMmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3NsYWNrd2FyZS1kbnNtYXNxL2Ruc21hc3EubGVhc2VkaXIuZGlmZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb250cmliL3NsYWNrd2FyZS1kbnNtYXNxL2RvaW5zdC5zaC5neiBiL2NvbnRyaWIvc2xhY2t3YXJlLWRuc21hc3EvZG9pbnN0LnNoLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNDQyMjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3NsYWNrd2FyZS1kbnNtYXNxL2RvaW5zdC5zaC5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb250cmliL3NsYWNrd2FyZS1kbnNtYXNxL3JjLmRuc21hc3EuZ3ogYi9jb250cmliL3NsYWNrd2FyZS1kbnNtYXNxL3JjLmRuc21hc3EuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg2YWJiYgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc2xhY2t3YXJlLWRuc21hc3EvcmMuZG5zbWFzcS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb250cmliL3NsYWNrd2FyZS1kbnNtYXNxL3NsYWNrLWRlc2MgYi9jb250cmliL3NsYWNrd2FyZS1kbnNtYXNxL3NsYWNrLWRlc2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEwYzU3NwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc2xhY2t3YXJlLWRuc21hc3Evc2xhY2stZGVzYwpAQCAtMCwwICsxLDE5IEBACisjIEhPVyBUTyBFRElUIFRISVMgRklMRToKKyMgVGhlICJoYW5keSBydWxlciIgYmVsb3cgbWFrZXMgaXQgZWFzaWVyIHRvIGVkaXQgYSBwYWNrYWdlIGRlc2NyaXB0aW9uLiAgTGluZQorIyB1cCB0aGUgZmlyc3QgJ3wnIGFib3ZlIHRoZSAnOicgZm9sbG93aW5nIHRoZSBiYXNlIHBhY2thZ2UgbmFtZSwgYW5kIHRoZSAnfCcgb24KKyMgdGhlIHJpZ2h0IHNpZGUgbWFya3MgdGhlIGxhc3QgY29sdW1uIHlvdSBjYW4gcHV0IGEgY2hhcmFjdGVyIGluLiAgWW91IG11c3QgbWFrZQorIyBleGFjdGx5IDExIGxpbmVzIGZvciB0aGUgZm9ybWF0dGluZyB0byBiZSBjb3JyZWN0LiAgSXQncyBhbHNvIGN1c3RvbWFyeSB0bworIyBsZWF2ZSBvbmUgc3BhY2UgYWZ0ZXIgdGhlICc6Jy4KKworICAgICAgIHwtLS0tLWhhbmR5LXJ1bGVyLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorZG5zbWFzcTogZG5zbWFzcSAoc21hbGwgRE5TIGFuZCBESENQIHNlcnZlcikKK2Ruc21hc3E6CitkbnNtYXNxOiBEbnNtYXNxIGlzIGEgbGlnaHR3ZWlnaHQsIGVhc3kgdG8gY29uZmlndXJlIEROUyBmb3J3YXJkZXIgYW5kIERIQ1AKK2Ruc21hc3E6IHNlcnZlci4gIEl0IGlzIGRlc2lnbmVkIHRvIHByb3ZpZGUgRE5TIChhbmQgb3B0aW9uYWxseSBESENQKSB0byBhCitkbnNtYXNxOiBzbWFsbCBuZXR3b3JrLCBhbmQgY2FuIHNlcnZlIHRoZSBuYW1lcyBvZiBsb2NhbCBtYWNoaW5lcyB3aGljaCBhcmUgbm90CitkbnNtYXNxOiBpbiB0aGUgZ2xvYmFsIEROUy4gCitkbnNtYXNxOgorZG5zbWFzcTogRG5zbWFzcSB3YXMgd3JpdHRlbiBieSBTaW1vbiBLZWxsZXkuCitkbnNtYXNxOgorZG5zbWFzcToKK2Ruc21hc3E6CmRpZmYgLS1naXQgYS9jb250cmliL3N0YXRpYy1hcnAvc3RhdGljLWFycCBiL2NvbnRyaWIvc3RhdGljLWFycC9zdGF0aWMtYXJwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMTE1YjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3N0YXRpYy1hcnAvc3RhdGljLWFycApAQCAtMCwwICsxLDM1IEBACisjIS9iaW4vc2gKKworIyBDb250cmlidXRlZCBieSBEYXJyZW4gSG9vIDxkYXJyZW4uaG9vQGdtYWlsLmNvbT4KKworIyBJZiB5b3UgdXNlIGRuc21hc3EgYXMgREhDUCBzZXJ2ZXIgb24gYSByb3V0ZXIsIHlvdSBtYXkgaGF2ZQorIyBtZXQgd2l0aCBhdHRhY2tlcnMgdHJ5aW5nIEFSUCBQb2lzb24gUm91dGluZyAoQVBSKSBvbiB5b3VyCisjIGxvY2FsIGFyZWEgbmV0d29yay4gVGhpcyBzY3JpcHQgd2lsbCBzZXR1cCBhICdwZXJtYW5lbnQnIGVudHJ5CisjIGluIHRoZSByb3V0ZXIncyBBUlAgdGFibGUgdXBvbiBlYWNoIERIQ1AgdHJhbnNhY3Rpb24gc28gYXMgdG8KKyMgbWFrZSB0aGUgYXR0YWNrZXIncyBlZmZvcnRzIGxlc3Mgc3VjY2Vzc2Z1bC4KKworIyBVc2FnZToKKyMgZWRpdCAvZXRjL2Ruc21hc3EuY29uZiBhbmQgc3BlY2lmeSB0aGUgcGF0aCBvZiB0aGlzIHNjcmlwdAorIyB0byAgZGhjcC1zY3JpcHQsIGZvciBleGFtcGxlOgorIyAgZGhjcC1zY3JpcHQ9L3Vzci9zYmluL3N0YXRpYy1hcnAKKworIyBpZiAkMSBpcyBhZGQgb3Igb2xkLCB1cGRhdGUgdGhlIHN0YXRpYyBhcnAgdGFibGUgZW50cnkuCisjIGlmICQxIGlzIGRlbCwgdGhlbiBkZWxldGUgdGhlIGVudHJ5IGZyb20gdGhlIHRhYmxlCisjIGlmICQxIGlzIGluaXQgd2hpY2ggaXMgY2FsbGVkIGJ5IGRuc21hc3EgYXQgc3RhcnR1cCwgaXQncyBpZ25vcmVkCisKK0FSUD0vdXNyL3NiaW4vYXJwCisKKyMgQXJndW1lbnRzLgorIyAkMSBpcyBhY3Rpb24gKGFkZCwgZGVsLCBvbGQpCisjICQyIGlzIE1BQworIyAkMyBpcyBhZGRyZXNzCisjICQ0IGlzIGhvc3RuYW1lIChvcHRpb25hbCwgbWF5IGJlIHVuc2V0KQorCitpZiBbICR7MX0gPSBkZWwgXSA7IHRoZW4KKyAgICAgICAgICR7QVJQfSAtZCAkMworZmkKKworaWYgWyAkezF9ID0gb2xkIF0gfHwgWyAkezF9ID0gYWRkIF0gOyB0aGVuCisgICAgICAgICAke0FSUH0gLXMgJDMgJDIKK2ZpCisKZGlmZiAtLWdpdCBhL2NvbnRyaWIvc3lzdGVtZC9SRUFETUUgYi9jb250cmliL3N5c3RlbWQvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MDQ2YzIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3N5c3RlbWQvUkVBRE1FCkBAIC0wLDAgKzEsMTYgQEAKK0hlbGxvLAorCitJIGNyZWF0ZWQgYSBzeXN0ZW1kIHNlcnZpY2UgZmlsZSBmb3IgZG5zbWFzcS4KK3N5c3RlbWQgaXMgYSBzeXN2aW5pdCByZXBsYWNlbWVudCAoc2VlIFsxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCitPbmUgb2YgdGhlIGdvYWxzIG9mIHN5c3RlbWQgaXMgdG8gZW5jb3VyYWdlIHN0YW5kYXJkaXphdGlvbiBiZXR3ZWVuIGRpZmZlcmVudAorZGlzdHJpYnV0aW9ucy4gVGhpcyBtZWFucywgd2hpbGUgSSBhbHNvIHN1Ym1pdHRlZCBhIHRpY2tldCBpbiBEZWJpYW4gR05VL0xpbnV4LAorSSB3b3VsZCBsaWtlIHRvIGFzayB5b3UgdG8gYWNjZXB0IHRoaXMgc2VydmljZSBmaWxlIGFzIHRoZSB1cHN0cmVhbQorZGlzdHJpYnV0b3IsIHNvIHRoYXQgb3RoZXIgZGlzdHJpYnV0aW9ucyBjYW4gdXNlIHRoZSBzYW1lIHNlcnZpY2UgZmlsZSBhbmQKK2RvbuKAmXQgaGF2ZSB0byBzaGlwIHRoZWlyIG93bi4KKworUGxlYXNlIGluY2x1ZGUgdGhpcyBmaWxlIGluIHlvdXIgbmV4dCByZWxlYXNlIChqdXN0IGxpa2UgaW4gaW5pdCBzY3JpcHQpLgorCisKK1sxXSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N5c3RlbWQKKworCmRpZmYgLS1naXQgYS9jb250cmliL3N5c3RlbWQvZGJ1c19hY3RpdmF0aW9uIGIvY29udHJpYi9zeXN0ZW1kL2RidXNfYWN0aXZhdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGYwODIyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zeXN0ZW1kL2RidXNfYWN0aXZhdGlvbgpAQCAtMCwwICsxLDU3IEBACitUbzogZG5zbWFzcS1kaXNjdXNzQGxpc3RzLnRoZWtlbGxleXMub3JnLnVrDQorRnJvbTogQWxleCBFbHNheWVkIDxldGVybmFsZXllK3VzZW5ldEBnbWFpbC5jb20+DQorRGF0ZTogVHVlLCAxNSBNYXkgMjAxMiAwMTo1Mzo1NCAtMDcwMA0KK1N1YmplY3Q6IFtEbnNtYXNxLWRpc2N1c3NdIFtQQVRDSF0gU3VwcG9ydCBkYnVzIGFjdGl2YXRpb24NCisNCitJbnRyb2R1Y2UgZGJ1cyBzZXJ2aWNlIGZpbGUgYW5kIHR1cm4gZGJ1cyBvbiBpbiB0aGUgc3lzdGVtZA0KK3VuaXQuDQorDQorTm90ZSB0byBwYWNrYWdlcnM6DQorVG8gYWRkIHN1cHBvcnQgZm9yIGRidXMgYWN0aXZhdGlvbiwgeW91IG11c3QgaW5zdGFsbCB0aGUgZGJ1cw0KK3NlcnZpY2UgZmlsZSAoZGJ1cy91ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxLnNlcnZpY2UpIGludG8NCiskREFUQURJUi9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzLg0KKw0KKy0tLQ0KKyBjb250cmliL3N5c3RlbWQvZG5zbWFzcS5zZXJ2aWNlICAgICAgICB8ICAgIDIgKy0NCisgZGJ1cy91ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxLnNlcnZpY2UgfCAgICA3ICsrKysrKysNCisgMiBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkNCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRidXMvdWsub3JnLnRoZWtlbGxleXMuZG5zbWFzcS5zZXJ2aWNlDQorDQorZGlmZiAtLWdpdCBhL2NvbnRyaWIvc3lzdGVtZC9kbnNtYXNxLnNlcnZpY2UgDQorYi9jb250cmliL3N5c3RlbWQvZG5zbWFzcS5zZXJ2aWNlDQoraW5kZXggYTI3ZmU2ZC4uNGE3ODRkMyAxMDA2NDQNCistLS0gYS9jb250cmliL3N5c3RlbWQvZG5zbWFzcS5zZXJ2aWNlDQorKysrIGIvY29udHJpYi9zeXN0ZW1kL2Ruc21hc3Euc2VydmljZQ0KK0BAIC01LDcgKzUsNyBAQCBEZXNjcmlwdGlvbj1BIGxpZ2h0d2VpZ2h0IERIQ1AgYW5kIGNhY2hpbmcgRE5TIHNlcnZlcg0KKyBUeXBlPWRidXMNCisgQnVzTmFtZT11ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxDQorIEV4ZWNTdGFydFByZT0vdXNyL3NiaW4vZG5zbWFzcSAtLXRlc3QNCistRXhlY1N0YXJ0PS91c3Ivc2Jpbi9kbnNtYXNxIC1rDQorK0V4ZWNTdGFydD0vdXNyL3NiaW4vZG5zbWFzcSAtayAtMQ0KKyBFeGVjUmVsb2FkPS9iaW4va2lsbCAtSFVQICRNQUlOUElEDQorIA0KKyBbSW5zdGFsbF0NCitkaWZmIC0tZ2l0IGEvZGJ1cy91ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxLnNlcnZpY2UgDQorYi9kYnVzL3VrLm9yZy50aGVrZWxsZXlzLmRuc21hc3Euc2VydmljZQ0KK25ldyBmaWxlIG1vZGUgMTAwNjQ0DQoraW5kZXggMDAwMDAwMC4uZjVmZTk4ZA0KKy0tLSAvZGV2L251bGwNCisrKysgYi9kYnVzL3VrLm9yZy50aGVrZWxsZXlzLmRuc21hc3Euc2VydmljZQ0KK0BAIC0wLDAgKzEsNyBAQA0KKytbRC1CVVMgU2VydmljZV0NCisrTmFtZT11ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxDQorK0V4ZWM9L3Vzci9zYmluL2Ruc21hc3EgLWsgLTENCisrVXNlcj1yb290DQorK1N5c3RlbWRTZXJ2aWNlPWRuc21hc3Euc2VydmljZQ0KKysNCisrDQorLS0gDQorMS43LjEwLjINCisNCisNCisNCitfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KK0Ruc21hc3EtZGlzY3VzcyBtYWlsaW5nIGxpc3QNCitEbnNtYXNxLWRpc2N1c3NAbGlzdHMudGhla2VsbGV5cy5vcmcudWsNCitodHRwOi8vbGlzdHMudGhla2VsbGV5cy5vcmcudWsvbWFpbG1hbi9saXN0aW5mby9kbnNtYXNxLWRpc2N1c3MNCisNCmRpZmYgLS1naXQgYS9jb250cmliL3N5c3RlbWQvZG5zbWFzcS5zZXJ2aWNlIGIvY29udHJpYi9zeXN0ZW1kL2Ruc21hc3Euc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzBiMTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zeXN0ZW1kL2Ruc21hc3Euc2VydmljZQpAQCAtMCwwICsxLDEyIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPWRuc21hc3EgLSBBIGxpZ2h0d2VpZ2h0IERIQ1AgYW5kIGNhY2hpbmcgRE5TIHNlcnZlcgorCitbU2VydmljZV0KK1R5cGU9ZGJ1cworQnVzTmFtZT11ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxCitFeGVjU3RhcnRQcmU9L3Vzci9zYmluL2Ruc21hc3EgLS10ZXN0CitFeGVjU3RhcnQ9L3Vzci9zYmluL2Ruc21hc3EgLWsKK0V4ZWNSZWxvYWQ9L2Jpbi9raWxsIC1IVVAgJE1BSU5QSUQKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvY29udHJpYi90cnktYWxsLW5zL1JFQURNRSBiL2NvbnRyaWIvdHJ5LWFsbC1ucy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI0ZDU1NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvdHJ5LWFsbC1ucy9SRUFETUUKQEAgLTAsMCArMSwxOSBAQAorRGF0ZTogVGh1LCAwNyBEZWMgMjAwNiAwMDo0MTo0MyAtMDUwMAorRnJvbTogQm9iIENhcnJvbGwgPGJvYi5jYXJyb2xsQHJpdC5lZHU+CitTdWJqZWN0OiBkbnNtYXNxIHN1Z2dlc3Rpb24KK1RvOiBzaW1vbkB0aGVrZWxsZXlzLm9yZy51aworCisKK0hlbGxvLAorCitJIHJlY2VudGx5IG5lZWRlZCBhIGZlYXR1cmUgaW4gZG5zbWFzcSBmb3IgYSB2ZXJ5IGJpemFycmUgc2l0dWF0aW9uLiBJIAorcGxhY2VkIGEgbGlzdCBvZiBuYW1lIHNlcnZlcnMgaW4gYSBzcGVjaWFsIHJlc29sdmUgZmlsZSBhbmQgdG9sZCBkbnNtYXNxIAordG8gdXNlIHRoYXQuIEJ1dCBJIHdhbnRlZCBpdCB0byB0cnkgcmVxdWVzdHMgaW4gb3JkZXIgYW5kIHRyZWF0IE5YRE9NQUlOIAorcmVxdWVzdHMgYXMgYSBmYWlsZWQgdGNwIGNvbm5lY3Rpb24uIEkgd3JvdGUgdGhlIGZlYXR1cmUgaW50byBkbnNtYXNxIAorYW5kIGl0IHNlZW1zIHRvIHdvcmsuIEkgcHJlcGFyZWQgYSBwYXRjaCBpbiB0aGUgZXZlbnQgdGhhdCBvdGhlcnMgbWlnaHQgCitmaW5kIGl0IHVzZWZ1bCBhcyB3ZWxsLgorCitUaGFua3MgYW5kIGtlZXAgdXAgdGhlIGdvb2Qgd29yay4KKworLS1Cb2IKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi90cnktYWxsLW5zL1JFQURNRS0yLjQ3IGIvY29udHJpYi90cnktYWxsLW5zL1JFQURNRS0yLjQ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYmVjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3RyeS1hbGwtbnMvUkVBRE1FLTIuNDcKQEAgLTAsMCArMSwxMSBAQAorQSByZW1ha2Ugb2YgcGF0Y2ggQm9iIENhcnJvbGwgaGFkIHBvc3RlZCB0byBkbnNtYXNxLAorbm93IGNvbXBhdGlibGUgd2l0aCB2ZXJzaW9uIDIuNDcuIEhvcGVmdWxseSBoZSBkb2Vzbid0IAorbWluZCAoc2VuZGluZyBhIGNvcHkgb2YgdGhpcyBtYWlsIHRvIGhpbSB0b28pLgorCitNYXliZSB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24gaXMgbm90IGFjY2VwdGlibGUKK2FzIGl0IGRvZXNuJ3QgYWRkIG5ldyBzd2l0Y2gsIHJhdGhlciBpdCBiaW5kcyBpdHNlbGYgdG8gInN0cmljdC1vcmRlciIuCisKK1doYXQgaXQgZG9lcyBpczogaWYgeW91IGhhdmUgc3RyaWN0LW9yZGVyIGluIHRoZSAKK2Ruc21hc3EgY29uZmlnIGZpbGUgYW5kIHF1ZXJ5IGEgZG9tYWluIHRoYXQgd291bGQgcmVzdWx0IAoraW4gTlhET01BSU4sIGl0IGl0ZXJhdGVzIHRoZSB3aG9sZSBnaXZlbiBuYW1lc2VydmVyIGxpc3QgCit1bnRpbCB0aGUgbGFzdCBvbmUgc2F5cyBOWERPTUFJTi4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvdHJ5LWFsbC1ucy9kbnNtYXNxLTIuMzUtdHJ5LWFsbC1ucy5wYXRjaCBiL2NvbnRyaWIvdHJ5LWFsbC1ucy9kbnNtYXNxLTIuMzUtdHJ5LWFsbC1ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzNmM2UwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi90cnktYWxsLW5zL2Ruc21hc3EtMi4zNS10cnktYWxsLW5zLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK2RpZmYgLU5hdSBkbnNtYXNxLTIuMzUvc3JjL2Ruc21hc3EuaCBkbnNtYXNxL3NyYy9kbnNtYXNxLmgKKy0tLSBkbnNtYXNxLTIuMzUvc3JjL2Ruc21hc3EuaAkyMDA2LTEwLTE4IDE2OjI0OjUwLjAwMDAwMDAwMCAtMDQwMAorKysrIGRuc21hc3Evc3JjL2Ruc21hc3EuaAkyMDA2LTExLTE2IDIyOjA2OjMxLjAwMDAwMDAwMCAtMDUwMAorQEAgLTExMiw2ICsxMTIsNyBAQAorICNkZWZpbmUgT1BUX05PX1BJTkcgICAgICAgIDIwOTcxNTIKKyAjZGVmaW5lIE9QVF9MRUFTRV9STyAgICAgICA0MTk0MzA0CisgI2RlZmluZSBPUFRfUkVMT0FEICAgICAgICAgODM4ODYwOAorKyNkZWZpbmUgT1BUX1RSWV9BTExfTlMgICAgIDE2Nzc3MjE2CisgCisgc3RydWN0IGFsbF9hZGRyIHsKKyAgIHVuaW9uIHsKK2RpZmYgLU5hdSBkbnNtYXNxLTIuMzUvc3JjL2ZvcndhcmQuYyBkbnNtYXNxL3NyYy9mb3J3YXJkLmMKKy0tLSBkbnNtYXNxLTIuMzUvc3JjL2ZvcndhcmQuYwkyMDA2LTEwLTE4IDE2OjI0OjUwLjAwMDAwMDAwMCAtMDQwMAorKysrIGRuc21hc3Evc3JjL2ZvcndhcmQuYwkyMDA2LTExLTE2IDIyOjA4OjE5LjAwMDAwMDAwMCAtMDUwMAorQEAgLTQ0NSw2ICs0NDUsMTAgQEAKKyAgICAgeworICAgICAgICBzdHJ1Y3Qgc2VydmVyICpzZXJ2ZXIgPSBmb3J3YXJkLT5zZW50dG87CisgICAgICAgIAorKyAgICAgICAvLyBJZiBzdHJpY3Qtb3JkZXIgYW5kIHRyeS1hbGwtbnMgYXJlIHNldCwgdHJlYXQgTlhET01BSU4gYXMgYSBmYWlsZWQgcmVxdWVzdAorKyAgICAgICBpZiggKGRhZW1vbi0+b3B0aW9ucyAmIE9QVF9PUkRFUikgJiYgKGRhZW1vbi0+b3B0aW9ucyAmJiBPUFRfVFJZX0FMTF9OUykKKysgICAgICAgICAgICYmIGhlYWRlci0+cmNvZGUgPT0gTlhET01BSU4gKSBoZWFkZXItPnJjb2RlID0gU0VSVkZBSUw7CisrCisgICAgICAgIGlmICgoaGVhZGVyLT5yY29kZSA9PSBTRVJWRkFJTCB8fCBoZWFkZXItPnJjb2RlID09IFJFRlVTRUQpICYmIGZvcndhcmQtPmZvcndhcmRhbGwgPT0gMCkKKyAJIC8qIGZvciBicm9rZW4gc2VydmVycywgYXR0ZW1wdCB0byBzZW5kIHRvIGFub3RoZXIgb25lLiAqLworIAkgeworZGlmZiAtTmF1IGRuc21hc3EtMi4zNS9zcmMvb3B0aW9uLmMgZG5zbWFzcS9zcmMvb3B0aW9uLmMKKy0tLSBkbnNtYXNxLTIuMzUvc3JjL29wdGlvbi5jCTIwMDYtMTAtMTggMTY6MjQ6NTAuMDAwMDAwMDAwIC0wNDAwCisrKysgZG5zbWFzcS9zcmMvb3B0aW9uLmMJMjAwNi0xMS0xNiAyMjoxMDozNi4wMDAwMDAwMDAgLTA1MDAKK0BAIC0yOCw3ICsyOCw3IEBACisgCisgLyogb3B0aW9ucyB3aGljaCBkb24ndCBoYXZlIGEgb25lLWNoYXIgdmVyc2lvbiAqLworICNkZWZpbmUgTE9QVF9SRUxPQUQgMjU2CistCisrI2RlZmluZSBMT1BUX1RSWV9BTExfTlMgMjU3CisgCisgI2lmZGVmIEhBVkVfR0VUT1BUX0xPTkcKKyBzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRzW10gPSAgCitAQCAtMTAyLDYgKzEwMiw3IEBACisgICAgIHsibGVhc2VmaWxlLXJvIiwgMCwgMCwgJzknfSwKKyAgICAgeyJkbnMtZm9yd2FyZC1tYXgiLCAxLCAwLCAnMCd9LAorICAgICB7ImNsZWFyLW9uLXJlbG9hZCIsIDAsIDAsIExPUFRfUkVMT0FEIH0sCisrICAgIHsidHJ5LWFsbC1ucyIsIDAsIDAsIExPUFRfVFJZX0FMTF9OUyB9LAorICAgICB7IE5VTEwsIDAsIDAsIDAgfQorICAgfTsKKyAKK0BAIC0xMzQsNiArMTM1LDcgQEAKKyAgIHsgJzUnLCAgICAgICAgICAgIE9QVF9OT19QSU5HIH0sCisgICB7ICc5JywgICAgICAgICAgICBPUFRfTEVBU0VfUk8gfSwKKyAgIHsgTE9QVF9SRUxPQUQsICAgIE9QVF9SRUxPQUQgfSwKKysgIHsgTE9QVF9UUllfQUxMX05TLE9QVF9UUllfQUxMX05TIH0sCisgICB7ICd2JywgICAgICAgICAgICAwfSwKKyAgIHsgJ3cnLCAgICAgICAgICAgIDB9LAorICAgeyAwLCAwIH0KK0BAIC0yMDgsNiArMjEwLDcgQEAKKyAgIHsgIi05LCAtLWxlYXNlZmlsZS1ybyIsIGdldHRleHRfbm9vcCgiUmVhZCBsZWFzZXMgYXQgc3RhcnR1cCwgYnV0IG5ldmVyIHdyaXRlIHRoZSBsZWFzZSBmaWxlLiIpLCBOVUxMIH0sCisgICB7ICItMCwgLS1kbnMtZm9yd2FyZC1tYXg9PHF1ZXJpZXM+IiwgZ2V0dGV4dF9ub29wKCJNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IEROUyBxdWVyaWVzLiAoZGVmYXVsdHMgdG8gJXMpIiksICIhIiB9LCAKKyAgIHsgIiAgICAtLWNsZWFyLW9uLXJlbG9hZCIsIGdldHRleHRfbm9vcCgiQ2xlYXIgRE5TIGNhY2hlIHdoZW4gcmVsb2FkaW5nICVzLiIpLCBSRVNPTFZGSUxFIH0sCisrICB7ICIgICAgLS10cnktYWxsLW5zIiwgZ2V0dGV4dF9ub29wKCJUcnkgYWxsIG5hbWUgc2VydmVycyBpbiB0YW5kZW0gb24gTlhET01BSU4gcmVwbGllcyAodXNlIHdpdGggc3RyaWN0LW9yZGVyKS4iKSwgTlVMTCB9LAorICAgeyBOVUxMLCBOVUxMLCBOVUxMIH0KKyB9OyAKKyAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvdHJ5LWFsbC1ucy9kbnNtYXNxLTIuNDdfbm9fbnhkb21haW5fdW50aWxfZW5kLnBhdGNoIGIvY29udHJpYi90cnktYWxsLW5zL2Ruc21hc3EtMi40N19ub19ueGRvbWFpbl91bnRpbF9lbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU4NjAwMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvdHJ5LWFsbC1ucy9kbnNtYXNxLTIuNDdfbm9fbnhkb21haW5fdW50aWxfZW5kLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK2RpZmYgLXVyIGRuc21hc3EtMi40Ny9zcmMvZm9yd2FyZC5jIGRuc21hc3EtMi40Ny1wYXRjaGVkL3NyYy9mb3J3YXJkLmMKKy0tLSBkbnNtYXNxLTIuNDcvc3JjL2ZvcndhcmQuYwkyMDA5LTAyLTAxIDE3OjU5OjQ4LjAwMDAwMDAwMCArMDIwMAorKysrIGRuc21hc3EtMi40Ny1wYXRjaGVkL3NyYy9mb3J3YXJkLmMJMjAwOS0wMy0xOCAxOToxMDoyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC00ODgsOSArNDg4LDEyIEBACisgICAgIHJldHVybjsKKyAgICAKKyAgIHNlcnZlciA9IGZvcndhcmQtPnNlbnR0bzsKKysKKysgIGlmICggKGhlYWRlci0+cmNvZGUgPT0gTlhET01BSU4pICYmICgoZGFlbW9uLT5vcHRpb25zICYgT1BUX09SREVSKSAhPSAwKSAmJiAoc2VydmVyLT5uZXh0ICE9IE5VTEwpICkKKysgICAgaGVhZGVyLT5yY29kZSA9IFNFUlZGQUlMOworICAgCisgICBpZiAoKGhlYWRlci0+cmNvZGUgPT0gU0VSVkZBSUwgfHwgaGVhZGVyLT5yY29kZSA9PSBSRUZVU0VEKSAmJgorLSAgICAgICEoZGFlbW9uLT5vcHRpb25zICYgT1BUX09SREVSKSAmJgorKyAgICAgICgoZGFlbW9uLT5vcHRpb25zICYgT1BUX09SREVSKSAhPSAwKSAmJgorICAgICAgIGZvcndhcmQtPmZvcndhcmRhbGwgPT0gMCkKKyAgICAgLyogZm9yIGJyb2tlbiBzZXJ2ZXJzLCBhdHRlbXB0IHRvIHNlbmQgdG8gYW5vdGhlciBvbmUuICovCisgICAgIHsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvdHJ5LWFsbC1ucy9kbnNtYXNxLTIuNjgtdHJ5LWFsbC1ucyBiL2NvbnRyaWIvdHJ5LWFsbC1ucy9kbnNtYXNxLTIuNjgtdHJ5LWFsbC1ucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmE0MWY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi90cnktYWxsLW5zL2Ruc21hc3EtMi42OC10cnktYWxsLW5zCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb206IEplc3NlIEdsaWNrIDxqZ2xpY2tAY2xvdWRiZWVzLmNvbT4KK1RvOiBkbnNtYXNxLWRpc2N1c3NAbGlzdHMudGhla2VsbGV5cy5vcmcudWsKK1N1YmplY3Q6IFJlOiBbRG5zbWFzcS1kaXNjdXNzXSBBYmlsaXR5IHRvIGRlbGVnYXRlIHRvIG9uZSBzZXJ2ZXIgYnV0IGZhbGwKKyBiYWNrIHRvIGFub3RoZXIgYWZ0ZXIgTlhET01BSU4/CisKKworT24gV2VkLCBKYW4gMTUsIDIwMTQgYXQgMTI6MzAgUE0sIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+IHdyb3RlOgorPiA+IFRoZXJlJ3MgYSAodmVyeSBvbGQpIHBhdGNoIGluIGNvbnRyaWIvdHJ5LWFsbC1ucyB0aGF0IHdvdWxkIG1ha2UgYSBzdGFydGluZyBwb2ludAorVGhpcyBkb2VzIG5vdCBhcHBseSBhZ2FpbnN0IHRydW5rLCBzbyBJIHRyaWVkIHRvIHJld29yayBpdC4gVGhlCitmb2xsb3dpbmcgYXBwZWFycyB0byBkbyB3aGF0IEkgZXhwZWN0OgorCitkaWZmIC0tZ2l0IGEvc3JjL2ZvcndhcmQuYyBiL3NyYy9mb3J3YXJkLmMKK2luZGV4IDgxNjcyMjkuLjc2MDcwYjUgMTAwNjQ0CistLS0gYS9zcmMvZm9yd2FyZC5jCisrKysgYi9zcmMvZm9yd2FyZC5jCitAQCAtNjEwLDcgKzYxMCwxMSBAQCB2b2lkIHJlcGx5X3F1ZXJ5KGludCBmZCwgaW50IGZhbWlseSwgdGltZV90IG5vdykKKworICAgaWYgKChSQ09ERShoZWFkZXIpID09IFNFUlZGQUlMIHx8IFJDT0RFKGhlYWRlcikgPT0gUkVGVVNFRCkgJiYKKyAgICAgICAhb3B0aW9uX2Jvb2woT1BUX09SREVSKSAmJgorLSAgICAgIGZvcndhcmQtPmZvcndhcmRhbGwgPT0gMCkKKysgICAgICBmb3J3YXJkLT5mb3J3YXJkYWxsID09IDAgfHwKKysgICAgICAvKiB0cnkgZWFjaCBpbiB0dXJuICovCisrICAgICAgUkNPREUoaGVhZGVyKSA9PSBOWERPTUFJTiAmJgorKyAgICAgIG9wdGlvbl9ib29sKE9QVF9PUkRFUikgJiYKKysgICAgICBzZXJ2ZXItPm5leHQgIT0gTlVMTCkKKyAgICAgLyogZm9yIGJyb2tlbiBzZXJ2ZXJzLCBhdHRlbXB0IHRvIHNlbmQgdG8gYW5vdGhlciBvbmUuICovCisgICAgIHsKKyAgICAgICB1bnNpZ25lZCBjaGFyICpwaGVhZGVyOworCmRpZmYgLS1naXQgYS9jb250cmliL3dlYm1pbi9SRUFETUUgYi9jb250cmliL3dlYm1pbi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE4ZjkzNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvd2VibWluL1JFQURNRQpAQCAtMCwwICsxLDU0IEBACisKK1RoaXMgaXMgdGhlIFJFQURNRSBmb3IgdGhlIEROU21hc3Egd2VibWluIG1vZHVsZS4KKworUHJvYmxlbXM6CisKKzEpIFRoZXJlJ3Mgb25seSBiYXNpYyBlcnJvciBjaGVja2luZyAtIGlmIHlvdSBlbnRlciBzb21lIGJhZAorYWRkcmVzc2VzIG9yIG5hbWVzLCB0aGV5IHdpbGwgZ28gc3RyYWlnaHQgaW50byB0aGUgY29uZmlnIGZpbGUKK2FsdGhvdWdoIHdlIGRvIGNoZWNrIGZvciB0aGluZ3MgbGlrZSBJUCBhZGRyZXNzZXMgYmVpbmcgb2YKK3RoZSBjb3JyZWN0IGZvcm0gKG5vIGxldHRlcnMsIDQgZ3JvdXBzIG9mIHVwIHRvIDMgZGlnaXRzCitzZXBhcmF0ZWQgYnkgZG90cyBldGMpLiBPbmUgdGhpbmcgdGhhdCBJU04nVCBDSEVDS0VEIEZPUiBpcwordGhhdCBJUCBkb3R0ZWQgcXVhZHMgYXJlIGFsbCBudW1iZXJzIDwgMjU2LiBBbm90aGVyIGlzIHRoYXQKK25ldG1hc2tzIGFyZSBsb2dpY2FsICh5b3UgY291bGQgZW50ZXIgYSBuZXRtYXNrIG9mIDI1NS4wLjI1NS4wIAorZm9yIGV4YW1wbGUpLiBFc3NlbnRpYWxseSwgaWYgaXQnbGwgcGFzcyB0aGUgY29uZmlnIGZpbGUKK3JlZ2V4IHNjYW5uZXIgKGFuZCB0aGUgYWJvdmUgZXhhbXBsZXMgd2lsbCksIGl0IHdvbid0IGJlIAorZmxhZ2dlZCBhcyAiYmFkIiBldmVuIGlmIGl0IGlzIGEgYmlnIG5vLW5vIGZvciBkbnNtYXNxIGl0c2VsZi4gCisKKzIpIENvZGUgaXMgdWdseSBhbmQgYSBrbHVkZ2UgLSBJIGFpbid0IGEgcHJvZ3JhbW1lciEgVGhlcmUgYXJlIHByb2JhYmx5IAorYSBsb3Qgb2YgdGhpbmdzIHRoYXQgY291bGQgYmUgZG9uZSB0byB0aWR5IHVwIHRoZSBjb2RlIC0gZWcsIAoraXQgcHJvYmFibHkgd291bGRuJ3QgaHVydCB0byBtb3ZlIHNvbWUgY29tbW9uIHN0dWZmIGludG8gdGhlIGxpYiBmaWxlLgorCiszKSBJJ3ZlIHVzZWQgdGhlICV0ZXh0IGhhc2ggYW5kIHdyaXR0ZW4gYW4gZW5nbGlzaCBsYW5nIGZpbGUsIGJ1dAorSSBhbSBtb25vLWxpbmd1YWwgc28gbm8gb3RoZXIgbGFuZ3VhZ2Ugc3VwcG9ydCBhcyB5ZXQuCisKKzQpIGZvciByZWFzb25zIHVua25vd24gdG8gbWUsIHRoZSBpY29uIGRvZXMgbm90IGFwcGVhciBwcm9wZXJseQorb24gdGhlIHNlcnZlcnMgcGFnZSBvZiB3ZWJtaW4gKGF0IGxlYXN0IGl0IGRvZXNuJ3QgZm9yIG1lISkKKworNSkgaWNvbnMgaGF2ZSBiZWVuIHNoYW1lbGVzc2x5IHN0b2xlbiBmcm9tIHRoZSBpcGZpbHRlciBtb2R1bGUsCitzcGVjaWZpY2FsbHkgdGhlIHVwIGFuZCBkb3duIGFycm93cy4KKworNikgaWYgeW91IGRlbGV0ZSBhbiBpdGVtLCB0aGUgY29uZmlnIGZpbGUgd2lsbCBjb250YWluCithbiBvdGhlcndpc2UgZW1wdHksIGJ1dCBjb21tZW50ZWQgbGluZS4gVGhpcyBtZWFucyB0aGF0IGlmCit5b3UgYWRkIHNvbWUgbmV3IHN0dWZmLCB0aGVuIGRlbGV0ZSBpdCwgdGhlIGNvbmZpZyBmaWxlCit3aWxsIGhhdmUgYSBudW1iZXIgb2YgbGluZXMgYXQgdGhlIGVuZCB0aGF0IGFyZSBqdXN0IGNvbW1lbnRzLgorVGhlcmVmb3JlLCB0aGUgY29uZmlnIGZpbGUgY291bGQgcG9zc2libHkgZ3JvdyBxdWl0ZSBsYXJnZS4KKworNykgTk8gSU5DTFVERSBGSUxFUyEKK2lmIHlvdSB1c2UgYW4gaW5jbHVkZSBmaWxlLCBpdCdsbCBiZSBmbGFnZ2VkIGFzIGFuIGVycm9yLiAKK09LIGlmIHRoZSBpbmNsdWRlIGZpbGUgbGluZSBpcyBjb21tZW50ZWQgb3V0IHRob3VnaC4KKworOCkgZGVwcmVjYXRlZCBsaW5lcyBub3Qgc3VwcG9ydGVkIChlZyB1c2VyIGFuZCBncm91cCkgLSB0aGV5CittYXkgcHJvZHVjZSBhbiBlcnJvciEgKHVzZXIgYW5kIGdyb3VwIGRvbid0LCBidXQgeW91IGNhbid0IGNoYW5nZQordGhlbSkKKworSU9XLCBpdCB3b3JrcywgaXQncyBqdXN0IG5vdCB2ZXJ5IGVsZWdhbnQgYW5kIG5vdCB2ZXJ5IHJvYnVzdC4KKworSG9wZSB5b3UgZmluZCBpdCB1c2VmdWwgdGhvdWdoIC0gSSBkbywgYXMgSSBwcmV2ZW50cyBtZSBoYXZpbmcgdG8gZXZlcgord2FkZSB0aHJvdWdoIHRoZSBjb25maWcgZmlsZSBhbmQgbWFuIHBhZ2VzIGFnYWluLgorCitJZiB5b3UgbW9kaWZ5IGl0LCBvciBhZGQgYSBsYW5ndWFnZSBmaWxlLCBhbmQgeW91IGhhdmUgYSBzcGFyZSBtb21lbnQsCitwbGVhc2UgZS1tYWlsIG1lIC0gSSB3b24ndCBiZSB1cHNldCBhdCBhbGwgaWYgeW91IGZpeCBteSBwb29yIGNvZGluZyEKKyhyYXRoZXIgdGhlIG9wcG9zaXRlIC0gSSdkIGJlIHBsZWFzZWQgc29tZW9uZSBmb3VuZCBpdCB1c2VmdWxsKQorCitDaGVlcnMsCisJTmVpbCBGaXNoZXIgPG5laWxAbWFnbmVjb3IuY29tLmF1PgpkaWZmIC0tZ2l0IGEvY29udHJpYi93ZWJtaW4vZG5zbWFzcS53Ym0gYi9jb250cmliL3dlYm1pbi9kbnNtYXNxLndibQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzA3ZTIzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi93ZWJtaW4vZG5zbWFzcS53Ym0KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29udHJpYi93cnQvTWFrZWZpbGUgYi9jb250cmliL3dydC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGU4ZDMyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi93cnQvTWFrZWZpbGUKQEAgLTAsMCArMSw2IEBACitDRkxBR1M/PSAtTzIgLVdhbGwgLVcKKworYWxsOiBkaGNwX3JlbGVhc2UgZGhjcF9sZWFzZV90aW1lCisKK2NsZWFuOgorCXJtIC1mICp+ICoubyBjb3JlIGRoY3BfcmVsZWFzZSBkaGNwX2xlYXNlX3RpbWUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvd3J0L1JFQURNRSBiL2NvbnRyaWIvd3J0L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjIwNDZmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi93cnQvUkVBRE1FCkBAIC0wLDAgKzEsODEgQEAKK1RoaXMgc2NyaXB0IGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBwZXJzaXN0ZW50IGxlYXNlcyBvbiBvcGVuV1JULCBERC1XUlQKK2V0Yy4gUGVyc2lzdGVudCBsZWFzZXMgYXJlIGdvb2Q6IGlmIHRoZSBsZWFzZSBkYXRhYmFzZSBpcyBsb3N0IG9uIGEKK3JlYm9vdCwgdGhlbiBpdCB3aWxsIGV2ZW50dWFsbHkgYmUgcmVzdG9yZWQgYXMgaG9zdHMgcmVuZXcgdGhlaXIKK2xlYXNlcy4gVW50aWwgYSBob3N0IHJlbmV3cyAod2hpY2ggbWF5IHRha2UgaG91cnMvZGF5cykgaXQgd2lsbAorbm90IGV4aXN0IGluIHRoZSBETlMgaWYgZG5zbWFzcSdzIERETlMgZnVuY3Rpb24gaXMgaW4gdXNlLgorCisqV1JUIHN5c3RlbXMgcmVtb3VudCBhbGwgbm9uLXZvbGF0aWxlIGZpbGV5c3RlbXMgcmVhZC1vbmx5IGFmdGVyIGJvb3QsCitzbyB0aGUgbm9ybWFsIGxlYXNlZmlsZSB3aWxsIG5vdCB3b3JrLiBUaGV5IGRvLCBob3dldmVyIGhhdmUgTlYKK3N0b3JhZ2UsIGFjY2Vzc2VkIHdpdGggdGhlIG52cmFtIGNvbW1hbmQ6CisKKy91c3IvbGliICMgIG52cmFtCit1c2FnZTogbnZyYW0gW2dldCBuYW1lXSBbc2V0IG5hbWU9dmFsdWVdIFt1bnNldCBuYW1lXSBbc2hvd10KKworVGhlIHByaW5jaXBsZSBpcyB0aGF0IGxlYXNlcyBhcmUga2VwdCBpbiBOViB2YXJpYWJsZSB3aXRoIGRhdGEKK2NvcnJlc3BvbmRpbmcgdG8gdGhlIGxpbmUgaW4gYSBsZWFzZWZpbGU6CisKK2Ruc21hc3FfbGVhc2VfMTkyLjE2OC4xLjU2PTM2MDAgMDA6NDE6NGE6MDU6ODA6NzQgMTkyLjE2OC4xLjU2ICogKgorCitCeSBnaXZpbmcgZG5zbWFzcSB0aGUgbGVhc2VmaWxlLXJvIGNvbW1hbmQsIGl0IG5vIGxvbmdlciBjcmVhdGVzIG9yIHdyaXRlcyBhCitsZWFzZWZpbGU7IHJlc3BvbnNpYmlsaXR5IGZvciBtYWludGFpbmluZyB0aGUgbGVhc2UgZGF0YWJhc2UgdHJhbnNmZXJzCit0byB0aGUgbGVhc2UgY2hhbmdlIHNjcmlwdC4gQXQgc3RhcnR1cCwgaW4gbGVhc2VmaWxlLXJvIG1vZGUsCitkbnNtYXNxIHdpbGwgcnVuCisKKyI8bGVhc2VfY2hhbmdlX3NjcmlwdD4gaW5pdCIgCisKK2FuZCByZWFkIHdoYXRldmVyIHRoYXQgY29tbWFuZCBzcGl0cyBvdXQsIGV4cGVjdGluZyBpdCB0bworYmUgaW4gZG5zbWFzcSBsZWFzZWZpbGUgZm9ybWF0LgorCitTbyB0aGUgbGVhc2UgY2hhbmdlIHNjcmlwdCwgZ2l2ZW4gImluaXQiIGFzIGFyZ3ZbMV0gd2lsbCAKK3N1Y2sgZXhpc3RpbmcgbGVhc2VzIG91dCBvZiB0aGUgTlZSQU0gYW5kIGVtaXQgdGhlbSBmcm9tCitzdGRvdXQgaW4gdGhlIGNvcnJlY3QgZm9ybWF0LgorCitUaGUgc2Vjb25kIHBhcnQgb2YgdGhlIHByb2JsZW0gaXMga2VlcGluZyB0aGUgTlZSQU0gdXAtdG8tZGF0ZTogdGhpcworaXMgZG9uZSBieSB0aGUgbGVhc2UtY2hhbmdlIHNjcmlwdCB3aGljaCBkbnNtYXNxIHJ1bnMgd2hlbiBhIGxlYXNlIGlzCit1cGRhdGVkLiBXaGVuIGl0IGlzIGNhbGxlZCB3aXRoIGFyZ3ZbMV0gYXMgIm9sZCIsICJhZGQiLCBvciAiZGVsIgoraXQgdXBkYXRlcyB0aGUgcmVsZXZhbnQgbnZyYW0gZW50cnkuCisKK1NvLCBkbnNtYXNxIHNob3VsZCBiZSBydW4gYXMgOgorCitkbnNtYXNxIC0tbGVhc2VmaWxlLXJvIC0tZGhjcC1zY3JpcHQ9L3BhdGgvdG8vbGVhc2VfdXBkYXRlLnNoCisKK29yIHRoZSBzYW1lIGZsYWdzIGFkZGVkIHRvIC9ldGMvZG5zbWFzcS5jb25mCisKKworCitOb3RlczogCisKK1RoaXMgbmVlZHMgZG5zbWFzcS0yLjMzIG9yIGxhdGVyIHRvIHdvcmsuCisKK1RoaXMgdGVjaG5pcXVlIHdpbGwgd29yayB3aXRoLCBvciB3aXRob3V0LCBjb21waWxhdGlvbiB3aXRoCitIQVZFX0JST0tFTl9SVEMuIENvbXBpbGluZyB3aXRoIEhBVkVfQlJPS0VOX1JUQyBpcworX2hpZ2hseV9yZWNvbW1lbmRlZF8gZm9yIHRoaXMgYXBwbGljYXRpb24gc2luY2UgaXMgYXZvaWRzIHByb2JsZW1zCit3aXRoIHRoZSBzeXN0ZW0gY2xvY2sgYmVpbmcgd2FycGVkIGJ5IE5UUCwgYW5kIGl0IHZhc3RseSByZWR1Y2VzIHRoZQorbnVtYmVyIG9mIHdyaXRlcyB0byB0aGUgTlZSQU0uIFdpdGggSEFWRV9CUk9LRU5fUlRDLCBOVlJBTSBpcyB1cGRhdGVkCitvbmx5IHdoZW4gYSBsZWFzZSBpcyBjcmVhdGVkIG9yIGRlc3Ryb3llZDsgd2l0aG91dCBpdCwgYSB3cml0ZSBvY2N1cnMKK2V2ZXJ5IHRpbWUgYSBsZWFzZSBpcyByZW5ld2VkLgorCitJdCBwcm9iYWJseSBtYWtlcyBzZW5zZSB0byByZXN0cmljdCB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBESENQIGxlYXNlcwordG8gYW4gYXBwcm9wcmlhdGUgbnVtYmVyIHVzaW5nIGRoY3AtbGVhc2UtbWF4LiBPbiBhIG5ldyBERF9XUlQgc3lzdGVtLAordGhlcmUgYXJlIGFib3V0IDEwSyBieXRlcyBmcmVlIGluIHRoZSBOVlJBTS4gRWFjaCBsZWFzZSByZWNvcmQgaXMKK2Fib3V0IDEwMCBieXRlcywgc28gcmVzdHJpY3RpbmcgdGhlIG51bWJlciBvZiBsZWFzZXMgdG8gNTAgd2lsbCBsaW1pdAordXNlIHRvIGhhbGYgdGhhdC4gKFRoZSBkZWZhdWx0IGxpbWl0IGluIHRoZSBkaXN0cmlidXRlZCBzb3VyY2UgaXMgMTUwKQorCitBbnkgVUkgc2NyaXB0IHdoaWNoIHJlYWRzIHRoZSBkbnNtYXNxIGxlYXNlZmlsZSB3aWxsIGhhdmUgdG8gYmUKK2FtbWVuZGVkLCBwcm9iYWJseSBieSBjaGFuZ2luZyBpdCB0byByZWFkIHRoZSBvdXRwdXQgb2YgCitgbGVhc2VfdXBkYXRlIGluaXRgIGluc3RlYWQuCisgCisKK1RoYW5rczoKKworVG8gU3RldmUgSG9yYmFjaHVrIGZvciBjaGVja3Mgb24gdGhlIHNjcmlwdCBhbmQgZGVidWdnaW5nIGJleW9uZCB0aGUgCitjYWxsIG9mIGR1dHkuCisKKworU2ltb24gS2VsbGV5CitGcmkgSnVsIDI4IDExOjUxOjEzIEJTVCAyMDA2CisKKworCisKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi93cnQvZGhjcF9sZWFzZV90aW1lLjEgYi9jb250cmliL3dydC9kaGNwX2xlYXNlX3RpbWUuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmE3OGQzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi93cnQvZGhjcF9sZWFzZV90aW1lLjEKQEAgLTAsMCArMSwyNSBAQAorLlRIIERIQ1BfTEVBU0VfVElNRSAxCisuU0ggTkFNRQorZGhjcF9sZWFzZV90aW1lIFwtIFF1ZXJ5IHJlbWFpbmluZyB0aW1lIG9mIGEgbGVhc2Ugb24gYSB0aGUgbG9jYWwgZG5zbWFzcSBESENQIHNlcnZlci4KKy5TSCBTWU5PUFNJUworLkIgIGRoY3BfbGVhc2VfdGltZSA8YWRkcmVzcz4KKy5TSCAiREVTQ1JJUFRJT04iCitTZW5kIGEgREhDUElORk9STSBtZXNzYWdlIHRvIGEgZG5zbWFzcSBzZXJ2ZXIgcnVubmluZyBvbiB0aGUgbG9jYWwgaG9zdAorYW5kIHByaW50ICh0byBzdGRvdXQpIHRoZSB0aW1lIHJlbWFpbmluZyBpbiBhbnkgbGVhc2UgZm9yIHRoZSBnaXZlbgorYWRkcmVzcy4gVGhlIHRpbWUgaXMgZ2l2ZW4gYXMgc3RyaW5nIHByaW50ZWQgdG8gc3Rkb3V0LgorCitJZiBhbiBlcnJvciBvY2N1cnMgb3Igbm8gbGVhc2UgZXhpc3RzIGZvciB0aGUgZ2l2ZW4gYWRkcmVzcywgCitub3RoaW5nIGlzIHNlbnQgdG8gc3Rkb3V0IGEgbWVzc2FnZSBpcyBzZW50IHRvIHN0ZGVyciBhbmQgYQorbm9uLXplcm8gZXJyb3IgY29kZSBpcyByZXR1cm5lZC4KKworUmVxdWlyZXMgZG5zbWFzcSAyLjY3IG9yIGxhdGVyIGFuZCBtYXkgbm90IHdvcmsgd2l0aCBvdGhlciBESENQIHNlcnZlcnMuCisKK1RoZSBhZGRyZXNzIGFyZ3VtZW50IGlzIGEgZG90dGVkLXF1YWQgSVAgYWRkcmVzc2VzIGFuZCBtYW5kYXRvcnkuCisuU0ggTElNSVRBVElPTlMKK09ubHkgd29ya3Mgd2l0aCBJUHY0IGFkZHJlc3NlcyBhbmQgREhDUCBsZWFzZXMuIAorLlNIIFNFRSBBTFNPCisuQlIgZG5zbWFzcSAoOCkKKy5TSCBBVVRIT1IKK1RoaXMgbWFudWFsIHBhZ2Ugd2FzIHdyaXR0ZW4gYnkgU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4uCisKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi93cnQvZGhjcF9sZWFzZV90aW1lLmMgYi9jb250cmliL3dydC9kaGNwX2xlYXNlX3RpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDM4ZWY3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi93cnQvZGhjcF9sZWFzZV90aW1lLmMKQEAgLTAsMCArMSwyMjEgQEAKKy8qIENvcHlyaWdodCAoYykgMjAwNyBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MS4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyovCisKKy8qIGRoY3BfbGVhc2VfdGltZSA8YWRkcmVzcz4gKi8KKworLyogU2VuZCBhIERIQ1BJTkZPUk0gbWVzc2FnZSB0byBhIGRuc21hc3Egc2VydmVyIHJ1bm5pbmcgb24gdGhlIGxvY2FsIGhvc3QKKyAgIGFuZCBwcmludCAodG8gc3Rkb3V0KSB0aGUgdGltZSByZW1haW5pbmcgaW4gYW55IGxlYXNlIGZvciB0aGUgZ2l2ZW4KKyAgIGFkZHJlc3MuIFRoZSB0aW1lIGlzIGdpdmVuIGFzIHN0cmluZyBwcmludGVkIHRvIHN0ZG91dC4KKworICAgSWYgYW4gZXJyb3Igb2NjdXJzIG9yIG5vIGxlYXNlIGV4aXN0cyBmb3IgdGhlIGdpdmVuIGFkZHJlc3MsIAorICAgbm90aGluZyBpcyBzZW50IHRvIHN0ZG91dCBhIG1lc3NhZ2UgaXMgc2VudCB0byBzdGRlcnIgYW5kIGEKKyAgIG5vbi16ZXJvIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQuCisKKyAgIFRoaXMgdmVyc2lvbiByZXF1aXJlcyBkbnNtYXNxIDIuNjcgb3IgbGF0ZXIuIAorKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPiAKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8bmV0L2lmLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8bmV0L2lmX2FycC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNkZWZpbmUgREhDUF9DSEFERFJfTUFYICAgICAgICAgIDE2CisjZGVmaW5lIEJPT1RSRVFVRVNUICAgICAgICAgICAgICAxCisjZGVmaW5lIERIQ1BfQ09PS0lFICAgICAgICAgICAgICAweDYzODI1MzYzCisjZGVmaW5lIE9QVElPTl9QQUQgICAgICAgICAgICAgICAwCisjZGVmaW5lIE9QVElPTl9MRUFTRV9USU1FICAgICAgICA1MQorI2RlZmluZSBPUFRJT05fT1ZFUkxPQUQgICAgICAgICAgNTIKKyNkZWZpbmUgT1BUSU9OX01FU1NBR0VfVFlQRSAgICAgIDUzCisjZGVmaW5lIE9QVElPTl9SRVFVRVNURURfT1BUSU9OUyA1NQorI2RlZmluZSBPUFRJT05fRU5EICAgICAgICAgICAgICAgMjU1CisjZGVmaW5lIERIQ1BJTkZPUk0gICAgICAgICAgICAgICA4CisjZGVmaW5lIERIQ1BfU0VSVkVSX1BPUlQgICAgICAgICA2NworCisjZGVmaW5lIG9wdGlvbl9sZW4ob3B0KSAoKGludCkoKCh1bnNpZ25lZCBjaGFyICopKG9wdCkpWzFdKSkKKyNkZWZpbmUgb3B0aW9uX3B0cihvcHQpICgodm9pZCAqKSYoKCh1bnNpZ25lZCBjaGFyICopKG9wdCkpWzJdKSkKKworCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHUxNjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHUzMjsKKworc3RydWN0IGRoY3BfcGFja2V0IHsKKyAgdTggb3AsIGh0eXBlLCBobGVuLCBob3BzOworICB1MzIgeGlkOworICB1MTYgc2VjcywgZmxhZ3M7CisgIHN0cnVjdCBpbl9hZGRyIGNpYWRkciwgeWlhZGRyLCBzaWFkZHIsIGdpYWRkcjsKKyAgdTggY2hhZGRyW0RIQ1BfQ0hBRERSX01BWF0sIHNuYW1lWzY0XSwgZmlsZVsxMjhdOworICB1MzIgY29va2llOworICB1bnNpZ25lZCBjaGFyIG9wdGlvbnNbMzA4XTsKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpvcHRpb25fZmluZDEodW5zaWduZWQgY2hhciAqcCwgdW5zaWduZWQgY2hhciAqZW5kLCBpbnQgb3B0LCBpbnQgbWluc2l6ZSkKK3sKKyAgd2hpbGUgKCpwICE9IE9QVElPTl9FTkQpIAorICAgIHsKKyAgICAgIGlmIChwID49IGVuZCkKKyAgICAgICAgcmV0dXJuIE5VTEw7IC8qIG1hbGZvcm1lZCBwYWNrZXQgKi8KKyAgICAgIGVsc2UgaWYgKCpwID09IE9QVElPTl9QQUQpCisgICAgICAgIHArKzsKKyAgICAgIGVsc2UgCisgICAgICAgIHsgCisgICAgICAgICAgaW50IG9wdF9sZW47CisgICAgICAgICAgaWYgKHAgPj0gZW5kIC0gMikKKyAgICAgICAgICAgIHJldHVybiBOVUxMOyAvKiBtYWxmb3JtZWQgcGFja2V0ICovCisgICAgICAgICAgb3B0X2xlbiA9IG9wdGlvbl9sZW4ocCk7CisgICAgICAgICAgaWYgKHAgPj0gZW5kIC0gKDIgKyBvcHRfbGVuKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOyAvKiBtYWxmb3JtZWQgcGFja2V0ICovCisgICAgICAgICAgaWYgKCpwID09IG9wdCAmJiBvcHRfbGVuID49IG1pbnNpemUpCisgICAgICAgICAgICByZXR1cm4gcDsKKyAgICAgICAgICBwICs9IG9wdF9sZW4gKyAyOworICAgICAgICB9CisgICAgfQorICAKKyAgcmV0dXJuIG9wdCA9PSBPUFRJT05fRU5EID8gcCA6IE5VTEw7Cit9CisgCitzdGF0aWMgdW5zaWduZWQgY2hhciAqb3B0aW9uX2ZpbmQoc3RydWN0IGRoY3BfcGFja2V0ICptZXNzLCBzaXplX3Qgc2l6ZSwgaW50IG9wdF90eXBlLCBpbnQgbWluc2l6ZSkKK3sKKyAgdW5zaWduZWQgY2hhciAqcmV0LCAqb3ZlcmxvYWQ7CisgIAorICAvKiBza2lwIG92ZXIgREhDUCBjb29raWU7ICovCisgIGlmICgocmV0ID0gb3B0aW9uX2ZpbmQxKCZtZXNzLT5vcHRpb25zWzBdLCAoKHVuc2lnbmVkIGNoYXIgKiltZXNzKSArIHNpemUsIG9wdF90eXBlLCBtaW5zaXplKSkpCisgICAgcmV0dXJuIHJldDsKKworICAvKiBsb29rIGZvciBvdmVybG9hZCBvcHRpb24uICovCisgIGlmICghKG92ZXJsb2FkID0gb3B0aW9uX2ZpbmQxKCZtZXNzLT5vcHRpb25zWzBdLCAoKHVuc2lnbmVkIGNoYXIgKiltZXNzKSArIHNpemUsIE9QVElPTl9PVkVSTE9BRCwgMSkpKQorICAgIHJldHVybiBOVUxMOworICAKKyAgLyogQ2FuIHdlIGxvb2sgaW4gZmlsZW5hbWUgYXJlYSA/ICovCisgIGlmICgob3ZlcmxvYWRbMl0gJiAxKSAmJgorICAgICAgKHJldCA9IG9wdGlvbl9maW5kMSgmbWVzcy0+ZmlsZVswXSwgJm1lc3MtPmZpbGVbMTI4XSwgb3B0X3R5cGUsIG1pbnNpemUpKSkKKyAgICByZXR1cm4gcmV0OworCisgIC8qIGZpbmFsbHkgdHJ5IHNuYW1lIGFyZWEgKi8KKyAgaWYgKChvdmVybG9hZFsyXSAmIDIpICYmCisgICAgICAocmV0ID0gb3B0aW9uX2ZpbmQxKCZtZXNzLT5zbmFtZVswXSwgJm1lc3MtPnNuYW1lWzY0XSwgb3B0X3R5cGUsIG1pbnNpemUpKSkKKyAgICByZXR1cm4gcmV0OworCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG9wdGlvbl91aW50KHVuc2lnbmVkIGNoYXIgKm9wdCwgaW50IHNpemUpCit7CisgIC8qIHRoaXMgd29ycmllcyBhYm91dCB1bmFsaWduZWQgZGF0YSBhbmQgYnl0ZSBvcmRlciAqLworICB1bnNpZ25lZCBpbnQgcmV0ID0gMDsKKyAgaW50IGk7CisgIHVuc2lnbmVkIGNoYXIgKnAgPSBvcHRpb25fcHRyKG9wdCk7CisgIAorICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgIHJldCA9IChyZXQgPDwgOCkgfCAqcCsrOworCisgIHJldHVybiByZXQ7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sgCisgIHN0cnVjdCBpbl9hZGRyIGxlYXNlOworICBzdHJ1Y3QgZGhjcF9wYWNrZXQgcGFja2V0OworICB1bnNpZ25lZCBjaGFyICpwID0gcGFja2V0Lm9wdGlvbnM7CisgIHN0cnVjdCBzb2NrYWRkcl9pbiBkZXN0OworICBpbnQgZmQgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApOworICBzc2l6ZV90IHJjOworICAKKyAgaWYgKGFyZ2MgPCAyKQorICAgIHsgCisgICAgICBmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiBkaGNwX2xlYXNlX3RpbWUgPGFkZHJlc3M+XG4iKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorCisgIGlmIChmZCA9PSAtMSkKKyAgICB7CisgICAgICBwZXJyb3IoImNhbm5vdCBjcmVhdGUgc29ja2V0Iik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAKKyAgbGVhc2Uuc19hZGRyID0gaW5ldF9hZGRyKGFyZ3ZbMV0pOworICAgCisgIG1lbXNldCgmcGFja2V0LCAwLCBzaXplb2YocGFja2V0KSk7CisgCisgIHBhY2tldC5obGVuID0gMDsKKyAgcGFja2V0Lmh0eXBlID0gMDsKKworICBwYWNrZXQub3AgPSBCT09UUkVRVUVTVDsKKyAgcGFja2V0LmNpYWRkciA9IGxlYXNlOworICBwYWNrZXQuY29va2llID0gaHRvbmwoREhDUF9DT09LSUUpOworCisgICoocCsrKSA9IE9QVElPTl9NRVNTQUdFX1RZUEU7CisgICoocCsrKSA9IDE7CisgICoocCsrKSA9IERIQ1BJTkZPUk07CisKKyAgLyogRXhwbGljaXR5IHJlcXVlc3QgdGhlIGxlYXNlIHRpbWUsIGl0IHdvbid0IGJlIHNlbnQgb3RoZXJ3aXNlOgorICAgICB0aGlzIGlzIGEgZG5zbWFzcSBleHRlbnNpb24sIG5vdCBzdGFuZGFyZC4gKi8KKyAgKihwKyspID0gT1BUSU9OX1JFUVVFU1RFRF9PUFRJT05TOworICAqKHArKykgPSAxOworICAqKHArKykgPSBPUFRJT05fTEVBU0VfVElNRTsKKyAgCisgICoocCsrKSA9IE9QVElPTl9FTkQ7CisgCisgIGRlc3Quc2luX2ZhbWlseSA9IEFGX0lORVQ7IAorICBkZXN0LnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcigiMTI3LjAuMC4xIik7CisgIGRlc3Quc2luX3BvcnQgPSBudG9ocyhESENQX1NFUlZFUl9QT1JUKTsKKyAgCisgIGlmIChzZW5kdG8oZmQsICZwYWNrZXQsIHNpemVvZihwYWNrZXQpLCAwLCAKKwkgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmZGVzdCwgc2l6ZW9mKGRlc3QpKSA9PSAtMSkKKyAgICB7CisgICAgICBwZXJyb3IoInNlbmR0byBmYWlsZWQiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorCisgIGFsYXJtKDMpOyAvKiBub2RkeSB0aW1lb3V0LiAqLworCisgIHJjID0gcmVjdihmZCwgJnBhY2tldCwgc2l6ZW9mKHBhY2tldCksIDApOworICAKKyAgaWYgKHJjIDwgKHNzaXplX3QpKHNpemVvZihwYWNrZXQpIC0gc2l6ZW9mKHBhY2tldC5vcHRpb25zKSkpCisgICAgeworICAgICAgcGVycm9yKCJyZWN2IGZhaWxlZCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgaWYgKChwID0gb3B0aW9uX2ZpbmQoJnBhY2tldCwgKHNpemVfdClyYywgT1BUSU9OX0xFQVNFX1RJTUUsIDQpKSkKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgdCA9IG9wdGlvbl91aW50KHAsIDQpOworICAgICAgaWYgKHQgPT0gMHhmZmZmZmZmZikKKwlwcmludGYoImluZmluaXRlIik7CisgICAgICBlbHNlCisJeworCSAgdW5zaWduZWQgaW50IHg7CisJICBpZiAoKHggPSB0Lzg2NDAwKSkKKwkgICAgcHJpbnRmKCIlZGQiLCB4KTsKKwkgIGlmICgoeCA9ICh0LzM2MDApJTI0KSkKKwkgICAgcHJpbnRmKCIlZGgiLCB4KTsKKwkgIGlmICgoeCA9ICh0LzYwKSU2MCkpCisJICAgIHByaW50ZigiJWRtIiwgeCk7CisJICBpZiAoKHggPSB0JTYwKSkKKwkgICAgcHJpbnRmKCIlZHMiLCB4KTsKKwl9CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgcmV0dXJuIDE7IC8qIG5vIGxlYXNlICovCit9CmRpZmYgLS1naXQgYS9jb250cmliL3dydC9kaGNwX3JlbGVhc2UuMSBiL2NvbnRyaWIvd3J0L2RoY3BfcmVsZWFzZS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MWFiYTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3dydC9kaGNwX3JlbGVhc2UuMQpAQCAtMCwwICsxLDM3IEBACisuVEggREhDUF9SRUxFQVNFIDEKKy5TSCBOQU1FCitkaGNwX3JlbGVhc2UgXC0gUmVsZWFzZSBhIERIQ1AgbGVhc2Ugb24gYSB0aGUgbG9jYWwgZG5zbWFzcSBESENQIHNlcnZlci4KKy5TSCBTWU5PUFNJUworLkIgZGhjcF9yZWxlYXNlIDxpbnRlcmZhY2U+IDxhZGRyZXNzPiA8TUFDIGFkZHJlc3M+IDxjbGllbnRfaWQ+CisuU0ggIkRFU0NSSVBUSU9OIgorQSB1dGlsaXR5IHdoaWNoIGZvcmNlcyB0aGUgREhDUCBzZXJ2ZXIgcnVubmluZyBvbiB0aGlzIG1hY2hpbmUgdG8gcmVsZWFzZSBhIAorREhDUCBsZWFzZS4KKy5QUAorU2VuZCBhIERIQ1BSRUxFQVNFIG1lc3NhZ2UgdmlhIHRoZSBzcGVjaWZpZWQgaW50ZXJmYWNlIHRvIHRlbGwgdGhlCitsb2NhbCBESENQIHNlcnZlciB0byBkZWxldGUgYSBwYXJ0aWN1bGFyIGxlYXNlLiAKKworVGhlIGludGVyZmFjZSBhcmd1bWVudCBpcyB0aGUgaW50ZXJmYWNlIGluIHdoaWNoIGEgREhDUAorcmVxdWVzdCBfd291bGRfIGJlIHJlY2VpdmVkIGlmIGl0IHdhcyBjb21pbmcgZnJvbSB0aGUgY2xpZW50LCAKK3JhdGhlciB0aGFuIGJlaW5nIGZha2VkIHVwIGhlcmUuCisgICAKK1RoZSBhZGRyZXNzIGFyZ3VtZW50IGlzIGEgZG90dGVkLXF1YWQgSVAgYWRkcmVzc2VzIGFuZCBtYW5kYXRvcnkuIAorICAgCitUaGUgTUFDIGFkZHJlc3MgaXMgY29sb24gc2VwYXJhdGVkIGhleCwgYW5kIGlzIG1hbmRhdG9yeS4gSXQgbWF5IGJlIAorcHJlZml4ZWQgYnkgYW4gYWRkcmVzcy10eXBlIGJ5dGUgZm9sbG93ZWQgYnkgLSwgZWcKKworMTAtMTE6MjI6MzM6NDQ6NTU6NjYKKworYnV0IGlmIHRoZSBhZGRyZXNzLXR5cGUgYnl0ZSBpcyBtaXNzaW5nIGl0IGlzIGFzc3VtZWQgdG8gYmUgMSwgdGhlIHR5cGUgCitmb3IgZXRoZXJuZXQuIFRoaXMgZW5jb2RpbmcgaXMgdGhlIG9uZSB1c2VkIGluIGRuc21hc3EgbGVhc2UgZmlsZXMuCisKK1RoZSBjbGllbnQtaWQgaXMgb3B0aW9uYWwuIElmIGl0IGlzICIqIiB0aGVuIGl0IHRyZWF0ZWQgYXMgYmVpbmcgbWlzc2luZy4KKy5TSCBOT1RFUworTVVTVCBiZSBydW4gYXMgcm9vdCAtIHdpbGwgZmFpbCBvdGhlcndpc2UuCisuU0ggTElNSVRBVElPTlMKK09ubHkgdXNhYmxlIG9uIElQdjQgREhDUCBsZWFzZXMuCisuU0ggU0VFIEFMU08KKy5CUiBkbnNtYXNxICg4KQorLlNIIEFVVEhPUgorVGhpcyBtYW51YWwgcGFnZSB3YXMgd3JpdHRlbiBieSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPi4KKworCmRpZmYgLS1naXQgYS9jb250cmliL3dydC9kaGNwX3JlbGVhc2UuYyBiL2NvbnRyaWIvd3J0L2RoY3BfcmVsZWFzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZjQ3ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3dydC9kaGNwX3JlbGVhc2UuYwpAQCAtMCwwICsxLDMyNyBAQAorLyogQ29weXJpZ2h0IChjKSAyMDA2IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKi8KKworLyogZGhjcF9yZWxlYXNlIDxpbnRlcmZhY2U+IDxhZGRyZXNzPiA8TUFDIGFkZHJlc3M+IDxjbGllbnRfaWQ+CisgICBNVVNUIGJlIHJ1biBhcyByb290IC0gd2lsbCBmYWlsIG90aGVyd2lzZS4gKi8KKworLyogU2VuZCBhIERIQ1BSRUxFQVNFIG1lc3NhZ2UgdmlhIHRoZSBzcGVjaWZpZWQgaW50ZXJmYWNlIAorICAgdG8gdGVsbCB0aGUgbG9jYWwgREhDUCBzZXJ2ZXIgdG8gZGVsZXRlIGEgcGFydGljdWxhciBsZWFzZS4gCisgICAKKyAgIFRoZSBpbnRlcmZhY2UgYXJndW1lbnQgaXMgdGhlIGludGVyZmFjZSBpbiB3aGljaCBhIERIQ1AKKyAgIHJlcXVlc3QgX3dvdWxkXyBiZSByZWNlaXZlZCBpZiBpdCB3YXMgY29taW5nIGZyb20gdGhlIGNsaWVudCwgCisgICByYXRoZXIgdGhhbiBiZWluZyBmYWtlZCB1cCBoZXJlLgorICAgCisgICBUaGUgYWRkcmVzcyBhcmd1bWVudCBpcyBhIGRvdHRlZC1xdWFkIElQIGFkZHJlc3NlcyBhbmQgbWFuZGF0b3J5LiAKKyAgIAorICAgVGhlIE1BQyBhZGRyZXNzIGlzIGNvbG9uIHNlcGFyYXRlZCBoZXgsIGFuZCBpcyBtYW5kYXRvcnkuIEl0IG1heSBiZSAKKyAgIHByZWZpeGVkIGJ5IGFuIGFkZHJlc3MtdHlwZSBieXRlIGZvbGxvd2VkIGJ5IC0sIGVnCisKKyAgIDEwLTExOjIyOjMzOjQ0OjU1OjY2CisKKyAgIGJ1dCBpZiB0aGUgYWRkcmVzcy10eXBlIGJ5dGUgaXMgbWlzc2luZyBpdCBpcyBhc3N1bWVkIHRvIGJlIDEsIHRoZSB0eXBlIAorICAgZm9yIGV0aGVybmV0LiBUaGlzIGVuY29kaW5nIGlzIHRoZSBvbmUgdXNlZCBpbiBkbnNtYXNxIGxlYXNlIGZpbGVzLgorCisgICBUaGUgY2xpZW50LWlkIGlzIG9wdGlvbmFsLiBJZiBpdCBpcyAiKiIgdGhlbiBpdCB0cmVhdGVkIGFzIGJlaW5nIG1pc3NpbmcuCisqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+IAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxuZXQvaWZfYXJwLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2RlZmluZSBESENQX0NIQUREUl9NQVggICAgICAgICAgMTYKKyNkZWZpbmUgQk9PVFJFUVVFU1QgICAgICAgICAgICAgIDEKKyNkZWZpbmUgREhDUF9DT09LSUUgICAgICAgICAgICAgIDB4NjM4MjUzNjMKKyNkZWZpbmUgT1BUSU9OX1NFUlZFUl9JREVOVElGSUVSIDU0CisjZGVmaW5lIE9QVElPTl9DTElFTlRfSUQgICAgICAgICA2MQorI2RlZmluZSBPUFRJT05fTUVTU0FHRV9UWVBFICAgICAgNTMKKyNkZWZpbmUgT1BUSU9OX0VORCAgICAgICAgICAgICAgIDI1NQorI2RlZmluZSBESENQUkVMRUFTRSAgICAgICAgICAgICAgNworI2RlZmluZSBESENQX1NFUlZFUl9QT1JUICAgICAgICAgNjcKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHU4OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1MTY7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7CisKK3N0cnVjdCBkaGNwX3BhY2tldCB7CisgIHU4IG9wLCBodHlwZSwgaGxlbiwgaG9wczsKKyAgdTMyIHhpZDsKKyAgdTE2IHNlY3MsIGZsYWdzOworICBzdHJ1Y3QgaW5fYWRkciBjaWFkZHIsIHlpYWRkciwgc2lhZGRyLCBnaWFkZHI7CisgIHU4IGNoYWRkcltESENQX0NIQUREUl9NQVhdLCBzbmFtZVs2NF0sIGZpbGVbMTI4XTsKKyAgdTMyIGNvb2tpZTsKKyAgdW5zaWduZWQgY2hhciBvcHRpb25zWzMwOF07Cit9OworCitzdGF0aWMgc3RydWN0IGlvdmVjIGlvdjsKKworc3RhdGljIGludCBleHBhbmRfYnVmKHN0cnVjdCBpb3ZlYyAqaW92LCBzaXplX3Qgc2l6ZSkKK3sKKyAgdm9pZCAqbmV3OworCisgIGlmIChzaXplIDw9IGlvdi0+aW92X2xlbikKKyAgICByZXR1cm4gMTsKKworICBpZiAoIShuZXcgPSBtYWxsb2Moc2l6ZSkpKQorICAgIHsKKyAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIGlmIChpb3YtPmlvdl9iYXNlKQorICAgIHsKKyAgICAgIG1lbWNweShuZXcsIGlvdi0+aW92X2Jhc2UsIGlvdi0+aW92X2xlbik7CisgICAgICBmcmVlKGlvdi0+aW92X2Jhc2UpOworICAgIH0KKworICBpb3YtPmlvdl9iYXNlID0gbmV3OworICBpb3YtPmlvdl9sZW4gPSBzaXplOworCisgIHJldHVybiAxOworfQorCitzdGF0aWMgc3NpemVfdCBuZXRsaW5rX3JlY3YoaW50IGZkKQoreworICBzdHJ1Y3QgbXNnaGRyIG1zZzsKKyAgc3NpemVfdCByYzsKKworICBtc2cubXNnX2NvbnRyb2wgPSBOVUxMOworICBtc2cubXNnX2NvbnRyb2xsZW4gPSAwOworICBtc2cubXNnX25hbWUgPSBOVUxMOworICBtc2cubXNnX25hbWVsZW4gPSAwOworICBtc2cubXNnX2lvdiA9ICZpb3Y7CisgIG1zZy5tc2dfaW92bGVuID0gMTsKKyAgICAKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgbXNnLm1zZ19mbGFncyA9IDA7CisgICAgICB3aGlsZSAoKHJjID0gcmVjdm1zZyhmZCwgJm1zZywgTVNHX1BFRUspKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisgICAgICAKKyAgICAgIC8qIDIuMi54IGRvZXNuJ3Qgc3Vwb3J0IE1TR19QRUVLIGF0IGFsbCwgcmV0dXJuaW5nIEVPUE5PVFNVUFAsIHNvIHdlIGp1c3QgZ3JhYiBhIAorICAgICAgICAgYmlnIGJ1ZmZlciBhbmQgcHJheSBpbiB0aGF0IGNhc2UuICovCisgICAgICBpZiAocmMgPT0gLTEgJiYgZXJybm8gPT0gRU9QTk9UU1VQUCkKKyAgICAgICAgeworICAgICAgICAgIGlmICghZXhwYW5kX2J1ZigmaW92LCAyMDAwKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgCisgICAgICBpZiAocmMgPT0gLTEgfHwgIShtc2cubXNnX2ZsYWdzICYgTVNHX1RSVU5DKSkKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgIGlmICghZXhwYW5kX2J1ZigmaW92LCBpb3YuaW92X2xlbiArIDEwMCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgLyogZmluYWxseSwgcmVhZCBpdCBmb3IgcmVhbCAqLworICB3aGlsZSAoKHJjID0gcmVjdm1zZyhmZCwgJm1zZywgMCkpID09IC0xICYmIGVycm5vID09IEVJTlRSKTsKKyAgCisgIHJldHVybiByYzsKK30KKworc3RhdGljIGludCBwYXJzZV9oZXgoY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwgaW50IG1heGxlbiwgaW50ICptYWNfdHlwZSkKK3sKKyAgaW50IGkgPSAwOworICBjaGFyICpyOworICAgIAorICBpZiAobWFjX3R5cGUpCisgICAgKm1hY190eXBlID0gMDsKKyAgCisgIHdoaWxlIChtYXhsZW4gPT0gLTEgfHwgaSA8IG1heGxlbikKKyAgICB7CisgICAgICBmb3IgKHIgPSBpbjsgKnIgIT0gMCAmJiAqciAhPSAnOicgJiYgKnIgIT0gJy0nOyByKyspOworICAgICAgaWYgKCpyID09IDApCisgICAgICAgIG1heGxlbiA9IGk7CisgICAgICAKKyAgICAgIGlmIChyICE9IGluICkKKyAgICAgICAgeworICAgICAgICAgIGlmICgqciA9PSAnLScgJiYgaSA9PSAwICYmIG1hY190eXBlKQorICAgICAgICAgICB7CisgICAgICAgICAgICAgICpyID0gMDsKKyAgICAgICAgICAgICAgKm1hY190eXBlID0gc3RydG9sKGluLCBOVUxMLCAxNik7CisgICAgICAgICAgICAgIG1hY190eXBlID0gTlVMTDsKKyAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgKnIgPSAwOworCSAgICAgIG91dFtpXSA9IHN0cnRvbChpbiwgTlVMTCwgMTYpOworICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGluID0gcisxOworICAgIH0KKyAgICByZXR1cm4gaTsKK30KKworc3RhdGljIGludCBpc19zYW1lX25ldChzdHJ1Y3QgaW5fYWRkciBhLCBzdHJ1Y3QgaW5fYWRkciBiLCBzdHJ1Y3QgaW5fYWRkciBtYXNrKQoreworICByZXR1cm4gKGEuc19hZGRyICYgbWFzay5zX2FkZHIpID09IChiLnNfYWRkciAmIG1hc2suc19hZGRyKTsKK30KKworc3RhdGljIHN0cnVjdCBpbl9hZGRyIGZpbmRfaW50ZXJmYWNlKHN0cnVjdCBpbl9hZGRyIGNsaWVudCwgaW50IGZkLCB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisgIHN0cnVjdCBzb2NrYWRkcl9ubCBhZGRyOworICBzdHJ1Y3Qgbmxtc2doZHIgKmg7CisgIHNzaXplX3QgbGVuOworIAorICBzdHJ1Y3QgeworICAgIHN0cnVjdCBubG1zZ2hkciBubGg7CisgICAgc3RydWN0IHJ0Z2VubXNnIGc7IAorICB9IHJlcTsKKworICBhZGRyLm5sX2ZhbWlseSA9IEFGX05FVExJTks7CisgIGFkZHIubmxfcGFkID0gMDsKKyAgYWRkci5ubF9ncm91cHMgPSAwOworICBhZGRyLm5sX3BpZCA9IDA7IC8qIGFkZHJlc3MgdG8ga2VybmVsICovCisKKyAgcmVxLm5saC5ubG1zZ19sZW4gPSBzaXplb2YocmVxKTsKKyAgcmVxLm5saC5ubG1zZ190eXBlID0gUlRNX0dFVEFERFI7CisgIHJlcS5ubGgubmxtc2dfZmxhZ3MgPSBOTE1fRl9ST09UIHwgTkxNX0ZfTUFUQ0ggfCBOTE1fRl9SRVFVRVNUIHwgTkxNX0ZfQUNLOyAKKyAgcmVxLm5saC5ubG1zZ19waWQgPSAwOworICByZXEubmxoLm5sbXNnX3NlcSA9IDE7CisgIHJlcS5nLnJ0Z2VuX2ZhbWlseSA9IEFGX0lORVQ7IAorCisgIGlmIChzZW5kdG8oZmQsICh2b2lkICopJnJlcSwgc2l6ZW9mKHJlcSksIDAsIAorCSAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzaXplb2YoYWRkcikpID09IC0xKQorICAgIHsKKyAgICAgIHBlcnJvcigic2VuZHRvIGZhaWxlZCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgIAorICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBpZiAoKGxlbiA9IG5ldGxpbmtfcmVjdihmZCkpID09IC0xKQorCXsKKwkgIHBlcnJvcigibmV0bGluayIpOworCSAgZXhpdCgxKTsKKwl9CisKKyAgICAgIGZvciAoaCA9IChzdHJ1Y3Qgbmxtc2doZHIgKilpb3YuaW92X2Jhc2U7IE5MTVNHX09LKGgsIChzaXplX3QpbGVuKTsgaCA9IE5MTVNHX05FWFQoaCwgbGVuKSkKKwlpZiAoaC0+bmxtc2dfdHlwZSA9PSBOTE1TR19ET05FKQorCSAgZXhpdCgwKTsKKwllbHNlIGlmIChoLT5ubG1zZ190eXBlID09IFJUTV9ORVdBRERSKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHN0cnVjdCBpZmFkZHJtc2cgKmlmYSA9IE5MTVNHX0RBVEEoaCk7ICAKKyAgICAgICAgICAgIHN0cnVjdCBydGF0dHIgKnJ0YTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW4xID0gaC0+bmxtc2dfbGVuIC0gTkxNU0dfTEVOR1RIKHNpemVvZigqaWZhKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpZmEtPmlmYV9pbmRleCA9PSBpbmRleCAmJiBpZmEtPmlmYV9mYW1pbHkgPT0gQUZfSU5FVCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0cnVjdCBpbl9hZGRyIG5ldG1hc2ssIGFkZHI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbmV0bWFzay5zX2FkZHIgPSBodG9ubCgweGZmZmZmZmZmIDw8ICgzMiAtIGlmYS0+aWZhX3ByZWZpeGxlbikpOworICAgICAgICAgICAgICAgIGFkZHIuc19hZGRyID0gMDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHJ0YSA9IElGQV9SVEEoaWZhKTsgUlRBX09LKHJ0YSwgbGVuMSk7IHJ0YSA9IFJUQV9ORVhUKHJ0YSwgbGVuMSkpCisJCSAgaWYgKHJ0YS0+cnRhX3R5cGUgPT0gSUZBX0xPQ0FMKQorCQkgICAgYWRkciA9ICooKHN0cnVjdCBpbl9hZGRyICopKHJ0YSsxKSk7CisJCQorICAgICAgICAgICAgICAgIGlmIChhZGRyLnNfYWRkciAmJiBpc19zYW1lX25ldChhZGRyLCBjbGllbnQsIG5ldG1hc2spKQorCQkgIHJldHVybiBhZGRyOworCSAgICAgIH0KKwkgIH0KKyAgICB9CisgCisgIGV4aXQoMCk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sgCisgIHN0cnVjdCBpbl9hZGRyIHNlcnZlciwgbGVhc2U7CisgIGludCBtYWNfdHlwZTsKKyAgc3RydWN0IGRoY3BfcGFja2V0IHBhY2tldDsKKyAgdW5zaWduZWQgY2hhciAqcCA9IHBhY2tldC5vcHRpb25zOworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gZGVzdDsKKyAgc3RydWN0IGlmcmVxIGlmcjsKKyAgaW50IGZkID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTsKKyAgaW50IG5sID0gc29ja2V0KEFGX05FVExJTkssIFNPQ0tfUkFXLCBORVRMSU5LX1JPVVRFKTsKKworICBpZiAoYXJnYyA8IDQgfHwgYXJnYyA+IDUpCisgICAgeyAKKyAgICAgIGZwcmludGYoc3RkZXJyLCAidXNhZ2U6IGRoY3BfcmVsZWFzZSA8aW50ZXJmYWNlPiA8YWRkcj4gPG1hYz4gWzxjbGllbnRfaWQ+XVxuIik7CisgICAgICBleGl0KDEpOworICAgIH0KKworICBpZiAoZmQgPT0gLTEgfHwgbmwgPT0gLTEpCisgICAgeworICAgICAgcGVycm9yKCJjYW5ub3QgY3JlYXRlIHNvY2tldCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgIAorICAvKiBUaGlzIHZvb2RvbyBmYWtlcyB1cCBhIHBhY2tldCBjb21pbmcgZnJvbSB0aGUgY29ycmVjdCBpbnRlcmZhY2UsIHdoaWNoIHJlYWxseSBtYXR0ZXJzIGZvciAKKyAgICAgYSBESENQIHNlcnZlciAqLworICBzdHJjcHkoaWZyLmlmcl9uYW1lLCBhcmd2WzFdKTsKKyAgaWYgKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX0JJTkRUT0RFVklDRSwgJmlmciwgc2l6ZW9mKGlmcikpID09IC0xKQorICAgIHsKKyAgICAgIHBlcnJvcigiY2Fubm90IHNldHVwIGludGVyZmFjZSIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgIAorICAKKyAgbGVhc2Uuc19hZGRyID0gaW5ldF9hZGRyKGFyZ3ZbMl0pOworICBzZXJ2ZXIgPSBmaW5kX2ludGVyZmFjZShsZWFzZSwgbmwsIGlmX25hbWV0b2luZGV4KGFyZ3ZbMV0pKTsKKyAgCisgIG1lbXNldCgmcGFja2V0LCAwLCBzaXplb2YocGFja2V0KSk7CisgCisgIHBhY2tldC5obGVuID0gcGFyc2VfaGV4KGFyZ3ZbM10sIHBhY2tldC5jaGFkZHIsIERIQ1BfQ0hBRERSX01BWCwgJm1hY190eXBlKTsKKyAgaWYgKG1hY190eXBlID09IDApCisgICAgcGFja2V0Lmh0eXBlID0gQVJQSFJEX0VUSEVSOworICBlbHNlCisgICAgcGFja2V0Lmh0eXBlID0gbWFjX3R5cGU7CisKKyAgcGFja2V0Lm9wID0gQk9PVFJFUVVFU1Q7CisgIHBhY2tldC5jaWFkZHIgPSBsZWFzZTsKKyAgcGFja2V0LmNvb2tpZSA9IGh0b25sKERIQ1BfQ09PS0lFKTsKKworICAqKHArKykgPSBPUFRJT05fTUVTU0FHRV9UWVBFOworICAqKHArKykgPSAxOworICAqKHArKykgPSBESENQUkVMRUFTRTsKKworICAqKHArKykgPSBPUFRJT05fU0VSVkVSX0lERU5USUZJRVI7CisgICoocCsrKSA9IHNpemVvZihzZXJ2ZXIpOworICBtZW1jcHkocCwgJnNlcnZlciwgc2l6ZW9mKHNlcnZlcikpOworICBwICs9IHNpemVvZihzZXJ2ZXIpOworCisgIGlmIChhcmdjID09IDUgJiYgc3RyY21wKGFyZ3ZbNF0sICIqIikgIT0gMCkKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgY2xpZF9sZW4gPSBwYXJzZV9oZXgoYXJndls0XSwgcCsyLCAyNTUsIE5VTEwpOworICAgICAgKihwKyspID0gT1BUSU9OX0NMSUVOVF9JRDsKKyAgICAgICoocCsrKSA9IGNsaWRfbGVuOworICAgICAgcCArPSBjbGlkX2xlbjsKKyAgICB9CisgIAorICAqKHArKykgPSBPUFRJT05fRU5EOworIAorICBkZXN0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICBkZXN0LnNpbl9wb3J0ID0gbnRvaHMoREhDUF9TRVJWRVJfUE9SVCk7CisgIGRlc3Quc2luX2FkZHIgPSBzZXJ2ZXI7CisKKyAgaWYgKHNlbmR0byhmZCwgJnBhY2tldCwgc2l6ZW9mKHBhY2tldCksIDAsIAorCSAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZkZXN0LCBzaXplb2YoZGVzdCkpID09IC0xKQorICAgIHsKKyAgICAgIHBlcnJvcigic2VuZHRvIGZhaWxlZCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3dydC9sZWFzZV91cGRhdGUuc2ggYi9jb250cmliL3dydC9sZWFzZV91cGRhdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDY1MDliMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvd3J0L2xlYXNlX3VwZGF0ZS5zaApAQCAtMCwwICsxLDU0IEBACisjIS9iaW4vc2gKKworIyBDb3B5cmlnaHQgKGMpIDIwMDYgU2ltb24gS2VsbGV5CisjCisjICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLgorIworIyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworCisjIGlmICQxIGlzIGFkZCBkZWwgb3Igb2xkLCB0aGlzIGlzIGEgZG5zbWFzcS1jYWxsZWQgbGVhc2UtY2hhbmdlCisjIHNjcmlwdCwgdXBkYXRlIHRoZSBudnJhbSBkYXRhYmFzZS4gaWYgJDEgaXMgaW5pdCwgZW1pdCBhIAorIyBkbnNtYXNxLWZvcm1hdCBsZWFzZSBmaWxlIHRvIHN0ZG91dCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIAorIyBkYXRhYmFzZSwgdGhpcyBpcyBjYWxsZWQgYnkgZG5zbWFzcSBhdCBzdGFydHVwLgorCitOVlJBTT0vdXNyL3NiaW4vbnZyYW0KK1BSRUZJWD1kbnNtYXNxX2xlYXNlXworCisjIEFyZ3VtZW50cy4KKyMgJDEgaXMgYWN0aW9uIChhZGQsIGRlbCwgb2xkKQorIyAkMiBpcyBNQUMgCisjICQzIGlzIGFkZHJlc3MKKyMgJDQgaXMgaG9zdG5hbWUgKG9wdGlvbmFsLCBtYXkgYmUgdW5zZXQpCisKKyMgZW52LgorIyBETlNNQVNRX0xFQVNFX0xFTkdUSCBvciBETlNNQVNRX0xFQVNFX0VYUElSRVMgKHdoaWNoIGRlcGVuZHMgb24gSEFWRV9CUk9LRU5fUlRDKQorIyBETlNNQVNRX0NMSUVOVF9JRCAob3B0aW9uYWwsIG1heSBiZSB1bnNldCkKKworIyBGaWxlLgorIyBsZW5ndGh8ZXhwaXJlcyBNQUMgYWRkciBob3N0bmFtZXwqIENMSUR8KiAKKworIyBQcmltYXJ5IGtleSBpcyBhZGRyZXNzLgorCitpZiBbICR7MX0gPSBpbml0IF0gOyB0aGVuCisgICAgICR7TlZSQU19IHNob3cgfCBzZWQgLW4gLWUgIi9eJHtQUkVGSVh9LiovIHMvXi4qPS8vcCIKK2Vsc2UKKyAgICAgaWYgWyAkezF9ID0gZGVsIF0gOyB0aGVuCisgICAgICAgICAgJHtOVlJBTX0gdW5zZXQgJHtQUkVGSVh9JHszfQorICAgICBmaQorCisgICAgIGlmIFsgJHsxfSA9IG9sZCBdIHx8IFsgJHsxfSA9IGFkZCBdIDsgdGhlbgorICAgICAgICAgICR7TlZSQU19IHNldCAke1BSRUZJWH0kezN9PSIke0ROU01BU1FfTEVBU0VfTEVOR1RIOi19JHtETlNNQVNRX0xFQVNFX0VYUElSRVM6LX0gJHsyfSAkezN9ICR7NDotKn0gJHtETlNNQVNRX0NMSUVOVF9JRDotKn0iCisgICAgIGZpCisgICAgICR7TlZSQU19IGNvbW1pdAorZmkKKworCisKKworIApkaWZmIC0tZ2l0IGEvZGJ1cy9EQnVzLWludGVyZmFjZSBiL2RidXMvREJ1cy1pbnRlcmZhY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE4OTVlYgotLS0gL2Rldi9udWxsCisrKyBiL2RidXMvREJ1cy1pbnRlcmZhY2UKQEAgLTAsMCArMSwyMDggQEAKK0RCdXMgc3VwcG9ydCBtdXN0IGJlIGVuYWJsZWQgYXQgY29tcGlsZS10aW1lIGFuZCBydW4tdGltZS4gRW5zdXJlIAordGhhdCBzcmMvY29uZmlnLmggY29udGFpbnMgdGhlIGxpbmUKKworI2RlZmluZSBIQVZFX0RCVVMuCisKK2FuZCB0aGF0IC9ldGMvZG5zbWFzcS5jb25mIGNvbnRhaW5zIHRoZSBsaW5lCisKK2VuYWJsZS1kYnVzCisKK0JlY2F1c2UgZG5zbWFzcSBjYW4gb3BlcmF0ZSBzdGFuZC1hbG9uZSBmcm9tIHRoZSBEQnVzLCBhbmQgbWF5IG5lZWQgdG8gcHJvdmlkZQorc2VydmljZSBiZWZvcmUgdGhlIGRidXMgZGFlbW9uIGlzIGF2YWlsYWJsZSwgaXQgd2lsbCBjb250aW51ZSB0byBydW4KK2lmIHRoZSBEQnVzIGNvbm5lY3Rpb24gaXMgbm90IGF2YWlsYWJsZSBhdCBzdGFydHVwLiBUaGUgREJ1cyB3aWxsIGJlIHBvbGxlZCAKK2V2ZXJ5IDI1MG1zIHVudGlsIGEgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZC4gU3RhcnQgb2YgcG9sbGluZyBhbmQgZmluYWwKK2Nvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhcmUgYm90aCBsb2dnZWQuIFdoZW4gZG5zbWFzcSBlc3RhYmxpc2hlcyBhCitjb25uZWN0aW9uIHRvIHRoZSBkYnVzLCBpdCBzZW5kcyB0aGUgc2lnbmFsICJVcCIuIEFueXRoaW5nIGNvbnRyb2xsaW5nCit0aGUgc2VydmVyIHNldHRpbmdzIGluIGRuc21hc3Egc2hvdWxkIHJlLWludm9rZSB0aGUgU2V0U2VydmVycyBtZXRob2QKKyhxLnYuKSB3aGVuIGl0IHNlZXMgdGhpcyBzaWduYWwuIFRoaXMgYWxsb3dzIGRuc21hc3EgdG8gYmUgcmVzdGFydGVkCithbmQgYXZvaWRzIHN0YXJ0dXAgcmFjZXMgd2l0aCB0aGUgcHJvdmlkZXIgb2YgbmFtZXNlcnZlciBpbmZvcm1hdGlvbi4KKworCitEbnNtYXNxIHByb3ZpZGVzIG9uZSBzZXJ2aWNlIG9uIHRoZSBEQnVzOiB1ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxCithbmQgYSBzaW5nbGUgb2JqZWN0OiAvdWsvb3JnL3RoZWtlbGxleXMvZG5zbWFzcSAKK1RoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIG1heSBiZSBjaGFuZ2VkIGJ5IGdpdmluZyBhbiBhcmd1bWVudCB0byAtLWVuYWJsZS1kYnVzLgorCisxLiBNRVRIT0RTCistLS0tLS0tLS0tCisKK01ldGhvZHMgYXJlIG9mIHRoZSBmb3JtCisKK3VrLm9yZy50aGVrZWxsZXlzLjxtZXRob2Q+CisKK0F2YWlsYWJsZSBtZXRob2RzIGFyZToKKworR2V0VmVyc2lvbgorLS0tLS0tLS0tLQorUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoZSB2ZXJzaW9uIG9mIGRuc21hc3EgcnVubmluZy4KKworQ2xlYXJDYWNoZQorLS0tLS0tLS0tLQorUmV0dXJucyBub3RoaW5nLiBDbGVhcnMgdGhlIGRvbWFpbiBuYW1lIGNhY2hlIGFuZCByZS1yZWFkcworL2V0Yy9ob3N0cy4gVGhlIHNhbWUgYXMgc2VuZGluZyBkbnNtYXNxIGEgSFVQIHNpZ25hbC4KKworU2V0RmlsdGVyV2luMktPcHRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitUYWtlcyBib29sZWFuLCBzZXRzIG9yIHJlc2V0cyB0aGUgLS1maWx0ZXJ3aW4yayBvcHRpb24uCisKK1NldEJvZ3VzUHJpdk9wdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tCitUYWtlcyBib29sZWFuLCBzZXRzIG9yIHJlc2V0cyB0aGUgLS1ib2d1cy1wcml2IG9wdGlvbi4KKworU2V0U2VydmVycworLS0tLS0tLS0tLQorUmV0dXJucyBub3RoaW5nLiBUYWtlcyBhIHNldCBvZiBhcmd1bWVudHMgcmVwcmVzZW50aW5nIHRoZSBuZXcKK3Vwc3RyZWFtIEROUyBzZXJ2ZXJzIHRvIGJlIHVzZWQgYnkgZG5zbWFzcS4gSVB2NCBhZGRyZXNzZXMgYXJlCityZXByZXNlbnRlZCBhcyBhIFVJTlQzMiAoaW4gbmV0d29yayBieXRlIG9yZGVyKSBhbmQgSVB2NiBhZGRyZXNzZXMKK2FyZSByZXByZXNlbnRlZCBhcyBzaXh0ZWVuIEJZVEVzIChzaW5jZSB0aGVyZSBpcyBubyBVSU5UMTI4IHR5cGUpLgorRWFjaCBzZXJ2ZXIgYWRkcmVzcyBtYXkgYmUgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgU1RSSU5HUywgd2hpY2ggYXJlCit0aGUgZG9tYWlucyBmb3Igd2hpY2ggdGhlIHByZWNlZGluZyBzZXJ2ZXIgc2hvdWxkIGJlIHVzZWQuCisKK0V4YW1wbGVzLgorCitVSU5UMzI6IDxhZGRyZXNzMT4KK1VOSVQzMjogPGFkZHJlc3MyPgorCitpcyBlcXVpdmFsZW50IHRvCisKKy0tc2VydmVyPTxhZGRyZXNzMT4gLS1zZXJ2ZXI9PGFkZHJlc3MyPgorCisKK1VJTlQzMiA8YWRkcmVzczE+CitVSU5UMzIgPGFkZHJlc3MyPgorU1RSSU5HICJzb21lZG9tYWluLmNvbSIKKworaXMgZXF1aXZhbGVudCB0bworCistLXNlcnZlcj08YWRkcmVzczE+IC0tc2VydmVyPS9zb21lZG9tYWluLmNvbS88YWRkcmVzczI+IAorCitVSU5UMzIgPGFkZHJlc3MxPgorVUlOVDMyIDxhZGRyZXNzMj4KK1NUUklORyAic29tZWRvbWFpbi5jb20iCitVSU5UMzIgPGFkZHJlc3MzPgorU1RSSU5HICJhbm90aGVyZG9tYWluLmNvbSIKK1NUUklORyAidGhpcmRkb21haW4uY29tIgorCitpcyBlcXVpdmFsZW50IHRvCisKKy0tc2VydmVyPTxhZGRyZXNzMT4gCistLXNlcnZlcj0vc29tZWRvbWFpbi5jb20vPGFkZHJlc3MyPiAKKy0tc2VydmVyPS9hbm90aGVyZG9tYWluLmNvbS90aGlyZGRvbWFpbi5jb20vPGFkZHJlc3MzPgorCitBbSBJUHY0IGFkZHJlc3Mgb2YgMC4wLjAuMCBpcyBpbnRlcnByZXRlZCBhcyAibm8gYWRkcmVzcywgbG9jYWwgb25seSIsCitzbworCitVSU5UMzI6IDwwLjAuMC4wPgorU1RSSU5HICAibG9jYWwuZG9tYWluIgorCitpcyBlcXVpdmFsZW50IHRvCisKKy0tbG9jYWw9L2xvY2FsLmRvbWFpbi8KKworCitFYWNoIGNhbGwgdG8gU2V0U2VydmVycyBjb21wbGV0ZWx5IHJlcGxhY2VzIHRoZSBzZXQgb2Ygc2VydmVycworc3BlY2lmaWVkIGJ5IHZpYSB0aGUgREJ1cywgYnV0IGl0IGxlYXZlcyBhbnkgc2VydmVycyBzcGVjaWZpZWQgdmlhIHRoZQorY29tbWFuZCBsaW5lIG9yIC9ldGMvZG5zbWFzcS5jb25mIG9yIC9ldGMvcmVzb2x2LmNvbmYgYWxvbmUuCisKK1NldFNlcnZlcnNFeAorLS0tLS0tLS0tLS0tCisKK1RoaXMgZnVuY3Rpb24gaXMgbW9yZSBmbGV4aWJsZSBhbmQgdGhlIFNldFNlcnZlcnMgZnVuY3Rpb24sIGluIHRoYXQgaXQgY2FuCitoYW5kbGUgYWRkcmVzcyBzY29waW5nLCBwb3J0IG51bWJlcnMsIGFuZCBpcyBlYXNpZXIgZm9yIGNsaWVudHMgdG8gdXNlLgorCitSZXR1cm5zIG5vdGhpbmcuIFRha2VzIGEgc2V0IG9mIGFyZ3VtZW50cyByZXByZXNlbnRpbmcgdGhlIG5ldwordXBzdHJlYW0gRE5TIHNlcnZlcnMgdG8gYmUgdXNlZCBieSBkbnNtYXNxLiBBbGwgYWRkcmVzc2VzIChib3RoIElQdjQgYW5kIElQdjYpCithcmUgcmVwcmVzZW50ZWQgYXMgU1RSSU5HUy4gIEVhY2ggc2VydmVyIGFkZHJlc3MgbWF5IGJlIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlCitTVFJJTkdTLCB3aGljaCBhcmUgdGhlIGRvbWFpbnMgZm9yIHdoaWNoIHRoZSBwcmVjZWRpbmcgc2VydmVyIHNob3VsZCBiZSB1c2VkLgorCitUaGlzIGZ1bmN0aW9uIHRha2VzIGFuIGFycmF5IG9mIFNUUklORyBhcnJheXMsIHdoZXJlIGVhY2ggaW5uZXIgYXJyYXkgcmVwcmVzZW50cworYSBzZXQgb2YgRE5TIHNlcnZlcnMgYW5kIGRvbWFpbnMgZm9yIHdoaWNoIHRob3NlIHNlcnZlcnMgbWF5IGJlIHVzZWQuICBFYWNoCitzdHJpbmcgcmVwcmVzZW50cyBhIGxpc3Qgb2YgdXBzdHJlYW0gRE5TIHNlcnZlcnMgZmlyc3QsIGFuZCBkb21haW5zIHNlY29uZC4KK01peGluZyBvZiBkb21haW5zIGFuZCBzZXJ2ZXJzIHdpdGhpbiBhIHRoZSBzdHJpbmcgYXJyYXkgaXMgbm90IGFsbG93ZWQuCisKK0V4YW1wbGVzLgorCitbCisgIFsiMS4yLjMuNCIsICJmb29iYXIuY29tIl0sCisgIFsiMTAwMzoxMjM0OmFiY2Q6OjElZXRoMCIsICJlbmcubXljb3JwLmNvbSIsICJsYWIubXljb3JwLmNvbSJdCitdCisKK2lzIGVxdWl2YWxlbnQgdG8KKworLS1zZXJ2ZXI9L2Zvb2Jhci5jb20vMS4yLjMuNCBcCisgIC0tc2VydmVyPS9lbmcubXljb3JwLmNvbS9sYWIubXljb3JwLmNvbS8xMDAzOjEyMzQ6YWJjZDo6MSVldGgwCisKK0FuIElQdjQgYWRkcmVzcyBvZiAwLjAuMC4wIGlzIGludGVycHJldGVkIGFzICJubyBhZGRyZXNzLCBsb2NhbCBvbmx5IiwKK3NvCisKK1sgWyIwLjAuMC4wIiwgImxvY2FsLmRvbWFpbiJdIF0KKworaXMgZXF1aXZhbGVudCB0bworCistLWxvY2FsPS9sb2NhbC5kb21haW4vCisKKworRWFjaCBjYWxsIHRvIFNldFNlcnZlcnNFeCBjb21wbGV0ZWx5IHJlcGxhY2VzIHRoZSBzZXQgb2Ygc2VydmVycworc3BlY2lmaWVkIGJ5IHZpYSB0aGUgREJ1cywgYnV0IGl0IGxlYXZlcyBhbnkgc2VydmVycyBzcGVjaWZpZWQgdmlhIHRoZQorY29tbWFuZCBsaW5lIG9yIC9ldGMvZG5zbWFzcS5jb25mIG9yIC9ldGMvcmVzb2x2LmNvbmYgYWxvbmUuCisKKworU2V0RG9tYWluU2VydmVycworLS0tLS0tLS0tLS0tLS0tLQorCitZZXMgYW5vdGhlciB2YXJpYXRpb24gZm9yIHNldHRpbmcgRE5TIHNlcnZlcnMsIHdpdGggdGhlIGNhcGFiaWxpdHkgb2YKK1NldFNlcnZlcnNFeCwgYnV0IHdpdGhvdXQgdXNpbmcgYXJyYXlzIG9mIGFycmF5cywgd2hpY2ggYXJlIG5vdAorc2VuZGFibGUgd2l0aCBkYnVzLXNlbmQuIFRoZSBhcmd1bWVudHMgYXJlIGFuIGFycmF5IG9mIHN0cmluZ3Mgd2hpY2gKK2FyZSBpZGVudGljYWwgdG8gdGhlIGVxdWl2YWxlbnQgYXJndW1lbnRzIC0tc2VydmVyLCBzbyB0aGUgZXhhbXBsZQorZm9yIFNldFNlcnZlcnNFeCBpcyByZXByZXNlbnRlZCBhcworCitbCisgICIvZm9vYmFyLmNvbS8xLjIuMy40IgorICAiL2VuZy5teWNvcnAuY29tL2xhYi5teWNvcnAuY29tLzEwMDM6MTIzNDphYmNkOjoxJWV0aDAiCitdCisKK0dldExvb3BTZXJ2ZXJzCistLS0tLS0tLS0tLS0tLQorCisoT25seSBhdmFpbGFibGUgaWYgZG5zbWFzcSBjb21waWxlZCB3aXRoIEhBVkVfTE9PUCkKKworUmV0dXJuIGFuIGFycmF5IG9mIHN0cmluZ3MsIGVhY2ggc3RyaW5nIGlzIHRoZSBJUCBhZGRyZXNzIG9mIGFuIHVwc3RyZWFtCitzZXJ2ZXIgd2hpY2ggaGFzIGJlZW4gZm91bmQgdG8gbG9vcCBxdWVyaWVzIGJhY2sgdG8gdGhpcyBkbnNtYXNxIGluc3RhbmNlLCBhbmQgCitpdCB0aGVyZWZvcmUgbm90IGJlaW5nIHVzZWQuCisKKworCisyLiBTSUdOQUxTCistLS0tLS0tLS0tCisKK0lmIGRuc21hc3EncyBESENQIHNlcnZlciBpcyBhY3RpdmUsIGl0IHdpbGwgc2VuZCBzaWduYWxzIG92ZXIgREJVUyB3aGVuZXZlcgordGhlIERIQ1AgbGVhc2UgZGF0YWJhc2UgY2hhbmdlcy4gVGhpbmsgb2YgdGhlc2Ugc2lnbmFscyBhcyB0cmFuc2FjdGlvbnMgb24KK2EgZGF0YWJhc2Ugd2l0aCB0aGUgSVAgYWRkcmVzcyBhY3RpbmcgYXMgdGhlIHByaW1hcnkga2V5LgorCitTaWduYWxzIGFyZSBvZiB0aGUgZm9ybToKKwordWsub3JnLnRoZWtlbGxleXMuPHNpZ25hbD4KKworYW5kIHRoZWlyIHBhcmFtZXRlcnMgYXJlOgorCitTVFJJTkcgIjE5Mi4xNjguMS4xMTUiCitTVFJJTkcgIjAxOjIzOjQ1OjY3Ojg5OmFiIgorU1RSSU5HICJob3N0bmFtZS5vci5mcWRuIgorCisKK0F2YWlsYWJsZSBzaWduYWxzIGFyZToKKworRGhjcExlYXNlQWRkZWQKKy0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYSBESENQIGxlYXNlIGZvciBhIGdpdmVuIElQIGFkZHJlc3MgaXMgY3JlYXRlZC4KKworRGhjcExlYXNlRGVsZXRlZAorLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYSBESENQIGxlYXNlIGZvciBhIGdpdmVuIElQIGFkZHJlc3MgaXMgZGVsZXRlZC4KKworRGhjcExlYXNlVXBkYXRlZAorLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYSBESENQIGxlYXNlIGZvciBhIGdpdmVuIElQIGFkZHJlc3MgaXMgdXBkYXRlZC4KKyAKZGlmZiAtLWdpdCBhL2RidXMvZG5zbWFzcS5jb25mIGIvZGJ1cy9kbnNtYXNxLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJiMWM3NgotLS0gL2Rldi9udWxsCisrKyBiL2RidXMvZG5zbWFzcS5jb25mCkBAIC0wLDAgKzEsMTQgQEAKKzwhRE9DVFlQRSBidXNjb25maWcgUFVCTElDCisgIi0vL2ZyZWVkZXNrdG9wLy9EVEQgRC1CVVMgQnVzIENvbmZpZ3VyYXRpb24gMS4wLy9FTiIKKyAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc3RhbmRhcmRzL2RidXMvMS4wL2J1c2NvbmZpZy5kdGQiPgorPGJ1c2NvbmZpZz4KKwk8cG9saWN5IHVzZXI9InJvb3QiPgorCQk8YWxsb3cgb3duPSJ1ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxIi8+CisJCTxhbGxvdyBzZW5kX2Rlc3RpbmF0aW9uPSJ1ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxIi8+CisJPC9wb2xpY3k+CisJPHBvbGljeSBjb250ZXh0PSJkZWZhdWx0Ij4KKyAgICAgICAgICAgICAgICA8ZGVueSBvd249InVrLm9yZy50aGVrZWxsZXlzLmRuc21hc3EiLz4KKyAgICAgICAgICAgICAgICA8ZGVueSBzZW5kX2Rlc3RpbmF0aW9uPSJ1ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxIi8+CisgICAgICAgIDwvcG9saWN5PgorPC9idXNjb25maWc+CisKZGlmZiAtLWdpdCBhL2RlYmlhbi9jaGFuZ2Vsb2cgYi9kZWJpYW4vY2hhbmdlbG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjM2Q4NjQKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vY2hhbmdlbG9nCkBAIC0wLDAgKzEsMTE5NyBAQAorZG5zbWFzcSAoMi43My0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBOZXcgdXBzdHJlYW0uCisgICAqIFR3ZWFrIGZpZWxkIHdpZHRoIGluIGNhY2hlIGR1bXAgdG8gYXZvaWQgdHJ1bmNhdGluZyBJUHY2CisgICAgIGFkZHJlc3Nlcy4gKGNsb3NlczogIzc3MTU1NykKKworIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBGcmksIDAzIE9jdCAyMDE0IDA4OjQ5OjQyICswMDAwCisKK2Ruc21hc3EgKDIuNzItMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogRml4IGJ1aWxkIGluIERlYmlhbi1rRnJlZUJTRC4gKGNsb3NlczogIzc2MzY5MykKKworIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBUaHUsIDAyIE9jdCAyMDE0IDIyOjM0OjEyICswMDAwCisKK2Ruc21hc3EgKDIuNzItMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLgorICAgKiBJZiBkbnMtcm9vdC1kYXRhIHBhY2thZ2UgaXMgaW5zdGFsbGVkLCB1c2UgaXQgdG8gc2V0IHRoZSBETlNTRUMKKyAgICAgdHJ1c3QgYW5jaG9yKHMpLiBSZWNvbW1lbmQgZG5zLXJvb3QtZGF0YS4gKGNsb3NlczogIzc2MDQ2MCkKKyAgICogSGFuZGxlIEFEIGJpdCBjb3JyZWN0bHkgaW4gcmVwbGllcyBmcm9tIGNhY2hlLiAoY2xvc2VzOiAjNzYxNjU0KQorCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFR1ZSwgMjAgTWF5IDIwMTQgMjE6MDE6MTEgKzAwMDAKKworZG5zbWFzcSAoMi43MS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBOZXcgdXBzdHJlYW0uCisgICAqIEZpeCAxMDAlIENQVS11c2FnZSBidWcgd2hlbiBkbnNtYXNxIHN0YXJ0ZWQgd2l0aCBjYWNoZXNpemUKKyAgICAgc2V0IHRvIHplcm8uIChMUDogIzEzMTQ2OTcpCisKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgRnJpLCAxNiBNYXkgMjAxNCAyMDoxNzoxMCArMDAwMAorCitkbnNtYXNxICgyLjcwLTMpIHVuc3RhYmxlOyB1cmdlbmN5PW1lZGl1bQorCisgICAqIFdyaXRlIGEgcGlkLWZpbGUsIGV2ZW4gd2hlbiBiZWluZyBzdGFydGVkIHVzaW5nIHN5c3RlbWQsIHNpbmNlCisgICAgIG90aGVyIGNvbXBvbmVudHMgbWF5IHdpc2ggdG8gc2lnbmFsIGRuc21hc3EuCisgICAqIEVuYWJsZSBkbnNtYXNxIHN5c3RlbWQgdW5pdCBvbiBpbnN0YWxsLiBPdGhlcndpc2UgZG5zbWFzcSBkb2VzIG5vdCBydW4gb24KKyAgICAgZnJlc2ggaW5zdGFsbGF0aW9ucyAod2l0aG91dCBhZG1pbmlzdHJhdG9yIGhhbmRob2xkaW5nKSBhbmQgZXZlbiB3b3JzZSBpdAorICAgICBpcyBkaXNhYmxlZCBvbiBzeXN0ZW1zIHN3aXRjaGluZyBmcm9tIHN5c3YgdG8gc3lzdGVtZC4gTW9kaWZ5CisgICAgIHBvc3RpbnN0L3Bvc3RybSBleGFjdGx5IGFzIGRoX3N5c3RlbWQgd291bGQsIGFkZCBkZXBlbmRlbmN5IG9uCisgICAgIGluaXQtc3lzdGVtLWhlbHBlcnMuIENsb3NlczogIzcyNDYwMgorCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFN1biwgMTEgTWF5IDIwMTQgMTc6NDU6MjEgKzAwMDAKKworZG5zbWFzcSAoMi43MC0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBFbnN1cmUgZGFlbW9uIG5vdCBzdGFyZWQgaWYgZG5zbWFzcSBwYWNrYWdlIGhhcyBiZWVuIHJlbW92ZWQsCisgICAgIGV2ZW4gaWYgZG5zbWFzcS1iYXNlIGlzIHN0aWxsIGluc3RhbGxlZC4gKGNsb3NlczogIzc0Njk0MSkKKyAgICogVGlkeSBjcnVmdCBpbiBpbml0c2NyaXB0LiAoY2xvc2VzOiAjNzQ2OTQwKQorCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFN1biwgMDQgTWF5IDIwMTQgMjE6MzQ6MTEgKzAwMDAKKworZG5zbWFzcSAoMi43MC0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBOZXcgdXBzdHJlYW0uCisKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgV2VkLCAyMyBBcHIgMjAxNCAxNToxNDo0MiArMDAwMAorCitkbnNtYXNxICgyLjY5LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIE5ldyB1cHN0cmVhbS4KKyAgICogU2V0IC0tbG9jYWwtc2VydmljZS4gKGNsb3NlczogIzczMjYxMCkKKyAgICAgVGhpcyB0ZWxscyBkbnNtYXNxIHRvIGlnbm9yZSBETlMgcmVxdWVzdHMgdGhhdCBkb24ndCBjb21lCisgICAgIGZyb20gYSBsb2NhbCBuZXR3b3JrLiBJdCdzIGF1dG9tYXRpY2FsbHkgaWdub3JlZCBpZgorICAgICAtLWludGVyZmFjZSAtLWV4Y2VwdC1pbnRlcmZhY2UsIC0tbGlzdGVuLWFkZHJlc3Mgb3IKKyAgICAgLS1hdXRoLXNlcnZlciBleGlzdCBpbiB0aGUgY29uZmlndXJhdGlvbiwgc28gZm9yIG1vc3QKKyAgICAgaW5zdGFsbGF0aW9ucywgaXQgd2lsbCBoYXZlIG5vIGVmZmVjdCwgYnV0IGZvcgorICAgICBvdGhlcndpc2UtdW5jb25maWd1cmVkIGluc3RhbGxhdGlvbnMsIGl0IHN0b3BzIGRuc21hc3EKKyAgICAgZnJvbSBiZWluZyB2dWxuZXJhYmxlIHRvIEROUy1yZWZsZWN0aW9uIGF0dGFja3MuCisKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgVHVlLCA0IEZlYiAyMDE0IDE2OjI4OjEyICswMDAwCisKK2Ruc21hc3EgKDIuNjgtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLiAoY2xvc2VzOiAjNzMwNTUzKQorCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFN1biwgOCBEZWMgMjAxMyAxNTo1NzozMiArMDAwMAorCitkbnNtYXNxICgyLjY3LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIE5ldyB1cHN0cmVhbS4KKyAgICogVXBkYXRlIHJlc29sdmNvbmYgc2NyaXB0LiAoY2xvc2VzOiAjNzIwNzMyKQorCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFdlZCwgNCBBdWcgMjAxMyAxNDo1MzoyMiArMDAwMAorCitkbnNtYXNxICgyLjY2LTQpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIFVwZGF0ZSByZXNvbHZjb25mIHNjcmlwdC4gKGNsb3NlczogIzcxNjkwOCkKKworIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBXZWQsIDQgQXVnIDIwMTMgMTQ6NDg6MjEgKzAwMDAKKworZG5zbWFzcSAoMi42Ni0zKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBVcGRhdGUgcmVzb2x2Y29uZiBzY3JpcHQgZm9yIGRuc2NyeXB0LXByb3h5IGludGVncmF0aW9uLiAoY2xvc2VzOiAjNzA5MTc5KQorCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFR1ZSwgMjggTWF5IDIwMTMgMTQ6Mzk6NTEgKzAwMDAKKworZG5zbWFzcSAoMi42Ni0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBGaXggZXJyb3Igb24gc3RhcnR1cCB3aXRoIHNvbWUgY29uZmlncy4gKGNsb3NlczogIzcwOTAxMCkKKworIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBNb24sIDIwIE1heSAyMDEzIDExOjQ2OjExICswMDAwCisKK2Ruc21hc3EgKDIuNjYtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLgorICAgKiBBZGQgc3VwcG9ydCBmb3Igbm9pcHNldCBpbiBERUJfQlVJTERfT1BUSU9OUy4KKworIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBGcmksIDIyIEZlYiAyMDEzIDIxOjUyOjEzICswMDAwCisKK2Ruc21hc3EgKDIuNjUtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLgorCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIEZyaSwgMTQgRGVjIDIwMTIgMTE6MzQ6MTIgKzAwMDAKKworZG5zbWFzcSAoMi42NC0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBOZXcgdXBzdHJlYW0uCisKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgRnJpLCAyMSBTZXAgMjAxMiAxNzoxNzoyMiArMDAwMAorCitkbnNtYXNxICgyLjYzLTQpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIE1ha2UgcGlkLWZpbGUgY3JlYXRpb24gaW1tdW5lIHRvIHN5bWxpbmsgYXR0YWNrcy4gKGNsb3NlczogIzY4NjQ4NCkKKworIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBGcmksIDIxIFNlcCAyMDEyIDE3OjE2OjM0ICswMDAwCisKK2Ruc21hc3EgKDIuNjMtMykgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTW92ZSBhZGR1c2VyIGRlcGVuZGVuY3kgdG8gZG5zbWFzcS1iYXNlLiAoY2xvc2VzOiAjNjg2Njk0KQorCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFR1ZSwgNCBTZXAgMjAxMiAyMTo0NDoxNSArMDAwMAorCitkbnNtYXNxICgyLjYzLTIpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIEZpeCB2ZXJzaW9uIHNjcmlwdCB0byByZXBvcnQgY29ycmVjdCB2ZXJzaW9uLgorICAgKiBVbmJvdGNoIG1vdmUgb2YgZGJ1cyBjb25maWcgZmlsZSBieSB1c2luZyBjb3JyZWN0IHZlcnNpb25zIGluCisgICAgIFJlcGxhY2VzOiBhbmQgQnJlYWtzOiBsaW5lcy4gKGNsb3NlczogIzY4NTIwNCkKKyAgICogQ3JlYXRlIGRuc21hc3EgdXNlciBpbiBkbnNtYXNxLWJhc2Ugc28gdGhhdCBEYnVzIGRvZXNuJ3QgY29tcGxhaW4gaWYKKyAgICAgb25seSBkbnNtYXNxLWJhc2UgaXMgaW5zdGFsbGVkLiAoY2xvc2VzOiAjNjg1OTg3KQorCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFR1ZSwgMjggQXVnIDIwMTIgMTY6MTg6MzUgKzAwMDAKKworZG5zbWFzcSAoMi42My0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBOZXcgdXBzdHJlYW0uCisgICAqIE1vdmUgL2V0Yy9kYnVzLTEvc3lzdGVtLmQvZG5zbWFzcS5jb25mIGZyb20gZG5zbWFzcSB0byBkbnNtYXNxLWJhc2UuCisKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgTW9uLCAxMSBKdW4gMjAxMiAyMTo1NTozNSArMDAwMAorCitkbnNtYXNxICgyLjYyLTMpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIERvIHJlc29sdmNvbmYgYW5kIC9ldGMvZGVmYXVsdCBzdGFydHVwIGxvZ2ljIHdoZW4KKyAgICAgc3RhcnRpbmcgd2l0aCBzeXN0ZW1kLiAoY2xvc2VzOiAjNjc1ODU0KQorCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIE1vbiwgMTEgSnVuIDIwMTIgMjE6NTA6MTEgKzAwMDAKKworZG5zbWFzcSAoMi42Mi0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBQYXNzIExERkxBR1MgdG8gbWFrZSB0byBnZXQgaGFyZGVuaW5nIGluIGxpbmtlci4KKworIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBUaHUsIDcgSnVuIDIwMTIgMDk6NTM6NDMgKzAwMDAKKworZG5zbWFzcSAoMi42Mi0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBOZXcgdXBzdHJlYW0uCisgICAqIFVzZSBkcGtnLWJ1aWxkZmxhZ3MuIChFbmFibGVzIGhhcmRlbmluZykuCisKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgU2F0LCAxMiBNYXkgMjAxMiAxNToyNToyMyArMDAwMAorCitkbnNtYXNxICgyLjYxLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIE5ldyB1cHN0cmVhbS4KKyAgICogUHJvdmlkZSAiZHVtcC1zdGF0cyIgaW5pdHNjcmlwdCBtZXRob2QuIChjbG9zZXM6ICM2NTQ2NTYpCisgICAqIEFkZCAoZW1wdHkpIGJ1aWxkLWluZGVwIGFuZCBidWlsZC1hcmNoIHJ1bGVzIHRhcmdldHMuCisgICAqIEJ1bXAgc3RhbmRhcmRzLXZlcnNpb24gdG8gMy45LjMKKyAgICogQWRkIHBvcnQgb3B0aW9uIHRvIGV4YW1wbGUgZG5zbWFzcS5jb25mIChjbG9zZXM6ICM2NjgzODYpCisKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgVHVlLCA2IE1hciAyMDEyIDE5OjQ1OjQzICswMDAwCisKK2Ruc21hc3EgKDIuNjAtMikgdW5zdGFibGU7IHVyZ2VuY3k9aGlnaAorCisgICAqIEZpeCBESENQdjQgc2VnZmF1bHQuIChjbG9zZXM6ICM2NjUwMDgpCisKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgRnJpLCAyMyBNYXIgMjAxMiAwOTozNzoyMyArMDAwMAorCitkbnNtYXNxICgyLjYwLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIE5ldyB1cHN0cmVhbS4KKyAgICogQnVtcCBzdGFuZGFyZHMtdmVyc2lvbiB0byAzLjkuMgorICAgKiBGaXggdHlwbyBpbiBleGFtcGxlIGNvbmZpZyBmaWxlLiAoY2xvc2VzOiAjNjU0ODk3KQorCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFRodSwgMSBEZWMgMjAxMSAxNTo0OTozMyArMDAwMAorCitkbnNtYXNxICgyLjU5LTQpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIFN1cHBseSAvZXRjL2luc3NlcnYuY29uZi5kL2Ruc21hc3EgKGNsb3NlczogIzY1MDU0MCkKKworIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBUaHUsIDEgRGVjIDIwMTEgMTE6MzU6MTMgKzAwMDAKKworZG5zbWFzcSAoMi41OS0zKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBTdG9wIGRhZW1vbiBhdCBydW5sZXZlbHMgMCwgMSBhbmQgNi4gKGNsb3NlczogIzY0NzcyNikKKworIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBTYXQsIDI2IE5vdiAyMDExIDE1OjI4OjMzICswMDAwCisKK2Ruc21hc3EgKDIuNTktMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogRml4IHJlcG9ydGVkIHZlcnNpb24gbnVtYmVyLgorCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFdlZCwgMTkgT2N0IDIwMTEgMDk6MjU6NTMgKzAwMDAKKworZG5zbWFzcSAoMi41OS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBOZXcgdXBzdHJlYW0uCisgICAqIEZpeCBJUHY2IGJpbmQgcHJvYmxlbSAoY2xvc2VzOiAjNjQ0MzQ1KQorCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFNhdCwgOCBPY3QgMjAxMSAxNjozNDoxMyArMDAwMAorCitkbnNtYXNxICgyLjU4LTMpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIEZpeCByZXNvbHZjb25mIHNjcmlwdCBsb2NhdGlvbi4gKGNsb3NlczogIzY0MTcxNykKKyAgICogVXBkYXRlIHN5c3RlbWQgc2VydmljZSBmaWxlLiAoY2xvc2VzOiAjNjQwMDk1KQorCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFRodSwgMTUgU2VwIDIwMTEgMTY6MzM6MjMgKzAwMDAKKworZG5zbWFzcSAoMi41OC0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBGaXggcmVzb2x2Y29uZiBzY3JpcHQuIChjbG9zZXM6ICM2Mzk5NjMpCisKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgVGh1LCAxIFNlcCAyMDExIDEwOjA1OjIzICswMDAwCisKK2Ruc21hc3EgKDIuNTgtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLgorICAgKiBBZGQgbm9jb25udHJhY2sgREVCX0JVSUxEX09QVElPTlMgZmxhZy4KKyAgICogSW1wcm92ZSBlcnJvciBtZXNzYWdlIHdoZW4gdGFnOnh4eCBhcHBlYXJzCisgICAgIGluIC0tZGhjcC1ob3N0IChjbG9zZXM6ICM2Mjc5ODYpCisgICAqIEFkZCAvdXNyL2xpYi9yZXNvbHZjb25mL3BhY2thZ2luZy1ldmVudC5kL2Ruc21hc3EgKGNsb3NlczogIzYyODAwMykKKyAgICogVXBkYXRlIHJlc29sdmNvbmYgaG9vayBzY3JpcHQgdG8gc2xlZXAgb25seQorICAgICB3aGVuIG5lY2Vzc2FyeS4gKGNsb3NlczogIzYyNzc4OSkKKyAgICogVHdlYWsgYmVoYXZpb3VyIG9mIC0tZG9tYWluLW5lZWRlZCB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIHJlY3Vyc2l2ZQorICAgICBuYW1lc2VydmVycyBfZG93bnN0cmVhbV8gb2YgZG5zbWFzcS4gKGNsb3NlczogIzYzMDYzNykKKyAgICogQWxsb3cgcHJvY2Vzc2VzIHJ1bm5pbmcgYXMgdWlkIGRuc21hc3EgdG8gc2VuZCBtZXNzYWdlcyBvbiB0aGUgREJ1cywKKyAgICAgc28gdGhhdCBkbnNtYXNxIGNhbiByZXR1cm4gZXJyb3JzLiAoY2xvc2VzOiAjNjM1MDE3KQorICAgKiBBZGQgL2xpYi9zeXN0ZW1kL3N5c3RlbS9kbnNtYXNxLnNlcnZpY2UgKGNsb3NlczogIzYzNTc1MykKKyAgICogTmV3IGJpbmFyeSBwYWNrYWdlLCBkbnNtYXNxLXV0aWxzLCBjb250YWluaW5nIGRoY3BfcmVsZWFzZSBhbmQKKyAgICAgZGhjcF9sZWFzZV90aW1lIGZyb20gY29udHJpYi93cnQuIE5vdGUgdGhhdCB0aGVzZSBhcmUgTGludXgtc3BlY2lmaWMKKyAgICAgc28gdGhpcyBwYWNrYWdlIGlzIEFyY2hpdGVjdHVyZTogbGludXgtYW55IChjbG9zZXM6ICM2MzgxMzYpCisKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgTW9uLCAyMiBBdWcgMjAxMSAxNDo1NzowMyArMDAwMAorCitkbnNtYXNxICgyLjU3LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIE5ldyB1cHN0cmVhbS4KKyAgICogRml4IHR5cG9zIGluIGV4YW1wbGUgY29uZmlnIGZpbGUuIChjbG9zZXM6ICM2MDY2MTUpCisgICAqIEJ1bXAgc3RhbmRhcmRzLXZlcnNpb24gdG8gMy45LjEKKyAgICogQWRkIG5vaWRuIERFQl9CVUlMRF9PUFRJT05TIGZsYWcuCisgICAqIERvbid0IGNvbXBsYWluIGFib3V0IGV4dHJhIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgaWYKKyAgICAgdGhleSBhcmUgZW1wdHksIGFzIHRoaXMgYnJlYWtzIGxpYnZpcnQuIChjbG9zZXM6ICM2MTM5MTUpCisKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgRnJpLCAxOCBGZWIgMjAxMSAwOTo1NDoxMyArMDAwMAorCitkbnNtYXNxICgyLjU2LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIE5ldyB1cHN0cmVhbS4KKyAgICogRGllIGlmIG5vbi1vcHRpb24gYXJncyBwcmVzZW50IG9uIHRoZSBjb21tYW5kLWxpbmUuIChjbG9zZXM6ICM1ODk4ODUpCisgICAqIFRpZ2h0ZW4gdXAgdXNlIG9mIElHTk9SRV9SRVNPTFZDT05GIGluIGluaXRzY3JpcHQuIChjbG9zZXM6ICM1NzUzNDUpCisgICAqIFVwZGF0ZSBVUkwgb2YgSVNDJ3MgZXhwbGFuYXRpb24gb2YgZGhjcC1hdXRob3JpdGF0aXZlIGluIHRoZSBleGFtcGxlCisgICAgIGNvbmZpZ3VyYXRpb24gZmlsZS4gKGNsb3NlczogIzYwNDg3MCkKKyAgICogQ29zbWV0aWMgY2hhbmdlcyB0byBkbnNtYXNxLmNvbmYuZXhhbXBsZS4gKGNsb3NlczogIzU5ODc5MCkKKyAgICogTW9yZSBkbnNtYXNxLmNvbmYuZXhhbXBsZSBmaXhlcy4gKGNsb3NlczogIzYwNjYxNSkKKyAgICogQWRkIG90aGVyIHJlc29sdi5jb25mIGxvY2F0aW9ucyB0byBGSUxFUyBzZWN0aW9uIG9mIHRoZSBtYW51YWwKKyAgICAgcGFnZS4gKGNsb3NlczogIzYwMzUwNSkKKyAgICogQ2xhcmlmeSBjb25maWd1cmF0aW9uIGZvciBzdGF0aWMgSVAgYWRkcmVzc2VzIGluIHRoZSBhYnNlbmNlIG9mCisgICAgIHJlc29sdmNvbmYgaW4gdGhlIERlYmlhbiByZWFkbWUgZmlsZS4gKGNsb3NlczogIzYwNDAzNSkKKyAgICogRml4IGhhbmRsaW5nIG9mIG9ic29sZXRlIEROU01BU1FfSU5URVJGQUNFIGFuZCBETlNNQVNRX0VYQ0VQVAorICAgICB2YXJpYWJsZXMgaW4gL2V0Yy9kZWZhdWx0L2Ruc21hc3EuIChMUDogIzY5MTMyOSkKKyAgICogUHJvdmlkZSBkZWJpYW4vc291cmNlL2Zvcm1hdC4KKworIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBGcmksIDE3IERlYyAyMDEwIDEzOjE3OjMzICswMDAwCisKK2Ruc21hc3EgKDIuNTUtMikgdW5zdGFibGU7IHVyZ2VuY3k9aGlnaAorCisgICAqIEZpeCBjcmFzaCBvbiBkb3VibGUgZnJlZS4gKGNsb3NlczogIzU5NzIwNSkKKworIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBTdW4sIDE5IFNlcCAyMDEwIDIxOjQ1OjMzICswMDAwCisKK2Ruc21hc3EgKDIuNTUtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLgorICAgKiBGaXggY3Jhc2ggd2hlbiAvZXRjL2V0aGVycyBpbiB1c2UuIChjbG9zZXM6ICM1ODQ3NTQpCisKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgU3VuLCA2IEp1biAyMDEwIDIwOjMzOjEzICswMDAwCisKK2Ruc21hc3EgKDIuNTMtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLgorICAgKiBGaXggRlRCRlMgb24ga0ZyZWVCU0QuIChjbG9zZXM6ICM1NjYzMzQpCisgICAqIFRlYWNoIGluaXRzY3JpcHQgdG8gY2hlY2sgdGhlIGNvbmZpZyBmaWxlIHN5bnRheCBiZWZvcmUKKyAgICAgcmVzdGFydGluZyBkbnNtYXNxLiBBbiBlcnJvciB3aWxsIGxlYXZlIHRoZSBvbGQgZG5zbWFzcSBzdGlsbAorICAgICBydW5uaW5nLCByYXRoZXIgdGhhbiBraWxsaW5nIHRoZSBvbGQgZGFlbW9uIGFuZCB0aGVuIGZhaWxpbmcgdG8gc3RhcnQKKyAgICAgYSBuZXcgb25lLgorICAgKiBUd2VhayBESENQIGJlaGF2aW91ciB3aGVuIGEgcGh5c2ljYWwgaW50ZXJmYWNlIGhhcyB0d28gYWRkcmVzc2VzIG9uCisgICAgIHRoZSBzYW1lIHN1Ym5ldC4gKGNsb3NlczogIzU4MTA2NCkKKworIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBUaHUsIDIwIE1heSAyMDEwIDExOjQxOjIzICswMDAwCisKK2Ruc21hc3EgKDIuNTItMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLgorICAgKiBCZSBtb3JlIGNvbnNlcnZhdGl2ZSB3aXRoICJBIGZvciBBIiBwcm9jZXNzaW5nLiAoY2xvc2VzOiAjNTUzMzM3KQorICAgKiBBZGQgUkVBRE1FIGZpbGUgaW4gL2V0Yy9kbnNtYXNxLmQgdG8gZXhwbGFpbiB3aGF0J3MgZ29pbmcgb24uCisKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgVGh1LCAxNCBKYW4gMjAxMCAwOTo1MzoxMyArMDAwMAorCitkbnNtYXNxICgyLjUxLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIE5ldyB1cHN0cmVhbS4KKyAgICogQnVtcCBzdGFuZGFyZHMtdmVyc2lvbiB0byAzLjguMiAobm8gY2hhbmdlcyBuZWVkZWQpLgorICAgKiBJZ25vcmUgZmlsZXMgbmFtZWQgKi5kcGtnLW9sZCwgKi5kcGtnLW5ldyBhbmQgKi5kcGtnLWRpc3QgCisgICAgIGluIC9ldGMvZG5zbWFzcS5kCisgICAqIFByb3ZpZGUgYSBmYWNpbGl0eSBpbiAvZXRjL2RlZmF1bHQvZG5zbWFzcSB0byBkaXNhYmxlIGRuc21hc3EncworICAgICBpbnRlcmFjdGlvbiB3aXRoIHRoZSByZXNvbHZjb25mIHBhY2thZ2UuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UKKyAgICAgc2V0dGluZyAicmVzb2x2LWZpbGUiIGluIC9ldGMvZG5zbWFzcS5jb25mIHdvbid0IG92ZXJyaWRlIGEKKyAgICAgZmlsZSBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lIGZyb20gcmVzb2x2Y29uZi4gKGNsb3NlczogIzUyODc2MikKKyAgICogQ2hlY2sgZm9yIGR1cGxpY2F0ZSBuYW1lcy9hZGRyZXNzZXMgaW4gL2V0Yy9ldGhlcnMuIChjbG9zZXM6ICM1MjM3ODcpCisgICAqIFNldCB0aGUgc3lzdGVtIGxvY2FsZSBpbiB0aGUgZW52aXJvbm1lbnQgYmVmb3JlIGludm9raW5nIGRuc21hc3EsCisgICAgIHNvIHRoYXQgdHJhbnNsYXRlZCBtZXNzYWdlcyB3b3JrLCBhbmQgSUROIHVzZXMgdGhlIGNvcnJlY3QgY2hhcnNldC4KKwkKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgRnJpLCA0IE9jdCAyMDA5IDE0OjAxOjE0ICswMDAwCisKKworZG5zbWFzcSAoMi41MC0xKSB1bnN0YWJsZTsgdXJnZW5jeT1oaWdoCisgICAKKyAgICogTmV3IHVwc3RyZWFtLCBmaXhlcyByZW1vdGUgdnVsbnMgaW4gVEZUUCBzZXJ2ZXIuCisgICAgIEJ1Z3RyYXEgaWQ6IDM2MTIwLDM2MTIxIENWRTogMjAwOS0yOTU3LDIwMDktMjk1OAkKKwkKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgRnJpLCAyMSBBdWcgMjAwOSAxMDoyNToxMyArMDAwMAorCisJCitkbnNtYXNxICgyLjQ5LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworICAgCisgICAqIE5ldyB1cHN0cmVhbS4KKyAgICogTG9nIFRGVFAgImZpbGUgbm90IGZvdW5kIiBlcnJvcnMuIChjbG9zZXM6ICM1MzIyMDEpCisJCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIE1vbiwgOCBKdW4gMjAwOSAyMjowMzoyMyArMDAwMAorCQorZG5zbWFzcSAoMi40OC0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKyAgIAorICAgKiBDaGFuZ2UgZG5zbWFzcSAtPiBkbnNtYXNxLWJhc2UgZGVwZW5kZW5jeSB0byA+PSB0byBhbGxvdyBiaW5OTVUsCisgICAgIGZpeGVzIExpbnRpYW4gZXJyb3IuCisgICAqIEJ1bXAgc3RhbmRhcmRzLXZlcnNpb24gdG8gMy44LjEKKwkKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgRnJpLCA1IEp1biAyMDA5IDEwOjU4OjMzICswMDAwCisKK2Ruc21hc3EgKDIuNDgtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLgorICAgKiBEZXRlY3QgYW5kIGlnbm9yZSBkdXBsaWNhdGUgY29uZmlndXJhdGlvbiBmaWxlcy4gKGNsb3NlczogIzUxNjIzNCkKKyAgICogQWRkIDIgc2Vjb25kIHNsZWVwIGJldHdlZW4gc3RvcCBhbmQgc3RhcnQgZHVyaW5nIGluaXRzY3JpcHQgcmVzdGFydC4KKyAgICogTWFrZSBkZXBlbmRlbmN5IG9uIGRuc21hc3EtYmFzZSBpbiBkbnNtYXNxIHBhY2thZ2UgdmVyc2lvbmVkLCBzbyB0aGF0CisgICAgIGluc3RhbGxpbmcgdGhlIGxhdGVzdCBkbnNtYXNxIHdpbGwgaW5zdGFsbCB0aGUgbGF0ZXN0IGRuc21hc3EtYmFzZQorICAgICB0b28uIChjbG9zZXM6ICM1MjM5NTUpCisgICAqIEFkZCBub2RoY3AgREVCX0JVSUxEX09QVElPTlMgb3B0aW9uLgorCQkKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgRnJpLCAyOSBNYXkgMjAwOSAxMDoyMDoyMyArMDAwMAorCitkbnNtYXNxICgyLjQ3LTMpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIEZpeCBiYXNoaXNtIGluIGluaXQgc2NyaXB0LiAoY2xvc2VzOiAjNTE0Mzk3KQorICAgKiBUd2VhayBsb2dnaW5nIGluIGluaXQgc2NyaXB0LgorCQorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBTYXQsIDcgRmViIDIwMDkgMTk6MjU6MjMgKzAwMDAKKworZG5zbWFzcSAoMi40Ny0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBDaGVjayB0aGF0IC9ldGMvaW5pdC5kL2Ruc21hc3EgaXMgZXhlY3V0YWJsZSBpbiBwb3N0aW5zdCBpbiBjYXNlCisgICAgIHRoZSBkYWVtb24gaGFzIGJlZW4gIGRpc2FibGVkIHRoYXQgd2F5LiAoY2xvc2VzOiAjNTE0MzE0KQorICAgKiBFbnN1cmUgdGhhdCAvdmFyL3J1bi9kbnNtYXNxIGV4aXN0cyBhbmQgaGFzIHRoZSByaWdodCBwZXJtaXNzaW9ucworICAgICBiZWZvcmUgcnVubmluZyBkbnNtYXNxLiBPbiBzb21lIHN5c3RlbXMgL3Zhci9ydW4gaXMgY2xlYXJlZCBvdmVyIAorICAgICByZWJvb3QuIChjbG9zZXM6ICM1MTQzMTcpCisJCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIEZyaSwgNiBGZWIgMjAwOSAwOTozODoyMSArMDAwMAorCQorZG5zbWFzcSAoMi40Ny0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBOZXcgdXBzdHJlYW0uCisgICAqIEhhbmRsZSB0aGUgIkVOQUJMRUQiIGZsYWcgaW4gdGhlIGluaXQgc2NyaXB0IGEgYml0IG1vcmUgCisgICAgIGludGVsbGlnZW50bHkuIFRoZSAic3RvcCIgYW5kICJzdGF0dXMiIGZ1bmN0aW9ucyBjb250aW51ZQorICAgICB0byB3b3JrIGV2ZW4gd2hlbiBkaXNhYmxlZCwgYnV0IGEgZmFpbGVkICJzdG9wIiBiZWNvbWVzIAorICAgICBzaWxlbnQgYW5kIHJldHVybnMgemVybyBleGl0IGNvZGUuCisgICAqIERvbid0IGV4cGxpY2l0bHkga2lsbCBkbnNtYXNxIGF0IHN5c3RlbSBzaHV0ZG93biwgcmVseSBvbiB0aGUgCisgICAgIHNlbmRzaWdzIHNjcmlwdCBpbnN0ZWFkIHdoaWNoIGlzIHF1aWNrZXIuIChjbG9zZXM6ICM1MDY3MzQpCisgICAqIFN0b3JlIHRoZSBQSUQtZmlsZSBpbiAvdmFyL3J1bi9kbnNtYXNxLiBUaGlzIGRpcmVjdG9yeSBpcyBvd25lZCBieQorICAgICB1c2VyICJkbnNtYXNxIiwgc28gdGhhdCBkbnNtYXNxIGNhbiBkZWxldGUgdGhlIFBJRC1maWxlIG9uCisgICAgIHNodXRkb3duLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgdGhlIFBJRC1maWxlIGdvZXMgZXZlbiB3aGVuIGRuc21hc3EgCisgICAgIGlzIHN0b3BwZWQgYnkgc2VuZHNpZ3MuIChjbG9zZXM6ICM1MDg1NjApIAorICAgKiBCdW1wIHN0YW5kYXJkcy12ZXJzaW9uIHRvIDMuOC4wIChubyBjaGFuZ2VzIHJlcXVpcmVkLikKKyAgICogL3Vzci9zYmluL2FkZHVzZXIgLT4gYWRkdXNlciBpbiBwb3N0aW5zdC4gTGludGlhbiBmaXguCisgICAqIEhhbmRsZSBJUHY2IGFkZHJlc3NlcyBpbiAidGVudGF0aXZlIiBzdGF0ZSBiZXR0ZXIuIChjbG9zZXM6ICM1MDc2NDYpIAorICAgKiBBZGQgREJ1cyBpbnRyb3NwZWN0aW9uIHN1cHBvcnQuIChjbG9zZXM6ICM1MDg3NzQpCisgICAqIEZpeCBEYnVzIGNvbmZpZ3VyYXRpb24uIChjbG9zZXM6ICM1MTA2NDkpCisJCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIE1vbiwgMiBGZWIgMjAwOSAxMzozOToxMSArMDAwMAorCitkbnNtYXNxICgyLjQ2LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIE5ldyB1cHN0cmVhbS4gKGNsb3NlczogIzQ5OTE2MikgKGNsb3NlczogIzQ5OTAwNykKKyAgICogUmVtb3ZlIGZyb20gaW5pdCBzY3JpcHQgc3RhcnQtc3RvcC1kYWVtb24gY2FsbCB0byBraWxsCisgICAgIGNoaWxkIHByb2Nlc3Nlcy4gVGhpcyBpcyBub3QgbmVlZGVkIHNpbmNlIGRuc21hc3EgaXMgCisgICAgIGNhcmVmdWxseSB3cml0dGVuIHRvIGtpbGwgY2hpbGQgcHJvY2Vzc2VzLCBhbmQgaXQgaW50ZXJhY3RzCisgICAgIGJhZGx5IHdpdGggInByaXZhdGUiIGluc3RhbmNlcyBvZiBkbnNtYXNxLiAoY2xvc2VzOiAjNTA1NTIzKQorICAgKiBQcm92aWRlIC9ldGMvZG5zbWFzcS5kIGFuZCBhbHRlciB0aGUgaW5zdGFsbGVkIC9ldGMvZGVmYXVsdC9kbnNtYXNxCisgICAgIHNvIHRoYXQgL2V0Yy9kbnNtYXNxLmQgaXMgcmVhZC4gVGhpcyBwcm92aWRlcyBhIGRyb3AtZGlyZWN0b3J5IHdoZXJlCisgICAgIGxpYnZpcnQgY2FuIGFkZCBvcHRpb25zIHRvIG1ha2UgdGhlIHN5c3RlbSBkbnNtYXNxIGF1dG9tYXRpY2FsbHkgCisgICAgIHBsYXkgbmljZSB3aXRoIGxpYnZpcnQncyBwcml2YXRlIGluc3RhbmNlcy4gKGNsb3NlczogIzUwNTUyMikKKwkgICAgICAgIAorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBUaHUsIDEzIE5vdiAyMDA4IDIwOjE1OjMxICswMDAwCisKK2Ruc21hc3EgKDIuNDUtMSkgdW5zdGFibGU7IHVyZ2VuY3k9aGlnaAorCisgICAqIE5ldyB1cHN0cmVhbSAtIGZpeGVzIHJlZ3Jlc3Npb24gd2hlbiBtaW4tcG9ydCBub3Qgc2V0LgorCSAgICAgICAgCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFN1biwgMjAgSnVsIDIwMDggMTk6Mjc6MTEgKzAwMDAKKwkKK2Ruc21hc3EgKDIuNDQtMSkgdW5zdGFibGU7IHVyZ2VuY3k9aGlnaAorCisgICAqIE5ldyB1cHN0cmVhbSAtIGJ1Z2ZpeCByZWxlYXNlIGZvciAyLjQzLgorICAgKiBGaXggY3Jhc2ggaW4gbmV0bGluayBjb2RlLiAoY2xvc2VzOiAjNDkxMjg5KQorICAgICAgICAKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgRnJpLCAxMSBKdWwgMjAwOCAxOTozOToxMCArMDAwMAorCitkbnNtYXNxICgyLjQzLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWhpZ2gKKworICAgKiBOZXcgdXBzdHJlYW0uCisgICAqIEltcGxlbWVudCBzb3VyY2UtcG9ydCByYW5kb21pc2F0aW9uIGFuZCBiZXR0ZXIgcmFuZG9tCisgICAgIG51bWJlciBnZW5lcmF0b3IgYXMgZGVmZW5jZSBhZ2FpbnN0IENWRS0yMDA4LTE0NDcgKGNsb3NlczogIzQ5MDEyMykKKwkKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgVHVlLCAxNyBKdW4gMjAwOCAxMTo1NTozOCArMDAwMAorCitkbnNtYXNxICgyLjQyLTQpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIEZpeCBib3RjaCBpbiBwb3N0aW5zdCBpbnRyb2R1Y2VkIGluIDIuNDItMi4gKGNsb3NlczogIzQ4NjYxNikKKyAgICAgICAgCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFR1ZSwgMTcgSnVuIDIwMDggMTE6Mzk6MTAgKzAwMDAKKworZG5zbWFzcSAoMi40Mi0zKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBGaXggdGhpbmtvIGluIGluaXQgc2NyaXB0LCBicmVha3Mgc3RhdHVzIGNvbW1hbmQuIChjbG9zZXM6ICM0ODY0NTUpCisgICAgICAgIAorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBNb24sIDE2IEp1biAyMDA4IDExOjI2OjIwICswMDAwCisKK2Ruc21hc3EgKDIuNDItMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogRXJyb3IgY2hlY2sgaW4gcG9zdGluc3QgZmlsZSAoY2xvc2VzOiAjNDg1NjQ1KQorICAgICAgICAKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgVHVlLCAxMCBKdW4gMjAwOCAyMDoyNToxMCArMDAwMAorCitkbnNtYXNxICgyLjQyLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIE5ldyB1cHN0cmVhbS4KKyAgICogRml4IG1hbnBhZ2UgdHlwb3MuIChjbG9zZXM6ICM0Njg3NjIpCisgICAqIFVzZSBMU0IgbG9nXypfbXNnIHJhdGhlciB0aGFuIGVjaG8gaW4gaW5pdCBzY3JpcHQuIChjbG9zZXM6ICM0NzMxMTcpCisgICAqIEZpeCBhZ2VudC1pZCBlY2hvIHByb2JsZW0uIChjbG9zZXM6ICM0NzMwMTUpCisgICAqIEZpeHVwIGNoYW5naW5nIC91c3Ivc2hhcmUvZG9jL2Ruc21hc3EgdG8gc3ltbGluay4gKGNsb3NlczogIzQ2ODc2MykKKwkKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgV2VkLCAyNyBGZWIgMjAwOCAyMToxNToyOCArMDAwMAorCitkbnNtYXNxICgyLjQxLTIpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIEZpeCBydWxlcyB0byBidWlsZCBiaW5hcnktYXJjaCBhbmQgYmluYXJ5LWluZGVwIGNvcnJlY3RseS4KKyAgICAgICAgCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFdlZCwgMjcgRmViIDIwMDggMTk6NTc6MTAgKzAwMDAKKworZG5zbWFzcSAoMi40MS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBOZXcgdXBzdHJlYW0uCisgICAqIEZpeCB0eXBvLiAoY2xvc2VzOiAjNDQ4MDM4KQorICAgKiBGaXggREhDUCBwcm9ibGVtIGludGVyb3BlcmF0aW5nIHdpdGggU29ueSBFcmljc3NvbiBLNjEwaSAoY2xvc2VzOiAjNDUxODcxKQorICAgKiBTcGxpdCBiaW5hcnkgcGFja2FnZXMgaW50byBkbnNtYXNxIGFuZCBkbnNtYXNxLWJhc2UgKGNsb3NlczogIzQ2MzQwNykKKyAgICogQWRkIHdhcm5pbmdzIGFib3V0IGJhZCBlZmZlY3RzIG9mIC0tZmlsdGVyd2luMmsgdG8gZGVmYXVsdCBjb25maWcKKyAgICAgZmlsZS4gKGNsb3NlczogIzQ2NDM1NykgCisgICAqIERvbid0IGRlY2xhcmUgUHJvdmlkZXM6ICRuYW1lZCBpbiBMU0IgaGVhZGVyLiAoY2xvc2VzOiAjNDY0NTEyKQorICAgKiBSZW1vdmUgY29uZmxpY3Qgd2l0aCBwZG5zZC4gKGNsb3NlczogIzQ2NDY5MSkKKyAgICogQWRkIGFiaWxpdHkgdG8gZGlzYWJsZSBkbnNtYXNxIGluIC9ldGMvZGVmYXVsdC9kbnNtYXNxLiAoY2xvc2VzOiAjNDY1MDYyKQorCQorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBUaHUsIDMxIEphbiAyMDA4IDIwOjI1OjI4ICswMDAwCisKK2Ruc21hc3EgKDIuNDAtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLgorICAgKiBGaXggbWFucGFnZSB0eXBvLiAoY2xvc2VzOiAjNDI5NDEyKQorICAgKiBGaXggZG5zbWFzcS5jb25mIHR5cG9zIChjbG9zZXM6ICM0Mjk5MjkpCisgICAqIEhhbmRsZSBERUJfQlVJTERfT1BUSU9OUyBub3N0cmlwIGFuZCBub29wdCAoY2xvc2VzOiAjNDM2Nzg0KQorICAgKiBBZGQgREVCX0JVSUxEX09QVElPTlMgZm9yIG5vZG9jcywgbm90ZnRwLCBub2lwdjYsIAorICAgICBub2RidXMsIG5vaTE4biBhbmQgbm9ydGMuCisgICAqIENyZWF0ZSBERUJJQU4vbWQ1c3VtcyBmaWxlIGluIHBhY2thZ2UuCisgICAqIEFkZCBzdGF0dXMgZnVuY3Rpb24gdG8gaW5pdCBzY3JpcHQuIChjbG9zZXM6ICM0MzkzMTYpCisJCQkKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgVGh1LCA5IEF1ZyAyMDA3IDEwOjI0OjE4ICswMDAwCisKK2Ruc21hc3EgKDIuMzktMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLgorICAgKiBQcm92aWRlIGV4YW1wbGUgY29uZmlnIGZpbGUgaW4gL3Vzci9zaGFyZS9kb2MvZG5zbWFzcS9leGFtcGxlcworICAgICBhcyB3ZWxsIGFzIC9ldGMvZG5zbWFzcS5jb25mLCBzbyBpdCdzIGF2YWlsYWJsZSBmb3IgcmVmZXJlbmNlLgorCQkJCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFRodSwgMTMgRmViIDIwMDcgMTA6MDI6MzggKzAwMDAKKworZG5zbWFzcSAoMi4zOC0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBOZXcgdXBzdHJlYW0gKGNsb3NlczogIzQxMDE4NSkKKwkJCQorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBUdWUsIDYgRmViIDIwMDcgMjE6MTQ6NTggKzAwMDAKKworZG5zbWFzcSAoMi4zNy0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBOZXcgdXBzdHJlYW0uCisJCQkKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgVGh1LCAyNSBKYW4gMjAwNyAxMDo0NDoxOCArMDAwMAorCitkbnNtYXNxICgyLjM2LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIE5ldyB1cHN0cmVhbS4gKGNsb3NlczogIzQwMDAzNykKKyAgICogRG9uJ3QgZmFpbCB0byBwdXJnZSBpZiBkZWx1c2VyIGNvbW1hbmQgaXMgbm90IGF2YWlsYWJsZS4KKyAgICogQWRkIG9uZSBzZWNvbmQgc2xlZXAgdG8gcmVzb2x2Y29uZiBzY3JpcHQuIChjbG9zZXM6ICMzOTg5NjEpCisgICAqIEZpeCBkbnNtYXNxLmNvbmYgdHlwbyAoY2xvc2VzOiAjNDA1MzE0KSAKKwkJCQorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBUdWUsIDMxIE9jdCAyMDA2IDEwOjI0OjU4ICswMDAwCisKK2Ruc21hc3EgKDIuMzUtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLgorCQkJCQorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBXZWQsIDE4IE9jdCAyMDA2IDA5OjIzOjI4ICswMDAwCisKK2Ruc21hc3EgKDIuMzQtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLgorICAgKiBJbmNsdWRlcyAtLWNsZWFyLW9uLXJlbG9hZCBmbGFnLiAobG9zZXM6ICMzOTE2NTQpCisgICAqIERvbid0IGFueSBsb25nZXIgc2V0IHRoZSAiZG9tYWluLW5lZWRlZCIgYW5kICJib2d1cy1wcml2IiBmbGFncyBpbiB0aGUKKyAgICogdGhlIGRlZmF1bHQtaW5zdGFsbGVkIGRuc21hc3EuY29uZi4gVGhlc2UgY2FuIGdlbmVyYXRlIHB1enpsaW5nIAorICAgKiBiZWhhdmlvdXIgZm9yIHBlb3BsZSB3aG8gZ2V0IHRoZW0gd2l0aG91dCBhc2tpbmcuCisJCQkJCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFdlZCwgOSBBdWcgMjAwNiAwOToyMzoyOCArMDAwMAorCitkbnNtYXNxICgyLjMzLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIE5ldyB1cHN0cmVhbS4KKyAgICogUmVtb3ZlIGJhc2hpc20gZnJvbSBNYWtlZmlsZSAoY2xvc2VzOiAjMzc1NDA5KQorICAgKiBBZGRlZCBQcm92aWRlczogJG5hbWVkIHRvIExTQiBoZWFkZXIgaW4gaW5pdCBzY3JpcHQuCisgICAqIEFkZCAtLWRucy1mb3J3YXJkLW1heCBmbGFnLiAoY2xvc2VzOiAjMzc3NTA2KQorCQkJCQorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBTdW4sIDI1IEp1bmUgMjAwNiAxODowMzoxMyArMDAwMAorCitkbnNtYXNxICgyLjMyLTIpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIEFkZGVkIExTQiB0YWdzIHRvIGluaXQuZCBzdGFydHVwIHNjcmlwdC4gKGNsb3NlczogIzM3NDY1MCkKKwkJCQkKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgU3VuLCAyNSBKdW5lIDIwMDYgMTc6NTU6MTEgKzAwMDAKKworZG5zbWFzcSAoMi4zMi0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBOZXcgdXBzdHJlYW0uCisJCQkJCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIE1vbiwgOCBNYXkgMjAwNiAwOToyMzoyOCArMDAwMAorCitkbnNtYXNxICgyLjMxLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWhpZ2gKKworICAgKiBOZXcgdXBzdHJlYW0uIChjbG9zZXM6ICMzNjQ4MDApCisgICAqIENvbXBpbGUgaW4gRGJ1cyBzdXBwb3J0IG5vdyB0aGF0IHN1aXRhYmxlIERidXMgcGFja2FnZXMgZXhpc3QuCisgICAqIERvbid0IHN0b3AgYW4gb2xkIGRuc21hc3EgcHJvY2VzcywgdW50aWwgYSBuZXcgb25lIGlzIHJlYWR5LCAKKyAgICAgd2hlbiB1cGdyYWRpbmcuIChjbG9zZXM6ICMzNjYyMjQpCisgICAqIE1vdmUgdG8gc3RhbmRhcmRzLXZlcnNpb24gMy43LjIgKG5vIGNoYW5nZXMgbmVlZGVkKS4KKwkKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgU2F0LCA2IE1heSAyMDA2IDExOjU4OjIyICswMDAwCisKK2Ruc21hc3EgKDIuMzAtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLCBmaXhlcyBjcmFzaCB3aXRoIERIQ1AgYnJvYWRjYXN0IHJlcGxpZXMuCisJCQkJCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFN1biwgMjMgQXByIDIwMDYgMTQ6NTg6MjIgKzAwMDAKKworZG5zbWFzcSAoMi4yOS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBOZXcgdXBzdHJlYW0uIChjbG9zZXM6ICMzNjMyNDQpIChjbG9zZXM6ICMzNjMzNDApCisgICAqIE1hZGUgY29uZmlnIG9wdGlvbnMgY2xlYXJlciBpbiBzcmMvY29uZmlnLmggYW5kIAorICAgICBjbGFyaWZ5IElTQyBpbnRlZ3JhdGlvbiBzdGF0dXMgaW4gRGViaWFuIHJlYWRtZS4gKGNsb3NlczogIzM2NDI1MCkKKwkJCQorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBUdWUsIDE4IEFwciAyMDA2IDEwOjI2OjEyICswMDAwCisKK2Ruc21hc3EgKDIuMjgtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLiAoY2xvc2VzOiAjMzU5OTU2KSAoY2xvc2VzOiAjMzYyNDk5KQorICAgKiBBZGRlZCBmaXJlc3RhcnRlciBpbmZvIHRvIEZBUS4gKGNsb3NlczogIzM1OTEzOSkKKwkJCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFR1ZSwgMTQgTWFyIDIwMDYgMTk6MjA6MTIgKzAwMDAKKworZG5zbWFzcSAoMi4yNy0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBOZXcgdXBzdHJlYW0uCisgICAqIFdvcmthcm91bmQgYnVnZ3kgTWljcm9zb2Z0IERIQ1AgY2xpZW50cy4gKGNsb3NlczogIzM1NTAwOCkKKwkJCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFdlZCwgMSBGZWIgMjAwNiAxNzowNToxMiArMDAwMAorCitkbnNtYXNxICgyLjI2LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWhpZ2gKKworICAgKiBOZXcgdXBzdHJlYW0uIChGaXhlcyBwb3NzaWJsZSBjcmFzaCBpbiAyLjI1LCBoZW5jZSB1cmdlbmN5KS4KKwkJCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFN1biwgMjIgSmFuIDIwMDYgMTE6MDU6MjIgKzAwMDAKKworZG5zbWFzcSAoMi4yNS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBSZW1vdmUgYmFzaGlzbXMgaW4gcG9zdGluc3QgYW5kIHByZXJtIHNjcmlwdHMuCisgICAqIFJlbW92ZSBtaXNjb25jaWV2ZWQgZGVwZW5kZW5jeSBvbiBsb2NhbGVzLgkKKyAgICogRGVwZW5kIG9uIGFkZHVzZXIuCisJCQorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBUaHUsIDAxIERlYyAyMDA1IDIxOjAyOjEyICswMDAwCisKK2Ruc21hc3EgKDIuMjQtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLiAoY2xvc2VzOiAjMzMwNDIyKQorICAgKiBGaXggdHlwbyBhbmQgY2xlYW4gdXAgZG5zbWFzcS5jb25mIChjbG9zZXM6ICMzMjYwNTcpIChjbG9zZXM6ICMzMDQ0NDYpCisgICAqIEFkZCBidWlsZCBzdXBwb3J0IGZvciBJMThOIGFuZCBnZXR0ZXh0LgorICAgKiBGaXhlZCBtYW5wYWdlIHR5cG9zLiAoY2xvc2VzOiAjMzM2NDEzKQorICAgKiBDcmVhdGUgYSBkbnNtYXNxLXVuaXF1ZSB1c2VyaWQgZm9yIHRoZSBkYWVtb24gdG8gcnVuIGFzLiAoY2xvc2VzOiAjMzM4MzUzKQorCQorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBTYXQsIDAzIFNlcCAyMDA1IDIwOjAyOjMyICswMDAwCisKK2Ruc21hc3EgKDIuMjMtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLiAoY2xvc2VzOiAjMzAyNTAxKSAoY2xvc2VzOiAjMzE1Nzk0KQorICAgKiBGaXggbWFucGFnZSB0eXBvcy4gKGNsb3NlczogIzMwNDk4NCkKKyAgICogQWRkIHN1cHBvcnQgZm9yIEROU01BU1FfRVhDRVBUIGluIC9ldGMvZGVmYXVsdHMvZG5zbWFzcS4KKyAgICAgcHV0dGluZyAibG8iIGluIHRoaXMgYWxzbyBkaXNhYmxlcyByZXNvbHZjb25mIHN1cHBvcnQuCisgICAqIE5vIGxvbmdlciBkZWxldGUgcHJlLWV4aXN0aW5nIC9ldGMvaW5pdC5kIHN5bWxpbmtzLiBUaGUgCisgICAgIGNoYW5nZSBpbiBkZWZhdWx0IHJ1bmxldmVscyB3aGljaCBuZWNjZXNpdGF0ZWQgdGhpcyAKKyAgICAgaXMgbm93IGFuY2llbnQgaGlzdG9yeSBhbmQgYW55d2F5IHRoZSBzdGFydHVwIHNjcmlwdCBub3cgCisgICAgIGJlaGF2ZXMgd2hlbiBjYWxsZWQgdHdpY2UuIChjbG9zZXM6ICMzMTIxMTEpCisgICAqIFRpZ2h0ZW5lZCBjb25maWctZmlsZSBwYXJzZXIuIChjbG9zZXM6ICMzMTcwMzApCisJCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFR1ZSwgMDIgQXVnIDIwMDUgMTM6MTc6MjIgKzAwMDAKKworZG5zbWFzcSAoMi4yMi0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBNYWtlIHRoZSByZXNvbHYuY29uZiBwb2xsaW5nIGNvZGUgcmVzaXN0YW50IHRvIAorICAgICBiYWNrd2FyZHMtbW92aW5nIHN5c3RlbSBjbG9ja3MuIChjbG9zZXM6ICMzMDYxMTcpIChjbG9zZXM6ICMzMDA2OTQpCisgICAgICAgIAorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBXZWQsIDA0IE1heSAyMDA1IDEzOjI1OjIzICswMDAwCisKK2Ruc21hc3EgKDIuMjItMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLgorICAgKiBGaXhlZCBicm9rZW4tbmVzcyB3aGVuIHJlYWQgL2V0Yy9ldGhlcnMuIChjbG9zZXM6ICMzMDE5OTkpCisJCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFRodXIsIDI0IE1hciAyMDA1IDE3OjEwOjEzICswMDAwCisKK2Ruc21hc3EgKDIuMjEtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLgorCQorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBTYXQsIDI5IEphbiAyMDA1IDE2OjA1OjEzICswMDAwCisKK2Ruc21hc3EgKDIuMjAtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLgorICAgKiBGaXggc2hhZG93ZWQgQ05BTUUtdGFyZ2V0IHByb2JsZW0uIChjbG9zZXM6ICMyODY2NTQpCisgICAqIEFkZCAtLWxvY2FsaXNlLXF1ZXJpZXMgb3B0aW9uLiAoY2xvc2VzOiAjMjkxMzY3KQorCQorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBGcmksIDE3IERlYyAyMDA0IDE3OjM1OjIzICswMDAwCisKK2Ruc21hc3EgKDIuMTktMSkgdW5zdGFibGU7IHVyZ2VuY3k9aGlnaAorCisgICAqIE5ldyB1cHN0cmVhbS4KKyAgICogRml4IGFub3RoZXIgSVB2NiBpbnRlcmZhY2UgZW51bWVyYXRpb24gcHJvYmxlbS4gKGNsb3NlczogIzI4NTE4MikKKyAgICogVXBsb2FkaW5nIGF0IGhpZ2ggcHJpb3JpdHkgc2luY2UgMjg1MTgyIGlzIHJlYWxseSBSQy4KKwkKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgU2F0LCAxMSBEZWMgMjAwNCAyMDozOTozMyArMDAwMAorCitkbnNtYXNxICgyLjE4LTIpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIFJldmVydCBzdGFydHVwIHRvIG5vdCBzdGFydCBmcm9tIHJjUy4gU3RhcnRpbmcgaW4gcmNTCisgICAqIGNhdXNlcyBwcm9ibGVtcyBpZiBpbnRlcmZhY2VzIGFyZSBub3QgYXZhaWxhYmxlIGF0IHRoYXQKKyAgICogcG9pbnQuIFVzZXJzIHdobyBuZWVkIHRoaXMgZmFjaWxpdHkgc2hvdWxkICBtYW51YWxseSAKKyAgICogbWFrZSByY1MuZCBzeW1saW5rcy4gKGNsb3NlczogIzI4MzIzOSkKKworIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBTYXQsIDI3IE5vdiAyMDA0IDE2OjMzOjEyICswMDAwCisJCitkbnNtYXNxICgyLjE4LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIE5ldyB1cHN0cmVhbS4KKyAgICogUmVzZXQgY2FjaGUgc3RhdGlzdGljcyB3aGVuIGNsZWFyaW5nIHRoZSBjYWNoZS4gKGNsb3NlczogIzI4MTgxNykKKyAgICogRml4IHByb2JsZW1zIHdpdGggYmluZC1pbnRlcmZhY2VzIGFuZCBJUHY2LiAoY2xvc2VzOiAjMjgyMTkyKQorICAgKiBGaXggcHJvYmxlbXMgdXBncmFkaW5nIHdoZW4gcmVzdGFydGluZyBkbnNtYXNxIGZhaWxzLgorCQorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBUdWUsIDE2IE5vdiAyMDA0IDE3OjMzOjMyICswMDAwCisKK2Ruc21hc3EgKDIuMTctMSkgdW5zdGFibGU7IHVyZ2VuY3k9aGlnaAorCisgICAqIE5ldyB1cHN0cmVhbSAtIGZpeGVzIGNyYXNoLCBoZW5jZSBoaWdoIHVyZ2VuY3kuIAorICAgKiBDbGFyaWZpZWQgbG9nIG1lc3NhZ2Ugd2hlbiBhIHJlY29yZCBpbiAvZXRjL2hvc3RzIAorICAgICBhbmQgYSBESENQIG5hbWUgY2xhc2guIChjbG9zZXM6ICMyNzU0MjApCisgICAqIFN0YXJ0IGRuc21hc3EganVzdCBiZWZvcmUgcG9ydG1hcCBhbmQgbmZzIG1vdW50cyBmcm9tIHJjUy5kCisgICAgIEROUyBpcyByZXF1aXJlZCBhdCB0aGlzIHN0YWdlIHRvIHVzZSB0aGUgbmV0LiAoY2xvc2VzOiAjMjgwNDM0KQorICAgKiBNYWtlICJiaW5kLWludGVyZmFjZXMiIGFwcGx5IHRvIElQdjYgaW50ZXJmYWNlcy4gKGNsb3NlczogIzI3ODQ5MikKKyAgICogQWxsb3cgYSBsaXN0IGlmIGludGVyZmFjZXMgYXMgYXJnIHRvIHRoZSAtLWludGVyZmFjZSBhbmQKKyAgICAgLS1leGNlcHQtaW50ZXJmYWNlIG9wdGlvbnMuIChjbG9zZXM6ICMyNzkwNjMpIAorCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFR1ZSwgMjYgT2N0IDIwMDQgMjA6Mzk6MzMgKzAwMDAKKworZG5zbWFzcSAoMi4xNi0yKSB1bnN0YWJsZTsgdXJnZW5jeT1oaWdoCisKKyAgICogUmVuYW1lIHZhcmlhYmxlIGluIGNhY2hlLmMgd2hpY2ggY2xhc2hlcyB3aXRoIEMgaGVhZGVycworICAgICB1bmRlciBnY2MtMy40IChjbG9zZXM6ICMyNzc4OTMpCisJCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIE1vbiwgMjUgT2N0IDIwMDQgMTY6MDM6MjQgKzAwMDAKKworZG5zbWFzcSAoMi4xNi0xKSB1bnN0YWJsZTsgdXJnZW5jeT1oaWdoCisKKyAgICogTmV3IHVwc3RyZWFtLgorICAgKiBGaXhlcyBpbnRlcmFjdGlvbiB3aXRoIExpbnV4IDIuNC54IGFuZCAyLjYueCBub3QtcXVpdGUtUE9TSVgKKyAgICAgc2VsZWN0IGJlaGF2aW9yLCB3aGljaCBjYW4gY2F1c2UgaGFuZ3Mgd2hlbiByZWNlaXZpbmcgVURQCisgICAgIHBhY2tldHMgd2l0aCBiYWQgY2hlY2tzdW0uCisgICAqIEZpeCBiYWQgaW50ZXJhY3Rpb24gd2l0aCBwb2xpcG8uIChjbG9zZXM6ICMyNzU3NTQpCisgICAqIENhY2hlIENOQU1FcyBiZXR0ZXIuIChjbG9zZXM6ICMyNzYyODkpCisJCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIE1vbiwgMDQgT2N0IDIwMDQgMTU6MjU6NDQgKzAwMDAKKworZG5zbWFzcSAoMi4xNS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBOZXcgdXBzdHJlYW0uCisgICAqIEZpeCBOWERPTUFJTi9OT0RBVEEgY29uZnVzaW9uIGZvciBsb2NhbGx5IGtub3duIG5hbWVzLiAoY2xvc2VzOiAjMjcxNTY0KQorCQorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBXZWQsIDE1IFNlcCAyMDA0IDE1OjAxOjQ0ICswMDAwCisKK2Ruc21hc3EgKDIuMTQtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLgorCQorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBTYXQsIDI4IEF1ZyAyMDA0IDIwOjM5OjMzICswMDAwCisKK2Ruc21hc3EgKDIuMTMtMSkgdW5zdGFibGU7IHVyZ2VuY3k9aGlnaAorCisgICAqIE5ldyB1cHN0cmVhbSAtIGZpeGVzIGNyYXNoLiAoY2xvc2VzICMyNjUzMTMpCisJCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFRodXIsIDEyIEF1ZyAyMDA0IDEyOjQ1OjIzICswMDAwCisKK2Ruc21hc3EgKDIuMTItMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLgorICAgKiBMb2cgdHlwZXMgb2YgaW5jb21pbmcgcXVlcmllcyAoY2xvc2VzOiAjMjMwMTIzKS4KKyAgICogRG9uJ3Qgc2V0ICJmaWx0ZXJ3aW4yayIgYnkgZGVmYXVsdCBpbiB0aGUgaW5jbHVkZWQKKyAgICAgY29uZmlnIGZpbGUgLSBpdCBicmVha3MgU1JWIGxvb2t1cHMgYW5kIEtlcmJlcm9zLgorCQorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBTdW4sIDggQXVnIDIwMDQgMTk6NTg6MTMgKzAwMDAKKworZG5zbWFzcSAoMi4xMS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBOZXcgdXBzdHJlYW0uCisJCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFdlZCwgMjggSnVseSAyMDA0IDIxOjU5OjMzICswMDAwCisKK2Ruc21hc3EgKDIuMTAtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLgorICAgKiBBbGxvdyBxdWVyeS1wb3J0IGxlc3MgdGhhbiAxMDI0IChjbG9zZXM6ICMyMzY1ODYpCisgICAqIENoYW5nZSBiZWhhdmlvdXIgb2YgLS1ib2d1cy1wcml2IChjbG9zZXM6ICMyNTQ3MTEpCisgICAqIE1hdGNoIGV4aXN0aW5nIGxlYXNlcyBieSBNQUMgYWRkcmVzcyB3aGVuIGEgY2xpZW50IHN0b3BzCisgICAgIHVzaW5nIGNsaWVudC1pZCBvciB0aGV5IGdldCBzdXBwcmVzc2VkIGJ5IGRuc21hc3EuIChjbG9zZXM6ICMyNTg1MTkpCisKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgVGh1ciwgMjQgSnVuZSAyMDA0IDIwOjU1OjQyICswMDAwCisKK2Ruc21hc3EgKDIuOS0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBGaXggdHlwbyBpbiBkZWJpYW4vY29udHJvbCAoY2xvc2VzOiAjMjU1NzYyKQorCQorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBXZWQsIDIzIEp1biAyMDA0IDIwOjQwOjEzICswMDAwCisKK2Ruc21hc3EgKDIuOS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBOZXcgdXBzdHJlYW0uCisgICAqIE5ldyB2ZXJzaW9uIGhhcyBpbXByb3ZlZCBzZXJ2ZXIgc2VsZWN0aW9uIGxvZ2ljIChjbG9zZXM6ICMyNTEwOTcpCisgICAqIEltcHJvdmVkIGluaXRzY3JpcHQgKGNsb3NlczogIzI1MjIyOSkKKyAgICogQ29uZmxpY3Qgd2l0aCBvbGQgcmVzb2x2Y29uZiB2ZXJzaW9ucyB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5LgorICAgKiBVcGRhdGVkIFJFQURNRS5kZWJpYW4gKGNsb3NlczogIzI1MzQyOSkKKyAgICogQ2hhbmdlZCBzdGFydHVwIG1lc3NhZ2UgdG8gbWVudGlvbiBESENQIGFzIHdlbGwgYXMgRE5TLgorICAgKiBOZXcgcmVzb2x2Y29uZiB1cGRhdGUgc2NyaXB0IChjbG9zZXM6ICMyNTQ3NjUpCisJCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFdlZCwgMjYgTWF5IDIwMDQgMTI6MzU6MjMgKzAwMDAKKworZG5zbWFzcSAoMi44LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIE5ldyB1cHN0cmVhbS4KKyAgICogRml4ZXMgcHJvYmxlbSB3aXRoIHplcm8tbGVuZ3RoIGhvc3RuYW1lcyB3aGljaCBjYW4gbG9zZQorICAgICBESENQIGxlYXNlcyBvdmVyIGEgcmVzdGFydC4gKGNsb3NlczogIzI0ODgyOSkKKworIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBUaHVyLCAxMyBNYXkgMjAwNCAxODo0MDoxMiArMDAwMAorCQorZG5zbWFzcSAoMi43LTIpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIE5ldyB2ZXJzaW9uIG9mIHJlc29sdmNvbmYgc2NyaXB0IGZyb20gVGhvbWFzIEhvb2Qgd2l0aCB0aGUgCisgICAgIGZvbGxvd2luZyBjaGFuZ2VzOiAoY2xvc2VzOiAjMjQ3Njk1KQorICAgKiBEb2Vzbid0IGluY2x1ZGUgbmFtZXNlcnZlcnMgbGlzdGVkIGluIHRoZSBsby5pbmV0IG9yIGxvLmluZXQ2IGludGVyZmFjZQorICAgICByZWNvcmRzIGNyZWF0ZWQgYnkgImlmdXAgbG8iCisgICAqIExpc3RzIGFkZHJlc3NlcyBpbiBhIHNwZWNpZmllZCBvcmRlciAoYnkgaW50ZXJmYWNlIG5hbWUpCisgICAqIEVsaW1pbmF0ZXMgZHVwbGljYXRlIG5hbWVzZXJ2ZXIgYWRkcmVzc2VzCisgICAqIFVwZGF0ZXMgL3Zhci9ydW4vZG5zbWFzcS9yZXNvbHYuY29uZiBhdG9taWNhbGx5CisgICAqIERvZXNuJ3QgZ2VuZXJhdGUgZW1wdHkgbGluZXMKKyAgICAgICAgCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFR1ZSwgMTEgTWF5IDIwMDQgMjI6MzU6MTIgKzAwMDAKKworZG5zbWFzcSAoMi43LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIE5ldyB1cHN0cmVhbS4KKworIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBTdW4sIDE4IEFwciAyMDA0IDIwOjAwOjIzICswMDAwCisKK2Ruc21hc3EgKDIuNi0zKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBSZW1vdmVkIHJlbG9hZCBjb21tYW5kIGZyb20gc3RhcnQgc2NyaXB0IGFuZCBtb3ZlZCBmb3JjZS1yZWxvYWQKKyAgICAgdG8gYmUgZXF1aXZhbGVudCB0byByZXN0YXJ0LiBUaGlzIGlzIG5lZWRlZCB0byBiZSBwb2xpY3kgY29tcGxpYW50CisgICAgIHNpbmNlIFNJSEdVUCBkb2Vzbid0IGNhdXNlIGRuc21hc3EgdG8gcmVsb2FkIGl0cyBjb25maWd1cmF0aW9uIGZpbGUsCisgICAgIG9ubHkgdGhlIC9ldGMvaG9zdHMsIC9ldGMvcmVzb2x2LmNvbmYgZXRjLiAoY2xvc2VzOiAjMjQ0MjA4KQorCQorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBTdW4sIDE4IEFwciAyMDA0IDE0OjQwOjUxICswMDAwCisKK2Ruc21hc3EgKDIuNi0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBBZGRlZCBDb25mbGljdCB3aXRoIHBkbnNkIChjbG9zZXM6ICMyNDI3MzEpLgorICAgICBSYXRpb25hbGU6IGRuc21hc3EgdXNlZCB0byBjb25mbGljdCB3aXRoIGFsbCB0aGUgRE5TIHNlcnZlcnMKKyAgICAgaW4gRGViaWFuLCBidXQgdGhhdCB3YXMgcmVtb3ZlZCBiZWNhdXNlIHNvbWUgcGVvcGxlIHdpc2hlZAorICAgICB0byBydW4gd2l0aCBkbnNtYXNxIGxpc3RlbmluZyBvbiBvbmUgaW50ZXJmYWNlIGFuZCBhbm90aGVyIEROUworICAgICBzZXJ2ZXIgbGlzdGVuaW5nIG9uIGFub3RoZXIgaW50ZXJmYWNlLiBIb3dldmVyIEFGQUlLIGl0IGlzIG5vdAorICAgICBwb3NzaWJsZSB0byBtYWtlIHBkbnNkIGxpc3RlbiBvbiBhIHN1YnNldCBvZiBhIGhvc3RzIGludGVyZmFjZXMsCisgICAgIHNvIHRoZXJlIGlzIG5vIHNjZW5hcmlvIHdoZXJlIHJ1bm5pbmcgcGRuc2QgYW5kIGRuc21hc3Egb24gdGhlIHNhbWUKKyAgICAgaG9zdCB3b3VsZCBiZSB1c2VmdWwsIGhlbmNlIHRoZSBjb25mbGljdCBnb2VzIGJhY2suCisgICAqIEFkZGVkIG5vdGUgYWJvdXQgdGhlIC0tYmluZC1pbnRlcmZhY2VzIG9wdGlvbiB0bworICAgICByZWFkbWUuRGViaWFuIChjbG9zZXM6ICMyNDE3MDApCisKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgVHVlcywgMTMgQXByIDIwMDQgMTg6Mzc6NTUgKzAwMDAKKyAgICAgIAorZG5zbWFzcSAoMi42LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIE5ldyB1cHN0cmVhbS4KKyAgICogTmV3IHZlcnNpb24gYWRkcyBiYWNrIGFiaWxpdHkgdG8gcmVhZCBJU0MgZGhjcGQgbGVhc2UgZmlsZXMKKyAgICAgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAoY2xvc2VzOiAjMjI5Njg0KSAoY2xvc2VzOiAjMjM2NDIxKQorICAgKiBGaXggcGFyc2luZyBvZiAjIGNoYXJhY3RlcnMgaW4gb3B0aW9ucyBmaWxlLiAoY2xvc2VzOiAjMjQxMTk5KQorCQorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBTdW4sIDIxIE1hciAyMDA0IDE5OjU5OjI1ICswMDAwCisgICAgICAKK2Ruc21hc3EgKDIuNS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBOZXcgdXBzdHJlYW0sIGluY2x1ZGVzIGZpeCBmb3IgSVAtYWxpYXMgcmVsYXRlZCAKKyAgICAgcHJvYmxlbS4gKGNsb3NlczogIzIzODI2OCkKKwkKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgU3VuLCAxNCBNYXIgMjAwNCAwODozMjo0MyArMDAwMAorCitkbnNtYXNxICgyLjQtMykgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogRml4ZWQgImJpbmQtaW50ZXJmYWNlcyIgb3B0aW9uLCBldmVuIHdoZW4KKyAgICAgYW4gImludGVyZmFjZSIgb3B0aW9uIGlzIGdpdmVuIGFsc28uCisJCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIEZyaSwgMTIgTWFyIDIwMDQgMDg6MTQ6MjMgKzAwMDAKKworZG5zbWFzcSAoMi40LTIpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIEZpeGVkICJiaW5kLWludGVyZmFjZXMiIG9wdGlvbiAoY2xvc2VzOiAjMjM3NTQzKS4KKwkKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgRnJpLCAxMiBNYXIgMjAwNCAwNzozMDoyNSArMDAwMAorCitkbnNtYXNxICgyLjQtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLgorCQorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBUaHVycywgMTEgTWFyIDIwMDQgMDc6NTk6NTUgKzAwMDAKKworZG5zbWFzcSAoMi4zLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIE5ldyB1cHN0cmVhbS4KKwkKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgVHVlcywgMDMgRmViIDIwMDQgMjA6MzM6MTAgKzAwMDAKKworZG5zbWFzcSAoMi4yLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIE5ldyB1cHN0cmVhbS4gKGZpeGVzIG5vIERIQ1Agd2l0aCBJUHY2IHByb2JsZW0pCisgICAqIFJlc3RhcnQgKG9sZCkgZGFlbW9uIG9uIGFib3J0LXVwZ3JhZGUuIChjbG9zZXM6ICMyMzAyODYpCisKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgRnJpLCAzMCBKYW4gMjAwNCAxMDoyMzowMCArMDAwMAorCitkbnNtYXNxICgyLjEtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLgorICAgKiBBbGxvdyBhZGRyZXNzZXMgaW4gL2V0Yy9ob3N0cyB0byBiZSB1c2VkIGZvciAKKyAgICAgREhDUCBsZWFzZXMgKGNsb3NlczogIzIyOTY4MSkKKyAgICogRml4IGxlYXNlIHRpbWUgcHJvY2Vzc2luZy4gKGNsb3NlczogIzIyOTY4MikgKGNsb3NlczogIzIyOTY4NykKKyAgICogRml4IGV4YW1wbGUgY29uZiBmaWxlLiAoY2xvc2VzOiAjMjI5NjgzKSAoY2xvc2VzOiAjMjI5NzAxKQorICAgKiBBbGxvdyBhZGRyZXNzIDAuMC4wLjAgdG8gbWVhbiAic2VsZiIgaW4gZGhjcC1vcHRpb24uIChjbG9zZXM6ICMyMjk2ODUpCisgICAqIENvcGUgd2l0aCBFTk9ERVYgcmV0dXJuIGZyb20gYmluZCBvZiAKKyAgICAgSVB2NiBzZXJ2ZXIgc29ja2V0IChjbG9zZXM6ICMyMjk2MDcpIAorICAgKiBEb2N1bWVudCB0aGUgc3RyaWN0LW9yZGVyIG9wdGlvbiBpbiBkbnNtYXNxLmNvbmYgKGNsb3NlczogIzIyOTI3MikKKyAgICogRml4IGxvY2FsLW9ubHkgZG9tYWluIHNldHRpbmcuIChjbG9zZXM6ICMyMjk4NDYpCisgICAqIFVwZGF0ZXMgRGViaWFuIHJlYWRtZSB0byBtZW50aW9uIHJlc29sdmNvbmYgYW5kIHBvaW50IGF0IHRoZQorICAgICBsb2NhbCBjb3B5IG9mIFJGQzIxMzIuCisKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgRnJpLCAgMjMgSmFuIDIwMDQgMTQ6Mzg6MjkgKzAwMDAKKworZG5zbWFzcSAoMi4wLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIE5ldyB1cHN0cmVhbTogVGhpcyByZW1vdmVzIHRoZSBhYmlsaXR5IHRvIHJlYWQgdGhlIAorICAgICB0aGUgbGVhc2VzIGZpbGUgb2YgSVNDIERIQ1AgYW5kIHJlcGxhY2VzIGl0IHdpdGggYSBidWlsdC1pbiAKKyAgICAgREhDUCBzZXJ2ZXIuIEFwb2xvZ2llcyBpbiBhZHZhbmNlIGZvciBicmVha2luZyBiYWNrd2FyZHMgCisgICAgIGNvbXBhdGliaWx0eSwgYnV0IHRoaXMgcmVwbGFjZXMgYSBiaXQgb2YgYSBoYWNrICh0aGUgSVNDIHN0dWZmKQorICAgICB3aXRoIGEgbmljZWx5IGVuZ2luZWVyZWQgYW5kIG11Y2ggbW9yZSBhcHJvcHJpYXRlIHNvbHV0aW9uLgorICAgICBXZWFyaW5nIG15IHVwc3RyZWFtLW1haW50YWluZXIgaGF0LCBJIHdhbnQgdG8gbG9zZSB0aGUgaGFjayBub3csCisgICAgIHJhdGhlciB0aGFuIGhhdmUgdG8gc3VwcG9ydCBpdCBpbnRvIFNhcmdlLgorICAgKiBOZXcgdXBzdHJlYW0gY2xvc2VzIHNvbWUgYnVncyBzaW5jZSB0aGV5IGJlY29tZSAKKyAgICAgaXJyZWxldmFudC4gKGNsb3NlczogIzE5NzI5NSkKKyAgICogRW5zdXJlIHRoYXQgL3Zhci9ydW4gYW5kIC92YXIvbGliL21pc2MgZXhpc3QuCisgICAqIFJlbW92ZSBzZWQgZGVwZW5kZW5jeSwgd2hpY2ggd2FzIGEgbWlzdGFrZS4KKyAgICogUmVtb3ZlIGV4dHJhbmVvdXMgImJ1aWxkIiBmaWxlLiAoY2xvc2VzOiAjMjI2OTk0KQorCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFN1biwgIDE2IEphbiAyMDA0IDE5OjM1OjQ5ICswMDAwCisKK2Ruc21hc3EgKDEuMTgtMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisgICAgICAgIAorICAgKiBGaXhlZCBtYW5wYWdlIHR5cG8gKGNsb3NlczogIzIyMDk2MSkKKyAgICogQWRkZWQgZGVwZW5kZW5jeSBmb3Igc2VkLiAoY2xvc2VzOiAjMjIyNDAxKQorICAgKiBDaGVjayBmb3IgY29tcGxldGUgcmVzb2x2Y29uZiBpbnN0YWxsYXRpb24gYmVmb3JlIAorICAgICBjYWxsaW5nIGl0LiAoY2xvc2VzOiAjMjIzNDQyKQorICAgKiBBZGRlZCBMaW5rcyBzZWN0aW9uIHRvIGRvYy5odG1sCisgICAgICAgIAorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBTYXQsIDI3IERlYyAyMDAzIDIwOjIxOjE1ICswMDAwCisgICAKK2Ruc21hc3EgKDEuMTgtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtIHdoaWNoIGRvZXMgcm91bmQtcm9iaW4uIChjbG9zZXM6ICMyMTU0NjApCisgICAqIFJlbW92ZWQgY29uZmxpY3RzIHdpdGggb3RoZXIgZG5zIHNlcnZlcnMgc2luY2UgaXQgaXMgbm93CisgICAgIHBvc3NpYmxlIHRvIGNvbnRyb2wgZXhhY3RseSB3aGVyZSBkbnNtYXNxIGxpc3RlbnMgb24gbXVsdGktaG9tZWQgCisgICAgIGhvc3RzLCBtYWtpbmcgY28tZXhpc3RhbmNlIHdpdGggYW5vdGhlciBuYW1lc2VydmVyIAorICAgICBhIHZpYWJsZSBwcm9wb3NpdGlvbi4gKGNsb3NlcyAjMTc2MTYzKQorICAgKiBOZXcgdXBzdHJlYW0gYWxsb3dzIF8gaW4gaG9zdG5hbWVzIGFuZCBjaGVjayBmb3IgaWxsZWdhbAorICAgICBuYW1lcyBpbiAvZXRjL2hvc3RzLiAoY2xvc2VzOiAjMjE4ODQyKQorCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIEZyaSwgMTcgT2N0IDIwMDMgMTY6MjM6MTQgKzAwMDAKKworZG5zbWFzcSAoMS4xNy0xKSB1bnN0YWJsZTsgdXJnZW5jeT1oaWdoCisKKyAgICogTmV3IHVwc3RyZWFtIChjbG9zZXM6ICMyMTI2ODApCisKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgV2VkLCAgOCBPY3QgMjAwMyAxNDozODoyOSArMDAwMAorCitkbnNtYXNxICgxLjE2LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworICAKKyAgICogTmV3IHVwc3RyZWFtLgorICAgKiBSZW5hbWVkIERlYmlhbiBSRUFETUUgdG8gdGhlIHN0YW5kYXJkIFJFQURNRS5EZWJpYW4uIChjbG9zZXM6ICMyMTE1NzcpCisgICAqIFVwZGF0ZWQgdGhlIGluc3RhbGxlZCAvZXRjL2Ruc21hc3EuY29uZiB0byByZWZsZWN0IG5ldyBvcHRpb25zLgorCQorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBUdWVzLCAxNiBTZXAgMjAwMyAyMzoxODo1OSArMDAwMAorCitkbnNtYXNxICgxLjE1LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworICAKKyAgICogTmV3IHVwc3RyZWFtLgorCQorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBUdWVzLCAxNiBTZXAgMjAwMyAyMTo0ODo0OSArMDAwMAorCitkbnNtYXNxICgxLjE0LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworICAKKyAgICogTmV3IHVwc3RyZWFtLgorICAgKiBVc2UgaW52b2tlLXJjLmQgaW4gcG9zdGluc3QgYW5kIHByZXJtIHNjcmlwdHMgd2hlbiBhdmFpbGFibGUuCisgICAqIFN0b3AgZG5zbWFzcSBsYXRlciAoYXQgcHJpb3JpdHkgODUpLiAoY2xvc2VzOiAjMjAwNjI1KQorICAgKiBVcGRhdGVkIC9ldGMvcmVzb2x2Y29uZi91cGRhdGUuZC9kbnNtYXNxLiAoY2xvc2VzOiAjMjAyNjA5KQorICAgKiBTdWdnZXN0IHJlc29sdmNvbmYuIChjbG9zZXM6ICMyMDgwOTMpCisJCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFR1ZXMsICAyIFNlcCAyMDAzIDE2OjQzOjI5ICswMDAwCisKK2Ruc21hc3EgKDEuMTMtNCkgdW5zdGFibGU7IHVyZ2VuY3k9aGlnaAorICAKKyAgICogSWdub3JlIGZhaWx1cmVzIGluIHN0b3BwaW5nIGV4aXN0aW5nIGRuc21hc3EgCisgICAgIHByb2Nlc3Nlcy4gKGNsb3NlczogIzIwNDEyNykgKGNsb3NlczogIzIwNDEyOSkKKyAgICogQWRkZWQgZG93bmxvYWQgc291cmNlIHRvIGNvcHlyaWdodC4gKGNsb3NlczogIzIwNjY0NykKKwkKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgVHVlcywgMiBTZXAgMjAwMyAxNToyODoyOCArMDAwMAorCitkbnNtYXNxICgxLjEzLTMpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworICAKKyAgICogTW92ZWQgL2V0Yy9yZXNvbHZjb25mL3VwZGF0ZS5kL2Ruc21hc3Egc2NyaXB0IGludG8gdGhpcyBwYWNrYWdlLgorICAgKiBEb24ndCBjYWxsIHJlc29sdmNvbmYgZnJvbSAvZXRjL2luaXQuZC9kbnNtYXNxIGlmIGRuc21hc3EgZmFpbHMKKyAgICAgdG8gc3RhcnQuIChQYXRjaCBmcm9tIFRob21hcyBIb29kLikKKworIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBNb24sICA3IEp1bCAyMDAzIDIwOjU1OjI5ICswMDAwCisKK2Ruc21hc3EgKDEuMTMtMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisgIAorICAgKiBBZGRlZCBzdXBwb3J0IGZvciB0aGUgcmVzb2x2Y29uZiBuYW1lc2VydmVyIGNvbmZpZ3VyYXRpb24gcGFja2FnZS4KKworIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBTdW4sIDIyIEp1biAyMDAzIDIwOjMwOjE5ICswMDAwCisKK2Ruc21hc3EgKDEuMTMtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogTmV3IHVwc3RyZWFtLgorICAgKiBBZGRlZCBuZXcgb3B0aW9ucyB0byB0aGUgZGVmYXVsdCBkbnNtYXNxLmNvbmYuCisgICAqIERlZmF1bHQgY29uZmlnIG5vdyByZWFkcyAvdmFyL2xpYi9kaGNwL2RoY3AubGVhc2VzIChjbG9zZXM6ICMxOTUxODUpCisgICAqIEFkZGVkIG9wdGlvbiB0byBkaXNhYmxlIG5lZ2F0aXZlIGNhY2hpbmcuIChjbG9zZXM6ICMxOTQyNzQpCisgICAqIEFkZGVkIERhdmlkIENvZSdzIHF1ZXJ5IHBvcnQgcGF0Y2guIChjbG9zZXM6ICMxOTY1NzgpCisKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgU2F0LCAzMSBNYXkgMjAwMyAxODoxMDoyOSArMDAwMAorCitkbnNtYXNxICgxLjEyLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIE5ldyB1cHN0cmVhbS4KKyAgICogQWRkZWQgZXhhbXBsZXMgb2YgImxvY2FsIiBhbmQgImFkZHJlc3MiIG9wdGlvbnMgdG8gZG5zbWFzcS5jb25mLgorICAgKiBSZW1vdmUgL3Vzci9kb2Mgc3ltbGluayBjb2RlLgorICAgKiBSZW1vdmUgcGVyaW9kIGZyb20gZW5kIG9mIGRlc2NyaXB0aW9uIGZpZWxkLgorICAKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgU2F0LCA4IE1hciAyMDAzIDEyOjE2OjA5ICswMDAwCisKK2Ruc21hc3EgKDEuMTEtMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgICogRml4ZWQgdGhpbmtvIGluIGV4YW1wbGUgZG5zbWFzcS5jb25mLiAoY2xvc2VzOiAjMTgwNDEwKQorICAKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgTW9uLCAyNCBGZWIgMjAwMyAyMDowNjoxOSArMDAwMAorCitkbnNtYXNxICgxLjExLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIE5ldyB1cHRyZWFtLgorICAKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgVHVlcywgMTIgSmFuIDIwMDMgMjI6MjU6MTcgLTAxMDAKKworZG5zbWFzcSAoMS4xMC0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAgKiBOZXcgdXB0cmVhbS4KKyAgICogRm9yY2Ugc2VydmljZSB0byBzdG9wIGluIHBvc3RpbnN0IGJlZm9yZSByZXN0YXJ0aW5nLiBJIGRvbid0CisgICAgIHVuZGVyc3RhbmQgdGhlIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2ggaXQgd291bGQgc3RpbGwgYmUgcnVubmluZyBhdAorICAgICB0aGlzIHBvaW50LCBidXQgdGhpcyBpcyB0aGUgY29ycmVjdCBmaXggYW55d2F5LiAoY2xvc2VzOiAjMTY5NzE4KSAKKyAgICogQWRkIC9ldGMvZG5zbWFzcS5jb25mIGFzIGEgY29uZmZpbGUgYW5kIGFkZCBhIGNvbW1lbnQgdG8gCisgICAgIC9ldGMvZGVmYXVsdC9kbnNtYXNxIGRlcHJlY2F0aW5nIGl0cyB1c2UgYW5kIHJlY29tbWVuZGluZyAKKyAgICAgL2V0Yy9kbnNtYXNxLmNvbmYgaW5zdGVhZCwgc2luY2UgdXBzdHJlYW0gbm93IHN1cHBvcnRzIHRoaXMuCisgIAorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBNb24sIDkgT2N0IDIwMDIgMTk6MDU6MzQgLTAxMDAKKworZG5zbWFzcSAoMS45LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICAqIE5ldyB1cHRyZWFtLgorICAKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgTW9uLCAyMyBTZXB0IDIwMDIgMjE6MzU6MDcgLTAxMDAKKworZG5zbWFzcSAoMS44LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworICAKKyAgICogTmV3IHVwc3RyZWFtLgorICAgIAorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBNb24sIDEyIEF1ZyAyMDAyIDIxOjU2OjE3IC0wMTAwCisKK2Ruc21hc3EgKDEuNy0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKyAgCisgICAqIE5ldyB1cHN0cmVhbSBpbmNsdWRpbmcgYmV0dGVyIGdyb3VwLWlkIG1hbmlwdWxhdGlvbi4gKGNsb3NlczogIzE1MjIxMikKKyAgICogQ29uZmxpY3Qgd2l0aCBiaW5kOSAoY2xvc2VzOiAjMTUxODEyKQorICAgKiBBZGRlZCBtb3JlIG9wdGlvbnMgdG8gc3RhcnR1cCBzY3JpcHQuIChjbG9zZXM6ICMxNDg1MzUpCisgICAgCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFN1biwgMTQgSnVseSAyMDAyIDIwOjIzOjE0IC0wMTAwCisKK2Ruc21hc3EgKDEuNi0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKyAgCisgICAqIE5ldyB1cHN0cmVhbS4KKyAgICogRml4ZWQgZG9jdW1lbnRhdGlvbiB0eXBvcy4gKGNsb3NlczogIzE0NDYzNykKKyAgICogRml4ZWQgZmFpbHVyZSB0byByZW1vdmUgcGFja2FnZSBpZiBkYWVtb24gbm90IHJ1bm5pbmcuIChjbG9zZXM6ICMxNDcwODMpCisgICAqIENoYW5nZWQgdXBsb2FkIHRvIHRhcmJhbGwtYW5kLWRpZmYuIChjbG9zZXM6ICMxNDQ2MzgpCisgIAorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBTdW4sIDE5IE1heSAyMDAyIDIyOjMwOjE3IC0wMTAwCisKK2Ruc21hc3EgKDEuNS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1tZWRpdW0KKyAgCisgICAqIE5ldyB1cHN0cmVhbSAoaW5jbHVkZXMgaG90bWFpbC5jb20gZml4KS4KKyAgICogRml4ZWQgREhDUCBsZWFzZSBmaWxlIGJ1Zy4gKGNsb3NlczogIzE0Mzc3OCkKKyAgICogRml4ZWQgZmFpbHVyZSBvZiAicmVsb2FkIiBjb21tYW5kIGluIHN0YXJ0dXAgc2NyaXB0IChjbG9zZXM6ICMxNDEwMjEpCisgICAqIEFsbG93IG1vcmUgdGhhbiBvbmUgaW50ZXJmYWNlIG5hbWUgaW4gdGhlIEROU01BU1FfSU5URVJGQUNFIHZhcmlhYmxlLgorICAKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgU3VuLCAxNCBBcHIgMjAwMiAxNjozOToxMyAtMDEwMAorICAKK2Ruc21hc3EgKDEuNC0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKyAgCisgICAgKiBGaXhlZCBzbmFmdSBpbiBzdGFydHVwIHNjcmlwdCAoY2xvc2VzOiAjMTM5NzYwKQorICAKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgU3VuLCAyNCBNYXIgMjAwMiAyMzowNjoxOCArMDAwMAorICAKK2Ruc21hc3EgKDEuNC0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKyAgCisgICogTmV3IHVwc3RyZWFtCisgIAorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBUaHVycywgNyBNYXIgMjAwMiAyMTowMjowNSArMDAwMAorICAKK2Ruc21hc3EgKDEuMy0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKyAgCisgICogTmV3IHVwc3RyZWFtCisKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgRnJpLCAxNSBGZWIgMjAwMiAyMDo0NTowMSArMDAwMAorICAKK2Ruc21hc3EgKDEuMi00KSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKyAgCisgICogVXBkYXRlZCBzdGFuZGFyZHMtdmVyc2lvbi4KKyAgKiBNb3JlIGFnZ3Jlc3NpdmUgc3RyaXAgb2YgYmluYXJpZXMuCisgICogQWRkZWQgZGVwZW5kczogbmV0YmFzZS4KKyAgKiBkaXN0cmlidXRpb24tPnVuc3RhYmxlIGZvciB1cGxvYWQuCisgICogVXBkYXRlZCByZWFkbWUuRGViaWFuIHNpbmNlIGNvbmZpZyBpbiAvZXRjL2RlZmF1bHQvZG5zbWFzcSBub3cuCisgICogVXBkYXRlZCByZWFkbWUuRGViaWFuIHRvIHJlZmxlY3QgZmFjdCB0aGF0IHRoaXMgcGFja2FnZSBpcyBvZmZpY2lhbCBub3chCisgCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIEZyaSwgMTUgRmViIDIwMDIgMjA6NDU6MDEgKzAwMDAKKyAgCitkbnNtYXNxICgxLjItMykgc3RhYmxlOyB1cmdlbmN5PWxvdworICAKKyAgKiBBZGRlZCBTdWdnZXN0czogYW5kIENvbmZsaWN0czogZmllbGRzIHRvIGNvbnRyb2wgZmlsZS4KKyAgCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFRodXJzLCAxNCBGZWIgMjAwMiAyMDozMzo0NyArMDAwMAorICAKK2Ruc21hc3EgKDEuMi0yKSBzdGFibGU7IHVyZ2VuY3k9bG93CisgCisgICogTWFueSBwYWNrYWdpbmcgZml4ZXMsIHRvIHBsZWFzZSBsaW50aWFuCisgICogQWRkZWQgZXh0ZW5kZWQgZGVzY3JpcHRpb24uCisgICogRml4ZWQgY29weXJpZ2h0IGZpbGUuCisgICogQ29tcHJlc3NlZCBldmVyeXRoaW5nIGluIC91c3Ivc2hhcmUvZG9jL2Ruc21hc3EuCisgICogQWRkZWQgY29kZSB0byByZW1vdmUgL3Vzci9kb2MvZG5zbWFzcSB0byBwcmVybSBzY3JpcHQuCisgICogTW92ZWQgY29uZmlndXJhdGlvbiBmcm9tIC9ldGMvaW5pdC5kL2Ruc21hc3EgdG8gL2V0Yy9kZWZhdWx0L2Ruc21hc3EKKyAgCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFNhdCwgMDIgRmViIDIwMDIgMTg6NTQ6MzcgKzAwMDAKKyAgCitkbnNtYXNxICgxLjItMSkgc3RhYmxlOyB1cmdlbmN5PWxvdworIAorICAqIE5ldyB1cHN0cmVhbQorICAqIEFkZGVkIG1vcmUgb3B0aW9ucyB0byBzdGFydHVwIHNjcmlwdAorICAKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiAgU2F0LCAyMCBEZWMgMjAwMSAyMToxNTowNyArMDAwMAorCitkbnNtYXNxICgxLjEtMikgc3RhYmxlOyB1cmdlbmN5PWxvdworIAorICAqIE5ldyB1cHN0cmVhbQorICAqIFN0cmlwIGJpbmFyeQorICAqIE1vdmVkIG1hbnBhZ2UgZnJvbSBzZWN0aW9uIDEgdG8gc2VjdGlvbiA4CisgIAorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+ICBTYXQsIDIxIE9jdCAyMDAxIDE3OjMyOjA0IC0wMTAwCisKK2Ruc21hc3EgKDEuMC0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKyAKKyAgKiBOZXcgdXBzdHJlYW0KKyAgCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4gIFNhdCwgMTAgT2N0IDIwMDEgMTU6NTI6MDYgLTAxMDAKKyAgCitkbnNtYXNxICgwLjk5Ni0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKyAgCisgICogTmV3IHVwc3RyZWFtCisgIAorIC0tIFNpbW9uIEtlbGxleSA8c2ltb25AdGhrZWxsZXlzLm9yZy51az4gIEZyaSwgMjYgT2N0IDIwMDEgMTA6MzI6MDYgLTAxMDAKKworZG5zbWFzcSAoMC45OTUtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisgIAorICAqIE5ldyB1cHN0cmVhbQorICAKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoa2VsbGV5cy5vcmcudWs+ICBUdWUsIDA5IE9jdCAyMDAxIDE2OjM5OjA3IC0wMTAwCisKK2Ruc21hc3EgKDAuOTk0LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworICAKKyAgKiBOZXcgdXBzdHJlYW0KKyAgCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGtlbGxleXMub3JnLnVrPiAgU2F0LCAwNyBPY3QgMjAwMSAxNTo0NTowNCAtMDEwMAorCitkbnNtYXNxICgwLjk5Mi0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbQorCisgLS0gU2ltb24gS2VsbGV5IDxzaW1vbkB0aGtlbGxleXMub3JnLnVrPiAgRnJpLCAzMSBBdWcgMjAwMSAxNjoxNzowMCAtMDEwMAorCitkbnNtYXNxICgwLjk4LTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtCisKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoa2VsbGV5cy5vcmcudWs+ICBXZWQsIDExIEp1bCAyMDAxIDExOjMxOjAwIC0wMTAwCisKK2Ruc21hc3EgKDAuOTYtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBGaXhlZCB0aGlua28gaW4gY2FjaGUgY29kZS4uCisKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoa2VsbGV5cy5vcmcudWs+ICBTYXQsIDA3IEp1bCAyMDAxIDE4OjUyOjAwIC0wMTAwCisKK2Ruc21hc3EgKDAuOTUtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBJbml0aWFsIFJlbGVhc2UuCisKKyAtLSBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoa2VsbGV5cy5vcmcudWs+ICBTYXQsIDI5IEF1ZyAxOTk4IDIwOjI3OjI3IC0wNDAwCisKKworICAKKyAgCisgIAorICAKKyAgCisgIAorICAKKyAgCmRpZmYgLS1naXQgYS9kZWJpYW4vY29uZmZpbGVzIGIvZGViaWFuL2NvbmZmaWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2U5ZDY2Ci0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2NvbmZmaWxlcwpAQCAtMCwwICsxLDUgQEAKKy9ldGMvaW5pdC5kL2Ruc21hc3EKKy9ldGMvZGVmYXVsdC9kbnNtYXNxCisvZXRjL2Ruc21hc3EuY29uZgorL2V0Yy9yZXNvbHZjb25mL3VwZGF0ZS5kL2Ruc21hc3EKKy9ldGMvaW5zc2Vydi5jb25mLmQvZG5zbWFzcQpkaWZmIC0tZ2l0IGEvZGViaWFuL2NvbnRyb2wgYi9kZWJpYW4vY29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWQyNTlkCi0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2NvbnRyb2wKQEAgLTAsMCArMSw0NiBAQAorU291cmNlOiBkbnNtYXNxCitTZWN0aW9uOiBuZXQKK1ByaW9yaXR5OiBvcHRpb25hbAorQnVpbGQtZGVwZW5kczogZ2V0dGV4dCwgbGlibmV0ZmlsdGVyLWNvbm50cmFjay1kZXYgW2xpbnV4LWFueV0sCisgICAgICAgICAgICAgICBsaWJpZG4xMS1kZXYsIGxpYmRidXMtMS1kZXYgKD49MC42MSksIGxpYmdtcC1kZXYsIAorICAgICAgICAgICAgICAgbmV0dGxlLWRldiAoPj0yLjQtMyksIGxpYmJzZC1kZXYgWyFsaW51eC1hbnldCitNYWludGFpbmVyOiBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPgorU3RhbmRhcmRzLVZlcnNpb246IDMuOS41CisKK1BhY2thZ2U6IGRuc21hc3EKK0FyY2hpdGVjdHVyZTogYWxsCitEZXBlbmRzOiBuZXRiYXNlLCBkbnNtYXNxLWJhc2UoPj0gJHtiaW5hcnk6VmVyc2lvbn0pLAorICAgICAgICAgaW5pdC1zeXN0ZW0taGVscGVycyAoPj0gMS4xOH4pCitTdWdnZXN0czogcmVzb2x2Y29uZgorQ29uZmxpY3RzOiByZXNvbHZjb25mICg8PDEuMTUpCitEZXNjcmlwdGlvbjogU21hbGwgY2FjaGluZyBETlMgcHJveHkgYW5kIERIQ1AvVEZUUCBzZXJ2ZXIKKyBEbnNtYXNxIGlzIGEgbGlnaHR3ZWlnaHQsIGVhc3kgdG8gY29uZmlndXJlLCBETlMgZm9yd2FyZGVyIGFuZCBESENQCisgc2VydmVyLiBJdCBpcyBkZXNpZ25lZCB0byBwcm92aWRlIEROUyBhbmQgb3B0aW9uYWxseSwgREhDUCwgdG8gYSAKKyBzbWFsbCBuZXR3b3JrLiBJdCBjYW4gc2VydmUgdGhlIG5hbWVzIG9mIGxvY2FsIG1hY2hpbmVzIHdoaWNoIGFyZSAKKyBub3QgaW4gdGhlIGdsb2JhbCBETlMuIFRoZSBESENQIHNlcnZlciBpbnRlZ3JhdGVzIHdpdGggdGhlIEROUyAKKyBzZXJ2ZXIgYW5kIGFsbG93cyBtYWNoaW5lcyB3aXRoIERIQ1AtYWxsb2NhdGVkIGFkZHJlc3NlcworIHRvIGFwcGVhciBpbiB0aGUgRE5TIHdpdGggbmFtZXMgY29uZmlndXJlZCBlaXRoZXIgaW4gZWFjaCBob3N0IG9yCisgaW4gYSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gZmlsZS4gRG5zbWFzcSBzdXBwb3J0cyBzdGF0aWMgYW5kIGR5bmFtaWMgCisgREhDUCBsZWFzZXMgYW5kIEJPT1RQL1RGVFAgZm9yIG5ldHdvcmsgYm9vdGluZyBvZiBkaXNrbGVzcyBtYWNoaW5lcy4KKworUGFja2FnZTogZG5zbWFzcS1iYXNlCitBcmNoaXRlY3R1cmU6IGFueQorRGVwZW5kczogYWRkdXNlciwgJHtzaGxpYnM6RGVwZW5kc30KK0JyZWFrczogZG5zbWFzcSAoPDwgMi42My0xfikKK1JlcGxhY2VzOiBkbnNtYXNxICg8PCAyLjYzLTF+KQorUmVjb21tZW5kczogZG5zLXJvb3QtZGF0YQorRGVzY3JpcHRpb246IFNtYWxsIGNhY2hpbmcgRE5TIHByb3h5IGFuZCBESENQL1RGVFAgc2VydmVyCisgVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHRoZSBkbnNtYXNxIGV4ZWN1dGFibGUgYW5kIGRvY3VtZW50YXRpb24sIGJ1dAorIG5vdCB0aGUgaW5mcmFzdHJ1Y3R1cmUgcmVxdWlyZWQgdG8gcnVuIGl0IGFzIGEgc3lzdGVtIGRhZW1vbi4gRm9yCisgdGhhdCwgaW5zdGFsbCB0aGUgZG5zbWFzcSBwYWNrYWdlLgorCitQYWNrYWdlOiBkbnNtYXNxLXV0aWxzCitBcmNoaXRlY3R1cmU6IGxpbnV4LWFueQorRGVwZW5kczogJHtzaGxpYnM6RGVwZW5kc30KK0NvbmZsaWN0czogZG5zbWFzcSAoPDwyLjQwKQorRGVzY3JpcHRpb246IFV0aWxpdGllcyBmb3IgbWFuaXB1bGF0aW5nIERIQ1AgbGVhc2VzCisgU21hbGwgdXRpbGl0aWVzIHRvIHF1ZXJ5IGEgREhDUCBzZXJ2ZXIncyBsZWFzZSBkYXRhYmFzZSBhbmQKKyByZW1vdmUgbGVhc2VzIGZyb20gaXQuIFRoZXNlIHByb2dyYW1zIGFyZSBkaXN0cmlidXRlZCB3aXRoIGRuc21hc3EKKyBhbmQgbWF5IG5vdCB3b3JrIGNvcnJlY3RseSB3aXRoIG90aGVyIERIQ1Agc2VydmVycy4KKworIApkaWZmIC0tZ2l0IGEvZGViaWFuL2NvcHlyaWdodCBiL2RlYmlhbi9jb3B5cmlnaHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM4MmViOAotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9jb3B5cmlnaHQKQEAgLTAsMCArMSwyMSBAQAorZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMyBTaW1vbiBLZWxsZXkKKworSXQgd2FzIGRvd25sb2FkZWQgZnJvbTogaHR0cDovL3d3dy50aGVrZWxsZXlzLm9yZy51ay9kbnNtYXNxLworCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK09uIERlYmlhbiBHTlUvTGludXggc3lzdGVtcywgdGhlIHRleHQgb2YgdGhlIEdOVSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGlzIAorYXZhaWxhYmxlIGluIHRoZSBmaWxlIC91c3Ivc2hhcmUvY29tbW9uLWxpY2Vuc2VzL0dQTC0yIG9yIAorL3Vzci9zaGFyZS9jb21tb24tbGljZW5zZXMvR1BMLTMKKworVGhlIERlYmlhbiBwYWNrYWdlIG9mIGRuc21hc3Egd2FzIGNyZWF0ZWQgYnkgU2ltb24gS2VsbGV5IHdpdGggYXNzaXN0YW5jZSAKK2Zyb20gTGFycyBCYWhuZXIuCisKZGlmZiAtLWdpdCBhL2RlYmlhbi9kYnVzLmNvbmYgYi9kZWJpYW4vZGJ1cy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYzRlYWYKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vZGJ1cy5jb25mCkBAIC0wLDAgKzEsMTggQEAKKzwhRE9DVFlQRSBidXNjb25maWcgUFVCTElDCisgIi0vL2ZyZWVkZXNrdG9wLy9EVEQgRC1CVVMgQnVzIENvbmZpZ3VyYXRpb24gMS4wLy9FTiIKKyAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc3RhbmRhcmRzL2RidXMvMS4wL2J1c2NvbmZpZy5kdGQiPgorPGJ1c2NvbmZpZz4KKwk8cG9saWN5IHVzZXI9InJvb3QiPgorCQk8YWxsb3cgb3duPSJ1ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxIi8+CisJCTxhbGxvdyBzZW5kX2Rlc3RpbmF0aW9uPSJ1ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxIi8+CisJPC9wb2xpY3k+CisgICAgICAgIDxwb2xpY3kgdXNlcj0iZG5zbWFzcSI+CisgICAgICAgICAgICAgICAgPGFsbG93IG93bj0idWsub3JnLnRoZWtlbGxleXMuZG5zbWFzcSIvPgorICAgICAgICAgICAgICAgIDxhbGxvdyBzZW5kX2Rlc3RpbmF0aW9uPSJ1ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxIi8+CisgICAgICAgIDwvcG9saWN5PgorCTxwb2xpY3kgY29udGV4dD0iZGVmYXVsdCI+CisgICAgICAgICAgICAgICAgPGRlbnkgb3duPSJ1ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxIi8+CisgICAgICAgICAgICAgICAgPGRlbnkgc2VuZF9kZXN0aW5hdGlvbj0idWsub3JnLnRoZWtlbGxleXMuZG5zbWFzcSIvPgorICAgICAgICA8L3BvbGljeT4KKzwvYnVzY29uZmlnPgorCmRpZmYgLS1naXQgYS9kZWJpYW4vZGVmYXVsdCBiL2RlYmlhbi9kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNDNiOTIKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vZGVmYXVsdApAQCAtMCwwICsxLDMzIEBACisjIFRoaXMgZmlsZSBoYXMgZml2ZSBmdW5jdGlvbnM6IAorIyAxKSB0byBjb21wbGV0ZWx5IGRpc2FibGUgc3RhcnRpbmcgZG5zbWFzcSwgCisjIDIpIHRvIHNldCBET01BSU5fU1VGRklYIGJ5IHJ1bm5pbmcgYGRuc2RvbWFpbm5hbWVgIAorIyAzKSB0byBzZWxlY3QgYW4gYWx0ZXJuYXRpdmUgY29uZmlnIGZpbGUKKyMgICAgYnkgc2V0dGluZyBETlNNQVNRX09QVFMgdG8gLS1jb25mLWZpbGU9PGZpbGU+CisjIDQpIHRvIHRlbGwgZG5zbWFzcSB0byByZWFkIHRoZSBmaWxlcyBpbiAvZXRjL2Ruc21hc3EuZCBmb3IKKyMgICAgbW9yZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4KKyMgNSkgdG8gc3RvcCB0aGUgcmVzb2x2Y29uZiBwYWNrYWdlIGZyb20gY29udHJvbGxpbmcgZG5zbWFzcSdzCisjICAgIGlkZWEgb2Ygd2hpY2ggdXBzdHJlYW0gbmFtZXNlcnZlcnMgdG8gdXNlLgorIyBGb3IgdXBncmFkZXJzIGZyb20gdmVyeSBvbGQgdmVyc2lvbnMsIGFsbCB0aGUgc2hlbGwgdmFyaWFibGVzIHNldCAKKyMgaGVyZSBpbiBwcmV2aW91cyB2ZXJzaW9ucyBhcmUgc3RpbGwgaG9ub3JlZCBieSB0aGUgaW5pdCBzY3JpcHQKKyMgc28gaWYgeW91IGp1c3Qga2VlcCB5b3VyIG9sZCB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBub3RoaW5nIHdpbGwgYnJlYWsuCisKKyNET01BSU5fU1VGRklYPWBkbnNkb21haW5uYW1lYAorI0ROU01BU1FfT1BUUz0iLS1jb25mLWZpbGU9L2V0Yy9kbnNtYXNxLmFsdCIKKworIyBXaGV0aGVyIG9yIG5vdCB0byBydW4gdGhlIGRuc21hc3EgZGFlbW9uOyBzZXQgdG8gMCB0byBkaXNhYmxlLgorRU5BQkxFRD0xCisKKyMgQnkgZGVmYXVsdCBzZWFyY2ggdGhpcyBkcm9wIGRpcmVjdG9yeSBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zLgorIyBMaWJ2aXJ0IGxlYXZlcyBhIGZpbGUgaGVyZSB0byBtYWtlIHRoZSBzeXN0ZW0gZG5zbWFzcSBwbGF5IG5pY2UuCisjIENvbW1lbnQgb3V0IHRoaXMgbGluZSBpZiB5b3UgZG9uJ3Qgd2FudCB0aGlzLiBUaGUgZHBrZy0qIGFyZSBmaWxlCisjIGVuZGluZ3Mgd2hpY2ggY2F1c2UgZG5zbWFzcSB0byBza2lwIHRoYXQgZmlsZS4gVGhpcyBhdm9pZHMgcHVsbGluZworIyBpbiBiYWNrdXBzIG1hZGUgYnkgZHBrZy4KK0NPTkZJR19ESVI9L2V0Yy9kbnNtYXNxLmQsLmRwa2ctZGlzdCwuZHBrZy1vbGQsLmRwa2ctbmV3CisKKyMgSWYgdGhlIHJlc29sdmNvbmYgcGFja2FnZSBpcyBpbnN0YWxsZWQsIGRuc21hc3Egd2lsbCB1c2UgaXRzIG91dHB1dCAKKyMgcmF0aGVyIHRoYW4gdGhlIGNvbnRlbnRzIG9mIC9ldGMvcmVzb2x2LmNvbmYgdG8gZmluZCB1cHN0cmVhbSAKKyMgbmFtZXNlcnZlcnMuIFVuY29tbWVudGluZyB0aGlzIGxpbmUgaW5oaWJpdHMgdGhpcyBiZWhhdmlvdXIuCisjIE5vdGUgdGhhdCBpbmNsdWRpbmcgYSAicmVzb2x2LWZpbGU9PGZpbGVuYW1lPiIgbGluZSBpbiAKKyMgL2V0Yy9kbnNtYXNxLmNvbmYgaXMgbm90IGVub3VnaCB0byBvdmVycmlkZSByZXNvbHZjb25mIGlmIGl0IGlzCisjIGluc3RhbGxlZDogdGhlIGxpbmUgYmVsb3cgbXVzdCBiZSB1bmNvbW1lbnRlZC4KKyNJR05PUkVfUkVTT0xWQ09ORj15ZXMKZGlmZiAtLWdpdCBhL2RlYmlhbi9kbnNtYXNxLWJhc2UuY29uZmZpbGVzIGIvZGViaWFuL2Ruc21hc3EtYmFzZS5jb25mZmlsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYxOTE5NAotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9kbnNtYXNxLWJhc2UuY29uZmZpbGVzCkBAIC0wLDAgKzEgQEAKKy9ldGMvZGJ1cy0xL3N5c3RlbS5kL2Ruc21hc3EuY29uZgpkaWZmIC0tZ2l0IGEvZGViaWFuL2Ruc21hc3EtYmFzZS5wb3N0aW5zdCBiL2RlYmlhbi9kbnNtYXNxLWJhc2UucG9zdGluc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYwMjVjYQotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9kbnNtYXNxLWJhc2UucG9zdGluc3QKQEAgLTAsMCArMSwyNCBAQAorIyEvYmluL3NoCitzZXQgLWUKKworIyBDcmVhdGUgdGhlIGRuc21hc3EgdXNlciBpbiBkbnNtYXNxLWJhc2UsIHNvIHRoYXQgRGJ1cyBkb2Vzbid0IGNvbXBsYWluLgorICAgICAgCisjIGNyZWF0ZSBhIHVzZXIgdG8gcnVuIGFzIChjb2RlIHN0b2xlbiBmcm9tIGRvdmVjb3QtY29tbW9uKQoraWYgWyAiJDEiID0gImNvbmZpZ3VyZSIgXTsgdGhlbgorICBpZiBbIC16ICJgaWQgLXUgZG5zbWFzcSAyPiAvZGV2L251bGxgIiBdOyB0aGVuCisgICAgYWRkdXNlciAtLXN5c3RlbSAgLS1ob21lIC92YXIvbGliL21pc2MgLS1nZWNvcyAiZG5zbWFzcSIgXAorICAgICAgICAgICAgLS1uby1jcmVhdGUtaG9tZSAtLWRpc2FibGVkLXBhc3N3b3JkIFwKKyAgICAgICAgICAgIC0tcXVpZXQgZG5zbWFzcSB8fCB0cnVlCisgIGZpCisKKyAgIyBNYWtlIHRoZSBkaXJlY3Rvcnkgd2hlcmUgd2Uga2VlcCB0aGUgcGlkIGZpbGUgLSB0aGlzCisgICMgaGFzIHRvIGJlIG93bmVkIGJ5ICJkbnNtYXNxIiBzbyB0aGF0IHRoZSBmaWxlIGNhbiBiZSB1bmxpbmtlZC4KKyAgIyBUaGlzIGlzIG9ubHkgYWN0dWFsbHkgdXNlZCBieSB0aGUgZG5zbWFzcSBiaW5hcnkgcGFja2FnZSwgbm90CisgICMgZG5zbWFzcS1iYXNlLCBidXQgaXQncyBtdWNoIGVhc2llciB0byBjcmVhdGUgaXQgaGVyZSBzbyB0aGF0CisgICMgd2UgZG9uJ3QgaGF2ZSBzeW5jaHJvbmlzYXRpb24gaXNzdWVzIHdpdGggdGhlIGNyZWF0aW9uIG9mIHRoZQorICAjIGRuc21hc3EgdXNlci4gCisgIGlmIFsgISAtZCAvdmFyL3J1bi9kbnNtYXNxIF07IHRoZW4KKyAgICBta2RpciAvdmFyL3J1bi9kbnNtYXNxCisgICAgY2hvd24gZG5zbWFzcTpub2dyb3VwIC92YXIvcnVuL2Ruc21hc3EKKyAgZmkKK2ZpCmRpZmYgLS1naXQgYS9kZWJpYW4vZG5zbWFzcS1iYXNlLnBvc3RybSBiL2RlYmlhbi9kbnNtYXNxLWJhc2UucG9zdHJtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MGE5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vZG5zbWFzcS1iYXNlLnBvc3RybQpAQCAtMCwwICsxLDExIEBACisjIS9iaW4vc2gKK3NldCAtZQorCitpZiBbIHB1cmdlID0gIiQxIiBdOyB0aGVuCisgICBpZiBbIC14ICIkKGNvbW1hbmQgLXYgZGVsdXNlcikiIF07IHRoZW4KKyAgICAgZGVsdXNlciAtLXF1aWV0IC0tc3lzdGVtIGRuc21hc3EgPiAvZGV2L251bGwgfHwgdHJ1ZQorICBlbHNlCisgICAgIGVjaG8gPiYyICJub3QgcmVtb3ZpbmcgZG5zbWFzcSBzeXN0ZW0gYWNjb3VudCBiZWNhdXNlIGRlbHVzZXIgY29tbWFuZCB3YXMgbm90IGZvdW5kIgorICBmaQorICBybSAtcmYgL3Zhci9ydW4vZG5zbWFzcQorZmkKZGlmZiAtLWdpdCBhL2RlYmlhbi9pbml0IGIvZGViaWFuL2luaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkZjkwOQotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9pbml0CkBAIC0wLDAgKzEsMzE3IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgIGRuc21hc3EKKyMgUmVxdWlyZWQtU3RhcnQ6ICRuZXR3b3JrICRyZW1vdGVfZnMgJHN5c2xvZworIyBSZXF1aXJlZC1TdG9wOiAgJG5ldHdvcmsgJHJlbW90ZV9mcyAkc3lzbG9nCisjIERlZmF1bHQtU3RhcnQ6ICAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAwIDEgNgorIyBEZXNjcmlwdGlvbjogICAgREhDUCBhbmQgRE5TIHNlcnZlcgorIyMjIEVORCBJTklUIElORk8KKworc2V0ICtlICAgIyBEb24ndCBleGl0IG9uIGVycm9yIHN0YXR1cworCitQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2Jpbjovc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorREFFTU9OPS91c3Ivc2Jpbi9kbnNtYXNxCitOQU1FPWRuc21hc3EKK0RFU0M9IkROUyBmb3J3YXJkZXIgYW5kIERIQ1Agc2VydmVyIgorCisjIE1vc3QgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIC9ldGMvZGVmYXVsdC9kbnNtYXNxIGFyZSBkZXByZWNhdGVkCisjIGJ1dCBzdGlsbCBob25vdXJlZC4KK0VOQUJMRUQ9MQoraWYgWyAtciAvZXRjL2RlZmF1bHQvJE5BTUUgXTsgdGhlbgorCS4gL2V0Yy9kZWZhdWx0LyROQU1FCitmaQorCisjIEdldCB0aGUgc3lzdGVtIGxvY2FsZSwgc28gdGhhdCBtZXNzYWdlcyBhcmUgaW4gdGhlIGNvcnJlY3QgbGFuZ3VhZ2UsIGFuZCB0aGUgCisjIGNoYXJzZXQgZm9yIElETiBpcyBjb3JyZWN0CitpZiBbIC1yIC9ldGMvZGVmYXVsdC9sb2NhbGUgXTsgdGhlbgorICAgICAgICAuIC9ldGMvZGVmYXVsdC9sb2NhbGUKKyAgICAgICAgZXhwb3J0IExBTkcKK2ZpCisKKyMgL2V0Yy9kbnNtYXNxLmQvUkVBRE1FIGlzIGEgbm9uLWNvbmZmaWxlIGluc3RhbGxlZCBieSB0aGUgZG5zbWFzcSBwYWNrYWdlLgorIyBTaG91bGQgdGhlIGRuc21hc3EgcGFja2FnZSBiZSByZW1vdmVkLCB0aGUgZm9sbG93aW5nIHRlc3QgZW5zdXJlcyB0aGF0CisjIHRoZSBkYWVtb24gaXMgbm8gbG9uZ2VyIHN0YXJ0ZWQsIGV2ZW4gaWYgdGhlIGRuc21hc3EtYmFzZSBwYWNrYWdlIGlzCisjIHN0aWxsIGluIHBsYWNlLgordGVzdCAtZSAvZXRjL2Ruc21hc3EuZC9SRUFETUUgfHwgZXhpdCAwCisKK3Rlc3QgLXggJERBRU1PTiB8fCBleGl0IDAKKworIyBQcm92aWRlIHNrZWxldG9uIExTQiBsb2cgZnVuY3Rpb25zIGZvciBiYWNrcG9ydHMgd2hpY2ggZG9uJ3QgaGF2ZSBMU0IgZnVuY3Rpb25zLgoraWYgWyAtZiAvbGliL2xzYi9pbml0LWZ1bmN0aW9ucyBdOyB0aGVuCisgICAgICAgICAuIC9saWIvbHNiL2luaXQtZnVuY3Rpb25zCitlbHNlCisgICAgICAgICBsb2dfd2FybmluZ19tc2cgKCkgeworICAgICAgICAgICAgZWNobyAiJHtAfS4iCisgICAgICAgICB9CisKKyAgICAgICAgIGxvZ19zdWNjZXNzX21zZyAoKSB7CisgICAgICAgICAgICBlY2hvICIke0B9LiIKKyAgICAgICAgIH0KKworICAgICAgICAgbG9nX2RhZW1vbl9tc2cgKCkgeworICAgICAgICAgICAgZWNobyAtbiAiJHsxfTogJDIiCisgICAgICAgICB9CisKKwkgbG9nX2VuZF9tc2cgKCkgeworICAgICAgICAgICAgaWYgWyAkMSAtZXEgMCBdOyB0aGVuCisgICAgICAgICAgICAgIGVjaG8gIi4iCisgICAgICAgICAgICBlbGlmIFsgJDEgLWVxIDI1NSBdOyB0aGVuCisgICAgICAgICAgICAgIC9iaW4vZWNobyAtZSAiICh3YXJuaW5nKS4iCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIC9iaW4vZWNobyAtZSAiIGZhaWxlZCEiCisgICAgICAgICAgICBmaQorICAgICAgICAgfQorZmkKKworIyBSRVNPTFZfQ09ORjoKKyMgSWYgdGhlIHJlc29sdmNvbmYgcGFja2FnZSBpcyBpbnN0YWxsZWQgdGhlbiB1c2UgdGhlIHJlc29sdiBjb25mIGZpbGUKKyMgdGhhdCBpdCBwcm92aWRlcyBhcyB0aGUgZGVmYXVsdC4gIE90aGVyd2lzZSB1c2UgL2V0Yy9yZXNvbHYuY29uZiBhcworIyB0aGUgZGVmYXVsdC4KKyMKKyMgSWYgSUdOT1JFX1JFU09MVkNPTkYgaXMgc2V0IGluIC9ldGMvZGVmYXVsdC9kbnNtYXNxIG9yIGFuIGV4cGxpY2l0CisjIGZpbGVuYW1lIGlzIHNldCB0aGVyZSB0aGVuIHRoaXMgaW5oaWJpdHMgdGhlIHVzZSBvZiB0aGUgcmVzb2x2Y29uZi1wcm92aWRlZAorIyBpbmZvcm1hdGlvbi4KKyMKKyMgTm90ZSB0aGF0IGlmIHRoZSByZXNvbHZjb25mIHBhY2thZ2UgaXMgaW5zdGFsbGVkIGl0IGlzIG5vdCBwb3NzaWJsZSB0byAKKyMgb3ZlcnJpZGUgaXQganVzdCBieSBjb25maWd1cmF0aW9uIGluIC9ldGMvZG5zbWFzcS5jb25mLCBpdCBpcyBuZWNlc3NhcnkKKyMgdG8gc2V0IElHTk9SRV9SRVNPTFZDT05GPXllcyBpbiAvZXRjL2RlZmF1bHQvZG5zbWFzcS4KKworaWYgWyAhICIkUkVTT0xWX0NPTkYiIF0gJiYKKyAgIFsgIiRJR05PUkVfUkVTT0xWQ09ORiIgIT0gInllcyIgXSAmJgorICAgWyAteCAvc2Jpbi9yZXNvbHZjb25mIF0KK3RoZW4KKwlSRVNPTFZfQ09ORj0vdmFyL3J1bi9kbnNtYXNxL3Jlc29sdi5jb25mCitmaQorCitmb3IgSU5URVJGQUNFIGluICRETlNNQVNRX0lOVEVSRkFDRTsgZG8KKwlETlNNQVNRX0lOVEVSRkFDRVM9IiRETlNNQVNRX0lOVEVSRkFDRVMgLWkgJElOVEVSRkFDRSIKK2RvbmUKKworZm9yIElOVEVSRkFDRSBpbiAkRE5TTUFTUV9FWENFUFQ7IGRvCisJRE5TTUFTUV9JTlRFUkZBQ0VTPSIkRE5TTUFTUV9JTlRFUkZBQ0VTIC1JICRJTlRFUkZBQ0UiCitkb25lCisKK2lmIFsgISAiJEROU01BU1FfVVNFUiIgXTsgdGhlbgorICAgRE5TTUFTUV9VU0VSPSJkbnNtYXNxIgorZmkKKworIyBUaGlzIHRlbGxzIGRuc21hc3EgdG8gaWdub3JlIEROUyByZXF1ZXN0cyB0aGF0IGRvbid0IGNvbWUgZnJvbSBhIGxvY2FsIG5ldHdvcmsuCisjIEl0J3MgYXV0b21hdGljYWxseSBpZ25vcmVkIGlmICAtLWludGVyZmFjZSAtLWV4Y2VwdC1pbnRlcmZhY2UsIC0tbGlzdGVuLWFkZHJlc3MgCisjIG9yIC0tYXV0aC1zZXJ2ZXIgZXhpc3QgaW4gdGhlIGNvbmZpZ3VyYXRpb24sIHNvIGZvciBtb3N0IGluc3RhbGxhdGlvbnMsIGl0IHdpbGwKKyMgaGF2ZSBubyBlZmZlY3QsIGJ1dCBmb3Igb3RoZXJ3aXNlLXVuY29uZmlndXJlZCBpbnN0YWxsYXRpb25zLCBpdCBzdG9wcyBkbnNtYXNxCisjIGZyb20gYmVpbmcgdnVsbmVyYWJsZSB0byBETlMtcmVmbGVjdGlvbiBhdHRhY2tzLgorCitETlNNQVNRX09QVFM9IiRETlNNQVNRX09QVFMgLS1sb2NhbC1zZXJ2aWNlIgorCisjIElmIHRoZSBkbnMtcm9vdC1kYXRhIHBhY2thZ2UgaXMgaW5zdGFsbGVkLCB0aGVuIHRoZSB0cnVzdCBhbmNob3JzIHdpbGwgYmUgCisjIGF2YWlsYWJsZSBpbiAkUk9PVF9EUywgaW4gQklORCB6b25lLWZpbGUgZm9ybWF0LiBSZWZvcm1hdCBhcyBkbnNtYXNxCisjIC0tdHJ1c3QtYW5jaG9yIG9wdGlvbnMuCisKK1JPT1RfRFM9Ii91c3Ivc2hhcmUvZG5zL3Jvb3QuZHMiCisKK2lmIFsgLWYgJFJPT1RfRFMgXTsgdGhlbgorICAgRE5TTUFTUV9PUFRTPSIkRE5TTUFTUV9PUFRTIGBzZWQgLWUgcy8iLiBJTiBEUyAiLy0tdHJ1c3QtYW5jaG9yPS4sLyAtZSBzLyIgIi8sL2cgJFJPT1RfRFMgfCB0ciAnXG4nICcgJ2AiIAorZmkKKworc3RhcnQoKQoreworICAgICAgICAjIFJldHVybgorCSMgICAwIGlmIGRhZW1vbiBoYXMgYmVlbiBzdGFydGVkCisJIyAgIDEgaWYgZGFlbW9uIHdhcyBhbHJlYWR5IHJ1bm5pbmcKKwkjICAgMiBpZiBkYWVtb24gY291bGQgbm90IGJlIHN0YXJ0ZWQKKworICAgICAgICAjIC92YXIvcnVuIG1heSBiZSB2b2xhdGlsZSwgc28gd2UgbmVlZCB0byBlbnN1cmUgdGhhdAorICAgICAgICAjIC92YXIvcnVuL2Ruc21hc3EgZXhpc3RzIGhlcmUgYXMgd2VsbCBhcyBpbiBwb3N0aW5zdAorICAgICAgICBpZiBbICEgLWQgL3Zhci9ydW4vZG5zbWFzcSBdOyB0aGVuCisgICAgICAgICAgIG1rZGlyIC92YXIvcnVuL2Ruc21hc3EgfHwgcmV0dXJuIDIKKyAgICAgICAgICAgY2hvd24gZG5zbWFzcTpub2dyb3VwIC92YXIvcnVuL2Ruc21hc3EgfHwgcmV0dXJuIDIKKyAgICAgICAgZmkKKworCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLXBpZGZpbGUgL3Zhci9ydW4vZG5zbWFzcS8kTkFNRS5waWQgLS1leGVjICREQUVNT04gLS10ZXN0ID4gL2Rldi9udWxsIHx8IHJldHVybiAxCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tcGlkZmlsZSAvdmFyL3J1bi9kbnNtYXNxLyROQU1FLnBpZCAtLWV4ZWMgJERBRU1PTiAtLSBcCisJCS14IC92YXIvcnVuL2Ruc21hc3EvJE5BTUUucGlkIFwKKwkgICAgICAgICR7TUFJTEhPU1ROQU1FOisgLW0gJE1BSUxIT1NUTkFNRX0gXAorCQkke01BSUxUQVJHRVQ6KyAtdCAkTUFJTFRBUkdFVH0gXAorCQkke0ROU01BU1FfVVNFUjorIC11ICRETlNNQVNRX1VTRVJ9IFwKKwkJJHtETlNNQVNRX0lOVEVSRkFDRVM6KyAkRE5TTUFTUV9JTlRFUkZBQ0VTfSBcCisJCSR7REhDUF9MRUFTRTorIC1sICRESENQX0xFQVNFfSBcCisJCSR7RE9NQUlOX1NVRkZJWDorIC1zICRET01BSU5fU1VGRklYfSBcCisJCSR7UkVTT0xWX0NPTkY6KyAtciAkUkVTT0xWX0NPTkZ9IFwKKwkJJHtDQUNIRVNJWkU6KyAtYyAkQ0FDSEVTSVpFfSBcCisJICAgICAgICAke0NPTkZJR19ESVI6KyAtNyAkQ09ORklHX0RJUn0gXAorCQkke0ROU01BU1FfT1BUUzorICRETlNNQVNRX09QVFN9IFwKKwkJfHwgcmV0dXJuIDIKK30KKworc3RhcnRfcmVzb2x2Y29uZigpCit7CisjIElmIGludGVyZmFjZSAibG8iIGlzIGV4cGxpY2l0bHkgZGlzYWJsZWQgaW4gL2V0Yy9kZWZhdWx0L2Ruc21hc3EKKyMgVGhlbiBkbnNtYXNxIHdvbid0IGJlIHByb3ZpZGluZyBsb2NhbCBETlMsIHNvIGRvbid0IGFkZCBpdCB0bworIyB0aGUgcmVzb2x2Y29uZiBzZXJ2ZXIgc2V0LgorCWZvciBpbnRlcmZhY2UgaW4gJEROU01BU1FfRVhDRVBUCisJZG8KKwkJWyAkaW50ZXJmYWNlID0gbG8gXSAmJiByZXR1cm4KKwlkb25lCisKKyAgICAgICAgaWYgWyAteCAvc2Jpbi9yZXNvbHZjb25mIF0gOyB0aGVuCisJCWVjaG8gIm5hbWVzZXJ2ZXIgMTI3LjAuMC4xIiB8IC9zYmluL3Jlc29sdmNvbmYgLWEgbG8uJE5BTUUKKwlmaQorCXJldHVybiAwCit9CisKK3N0b3AoKQoreworCSMgUmV0dXJuCisJIyAgIDAgaWYgZGFlbW9uIGhhcyBiZWVuIHN0b3BwZWQKKwkjICAgMSBpZiBkYWVtb24gd2FzIGFscmVhZHkgc3RvcHBlZAorCSMgICAyIGlmIGRhZW1vbiBjb3VsZCBub3QgYmUgc3RvcHBlZAorCSMgICBvdGhlciBpZiBhIGZhaWx1cmUgb2NjdXJyZWQKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLXJldHJ5PVRFUk0vMzAvS0lMTC81IC0tcGlkZmlsZSAvdmFyL3J1bi9kbnNtYXNxLyROQU1FLnBpZCAtLW5hbWUgJE5BTUUKK30KKworc3RvcF9yZXNvbHZjb25mKCkKK3sKKwlpZiBbIC14IC9zYmluL3Jlc29sdmNvbmYgXSA7IHRoZW4KKwkJL3NiaW4vcmVzb2x2Y29uZiAtZCBsby4kTkFNRQorCWZpCisJcmV0dXJuIDAKK30KKworc3RhdHVzKCkKK3sKKwkjIFJldHVybgorCSMgICAwIGlmIGRhZW1vbiBpcyBydW5uaW5nCisJIyAgIDEgaWYgZGFlbW9uIGlzIGRlYWQgYW5kIHBpZCBmaWxlIGV4aXN0cworCSMgICAzIGlmIGRhZW1vbiBpcyBub3QgcnVubmluZworCSMgICA0IGlmIGRhZW1vbiBzdGF0dXMgaXMgdW5rbm93bgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLXBpZGZpbGUgL3Zhci9ydW4vZG5zbWFzcS8kTkFNRS5waWQgLS1leGVjICREQUVNT04gLS10ZXN0ID4gL2Rldi9udWxsCisJY2FzZSAiJD8iIGluCisJCTApIFsgLWUgIi92YXIvcnVuL2Ruc21hc3EvJE5BTUUucGlkIiBdICYmIHJldHVybiAxIDsgcmV0dXJuIDMgOzsKKwkJMSkgcmV0dXJuIDAgOzsKKwkJKikgcmV0dXJuIDQgOzsKKwllc2FjCit9CisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwl0ZXN0ICIkRU5BQkxFRCIgIT0gIjAiIHx8IGV4aXQgMAorCWxvZ19kYWVtb25fbXNnICJTdGFydGluZyAkREVTQyIgIiROQU1FIgorCXN0YXJ0CisJY2FzZSAiJD8iIGluCisJCTApCisJCQlsb2dfZW5kX21zZyAwCisJCQlzdGFydF9yZXNvbHZjb25mCisJCQlleGl0IDAKKwkJCTs7CisJCTEpCisJCQlsb2dfc3VjY2Vzc19tc2cgIihhbHJlYWR5IHJ1bm5pbmcpIgorCQkJZXhpdCAwCisJCQk7OworCQkqKQorCQkJbG9nX2VuZF9tc2cgMQorCQkJZXhpdCAxCisJCQk7OworCWVzYWMKKwk7OworICBzdG9wKQorCXN0b3BfcmVzb2x2Y29uZgorCWlmIFsgIiRFTkFCTEVEIiAhPSAiMCIgXTsgdGhlbgorICAgICAgICAgICAgIGxvZ19kYWVtb25fbXNnICJTdG9wcGluZyAkREVTQyIgIiROQU1FIgorCWZpCisJc3RvcAorICAgICAgICBSRVRWQUw9IiQ/IgorCWlmIFsgIiRFTkFCTEVEIiA9ICIwIiBdOyB0aGVuCisJICAgIGNhc2UgIiRSRVRWQUwiIGluCisJICAgICAgIDApIGxvZ19kYWVtb25fbXNnICJTdG9wcGluZyAkREVTQyIgIiROQU1FIjsgbG9nX2VuZF9tc2cgMCA7OworICAgICAgICAgICAgZXNhYyAKKwkgICAgZXhpdCAwCisJZmkKKwljYXNlICIkUkVUVkFMIiBpbgorCQkwKSBsb2dfZW5kX21zZyAwIDsgZXhpdCAwIDs7CisJCTEpIGxvZ193YXJuaW5nX21zZyAiKG5vdCBydW5uaW5nKSIgOyBleGl0IDAgOzsKKwkJKikgbG9nX2VuZF9tc2cgMTsgZXhpdCAxIDs7CisJZXNhYworCTs7CisgIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorCXRlc3QgIiRFTkFCTEVEIiAhPSAiMCIgfHwgZXhpdCAxCisJJERBRU1PTiAtLXRlc3QgJHtDT05GSUdfRElSOisgLTcgJENPTkZJR19ESVJ9ICR7RE5TTUFTUV9PUFRTOisgJEROU01BU1FfT1BUU30gPi9kZXYvbnVsbCAyPiYxCisJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJICAgIE5BTUU9ImNvbmZpZ3VyYXRpb24gc3ludGF4IGNoZWNrIgorCSAgICBSRVRWQUw9IjIiCisJZWxzZSAgIAorCSAgICBzdG9wX3Jlc29sdmNvbmYKKwkgICAgc3RvcAorCSAgICBSRVRWQUw9IiQ/IgorICAgICAgICBmaQorCWxvZ19kYWVtb25fbXNnICJSZXN0YXJ0aW5nICRERVNDIiAiJE5BTUUiCisJY2FzZSAiJFJFVFZBTCIgaW4KKwkJMHwxKQorCQkgICAgICAgIHNsZWVwIDIKKwkJCXN0YXJ0CisJCQljYXNlICIkPyIgaW4KKwkJCQkwKQorCQkJCQlsb2dfZW5kX21zZyAwCisJCQkJCXN0YXJ0X3Jlc29sdmNvbmYKKwkJCQkJZXhpdCAwCisJCQkJCTs7CisJCQkgICAgICAgICopCisJCQkJCWxvZ19lbmRfbXNnIDEKKwkJCQkJZXhpdCAxCisJCQkJCTs7CisJCQllc2FjCisJCQk7OworCQkqKQorCQkJbG9nX2VuZF9tc2cgMQorCQkJZXhpdCAxCisJCQk7OworCWVzYWMKKwk7OworICBzdGF0dXMpCisJbG9nX2RhZW1vbl9tc2cgIkNoZWNraW5nICRERVNDIiAiJE5BTUUiCisJc3RhdHVzCisJY2FzZSAiJD8iIGluCisJCTApIGxvZ19zdWNjZXNzX21zZyAiKHJ1bm5pbmcpIiA7IGV4aXQgMCA7OworCQkxKSBsb2dfc3VjY2Vzc19tc2cgIihkZWFkLCBwaWQgZmlsZSBleGlzdHMpIiA7IGV4aXQgMSA7OworCQkzKSBsb2dfc3VjY2Vzc19tc2cgIihub3QgcnVubmluZykiIDsgZXhpdCAzIDs7CisJCSopIGxvZ19zdWNjZXNzX21zZyAiKHVua25vd24pIiA7IGV4aXQgNCA7OworCWVzYWMKKwk7OworICBkdW1wLXN0YXRzKQorICAgICAgICBraWxsIC1zIFVTUjEgYGNhdCAvdmFyL3J1bi9kbnNtYXNxLyROQU1FLnBpZGAKKwk7OworICBzeXN0ZW1kLXN0YXJ0LXJlc29sdmNvbmYpCisJc3RhcnRfcmVzb2x2Y29uZgorCTs7CisgIHN5c3RlbWQtc3RvcC1yZXNvbHZjb25mKQorCXN0b3BfcmVzb2x2Y29uZgorCTs7CisgIHN5c3RlbWQtZXhlYykKKyMgL3Zhci9ydW4gbWF5IGJlIHZvbGF0aWxlLCBzbyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0CisgICAgICAgICMgL3Zhci9ydW4vZG5zbWFzcSBleGlzdHMgaGVyZSBhcyB3ZWxsIGFzIGluIHBvc3RpbnN0CisgICAgICAgIGlmIFsgISAtZCAvdmFyL3J1bi9kbnNtYXNxIF07IHRoZW4KKyAgICAgICAgICAgbWtkaXIgL3Zhci9ydW4vZG5zbWFzcSB8fCByZXR1cm4gMgorICAgICAgICAgICBjaG93biBkbnNtYXNxOm5vZ3JvdXAgL3Zhci9ydW4vZG5zbWFzcSB8fCByZXR1cm4gMgorICAgICAgICBmaQorIyBFbmFibGUgREJ1cyBieSBkZWZhdWx0IGJlY2F1c2Ugd2UgdXNlIERCdXMgYWN0aXZhdGlvbiB3aXRoIHN5c3RlbWQuCisJZXhlYyAkREFFTU9OIC0ta2VlcC1pbi1mb3JlZ3JvdW5kIC0tZW5hYmxlLWRidXMgXAorCSAgICAteCAvdmFyL3J1bi9kbnNtYXNxLyROQU1FLnBpZCBcCisJICAgICR7TUFJTEhPU1ROQU1FOisgLW0gJE1BSUxIT1NUTkFNRX0gXAorCSAgICAke01BSUxUQVJHRVQ6KyAtdCAkTUFJTFRBUkdFVH0gXAorCSAgICAke0ROU01BU1FfVVNFUjorIC11ICRETlNNQVNRX1VTRVJ9IFwKKwkgICAgJHtETlNNQVNRX0lOVEVSRkFDRVM6KyAkRE5TTUFTUV9JTlRFUkZBQ0VTfSBcCisJICAgICR7REhDUF9MRUFTRTorIC1sICRESENQX0xFQVNFfSBcCisJICAgICR7RE9NQUlOX1NVRkZJWDorIC1zICRET01BSU5fU1VGRklYfSBcCisJICAgICR7UkVTT0xWX0NPTkY6KyAtciAkUkVTT0xWX0NPTkZ9IFwKKwkgICAgJHtDQUNIRVNJWkU6KyAtYyAkQ0FDSEVTSVpFfSBcCisJICAgICR7Q09ORklHX0RJUjorIC03ICRDT05GSUdfRElSfSBcCisJICAgICR7RE5TTUFTUV9PUFRTOisgJEROU01BU1FfT1BUU30gCisJOzsKKyAgKikKKwllY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvJE5BTUUge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR8ZHVtcC1zdGF0c3xzdGF0dXN9IiA+JjIKKwlleGl0IDMKKwk7OworZXNhYworCitleGl0IDAKKwpkaWZmIC0tZ2l0IGEvZGViaWFuL2luc3NlcnYgYi9kZWJpYW4vaW5zc2VydgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTg0Mzk3Ci0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2luc3NlcnYKQEAgLTAsMCArMSBAQAorJG5hbWVkIGRuc21hc3EKZGlmZiAtLWdpdCBhL2RlYmlhbi9wb3N0aW5zdCBiL2RlYmlhbi9wb3N0aW5zdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDE4YzU5Ci0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL3Bvc3RpbnN0CkBAIC0wLDAgKzEsMzggQEAKKyMhL2Jpbi9zaAorc2V0IC1lCisKKyMgQ29kZSBjb3BpZWQgZnJvbSBkaF9zeXN0ZW1kX2VuYWJsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgd2lsbCBvbmx5IHJlbW92ZSBtYXNrcyBjcmVhdGVkIGJ5IGQtcy1oIG9uIHBhY2thZ2UgcmVtb3ZhbC4KK2RlYi1zeXN0ZW1kLWhlbHBlciB1bm1hc2sgZG5zbWFzcS5zZXJ2aWNlID4vZGV2L251bGwgfHwgdHJ1ZQorCisjIHdhcy1lbmFibGVkIGRlZmF1bHRzIHRvIHRydWUsIHNvIG5ldyBpbnN0YWxsYXRpb25zIHJ1biBlbmFibGUuCitpZiBkZWItc3lzdGVtZC1oZWxwZXIgLS1xdWlldCB3YXMtZW5hYmxlZCBkbnNtYXNxLnNlcnZpY2U7IHRoZW4KKwkjIEVuYWJsZXMgdGhlIHVuaXQgb24gZmlyc3QgaW5zdGFsbGF0aW9uLCBjcmVhdGVzIG5ldworCSMgc3ltbGlua3Mgb24gdXBncmFkZXMgaWYgdGhlIHVuaXQgZmlsZSBoYXMgY2hhbmdlZC4KKwlkZWItc3lzdGVtZC1oZWxwZXIgZW5hYmxlIGRuc21hc3Euc2VydmljZSA+L2Rldi9udWxsIHx8IHRydWUKK2Vsc2UKKwkjIFVwZGF0ZSB0aGUgc3RhdGVmaWxlIHRvIGFkZCBuZXcgc3ltbGlua3MgKGlmIGFueSksIHdoaWNoIG5lZWQgdG8gYmUKKwkjIGNsZWFuZWQgdXAgb24gcHVyZ2UuIEFsc28gcmVtb3ZlIG9sZCBzeW1saW5rcy4KKwlkZWItc3lzdGVtZC1oZWxwZXIgdXBkYXRlLXN0YXRlIGRuc21hc3Euc2VydmljZSA+L2Rldi9udWxsIHx8IHRydWUKK2ZpCisjIEVuZCBjb2RlIGNvcGllZCBmcm9tIGRoX3N5c3RlbWRfZW5hYmxlIC0tLS0tLS0tLS0tLS0tLS0tLQorCitpZiBbIC14IC9ldGMvaW5pdC5kL2Ruc21hc3EgXTsgdGhlbgorICAgdXBkYXRlLXJjLmQgZG5zbWFzcSBkZWZhdWx0cyAxNSA4NSA+L2Rldi9udWxsCisKKyAgIGlmIFsgIiQxIiA9ICJjb25maWd1cmUiIF0gfHwgWyAiJDEiID0gImFib3J0LXVwZ3JhZGUiIF07IHRoZW4KKyAgICAgIGlmIFsgLWUgL3Zhci9ydW4vZG5zbWFzcS9kbnNtYXNxLnBpZCBdOyB0aGVuCisgICAgICAgICAgQUNUSU9OPXJlc3RhcnQKKyAgICAgIGVsc2UKKyAgICAgICAgICBBQ1RJT049c3RhcnQKKyAgICAgIGZpCisKKyAgICAgIGlmIFsgLXggL3Vzci9zYmluL2ludm9rZS1yYy5kIF0gOyB0aGVuCisgICAgICAgICBpbnZva2UtcmMuZCBkbnNtYXNxICRBQ1RJT04gfHwgdHJ1ZQorICAgICAgZWxzZQorICAgICAgICAgL2V0Yy9pbml0LmQvZG5zbWFzcSAkQUNUSU9OIHx8IHRydWUKKyAgICAgIGZpCisgICBmaQorZmkKKworCmRpZmYgLS1naXQgYS9kZWJpYW4vcG9zdHJtIGIvZGViaWFuL3Bvc3RybQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTQ1ZmQxCi0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL3Bvc3RybQpAQCAtMCwwICsxLDIyIEBACisjIS9iaW4vc2gKK3NldCAtZQorCitpZiBbIHB1cmdlID0gIiQxIiBdOyB0aGVuCisgICB1cGRhdGUtcmMuZCBkbnNtYXNxIHJlbW92ZSA+L2Rldi9udWxsCitmaQorCisjIENvZGUgY29waWVkIGZyb20gZGhfc3lzdGVtZF9lbmFibGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraWYgWyAiJDEiID0gInJlbW92ZSIgXTsgdGhlbgorCWlmIFsgLXggIi91c3IvYmluL2RlYi1zeXN0ZW1kLWhlbHBlciIgXTsgdGhlbgorCQlkZWItc3lzdGVtZC1oZWxwZXIgbWFzayBkbnNtYXNxLnNlcnZpY2UgPi9kZXYvbnVsbAorCWZpCitmaQorCitpZiBbICIkMSIgPSAicHVyZ2UiIF07IHRoZW4KKwlpZiBbIC14ICIvdXNyL2Jpbi9kZWItc3lzdGVtZC1oZWxwZXIiIF07IHRoZW4KKwkJZGViLXN5c3RlbWQtaGVscGVyIHB1cmdlIGRuc21hc3Euc2VydmljZSA+L2Rldi9udWxsCisJCWRlYi1zeXN0ZW1kLWhlbHBlciB1bm1hc2sgZG5zbWFzcS5zZXJ2aWNlID4vZGV2L251bGwKKwlmaQorZmkKKyMgRW5kIGNvZGUgY29waWVkIGZyb20gZGhfc3lzdGVtZF9lbmFibGUgLS0tLS0tLS0tLS0tLS0tLS0tCisKZGlmZiAtLWdpdCBhL2RlYmlhbi9wcmVybSBiL2RlYmlhbi9wcmVybQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODA5YjY4Ci0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL3ByZXJtCkBAIC0wLDAgKzEsMTQgQEAKKyMhL2Jpbi9zaAorc2V0IC1lCisKK2lmIFsgIiQxIiA9ICJyZW1vdmUiIF07IHRoZW4KKyAgaWYgWyAteCAvdXNyL3NiaW4vaW52b2tlLXJjLmQgXSA7IHRoZW4KKyAgICAgIGludm9rZS1yYy5kIGRuc21hc3Egc3RvcCB8fCB0cnVlCisgIGVsc2UKKyAgICAgIC9ldGMvaW5pdC5kL2Ruc21hc3Egc3RvcCB8fCB0cnVlCisgIGZpCitmaQorCitleGl0IDAKKworCmRpZmYgLS1naXQgYS9kZWJpYW4vcmVhZG1lIGIvZGViaWFuL3JlYWRtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzcwNWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL3JlYWRtZQpAQCAtMCwwICsxLDc5IEBACitOb3RlcyBvbiBjb25maWd1cmluZyBkbnNtYXNxIGFzIHBhY2thZ2VkIGZvciBEZWJpYW4uCisKKygxKSBUbyBjb25maWd1cmUgZG5zbWFzcSBlZGl0IC9ldGMvZG5zbWFzcS5jb25mLiBUaGUgZmlsZSBpcyB3ZWxsCisgICAgY29tbWVudGVkOyBzZWUgYWxzbyB0aGUgZG5zbWFzcS44IG1hbiBwYWdlIGZvciBleHBsYW5hdGlvbiBvZgorICAgIHRoZSBvcHRpb25zLiBUaGUgZmlsZSAvZXRjL2RlZmF1bHQvZG5zbWFzcSBhbHNvIGV4aXN0cyBidXQgaXQKKyAgICBzaG91bGRuJ3QgbmVlZCB0byBiZSB0b3VjaGVkIGluIG1vc3QgY2FzZXMuIFRvIHNldCB1cCBESENQCisgICAgb3B0aW9ucyB5b3UgbWlnaHQgbmVlZCB0byByZWZlciB0byBhIGNvcHkgb2YgUkZDIDIxMzIuIFRoaXMgaXMgCisgICAgYXZhaWxhYmxlIG9uIERlYmlhbiBzeXN0ZW1zIGluIHRoZSBwYWNrYWdlIGRvYy1yZmMtc3RkIGFzIHRoZSBmaWxlCisgICAgL3Vzci9zaGFyZS9kb2MvUkZDL2RyYWZ0LXN0YW5kYXJkL3JmYzIxMzIudHh0Lmd6IC4KKworKDIpIEluc3RhbGxpbmcgdGhlIGRuc21hc3EgcGFja2FnZSBhbHNvIGNyZWF0ZXMgdGhlIGRpcmVjdG9yeQorICAgIC9ldGMvZG5zbWFzcS5kIHdoaWNoIGlzIHNlYXJjaGVkIGJ5IGRuc21hc3EgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgIGZyYWdtZW50cy4gVGhpcyBiZWhhdmlvdXIgY2FuIGJlIGRpc2FibGVkIGJ5IGVkaXRpbmcgCisgICAgL2V0Yy9kZWZhdWx0L2Ruc21hc3EuCisKKygzKSBJZiB0aGUgRGViaWFuIHJlc29sdmNvbmYgcGFja2FnZSBpcyBpbnN0YWxsZWQgdGhlbiwgcmVnYXJkbGVzcworICAgIG9mIHdoYXQgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gZGFlbW9ucyBhcmUgZW1wbG95ZWQsIHRoZSBsaXN0IG9mCisgICAgbmFtZXNlcnZlcnMgdG8gd2hpY2ggZG5zbWFzcSBzaG91bGQgZm9yd2FyZCBxdWVyaWVzIGNhbiBiZSBmb3VuZAorICAgIGluIC92YXIvcnVuL2Ruc21hc3EvcmVzb2x2LmNvbmY7IGFsc28sIDEyNy4wLjAuMSBpcyBsaXN0ZWQgYXMgdGhlCisgICAgZmlyc3QgbmFtZXNlcnZlciBhZGRyZXNzIGluIC9ldGMvcmVzb2x2LmNvbmYuIFRoaXMgd29ya3MgdXNpbmcgdGhlCisgICAgZGVmYXVsdCBjb25maWd1cmF0aW9ucyBvZiByZXNvbHZjb25mIGFuZCBkbnNtYXNxLgorCisoNCkgSW4gdGhlIGFic2VuY2Ugb2YgcmVzb2x2Y29uZiwgaWYgeW91IGFyZSB1c2luZyBkaGNwY2QgdGhlbgorICAgIGRuc21hc3Egc2hvdWxkIHJlYWQgdGhlIGxpc3Qgb2YgbmFtZXNlcnZlcnMgZnJvbSB0aGUgYXV0b21hdGljYWxseQorICAgIGdlbmVyYXRlZCBmaWxlIC9ldGMvZGhjcGMvcmVzb2x2LmNvbmYuICBZb3Ugc2hvdWxkIGxpc3QgMTI3LjAuMC4xCisgICAgYXMgdGhlIGZpcnN0IG5hbWVzZXJ2ZXIgYWRkcmVzcyBpbiAvZXRjL3Jlc29sdi5jb25mLgorCisoNSkgSW4gdGhlIGFic2VuY2Ugb2YgcmVzb2x2Y29uZiwgaWYgeW91IGFyZSB1c2luZyBwcHBkIHRoZW4KKyAgICBkbnNtYXNxIHNob3VsZCByZWFkIHRoZSBsaXN0IG9mIG5hbWVzZXJ2ZXJzIGZyb20gdGhlIGF1dG9tYXRpY2FsbHkKKyAgICBnZW5lcmF0ZWQgZmlsZSAvZXRjL3BwcC9yZXNvbHYuY29uZi4gIFlvdSBzaG91bGQgbGlzdCAxMjcuMC4wLjEKKyAgICBhcyB0aGUgZmlyc3QgbmFtZXNlcnZlciBhZGRyZXNzIGluIC9ldGMvcmVzb2x2LmNvbmYuCisKKyg2KSBJbiB0aGUgYWJzZW5jZSBvZiByZXNvbHZjb25mLCBkbnMtbmFtZXNlcnZlcnMgbGluZXMgaW4gCisgICAgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgYXJlIGlnbm9yZWQuIElmIHlvdSBkbyBkbyBub3QgdXNlCisgICAgcmVzb2x2Y29uZiwgbGlzdCAxMjcuMC4wLjEgYXMgdGhlIGZpcnN0IG5hbWVzZXJ2ZXIgYWRkcmVzcworICAgIGluIC9ldGMvcmVzb2x2LmNvbmYgYW5kIGNvbmZpZ3VyZSB5b3VyIG5hbWVzZXJ2ZXJzIHVzaW5nCisgICAgInNlcnZlcj08SVAtYWRkcmVzcz4iIGxpbmVzIGluIC9ldGMvZG5zbWFzcS5jb25mLgorCisoNykgSWYgeW91IHJ1biBtdWx0aXBsZSBETlMgc2VydmVycyBvbiBhIHNpbmdsZSBtYWNoaW5lLCBlYWNoCisgICAgbGlzdGVuaW5nIG9uIGEgZGlmZmVyZW50IGludGVyZmFjZSwgdGhlbiBpdCBpcyBuZWNlc3NhcnkgdG8gdXNlIAorICAgIHRoZSBiaW5kLWludGVyZmFjZXMgb3B0aW9uIGJ5IHVuY29tbWVudGluZyAiYmluZC1pbnRlcmZhY2VzIiBpbiAKKyAgICAvZXRjL2Ruc21hc3EuY29uZi4gVGhpcyBvcHRpb24gc3RvcHMgZG5zbWFzcSBmcm9tIGJpbmRpbmcgdGhlIAorICAgIHdpbGRjYXJkIGFkZHJlc3MgYW5kIGFsbG93cyBzZXJ2ZXJzIGxpc3RlbmluZyBvbiBwb3J0IDUzIG9uCisgICAgaW50ZXJmYWNlcyBub3QgaW4gdXNlIGJ5IGRuc21hc3EgdG8gd29yay4gVGhlIERlYmlhbiAKKyAgICBsaWJ2aXJ0IHBhY2thZ2Ugd2lsbCBhZGQgYSBjb25maWd1cmF0aW9uIGZpbGUgaW4gL2V0Yy9kbnNtYXNxLmQKKyAgICB3aGljaCBkb2VzIHRoaXMgc28gdGhhdCB0aGUgInN5c3RlbSIgZG5zbWFzcSBhbmQgInByaXZhdGUiIGRuc21hc3EKKyAgICBpbnN0YW5jZXMgc3RhcnRlZCBieSBsaWJ2aXJ0IGRvIG5vdCBjbGFzaC4KKworKDgpIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgc3VwcG9ydGVkIGluIERFQl9CVUlMRF9PUFRJT05TCisgICAgICBub29wdCAgICAgICA6IGNvbXBpbGUgd2l0aG91dCBvcHRpbWlzYXRpb24uCisgICAgICBub3N0cmlwICAgICA6IGRvbid0IHJlbW92ZSBzeW1ib2xzIGZyb20gYmluYXJ5LiAKKyAgICAgIG5vZG9jcyAgICAgIDogb21pdCBkb2N1bWVudGF0aW9uLgorICAgICAgbm90ZnRwICAgICAgOiBvbWl0IFRGVFAgc3VwcG9ydC4KKyAgICAgIG5vZGhjcCAgICAgIDogb21pdCBESENQIHN1cHBvcnQuCisgICAgICBub2RoY3A2ICAgICA6IG9taXQgREhDUHY2IHN1cHBvcnQuCisgICAgICBub3NjcmlwdCAgICA6IG9taXQgbGVhc2UtY2hhbmdlIHNjcmlwdCBzdXBwb3J0LgorICAgICAgdXNlX2x1YSAgICAgOiBwcm92aWRlIHN1cHBvcnQgZm9yIGxlYXNlLWNoYW5nZSBzY3JpcHRzIHdyaXR0ZW4KKyAgICAgICAgICAgICAgICAgICAgaW4gTHVhLgorICAgICAgbm9pcHY2ICAgICAgOiBvbWl0IElQdjYgc3VwcG9ydC4KKyAgICAgIG5vZGJ1cyAgICAgIDogb21pdCBEQnVzIHN1cHBvcnQuCisgICAgICBub2Nvbm50cmFjayA6IG9taXQgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0LiAKKyAgICAgIG5vaXBzZXQgICAgIDogb21pdCBJUHNldCBzdXBwb3J0LgorICAgICAgbm9ydGMgICAgICAgOiBjb21waWxlIGFsdGVybmF0ZSBtb2RlIHN1aXRhYmxlIGZvciBzeXN0ZW1zIHdpdGhvdXQgYW4gUlRDLgorICAgICAgbm9pMThuICAgICAgOiBvbWl0IHRyYW5zbGF0aW9ucyBhbmQgaW50ZXJuYXRpb25hbGlzYXRpb24gc3VwcG9ydC4KKyAgICAgIG5vaWRuICAgICAgIDogb21pdCBpbnRlcm5hdGlvbmFsIGRvbWFpbiBuYW1lIHN1cHBvcnQsIG11c3QgYmUKKyAgICAgICAgICAgICAgICAgICAgY29tYmluZWQgd2l0aCBub2kxOG4gdG8gYmUgZWZmZWN0aXZlLgorICAgICAgZ2l0dmVyc2lvbiAgOiBzZXQgdGhlIHZlcnNpb24gb2YgdGhlIHByb2R1Y2VkIHBhY2thZ2VzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIGdpdC1kZXJpdmVkIHZlcnNpb25pbmcgaW5mb3JtYXRpb24gb24gdGhlIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgcmF0aGVyIHRoZSB0aGUgZGViaWFuIGNoYW5nZWxvZy4gCisKKyg5KSBEbnNtYXNxIGNvbWVzIGFzIHRocmVlIHBhY2thZ2VzIC0gZG5zbWFzcS11dGlscywgZG5zbWFzcS1iYXNlIGFuZAorICAgIGRuc21hc3EuIERuc21hc3EtYmFzZSBwcm92aWRlcyB0aGUgZG5zbWFzcSBleGVjdXRhYmxlIGFuZAorICAgIGRvY3VtZW50YXRpb24gKGluY2x1ZGluZyB0aGlzIGZpbGUpLiBEbnNtYXNxLCB3aGljaCBkZXBlbmRzIG9uCisgICAgZG5zbWFzcS1iYXNlLCBwcm92aWRlcyB0aGUgaW5pdCBzY3JpcHQgYW5kIGNvbmZpZ3VyYXRpb24KKyAgICBpbmZyYXN0cnVjdHVyZS4gVGhpcyBmaWxlIGFzc3VtZXMgdGhhdCBib3RoIGFyZSBpbnN0YWxsZWQuIEl0IGlzCisgICAgcG9zc2libGUgdG8gaW5zdGFsbCBvbmx5IGRuc21hc3EtYmFzZSBhbmQgdXNlIGRuc21hc3EgYXMgYQorICAgIG5vbi0ic3lzdGVtIiBkYWVtb24uIExpYnZpcnQsIGZvciBpbnN0YW5jZSwgZG9lcyB0aGlzLgorICAgIERuc21hc3EtdXRpbHMgcHJvdmlkZXMgdGhlIHV0aWxpdGllcyBkaGNwX3JlbGVhc2UgYW5kIAorICAgIGRoY3BfbGVhc2VfdGltZS4KZGlmZiAtLWdpdCBhL2RlYmlhbi9yZWFkbWUuZG5zbWFzcS5kIGIvZGViaWFuL3JlYWRtZS5kbnNtYXNxLmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNkYjBkOAotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9yZWFkbWUuZG5zbWFzcS5kCkBAIC0wLDAgKzEsNyBAQAorIyBBbGwgZmlsZXMgaW4gdGhpcyBkaXJlY3Rvcnkgd2lsbCBiZSByZWFkIGJ5IGRuc21hc3EgYXMgCisjIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGV4Y2VwdCBpZiB0aGVpciBuYW1lcyBlbmQgaW4gCisjICIuZHBrZy1kaXN0IiwiLmRwa2ctb2xkIiBvciAiLmRwa2ctbmV3IgorIworIyBUaGlzIGNhbiBiZSBjaGFuZ2VkIGJ5IGVkaXRpbmcgL2V0Yy9kZWZhdWx0L2Ruc21hc3EKKworCmRpZmYgLS1naXQgYS9kZWJpYW4vcmVzb2x2Y29uZiBiL2RlYmlhbi9yZXNvbHZjb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNWNiMjkKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vcmVzb2x2Y29uZgpAQCAtMCwwICsxLDg0IEBACisjIS9iaW4vc2gKKyMKKyMgU2NyaXB0IHRvIHVwZGF0ZSB0aGUgcmVzb2x2ZXIgbGlzdCBmb3IgZG5zbWFzcQorIworIyBOLkIuIFJlc29sdmNvbmYgbWF5IHJ1biB1cyBldmVuIGlmIGRuc21hc3EgaXMgbm90ICh5ZXQpIHJ1bm5pbmcuCisjIElmIGRuc21hc3EgaXMgaW5zdGFsbGVkIHRoZW4gd2UgZ28gYWhlYWQgYW5kIHVwZGF0ZSB0aGUgcmVzb2x2ZXIgbGlzdAorIyBpbiBjYXNlIGRuc21hc3EgaXMgc3RhcnRlZCBsYXRlci4KKyMKKyMgQXNzdW1wdGlvbjogT24gZW50cnksIFBXRCBjb250YWlucyB0aGUgcmVzb2x2LmNvbmYtdHlwZSBmaWxlcy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGRuc21hc3EgcGFja2FnZS4KKyMKKworc2V0IC1lCisKK1JVTl9ESVI9Ii92YXIvcnVuL2Ruc21hc3EiCitSU0xWUkxJU1RfRklMRT0iJHtSVU5fRElSfS9yZXNvbHYuY29uZiIKK1RNUF9GSUxFPSIke1JTTFZSTElTVF9GSUxFfV9uZXcuJCQiCitNWV9OQU1FX0ZPUl9SRVNPTFZDT05GPSJkbnNtYXNxIgorCitbIC14IC91c3Ivc2Jpbi9kbnNtYXNxIF0gfHwgZXhpdCAwCitbIC14IC9saWIvcmVzb2x2Y29uZi9saXN0LXJlY29yZHMgXSB8fCBleGl0IDEKKworUEFUSD0vYmluOi9zYmluCisKK3JlcG9ydF9lcnIoKSB7IGVjaG8gIiQwOiBFcnJvcjogJCoiID4mMiA7IH0KKworIyBTdG9yZXMgYXJndW1lbnRzIChtaW51cyBkdXBsaWNhdGVzKSBpbiBSU0xULCBzZXBhcmF0ZWQgYnkgc3BhY2VzCisjIERvZXNuJ3Qgd29yayBwcm9wZXJseSBpZiBhbiBhcmd1bWVudCBpdHNlbGYgY29udGFpbnMgd2hpdGVzcGFjZQordW5pcXVpZnkoKQoreworCVJTTFQ9IiIKKwl3aGlsZSBbICIkMSIgXSA7IGRvCisJCWZvciBFIGluICRSU0xUIDsgZG8KKwkJCVsgIiQxIiA9ICIkRSIgXSAmJiB7IHNoaWZ0IDsgY29udGludWUgMiA7IH0KKwkJZG9uZQorCQlSU0xUPSIke1JTTFQ6KyRSU0xUIH0kMSIKKwkJc2hpZnQKKwlkb25lCit9CisKK2lmIFsgISAtZCAiJFJVTl9ESVIiIF0gJiYgISBta2RpciAtLXBhcmVudHMgLS1tb2RlPTA3NTUgIiRSVU5fRElSIiA7IHRoZW4KKwlyZXBvcnRfZXJyICJGYWlsZWQgdHJ5aW5nIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJFJVTl9ESVIiCisJZXhpdCAxCitmaQorCitSU0xWQ05GRklMRVM9IiIKK2ZvciBGIGluICQoL2xpYi9yZXNvbHZjb25mL2xpc3QtcmVjb3JkcyAtLWFmdGVyICJsby4kTVlfTkFNRV9GT1JfUkVTT0xWQ09ORiIpIDsgZG8KKwljYXNlICIkRiIgaW4KKwkgICAgImxvLiRNWV9OQU1FX0ZPUl9SRVNPTFZDT05GIikKKwkJIyBPbWl0IG93biByZWNvcmQJIAorCQk7OworCSAgICBsby4qKQorCQkjIEluY2x1ZGUgbm8gbW9yZSByZWNvcmRzIGFmdGVyIG9uZSBmb3IgYSBsb2NhbCBuYW1lc2VydmVyCisJCVJTTFZDTkZGSUxFUz0iJHtSU0xWQ05GRklMRVM6KyRSU0xWQ05GRklMRVMgfSRGIgorCQlicmVhaworCQk7OworCSAgKikKKwkJUlNMVkNORkZJTEVTPSIke1JTTFZDTkZGSUxFUzorJFJTTFZDTkZGSUxFUyB9JEYiCisJCTs7CisJZXNhYworZG9uZQorCitOTVNSVlJTPSIiCitpZiBbICIkUlNMVkNORkZJTEVTIiBdIDsgdGhlbgorCXVuaXF1aWZ5ICQoc2VkIC1uIC1lICdzL15bWzpzcGFjZTpdXSpuYW1lc2VydmVyW1s6c3BhY2U6XV1cKy8vcCcgJFJTTFZDTkZGSUxFUykKKwlOTVNSVlJTPSIkUlNMVCIKK2ZpCisKKyMgRG5zbWFzcSB1c2VzIHRoZSBtdGltZSBvZiAkUlNMVlJMSVNUX0ZJTEUsIHdpdGggYSByZXNvbHV0aW9uIG9mIG9uZSBzZWNvbmQsCisjIHRvIGRldGVjdCBjaGFuZ2VzIGluIHRoZSBmaWxlLiBUaGlzIG1lYW5zIHRoYXQgaWYgYSByZXNvbHZjb25mIHVwZGF0ZSBvY2N1cnMKKyMgd2l0aGluIG9uZSBzZWNvbmQgb2YgdGhlIHByZXZpb3VzIG9uZSB0aGVuIGRuc21hc3EgbWF5IGZhaWwgdG8gbm90aWNlIHRoZQorIyBtb3JlIHJlY2VudCBjaGFuZ2UuIFRvIHdvcmsgYXJvdW5kIHRoaXMgcHJvYmxlbSB3ZSBzbGVlcCBvbmUgc2Vjb25kIGhlcmUKKyMgaWYgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHRoZSBuZXcgbXRpbWUgaXMgZGlmZmVyZW50LgoraWYgWyAtZiAiJFJTTFZSTElTVF9GSUxFIiBdICYmIFsgIiQobHMgLWdvIC0tdGltZS1zdHlsZT0nKyVzJyAiJFJTTFZSTElTVF9GSUxFIiB8IHsgcmVhZCBwIGggcyB0IG4gOyBlY2hvICIkdCIgOyB9KSIgPSAiJChkYXRlICslcykiIF0gOyB0aGVuCisJc2xlZXAgMQorZmkKKworY2xlYW5fdXAoKSB7IHJtIC1mICIkVE1QX0ZJTEUiIDsgfQordHJhcCBjbGVhbl91cCBFWElUCis6ID58ICIkVE1QX0ZJTEUiCitmb3IgTiBpbiAkTk1TUlZSUyA7IGRvIGVjaG8gIm5hbWVzZXJ2ZXIgJE4iID4+ICIkVE1QX0ZJTEUiIDsgZG9uZQorbXYgLWYgIiRUTVBfRklMRSIgIiRSU0xWUkxJU1RfRklMRSIKKwpkaWZmIC0tZ2l0IGEvZGViaWFuL3Jlc29sdmNvbmYtcGFja2FnZSBiL2RlYmlhbi9yZXNvbHZjb25mLXBhY2thZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc1MTJlZAotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9yZXNvbHZjb25mLXBhY2thZ2UKQEAgLTAsMCArMSwxMyBAQAorIyEvYmluL3NoCisjIFJlc29sdmNvbmYgcGFja2FnaW5nIGV2ZW50IGhvb2sgc2NyaXB0IGZvciB0aGUgZG5zbWFzcSBwYWNrYWdlCityZXN0YXJ0X2Ruc21hc3EoKSB7CisgICAgaWYgd2hpY2ggaW52b2tlLXJjLmQgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorICAgICAgICBpbnZva2UtcmMuZCBkbnNtYXNxIHJlc3RhcnQKKyAgICBlbGlmIFsgLXggL2V0Yy9pbml0LmQvZG5zbWFzcSBdIDsgdGhlbgorICAgICAgICAvZXRjL2luaXQuZC9kbnNtYXNxIHJlc3RhcnQKKyAgICBmaQorfQorCitjYXNlICIkMSIgaW4KKyAgaW5zdGFsbCkgcmVzdGFydF9kbnNtYXNxIDs7Citlc2FjCmRpZmYgLS1naXQgYS9kZWJpYW4vcnVsZXMgYi9kZWJpYW4vcnVsZXMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGRjYmIzMAotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9ydWxlcwpAQCAtMCwwICsxLDIyNCBAQAorIyEvdXNyL2Jpbi9tYWtlIC1mCisjIGRlYmlhbi9ydWxlcyBmaWxlIC0gZm9yIGRuc21hc3EuCisjIENvcHlyaWdodCAyMDAxLTIwMTEgYnkgU2ltb24gS2VsbGV5CisjIEJhc2VkIG9uIHRoZSBzYW1wbGUgaW4gdGhlIGRlYmlhbiBoZWxsbyBwYWNrYWdlIHdoaWNoIGNhcnJpZXMgdGhlIGZvbGxvd2luZzoKKyMgQ29weXJpZ2h0IDE5OTQsMTk5NSBieSBJYW4gSmFja3Nvbi4KKyMgSSBoZXJlYnkgZ2l2ZSB5b3UgcGVycGV0dWFsIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksCisjIG1vZGlmeSBhbmQgcmVsaWNlbnNlIHRoaXMgZmlsZSwgcHJvdmlkZWQgdGhhdCB5b3UgZG8gbm90IHJlbW92ZQorIyBteSBuYW1lIGZyb20gdGhlIGZpbGUgaXRzZWxmLiAgKEkgYXNzZXJ0IG15IG1vcmFsIHJpZ2h0IG9mCisjIHBhdGVybml0eSB1bmRlciB0aGUgQ29weXJpZ2h0LCBEZXNpZ25zIGFuZCBQYXRlbnRzIEFjdCAxOTg4LikKKyMgVGhpcyBmaWxlIG1heSBoYXZlIHRvIGJlIGV4dGVuc2l2ZWx5IG1vZGlmaWVkCisKK3BhY2thZ2U9ZG5zbWFzcS1iYXNlCisKK2Rwa2dfYnVpbGRmbGFncyA6PSBERUJfQlVJTERfTUFJTlRfT1BUSU9OUz0iaGFyZGVuaW5nPSthbGwiIGRwa2ctYnVpbGRmbGFncworCitDRkxBR1MgPSAkKHNoZWxsICQoZHBrZ19idWlsZGZsYWdzKSAtLWdldCBDRkxBR1MpCitDRkxBR1MgKz0gJChzaGVsbCAkKGRwa2dfYnVpbGRmbGFncykgLS1nZXQgQ1BQRkxBR1MpCitDRkxBR1MgKz0gLVdhbGwgLVcKKworTERGTEFHUyA9ICQoc2hlbGwgJChkcGtnX2J1aWxkZmxhZ3MpIC0tZ2V0IExERkxBR1MpCisKK0RFQl9DT1BUUyA9ICQoQ09QVFMpCisKK1RBUkdFVCA9IGluc3RhbGwtaTE4bgorCitERUJfSE9TVF9BUkNIX09TIDo9ICQoc2hlbGwgZHBrZy1hcmNoaXRlY3R1cmUgLXFERUJfSE9TVF9BUkNIX09TKQorCisjIEZvcmNlIHBhY2thZ2UgdmVyc2lvbiBiYXNlZCBvbiBnaXQgdGFncy4KK2lmbmVxICgsJChmaWx0ZXIgZ2l0dmVyc2lvbiwkKERFQl9CVUlMRF9PUFRJT05TKSkpCisgICAgIFBBQ0tBR0VfVkVSU0lPTiA9ICQoc2hlbGwgYmxkL2dldC12ZXJzaW9uIGBwd2RgIHwgIHNlZCAncy90ZXN0L34mLzsgcy9bYS16XS9+Ji87ICBzLy0vLi9nOyBzLyQkLy0xLzsgcy9eLy12Lyc7KQorZW5kaWYKKworaWZlcSAoLCQoZmlsdGVyIG5vZGJ1cywkKERFQl9CVUlMRF9PUFRJT05TKSkpCisgICAgIERFQl9DT1BUUyArPSAtREhBVkVfREJVUworZW5kaWYKKworaWZlcSAoLCQoZmlsdGVyIG5vY29ubnRyYWNrLCQoREVCX0JVSUxEX09QVElPTlMpKSkKK2lmZXEgKCQoREVCX0hPU1RfQVJDSF9PUyksbGludXgpCisgICAgIERFQl9DT1BUUyArPSAtREhBVkVfQ09OTlRSQUNLCitlbmRpZgorZW5kaWYKKworaWZuZXEgKCwkKGZpbHRlciBub2lwc2V0LCQoREVCX0JVSUxEX09QVElPTlMpKSkKKyAgICAgREVCX0NPUFRTICs9IC1ETk9fSVBTRVQKK2VuZGlmCisKK2lmbmVxICgsJChmaWx0ZXIgbm9kaGNwNiwkKERFQl9CVUlMRF9PUFRJT05TKSkpCisgICAgIERFQl9DT1BUUyArPSAtRE5PX0RIQ1A2CitlbmRpZgorCitpZm5lcSAoLCQoZmlsdGVyIG5vaXB2NiwkKERFQl9CVUlMRF9PUFRJT05TKSkpCisgICAgIERFQl9DT1BUUyArPSAtRE5PX0lQVjYKK2VuZGlmCisKK2lmbmVxICgsJChmaWx0ZXIgbm90ZnRwLCQoREVCX0JVSUxEX09QVElPTlMpKSkKKyAgICAgREVCX0NPUFRTICs9IC1ETk9fVEZUUAorZW5kaWYKKworaWZuZXEgKCwkKGZpbHRlciBub2RoY3AsJChERUJfQlVJTERfT1BUSU9OUykpKQorICAgICBERUJfQ09QVFMgKz0gLUROT19ESENQCitlbmRpZgorCitpZm5lcSAoLCQoZmlsdGVyIG5vc2NyaXB0LCQoREVCX0JVSUxEX09QVElPTlMpKSkKKyAgICAgREVCX0NPUFRTICs9IC1ETk9fU0NSSVBUCitlbmRpZgorCitpZm5lcSAoLCQoZmlsdGVyIG5vcnRjLCQoREVCX0JVSUxEX09QVElPTlMpKSkKKyAgICAgREVCX0NPUFRTICs9IC1ESEFWRV9CUk9LRU5fUlRDCitlbmRpZgorCitpZm5lcSAoLCQoZmlsdGVyIG5vaTE4biwkKERFQl9CVUlMRF9PUFRJT05TKSkpCisgICAgIFRBUkdFVCA9IGluc3RhbGwKKyAgICAgaWZlcSAoLCQoZmlsdGVyIG5vaWRuLCAkKERFQl9CVUlMRF9PUFRJT05TKSkpCisJREVCX0NPUFRTICs9IC1ESEFWRV9JRE4KKyAgICAgZW5kaWYJCitlbmRpZgorCitpZm5lcSAoLCQoZmlsdGVyIHVzZWx1YSwkKERFQl9CVUlMRF9PUFRJT05TKSkpCisgICAgIERFQl9DT1BUUyArPSAtREhBVkVfTFVBU0NSSVBUCitlbmRpZgorCitpZmVxICgsJChmaWx0ZXIgbm9kbnNzZWMsJChERUJfQlVJTERfT1BUSU9OUykpKQorICAgICBERUJfQ09QVFMgKz0gLURIQVZFX0ROU1NFQworZW5kaWYKKworaWZuZXEgKCQoREVCX0hPU1RfQVJDSF9PUyksbGludXgpCisgICAgICMgRm9yIHN0cmxjcHkgaW4gRnJlZUJTRAorICAgICBMREZMQUdTICs9IC1sYnNkCitlbmRpZgorCitjbGVhbjoKKwkkKGNoZWNrZGlyKQorCXJtIC1yZiBkZWJpYW4vZGFlbW9uIGRlYmlhbi9iYXNlIGRlYmlhbi91dGlscyBkZWJpYW4vKn4gZGViaWFuL2ZpbGVzIGRlYmlhbi9zdWJzdHZhcnMgZGViaWFuL3V0aWxzLXN1YnN0dmFycworCW1ha2UgY2xlYW4KKwltYWtlIC1DIGNvbnRyaWIvd3J0IGNsZWFuCisKK2JpbmFyeS1pbmRlcDoJY2hlY2tyb290CisJJChjaGVja2RpcikKKwlybSAtcmYgZGViaWFuL2RhZW1vbgorCWluc3RhbGwgLW0gNzU1IFwKKwkgICAgICAgIC1kIGRlYmlhbi9kYWVtb24vREVCSUFOIFwKKwkJLWQgZGViaWFuL2RhZW1vbi91c3Ivc2hhcmUvZG9jIFwKKwkgICAgICAgIC1kIGRlYmlhbi9kYWVtb24vZXRjL2luaXQuZCBcCisJCS1kIGRlYmlhbi9kYWVtb24vZXRjL2Ruc21hc3EuZCBcCisJICAgICAgICAtZCBkZWJpYW4vZGFlbW9uL2V0Yy9yZXNvbHZjb25mL3VwZGF0ZS5kIFwKKwkJLWQgZGViaWFuL2RhZW1vbi91c3IvbGliL3Jlc29sdmNvbmYvZHBrZy1ldmVudC5kIFwKKwkgICAgICAgIC1kIGRlYmlhbi9kYWVtb24vZXRjL2RlZmF1bHQgXAorCQktZCBkZWJpYW4vZGFlbW9uL2xpYi9zeXN0ZW1kL3N5c3RlbSBcCisgICAgICAgICAgICAgICAgLWQgZGViaWFuL2RhZW1vbi9ldGMvaW5zc2Vydi5jb25mLmQKKwlpbnN0YWxsIC1tIDY0NCBkZWJpYW4vY29uZmZpbGVzIGRlYmlhbi9kYWVtb24vREVCSUFOCisJaW5zdGFsbCAtbSA3NTUgZGViaWFuL3Bvc3RpbnN0IGRlYmlhbi9wb3N0cm0gZGViaWFuL3ByZXJtIGRlYmlhbi9kYWVtb24vREVCSUFOCisJaW5zdGFsbCAtbSA3NTUgZGViaWFuL2luaXQgZGViaWFuL2RhZW1vbi9ldGMvaW5pdC5kL2Ruc21hc3EKKwlpbnN0YWxsIC1tIDc1NSBkZWJpYW4vcmVzb2x2Y29uZiBkZWJpYW4vZGFlbW9uL2V0Yy9yZXNvbHZjb25mL3VwZGF0ZS5kL2Ruc21hc3EKKwlpbnN0YWxsIC1tIDc1NSBkZWJpYW4vcmVzb2x2Y29uZi1wYWNrYWdlIGRlYmlhbi9kYWVtb24vdXNyL2xpYi9yZXNvbHZjb25mL2Rwa2ctZXZlbnQuZC9kbnNtYXNxCisJaW5zdGFsbCAtbSA2NDQgZGViaWFuL2RlZmF1bHQgZGViaWFuL2RhZW1vbi9ldGMvZGVmYXVsdC9kbnNtYXNxCisJaW5zdGFsbCAtbSA2NDQgZG5zbWFzcS5jb25mLmV4YW1wbGUgZGViaWFuL2RhZW1vbi9ldGMvZG5zbWFzcS5jb25mCisJaW5zdGFsbCAtbSA2NDQgZGViaWFuL3JlYWRtZS5kbnNtYXNxLmQgZGViaWFuL2RhZW1vbi9ldGMvZG5zbWFzcS5kL1JFQURNRQorCWluc3RhbGwgLW0gNjQ0IGRlYmlhbi9zeXN0ZW1kLnNlcnZpY2UgZGViaWFuL2RhZW1vbi9saWIvc3lzdGVtZC9zeXN0ZW0vZG5zbWFzcS5zZXJ2aWNlCisJaW5zdGFsbCAtbSA2NDQgZGViaWFuL2luc3NlcnYgZGViaWFuL2RhZW1vbi9ldGMvaW5zc2Vydi5jb25mLmQvZG5zbWFzcQorCWxuIC1zICQocGFja2FnZSkgZGViaWFuL2RhZW1vbi91c3Ivc2hhcmUvZG9jL2Ruc21hc3EKKwljZCBkZWJpYW4vZGFlbW9uICYmIGZpbmQgLiAtdHlwZSBmICEgLXJlZ2V4ICcuKkRFQklBTi8uKicgLXByaW50ZiAnJVBcMCcgfCB4YXJncyAtcjAgbWQ1c3VtID4gREVCSUFOL21kNXN1bXMJCisJZHBrZy1nZW5jb250cm9sICQoUEFDS0FHRV9WRVJTSU9OKSAtVCAtcGRuc21hc3EgLVBkZWJpYW4vZGFlbW9uCisJY2hvd24gLVIgcm9vdC5yb290IGRlYmlhbi9kYWVtb24KKwljaG1vZCAtUiBnLXdzIGRlYmlhbi9kYWVtb24KKwlkcGtnIC0tYnVpbGQgZGViaWFuL2RhZW1vbiAuLgorCitiaW5hcnktYXJjaDoJY2hlY2tyb290IAorCSQoY2hlY2tkaXIpCisJcm0gLXJmIGRlYmlhbi9iYXNlCisJaW5zdGFsbCAtbSA3NTUgXAorCQktZCBkZWJpYW4vYmFzZS9ERUJJQU4gXAorCQktZCBkZWJpYW4vYmFzZS9ldGMvZGJ1cy0xL3N5c3RlbS5kIFwKKwkgICAgICAgIC1kIGRlYmlhbi9iYXNlL3Vzci9zaGFyZS9kb2MvJChwYWNrYWdlKSBcCisJCS1kIGRlYmlhbi9iYXNlL3Vzci9zaGFyZS9kb2MvJChwYWNrYWdlKS9leGFtcGxlcyBcCisJICAgICAgICAtZCBkZWJpYW4vYmFzZS92YXIvcnVuIFwKKwkJLWQgZGViaWFuL2Jhc2UvdXNyL3NoYXJlLyQocGFja2FnZSkgXAorCSAgICAgICAgLWQgZGViaWFuL2Jhc2UvdmFyL2xpYi9taXNjCisJbWFrZSAkKFRBUkdFVCkgUFJFRklYPS91c3IgREVTVERJUj1gcHdkYC9kZWJpYW4vYmFzZSBDRkxBR1M9IiQoQ0ZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIgQ09QVFM9IiQoREVCX0NPUFRTKSIgQ0M9Z2NjCitpZmVxICgsJChmaW5kc3RyaW5nIG5vZG9jcywkKERFQl9CVUlMRF9PUFRJT05TKSkpCisjIE5lZWQgdG8gcmVtb3ZlIHBheXBhbCBsaW5rcyBpbiBEZWJpYW4gUGFja2FnZSBmb3IgcG9saWN5IHJlYXNvbnMuCisJc2VkIC1lIC9cPEgyXD5Eb25hdGlvbnMvUSAtZSAvaWNvbi5wbmcvZCBkb2MuaHRtbCAtZSAvZmF2aWNvbi5pY28vZCA+ZGViaWFuL2Jhc2UvdXNyL3NoYXJlL2RvYy8kKHBhY2thZ2UpL2RvYy5odG1sCisJZWNobyAiPC9CT0RZPiIgPj5kZWJpYW4vYmFzZS91c3Ivc2hhcmUvZG9jLyQocGFja2FnZSkvZG9jLmh0bWwgCisJaW5zdGFsbCAtbSA2NDQgc2V0dXAuaHRtbCBkZWJpYW4vYmFzZS91c3Ivc2hhcmUvZG9jLyQocGFja2FnZSkvLgorCWluc3RhbGwgLW0gNjQ0IGRuc21hc3EuY29uZi5leGFtcGxlIGRlYmlhbi9iYXNlL3Vzci9zaGFyZS9kb2MvJChwYWNrYWdlKS9leGFtcGxlcy8uCisJaW5zdGFsbCAtbSA2NDQgdHJ1c3QtYW5jaG9ycy5jb25mIGRlYmlhbi9iYXNlL3Vzci9zaGFyZS8kKHBhY2thZ2UpLy4KKwlpbnN0YWxsIC1tIDY0NCBGQVEgZGViaWFuL2Jhc2UvdXNyL3NoYXJlL2RvYy8kKHBhY2thZ2UpLy4KKwlnemlwIC05IGRlYmlhbi9iYXNlL3Vzci9zaGFyZS9kb2MvJChwYWNrYWdlKS9GQVEKKwlpbnN0YWxsIC1tIDY0NCBDSEFOR0VMT0cgZGViaWFuL2Jhc2UvdXNyL3NoYXJlL2RvYy8kKHBhY2thZ2UpL2NoYW5nZWxvZworCWd6aXAgLTkgZGViaWFuL2Jhc2UvdXNyL3NoYXJlL2RvYy8kKHBhY2thZ2UpL2NoYW5nZWxvZworCWluc3RhbGwgLW0gNjQ0IENIQU5HRUxPRy5hcmNoaXZlIGRlYmlhbi9iYXNlL3Vzci9zaGFyZS9kb2MvJChwYWNrYWdlKS9jaGFuZ2Vsb2cuYXJjaGl2ZQorCWd6aXAgLTkgZGViaWFuL2Jhc2UvdXNyL3NoYXJlL2RvYy8kKHBhY2thZ2UpL2NoYW5nZWxvZy5hcmNoaXZlCisJaW5zdGFsbCAtbSA2NDQgZGJ1cy9EQnVzLWludGVyZmFjZSBkZWJpYW4vYmFzZS91c3Ivc2hhcmUvZG9jLyQocGFja2FnZSkvLgorCWd6aXAgLTkgZGViaWFuL2Jhc2UvdXNyL3NoYXJlL2RvYy8kKHBhY2thZ2UpL0RCdXMtaW50ZXJmYWNlCQorZW5kaWYKKwlpbnN0YWxsIC1tIDY0NCBkZWJpYW4vZG5zbWFzcS1iYXNlLmNvbmZmaWxlcyBkZWJpYW4vYmFzZS9ERUJJQU4vY29uZmZpbGVzCisJaW5zdGFsbCAtbSA3NTUgZGViaWFuL2Ruc21hc3EtYmFzZS5wb3N0aW5zdCBkZWJpYW4vYmFzZS9ERUJJQU4vcG9zdGluc3QKKwlpbnN0YWxsIC1tIDc1NSBkZWJpYW4vZG5zbWFzcS1iYXNlLnBvc3RybSAgZGViaWFuL2Jhc2UvREVCSUFOL3Bvc3RybQorCWluc3RhbGwgLW0gNjQ0IGRlYmlhbi9jaGFuZ2Vsb2cgZGViaWFuL2Jhc2UvdXNyL3NoYXJlL2RvYy8kKHBhY2thZ2UpL2NoYW5nZWxvZy5EZWJpYW4KKwlnemlwIC05IGRlYmlhbi9iYXNlL3Vzci9zaGFyZS9kb2MvJChwYWNrYWdlKS9jaGFuZ2Vsb2cuRGViaWFuCisJaW5zdGFsbCAtbSA2NDQgZGViaWFuL3JlYWRtZSBkZWJpYW4vYmFzZS91c3Ivc2hhcmUvZG9jLyQocGFja2FnZSkvUkVBRE1FLkRlYmlhbgorCWluc3RhbGwgLW0gNjQ0IGRlYmlhbi9jb3B5cmlnaHQgZGViaWFuL2Jhc2UvdXNyL3NoYXJlL2RvYy8kKHBhY2thZ2UpL2NvcHlyaWdodAorCWluc3RhbGwgLW0gNjQ0IGRlYmlhbi9kYnVzLmNvbmYgZGViaWFuL2Jhc2UvZXRjL2RidXMtMS9zeXN0ZW0uZC9kbnNtYXNxLmNvbmYKKwlnemlwIC05IGRlYmlhbi9iYXNlL3Vzci9zaGFyZS9tYW4vbWFuOC9kbnNtYXNxLjgKKwlmb3IgZiBpbiBkZWJpYW4vYmFzZS91c3Ivc2hhcmUvbWFuLyo7IGRvIFwKKwkJaWYgWyAtZiAkJGYvbWFuOC9kbnNtYXNxLjggXTsgdGhlbiBcCisgICAgICAgICAgICAgICAgICAgICAgIGd6aXAgLTkgJCRmL21hbjgvZG5zbWFzcS44IDsgXAorICAgICAgICAgICAgICAgIGZpIFwKKwlkb25lCitpZmVxICgsJChmaW5kc3RyaW5nIG5vc3RyaXAsJChERUJfQlVJTERfT1BUSU9OUykpKQorCXN0cmlwIC1SIC5ub3RlIC1SIC5jb21tZW50IGRlYmlhbi9iYXNlL3Vzci9zYmluL2Ruc21hc3EKK2VuZGlmCisJY2QgZGViaWFuL2Jhc2UgJiYgZmluZCAuIC10eXBlIGYgISAtcmVnZXggJy4qREVCSUFOLy4qJyAtcHJpbnRmICclUFwwJyB8IHhhcmdzIC1yMCBtZDVzdW0gPiBERUJJQU4vbWQ1c3VtcworCWRwa2ctc2hsaWJkZXBzIC0td2FybmluZ3M9MSBkZWJpYW4vYmFzZS91c3Ivc2Jpbi9kbnNtYXNxCisJZHBrZy1nZW5jb250cm9sICQoUEFDS0FHRV9WRVJTSU9OKSAtcGRuc21hc3EtYmFzZSAtUGRlYmlhbi9iYXNlCisJY2hvd24gLVIgcm9vdC5yb290IGRlYmlhbi9iYXNlCisJY2htb2QgLVIgZy13cyBkZWJpYW4vYmFzZSAKKwlkcGtnIC0tYnVpbGQgZGViaWFuL2Jhc2UgLi4KKworaWZlcSAoJChERUJfSE9TVF9BUkNIX09TKSxsaW51eCkKKwlybSAtcmYgZGViaWFuL3V0aWxzCisJaW5zdGFsbCAtbSA3NTUgLWQgZGViaWFuL3V0aWxzL0RFQklBTiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1kIGRlYmlhbi91dGlscy91c3Ivc2hhcmUvbWFuL21hbjEgXAorCSAgICAgICAgICAgICAgIC1kIGRlYmlhbi91dGlscy91c3IvYmluIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWQgZGViaWFuL3V0aWxzL3Vzci9zaGFyZS9kb2MvZG5zbWFzcS11dGlscworCW1ha2UgLUMgY29udHJpYi93cnQgUFJFRklYPS91c3IgREVTVERJUj1gcHdkYC9kZWJpYW4vdXRpbHMgQ0ZMQUdTPSIkKENGTEFHUykiIExERkxBR1M9IiQoTERGTEFHUykiIENPUFRTPSIkKERFQl9DT1BUUykiIENDPWdjYworCWluc3RhbGwgLW0gNzU1IGNvbnRyaWIvd3J0L2RoY3BfcmVsZWFzZSBkZWJpYW4vdXRpbHMvdXNyL2Jpbi9kaGNwX3JlbGVhc2UKKwlpbnN0YWxsIC1tIDY0NCBjb250cmliL3dydC9kaGNwX3JlbGVhc2UuMSBkZWJpYW4vdXRpbHMvdXNyL3NoYXJlL21hbi9tYW4xL2RoY3BfcmVsZWFzZS4xCisJZ3ppcCAtOSBkZWJpYW4vdXRpbHMvdXNyL3NoYXJlL21hbi9tYW4xL2RoY3BfcmVsZWFzZS4xCisJaW5zdGFsbCAtbSA3NTUgY29udHJpYi93cnQvZGhjcF9sZWFzZV90aW1lIGRlYmlhbi91dGlscy91c3IvYmluL2RoY3BfbGVhc2VfdGltZQorCWluc3RhbGwgLW0gNjQ0IGNvbnRyaWIvd3J0L2RoY3BfbGVhc2VfdGltZS4xIGRlYmlhbi91dGlscy91c3Ivc2hhcmUvbWFuL21hbjEvZGhjcF9sZWFzZV90aW1lLjEKKwlpbnN0YWxsIC1tIDY0NCBkZWJpYW4vY29weXJpZ2h0IGRlYmlhbi91dGlscy91c3Ivc2hhcmUvZG9jL2Ruc21hc3EtdXRpbHMvY29weXJpZ2h0CisJaW5zdGFsbCAtbSA2NDQgZGViaWFuL2NoYW5nZWxvZyBkZWJpYW4vdXRpbHMvdXNyL3NoYXJlL2RvYy9kbnNtYXNxLXV0aWxzL2NoYW5nZWxvZy5EZWJpYW4KKwlnemlwIC05IGRlYmlhbi91dGlscy91c3Ivc2hhcmUvZG9jL2Ruc21hc3EtdXRpbHMvY2hhbmdlbG9nLkRlYmlhbgorCWd6aXAgLTkgZGViaWFuL3V0aWxzL3Vzci9zaGFyZS9tYW4vbWFuMS9kaGNwX2xlYXNlX3RpbWUuMQoraWZlcSAoLCQoZmluZHN0cmluZyBub3N0cmlwLCQoREVCX0JVSUxEX09QVElPTlMpKSkKKwlzdHJpcCAtUiAubm90ZSAtUiAuY29tbWVudCBkZWJpYW4vdXRpbHMvdXNyL2Jpbi9kaGNwX3JlbGVhc2UKKwlzdHJpcCAtUiAubm90ZSAtUiAuY29tbWVudCBkZWJpYW4vdXRpbHMvdXNyL2Jpbi9kaGNwX2xlYXNlX3RpbWUKK2VuZGlmCQorCWNkIGRlYmlhbi91dGlscyAmJiBmaW5kIC4gLXR5cGUgZiAhIC1yZWdleCAnLipERUJJQU4vLionIC1wcmludGYgJyVQXDAnIHwgeGFyZ3MgLXIwIG1kNXN1bSA+IERFQklBTi9tZDVzdW1zCisJZHBrZy1zaGxpYmRlcHMgLVRkZWJpYW4vdXRpbHMtc3Vic3R2YXJzIGRlYmlhbi91dGlscy91c3IvYmluL2RoY3BfcmVsZWFzZSBkZWJpYW4vdXRpbHMvdXNyL2Jpbi9kaGNwX2xlYXNlX3RpbWUKKwlkcGtnLWdlbmNvbnRyb2wgJChQQUNLQUdFX1ZFUlNJT04pIC1UZGViaWFuL3V0aWxzLXN1YnN0dmFycyAtcGRuc21hc3EtdXRpbHMgLVBkZWJpYW4vdXRpbHMKKwljaG93biAtUiByb290LnJvb3QgZGViaWFuL3V0aWxzCisJY2htb2QgLVIgZy13cyBkZWJpYW4vdXRpbHMgCisJZHBrZyAtLWJ1aWxkIGRlYmlhbi91dGlscyAuLgorZW5kaWYKKworZGVmaW5lIGNoZWNrZGlyCisJdGVzdCAtZiBNYWtlZmlsZSAtYSAtZiBkZWJpYW4vcnVsZXMKK2VuZGVmCisKKyMgQmVsb3cgaGVyZSBpcyBmYWlybHkgZ2VuZXJpYyByZWFsbHkKKworYmluYXJ5OgkJYmluYXJ5LWFyY2ggYmluYXJ5LWluZGVwCisKK2J1aWxkOgkJCitidWlsZC1hcmNoOgorYnVpbGQtaW5kZXA6CisKK2NoZWNrcm9vdDoKKwl0ZXN0IHJvb3QgPSAiYHdob2FtaWAiCisKKy5QSE9OWTogYmluYXJ5IGJpbmFyeS1hcmNoIGJpbmFyeS1pbmRlcCBjbGVhbiBjaGVja3Jvb3QKKworCmRpZmYgLS1naXQgYS9kZWJpYW4vc291cmNlL2Zvcm1hdCBiL2RlYmlhbi9zb3VyY2UvZm9ybWF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzODI3ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vc291cmNlL2Zvcm1hdApAQCAtMCwwICsxIEBACisxLjAKZGlmZiAtLWdpdCBhL2RlYmlhbi9zeXN0ZW1kLnNlcnZpY2UgYi9kZWJpYW4vc3lzdGVtZC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1OTI5ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vc3lzdGVtZC5zZXJ2aWNlCkBAIC0wLDAgKzEsMzIgQEAKK1tVbml0XQorRGVzY3JpcHRpb249ZG5zbWFzcSAtIEEgbGlnaHR3ZWlnaHQgREhDUCBhbmQgY2FjaGluZyBETlMgc2VydmVyCisKK1tTZXJ2aWNlXQorVHlwZT1kYnVzCitCdXNOYW1lPXVrLm9yZy50aGVrZWxsZXlzLmRuc21hc3EKKworIyBUZXN0IHRoZSBjb25maWcgZmlsZSBhbmQgcmVmdXNlIHN0YXJ0aW5nIGlmIGl0IGlzIG5vdCB2YWxpZC4KK0V4ZWNTdGFydFByZT0vdXNyL3NiaW4vZG5zbWFzcSAtLXRlc3QKKworIyBXZSBydW4gZG5zbWFzcSB2aWEgdGhlIC9ldGMvaW5pdC5kL2Ruc21hc3Egc2NyaXB0IHdoaWNoIGFjdHMgYXMgYQorIyB3cmFwcGVyIHBpY2tpbmcgdXAgZXh0cmEgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgdGhlbiBleGVjcyBkbnNtYXNxCisjIGl0c2VsZiwgd2hlbiBjYWxsZWQgd2l0aCB0aGUgInN5c3RlbWQtZXhlYyIgZnVuY3Rpb24uCisjCisjIEl0IGFsc28gYWRkcyB0aGUgY29tbWFuZC1saW5lIGZsYWdzCisjICAgIC0ta2VlcC1pbi1mb3JlZ3JvdW5kIC0tZW5hYmxlLWRidXMgCisjIHRvIGVuYWJsZSBEQnVzIGJ5IGRlZmF1bHQgYmVjYXVzZSB3ZSB1c2UgREJ1cyBhY3RpdmF0aW9uLgorIworRXhlY1N0YXJ0PS9ldGMvaW5pdC5kL2Ruc21hc3Egc3lzdGVtZC1leGVjCisKKyMgVGhlIHN5c3RlbWQtKi1yZXNvbHZjb25mIGZ1bmN0aW9ucyBjb25maWd1cmUgKGFuZCBkZWNvbmZpZ3VyZSkKKyMgcmVzb2x2Y29uZiB0byB3b3JrIHdpdGggdGhlIGRuc21hc3EgRE5TIHNlcnZlci4gVGhleSdyZSBjYWxsZWQgbGllaworIyB0aGlzIHRvIGdldCBjb3JyZWN0IGVycm9yIGhhbmRsaW5nIChpZSBkb24ndCBzdGFydC1yZXNvbHZjb25mIGlmIHRoZSAKKyMgZG5zbWFzcSBkYWVtb24gZmFpbHMgdG8gc3RhcnQuCitFeGVjU3RhcnRQb3N0PS9ldGMvaW5pdC5kL2Ruc21hc3Egc3lzdGVtZC1zdGFydC1yZXNvbHZjb25mCitFeGVjU3RvcD0vZXRjL2luaXQuZC9kbnNtYXNxIHN5c3RlbWQtc3RvcC1yZXNvbHZjb25mCisKKworRXhlY1JlbG9hZD0vYmluL2tpbGwgLUhVUCAkTUFJTlBJRAorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS9kbnNtYXNxLmNvbmYuZXhhbXBsZSBiL2Ruc21hc3EuY29uZi5leGFtcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZDMwNWQKLS0tIC9kZXYvbnVsbAorKysgYi9kbnNtYXNxLmNvbmYuZXhhbXBsZQpAQCAtMCwwICsxLDY0OCBAQAorIyBDb25maWd1cmF0aW9uIGZpbGUgZm9yIGRuc21hc3EuCisjCisjIEZvcm1hdCBpcyBvbmUgb3B0aW9uIHBlciBsaW5lLCBsZWdhbCBvcHRpb25zIGFyZSB0aGUgc2FtZQorIyBhcyB0aGUgbG9uZyBvcHRpb25zIGxlZ2FsIG9uIHRoZSBjb21tYW5kIGxpbmUuIFNlZQorIyAiL3Vzci9zYmluL2Ruc21hc3EgLS1oZWxwIiBvciAibWFuIDggZG5zbWFzcSIgZm9yIGRldGFpbHMuCisKKyMgTGlzdGVuIG9uIHRoaXMgc3BlY2lmaWMgcG9ydCBpbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCBETlMgcG9ydAorIyAoNTMpLiBTZXR0aW5nIHRoaXMgdG8gemVybyBjb21wbGV0ZWx5IGRpc2FibGVzIEROUyBmdW5jdGlvbiwKKyMgbGVhdmluZyBvbmx5IERIQ1AgYW5kL29yIFRGVFAuCisjcG9ydD01MzUzCisKKyMgVGhlIGZvbGxvd2luZyB0d28gb3B0aW9ucyBtYWtlIHlvdSBhIGJldHRlciBuZXRpemVuLCBzaW5jZSB0aGV5CisjIHRlbGwgZG5zbWFzcSB0byBmaWx0ZXIgb3V0IHF1ZXJpZXMgd2hpY2ggdGhlIHB1YmxpYyBETlMgY2Fubm90CisjIGFuc3dlciwgYW5kIHdoaWNoIGxvYWQgdGhlIHNlcnZlcnMgKGVzcGVjaWFsbHkgdGhlIHJvb3Qgc2VydmVycykKKyMgdW5uZWNlc3NhcmlseS4gSWYgeW91IGhhdmUgYSBkaWFsLW9uLWRlbWFuZCBsaW5rIHRoZXkgYWxzbyBzdG9wCisjIHRoZXNlIHJlcXVlc3RzIGZyb20gYnJpbmdpbmcgdXAgdGhlIGxpbmsgdW5uZWNlc3NhcmlseS4KKworIyBOZXZlciBmb3J3YXJkIHBsYWluIG5hbWVzICh3aXRob3V0IGEgZG90IG9yIGRvbWFpbiBwYXJ0KQorI2RvbWFpbi1uZWVkZWQKKyMgTmV2ZXIgZm9yd2FyZCBhZGRyZXNzZXMgaW4gdGhlIG5vbi1yb3V0ZWQgYWRkcmVzcyBzcGFjZXMuCisjYm9ndXMtcHJpdgorCisjIFVuY29tbWVudCB0aGVzZSB0byBlbmFibGUgRE5TU0VDIHZhbGlkYXRpb24gYW5kIGNhY2hpbmc6CisjIChSZXF1aXJlcyBkbnNtYXNxIHRvIGJlIGJ1aWx0IHdpdGggRE5TU0VDIG9wdGlvbi4pCisjY29uZi1maWxlPSUlUFJFRklYJSUvc2hhcmUvZG5zbWFzcS90cnVzdC1hbmNob3JzLmNvbmYKKyNkbnNzZWMKKworIyBSZXBsaWVzIHdoaWNoIGFyZSBub3QgRE5TU0VDIHNpZ25lZCBtYXkgYmUgbGVnaXRpbWF0ZSwgYmVjYXVzZSB0aGUgZG9tYWluCisjIGlzIHVuc2lnbmVkLCBvciBtYXkgYmUgZm9yZ2VyaWVzLiBTZXR0aW5nIHRoaXMgb3B0aW9uIHRlbGxzIGRuc21hc3EgdG8KKyMgY2hlY2sgdGhhdCBhbiB1bnNpZ25lZCByZXBseSBpcyBPSywgYnkgZmluZGluZyBhIHNlY3VyZSBwcm9vZiB0aGF0IGEgRFMgCisjIHJlY29yZCBzb21ld2hlcmUgYmV0d2VlbiB0aGUgcm9vdCBhbmQgdGhlIGRvbWFpbiBkb2VzIG5vdCBleGlzdC4gCisjIFRoZSBjb3N0IG9mIHNldHRpbmcgdGhpcyBpcyB0aGF0IGV2ZW4gcXVlcmllcyBpbiB1bnNpZ25lZCBkb21haW5zIHdpbGwgbmVlZAorIyBvbmUgb3IgbW9yZSBleHRyYSBETlMgcXVlcmllcyB0byB2ZXJpZnkuCisjZG5zc2VjLWNoZWNrLXVuc2lnbmVkCisKKyMgVW5jb21tZW50IHRoaXMgdG8gZmlsdGVyIHVzZWxlc3Mgd2luZG93cy1vcmlnaW5hdGVkIEROUyByZXF1ZXN0cworIyB3aGljaCBjYW4gdHJpZ2dlciBkaWFsLW9uLWRlbWFuZCBsaW5rcyBuZWVkbGVzc2x5LgorIyBOb3RlIHRoYXQgKGFtb25nc3Qgb3RoZXIgdGhpbmdzKSB0aGlzIGJsb2NrcyBhbGwgU1JWIHJlcXVlc3RzLAorIyBzbyBkb24ndCB1c2UgaXQgaWYgeW91IHVzZSBlZyBLZXJiZXJvcywgU0lQLCBYTU1QIG9yIEdvb2dsZS10YWxrLgorIyBUaGlzIG9wdGlvbiBvbmx5IGFmZmVjdHMgZm9yd2FyZGluZywgU1JWIHJlY29yZHMgb3JpZ2luYXRpbmcgZm9yCisjIGRuc21hc3EgKHZpYSBzcnYtaG9zdD0gbGluZXMpIGFyZSBub3Qgc3VwcHJlc3NlZCBieSBpdC4KKyNmaWx0ZXJ3aW4yaworCisjIENoYW5nZSB0aGlzIGxpbmUgaWYgeW91IHdhbnQgZG5zIHRvIGdldCBpdHMgdXBzdHJlYW0gc2VydmVycyBmcm9tCisjIHNvbWV3aGVyZSBvdGhlciB0aGF0IC9ldGMvcmVzb2x2LmNvbmYKKyNyZXNvbHYtZmlsZT0KKworIyBCeSAgZGVmYXVsdCwgIGRuc21hc3EgIHdpbGwgIHNlbmQgcXVlcmllcyB0byBhbnkgb2YgdGhlIHVwc3RyZWFtCisjIHNlcnZlcnMgaXQga25vd3MgYWJvdXQgYW5kIHRyaWVzIHRvIGZhdm91ciBzZXJ2ZXJzIHRvIGFyZSAga25vd24KKyMgdG8gIGJlICB1cC4gIFVuY29tbWVudGluZyB0aGlzIGZvcmNlcyBkbnNtYXNxIHRvIHRyeSBlYWNoIHF1ZXJ5CisjIHdpdGggIGVhY2ggIHNlcnZlciAgc3RyaWN0bHkgIGluICB0aGUgIG9yZGVyICB0aGV5ICAgYXBwZWFyICAgaW4KKyMgL2V0Yy9yZXNvbHYuY29uZgorI3N0cmljdC1vcmRlcgorCisjIElmIHlvdSBkb24ndCB3YW50IGRuc21hc3EgdG8gcmVhZCAvZXRjL3Jlc29sdi5jb25mIG9yIGFueSBvdGhlcgorIyBmaWxlLCBnZXR0aW5nIGl0cyBzZXJ2ZXJzIGZyb20gdGhpcyBmaWxlIGluc3RlYWQgKHNlZSBiZWxvdyksIHRoZW4KKyMgdW5jb21tZW50IHRoaXMuCisjbm8tcmVzb2x2CisKKyMgSWYgeW91IGRvbid0IHdhbnQgZG5zbWFzcSB0byBwb2xsIC9ldGMvcmVzb2x2LmNvbmYgb3Igb3RoZXIgcmVzb2x2CisjIGZpbGVzIGZvciBjaGFuZ2VzIGFuZCByZS1yZWFkIHRoZW0gdGhlbiB1bmNvbW1lbnQgdGhpcy4KKyNuby1wb2xsCisKKyMgQWRkIG90aGVyIG5hbWUgc2VydmVycyBoZXJlLCB3aXRoIGRvbWFpbiBzcGVjcyBpZiB0aGV5IGFyZSBmb3IKKyMgbm9uLXB1YmxpYyBkb21haW5zLgorI3NlcnZlcj0vbG9jYWxuZXQvMTkyLjE2OC4wLjEKKworIyBFeGFtcGxlIG9mIHJvdXRpbmcgUFRSIHF1ZXJpZXMgdG8gbmFtZXNlcnZlcnM6IHRoaXMgd2lsbCBzZW5kIGFsbAorIyBhZGRyZXNzLT5uYW1lIHF1ZXJpZXMgZm9yIDE5Mi4xNjguMy8yNCB0byBuYW1lc2VydmVyIDEwLjEuMi4zCisjc2VydmVyPS8zLjE2OC4xOTIuaW4tYWRkci5hcnBhLzEwLjEuMi4zCisKKyMgQWRkIGxvY2FsLW9ubHkgZG9tYWlucyBoZXJlLCBxdWVyaWVzIGluIHRoZXNlIGRvbWFpbnMgYXJlIGFuc3dlcmVkCisjIGZyb20gL2V0Yy9ob3N0cyBvciBESENQIG9ubHkuCisjbG9jYWw9L2xvY2FsbmV0LworCisjIEFkZCBkb21haW5zIHdoaWNoIHlvdSB3YW50IHRvIGZvcmNlIHRvIGFuIElQIGFkZHJlc3MgaGVyZS4KKyMgVGhlIGV4YW1wbGUgYmVsb3cgc2VuZCBhbnkgaG9zdCBpbiBkb3VibGUtY2xpY2submV0IHRvIGEgbG9jYWwKKyMgd2ViLXNlcnZlci4KKyNhZGRyZXNzPS9kb3VibGUtY2xpY2submV0LzEyNy4wLjAuMQorCisjIC0tYWRkcmVzcyAoYW5kIC0tc2VydmVyKSB3b3JrIHdpdGggSVB2NiBhZGRyZXNzZXMgdG9vLgorI2FkZHJlc3M9L3d3dy50aGVrZWxsZXlzLm9yZy51ay9mZTgwOjoyMGQ6NjBmZjpmZTM2OmY4MworCisjIEFkZCB0aGUgSVBzIG9mIGFsbCBxdWVyaWVzIHRvIHlhaG9vLmNvbSwgZ29vZ2xlLmNvbSwgYW5kIHRoZWlyCisjIHN1YmRvbWFpbnMgdG8gdGhlIHZwbiBhbmQgc2VhcmNoIGlwc2V0czoKKyNpcHNldD0veWFob28uY29tL2dvb2dsZS5jb20vdnBuLHNlYXJjaAorCisjIFlvdSBjYW4gY29udHJvbCBob3cgZG5zbWFzcSB0YWxrcyB0byBhIHNlcnZlcjogdGhpcyBmb3JjZXMKKyMgcXVlcmllcyB0byAxMC4xLjIuMyB0byBiZSByb3V0ZWQgdmlhIGV0aDEKKyMgc2VydmVyPTEwLjEuMi4zQGV0aDEKKworIyBhbmQgdGhpcyBzZXRzIHRoZSBzb3VyY2UgKGllIGxvY2FsKSBhZGRyZXNzIHVzZWQgdG8gdGFsayB0bworIyAxMC4xLjIuMyB0byAxOTIuMTY4LjEuMSBwb3J0IDU1ICh0aGVyZSBtdXN0IGJlIGEgaW50ZXJmYWNlIHdpdGggdGhhdAorIyBJUCBvbiB0aGUgbWFjaGluZSwgb2J2aW91c2x5KS4KKyMgc2VydmVyPTEwLjEuMi4zQDE5Mi4xNjguMS4xIzU1CisKKyMgSWYgeW91IHdhbnQgZG5zbWFzcSB0byBjaGFuZ2UgdWlkIGFuZCBnaWQgdG8gc29tZXRoaW5nIG90aGVyCisjIHRoYW4gdGhlIGRlZmF1bHQsIGVkaXQgdGhlIGZvbGxvd2luZyBsaW5lcy4KKyN1c2VyPQorI2dyb3VwPQorCisjIElmIHlvdSB3YW50IGRuc21hc3EgdG8gbGlzdGVuIGZvciBESENQIGFuZCBETlMgcmVxdWVzdHMgb25seSBvbgorIyBzcGVjaWZpZWQgaW50ZXJmYWNlcyAoYW5kIHRoZSBsb29wYmFjaykgZ2l2ZSB0aGUgbmFtZSBvZiB0aGUKKyMgaW50ZXJmYWNlIChlZyBldGgwKSBoZXJlLgorIyBSZXBlYXQgdGhlIGxpbmUgZm9yIG1vcmUgdGhhbiBvbmUgaW50ZXJmYWNlLgorI2ludGVyZmFjZT0KKyMgT3IgeW91IGNhbiBzcGVjaWZ5IHdoaWNoIGludGVyZmFjZSBfbm90XyB0byBsaXN0ZW4gb24KKyNleGNlcHQtaW50ZXJmYWNlPQorIyBPciB3aGljaCB0byBsaXN0ZW4gb24gYnkgYWRkcmVzcyAocmVtZW1iZXIgdG8gaW5jbHVkZSAxMjcuMC4wLjEgaWYKKyMgeW91IHVzZSB0aGlzLikKKyNsaXN0ZW4tYWRkcmVzcz0KKyMgSWYgeW91IHdhbnQgZG5zbWFzcSB0byBwcm92aWRlIG9ubHkgRE5TIHNlcnZpY2Ugb24gYW4gaW50ZXJmYWNlLAorIyBjb25maWd1cmUgaXQgYXMgc2hvd24gYWJvdmUsIGFuZCB0aGVuIHVzZSB0aGUgZm9sbG93aW5nIGxpbmUgdG8KKyMgZGlzYWJsZSBESENQIGFuZCBURlRQIG9uIGl0LgorI25vLWRoY3AtaW50ZXJmYWNlPQorCisjIE9uIHN5c3RlbXMgd2hpY2ggc3VwcG9ydCBpdCwgZG5zbWFzcSBiaW5kcyB0aGUgd2lsZGNhcmQgYWRkcmVzcywKKyMgZXZlbiB3aGVuIGl0IGlzIGxpc3RlbmluZyBvbiBvbmx5IHNvbWUgaW50ZXJmYWNlcy4gSXQgdGhlbiBkaXNjYXJkcworIyByZXF1ZXN0cyB0aGF0IGl0IHNob3VsZG4ndCByZXBseSB0by4gVGhpcyBoYXMgdGhlIGFkdmFudGFnZSBvZgorIyB3b3JraW5nIGV2ZW4gd2hlbiBpbnRlcmZhY2VzIGNvbWUgYW5kIGdvIGFuZCBjaGFuZ2UgYWRkcmVzcy4gSWYgeW91CisjIHdhbnQgZG5zbWFzcSB0byByZWFsbHkgYmluZCBvbmx5IHRoZSBpbnRlcmZhY2VzIGl0IGlzIGxpc3RlbmluZyBvbiwKKyMgdW5jb21tZW50IHRoaXMgb3B0aW9uLiBBYm91dCB0aGUgb25seSB0aW1lIHlvdSBtYXkgbmVlZCB0aGlzIGlzIHdoZW4KKyMgcnVubmluZyBhbm90aGVyIG5hbWVzZXJ2ZXIgb24gdGhlIHNhbWUgbWFjaGluZS4KKyNiaW5kLWludGVyZmFjZXMKKworIyBJZiB5b3UgZG9uJ3Qgd2FudCBkbnNtYXNxIHRvIHJlYWQgL2V0Yy9ob3N0cywgdW5jb21tZW50IHRoZQorIyBmb2xsb3dpbmcgbGluZS4KKyNuby1ob3N0cworIyBvciBpZiB5b3Ugd2FudCBpdCB0byByZWFkIGFub3RoZXIgZmlsZSwgYXMgd2VsbCBhcyAvZXRjL2hvc3RzLCB1c2UKKyMgdGhpcy4KKyNhZGRuLWhvc3RzPS9ldGMvYmFubmVyX2FkZF9ob3N0cworCisjIFNldCB0aGlzIChhbmQgZG9tYWluOiBzZWUgYmVsb3cpIGlmIHlvdSB3YW50IHRvIGhhdmUgYSBkb21haW4KKyMgYXV0b21hdGljYWxseSBhZGRlZCB0byBzaW1wbGUgbmFtZXMgaW4gYSBob3N0cy1maWxlLgorI2V4cGFuZC1ob3N0cworCisjIFNldCB0aGUgZG9tYWluIGZvciBkbnNtYXNxLiB0aGlzIGlzIG9wdGlvbmFsLCBidXQgaWYgaXQgaXMgc2V0LCBpdAorIyBkb2VzIHRoZSBmb2xsb3dpbmcgdGhpbmdzLgorIyAxKSBBbGxvd3MgREhDUCBob3N0cyB0byBoYXZlIGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZXMsIGFzIGxvbmcKKyMgICAgIGFzIHRoZSBkb21haW4gcGFydCBtYXRjaGVzIHRoaXMgc2V0dGluZy4KKyMgMikgU2V0cyB0aGUgImRvbWFpbiIgREhDUCBvcHRpb24gdGhlcmVieSBwb3RlbnRpYWxseSBzZXR0aW5nIHRoZQorIyAgICBkb21haW4gb2YgYWxsIHN5c3RlbXMgY29uZmlndXJlZCBieSBESENQCisjIDMpIFByb3ZpZGVzIHRoZSBkb21haW4gcGFydCBmb3IgImV4cGFuZC1ob3N0cyIKKyNkb21haW49dGhla2VsbGV5cy5vcmcudWsKKworIyBTZXQgYSBkaWZmZXJlbnQgZG9tYWluIGZvciBhIHBhcnRpY3VsYXIgc3VibmV0CisjZG9tYWluPXdpcmVsZXNzLnRoZWtlbGxleXMub3JnLnVrLDE5Mi4xNjguMi4wLzI0CisKKyMgU2FtZSBpZGVhLCBidXQgcmFuZ2UgcmF0aGVyIHRoZW4gc3VibmV0CisjZG9tYWluPXJlc2VydmVkLnRoZWtlbGxleXMub3JnLnVrLDE5Mi42OC4zLjEwMCwxOTIuMTY4LjMuMjAwCisKKyMgVW5jb21tZW50IHRoaXMgdG8gZW5hYmxlIHRoZSBpbnRlZ3JhdGVkIERIQ1Agc2VydmVyLCB5b3UgbmVlZAorIyB0byBzdXBwbHkgdGhlIHJhbmdlIG9mIGFkZHJlc3NlcyBhdmFpbGFibGUgZm9yIGxlYXNlIGFuZCBvcHRpb25hbGx5CisjIGEgbGVhc2UgdGltZS4gSWYgeW91IGhhdmUgbW9yZSB0aGFuIG9uZSBuZXR3b3JrLCB5b3Ugd2lsbCBuZWVkIHRvCisjIHJlcGVhdCB0aGlzIGZvciBlYWNoIG5ldHdvcmsgb24gd2hpY2ggeW91IHdhbnQgdG8gc3VwcGx5IERIQ1AKKyMgc2VydmljZS4KKyNkaGNwLXJhbmdlPTE5Mi4xNjguMC41MCwxOTIuMTY4LjAuMTUwLDEyaAorCisjIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIERIQ1AgcmFuZ2Ugd2hlcmUgdGhlIG5ldG1hc2sgaXMgZ2l2ZW4uIFRoaXMKKyMgaXMgbmVlZGVkIGZvciBuZXR3b3JrcyB3ZSByZWFjaCB0aGUgZG5zbWFzcSBESENQIHNlcnZlciB2aWEgYSByZWxheQorIyBhZ2VudC4gSWYgeW91IGRvbid0IGtub3cgd2hhdCBhIERIQ1AgcmVsYXkgYWdlbnQgaXMsIHlvdSBwcm9iYWJseQorIyBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoaXMuCisjZGhjcC1yYW5nZT0xOTIuMTY4LjAuNTAsMTkyLjE2OC4wLjE1MCwyNTUuMjU1LjI1NS4wLDEyaAorCisjIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIERIQ1AgcmFuZ2Ugd2hpY2ggc2V0cyBhIHRhZywgc28gdGhhdAorIyBzb21lIERIQ1Agb3B0aW9ucyBtYXkgYmUgc2V0IG9ubHkgZm9yIHRoaXMgbmV0d29yay4KKyNkaGNwLXJhbmdlPXNldDpyZWQsMTkyLjE2OC4wLjUwLDE5Mi4xNjguMC4xNTAKKworIyBVc2UgdGhpcyBESENQIHJhbmdlIG9ubHkgd2hlbiB0aGUgdGFnICJncmVlbiIgaXMgc2V0LgorI2RoY3AtcmFuZ2U9dGFnOmdyZWVuLDE5Mi4xNjguMC41MCwxOTIuMTY4LjAuMTUwLDEyaAorCisjIFNwZWNpZnkgYSBzdWJuZXQgd2hpY2ggY2FuJ3QgYmUgdXNlZCBmb3IgZHluYW1pYyBhZGRyZXNzIGFsbG9jYXRpb24sCisjIGlzIGF2YWlsYWJsZSBmb3IgaG9zdHMgd2l0aCBtYXRjaGluZyAtLWRoY3AtaG9zdCBsaW5lcy4gTm90ZSB0aGF0CisjIGRoY3AtaG9zdCBkZWNsYXJhdGlvbnMgd2lsbCBiZSBpZ25vcmVkIHVubGVzcyB0aGVyZSBpcyBhIGRoY3AtcmFuZ2UKKyMgb2Ygc29tZSB0eXBlIGZvciB0aGUgc3VibmV0IGluIHF1ZXN0aW9uLgorIyBJbiB0aGlzIGNhc2UgdGhlIG5ldG1hc2sgaXMgaW1wbGllZCAoaXQgY29tZXMgZnJvbSB0aGUgbmV0d29yaworIyBjb25maWd1cmF0aW9uIG9uIHRoZSBtYWNoaW5lIHJ1bm5pbmcgZG5zbWFzcSkgaXQgaXMgcG9zc2libGUgdG8gZ2l2ZQorIyBhbiBleHBsaWNpdCBuZXRtYXNrIGluc3RlYWQuCisjZGhjcC1yYW5nZT0xOTIuMTY4LjAuMCxzdGF0aWMKKworIyBFbmFibGUgREhDUHY2LiBOb3RlIHRoYXQgdGhlIHByZWZpeC1sZW5ndGggZG9lcyBub3QgbmVlZCB0byBiZSBzcGVjaWZpZWQKKyMgYW5kIGRlZmF1bHRzIHRvIDY0IGlmIG1pc3NpbmcvCisjZGhjcC1yYW5nZT0xMjM0OjoyLCAxMjM0Ojo1MDAsIDY0LCAxMmgKKworIyBEbyBSb3V0ZXIgQWR2ZXJ0aXNlbWVudHMsIEJVVCBOT1QgREhDUCBmb3IgdGhpcyBzdWJuZXQuCisjZGhjcC1yYW5nZT0xMjM0OjosIHJhLW9ubHkgCisKKyMgRG8gUm91dGVyIEFkdmVydGlzZW1lbnRzLCBCVVQgTk9UIERIQ1AgZm9yIHRoaXMgc3VibmV0LCBhbHNvIHRyeSBhbmQKKyMgYWRkIG5hbWVzIHRvIHRoZSBETlMgZm9yIHRoZSBJUHY2IGFkZHJlc3Mgb2YgU0xBQUMtY29uZmlndXJlZCBkdWFsLXN0YWNrIAorIyBob3N0cy4gVXNlIHRoZSBESENQdjQgbGVhc2UgdG8gZGVyaXZlIHRoZSBuYW1lLCBuZXR3b3JrIHNlZ21lbnQgYW5kIAorIyBNQUMgYWRkcmVzcyBhbmQgYXNzdW1lIHRoYXQgdGhlIGhvc3Qgd2lsbCBhbHNvIGhhdmUgYW4KKyMgSVB2NiBhZGRyZXNzIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIFNMQUFDIGFsb2dyaXRobS4KKyNkaGNwLXJhbmdlPTEyMzQ6OiwgcmEtbmFtZXMKKworIyBEbyBSb3V0ZXIgQWR2ZXJ0aXNlbWVudHMsIEJVVCBOT1QgREhDUCBmb3IgdGhpcyBzdWJuZXQuCisjIFNldCB0aGUgbGlmZXRpbWUgdG8gNDYgaG91cnMuIChOb3RlOiBtaW5pbXVtIGxpZmV0aW1lIGlzIDIgaG91cnMuKQorI2RoY3AtcmFuZ2U9MTIzNDo6LCByYS1vbmx5LCA0OGgKKworIyBEbyBESENQIGFuZCBSb3V0ZXIgQWR2ZXJ0aXNlbWVudHMgZm9yIHRoaXMgc3VibmV0LiBTZXQgdGhlIEEgYml0IGluIHRoZSBSQQorIyBzbyB0aGF0IGNsaWVudHMgY2FuIHVzZSBTTEFBQyBhZGRyZXNzZXMgYXMgd2VsbCBhcyBESENQIG9uZXMuCisjZGhjcC1yYW5nZT0xMjM0OjoyLCAxMjM0Ojo1MDAsIHNsYWFjCisKKyMgRG8gUm91dGVyIEFkdmVydGlzZW1lbnRzIGFuZCBzdGF0ZWxlc3MgREhDUCBmb3IgdGhpcyBzdWJuZXQuIENsaWVudHMgd2lsbAorIyBub3QgZ2V0IGFkZHJlc3NlcyBmcm9tIERIQ1AsIGJ1dCB0aGV5IHdpbGwgZ2V0IG90aGVyIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCisjIFRoZXkgd2lsbCB1c2UgU0xBQUMgZm9yIGFkZHJlc3Nlcy4KKyNkaGNwLXJhbmdlPTEyMzQ6OiwgcmEtc3RhdGVsZXNzCisKKyMgRG8gc3RhdGVsZXNzIERIQ1AsIFNMQUFDLCBhbmQgZ2VuZXJhdGUgRE5TIG5hbWVzIGZvciBTTEFBQyBhZGRyZXNzZXMKKyMgZnJvbSBESENQdjQgbGVhc2VzLgorI2RoY3AtcmFuZ2U9MTIzNDo6LCByYS1zdGF0ZWxlc3MsIHJhLW5hbWVzCisKKyMgRG8gcm91dGVyIGFkdmVydGlzZW1lbnRzIGZvciBhbGwgc3VibmV0cyB3aGVyZSB3ZSdyZSBkb2luZyBESENQdjYKKyMgVW5sZXNzIG92ZXJyaWRlbiBieSByYS1zdGF0ZWxlc3MsIHJhLW5hbWVzLCBldCBhbCwgdGhlIHJvdXRlciAKKyMgYWR2ZXJ0aXNlbWVudHMgd2lsbCBoYXZlIHRoZSBNIGFuZCBPIGJpdHMgc2V0LCBzbyB0aGF0IHRoZSBjbGllbnRzCisjIGdldCBhZGRyZXNzZXMgYW5kIGNvbmZpZ3VyYXRpb24gZnJvbSBESENQdjYsIGFuZCB0aGUgQSBiaXQgcmVzZXQsIHNvIHRoZSAKKyMgY2xpZW50cyBkb24ndCB1c2UgU0xBQUMgYWRkcmVzc2VzLgorI2VuYWJsZS1yYQorCisjIFN1cHBseSBwYXJhbWV0ZXJzIGZvciBzcGVjaWZpZWQgaG9zdHMgdXNpbmcgREhDUC4gVGhlcmUgYXJlIGxvdHMKKyMgb2YgdmFsaWQgYWx0ZXJuYXRpdmVzLCBzbyB3ZSB3aWxsIGdpdmUgZXhhbXBsZXMgb2YgZWFjaC4gTm90ZSB0aGF0CisjIElQIGFkZHJlc3NlcyBETyBOT1QgaGF2ZSB0byBiZSBpbiB0aGUgcmFuZ2UgZ2l2ZW4gYWJvdmUsIHRoZXkganVzdAorIyBuZWVkIHRvIGJlIG9uIHRoZSBzYW1lIG5ldHdvcmsuIFRoZSBvcmRlciBvZiB0aGUgcGFyYW1ldGVycyBpbiB0aGVzZQorIyBkbyBub3QgbWF0dGVyLCBpdCdzIHBlcm1pc3NpYmxlIHRvIGdpdmUgbmFtZSwgYWRkcmVzcyBhbmQgTUFDIGluIGFueQorIyBvcmRlci4KKworIyBBbHdheXMgYWxsb2NhdGUgdGhlIGhvc3Qgd2l0aCBFdGhlcm5ldCBhZGRyZXNzIDExOjIyOjMzOjQ0OjU1OjY2CisjIFRoZSBJUCBhZGRyZXNzIDE5Mi4xNjguMC42MAorI2RoY3AtaG9zdD0xMToyMjozMzo0NDo1NTo2NiwxOTIuMTY4LjAuNjAKKworIyBBbHdheXMgc2V0IHRoZSBuYW1lIG9mIHRoZSBob3N0IHdpdGggaGFyZHdhcmUgYWRkcmVzcworIyAxMToyMjozMzo0NDo1NTo2NiB0byBiZSAiZnJlZCIKKyNkaGNwLWhvc3Q9MTE6MjI6MzM6NDQ6NTU6NjYsZnJlZAorCisjIEFsd2F5cyBnaXZlIHRoZSBob3N0IHdpdGggRXRoZXJuZXQgYWRkcmVzcyAxMToyMjozMzo0NDo1NTo2NgorIyB0aGUgbmFtZSBmcmVkIGFuZCBJUCBhZGRyZXNzIDE5Mi4xNjguMC42MCBhbmQgbGVhc2UgdGltZSA0NSBtaW51dGVzCisjZGhjcC1ob3N0PTExOjIyOjMzOjQ0OjU1OjY2LGZyZWQsMTkyLjE2OC4wLjYwLDQ1bQorCisjIEdpdmUgYSBob3N0IHdpdGggRXRoZXJuZXQgYWRkcmVzcyAxMToyMjozMzo0NDo1NTo2NiBvcgorIyAxMjozNDo1Njo3ODo5MDoxMiB0aGUgSVAgYWRkcmVzcyAxOTIuMTY4LjAuNjAuIERuc21hc3Egd2lsbCBhc3N1bWUKKyMgdGhhdCB0aGVzZSB0d28gRXRoZXJuZXQgaW50ZXJmYWNlcyB3aWxsIG5ldmVyIGJlIGluIHVzZSBhdCB0aGUgc2FtZQorIyB0aW1lLCBhbmQgZ2l2ZSB0aGUgSVAgYWRkcmVzcyB0byB0aGUgc2Vjb25kLCBldmVuIGlmIGl0IGlzIGFscmVhZHkKKyMgaW4gdXNlIGJ5IHRoZSBmaXJzdC4gVXNlZnVsIGZvciBsYXB0b3BzIHdpdGggd2lyZWQgYW5kIHdpcmVsZXNzCisjIGFkZHJlc3Nlcy4KKyNkaGNwLWhvc3Q9MTE6MjI6MzM6NDQ6NTU6NjYsMTI6MzQ6NTY6Nzg6OTA6MTIsMTkyLjE2OC4wLjYwCisKKyMgR2l2ZSB0aGUgbWFjaGluZSB3aGljaCBzYXlzIGl0cyBuYW1lIGlzICJiZXJ0IiBJUCBhZGRyZXNzCisjIDE5Mi4xNjguMC43MCBhbmQgYW4gaW5maW5pdGUgbGVhc2UKKyNkaGNwLWhvc3Q9YmVydCwxOTIuMTY4LjAuNzAsaW5maW5pdGUKKworIyBBbHdheXMgZ2l2ZSB0aGUgaG9zdCB3aXRoIGNsaWVudCBpZGVudGlmaWVyIDAxOjAyOjAyOjA0CisjIHRoZSBJUCBhZGRyZXNzIDE5Mi4xNjguMC42MAorI2RoY3AtaG9zdD1pZDowMTowMjowMjowNCwxOTIuMTY4LjAuNjAKKworIyBBbHdheXMgZ2l2ZSB0aGUgaG9zdCB3aXRoIGNsaWVudCBpZGVudGlmaWVyICJtYXJqb3JpZSIKKyMgdGhlIElQIGFkZHJlc3MgMTkyLjE2OC4wLjYwCisjZGhjcC1ob3N0PWlkOm1hcmpvcmllLDE5Mi4xNjguMC42MAorCisjIEVuYWJsZSB0aGUgYWRkcmVzcyBnaXZlbiBmb3IgImp1ZGdlIiBpbiAvZXRjL2hvc3RzCisjIHRvIGJlIGdpdmVuIHRvIGEgbWFjaGluZSBwcmVzZW50aW5nIHRoZSBuYW1lICJqdWRnZSIgd2hlbgorIyBpdCBhc2tzIGZvciBhIERIQ1AgbGVhc2UuCisjZGhjcC1ob3N0PWp1ZGdlCisKKyMgTmV2ZXIgb2ZmZXIgREhDUCBzZXJ2aWNlIHRvIGEgbWFjaGluZSB3aG9zZSBFdGhlcm5ldAorIyBhZGRyZXNzIGlzIDExOjIyOjMzOjQ0OjU1OjY2CisjZGhjcC1ob3N0PTExOjIyOjMzOjQ0OjU1OjY2LGlnbm9yZQorCisjIElnbm9yZSBhbnkgY2xpZW50LWlkIHByZXNlbnRlZCBieSB0aGUgbWFjaGluZSB3aXRoIEV0aGVybmV0CisjIGFkZHJlc3MgMTE6MjI6MzM6NDQ6NTU6NjYuIFRoaXMgaXMgdXNlZnVsIHRvIHByZXZlbnQgYSBtYWNoaW5lCisjIGJlaW5nIHRyZWF0ZWQgZGlmZmVyZW50bHkgd2hlbiBydW5uaW5nIHVuZGVyIGRpZmZlcmVudCBPUydzIG9yCisjIGJldHdlZW4gUFhFIGJvb3QgYW5kIE9TIGJvb3QuCisjZGhjcC1ob3N0PTExOjIyOjMzOjQ0OjU1OjY2LGlkOioKKworIyBTZW5kIGV4dHJhIG9wdGlvbnMgd2hpY2ggYXJlIHRhZ2dlZCBhcyAicmVkIiB0bworIyB0aGUgbWFjaGluZSB3aXRoIEV0aGVybmV0IGFkZHJlc3MgMTE6MjI6MzM6NDQ6NTU6NjYKKyNkaGNwLWhvc3Q9MTE6MjI6MzM6NDQ6NTU6NjYsc2V0OnJlZAorCisjIFNlbmQgZXh0cmEgb3B0aW9ucyB3aGljaCBhcmUgdGFnZ2VkIGFzICJyZWQiIHRvCisjIGFueSBtYWNoaW5lIHdpdGggRXRoZXJuZXQgYWRkcmVzcyBzdGFydGluZyAxMToyMjozMzoKKyNkaGNwLWhvc3Q9MTE6MjI6MzM6KjoqOiosc2V0OnJlZAorCisjIEdpdmUgYSBmaXhlZCBJUHY2IGFkZHJlc3MgYW5kIG5hbWUgdG8gY2xpZW50IHdpdGggCisjIERVSUQgMDA6MDE6MDA6MDE6MTY6ZDI6ODM6ZmM6OTI6ZDQ6MTk6ZTI6ZDg6YjIKKyMgTm90ZSB0aGUgTUFDIGFkZHJlc3NlcyBDQU5OT1QgYmUgdXNlZCB0byBpZGVudGlmeSBESENQdjYgY2xpZW50cy4KKyMgTm90ZSBhbHNvIHRoZSB0aGV5IFtdIGFyb3VuZCB0aGUgSVB2NiBhZGRyZXNzIGFyZSBvYmlsZ2F0b3J5LgorI2RoY3AtaG9zdD1pZDowMDowMTowMDowMToxNjpkMjo4MzpmYzo5MjpkNDoxOTplMjpkODpiMiwgZnJlZCwgWzEyMzQ6OjVdIAorCisjIElnbm9yZSBhbnkgY2xpZW50cyB3aGljaCBhcmUgbm90IHNwZWNpZmllZCBpbiBkaGNwLWhvc3QgbGluZXMKKyMgb3IgL2V0Yy9ldGhlcnMuIEVxdWl2YWxlbnQgdG8gSVNDICJkZW55IHVua25vd24tY2xpZW50cyIuCisjIFRoaXMgcmVsaWVzIG9uIHRoZSBzcGVjaWFsICJrbm93biIgdGFnIHdoaWNoIGlzIHNldCB3aGVuCisjIGEgaG9zdCBpcyBtYXRjaGVkLgorI2RoY3AtaWdub3JlPXRhZzoha25vd24KKworIyBTZW5kIGV4dHJhIG9wdGlvbnMgd2hpY2ggYXJlIHRhZ2dlZCBhcyAicmVkIiB0byBhbnkgbWFjaGluZSB3aG9zZQorIyBESENQIHZlbmRvcmNsYXNzIHN0cmluZyBpbmNsdWRlcyB0aGUgc3Vic3RyaW5nICJMaW51eCIKKyNkaGNwLXZlbmRvcmNsYXNzPXNldDpyZWQsTGludXgKKworIyBTZW5kIGV4dHJhIG9wdGlvbnMgd2hpY2ggYXJlIHRhZ2dlZCBhcyAicmVkIiB0byBhbnkgbWFjaGluZSBvbmUKKyMgb2Ygd2hvc2UgREhDUCB1c2VyY2xhc3Mgc3RyaW5ncyBpbmNsdWRlcyB0aGUgc3Vic3RyaW5nICJhY2NvdW50cyIKKyNkaGNwLXVzZXJjbGFzcz1zZXQ6cmVkLGFjY291bnRzCisKKyMgU2VuZCBleHRyYSBvcHRpb25zIHdoaWNoIGFyZSB0YWdnZWQgYXMgInJlZCIgdG8gYW55IG1hY2hpbmUgd2hvc2UKKyMgTUFDIGFkZHJlc3MgbWF0Y2hlcyB0aGUgcGF0dGVybi4KKyNkaGNwLW1hYz1zZXQ6cmVkLDAwOjYwOjhDOio6KjoqCisKKyMgSWYgdGhpcyBsaW5lIGlzIHVuY29tbWVudGVkLCBkbnNtYXNxIHdpbGwgcmVhZCAvZXRjL2V0aGVycyBhbmQgYWN0CisjIG9uIHRoZSBldGhlcm5ldC1hZGRyZXNzL0lQIHBhaXJzIGZvdW5kIHRoZXJlIGp1c3QgYXMgaWYgdGhleSBoYWQKKyMgYmVlbiBnaXZlbiBhcyAtLWRoY3AtaG9zdCBvcHRpb25zLiBVc2VmdWwgaWYgeW91IGtlZXAKKyMgTUFDLWFkZHJlc3MvaG9zdCBtYXBwaW5ncyB0aGVyZSBmb3Igb3RoZXIgcHVycG9zZXMuCisjcmVhZC1ldGhlcnMKKworIyBTZW5kIG9wdGlvbnMgdG8gaG9zdHMgd2hpY2ggYXNrIGZvciBhIERIQ1AgbGVhc2UuCisjIFNlZSBSRkMgMjEzMiBmb3IgZGV0YWlscyBvZiBhdmFpbGFibGUgb3B0aW9ucy4KKyMgQ29tbW9uIG9wdGlvbnMgY2FuIGJlIGdpdmVuIHRvIGRuc21hc3EgYnkgbmFtZToKKyMgcnVuICJkbnNtYXNxIC0taGVscCBkaGNwIiB0byBnZXQgYSBsaXN0LgorIyBOb3RlIHRoYXQgYWxsIHRoZSBjb21tb24gc2V0dGluZ3MsIHN1Y2ggYXMgbmV0bWFzayBhbmQKKyMgYnJvYWRjYXN0IGFkZHJlc3MsIEROUyBzZXJ2ZXIgYW5kIGRlZmF1bHQgcm91dGUsIGFyZSBnaXZlbgorIyBzYW5lIGRlZmF1bHRzIGJ5IGRuc21hc3EuIFlvdSB2ZXJ5IGxpa2VseSB3aWxsIG5vdCBuZWVkCisjIGFueSBkaGNwLW9wdGlvbnMuIElmIHlvdSB1c2UgV2luZG93cyBjbGllbnRzIGFuZCBTYW1iYSwgdGhlcmUKKyMgYXJlIHNvbWUgb3B0aW9ucyB3aGljaCBhcmUgcmVjb21tZW5kZWQsIHRoZXkgYXJlIGRldGFpbGVkIGF0IHRoZQorIyBlbmQgb2YgdGhpcyBzZWN0aW9uLgorCisjIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHJvdXRlIHN1cHBsaWVkIGJ5IGRuc21hc3EsIHdoaWNoIGFzc3VtZXMgdGhlCisjIHJvdXRlciBpcyB0aGUgc2FtZSBtYWNoaW5lIGFzIHRoZSBvbmUgcnVubmluZyBkbnNtYXNxLgorI2RoY3Atb3B0aW9uPTMsMS4yLjMuNAorCisjIERvIHRoZSBzYW1lIHRoaW5nLCBidXQgdXNpbmcgdGhlIG9wdGlvbiBuYW1lCisjZGhjcC1vcHRpb249b3B0aW9uOnJvdXRlciwxLjIuMy40CisKKyMgT3ZlcnJpZGUgdGhlIGRlZmF1bHQgcm91dGUgc3VwcGxpZWQgYnkgZG5zbWFzcSBhbmQgc2VuZCBubyBkZWZhdWx0CisjIHJvdXRlIGF0IGFsbC4gTm90ZSB0aGF0IHRoaXMgb25seSB3b3JrcyBmb3IgdGhlIG9wdGlvbnMgc2VudCBieQorIyBkZWZhdWx0ICgxLCAzLCA2LCAxMiwgMjgpIHRoZSBzYW1lIGxpbmUgd2lsbCBzZW5kIGEgemVyby1sZW5ndGggb3B0aW9uCisjIGZvciBhbGwgb3RoZXIgb3B0aW9uIG51bWJlcnMuCisjZGhjcC1vcHRpb249MworCisjIFNldCB0aGUgTlRQIHRpbWUgc2VydmVyIGFkZHJlc3NlcyB0byAxOTIuMTY4LjAuNCBhbmQgMTAuMTAuMC41CisjZGhjcC1vcHRpb249b3B0aW9uOm50cC1zZXJ2ZXIsMTkyLjE2OC4wLjQsMTAuMTAuMC41CisKKyMgU2VuZCBESENQdjYgb3B0aW9uLiBOb3RlIFtdIGFyb3VuZCBJUHY2IGFkZHJlc3Nlcy4KKyNkaGNwLW9wdGlvbj1vcHRpb242OmRucy1zZXJ2ZXIsWzEyMzQ6Ojc3XSxbMTIzNDo6ODhdCisKKyMgU2VuZCBESENQdjYgb3B0aW9uIGZvciBuYW1zZXJ2ZXJzIGFzIHRoZSBtYWNoaW5lIHJ1bm5pbmcgCisjIGRuc21hc3EgYW5kIGFub3RoZXIuCisjZGhjcC1vcHRpb249b3B0aW9uNjpkbnMtc2VydmVyLFs6Ol0sWzEyMzQ6Ojg4XQorCisjIEFzayBjbGllbnQgdG8gcG9sbCBmb3Igb3B0aW9uIGNoYW5nZXMgZXZlcnkgc2l4IGhvdXJzLiAoUkZDNDI0MikKKyNkaGNwLW9wdGlvbj1vcHRpb242OmluZm9ybWF0aW9uLXJlZnJlc2gtdGltZSw2aAorCisjIFNldCB0aGUgTlRQIHRpbWUgc2VydmVyIGFkZHJlc3MgdG8gYmUgdGhlIHNhbWUgbWFjaGluZSBhcworIyBpcyBydW5uaW5nIGRuc21hc3EKKyNkaGNwLW9wdGlvbj00MiwwLjAuMC4wCisKKyMgU2V0IHRoZSBOSVMgZG9tYWluIG5hbWUgdG8gIndlbGx5IgorI2RoY3Atb3B0aW9uPTQwLHdlbGx5CisKKyMgU2V0IHRoZSBkZWZhdWx0IHRpbWUtdG8tbGl2ZSB0byA1MAorI2RoY3Atb3B0aW9uPTIzLDUwCisKKyMgU2V0IHRoZSAiYWxsIHN1Ym5ldHMgYXJlIGxvY2FsIiBmbGFnCisjZGhjcC1vcHRpb249MjcsMQorCisjIFNlbmQgdGhlIGV0aGVyYm9vdCBtYWdpYyBmbGFnIGFuZCB0aGVuIGV0aGVyYm9vdCBvcHRpb25zIChhIHN0cmluZykuCisjZGhjcC1vcHRpb249MTI4LGU0OjQ1Ojc0OjY4OjAwOjAwCisjZGhjcC1vcHRpb249MTI5LE5JQz1lZXBybzEwMAorCisjIFNwZWNpZnkgYW4gb3B0aW9uIHdoaWNoIHdpbGwgb25seSBiZSBzZW50IHRvIHRoZSAicmVkIiBuZXR3b3JrCisjIChzZWUgZGhjcC1yYW5nZSBmb3IgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSAicmVkIiBuZXR3b3JrKQorIyBOb3RlIHRoYXQgdGhlIHRhZzogcGFydCBtdXN0IHByZWNlZGUgdGhlIG9wdGlvbjogcGFydC4KKyNkaGNwLW9wdGlvbiA9IHRhZzpyZWQsIG9wdGlvbjpudHAtc2VydmVyLCAxOTIuMTY4LjEuMQorCisjIFRoZSBmb2xsb3dpbmcgREhDUCBvcHRpb25zIHNldCB1cCBkbnNtYXNxIGluIHRoZSBzYW1lIHdheSBhcyBpcyBzcGVjaWZpZWQKKyMgZm9yIHRoZSBJU0MgZGhjcGNkIGluCisjIGh0dHA6Ly93d3cuc2FtYmEub3JnL3NhbWJhL2Z0cC9kb2NzL3RleHRkb2NzL0RIQ1AtU2VydmVyLUNvbmZpZ3VyYXRpb24udHh0CisjIGFkYXB0ZWQgZm9yIGEgdHlwaWNhbCBkbnNtYXNxIGluc3RhbGxhdGlvbiB3aGVyZSB0aGUgaG9zdCBydW5uaW5nCisjIGRuc21hc3EgaXMgYWxzbyB0aGUgaG9zdCBydW5uaW5nIHNhbWJhLgorIyB5b3UgbWF5IHdhbnQgdG8gdW5jb21tZW50IHNvbWUgb3IgYWxsIG9mIHRoZW0gaWYgeW91IHVzZQorIyBXaW5kb3dzIGNsaWVudHMgYW5kIFNhbWJhLgorI2RoY3Atb3B0aW9uPTE5LDAgICAgICAgICAgICMgb3B0aW9uIGlwLWZvcndhcmRpbmcgb2ZmCisjZGhjcC1vcHRpb249NDQsMC4wLjAuMCAgICAgIyBzZXQgbmV0Ymlvcy1vdmVyLVRDUC9JUCBuYW1lc2VydmVyKHMpIGFrYSBXSU5TIHNlcnZlcihzKQorI2RoY3Atb3B0aW9uPTQ1LDAuMC4wLjAgICAgICMgbmV0YmlvcyBkYXRhZ3JhbSBkaXN0cmlidXRpb24gc2VydmVyCisjZGhjcC1vcHRpb249NDYsOCAgICAgICAgICAgIyBuZXRiaW9zIG5vZGUgdHlwZQorCisjIFNlbmQgYW4gZW1wdHkgV1BBRCBvcHRpb24uIFRoaXMgbWF5IGJlIFJFUVVJUkVEIHRvIGdldCB3aW5kb3dzIDcgdG8gYmVoYXZlLgorI2RoY3Atb3B0aW9uPTI1MiwiXG4iCisKKyMgU2VuZCBSRkMtMzM5NyBETlMgZG9tYWluIHNlYXJjaCBESENQIG9wdGlvbi4gV0FSTklORzogWW91ciBESENQIGNsaWVudAorIyBwcm9iYWJseSBkb2Vzbid0IHN1cHBvcnQgdGhpcy4uLi4uLgorI2RoY3Atb3B0aW9uPW9wdGlvbjpkb21haW4tc2VhcmNoLGVuZy5hcHBsZS5jb20sbWFya2V0aW5nLmFwcGxlLmNvbQorCisjIFNlbmQgUkZDLTM0NDIgY2xhc3NsZXNzIHN0YXRpYyByb3V0ZXMgKG5vdGUgdGhlIG5ldG1hc2sgZW5jb2RpbmcpCisjZGhjcC1vcHRpb249MTIxLDE5Mi4xNjguMS4wLzI0LDEuMi4zLjQsMTAuMC4wLjAvOCw1LjYuNy44CisKKyMgU2VuZCB2ZW5kb3ItY2xhc3Mgc3BlY2lmaWMgb3B0aW9ucyBlbmNhcHN1bGF0ZWQgaW4gREhDUCBvcHRpb24gNDMuCisjIFRoZSBtZWFuaW5nIG9mIHRoZSBvcHRpb25zIGlzIGRlZmluZWQgYnkgdGhlIHZlbmRvci1jbGFzcyBzbworIyBvcHRpb25zIGFyZSBzZW50IG9ubHkgd2hlbiB0aGUgY2xpZW50IHN1cHBsaWVkIHZlbmRvciBjbGFzcworIyBtYXRjaGVzIHRoZSBjbGFzcyBnaXZlbiBoZXJlLiAoQSBzdWJzdHJpbmcgbWF0Y2ggaXMgT0ssIHNvICJNU0ZUIgorIyBtYXRjaGVzICJNU0ZUIiBhbmQgIk1TRlQgNS4wIikuIFRoaXMgZXhhbXBsZSBzZXRzIHRoZQorIyBtdGZ0cCBhZGRyZXNzIHRvIDAuMC4wLjAgZm9yIFBYRUNsaWVudHMuCisjZGhjcC1vcHRpb249dmVuZG9yOlBYRUNsaWVudCwxLDAuMC4wLjAKKworIyBTZW5kIG1pY3Jvc29mdC1zcGVjaWZpYyBvcHRpb24gdG8gdGVsbCB3aW5kb3dzIHRvIHJlbGVhc2UgdGhlIERIQ1AgbGVhc2UKKyMgd2hlbiBpdCBzaHV0cyBkb3duLiBOb3RlIHRoZSAiaSIgZmxhZywgdG8gdGVsbCBkbnNtYXNxIHRvIHNlbmQgdGhlCisjIHZhbHVlIGFzIGEgZm91ci1ieXRlIGludGVnZXIgLSB0aGF0J3Mgd2hhdCBtaWNyb3NvZnQgd2FudHMuIFNlZQorIyBodHRwOi8vdGVjaG5ldDIubWljcm9zb2Z0LmNvbS9XaW5kb3dzU2VydmVyL2VuL2xpYnJhcnkvYTcwZjFiYjctZDJkNC00OWYwLTk2ZDYtNGI3NDE0ZWNmYWFlMTAzMy5tc3B4P21mcj10cnVlCisjZGhjcC1vcHRpb249dmVuZG9yOk1TRlQsMiwxaQorCisjIFNlbmQgdGhlIEVuY2Fwc3VsYXRlZC12ZW5kb3ItY2xhc3MgSUQgbmVlZGVkIGJ5IHNvbWUgY29uZmlndXJhdGlvbnMgb2YKKyMgRXRoZXJib290IHRvIGFsbG93IGlzIHRvIHJlY29nbmlzZSB0aGUgREhDUCBzZXJ2ZXIuCisjZGhjcC1vcHRpb249dmVuZG9yOkV0aGVyYm9vdCw2MCwiRXRoZXJib290IgorCisjIFNlbmQgb3B0aW9ucyB0byBQWEVMaW51eC4gTm90ZSB0aGF0IHdlIG5lZWQgdG8gc2VuZCB0aGUgb3B0aW9ucyBldmVuCisjIHRob3VnaCB0aGV5IGRvbid0IGFwcGVhciBpbiB0aGUgcGFyYW1ldGVyIHJlcXVlc3QgbGlzdCwgc28gd2UgbmVlZAorIyB0byB1c2UgZGhjcC1vcHRpb24tZm9yY2UgaGVyZS4KKyMgU2VlIGh0dHA6Ly9zeXNsaW51eC56eXRvci5jb20vcHhlLnBocCNzcGVjaWFsIGZvciBkZXRhaWxzLgorIyBNYWdpYyBudW1iZXIgLSBuZWVkZWQgYmVmb3JlIGFueXRoaW5nIGVsc2UgaXMgcmVjb2duaXNlZAorI2RoY3Atb3B0aW9uLWZvcmNlPTIwOCxmMTowMDo3NDo3ZQorIyBDb25maWd1cmF0aW9uIGZpbGUgbmFtZQorI2RoY3Atb3B0aW9uLWZvcmNlPTIwOSxjb25maWdzL2NvbW1vbgorIyBQYXRoIHByZWZpeAorI2RoY3Atb3B0aW9uLWZvcmNlPTIxMCwvdGZ0cGJvb3QvcHhlbGludXgvZmlsZXMvCisjIFJlYm9vdCB0aW1lLiAoTm90ZSAnaScgdG8gc2VuZCAzMi1iaXQgdmFsdWUpCisjZGhjcC1vcHRpb24tZm9yY2U9MjExLDMwaQorCisjIFNldCB0aGUgYm9vdCBmaWxlbmFtZSBmb3IgbmV0Ym9vdC9QWEUuIFlvdSB3aWxsIG9ubHkgbmVlZAorIyB0aGlzIGlzIHlvdSB3YW50IHRvIGJvb3QgbWFjaGluZXMgb3ZlciB0aGUgbmV0d29yayBhbmQgeW91IHdpbGwgbmVlZAorIyBhIFRGVFAgc2VydmVyOyBlaXRoZXIgZG5zbWFzcSdzIGJ1aWx0IGluIFRGVFAgc2VydmVyIG9yIGFuCisjIGV4dGVybmFsIG9uZS4gKFNlZSBiZWxvdyBmb3IgaG93IHRvIGVuYWJsZSB0aGUgVEZUUCBzZXJ2ZXIuKQorI2RoY3AtYm9vdD1weGVsaW51eC4wCisKKyMgVGhlIHNhbWUgYXMgYWJvdmUsIGJ1dCB1c2UgY3VzdG9tIHRmdHAtc2VydmVyIGluc3RlYWQgbWFjaGluZSBydW5uaW5nIGRuc21hc3EKKyNkaGNwLWJvb3Q9cHhlbGludXgsc2VydmVyLm5hbWUsMTkyLjE2OC4xLjEwMAorCisjIEJvb3QgZm9yIEV0aGVyYm9vdCBnUFhFLiBUaGUgaWRlYSBpcyB0byBzZW5kIHR3byBkaWZmZXJlbnQKKyMgZmlsZW5hbWVzLCB0aGUgZmlyc3QgbG9hZHMgZ1BYRSwgYW5kIHRoZSBzZWNvbmQgdGVsbHMgZ1BYRSB3aGF0IHRvCisjIGxvYWQuIFRoZSBkaGNwLW1hdGNoIHNldHMgdGhlIGdweGUgdGFnIGZvciByZXF1ZXN0cyBmcm9tIGdQWEUuCisjZGhjcC1tYXRjaD1zZXQ6Z3B4ZSwxNzUgIyBnUFhFIHNlbmRzIGEgMTc1IG9wdGlvbi4KKyNkaGNwLWJvb3Q9dGFnOiFncHhlLHVuZGlvbmx5LmtweGUKKyNkaGNwLWJvb3Q9bXlib290aW1hZ2UKKworIyBFbmNhcHN1bGF0ZWQgb3B0aW9ucyBmb3IgRXRoZXJib290IGdQWEUuIEFsbCB0aGUgb3B0aW9ucyBhcmUKKyMgZW5jYXBzdWxhdGVkIHdpdGhpbiBvcHRpb24gMTc1CisjZGhjcC1vcHRpb249ZW5jYXA6MTc1LCAxLCA1YiAgICAgICAgICMgcHJpb3JpdHkgY29kZQorI2RoY3Atb3B0aW9uPWVuY2FwOjE3NSwgMTc2LCAxYiAgICAgICAjIG5vLXByb3h5ZGhjcAorI2RoY3Atb3B0aW9uPWVuY2FwOjE3NSwgMTc3LCBzdHJpbmcgICAjIGJ1cy1pZAorI2RoY3Atb3B0aW9uPWVuY2FwOjE3NSwgMTg5LCAxYiAgICAgICAjIEJJT1MgZHJpdmUgY29kZQorI2RoY3Atb3B0aW9uPWVuY2FwOjE3NSwgMTkwLCB1c2VyICAgICAjIGlTQ1NJIHVzZXJuYW1lCisjZGhjcC1vcHRpb249ZW5jYXA6MTc1LCAxOTEsIHBhc3MgICAgICMgaVNDU0kgcGFzc3dvcmQKKworIyBUZXN0IGZvciB0aGUgYXJjaGl0ZWN0dXJlIG9mIGEgbmV0Ym9vdCBjbGllbnQuIFBYRSBjbGllbnRzIGFyZQorIyBzdXBwb3NlZCB0byBzZW5kIHRoZWlyIGFyY2hpdGVjdHVyZSBhcyBvcHRpb24gOTMuIChTZWUgUkZDIDQ1NzgpCisjZGhjcC1tYXRjaD1wZWVjZWVzLCBvcHRpb246Y2xpZW50LWFyY2gsIDAgI3g4Ni0zMgorI2RoY3AtbWF0Y2g9aXRhbmljcywgb3B0aW9uOmNsaWVudC1hcmNoLCAyICNJQTY0CisjZGhjcC1tYXRjaD1oYW1tZXJzLCBvcHRpb246Y2xpZW50LWFyY2gsIDYgI3g4Ni02NAorI2RoY3AtbWF0Y2g9bWFjdGVscywgb3B0aW9uOmNsaWVudC1hcmNoLCA3ICNFRkkgeDg2LTY0CisKKyMgRG8gcmVhbCBQWEUsIHJhdGhlciB0aGFuIGp1c3QgYm9vdGluZyBhIHNpbmdsZSBmaWxlLCB0aGlzIGlzIGFuCisjIGFsdGVybmF0aXZlIHRvIGRoY3AtYm9vdC4KKyNweGUtcHJvbXB0PSJXaGF0IHN5c3RlbSBzaGFsbCBJIG5ldGJvb3Q/IgorIyBvciB3aXRoIHRpbWVvdXQgYmVmb3JlIGZpcnN0IGF2YWlsYWJsZSBhY3Rpb24gaXMgdGFrZW46CisjcHhlLXByb21wdD0iUHJlc3MgRjggZm9yIG1lbnUuIiwgNjAKKworIyBBdmFpbGFibGUgYm9vdCBzZXJ2aWNlcy4gZm9yIFBYRS4KKyNweGUtc2VydmljZT14ODZQQywgIkJvb3QgZnJvbSBsb2NhbCBkaXNrIgorCisjIExvYWRzIDx0ZnRwLXJvb3Q+L3B4ZWxpbnV4LjAgZnJvbSBkbnNtYXNxIFRGVFAgc2VydmVyLgorI3B4ZS1zZXJ2aWNlPXg4NlBDLCAiSW5zdGFsbCBMaW51eCIsIHB4ZWxpbnV4CisKKyMgTG9hZHMgPHRmdHAtcm9vdD4vcHhlbGludXguMCBmcm9tIFRGVFAgc2VydmVyIGF0IDEuMi4zLjQuCisjIEJld2FyZSB0aGlzIGZhaWxzIG9uIG9sZCBQWEUgUk9NUy4KKyNweGUtc2VydmljZT14ODZQQywgIkluc3RhbGwgTGludXgiLCBweGVsaW51eCwgMS4yLjMuNAorCisjIFVzZSBib290c2VydmVyIG9uIG5ldHdvcmssIGZvdW5kIG15IG11bHRpY2FzdCBvciBicm9hZGNhc3QuCisjcHhlLXNlcnZpY2U9eDg2UEMsICJJbnN0YWxsIHdpbmRvd3MgZnJvbSBSSVMgc2VydmVyIiwgMQorCisjIFVzZSBib290c2VydmVyIGF0IGEga25vd24gSVAgYWRkcmVzcy4KKyNweGUtc2VydmljZT14ODZQQywgIkluc3RhbGwgd2luZG93cyBmcm9tIFJJUyBzZXJ2ZXIiLCAxLCAxLjIuMy40CisKKyMgSWYgeW91IGhhdmUgbXVsdGljYXN0LUZUUCBhdmFpbGFibGUsCisjIGluZm9ybWF0aW9uIGZvciB0aGF0IGNhbiBiZSBwYXNzZWQgaW4gYSBzaW1pbGFyIHdheSB1c2luZyBvcHRpb25zIDEKKyMgdG8gNS4gU2VlIHBhZ2UgMTkgb2YKKyMgaHR0cDovL2Rvd25sb2FkLmludGVsLmNvbS9kZXNpZ24vYXJjaGl2ZXMvd2ZtL2Rvd25sb2Fkcy9weGVzcGVjLnBkZgorCisKKyMgRW5hYmxlIGRuc21hc3EncyBidWlsdC1pbiBURlRQIHNlcnZlcgorI2VuYWJsZS10ZnRwCisKKyMgU2V0IHRoZSByb290IGRpcmVjdG9yeSBmb3IgZmlsZXMgYXZhaWxhYmxlIHZpYSBGVFAuCisjdGZ0cC1yb290PS92YXIvZnRwZAorCisjIE1ha2UgdGhlIFRGVFAgc2VydmVyIG1vcmUgc2VjdXJlOiB3aXRoIHRoaXMgc2V0LCBvbmx5IGZpbGVzIG93bmVkIGJ5CisjIHRoZSB1c2VyIGRuc21hc3EgaXMgcnVubmluZyBhcyB3aWxsIGJlIHNlbmQgb3ZlciB0aGUgbmV0LgorI3RmdHAtc2VjdXJlCisKKyMgVGhpcyBvcHRpb24gc3RvcHMgZG5zbWFzcSBmcm9tIG5lZ290aWF0aW5nIGEgbGFyZ2VyIGJsb2Nrc2l6ZSBmb3IgVEZUUAorIyB0cmFuc2ZlcnMuIEl0IHdpbGwgc2xvdyB0aGluZ3MgZG93biwgYnV0IG1heSByZXNjdWUgc29tZSBicm9rZW4gVEZUUAorIyBjbGllbnRzLgorI3RmdHAtbm8tYmxvY2tzaXplCisKKyMgU2V0IHRoZSBib290IGZpbGUgbmFtZSBvbmx5IHdoZW4gdGhlICJyZWQiIHRhZyBpcyBzZXQuCisjZGhjcC1ib290PXRhZzpyZWQscHhlbGludXgucmVkLW5ldAorCisjIEFuIGV4YW1wbGUgb2YgZGhjcC1ib290IHdpdGggYW4gZXh0ZXJuYWwgVEZUUCBzZXJ2ZXI6IHRoZSBuYW1lIGFuZCBJUAorIyBhZGRyZXNzIG9mIHRoZSBzZXJ2ZXIgYXJlIGdpdmVuIGFmdGVyIHRoZSBmaWxlbmFtZS4KKyMgQ2FuIGZhaWwgd2l0aCBvbGQgUFhFIFJPTVMuIE92ZXJyaWRkZW4gYnkgLS1weGUtc2VydmljZS4KKyNkaGNwLWJvb3Q9L3Zhci9mdHBkL3B4ZWxpbnV4LjAsYm9vdGhvc3QsMTkyLjE2OC4wLjMKKworIyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgZXh0ZXJuYWwgdGZ0cCBzZXJ2ZXJzIGhhdmluZyBhIHNhbWUgbmFtZQorIyAodXNpbmcgL2V0Yy9ob3N0cykgdGhlbiB0aGF0IG5hbWUgY2FuIGJlIHNwZWNpZmllZCBhcyB0aGUKKyMgdGZ0cF9zZXJ2ZXJuYW1lICh0aGUgdGhpcmQgb3B0aW9uIHRvIGRoY3AtYm9vdCkgYW5kIGluIHRoYXQKKyMgY2FzZSBkbnNtYXNxIHJlc29sdmVzIHRoaXMgbmFtZSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0YW50IElQCisjIGFkZHJlc3NlcyBpbiByb3VuZCByb2JpbiBmYXNpb24uIFRoaXMgZmFjaWxpdHkgY2FuIGJlIHVzZWQgdG8KKyMgbG9hZCBiYWxhbmNlIHRoZSB0ZnRwIGxvYWQgYW1vbmcgYSBzZXQgb2Ygc2VydmVycy4KKyNkaGNwLWJvb3Q9L3Zhci9mdHBkL3B4ZWxpbnV4LjAsYm9vdGhvc3QsdGZ0cF9zZXJ2ZXJfbmFtZQorCisjIFNldCB0aGUgbGltaXQgb24gREhDUCBsZWFzZXMsIHRoZSBkZWZhdWx0IGlzIDE1MAorI2RoY3AtbGVhc2UtbWF4PTE1MAorCisjIFRoZSBESENQIHNlcnZlciBuZWVkcyBzb21ld2hlcmUgb24gZGlzayB0byBrZWVwIGl0cyBsZWFzZSBkYXRhYmFzZS4KKyMgVGhpcyBkZWZhdWx0cyB0byBhIHNhbmUgbG9jYXRpb24sIGJ1dCBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgaXQsIHVzZQorIyB0aGUgbGluZSBiZWxvdy4KKyNkaGNwLWxlYXNlZmlsZT0vdmFyL2xpYi9taXNjL2Ruc21hc3EubGVhc2VzCisKKyMgU2V0IHRoZSBESENQIHNlcnZlciB0byBhdXRob3JpdGF0aXZlIG1vZGUuIEluIHRoaXMgbW9kZSBpdCB3aWxsIGJhcmdlIGluCisjIGFuZCB0YWtlIG92ZXIgdGhlIGxlYXNlIGZvciBhbnkgY2xpZW50IHdoaWNoIGJyb2FkY2FzdHMgb24gdGhlIG5ldHdvcmssCisjIHdoZXRoZXIgaXQgaGFzIGEgcmVjb3JkIG9mIHRoZSBsZWFzZSBvciBub3QuIFRoaXMgYXZvaWRzIGxvbmcgdGltZW91dHMKKyMgd2hlbiBhIG1hY2hpbmUgd2FrZXMgdXAgb24gYSBuZXcgbmV0d29yay4gRE8gTk9UIGVuYWJsZSB0aGlzIGlmIHRoZXJlJ3MKKyMgdGhlIHNsaWdodGVzdCBjaGFuY2UgdGhhdCB5b3UgbWlnaHQgZW5kIHVwIGFjY2lkZW50YWxseSBjb25maWd1cmluZyBhIERIQ1AKKyMgc2VydmVyIGZvciB5b3VyIGNhbXB1cy9jb21wYW55IGFjY2lkZW50YWxseS4gVGhlIElTQyBzZXJ2ZXIgdXNlcworIyB0aGUgc2FtZSBvcHRpb24sIGFuZCB0aGlzIFVSTCBwcm92aWRlcyBtb3JlIGluZm9ybWF0aW9uOgorIyBodHRwOi8vd3d3LmlzYy5vcmcvZmlsZXMvYXV0aC5odG1sCisjZGhjcC1hdXRob3JpdGF0aXZlCisKKyMgUnVuIGFuIGV4ZWN1dGFibGUgd2hlbiBhIERIQ1AgbGVhc2UgaXMgY3JlYXRlZCBvciBkZXN0cm95ZWQuCisjIFRoZSBhcmd1bWVudHMgc2VudCB0byB0aGUgc2NyaXB0IGFyZSAiYWRkIiBvciAiZGVsIiwKKyMgdGhlbiB0aGUgTUFDIGFkZHJlc3MsIHRoZSBJUCBhZGRyZXNzIGFuZCBmaW5hbGx5IHRoZSBob3N0bmFtZQorIyBpZiB0aGVyZSBpcyBvbmUuCisjZGhjcC1zY3JpcHQ9L2Jpbi9lY2hvCisKKyMgU2V0IHRoZSBjYWNoZXNpemUgaGVyZS4KKyNjYWNoZS1zaXplPTE1MAorCisjIElmIHlvdSB3YW50IHRvIGRpc2FibGUgbmVnYXRpdmUgY2FjaGluZywgdW5jb21tZW50IHRoaXMuCisjbm8tbmVnY2FjaGUKKworIyBOb3JtYWxseSByZXNwb25zZXMgd2hpY2ggY29tZSBmcm9tIC9ldGMvaG9zdHMgYW5kIHRoZSBESENQIGxlYXNlCisjIGZpbGUgaGF2ZSBUaW1lLVRvLUxpdmUgc2V0IGFzIHplcm8sIHdoaWNoIGNvbnZlbnRpb25hbGx5IG1lYW5zCisjIGRvIG5vdCBjYWNoZSBmdXJ0aGVyLiBJZiB5b3UgYXJlIGhhcHB5IHRvIHRyYWRlIGxvd2VyIGxvYWQgb24gdGhlCisjIHNlcnZlciBmb3IgcG90ZW50aWFsbHkgc3RhbGUgZGF0ZSwgeW91IGNhbiBzZXQgYSB0aW1lLXRvLWxpdmUgKGluCisjIHNlY29uZHMpIGhlcmUuCisjbG9jYWwtdHRsPQorCisjIElmIHlvdSB3YW50IGRuc21hc3EgdG8gZGV0ZWN0IGF0dGVtcHRzIGJ5IFZlcmlzaWduIHRvIHNlbmQgcXVlcmllcworIyB0byB1bnJlZ2lzdGVyZWQgLmNvbSBhbmQgLm5ldCBob3N0cyB0byBpdHMgc2l0ZWZpbmRlciBzZXJ2aWNlIGFuZAorIyBoYXZlIGRuc21hc3EgaW5zdGVhZCByZXR1cm4gdGhlIGNvcnJlY3QgTlhET01BSU4gcmVzcG9uc2UsIHVuY29tbWVudAorIyB0aGlzIGxpbmUuIFlvdSBjYW4gYWRkIHNpbWlsYXIgbGluZXMgdG8gZG8gdGhlIHNhbWUgZm9yIG90aGVyCisjIHJlZ2lzdHJpZXMgd2hpY2ggaGF2ZSBpbXBsZW1lbnRlZCB3aWxkY2FyZCBBIHJlY29yZHMuCisjYm9ndXMtbnhkb21haW49NjQuOTQuMTEwLjExCisKKyMgSWYgeW91IHdhbnQgdG8gZml4IHVwIEROUyByZXN1bHRzIGZyb20gdXBzdHJlYW0gc2VydmVycywgdXNlIHRoZQorIyBhbGlhcyBvcHRpb24uIFRoaXMgb25seSB3b3JrcyBmb3IgSVB2NC4KKyMgVGhpcyBhbGlhcyBtYWtlcyBhIHJlc3VsdCBvZiAxLjIuMy40IGFwcGVhciBhcyA1LjYuNy44CisjYWxpYXM9MS4yLjMuNCw1LjYuNy44CisjIGFuZCB0aGlzIG1hcHMgMS4yLjMueCB0byA1LjYuNy54CisjYWxpYXM9MS4yLjMuMCw1LjYuNy4wLDI1NS4yNTUuMjU1LjAKKyMgYW5kIHRoaXMgbWFwcyAxOTIuMTY4LjAuMTAtPjE5Mi4xNjguMC40MCB0byAxMC4wLjAuMTAtPjEwLjAuMC40MAorI2FsaWFzPTE5Mi4xNjguMC4xMC0xOTIuMTY4LjAuNDAsMTAuMC4wLjAsMjU1LjI1NS4yNTUuMAorCisjIENoYW5nZSB0aGVzZSBsaW5lcyBpZiB5b3Ugd2FudCBkbnNtYXNxIHRvIHNlcnZlIE1YIHJlY29yZHMuCisKKyMgUmV0dXJuIGFuIE1YIHJlY29yZCBuYW1lZCAibWFpbGRvbWFpbi5jb20iIHdpdGggdGFyZ2V0CisjIHNlcnZlcm1hY2hpbmUuY29tIGFuZCBwcmVmZXJlbmNlIDUwCisjbXgtaG9zdD1tYWlsZG9tYWluLmNvbSxzZXJ2ZXJtYWNoaW5lLmNvbSw1MAorCisjIFNldCB0aGUgZGVmYXVsdCB0YXJnZXQgZm9yIE1YIHJlY29yZHMgY3JlYXRlZCB1c2luZyB0aGUgbG9jYWxteCBvcHRpb24uCisjbXgtdGFyZ2V0PXNlcnZlcm1hY2hpbmUuY29tCisKKyMgUmV0dXJuIGFuIE1YIHJlY29yZCBwb2ludGluZyB0byB0aGUgbXgtdGFyZ2V0IGZvciBhbGwgbG9jYWwKKyMgbWFjaGluZXMuCisjbG9jYWxteAorCisjIFJldHVybiBhbiBNWCByZWNvcmQgcG9pbnRpbmcgdG8gaXRzZWxmIGZvciBhbGwgbG9jYWwgbWFjaGluZXMuCisjc2VsZm14CisKKyMgQ2hhbmdlIHRoZSBmb2xsb3dpbmcgbGluZXMgaWYgeW91IHdhbnQgZG5zbWFzcSB0byBzZXJ2ZSBTUlYKKyMgcmVjb3Jkcy4gIFRoZXNlIGFyZSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gc2VydmUgbGRhcCByZXF1ZXN0cyBmb3IKKyMgQWN0aXZlIERpcmVjdG9yeSBhbmQgb3RoZXIgd2luZG93cy1vcmlnaW5hdGVkIEROUyByZXF1ZXN0cy4KKyMgU2VlIFJGQyAyNzgyLgorIyBZb3UgbWF5IGFkZCBtdWx0aXBsZSBzcnYtaG9zdCBsaW5lcy4KKyMgVGhlIGZpZWxkcyBhcmUgPG5hbWU+LDx0YXJnZXQ+LDxwb3J0Piw8cHJpb3JpdHk+LDx3ZWlnaHQ+CisjIElmIHRoZSBkb21haW4gcGFydCBpZiBtaXNzaW5nIGZyb20gdGhlIG5hbWUgKHNvIHRoYXQgaXMganVzdCBoYXMgdGhlCisjIHNlcnZpY2UgYW5kIHByb3RvY29sIHNlY3Rpb25zKSB0aGVuIHRoZSBkb21haW4gZ2l2ZW4gYnkgdGhlIGRvbWFpbj0KKyMgY29uZmlnIG9wdGlvbiBpcyB1c2VkLiAoTm90ZSB0aGF0IGV4cGFuZC1ob3N0cyBkb2VzIG5vdCBuZWVkIHRvIGJlCisjIHNldCBmb3IgdGhpcyB0byB3b3JrLikKKworIyBBIFNSViByZWNvcmQgc2VuZGluZyBMREFQIGZvciB0aGUgZXhhbXBsZS5jb20gZG9tYWluIHRvCisjIGxkYXBzZXJ2ZXIuZXhhbXBsZS5jb20gcG9ydCAzODkKKyNzcnYtaG9zdD1fbGRhcC5fdGNwLmV4YW1wbGUuY29tLGxkYXBzZXJ2ZXIuZXhhbXBsZS5jb20sMzg5CisKKyMgQSBTUlYgcmVjb3JkIHNlbmRpbmcgTERBUCBmb3IgdGhlIGV4YW1wbGUuY29tIGRvbWFpbiB0bworIyBsZGFwc2VydmVyLmV4YW1wbGUuY29tIHBvcnQgMzg5ICh1c2luZyBkb21haW49KQorI2RvbWFpbj1leGFtcGxlLmNvbQorI3Nydi1ob3N0PV9sZGFwLl90Y3AsbGRhcHNlcnZlci5leGFtcGxlLmNvbSwzODkKKworIyBUd28gU1JWIHJlY29yZHMgZm9yIExEQVAsIGVhY2ggd2l0aCBkaWZmZXJlbnQgcHJpb3JpdGllcworI3Nydi1ob3N0PV9sZGFwLl90Y3AuZXhhbXBsZS5jb20sbGRhcHNlcnZlci5leGFtcGxlLmNvbSwzODksMQorI3Nydi1ob3N0PV9sZGFwLl90Y3AuZXhhbXBsZS5jb20sbGRhcHNlcnZlci5leGFtcGxlLmNvbSwzODksMgorCisjIEEgU1JWIHJlY29yZCBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgaXMgbm8gTERBUCBzZXJ2ZXIgZm9yIHRoZSBkb21haW4KKyMgZXhhbXBsZS5jb20KKyNzcnYtaG9zdD1fbGRhcC5fdGNwLmV4YW1wbGUuY29tCisKKyMgVGhlIGZvbGxvd2luZyBsaW5lIHNob3dzIGhvdyB0byBtYWtlIGRuc21hc3Egc2VydmUgYW4gYXJiaXRyYXJ5IFBUUgorIyByZWNvcmQuIFRoaXMgaXMgdXNlZnVsIGZvciBETlMtU0QuIChOb3RlIHRoYXQgdGhlCisjIGRvbWFpbi1uYW1lIGV4cGFuc2lvbiBkb25lIGZvciBTUlYgcmVjb3JkcyBfZG9lc19ub3QKKyMgb2NjdXIgZm9yIFBUUiByZWNvcmRzLikKKyNwdHItcmVjb3JkPV9odHRwLl90Y3AuZG5zLXNkLXNlcnZpY2VzLCJOZXcgRW1wbG95ZWUgUGFnZS5faHR0cC5fdGNwLmRucy1zZC1zZXJ2aWNlcyIKKworIyBDaGFuZ2UgdGhlIGZvbGxvd2luZyBsaW5lcyB0byBlbmFibGUgZG5zbWFzcSB0byBzZXJ2ZSBUWFQgcmVjb3Jkcy4KKyMgVGhlc2UgYXJlIHVzZWQgZm9yIHRoaW5ncyBsaWtlIFNQRiBhbmQgemVyb2NvbmYuIChOb3RlIHRoYXQgdGhlCisjIGRvbWFpbi1uYW1lIGV4cGFuc2lvbiBkb25lIGZvciBTUlYgcmVjb3JkcyBfZG9lc19ub3QKKyMgb2NjdXIgZm9yIFRYVCByZWNvcmRzLikKKworI0V4YW1wbGUgU1BGLgorI3R4dC1yZWNvcmQ9ZXhhbXBsZS5jb20sInY9c3BmMSBhIC1hbGwiCisKKyNFeGFtcGxlIHplcm9jb25mCisjdHh0LXJlY29yZD1faHR0cC5fdGNwLmV4YW1wbGUuY29tLG5hbWU9dmFsdWUscGFwZXI9QTQKKworIyBQcm92aWRlIGFuIGFsaWFzIGZvciBhICJsb2NhbCIgRE5TIG5hbWUuIE5vdGUgdGhhdCB0aGlzIF9vbmx5XyB3b3JrcworIyBmb3IgdGFyZ2V0cyB3aGljaCBhcmUgbmFtZXMgZnJvbSBESENQIG9yIC9ldGMvaG9zdHMuIEdpdmUgaG9zdAorIyAiYmVydCIgYW5vdGhlciBuYW1lLCBiZXJ0cmFuZAorI2NuYW1lPWJlcnRhbmQsYmVydAorCisjIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIGxvZyBlYWNoIEROUyBxdWVyeSBhcyBpdCBwYXNzZXMgdGhyb3VnaAorIyBkbnNtYXNxLgorI2xvZy1xdWVyaWVzCisKKyMgTG9nIGxvdHMgb2YgZXh0cmEgaW5mb3JtYXRpb24gYWJvdXQgREhDUCB0cmFuc2FjdGlvbnMuCisjbG9nLWRoY3AKKworIyBJbmNsdWRlIGFub3RoZXIgbG90IG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKyNjb25mLWZpbGU9L2V0Yy9kbnNtYXNxLm1vcmUuY29uZgorI2NvbmYtZGlyPS9ldGMvZG5zbWFzcS5kCisKKyMgSW5jbHVkZSBhbGwgdGhlIGZpbGVzIGluIGEgZGlyZWN0b3J5IGV4Y2VwdCB0aG9zZSBlbmRpbmcgaW4gLmJhaworI2NvbmYtZGlyPS9ldGMvZG5zbWFzcS5kLC5iYWsKKworIyBJbmNsdWRlIGFsbCBmaWxlcyBpbiBhIGRpcmVjdG9yeSB3aGljaCBlbmQgaW4gLmNvbmYKKyNjb25mLWRpcj0vZXRjL2Ruc21hc3EuZC8sKi5jb25mCmRpZmYgLS1naXQgYS9kb2MuaHRtbCBiL2RvYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYzlkMGQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MuaHRtbApAQCAtMCwwICsxLDk1IEBACis8SFRNTD4KKzxIRUFEPgorPFRJVExFPiBEbnNtYXNxIC0gbmV0d29yayBzZXJ2aWNlcyBmb3Igc21hbGwgbmV0d29ya3MuPC9USVRMRT4KKzxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iaHR0cDovL3d3dy50aGVrZWxsZXlzLm9yZy51ay9kbnNtYXNxL2ltYWdlcy9mYXZpY29uLmljbyI+Cis8L0hFQUQ+Cis8Qk9EWSBCR0NPTE9SPSJXSElURSI+IAorPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Cis8dHI+Cis8dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0ibWlkZGxlIj48aW1nIGJvcmRlcj0iMCIgc3JjPSJodHRwOi8vd3d3LnRoZWtlbGxleXMub3JnLnVrL2Ruc21hc3EvaW1hZ2VzL2ljb24ucG5nIiAvPjwvdGQ+Cis8dGQgYWxpZ249Im1pZGRsZSIgdmFsaWduPSJtaWRkbGUiPjxoMT5EbnNtYXNxPC9oMT48L3RkPgorPHRkIGFsaWduPSJyaWdodCIgdmFsaWduPSJtaWRkbGUiPjxpbWcgYm9yZGVyPSIwIiBzcmM9Imh0dHA6Ly93d3cudGhla2VsbGV5cy5vcmcudWsvZG5zbWFzcS9pbWFnZXMvaWNvbi5wbmciIC8+PC90ZD48L3RyPgorPC90YWJsZT4KK0Ruc21hc3EgcHJvdmlkZXMgbmV0d29yayBpbmZyYXN0cnVjdHVyZSBmb3Igc21hbGwgbmV0d29ya3M6IEROUywgREhDUCwgcm91dGVyIGFkdmVydGlzZW1lbnQgYW5kIG5ldHdvcmsgYm9vdC4gSXQgaXMgZGVzaWduZWQgdG8gYmUgCitsaWdodHdlaWdodCBhbmQgaGF2ZSBhIHNtYWxsIGZvb3RwcmludCwgc3VpdGFibGUgZm9yIHJlc291cmNlIGNvbnN0cmFpbmVkIHJvdXRlcnMgYW5kIGZpcmV3YWxscy4gSXQgaGFzIGFsc28gYmVlbiB3aWRlbHkgdXNlZCAKK2ZvciB0ZXRoZXJpbmcgb24gc21hcnRwaG9uZXMgYW5kIHBvcnRhYmxlIGhvdHNwb3RzLCBhbmQgdG8gc3VwcG9ydCB2aXJ0dWFsIG5ldHdvcmtpbmcgaW4gdmlydHVhbGlzYXRpb24gZnJhbWV3b3Jrcy4KK1N1cHBvcnRlZCBwbGF0Zm9ybXMgaW5jbHVkZSBMaW51eCAod2l0aCBnbGliYyBhbmQgdWNsaWJjKSwgQW5kcm9pZCwgKkJTRCwgYW5kIE1hYyBPUyBYLiBEbnNtYXNxIGlzIGluY2x1ZGVkIGluIG1vc3QKK0xpbnV4IGRpc3RyaWJ1dGlvbnMgYW5kIHRoZSBwb3J0cyBzeXN0ZW1zIG9mIEZyZWVCU0QsIE9wZW5CU0QgYW5kIE5ldEJTRC4gRG5zbWFzcSBwcm92aWRlcyBmdWxsIElQdjYgc3VwcG9ydC4KKworPFA+CitUaGUgRE5TIHN1YnN5c3RlbSBwcm92aWRlcyBhIGxvY2FsIEROUyBzZXJ2ZXIgZm9yIHRoZSBuZXR3b3JrLCB3aXRoIGZvcndhcmRpbmcgb2YgYWxsIHF1ZXJ5IHR5cGVzIHRvIHVwc3RyZWFtIHJlY3Vyc2l2ZSBETlMgc2VydmVycyBhbmQKK2NhY2hlaW5nIG9mIGNvbW1vbiByZWNvcmQgdHlwZXMgKEEsIEFBQUEsIENOQU1FIGFuZCBQVFIsIGFsc28gRE5TS0VZIGFuZCBEUyB3aGVuIEROU1NFQyBpcyBlbmFibGVkKS4gCis8RElSPgorPExJPkxvY2FsIEROUyBuYW1lcyBjYW4gYmUgZGVmaW5lZCBieSByZWFkaW5nIC9ldGMvaG9zdHMsIGJ5IGltcG9ydGluZyBuYW1lcyBmcm9tIHRoZSBESENQIHN1YnN5c3RlbSwgb3IgYnkgY29uZmlndXJhdGlvbiBvZiBhIHdpZGUgcmFuZ2Ugb2YgdXNlZnVsIHJlY29yZCB0eXBlcy48L0xJPgorPExJPlVwc3RyZWFtIHNlcnZlcnMgY2FuIGJlIGNvbmZpZ3VyZWQgaW4gYSB2YXJpZXR5IG9mIGNvbnZlbmllbnQgd2F5cywgaW5jbHVkaW5nICBkeW5hbWljIGNvbmZpZ3VyYXRpb24gYXMgdGhlc2UgY2hhbmdlIG9uIG1vdmluZyB1cHN0cmVhbSBuZXR3b3JrLgorPExJPkF1dGhvcml0YXRpdmUgRE5TIG1vZGUgYWxsb3dzIGxvY2FsIEROUyBuYW1lcyBtYXkgYmUgZXhwb3J0ZWQgdG8gem9uZSBpbiB0aGUgZ2xvYmFsIEROUy4gRG5zbWFzcSBhY3RzIGFzIGF1dGhvcml0YXRpdmUgc2VydmVyIGZvciB0aGlzIHpvbmUsIGFuZCBhbHNvIHByb3ZpZGVzIAorem9uZSB0cmFuc2ZlciB0byBzZWNvbmRhcmllcyBmb3IgdGhlIHpvbmUsIGlmIHJlcXVpcmVkLjwvTEk+Cis8TEk+RE5TU0VDIHZhbGlkYXRpb24gbWF5IGJlIHBlcmZvcm1lZCBvbiBETlMgcmVwbGllcyBmcm9tIHVwc3RyZWFtIG5hbWVzZXJ2ZXJzLCBwcm92aWRpbmcgc2VjdXJpdHkgYWdhaW5zdCBzcG9vZmluZyBhbmQgY2FjaGUgcG9pc29uaW5nLjwvTEk+Cis8TEk+U3BlY2lmaWVkIHN1Yi1kb21haW5zIGNhbiBiZSBkaXJlY3RlZCB0byB0aGVpciBvd24gdXBzdHJlYW0gRE5TIHNlcnZlcnMsIG1ha2luZyBWUE4gY29uZmlndXJhdGlvbiBlYXN5LjwvTEk+Cis8TEk+SW50ZXJuYXRpb25hbGlzZWQgZG9tYWluIG5hbWVzIGFyZSBzdXBwb3J0ZWQuCis8L0RJUj4KKzxQPgorVGhlIERIQ1Agc3Vic3lzdGVtIHN1cHBvcnRzIERIQ1B2NCwgREhDUHY2LCBCT09UUCBhbmQgUFhFLgorPERJUj4KKzxMST4gQm90aCBzdGF0aWMgYW5kIGR5bmFtaWMgREhDUCBsZWFzZXMgYXJlIHN1cHBvcnRlZCwgYWxvbmcgd2l0aCBzdGF0ZWxlc3MgbW9kZSBpbiBESENQdjYuPC9MST4KKzxMST4gVGhlIFBYRSBzeXN0ZW0gaXMgYSBmdWxsIFBYRSBzZXJ2ZXIsIHN1cHBvcnRpbmcgbmV0Ym9vdCBtZW51cyBhbmQgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlIHN1cHBvcnQuIEl0CitpbmNsdWRlcyBwcm94eS1tb2RlLCB3aGVyZSB0aGUgUFhFIHN5c3RlbSBjby1vcGVyYXRlcyB3aXRoIGFub3RoZXIgREhDUCBzZXJ2ZXIuPC9MST4KKzxMST4gVGhlcmUgaXMgYSBidWlsdCBpbiByZWFkLW9ubHkgVEZUUCBzZXJ2ZXIgdG8gc3VwcG9ydCBuZXRib290LjwvTEk+Cis8TEk+IE1hY2hpbmVzIHdoaWNoIGFyZSBjb25maWd1cmVkIGJ5IERIQ1AgaGF2ZSB0aGVpciBuYW1lcyBhdXRvbWF0aWNhbGx5IAoraW5jbHVkZWQgaW4gdGhlIEROUyBhbmQgdGhlIG5hbWVzIGNhbiBzcGVjaWZpZWQgYnkgZWFjaCBtYWNoaW5lIG9yCitjZW50cmFsbHkgYnkgYXNzb2NpYXRpbmcgYSBuYW1lIHdpdGggYSBNQUMgYWRkcmVzcyBvciBVSUQgaW4gdGhlIGRuc21hc3EKK2NvbmZpZ3VyYXRpb24gZmlsZS48L0xJPgorPC9ESVI+Cis8UD4KK1RoZSBSb3V0ZXIgQWR2ZXJ0aXNlbWVudCBzdWJzeXN0ZW0gcHJvdmlkZXMgYmFzaWMgYXV0b2NvbmZpZ3VyYXRpb24gZm9yIElQdjYgaG9zdHMuIEl0IGNhbiBiZSB1c2VkIHN0YW5kLWFsb25lIG9yIGluIGNvbmp1bmN0aW9uIHdpdGggREhDUHY2LgorPERJUj4KKzxMST4gVGhlIE0gYW5kIE8gYml0cyBhcmUgY29uZmlndXJhYmxlLCB0byBjb250cm9sIGhvc3RzJyB1c2Ugb2YgREhDUHY2LjwvTEk+Cis8TEk+IFJvdXRlciBhZHZlcnRpc2VtZW50cyBjYW4gaW5jbHVkZSB0aGUgUkROU1Mgb3B0aW9uLjwvTEk+Cis8TEk+IFRoZXJlIGlzIGEgbW9kZSB3aGljaCB1c2VzIG5hbWUgaW5mb3JtYXRpb24gZnJvbSBESENQdjQgY29uZmlndXJhdGlvbiB0byBwcm92aWRlIEROUyBlbnRyaWVzCisgZm9yIGF1dG9jb25maWd1cmVkIElQdjYgYWRkcmVzc2VzIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBiZSBhbm9ueW1vdXMuPC9MST4KKzwvRElSPgorPFA+CisgCitGb3IgZXh0cmEgY29tcGFjdG5lc3MsIHVudXNlZCBmZWF0dXJlcyBtYXkgYmUgb21pdHRlZCBhdCBjb21waWxlIHRpbWUuCisKKworPEgyPkdldCBjb2RlLjwvSDI+CisKKzxBIEhSRUY9Imh0dHA6Ly93d3cudGhla2VsbGV5cy5vcmcudWsvZG5zbWFzcS8iPkRvd25sb2FkPC9BPiBkbnNtYXNxIGhlcmUuIAorVGhlIHRhcmJhbGwgaW5jbHVkZXMgdGhpcyBkb2N1bWVudGF0aW9uLCBzb3VyY2UsIGFuZCBtYW5wYWdlLgorVGhlcmUgaXMgYWxzbyBhIDxBIEhSRUY9IkNIQU5HRUxPRyI+IENIQU5HRUxPRzwvQT4gYW5kIGEgPEEgSFJFRj0iRkFRIj5GQVE8L0E+LgorCitEbnNtYXNxIGhhcyBhIGdpdCByZXBvc2l0b3J5IHdoaWNoIGNvbnRhaW5zIHRoZSBjb21wbGV0ZSByZWxlYXNlCitoaXN0b3J5IG9mIHZlcnNpb24gMiBhbmQgZGV2ZWxvcG1lbnQgaGlzdG9yeSBmcm9tIDIuNjAuIFlvdSBjYW4gCis8QSBIUkVGPSJodHRwOi8vdGhla2VsbGV5cy5vcmcudWsvZ2l0d2ViLz9wPWRuc21hc3EuZ2l0O2E9c3VtbWFyeSI+YnJvd3NlPC9BPgordGhlIHJlcG8sIG9yIGdldCBhIGNvcHkgdXNpbmcgZ2l0IHByb3RvY29sIHdpdGggdGhlIGNvbW1hbmQKKworPFBSRT48VFQ+Z2l0IGNsb25lIGdpdDovL3RoZWtlbGxleXMub3JnLnVrL2Ruc21hc3EuZ2l0IDwvVFQ+PC9QUkU+CisKKzxIMj5MaWNlbnNlLjwvSDI+CitEbnNtYXNxIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHUEwsIHZlcnNpb24gMiBvciB2ZXJzaW9uIDMgYXQgeW91ciBkaXNjcmV0aW9uLiBTZWUgdGhlIGZpbGVzIENPUFlJTkcgYW5kIENPUFlJTkctdjMgaW4gdGhlIGRpc3RyaWJ1dGlvbiAKK2ZvciBkZXRhaWxzLgorCis8SDI+Q29udGFjdC48L0gyPgorVGhlcmUgaXMgYSBkbnNtYXNxIG1haWxpbmcgbGlzdCBhdCA8QQorSFJFRj0iaHR0cDovL2xpc3RzLnRoZWtlbGxleXMub3JnLnVrL21haWxtYW4vbGlzdGluZm8vZG5zbWFzcS1kaXNjdXNzIj4KK2h0dHA6Ly9saXN0cy50aGVrZWxsZXlzLm9yZy51ay9tYWlsbWFuL2xpc3RpbmZvL2Ruc21hc3EtZGlzY3VzczwvQT4gd2hpY2ggc2hvdWxkIGJlIHRoZQorZmlyc3QgbG9jYXRpb24gZm9yIHF1ZXJpZXMsIGJ1Z3JlcG9ydHMsIHN1Z2dlc3Rpb25zIGV0Yy4KK1lvdSBjYW4gY29udGFjdCBtZSBhdCA8QQorSFJFRj0ibWFpbHRvOnNpbW9uQHRoZWtlbGxleXMub3JnLnVrIj5zaW1vbkB0aGVrZWxsZXlzLm9yZy51azwvQT4uCisKKzxIMj5Eb25hdGlvbnMuPC9IMj4KK0Ruc21hc3EgaXMgbWFpbmx5IHdyaXR0ZW4gYW5kIG1haW50YWluZWQgYnkgU2ltb24gS2VsbGV5LiBGb3IgbW9zdCBvZiBpdHMgbGlmZSwgZG5zbWFzcSBoYXMgYmVlbiBhIHNwYXJlLXRpbWUgcHJvamVjdC4gCitUaGVzZSBkYXlzIEknbSB3b3JraW5nIG9uIGl0IGFzIG15IG1haW4gYWN0aXZpdHkuIAorSSBkb24ndCBoYXZlIGFuIGVtcGxveWVyIG9yIGFueW9uZSB3aG8gcGF5cyBtZSByZWd1bGFybHkgdG8gd29yayBvbiBkbnNtYXNxLiBJZiB5b3UnZCBsaWtlIHRvIG1ha2UgCithIGNvbnRyaWJ1dGlvbiB0b3dhcmRzIG15IGV4cGVuc2VzLCBwbGVhc2UgdXNlIHRoZSBkb25hdGlvbiBidXR0b24gYmVsb3cuCis8Zm9ybSBhY3Rpb249Imh0dHBzOi8vd3d3LnBheXBhbC5jb20vY2dpLWJpbi93ZWJzY3IiIG1ldGhvZD0icG9zdCIgdGFyZ2V0PSJfdG9wIj4KKzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNtZCIgdmFsdWU9Il9zLXhjbGljayI+Cis8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJob3N0ZWRfYnV0dG9uX2lkIiB2YWx1ZT0iVjNYOUdWVzVHWDZEQSI+Cis8aW5wdXQgdHlwZT0iaW1hZ2UiIHNyYz0iaHR0cHM6Ly93d3cucGF5cGFsb2JqZWN0cy5jb20vZW5fVVMvR0IvaS9idG4vYnRuX2RvbmF0ZUNDX0xHLmdpZiIgYm9yZGVyPSIwIiBuYW1lPSJzdWJtaXQiIGFsdD0iUGF5UGFsIOKAkyBUaGUgc2FmZXIsIGVhc2llciB3YXkgdG8gcGF5IG9ubGluZS4iPgorPGltZyBhbHQ9IiIgYm9yZGVyPSIwIiBzcmM9Imh0dHBzOi8vd3d3LnBheXBhbG9iamVjdHMuY29tL2VuX0dCL2kvc2NyL3BpeGVsLmdpZiIgd2lkdGg9IjEiIGhlaWdodD0iMSI+Cis8L2Zvcm0+CisKKworPC9CT0RZPgorCmRpZmYgLS1naXQgYS9sb2dvL1JFQURNRSBiL2xvZ28vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YTgyNTAKLS0tIC9kZXYvbnVsbAorKysgYi9sb2dvL1JFQURNRQpAQCAtMCwwICsxLDEyIEBACitEbnNtYXNxIGxvZ28sIGNvbnRyaWJ1dGVkIGJ5IEp1c3RpbiBDbGlmdC4KKworVGhlIHNvdXJjZSBmb3JtYXQgaXMgSW5rc2NhcGUgU1ZHIHZlY3RvciBmb3JtYXQsIHdoaWNoIGlzIHNjYWxhYmxlIGFuZAorZWFzeSB0byBleHBvcnQgdG8gb3RoZXIgZm9ybWF0cy4gRm9yIGNvbnZlbmllbmNlIEkndmUgaW5jbHVkZWQgYSA1NngzMQorcG5nIGV4cG9ydCBhbmQgYSAxNngxNiBpY28gc3VpdGFibGUgZm9yIHVzZSBhcyBhIHdlYiBmYXZpY29uLgorCitTaW1vbiBLZWxsZXksIDIyLzEwLzIwMTAKKworCisKKworIApkaWZmIC0tZ2l0IGEvbG9nby9mYXZpY29uLmljbyBiL2xvZ28vZmF2aWNvbi5pY28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFiYzkzNAotLS0gL2Rldi9udWxsCisrKyBiL2xvZ28vZmF2aWNvbi5pY28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbG9nby9pY29uLnBuZyBiL2xvZ28vaWNvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y0ODQ2MQotLS0gL2Rldi9udWxsCisrKyBiL2xvZ28vaWNvbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbG9nby9pY29uLnN2ZyBiL2xvZ28vaWNvbi5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJmNzUyMQotLS0gL2Rldi9udWxsCisrKyBiL2xvZ28vaWNvbi5zdmcKQEAgLTAsMCArMSwxNTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPHN2ZworICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgorICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKKyAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKKyAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCisgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCisgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKKyAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKKyAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgorICAgdmVyc2lvbj0iMS4xIgorICAgeD0iMHB4IgorICAgeT0iMHB4IgorICAgd2lkdGg9IjU2IgorICAgaGVpZ2h0PSIzMSIKKyAgIHZpZXdCb3g9IjAgMCA1NiAzMSIKKyAgIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDcyLjgzMyA0Ni42NjciCisgICB4bWw6c3BhY2U9InByZXNlcnZlIgorICAgaWQ9InN2ZzIiCisgICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ3IHIyMjU4MyIKKyAgIHNvZGlwb2RpOmRvY25hbWU9ImRuc21hc3FfaWNvbi5zdmciCisgICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9Ii94L2NlbnRvc19ob21lL2pjL3dvcmtzcGFjZS9naXRfcmVwb3MvbGlidmlydC1tZWRpYS9saWJ2aXJ0LW1lZGlhL3BuZy9kbnNtYXNxX2ljb24ucG5nIgorICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjkwIgorICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjkwIj48bWV0YWRhdGEKKyAgIGlkPSJtZXRhZGF0YTI3Ij48cmRmOlJERj48Y2M6V29yaworICAgICAgIHJkZjphYm91dD0iIj48ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD48ZGM6dHlwZQorICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48ZGM6dGl0bGU+PC9kYzp0aXRsZT48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKKyAgIGlkPSJkZWZzMjUiPjxpbmtzY2FwZTpwZXJzcGVjdGl2ZQorICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKKyAgIGlua3NjYXBlOnZwX3g9IjAgOiAyMy4zMzM1IDogMSIKKyAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKKyAgIGlua3NjYXBlOnZwX3o9IjcyLjgzMyA6IDIzLjMzMzUgOiAxIgorICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjM2LjQxNjUgOiAxNS41NTU2NjcgOiAxIgorICAgaWQ9InBlcnNwZWN0aXZlNDg1NyIgLz4KKwk8ZmlsdGVyCisgICBpZD0iZmlsdGVyMzgwMiIKKyAgIGlua3NjYXBlOmxhYmVsPSJmaWx0ZXIxIgorICAgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIiAvPjxsaW5lYXJHcmFkaWVudAorICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgeGxpbms6aHJlZj0iI1NWR0lEXzNfIgorICAgaWQ9ImxpbmVhckdyYWRpZW50NDkyOSIKKyAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgeDE9IjMwLjU2NDUwMSIKKyAgIHkxPSItOC44MTQ0OTk5IgorICAgeDI9IjMyLjkzNyIKKyAgIHkyPSIzMi43MTU1OTkiIC8+CisJCTxsaW5lYXJHcmFkaWVudAorICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgorICAgeGxpbms6aHJlZj0iI1NWR0lEXzNfIgorICAgaWQ9ImxpbmVhckdyYWRpZW50NTc5OCIKKyAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgorICAgeDE9IjMwLjU2NDUwMSIKKyAgIHkxPSItOC44MTQ0OTk5IgorICAgeDI9IjMyLjkzNyIKKyAgIHkyPSIzMi43MTU1OTkiIC8+PGxpbmVhckdyYWRpZW50CisgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCisgICB4bGluazpocmVmPSIjU1ZHSURfM18iCisgICBpZD0ibGluZWFyR3JhZGllbnQ1ODEyIgorICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICB4MT0iMzAuNTY0NTAxIgorICAgeTE9Ii04LjgxNDQ5OTkiCisgICB4Mj0iMzIuOTM3IgorICAgeTI9IjMyLjcxNTU5OSIgLz48ZmlsdGVyCisgICBpZD0iZmlsdGVyNjI2MiIKKyAgIGlua3NjYXBlOmxhYmVsPSJEcm9wIHNoYWRvdyIKKyAgIHdpZHRoPSIxLjUiCisgICBoZWlnaHQ9IjEuNSIKKyAgIHg9Ii0wLjI1IgorICAgeT0iLTAuMjUiCisgICBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPjxmZUdhdXNzaWFuQmx1cgorICAgICBpZD0iZmVHYXVzc2lhbkJsdXI2MjY0IgorICAgICBpbj0iU291cmNlQWxwaGEiCisgICAgIHN0ZERldmlhdGlvbj0iMi41MDAwMDAiCisgICAgIHJlc3VsdD0iYmx1ciIgLz48ZmVDb2xvck1hdHJpeAorICAgICBpZD0iZmVDb2xvck1hdHJpeDYyNjYiCisgICAgIHJlc3VsdD0iYmx1cmFscGhhIgorICAgICB0eXBlPSJtYXRyaXgiCisgICAgIHZhbHVlcz0iMSAwIDAgMCAwIDAgMSAwIDAgMCAwIDAgMSAwIDAgMCAwIDAgMC41MDAwMDAgMCAiIC8+PGZlT2Zmc2V0CisgICAgIGlkPSJmZU9mZnNldDYyNjgiCisgICAgIGluPSJibHVyYWxwaGEiCisgICAgIGR4PSIyLjcwMDAwMCIKKyAgICAgZHk9IjIuNjAwMDAwIgorICAgICByZXN1bHQ9Im9mZnNldEJsdXIiIC8+PGZlTWVyZ2UKKyAgICAgaWQ9ImZlTWVyZ2U2MjcwIj48ZmVNZXJnZU5vZGUKKyAgICAgICBpZD0iZmVNZXJnZU5vZGU2MjcyIgorICAgICAgIGluPSJvZmZzZXRCbHVyIiAvPjxmZU1lcmdlTm9kZQorICAgICAgIGlkPSJmZU1lcmdlTm9kZTYyNzQiCisgICAgICAgaW49IlNvdXJjZUdyYXBoaWMiIC8+PC9mZU1lcmdlPjwvZmlsdGVyPjwvZGVmcz48c29kaXBvZGk6bmFtZWR2aWV3CisgICBwYWdlY29sb3I9IiNmZmZmZmYiCisgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKKyAgIGJvcmRlcm9wYWNpdHk9IjEiCisgICBvYmplY3R0b2xlcmFuY2U9IjEwIgorICAgZ3JpZHRvbGVyYW5jZT0iMTAiCisgICBndWlkZXRvbGVyYW5jZT0iMTAiCisgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCIKKyAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCisgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE1NjgiCisgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDc2IgorICAgaWQ9Im5hbWVkdmlldzIzIgorICAgc2hvd2dyaWQ9ImZhbHNlIgorICAgaW5rc2NhcGU6em9vbT0iOCIKKyAgIGlua3NjYXBlOmN4PSIzMS45NjY3NjgiCisgICBpbmtzY2FwZTpjeT0iMjEuMjExODY5IgorICAgaW5rc2NhcGU6d2luZG93LXg9IjU2NyIKKyAgIGlua3NjYXBlOndpbmRvdy15PSIzMjgiCisgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIgorICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgorICAgaW5rc2NhcGU6c2hvd3BhZ2VzaGFkb3c9ImZhbHNlIgorICAgc2hvd2JvcmRlcj0idHJ1ZSIgLz4KKzxnCisgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgorICAgaWQ9ImxheWVyMSIKKyAgIGlua3NjYXBlOmxhYmVsPSJkbnNtYXNxIgorICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lIgorICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNS4yODM4MDU3LC0xNS41NDUzNzEpIj48ZworICAgICBpZD0iZzM3OTAiCisgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuODE4MzgzMiwwLDAsMC44MTgzODMyLDY1LjMwNDg5Nyw5Ljg3NDc2NzgpIgorICAgICBzdHlsZT0iZmlsdGVyOnVybCgjZmlsdGVyNjI2MikiCisgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI5MCIKKyAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjkwIj48ZworICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC05MS4wMTg0NjIsMS4wNjg3MDk5KSIKKyAgICAgICBpZD0iZzkiPgorCQkJPHBhdGgKKyAgIHN0eWxlPSJmaWxsOiM2NzAwYWQiCisgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgorICAgaWQ9InBhdGgxMSIKKyAgIGQ9Ik0gNTQuOTk3LDEyLjE1MSBDIDUwLjA4Myw5LjEzMiA0My4yOSw3LjI2NiAzNS43OTEsNy4yNjYgYyAtNy41LDAgLTE0LjI5LDEuODY2IC0xOS4yMDQsNC44ODUgLTQuOTE1LDMuMDE2IC03Ljk1Niw3LjE4NCAtNy45NTYsMTEuNzg5IDAsNC42MDQgMy4wNDEsOC43NzIgNy45NTYsMTEuNzg4IDQuOTE0LDMuMDIgMTEuNzA0LC00LjI3MSAxOS4yMDQsLTQuMjcxIDcuNDk5LDAgMTQuMjkyLDcuMjkxIDE5LjIwNiw0LjI3MSA0LjkxNCwtMy4wMTYgNy45NTUsLTcuMTg1IDcuOTU1LC0xMS43ODggMCwtNC42MDYgLTMuMDQxLC04Ljc3MyAtNy45NTUsLTExLjc4OSB6IE0gMjQuOTk2LDI0LjMxOCBjIC0yLjY5OCwwIC00Ljg4NSwtMC45MjIgLTQuODg1LC0yLjA2MSAwLC0xLjE0IDIuMTg3LC0yLjA2MyA0Ljg4NSwtMi4wNjMgMi42OTcsMCA0Ljg4NSwwLjkyNCA0Ljg4NSwyLjA2MyAwLDEuMTM5IC0yLjE4OCwyLjA2MSAtNC44ODUsMi4wNjEgeiBtIDIxLjUwMSwwLjE5MSBjIC0yLjY4NiwwIC00Ljg2MSwtMC44NTYgLTQuODYxLC0xLjkxMiAwLC0xLjA1NCAyLjE3NiwtMS45MTEgNC44NjEsLTEuOTExIDIuNjg1LDAgNC44NjMsMC44NTcgNC44NjMsMS45MTEgMCwxLjA1NiAtMi4xNzgsMS45MTIgLTQuODYzLDEuOTEyIHoiIC8+CisJCQk8cGF0aAorICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZmYjYxNjtzdHJva2Utd2lkdGg6MS44NTM1MzI1NSIKKyAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCisgICBpZD0icGF0aDEzIgorICAgZD0iTSA1NC45OTcsMTIuMTUxIEMgNTAuMDgzLDkuMTMyIDQzLjI5LDcuMjY2IDM1Ljc5MSw3LjI2NiBjIC03LjUsMCAtMTQuMjksMS44NjYgLTE5LjIwNCw0Ljg4NSAtNC45MTUsMy4wMTYgLTcuOTU2LDcuMTg0IC03Ljk1NiwxMS43ODkgMCw0LjYwNCAzLjA0MSw4Ljc3MiA3Ljk1NiwxMS43ODggNC45MTQsMy4wMiAxMS43MDQsLTQuMjcxIDE5LjIwNCwtNC4yNzEgNy40OTksMCAxNC4yOTIsNy4yOTEgMTkuMjA2LDQuMjcxIDQuOTE0LC0zLjAxNiA3Ljk1NSwtNy4xODUgNy45NTUsLTExLjc4OCAwLC00LjYwNiAtMy4wNDEsLTguNzczIC03Ljk1NSwtMTEuNzg5IHogTSAyNC45OTYsMjQuMzE4IGMgLTIuNjk4LDAgLTQuODg1LC0wLjkyMiAtNC44ODUsLTIuMDYxIDAsLTEuMTQgMi4xODcsLTIuMDYzIDQuODg1LC0yLjA2MyAyLjY5NywwIDQuODg1LDAuOTI0IDQuODg1LDIuMDYzIDAsMS4xMzkgLTIuMTg4LDIuMDYxIC00Ljg4NSwyLjA2MSB6IG0gMjEuNTAxLDAuMTkxIGMgLTIuNjg2LDAgLTQuODYxLC0wLjg1NiAtNC44NjEsLTEuOTEyIDAsLTEuMDU0IDIuMTc2LC0xLjkxMSA0Ljg2MSwtMS45MTEgMi42ODUsMCA0Ljg2MywwLjg1NyA0Ljg2MywxLjkxMSAwLDEuMDU2IC0yLjE3OCwxLjkxMiAtNC44NjMsMS45MTIgeiIgLz4KKwkJPC9nPjxnCisgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTkxLjAxODQ2MiwxLjA2ODcwOTkpIgorICAgICAgIGlkPSJMYXllcl8yIj4KKwk8bGluZWFyR3JhZGllbnQKKyAgIHkyPSIzMi43MTU1OTkiCisgICB4Mj0iMzIuOTM3IgorICAgeTE9Ii04LjgxNDQ5OTkiCisgICB4MT0iMzAuNTY0NTAxIgorICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCisgICBpZD0iU1ZHSURfM18iPgorCQk8c3RvcAorICAgaWQ9InN0b3AxNyIKKyAgIHN0eWxlPSJzdG9wLWNvbG9yOiNGRkZGRkY7c3RvcC1vcGFjaXR5OjAuNzMiCisgICBvZmZzZXQ9IjAiIC8+CisJCTxzdG9wCisgICBpZD0ic3RvcDE5IgorICAgc3R5bGU9InN0b3AtY29sb3I6I0ZGRkZGRjtzdG9wLW9wYWNpdHk6MCIKKyAgIG9mZnNldD0iMSIgLz4KKwk8L2xpbmVhckdyYWRpZW50PgorCTxwYXRoCisgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgorICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDU4MTIpIgorICAgaWQ9InBhdGgyMSIKKyAgIGQ9Im0gNTQuMSwxNS4zNjEgYyAtMC45MjQsMS4wNzggLTIuNzgyLDEuMjY1IC0zLjg1NywxLjA2IEMgMzgsMTQuMDgzIDIyLjc1LDEyLjc1IDE2LjAyNywyMy4wMzEgMTQuODU4LDI0LjgxOSAxMS45OTIsMjUuMzkgMTAuMjkzLDIzLjg4NyA4LjYzMSwyMi40MTcgMTMuMTA1LDE1LjgwNCAxNy42NDYsMTMuMDMzIDIyLjE5NCwxMC4yNTIgMjguNDc0LDguNTMgMzUuNDEsOC41MyBjIDYuOTM2LDAgMTMuMjE1LDEuNzIyIDE3Ljc1Niw0LjUwMiAwLjczMSwwLjQ0MiAxLjYyNywxLjUyIDAuOTM0LDIuMzI5IHoiIC8+Cis8L2c+PC9nPjwvZz48L3N2Zz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tYW4vZG5zbWFzcS44IGIvbWFuL2Ruc21hc3EuOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2ZhMzU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuL2Ruc21hc3EuOApAQCAtMCwwICsxLDIyMzMgQEAKKy5USCBETlNNQVNRIDgKKy5TSCBOQU1FCitkbnNtYXNxIFwtIEEgbGlnaHR3ZWlnaHQgREhDUCBhbmQgY2FjaGluZyBETlMgc2VydmVyLgorLlNIIFNZTk9QU0lTCisuQiBkbnNtYXNxCisuSSBbT1BUSU9OXS4uLgorLlNIICJERVNDUklQVElPTiIKKy5CUiBkbnNtYXNxCitpcyBhIGxpZ2h0d2VpZ2h0IEROUywgVEZUUCwgUFhFLCByb3V0ZXIgYWR2ZXJ0aXNlbWVudCBhbmQgREhDUCBzZXJ2ZXIuIEl0IGlzIGludGVuZGVkIHRvIHByb3ZpZGUgCitjb3VwbGVkIEROUyBhbmQgREhDUCBzZXJ2aWNlIHRvIGEgTEFOLgorLlBQCitEbnNtYXNxIGFjY2VwdHMgRE5TIHF1ZXJpZXMgYW5kIGVpdGhlciBhbnN3ZXJzIHRoZW0gZnJvbSBhIHNtYWxsLCBsb2NhbCwKK2NhY2hlIG9yIGZvcndhcmRzIHRoZW0gdG8gYSByZWFsLCByZWN1cnNpdmUsIEROUyBzZXJ2ZXIuIEl0IGxvYWRzIHRoZQorY29udGVudHMgb2YgL2V0Yy9ob3N0cyBzbyB0aGF0IGxvY2FsIGhvc3RuYW1lcword2hpY2ggZG8gbm90IGFwcGVhciBpbiB0aGUgZ2xvYmFsIEROUyBjYW4gYmUgcmVzb2x2ZWQgYW5kIGFsc28gYW5zd2VycworRE5TIHF1ZXJpZXMgZm9yIERIQ1AgY29uZmlndXJlZCBob3N0cy4gSXQgY2FuIGFsc28gYWN0IGFzIHRoZQorYXV0aG9yaXRhdGl2ZSBETlMgc2VydmVyIGZvciBvbmUgb3IgbW9yZSBkb21haW5zLCBhbGxvd2luZyBsb2NhbCBuYW1lcwordG8gYXBwZWFyIGluIHRoZSBnbG9iYWwgRE5TLiBJdCBjYW4gYmUgY29uZmlndXJlZCB0byBkbyBETlNTRUMKK3ZhbGlkYXRpb24uCisuUFAKK1RoZSBkbnNtYXNxIERIQ1Agc2VydmVyIHN1cHBvcnRzIHN0YXRpYyBhZGRyZXNzIGFzc2lnbm1lbnRzIGFuZCBtdWx0aXBsZQorbmV0d29ya3MuIEl0IGF1dG9tYXRpY2FsbHkKK3NlbmRzIGEgc2Vuc2libGUgZGVmYXVsdCBzZXQgb2YgREhDUCBvcHRpb25zLCBhbmQgY2FuIGJlIGNvbmZpZ3VyZWQgdG8KK3NlbmQgYW55IGRlc2lyZWQgc2V0IG9mIERIQ1Agb3B0aW9ucywgaW5jbHVkaW5nIHZlbmRvci1lbmNhcHN1bGF0ZWQKK29wdGlvbnMuIEl0IGluY2x1ZGVzIGEgc2VjdXJlLCByZWFkLW9ubHksCitURlRQIHNlcnZlciB0byBhbGxvdyBuZXQvUFhFIGJvb3Qgb2YgREhDUCBob3N0cyBhbmQgYWxzbyBzdXBwb3J0cyBCT09UUC4gVGhlIFBYRSBzdXBwb3J0IGlzIGZ1bGwgZmVhdHVyZWQsIGFuZCBpbmNsdWRlcyBhIHByb3h5IG1vZGUgd2hpY2ggc3VwcGxpZXMgUFhFIGluZm9ybWF0aW9uIHRvIGNsaWVudHMgd2hpbHN0IERIQ1AgYWRkcmVzcyBhbGxvY2F0aW9uIGlzIGRvbmUgYnkgYW5vdGhlciBzZXJ2ZXIuCisuUFAKK1RoZSBkbnNtYXNxIERIQ1B2NiBzZXJ2ZXIgcHJvdmlkZXMgdGhlIHNhbWUgc2V0IG9mIGZlYXR1cmVzIGFzIHRoZQorREhDUHY0IHNlcnZlciwgYW5kIGluIGFkZGl0aW9uLCBpdCBpbmNsdWRlcyByb3V0ZXIgYWR2ZXJ0aXNlbWVudHMgYW5kCithIG5lYXQgZmVhdHVyZSB3aGljaCBhbGxvd3MgbmFtZWluZyBmb3IgY2xpZW50cyB3aGljaCB1c2UgREhDUHY0IGFuZAorc3RhdGVsZXNzIGF1dG9jb25maWd1cmF0aW9uIG9ubHkgZm9yIElQdjYgY29uZmlndXJhdGlvbi4gVGhlcmUgaXMgc3VwcG9ydCBmb3IgZG9pbmcgYWRkcmVzcyBhbGxvY2F0aW9uIChib3RoIERIQ1B2NiBhbmQgUkEpIGZyb20gc3VibmV0cyB3aGljaCBhcmUgZHluYW1pY2FsbHkgZGVsZWdhdGVkIHZpYSBESENQdjYgcHJlZml4IGRlbGVnYXRpb24uCisuUFAKK0Ruc21hc3EgaXMgY29kZWQgd2l0aCBzbWFsbCBlbWJlZGRlZCBzeXN0ZW1zIGluIG1pbmQuIEl0IGFpbXMgZm9yIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBtZW1vcnkgZm9vdHByaW50IGNvbXBhdGlibGUgd2l0aCB0aGUgc3VwcG9ydGVkIGZ1bmN0aW9ucywgIGFuZCBhbGxvd3MgdW5lZWRlZCBmdW5jdGlvbnMgdG8gYmUgb21pdHRlZCBmcm9tIHRoZSBjb21waWxlZCBiaW5hcnkuICAKKy5TSCBPUFRJT05TCitOb3RlIHRoYXQgaW4gZ2VuZXJhbCBtaXNzaW5nIHBhcmFtZXRlcnMgYXJlIGFsbG93ZWQgYW5kIHN3aXRjaCBvZmYKK2Z1bmN0aW9ucywgZm9yIGluc3RhbmNlICItLXBpZC1maWxlIiBkaXNhYmxlcyB3cml0aW5nIGEgUElEIGZpbGUuIE9uCitCU0QsIHVubGVzcyB0aGUgR05VIGdldG9wdCBsaWJyYXJ5IGlzIGxpbmtlZCwgdGhlIGxvbmcgZm9ybSBvZiB0aGUKK29wdGlvbnMgZG9lcyBub3Qgd29yayBvbiB0aGUgY29tbWFuZCBsaW5lOyBpdCBpcyBzdGlsbCByZWNvZ25pc2VkIGluCit0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorLlRQCisuQiAtLXRlc3QKK1JlYWQgYW5kIHN5bnRheCBjaGVjayBjb25maWd1cmF0aW9uIGZpbGUocykuIEV4aXQgd2l0aCBjb2RlIDAgaWYgYWxsCitpcyBPSywgb3IgYSBub24temVybyBjb2RlIG90aGVyd2lzZS4gRG8gbm90IHN0YXJ0IHVwIGRuc21hc3EuCisuVFAKKy5CIFwtaCwgLS1uby1ob3N0cworRG9uJ3QgcmVhZCB0aGUgaG9zdG5hbWVzIGluIC9ldGMvaG9zdHMuCisuVFAKKy5CIFwtSCwgLS1hZGRuLWhvc3RzPTxmaWxlPgorQWRkaXRpb25hbCBob3N0cyBmaWxlLiBSZWFkIHRoZSBzcGVjaWZpZWQgZmlsZSBhcyB3ZWxsIGFzIC9ldGMvaG9zdHMuIElmIC1oIGlzIGdpdmVuLCByZWFkCitvbmx5IHRoZSBzcGVjaWZpZWQgZmlsZS4gVGhpcyBvcHRpb24gbWF5IGJlIHJlcGVhdGVkIGZvciBtb3JlIHRoYW4gb25lCithZGRpdGlvbmFsIGhvc3RzIGZpbGUuIElmIGEgZGlyZWN0b3J5IGlzIGdpdmVuLCB0aGVuIHJlYWQgYWxsIHRoZSBmaWxlcyBjb250YWluZWQgaW4gdGhhdCBkaXJlY3RvcnkuIAorLlRQCisuQiBcLUUsIC0tZXhwYW5kLWhvc3RzCitBZGQgdGhlIGRvbWFpbiB0byBzaW1wbGUgbmFtZXMgKHdpdGhvdXQgYSBwZXJpb2QpIGluIC9ldGMvaG9zdHMKK2luIHRoZSBzYW1lIHdheSBhcyBmb3IgREhDUC1kZXJpdmVkIG5hbWVzLiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdAorYXBwbHkgdG8gZG9tYWluIG5hbWVzIGluIGNuYW1lcywgUFRSIHJlY29yZHMsIFRYVCByZWNvcmRzIGV0Yy4KKy5UUAorLkIgXC1ULCAtLWxvY2FsLXR0bD08dGltZT4KK1doZW4gcmVwbHlpbmcgd2l0aCBpbmZvcm1hdGlvbiBmcm9tIC9ldGMvaG9zdHMgb3IgdGhlIERIQ1AgbGVhc2VzCitmaWxlIGRuc21hc3EgYnkgZGVmYXVsdCBzZXRzIHRoZSB0aW1lLXRvLWxpdmUgZmllbGQgdG8gemVybywgbWVhbmluZwordGhhdCB0aGUgcmVxdWVzdGVyIHNob3VsZCBub3QgaXRzZWxmIGNhY2hlIHRoZSBpbmZvcm1hdGlvbi4gVGhpcyBpcwordGhlIGNvcnJlY3QgdGhpbmcgdG8gZG8gaW4gYWxtb3N0IGFsbCBzaXR1YXRpb25zLiBUaGlzIG9wdGlvbiBhbGxvd3MgYQordGltZS10by1saXZlIChpbiBzZWNvbmRzKSB0byBiZSBnaXZlbiBmb3IgdGhlc2UgcmVwbGllcy4gVGhpcyB3aWxsCityZWR1Y2UgdGhlIGxvYWQgb24gdGhlIHNlcnZlciBhdCB0aGUgZXhwZW5zZSBvZiBjbGllbnRzIHVzaW5nIHN0YWxlCitkYXRhIHVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcy4KKy5UUAorLkIgLS1uZWctdHRsPTx0aW1lPgorTmVnYXRpdmUgcmVwbGllcyBmcm9tIHVwc3RyZWFtIHNlcnZlcnMgbm9ybWFsbHkgY29udGFpbiB0aW1lLXRvLWxpdmUKK2luZm9ybWF0aW9uIGluIFNPQSByZWNvcmRzIHdoaWNoIGRuc21hc3EgdXNlcyBmb3IgY2FjaGluZy4gSWYgdGhlCityZXBsaWVzIGZyb20gdXBzdHJlYW0gc2VydmVycyBvbWl0IHRoaXMgaW5mb3JtYXRpb24sIGRuc21hc3EgZG9lcyBub3QKK2NhY2hlIHRoZSByZXBseS4gVGhpcyBvcHRpb24gZ2l2ZXMgYSBkZWZhdWx0IHZhbHVlIGZvciB0aW1lLXRvLWxpdmUKKyhpbiBzZWNvbmRzKSB3aGljaCBkbnNtYXNxIHVzZXMgdG8gY2FjaGUgbmVnYXRpdmUgcmVwbGllcyBldmVuIGluIAordGhlIGFic2VuY2Ugb2YgYW4gU09BIHJlY29yZC4gCisuVFAKKy5CIC0tbWF4LXR0bD08dGltZT4KK1NldCBhIG1heGltdW0gVFRMIHZhbHVlIHRoYXQgd2lsbCBiZSBoYW5kZWQgb3V0IHRvIGNsaWVudHMuIFRoZSBzcGVjaWZpZWQKK21heGltdW0gVFRMIHdpbGwgYmUgZ2l2ZW4gdG8gY2xpZW50cyBpbnN0ZWFkIG9mIHRoZSB0cnVlIFRUTCB2YWx1ZSBpZiBpdCBpcyAKK2xvd2VyLiBUaGUgdHJ1ZSBUVEwgdmFsdWUgaXMgaG93ZXZlciBrZXB0IGluIHRoZSBjYWNoZSB0byBhdm9pZCBmbG9vZGluZyAKK3RoZSB1cHN0cmVhbSBETlMgc2VydmVycy4KKy5UUAorLkIgLS1tYXgtY2FjaGUtdHRsPTx0aW1lPgorU2V0IGEgbWF4aW11bSBUVEwgdmFsdWUgZm9yIGVudHJpZXMgaW4gdGhlIGNhY2hlLgorLlRQCisuQiAtLW1pbi1jYWNoZS10dGw9PHRpbWU+CitFeHRlbmQgc2hvcnQgVFRMIHZhbHVlcyB0byB0aGUgdGltZSBnaXZlbiB3aGVuIGNhY2hpbmcgdGhlbS4gTm90ZSB0aGF0CithcnRpZmljaWFsbHkgZXh0ZW5kaW5nIFRUTCB2YWx1ZXMgaXMgaW4gZ2VuZXJhbCBhIGJhZCBpZGVhLCBkbyBub3QgZG8gaXQgCit1bmxlc3MgeW91IGhhdmUgYSBnb29kIHJlYXNvbiwgYW5kIHVuZGVyc3RhbmQgd2hhdCB5b3UgYXJlIGRvaW5nLiAKK0Ruc21hc3EgbGltaXRzIHRoZSB2YWx1ZSBvZiB0aGlzIG9wdGlvbiB0byBvbmUgaG91ciwgdW5sZXNzIHJlY29tcGlsZWQuCisuVFAKKy5CIC0tYXV0aC10dGw9PHRpbWU+CitTZXQgdGhlIFRUTCB2YWx1ZSByZXR1cm5lZCBpbiBhbnN3ZXJzIGZyb20gdGhlIGF1dGhvcml0YXRpdmUgc2VydmVyLgorLlRQCisuQiBcLWssIC0ta2VlcC1pbi1mb3JlZ3JvdW5kCitEbyBub3QgZ28gaW50byB0aGUgYmFja2dyb3VuZCBhdCBzdGFydHVwIGJ1dCBvdGhlcndpc2UgcnVuIGFzCitub3JtYWwuIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHVzZSB3aGVuIGRuc21hc3EgaXMgcnVuIHVuZGVyIGRhZW1vbnRvb2xzCitvciBsYXVuY2hkLgorLlRQCisuQiBcLWQsIC0tbm8tZGFlbW9uCitEZWJ1ZyBtb2RlOiBkb24ndCBmb3JrIHRvIHRoZSBiYWNrZ3JvdW5kLCBkb24ndCB3cml0ZSBhIHBpZCBmaWxlLAorZG9uJ3QgY2hhbmdlIHVzZXIgaWQsIGdlbmVyYXRlIGEgY29tcGxldGUgY2FjaGUgZHVtcCBvbiByZWNlaXB0IG9uCitTSUdVU1IxLCBsb2cgdG8gc3RkZXJyIGFzIHdlbGwgYXMgc3lzbG9nLCBkb24ndCBmb3JrIG5ldyBwcm9jZXNzZXMKK3RvIGhhbmRsZSBUQ1AgcXVlcmllcy4gTm90ZSB0aGF0IHRoaXMgb3B0aW9uIGlzIGZvciB1c2UgaW4gZGVidWdnaW5nCitvbmx5LCB0byBzdG9wIGRuc21hc3EgZGFlbW9uaXNpbmcgaW4gcHJvZHVjdGlvbiwgdXNlIAorLkIgLWsuCisuVFAKKy5CIFwtcSwgLS1sb2ctcXVlcmllcworTG9nIHRoZSByZXN1bHRzIG9mIEROUyBxdWVyaWVzIGhhbmRsZWQgYnkgZG5zbWFzcS4gRW5hYmxlIGEgZnVsbCBjYWNoZSBkdW1wIG9uIHJlY2VpcHQgb2YgU0lHVVNSMS4gSWYgdGhlIGFyZ3VtZW50ICJleHRyYSIgaXMgc3VwcGxpZWQsIGllCisuQiAtLWxvZy1xdWVyaWVzPWV4dHJhCit0aGVuIHRoZSBsb2cgaGFzIGV4dHJhIGluZm9ybWF0aW9uIGF0IHRoZSBzdGFydCBvZiBlYWNoIGxpbmUuCitUaGlzIGNvbnNpc3RzIG9mIGEgc2VyaWFsIG51bWJlciB3aGljaCB0aWVzIHRvZ2V0aGVyIHRoZSBsb2cgbGluZXMgYXNzb2NpYXRlZCB3aXRoIGFuIGluZGl2aWR1YWwgcXVlcnksIGFuZCB0aGUgSVAgYWRkcmVzcyBvZiB0aGUgcmVxdWVzdG9yLgorLlRQCisuQiBcLTgsIC0tbG9nLWZhY2lsaXR5PTxmYWNpbGl0eT4KK1NldCB0aGUgZmFjaWxpdHkgdG8gd2hpY2ggZG5zbWFzcSB3aWxsIHNlbmQgc3lzbG9nIGVudHJpZXMsIHRoaXMKK2RlZmF1bHRzIHRvIERBRU1PTiwgYW5kIHRvIExPQ0FMMCB3aGVuIGRlYnVnIG1vZGUgaXMgaW4gb3BlcmF0aW9uLiBJZgordGhlIGZhY2lsaXR5IGdpdmVuIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSAnLycgY2hhcmFjdGVyLCBpdCBpcyB0YWtlbiB0bworYmUgYSBmaWxlbmFtZSwgYW5kIGRuc21hc3EgbG9ncyB0byB0aGUgZ2l2ZW4gZmlsZSwgaW5zdGVhZCBvZgorc3lzbG9nLiBJZiB0aGUgZmFjaWxpdHkgaXMgJy0nIHRoZW4gZG5zbWFzcSBsb2dzIHRvIHN0ZGVyci4KKyhFcnJvcnMgd2hpbHN0IHJlYWRpbmcgY29uZmlndXJhdGlvbiB3aWxsIHN0aWxsIGdvIHRvIHN5c2xvZywKK2J1dCBhbGwgb3V0cHV0IGZyb20gYSBzdWNjZXNzZnVsIHN0YXJ0dXAsIGFuZCBhbGwgb3V0cHV0IHdoaWxzdAorcnVubmluZywgd2lsbCBnbyBleGNsdXNpdmVseSB0byB0aGUgZmlsZS4pIFdoZW4gbG9nZ2luZyB0byBhIGZpbGUsCitkbnNtYXNxIHdpbGwgY2xvc2UgYW5kIHJlb3BlbiB0aGUgZmlsZSB3aGVuIGl0IHJlY2VpdmVzIFNJR1VTUjIuIFRoaXMgCithbGxvd3MgdGhlIGxvZyBmaWxlIHRvIGJlIHJvdGF0ZWQgd2l0aG91dCBzdG9wcGluZyBkbnNtYXNxLgorLlRQCisuQiAtLWxvZy1hc3luY1s9PGxpbmVzPl0KK0VuYWJsZSBhc3luY2hyb25vdXMgbG9nZ2luZyBhbmQgb3B0aW9uYWxseSBzZXQgdGhlIGxpbWl0IG9uIHRoZQorbnVtYmVyIG9mIGxpbmVzCit3aGljaCB3aWxsIGJlIHF1ZXVlZCBieSBkbnNtYXNxIHdoZW4gd3JpdGluZyB0byB0aGUgc3lzbG9nIGlzIHNsb3cuIAorRG5zbWFzcSBjYW4gbG9nIGFzeW5jaHJvbm91c2x5OiB0aGlzCithbGxvd3MgaXQgdG8gY29udGludWUgZnVuY3Rpb25pbmcgd2l0aG91dCBiZWluZyBibG9ja2VkIGJ5IHN5c2xvZywgYW5kCithbGxvd3Mgc3lzbG9nIHRvIHVzZSBkbnNtYXNxIGZvciBETlMgcXVlcmllcyB3aXRob3V0IHJpc2tpbmcgZGVhZGxvY2suCitJZiB0aGUgcXVldWUgb2YgbG9nLWxpbmVzIGJlY29tZXMgZnVsbCwgZG5zbWFzcSB3aWxsIGxvZyB0aGUKK292ZXJmbG93LCBhbmQgdGhlIG51bWJlciBvZiBtZXNzYWdlcyAgbG9zdC4gVGhlIGRlZmF1bHQgcXVldWUgbGVuZ3RoIGlzCis1LCBhIHNhbmUgdmFsdWUgd291bGQgYmUgNS0yNSwgYW5kIGEgbWF4aW11bSBsaW1pdCBvZiAxMDAgaXMgaW1wb3NlZC4KKy5UUAorLkIgXC14LCAtLXBpZC1maWxlPTxwYXRoPgorU3BlY2lmeSBhbiBhbHRlcm5hdGUgcGF0aCBmb3IgZG5zbWFzcSB0byByZWNvcmQgaXRzIHByb2Nlc3MtaWQgaW4uIE5vcm1hbGx5IC92YXIvcnVuL2Ruc21hc3EucGlkLgorLlRQCisuQiBcLXUsIC0tdXNlcj08dXNlcm5hbWU+CitTcGVjaWZ5IHRoZSB1c2VyaWQgdG8gd2hpY2ggZG5zbWFzcSB3aWxsIGNoYW5nZSBhZnRlciBzdGFydHVwLiBEbnNtYXNxIG11c3Qgbm9ybWFsbHkgYmUgc3RhcnRlZCBhcyByb290LCBidXQgaXQgd2lsbCBkcm9wIHJvb3QgCitwcml2aWxlZ2VzIGFmdGVyIHN0YXJ0dXAgYnkgY2hhbmdpbmcgaWQgdG8gYW5vdGhlciB1c2VyLiBOb3JtYWxseSB0aGlzIHVzZXIgaXMgIm5vYm9keSIgYnV0IHRoYXQgCitjYW4gYmUgb3Zlci1yaWRkZW4gd2l0aCB0aGlzIHN3aXRjaC4KKy5UUAorLkIgXC1nLCAtLWdyb3VwPTxncm91cG5hbWU+IAorU3BlY2lmeSB0aGUgZ3JvdXAgd2hpY2ggZG5zbWFzcSB3aWxsIHJ1bgorYXMuIFRoZSBkZWZhdWx0cyB0byAiZGlwIiwgaWYgYXZhaWxhYmxlLCB0byBmYWNpbGl0YXRlIGFjY2VzcyB0bworL2V0Yy9wcHAvcmVzb2x2LmNvbmYgd2hpY2ggaXMgbm90IG5vcm1hbGx5IHdvcmxkIHJlYWRhYmxlLgorLlRQCisuQiBcLXYsIC0tdmVyc2lvbgorUHJpbnQgdGhlIHZlcnNpb24gbnVtYmVyLgorLlRQCisuQiBcLXAsIC0tcG9ydD08cG9ydD4KK0xpc3RlbiBvbiA8cG9ydD4gaW5zdGVhZCBvZiB0aGUgc3RhbmRhcmQgRE5TIHBvcnQgKDUzKS4gU2V0dGluZyB0aGlzCit0byB6ZXJvIGNvbXBsZXRlbHkgZGlzYWJsZXMgRE5TIGZ1bmN0aW9uLCBsZWF2aW5nIG9ubHkgREhDUCBhbmQvb3IgVEZUUC4KKy5UUAorLkIgXC1QLCAtLWVkbnMtcGFja2V0LW1heD08c2l6ZT4KK1NwZWNpZnkgdGhlIGxhcmdlc3QgRUROUy4wIFVEUCBwYWNrZXQgd2hpY2ggaXMgc3VwcG9ydGVkIGJ5IHRoZSBETlMKK2ZvcndhcmRlci4gRGVmYXVsdHMgdG8gNDA5Niwgd2hpY2ggaXMgdGhlIFJGQzU2MjUtcmVjb21tZW5kZWQgc2l6ZS4KKy5UUAorLkIgXC1RLCAtLXF1ZXJ5LXBvcnQ9PHF1ZXJ5X3BvcnQ+CitTZW5kIG91dGJvdW5kIEROUyBxdWVyaWVzIGZyb20sIGFuZCBsaXN0ZW4gZm9yIHRoZWlyIHJlcGxpZXMgb24sIHRoZQorc3BlY2lmaWMgVURQIHBvcnQgPHF1ZXJ5X3BvcnQ+IGluc3RlYWQgb2YgdXNpbmcgcmFuZG9tIHBvcnRzLiBOT1RFCit0aGF0IHVzaW5nIHRoaXMgb3B0aW9uIHdpbGwgbWFrZSBkbnNtYXNxIGxlc3Mgc2VjdXJlIGFnYWluc3QgRE5TCitzcG9vZmluZyBhdHRhY2tzIGJ1dCBpdCBtYXkgYmUgZmFzdGVyIGFuZCB1c2UgbGVzcyByZXNvdXJjZXMuICBTZXR0aW5nIHRoaXMgb3B0aW9uCit0byB6ZXJvIG1ha2VzIGRuc21hc3EgdXNlIGEgc2luZ2xlIHBvcnQgYWxsb2NhdGVkIHRvIGl0IGJ5IHRoZQorT1M6IHRoaXMgd2FzIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBpbiB2ZXJzaW9ucyBwcmlvciB0byAyLjQzLiAKKy5UUAorLkIgLS1taW4tcG9ydD08cG9ydD4KK0RvIG5vdCB1c2UgcG9ydHMgbGVzcyB0aGFuIHRoYXQgZ2l2ZW4gYXMgc291cmNlIGZvciBvdXRib3VuZCBETlMKK3F1ZXJpZXMuIERuc21hc3EgcGlja3MgcmFuZG9tIHBvcnRzIGFzIHNvdXJjZSBmb3Igb3V0Ym91bmQgcXVlcmllczoKK3doZW4gdGhpcyBvcHRpb24gaXMgZ2l2ZW4sIHRoZSBwb3J0cyB1c2VkIHdpbGwgYWx3YXlzIHRvIGxhcmdlcgordGhhbiB0aGF0IHNwZWNpZmllZC4gVXNlZnVsIGZvciBzeXN0ZW1zIGJlaGluZCBmaXJld2FsbHMuIAorLlRQCisuQiBcLWksIC0taW50ZXJmYWNlPTxpbnRlcmZhY2UgbmFtZT4KK0xpc3RlbiBvbmx5IG9uIHRoZSBzcGVjaWZpZWQgaW50ZXJmYWNlKHMpLiBEbnNtYXNxIGF1dG9tYXRpY2FsbHkgYWRkcwordGhlIGxvb3BiYWNrIChsb2NhbCkgaW50ZXJmYWNlIHRvIHRoZSBsaXN0IG9mIGludGVyZmFjZXMgdG8gdXNlIHdoZW4KK3RoZQorLkIgXC0taW50ZXJmYWNlCitvcHRpb24gIGlzIHVzZWQuIElmIG5vCisuQiBcLS1pbnRlcmZhY2UKK29yCisuQiBcLS1saXN0ZW4tYWRkcmVzcworb3B0aW9ucyBhcmUgZ2l2ZW4gZG5zbWFzcSBsaXN0ZW5zIG9uIGFsbCBhdmFpbGFibGUgaW50ZXJmYWNlcyBleGNlcHQgYW55CitnaXZlbiBpbgorLkIgXC0tZXhjZXB0LWludGVyZmFjZQorb3B0aW9ucy4gSVAgYWxpYXMgaW50ZXJmYWNlcyAoZWcgImV0aDE6MCIpIGNhbm5vdCBiZSB1c2VkIHdpdGgKKy5CIC0taW50ZXJmYWNlCitvcgorLkIgLS1leGNlcHQtaW50ZXJmYWNlCitvcHRpb25zLCB1c2UgLS1saXN0ZW4tYWRkcmVzcyBpbnN0ZWFkLiBBIHNpbXBsZSB3aWxkY2FyZCwgY29uc2lzdGluZworb2YgYSB0cmFpbGluZyAnKicsIGNhbiBiZSB1c2VkIGluIAorLkIgXC0taW50ZXJmYWNlIAorYW5kCisuQiBcLS1leGNlcHQtaW50ZXJmYWNlCitvcHRpb25zLiAKKy5UUAorLkIgXC1JLCAtLWV4Y2VwdC1pbnRlcmZhY2U9PGludGVyZmFjZSBuYW1lPgorRG8gbm90IGxpc3RlbiBvbiB0aGUgc3BlY2lmaWVkIGludGVyZmFjZS4gTm90ZSB0aGF0IHRoZSBvcmRlciBvZgorLkIgXC0tbGlzdGVuLWFkZHJlc3MKKy5CIC0taW50ZXJmYWNlCithbmQKKy5CIC0tZXhjZXB0LWludGVyZmFjZQorb3B0aW9ucyBkb2VzIG5vdCBtYXR0ZXIgYW5kIHRoYXQgCisuQiAtLWV4Y2VwdC1pbnRlcmZhY2UKK29wdGlvbnMgYWx3YXlzIG92ZXJyaWRlIHRoZSBvdGhlcnMuCisuVFAKKy5CIC0tYXV0aC1zZXJ2ZXI9PGRvbWFpbj4sPGludGVyZmFjZT58PGlwLWFkZHJlc3M+CitFbmFibGUgRE5TIGF1dGhvcml0YXRpdmUgbW9kZSBmb3IgcXVlcmllcyBhcnJpdmluZyBhdCBhbiBpbnRlcmZhY2Ugb3IgYWRkcmVzcy4gTm90ZSB0aGF0IHRoZSBpbnRlcmZhY2Ugb3IgYWRkcmVzcworbmVlZCBub3QgYmUgbWVudGlvbmVkIGluIAorLkIgLS1pbnRlcmZhY2UKK29yIAorLkIgLS1saXN0ZW4tYWRkcmVzcworY29uZmlndXJhdGlvbiwgaW5kZWVkCisuQiAtLWF1dGgtc2VydmVyCit3aWxsIG92ZXJpZGUgdGhlc2UgYW5kIHByb3ZpZGUgYSBkaWZmZXJlbnQgRE5TIHNlcnZpY2Ugb24gdGhlCitzcGVjaWZpZWQgaW50ZXJmYWNlLiBUaGUgPGRvbWFpbj4gaXMgdGhlICJnbHVlIHJlY29yZCIuIEl0IHNob3VsZAorcmVzb2x2ZSBpbiB0aGUgZ2xvYmFsIEROUyB0byBhIEEgYW5kL29yIEFBQUEgcmVjb3JkIHdoaWNoIHBvaW50cyB0bwordGhlIGFkZHJlc3MgZG5zbWFzcSBpcyBsaXN0ZW5pbmcgb24uIFdoZW4gYW4gaW50ZXJmYWNlIGlzIHNwZWNpZmllZCwKK2l0IG1heSBiZSBxdWFsaWZpZWQgd2l0aCAiLzQiIG9yICIvNiIgdG8gc3BlY2lmeSBvbmx5IHRoZSBJUHY0IG9yIElQdjYKK2FkZHJlc3NlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGludGVyZmFjZS4KKy5UUAorLkIgLS1sb2NhbC1zZXJ2aWNlCitBY2NlcHQgRE5TIHF1ZXJpZXMgb25seSBmcm9tIGhvc3RzIHdob3NlIGFkZHJlc3MgaXMgb24gYSBsb2NhbCBzdWJuZXQsCitpZSBhIHN1Ym5ldCBmb3Igd2hpY2ggYW4gaW50ZXJmYWNlIGV4aXN0cyBvbiB0aGUgc2VydmVyLiBUaGlzIG9wdGlvbgorb25seSBoYXMgZWZmZWN0IGlzIHRoZXJlIGFyZSBubyAtLWludGVyZmFjZSAtLWV4Y2VwdC1pbnRlcmZhY2UsCistLWxpc3Rlbi1hZGRyZXNzIG9yIC0tYXV0aC1zZXJ2ZXIgb3B0aW9ucy4gSXQgaXMgaW50ZW5kZWQgdG8gYmUgc2V0IGFzCithIGRlZmF1bHQgb24gaW5zdGFsbGF0aW9uLCB0byBhbGxvdyB1bmNvbmZpZ3VyZWQgaW5zdGFsbGF0aW9ucyB0byBiZQordXNlZnVsIGJ1dCBhbHNvIHNhZmUgZnJvbSBiZWluZyB1c2VkIGZvciBETlMgYW1wbGlmaWNhdGlvbiBhdHRhY2tzLgorLlRQIAorLkIgXC0yLCAtLW5vLWRoY3AtaW50ZXJmYWNlPTxpbnRlcmZhY2UgbmFtZT4KK0RvIG5vdCBwcm92aWRlIERIQ1Agb3IgVEZUUCBvbiB0aGUgc3BlY2lmaWVkIGludGVyZmFjZSwgYnV0IGRvIHByb3ZpZGUgRE5TIHNlcnZpY2UuCisuVFAKKy5CIFwtYSwgLS1saXN0ZW4tYWRkcmVzcz08aXBhZGRyPgorTGlzdGVuIG9uIHRoZSBnaXZlbiBJUCBhZGRyZXNzKGVzKS4gQm90aCAKKy5CIFwtLWludGVyZmFjZQorYW5kCisuQiBcLS1saXN0ZW4tYWRkcmVzcworb3B0aW9ucyBtYXkgYmUgZ2l2ZW4sIGluIHdoaWNoIGNhc2UgdGhlIHNldCBvZiBib3RoIGludGVyZmFjZXMgYW5kCithZGRyZXNzZXMgaXMgdXNlZC4gTm90ZSB0aGF0IGlmIG5vCisuQiBcLS1pbnRlcmZhY2UKK29wdGlvbiBpcyBnaXZlbiwgYnV0IAorLkIgXC0tbGlzdGVuLWFkZHJlc3MKK2lzLCBkbnNtYXNxIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgbGlzdGVuIG9uIHRoZSBsb29wYmFjaworaW50ZXJmYWNlLiBUbyBhY2hpZXZlIHRoaXMsIGl0cyBJUCBhZGRyZXNzLCAxMjcuMC4wLjEsIG11c3QgYmUKK2V4cGxpY2l0bHkgZ2l2ZW4gYXMgYSAKKy5CIFwtLWxpc3Rlbi1hZGRyZXNzCitvcHRpb24uCisuVFAKKy5CIFwteiwgLS1iaW5kLWludGVyZmFjZXMKK09uIHN5c3RlbXMgd2hpY2ggc3VwcG9ydCBpdCwgZG5zbWFzcSBiaW5kcyB0aGUgd2lsZGNhcmQgYWRkcmVzcywKK2V2ZW4gd2hlbiBpdCBpcyBsaXN0ZW5pbmcgb24gb25seSBzb21lIGludGVyZmFjZXMuIEl0IHRoZW4gZGlzY2FyZHMKK3JlcXVlc3RzIHRoYXQgaXQgc2hvdWxkbid0IHJlcGx5IHRvLiBUaGlzIGhhcyB0aGUgYWR2YW50YWdlIG9mIAord29ya2luZyBldmVuIHdoZW4gaW50ZXJmYWNlcyBjb21lIGFuZCBnbyBhbmQgY2hhbmdlIGFkZHJlc3MuIFRoaXMKK29wdGlvbiBmb3JjZXMgZG5zbWFzcSB0byByZWFsbHkgYmluZCBvbmx5IHRoZSBpbnRlcmZhY2VzIGl0IGlzCitsaXN0ZW5pbmcgb24uIEFib3V0IHRoZSBvbmx5IHRpbWUgd2hlbiB0aGlzIGlzIHVzZWZ1bCBpcyB3aGVuIAorcnVubmluZyBhbm90aGVyIG5hbWVzZXJ2ZXIgKG9yIGFub3RoZXIgaW5zdGFuY2Ugb2YgZG5zbWFzcSkgb24gdGhlCitzYW1lIG1hY2hpbmUuIFNldHRpbmcgdGhpcyBvcHRpb24gYWxzbyBlbmFibGVzIG11bHRpcGxlIGluc3RhbmNlcyBvZgorZG5zbWFzcSB3aGljaCBwcm92aWRlIERIQ1Agc2VydmljZSB0byBydW4gaW4gdGhlIHNhbWUgbWFjaGluZS4KKy5UUAorLkIgLS1iaW5kLWR5bmFtaWMKK0VuYWJsZSBhIG5ldHdvcmsgbW9kZSB3aGljaCBpcyBhIGh5YnJpZCBiZXR3ZWVuIAorLkIgLS1iaW5kLWludGVyZmFjZXMKK2FuZCB0aGUgZGVmYXVsdC4gRG5zbWFzcSBiaW5kcyB0aGUgYWRkcmVzcyBvZiBpbmRpdmlkdWFsIGludGVyZmFjZXMsCithbGxvd2luZyBtdWx0aXBsZSBkbnNtYXNxIGluc3RhbmNlcywgYnV0IGlmIG5ldyBpbnRlcmZhY2VzIG9yCithZGRyZXNzZXMgYXBwZWFyLCBpdCBhdXRvbWF0aWNhbGx5IGxpc3RlbnMgb24gdGhvc2UgKHN1YmplY3QgdG8gYW55CithY2Nlc3MtY29udHJvbCBjb25maWd1cmF0aW9uKS4gVGhpcyBtYWtlcyBkeW5hbWljYWxseSBjcmVhdGVkCitpbnRlcmZhY2VzIHdvcmsgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBkZWZhdWx0LiBJbXBsZW1lbnRpbmcgdGhpcworb3B0aW9uIHJlcXVpcmVzIG5vbi1zdGFuZGFyZCBuZXR3b3JraW5nIEFQSXMgYW5kIGl0IGlzIG9ubHkgYXZhaWxhYmxlCit1bmRlciBMaW51eC4gT24gb3RoZXIgcGxhdGZvcm1zIGl0IGZhbGxzLWJhY2sgdG8gLS1iaW5kLWludGVyZmFjZXMgbW9kZS4KKy5UUAorLkIgXC15LCAtLWxvY2FsaXNlLXF1ZXJpZXMKK1JldHVybiBhbnN3ZXJzIHRvIEROUyBxdWVyaWVzIGZyb20gL2V0Yy9ob3N0cyB3aGljaCBkZXBlbmQgb24gdGhlIGludGVyZmFjZSBvdmVyIHdoaWNoIHRoZSBxdWVyeSB3YXMKK3JlY2VpdmVkLiBJZiBhIG5hbWUgaW4gL2V0Yy9ob3N0cyBoYXMgbW9yZSB0aGFuIG9uZSBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aAoraXQsIGFuZCBhdCBsZWFzdCBvbmUgb2YgdGhvc2UgYWRkcmVzc2VzIGlzIG9uIHRoZSBzYW1lIHN1Ym5ldCBhcyB0aGUKK2ludGVyZmFjZSB0byB3aGljaCB0aGUgcXVlcnkgd2FzIHNlbnQsIHRoZW4gcmV0dXJuIG9ubHkgdGhlCithZGRyZXNzKGVzKSBvbiB0aGF0IHN1Ym5ldC4gVGhpcyBhbGxvd3MgZm9yIGEgc2VydmVyICB0byBoYXZlIG11bHRpcGxlCithZGRyZXNzZXMgaW4gL2V0Yy9ob3N0cyBjb3JyZXNwb25kaW5nIHRvIGVhY2ggb2YgaXRzIGludGVyZmFjZXMsIGFuZAoraG9zdHMgd2lsbCBnZXQgdGhlIGNvcnJlY3QgYWRkcmVzcyBiYXNlZCBvbiB3aGljaCBuZXR3b3JrIHRoZXkgYXJlCithdHRhY2hlZCB0by4gQ3VycmVudGx5IHRoaXMgZmFjaWxpdHkgaXMgbGltaXRlZCB0byBJUHY0LgorLlRQCisuQiBcLWIsIC0tYm9ndXMtcHJpdgorQm9ndXMgcHJpdmF0ZSByZXZlcnNlIGxvb2t1cHMuIEFsbCByZXZlcnNlIGxvb2t1cHMgZm9yIHByaXZhdGUgSVAgcmFuZ2VzIChpZSAxOTIuMTY4LngueCwgZXRjKQord2hpY2ggYXJlIG5vdCBmb3VuZCBpbiAvZXRjL2hvc3RzIG9yIHRoZSBESENQIGxlYXNlcyBmaWxlIGFyZSBhbnN3ZXJlZAord2l0aCAibm8gc3VjaCBkb21haW4iIHJhdGhlciB0aGFuIGJlaW5nIGZvcndhcmRlZCB1cHN0cmVhbS4KKy5UUAorLkIgXC1WLCAtLWFsaWFzPVs8b2xkLWlwPl18WzxzdGFydC1pcD4tPGVuZC1pcD5dLDxuZXctaXA+Wyw8bWFzaz5dCitNb2RpZnkgSVB2NCBhZGRyZXNzZXMgcmV0dXJuZWQgZnJvbSB1cHN0cmVhbSBuYW1lc2VydmVyczsgb2xkLWlwIGlzCityZXBsYWNlZCBieSBuZXctaXAuIElmIHRoZSBvcHRpb25hbCBtYXNrIGlzIGdpdmVuIHRoZW4gYW55IGFkZHJlc3MKK3doaWNoIG1hdGNoZXMgdGhlIG1hc2tlZCBvbGQtaXAgd2lsbCBiZSByZS13cml0dGVuLiBTbywgZm9yIGluc3RhbmNlCisuQiAtLWFsaWFzPTEuMi4zLjAsNi43LjguMCwyNTUuMjU1LjI1NS4wIAord2lsbCBtYXAgMS4yLjMuNTYgdG8gNi43LjguNTYgYW5kIDEuMi4zLjY3IHRvIDYuNy44LjY3LiBUaGlzIGlzIHdoYXQKK0Npc2NvIFBJWCByb3V0ZXJzIGNhbGwgIkROUyBkb2N0b3JpbmciLiBJZiB0aGUgb2xkIElQIGlzIGdpdmVuIGFzCityYW5nZSwgdGhlbiBvbmx5IGFkZHJlc3NlcyBpbiB0aGUgcmFuZ2UsIHJhdGhlciB0aGFuIGEgd2hvbGUgc3VibmV0LAorYXJlIHJlLXdyaXR0ZW4uIFNvIAorLkIgLS1hbGlhcz0xOTIuMTY4LjAuMTAtMTkyLjE2OC4wLjQwLDEwLjAuMC4wLDI1NS4yNTUuMjU1LjAKK21hcHMgMTkyLjE2OC4wLjEwLT4xOTIuMTY4LjAuNDAgdG8gMTAuMC4wLjEwLT4xMC4wLjAuNDAKKy5UUCAKKy5CIFwtQiwgLS1ib2d1cy1ueGRvbWFpbj08aXBhZGRyPgorVHJhbnNmb3JtIHJlcGxpZXMgd2hpY2ggY29udGFpbiB0aGUgSVAgYWRkcmVzcyBnaXZlbiBpbnRvICJObyBzdWNoCitkb21haW4iIHJlcGxpZXMuIFRoaXMgaXMgaW50ZW5kZWQgdG8gY291bnRlcmFjdCBhIGRldmlvdXMgbW92ZSBtYWRlIGJ5CitWZXJpc2lnbiBpbiBTZXB0ZW1iZXIgMjAwMyB3aGVuIHRoZXkgc3RhcnRlZCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YKK2FuIGFkdmVydGlzaW5nIHdlYiBwYWdlIGluIHJlc3BvbnNlIHRvIHF1ZXJpZXMgZm9yIHVucmVnaXN0ZXJlZCBuYW1lcywKK2luc3RlYWQgb2YgdGhlIGNvcnJlY3QgTlhET01BSU4gcmVzcG9uc2UuIFRoaXMgb3B0aW9uIHRlbGxzIGRuc21hc3EgdG8KK2Zha2UgdGhlIGNvcnJlY3QgcmVzcG9uc2Ugd2hlbiBpdCBzZWVzIHRoaXMgYmVoYXZpb3VyLiBBcyBhdCBTZXB0IDIwMDMKK3RoZSBJUCBhZGRyZXNzIGJlaW5nIHJldHVybmVkIGJ5IFZlcmlzaWduIGlzIDY0Ljk0LjExMC4xMQorLlRQIAorLkIgXC1CLCAtLWlnbm9yZS1hZGRyZXNzPTxpcGFkZHI+CitJZ25vcmUgcmVwbGllcyB0byBBLXJlY29yZCBxdWVyaWVzIHdoaWNoIGluY2x1ZGUgdGhlIHNwZWNpZmllZCBhZGRyZXNzLiAKK05vIGVycm9yIGlzIGdlbmVyYXRlZCwgZG5zbWFzcSBzaW1wbHkgY29udGludWVzIHRvIGxpc3RlbiBmb3IgYW5vdGhlciByZXBseS4gCitUaGlzIGlzIHVzZWZ1bCB0byBkZWZlYXQgYmxvY2tpbmcgc3RyYXRlZ2llcyB3aGljaCByZWx5IG9uIHF1aWNrbHkgc3VwcGx5aW5nIGEKK2ZvcmdlZCBhbnN3ZXIgdG8gYSBETlMgcmVxdWVzdCBmb3IgY2VydGFpbiBkb21haW4sIGJlZm9yZSB0aGUgY29ycmVjdCBhbnN3ZXIgY2FuIGFycml2ZS4KKy5UUAorLkIgXC1mLCAtLWZpbHRlcndpbjJrCitMYXRlciB2ZXJzaW9ucyBvZiB3aW5kb3dzIG1ha2UgcGVyaW9kaWMgRE5TIHJlcXVlc3RzIHdoaWNoIGRvbid0IGdldCBzZW5zaWJsZSBhbnN3ZXJzIGZyb20KK3RoZSBwdWJsaWMgRE5TIGFuZCBjYW4gY2F1c2UgcHJvYmxlbXMgYnkgdHJpZ2dlcmluZyBkaWFsLW9uLWRlbWFuZCBsaW5rcy4gVGhpcyBmbGFnIHR1cm5zIG9uIGFuIG9wdGlvbgordG8gZmlsdGVyIHN1Y2ggcmVxdWVzdHMuIFRoZSByZXF1ZXN0cyBibG9ja2VkIGFyZSBmb3IgcmVjb3JkcyBvZiB0eXBlcyBTT0EgYW5kIFNSViwgYW5kIHR5cGUgQU5ZIHdoZXJlIHRoZSAKK3JlcXVlc3RlZCBuYW1lIGhhcyB1bmRlcnNjb3JlcywgdG8gY2F0Y2ggTERBUCByZXF1ZXN0cy4KKy5UUAorLkIgXC1yLCAtLXJlc29sdi1maWxlPTxmaWxlPgorUmVhZCB0aGUgSVAgYWRkcmVzc2VzIG9mIHRoZSB1cHN0cmVhbSBuYW1lc2VydmVycyBmcm9tIDxmaWxlPiwgaW5zdGVhZCBvZgorL2V0Yy9yZXNvbHYuY29uZi4gRm9yIHRoZSBmb3JtYXQgb2YgdGhpcyBmaWxlIHNlZQorLkJSIHJlc29sdi5jb25mICg1KS4gCitUaGUgb25seSBsaW5lcyByZWxldmFudCB0byBkbnNtYXNxIGFyZSBuYW1lc2VydmVyIG9uZXMuIERuc21hc3EgY2FuCitiZSB0b2xkIHRvIHBvbGwgbW9yZSB0aGFuIG9uZSByZXNvbHYuY29uZiBmaWxlLCB0aGUgZmlyc3QgZmlsZSBuYW1lICBzcGVjaWZpZWQKK292ZXJyaWRlcyB0aGUgZGVmYXVsdCwgc3Vic2VxdWVudCBvbmVzIGFkZCB0byB0aGUgbGlzdC4gVGhpcyBpcyBvbmx5CithbGxvd2VkIHdoZW4gcG9sbGluZzsgdGhlIGZpbGUgd2l0aCB0aGUgY3VycmVudGx5IGxhdGVzdCBtb2RpZmljYXRpb24KK3RpbWUgaXMgdGhlIG9uZSB1c2VkLiAKKy5UUAorLkIgXC1SLCAtLW5vLXJlc29sdgorRG9uJ3QgcmVhZCAvZXRjL3Jlc29sdi5jb25mLiBHZXQgdXBzdHJlYW0gc2VydmVycyBvbmx5IGZyb20gdGhlIGNvbW1hbmQKK2xpbmUgb3IgdGhlIGRuc21hc3EgY29uZmlndXJhdGlvbiBmaWxlLgorLlRQCisuQiBcLTEsIC0tZW5hYmxlLWRidXNbPTxzZXJ2aWNlLW5hbWU+XQorQWxsb3cgZG5zbWFzcSBjb25maWd1cmF0aW9uIHRvIGJlIHVwZGF0ZWQgdmlhIERCdXMgbWV0aG9kIGNhbGxzLiBUaGUKK2NvbmZpZ3VyYXRpb24gd2hpY2ggY2FuIGJlIGNoYW5nZWQgaXMgdXBzdHJlYW0gRE5TIHNlcnZlcnMgKGFuZAorY29ycmVzcG9uZGluZyBkb21haW5zKSBhbmQgY2FjaGUgY2xlYXIuIFJlcXVpcmVzIHRoYXQgZG5zbWFzcSBoYXMKK2JlZW4gYnVpbHQgd2l0aCBEQnVzIHN1cHBvcnQuIElmIHRoZSBzZXJ2aWNlIG5hbWUgaXMgZ2l2ZW4sIGRuc21hc3EKK3Byb3ZpZGVzIHNlcnZpY2UgYXQgdGhhdCBuYW1lLCByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCB3aGljaCBpcyAKKy5CIHVrLm9yZy50aGVrZWxsZXlzLmRuc21hc3EKKy5UUCAKKy5CIFwtbywgLS1zdHJpY3Qtb3JkZXIKK0J5IGRlZmF1bHQsIGRuc21hc3Egd2lsbCBzZW5kIHF1ZXJpZXMgdG8gYW55IG9mIHRoZSB1cHN0cmVhbSBzZXJ2ZXJzCitpdCBrbm93cyBhYm91dCBhbmQgdHJpZXMgdG8gZmF2b3VyIHNlcnZlcnMgdGhhdCBhcmUga25vd24gdG8KK2JlIHVwLiBTZXR0aW5nIHRoaXMgZmxhZyBmb3JjZXMgZG5zbWFzcSB0byB0cnkgZWFjaCBxdWVyeSB3aXRoIGVhY2gKK3NlcnZlciBzdHJpY3RseSBpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXIgaW4gL2V0Yy9yZXNvbHYuY29uZgorLlRQCisuQiAtLWFsbC1zZXJ2ZXJzCitCeSBkZWZhdWx0LCB3aGVuIGRuc21hc3EgaGFzIG1vcmUgdGhhbiBvbmUgdXBzdHJlYW0gc2VydmVyIGF2YWlsYWJsZSwKK2l0IHdpbGwgc2VuZCBxdWVyaWVzIHRvIGp1c3Qgb25lIHNlcnZlci4gU2V0dGluZyB0aGlzIGZsYWcgZm9yY2VzCitkbnNtYXNxIHRvIHNlbmQgYWxsIHF1ZXJpZXMgdG8gYWxsIGF2YWlsYWJsZSBzZXJ2ZXJzLiBUaGUgcmVwbHkgZnJvbQordGhlIHNlcnZlciB3aGljaCBhbnN3ZXJzIGZpcnN0IHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlIG9yaWdpbmFsIHJlcXVlc3Rlci4KKy5UUAorLkIgLS1kbnMtbG9vcC1kZXRlY3QKK0VuYWJsZSBjb2RlIHRvIGRldGVjdCBETlMgZm9yd2FyZGluZyBsb29wczsgaWUgdGhlIHNpdHVhdGlvbiB3aGVyZSBhIHF1ZXJ5IHNlbnQgdG8gb25lIAorb2YgdGhlIHVwc3RyZWFtIHNlcnZlciBldmVudHVhbGx5IHJldHVybnMgYXMgYSBuZXcgcXVlcnkgdG8gdGhlIGRuc21hc3EgaW5zdGFuY2UuIFRoZQorcHJvY2VzcyB3b3JrcyBieSBnZW5lcmF0aW5nIFRYVCBxdWVyaWVzIG9mIHRoZSBmb3JtIDxoZXg+LnRlc3QgYW5kIHNlbmRpbmcgdGhlbSB0bworZWFjaCB1cHN0cmVhbSBzZXJ2ZXIuIFRoZSBoZXggaXMgYSBVSUQgd2hpY2ggZW5jb2RlcyB0aGUgaW5zdGFuY2Ugb2YgZG5zbWFzcSBzZW5kaW5nIHRoZSBxdWVyeQorYW5kIHRoZSB1cHN0cmVhbSBzZXJ2ZXIgdG8gd2hpY2ggaXQgd2FzIHNlbnQuIElmIHRoZSBxdWVyeSByZXR1cm5zIHRvIHRoZSBzZXJ2ZXIgd2hpY2ggc2VudCBpdCwgdGhlbgordGhlIHVwc3RyZWFtIHNlcnZlciB0aHJvdWdoIHdoaWNoIGl0IHdhcyBzZW50IGlzIGRpc2FibGVkIGFuZCB0aGlzIGV2ZW50IGlzIGxvZ2dlZC4gRWFjaCB0aW1lIHRoZQorc2V0IG9mIHVwc3RyZWFtIHNlcnZlcnMgY2hhbmdlcywgdGhlIHRlc3QgaXMgcmUtcnVuIG9uIGFsbCBvZiB0aGVtLCBpbmNsdWRpbmcgb25lcyB3aGljaAord2VyZSBwcmV2aW91c2x5IGRpc2FibGVkLgorLlRQCisuQiAtLXN0b3AtZG5zLXJlYmluZAorUmVqZWN0IChhbmQgbG9nKSBhZGRyZXNzZXMgZnJvbSB1cHN0cmVhbSBuYW1lc2VydmVycyB3aGljaCBhcmUgaW4gdGhlCitwcml2YXRlIElQIHJhbmdlcy4gVGhpcyBibG9ja3MgYW4gYXR0YWNrIHdoZXJlIGEgYnJvd3NlciBiZWhpbmQgYQorZmlyZXdhbGwgaXMgdXNlZCB0byBwcm9iZSBtYWNoaW5lcyBvbiB0aGUgbG9jYWwgbmV0d29yay4KKy5UUAorLkIgLS1yZWJpbmQtbG9jYWxob3N0LW9rCitFeGVtcHQgMTI3LjAuMC4wLzggZnJvbSByZWJpbmRpbmcgY2hlY2tzLiBUaGlzIGFkZHJlc3MgcmFuZ2UgaXMKK3JldHVybmVkIGJ5IHJlYWx0aW1lIGJsYWNrIGhvbGUgc2VydmVycywgc28gYmxvY2tpbmcgaXQgbWF5IGRpc2FibGUKK3RoZXNlIHNlcnZpY2VzLgorLlRQIAorLkIgIC0tcmViaW5kLWRvbWFpbi1vaz1bPGRvbWFpbj5dfFtbLzxkb21haW4+L1s8ZG9tYWluPi9dCitEbyBub3QgZGV0ZWN0IGFuZCBibG9jayBkbnMtcmViaW5kIG9uIHF1ZXJpZXMgdG8gdGhlc2UgZG9tYWlucy4gVGhlCithcmd1bWVudCBtYXkgYmUgZWl0aGVyIGEgc2luZ2xlIGRvbWFpbiwgb3IgbXVsdGlwbGUgZG9tYWlucyBzdXJyb3VuZGVkCitieSAnLycsIGxpa2UgdGhlIC0tc2VydmVyIHN5bnRheCwgZWcuIAorLkIgIC0tcmViaW5kLWRvbWFpbi1vaz0vZG9tYWluMS9kb21haW4yL2RvbWFpbjMvCisuVFAKKy5CIFwtbiwgLS1uby1wb2xsCitEb24ndCBwb2xsIC9ldGMvcmVzb2x2LmNvbmYgZm9yIGNoYW5nZXMuCisuVFAKKy5CIC0tY2xlYXItb24tcmVsb2FkCitXaGVuZXZlciAvZXRjL3Jlc29sdi5jb25mIGlzIHJlLXJlYWQgb3IgdGhlIHVwc3RyZWFtIHNlcnZlcnMgYXJlIHNldAordmlhIERCdXMsIGNsZWFyIHRoZSBETlMgY2FjaGUuCitUaGlzIGlzIHVzZWZ1bCB3aGVuIG5ldyBuYW1lc2VydmVycyBtYXkgaGF2ZSBkaWZmZXJlbnQKK2RhdGEgdGhhbiB0aGF0IGhlbGQgaW4gY2FjaGUuCisuVFAKKy5CIFwtRCwgLS1kb21haW4tbmVlZGVkCitUZWxscyBkbnNtYXNxIHRvIG5ldmVyIGZvcndhcmQgQSBvciBBQUFBIHF1ZXJpZXMgZm9yIHBsYWluIG5hbWVzLCB3aXRob3V0IGRvdHMKK29yIGRvbWFpbiBwYXJ0cywgdG8gdXBzdHJlYW0gbmFtZXNlcnZlcnMuIElmIHRoZSBuYW1lIGlzIG5vdCBrbm93bgorZnJvbSAvZXRjL2hvc3RzIG9yIERIQ1AgdGhlbiBhICJub3QgZm91bmQiIGFuc3dlciBpcyByZXR1cm5lZC4KKy5UUAorLkIgXC1TLCAtLWxvY2FsLCAtLXNlcnZlcj1bL1s8ZG9tYWluPl0vW2RvbWFpbi9dXVs8aXBhZGRyPlsjPHBvcnQ+XVtAPHNvdXJjZS1pcD58PGludGVyZmFjZT5bIzxwb3J0Pl1dCitTcGVjaWZ5IElQIGFkZHJlc3Mgb2YgdXBzdHJlYW0gc2VydmVycyBkaXJlY3RseS4gU2V0dGluZyB0aGlzIGZsYWcgZG9lcworbm90IHN1cHByZXNzIHJlYWRpbmcgb2YgL2V0Yy9yZXNvbHYuY29uZiwgdXNlIC1SIHRvIGRvIHRoYXQuIElmIG9uZSBvcgorbW9yZSAKK29wdGlvbmFsIGRvbWFpbnMgYXJlIGdpdmVuLCB0aGF0IHNlcnZlciBpcyB1c2VkIG9ubHkgZm9yIHRob3NlIGRvbWFpbnMKK2FuZCB0aGV5IGFyZSBxdWVyaWVkIG9ubHkgdXNpbmcgdGhlIHNwZWNpZmllZCBzZXJ2ZXIuIFRoaXMgaXMKK2ludGVuZGVkIGZvciBwcml2YXRlIG5hbWVzZXJ2ZXJzOiBpZiB5b3UgaGF2ZSBhIG5hbWVzZXJ2ZXIgb24geW91cgorbmV0d29yayB3aGljaCBkZWFscyB3aXRoIG5hbWVzIG9mIHRoZSBmb3JtCit4eHguaW50ZXJuYWwudGhla2VsbGV5cy5vcmcudWsgYXQgMTkyLjE2OC4xLjEgdGhlbiBnaXZpbmcgIHRoZSBmbGFnIAorLkIgLVMgL2ludGVybmFsLnRoZWtlbGxleXMub3JnLnVrLzE5Mi4xNjguMS4xIAord2lsbCBzZW5kIGFsbCBxdWVyaWVzIGZvcgoraW50ZXJuYWwgbWFjaGluZXMgdG8gdGhhdCBuYW1lc2VydmVyLCBldmVyeXRoaW5nIGVsc2Ugd2lsbCBnbyB0byB0aGUKK3NlcnZlcnMgaW4gL2V0Yy9yZXNvbHYuY29uZi4gQW4gZW1wdHkgZG9tYWluIHNwZWNpZmljYXRpb24sCisuQiAvLyAKK2hhcyB0aGUgc3BlY2lhbCBtZWFuaW5nIG9mICJ1bnF1YWxpZmllZCBuYW1lcyBvbmx5IiBpZSBuYW1lcyB3aXRob3V0IGFueQorZG90cyBpbiB0aGVtLiBBIG5vbi1zdGFuZGFyZCBwb3J0IG1heSBiZSBzcGVjaWZpZWQgYXMgCitwYXJ0IG9mIHRoZSBJUAorYWRkcmVzcyB1c2luZyBhICMgY2hhcmFjdGVyLgorTW9yZSB0aGFuIG9uZSAtUyBmbGFnIGlzIGFsbG93ZWQsIHdpdGgKK3JlcGVhdGVkIGRvbWFpbiBvciBpcGFkZHIgcGFydHMgYXMgcmVxdWlyZWQuCisKK01vcmUgc3BlY2lmaWMgZG9tYWlucyB0YWtlIHByZWNlbmRlbmNlIG92ZXIgbGVzcyBzcGVjaWZpYyBkb21haW5zLCBzbzoKKy5CIC0tc2VydmVyPS9nb29nbGUuY29tLzEuMi4zLjQKKy5CIC0tc2VydmVyPS93d3cuZ29vZ2xlLmNvbS8yLjMuNC41Cit3aWxsIHNlbmQgcXVlcmllcyBmb3IgKi5nb29nbGUuY29tIHRvIDEuMi4zLjQsIGV4Y2VwdCAqd3d3Lmdvb2dsZS5jb20sCit3aGljaCB3aWxsIGdvIHRvIDIuMy40LjUKKworVGhlIHNwZWNpYWwgc2VydmVyIGFkZHJlc3MgJyMnIG1lYW5zLCAidXNlIHRoZSBzdGFuZGFyZCBzZXJ2ZXJzIiwgc28KKy5CIC0tc2VydmVyPS9nb29nbGUuY29tLzEuMi4zLjQKKy5CIC0tc2VydmVyPS93d3cuZ29vZ2xlLmNvbS8jCit3aWxsIHNlbmQgcXVlcmllcyBmb3IgKi5nb29nbGUuY29tIHRvIDEuMi4zLjQsIGV4Y2VwdCAqd3d3Lmdvb2dsZS5jb20gd2hpY2ggd2lsbAorYmUgZm9yd2FyZGVkIGFzIHVzdWFsLgorCitBbHNvIHBlcm1pdHRlZCBpcyBhIC1TCitmbGFnIHdoaWNoIGdpdmVzIGEgZG9tYWluIGJ1dCBubyBJUCBhZGRyZXNzOyB0aGlzIHRlbGxzIGRuc21hc3EgdGhhdAorYSBkb21haW4gaXMgbG9jYWwgYW5kIGl0IG1heSBhbnN3ZXIgcXVlcmllcyBmcm9tIC9ldGMvaG9zdHMgb3IgREhDUAorYnV0IHNob3VsZCBuZXZlciBmb3J3YXJkIHF1ZXJpZXMgb24gdGhhdCBkb21haW4gdG8gYW55IHVwc3RyZWFtCitzZXJ2ZXJzLgorLkIgbG9jYWwKK2lzIGEgc3lub255bSBmb3IKKy5CIHNlcnZlcgordG8gbWFrZSBjb25maWd1cmF0aW9uIGZpbGVzIGNsZWFyZXIgaW4gdGhpcyBjYXNlLgorCitJUHY2IGFkZHJlc3NlcyBtYXkgaW5jbHVkZSBhICVpbnRlcmZhY2Ugc2NvcGUtaWQsIGVnCitmZTgwOjoyMDI6YTQxMjo0NTEyOjdiYmYlZXRoMC4KKworVGhlIG9wdGlvbmFsIHN0cmluZyBhZnRlciB0aGUgQCBjaGFyYWN0ZXIgdGVsbHMKK2Ruc21hc3EgaG93IHRvIHNldCB0aGUgc291cmNlIG9mIHRoZSBxdWVyaWVzIHRvIHRoaXMKK25hbWVzZXJ2ZXIuIEl0IHNob3VsZCBiZSBhbiBpcC1hZGRyZXNzLCB3aGljaCBzaG91bGQgYmVsb25nIHRvIHRoZSBtYWNoaW5lIG9uIHdoaWNoCitkbnNtYXNxIGlzIHJ1bm5pbmcgb3RoZXJ3aXNlIHRoaXMgc2VydmVyIGxpbmUgd2lsbCBiZSBsb2dnZWQgYW5kIHRoZW4KK2lnbm9yZWQsIG9yIGFuIGludGVyZmFjZSBuYW1lLiBJZiBhbiBpbnRlcmZhY2UgbmFtZSBpcyBnaXZlbiwgdGhlbgorcXVlcmllcyB0byB0aGUgc2VydmVyIHdpbGwgYmUgZm9yY2VkIHZpYSB0aGF0IGludGVyZmFjZTsgaWYgYW4KK2lwLWFkZHJlc3MgaXMgZ2l2ZW4gdGhlbiB0aGUgc291cmNlIGFkZHJlc3Mgb2YgdGhlIHF1ZXJpZXMgd2lsbCBiZSBzZXQKK3RvIHRoYXQgYWRkcmVzcy4KK1RoZSBxdWVyeS1wb3J0IGZsYWcgaXMgaWdub3JlZCBmb3IgYW55IHNlcnZlcnMgd2hpY2ggaGF2ZSBhCitzb3VyY2UgYWRkcmVzcyBzcGVjaWZpZWQgYnV0IHRoZSBwb3J0IG1heSBiZSBzcGVjaWZpZWQgZGlyZWN0bHkgYXMKK3BhcnQgb2YgdGhlIHNvdXJjZSBhZGRyZXNzLiBGb3JjaW5nIHF1ZXJpZXMgdG8gYW4gaW50ZXJmYWNlIGlzIG5vdAoraW1wbGVtZW50ZWQgb24gYWxsIHBsYXRmb3JtcyBzdXBwb3J0ZWQgYnkgZG5zbWFzcS4KKy5UUAorLkIgLS1yZXYtc2VydmVyPTxpcC1hZGRyZXNzPi88cHJlZml4LWxlbj4sPGlwYWRkcj5bIzxwb3J0Pl1bQDxzb3VyY2UtaXA+fDxpbnRlcmZhY2U+WyM8cG9ydD5dXQorVGhpcyBpcyBmdW5jdGlvbmFsbHkgdGhlIHNhbWUgYXMgCisuQiAtLXNlcnZlciwgCitidXQgcHJvdmlkZXMgc29tZSBzeW50YWN0aWMgc3VnYXIgdG8gbWFrZSBzcGVjaWZ5aW5nIGFkZHJlc3MtdG8tbmFtZSBxdWVyaWVzIGVhc2llci4gRm9yIGV4YW1wbGUKKy5CIC0tcmV2LXNlcnZlcj0xLjIuMy4wLzI0LDE5Mi4xNjguMC4xCitpcyBleGFjdGx5IGVxdWl2YWxlbnQgdG8gCisuQiAtLXNlcnZlcj0vMy4yLjEuaW4tYWRkci5hcnBhLzE5Mi4xNjguMC4xCisuVFAKKy5CIFwtQSwgLS1hZGRyZXNzPS88ZG9tYWluPi9bZG9tYWluL108aXBhZGRyPgorU3BlY2lmeSBhbiBJUCBhZGRyZXNzIHRvIHJldHVybiBmb3IgYW55IGhvc3QgaW4gdGhlIGdpdmVuIGRvbWFpbnMuCitRdWVyaWVzIGluIHRoZSBkb21haW5zIGFyZSBuZXZlciBmb3J3YXJkZWQgYW5kIGFsd2F5cyByZXBsaWVkIHRvCit3aXRoIHRoZSBzcGVjaWZpZWQgSVAgYWRkcmVzcyB3aGljaCBtYXkgYmUgSVB2NCBvciBJUHY2LiBUbyBnaXZlCitib3RoIElQdjQgYW5kIElQdjYgYWRkcmVzc2VzIGZvciBhIGRvbWFpbiwgdXNlIHJlcGVhdGVkIC1BIGZsYWdzLgorTm90ZSB0aGF0IC9ldGMvaG9zdHMgYW5kIERIQ1AgbGVhc2VzIG92ZXJyaWRlIHRoaXMgZm9yIGluZGl2aWR1YWwKK25hbWVzLiBBIGNvbW1vbiB1c2Ugb2YgdGhpcyBpcyB0byByZWRpcmVjdCB0aGUgZW50aXJlIGRvdWJsZWNsaWNrLm5ldAorZG9tYWluIHRvIHNvbWUgZnJpZW5kbHkgbG9jYWwgd2ViIHNlcnZlciB0byBhdm9pZCBiYW5uZXIgYWRzLiBUaGUKK2RvbWFpbiBzcGVjaWZpY2F0aW9uIHdvcmtzIGluIHRoZSBzYW1lIHdhcyBhcyBmb3IgLS1zZXJ2ZXIsIHdpdGggdGhlCithZGRpdGlvbmFsIGZhY2lsaXR5IHRoYXQgLyMvIG1hdGNoZXMgYW55IGRvbWFpbi4gVGh1cworLS1hZGRyZXNzPS8jLzEuMi4zLjQgd2lsbCBhbHdheXMgcmV0dXJuIDEuMi4zLjQgZm9yIGFueSBxdWVyeSBub3QKK2Fuc3dlcmVkIGZyb20gL2V0Yy9ob3N0cyBvciBESENQIGFuZCBub3Qgc2VudCB0byBhbiB1cHN0cmVhbQorbmFtZXNlcnZlciBieSBhIG1vcmUgc3BlY2lmaWMgLS1zZXJ2ZXIgZGlyZWN0aXZlLgorLlRQCisuQiAtLWlwc2V0PS88ZG9tYWluPi9bZG9tYWluL108aXBzZXQ+Wyw8aXBzZXQ+XQorUGxhY2VzIHRoZSByZXNvbHZlZCBJUCBhZGRyZXNzZXMgb2YgcXVlcmllcyBmb3IgdGhlIHNwZWNpZmllZCBkb21haW5zCitpbiB0aGUgc3BlY2lmaWVkIG5ldGZpbHRlciBpcCBzZXRzLiBEb21haW5zIGFuZCBzdWJkb21haW5zIGFyZSBtYXRjaGVkCitpbiB0aGUgc2FtZSB3YXkgYXMgLS1hZGRyZXNzLiBUaGVzZSBpcCBzZXRzIG11c3QgYWxyZWFkeSBleGlzdC4gU2VlCitpcHNldCg4KSBmb3IgbW9yZSBkZXRhaWxzLgorLlRQCisuQiBcLW0sIC0tbXgtaG9zdD08bXggbmFtZT5bWyw8aG9zdG5hbWU+XSw8cHJlZmVyZW5jZT5dCitSZXR1cm4gYW4gTVggcmVjb3JkIG5hbWVkIDxteCBuYW1lPiBwb2ludGluZyB0byB0aGUgZ2l2ZW4gaG9zdG5hbWUgKGlmCitnaXZlbiksIG9yCit0aGUgaG9zdCBzcGVjaWZpZWQgaW4gdGhlIC0tbXgtdGFyZ2V0IHN3aXRjaAorb3IsIGlmIHRoYXQgc3dpdGNoIGlzIG5vdCBnaXZlbiwgdGhlIGhvc3Qgb24gd2hpY2ggZG5zbWFzcSAKK2lzIHJ1bm5pbmcuIFRoZSBkZWZhdWx0IGlzIHVzZWZ1bCBmb3IgZGlyZWN0aW5nIG1haWwgZnJvbSBzeXN0ZW1zIG9uIGEgTEFOCit0byBhIGNlbnRyYWwgc2VydmVyLiBUaGUgcHJlZmVyZW5jZSB2YWx1ZSBpcyBvcHRpb25hbCwgYW5kIGRlZmF1bHRzIHRvCisxIGlmIG5vdCBnaXZlbi4gTW9yZSB0aGFuIG9uZSBNWCByZWNvcmQgbWF5IGJlIGdpdmVuIGZvciBhIGhvc3QuCisuVFAgCisuQiBcLXQsIC0tbXgtdGFyZ2V0PTxob3N0bmFtZT4KK1NwZWNpZnkgdGhlIGRlZmF1bHQgdGFyZ2V0IGZvciB0aGUgTVggcmVjb3JkIHJldHVybmVkIGJ5IGRuc21hc3EuIFNlZQorLS1teC1ob3N0LiAgSWYgLS1teC10YXJnZXQgaXMgZ2l2ZW4sIGJ1dCBub3QgLS1teC1ob3N0LCB0aGVuIGRuc21hc3EKK3JldHVybnMgYSBNWCByZWNvcmQgY29udGFpbmluZyB0aGUgTVggdGFyZ2V0IGZvciBNWCBxdWVyaWVzIG9uIHRoZSAKK2hvc3RuYW1lIG9mIHRoZSBtYWNoaW5lIG9uIHdoaWNoIGRuc21hc3EgaXMgcnVubmluZy4KKy5UUAorLkIgXC1lLCAtLXNlbGZteAorUmV0dXJuIGFuIE1YIHJlY29yZCBwb2ludGluZyB0byBpdHNlbGYgZm9yIGVhY2ggbG9jYWwKK21hY2hpbmUuIExvY2FsIG1hY2hpbmVzIGFyZSB0aG9zZSBpbiAvZXRjL2hvc3RzIG9yIHdpdGggREhDUCBsZWFzZXMuCisuVFAgCisuQiBcLUwsIC0tbG9jYWxteAorUmV0dXJuIGFuIE1YIHJlY29yZCBwb2ludGluZyB0byB0aGUgaG9zdCBnaXZlbiBieSBteC10YXJnZXQgKG9yIHRoZQorbWFjaGluZSBvbiB3aGljaCBkbnNtYXNxIGlzIHJ1bm5pbmcpIGZvciBlYWNoCitsb2NhbCBtYWNoaW5lLiBMb2NhbCBtYWNoaW5lcyBhcmUgdGhvc2UgaW4gL2V0Yy9ob3N0cyBvciB3aXRoIERIQ1AKK2xlYXNlcy4KKy5UUAorLkIgXC1XLCAtLXNydi1ob3N0PTxfc2VydmljZT4uPF9wcm90Pi5bPGRvbWFpbj5dLFs8dGFyZ2V0PlssPHBvcnQ+Wyw8cHJpb3JpdHk+Wyw8d2VpZ2h0Pl1dXV0KK1JldHVybiBhIFNSViBETlMgcmVjb3JkLiBTZWUgUkZDMjc4MiBmb3IgZGV0YWlscy4gSWYgbm90IHN1cHBsaWVkLCB0aGUKK2RvbWFpbiBkZWZhdWx0cyB0byB0aGF0IGdpdmVuIGJ5CisuQiAtLWRvbWFpbi4KK1RoZSBkZWZhdWx0IGZvciB0aGUgdGFyZ2V0IGRvbWFpbiBpcyBlbXB0eSwgYW5kIHRoZSBkZWZhdWx0IGZvciBwb3J0CitpcyBvbmUgYW5kIHRoZSBkZWZhdWx0cyBmb3IgCit3ZWlnaHQgYW5kIHByaW9yaXR5IGFyZSB6ZXJvLiBCZSBjYXJlZnVsIGlmIHRyYW5zcG9zaW5nIGRhdGEgZnJvbSBCSU5ECit6b25lIGZpbGVzOiB0aGUgcG9ydCwgd2VpZ2h0IGFuZCBwcmlvcml0eSBudW1iZXJzIGFyZSBpbiBhIGRpZmZlcmVudAorb3JkZXIuIE1vcmUgdGhhbiBvbmUgU1JWIHJlY29yZCBmb3IgYSBnaXZlbiBzZXJ2aWNlL2RvbWFpbiBpcyBhbGxvd2VkLAorYWxsIHRoYXQgbWF0Y2ggYXJlIHJldHVybmVkLgorLlRQCisuQiAtLWhvc3QtcmVjb3JkPTxuYW1lPlssPG5hbWU+Li4uLl1bPElQdjQtYWRkcmVzcz5dLFs8SVB2Ni1hZGRyZXNzPl0KK0FkZCBBLCBBQUFBIGFuZCBQVFIgcmVjb3JkcyB0byB0aGUgRE5TLiBUaGlzIGFkZHMgb25lIG9yIG1vcmUgbmFtZXMgdG8KK3RoZSBETlMgd2l0aCBhc3NvY2lhdGVkIElQdjQgKEEpIGFuZCBJUHY2IChBQUFBKSByZWNvcmRzLiBBIG5hbWUgbWF5CithcHBlYXIgaW4gbW9yZSB0aGFuIG9uZSAKKy5CIGhvc3QtcmVjb3JkCithbmQgdGhlcmVmb3JlIGJlIGFzc2lnbmVkIG1vcmUgdGhhbiBvbmUgYWRkcmVzcy4gT25seSB0aGUgZmlyc3QKK2FkZHJlc3MgY3JlYXRlcyBhIFBUUiByZWNvcmQgbGlua2luZyB0aGUgYWRkcmVzcyB0byB0aGUgbmFtZS4gVGhpcyBpcwordGhlIHNhbWUgcnVsZSBhcyBpcyB1c2VkIHJlYWRpbmcgaG9zdHMtZmlsZXMuIAorLkIgaG9zdC1yZWNvcmQKK29wdGlvbnMgYXJlIGNvbnNpZGVyZWQgdG8gYmUgcmVhZCBiZWZvcmUgaG9zdC1maWxlcywgc28gYSBuYW1lCithcHBlYXJpbmcgdGhlcmUgaW5oaWJpdHMgUFRSLXJlY29yZCBjcmVhdGlvbiBpZiBpdCBhcHBlYXJzIGluCitob3N0cy1maWxlIGFsc28uIFVubGlrZSBob3N0cy1maWxlcywgbmFtZXMgYXJlIG5vdCBleHBhbmRlZCwgZXZlbiB3aGVuCisuQiBleHBhbmQtaG9zdHMKK2lzIGluIGVmZmVjdC4gU2hvcnQgYW5kIGxvbmcgbmFtZXMgbWF5IGFwcGVhciBpbiB0aGUgc2FtZSAKKy5CIGhvc3QtcmVjb3JkLAorZWcuIAorLkIgLS1ob3N0LXJlY29yZD1sYXB0b3AsbGFwdG9wLnRoZWtlbGxleXMub3JnLDE5Mi4xNjguMC4xLDEyMzQ6OjEwMAorLlRQCisuQiBcLVksIC0tdHh0LXJlY29yZD08bmFtZT5bWyw8dGV4dD5dLDx0ZXh0Pl0KK1JldHVybiBhIFRYVCBETlMgcmVjb3JkLiBUaGUgdmFsdWUgb2YgVFhUIHJlY29yZCBpcyBhIHNldCBvZiBzdHJpbmdzLAorc28gIGFueSBudW1iZXIgbWF5IGJlIGluY2x1ZGVkLCBkZWxpbWl0ZWQgYnkgY29tbWFzOyB1c2UgcXVvdGVzIHRvIHB1dAorY29tbWFzIGludG8gYSBzdHJpbmcuIE5vdGUgdGhhdCB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBzaW5nbGUgc3RyaW5nCitpcyAyNTUgY2hhcmFjdGVycywgbG9uZ2VyIHN0cmluZ3MgYXJlIHNwbGl0IGludG8gMjU1IGNoYXJhY3RlciBjaHVua3MuCisuVFAKKy5CIC0tcHRyLXJlY29yZD08bmFtZT5bLDx0YXJnZXQ+XQorUmV0dXJuIGEgUFRSIEROUyByZWNvcmQuCisuVFAKKy5CIC0tbmFwdHItcmVjb3JkPTxuYW1lPiw8b3JkZXI+LDxwcmVmZXJlbmNlPiw8ZmxhZ3M+LDxzZXJ2aWNlPiw8cmVnZXhwPlssPHJlcGxhY2VtZW50Pl0KK1JldHVybiBhbiBOQVBUUiBETlMgcmVjb3JkLCBhcyBzcGVjaWZpZWQgaW4gUkZDMzQwMy4KKy5UUAorLkIgLS1jbmFtZT08Y25hbWU+LDx0YXJnZXQ+CitSZXR1cm4gYSBDTkFNRSByZWNvcmQgd2hpY2ggaW5kaWNhdGVzIHRoYXQgPGNuYW1lPiBpcyByZWFsbHkKKzx0YXJnZXQ+LiBUaGVyZSBhcmUgc2lnbmlmaWNhbnQgbGltaXRhdGlvbnMgb24gdGhlIHRhcmdldDsgaXQgbXVzdCBiZSBhCitETlMgbmFtZSB3aGljaCBpcyBrbm93biB0byBkbnNtYXNxIGZyb20gL2V0Yy9ob3N0cyAob3IgYWRkaXRpb25hbAoraG9zdHMgZmlsZXMpLCBmcm9tIERIQ1AsIGZyb20gLS1pbnRlcmZhY2UtbmFtZSBvciBmcm9tIGFub3RoZXIgCisuQiAtLWNuYW1lLgorSWYgdGhlIHRhcmdldCBkb2VzIG5vdCBzYXRpc2Z5IHRoaXMKK2NyaXRlcmlhLCB0aGUgd2hvbGUgY25hbWUgaXMgaWdub3JlZC4gVGhlIGNuYW1lIG11c3QgYmUgdW5pcXVlLCBidXQgaXQKK2lzIHBlcm1pc3NhYmxlIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSBjbmFtZSBwb2ludGluZyB0byB0aGUgc2FtZSB0YXJnZXQuCisuVFAKKy5CIC0tZG5zLXJyPTxuYW1lPiw8UlItbnVtYmVyPixbPGhleCBkYXRhPl0KK1JldHVybiBhbiBhcmJpdHJhcnkgRE5TIFJlc291cmNlIFJlY29yZC4gVGhlIG51bWJlciBpcyB0aGUgdHlwZSBvZiB0aGUKK3JlY29yZCAod2hpY2ggaXMgYWx3YXlzIGluIHRoZSBDX0lOIGNsYXNzKS4gVGhlIHZhbHVlIG9mIHRoZSByZWNvcmQgaXMKK2dpdmVuIGJ5IHRoZSBoZXggZGF0YSwgd2hpY2ggbWF5IGJlIG9mIHRoZSBmb3JtIDAxOjIzOjQ1IG9yIDAxIDIzIDQ1IG9yCiswMTIzNDUgb3IgYW55IG1peHR1cmUgb2YgdGhlc2UuCisuVFAKKy5CIC0taW50ZXJmYWNlLW5hbWU9PG5hbWU+LDxpbnRlcmZhY2U+Wy80fC82XQorUmV0dXJuIGEgRE5TIHJlY29yZCBhc3NvY2lhdGluZyB0aGUgbmFtZSB3aXRoIHRoZSBwcmltYXJ5IGFkZHJlc3Mgb24KK3RoZSBnaXZlbiBpbnRlcmZhY2UuIFRoaXMgZmxhZyBzcGVjaWZpZXMgYW4gQSBvciBBQUFBIHJlY29yZCBmb3IgdGhlIGdpdmVuCituYW1lIGluIHRoZSBzYW1lIHdheSBhcyBhbiAvZXRjL2hvc3RzIGxpbmUsIGV4Y2VwdCB0aGF0IHRoZSBhZGRyZXNzIGlzCitub3QgY29uc3RhbnQsIGJ1dCB0YWtlbiBmcm9tIHRoZSBnaXZlbiBpbnRlcmZhY2UuIFRoZSBpbnRlcmZhY2UgbWF5IGJlCitmb2xsb3dlZCBieSAiLzQiIG9yICIvNiIgdG8gc3BlY2lmeSB0aGF0IG9ubHkgSVB2NCBvciBJUHY2IGFkZHJlc3Nlcworb2YgdGhlIGludGVyZmFjZSBzaG91bGQgYmUgdXNlZC4gSWYgdGhlIGludGVyZmFjZSBpcworZG93biwgbm90IGNvbmZpZ3VyZWQgb3Igbm9uLWV4aXN0ZW50LCBhbiBlbXB0eSByZWNvcmQgaXMgcmV0dXJuZWQuIFRoZQorbWF0Y2hpbmcgUFRSIHJlY29yZCBpcyBhbHNvIGNyZWF0ZWQsIG1hcHBpbmcgdGhlIGludGVyZmFjZSBhZGRyZXNzIHRvCit0aGUgbmFtZS4gTW9yZSB0aGFuIG9uZSBuYW1lIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggYW4gaW50ZXJmYWNlCithZGRyZXNzIGJ5IHJlcGVhdGluZyB0aGUgZmxhZzsgaW4gdGhhdCBjYXNlIHRoZSBmaXJzdCBpbnN0YW5jZSBpcyB1c2VkCitmb3IgdGhlIHJldmVyc2UgYWRkcmVzcy10by1uYW1lIG1hcHBpbmcuCisuVFAKKy5CIC0tc3ludGgtZG9tYWluPTxkb21haW4+LDxhZGRyZXNzIHJhbmdlPlssPHByZWZpeD5dCitDcmVhdGUgYXJ0aWZpY2lhbCBBL0FBQUEgYW5kIFBUUiByZWNvcmRzIGZvciBhbiBhZGRyZXNzIHJhbmdlLiBUaGUKK3JlY29yZHMgdXNlIHRoZSBhZGRyZXNzLCB3aXRoIHBlcmlvZHMgKG9yIGNvbG9ucyBmb3IgSVB2NikgcmVwbGFjZWQKK3dpdGggZGFzaGVzLgorCitBbiBleGFtcGxlIHNob3VsZCBtYWtlIHRoaXMgY2xlYXJlci4KKy5CIC0tc3ludGgtZG9tYWluPXRoZWtlbGxleXMub3JnLnVrLDE5Mi4xNjguMC4wLzI0LGludGVybmFsLQord2lsbCByZXN1bHQgaW4gYSBxdWVyeSBmb3IgaW50ZXJuYWwtMTkyLTE2OC0wLTU2LnRoZWtlbGxleXMub3JnLnVrIHJldHVybmluZworMTkyLjE2OC4wLjU2IGFuZCBhIHJldmVyc2UgcXVlcnkgdmljZSB2ZXJzYS4gVGhlIHNhbWUgYXBwbGllcyB0byBJUHY2LAorYnV0IElQdjYgYWRkcmVzc2VzIG1heSBzdGFydCB3aXRoICc6OicKK2J1dCBETlMgbGFiZWxzIG1heSBub3Qgc3RhcnQgd2l0aCAnLScgc28gaW4gdGhpcyBjYXNlIGlmIG5vIHByZWZpeCBpcworY29uZmlndXJlZCBhIHplcm8gaXMgYWRkZWQgaW4gZnJvbnQgb2YgdGhlIGxhYmVsLiA6OjEgYmVjb21lcyAwLS0xLgorCitUaGUgYWRkcmVzcyByYW5nZSBjYW4gYmUgb2YgdGhlIGZvcm0KKzxpcCBhZGRyZXNzPiw8aXAgYWRkcmVzcz4gb3IgPGlwIGFkZHJlc3M+LzxuZXRtYXNrPgorLlRQCisuQiAtLWFkZC1tYWMKK0FkZCB0aGUgTUFDIGFkZHJlc3Mgb2YgdGhlIHJlcXVlc3RvciB0byBETlMgcXVlcmllcyB3aGljaCBhcmUKK2ZvcndhcmRlZCB1cHN0cmVhbS4gVGhpcyBtYXkgYmUgdXNlZCB0byBETlMgZmlsdGVyaW5nIGJ5IHRoZSB1cHN0cmVhbQorc2VydmVyLiBUaGUgTUFDIGFkZHJlc3MgY2FuIG9ubHkgYmUgYWRkZWQgaWYgdGhlIHJlcXVlc3RvciBpcyBvbiB0aGUgc2FtZQorc3VibmV0IGFzIHRoZSBkbnNtYXNxIHNlcnZlci4gTm90ZSB0aGF0IHRoZSBtZWNoYW5pc20gdXNlZCB0byBhY2hpZXZlIHRoaXMgKGFuIEVETlMwIG9wdGlvbikKK2lzIG5vdCB5ZXQgc3RhbmRhcmRpc2VkLCBzbyB0aGlzIHNob3VsZCBiZSBjb25zaWRlcmVkCitleHBlcmltZW50YWwuIEFsc28gbm90ZSB0aGF0IGV4cG9zaW5nIE1BQyBhZGRyZXNzZXMgaW4gdGhpcyB3YXkgbWF5CitoYXZlIHNlY3VyaXR5IGFuZCBwcml2YWN5IGltcGxpY2F0aW9ucy4gVGhlIHdhcm5pbmcgYWJvdXQgY2FjaGluZworZ2l2ZW4gZm9yIC0tYWRkLXN1Ym5ldCBhcHBsaWVzIHRvIC0tYWRkLW1hYyB0b28uCisuVFAgCisuQiAtLWFkZC1zdWJuZXRbWz08SVB2NCBwcmVmaXggbGVuZ3RoPl0sPElQdjYgcHJlZml4IGxlbmd0aD5dCitBZGQgdGhlIHN1Ym5ldCBhZGRyZXNzIG9mIHRoZSByZXF1ZXN0b3IgdG8gdGhlIEROUyBxdWVyaWVzIHdoaWNoIGFyZQorZm9yd2FyZGVkIHVwc3RyZWFtLiBUaGUgYW1vdW50IG9mIHRoZSBhZGRyZXNzIGZvcndhcmRlZCBkZXBlbmRzIG9uIHRoZQorcHJlZml4IGxlbmd0aCBwYXJhbWV0ZXI6IDMyICgxMjggZm9yIElQdjYpIGZvcndhcmRzIHRoZSB3aG9sZSBhZGRyZXNzLAoremVybyBmb3J3YXJkcyBub25lIG9mIGl0IGJ1dCBzdGlsbCBtYXJrcyB0aGUgcmVxdWVzdCBzbyB0aGF0IG5vCit1cHN0cmVhbSBuYW1lc2VydmVyIHdpbGwgYWRkIGNsaWVudCBhZGRyZXNzIGluZm9ybWF0aW9uIGVpdGhlci4gVGhlCitkZWZhdWx0IGlzIHplcm8gZm9yIGJvdGggSVB2NCBhbmQgSVB2Ni4gTm90ZSB0aGF0IHVwc3RyZWFtIG5hbWVzZXJ2ZXJzCittYXkgYmUgY29uZmlndXJlZCB0byByZXR1cm4gZGlmZmVyZW50IHJlc3VsdHMgYmFzZWQgb24gdGhpcworaW5mb3JtYXRpb24sIGJ1dCB0aGUgZG5zbWFzcSBjYWNoZSBkb2VzIG5vdCB0YWtlIGFjY291bnQuIElmIGEgZG5zbWFzcQoraW5zdGFuY2UgaXMgY29uZmlndXJlZCBzdWNoIHRoYXQgZGlmZmVyZW50IHJlc3VsdHMgbWF5IGJlIGVuY291bnRlcmVkLAorY2FjaGluZyBzaG91bGQgYmUgZGlzYWJsZWQuCisuVFAKKy5CIFwtYywgLS1jYWNoZS1zaXplPTxjYWNoZXNpemU+CitTZXQgdGhlIHNpemUgb2YgZG5zbWFzcSdzIGNhY2hlLiBUaGUgZGVmYXVsdCBpcyAxNTAgbmFtZXMuIFNldHRpbmcgdGhlIGNhY2hlIHNpemUgdG8gemVybyBkaXNhYmxlcyBjYWNoaW5nLgorLlRQCisuQiBcLU4sIC0tbm8tbmVnY2FjaGUKK0Rpc2FibGUgbmVnYXRpdmUgY2FjaGluZy4gTmVnYXRpdmUgY2FjaGluZyBhbGxvd3MgZG5zbWFzcSB0byByZW1lbWJlcgorIm5vIHN1Y2ggZG9tYWluIiBhbnN3ZXJzIGZyb20gdXBzdHJlYW0gbmFtZXNlcnZlcnMgYW5kIGFuc3dlcgoraWRlbnRpY2FsIHF1ZXJpZXMgd2l0aG91dCBmb3J3YXJkaW5nIHRoZW0gYWdhaW4uIAorLlRQCisuQiBcLTAsIC0tZG5zLWZvcndhcmQtbWF4PTxxdWVyaWVzPgorU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IEROUyBxdWVyaWVzLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcworMTUwLCB3aGljaCBzaG91bGQgYmUgZmluZSBmb3IgbW9zdCBzZXR1cHMuIFRoZSBvbmx5IGtub3duIHNpdHVhdGlvbgord2hlcmUgdGhpcyBuZWVkcyB0byBiZSBpbmNyZWFzZWQgaXMgd2hlbiB1c2luZyB3ZWItc2VydmVyIGxvZyBmaWxlCityZXNvbHZlcnMsIHdoaWNoIGNhbiBnZW5lcmF0ZSBsYXJnZSBudW1iZXJzIG9mIGNvbmN1cnJlbnQgcXVlcmllcy4KKy5UUAorLkIgLS1kbnNzZWMKK1ZhbGlkYXRlIEROUyByZXBsaWVzIGFuZCBjYWNoZSBETlNTRUMgZGF0YS4gV2hlbiBmb3J3YXJkaW5nIEROUyBxdWVyaWVzLCBkbnNtYXNxIHJlcXVlc3RzIHRoZSAKK0ROU1NFQyByZWNvcmRzIG5lZWRlZCB0byB2YWxpZGF0ZSB0aGUgcmVwbGllcy4gVGhlIHJlcGxpZXMgYXJlIHZhbGlkYXRlZCBhbmQgdGhlIHJlc3VsdCByZXR1cm5lZCBhcyAKK3RoZSBBdXRoZW50aWNhdGVkIERhdGEgYml0IGluIHRoZSBETlMgcGFja2V0LiBJbiBhZGRpdGlvbiB0aGUgRE5TU0VDIHJlY29yZHMgYXJlIHN0b3JlZCBpbiB0aGUgY2FjaGUsIG1ha2luZyAKK3ZhbGlkYXRpb24gYnkgY2xpZW50cyBtb3JlIGVmZmljaWVudC4gTm90ZSB0aGF0IHZhbGlkYXRpb24gYnkgY2xpZW50cyBpcyB0aGUgbW9zdCBzZWN1cmUgRE5TU0VDIG1vZGUsIGJ1dCBmb3IKK2NsaWVudHMgdW5hYmxlIHRvIGRvIHZhbGlkYXRpb24sIHVzZSBvZiB0aGUgQUQgYml0IHNldCBieSBkbnNtYXNxIGlzIHVzZWZ1bCwgcHJvdmlkZWQgdGhhdCB0aGUgbmV0d29yayBiZXR3ZWVuIAordGhlIGRuc21hc3Egc2VydmVyIGFuZCB0aGUgY2xpZW50IGlzIHRydXN0ZWQuIERuc21hc3EgbXVzdCBiZSBjb21waWxlZCB3aXRoIEhBVkVfRE5TU0VDIGVuYWJsZWQsIGFuZCBETlNTRUMKK3RydXN0IGFuY2hvcnMgcHJvdmlkZWQsIHNlZSAKKy5CIC0tdHJ1c3QtYW5jaG9yLgorQmVjYXVzZSB0aGUgRE5TU0VDIHZhbGlkYXRpb24gcHJvY2VzcyB1c2VzIHRoZSBjYWNoZSwgaXQgaXMgbm90CitwZXJtaXR0ZWQgdG8gcmVkdWNlIHRoZSBjYWNoZSBzaXplIGJlbG93IHRoZSBkZWZhdWx0IHdoZW4gRE5TU0VDIGlzCitlbmFibGVkLiBUaGUgbmFtZXNlcnZlcnMgdXBzdHJlYW0gb2YgZG5zbWFzcSBtdXN0IGJlIEROU1NFQy1jYXBhYmxlLAoraWUgY2FwYWJsZSBvZiByZXR1cm5pbmcgRE5TU0VDIHJlY29yZHMgd2l0aCBkYXRhLiBJZiB0aGV5IGFyZSBub3QsCit0aGVuIGRuc21hc3Egd2lsbCBub3QgYmUgYWJsZSB0byBkZXRlcm1pbmUgdGhlIHRydXN0ZWQgc3RhdHVzIG9mCithbnN3ZXJzLiBJbiB0aGUgZGVmYXVsdCBtb2RlLCB0aGlzIG1lbmFzIHRoYXQgYWxsIHJlcGxpZXMgd2lsbCBiZQorbWFya2VkIGFzIHVudHJ1c3RlZC4gSWYgCisuQiAtLWRuc3NlYy1jaGVjay11bnNpZ25lZAoraXMgc2V0IGFuZCB0aGUgdXBzdHJlYW0gc2VydmVycyBkb24ndCBzdXBwb3J0IEROU1NFQywgdGhlbiBETlMgc2VydmljZSB3aWxsIGJlIGVudGlyZWx5IGJyb2tlbi4KKy5UUAorLkIgLS10cnVzdC1hbmNob3I9WzxjbGFzcz5dLDxkb21haW4+LDxrZXktdGFnPiw8YWxnb3JpdGhtPiw8ZGlnZXN0LXR5cGU+LDxkaWdlc3Q+CitQcm92aWRlIERTIHJlY29yZHMgdG8gYWN0IGEgdHJ1c3QgYW5jaG9ycyBmb3IgRE5TU0VDCit2YWxpZGF0aW9uLiBUeXBpY2FsbHkgdGhlc2Ugd2lsbCBiZSB0aGUgRFMgcmVjb3JkKHMpIGZvciBab25lIFNpZ25pbmcKK2tleShzKSBvZiB0aGUgcm9vdCB6b25lLAorYnV0IHRydXN0IGFuY2hvcnMgZm9yIGxpbWl0ZWQgZG9tYWlucyBhcmUgYWxzbyBwb3NzaWJsZS4gVGhlIGN1cnJlbnQKK3Jvb3Qtem9uZSB0cnVzdCBhbmNob3JzIG1heSBiZSBkb253bG9hZGVkIGZyb20gaHR0cHM6Ly9kYXRhLmlhbmEub3JnL3Jvb3QtYW5jaG9ycy9yb290LWFuY2hvcnMueG1sIAorLlRQCisuQiAtLWRuc3NlYy1jaGVjay11bnNpZ25lZAorQXMgYSBkZWZhdWx0LCBkbnNtYXNxIGRvZXMgbm90IGNoZWNrIHRoYXQgdW5zaWduZWQgRE5TIHJlcGxpZXMgYXJlCitsZWdpdGltYXRlOiB0aGV5IGFyZSBhc3N1bWVkIHRvIGJlIHZhbGlkIGFuZCBwYXNzZWQgb24gKHdpdGhvdXQgdGhlCisiYXV0aGVudGljIGRhdGEiIGJpdCBzZXQsIG9mIGNvdXJzZSkuIFRoaXMgZG9lcyBub3QgcHJvdGVjdCBhZ2FpbnN0IGFuCithdHRhY2tlciBmb3JnaW5nIHVuc2lnbmVkIHJlcGxpZXMgZm9yIHNpZ25lZCBETlMgem9uZXMsIGJ1dCBpdCBpcworZmFzdC4gSWYgdGhpcyBmbGFnIGlzIHNldCwgZG5zbWFzcSB3aWxsIGNoZWNrIHRoZSB6b25lcyBvZiB1bnNpZ25lZAorcmVwbGllcywgdG8gZW5zdXJlIHRoYXQgdW5zaWduZWQgcmVwbGllcyBhcmUgYWxsb3dlZCBpbiB0aG9zZQorem9uZXMuIFRoZSBjb3N0IG9mIHRoaXMgaXMgbW9yZSB1cHN0cmVhbSBxdWVyaWVzIGFuZCBzbG93ZXIKK3BlcmZvcm1hbmNlLiBTZWUgYWxzbyB0aGUgd2FybmluZyBhYm91dCB1cHN0cmVhbSBzZXJ2ZXJzIGluIHRoZQorc2VjdGlvbiBvbiAKKy5CIC0tZG5zc2VjCisuVFAKKy5CIC0tZG5zc2VjLW5vLXRpbWVjaGVjaworRE5TU0VDIHNpZ25hdHVyZXMgYXJlIG9ubHkgdmFsaWQgZm9yIHNwZWNpZmllZCB0aW1lIHdpbmRvd3MsIGFuZCBzaG91bGQgYmUgcmVqZWN0ZWQgb3V0c2lkZSB0aG9zZSB3aW5kb3dzLiBUaGlzIGdlbmVyYXRlcyBhbgoraW50ZXJlc3RpbmcgY2hpY2tlbi1hbmQtZWdnIHByb2JsZW0gZm9yIG1hY2hpbmVzIHdoaWNoIGRvbid0IGhhdmUgYSBoYXJkd2FyZSByZWFsIHRpbWUgY2xvY2suIEZvciB0aGVzZSBtYWNoaW5lcyB0byBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgCit0aW1lIHR5cGljYWxseSByZXF1aXJlcyB1c2Ugb2YgTlRQIGFuZCB0aGVyZWZvcmUgRE5TLCBidXQgdmFsaWRhdGluZyBETlMgcmVxdWlyZXMgdGhhdCB0aGUgY29ycmVjdCB0aW1lIGlzIGFscmVhZHkga25vd24uIFNldHRpbmcgdGhpcyBmbGFnCityZW1vdmVzIHRoZSB0aW1lLXdpbmRvdyBjaGVja3MgKGJ1dCBub3Qgb3RoZXIgRE5TU0VDIHZhbGlkYXRpb24uKSBvbmx5IHVudGlsIHRoZSBkbnNtYXNxIHByb2Nlc3MgcmVjZWl2ZXMgU0lHSFVQLiBUaGUgaW50ZW50aW9uIGlzCit0aGF0IGRuc21hc3Egc2hvdWxkIGJlIHN0YXJ0ZWQgd2l0aCB0aGlzIGZsYWcgd2hlbiB0aGUgcGxhdGZvcm0gZGV0ZXJtaW5lcyB0aGF0IHJlbGlhYmxlIHRpbWUgaXMgbm90IGN1cnJlbnRseSBhdmFpbGFibGUuIEFzIHNvb24gYXMgCityZWxpYWJsZSB0aW1lIGlzIGVzdGFibGlzaGVkLCBhIFNJR0hVUCBzaG91bGQgYmUgc2VudCB0byBkbnNtYXNxLCB3aGljaCBlbmFibGVzIHRpbWUgY2hlY2tpbmcsIGFuZCBwdXJnZXMgdGhlIGNhY2hlIG9mIEROUyByZWNvcmRzCit3aGljaCBoYXZlIG5vdCBiZWVuIHRocm91Z2hseSBjaGVja2VkLgorLlRQCisuQiAtLXByb3h5LWRuc3NlYworQ29weSB0aGUgRE5TU0VDIEF1dGhlbnRpY2F0ZWQgRGF0YSBiaXQgZnJvbSB1cHN0cmVhbSBzZXJ2ZXJzIHRvIGRvd25zdHJlYW0gY2xpZW50cyBhbmQgY2FjaGUgaXQuICBUaGlzIGlzIGFuIAorYWx0ZXJuYXRpdmUgdG8gaGF2aW5nIGRuc21hc3EgdmFsaWRhdGUgRE5TU0VDLCBidXQgaXQgZGVwZW5kcyBvbiB0aGUgc2VjdXJpdHkgb2YgdGhlIG5ldHdvcmsgYmV0d2VlbiAKK2Ruc21hc3EgYW5kIHRoZSB1cHN0cmVhbSBzZXJ2ZXJzLCBhbmQgdGhlIHRydXN0d29ydGhpbmVzcyBvZiB0aGUgdXBzdHJlYW0gc2VydmVycy4KKy5UUAorLkIgLS1kbnNzZWMtZGVidWcKK1NldCBkZWJ1Z2dpbmcgbW9kZSBmb3IgdGhlIEROU1NFQyB2YWxpZGF0aW9uLCBzZXQgdGhlIENoZWNraW5nIERpc2FibGVkIGJpdCBvbiB1cHN0cmVhbSBxdWVyaWVzLCAKK2FuZCBkb24ndCBjb252ZXJ0IHJlcGxpZXMgd2hpY2ggZG8gbm90IHZhbGlkYXRlIHRvIHJlc3BvbnNlcyB3aXRoCithIHJldHVybiBjb2RlIG9mIFNFUlZGQUlMLiBOb3RlIHRoYXQKK3NldHRpbmcgdGhpcyBtYXkgYWZmZWN0IEROUyBiZWhhdmlvdXIgaW4gYmFkIHdheXMsIGl0IGlzIG5vdCBhbgorZXh0cmEtbG9nZ2luZyBmbGFnIGFuZCBzaG91bGQgbm90IGJlIHNldCBpbiBwcm9kdWN0aW9uLgorLlRQCisuQiAtLWF1dGgtem9uZT08ZG9tYWluPlssPHN1Ym5ldD5bLzxwcmVmaXggbGVuZ3RoPl1bLDxzdWJuZXQ+Wy88cHJlZml4IGxlbmd0aD5dLi4uLi5dXQorRGVmaW5lIGEgRE5TIHpvbmUgZm9yIHdoaWNoIGRuc21hc3EgYWN0cyBhcyBhdXRob3JpdGF0aXZlIHNlcnZlci4gTG9jYWxseSBkZWZpbmVkIEROUyByZWNvcmRzIHdoaWNoIGFyZSBpbiB0aGUgZG9tYWluCit3aWxsIGJlIHNlcnZlZC4gSWYgc3VibmV0KHMpIGFyZSBnaXZlbiwgQSBhbmQgQUFBQSByZWNvcmRzIG11c3QgYmUgaW4gb25lIG9mIHRoZQorc3BlY2lmaWVkIHN1Ym5ldHMuCisKK0FzIGFsdGVybmF0aXZlIHRvIGRpcmVjdGx5IHNwZWNpZnlpbmcgdGhlIHN1Ym5ldHMsIGl0J3MgcG9zc2libGUgdG8KK2dpdmUgdGhlIG5hbWUgb2YgYW4gaW50ZXJmYWNlLCBpbiB3aGljaCBjYXNlIHRoZSBzdWJuZXRzIGltcGxpZWQgYnkKK3RoYXQgaW50ZXJmYWNlJ3MgY29uZmlndXJlZCBhZGRyZXNzZXMgYW5kIG5ldG1hc2svcHJlZml4LWxlbmd0aCBhcmUKK3VzZWQ7IHRoaXMgaXMgdXNlZnVsIHdoZW4gdXNpbmcgY29uc3RydWN0ZWQgREhDUCByYW5nZXMgYXMgdGhlIGFjdHVhbAorYWRkcmVzcyBpcyBkeW5hbWljIGFuZCBub3Qga25vd24gd2hlbiBjb25maWd1cmluZyBkbnNtYXNxLiBUaGUKK2ludGVyZmFjZSBhZGRyZXNzZXMgbWF5IGJlIGNvbmZpbmVkIHRvIG9ubHkgSVB2NiBhZGRyZXNzZXMgdXNpbmcKKzxpbnRlcmZhY2U+LzYgb3IgdG8gb25seSBJUHY0IHVzaW5nIDxpbnRlcmZhY2U+LzQuIFRoaXMgaXMgdXNlZnVsIHdoZW4KK2FuIGludGVyZmFjZSBoYXMgZHluYW1pY2FsbHkgZGV0ZXJtaW5lZCBnbG9iYWwgSVB2NiBhZGRyZXNzZXMgd2hpY2ggc2hvdWxkCithcHBlYXIgaW4gdGhlIHpvbmUsIGJ1dCBSRkMxOTE4IElQdjQgYWRkcmVzc2VzIHdoaWNoIHNob3VsZCBub3QuCitJbnRlcmZhY2UtbmFtZSBhbmQgYWRkcmVzcy1saXRlcmFsIHN1Ym5ldCBzcGVjaWZpY2F0aW9ucyBtYXkgYmUgdXNlZAorZnJlZWx5IGluIHRoZSBzYW1lIC0tYXV0aC16b25lIGRlY2xhcmF0aW9uLgorCitUaGUgc3VibmV0KHMpIGFyZSBhbHNvIHVzZWQgdG8gZGVmaW5lIGluLWFkZHIuYXJwYSBhbmQKK2lwNi5hcnBhIGRvbWFpbnMgd2hpY2ggYXJlIHNlcnZlZCBmb3IgcmV2ZXJzZS1ETlMgcXVlcmllcy4gSWYgbm90CitzcGVjaWZpZWQsIHRoZSBwcmVmaXggbGVuZ3RoIGRlZmF1bHRzIHRvIDI0IGZvciBJUHY0IGFuZCA2NCBmb3IgSVB2Ni4KK0ZvciBJUHY0IHN1Ym5ldHMsIHRoZSBwcmVmaXggbGVuZ3RoIHNob3VsZCBiZSBoYXZlIHRoZSB2YWx1ZSA4LCAxNiBvciAyNAordW5sZXNzIHlvdSBhcmUgZmFtaWxpYXIgd2l0aCBSRkMgMjMxNyBhbmQgaGF2ZSBhcnJhbmdlZCB0aGUKK2luLWFkZHIuYXJwYSBkZWxlZ2F0aW9uIGFjY29yZGluZ2x5LiBOb3RlIHRoYXQgaWYgbm8gc3VibmV0cyBhcmUKK3NwZWNpZmllZCwgdGhlbiBubyByZXZlcnNlIHF1ZXJpZXMgYXJlIGFuc3dlcmVkLgorLlRQCisuQiAtLWF1dGgtc29hPTxzZXJpYWw+Wyw8aG9zdG1hc3Rlcj5bLDxyZWZyZXNoPlssPHJldHJ5PlssPGV4cGlyeT5dXV1dCitTcGVjaWZ5IGZpZWxkcyBpbiB0aGUgU09BIHJlY29yZCBhc3NvY2lhdGVkIHdpdGggYXV0aG9yaXRhdGl2ZQorem9uZXMuIE5vdGUgdGhhdCB0aGlzIGlzIG9wdGlvbmFsLCBhbGwgdGhlIHZhbHVlcyBhcmUgc2V0IHRvIHNhbmUgZGVmYXVsdHMuCisuVFAKKy5CIC0tYXV0aC1zZWMtc2VydmVycz08ZG9tYWluPlssPGRvbWFpbj5bLDxkb21haW4+Li4uXV0KK1NwZWNpZnkgYW55IHNlY29uZGFyeSBzZXJ2ZXJzIGZvciBhIHpvbmUgZm9yIHdoaWNoIGRuc21hc3EgaXMKK2F1dGhvcml0YXRpdmUuIFRoZXNlIHNlcnZlcnMgbXVzdCBiZSBjb25maWd1cmVkIHRvIGdldCB6b25lIGRhdGEgZnJvbQorZG5zbWFzcSBieSB6b25lIHRyYW5zZmVyLCBhbmQgYW5zd2VyIHF1ZXJpZXMgZm9yIHRoZSBzYW1lCithdXRob3JpdGF0aXZlIHpvbmVzIGFzIGRuc21hc3EuCisuVFAKKy5CIC0tYXV0aC1wZWVyPTxpcC1hZGRyZXNzPlssPGlwLWFkZHJlc3M+Wyw8aXAtYWRkcmVzcz4uLi5dXQorU3BlY2lmeSB0aGUgYWRkcmVzc2VzIG9mIHNlY29uZGFyeSBzZXJ2ZXJzIHdoaWNoIGFyZSBhbGxvd2VkIHRvCitpbml0aWF0ZSB6b25lIHRyYW5zZmVyIChBWEZSKSByZXF1ZXN0cyBmb3Igem9uZXMgZm9yIHdoaWNoIGRuc21hc3EgaXMKK2F1dGhvcml0YXRpdmUuIElmIHRoaXMgb3B0aW9uIGlzIG5vdCBnaXZlbiwgdGhlbiBBWEZSIHJlcXVlc3RzIHdpbGwgYmUKK2FjY2VwdGVkIGZyb20gYW55IHNlY29uZGFyeS4gCisuVFAgCisuQiAtLWNvbm50cmFjaworUmVhZCB0aGUgTGludXggY29ubmVjdGlvbiB0cmFjayBtYXJrIGFzc29jaWF0ZWQgd2l0aCBpbmNvbWluZyBETlMKK3F1ZXJpZXMgYW5kIHNldCB0aGUgc2FtZSBtYXJrIHZhbHVlIG9uIHVwc3RyZWFtIHRyYWZmaWMgdXNlZCB0byBhbnN3ZXIKK3Rob3NlIHF1ZXJpZXMuIFRoaXMgYWxsb3dzIHRyYWZmaWMgZ2VuZXJhdGVkIGJ5IGRuc21hc3EgdG8gYmUKK2Fzc29jaWF0ZWQgd2l0aCB0aGUgcXVlcmllcyB3aGljaCBjYXVzZSBpdCwgdXNlZnVsIGZvciBiYW5kd2lkdGgKK2FjY291bnRpbmcgYW5kIGZpcmV3YWxsaW5nLiBEbnNtYXNxIG11c3QgaGF2ZSBjb25udHJhY2sgc3VwcG9ydAorY29tcGlsZWQgaW4gYW5kIHRoZSBrZXJuZWwgbXVzdCBoYXZlIGNvbm50cmFjayBzdXBwb3J0CitpbmNsdWRlZCBhbmQgY29uZmlndXJlZC4gVGhpcyBvcHRpb24gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGgKKy0tcXVlcnktcG9ydC4gCisuVFAKKy5CIFwtRiwgLS1kaGNwLXJhbmdlPVt0YWc6PHRhZz5bLHRhZzo8dGFnPl0sXVtzZXQ6PHRhZz4sXTxzdGFydC1hZGRyPlssPGVuZC1hZGRyPl1bLDxtb2RlPl1bLDxuZXRtYXNrPlssPGJyb2FkY2FzdD5dXVssPGxlYXNlIHRpbWU+XQorLlRQCisuQiBcLUYsIC0tZGhjcC1yYW5nZT1bdGFnOjx0YWc+Wyx0YWc6PHRhZz5dLF1bc2V0Ojx0YWc+LF08c3RhcnQtSVB2NmFkZHI+Wyw8ZW5kLUlQdjZhZGRyPnxjb25zdHJ1Y3Rvcjo8aW50ZXJmYWNlPl1bLDxtb2RlPl1bLDxwcmVmaXgtbGVuPl1bLDxsZWFzZSB0aW1lPl0KKworRW5hYmxlIHRoZSBESENQIHNlcnZlci4gQWRkcmVzc2VzIHdpbGwgYmUgZ2l2ZW4gb3V0IGZyb20gdGhlIHJhbmdlCis8c3RhcnQtYWRkcj4gdG8gPGVuZC1hZGRyPiBhbmQgZnJvbSBzdGF0aWNhbGx5IGRlZmluZWQgYWRkcmVzc2VzIGdpdmVuCitpbiAKKy5CIGRoY3AtaG9zdAorb3B0aW9ucy4gSWYgdGhlIGxlYXNlIHRpbWUgaXMgZ2l2ZW4sIHRoZW4gbGVhc2VzCit3aWxsIGJlIGdpdmVuIGZvciB0aGF0IGxlbmd0aCBvZiB0aW1lLiBUaGUgbGVhc2UgdGltZSBpcyBpbiBzZWNvbmRzLAorb3IgbWludXRlcyAoZWcgNDVtKSBvciBob3VycyAoZWcgMWgpIG9yICJpbmZpbml0ZSIuIElmIG5vdCBnaXZlbiwKK3RoZSBkZWZhdWx0IGxlYXNlIHRpbWUgaXMgb25lIGhvdXIuIFRoZQorbWluaW11bSBsZWFzZSB0aW1lIGlzIHR3byBtaW51dGVzLiBGb3IgSVB2NiByYW5nZXMsIHRoZSBsZWFzZSB0aW1lCittYXliZSAiZGVwcmVjYXRlZCI7IHRoaXMgc2V0cyB0aGUgcHJlZmVycmVkIGxpZmV0aW1lIHNlbnQgaW4gYSBESENQCitsZWFzZSBvciByb3V0ZXIgYWR2ZXJ0aXNlbWVudCB0byB6ZXJvLCB3aGljaCBjYXVzZXMgY2xpZW50cyB0byB1c2UKK290aGVyIGFkZHJlc3NlcywgaWYgYXZhaWxhYmxlLCBmb3IgbmV3IGNvbm5lY3Rpb25zIGFzIGEgcHJlbHVkZSB0byByZW51bWJlcmluZy4KKworVGhpcyBvcHRpb24gbWF5IGJlIHJlcGVhdGVkLCB3aXRoIGRpZmZlcmVudCBhZGRyZXNzZXMsIHRvIGVuYWJsZSBESENQCitzZXJ2aWNlIHRvIG1vcmUgdGhhbiBvbmUgbmV0d29yay4gRm9yIGRpcmVjdGx5IGNvbm5lY3RlZCBuZXR3b3JrcyAoaWUsCituZXR3b3JrcyBvbiB3aGljaCB0aGUgbWFjaGluZSBydW5uaW5nIGRuc21hc3EgaGFzIGFuIGludGVyZmFjZSkgdGhlCituZXRtYXNrIGlzIG9wdGlvbmFsOiBkbnNtYXNxIHdpbGwgZGV0ZXJtaW5lIGl0IGZyb20gdGhlIGludGVyZmFjZQorY29uZmlndXJhdGlvbi4gRm9yIG5ldHdvcmtzIHdoaWNoIHJlY2VpdmUgREhDUCBzZXJ2aWNlIHZpYSBhIHJlbGF5CithZ2VudCwgZG5zbWFzcSBjYW5ub3QgZGV0ZXJtaW5lIHRoZSBuZXRtYXNrIGl0c2VsZiwgc28gaXQgc2hvdWxkIGJlCitzcGVjaWZpZWQsIG90aGVyd2lzZSBkbnNtYXNxIHdpbGwgaGF2ZSB0byBndWVzcywgYmFzZWQgb24gdGhlIGNsYXNzIChBLCBCIG9yCitDKSBvZiB0aGUgbmV0d29yayBhZGRyZXNzLiBUaGUgYnJvYWRjYXN0IGFkZHJlc3MgaXMKK2Fsd2F5cyBvcHRpb25hbC4gSXQgaXMgYWx3YXlzCithbGxvd2VkIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSBkaGNwLXJhbmdlIGluIGEgc2luZ2xlIHN1Ym5ldC4gCisKK0ZvciBJUHY2LCB0aGUgcGFyYW1ldGVycyBhcmUgc2xpZ2h0bHkgZGlmZmVyZW50OiBpbnN0ZWFkIG9mIG5ldG1hc2sKK2FuZCBicm9hZGNhc3QgYWRkcmVzcywgdGhlcmUgaXMgYW4gb3B0aW9uYWwgcHJlZml4IGxlbmd0aCB3aGljaCBtdXN0CitiZSBlcXVhbCB0byBvciBsYXJnZXIgdGhlbiB0aGUgcHJlZml4IGxlbmd0aCBvbiB0aGUgbG9jYWwgaW50ZXJmYWNlLiBJZiBub3QKK2dpdmVuLCB0aGlzIGRlZmF1bHRzIHRvIDY0LiBVbmxpa2UgdGhlIElQdjQgY2FzZSwgdGhlIHByZWZpeCBsZW5ndGggaXMgbm90CithdXRvbWF0aWNhbGx5IGRlcml2ZWQgZnJvbSB0aGUgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24uIFRoZSBtaW1pbXVtCitzaXplIG9mIHRoZSBwcmVmaXggbGVuZ3RoIGlzIDY0LgorCitJUHY2IChvbmx5KSBzdXBwb3J0cyBhbm90aGVyIHR5cGUgb2YgcmFuZ2UuIEluIHRoaXMsIHRoZSBzdGFydCBhZGRyZXNzIGFuZCBvcHRpb25hbCBlbmQgYWRkcmVzcyBjb250YWluIG9ubHkgdGhlIG5ldHdvcmsgcGFydCAoaWUgOjoxKSBhbmQgdGhleSBhcmUgZm9sbG93ZWQgYnkKKy5CIGNvbnN0cnVjdG9yOjxpbnRlcmZhY2U+LgorVGhpcyBmb3JtcyBhIHRlbXBsYXRlIHdoaWNoIGRlc2NyaWJlcyBob3cgdG8gY3JlYXRlIHJhbmdlcywgYmFzZWQgb24gdGhlIGFkZHJlc3NlcyBhc3NpZ25lZCB0byB0aGUgaW50ZXJmYWNlLiBGb3IgaW5zdGFuY2UKKworLkIgLS1kaGNwLXJhbmdlPTo6MSw6OjQwMCxjb25zdHJ1Y3RvcjpldGgwCisKK3dpbGwgbG9vayBmb3IgYWRkcmVzc2VzIG9uCitldGgwIGFuZCB0aGVuIGNyZWF0ZSBhIHJhbmdlIGZyb20gPG5ldHdvcms+OjoxIHRvIDxuZXR3b3JrPjo6NDAwLiBJZgordGhlIGludGVyZmFjZSBpcyBhc3NpZ25lZCBtb3JlIHRoYW4gb25lIG5ldHdvcmssIHRoZW4gdGhlCitjb3JyZXNwb25kaW5nIHJhbmdlcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCwgYW5kIHRoZW4KK2RlcHJlY2F0ZWQgYW5kIGZpbmFsbHkgcmVtb3ZlZCBhZ2FpbiBhcyB0aGUgYWRkcmVzcyBpcyBkZXByZWNhdGVkIGFuZAordGhlbiBkZWxldGVkLiBUaGUgaW50ZXJmYWNlIG5hbWUgbWF5IGhhdmUgYSBmaW5hbCAiKiIgd2lsZGNhcmQuIE5vdGUKK3RoYXQganVzdCBhbnkgYWRkcmVzcyBvbiBldGgwIHdpbGwgbm90IGRvOiBpdCBtdXN0IG5vdCBiZSBhbgorYXV0b2NvbmZpZ3VyZWQgb3IgcHJpdmFjeSBhZGRyZXNzLCBvciBiZSBkZXByZWNhdGVkLgorCitJZiBhIGRoY3AtcmFuZ2UgaXMgb25seSBiZWluZyB1c2VkIGZvciBzdGF0ZWxlc3MgREhDUCBhbmQvb3IgU0xBQUMsCit0aGVuIHRoZSBhZGRyZXNzIGNhbiBiZSBzaW1wbHkgOjoKKworLkIgLS1kaGNwLXJhbmdlPTo6LGNvbnN0cnVjdG9yOmV0aDAKKworCitUaGUgb3B0aW9uYWwgCisuQiBzZXQ6PHRhZz4gCitzZXRzIGFuIGFscGhhbnVtZXJpYyBsYWJlbCB3aGljaCBtYXJrcyB0aGlzIG5ldHdvcmsgc28gdGhhdAorZGhjcCBvcHRpb25zIG1heSBiZSBzcGVjaWZpZWQgb24gYSBwZXItbmV0d29yayBiYXNpcy4gCitXaGVuIGl0IGlzIHByZWZpeGVkIHdpdGggJ3RhZzonIGluc3RlYWQsIHRoZW4gaXRzIG1lYW5pbmcgY2hhbmdlcyBmcm9tIHNldHRpbmcKK2EgdGFnIHRvIG1hdGNoaW5nIGl0LiBPbmx5IG9uZSB0YWcgbWF5IGJlIHNldCwgYnV0IG1vcmUgdGhhbiBvbmUgdGFnCittYXkgYmUgbWF0Y2hlZC4KKworVGhlIG9wdGlvbmFsIDxtb2RlPiBrZXl3b3JkIG1heSBiZSAKKy5CIHN0YXRpYword2hpY2ggdGVsbHMgZG5zbWFzcSB0byBlbmFibGUgREhDUCBmb3IgdGhlIG5ldHdvcmsgc3BlY2lmaWVkLCBidXQgbm90Cit0byBkeW5hbWljYWxseSBhbGxvY2F0ZSBJUCBhZGRyZXNzZXM6IG9ubHkgaG9zdHMgd2hpY2ggaGF2ZSBzdGF0aWMKK2FkZHJlc3NlcyBnaXZlbiB2aWEgCisuQiBkaGNwLWhvc3QKK29yIGZyb20gL2V0Yy9ldGhlcnMgd2lsbCBiZSBzZXJ2ZWQuIEEgc3RhdGljLW9ubHkgc3VibmV0IHdpdGggYWRkcmVzcworYWxsIHplcm9zIG1heSBiZSB1c2VkIGFzIGEgImNhdGNoLWFsbCIgYWRkcmVzcyB0byBlbmFibGUgcmVwbGllcyB0byBhbGwKK0luZm9ybWF0aW9uLXJlcXVlc3QgcGFja2V0cyBvbiBhIHN1Ym5ldCB3aGljaCBpcyBwcm92aWRlZCB3aXRoCitzdGF0ZWxlc3MgREhDUHY2LCBpZQorLkIgLS1kaGNwLXJhbmdlPTo6LHN0YXRpYworCitGb3IgSVB2NCwgdGhlIDxtb2RlPiBtYXkgYmUgCisuQiBwcm94eQoraW4gd2hpY2ggY2FzZSBkbnNtYXNxIHdpbGwgcHJvdmlkZSBwcm94eS1ESENQIG9uIHRoZSBzcGVjaWZpZWQKK3N1Ym5ldC4gKFNlZSAKKy5CIHB4ZS1wcm9tcHQKK2FuZCAKKy5CIHB4ZS1zZXJ2aWNlCitmb3IgZGV0YWlscy4pCisKK0ZvciBJUHY2LCB0aGUgbW9kZSBtYXkgYmUgc29tZSBjb21iaW5hdGlvbiBvZgorLkIgcmEtb25seSwgc2xhYWMsIHJhLW5hbWVzLCByYS1zdGF0ZWxlc3MsIHJhLWFkdnJvdXRlci4KKworLkIgcmEtb25seQordGVsbHMgZG5zbWFzcSB0byBvZmZlciBSb3V0ZXIgQWR2ZXJ0aXNlbWVudCBvbmx5IG9uIHRoaXMgc3VibmV0LAorYW5kIG5vdCBESENQLiAKKworLkIgc2xhYWMKK3RlbGxzIGRuc21hc3EgdG8gb2ZmZXIgUm91dGVyIEFkdmVydGlzZW1lbnQgb24gdGhpcyBzdWJuZXQgYW5kIHRvIHNldAordGhlIEEgYml0IGluIHRoZSByb3V0ZXIgYWR2ZXJ0aXNlbWVudCwgc28gdGhhdCB0aGUgY2xpZW50IHdpbGwgdXNlCitTTEFBQyBhZGRyZXNzZXMuIFdoZW4gdXNlZCB3aXRoIGEgREhDUCByYW5nZSBvciBzdGF0aWMgREhDUCBhZGRyZXNzCit0aGlzIHJlc3VsdHMgaW4gdGhlIGNsaWVudCBoYXZpbmcgYm90aCBhIERIQ1AtYXNzaWduZWQgYW5kIGEgU0xBQUMKK2FkZHJlc3MuCisKKy5CIHJhLXN0YXRlbGVzcworc2VuZHMgcm91dGVyIGFkdmVydGlzZW1lbnRzIHdpdGggdGhlIE8gYW5kIEEgYml0cyBzZXQsIGFuZCBwcm92aWRlcyBhCitzdGF0ZWxlc3MgREhDUCBzZXJ2aWNlLiBUaGUgY2xpZW50IHdpbGwgdXNlIGEgU0xBQUMgYWRkcmVzcywgYW5kIHVzZQorREhDUCBmb3Igb3RoZXIgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KKworLkIgcmEtbmFtZXMKK2VuYWJsZXMgYSBtb2RlCit3aGljaCBnaXZlcyBETlMgbmFtZXMgdG8gZHVhbC1zdGFjayBob3N0cyB3aGljaCBkbyBTTEFBQyBmb3IKK0lQdjYuIERuc21hc3EgdXNlcyB0aGUgaG9zdCdzIElQdjQgbGVhc2UgdG8gZGVyaXZlIHRoZSBuYW1lLCBuZXR3b3JrCitzZWdtZW50IGFuZCBNQUMgYWRkcmVzcyBhbmQgYXNzdW1lcyB0aGF0IHRoZSBob3N0IHdpbGwgYWxzbyBoYXZlIGFuCitJUHY2IGFkZHJlc3MgY2FsY3VsYXRlZCB1c2luZyB0aGUgU0xBQUMgYWxnb3JpdGhtLCBvbiB0aGUgc2FtZSBuZXR3b3JrCitzZWdtZW50LiBUaGUgYWRkcmVzcyBpcyBwaW5nZWQsIGFuZCBpZiBhIHJlcGx5IGlzIHJlY2VpdmVkLCBhbiBBQUFBCityZWNvcmQgaXMgYWRkZWQgdG8gdGhlIEROUyBmb3IgdGhpcyBJUHY2CithZGRyZXNzLiBOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IGhhcHBlbnMgZm9yIGRpcmVjdGx5LWNvbm5lY3RlZAorbmV0d29ya3MsIChub3Qgb25lIGRvaW5nIERIQ1AgdmlhIGEgcmVsYXkpIGFuZCBpdCB3aWxsIG5vdCB3b3JrIAoraWYgYSBob3N0IGlzIHVzaW5nIHByaXZhY3kgZXh0ZW5zaW9ucy4gCisuQiByYS1uYW1lcworY2FuIGJlIGNvbWJpbmVkICB3aXRoIAorLkIgcmEtc3RhdGVsZXNzCithbmQKKy5CIHNsYWFjLgorCisuQiByYS1hZHZyb3V0ZXIKK2VuYWJsZXMgYSBtb2RlIHdoZXJlIHJvdXRlciBhZGRyZXNzKGVzKSByYXRoZXIgdGhhbiBwcmVmaXgoZXMpIGFyZSBpbmNsdWRlZCBpbiB0aGUgYWR2ZXJ0aXNlbWVudHMuCitUaGlzIGlzIGRlc2NyaWJlZCBpbiBSRkMtMzc3NSBzZWN0aW9uIDcuMiBhbmQgaXMgdXNlZCBpbiBtb2JpbGUgSVB2Ni4gSW4gdGhpcyBtb2RlIHRoZSBpbnRlcnZhbCBvcHRpb24KK2lzIGFsc28gaW5jbHVkZWQsIGFzIGRlc2NyaWJlZCBpbiBSRkMtMzc3NSBzZWN0aW9uIDcuMy4KKworLlRQCisuQiBcLUcsIC0tZGhjcC1ob3N0PVs8aHdhZGRyPl1bLGlkOjxjbGllbnRfaWQ+fCpdWyxzZXQ6PHRhZz5dWyw8aXBhZGRyPl1bLDxob3N0bmFtZT5dWyw8bGVhc2VfdGltZT5dWyxpZ25vcmVdCitTcGVjaWZ5IHBlciBob3N0IHBhcmFtZXRlcnMgZm9yIHRoZSBESENQIHNlcnZlci4gVGhpcyBhbGxvd3MgYSBtYWNoaW5lCit3aXRoIGEgcGFydGljdWxhciBoYXJkd2FyZSBhZGRyZXNzIHRvIGJlIGFsd2F5cyBhbGxvY2F0ZWQgdGhlIHNhbWUKK2hvc3RuYW1lLCBJUCBhZGRyZXNzIGFuZCBsZWFzZSB0aW1lLiBBIGhvc3RuYW1lIHNwZWNpZmllZCBsaWtlIHRoaXMKK292ZXJyaWRlcyBhbnkgc3VwcGxpZWQgYnkgdGhlIERIQ1AgY2xpZW50IG9uIHRoZSBtYWNoaW5lLiBJdCBpcyBhbHNvCithbGxvd2FibGUgdG8gb21pdCB0aGUgaGFyZHdhcmUgYWRkcmVzcyBhbmQgaW5jbHVkZSB0aGUgaG9zdG5hbWUsIGluCit3aGljaCBjYXNlIHRoZSBJUCBhZGRyZXNzIGFuZCBsZWFzZSB0aW1lcyB3aWxsIGFwcGx5IHRvIGFueSBtYWNoaW5lCitjbGFpbWluZyB0aGF0IG5hbWUuIEZvciBleGFtcGxlIAorLkIgLS1kaGNwLWhvc3Q9MDA6MjA6ZTA6M2I6MTM6YWYsd2FwLGluZmluaXRlIAordGVsbHMgZG5zbWFzcSB0byBnaXZlCit0aGUgbWFjaGluZSB3aXRoIGhhcmR3YXJlIGFkZHJlc3MgMDA6MjA6ZTA6M2I6MTM6YWYgdGhlIG5hbWUgd2FwLCBhbmQKK2FuIGluZmluaXRlIERIQ1AgbGVhc2UuIAorLkIgLS1kaGNwLWhvc3Q9bGFwLDE5Mi4xNjguMC4xOTkgCit0ZWxscworZG5zbWFzcSB0byBhbHdheXMgYWxsb2NhdGUgdGhlIG1hY2hpbmUgbGFwIHRoZSBJUCBhZGRyZXNzCisxOTIuMTY4LjAuMTk5LiAKKworQWRkcmVzc2VzIGFsbG9jYXRlZCBsaWtlIHRoaXMgYXJlIG5vdCBjb25zdHJhaW5lZCB0byBiZQoraW4gdGhlIHJhbmdlIGdpdmVuIGJ5IHRoZSAtLWRoY3AtcmFuZ2Ugb3B0aW9uLCBidXQgdGhleSBtdXN0IGJlIGluCit0aGUgc2FtZSBzdWJuZXQgYXMgc29tZSB2YWxpZCBkaGNwLXJhbmdlLiAgRm9yCitzdWJuZXRzIHdoaWNoIGRvbid0IG5lZWQgYSBwb29sIG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhZGRyZXNzZXMsCit1c2UgdGhlICJzdGF0aWMiIGtleXdvcmQgaW4gdGhlIGRoY3AtcmFuZ2UgZGVjbGFyYXRpb24uCisKK0l0IGlzIGFsbG93ZWQgdG8gdXNlIGNsaWVudCBpZGVudGlmaWVycyAoY2FsbGVkIGNsaWVudAorRFVJRCBpbiBJUHY2LWxhbmQgcmF0aGVyIHRoYW4KK2hhcmR3YXJlIGFkZHJlc3NlcyB0byBpZGVudGlmeSBob3N0cyBieSBwcmVmaXhpbmcgd2l0aCAnaWQ6Jy4gVGh1czogCisuQiAtLWRoY3AtaG9zdD1pZDowMTowMjowMzowNCwuLi4uLiAKK3JlZmVycyB0byB0aGUgaG9zdCB3aXRoIGNsaWVudCBpZGVudGlmaWVyIDAxOjAyOjAzOjA0LiBJdCBpcyBhbHNvCithbGxvd2VkIHRvIHNwZWNpZnkgdGhlIGNsaWVudCBJRCBhcyB0ZXh0LCBsaWtlIHRoaXM6CisuQiAtLWRoY3AtaG9zdD1pZDpjbGllbnRpZGFzdGV4dCwuLi4uLiAKKworQSBzaW5nbGUKKy5CIGRoY3AtaG9zdCAKK21heSBjb250YWluIGFuIElQdjQgYWRkcmVzcyBvciBhbiBJUHY2IGFkZHJlc3MsIG9yIGJvdGguIElQdjYgYWRkcmVzc2VzIG11c3QgYmUgYnJhY2tldGVkIGJ5IHNxdWFyZSBicmFja2V0cyB0aHVzOgorLkIgLS1kaGNwLWhvc3Q9bGFwdG9wLFsxMjM0Ojo1Nl0KK0lQdjYgYWRkcmVzc2VzIG1heSBjb250YWluIG9ubHkgdGhlIGhvc3QtaWRlbnRpZmllciBwYXJ0OgorLkIgLS1kaGNwLWhvc3Q9bGFwdG9wLFs6OjU2XQoraW4gd2hpY2ggY2FzZSB0aGV5IGFjdCBhcyB3aWxkY2FyZHMgaW4gY29uc3RydWN0ZWQgZGhjcCByYW5nZXMsIHdpdGgKK3RoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIHBhcnQgaW5zZXJ0ZWQuIAorTm90ZSB0aGF0IGluIElQdjYgREhDUCwgdGhlIGhhcmR3YXJlIGFkZHJlc3MgbWF5IG5vdCBiZQorYXZhaWxhYmxlLCB0aG91Z2ggaXQgbm9ybWFsbHkgaXMgZm9yIGRpcmVjdC1jb25uZWN0ZWQgY2xpZW50cywgb3IKK2NsaWVudHMgdXNpbmcgREhDUCByZWxheXMgd2hpY2ggc3VwcG9ydCBSRkMgNjkzOS4KKworCitGb3IgREhDUHY0LCB0aGUgIHNwZWNpYWwgb3B0aW9uIGlkOiogbWVhbnMgImlnbm9yZSBhbnkgY2xpZW50LWlkIAorYW5kIHVzZSBNQUMgYWRkcmVzc2VzIG9ubHkuIiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgY2xpZW50IHByZXNlbnRzIGEgY2xpZW50LWlkIHNvbWV0aW1lcyAKK2J1dCBub3Qgb3RoZXJzLgorCitJZiBhIG5hbWUgYXBwZWFycyBpbiAvZXRjL2hvc3RzLCB0aGUgYXNzb2NpYXRlZCBhZGRyZXNzIGNhbiBiZQorYWxsb2NhdGVkIHRvIGEgREhDUCBsZWFzZSwgYnV0IG9ubHkgaWYgYSAKKy5CIC0tZGhjcC1ob3N0CitvcHRpb24gc3BlY2lmeWluZyB0aGUgbmFtZSBhbHNvIGV4aXN0cy4gT25seSBvbmUgaG9zdG5hbWUgY2FuIGJlCitnaXZlbiBpbiBhIAorLkIgZGhjcC1ob3N0CitvcHRpb24sIGJ1dCBhbGlhc2VzIGFyZSBwb3NzaWJsZSBieSB1c2luZyBDTkFNRXMuIChTZWUgCisuQiAtLWNuYW1lCispLgorCitUaGUgc3BlY2lhbCBrZXl3b3JkICJpZ25vcmUiCit0ZWxscyBkbnNtYXNxIHRvIG5ldmVyIG9mZmVyIGEgREhDUCBsZWFzZSB0byBhIG1hY2hpbmUuIFRoZSBtYWNoaW5lCitjYW4gYmUgc3BlY2lmaWVkIGJ5IGhhcmR3YXJlIGFkZHJlc3MsIGNsaWVudCBJRCBvciBob3N0bmFtZSwgZm9yCitpbnN0YW5jZQorLkIgLS1kaGNwLWhvc3Q9MDA6MjA6ZTA6M2I6MTM6YWYsaWdub3JlCitUaGlzIGlzCit1c2VmdWwgd2hlbiB0aGVyZSBpcyBhbm90aGVyIERIQ1Agc2VydmVyIG9uIHRoZSBuZXR3b3JrIHdoaWNoIHNob3VsZAorYmUgdXNlZCBieSBzb21lIG1hY2hpbmVzLgorCitUaGUgc2V0Ojx0YWc+IGNvbnN0cnVjdCBzZXRzIHRoZSB0YWcKK3doZW5ldmVyIHRoaXMgZGhjcC1ob3N0IGRpcmVjdGl2ZSBpcyBpbiB1c2UuIFRoaXMgY2FuIGJlIHVzZWQgdG8gCitzZWxlY3RpdmVseSBzZW5kIERIQ1Agb3B0aW9ucyBqdXN0IGZvciB0aGlzIGhvc3QuIE1vcmUgdGhhbiBvbmUgdGFnCitjYW4gYmUgc2V0IGluIGEgZGhjcC1ob3N0IGRpcmVjdGl2ZSAoYnV0IG5vdCBpbiBvdGhlciBwbGFjZXMgd2hlcmUKKyJzZXQ6PHRhZz4iIGlzIGFsbG93ZWQpLiBXaGVuIGEgaG9zdCBtYXRjaGVzIGFueQorZGhjcC1ob3N0IGRpcmVjdGl2ZSAob3Igb25lIGltcGxpZWQgYnkgL2V0Yy9ldGhlcnMpIHRoZW4gdGhlIHNwZWNpYWwKK3RhZyAia25vd24iIGlzIHNldC4gVGhpcyBhbGxvd3MgZG5zbWFzcSB0byBiZSBjb25maWd1cmVkIHRvCitpZ25vcmUgcmVxdWVzdHMgZnJvbSB1bmtub3duIG1hY2hpbmVzIHVzaW5nCisuQiAtLWRoY3AtaWdub3JlPXRhZzoha25vd24KK0V0aGVybmV0IGFkZHJlc3NlcyAoYnV0IG5vdCBjbGllbnQtaWRzKSBtYXkgaGF2ZQord2lsZGNhcmQgYnl0ZXMsIHNvIGZvciBleGFtcGxlIAorLkIgLS1kaGNwLWhvc3Q9MDA6MjA6ZTA6M2I6MTM6KixpZ25vcmUgCit3aWxsIGNhdXNlIGRuc21hc3EgdG8gaWdub3JlIGEgcmFuZ2Ugb2YgaGFyZHdhcmUgYWRkcmVzc2VzLiBOb3RlIHRoYXQKK3RoZSAiKiIgd2lsbCBuZWVkIHRvIGJlIGVzY2FwZWQgb3IgcXVvdGVkIG9uIGEgY29tbWFuZCBsaW5lLCBidXQgbm90CitpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorCitIYXJkd2FyZSBhZGRyZXNzZXMgbm9ybWFsbHkgbWF0Y2ggYW55CituZXR3b3JrIChBUlApIHR5cGUsIGJ1dCBpdCBpcyBwb3NzaWJsZSB0byByZXN0cmljdCB0aGVtIHRvIGEgc2luZ2xlCitBUlAgdHlwZSBieSBwcmVjZWRpbmcgdGhlbSB3aXRoIHRoZSBBUlAtdHlwZSAoaW4gSEVYKSBhbmQgIi0iLiBzbyAKKy5CIC0tZGhjcC1ob3N0PTA2LTAwOjIwOmUwOjNiOjEzOmFmLDEuMi4zLjQgCit3aWxsIG9ubHkgbWF0Y2ggYQorVG9rZW4tUmluZyBoYXJkd2FyZSBhZGRyZXNzLCBzaW5jZSB0aGUgQVJQLWFkZHJlc3MgdHlwZSBmb3IgdG9rZW4gcmluZworaXMgNi4gCisKK0FzIGEgc3BlY2lhbCBjYXNlLCBpbiBESENQdjQsIGl0IGlzIHBvc3NpYmxlIHRvIGluY2x1ZGUgbW9yZSB0aGFuIG9uZQoraGFyZHdhcmUgYWRkcmVzcy4gZWc6CisuQiAtLWRoY3AtaG9zdD0xMToyMjozMzo0NDo1NTo2NiwxMjozNDo1Njo3ODo5MDoxMiwxOTIuMTY4LjAuMgorVGhpcyBhbGxvd3MgYW4gSVAgYWRkcmVzcyB0byBiZSBhc3NvY2lhdGVkIHdpdGgKK211bHRpcGxlIGhhcmR3YXJlIGFkZHJlc3NlcywgYW5kIGdpdmVzIGRuc21hc3EgcGVybWlzc2lvbiB0byBhYmFuZG9uIGEKK0RIQ1AgbGVhc2UgdG8gb25lIG9mIHRoZSBoYXJkd2FyZSBhZGRyZXNzZXMgd2hlbiBhbm90aGVyIG9uZSBhc2tzIGZvcgorYSBsZWFzZS4gQmV3YXJlIHRoYXQgdGhpcyBpcyBhIGRhbmdlcm91cyB0aGluZyB0byBkbywgaXQgd2lsbCBvbmx5Cit3b3JrIHJlbGlhYmx5IGlmIG9ubHkgb25lIG9mIHRoZSBoYXJkd2FyZSBhZGRyZXNzZXMgaXMgYWN0aXZlIGF0IGFueQordGltZSBhbmQgdGhlcmUgaXMgbm8gd2F5IGZvciBkbnNtYXNxIHRvIGVuZm9yY2UgdGhpcy4gSXQgaXMsIGZvciBpbnN0YW5jZSwKK3VzZWZ1bCB0byBhbGxvY2F0ZSBhIHN0YWJsZSBJUCBhZGRyZXNzIHRvIGEgbGFwdG9wIHdoaWNoCitoYXMgYm90aCB3aXJlZCBhbmQgd2lyZWxlc3MgaW50ZXJmYWNlcy4KKy5UUAorLkIgLS1kaGNwLWhvc3RzZmlsZT08cGF0aD4KK1JlYWQgREhDUCBob3N0IGluZm9ybWF0aW9uIGZyb20gdGhlIHNwZWNpZmllZCBmaWxlLiBJZiBhIGRpcmVjdG9yeQoraXMgZ2l2ZW4sIHRoZW4gcmVhZCBhbGwgdGhlIGZpbGVzIGNvbnRhaW5lZCBpbiB0aGF0IGRpcmVjdG9yeS4gVGhlIGZpbGUgY29udGFpbnMgCitpbmZvcm1hdGlvbiBhYm91dCBvbmUgaG9zdCBwZXIgbGluZS4gVGhlIGZvcm1hdCBvZiBhIGxpbmUgaXMgdGhlIHNhbWUKK2FzIHRleHQgdG8gdGhlIHJpZ2h0IG9mICc9JyBpbiAtLWRoY3AtaG9zdC4gVGhlIGFkdmFudGFnZSBvZiBzdG9yaW5nIERIQ1AgaG9zdCBpbmZvcm1hdGlvbgoraW4gdGhpcyBmaWxlIGlzIHRoYXQgaXQgY2FuIGJlIGNoYW5nZWQgd2l0aG91dCByZS1zdGFydGluZyBkbnNtYXNxOgordGhlIGZpbGUgd2lsbCBiZSByZS1yZWFkIHdoZW4gZG5zbWFzcSByZWNlaXZlcyBTSUdIVVAuCisuVFAKKy5CIC0tZGhjcC1vcHRzZmlsZT08cGF0aD4KK1JlYWQgREhDUCBvcHRpb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgc3BlY2lmaWVkIGZpbGUuICBJZiBhIGRpcmVjdG9yeQoraXMgZ2l2ZW4sIHRoZW4gcmVhZCBhbGwgdGhlIGZpbGVzIGNvbnRhaW5lZCBpbiB0aGF0IGRpcmVjdG9yeS4gVGhlIGFkdmFudGFnZSBvZiAKK3VzaW5nIHRoaXMgb3B0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciAtLWRoY3AtaG9zdHNmaWxlOiB0aGUKK2RoY3Atb3B0c2ZpbGUgd2lsbCBiZSByZS1yZWFkIHdoZW4gZG5zbWFzcSByZWNlaXZlcyBTSUdIVVAuIE5vdGUgdGhhdAoraXQgaXMgcG9zc2libGUgdG8gZW5jb2RlIHRoZSBpbmZvcm1hdGlvbiBpbiBhCisuQiAtLWRoY3AtYm9vdAorZmxhZyBhcyBESENQIG9wdGlvbnMsIHVzaW5nIHRoZSBvcHRpb25zIG5hbWVzIGJvb3RmaWxlLW5hbWUsCitzZXJ2ZXItaXAtYWRkcmVzcyBhbmQgdGZ0cC1zZXJ2ZXIuIFRoaXMgYWxsb3dzIHRoZXNlIHRvIGJlIGluY2x1ZGVkCitpbiBhIGRoY3Atb3B0c2ZpbGUuCisuVFAgCisuQiBcLVosIC0tcmVhZC1ldGhlcnMKK1JlYWQgL2V0Yy9ldGhlcnMgZm9yIGluZm9ybWF0aW9uIGFib3V0IGhvc3RzIGZvciB0aGUgREhDUCBzZXJ2ZXIuIFRoZQorZm9ybWF0IG9mIC9ldGMvZXRoZXJzIGlzIGEgaGFyZHdhcmUgYWRkcmVzcywgZm9sbG93ZWQgYnkgZWl0aGVyIGEKK2hvc3RuYW1lIG9yIGRvdHRlZC1xdWFkIElQIGFkZHJlc3MuIFdoZW4gcmVhZCBieSBkbnNtYXNxIHRoZXNlIGxpbmVzCitoYXZlIGV4YWN0bHkgdGhlIHNhbWUgZWZmZWN0IGFzCisuQiAtLWRoY3AtaG9zdAorb3B0aW9ucyBjb250YWluaW5nIHRoZSBzYW1lIGluZm9ybWF0aW9uLiAvZXRjL2V0aGVycyBpcyByZS1yZWFkIHdoZW4gCitkbnNtYXNxIHJlY2VpdmVzIFNJR0hVUC4gSVB2NiBhZGRyZXNzZXMgYXJlIE5PVCByZWFkIGZyb20gL2V0Yy9ldGhlcnMuCisuVFAKKy5CIFwtTywgLS1kaGNwLW9wdGlvbj1bdGFnOjx0YWc+LFt0YWc6PHRhZz4sXV1bZW5jYXA6PG9wdD4sXVt2aS1lbmNhcDo8ZW50ZXJwcmlzZT4sXVt2ZW5kb3I6Wzx2ZW5kb3ItY2xhc3M+XSxdWzxvcHQ+fG9wdGlvbjo8b3B0LW5hbWU+fG9wdGlvbjY6PG9wdD58b3B0aW9uNjo8b3B0LW5hbWU+XSxbPHZhbHVlPlssPHZhbHVlPl1dCitTcGVjaWZ5IGRpZmZlcmVudCBvciBleHRyYSBvcHRpb25zIHRvIERIQ1AgY2xpZW50cy4gQnkgZGVmYXVsdCwKK2Ruc21hc3Egc2VuZHMgc29tZSBzdGFuZGFyZCBvcHRpb25zIHRvIERIQ1AgY2xpZW50cywgdGhlIG5ldG1hc2sgYW5kCiticm9hZGNhc3QgYWRkcmVzcyBhcmUgc2V0IHRvIHRoZSBzYW1lIGFzIHRoZSBob3N0IHJ1bm5pbmcgZG5zbWFzcSwgYW5kCit0aGUgRE5TIHNlcnZlciBhbmQgZGVmYXVsdCByb3V0ZSBhcmUgc2V0IHRvIHRoZSBhZGRyZXNzIG9mIHRoZSBtYWNoaW5lCitydW5uaW5nIGRuc21hc3EuIChFcXVpdmFsZW50IHJ1bGVzIGFwcGx5IGZvciBJUHY2LikgSWYgdGhlIGRvbWFpbiBuYW1lIG9wdGlvbiBoYXMgYmVlbiBzZXQsIHRoYXQgaXMgc2VudC4KK1RoaXMgY29uZmlndXJhdGlvbiBhbGxvd3MgdGhlc2UgZGVmYXVsdHMgdG8gYmUgb3ZlcnJpZGRlbiwKK29yIG90aGVyIG9wdGlvbnMgc3BlY2lmaWVkLiBUaGUgb3B0aW9uLCB0byBiZSBzZW50IG1heSBiZSBnaXZlbiBhcyBhCitkZWNpbWFsIG51bWJlciBvciBhcyAib3B0aW9uOjxvcHRpb24tbmFtZT4iIFRoZSBvcHRpb24gbnVtYmVycyBhcmUKK3NwZWNpZmllZCBpbiBSRkMyMTMyIGFuZCBzdWJzZXF1ZW50IFJGQ3MuIFRoZSBzZXQgb2Ygb3B0aW9uLW5hbWVzCitrbm93biBieSBkbnNtYXNxIGNhbiBiZSBkaXNjb3ZlcmVkIGJ5IHJ1bm5pbmcgImRuc21hc3EgLS1oZWxwIGRoY3AiLgorRm9yIGV4YW1wbGUsIHRvIHNldCB0aGUgZGVmYXVsdCByb3V0ZSBvcHRpb24gdG8gCisxOTIuMTY4LjQuNCwgZG8gCisuQiAtLWRoY3Atb3B0aW9uPTMsMTkyLjE2OC40LjQgCitvcgorLkIgLS1kaGNwLW9wdGlvbiA9IG9wdGlvbjpyb3V0ZXIsIDE5Mi4xNjguNC40CithbmQgdG8gc2V0IHRoZSB0aW1lLXNlcnZlciBhZGRyZXNzIHRvIDE5Mi4xNjguMC40LCBkbworLkIgLS1kaGNwLW9wdGlvbiA9IDQyLDE5Mi4xNjguMC40IAorb3IgCisuQiAtLWRoY3Atb3B0aW9uID0gb3B0aW9uOm50cC1zZXJ2ZXIsIDE5Mi4xNjguMC40CitUaGUgc3BlY2lhbCBhZGRyZXNzIDAuMC4wLjAgaXMgdGFrZW4gdG8gbWVhbiAidGhlIGFkZHJlc3Mgb2YgdGhlCittYWNoaW5lIHJ1bm5pbmcgZG5zbWFzcSIuIAorCitEYXRhIHR5cGVzIGFsbG93ZWQgYXJlIGNvbW1hIHNlcGFyYXRlZAorZG90dGVkLXF1YWQgSVB2NCBhZGRyZXNzZXMsIFtdLXdyYXBwZWQgSVB2NiBhZGRyZXNzZXMsIGEgZGVjaW1hbCBudW1iZXIsIGNvbG9uLXNlcGFyYXRlZCBoZXggZGlnaXRzCithbmQgYSB0ZXh0IHN0cmluZy4gSWYgdGhlIG9wdGlvbmFsIHRhZ3MgYXJlIGdpdmVuIHRoZW4KK3RoaXMgb3B0aW9uIGlzIG9ubHkgc2VudCB3aGVuIGFsbCB0aGUgdGFncyBhcmUgbWF0Y2hlZC4KKworU3BlY2lhbCBwcm9jZXNzaW5nIGlzIGRvbmUgb24gYSB0ZXh0IGFyZ3VtZW50IGZvciBvcHRpb24gMTE5LCB0bworY29uZm9ybSB3aXRoIFJGQyAzMzk3LiBUZXh0IG9yIGRvdHRlZC1xdWFkIElQIGFkZHJlc3NlcyBhcyBhcmd1bWVudHMKK3RvIG9wdGlvbiAxMjAgYXJlIGhhbmRsZWQgYXMgcGVyIFJGQyAzMzYxLiBEb3R0ZWQtcXVhZCBJUCBhZGRyZXNzZXMgCit3aGljaCBhcmUgZm9sbG93ZWQgYnkgYSBzbGFzaCBhbmQgdGhlbiBhIG5ldG1hc2sgc2l6ZSBhcmUgZW5jb2RlZCBhcworZGVzY3JpYmVkIGluIFJGQyAzNDQyLgorCitJUHY2IG9wdGlvbnMgYXJlIHNwZWNpZmllZCB1c2luZyB0aGUgCisuQiBvcHRpb242Ogora2V5d29yZCwgZm9sbG93ZWQgYnkgdGhlIG9wdGlvbiBudW1iZXIgb3Igb3B0aW9uIG5hbWUuIFRoZSBJUHY2IG9wdGlvbgorbmFtZSBzcGFjZSBpcyBkaXNqb2ludCBmcm9tIHRoZSBJUHY0IG9wdGlvbiBuYW1lIHNwYWNlLiBJUHY2IGFkZHJlc3NlcworaW4gb3B0aW9ucyBtdXN0IGJlIGJyYWNrZXRlZCB3aXRoIHNxdWFyZSBicmFja2V0cywgZWcuIAorLkIgLS1kaGNwLW9wdGlvbj1vcHRpb242Om50cC1zZXJ2ZXIsWzEyMzQ6OjU2XQorRm9yIElQdjYsIFs6Ol0gbWVhbnMgInRoZSBnbG9iYWwgYWRkcmVzcyBvZgordGhlIG1hY2hpbmUgcnVubmluZyBkbnNtYXNxIiwgd2hpbHN0IFtmZDAwOjpdIGlzIHJlcGxhY2VkIHdpdGggdGhlCitVTEEsIGlmIGl0IGV4aXN0cywgYW5kIFtmZTgwOjpdIHdpdGggdGhlIGxpbmstbG9jYWwgYWRkcmVzcy4KKworQmUgY2FyZWZ1bDogbm8gY2hlY2tpbmcgaXMgZG9uZSB0aGF0IHRoZSBjb3JyZWN0IHR5cGUgb2YgZGF0YSBmb3IgdGhlCitvcHRpb24gbnVtYmVyIGlzIHNlbnQsIGl0IGlzIHF1aXRlIHBvc3NpYmxlIHRvCitwZXJzdWFkZSBkbnNtYXNxIHRvIGdlbmVyYXRlIGlsbGVnYWwgREhDUCBwYWNrZXRzIHdpdGggaW5qdWRpY2lvdXMgdXNlCitvZiB0aGlzIGZsYWcuIFdoZW4gdGhlIHZhbHVlIGlzIGEgZGVjaW1hbCBudW1iZXIsIGRuc21hc3EgbXVzdCBkZXRlcm1pbmUgaG93IAorbGFyZ2UgdGhlIGRhdGEgaXRlbSBpcy4gSXQgZG9lcyB0aGlzIGJ5IGV4YW1pbmluZyB0aGUgb3B0aW9uIG51bWJlciBhbmQvb3IgdGhlCit2YWx1ZSwgYnV0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IGFwcGVuZGluZyBhIHNpbmdsZSBsZXR0ZXIgZmxhZyBhcyBmb2xsb3dzOgorYiA9IG9uZSBieXRlLCBzID0gdHdvIGJ5dGVzLCBpID0gZm91ciBieXRlcy4gVGhpcyBpcyBtYWlubHkgdXNlZnVsIHdpdGggCitlbmNhcHN1bGF0ZWQgdmVuZG9yIGNsYXNzIG9wdGlvbnMgKHNlZSBiZWxvdykgd2hlcmUgZG5zbWFzcSBjYW5ub3QKK2RldGVybWluZSBkYXRhIHNpemUgZnJvbSB0aGUgIG9wdGlvbiBudW1iZXIuIE9wdGlvbiBkYXRhIHdoaWNoCitjb25zaXN0cyBzb2xlbHkgb2YgcGVyaW9kcyBhbmQgZGlnaXRzIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYnkgZG5zbWFzcQorYXMgYW4gSVAgYWRkcmVzcywgYW5kIGluc2VydGVkIGludG8gYW4gb3B0aW9uIGFzIHN1Y2guIFRvIGZvcmNlIGEKK2xpdGVyYWwgc3RyaW5nLCB1c2UgcXVvdGVzLiBGb3IgaW5zdGFuY2Ugd2hlbiB1c2luZyBvcHRpb24gNjYgdG8gc2VuZAorYSBsaXRlcmFsIElQIGFkZHJlc3MgYXMgVEZUUCBzZXJ2ZXIgbmFtZSwgaXQgaXMgbmVjZXNzYXJ5IHRvIGRvCisuQiAtLWRoY3Atb3B0aW9uPTY2LCIxLjIuMy40IgorCitFbmNhcHN1bGF0ZWQgVmVuZG9yLWNsYXNzIG9wdGlvbnMgbWF5IGFsc28gYmUgc3BlY2lmaWVkIChJUHY0IG9ubHkpIHVzaW5nCistLWRoY3Atb3B0aW9uOiBmb3IgaW5zdGFuY2UgCisuQiAtLWRoY3Atb3B0aW9uPXZlbmRvcjpQWEVDbGllbnQsMSwwLjAuMC4wIAorc2VuZHMgdGhlIGVuY2Fwc3VsYXRlZCB2ZW5kb3IKK2NsYXNzLXNwZWNpZmljIG9wdGlvbiAibWZ0cC1hZGRyZXNzPTAuMC4wLjAiIHRvIGFueSBjbGllbnQgd2hvc2UKK3ZlbmRvci1jbGFzcyBtYXRjaGVzICJQWEVDbGllbnQiLiBUaGUgdmVuZG9yLWNsYXNzIG1hdGNoaW5nIGlzCitzdWJzdHJpbmcgYmFzZWQgKHNlZSAtLWRoY3AtdmVuZG9yY2xhc3MgZm9yIGRldGFpbHMpLiBJZiBhCit2ZW5kb3ItY2xhc3Mgb3B0aW9uIChudW1iZXIgNjApIGlzIHNlbnQgYnkgZG5zbWFzcSwgdGhlbiB0aGF0IGlzIHVzZWQgCitmb3Igc2VsZWN0aW5nIGVuY2Fwc3VsYXRlZCBvcHRpb25zIGluIHByZWZlcmVuY2UgdG8gYW55IHNlbnQgYnkgdGhlCitjbGllbnQuIEl0IGlzCitwb3NzaWJsZSB0byBvbWl0IHRoZSB2ZW5kb3JjbGFzcyBjb21wbGV0ZWx5OworLkIgLS1kaGNwLW9wdGlvbj12ZW5kb3I6LDEsMC4wLjAuMAoraW4gd2hpY2ggY2FzZSB0aGUgZW5jYXBzdWxhdGVkIG9wdGlvbiBpcyBhbHdheXMgc2VudC4gCisKK09wdGlvbnMgbWF5IGJlIGVuY2Fwc3VsYXRlZCAoSVB2NCBvbmx5KSB3aXRoaW4gb3RoZXIgb3B0aW9uczogZm9yIGluc3RhbmNlCisuQiAtLWRoY3Atb3B0aW9uPWVuY2FwOjE3NSwgMTkwLCAiaXNjc2ktY2xpZW50MCIKK3dpbGwgc2VuZCBvcHRpb24gMTc1LCB3aXRoaW4gd2hpY2ggaXMgdGhlIG9wdGlvbiAxOTAuIElmIG11bHRpcGxlCitvcHRpb25zIGFyZSBnaXZlbiB3aGljaCBhcmUgZW5jYXBzdWxhdGVkIHdpdGggdGhlIHNhbWUgb3B0aW9uIG51bWJlcgordGhlbiB0aGV5IHdpbGwgYmUgY29ycmVjdGx5IGNvbWJpbmVkIGludG8gb25lIGVuY2Fwc3VsYXRlZCBvcHRpb24uCitlbmNhcDogYW5kIHZlbmRvcjogYXJlIG1heSBub3QgYm90aCBiZSBzZXQgaW4gdGhlIHNhbWUgZGhjcC1vcHRpb24uCisKK1RoZSBmaW5hbCB2YXJpYW50IG9uIGVuY2Fwc3VsYXRlZCBvcHRpb25zIGlzICJWZW5kb3ItSWRlbnRpZnlpbmcKK1ZlbmRvciBPcHRpb25zIiBhcyBzcGVjaWZpZWQgYnkgUkZDMzkyNS4gVGhlc2UgYXJlIGRlbm90ZWQgbGlrZSB0aGlzOiAKKy5CIC0tZGhjcC1vcHRpb249dmktZW5jYXA6MiwgMTAsICJ0ZXh0IgorVGhlIG51bWJlciBpbiB0aGUgdmktZW5jYXA6IHNlY3Rpb24gaXMgdGhlIElBTkEgZW50ZXJwcmlzZSBudW1iZXIKK3VzZWQgdG8gaWRlbnRpZnkgdGhpcyBvcHRpb24uIFRoaXMgZm9ybSBvZiBlbmNhcHN1bGF0aW9uIGlzIHN1cHBvcnRlZAoraW4gSVB2Ni4KKyAKK1RoZSBhZGRyZXNzIDAuMC4wLjAgaXMgbm90IHRyZWF0ZWQgc3BlY2lhbGx5IGluCitlbmNhcHN1bGF0ZWQgb3B0aW9ucy4KKy5UUAorLkIgLS1kaGNwLW9wdGlvbi1mb3JjZT1bdGFnOjx0YWc+LFt0YWc6PHRhZz4sXV1bZW5jYXA6PG9wdD4sXVt2aS1lbmNhcDo8ZW50ZXJwcmlzZT4sXVt2ZW5kb3I6Wzx2ZW5kb3ItY2xhc3M+XSxdPG9wdD4sWzx2YWx1ZT5bLDx2YWx1ZT5dXQorVGhpcyB3b3JrcyBpbiBleGFjdGx5IHRoZSBzYW1lIHdheSBhcworLkIgLS1kaGNwLW9wdGlvbgorZXhjZXB0IHRoYXQgdGhlIG9wdGlvbiB3aWxsIGFsd2F5cyBiZSBzZW50LCBldmVuIGlmIHRoZSBjbGllbnQgZG9lcworbm90IGFzayBmb3IgaXQgaW4gdGhlIHBhcmFtZXRlciByZXF1ZXN0IGxpc3QuIFRoaXMgaXMgc29tZXRpbWVzCituZWVkZWQsIGZvciBleGFtcGxlIHdoZW4gc2VuZGluZyBvcHRpb25zIHRvIFBYRUxpbnV4LgorLlRQCisuQiAtLWRoY3Atbm8tb3ZlcnJpZGUKKyhJUHY0IG9ubHkpIERpc2FibGUgcmUtdXNlIG9mIHRoZSBESENQIHNlcnZlcm5hbWUgYW5kIGZpbGVuYW1lIGZpZWxkcyBhcyBleHRyYQorb3B0aW9uIHNwYWNlLiBJZiBpdCBjYW4sIGRuc21hc3EgbW92ZXMgdGhlIGJvb3Qgc2VydmVyIGFuZCBmaWxlbmFtZQoraW5mb3JtYXRpb24gKGZyb20gZGhjcC1ib290KSBvdXQgb2YgdGhlaXIgZGVkaWNhdGVkIGZpZWxkcyBpbnRvCitESENQIG9wdGlvbnMuIFRoaXMgbWFrZSBleHRyYSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIERIQ1AgcGFja2V0IGZvcgorb3B0aW9ucyBidXQgY2FuLCByYXJlbHksIGNvbmZ1c2Ugb2xkIG9yIGJyb2tlbiBjbGllbnRzLiBUaGlzIGZsYWcKK2ZvcmNlcyAic2ltcGxlIGFuZCBzYWZlIiBiZWhhdmlvdXIgdG8gYXZvaWQgcHJvYmxlbXMgaW4gc3VjaCBhIGNhc2UuCisuVFAKKy5CIC0tZGhjcC1yZWxheT08bG9jYWwgYWRkcmVzcz4sPHNlcnZlciBhZGRyZXNzPlssPGludGVyZmFjZV0KK0NvbmZpZ3VyZSBkbnNtYXNxIHRvIGRvIERIQ1AgcmVsYXkuIFRoZSBsb2NhbCBhZGRyZXNzIGlzIGFuIGFkZHJlc3MKK2FsbG9jYXRlZCB0byBhbiBpbnRlcmZhY2Ugb24gdGhlIGhvc3QgcnVubmluZyBkbnNtYXNxLiBBbGwgREhDUAorcmVxdWVzdHMgYXJyaXZpbmcgb24gdGhhdCBpbnRlcmZhY2Ugd2lsbCB3ZSByZWxheWVkIHRvIGEgcmVtb3RlIERIQ1AKK3NlcnZlciBhdCB0aGUgc2VydmVyIGFkZHJlc3MuIEl0IGlzIHBvc3NpYmxlIHRvIHJlbGF5IGZyb20gYSBzaW5nbGUgbG9jYWwKK2FkZHJlc3MgdG8gbXVsdGlwbGUgcmVtb3RlIHNlcnZlcnMgYnkgdXNpbmcgbXVsdGlwbGUgZGhjcC1yZWxheQorY29uZmlncyB3aXRoIHRoZSBzYW1lIGxvY2FsIGFkZHJlc3MgYW5kIGRpZmZlcmVudCBzZXJ2ZXIKK2FkZHJlc3Nlcy4gQSBzZXJ2ZXIgYWRkcmVzcyBtdXN0IGJlIGFuIElQIGxpdGVyYWwgYWRkcmVzcywgbm90IGEKK2RvbWFpbiBuYW1lLiBJbiB0aGUgY2FzZSBvZiBESENQdjYsIHRoZSBzZXJ2ZXIgYWRkcmVzcyBtYXkgYmUgdGhlCitBTExfU0VSVkVSUyBtdWx0aWNhc3QgYWRkcmVzcywgZmYwNTo6MTozLiBJbiB0aGlzIGNhc2UgdGhlIGludGVyZmFjZQorbXVzdCBiZSBnaXZlbiwgbm90IGJlIHdpbGRjYXJkLCBhbmQgaXMgdXNlZCB0byBkaXJlY3QgdGhlIG11bHRpY2FzdCB0byB0aGUKK2NvcnJlY3QgaW50ZXJmYWNlIHRvIHJlYWNoIHRoZSBESENQIHNlcnZlci4gCisKK0FjY2VzcyBjb250cm9sIGZvciBESENQIGNsaWVudHMgaGFzIHRoZSBzYW1lIHJ1bGVzIGFzIGZvciB0aGUgREhDUAorc2VydmVyLCBzZWUgLS1pbnRlcmZhY2UsIC0tZXhjZXB0LWludGVyZmFjZSwgZXRjLiBUaGUgb3B0aW9uYWwKK2ludGVyZmFjZSBuYW1lIGluIHRoZSBkaGNwLXJlbGF5IGNvbmZpZyBoYXMgYSBkaWZmZXJlbnQgZnVuY3Rpb246IGl0Citjb250cm9scyBvbiB3aGljaCBpbnRlcmZhY2UgREhDUCByZXBsaWVzIGZyb20gdGhlIHNlcnZlciB3aWxsIGJlCithY2NlcHRlZC4gVGhpcyBpcyBpbnRlbmRlZCBmb3IgY29uZmlndXJhdGlvbnMgd2hpY2ggaGF2ZSB0aHJlZQoraW50ZXJmYWNlczogb25lIGJlaW5nIHJlbGF5ZWQgZnJvbSwgYSBzZWNvbmQgY29ubmVjdGluZyB0aGUgREhDUAorc2VydmVyLCBhbmQgYSB0aGlyZCB1bnRydXN0ZWQgbmV0d29yaywgdHlwaWNhbGx5IHRoZSB3aWRlcgoraW50ZXJuZXQuIEl0IGF2b2lkcyB0aGUgcG9zc2liaWxpdHkgb2Ygc3Bvb2YgcmVwbGllcyBhcnJpdmluZyB2aWEgdGhpcwordGhpcmQgaW50ZXJmYWNlLgorCitJdCBpcyBhbGxvd2VkIHRvIGhhdmUgZG5zbWFzcSBhY3QgYXMgYSBESENQIHNlcnZlciBvbiBvbmUgc2V0IG9mCitpbnRlcmZhY2VzIGFuZCByZWxheSBmcm9tIGEgZGlzam9pbnQgc2V0IG9mIGludGVyZmFjZXMuIE5vdGUgdGhhdAord2hpbHN0IGl0IGlzIHF1aXRlIHBvc3NpYmxlIHRvIHdyaXRlIGNvbmZpZ3VyYXRpb25zIHdoaWNoIGFwcGVhciB0bworYWN0IGFzIGEgc2VydmVyIGFuZCBhIHJlbGF5IG9uIHRoZSBzYW1lIGludGVyZmFjZSwgdGhpcyBpcyBub3QKK3N1cHBvcnRlZDogdGhlIHJlbGF5IGZ1bmN0aW9uIHdpbGwgdGFrZSBwcmVjZWRlbmNlLgorCitCb3RoIERIQ1B2NCBhbmQgREhDUHY2IHJlbGF5IGlzIHN1cHBvcnRlZC4gSXQncyBub3QgcG9zc2libGUgdG8gcmVsYXkKK0RIQ1B2NCB0byBhIERIQ1B2NiBzZXJ2ZXIgb3IgdmljZS12ZXJzYS4KKy5UUAorLkIgXC1VLCAtLWRoY3AtdmVuZG9yY2xhc3M9c2V0Ojx0YWc+LFtlbnRlcnByaXNlOjxJQU5BLWVudGVycHJpc2UgbnVtYmVyPixdPHZlbmRvci1jbGFzcz4KK01hcCBmcm9tIGEgdmVuZG9yLWNsYXNzIHN0cmluZyB0byBhIHRhZy4gTW9zdCBESENQIGNsaWVudHMgcHJvdmlkZSBhIAorInZlbmRvciBjbGFzcyIgd2hpY2ggcmVwcmVzZW50cywgaW4gc29tZSBzZW5zZSwgdGhlIHR5cGUgb2YgaG9zdC4gVGhpcyBvcHRpb24gCittYXBzIHZlbmRvciBjbGFzc2VzIHRvIHRhZ3MsIHNvIHRoYXQgREhDUCBvcHRpb25zIG1heSBiZSBzZWxlY3RpdmVseSBkZWxpdmVyZWQKK3RvIGRpZmZlcmVudCBjbGFzc2VzIG9mIGhvc3RzLiBGb3IgZXhhbXBsZSAKKy5CIGRoY3AtdmVuZG9yY2xhc3M9c2V0OnByaW50ZXJzLEhld2xldHQtUGFja2FyZCBKZXREaXJlY3QKK3dpbGwgYWxsb3cgb3B0aW9ucyB0byBiZSBzZXQgb25seSBmb3IgSFAgcHJpbnRlcnMgbGlrZSBzbzoKKy5CIC0tZGhjcC1vcHRpb249dGFnOnByaW50ZXJzLDMsMTkyLjE2OC40LjQgCitUaGUgdmVuZG9yLWNsYXNzIHN0cmluZyBpcworc3Vic3RyaW5nIG1hdGNoZWQgYWdhaW5zdCB0aGUgdmVuZG9yLWNsYXNzIHN1cHBsaWVkIGJ5IHRoZSBjbGllbnQsIHRvCithbGxvdyBmdXp6eSBtYXRjaGluZy4gVGhlIHNldDogcHJlZml4IGlzIG9wdGlvbmFsIGJ1dCBhbGxvd2VkIGZvcgorY29uc2lzdGVuY3kuIAorCitOb3RlIHRoYXQgaW4gSVB2NiBvbmx5LCB2ZW5kb3JjbGFzc2VzIGFyZSBuYW1lc3BhY2VkIHdpdGggYW4gCitJQU5BLWFsbG9jYXRlZCBlbnRlcnByaXNlIG51bWJlci4gVGhpcyBpcyBnaXZlbiB3aXRoIGVudGVycHJpc2U6CitrZXl3b3JkIGFuZCBzcGVjaWZpZXMgdGhhdCBvbmx5IHZlbmRvcmNsYXNzZXMgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZAorbnVtYmVyIHNob3VsZCBiZSBzZWFyY2hlZC4KKy5UUAorLkIgXC1qLCAtLWRoY3AtdXNlcmNsYXNzPXNldDo8dGFnPiw8dXNlci1jbGFzcz4KK01hcCBmcm9tIGEgdXNlci1jbGFzcyBzdHJpbmcgdG8gYSB0YWcgKHdpdGggc3Vic3RyaW5nCittYXRjaGluZywgbGlrZSB2ZW5kb3IgY2xhc3NlcykuIE1vc3QgREhDUCBjbGllbnRzIHByb3ZpZGUgYSAKKyJ1c2VyIGNsYXNzIiB3aGljaCBpcyBjb25maWd1cmFibGUuIFRoaXMgb3B0aW9uCittYXBzIHVzZXIgY2xhc3NlcyB0byB0YWdzLCBzbyB0aGF0IERIQ1Agb3B0aW9ucyBtYXkgYmUgc2VsZWN0aXZlbHkgZGVsaXZlcmVkCit0byBkaWZmZXJlbnQgY2xhc3NlcyBvZiBob3N0cy4gSXQgaXMgcG9zc2libGUsIGZvciBpbnN0YW5jZSB0byB1c2UKK3RoaXMgdG8gc2V0IGEgZGlmZmVyZW50IHByaW50ZXIgc2VydmVyIGZvciBob3N0cyBpbiB0aGUgY2xhc3MKKyJhY2NvdW50cyIgdGhhbiBmb3IgaG9zdHMgaW4gdGhlIGNsYXNzICJlbmdpbmVlcmluZyIuCisuVFAKKy5CIFwtNCwgLS1kaGNwLW1hYz1zZXQ6PHRhZz4sPE1BQyBhZGRyZXNzPgorTWFwIGZyb20gYSBNQUMgYWRkcmVzcyB0byBhIHRhZy4gVGhlIE1BQyBhZGRyZXNzIG1heSBpbmNsdWRlCit3aWxkY2FyZHMuIEZvciBleGFtcGxlCisuQiAtLWRoY3AtbWFjPXNldDozY29tLDAxOjM0OjIzOio6KjoqCit3aWxsIHNldCB0aGUgdGFnICIzY29tIiBmb3IgYW55IGhvc3Qgd2hvc2UgTUFDIGFkZHJlc3MgbWF0Y2hlcyB0aGUgcGF0dGVybi4KKy5UUAorLkIgLS1kaGNwLWNpcmN1aXRpZD1zZXQ6PHRhZz4sPGNpcmN1aXQtaWQ+LCAtLWRoY3AtcmVtb3RlaWQ9c2V0Ojx0YWc+LDxyZW1vdGUtaWQ+CitNYXAgZnJvbSBSRkMzMDQ2IHJlbGF5IGFnZW50IG9wdGlvbnMgdG8gdGFncy4gVGhpcyBkYXRhIG1heQorYmUgcHJvdmlkZWQgYnkgREhDUCByZWxheSBhZ2VudHMuIFRoZSBjaXJjdWl0LWlkIG9yIHJlbW90ZS1pZCBpcworbm9ybWFsbHkgZ2l2ZW4gYXMgY29sb24tc2VwYXJhdGVkIGhleCwgYnV0IGlzIGFsc28gYWxsb3dlZCB0byBiZSBhCitzaW1wbGUgc3RyaW5nLiBJZiBhbiBleGFjdCBtYXRjaCBpcyBhY2hpZXZlZCBiZXR3ZWVuIHRoZSBjaXJjdWl0IG9yCithZ2VudCBJRCBhbmQgb25lIHByb3ZpZGVkIGJ5IGEgcmVsYXkgYWdlbnQsIHRoZSB0YWcgaXMgc2V0LiAKKworLkIgZGhjcC1yZW1vdGVpZAorKGJ1dCBub3QgZGhjcC1jaXJjdWl0aWQpIGlzIHN1cHBvcnRlZCBpbiBJUHY2LiAKKy5UUAorLkIgLS1kaGNwLXN1YnNjcmlkPXNldDo8dGFnPiw8c3Vic2NyaWJlci1pZD4KKyhJUHY0IGFuZCBJUHY2KSBNYXAgZnJvbSBSRkMzOTkzIHN1YnNjcmliZXItaWQgcmVsYXkgYWdlbnQgb3B0aW9ucyB0byB0YWdzLgorLlRQCisuQiAtLWRoY3AtcHJveHlbPTxpcCBhZGRyPl0uLi4uLi4KKyhJUHY0IG9ubHkpIEEgbm9ybWFsIERIQ1AgcmVsYXkgYWdlbnQgaXMgb25seSB1c2VkIHRvIGZvcndhcmQgdGhlIGluaXRpYWwgcGFydHMgb2YKK2EgREhDUCBpbnRlcmFjdGlvbiB0byB0aGUgREhDUCBzZXJ2ZXIuIE9uY2UgYSBjbGllbnQgaXMgY29uZmlndXJlZCwgaXQKK2NvbW11bmljYXRlcyBkaXJlY3RseSB3aXRoIHRoZSBzZXJ2ZXIuIFRoaXMgaXMgdW5kZXNpcmFibGUgaWYgdGhlCityZWxheSBhZ2VudCBpcyBhZGRpbmcgZXh0cmEgaW5mb3JtYXRpb24gdG8gdGhlIERIQ1AgcGFja2V0cywgc3VjaCBhcwordGhhdCB1c2VkIGJ5CisuQiBkaGNwLWNpcmN1aXRpZAorYW5kCisuQiBkaGNwLXJlbW90ZWlkLgorQSBmdWxsIHJlbGF5IGltcGxlbWVudGF0aW9uIGNhbiB1c2UgdGhlIFJGQyA1MTA3IHNlcnZlcmlkLW92ZXJyaWRlCitvcHRpb24gdG8gZm9yY2UgdGhlIERIQ1Agc2VydmVyIHRvIHVzZSB0aGUgcmVsYXkgYXMgYSBmdWxsIHByb3h5LCB3aXRoIGFsbAorcGFja2V0cyBwYXNzaW5nIHRocm91Z2ggaXQuIFRoaXMgZmxhZyBwcm92aWRlcyBhbiBhbHRlcm5hdGl2ZSBtZXRob2QKK29mIGRvaW5nIHRoZSBzYW1lIHRoaW5nLCBmb3IgcmVsYXlzIHdoaWNoIGRvbid0IHN1cHBvcnQgUkZDCis1MTA3LiBHaXZlbiBhbG9uZSwgaXQgbWFuaXB1bGF0ZXMgdGhlIHNlcnZlci1pZCBmb3IgYWxsIGludGVyYWN0aW9ucwordmlhIHJlbGF5cy4gSWYgYSBsaXN0IG9mIElQIGFkZHJlc3NlcyBpcyBnaXZlbiwgb25seSBpbnRlcmFjdGlvbnMgdmlhCityZWxheXMgYXQgdGhvc2UgYWRkcmVzc2VzIGFyZSBhZmZlY3RlZC4KKy5UUAorLkIgLS1kaGNwLW1hdGNoPXNldDo8dGFnPiw8b3B0aW9uIG51bWJlcj58b3B0aW9uOjxvcHRpb24gbmFtZT58dmktZW5jYXA6PGVudGVycHJpc2U+Wyw8dmFsdWU+XQorV2l0aG91dCBhIHZhbHVlLCBzZXQgdGhlIHRhZyBpZiB0aGUgY2xpZW50IHNlbmRzIGEgREhDUAorb3B0aW9uIG9mIHRoZSBnaXZlbiBudW1iZXIgb3IgbmFtZS4gV2hlbiBhIHZhbHVlIGlzIGdpdmVuLCBzZXQgdGhlIHRhZyBvbmx5IGlmCit0aGUgb3B0aW9uIGlzIHNlbnQgYW5kIG1hdGNoZXMgdGhlIHZhbHVlLiBUaGUgdmFsdWUgbWF5IGJlIG9mIHRoZSBmb3JtCisiMDE6ZmY6KjowMiIgaW4gd2hpY2ggY2FzZSB0aGUgdmFsdWUgbXVzdCBtYXRjaCAoYXBhcnQgZnJvbSB3aWxkY2FyZHMpCitidXQgdGhlIG9wdGlvbiBzZW50IG1heSBoYXZlIHVubWF0Y2hlZCBkYXRhIHBhc3QgdGhlIGVuZCBvZiB0aGUKK3ZhbHVlLiBUaGUgdmFsdWUgbWF5IGFsc28gYmUgb2YgdGhlIHNhbWUgZm9ybSBhcyBpbiAKKy5CIGRoY3Atb3B0aW9uCitpbiB3aGljaCBjYXNlIHRoZSBvcHRpb24gc2VudCBpcyB0cmVhdGVkIGFzIGFuIGFycmF5LCBhbmQgb25lIGVsZW1lbnQKK211c3QgbWF0Y2gsIHNvCisKKy0tZGhjcC1tYXRjaD1zZXQ6ZWZpLWlhMzIsb3B0aW9uOmNsaWVudC1hcmNoLDYKKword2lsbCBzZXQgdGhlIHRhZyAiZWZpLWlhMzIiIGlmIHRoZSB0aGUgbnVtYmVyIDYgYXBwZWFycyBpbiB0aGUgbGlzdCBvZgorYXJjaGl0ZWN0dXJlcyBzZW50IGJ5IHRoZSBjbGllbnQgaW4gb3B0aW9uIDkzLiAoU2VlIFJGQyA0NTc4IGZvcgorZGV0YWlscy4pICBJZiB0aGUgdmFsdWUgaXMgYSBzdHJpbmcsIHN1YnN0cmluZyBtYXRjaGluZyBpcyB1c2VkLgorCitUaGUgc3BlY2lhbCBmb3JtIHdpdGggdmktZW5jYXA6PGVudGVycHJpc2UgbnVtYmVyPiBtYXRjaGVzIGFnYWluc3QKK3ZlbmRvci1pZGVudGlmeWluZyB2ZW5kb3IgY2xhc3NlcyBmb3IgdGhlIHNwZWNpZmllZCBlbnRlcnByaXNlLiBQbGVhc2UKK3NlZSBSRkMgMzkyNSBmb3IgbW9yZSBkZXRhaWxzIG9mIHRoZXNlIHJhcmUgYW5kIGludGVyZXN0aW5nIGJlYXN0cy4KKy5UUAorLkIgLS10YWctaWY9c2V0Ojx0YWc+WyxzZXQ6PHRhZz5bLHRhZzo8dGFnPlssdGFnOjx0YWc+XV1dCitQZXJmb3JtIGJvb2xlYW4gb3BlcmF0aW9ucyBvbiB0YWdzLiBBbnkgdGFnIGFwcGVhcmluZyBhcyBzZXQ6PHRhZz4gaXMgc2V0IGlmCithbGwgdGhlIHRhZ3Mgd2hpY2ggYXBwZWFyIGFzIHRhZzo8dGFnPiBhcmUgc2V0LCAob3IgdW5zZXQgd2hlbiB0YWc6ITx0YWc+IGlzIHVzZWQpCitJZiBubyB0YWc6PHRhZz4gYXBwZWFycyBzZXQ6PHRhZz4gdGFncyBhcmUgc2V0IHVuY29uZGl0aW9uYWxseS4KK0FueSBudW1iZXIgb2Ygc2V0OiBhbmQgdGFnOiBmb3JtcyBtYXkgYXBwZWFyLCBpbiBhbnkgb3JkZXIuIAorVGFnLWlmIGxpbmVzIGFyZXMgZXhlY3V0ZWQgaW4gb3JkZXIsIHNvIGlmIHRoZSB0YWcgaW4gdGFnOjx0YWc+IGlzIGEKK3RhZyBzZXQgYnkgYW5vdGhlcgorLkIgdGFnLWlmLAordGhlIGxpbmUgd2hpY2ggc2V0cyB0aGUgdGFnIG11c3QgcHJlY2VkZSB0aGUgb25lIHdoaWNoIHRlc3RzIGl0LgorLlRQCisuQiBcLUosIC0tZGhjcC1pZ25vcmU9dGFnOjx0YWc+Wyx0YWc6PHRhZz5dCitXaGVuIGFsbCB0aGUgZ2l2ZW4gdGFncyBhcHBlYXIgaW4gdGhlIHRhZyBzZXQgaWdub3JlIHRoZSBob3N0IGFuZCBkbworbm90IGFsbG9jYXRlIGl0IGEgREhDUCBsZWFzZS4KKy5UUAorLkIgLS1kaGNwLWlnbm9yZS1uYW1lc1s9dGFnOjx0YWc+Wyx0YWc6PHRhZz5dXQorV2hlbiBhbGwgdGhlIGdpdmVuIHRhZ3MgYXBwZWFyIGluIHRoZSB0YWcgc2V0LCBpZ25vcmUgYW55IGhvc3RuYW1lCitwcm92aWRlZCBieSB0aGUgaG9zdC4gTm90ZSB0aGF0LCB1bmxpa2UgZGhjcC1pZ25vcmUsIGl0IGlzIHBlcm1pc3NpYmxlCit0byBzdXBwbHkgbm8gdGFncywgaW4gd2hpY2ggY2FzZSBESENQLWNsaWVudCBzdXBwbGllZCBob3N0bmFtZXMKK2FyZSBhbHdheXMgaWdub3JlZCwgYW5kIERIQ1AgaG9zdHMgYXJlIGFkZGVkIHRvIHRoZSBETlMgdXNpbmcgb25seQorZGhjcC1ob3N0IGNvbmZpZ3VyYXRpb24gaW4gZG5zbWFzcSBhbmQgdGhlIGNvbnRlbnRzIG9mIC9ldGMvaG9zdHMgYW5kCisvZXRjL2V0aGVycy4KKy5UUAorLkIgLS1kaGNwLWdlbmVyYXRlLW5hbWVzPXRhZzo8dGFnPlssdGFnOjx0YWc+XQorKElQdjQgb25seSkgR2VuZXJhdGUgYSBuYW1lIGZvciBESENQIGNsaWVudHMgd2hpY2ggZG8gbm90IG90aGVyd2lzZSBoYXZlIG9uZSwKK3VzaW5nIHRoZSBNQUMgYWRkcmVzcyBleHByZXNzZWQgaW4gaGV4LCBzZXBhcmF0ZWQgYnkgZGFzaGVzLiBOb3RlIHRoYXQKK2lmIGEgaG9zdCBwcm92aWRlcyBhIG5hbWUsIGl0IHdpbGwgYmUgdXNlZCBieSBwcmVmZXJlbmNlIHRvIHRoaXMsCit1bmxlc3MgCisuQiAtLWRoY3AtaWdub3JlLW5hbWVzIAoraXMgc2V0LgorLlRQCisuQiAtLWRoY3AtYnJvYWRjYXN0Wz10YWc6PHRhZz5bLHRhZzo8dGFnPl1dCisoSVB2NCBvbmx5KSBXaGVuIGFsbCB0aGUgZ2l2ZW4gdGFncyBhcHBlYXIgaW4gdGhlIHRhZyBzZXQsIGFsd2F5cyB1c2UgYnJvYWRjYXN0IHRvCitjb21tdW5pY2F0ZSB3aXRoIHRoZSBob3N0IHdoZW4gaXQgaXMgdW5jb25maWd1cmVkLiBJdCBpcyBwZXJtaXNzaWJsZQordG8gc3VwcGx5IG5vIHRhZ3MsIGluIHdoaWNoIGNhc2UgdGhpcyBpcyB1bmNvbmRpdGlvbmFsLiBNb3N0IERIQ1AgY2xpZW50cyB3aGljaAorbmVlZCBicm9hZGNhc3QgcmVwbGllcyBzZXQgYSBmbGFnIGluIHRoZWlyIHJlcXVlc3RzIHNvIHRoYXQgdGhpcworaGFwcGVucyBhdXRvbWF0aWNhbGx5LCBzb21lIG9sZCBCT09UUCBjbGllbnRzIGRvIG5vdC4KKy5UUAorLkIgXC1NLCAtLWRoY3AtYm9vdD1bdGFnOjx0YWc+LF08ZmlsZW5hbWU+LFs8c2VydmVybmFtZT5bLDxzZXJ2ZXIgYWRkcmVzcz58PHRmdHBfc2VydmVybmFtZT5dXQorKElQdjQgb25seSkgU2V0IEJPT1RQIG9wdGlvbnMgdG8gYmUgcmV0dXJuZWQgYnkgdGhlIERIQ1Agc2VydmVyLiBTZXJ2ZXIgbmFtZSBhbmQKK2FkZHJlc3MgYXJlIG9wdGlvbmFsOiBpZiBub3QgcHJvdmlkZWQsIHRoZSBuYW1lIGlzIGxlZnQgZW1wdHksIGFuZCB0aGUKK2FkZHJlc3Mgc2V0IHRvIHRoZSBhZGRyZXNzIG9mIHRoZSBtYWNoaW5lIHJ1bm5pbmcgZG5zbWFzcS4gSWYgZG5zbWFzcQoraXMgcHJvdmlkaW5nIGEgVEZUUCBzZXJ2aWNlIChzZWUgCisuQiAtLWVuYWJsZS10ZnRwCispIHRoZW4gb25seSB0aGUgZmlsZW5hbWUgaXMgcmVxdWlyZWQgaGVyZSB0byBlbmFibGUgbmV0d29yayBib290aW5nLgorSWYgdGhlIG9wdGlvbmFsIHRhZyhzKSBhcmUgZ2l2ZW4sCit0aGV5IG11c3QgbWF0Y2ggZm9yIHRoaXMgY29uZmlndXJhdGlvbiB0byBiZSBzZW50LiAKK0luc3RlYWQgb2YgYW4gSVAgYWRkcmVzcywgdGhlIFRGVFAgc2VydmVyIGFkZHJlc3MgY2FuIGJlIGdpdmVuIGFzIGEgZG9tYWluCituYW1lIHdoaWNoIGlzIGxvb2tlZCB1cCBpbiAvZXRjL2hvc3RzLiBUaGlzIG5hbWUgY2FuIGJlIGFzc29jaWF0ZWQgaW4KKy9ldGMvaG9zdHMgd2l0aCBtdWx0aXBsZSBJUCBhZGRyZXNzZXMsIHdoaWNoIGFyZSB1c2VkIHJvdW5kLXJvYmluLgorVGhpcyBmYWNpbGl0eSBjYW4gYmUgdXNlZCB0byBsb2FkIGJhbGFuY2UgdGhlIHRmdHAgbG9hZCBhbW9uZyBhIHNldCBvZiBzZXJ2ZXJzLgorLlRQCisuQiAtLWRoY3Atc2VxdWVudGlhbC1pcAorRG5zbWFzcSBpcyBkZXNpZ25lZCB0byBjaG9vc2UgSVAgYWRkcmVzc2VzIGZvciBESENQIGNsaWVudHMgdXNpbmcgYQoraGFzaCBvZiB0aGUgY2xpZW50J3MgTUFDIGFkZHJlc3MuIFRoaXMgbm9ybWFsbHkgYWxsb3dzIGEgY2xpZW50J3MKK2FkZHJlc3MgdG8gcmVtYWluIHN0YWJsZSBsb25nLXRlcm0sIGV2ZW4gaWYgdGhlIGNsaWVudCAgc29tZXRpbWVzIGFsbG93cyBpdHMgREhDUAorbGVhc2UgdG8gZXhwaXJlLiBJbiB0aGlzIGRlZmF1bHQgbW9kZSBJUCBhZGRyZXNzZXMgYXJlIGRpc3RyaWJ1dGVkCitwc2V1ZG8tcmFuZG9tbHkgb3ZlciB0aGUgZW50aXJlIGF2YWlsYWJsZSBhZGRyZXNzIHJhbmdlLiBUaGVyZSBhcmUKK3NvbWV0aW1lcyBjaXJjdW1zdGFuY2VzICh0eXBpY2FsbHkgc2VydmVyIGRlcGxveW1lbnQpIHdoZXJlIGl0IGlzIG1vcmUKK2NvbnZlbmllbnQgdG8gaGF2ZSBJUAorYWRkcmVzc2VzIGFsbG9jYXRlZCBzZXF1ZW50aWFsbHksIHN0YXJ0aW5nIGZyb20gdGhlIGxvd2VzdCBhdmFpbGFibGUKK2FkZHJlc3MsIGFuZCBzZXR0aW5nIHRoaXMgZmxhZyBlbmFibGVzIHRoaXMgbW9kZS4gTm90ZSB0aGF0IGluIHRoZQorc2VxdWVudGlhbCBtb2RlLCBjbGllbnRzIHdoaWNoIGFsbG93IGEgbGVhc2UgdG8gZXhwaXJlIGFyZSBtdWNoIG1vcmUKK2xpa2VseSB0byBtb3ZlIElQIGFkZHJlc3M7IGZvciB0aGlzIHJlYXNvbiBpdCBzaG91bGQgbm90IGJlIGdlbmVyYWxseSB1c2VkLgorLlRQCisuQiAtLXB4ZS1zZXJ2aWNlPVt0YWc6PHRhZz4sXTxDU0E+LDxtZW51IHRleHQ+Wyw8YmFzZW5hbWU+fDxib290c2VydmljZXR5cGU+XVssPHNlcnZlciBhZGRyZXNzPnw8c2VydmVyX25hbWU+XQorTW9zdCB1c2VzIG9mIFBYRSBib290LVJPTVMgc2ltcGx5IGFsbG93IHRoZSBQWEUKK3N5c3RlbSB0byBvYnRhaW4gYW4gSVAgYWRkcmVzcyBhbmQgdGhlbiBkb3dubG9hZCB0aGUgZmlsZSBzcGVjaWZpZWQgYnkKKy5CIGRoY3AtYm9vdAorYW5kIGV4ZWN1dGUgaXQuIEhvd2V2ZXIgdGhlIFBYRSBzeXN0ZW0gaXMgY2FwYWJsZSBvZiBtb3JlIGNvbXBsZXgKK2Z1bmN0aW9ucyB3aGVuIHN1cHBvcnRlZCBieSBhIHN1aXRhYmxlIERIQ1Agc2VydmVyLgorCitUaGlzIHNwZWNpZmllcyBhIGJvb3Qgb3B0aW9uIHdoaWNoIG1heSBhcHBlYXIgaW4gYSBQWEUgYm9vdCBtZW51LiA8Q1NBPiBpcworY2xpZW50IHN5c3RlbSB0eXBlLCBvbmx5IHNlcnZpY2VzIG9mIHRoZSBjb3JyZWN0IHR5cGUgd2lsbCBhcHBlYXIgaW4gYQorbWVudS4gVGhlIGtub3duIHR5cGVzIGFyZSB4ODZQQywgUEM5OCwgSUE2NF9FRkksIEFscGhhLCBBcmNfeDg2LAorSW50ZWxfTGVhbl9DbGllbnQsIElBMzJfRUZJLCBCQ19FRkksIFhzY2FsZV9FRkkgYW5kIFg4Ni02NF9FRkk7IGFuCitpbnRlZ2VyIG1heSBiZSB1c2VkIGZvciBvdGhlciB0eXBlcy4gVGhlCitwYXJhbWV0ZXIgYWZ0ZXIgdGhlIG1lbnUgdGV4dCBtYXkgYmUgYSBmaWxlIG5hbWUsIGluIHdoaWNoIGNhc2UgZG5zbWFzcSBhY3RzIGFzIGEKK2Jvb3Qgc2VydmVyIGFuZCBkaXJlY3RzIHRoZSBQWEUgY2xpZW50IHRvIGRvd25sb2FkIHRoZSBmaWxlIGJ5IFRGVFAsCitlaXRoZXIgZnJvbSBpdHNlbGYgKAorLkIgZW5hYmxlLXRmdHAgCittdXN0IGJlIHNldCBmb3IgdGhpcyB0byB3b3JrKSBvciBhbm90aGVyIFRGVFAgc2VydmVyIGlmIHRoZSBmaW5hbCBzZXJ2ZXIKK2FkZHJlc3MvbmFtZSBpcyBnaXZlbi4KK05vdGUgdGhhdCB0aGUgImxheWVyIgorc3VmZml4IChub3JtYWxseSAiLjAiKSBpcyBzdXBwbGllZCBieSBQWEUsIGFuZCBzaG91bGQgbm90IGJlIGFkZGVkIHRvCit0aGUgYmFzZW5hbWUuIElmIGFuIGludGVnZXIgYm9vdCBzZXJ2aWNlIHR5cGUsIHJhdGhlciB0aGFuIGEgYmFzZW5hbWUKK2lzIGdpdmVuLCB0aGVuIHRoZSBQWEUgY2xpZW50IHdpbGwgc2VhcmNoIGZvciBhCitzdWl0YWJsZSBib290IHNlcnZpY2UgZm9yIHRoYXQgdHlwZSBvbiB0aGUgbmV0d29yay4gVGhpcyBzZWFyY2ggbWF5IGJlIGRvbmUKK2J5IGJyb2FkY2FzdCwgb3IgZGlyZWN0IHRvIGEgc2VydmVyIGlmIGl0cyBJUCBhZGRyZXNzL25hbWUgaXMgcHJvdmlkZWQuICAKK0lmIG5vIGJvb3Qgc2VydmljZSB0eXBlIG9yIGZpbGVuYW1lIGlzIHByb3ZpZGVkIChvciBhIGJvb3Qgc2VydmljZSB0eXBlIG9mIDAgaXMgc3BlY2lmaWVkKQordGhlbiB0aGUgbWVudSBlbnRyeSB3aWxsIGFib3J0IHRoZSBuZXQgYm9vdCBwcm9jZWR1cmUgYW5kCitjb250aW51ZSBib290aW5nIGZyb20gbG9jYWwgbWVkaWEuIFRoZSBzZXJ2ZXIgYWRkcmVzcyBjYW4gYmUgZ2l2ZW4gYXMgYSBkb21haW4KK25hbWUgd2hpY2ggaXMgbG9va2VkIHVwIGluIC9ldGMvaG9zdHMuIFRoaXMgbmFtZSBjYW4gYmUgYXNzb2NpYXRlZCBpbgorL2V0Yy9ob3N0cyB3aXRoIG11bHRpcGxlIElQIGFkZHJlc3Nlcywgd2hpY2ggYXJlIHVzZWQgcm91bmQtcm9iaW4uCisuVFAKKy5CIC0tcHhlLXByb21wdD1bdGFnOjx0YWc+LF08cHJvbXB0PlssPHRpbWVvdXQ+XQorU2V0dGluZyB0aGlzIHByb3ZpZGVzIGEgcHJvbXB0IHRvIGJlIGRpc3BsYXllZCBhZnRlciBQWEUgYm9vdC4gSWYgdGhlCit0aW1lb3V0IGlzIGdpdmVuIHRoZW4gYWZ0ZXIgdGhlCit0aW1lb3V0IGhhcyBlbGFwc2VkIHdpdGggbm8ga2V5Ym9hcmQgaW5wdXQsIHRoZSBmaXJzdCBhdmFpbGFibGUgbWVudQorb3B0aW9uIHdpbGwgYmUgYXV0b21hdGljYWxseSBleGVjdXRlZC4gSWYgdGhlIHRpbWVvdXQgaXMgemVybyB0aGVuIHRoZSBmaXJzdCBhdmFpbGFibGUgbWVudQoraXRlbSB3aWxsIGJlIGV4ZWN1dGVkIGltbWVkaWF0ZWx5LiBJZiAKKy5CIHB4ZS1wcm9tcHQKK2lzIG9taXR0ZWQgdGhlIHN5c3RlbSB3aWxsIHdhaXQgZm9yIHVzZXIgaW5wdXQgaWYgdGhlcmUgYXJlIG11bHRpcGxlCitpdGVtcyBpbiB0aGUgbWVudSwgYnV0IGJvb3QgaW1tZWRpYXRlbHkgaWYKK3RoZXJlIGlzIG9ubHkgb25lLiBTZWUKKy5CIHB4ZS1zZXJ2aWNlIAorZm9yIGRldGFpbHMgb2YgbWVudSBpdGVtcy4KKworRG5zbWFzcSBzdXBwb3J0cyBQWEUgInByb3h5LURIQ1AiLCBpbiB0aGlzIGNhc2UgYW5vdGhlciBESENQIHNlcnZlciBvbgordGhlIG5ldHdvcmsgaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgSVAgYWRkcmVzc2VzLCBhbmQgZG5zbWFzcQorc2ltcGx5IHByb3ZpZGVzIHRoZSBpbmZvcm1hdGlvbiBnaXZlbiBpbiAKKy5CIHB4ZS1wcm9tcHQKK2FuZAorLkIgcHhlLXNlcnZpY2UKK3RvIGFsbG93IG5ldGJvb3RpbmcuIFRoaXMgbW9kZSBpcyBlbmFibGVkIHVzaW5nIHRoZQorLkIgcHJveHkKK2tleXdvcmQgaW4KKy5CIGRoY3AtcmFuZ2UuCisuVFAgIAorLkIgXC1YLCAtLWRoY3AtbGVhc2UtbWF4PTxudW1iZXI+CitMaW1pdHMgZG5zbWFzcSB0byB0aGUgc3BlY2lmaWVkIG1heGltdW0gbnVtYmVyIG9mIERIQ1AgbGVhc2VzLiBUaGUKK2RlZmF1bHQgaXMgMTAwMC4gVGhpcyBsaW1pdCBpcyB0byBwcmV2ZW50IERvUyBhdHRhY2tzIGZyb20gaG9zdHMgd2hpY2gKK2NyZWF0ZSB0aG91c2FuZHMgb2YgbGVhc2VzIGFuZCB1c2UgbG90cyBvZiBtZW1vcnkgaW4gdGhlIGRuc21hc3EKK3Byb2Nlc3MuCisuVFAKKy5CIFwtSywgLS1kaGNwLWF1dGhvcml0YXRpdmUKK1Nob3VsZCBiZSBzZXQgd2hlbiBkbnNtYXNxIGlzIGRlZmluaXRlbHkgdGhlIG9ubHkgREhDUCBzZXJ2ZXIgb24gYSBuZXR3b3JrLgorRm9yIERIQ1B2NCwgaXQgY2hhbmdlcyB0aGUgYmVoYXZpb3VyIGZyb20gc3RyaWN0IFJGQyBjb21wbGlhbmNlIHNvIHRoYXQgREhDUCByZXF1ZXN0cyBvbgordW5rbm93biBsZWFzZXMgZnJvbSB1bmtub3duIGhvc3RzIGFyZSBub3QgaWdub3JlZC4gVGhpcyBhbGxvd3MgbmV3IGhvc3RzCit0byBnZXQgYSBsZWFzZSB3aXRob3V0IGEgdGVkaW91cyB0aW1lb3V0IHVuZGVyIGFsbCBjaXJjdW1zdGFuY2VzLiBJdCBhbHNvIAorYWxsb3dzIGRuc21hc3EgdG8gcmVidWlsZCBpdHMgbGVhc2UgZGF0YWJhc2Ugd2l0aG91dCBlYWNoIGNsaWVudCBuZWVkaW5nIHRvIAorcmVhY3F1aXJlIGEgbGVhc2UsIGlmIHRoZSBkYXRhYmFzZSBpcyBsb3N0LiBGb3IgREhDUHY2IGl0IHNldHMgdGhlCitwcmlvcml0eSBpbiByZXBsaWVzIHRvIDI1NSAodGhlIG1heGltdW0pIGluc3RlYWQgb2YgMCAodGhlIG1pbmltdW0pLgorLlRQCisuQiAtLWRoY3AtYWx0ZXJuYXRlLXBvcnRbPTxzZXJ2ZXIgcG9ydD5bLDxjbGllbnQgcG9ydD5dXQorKElQdjQgb25seSkgQ2hhbmdlIHRoZSBwb3J0cyB1c2VkIGZvciBESENQIGZyb20gdGhlIGRlZmF1bHQuIElmIHRoaXMgb3B0aW9uIGlzCitnaXZlbiBhbG9uZSwgd2l0aG91dCBhcmd1bWVudHMsIGl0IGNoYW5nZXMgdGhlIHBvcnRzIHVzZWQgZm9yIERIQ1AKK2Zyb20gNjcgYW5kIDY4IHRvIDEwNjcgYW5kIDEwNjguIElmIGEgc2luZ2xlIGFyZ3VtZW50IGlzIGdpdmVuLCB0aGF0Citwb3J0IG51bWJlciBpcyB1c2VkIGZvciB0aGUgc2VydmVyIGFuZCB0aGUgcG9ydCBudW1iZXIgcGx1cyBvbmUgdXNlZAorZm9yIHRoZSBjbGllbnQuIEZpbmFsbHksIHR3byBwb3J0IG51bWJlcnMgYWxsb3dzIGFyYml0cmFyeQorc3BlY2lmaWNhdGlvbiBvZiBib3RoIHNlcnZlciBhbmQgY2xpZW50IHBvcnRzIGZvciBESENQLgorLlRQCisuQiBcLTMsIC0tYm9vdHAtZHluYW1pY1s9PG5ldHdvcmstaWQ+Wyw8bmV0d29yay1pZD5dXQorKElQdjQgb25seSkgRW5hYmxlIGR5bmFtaWMgYWxsb2NhdGlvbiBvZiBJUCBhZGRyZXNzZXMgdG8gQk9PVFAgY2xpZW50cy4gVXNlIHRoaXMKK3dpdGggY2FyZSwgc2luY2UgZWFjaCBhZGRyZXNzIGFsbG9jYXRlZCB0byBhIEJPT1RQIGNsaWVudCBpcyBsZWFzZWQKK2ZvcmV2ZXIsIGFuZCB0aGVyZWZvcmUgYmVjb21lcyBwZXJtYW5lbnRseSB1bmF2YWlsYWJsZSBmb3IgcmUtdXNlIGJ5CitvdGhlciBob3N0cy4gaWYgdGhpcyBpcyBnaXZlbiB3aXRob3V0IHRhZ3MsIHRoZW4gaXQgdW5jb25kaXRpb25hbGx5CitlbmFibGVzIGR5bmFtaWMgYWxsb2NhdGlvbi4gV2l0aCB0YWdzLCBvbmx5IHdoZW4gdGhlIHRhZ3MgYXJlIGFsbAorc2V0LiBJdCBtYXkgYmUgcmVwZWF0ZWQgd2l0aCBkaWZmZXJlbnQgdGFnIHNldHMuIAorLlRQCisuQiBcLTUsIC0tbm8tcGluZworKElQdjQgb25seSkgQnkgZGVmYXVsdCwgdGhlIERIQ1Agc2VydmVyIHdpbGwgYXR0ZW1wdCB0byBlbnN1cmUgdGhhdCBhbiBhZGRyZXNzIGluCitub3QgaW4gdXNlIGJlZm9yZSBhbGxvY2F0aW5nIGl0IHRvIGEgaG9zdC4gSXQgZG9lcyB0aGlzIGJ5IHNlbmRpbmcgYW4KK0lDTVAgZWNobyByZXF1ZXN0IChha2EgInBpbmciKSB0byB0aGUgYWRkcmVzcyBpbiBxdWVzdGlvbi4gSWYgaXQgZ2V0cworYSByZXBseSwgdGhlbiB0aGUgYWRkcmVzcyBtdXN0IGFscmVhZHkgYmUgaW4gdXNlLCBhbmQgYW5vdGhlciBpcwordHJpZWQuIFRoaXMgZmxhZyBkaXNhYmxlcyB0aGlzIGNoZWNrLiBVc2Ugd2l0aCBjYXV0aW9uLgorLlRQCisuQiAtLWxvZy1kaGNwCitFeHRyYSBsb2dnaW5nIGZvciBESENQOiBsb2cgYWxsIHRoZSBvcHRpb25zIHNlbnQgdG8gREhDUCBjbGllbnRzIGFuZAordGhlIHRhZ3MgdXNlZCB0byBkZXRlcm1pbmUgdGhlbS4KKy5UUAorLkIgLS1xdWlldC1kaGNwLCAtLXF1aWV0LWRoY3A2LCAtLXF1aWV0LXJhCitTdXBwcmVzcyBsb2dnaW5nIG9mIHRoZSByb3V0aW5lIG9wZXJhdGlvbiBvZiB0aGVzZSBwcm90b2NvbHMuIEVycm9ycyBhbmQKK3Byb2JsZW1zIHdpbGwgc3RpbGwgYmUgbG9nZ2VkLiAtLXF1aWV0LWRoY3AgYW5kIHF1aWV0LWRoY3A2IGFyZQorb3Zlci1yaWRkZW4gYnkgLS1sb2ctZGhjcC4KKy5UUAorLkIgXC1sLCAtLWRoY3AtbGVhc2VmaWxlPTxwYXRoPgorVXNlIHRoZSBzcGVjaWZpZWQgZmlsZSB0byBzdG9yZSBESENQIGxlYXNlIGluZm9ybWF0aW9uLgorLlRQIAorLkIgLS1kaGNwLWR1aWQ9PGVudGVycHJpc2UtaWQ+LDx1aWQ+CisoSVB2NiBvbmx5KSBTcGVjaWZ5IHRoZSBzZXJ2ZXIgcGVyc2lzdGVudCBVSUQgd2hpY2ggdGhlIERIQ1B2NiBzZXJ2ZXIKK3dpbGwgdXNlLiBUaGlzIG9wdGlvbiBpcyBub3Qgbm9ybWFsbHkgcmVxdWlyZWQgYXMgZG5zbWFzcSBjcmVhdGVzIGEKK0RVSUQgYXV0b21hdGljYWxseSB3aGVuIGl0IGlzIGZpcnN0IG5lZWRlZC4gV2hlbiBnaXZlbiwgdGhpcyBvcHRpb24KK3Byb3ZpZGVzIGRuc21hc3EgdGhlIGRhdGEgcmVxdWlyZWQgdG8gY3JlYXRlIGEgRFVJRC1FTiB0eXBlIERVSUQuIE5vdGUKK3RoYXQgb25jZSBzZXQsIHRoZSBEVUlEIGlzIHN0b3JlZCBpbiB0aGUgbGVhc2UgZGF0YWJhc2UsIHNvIHRvIGNoYW5nZSBiZXR3ZWVuIERVSUQtRU4gYW5kCithdXRvbWF0aWNhbGx5IGNyZWF0ZWQgRFVJRHMgb3IgdmljZS12ZXJzYSwgdGhlIGxlYXNlIGRhdGFiYXNlIG11c3QgYmUKK3JlLWludGlhbGlzZWQuIFRoZSBlbnRlcnByaXNlLWlkIGlzIGFzc2lnbmVkIGJ5IElBTkEsIGFuZCB0aGUgdWlkIGlzIGEKK3N0cmluZyBvZiBoZXggb2N0ZXRzIHVuaXF1ZSB0byBhIHBhcnRpY3VsYXIgZGV2aWNlLgorLlRQCisuQiBcLTYgLS1kaGNwLXNjcmlwdD08cGF0aD4KK1doZW5ldmVyIGEgbmV3IERIQ1AgbGVhc2UgaXMgY3JlYXRlZCwgb3IgYW4gb2xkIG9uZSBkZXN0cm95ZWQsIG9yIGEKK1RGVFAgZmlsZSB0cmFuc2ZlciBjb21wbGV0ZXMsIHRoZQorZXhlY3V0YWJsZSBzcGVjaWZpZWQgYnkgdGhpcyBvcHRpb24gaXMgcnVuLiAgPHBhdGg+CittdXN0IGJlIGFuIGFic29sdXRlIHBhdGhuYW1lLCBubyBQQVRIIHNlYXJjaCBvY2N1cnMuIAorVGhlIGFyZ3VtZW50cyB0byB0aGUgcHJvY2VzcworYXJlICJhZGQiLCAib2xkIiBvciAiZGVsIiwgdGhlIE1BQworYWRkcmVzcyBvZiB0aGUgaG9zdCAob3IgRFVJRCBmb3IgSVB2NikgLCB0aGUgSVAgYWRkcmVzcywgYW5kIHRoZSBob3N0bmFtZSwKK2lmIGtub3duLiAiYWRkIiBtZWFucyBhIGxlYXNlIGhhcyBiZWVuIGNyZWF0ZWQsICJkZWwiIG1lYW5zIGl0IGhhcworYmVlbiBkZXN0cm95ZWQsICJvbGQiIGlzIGEgbm90aWZpY2F0aW9uIG9mIGFuIGV4aXN0aW5nIGxlYXNlIHdoZW4KK2Ruc21hc3Egc3RhcnRzIG9yIGEgY2hhbmdlIHRvIE1BQyBhZGRyZXNzIG9yIGhvc3RuYW1lIG9mIGFuIGV4aXN0aW5nCitsZWFzZSAoYWxzbywgbGVhc2UgbGVuZ3RoIG9yIGV4cGlyeSBhbmQgY2xpZW50LWlkLCBpZiBsZWFzZWZpbGUtcm8gaXMgc2V0KS4KK0lmIHRoZSBNQUMgYWRkcmVzcyBpcyBmcm9tIGEgbmV0d29yayB0eXBlIG90aGVyIHRoYW4gZXRoZXJuZXQsCitpdCB3aWxsIGhhdmUgdGhlIG5ldHdvcmsgdHlwZSBwcmVwZW5kZWQsIGVnICIwNi0wMToyMzo0NTo2Nzo4OTphYiIgZm9yCit0b2tlbiByaW5nLiBUaGUgcHJvY2VzcyBpcyBydW4gYXMgcm9vdCAoYXNzdW1pbmcgdGhhdCBkbnNtYXNxIHdhcyBvcmlnaW5hbGx5IHJ1biBhcworcm9vdCkgZXZlbiBpZiBkbnNtYXNxIGlzIGNvbmZpZ3VyZWQgdG8gY2hhbmdlIFVJRCB0byBhbiB1bnByaXZpbGVnZWQgdXNlci4KKworVGhlIGVudmlyb25tZW50IGlzIGluaGVyaXRlZCBmcm9tIHRoZSBpbnZva2VyIG9mIGRuc21hc3EsIHdpdGggc29tZSBvcgorYWxsIG9mIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFkZGVkCisKK0ZvciBib3RoIElQdjQgYW5kIElQdjY6CisKK0ROU01BU1FfRE9NQUlOIGlmIHRoZSBmdWxseS1xdWFsaWZpZWQgZG9tYWluIG5hbWUgb2YgdGhlIGhvc3QgaXMKK2tub3duLCB0aGlzIGlzIHNldCB0byB0aGUgIGRvbWFpbiBwYXJ0LiAoTm90ZSB0aGF0IHRoZSBob3N0bmFtZSBwYXNzZWQKK3RvIHRoZSBzY3JpcHQgYXMgYW4gYXJndW1lbnQgaXMgbmV2ZXIgZnVsbHktcXVhbGlmaWVkLikKKworSWYgdGhlIGNsaWVudCBwcm92aWRlcyBhIGhvc3RuYW1lLCBETlNNQVNRX1NVUFBMSUVEX0hPU1ROQU1FCisKK0lmIHRoZSBjbGllbnQgcHJvdmlkZXMgdXNlci1jbGFzc2VzLCBETlNNQVNRX1VTRVJfQ0xBU1MwLi5ETlNNQVNRX1VTRVJfQ0xBU1NuIAorCitJZiBkbnNtYXNxIHdhcyBjb21waWxlZCB3aXRoIEhBVkVfQlJPS0VOX1JUQywgdGhlbgordGhlIGxlbmd0aCBvZiB0aGUgbGVhc2UgKGluIHNlY29uZHMpIGlzIHN0b3JlZCBpbgorRE5TTUFTUV9MRUFTRV9MRU5HVEgsIG90aGVyd2lzZSB0aGUgdGltZSBvZiBsZWFzZSBleHBpcnkgaXMgc3RvcmVkIGluCitETlNNQVNRX0xFQVNFX0VYUElSRVMuIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB1bnRpbCBsZWFzZSBleHBpcnkgaXMKK2Fsd2F5cyBzdG9yZWQgaW4gRE5TTUFTUV9USU1FX1JFTUFJTklORy4gCisKK0lmIGEgbGVhc2UgdXNlZCB0byBoYXZlIGEgaG9zdG5hbWUsIHdoaWNoIGlzCityZW1vdmVkLCBhbiAib2xkIiBldmVudCBpcyBnZW5lcmF0ZWQgd2l0aCB0aGUgbmV3IHN0YXRlIG9mIHRoZSBsZWFzZSwgCitpZSBubyBuYW1lLCBhbmQgdGhlIGZvcm1lciBuYW1lIGlzIHByb3ZpZGVkIGluIHRoZSBlbnZpcm9ubWVudCAKK3ZhcmlhYmxlIEROU01BU1FfT0xEX0hPU1ROQU1FLiAKKworRE5TTUFTUV9JTlRFUkZBQ0Ugc3RvcmVzIHRoZSBuYW1lIG9mCit0aGUgaW50ZXJmYWNlIG9uIHdoaWNoIHRoZSByZXF1ZXN0IGFycml2ZWQ7IHRoaXMgaXMgbm90IHNldCBmb3IgIm9sZCIKK2FjdGlvbnMgd2hlbiBkbnNtYXNxIHJlc3RhcnRzLiAKKworRE5TTUFTUV9SRUxBWV9BRERSRVNTIGlzIHNldCBpZiB0aGUgY2xpZW50Cit1c2VkIGEgREhDUCByZWxheSB0byBjb250YWN0IGRuc21hc3EgYW5kIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSByZWxheQoraXMga25vd24uIAorCitETlNNQVNRX1RBR1MgY29udGFpbnMgYWxsIHRoZSB0YWdzIHNldCBkdXJpbmcgdGhlCitESENQIHRyYW5zYWN0aW9uLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLgorCitETlNNQVNRX0xPR19ESENQIGlzIHNldCBpZgorLkIgLS1sb2ctZGhjcAoraXMgaW4gZWZmZWN0LgorCitGb3IgSVB2NCBvbmx5OgorCitETlNNQVNRX0NMSUVOVF9JRCBpZiB0aGUgaG9zdCBwcm92aWRlZCBhIGNsaWVudC1pZC4KKworRE5TTUFTUV9DSVJDVUlUX0lELCBETlNNQVNRX1NVQlNDUklCRVJfSUQsIEROU01BU1FfUkVNT1RFX0lEIGlmIGEKK0RIQ1AgcmVsYXktYWdlbnQgYWRkZWQgYW55IG9mIHRoZXNlIG9wdGlvbnMuCisgCitJZiB0aGUgY2xpZW50IHByb3ZpZGVzIHZlbmRvci1jbGFzcywgRE5TTUFTUV9WRU5ET1JfQ0xBU1MuCisKK0ZvciBJUHY2IG9ubHk6CisKK0lmIHRoZSBjbGllbnQgcHJvdmlkZXMgdmVuZG9yLWNsYXNzLCBETlNNQVNRX1ZFTkRPUl9DTEFTU19JRCwKK2NvbnRhaW5pbmcgdGhlIElBTkEgZW50ZXJwcmlzZSBpZCBmb3IgdGhlIGNsYXNzLCBhbmQKK0ROU01BU1FfVkVORE9SX0NMQVNTMC4uRE5TTUFTUV9WRU5ET1JfQ0xBU1NuIGZvciB0aGUgZGF0YS4KKworRE5TTUFTUV9TRVJWRVJfRFVJRCBjb250YWluaW5nIHRoZSBEVUlEIG9mIHRoZSBzZXJ2ZXI6IHRoaXMgaXMgdGhlIHNhbWUgZm9yCitldmVyeSBjYWxsIHRvIHRoZSBzY3JpcHQuCisKK0ROU01BU1FfSUFJRCBjb250YWluaW5nIHRoZSBJQUlEIGZvciB0aGUgbGVhc2UuIElmIHRoZSBsZWFzZSBpcyBhCit0ZW1wb3JhcnkgYWxsb2NhdGlvbiwgdGhpcyBpcyBwcmVmaXhlZCB0byAnVCcuCisKK0ROU01BU1FfTUFDIGNvbnRhaW5pbmcgdGhlIE1BQyBhZGRyZXNzIG9mIHRoZSBjbGllbnQsIGlmIGtub3duLgorCitOb3RlIHRoYXQgdGhlIHN1cHBsaWVkIGhvc3RuYW1lLCB2ZW5kb3JjbGFzcyBhbmQgdXNlcmNsYXNzIGRhdGEgaXMKK29ubHkgIHN1cHBsaWVkIGZvcgorImFkZCIgYWN0aW9ucyBvciAib2xkIiBhY3Rpb25zIHdoZW4gYSBob3N0IHJlc3VtZXMgYW4gZXhpc3RpbmcgbGVhc2UsCitzaW5jZSB0aGVzZSBkYXRhIGFyZSBub3QgaGVsZCBpbiBkbnNtYXNxJ3MgbGVhc2UKK2RhdGFiYXNlLgorCisKKworQWxsIGZpbGUgZGVzY3JpcHRvcnMgYXJlCitjbG9zZWQgZXhjZXB0IHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyciB3aGljaCBhcmUgb3BlbiB0byAvZGV2L251bGwKKyhleGNlcHQgaW4gZGVidWcgbW9kZSkuCisKK1RoZSBzY3JpcHQgaXMgbm90IGludm9rZWQgY29uY3VycmVudGx5OiBhdCBtb3N0IG9uZSBpbnN0YW5jZQorb2YgdGhlIHNjcmlwdCBpcyBldmVyIHJ1bm5pbmcgKGRuc21hc3Egd2FpdHMgZm9yIGFuIGluc3RhbmNlIG9mIHNjcmlwdCB0byBleGl0CitiZWZvcmUgcnVubmluZyB0aGUgbmV4dCkuIENoYW5nZXMgdG8gdGhlIGxlYXNlIGRhdGFiYXNlIGFyZSB3aGljaAorcmVxdWlyZSB0aGUgc2NyaXB0IHRvIGJlIGludm9rZWQgYXJlIHF1ZXVlZCBhd2FpdGluZyBleGl0IG9mIGEgcnVubmluZyBpbnN0YW5jZS4KK0lmIHRoaXMgcXVldWVpbmcgYWxsb3dzIG11bHRpcGxlIHN0YXRlIGNoYW5nZXMgb2NjdXIgdG8gYSBzaW5nbGUKK2xlYXNlIGJlZm9yZSB0aGUgc2NyaXB0IGNhbiBiZSBydW4gdGhlbiAKK2VhcmxpZXIgc3RhdGVzIGFyZSBkaXNjYXJkZWQgYW5kIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoYXQgbGVhc2UgaXMKK3JlZmxlY3RlZCB3aGVuIHRoZSBzY3JpcHQgZmluYWxseSBydW5zLiAKKworQXQgZG5zbWFzcSBzdGFydHVwLCB0aGUgc2NyaXB0IHdpbGwgYmUgaW52b2tlZCBmb3IKK2FsbCBleGlzdGluZyBsZWFzZXMgYXMgdGhleSBhcmUgcmVhZCBmcm9tIHRoZSBsZWFzZSBmaWxlLiBFeHBpcmVkCitsZWFzZXMgd2lsbCBiZSBjYWxsZWQgd2l0aCAiZGVsIiBhbmQgb3RoZXJzIHdpdGggIm9sZCIuIFdoZW4gZG5zbWFzcQorcmVjZWl2ZXMgYSBIVVAgc2lnbmFsLCB0aGUgc2NyaXB0IHdpbGwgYmUgaW52b2tlZCBmb3IgZXhpc3RpbmcgbGVhc2VzCit3aXRoIGFuICJvbGQgIiBldmVudC4KKworCitUaGVyZSBhcmUgdHdvIGZ1cnRoZXIgYWN0aW9ucyB3aGljaCBtYXkgYXBwZWFyIGFzIHRoZSBmaXJzdCBhcmd1bWVudAordG8gdGhlIHNjcmlwdCwgImluaXQiIGFuZCAidGZ0cCIuIE1vcmUgbWF5IGJlIGFkZGVkIGluIHRoZSBmdXR1cmUsIHNvCitzY3JpcHRzIHNob3VsZCBiZSB3cml0dGVuIHRvIGlnbm9yZSB1bmtub3duIGFjdGlvbnMuICJpbml0IiBpcworZGVzY3JpYmVkIGJlbG93IGluIAorLkIgLS1sZWFzZWZpbGUtcm8KK1RoZSAidGZ0cCIgYWN0aW9uIGlzIGludm9rZWQgd2hlbiBhIFRGVFAgZmlsZSB0cmFuc2ZlciBjb21wbGV0ZXM6IHRoZQorYXJndW1lbnRzIGFyZSB0aGUgZmlsZSBzaXplIGluIGJ5dGVzLCB0aGUgYWRkcmVzcyB0byB3aGljaCB0aGUgZmlsZQord2FzIHNlbnQsIGFuZCB0aGUgY29tcGxldGUgcGF0aG5hbWUgb2YgdGhlIGZpbGUuCisgCisuVFAKKy5CIC0tZGhjcC1sdWFzY3JpcHQ9PHBhdGg+CitTcGVjaWZ5IGEgc2NyaXB0IHdyaXR0ZW4gaW4gTHVhLCB0byBiZSBydW4gd2hlbiBsZWFzZXMgYXJlIGNyZWF0ZWQsCitkZXN0cm95ZWQgb3IgY2hhbmdlZC4gVG8gdXNlIHRoaXMgb3B0aW9uLCBkbnNtYXNxIG11c3QgYmUgY29tcGlsZWQKK3dpdGggdGhlIGNvcnJlY3Qgc3VwcG9ydC4gVGhlIEx1YSBpbnRlcnByZXRlciBpcyBpbnRpYWxpc2VkIG9uY2UsIHdoZW4KK2Ruc21hc3Egc3RhcnRzLCBzbyB0aGF0IGdsb2JhbCB2YXJpYWJsZXMgcGVyc2lzdCBiZXR3ZWVuIGxlYXNlCitldmVudHMuIFRoZSBMdWEgY29kZSBtdXN0IGRlZmluZSBhCisuQiBsZWFzZQorZnVuY3Rpb24sIGFuZCBtYXkgcHJvdmlkZQorLkIgaW5pdAorYW5kCisuQiBzaHV0ZG93bgorZnVuY3Rpb25zLCB3aGljaCBhcmUgY2FsbGVkLCB3aXRob3V0IGFyZ3VtZW50cyB3aGVuIGRuc21hc3Egc3RhcnRzIHVwCithbmQgdGVybWluYXRlcy4gSXQgbWF5IGFsc28gcHJvdmlkZSBhIAorLkIgdGZ0cAorZnVuY3Rpb24uCisKK1RoZSAKKy5CIGxlYXNlCitmdW5jdGlvbiByZWNlaXZlcyB0aGUgaW5mb3JtYXRpb24gZGV0YWlsZWQgaW4gCisuQiAtLWRoY3Atc2NyaXB0LiAKK0l0IGdldHMgdHdvIGFyZ3VtZW50cywgZmlyc3RseSB0aGUgYWN0aW9uLCB3aGljaCBpcyBhIHN0cmluZworY29udGFpbmluZywgImFkZCIsICJvbGQiIG9yICJkZWwiLCBhbmQgc2Vjb25kbHkgYSB0YWJsZSBvZiB0YWcgdmFsdWUKK3BhaXJzLiBUaGUgdGFncyBtb3N0bHkgY29ycmVzcG9uZCB0byB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzCitkZXRhaWxlZCBhYm92ZSwgZm9yIGluc3RhbmNlIHRoZSB0YWcgImRvbWFpbiIgaG9sZHMgdGhlIHNhbWUgZGF0YSBhcwordGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEROU01BU1FfRE9NQUlOLiBUaGVyZSBhcmUgYSBmZXcgZXh0cmEgdGFncword2hpY2ggaG9sZCB0aGUgZGF0YSBzdXBwbGllZCBhcyBhcmd1bWVudHMgdG8KKy5CIC0tZGhjcC1zY3JpcHQuIAorVGhlc2UgYXJlIAorLkIgbWFjX2FkZHJlc3MsIGlwX2FkZHJlc3MKK2FuZCAKKy5CIGhvc3RuYW1lCitmb3IgSVB2NCwgYW5kIAorLkIgY2xpZW50X2R1aWQsIGlwX2FkZHJlc3MKK2FuZCAKKy5CIGhvc3RuYW1lCitmb3IgSVB2Ni4KKworVGhlICAKKy5CIHRmdHAKK2Z1bmN0aW9uIGlzIGNhbGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIGxlYXNlIGZ1bmN0aW9uLCBhbmQgdGhlCit0YWJsZSBob2xkcyB0aGUgdGFncyAKKy5CIGRlc3RpbmF0aW9uX2FkZHJlc3MsCisuQiBmaWxlX25hbWUKK2FuZCAKKy5CIGZpbGVfc2l6ZS4KKy5UUAorLkIgLS1kaGNwLXNjcmlwdHVzZXIKK1NwZWNpZnkgdGhlIHVzZXIgYXMgd2hpY2ggdG8gcnVuIHRoZSBsZWFzZS1jaGFuZ2Ugc2NyaXB0IG9yIEx1YSBzY3JpcHQuIFRoaXMgZGVmYXVsdHMgdG8gcm9vdCwgYnV0IGNhbiBiZSBjaGFuZ2VkIHRvIGFub3RoZXIgdXNlciB1c2luZyB0aGlzIGZsYWcuIAorLlRQIAorLkIgXC05LCAtLWxlYXNlZmlsZS1ybworQ29tcGxldGVseSBzdXBwcmVzcyB1c2Ugb2YgdGhlIGxlYXNlIGRhdGFiYXNlIGZpbGUuIFRoZSBmaWxlIHdpbGwgbm90CitiZSBjcmVhdGVkLCByZWFkLCBvciB3cml0dGVuLiBDaGFuZ2UgdGhlIHdheSB0aGUgbGVhc2UtY2hhbmdlCitzY3JpcHQgKGlmIG9uZSBpcyBwcm92aWRlZCkgaXMgY2FsbGVkLCBzbyB0aGF0IHRoZSBsZWFzZSBkYXRhYmFzZSBtYXkKK2JlIG1haW50YWluZWQgaW4gZXh0ZXJuYWwgc3RvcmFnZSBieSB0aGUgc2NyaXB0LiBJbiBhZGRpdGlvbiB0byB0aGUKK2ludm9jYXRpb25zICBnaXZlbiBpbiAKKy5CICAtLWRoY3Atc2NyaXB0Cit0aGUgbGVhc2UtY2hhbmdlIHNjcmlwdCBpcyBjYWxsZWQgb25jZSwgYXQgZG5zbWFzcSBzdGFydHVwLCB3aXRoIHRoZQorc2luZ2xlIGFyZ3VtZW50ICJpbml0Ii4gV2hlbiBjYWxsZWQgbGlrZSB0aGlzIHRoZSBzY3JpcHQgc2hvdWxkIHdyaXRlCit0aGUgc2F2ZWQgc3RhdGUgb2YgdGhlIGxlYXNlIGRhdGFiYXNlLCBpbiBkbnNtYXNxIGxlYXNlZmlsZSBmb3JtYXQsIHRvCitzdGRvdXQgYW5kIGV4aXQgd2l0aCB6ZXJvIGV4aXQgY29kZS4gU2V0dGluZyB0aGlzCitvcHRpb24gYWxzbyBmb3JjZXMgdGhlIGxlYXNlY2hhbmdlIHNjcmlwdCB0byBiZSBjYWxsZWQgb24gY2hhbmdlcwordG8gdGhlIGNsaWVudC1pZCBhbmQgbGVhc2UgbGVuZ3RoIGFuZCBleHBpcnkgdGltZS4KKy5UUAorLkIgLS1icmlkZ2UtaW50ZXJmYWNlPTxpbnRlcmZhY2U+LDxhbGlhcz5bLDxhbGlhcz5dCitUcmVhdCBESENQIHJlcXVlc3QgcGFja2V0cyBhcnJpdmluZyBhdCBhbnkgb2YgdGhlIDxhbGlhcz4gaW50ZXJmYWNlcworYXMgaWYgdGhleSBoYWQgYXJyaXZlZCBhdCA8aW50ZXJmYWNlPi4gVGhpcyBvcHRpb24gaXMgbmVjZXNzYXJ5IHdoZW4KK3VzaW5nICJvbGQgc3R5bGUiIGJyaWRnaW5nIG9uIEJTRCBwbGF0Zm9ybXMsIHNpbmNlCitwYWNrZXRzIGFycml2ZSBhdCB0YXAgaW50ZXJmYWNlcyB3aGljaCBkb24ndCBoYXZlIGFuIElQIGFkZHJlc3MuCitBIHRyYWlsaW5nICcqJyB3aWxkY2FyZCBjYW4gYmUgdXNlZCBpbiBlYWNoIDxhbGlhcz4uCisuVFAKKy5CIFwtcywgLS1kb21haW49PGRvbWFpbj5bLDxhZGRyZXNzIHJhbmdlPlssbG9jYWxdXQorU3BlY2lmaWVzIEROUyBkb21haW5zIGZvciB0aGUgREhDUCBzZXJ2ZXIuIERvbWFpbnMgbWF5IGJlIGJlIGdpdmVuIAordW5jb25kaXRpb25hbGx5ICh3aXRob3V0IHRoZSBJUCByYW5nZSkgb3IgZm9yIGxpbWl0ZWQgSVAgcmFuZ2VzLiBUaGlzIGhhcyB0d28gZWZmZWN0czsKK2ZpcnN0bHkgaXQgY2F1c2VzIHRoZSBESENQIHNlcnZlciB0byByZXR1cm4gdGhlIGRvbWFpbiB0byBhbnkgaG9zdHMKK3doaWNoIHJlcXVlc3QgaXQsIGFuZCBzZWNvbmRseSBpdCBzZXRzIHRoZSBkb21haW4gd2hpY2ggaXQgaXMgbGVnYWwKK2ZvciBESENQLWNvbmZpZ3VyZWQgaG9zdHMgdG8gY2xhaW0uIFRoZSBpbnRlbnRpb24gaXMgdG8gY29uc3RyYWluCitob3N0bmFtZXMgc28gdGhhdCBhbiB1bnRydXN0ZWQgaG9zdCBvbiB0aGUgTEFOIGNhbm5vdCBhZHZlcnRpc2UgCitpdHMgbmFtZSB2aWEgZGhjcCBhcyBlLmcuICJtaWNyb3NvZnQuY29tIiBhbmQgY2FwdHVyZSB0cmFmZmljIG5vdCAKK21lYW50IGZvciBpdC4gSWYgbm8gZG9tYWluIHN1ZmZpeCBpcyBzcGVjaWZpZWQsIHRoZW4gYW55IERIQ1AKK2hvc3RuYW1lIHdpdGggYSBkb21haW4gcGFydCAoaWUgd2l0aCBhIHBlcmlvZCkgd2lsbCBiZSBkaXNhbGxvd2VkIAorYW5kIGxvZ2dlZC4gSWYgc3VmZml4IGlzIHNwZWNpZmllZCwgdGhlbiBob3N0bmFtZXMgd2l0aCBhIGRvbWFpbiAKK3BhcnQgYXJlIGFsbG93ZWQsIHByb3ZpZGVkIHRoZSBkb21haW4gcGFydCBtYXRjaGVzIHRoZSBzdWZmaXguIEluCithZGRpdGlvbiwgd2hlbiBhIHN1ZmZpeCBpcyBzZXQgdGhlbiBob3N0bmFtZXMgd2l0aG91dCBhIGRvbWFpbgorcGFydCBoYXZlIHRoZSBzdWZmaXggYWRkZWQgYXMgYW4gb3B0aW9uYWwgZG9tYWluIHBhcnQuIEVnIG9uIG15IG5ldHdvcmsgSSBjYW4gc2V0IAorLkIgLS1kb21haW49dGhla2VsbGV5cy5vcmcudWsKK2FuZCBoYXZlIGEgbWFjaGluZSB3aG9zZSBESENQIGhvc3RuYW1lIGlzICJsYXB0b3AiLiBUaGUgSVAgYWRkcmVzcyBmb3IgdGhhdCBtYWNoaW5lIGlzIGF2YWlsYWJsZSBmcm9tIAorLkIgZG5zbWFzcQorYm90aCBhcyAibGFwdG9wIiBhbmQgImxhcHRvcC50aGVrZWxsZXlzLm9yZy51ayIuIElmIHRoZSBkb21haW4gaXMKK2dpdmVuIGFzICIjIiB0aGVuIHRoZSBkb21haW4gaXMgcmVhZCBmcm9tIHRoZSBmaXJzdCAic2VhcmNoIiBkaXJlY3RpdmUKK2luIC9ldGMvcmVzb2x2LmNvbmYgKG9yIGVxdWl2YWxlbnQpLgorCitUaGUgYWRkcmVzcyByYW5nZSBjYW4gYmUgb2YgdGhlIGZvcm0KKzxpcCBhZGRyZXNzPiw8aXAgYWRkcmVzcz4gb3IgPGlwIGFkZHJlc3M+LzxuZXRtYXNrPiBvciBqdXN0IGEgc2luZ2xlCis8aXAgYWRkcmVzcz4uIFNlZSAKKy5CIC0tZGhjcC1mcWRuCit3aGljaCBjYW4gY2hhbmdlIHRoZSBiZWhhdmlvdXIgb2YgZG5zbWFzcSB3aXRoIGRvbWFpbnMuCisKK0lmIHRoZSBhZGRyZXNzIHJhbmdlIGlzIGdpdmVuIGFzIGlwLWFkZHJlc3MvbmV0d29yay1zaXplLCB0aGVuIGEKK2FkZGl0aW9uYWwgZmxhZyAibG9jYWwiIG1heSBiZSBzdXBwbGllZCB3aGljaCBoYXMgdGhlIGVmZmVjdCBvZiBhZGRpbmcKKy0tbG9jYWwgZGVjbGFyYXRpb25zIGZvciBmb3J3YXJkIGFuZCByZXZlcnNlIEROUyBxdWVyaWVzLiBFZy4KKy5CIC0tZG9tYWluPXRoZWtlbGxleXMub3JnLnVrLDE5Mi4xNjguMC4wLzI0LGxvY2FsCitpcyBpZGVudGljYWwgdG8KKy5CIC0tZG9tYWluPXRoZWtlbGxleXMub3JnLnVrLDE5Mi4xNjguMC4wLzI0CistLWxvY2FsPS90aGVrZWxsZXlzLm9yZy51ay8gLS1sb2NhbD0vMC4xNjguMTkyLmluLWFkZHIuYXJwYS8KK1RoZSBuZXR3b3JrIHNpemUgbXVzdCBiZSA4LCAxNiBvciAyNCBmb3IgdGhpcyB0byBiZSBsZWdhbC4KKy5UUAorLkIgLS1kaGNwLWZxZG4KK0luIHRoZSBkZWZhdWx0IG1vZGUsIGRuc21hc3EgaW5zZXJ0cyB0aGUgdW5xdWFsaWZpZWQgbmFtZXMgb2YKK0RIQ1AgY2xpZW50cyBpbnRvIHRoZSBETlMuIEZvciB0aGlzIHJlYXNvbiwgdGhlIG5hbWVzIG11c3QgYmUgdW5pcXVlLAorZXZlbiBpZiB0d28gY2xpZW50cyB3aGljaCBoYXZlIHRoZSBzYW1lIG5hbWUgYXJlIGluIGRpZmZlcmVudAorZG9tYWlucy4gSWYgYSBzZWNvbmQgREhDUCBjbGllbnQgYXBwZWFycyB3aGljaCBoYXMgdGhlIHNhbWUgbmFtZSBhcyBhbgorZXhpc3RpbmcgY2xpZW50LCB0aGUgbmFtZSBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgbmV3IGNsaWVudC4gSWYgCisuQiAtLWRoY3AtZnFkbgoraXMgc2V0LCB0aGlzIGJlaGF2aW91ciBjaGFuZ2VzOiB0aGUgdW5xdWFsaWZpZWQgbmFtZSBpcyBubyBsb25nZXIKK3B1dCBpbiB0aGUgRE5TLCBvbmx5IHRoZSBxdWFsaWZpZWQgbmFtZS4gVHdvIERIQ1AgY2xpZW50cyB3aXRoIHRoZQorc2FtZSBuYW1lIG1heSBib3RoIGtlZXAgdGhlIG5hbWUsIHByb3ZpZGVkIHRoYXQgdGhlIGRvbWFpbiBwYXJ0IGlzCitkaWZmZXJlbnQgKGllIHRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZXMgZGlmZmVyLikgVG8gZW5zdXJlIHRoYXQgYWxsCituYW1lcyBoYXZlIGEgZG9tYWluIHBhcnQsIHRoZXJlIG11c3QgYmUgYXQgbGVhc3QgCisuQiAtLWRvbWFpbiAKK3dpdGhvdXQgYW4gYWRkcmVzcyBzcGVjaWZpZWQgd2hlbiAKKy5CIC0tZGhjcC1mcWRuIAoraXMgc2V0LgorLlRQCisuQiAtLWRoY3AtY2xpZW50LXVwZGF0ZQorTm9ybWFsbHksIHdoZW4gZ2l2aW5nIGEgREhDUCBsZWFzZSwgZG5zbWFzcSBzZXRzIGZsYWdzIGluIHRoZSBGUUROCitvcHRpb24gdG8gdGVsbCB0aGUgY2xpZW50IG5vdCB0byBhdHRlbXB0IGEgREROUyB1cGRhdGUgd2l0aCBpdHMgbmFtZQorYW5kIElQIGFkZHJlc3MuIFRoaXMgaXMgYmVjYXVzZSB0aGUgbmFtZS1JUCBwYWlyIGlzIGF1dG9tYXRpY2FsbHkKK2FkZGVkIGludG8gZG5zbWFzcSdzIEROUyB2aWV3LiBUaGlzIGZsYWcgc3VwcHJlc3NlcyB0aGF0IGJlaGF2aW91ciwKK3RoaXMgaXMgdXNlZnVsLCBmb3IgaW5zdGFuY2UsIHRvIGFsbG93IFdpbmRvd3MgY2xpZW50cyB0byB1cGRhdGUKK0FjdGl2ZSBEaXJlY3Rvcnkgc2VydmVycy4gU2VlIFJGQyA0NzAyIGZvciBkZXRhaWxzLiAKKy5UUAorLkIgLS1lbmFibGUtcmEKK0VuYWJsZSBkbnNtYXNxJ3MgSVB2NiBSb3V0ZXIgQWR2ZXJ0aXNlbWVudCBmZWF0dXJlLiBESENQdjYgZG9lc24ndAoraGFuZGxlIGNvbXBsZXRlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBpbiB0aGUgc2FtZSB3YXkgYXMgREhDUHY0LiBSb3V0ZXIKK2Rpc2NvdmVyeSBhbmQgKHBvc3NpYmx5KSBwcmVmaXggZGlzY292ZXJ5IGZvciBhdXRvbm9tb3VzIGFkZHJlc3MKK2NyZWF0aW9uIGFyZSBoYW5kbGVkIGJ5IGEgZGlmZmVyZW50IHByb3RvY29sLiBXaGVuIERIQ1AgaXMgaW4gdXNlLAorb25seSBhIHN1YnNldCBvZiB0aGlzIGlzIG5lZWRlZCwgYW5kIGRuc21hc3EgY2FuIGhhbmRsZSBpdCwgdXNpbmcKK2V4aXN0aW5nIERIQ1AgY29uZmlndXJhdGlvbiB0byBwcm92aWRlIG1vc3QgZGF0YS4gV2hlbiBSQSBpcyBlbmFibGVkLAorZG5zbWFzcSB3aWxsIGFkdmVydGlzZSBhIHByZWZpeCBmb3IgZWFjaCBkaGNwLXJhbmdlLCB3aXRoIGRlZmF1bHQKK3JvdXRlciBhbmQgcmVjdXJzaXZlIEROUyBzZXJ2ZXIgYXMgdGhlIHJlbGV2YW50IGxpbmstbG9jYWwgYWRkcmVzcyBvbiAKK3RoZSBtYWNoaW5lIHJ1bm5pbmcgZG5zbWFzcS4gQnkgZGVmYXVsdCwgaGUgIm1hbmFnZWQgYWRkcmVzcyIgYml0cyBhcmUgc2V0LCBhbmQKK3RoZSAidXNlIFNMQUFDIiBiaXQgaXMgcmVzZXQuIFRoaXMgY2FuIGJlIGNoYW5nZWQgZm9yIGluZGl2aWR1YWwKK3N1Ym5ldHMgd2l0aCB0aGUgbW9kZSBrZXl3b3JkcyBkZXNjcmliZWQgaW4KKy5CIC0tZGhjcC1yYW5nZS4KK1JGQzYxMDYgRE5TIHBhcmFtZXRlcnMgYXJlIGluY2x1ZGVkIGluIHRoZSBhZHZlcnRpc2VtZW50cy4gQnkgZGVmYXVsdCwKK3RoZSByZWxldmFudCBsaW5rLWxvY2FsIGFkZHJlc3Mgb2YgdGhlIG1hY2hpbmUgcnVubmluZyBkbnNtYXNxIGlzIHNlbnQKK2FzIHJlY3Vyc2l2ZSBETlMgc2VydmVyLiBJZiBwcm92aWRlZCwgdGhlIERIQ1B2NiBvcHRpb25zIGRucy1zZXJ2ZXIgYW5kCitkb21haW4tc2VhcmNoIGFyZSB1c2VkIGZvciBSRE5TUyBhbmQgRE5TU0wuCisuVFAKKy5CIC0tcmEtcGFyYW09PGludGVyZmFjZT4sW2hpZ2h8bG93XSxbWzxyYS1pbnRlcnZhbD5dLDxyb3V0ZXIgbGlmZXRpbWU+XQorU2V0IG5vbi1kZWZhdWx0IHZhbHVlcyBmb3Igcm91dGVyIGFkdmVydGlzZW1lbnRzIHNlbnQgdmlhIGFuCitpbnRlcmZhY2UuIFRoZSBwcmlvcml0eSBmaWVsZCBmb3IgdGhlIHJvdXRlciBtYXkgYmUgYWx0ZXJlZCBmcm9tIHRoZQorZGVmYXVsdCBvZiBtZWRpdW0gd2l0aCBlZworLkIgLS1yYS1wYXJhbT1ldGgwLGhpZ2guCitUaGUgaW50ZXJ2YWwgYmV0d2VlbiByb3V0ZXIgYWR2ZXJ0aXNlbWVudHMgbWF5IGJlIHNldCAoaW4gc2Vjb25kcykgd2l0aCAKKy5CIC0tcmEtcGFyYW09ZXRoMCw2MC4KK1RoZSBsaWZldGltZSBvZiB0aGUgcm91dGUgbWF5IGJlIGNoYW5nZWQgb3Igc2V0IHRvIHplcm8sIHdoaWNoIGFsbG93cworYSByb3V0ZXIgdG8gYWR2ZXJ0aXNlIHByZWZpeGVzIGJ1dCBub3QgYSByb3V0ZSB2aWEgaXRzZWxmLiAKKy5CIC0tcmEtcGFybT1ldGgwLDAsMAorKEEgdmFsdWUgb2YgemVybyBmb3IgdGhlIGludGVydmFsIG1lYW5zIHRoZSBkZWZhdWx0IHZhbHVlLikgQWxsIHRocmVlIHBhcmFtZXRlcnMgbWF5IGJlIHNldCBhdCBvbmNlLgorLkIgLS1yYS1wYXJhbT1sb3csNjAsMTIwMAorVGhlIGludGVyZmFjZSBmaWVsZCBtYXkgaW5jbHVkZSBhIHdpbGRjYXJkLgorLlRQCisuQiAtLWVuYWJsZS10ZnRwWz08aW50ZXJmYWNlPlssPGludGVyZmFjZT5dXQorRW5hYmxlIHRoZSBURlRQIHNlcnZlciBmdW5jdGlvbi4gVGhpcyBpcyBkZWxpYmVyYXRlbHkgbGltaXRlZCB0byB0aGF0CituZWVkZWQgdG8gbmV0LWJvb3QgYSBjbGllbnQuIE9ubHkgcmVhZGluZyBpcyBhbGxvd2VkOyB0aGUgdHNpemUgYW5kCitibGtzaXplIGV4dGVuc2lvbnMgYXJlIHN1cHBvcnRlZCAodHNpemUgaXMgb25seSBzdXBwb3J0ZWQgaW4gb2N0ZXQKK21vZGUpLiBXaXRob3V0IGFuIGFyZ3VtZW50LCB0aGUgVEZUUCBzZXJ2aWNlIGlzIHByb3ZpZGVkIHRvIHRoZSBzYW1lIHNldCBvZiBpbnRlcmZhY2VzIGFzIERIQ1Agc2VydmljZS4gCitJZiB0aGUgbGlzdCBvZiBpbnRlcmZhY2VzIGlzIHByb3ZpZGVkLCB0aGF0IGRlZmluZXMgd2hpY2ggaW50ZXJmYWNlcyByZWNpZXZlIFRGVFAgc2VydmljZS4KKy5UUAorLkIgLS10ZnRwLXJvb3Q9PGRpcmVjdG9yeT5bLDxpbnRlcmZhY2U+XQorTG9vayBmb3IgZmlsZXMgdG8gdHJhbnNmZXIgdXNpbmcgVEZUUCByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4KK2RpcmVjdG9yeS4gV2hlbiB0aGlzIGlzIHNldCwgVEZUUCBwYXRocyB3aGljaCBpbmNsdWRlICIuLiIgYXJlCityZWplY3RlZCwgdG8gc3RvcCBjbGllbnRzIGdldHRpbmcgb3V0c2lkZSB0aGUgc3BlY2lmaWVkIHJvb3QuCitBYnNvbHV0ZSBwYXRocyAoc3RhcnRpbmcgd2l0aCAvKSBhcmUgYWxsb3dlZCwgYnV0IHRoZXkgbXVzdCBiZSB3aXRoaW4KK3RoZSB0ZnRwLXJvb3QuIElmIHRoZSBvcHRpb25hbCBpbnRlcmZhY2UgYXJndW1lbnQgaXMgZ2l2ZW4sIHRoZQorZGlyZWN0b3J5IGlzIG9ubHkgdXNlZCBmb3IgVEZUUCByZXF1ZXN0cyB2aWEgdGhhdCBpbnRlcmZhY2UuCisuVFAKKy5CIC0tdGZ0cC11bmlxdWUtcm9vdAorQWRkIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBURlRQIGNsaWVudCBhcyBhIHBhdGggY29tcG9uZW50IG9uIHRoZSBlbmQKK29mIHRoZSBURlRQLXJvb3QgKGluIHN0YW5kYXJkIGRvdHRlZC1xdWFkIGZvcm1hdCkuIE9ubHkgdmFsaWQgaWYgYQordGZ0cC1yb290IGlzIHNldCBhbmQgdGhlIGRpcmVjdG9yeSBleGlzdHMuIEZvciBpbnN0YW5jZSwgaWYgdGZ0cC1yb290IGlzICIvdGZ0cCIgYW5kIGNsaWVudCAKKzEuMi4zLjQgcmVxdWVzdHMgZmlsZSAibXlmaWxlIiB0aGVuIHRoZSBlZmZlY3RpdmUgcGF0aCB3aWxsIGJlCisiL3RmdHAvMS4yLjMuNC9teWZpbGUiIGlmIC90ZnRwLzEuMi4zLjQgZXhpc3RzIG9yIC90ZnRwL215ZmlsZSBvdGhlcndpc2UuCisuVFAKKy5CIC0tdGZ0cC1zZWN1cmUKK0VuYWJsZSBURlRQIHNlY3VyZSBtb2RlOiB3aXRob3V0IHRoaXMsIGFueSBmaWxlIHdoaWNoIGlzIHJlYWRhYmxlIGJ5Cit0aGUgZG5zbWFzcSBwcm9jZXNzIHVuZGVyIG5vcm1hbCB1bml4IGFjY2Vzcy1jb250cm9sIHJ1bGVzIGlzCithdmFpbGFibGUgdmlhIFRGVFAuIFdoZW4gdGhlIC0tdGZ0cC1zZWN1cmUgZmxhZyBpcyBnaXZlbiwgb25seSBmaWxlcworb3duZWQgYnkgdGhlIHVzZXIgcnVubmluZyB0aGUgZG5zbWFzcSBwcm9jZXNzIGFyZSBhY2Nlc3NpYmxlLiBJZgorZG5zbWFzcSBpcyBiZWluZyBydW4gYXMgcm9vdCwgZGlmZmVyZW50IHJ1bGVzIGFwcGx5OiAtLXRmdHAtc2VjdXJlCitoYXMgbm8gZWZmZWN0LCBidXQgb25seSBmaWxlcyB3aGljaCBoYXZlIHRoZSB3b3JsZC1yZWFkYWJsZSBiaXQgc2V0CithcmUgYWNjZXNzaWJsZS4gSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIHJ1biBkbnNtYXNxIGFzIHJvb3Qgd2l0aCBURlRQCitlbmFibGVkLCBhbmQgY2VydGFpbmx5IG5vdCB3aXRob3V0IHNwZWNpZnlpbmcgLS10ZnRwLXJvb3QuIERvaW5nIHNvCitjYW4gZXhwb3NlIGFueSB3b3JsZC1yZWFkYWJsZSBmaWxlIG9uIHRoZSBzZXJ2ZXIgdG8gYW55IGhvc3Qgb24gdGhlIG5ldC4gCisuVFAKKy5CIC0tdGZ0cC1sb3dlcmNhc2UKK0NvbnZlcnQgZmlsZW5hbWVzIGluIFRGVFAgcmVxdWVzdHMgdG8gYWxsIGxvd2VyY2FzZS4gVGhpcyBpcyB1c2VmdWwKK2ZvciByZXF1ZXN0cyBmcm9tIFdpbmRvd3MgbWFjaGluZXMsIHdoaWNoIGhhdmUgY2FzZS1pbnNlbnNpdGl2ZQorZmlsZXN5c3RlbXMgYW5kIHRlbmQgdG8gcGxheSBmYXN0LWFuZC1sb29zZSB3aXRoIGNhc2UgaW4gZmlsZW5hbWVzLgorTm90ZSB0aGF0IGRuc21hc3EncyB0ZnRwIHNlcnZlciBhbHdheXMgY29udmVydHMgIlxcIiB0byAiLyIgaW4gZmlsZW5hbWVzLgorLlRQCisuQiAtLXRmdHAtbWF4PTxjb25uZWN0aW9ucz4KK1NldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBURlRQIGNvbm5lY3Rpb25zIGFsbG93ZWQuIFRoaXMKK2RlZmF1bHRzIHRvIDUwLiBXaGVuIHNlcnZpbmcgYSBsYXJnZSBudW1iZXIgb2YgVEZUUCBjb25uZWN0aW9ucywKK3Blci1wcm9jZXNzIGZpbGUgZGVzY3JpcHRvciBsaW1pdHMgbWF5IGJlIGVuY291bnRlcmVkLiBEbnNtYXNxIG5lZWRzCitvbmUgZmlsZSBkZXNjcmlwdG9yIGZvciBlYWNoIGNvbmN1cnJlbnQgVEZUUCBjb25uZWN0aW9uIGFuZCBvbmUKK2ZpbGUgZGVzY3JpcHRvciBwZXIgdW5pcXVlIGZpbGUgKHBsdXMgYSBmZXcgb3RoZXJzKS4gU28gc2VydmluZyB0aGUKK3NhbWUgZmlsZSBzaW11bHRhbmVvdXNseSB0byBuIGNsaWVudHMgd2lsbCB1c2UgcmVxdWlyZSBhYm91dCBuICsgMTAgZmlsZQorZGVzY3JpcHRvcnMsIHNlcnZpbmcgZGlmZmVyZW50IGZpbGVzIHNpbXVsdGFuZW91c2x5IHRvIG4gY2xpZW50cyB3aWxsCityZXF1aXJlIGFib3V0ICgyKm4pICsgMTAgZGVzY3JpcHRvcnMuIElmIAorLkIgLS10ZnRwLXBvcnQtcmFuZ2UKK2lzIGdpdmVuLCB0aGF0IGNhbiBhZmZlY3QgdGhlIG51bWJlciBvZiBjb25jdXJyZW50IGNvbm5lY3Rpb25zLgorLlRQCisuQiAtLXRmdHAtbm8tYmxvY2tzaXplCitTdG9wIHRoZSBURlRQIHNlcnZlciBmcm9tIG5lZ290aWF0aW5nIHRoZSAiYmxvY2tzaXplIiBvcHRpb24gd2l0aCBhCitjbGllbnQuIFNvbWUgYnVnZ3kgY2xpZW50cyByZXF1ZXN0IHRoaXMgb3B0aW9uIGJ1dCB0aGVuIGJlaGF2ZSBiYWRseQord2hlbiBpdCBpcyBncmFudGVkLgorLlRQCisuQiAtLXRmdHAtcG9ydC1yYW5nZT08c3RhcnQ+LDxlbmQ+CitBIFRGVFAgc2VydmVyIGxpc3RlbnMgb24gYSB3ZWxsLWtub3duIHBvcnQgKDY5KSBmb3IgY29ubmVjdGlvbiBpbml0aWF0aW9uLAorYnV0IGl0IGFsc28gdXNlcyBhIGR5bmFtaWNhbGx5LWFsbG9jYXRlZCBwb3J0IGZvciBlYWNoCitjb25uZWN0aW9uLiBOb3JtYWxseSB0aGVzZSBhcmUgYWxsb2NhdGVkIGJ5IHRoZSBPUywgYnV0IHRoaXMgb3B0aW9uCitzcGVjaWZpZXMgYSByYW5nZSBvZiBwb3J0cyBmb3IgdXNlIGJ5IFRGVFAgdHJhbnNmZXJzLiBUaGlzIGNhbiBiZQordXNlZnVsIHdoZW4gVEZUUCBoYXMgdG8gdHJhdmVyc2UgYSBmaXJld2FsbC4gVGhlIHN0YXJ0IG9mIHRoZSByYW5nZQorY2Fubm90IGJlIGxvd2VyIHRoYW4gMTAyNSB1bmxlc3MgZG5zbWFzcSBpcyBydW5uaW5nIGFzIHJvb3QuIFRoZSBudW1iZXIKK29mIGNvbmN1cnJlbnQgVEZUUCBjb25uZWN0aW9ucyBpcyBsaW1pdGVkIGJ5IHRoZSBzaXplIG9mIHRoZSBwb3J0IHJhbmdlLiAKKy5UUCAgCisuQiBcLUMsIC0tY29uZi1maWxlPTxmaWxlPgorU3BlY2lmeSBhIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIGZpbGUuIFRoZSBjb25mLWZpbGUgb3B0aW9uIGlzIGFsc28gYWxsb3dlZCBpbgorY29uZmlndXJhdGlvbiBmaWxlcywgdG8gaW5jbHVkZSBtdWx0aXBsZSBjb25maWd1cmF0aW9uIGZpbGVzLiBBCitmaWxlbmFtZSBvZiAiLSIgY2F1c2VzIGRuc21hc3EgdG8gcmVhZCBjb25maWd1cmF0aW9uIGZyb20gc3RkaW4uCisuVFAKKy5CIFwtNywgLS1jb25mLWRpcj08ZGlyZWN0b3J5PlssPGZpbGUtZXh0ZW5zaW9uPi4uLi4uLl0sCitSZWFkIGFsbCB0aGUgZmlsZXMgaW4gdGhlIGdpdmVuIGRpcmVjdG9yeSBhcyBjb25maWd1cmF0aW9uCitmaWxlcy4gSWYgZXh0ZW5zaW9uKHMpIGFyZSBnaXZlbiwgYW55IGZpbGVzIHdoaWNoIGVuZCBpbiB0aG9zZQorZXh0ZW5zaW9ucyBhcmUgc2tpcHBlZC4gQW55IGZpbGVzIHdob3NlIG5hbWVzIGVuZCBpbiB+IG9yIHN0YXJ0IHdpdGggLiBvciBzdGFydCBhbmQgZW5kCit3aXRoICMgYXJlIGFsd2F5cyBza2lwcGVkLiBJZiB0aGUgZXh0ZW5zaW9uIHN0YXJ0cyB3aXRoICogdGhlbiBvbmx5IGZpbGVzIAord2hpY2ggaGF2ZSB0aGF0IGV4dGVuc2lvbiBhcmUgbG9hZGVkLiBTbworLkIgLS1jb25mLWRpcj0vcGF0aC90by9kaXIsKi5jb25mCitsb2FkcyBhbGwgZmlsZXMgd2l0aCB0aGUgc3VmZml4IC5jb25mIGluIC9wYXRoL3RvL2Rpci4gVGhpcyBmbGFnIG1heSBiZSBnaXZlbiBvbiB0aGUgY29tbWFuZAorbGluZSBvciBpbiBhIGNvbmZpZ3VyYXRpb24gZmlsZS4gSWYgZ2l2aW5nIGl0IG9uIHRoZSBjb21tYW5kIGxpbmUsIGJlIHN1cmUgdG8KK2VzY2FwZSAqIGNoYXJhY3RlcnMuCisuVFAKKy5CIC0tc2VydmVycy1maWxlPTxmaWxlPgorQSBzcGVjaWFsIGNhc2Ugb2YgCisuQiAtLWNvbmYtZmlsZQord2hpY2ggZGlmZmVycyBpbiB0d28gcmVzcGVjdHMuIEZpcnN0bHksIG9ubHkgLS1zZXJ2ZXIgYW5kIC0tcmV2LXNlcnZlciBhcmUgYWxsb3dlZCAKK2luIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgaW5jbHVkZWQuIFNlY29uZGx5LCB0aGUgZmlsZSBpcyByZS1yZWFkIGFuZCB0aGUgY29uZmlndXJhdGlvbgordGhlcmVpbiBpcyB1cGRhdGVkIHdoZW4gZG5zbWFzcSByZWNpZXZlcyBTSUdIVVAuCisuU0ggQ09ORklHIEZJTEUKK0F0IHN0YXJ0dXAsIGRuc21hc3EgcmVhZHMKKy5JIC9ldGMvZG5zbWFzcS5jb25mLAoraWYgaXQgZXhpc3RzLiAoT24KK0ZyZWVCU0QsIHRoZSBmaWxlIGlzIAorLkkgL3Vzci9sb2NhbC9ldGMvZG5zbWFzcS5jb25mCispIChidXQgc2VlIHRoZSAKKy5CIFwtQworYW5kCisuQiBcLTcKK29wdGlvbnMuKSBUaGUgZm9ybWF0IG9mIHRoaXMKK2ZpbGUgY29uc2lzdHMgb2Ygb25lIG9wdGlvbiBwZXIgbGluZSwgZXhhY3RseSBhcyB0aGUgbG9uZyBvcHRpb25zIGRldGFpbGVkIAoraW4gdGhlIE9QVElPTlMgc2VjdGlvbiBidXQgd2l0aG91dCB0aGUgbGVhZGluZyAiLS0iLiBMaW5lcyBzdGFydGluZyB3aXRoICMgYXJlIGNvbW1lbnRzIGFuZCBpZ25vcmVkLiBGb3IKK29wdGlvbnMgd2hpY2ggbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UsIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgb3ZlcnJpZGVzIAordGhlIGNvbW1hbmQgbGluZS4gIFF1b3RpbmcgaXMgYWxsb3dlZCBpbiBhIGNvbmZpZyBmaWxlOgorYmV0d2VlbiAiIHF1b3RlcyB0aGUgc3BlY2lhbCBtZWFuaW5ncyBvZiAsOi4gYW5kICMgYXJlIHJlbW92ZWQgYW5kIHRoZQorZm9sbG93aW5nIGVzY2FwZXMgYXJlIGFsbG93ZWQ6IFxcXFwgXFwiIFxcdCBcXGUgXFxiIFxcciBhbmQgXFxuLiBUaGUgbGF0ZXIgCitjb3JyZXNwb25kaW5nIHRvIHRhYiwgZXNjYXBlLCBiYWNrc3BhY2UsIHJldHVybiBhbmQgbmV3bGluZS4KKy5TSCBOT1RFUworV2hlbiBpdCByZWNlaXZlcyBhIFNJR0hVUCwgCisuQiBkbnNtYXNxIAorY2xlYXJzIGl0cyBjYWNoZSBhbmQgdGhlbiByZS1sb2FkcyAKKy5JIC9ldGMvaG9zdHMKK2FuZCAKKy5JIC9ldGMvZXRoZXJzIAorYW5kIGFueSBmaWxlIGdpdmVuIGJ5IC0tZGhjcC1ob3N0c2ZpbGUsIC0tZGhjcC1vcHRzZmlsZSBvciAtLWFkZG4taG9zdHMuCitUaGUgZGhjcCBsZWFzZSBjaGFuZ2Ugc2NyaXB0IGlzIGNhbGxlZCBmb3IgYWxsCitleGlzdGluZyBESENQIGxlYXNlcy4gSWYgCisuQgorLS1uby1wb2xsCitpcyBzZXQgU0lHSFVQIGFsc28gcmUtcmVhZHMKKy5JIC9ldGMvcmVzb2x2LmNvbmYuCitTSUdIVVAKK2RvZXMgTk9UIHJlLXJlYWQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKy5QUAorV2hlbiBpdCByZWNlaXZlcyBhIFNJR1VTUjEsCisuQiBkbnNtYXNxIAord3JpdGVzIHN0YXRpc3RpY3MgdG8gdGhlIHN5c3RlbSBsb2cuIEl0IHdyaXRlcyB0aGUgY2FjaGUgc2l6ZSwKK3RoZSBudW1iZXIgb2YgbmFtZXMgd2hpY2ggaGF2ZSBoYWQgdG8gcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZSBiZWZvcmUKK3RoZXkgZXhwaXJlZCBpbiBvcmRlciB0byBtYWtlIHJvb20gZm9yIG5ldyBuYW1lcyBhbmQgdGhlIHRvdGFsIG51bWJlcgorb2YgbmFtZXMgdGhhdCBoYXZlIGJlZW4gaW5zZXJ0ZWQgaW50byB0aGUgY2FjaGUuIFRoZSBudW1iZXIgb2YgY2FjaGUgaGl0cyBhbmQgCittaXNzZXMgYW5kIHRoZSBudW1iZXIgb2YgYXV0aG9yaXRhdGl2ZSBxdWVyaWVzIGFuc3dlcmVkIGFyZSBhbHNvIGdpdmVuLiBGb3IgZWFjaCB1cHN0cmVhbQorc2VydmVyIGl0IGdpdmVzIHRoZSBudW1iZXIgb2YgcXVlcmllcyBzZW50LCBhbmQgdGhlIG51bWJlciB3aGljaAorcmVzdWx0ZWQgaW4gYW4gZXJyb3IuIEluIAorLkIgLS1uby1kYWVtb24KK21vZGUgb3Igd2hlbiBmdWxsIGxvZ2dpbmcgaXMgZW5hYmxlZCAoLXEpLCBhIGNvbXBsZXRlIGR1bXAgb2YgdGhlCitjb250ZW50cyBvZiB0aGUgY2FjaGUgaXMgbWFkZS4gCisKK1RoZSBjYWNoZSBzdGF0aXN0aWNzIGFyZSBhbHNvIGF2YWlsYWJsZSBpbiB0aGUgRE5TIGFzIGFuc3dlcnMgdG8gCitxdWVyaWVzIG9mIGNsYXNzIENIQU9TIGFuZCB0eXBlIFRYVCBpbiBkb21haW4gYmluZC4gVGhlIGRvbWFpbiBuYW1lcyBhcmUgY2FjaGVzaXplLmJpbmQsIGluc2VydGlvbnMuYmluZCwgZXZpY3Rpb25zLmJpbmQsIAorbWlzc2VzLmJpbmQsIGhpdHMuYmluZCwgYXV0aC5iaW5kIGFuZCBzZXJ2ZXJzLmJpbmQuIEFuIGV4YW1wbGUgY29tbWFuZCB0byBxdWVyeSB0aGlzLCB1c2luZyB0aGUgCisuQiBkaWcKK3V0aWxpdHkgd291bGQgYmUKKworZGlnICtzaG9ydCBjaGFvcyB0eHQgY2FjaGVzaXplLmJpbmQKKworLlBQIAorV2hlbiBpdCByZWNlaXZlcyBTSUdVU1IyIGFuZCBpdCBpcyBsb2dnaW5nIGRpcmVjdCB0byBhIGZpbGUgKHNlZQorLkIgLS1sb2ctZmFjaWxpdHkKKykgCisuQiBkbnNtYXNxCit3aWxsIGNsb3NlIGFuZCByZW9wZW4gdGhlIGxvZyBmaWxlLiBOb3RlIHRoYXQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLAorZG5zbWFzcSB3aWxsIG5vdCBiZSBydW5uaW5nIGFzIHJvb3QuIFdoZW4gaXQgZmlyc3QgY3JlYXRlcyB0aGUgbG9nZmlsZQorZG5zbWFzcSBjaGFuZ2VzIHRoZSBvd25lcnNoaXAgb2YgdGhlIGZpbGUgdG8gdGhlIG5vbi1yb290IHVzZXIgaXQgd2lsbCBydW4KK2FzLiBMb2dyb3RhdGUgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgdG8gY3JlYXRlIGEgbmV3IGxvZyBmaWxlIHdpdGgKK3RoZSBvd25lcnNoaXAgd2hpY2ggbWF0Y2hlcyB0aGUgZXhpc3Rpbmcgb25lIGJlZm9yZSBzZW5kaW5nIFNJR1VTUjIuCitJZiBUQ1AgRE5TIHF1ZXJpZXMgYXJlIGluIHByb2dyZXNzLCB0aGUgb2xkIGxvZ2ZpbGUgd2lsbCByZW1haW4gb3BlbiBpbgorY2hpbGQgcHJvY2Vzc2VzIHdoaWNoIGFyZSBoYW5kbGluZyBUQ1AgcXVlcmllcyBhbmQgbWF5IGNvbnRpbnVlIHRvIGJlCit3cml0dGVuLiBUaGVyZSBpcyBhIGxpbWl0IG9mIDE1MCBzZWNvbmRzLCBhZnRlciB3aGljaCBhbGwgZXhpc3RpbmcgVENQCitwcm9jZXNzZXMgd2lsbCBoYXZlIGV4cGlyZWQ6IGZvciB0aGlzIHJlYXNvbiwgaXQgaXMgbm90IHdpc2UgdG8KK2NvbmZpZ3VyZSBsb2dmaWxlIGNvbXByZXNzaW9uIGZvciBsb2dmaWxlcyB3aGljaCBoYXZlIGp1c3QgYmVlbgorcm90YXRlZC4gVXNpbmcgbG9ncm90YXRlLCB0aGUgcmVxdWlyZWQgb3B0aW9ucyBhcmUgCisuQiBjcmVhdGUgCithbmQKKy5CIGRlbGF5Y29tcHJlc3MuCisKKyAKKy5QUAorRG5zbWFzcSBpcyBhIEROUyBxdWVyeSBmb3J3YXJkZXI6IGl0IGl0IG5vdCBjYXBhYmxlIG9mIHJlY3Vyc2l2ZWx5CithbnN3ZXJpbmcgYXJiaXRyYXJ5IHF1ZXJpZXMgc3RhcnRpbmcgZnJvbSB0aGUgcm9vdCBzZXJ2ZXJzIGJ1dAorZm9yd2FyZHMgc3VjaCBxdWVyaWVzIHRvIGEgZnVsbHkgcmVjdXJzaXZlIHVwc3RyZWFtIEROUyBzZXJ2ZXIgd2hpY2ggaXMKK3R5cGljYWxseSBwcm92aWRlZCBieSBhbiBJU1AuIEJ5IGRlZmF1bHQsIGRuc21hc3EgcmVhZHMKKy5JIC9ldGMvcmVzb2x2LmNvbmYKK3RvIGRpc2NvdmVyIHRoZSBJUAorYWRkcmVzc2VzIG9mIHRoZSB1cHN0cmVhbSBuYW1lc2VydmVycyBpdCBzaG91bGQgdXNlLCBzaW5jZSB0aGUKK2luZm9ybWF0aW9uIGlzIHR5cGljYWxseSBzdG9yZWQgdGhlcmUuIFVubGVzcworLkIgLS1uby1wb2xsCitpcyB1c2VkLAorLkIgZG5zbWFzcQorY2hlY2tzIHRoZSBtb2RpZmljYXRpb24gdGltZSBvZgorLkkgL2V0Yy9yZXNvbHYuY29uZgorKG9yIGVxdWl2YWxlbnQgaWYgCisuQiBcLS1yZXNvbHYtZmlsZSAKK2lzIHVzZWQpIGFuZCByZS1yZWFkcyBpdCBpZiBpdCBjaGFuZ2VzLiBUaGlzIGFsbG93cyB0aGUgRE5TIHNlcnZlcnMgdG8KK2JlIHNldCBkeW5hbWljYWxseSBieSBQUFAgb3IgREhDUCBzaW5jZSBib3RoIHByb3RvY29scyBwcm92aWRlIHRoZQoraW5mb3JtYXRpb24uCitBYnNlbmNlIG9mCisuSSAvZXRjL3Jlc29sdi5jb25mCitpcyBub3QgYW4gZXJyb3IKK3NpbmNlIGl0IG1heSBub3QgaGF2ZSBiZWVuIGNyZWF0ZWQgYmVmb3JlIGEgUFBQIGNvbm5lY3Rpb24gZXhpc3RzLiBEbnNtYXNxIAorc2ltcGx5IGtlZXBzIGNoZWNraW5nIGluIGNhc2UKKy5JIC9ldGMvcmVzb2x2LmNvbmYgCitpcyBjcmVhdGVkIGF0IGFueQordGltZS4gRG5zbWFzcSBjYW4gYmUgdG9sZCB0byBwYXJzZSBtb3JlIHRoYW4gb25lIHJlc29sdi5jb25mCitmaWxlLiBUaGlzIGlzIHVzZWZ1bCBvbiBhIGxhcHRvcCwgd2hlcmUgYm90aCBQUFAgYW5kIERIQ1AgbWF5IGJlIHVzZWQ6CitkbnNtYXNxIGNhbiBiZSBzZXQgdG8gcG9sbCBib3RoIAorLkkgL2V0Yy9wcHAvcmVzb2x2LmNvbmYgCithbmQKKy5JIC9ldGMvZGhjcGMvcmVzb2x2LmNvbmYgCithbmQgd2lsbCB1c2UgdGhlIGNvbnRlbnRzIG9mIHdoaWNoZXZlciBjaGFuZ2VkCitsYXN0LCBnaXZpbmcgYXV0b21hdGljIHN3aXRjaGluZyBiZXR3ZWVuIEROUyBzZXJ2ZXJzLgorLlBQCitVcHN0cmVhbSBzZXJ2ZXJzIG1heSBhbHNvIGJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lIG9yIGluCit0aGUgY29uZmlndXJhdGlvbiBmaWxlLiBUaGVzZSBzZXJ2ZXIgc3BlY2lmaWNhdGlvbnMgb3B0aW9uYWxseSB0YWtlIGEKK2RvbWFpbiBuYW1lIHdoaWNoIHRlbGxzIGRuc21hc3EgdG8gdXNlIHRoYXQgc2VydmVyIG9ubHkgdG8gZmluZCBuYW1lcworaW4gdGhhdCBwYXJ0aWN1bGFyIGRvbWFpbi4KKy5QUAorSW4gb3JkZXIgdG8gY29uZmlndXJlIGRuc21hc3EgdG8gYWN0IGFzIGNhY2hlIGZvciB0aGUgaG9zdCBvbiB3aGljaCBpdCBpcyBydW5uaW5nLCBwdXQgIm5hbWVzZXJ2ZXIgMTI3LjAuMC4xIiBpbgorLkkgL2V0Yy9yZXNvbHYuY29uZgordG8gZm9yY2UgbG9jYWwgcHJvY2Vzc2VzIHRvIHNlbmQgcXVlcmllcyB0bworZG5zbWFzcS4gVGhlbiBlaXRoZXIgc3BlY2lmeSB0aGUgdXBzdHJlYW0gc2VydmVycyBkaXJlY3RseSB0byBkbnNtYXNxCit1c2luZyAKKy5CIFwtLXNlcnZlcgorb3B0aW9ucyBvciBwdXQgdGhlaXIgYWRkcmVzc2VzIHJlYWwgaW4gYW5vdGhlciBmaWxlLCBzYXkKKy5JIC9ldGMvcmVzb2x2LmRuc21hc3EKK2FuZCBydW4gZG5zbWFzcSB3aXRoIHRoZSAKKy5CIFwtciAvZXRjL3Jlc29sdi5kbnNtYXNxCitvcHRpb24uIFRoaXMgc2Vjb25kIHRlY2huaXF1ZSBhbGxvd3MgZm9yIGR5bmFtaWMgdXBkYXRlIG9mIHRoZSBzZXJ2ZXIKK2FkZHJlc3NlcyBieSBQUFAgb3IgREhDUC4KKy5QUAorQWRkcmVzc2VzIGluIC9ldGMvaG9zdHMgd2lsbCAic2hhZG93IiBkaWZmZXJlbnQgYWRkcmVzc2VzIGZvciB0aGUgc2FtZQorbmFtZXMgaW4gdGhlIHVwc3RyZWFtIEROUywgc28gIm15Y29tcGFueS5jb20gMS4yLjMuNCIgaW4gL2V0Yy9ob3N0cyB3aWxsIGVuc3VyZSB0aGF0CitxdWVyaWVzIGZvciAibXljb21wYW55LmNvbSIgYWx3YXlzIHJldHVybiAxLjIuMy40IGV2ZW4gaWYgcXVlcmllcyBpbgordGhlIHVwc3RyZWFtIEROUyB3b3VsZCBvdGhlcndpc2UgcmV0dXJuIGEgZGlmZmVyZW50IGFkZHJlc3MuIFRoZXJlIGlzCitvbmUgZXhjZXB0aW9uIHRvIHRoaXM6IGlmIHRoZSB1cHN0cmVhbSBETlMgY29udGFpbnMgYSBDTkFNRSB3aGljaAorcG9pbnRzIHRvIGEgc2hhZG93ZWQgbmFtZSwgdGhlbiBsb29raW5nIHVwIHRoZSBDTkFNRSB0aHJvdWdoIGRuc21hc3EKK3dpbGwgcmVzdWx0IGluIHRoZSB1bnNoYWRvd2VkIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXJnZXQgb2YKK3RoZSBDTkFNRS4gVG8gd29yayBhcm91bmQgdGhpcywgYWRkIHRoZSBDTkFNRSB0byAvZXRjL2hvc3RzIHNvIHRoYXQKK3RoZSBDTkFNRSBpcyBzaGFkb3dlZCB0b28uCisKKy5QUAorVGhlIHRhZyBzeXN0ZW0gd29ya3MgYXMgZm9sbG93czogRm9yIGVhY2ggREhDUCByZXF1ZXN0LCBkbnNtYXNxCitjb2xsZWN0cyBhIHNldCBvZiB2YWxpZCB0YWdzIGZyb20gYWN0aXZlIGNvbmZpZ3VyYXRpb24gbGluZXMgd2hpY2gKK2luY2x1ZGUgc2V0Ojx0YWc+LCBpbmNsdWRpbmcgb25lIGZyb20gdGhlIAorLkIgZGhjcC1yYW5nZQordXNlZCB0byBhbGxvY2F0ZSB0aGUgYWRkcmVzcywgb25lIGZyb20gYW55IG1hdGNoaW5nIAorLkIgZGhjcC1ob3N0CisoYW5kICJrbm93biIgaWYgYSBkaGNwLWhvc3QgbWF0Y2hlcykgCitUaGUgdGFnICJib290cCIgaXMgc2V0IGZvciBCT09UUCByZXF1ZXN0cywgYW5kIGEgdGFnIHdob3NlIG5hbWUgaXMgdGhlIAorbmFtZSBvZiB0aGUgaW50ZXJmYWNlIG9uIHdoaWNoIHRoZSByZXF1ZXN0IGFycml2ZWQgaXMgYWxzbyBzZXQuCisKK0FueSBjb25maWd1cmF0aW9uIGxpbmVzIHdoaWNoIGluY2x1ZGUgb25lIG9yIG1vcmUgdGFnOjx0YWc+IGNvbnN0cnVjdHMKK3dpbGwgb25seSBiZSB2YWxpZCBpZiBhbGwgdGhhdCB0YWdzIGFyZSBtYXRjaGVkIGluIHRoZSBzZXQgZGVyaXZlZAorYWJvdmUuIFR5cGljYWxseSB0aGlzIGlzIGRoY3Atb3B0aW9uLgorLkIgZGhjcC1vcHRpb24gCit3aGljaCBoYXMgdGFncyB3aWxsIGJlIHVzZWQgaW4gcHJlZmVyZW5jZSAgdG8gYW4gdW50YWdnZWQgCisuQiBkaGNwLW9wdGlvbiwKK3Byb3ZpZGVkIHRoYXQgX2FsbF8gdGhlIHRhZ3MgbWF0Y2ggc29tZXdoZXJlIGluIHRoZQorc2V0IGNvbGxlY3RlZCBhcyBkZXNjcmliZWQgYWJvdmUuIFRoZSBwcmVmaXggJyEnIG9uIGEgdGFnIG1lYW5zICdub3QnCitzbyAtLWRoY3Atb3B0aW9uPXRhZzohcHVycGxlLDMsMS4yLjMuNCBzZW5kcyB0aGUgb3B0aW9uIHdoZW4gdGhlCit0YWcgcHVycGxlIGlzIG5vdCBpbiB0aGUgc2V0IG9mIHZhbGlkIHRhZ3MuIChJZiB1c2luZyB0aGlzIGluIGEKK2NvbW1hbmQgbGluZSByYXRoZXIgdGhhbiBhIGNvbmZpZ3VyYXRpb24gZmlsZSwgYmUgc3VyZSB0byBlc2NhcGUgISwKK3doaWNoIGlzIGEgc2hlbGwgbWV0YWNoYXJhY3RlcikKKworV2hlbiBzZWxlY3RpbmcgZGhjcC1vcHRpb25zLCBhIHRhZyBmcm9tIGRoY3AtcmFuZ2UgaXMgc2Vjb25kIGNsYXNzCityZWxhdGl2ZSB0byBvdGhlciB0YWdzLCB0byBtYWtlIGl0IGVhc3kgdG8gb3ZlcnJpZGUgb3B0aW9ucyBmb3IKK2luZGl2aWR1YWwgaG9zdHMsIHNvIAorLkIgZGhjcC1yYW5nZT1zZXQ6aW50ZXJmYWNlMSwuLi4uLi4KKy5CIGRoY3AtaG9zdD1zZXQ6bXlob3N0LC4uLi4uCisuQiBkaGNwLW9wdGlvbj10YWc6aW50ZXJmYWNlMSxvcHRpb246bmlzLWRvbWFpbiwiZG9tYWluMSIKKy5CIGRoY3Atb3B0aW9uPXRhZzpteWhvc3Qsb3B0aW9uOm5pcy1kb21haW4sImRvbWFpbjIiCit3aWxsIHNldCB0aGUgTklTLWRvbWFpbiB0byBkb21haW4xIGZvciBob3N0cyBpbiB0aGUgcmFuZ2UsIGJ1dAorb3ZlcnJpZGUgdGhhdCB0byBkb21haW4yIGZvciBhIHBhcnRpY3VsYXIgaG9zdC4KKworLlBQCitOb3RlIHRoYXQgZm9yIAorLkIgZGhjcC1yYW5nZSAKK2JvdGggdGFnOjx0YWc+IGFuZCBzZXQ6PHRhZz4gYXJlIGFsbG93ZWQsIHRvIGJvdGggc2VsZWN0IHRoZSByYW5nZSBpbgordXNlIGJhc2VkIG9uIChlZykgZGhjcC1ob3N0LCBhbmQgdG8gYWZmZWN0IHRoZSBvcHRpb25zIHNlbnQsIGJhc2VkIG9uCit0aGUgcmFuZ2Ugc2VsZWN0ZWQuCisKK1RoaXMgc3lzdGVtIGV2b2x2ZWQgZnJvbSBhbiBlYXJsaWVyLCBtb3JlIGxpbWl0ZWQgb25lIGFuZCBmb3IgYmFja3dhcmQKK2NvbXBhdGliaWxpdHkgIm5ldDoiIG1heSBiZSB1c2VkIGluc3RlYWQgb2YgInRhZzoiIGFuZCAic2V0OiIgbWF5IGJlCitvbWl0dGVkLiAoRXhjZXB0IGluIAorLkIgZGhjcC1ob3N0LAord2hlcmUgIm5ldDoiIG1heSBiZSB1c2VkIGluc3RlYWQgb2YgInNldDoiLikgRm9yIHRoZSBzYW1lIHJlYXNvbiwgJyMnCittYXkgYmUgdXNlZCBpbnN0ZWFkIG9mICchJyB0byBpbmRpY2F0ZSBOT1QuCisuUFAgCitUaGUgREhDUCBzZXJ2ZXIgaW4gZG5zbWFzcSB3aWxsIGZ1bmN0aW9uIGFzIGEgQk9PVFAgc2VydmVyIGFsc28sCitwcm92aWRlZCB0aGF0IHRoZSBNQUMgYWRkcmVzcyBhbmQgSVAgYWRkcmVzcyBmb3IgY2xpZW50cyBhcmUgZ2l2ZW4sCitlaXRoZXIgdXNpbmcgCisuQiBkaGNwLWhvc3QgCitjb25maWd1cmF0aW9ucyBvciBpbgorLkkgL2V0Yy9ldGhlcnMKKywgYW5kIGEKKy5CIGRoY3AtcmFuZ2UgCitjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBwcmVzZW50IHRvIGFjdGl2YXRlIHRoZSBESENQIHNlcnZlcgorb24gYSBwYXJ0aWN1bGFyIG5ldHdvcmsuIChTZXR0aW5nIC0tYm9vdHAtZHluYW1pYyByZW1vdmVzIHRoZSBuZWVkIGZvcgorc3RhdGljIGFkZHJlc3MgbWFwcGluZ3MuKSBUaGUgZmlsZW5hbWUKK3BhcmFtZXRlciBpbiBhIEJPT1RQIHJlcXVlc3QgaXMgdXNlZCBhcyBhIHRhZywKK2FzIGlzIHRoZSB0YWcgImJvb3RwIiwgYWxsb3dpbmcgc29tZSBjb250cm9sIG92ZXIgdGhlIG9wdGlvbnMgcmV0dXJuZWQgdG8KK2RpZmZlcmVudCBjbGFzc2VzIG9mIGhvc3RzLgorCisuU0ggQVVUSE9SSVRBVElWRSBDT05GSUdVUkFUSU9OCisuUFAgCitDb25maWd1cmluZyBkbnNtYXNxIHRvIGFjdCBhcyBhbiBhdXRob3JpdGF0aXZlIEROUyBzZXJ2ZXIgaXMKK2NvbXBsaWNhdGVkIGJ5IHRoZSBmYWN0IHRoYXQgaXQgaW52b2x2ZXMgY29uZmlndXJhdGlvbiBvZiBleHRlcm5hbCBETlMKK3NlcnZlcnMgdG8gcHJvdmlkZSBkZWxlZ2F0aW9uLiBXZSB3aWxsIHdhbGsgdGhyb3VnaCB0aHJlZSBzY2VuYXJpb3Mgb2YKK2luY3JlYXNpbmcgY29tcGxleGl0eS4gUHJlcmVxdWlzaXRlcyBmb3IgYWxsIG9mIHRoZXNlIHNjZW5hcmlvcworYXJlIGEgZ2xvYmFsbHkgYWNjZXNzaWJsZSBJUCBhZGRyZXNzLCBhbiBBIG9yIEFBQUEgcmVjb3JkIHBvaW50aW5nIHRvIHRoYXQgYWRkcmVzcywKK2FuZCBhbiBleHRlcm5hbCBETlMgc2VydmVyIGNhcGFibGUgb2YgZG9pbmcgZGVsZWdhdGlvbiBvZiB0aGUgem9uZSBpbgorcXVlc3Rpb24uIEZvciB0aGUgZmlyc3QgcGFydCBvZiB0aGlzIGV4cGxhbmF0aW9uLCB3ZSB3aWxsIGNhbGwgdGhlIEEgKG9yIEFBQUEpIHJlY29yZAorZm9yIHRoZSBnbG9iYWxseSBhY2Nlc3NpYmxlIGFkZHJlc3Mgc2VydmVyLmV4YW1wbGUuY29tLCBhbmQgdGhlIHpvbmUKK2ZvciB3aGljaCBkbnNtYXNxIGlzIGF1dGhvcml0YXRpdmUgb3VyLnpvbmUuY29tLgorCitUaGUgc2ltcGxlc3QgY29uZmlndXJhdGlvbiBjb25zaXN0cyBvZiB0d28gbGluZXMgb2YgZG5zbWFzcSBjb25maWd1cmF0aW9uOyBzb21ldGhpbmcgbGlrZQorCisubmYKKy5CIGF1dGgtc2VydmVyPXNlcnZlci5leGFtcGxlLmNvbSxldGgwCisuQiBhdXRoLXpvbmU9b3VyLnpvbmUuY29tLDEuMi4zLjAvMjQKKy5maQorCithbmQgdHdvIHJlY29yZHMgaW4gdGhlIGV4dGVybmFsIEROUworCisubmYKK3NlcnZlci5leGFtcGxlLmNvbSAgICAgICBBICAgIDE5Mi4wLjQzLjEwCitvdXIuem9uZS5jb20gICAgICAgICAgICBOUyAgICBzZXJ2ZXIuZXhhbXBsZS5jb20KKy5maQorCitldGgwIGlzIHRoZSBleHRlcm5hbCBuZXR3b3JrIGludGVyZmFjZSBvbiB3aGljaCBkbnNtYXNxIGlzIGxpc3RlbmluZywKK2FuZCBoYXMgKGdsb2JhbGx5IGFjY2Vzc2libGUpIGFkZHJlc3MgMTkyLjAuNDMuMTAuIAorCitOb3RlIHRoYXQgdGhlIGV4dGVybmFsIElQIGFkZHJlc3MgbWF5IHdlbGwgYmUgZHluYW1pYyAoaWUgYXNzaWduZWQKK2Zyb20gYW4gSVNQIGJ5IERIQ1Agb3IgUFBQKSBJZiBzbywgdGhlIEEgcmVjb3JkIG11c3QgYmUgbGlua2VkIHRvIHRoaXMKK2R5bmFtaWMgYXNzaWdubWVudCBieSBvbmUgb2YgdGhlIHVzdWFsIGR5bmFtaWMtRE5TIHN5c3RlbXMuCisKK0EgbW9yZSBjb21wbGV4LCBidXQgcHJhY3RpY2FsbHkgdXNlZnVsIGNvbmZpZ3VyYXRpb24gaGFzIHRoZSBhZGRyZXNzCityZWNvcmQgZm9yIHRoZSBnbG9iYWxseSBhY2Nlc3NpYmxlIElQIGFkZHJlc3MgcmVzaWRpbmcgaW4gdGhlCithdXRob3JpdGF0aXZlIHpvbmUgd2hpY2ggZG5zbWFzcSBpcyBzZXJ2aW5nLCB0eXBpY2FsbHkgYXQgdGhlIHJvb3QuIE5vdword2UgaGF2ZQorCisubmYKKy5CIGF1dGgtc2VydmVyPW91ci56b25lLmNvbSxldGgwCisuQiBhdXRoLXpvbmU9b3VyLnpvbmUuY29tLDEuMi4zLjAvMjQKKy5maQorCisubmYKK291ci56b25lLmNvbSAgICAgICAgICAgICBBICAgIDEuMi4zLjQKK291ci56b25lLmNvbSAgICAgICAgICAgIE5TICAgIG91ci56b25lLmNvbQorLmZpCisKK1RoZSBBIHJlY29yZCBmb3Igb3VyLnpvbmUuY29tIGhhcyBub3cgYmVjb21lIGEgZ2x1ZSByZWNvcmQsIGl0IHNvbHZlcwordGhlIGNoaWNrZW4tYW5kLWVnZyBwcm9ibGVtIG9mIGZpbmRpbmcgdGhlIElQIGFkZHJlc3Mgb2YgdGhlCituYW1lc2VydmVyIGZvciBvdXIuem9uZS5jb20gd2hlbiB0aGUgQSByZWNvcmQgaXMgd2l0aGluIHRoYXQKK3pvbmUuIE5vdGUgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHJvbGUgb2YgdGhpcyByZWNvcmQ6IGFzIGRuc21hc3EgaXMKK25vdyBhdXRob3JpdGF0aXZlIGZyb20gb3VyLnpvbmUuY29tIGl0IHRvbyBtdXN0IHByb3ZpZGUgdGhpcworcmVjb3JkLiBJZiB0aGUgZXh0ZXJuYWwgYWRkcmVzcyBpcyBzdGF0aWMsIHRoaXMgY2FuIGJlIGRvbmUgd2l0aCBhbgorLkIgL2V0Yy9ob3N0cyAKK2VudHJ5IG9yIAorLkIgLS1ob3N0LXJlY29yZC4KKworLm5mCisuQiBhdXRoLXNlcnZlcj1vdXIuem9uZS5jb20sZXRoMAorLkIgaG9zdC1yZWNvcmQ9b3VyLnpvbmUuY29tLDEuMi4zLjQKKy5CIGF1dGgtem9uZT1vdXIuem9uZS5jb20sMS4yLjMuMC8yNAorLmZpCisKK0lmIHRoZSBleHRlcm5hbCBhZGRyZXNzIGlzIGR5bmFtaWMsIHRoZSBhZGRyZXNzCithc3NvY2lhdGVkIHdpdGggb3VyLnpvbmUuY29tIG11c3QgYmUgZGVyaXZlZCBmcm9tIHRoZSBhZGRyZXNzIG9mIHRoZQorcmVsZXZhbnQgaW50ZXJmYWNlLiBUaGlzIGlzIGRvbmUgdXNpbmcgCisuQiBpbnRlcmZhY2UtbmFtZQorU29tZXRoaW5nIGxpa2U6CisKKy5uZgorLkIgYXV0aC1zZXJ2ZXI9b3VyLnpvbmUuY29tLGV0aDAKKy5CIGludGVyZmFjZS1uYW1lPW91ci56b25lLmNvbSxldGgwCisuQiBhdXRoLXpvbmU9b3VyLnpvbmUuY29tLDEuMi4zLjAvMjQsZXRoMAorLmZpCisKKyhUaGUgImV0aDAiIGFyZ3VtZW50IGluIGF1dGgtem9uZSBhZGRzIHRoZSBzdWJuZXQgY29udGFpbmluZyBldGgwJ3MKK2R5bmFtaWMgYWRkcmVzcyB0byB0aGUgem9uZSwgc28gdGhhdCB0aGUgaW50ZXJmYWNlLW5hbWUgcmV0dXJucyB0aGUKK2FkZHJlc3MgaW4gb3V0c2lkZSBxdWVyaWVzLikKKworT3VyIGZpbmFsIGNvbmZpZ3VyYXRpb24gYnVpbGRzIG9uIHRoYXQgYWJvdmUsIGJ1dCBhbHNvIGFkZHMgYQorc2Vjb25kYXJ5IEROUyBzZXJ2ZXIuIFRoaXMgaXMgYW5vdGhlciBETlMgc2VydmVyIHdoaWNoIGxlYXJucyB0aGUgRE5TIGRhdGEKK2ZvciB0aGUgem9uZSBieSBkb2luZyB6b25lcyB0cmFuc2ZlciwgYW5kIGFjdHMgYXMgYSBiYWNrdXAgc2hvdWxkCit0aGUgcHJpbWFyeSBzZXJ2ZXIgYmVjb21lIGluYWNjZXNzaWJsZS4gVGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlCitzZWNvbmRhcnkgaXMgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzIG1hbi1wYWdlLCBidXQgdGhlIGV4dHJhCitjb25maWd1cmF0aW9uIG9mIGRuc21hc3EgaXMgc2ltcGxlOgorCisubmYKKy5CIGF1dGgtc2VjLXNlcnZlcnM9c2Vjb25kYXJ5Lm15aXNwLmNvbQorLmZpCisKK2FuZAorCisubmYKK291ci56b25lLmNvbSAgICAgICAgICAgTlMgICAgc2Vjb25kYXJ5Lm15aXNwLmNvbQorLmZpCisKK0FkZGluZyBhdXRoLXNlYy1zZXJ2ZXJzIGVuYWJsZXMgem9uZSB0cmFuc2ZlciBpbiBkbnNtYXNxLCB0byBhbGxvdyB0aGUKK3NlY29uZGFyeSB0byBjb2xsZWN0IHRoZSBETlMgZGF0YS4gSWYgeW91IHdpc2ggdG8gcmVzdHJpY3QgdGhpcyBkYXRhCit0byBwYXJ0aWN1bGFyIGhvc3RzIHRoZW4KKworLm5mCisuQiBhdXRoLXBlZXI9PElQIGFkZHJlc3Mgb2Ygc2Vjb25kYXJ5PgorLmZpCisKK3dpbGwgZG8gc28uCisKK0Ruc21hc3EgYWN0cyBhcyBhbiBhdXRob3JpdGF0aXZlIHNlcnZlciBmb3IgIGluLWFkZHIuYXJwYSBhbmQKK2lwNi5hcnBhIGRvbWFpbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJuZXRzIGdpdmVuIGluIGF1dGgtem9uZQorZGVjbGFyYXRpb25zLCBzbyByZXZlcnNlIChhZGRyZXNzIHRvIG5hbWUpIGxvb2t1cHMgY2FuIGJlIHNpbXBseQorY29uZmlndXJlZCB3aXRoIGEgc3VpdGFibGUgTlMgcmVjb3JkLCBmb3IgaW5zdGFuY2UgaW4gdGhpcyBleGFtcGxlLAord2hlcmUgd2UgYWxsb3cgMS4yLjMuMC8yNCBhZGRyZXNzZXMuCisKKy5uZgorIDMuMi4xLmluLWFkZHIuYXJwYSAgTlMgICAgb3VyLnpvbmUuY29tCisuZmkKKworTm90ZSB0aGF0IGF0IHByZXNlbnQsIHJldmVyc2UgKGluLWFkZHIuYXJwYSBhbmQgaXA2LmFycGEpIHpvbmVzIGFyZQorbm90IGF2YWlsYWJsZSBpbiB6b25lIHRyYW5zZmVycywgc28gdGhlcmUgaXMgbm8gcG9pbnQgYXJyYW5naW5nCitzZWNvbmRhcnkgc2VydmVycyBmb3IgcmV2ZXJzZSBsb29rdXBzLgorCisuUFAKK1doZW4gZG5zbWFzcSBpcyBjb25maWd1cmVkIHRvIGFjdCBhcyBhbiBhdXRob3JpdGF0aXZlIHNlcnZlciwgdGhlCitmb2xsb3dpbmcgZGF0YSBpcyB1c2VkIHRvIHBvcHVsYXRlIHRoZSBhdXRob3JpdGF0aXZlIHpvbmUuCisuUFAKKy5CIC0tbXgtaG9zdCwgLS1zcnYtaG9zdCwgLS1kbnMtcnIsIC0tdHh0LXJlY29yZCwgLS1uYXB0ci1yZWNvcmQKKywgYXMgbG9uZyBhcyB0aGUgcmVjb3JkIG5hbWVzIGFyZSBpbiB0aGUgYXV0aG9yaXRhdGl2ZSBkb21haW4uCisuUFAKKy5CIC0tY25hbWUKK2FzIGxvbmcgYXMgdGhlIHJlY29yZCBuYW1lIGlzIGluICB0aGUgYXV0aG9yaXRhdGl2ZSBkb21haW4uIElmIHRoZQordGFyZ2V0IG9mIHRoZSBDTkFNRSBpcyB1bnF1YWxpZmllZCwgdGhlbiBpdCAgaXMgcXVhbGlmaWVkIHdpdGggdGhlCithdXRob3JpdGF0aXZlIHpvbmUgbmFtZS4KKy5QUAorSVB2NCBhbmQgSVB2NiBhZGRyZXNzZXMgZnJvbSAvZXRjL2hvc3RzIChhbmQgCisuQiAtLWFkZG4taG9zdHMKKykgYW5kCisuQiAtLWhvc3QtcmVjb3JkCithbmQgCisuQiAtLWludGVyZmFjZS1uYW1lCitwcm92aWRlZCB0aGUgYWRkcmVzcyBmYWxscyBpbnRvIG9uZSBvZiB0aGUgc3VibmV0cyBzcGVjaWZpZWQgaW4gdGhlCisuQiAtLWF1dGgtem9uZS4KKy5QUAorQWRkcmVzc2VzIG9mIERIQ1AgbGVhc2VzLCBwcm92aWRlZCB0aGUgYWRkcmVzcyBmYWxscyBpbnRvIG9uZSBvZiB0aGUgc3VibmV0cyBzcGVjaWZpZWQgaW4gdGhlCisuQiAtLWF1dGgtem9uZS4KKyhJZiBjb250cnVjdGVkIERIQ1AgcmFuZ2VzIGFyZSBpcyB1c2UsIHdoaWNoIGRlcGVuZCBvbiB0aGUgYWRkcmVzcyBkeW5hbWljYWxseSAKK2Fzc2lnbmVkIHRvIGFuIGludGVyZmFjZSwgdGhlbiB0aGUgZm9ybSBvZgorLkIgLS1hdXRoLXpvbmUKK3doaWNoIGRlZmluZXMgc3VibmV0cyBieSB0aGUgZHluYW1pYyBhZGRyZXNzIG9mIGFuIGludGVyZmFjZSBzaG91bGQKK2JlIHVzZWQgdG8gZW5zdXJlIHRoaXMgY29uZGl0aW9uIGlzIG1ldC4pCisuUFAgCitJbiB0aGUgZGVmYXVsdCBtb2RlLCB3aGVyZSBhIERIQ1AgbGVhc2UKK2hhcyBhbiB1bnF1YWxpZmllZCBuYW1lLCBhbmQgcG9zc2libHkgYSBxdWFsaWZpZWQgbmFtZSBjb25zdHJ1Y3RlZAordXNpbmcgCisuQiAtLWRvbWFpbgordGhlbiB0aGUgbmFtZSBpbiB0aGUgYXV0aG9yaXRhdGl2ZSB6b25lIGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlCit1bnF1YWxpZmllZCBuYW1lIGFuZCB0aGUgem9uZSdzIGRvbWFpbi4gVGhpcyBtYXkgb3IgbWF5IG5vdCBlcXVhbAordGhhdCBzcGVjaWZpZWQgYnkgCisuQiAtLWRvbWFpbi4KK0lmIAorLkIgLS1kaGNwLWZxZG4KK2lzIHNldCwgdGhlbiB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWVzIGFzc29jaWF0ZWQgd2l0aCBESENQIGxlYXNlcyBhcmUKK3VzZWQsIGFuZCBtdXN0IG1hdGNoIHRoZSB6b25lJ3MgZG9tYWluLgorIAorCisKKy5TSCBFWElUIENPREVTCisuUFAKKzAgLSBEbnNtYXNxIHN1Y2Nlc3NmdWxseSBmb3JrZWQgaW50byB0aGUgYmFja2dyb3VuZCwgb3IgdGVybWluYXRlZAorbm9ybWFsbHkgaWYgYmFja2dyb3VuZGluZyBpcyBub3QgZW5hYmxlZC4KKy5QUAorMSAtIEEgcHJvYmxlbSB3aXRoIGNvbmZpZ3VyYXRpb24gd2FzIGRldGVjdGVkLgorLlBQCisyIC0gQSBwcm9ibGVtIHdpdGggbmV0d29yayBhY2Nlc3Mgb2NjdXJyZWQgKGFkZHJlc3MgaW4gdXNlLCBhdHRlbXB0Cit0byB1c2UgcHJpdmlsZWdlZCBwb3J0cyB3aXRob3V0IHBlcm1pc3Npb24pLgorLlBQCiszIC0gQSBwcm9ibGVtIG9jY3VycmVkIHdpdGggYSBmaWxlc3lzdGVtIG9wZXJhdGlvbiAobWlzc2luZworZmlsZS9kaXJlY3RvcnksIHBlcm1pc3Npb25zKS4KKy5QUAorNCAtIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuCisuUFAKKzUgLSBPdGhlciBtaXNjZWxsYW5lb3VzIHByb2JsZW0uCisuUFAKKzExIG9yIGdyZWF0ZXIgLSBhIG5vbiB6ZXJvIHJldHVybiBjb2RlIHdhcyByZWNlaXZlZCBmcm9tIHRoZQorbGVhc2Utc2NyaXB0IHByb2Nlc3MgImluaXQiIGNhbGwuIFRoZSBleGl0IGNvZGUgZnJvbSBkbnNtYXNxIGlzIHRoZQorc2NyaXB0J3MgZXhpdCBjb2RlIHdpdGggMTAgYWRkZWQuIAorCisuU0ggTElNSVRTCitUaGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHJlc291cmNlIGxpbWl0cyBpbiBkbnNtYXNxIGFyZSBnZW5lcmFsbHkKK2NvbnNlcnZhdGl2ZSwgYW5kIGFwcHJvcHJpYXRlIGZvciBlbWJlZGRlZCByb3V0ZXIgdHlwZSBkZXZpY2VzIHdpdGgKK3Nsb3cgcHJvY2Vzc29ycyBhbmQgbGltaXRlZCBtZW1vcnkuIE9uIG1vcmUgY2FwYWJsZSBoYXJkd2FyZSwgaXQgaXMKK3Bvc3NpYmxlIHRvIGluY3JlYXNlIHRoZSBsaW1pdHMsIGFuZCBoYW5kbGUgbWFueSBtb3JlIGNsaWVudHMuIFRoZQorZm9sbG93aW5nIGFwcGxpZXMgdG8gZG5zbWFzcS0yLjM3OiBlYXJsaWVyIHZlcnNpb25zIGRpZCBub3Qgc2NhbGUgYXMgd2VsbC4KKyAKKy5QUAorRG5zbWFzcSBpcyBjYXBhYmxlIG9mIGhhbmRsaW5nIEROUyBhbmQgREhDUCBmb3IgYXQgbGVhc3QgYSB0aG91c2FuZAorY2xpZW50cy4gVGhlIERIQ1AgbGVhc2UgdGltZXMgc2hvdWxkIG5vdCBiZSB2ZXJ5IHNob3J0IChsZXNzIHRoYW4gb25lIGhvdXIpLiBUaGUKK3ZhbHVlIG9mIAorLkIgLS1kbnMtZm9yd2FyZC1tYXggCitjYW4gYmUgaW5jcmVhc2VkOiBzdGFydCB3aXRoIGl0IGVxdWFsIHRvCit0aGUgbnVtYmVyIG9mIGNsaWVudHMgYW5kIGluY3JlYXNlIGlmIEROUyBzZWVtcyBzbG93LiBOb3RlIHRoYXQgRE5TCitwZXJmb3JtYW5jZSBkZXBlbmRzIHRvbyBvbiB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIHVwc3RyZWFtCituYW1lc2VydmVycy4gVGhlIHNpemUgb2YgdGhlIEROUyBjYWNoZSBtYXkgYmUgaW5jcmVhc2VkOiB0aGUgaGFyZAorbGltaXQgaXMgMTAwMDAgbmFtZXMgYW5kIHRoZSBkZWZhdWx0ICgxNTApIGlzIHZlcnkgbG93LiBTZW5kaW5nCitTSUdVU1IxIHRvIGRuc21hc3EgbWFrZXMgaXQgbG9nIGluZm9ybWF0aW9uIHdoaWNoIGlzIHVzZWZ1bCBmb3IgdHVuaW5nCit0aGUgY2FjaGUgc2l6ZS4gU2VlIHRoZSAKKy5CIE5PVEVTCitzZWN0aW9uIGZvciBkZXRhaWxzLgorCisuUFAKK1RoZSBidWlsdC1pbiBURlRQIHNlcnZlciBpcyBjYXBhYmxlIG9mIG1hbnkgc2ltdWx0YW5lb3VzIGZpbGUKK3RyYW5zZmVyczogdGhlIGFic29sdXRlIGxpbWl0IGlzIHJlbGF0ZWQgdG8gdGhlIG51bWJlciBvZiBmaWxlLWhhbmRsZXMKK2FsbG93ZWQgdG8gYSBwcm9jZXNzIGFuZCB0aGUgYWJpbGl0eSBvZiB0aGUgc2VsZWN0KCkgc3lzdGVtIGNhbGwgdG8KK2NvcGUgd2l0aCBsYXJnZSBudW1iZXJzIG9mIGZpbGUgaGFuZGxlcy4gSWYgdGhlIGxpbWl0IGlzIHNldCB0b28gaGlnaAordXNpbmcgCisuQiAtLXRmdHAtbWF4CitpdCB3aWxsIGJlIHNjYWxlZCBkb3duIGFuZCB0aGUgYWN0dWFsIGxpbWl0IGxvZ2dlZCBhdAorc3RhcnQtdXAuIE5vdGUgdGhhdCBtb3JlIHRyYW5zZmVycyBhcmUgcG9zc2libGUgd2hlbiB0aGUgc2FtZSBmaWxlIGlzCitiZWluZyBzZW50IHRoYW4gd2hlbiBlYWNoIHRyYW5zZmVyIHNlbmRzIGEgZGlmZmVyZW50IGZpbGUuCisKKy5QUAorSXQgaXMgcG9zc2libGUgdG8gdXNlIGRuc21hc3EgdG8gYmxvY2sgV2ViIGFkdmVydGlzaW5nIGJ5IHVzaW5nIGEgbGlzdAorb2Yga25vd24gYmFubmVyLWFkIHNlcnZlcnMsIGFsbCByZXNvbHZpbmcgdG8gMTI3LjAuMC4xIG9yIDAuMC4wLjAsIGluCisuQiAvZXRjL2hvc3RzIAorb3IgYW4gYWRkaXRpb25hbCBob3N0cyBmaWxlLiBUaGUgbGlzdCBjYW4gYmUgdmVyeSBsb25nLCAKK2Ruc21hc3EgaGFzIGJlZW4gdGVzdGVkIHN1Y2Nlc3NmdWxseSB3aXRoIG9uZSBtaWxsaW9uIG5hbWVzLiBUaGF0IHNpemUKK2ZpbGUgbmVlZHMgYSAxR0h6IHByb2Nlc3NvciBhbmQgYWJvdXQgNjBNYiBvZiBSQU0uCisKKy5TSCBJTlRFUk5BVElPTkFMSVNBVElPTgorRG5zbWFzcSBjYW4gYmUgY29tcGlsZWQgdG8gc3VwcG9ydCBpbnRlcm5hdGlvbmFsaXNhdGlvbi4gVG8gZG8gdGhpcywKK3RoZSBtYWtlIHRhcmdldHMgImFsbC1pMThuIiBhbmQgImluc3RhbGwtaTE4biIgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZgordGhlIHN0YW5kYXJkIHRhcmdldHMgImFsbCIgYW5kICJpbnN0YWxsIi4gV2hlbiBpbnRlcm5hdGlvbmFsaXNhdGlvbgoraXMgY29tcGlsZWQgaW4sIGRuc21hc3Egd2lsbCBwcm9kdWNlIGxvZyBtZXNzYWdlcyBpbiB0aGUgbG9jYWwKK2xhbmd1YWdlIGFuZCBzdXBwb3J0IGludGVybmF0aW9uYWxpc2VkIGRvbWFpbiBuYW1lcyAoSUROKS4gRG9tYWluCituYW1lcyBpbiAvZXRjL2hvc3RzLCAvZXRjL2V0aGVycyBhbmQgL2V0Yy9kbnNtYXNxLmNvbmYgd2hpY2ggY29udGFpbgorbm9uLUFTQ0lJIGNoYXJhY3RlcnMgd2lsbCBiZSB0cmFuc2xhdGVkIHRvIHRoZSBETlMtaW50ZXJuYWwgcHVueWNvZGUKK3JlcHJlc2VudGF0aW9uLiBOb3RlIHRoYXQKK2Ruc21hc3EgZGV0ZXJtaW5lcyBib3RoIHRoZSBsYW5ndWFnZSBmb3IgbWVzc2FnZXMgYW5kIHRoZSBhc3N1bWVkCitjaGFyc2V0IGZvciBjb25maWd1cmF0aW9uCitmaWxlcyBmcm9tIHRoZSBMQU5HIGVudmlyb25tZW50IHZhcmlhYmxlLiBUaGlzIHNob3VsZCBiZSBzZXQgdG8gdGhlIHN5c3RlbQorZGVmYXVsdCB2YWx1ZSBieSB0aGUgc2NyaXB0IHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBzdGFydGluZworZG5zbWFzcS4gV2hlbiBlZGl0aW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLCBiZSBjYXJlZnVsIHRvIGRvIHNvCit1c2luZyBvbmx5IHRoZSBzeXN0ZW0tZGVmYXVsdCBsb2NhbGUgYW5kIG5vdCB1c2VyLXNwZWNpZmljIG9uZSwgc2luY2UKK2Ruc21hc3EgaGFzIG5vIGRpcmVjdCB3YXkgb2YgZGV0ZXJtaW5pbmcgdGhlIGNoYXJzZXQgaW4gdXNlLCBhbmQgbXVzdAorYXNzdW1lIHRoYXQgaXQgaXMgdGhlIHN5c3RlbSBkZWZhdWx0LiAKKyAKKy5TSCBGSUxFUworLklSIC9ldGMvZG5zbWFzcS5jb25mIAorCisuSVIgL3Vzci9sb2NhbC9ldGMvZG5zbWFzcS5jb25mCisKKy5JUiAvZXRjL3Jlc29sdi5jb25mCisuSVIgL3Zhci9ydW4vZG5zbWFzcS9yZXNvbHYuY29uZgorLklSIC9ldGMvcHBwL3Jlc29sdi5jb25mCisuSVIgL2V0Yy9kaGNwYy9yZXNvbHYuY29uZgorCisuSVIgL2V0Yy9ob3N0cworCisuSVIgL2V0Yy9ldGhlcnMKKworLklSIC92YXIvbGliL21pc2MvZG5zbWFzcS5sZWFzZXMgCisKKy5JUiAvdmFyL2RiL2Ruc21hc3EubGVhc2VzCisKKy5JUiAvdmFyL3J1bi9kbnNtYXNxLnBpZAorLlNIIFNFRSBBTFNPCisuQlIgaG9zdHMgKDUpLCAKKy5CUiByZXNvbHZlciAoNSkKKy5TSCBBVVRIT1IKK1RoaXMgbWFudWFsIHBhZ2Ugd2FzIHdyaXR0ZW4gYnkgU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4uCisKKwpkaWZmIC0tZ2l0IGEvbWFuL2VzL2Ruc21hc3EuOCBiL21hbi9lcy9kbnNtYXNxLjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVlNGI3MgotLS0gL2Rldi9udWxsCisrKyBiL21hbi9lcy9kbnNtYXNxLjgKQEAgLTAsMCArMSwxNTE3IEBACisuVEggRE5TTUFTUSA4CisuU0ggTk9NQlJFCitkbnNtYXNxIFwtIFVuIGxpZ2VybyBzZXJ2aWRvciBESENQIHkgRE5TIGNvbiBjYWNo6S4KKy5TSCBTSU5PUFNJUworLkIgZG5zbWFzcQorLkkgW09QQ0lPTl0uLi4KKy5TSCAiREVTQ1JJUENJ004iCisuQlIgZG5zbWFzcQorZXMgdW4gbGlnZXJvIHNlcnZpZG9yIEROUywgVEZUUCB5IERIQ1AuIFN1IHByb3Dzc2l0byBlcyBwcm92ZWVyIHNlcnZpY2lvcyBETlMKK3kgREhDUCBhIHVuYSByZWQgZGUg4XJlYSBsb2NhbC4KKy5QUAorRG5zbWFzcSBhY2VwdGEgYvpzcXVlZGFzIEROUyB5IGxhcyByZXNwb25kZSBkZXNkZSB1biBwZXF1ZfFvCitjYWNo6SBsb2NhbCwgbyBsYXMgcmVlbnbtYSBoYWNpYSB1biBzZXJ2aWRvciBETlMgcmVhbCByZWN1cnNpdm8uCitDYXJnYSBlbCBjb250ZW5pZG8gZGUgL2V0Yy9ob3N0cywgZGUgdGFsIGZvcm1hIHF1ZSBub21icmVzIGRlCitob3N0cyBsb2NhbGVzIGxvcyBjdWFsZXMgbm8gYXBhcmVjZW4gZW4gZWwgRE5TIG11bmRpYWwgcHVlZGFuIHNlcgorcmVzdWVsdG9zLiBUYW1iaeluIHJlc3BvbmRlIGEgYvpzcXVlZGFzIEROUyBwYXJhIGhvc3RzIGNvbmZpZ3VyYWRvcwordu1hIERIQ1AuCisuUFAKK0VsIHNlcnZpZG9yIERIQ1AgZG5zbWFzcSBpbmNsdXllIHNvcG9ydGUgcGFyYSBhc2lnbmFjafNuIGRlIGRpcmVjY2lvbmVzCitlc3ThdGljYXMgeSByZWRlcyBt+mx0aXBsZXMuIEF1dG9t4XRpY2FtZW50ZSBlbnbtYSB1biBwcmVkZXRlcm1pbmFkbyBzZW5zaWJsZSBkZQorb3BjaW9uZXMgREhDUCwgeSBwdWVkZSBzZXIgY29uZmlndXJhZG8gcGFyYSBlbnZpYXIgY3VhbHF1aWVyIG9wY2lvbmVzIERIQ1AgZGVzZWFkYXMsCitpbmNsdXllbmRvIG9wY2lvbmVzIGVuY2Fwc3VsYWRhcyBwb3IgdmVuZGVkb3Jlcy4gSW5jbHV5ZSB1biBzZXJ2aWRvciBzZWd1cm8KK1RGVFAgc29sby1sZWN0dXJhIHBhcmEgcGVybWl0aXIgZWwgaW5pY2lvIHbtYSByZWQvUFhFIGRlIGhvc3RzIERIQ1AuIFRhbWLtZW4KK2luY2x1eWUgc29wb3J0ZSBwYXJhIEJPT1RQLgorLlBQCitEbnNtYXNxCitpbmNsdXllIHNvcG9ydGUgSVB2NiBwYXJhIEROUywgcGVybyBubyBwYXJhIERIQ1AuCisuU0ggT1BDSU9ORVMKK07zdGVzZSBxdWUgZW4gZ2VuZXJhbCBwYXLhbWV0cm9zIGF1c2VudGVzIHNvbiBwZXJtaXRpZG9zIHkgZGVzaGFiaWxpdGFuCitmdW5jaW9uZXMsIHBvciBlamVtcGxvICItLXBpZC1maWxlPSIgZGVzaGFiaWxpdGEgbGEgZXNjcml0dXJhIGRlIHVuCithcmNoaXZvIFBJRC4gRW4gQlNELCBhIG1lbm9zIHF1ZSBsYSBsaWJyZXLtYSBHTlUgZ2V0b3B0IGVzdOkgZW5sYXphZGEsCitsYSBmb3JtYSBsYXJnYSBkZSBsYXMgb3BjaW9uZXMgbm8gZnVuY2lvbmEgZW4gbGEgbO1uZWEgZGUgY29tYW5kb3MsCitwZXJvIHRvZGF27WEgZXMgcmVjb25vY2lkYSBlbiBlbCBhcmNoaXZvIGRlIGNvbmZpZ3VyYWNp824uCisuVFAKKy5CIC0tdGVzdAorTGVlciBhcmNoaXZvKHMpIGRlIGNvbmZpZ3VyYWNp824geSByZXZpc2FyIHN1IHNpbnRheGlzLiBTYWxpciBjb24gY/NkaWdvCiswIHNpIHRvZG8gZXN04SBiaWVuLCBvIHVuIGPzZGlnbyBuby1jZXJvIGVuIGN1YWxxdWllciBvdHJvIGNhc28uIE5vCitpbmljaWFyIGRuc21hc3EuCisuVFAKKy5CIFwtaCwgLS1uby1ob3N0cworTm8gbGVlciBsb3Mgbm9tYnJlcyBkZSBob3N0cyBlbiAvZXRjL2hvc3RzLgorLlRQCisuQiBcLUgsIC0tYWRkbi1ob3N0cz08YXJjaGl2bz4KK0FyY2hpdm8gZGUgaG9zdHMgYWRpY2lvbmFsLiBMZWVyIGVsIGFyY2hpdm8gZXNwZWNpZmljYWRvIGFkaWNpb25hbG1lbnRlCithIC9ldGMvaG9zdHMuIFNpIHNlIGJyaW5kYSAtaCwgbGVlciBzb2xvIGVsIGFyY2hpdm8gZXNwZWNpZmljYWRvLiBFc3RhCitvcGNp824gcHVlZGUgc2VyIHJlcGV0aWRhIHBhcmEgbeFzIGRlIHVuIGFyY2hpdm8gZGUgaG9zdHMgYWRpY2lvbmFsLiBTaQordW4gZGlyZWN0b3JpbyBlcyBicmluZGFkbywgZW50b25jZXMgbGVlciB0b2RvcyBsb3MgYXJjaGl2b3MgY29udGVuaWRvcyBlbgorZXNlIGRpcmVjdG9yaW8uCisuVFAKKy5CIFwtRSwgLS1leHBhbmQtaG9zdHMKK0FncmVnYXIgZWwgZG9taW5pbyBhIG5vbWJyZXMgc2VuY2lsbG9zIChzaW4gcHVudG8pIGVuIC9ldGMvaG9zdHMgZGUgbGEKK21pc21hIG1hbmVyYSBxdWUgY29uIG5vbWJyZXMgZGVyaXZhZG9zIGRlIERIQ1AuIE7zdGVzZSBxdWUgZXN0byBubworYXBsaWNhIGEgbm9tYnJlcyBkZSBkb21pbmlvIGVuIGNuYW1lcywgZXhwZWRpZW50ZXMgUFRSLCBUWFQsIGV0Yy4KKy5UUAorLkIgXC1ULCAtLWxvY2FsLXR0bD08dGllbXBvPgorQWwgcmVzcG9uZGVyIGNvbiBpbmZvcm1hY2nzbiBkZXNkZSAvZXRjL2hvc3RzIG8gZGVzZGUgZWwgYXJjaGl2bworZGUgYXJyaWVuZG9zIERIQ1AsIGRuc21hc3EgZmlqYSBlbCB0aWVtcG8gZGUgdmlkYSAoVFRMKSBhIGNlcm8gcG9yCitwcmVkZXRlcm1pbmFkbywgc2lnbmlmaWNhbmRvIHF1ZSBlbCByZW1pdGVudGUgbm8gZGVicuEgY2FjaGVhcgorbGEgaW5mb3JtYWNp824gcG9yIHPtIG1pc21vLiBFc3RvIGVzIGxvIGNvcnJlY3RvIGEgaGFjZXIgZW4gY2FzaQordG9kYXMgbGFzIHNpdHVhY2lvbmVzLiBFc3RhIG9wY2nzbiBwZXJtaXRlIHF1ZSBzZSBlc3BlY2lmaXF1ZQorY2llcnRvIHRpZW1wbyBkZSB2aWRhIChlbiBzZWd1bmRvcykgcGFyYSBlc3RhcyByZXNwdWVzdGFzLiBFc3RvCityZWR1Y2UgbGEgY2FyZ2Egc29icmUgZWwgc2Vydmlkb3IgYWwgY29zdG8gZGUgcXVlIGxvcyBjbGllbnRlcwordXNhcmFuIGRhdG9zIGHxZWpvcyBiYWpvIGFsZ3VuYXMgY2lyY3Vuc3RhbmNpYXMuCisuVFAKKy5CIC0tbmVnLXR0bD08dGllbXBvPgorUmVzcHVlc3RhcyBuZWdhdGl2YXMgZGVzZGUgc2Vydmlkb3JlcyB1cHN0cmVhbSBub3JtYWxtZW50ZSBjb250aWVuZW4KK2luZm9ybWFjafNuIHRpbWUtdG8tbGl2ZSAodGllbXBvIGRlIHZpZGEpIGVuIGV4cGVkaWVudGVzIFNPQSBxdWUKK2Ruc21hc3EgdXNhIHBhcmEgaGFjZXIgY2FjaOkuIFNpIGxhcyByZXNwdWVzdGFzIGRlIHNlcnZpZG9yZXMgdXBzdHJlYW0KK29taXRlbiBlc3RhIGluZm9ybWFjafNuLCBkbnNtYXNxIG5vIG1ldGUgbGEgcmVzcHVlc3RhIGVuIGVsIGNhY2jpLgorRXN0YSBvcGNp824gYnJpbmRhIHVuIHZhbG9yIHByZWRldGVybWluYWRvIHBhcmEgZWwgdGltZS10by1saXZlIHF1ZQorZG5zbWFzcSB1c2EgcGFyYSBtZXRlciByZXNwdWVzdGFzIG5lZ2F0aXZhcyBlbiBlbCBjYWNo6SBh+m4gZW4gbGEKK2F1c2VuY2lhIGRlIHVuIGV4cGVkaWVudGUgU09BLgorLlRQCisuQiAtLW1heC10dGw9PHRpZW1wbz4KK0ZpamFyIHVuIHZhbG9yIFRUTCAodGllbXBvIGRlIHZpZGEpIG3heGltbyBxdWUgc2Vy4SBlbnRyZWdhZG8gYQorY2xpZW50ZXMuIEVsIFRUTCBt4XhpbW8gZXNwZWNpZmljYWRvIHNlcuEgb3RvcmdhZG8gYSBjbGllbnRlcyBlbiB2ZXoKK2RlbCBUVEwgdmVyZGFkZXJvIHNpIGVzIG1lbm9yLiBFbCB2YWxvciBUVEwgcmVhbCBlcyBtYW50ZW5pZG8gZW4gZWwgY2FjaOkKK3BhcmEgcHJldmVuaXIgbGEgaW51bmRhY2nzbiBkZSBsb3Mgc2Vydmlkb3JlcyBETlMgdXBzdHJlYW0uCisuVFAKKy5CIFwtaywgLS1rZWVwLWluLWZvcmVncm91bmQKK05vIGlyIGhhY2lhIGVsIGZvbmRvIGFsIGluaWNpYXIsIHBlcm8gYXBhcnRlIGRlIGVzbyBlamVjdXRhciBjb21vCitub3JtYWwuIExhIGludGVuY2nzbiBkZSBlc3RvIGVzIHBhcmEgY3VhbmRvIGRuc21hc3EgZXMgZWplY3V0YWRvCitiYWpvIGRhZW1vbnRvb2xzIG8gbGF1bmNoZC4KKy5UUAorLkIgXC1kLCAtLW5vLWRhZW1vbgorTW9kbyBkZWJ1Zzogbm8gaGFjZXIgdW4gZm9yayBoYWNpYSBlbCBmb25kbywgbm8gY3JlYXIgdW4gYXJjaGl2byBQSUQsCitubyBjYW1iaWFyIGVsIElEIGRlbCB1c3VhcmlvLCBnZW5lcmFyIHVuIGNhY2hlIGR1bXAgY29tcGxldG8gYWwKK3JlY2liaXIgdW4gU0lHVVNSMSwgYml0YWNvcmVhciBhIHN0ZGVyciBhbCBpZ3VhbCBxdWUgYSBzeXNsb2csIG5vCitmb3JrZWFyIHByb2Nlc29zIG51ZXZvcyBwYXJhIG1hbmVqYXIgYvpzcXVlZGFzIFRDUC4KKy5UUAorLkIgXC1xLCAtLWxvZy1xdWVyaWVzCitCaXRhY29yZWFyIGxvcyByZXN1bHRhZG9zIGRlIGL6c3F1ZWRhcyBETlMgbWFuZWphZGFzIHBvciBkbnNtYXNxLgorSGFiaWxpdGFyIHVuIGR1bXAgZGUgY2FjaOkgY29tcGxldG8gYWwgcmVjaWJpciB1biBTSUdVU1IxLgorLlRQCisuQiBcLTgsIC0tbG9nLWZhY2lsaXR5PTxmYWNpbGlkYWQ+CitGaWphciBsYSBmYWNpbGlkYWQgYSBsYSBjdWFsIGRuc21hc3EgZGViZXLhIGVudmlhciBtZW5zYWplcyBzeXNsb2csCitlc3RvIGVzIERBRU1PTiBwb3IgcHJlZGV0ZXJtaW5hZG8sIHkgTE9DQUwwIGN1YW5kbyBlbCBtb2RvIGRlYnVnIGVzdOEKK2VuIG9wZXJhY2nzbi4gU2kgbGEgZmFjaWxpZGFkIGJyaW5kYWRhIGNvbnRpZW5lIHBvciBsbyBtZW5vcyB1biBjYXLhY3RlcgorIi8iLCBzZSB0cmF0YSBjb21vIHVuIG5vbWJyZSBkZSBhcmNoaXZvLCB5IGRuc21hc3EgYml0YWNvcmVhcuEgYSBkaWNobworYXJjaGl2bywgZW4gdmV6IGRlIHN5c2xvZy4gU2kgbGEgZmFjaWxpZGFkIGVzICctJyBlbnRvbmNlcyBkbnNtYXNxCitiaXRhY29yZWEgYSBzdGRlcnIuIChFcnJvcmVzIGR1cmFudGUgbGEgbGVjdHVyYSBkZSBsYSBjb25maWd1cmFjafNuCitpcuFuIGEgc3lzbG9nIHRvZGF27WEsIHBlcm8gdG9kbyBvdXRwdXQgZGVzZGUgdW4gaW5pY2lvIGV4aXRvc28sIHkgdG9kbworb3V0cHV0IG1pZW50cmFzIGVuIGVqZWN1Y2nzbiwgaXLhIGEgZXN0ZSBhcmNoaXZvIGV4Y2x1c2l2YW1lbnRlLikKK0FsIGJpdGFjb3JlYXIgYSB1biBhcmNoaXZvLCBkbnNtYXNxIGNlcnJhcuEgeSByZWFicmly4SBlbCBhcmNoaXZvIGFsCityZWNpYmlyIHVuIFNJR1VTUjIuIEVzdG8gcGVybWl0ZSBxdWUgZWwgYXJjaGl2byBkZSBiaXThY29yYSBzZWEgcm90YWRvCitzaW4gZGV0ZW5lciBhIGRuc21hc3EuCisuVFAKKy5CIC0tbG9nLWFzeW5jWz08bO1uZWFzPl0KK0hhYmlsaXRhciBiaXRhY29y6W8gYXNpbmNy825pY28geSBvcGNpb25hbG1lbnRlIGZpamFyIGVsIGztbWl0ZSBkZSBu+m1lcm8KK2RlIGztbmVhcyBxdWUgc2Vy4W4gZW52aWFkYXMgYSBsYSBjb2xldGEgcG9yIGRuc21hc3EgY3VhbmRvIHN5c2xvZyBlc3ThCitsZW50by4gRG5zbWFzcSBwdWVkZSBiaXRhY29yZWFyIGFzaW5jcvNuaWNhbWVudGU6IGVzdG8gbGUgcGVybWl0ZSBjb250aW51YXIKK2Z1bmNpb25hbmRvIHNpbiBzZXIgYmxvcXVlYWRvIHBvciBzeXNsb2csIHkgcGVybWl0ZSBhIHN5c2xvZyB1c2FyIGRuc21hc3EKK3BhcmEgYvpzcXVlZGFzIEROUyBzaW4gcmllc2dvIGRlIHRyYW5xdWUuIFNpIGxhIGNvbGV0YSBkZSBs7W5lYXMgZGUgYml04WNvcmEKK3NlIGxsZW5hLCBkbnNtYXNxIGJpdGFjb3JlYXLhIGVsIGRlc2JvcmRhbWllbnRvLCB5IGVsIG76bWVybyBkZSBtZW5zYWplcworcGVyZGlkb3MuIEVsIHRhbWHxbyBwcmVkZXRlcm1pbmFkbyBkZSBjb2xldGEgZXMgNSwgdW4gdmFsb3Igc2FubyBzZXLtYSA1LTI1LAoreSB1biBs7W1pdGUgZGUgMTAwIGVzIGltcHVlc3RvLgorLlRQCisuQiBcLXgsIC0tcGlkLWZpbGU9PHBhdGg+CitFc3BlY2lmaWNhciB1biBwYXRoIGFsdGVybm8gZG9uZGUgZG5zbWFzcSBkZWJlIGd1YXJkYXIgc3UgUElELgorTm9ybWFsbWVudGUgZXMgL3Zhci9ydW4vZG5zbWFzcS5waWQuCisuVFAKKy5CIFwtdSwgLS11c2VyPTx1c3VhcmlvPgorRXNwZWNpZmljYXIgZWwgdXNlcmlkIGFsIGN1YWwgZG5zbWFzcSBkZWJlIGNhbWJpYXJzZSBkZXNwdWVzIGRlIGluaWNpYXIuCitEbnNtYXNxIG5vcm1hbG1lbnRlIGRlYmUgc2VyIGluaWNpYWRvIGNvbW8gcm9vdCwgcGVybyBzb2x0YXLhIGxvcworcHJpdmlsZWdpb3Mgcm9vdCBkZXNwdWVzIGRlbCBpbmljaW8sIGNhbWJpYW5kbyBhIG90cm8gdXN1YXJpby4KK05vcm1hbG1lbnRlIGVzdGUgdXN1YXJpbyBlcyAibm9ib2R5IiwgcGVybyBlc28gc2UgcHVlZGUgY2FtYmlhcgorY29uIGVzdGEgb3BjafNuLgorLlRQCisuQiBcLWcsIC0tZ3JvdXA9PGdydXBvPiAKK0VzcGVjaWZpY2FyIGVsIGdydXBvIGNvbW8gZWwgY3VhbCBkbnNtYXNxIGNvcnJlcuEuIEVsIHByZWRldGVybWluYWRvCitlcyAiZGlwIiwgc2kgZXN04SBkaXNwb25pYmxlLCBwYXJhIGZhY2lsaXRhciBlbCBhY2Nlc28gYQorL2V0Yy9wcHAvcmVzb2x2LmNvbmYgZWwgY3XhbCBub3Jt4WxtZW50ZSBubyBlcyBnbG9iYWxtZW50ZSBsZe1ibGUuCisuVFAKKy5CIFwtdiwgLS12ZXJzaW9uCitNb3N0cmFyIGVsIG76bWVybyBkZSB2ZXJzafNuLgorLlRQCisuQiBcLXAsIC0tcG9ydD08cHVlcnRvPgorRXNjdWNoYXIgZW4gZWwgcHVlcnRvIDxwdWVydG8+IGVuIHZleiBkZWwgcHVlcnRvIGVzdOFuZGFyIEROUyAoNTMpLgorRmlqYXIgZXN0byBhIGNlcm8gZGVzaGFiaWxpdGEgY29tcGxldGFtZW50ZSBsYSBmdW5jafNuIEROUywgZGVqYW5kbworc29sbyBESENQIHkvbyBURlRQLgorLlRQCisuQiBcLVAsIC0tZWRucy1wYWNrZXQtbWF4PTx0YW1h8W8+CitFc3BlY2lmaWNhciBlbCBwYXF1ZXRlIFVEUCBFRE5TLjAgbeFzIGdyYW5kZSBxdWUgZXMgc29wb3J0YWRvIHBvcgorZWwgcmVlbnZpYWRvciBETlMuIFBvciBwcmVkZXRlcm1pbmFkbyBlcyA0MDk2LCBsbyBjdWFsIGVzIGVsCit0YW1h8W8gcmVjb21lbmRhZG8gZW4gUkZDNTYyNS4KKy5UUAorLkIgXC1RLCAtLXF1ZXJ5LXBvcnQ9PHB1ZXJ0bz4KK0VudmlhciBi+nNxdWVkYXMgb3V0Ym91bmQgZGVzZGUsIHkgZXNjdWNoYXIgcG9yIHJlc3B1ZXN0YXMgZW4sCitlbCBwdWVydG8gVURQIDxwdWVydG8+IGVuIHZleiBkZSB1c2FyIHB1ZXJ0b3MgYWxlYXRvcmlvcy4gTvN0ZXNlCitxdWUgdXNhciBlc3RhIG9wY2nzbiBoYWNlIHF1ZSBkbnNtYXNxIHNlYSBtZW5vcyBzZWd1cm8gY29udHJhCithdGFxdWVzIGRlIHNwb29maW5nIEROUywgcGVybyBwdWVkZSBzZXIgbeFzIHLhcGlkbyB5IHVzYXIgbWVub3MKK3JlY3Vyc29zLgorRmlqYXIgZXN0YSBvcGNp824gYSB6ZXJvIGhhY2UgcXVlIGRuc21hc3EgdXNlIHVuIHNvbG8gcHVlcnRvLAorYXNpZ25hZG8gcG9yIGVsIHNpc3RlbWEgb3BlcmF0aXZvIChlc3RvIGVyYSBlbCBjb21wb3J0YW1pZW50bworcHJlZGV0ZXJtaW5hZG8gZW4gdmVyc2lvbmVzIGFudGVyaW9yZXMgYSAyLjQzKS4KKy5UUAorLkIgLS1taW4tcG9ydD08cHVlcnRvPgorTm8gdXNhciBwdWVydG9zIG1lbm9yZXMgYSA8cHVlcnRvPiBjb21vIHJlbWl0ZW50ZXMgcGFyYSBi+nNxdWVkYXMKK0ROUyBvdXRib3VuZC4gRG5zbWFzcSBlc2NvamUgcHVlcnRvcyBhbGVhdG9yaW9zIGNvbW8gcmVtaXRlbnRlcworcGFyYSBi+nNxdWVkYXMgRE5TIG91dGJvdW5kLiBDdWFuZG8gZXN0YSBvcGNp824gZXMgYnJpbmRhZGEsIGxvcworcHVlcnRvcyB1c2Fkb3Mgc2llbXByZSBzZXLhbiBtYXlvcmVzIHF1ZSBlbCBlc3BlY2lmaWNhZG8uIEVzdG8gZXMKK/p0aWwgcGFyYSBzaXN0ZW1hcyBkZXRyYXMgZGUgZmlyZXdhbGxzLgorLlRQCisuQiBcLWksIC0taW50ZXJmYWNlPTxub21icmUgZGUgaW50ZXJmYWNlPgorRXNjdWNoYXIgc29sbyBlbiBsYXMgaW50ZXJmYWNlcyBlc3BlY2lmaWNhZGFzLiBEbnNtYXNxIGF1dG9t4XRpY2FtZW50ZQorYWdyZWdhIGxhIGludGVyZmFjZSBsb29wYmFjayBhIGxhIGxpc3RhIGRlIGludGVyZmFjZXMgcGFyYSB1c2FyIGN1YW5kbworbGEgb3BjafNuCisuQiBcLS1pbnRlcmZhY2UKK2VzIHVzYWRhLiBTaSBuaW5ndW5hIG9wY2nzbgorLkIgXC0taW50ZXJmYWNlCitvCisuQiBcLS1saXN0ZW4tYWRkcmVzcworZXMgYnJpbmRhZGEsIGRuc21hc3EgZXNjdWNoYSBlbiB0b2RhcyBsYXMgaW50ZXJmYWNlcyBkaXNwb25pYmxlcyBleGNlcHRvCitjdWFscXVpZXJhIGZpamFkYSBjb24gb3BjaW9uZXMKKy5CIFwtLWV4Y2VwdC1pbnRlcmZhY2UKK0ludGVyZmFjZXMgSVAgYWxpYXMgKHBvciBlamVtcGxvLCAiZXRoMTowIikgbm8gcHVlZGVuIHNlciB1dGlsaXphZGFzIGNvbgorLkIgLS1pbnRlcmZhY2UKK28KKy5CIC0tZXhjZXB0LWludGVyZmFjZQorLCB1c2FyIC0tbGlzdGVuLWFkZHJlc3MgZW4gdmV6LgorLlRQCisuQiBcLUksIC0tZXhjZXB0LWludGVyZmFjZT08bm9tYnJlIGRlIGludGVyZmFjZT4KK05vIGVzY3VjaGFyIGVuIGxhIGludGVyZmFjZSBlc3BlY2lmaWNhZGEuIE7zdGVzZSBxdWUgZWwgb3JkZW4gZGUKK2xhcyBvcGNpb25lcworLkIgXC0tbGlzdGVuLWFkZHJlc3MKKy5CIC0taW50ZXJmYWNlCit5CisuQiAtLWV4Y2VwdC1pbnRlcmZhY2UKK25vIGltcG9ydGEgeSBsYXMgb3BjaW9uZXMKKy5CIC0tZXhjZXB0LWludGVyZmFjZQorc2llbXByZSBpbnZhbGlkYW4gYSBsYXMgb3RyYXMuCisuVFAgCisuQiBcLTIsIC0tbm8tZGhjcC1pbnRlcmZhY2U9PG5vbWJyZSBkZSBpbnRlcmZhY2U+CitObyBwcm92ZWVyIERIQ1AgbmkgVEZUUCBlbiBsYSBpbnRlcmZhY2UgZXNwZWNpZmljYWRhLCBwZXJvIHPtCitwcm92ZWVyIHNlcnZpY2lvIEROUy4KKy5UUAorLkIgXC1hLCAtLWxpc3Rlbi1hZGRyZXNzPTxkaXJlY2Np824gSVA+CitFc2N1Y2hhciBlbiBsYShzKSBkaXJlY2Np824oZXMpIElQIGVzcGVjaWZpY2FkYShzKS4gTGFzIG9wY2lvbmVzCisuQiBcLS1pbnRlcmZhY2UKK3kKKy5CIFwtLWxpc3Rlbi1hZGRyZXNzCithbWJhcyBwdWVkZW4gc2VyIGJyaW5kYWRhcywgeSBlbiB0YWwgY2FzbyBlbCBqdWVnbyBkZSBhbWJhcworZGlyZWNjaW9uZXMgSVAgeSBpbnRlcmZhY2VzIGVzIHVzYWRhLiBO83Rlc2UgcXVlIHNpIG5pbmd1bmEgb3BjafNuCisuQiBcLS1pbnRlcmZhY2UKK2VzIGJyaW5kYWRhLCBwZXJvIHPtIHNlIGJyaW5kYSBsYSBvcGNp824KKy5CIFwtLWxpc3Rlbi1hZGRyZXNzCissIGVudG9uY2VzIGRuc21hc3Egbm8gZXNjdWNoYXLhIGF1dG9t4XRpY2FtZW50ZSBlbiBsYSBpbnRlcmZhY2UKK2xvb3BiYWNrLiBQYXJhIG9idGVuZXIgZXN0bywgc3UgZGlyZWNjafNuIElQLCAxMjcuMC4wLjEsIGRlYmUgc2VyCitleHBs7WNpdGFtZW50ZSBicmluZGFkYSBjb21vIHVuYSBvcGNp824KKy5CIFwtLWxpc3Rlbi1hZGRyZXNzCisuVFAKKy5CIFwteiwgLS1iaW5kLWludGVyZmFjZXMKK0VuIHNpc3RlbWFzIHF1ZSBpbmx1eWVuIGVsIHNvcG9ydGUsIGRuc21hc3EgYWNvcGxhIGxhIGRpcmVjY2nzbgorZGUgY29tb2TtbiwgYfpuIGN1YW5kbyBlc3ThIGVzY3VjaGFuZG8gc29sYW1lbnRlIGVuIGFsZ3VuYXMKK2ludGVyZmFjZXMuIEVudG9uY2VzIGRlc2NhcnRhIGL6c3F1ZWRhcyBhIGxhcyBjdWFsZXMgbm8gZGViZQorcmVzcG9uZGVyLiBFc3RvIHRpZW5lIGxhIHZlbnRhamEgZGUgZnVuY2lvbmFyIGH6biBjdWFuZG8KK2ludGVyZmFjZXMgdmFuIHkgdmllbmVuIHkgY2FtYmlhbiBkaXJlY2Npb25lcy4gRXN0YSBvcGNp824gZm9yemEKK2EgZG5zbWFzcSBhIGFjb3BsYXJzZSByZWFsbWVudGUgc29sbyBhIGxhcyBpbnRlcmZhY2VzIGVuCitsYXMgY3VhbGVzIGVzdOEgZXNjdWNoYW5kby4gQ2FzaSBsYSD6bmljYSB2ZXogcXVlIGVzdG8gZXMg+nRpbAorZXMgY3VhbmRvIHNlIGVzdOEgY29ycmllbmRvIG90cm8gc2Vydmlkb3IgRE5TIChvIG90cmEgaW5zdGFuY2lhCitkZSBkbnNtYXNxKSBlbiBsYSBtaXNtYSBt4XF1aW5hLiBGaWphciBlc3RhIG9wY2nzbiB0YW1iaWVuCitoYWJpbGl0YSBtdWx0aXBsZXMgaW5zdGFuY2lhcyBkZSBkbnNtYXNxLCBsYXMgY3VhbGVzIHByb3ZlZW4KK3NlcnZpY2lvIERIQ1AgZW4gbGEgbWlzbWEgbeFxdWluYS4KKy5UUAorLkIgXC15LCAtLWxvY2FsaXNlLXF1ZXJpZXMKK1JldG9ybmFyIHJlc3B1ZXN0YXMgYSBi+nNxdWVkYXMgRE5TIGRlc2RlIC9ldGMvaG9zdHMgbGFzIGN1YWxlcyBkZXBlbmRlbgorZGUgbGEgaW50ZXJmYWNlIGRvbmRlIGVudHLzIGxhIGL6c3F1ZWRhLiBTaSB1biBub21icmUgZW4gL2V0Yy9ob3N0cyB0aWVuZQorbWFzIGRlIHVuYSBkaXJlY2Np824gYXNvY2lhZGEgY29uIGVsLCB5IHBvciBsbyBtZW5vcyB1bmEgZGUgZXNhcyBkaXJlY2Npb25lcworZXN04SBlbiBsYSBtaXNtYSBzdWJyZWQgZGUgbGEgaW50ZXJmYWNlIGRvbmRlIGZ1ZSBlbnZpYWRhLCBlbnTzbmNlcworcmV0b3JuYXIgc29sbyBsYXMgZGlyZWNjaW9uZXMgZW4gZXNhIHN1YnJlZC4gRXN0byBwZXJtaXRlIGEgdW4gc2Vydmlkb3IKK3RlbmVyIGRpcmVjY2lvbmVzIG36bHRpcGxlcyBlbiAvZXRjL2hvc3RzIGNvcnJlc3BvbmRpZW50ZXMgYSBjYWRhIHVuYSBkZQorc3VzIGludGVyZmFjZXMgeSBjYWRhIGhvc3QgcmVjaWJpcuEgbGEgcmVzcHVlc3RhIGFkZWN1YWRhCitkZXBlbmRpZW5kbyBkZSBjdWFsIHJlZCB0ZW5nYW4gYWRqdW50YS4gUG9yIGVsIG1vbWVudG8sIGVzdGEgZmFjaWxpZGFkCitlc3ThIGxpbWl0YWRhIGEgSVB2NC4KKy5UUAorLkIgXC1iLCAtLWJvZ3VzLXByaXYKK0L6c3F1ZWRhcyBwcml2YWRhcyByZXZlcnNhcyByYXJhcy4gVG9kYSBi+nNxdWVkYSByZXZlcnNhIHBhcmEgcmFuZ29zIGRlIElQCitwcml2YWRvcyAoMTkyLjE2OC54LngsIGV0Yy4pIGxvcyBjdWFsZXMgbm8gc2UgZW5jdWVudHJlbiBlbgorL2V0Yy9ob3N0cyBvIGVuIGVsIGFyY2hpdm8gZGUgYXJyaWVuZG9zIERIQ1AgZXMgcmVzcG9uZGlkYSBjb24KKyJkb21pbmlvIG5vIGV4aXN0ZW50ZSIgZW4gdmV6IGRlIHNlciByZWVudmlhZGEgdXBzdHJlYW0uCisuVFAKKy5CIFwtViwgLS1hbGlhcz1bPElQIHZpZWpvPl18WzxJUCBpbmljaW8+LTxJUCBmaW5hbD5dLDxJUCBudWV2bz5bLDxt4XNjYXJhPl0KK01vZGlmaWNhciBkaXJlY2Npb25lcyBJUHY0IHJldG9ybmFkYXMgZGVzZGUgc2Vydmlkb3JlcyBETlMgdXBzdHJlYW07Cis8SVAgdmllam8+IGVzIHJlbXBsYXphZG8gY29uIDxJUCBudWV2bz4uIFNpIGxhIG3hc2NhcmEgb3BjaW9uYWwKK2VzIGJyaW5kYWRhLCBlbnRvbmNlcyBjdWFscXVpZXIgZGlyZWNjafNuIHF1ZSBjb2luY2lkYSBjb24gZWwKKzxJUCB2aWVqbz4gZW5tYXNjYXJhZG8gc2Vy4SByZS1lc2NyaXRhLiBBc+0gcXVlLCBwb3IgZWplbXBsbywKKy5CIC0tYWxpYXM9MS4yLjMuMCw2LjcuOC4wLDI1NS4yNTUuMjU1LjAgdHJhemFy4SAxLjIuMy41NiBhIDYuNy44LjU2Cit5IDEuMi4zLjY3IGEgNi43LjguNjcuIEVzdG8gZXMgbG8gcXVlCitydXRlYWRvcmVzIENpc2NvIFBJWCBsbGFtYW4gIkROUyBkb2N0b3JpbmciLiBTaSBsYSBkaXJlY2Np824gdmllamEgZXMKK2JyaW5kYWRhIGNvbW8gdW4gcmFuZ28sIGVudG9uY2VzIHNvbG8gZGlyZWNjaW9uZXMgZW4gZXNlIHJhbmdvLCB5IG5vCitsYSBzdWJyZWQgZW50ZXJhLCBzb24gcmUtZXNjcml0YXMuIERlIHRhbCBtYW5lcmEgcXVlCisuQiAtLWFsaWFzPTE5Mi4xNjguMC4xMC0xOTIuMTY4LjAuNDAsMTAuMC4wLjAsMjU1LjI1NS4yNTUuMAorcmVsYWNpb25hIDE5Mi4xNjguMC4xMC0+MTkyLjE2OC4wLjQwIGEgMTAuMC4wLjEwLT4xMC4wLjAuNDAKKy5UUAorLkIgXC1CLCAtLWJvZ3VzLW54ZG9tYWluPTxkaXJlY2Np824gSVA+CitUcmFuc2Zvcm1hciByZXNwdWVzdGFzIHF1ZSBjb250aWVuZW4gbGEgZGlyZWNjafNuIElQIGJyaW5kYWRhIGEKK3Jlc3B1ZXN0YXMgdGlwbyAiRG9taW5pbyBubyBleGlzdGUiLiBMYSBpbnRlbmNp824gZGUgZXN0byBlcyBhY3R1YXIKK2VuIGNvbnRyYSBkZSB1bmEgbW92aWRhIGRlc3ZpYWRhIGhlY2hhIHBvciBWZXJpc2lnbiBlbiBzZXB0aWVtYnJlCitkZWwgMjAwMywgY3VhbmRvIGNvbWVuemFyb24gYSByZXRvcm5hciBsYSBkaXJlY2Np824gZGUgdW4gc2Vydmlkb3IKK2RlIHB1YmxpY2lkYWQgZW4gcmVzcHVlc3RhIGEgYvpzcXVlZGFzIHBvciBub21icmVzIG5vIHJlZ2lzdHJhZG9zLAorZW4gdmV6IGRlIGxhIGNvcnJlY3RhIHJlc3B1ZXN0YSBOWERPTUFJTi4gRXN0YSBvcGNp824gbGUgZGljZSBhIGRuc21hc3EKK3F1ZSBkZWJlIGZvcmplYXIgbGEgcmVzcHVlc3RhIGNvcnJlY3RhIGN1YW5kbyB2ZSBlc3RlIGNvbXBvcnRhbWllbnRvLgorUGFyYSBzZXB0aWVtYnJlIDIwMDMgbGEgZGlyZWNjafNuIElQIHNpZW5kbyByZXRvcm5hZGEgcG9yIFZlcmlzaWduCitlcyA2NC45NC4xMTAuMTEKKy5UUAorLkIgXC1mLCAtLWZpbHRlcndpbjJrCitBbGd1bmFzIHZlcnNpb25lcyBkZSBXaW5kb3dzIGhhY2VuIGL6c3F1ZWRhcyBETlMgcGVyafNkaWNhcyBsYXMgY3VhbGVzIG5vCityZWNpYmVuIHJlc3B1ZXN0YXMgc2Vuc2libGVzIGRlc2RlIGVsIEROUyBw+mJsaWNvIHkgcHVlZGVuIGNhdXNhciBwcm9ibGVtYXMKK2FjdGl2YW5kbyBlbmxhY2VzIG1hcmNhY2nzbi1lbi1kZW1hbmRhLiBFc3RhIG9wY2nzbiBmaWx0cmEgZGljaGFzIGL6c3F1ZWRhcy4KK0xhcyBi+nNxdWVkYXMgZmlsdHJhZGFzIHNvbiBwYXJhIHJlZ2lzdHJvcyB0aXBvIFNPQSB5IFNSViwgYWwgaWd1YWwgcXVlCit0aXBvIEFOWSBkb25kZSBlbCBub21icmUgcGVkaWRvIGNvbnRpZW5lIF8sIHBhcmEgYXRyYXBhciBi+nNxdWVkYXMgTERBUC4KKy5UUAorLkIgXC1yLCAtLXJlc29sdi1maWxlPTxhcmNoaXZvPgorTGVlciBsYXMgZGlyZWNjaW9uZXMgSVAgZGUgc2Vydmlkb3JlcyBETlMgdXBzdHJlYW0gZGVzZGUgPGFyY2hpdm8+LAorZW4gdmV6IGRlIC9ldGMvcmVzb2x2LmNvbmYuIFBhcmEgZWwgZm9ybWF0byBkZSBlc3RlIGFyY2hpdm8sIHZlcgorLkJSIHJlc29sdi5jb25mICg1KQorTGFzIPpuaWNhcyBs7W5lYXMgcmVsZXZhbnRlcyBhIGRuc21hc3Egc29uIGxhcyBkZSBzZXJ2aWRvcmVzIEROUy4gQQorZG5zbWFzcSBzZSBsZSBwdWVkZSBkZWNpciBxdWUgcmV2aXNlIG3hcyBkZSB1biBhcmNoaXZvIHJlc29sdi5jb25mLAorZWwgcHJpbWVyIGFyY2hpdm8gZXNwZWNpZmljYWRvIHJlbXBsYXphIGFsIHByZWRldGVybWluYWRvLCB5IGxvcworc3Vic2lndWllbnRlcyBzb24gYWdyZWdhZG9zIGEgbGEgbGlzdGEuIEVzdG8gZXMgc29sbworcGVybWl0aWRvIGFsIGhhY2VyIHBvbGxpbmc7IGVsIGFyY2hpdm8gY29uIGxhIGFjdHVhbCBmZWNoYQorZGUgbW9kaWZpY2FjafNuIG3hcyBudWV2YSBlcyBlbCBxdWUgc2Vy4SB1c2Fkby4KKy5UUAorLkIgXC1SLCAtLW5vLXJlc29sdgorTm8gbGVlciAvZXRjL3Jlc29sdi5jb25mLiBPYnRlbmVyIGxvcyBzZXJ2aWRvcmVzIEROUyB1cHN0cmVhbSBzb2xvCitkZXNkZSBsYSBs7W5lYSBkZSBjb21hbmRvcyBvIGRlc2RlIGVsIGFyY2hpdm8gZGUgY29uZmlndXJhY2nzbiBkZQorZG5zbWFzcS4KKy5UUAorLkIgXC0xLCAtLWVuYWJsZS1kYnVzCitQZXJtaXRpciBxdWUgbGEgY29uZmlndXJhY2nzbiBkZSBkbnNtYXNxIHNlYSBhY3R1YWxpemFkYSB27WEgbGxhbWFkYXMKK2RlIG3pdG9kbyBEQnVzLiBMYSBjb25maWd1cmFjafNuIHF1ZSBwdWVkZSBzZXIgY2FtYmlhZGEgZXMgc2Vydmlkb3JlcworRE5TIHVwc3RyZWFtICh5IGRvbWluaW9zIGNvcnJlc3BvbmRpZW50ZXMpIHkgbGltcGllemEgZGUgY2FjaOkuIEVzdGEKK29wY2nzbiByZXF1aWVyZSBxdWUgZG5zbWFzcSBoYXlhIHNpZG8gY29tcGlsYWRvIGNvbiBzb3BvcnRlIHBhcmEgREJ1cy4KKy5UUCAKKy5CIFwtbywgLS1zdHJpY3Qtb3JkZXIKK1BvciBwcmVkZXRlcm1pbmFkbywgZG5zbWFzcSBlbnZpYXLhIGL6c3F1ZWRhcyBhIGN1YWxxdWllcmEgZGUgbG9zCitzZXJ2aWRvcmVzIHVwc3RyZWFtIHF1ZSBjb25vY2UsIHkgdHJhdGEgZGUgZmF2b3JlY2VyIHNlcnZpZG9yZXMgbG9zCitjdWFsZXMgc2FiZSBxdWUgZXN04W4gYWN0aXZvcy4gRmlqYXIgZXN0YSBvcGNp824gZm9yemEgYSBkbnNtYXNxIGEKK3Byb2JhciBjYWRhIGL6c3F1ZWRhIGNvbiBjYWRhIHNlcnZpZG9yIGVzdHJpY3RhbWVudGUgZW4gZWwgb3JkZW4KK3F1ZSBhcGFyZWNlbiBlbiAvZXRjL3Jlc29sdi5jb25mCisuVFAKKy5CIC0tYWxsLXNlcnZlcnMKK1BvciBwcmVkZXRlcm1pbmFkbywgY3VhbmRvIGRuc21hc3EgdGllbmUgbeFzIGRlIHVuIHNlcnZpZG9yIHVwc3RyZWFtCitkaXNwb25pYmxlLCBlbnZpYXLhIGL6c3F1ZWRhcyBhIHNvbG8gdW4gc2Vydmlkb3IuIEZpamFyIGVzdGEgb3BjafNuCitmb3J6YSBhIGRuc21hc3EgYSBlbnZpYXIgdG9kYXMgbGFzIGL6c3F1ZWRhcyBhIHRvZG9zIGxvcyBzZXJ2aWRvcmVzCitkaXNwb25pYmxlcy4gTGEgcmVzcHVlc3RhIGRlbCBzZXJ2aWRvciBxdWUgcmVzcG9uZGEgcHJpbWVybyBzZXLhCitkZXZ1ZWx0YSBhbCBzb2xpY2l0YW50ZSBvcmlnaW5hbC4KKy5UUAorLkIgLS1zdG9wLWRucy1yZWJpbmQKK0RlbmVnYXIgKHkgYml0YWNvcmVhcikgZGlyZWNjaW9uZXMgZGUgc2Vydmlkb3JlcyB1cHN0cmVhbSBxdWUgZXN04W4KK2RlbnRybyBkZSByYW5nb3MgSVAgcHJpdmFkb3MuIEVzdG8gYmxvcXVlYSB1biBhdGFxdWUgZG9uZGUgdW4gbmF2ZWdhZG9yCitkZXRy4XMgZGUgdW4gZmlyZXdhbGwgZXMgdXNhZG8gcGFyYSBhbmFsaXphciBt4XF1aW5hcyBlbiBsYSByZWQgbG9jYWwuCisuVFAKKy5CIC0tcmViaW5kLWxvY2FsaG9zdC1vaworRXhpbWlyIGEgMTI3LjAuMC4wLzggZGUgdmVyaWZpY2FjaW9uZXMgZGUgcmViaW5kaW5nLiBFc3RlIHJhbmdvIGRlCitkaXJlY2Npb25lcyBlcyByZXRvcm5hZG8gcG9yIHNlcnZpZG9yZXMgZGUgdGllbXBvIHJlYWwgdGlwbyBob3lvCituZWdybywgYXPtIHF1ZSBibG9xdWVhcmxvIHB1ZWRlIGRlc2hhYmlsaXRhciBlc3RvcyBzZXJ2aWNpb3MuCisuVFAKKy5CICAtLXJlYmluZC1kb21haW4tb2s9Wzxkb21haW4+XXxbWy88ZG9tYWluPi9bPGRvbWFpbj4vXQorTm8gZGV0ZWN0YXIgeSBibG9xdWVhciBkbnMtcmViaW5kIGVuIGL6c3F1ZWRhcyBhIGVzdG9zIGRvbWluaW9zLiBFbAorYXJndW1lbnRvIHB1ZWRlIHNlciBvIHVuIGRvbWluaW8gc2VuY2lsbG8sIG8gbfpsdGlwbGVzIGRvbWluaW9zCityb2RlYWRvcyBwb3IgJy8nLCBjb21vIGVsIHN5bnRheCBkZSAtLXNlcnZlciwgcG9yIGVqZW1wbG8KKy5CICAtLXJlYmluZC1kb21haW4tb2s9L2RvbWluaW8xL2RvbWluaW8yL2RvbWluaW8zLworLlRQCisuQiBcLW4sIC0tbm8tcG9sbAorTm8gcmV2aXNhciBwZXJpb2RpY2FtZW50ZSBhIC9ldGMvcmVzb2x2LmNvbmYgZW4gYnVzY2EgZGUgY2FtYmlvcy4KKy5UUAorLkIgLS1jbGVhci1vbi1yZWxvYWQKK0N1YW5kbyBzZWEgcXVlIC9ldGMvcmVzb2x2LmNvbmYgZXMgcmUtbGVpZGEsIGxpYmVyYXIgZWwgY2FjaOkgRE5TLgorRXN0byBlcyD6dGlsIGN1YW5kbyBzZXJ2aWRvcmVzIEROUyBudWV2b3MgcHVlZGFuIHRlbmVyIGRhdG9zIGRpZmVyZW50ZXMKK2EgbG9zIGNvbnRlbmlkb3MgZW4gZWwgY2FjaOkuCisuVFAKKy5CIFwtRCwgLS1kb21haW4tbmVlZGVkCitMZSBkaWNlIGEgZG5zbWFzcSBxdWUgbm8gZGViZSByZWVudmlhciBi+nNxdWVkYXMgcGFyYSBub21icmVzIHNlbmNpbGxvcywKK3NpbiBwdW50b3MgbyBwYXJ0ZXMgZGUgZG9taW5pb3MsIGEgc2Vydmlkb3JlcyB1cHN0cmVhbS4gU2kgZWwgbm9tYnJlCitubyBzZSBjb25vY2UgZGVzZGUgL2V0Yy9ob3N0cyBvIGRlc2RlIERIQ1AgZW50b25jZXMgdW5hIHJlc3B1ZXN0YQorIm5vIGVuY29udHJhZG8iIGVzIGRldnVlbHRhLgorLlRQCisuQiBcLVMsIC0tbG9jYWwsIC0tc2VydmVyPVsvWzxkb21pbmlvPl0vW2RvbWluaW8vXV1bPGRpcmVjY2nzbiBJUD5bIzxwdWVydG8+XVtAPElQIGRlIHJlbWl0ZW50ZT58PGludGVyZmFjZT5bIzxwdWVydG8+XV0KK0VzcGVjaWZpY2FyIGxhIGRpcmVjY2nzbiBJUCBkZSBzZXJ2aWRvcmVzIHVwc3RyZWFtIGRpcmVjdGFtZW50ZS4gRmlqYXIKK2VzdGEgb3BjafNuIG5vIHN1cHJpbWUgbGEgbGVjdHVyYSBkZSAvZXRjL3Jlc29sdi5jb25mLCB1c2UgLVIgcGFyYQoraGFjZXIgZXNvLiBTaSB1bm8gYSBt4XMgZG9taW5pb3Mgb3BjaW9uYWxlcyBzb24gYnJpbmRhZG9zLCBlc2Ugc2Vydmlkb3IKK2VzIHVzYWRvIHNvbG8gcGFyYSBlc29zIGRvbWluaW9zIHkgbGFzIGL6c3F1ZWRhcyBzb24gaGVjaGFzIHVzYW5kbworZWwgc2Vydmlkb3IgZXNwZWNpZmljYWRvIHNvbGFtZW50ZS4gTGEgaW50ZW5jafNuIGRlIGVzdG8gZXMgcGFyYSBlbAordXNvIGNvbiBzZXJ2aWRvcmVzIEROUyBwcml2YWRvczogc2kgdXN0ZWQgdGllbmUgdW4gc2Vydmlkb3IgRE5TIGVuIHN1CityZWQgZWwgY3VhbCBsaWRlYSBjb24gbm9tYnJlcyBkZSBsYSBmb3JtYQoreHh4LmludGVybmFsLnRoZWtlbGxleXMub3JnLnVrIGVuIDE5Mi4xNjguMS4xIGVudG9uY2VzIGJyaW5kYXIgbGEKK29wY2nzbgorLkIgLVMgL2ludGVybmFsLnRoZWtlbGxleXMub3JnLnVrLzE5Mi4xNjguMS4xCitlbnZpYXLhIHRvZGFzIGxhcyBi+nNxdWVkYXMgZGUgbeFxdWluYXMgaW50ZXJuYXMgYSBlc2Ugc2Vydmlkb3IgRE5TLAordG9kYXMgbGFzIGRlbeFzIGL6c3F1ZWRhcyBzZXLhbiBlbnZpYWRhcyBhIGxvcyBzZXJ2aWRvcmVzIGVuCisvZXRjL3Jlc29sdi5jb25mLiBVbmEgZXNwZWNpZmljYWNp824gZGUgZG9taW5pbyBlbiBibGFuY28sCisuQiAvLwordGllbmUgZWwgc2lnbmlmaWNhZG8gZXNwZWNpYWwgZGUgInNvbG8gbm9tYnJlcyBubyBjYWxpZmljYWRvcyIsIG8KK3NlYSBub21icmVzIHNpbiBuaW5n+m4gcHVudG8gZW4gZWxsb3MuIFVuIHB1ZXJ0byBuby1lc3ThbmRhciBwdWVkZQorc2VyIGVzcGVjaWZpY2FkbyBjb21vIHBhcnRlIGRlIGxhIGRpcmVjY2nzbiBJUCB1c2FuZG8gZWwgY2FyYWN0ZXIKKyMuIE3hcyBkZSB1bmEgb3BjafNuIC1TIGVzIHBlcm1pdGlkYSwgY29uIHBhcnRlcyBkZSBkb21pbmlvIG8KK2RpcmVjY2nzbiBJUCByZXBldGlkYXMgY29tbyBzZWEgbmVjZXNhcmlvLgorCitEb21pbmlvcyBt4XMgZXNwZWPtZmljb3MgdG9tYW4gcHJlY2VkZW5jaWEgc29icmUgbG9zIG1lbm9zIGVzcGVj7WZpY29zLAorYXPtIHF1ZToKKy5CIC0tc2VydmVyPS9nb29nbGUuY29tLzEuMi4zLjQKKy5CIC0tc2VydmVyPS93d3cuZ29vZ2xlLmNvbS8yLjMuNC41CitlbnZpYXLhIGL6c3F1ZWRhcyBwb3IgKi5nb29nbGUuY29tIGhhY2lhIDEuMi4zLjQsIGV4Y2VwdG8KKyp3d3cuZ29vZ2xlLmNvbSwgZWwgY3VhbCBpcuEgYSAyLjMuNC41LgorCitMYSBkaXJlY2Np824gZXNwZWNpYWwgZGUgc2Vydmlkb3IgJyMnIHNpZ25pZmljYSAidXNhciBsb3Mgc2Vydmlkb3JlcworZXN04W5kYXJlcyIsIGFz7SBxdWUKKy5CIC0tc2VydmVyPS9nb29nbGUuY29tLzEuMi4zLjQKKy5CIC0tc2VydmVyPS93d3cuZ29vZ2xlLmNvbS8jCitlbnZpYXLhIGL6c3F1ZWRhcyBwb3IgKi5nb29nbGUuY29tIGhhY2lhIDEuMi4zLjQsIGV4Y2VwdG8KKyp3d3cuZ29vZ2xlLmNvbSwgZWwgY3VhbCBzZXLhIHJlZW52aWFkbyBkZSBtYW5lcmEgdXN1YWwuCisKK1RhbWJp6W4gc2UgcGVybWl0ZSB1bmEgb3BjafNuIC1TIGxhIGN1YWwgYnJpbmRhIHVuIGRvbWluaW8gcGVybworbmluZ3VuYSBkaXJlY2Np824gSVA7IGVzdG8gbGUgZGljZSBhIGRuc21hc3EgcXVlIHVuIGRvbWluaW8gZXMgbG9jYWwKK3kgcHVlZGUgcmVzcG9uZGVyIGEgYvpzcXVlZGFzIGRlc2RlIC9ldGMvaG9zdHMgbyBESENQIHBlcm8gbnVuY2EKK2RlYmVy4SByZWVudmlhciBi+nNxdWVkYXMgZW4gZXNlIGRvbWluaW8gYSBuaW5n+m4gc2Vydmlkb3IgdXBzdHJlYW0uCisuQiBsb2NhbAorZXMgdW4gc2lu825pbW8gZGUKKy5CIHNlcnZlcgorcGFyYSBoYWNlciBsb3MgYXJjaGl2b3MgZGUgY29uZmlndXJhY2nzbiBtYXMgY2xhcm9zIGVuIGVzdGUgY2Fzby4KKworRWwgc3RyaW5nIG9wY2lvbmFsIGRlc3B1ZXMgZGVsIGNhcuFjdGVyIEAgbGUgZGljZSBhIGRuc21hc3EgY29tbyBmaWphcgorZWwgcmVtaXRlbnRlIGRlIGxhcyBi+nNxdWVkYXMgaGFjaWEgZXN0ZSBzZXJ2aWRvciBETlMuIERlYmUgc2VyIHVuYQorZGlyZWNjafNuIElQLCBsYSBjdWFsIGRlYmUgc2VyIHBlcnRlbmVjaWVudGUgYSBsYSBt4XF1aW5hIGVuIGxhIGN1YWwKK2NvcnJlIGRuc21hc3EsIGRlIGZvcm1hIGNvbnRyYXJpYSBlc3RhIGztbmVhIGRlIHNlcnZpZG9yIHNlcuEgYml0YWNvcmVhZGEKK3kgZGVzcHXpcyBpZ25vcmFkYSwgbyB1biBub21icmUgZGUgaW50ZXJmYWNlLiBTaSB1biBub21icmUgZGUgaW50ZXJmYWNlCitlcyBicmluZGFkbywgZW50b25jZXMgYvpzcXVlZGFzIGhhY2lhIGVsIHNlcnZpZG9yIHNlcuFuIGZvcnphZGFzIHbtYSBlc2EKK2ludGVyZmFjZTsgc2kgdW5hIGRpcmVjY2nzbiBJUCBlcyBicmluZGFkYSwgZW50b25jZXMgbGEgZGlyZWNjafNuIGRlCityZW1pdGVudGUgZGUgbGFzIGL6c3F1ZWRhcyBzZXLhIGZpamFkYSBhIGVzYSBkaXJlY2Np824uCitMYSBldGlxdWV0YSBxdWVyeS1wb3J0IGVzIGlnbm9yYWRhIHBhcmEgY3VhbHF1aWVyIHNlcnZpZG9yZXMgcXVlIHRlbmdhbgordW5hIGRpcmVjY2nzbiByZW1pdGVudGUgZXNwZWNpZmljYWRhLCBwZXJvIGVsIHB1ZXJ0byBwdWVkZSBzZXIKK2VzcGVjaWZpY2FkbyBkaXJlY3RhbWVudGUgY29tbyBwYXJ0ZSBkZSBsYSBkaXJlY2Np824gcmVtaXRlbnRlLiBGb3J6YXIKK2L6c3F1ZWRhcyBhIHVuYSBpbnRlcmZhY2Ugbm8gZXN04SBpbXBsZW1lbnRhZG8gZW4gdG9kYXMgbGFzIHBsYXRhZm9ybWFzCitzb3BvcnRhZGFzIHBvciBkbnNtYXNxLgorLlRQCisuQiBcLUEsIC0tYWRkcmVzcz0vPGRvbWluaW8+L1tkb21pbmlvL108ZGlyZWNjafNuIElQPgorRXNwZWNpZmljYXIgdW5hIGRpcmVjY2nzbiBJUCBwYXJhIHJldG9ybmFyIHBvciBjdWFscXVpZXIgaG9zdCBlbgorbG9zIGRvbWluaW9zIGJyaW5kYWRvcy4gQvpzcXVlZGFzIGVuIGVzdG9zIGRvbWluaW9zIG51bmNhIHNvbgorcmVlbnZpYWRhcywgeSBzaWVtcHJlIHNvbiByZXNwb25kaWRhcyBjb24gbGEgZGlyZWNjafNuIElQCitlc3BlY2lmaWNhZGEsIGxhIGN1YWwgcHVlZGUgc2VyIElQdjQgbyBJUHY2LiBQYXJhIGJyaW5kYXIgYW1iYXMKK2RpcmVjY2lvbmVzIElQdjQgeSBJUHY2IHBhcmEgdW4gZG9taW5pbywgdXNhciBvcGNpb25lcyAtQSByZXBldGlkYXMuCitO83Rlc2UgcXVlIC9ldGMvaG9zdHMgeSBhcnJpZW5kb3MgREhDUCBpbnZhbGlkYW4gZXN0byBwYXJhIG5vbWJyZXMKK2luZGl2aWR1YWxlcy4gVW4gdXNvIGNvbfpuIHBhcmEgZXN0byBlcyByZWRpcmVjY2lvbmFyIGVsIGRvbWluaW8KK2RvdWJsZWNsaWNrLm5ldCBlbnRlcm8gYSBhbGf6biBzZXJ2aWRvciB3ZWIgbG9jYWwgYW1pZ2FibGUgcGFyYQorZXZpdGFyIGJhbm5lcnMgZGUgcHVibGljaWRhZC4gTGEgZXNwZWNpZmljYWNp824gZnVuY2lvbmEgZGUgbGEgbWlzbWEKK2Zvcm1hIHF1ZSBjb24gLS1zZXJ2ZXIsIGNvbiBsYSBmYWNpbGlkYWQgYWRpY2lvbmFsIHF1ZSAvIy8gY29pbmNpZGUKK2NvbiBjdWFscXVpZXIgZG9taW5pby4gRGUgdGFsIGZvcm1hLCAtLWFkZHJlc3M9LyMvMS4yLjMuNCBzaWVtcHJlCityZXRvcm5hcuEgMS4yLjMuNCBwYXJhIGN1YWxxdWllciBi+nNxdWVkYSBubyByZXNwb25kaWRhIGRlc2RlCisvZXRjL2hvc3RzIG8gREhDUCB5IHF1ZSBubyBoYXlhIHNpZG8gZW52aWFkYSBhIHVuIHNlcnZpZG9yIEROUwordXBzdHJlYW0gcG9yIHVuYSBkaXJlY3RpdmEgLS1zZXJ2ZXIgbWFzIGVzcGVjaWZpY2EuCisuVFAKKy5CIFwtbSwgLS1teC1ob3N0PTxub21icmUgbXg+W1ssPG5vbWJyZSBkZSBob3N0Pl0sPHByZWZlcmVuY2lhPl0KK1JldG9ybmFyIHVuIHJlY29yZCBsbGFtYWRvIDxteCBuYW1lPiBhcHVudGFuZG8gaGFjaWEgZWwgbm9tYnJlIGRlCitob3N0IGJyaW5kYWRvIChvcGNpb25hbG1lbnRlKSwgbyBlbCBob3N0IGVzcGVjaWZpY2FkbyBlbiBsYSBvcGNp824KKy0tbXgtdGFyZ2V0LCBvIHNpIGVzYSBvcGNp824gbm8gZXMgYnJpbmRhZGEsIGVsIGhvc3QgZW4gZWwgY3VhbAorZG5zbWFzcSBlc3ThIGNvcnJpZW5kby4gRWwgcHJlZGV0ZXJtaW5hZG8gZXMg+nRpbCBwYXJhIHJlZGlyZWNjaW9uYXIKK2NvcnJlbyBkZSBzaXN0ZW1hcyBlbiBsYSByZWQgbG9jYWwgaGFjaWEgdW4gc2Vydmlkb3IgY2VudHJhbC4gTGEKK29wY2nzbiBkZSBwcmVmZXJlbmNpYSBlcyBvcGNpb25hbCwgeSBzdSBwcmVkZXRlcm1pbmFkbyBlcyAxIHNpIG5vCitlcyBicmluZGFkYS4gTeFzIGRlIHVuIHJlY29yZCBNWCBwdWVkZSBzZXIgYnJpbmRhZG8gcGFyYSB1biBob3N0LgorLlRQIAorLkIgXC10LCAtLW14LXRhcmdldD08bm9tYnJlIGRlIGhvc3Q+CitFc3BlY2lmaWNhciBlbCB0YXJnZXQgcHJlZGV0ZXJtaW5hZG8gcGFyYSBlbCByZWNvcmQgTVggZGV2dWVsdG8KK3BvciBkbnNtYXNxLiBWZXIgLS1teC1ob3N0LiBTaSAtLW14LXRhcmdldCBlcyBicmluZGFkbywgcGVybyBubworLS1teC1ob3N0LCBlbnRvbmNlcyBkbnNtYXNxIGRldnVlbHZlIHVuIHJlY29yZCBNWCBjb250ZW5pZW5kbworZWwgdGFyZ2V0IE1YIHBhcmEgYvpzcXVlZGFzIE1YIGVuIGVsIG5vbWJyZSBkZSBob3N0IGRlIGxhIG3hcXVpbmEgZG9uZGUKK2Ruc21hc3EgZXN04SBjb3JyaWVuZG8uCisuVFAKKy5CIFwtZSwgLS1zZWxmbXgKK1JldG9ybmFyIHVuIHJlY29yZCBNWCBhcHVudOFuZG9zZSBhIHPtIG1pc21vIHBhcmEgY2FkYSBt4XF1aW5hIGxvY2FsLgorTeFxdWluYXMgbG9jYWxlcyBzb24gYXF1ZWxsYXMgZW4gL2V0Yy9ob3N0cyBvIGNvbiBhcnJpZW5kb3MgREhDUC4KKy5UUCAKKy5CIFwtTCwgLS1sb2NhbG14CitSZXRvcm5hciB1biByZWNvcmQgTVggYXB1bnRhbmRvIGFsIGhvc3QgYnJpbmRhZG8gcG9yIG14LXRhcmdldCAobworbGEgbeFxdWluYSBkb25kZSBkbnNtYXNxIGVzdOEgY29ycmllbmRvKSBwYXJhIGNhZGEgbeFxdWluYSBsb2NhbC4KK03hcXVpbmFzIGxvY2FsZXMgc29uIGFxdWVsbGFzIGVuIC9ldGMvaG9zdHMgbyBjb24gYXJyaWVuZG9zIERIQ1AuCisuVFAKKy5CIFwtVywgLS1zcnYtaG9zdD08X3NlcnZpY2lvPi48X3Byb3Q+Lls8ZG9taW5pbz5dLFs8dGFyZ2V0PlssPHB1ZXJ0bz5bLDxwcmlvcmlkYWQ+Wyw8cGVzbz5dXV1dCitSZXRvcm5hciB1biByZWNvcmQgRE5TIFNSVi4gVmVyIFJGQzI3ODIgcGFyYSBkZXRhbGxlcy4gU2kgbm8gZXMKK2JyaW5kYWRhLCBlbCBkb21pbmlvIHNlIHByZWRldGVybWluYSBhIGVsIGJyaW5kYWRvIHBvcgorLkIgLS1kb21haW4uCitFbCBwcmVkZXRlcm1pbmFkbyBwYXJhIGVsIGRvbWluaW8gdGFyZ2V0IGVzdOEgdmFj7W8sIGVsIHByZWRldGVybWluYWRvCitwYXJhIHB1ZXJ0byBlcyB1bm8sIHkgbG9zIHByZWRldGVybWluYWRvcyBwYXJhIHBlc28geSBwcmlvcmlkYWQgc29uIGNlcm8uCitUZW5lciBjdWlkYWRvIGFsIHRyYW5zcG9uZXIgZGF0YSBkZXNkZSBhcmNoaXZvcyBkZSB6b25hIEJJTkQ6IGxvcworbvptZXJvcyBkZSBwdWVydG8sIHBlc28sIHkgcHJpb3JpZGFkIGVzdOFuIGVuIHVuIG9yZGVuIGRpZmVyZW50ZS4gTeFzCitkZSB1biByZWNvcmQgU1JWIHBhcmEgdW4gc2VydmljaW8vZG9taW5pbyBlcyBwZXJtaXRpZG8sIHRvZG9zIGxvcyBxdWUKK2NvaW5jaWRhbiBzb24gcmV0b3JuYWRvcy4KKy5UUAorLkIgXC1ZLCAtLXR4dC1yZWNvcmQ9PG5vbWJyZT5bWyw8dGV4dG8+XSw8dGV4dG8+XQorUmV0b3JuYXIgdW4gculjb3JkIEROUyBUWFQuIEVsIHZhbG9yIGRlbCBy6WNvcmQgVFhUIGVzIHVuYSBzZXJpZSBkZQorc3RyaW5ncywgYXPtIHF1ZSBjdWFscXVpZXIgbvptZXJvIHB1ZWRlIHNlciBpbmNsdWlkbywgZGl2aWRpZG8gcG9yCitjb21hcy4KKy5UUAorLkIgLS1wdHItcmVjb3JkPTxub21icmU+Wyw8dGFyZ2V0Pl0KK1JldG9ybmFyIHVuIHLpY29yZCBETlMgUFRSLgorLlRQCisuQiAtLW5hcHRyLXJlY29yZD08bm9tYnJlPiw8b3JkZW4+LDxwcmVmZXJlbmNpYT4sPG9wY2lvbmVzPiw8c2VydmljaW8+LDxyZWdleHA+Wyw8cmVtcGxhem8+XQorUmV0b3JuYXIgdW4gculjb3JkIEROUyBOQVBUUiwgY29tbyBlc3BlY2lmaWNhZG8gZW4gUkZDMzQwMy4KKy5UUAorLkIgLS1jbmFtZT08Y25hbWU+LDx0YXJnZXQ+CitSZXRvcm5hciB1biBleHBlZGllbnRlIENOQU1FIHF1ZSBpbmRpY2EgcXVlIDxjbmFtZT4gZXMgcmVhbG1lbnRlIDx0YXJnZXQ+LiBIYXkKK2xpbWl0YWNpb25lcyBzaWduaWZpY2F0aXZhcyBlbiBlbCB0YXJnZXQuIERlYmUgc2VyIHVuIG5vbWJyZSBETlMgcXVlIGxlIGVzIGNvbm9jaWRvCithIGRuc21hc3EgZGVzZGUgL2V0Yy9ob3N0cyAobyBhcmNoaXZvcyBob3N0cyBhZGljaW9uYWxlcykgbyBkZSBESENQLiBTaSBlbCB0YXJnZXQKK25vIHNhdGlzZmFjZSBlc3RlIGNyaXRlcmlvLCBlbCBjbmFtZSBlbnRlcm8gZXMgaWdub3JhZG8uIEVsIGNuYW1lIGRlYmUgc2VyIPpuaWNvLAorcGVybyBlcyBwZXJtaXNpYmxlIHRlbmVyIG3hcyBkZSB1biBjbmFtZSBpbmRpY2FuZG8gZWwgbWlzbW8gdGFyZ2V0LgorLlRQCisuQiAtLWludGVyZmFjZS1uYW1lPTxub21icmU+LDxpbnRlcmZhY2U+CitSZXRvcm5hciB1biBleHBlZGllbnRlIEROUywgYXNvY2lhbmRvIGVsIG5vbWJyZSBjb24gbGEgZGlyZWNjafNuIHByaW1hcmlhCitlbiBsYSBpbnRlcmZhY2UgYnJpbmRhZGEuIEVzdGEgb3BjafNuIGVzcGVjaWZpY2EgdW4gZXhwZWRpZW50ZSB0aXBvIEEKK3BhcmEgZWwgbm9tYnJlIGJyaW5kYWRvIGRlIGxhIG1pc21hIGZvcm1hIHF1ZSB1bmEgbO1uZWEgZGUgL2V0Yy9ob3N0cywKK2V4Y2VwdG8gcXVlIGxhIGRpcmVjY2nzbiBubyBlcyBjb25zdGFudGUgeSBlcyBlbiB2ZXogdG9tYWRhIGRlIGxhCitpbnRlcmZhY2UgYnJpbmRhZGEuIFNpIGxhIGludGVyZmFjZSBlc3ThIGRlc2hhYmlsaXRhZGEsIG7zIGNvbmZpZ3VyYWRhLAorbyBu8yBleGlzdGVudGUsIHVuIHLpY29yZCB2YWPtbyBlcyBkZXZ1ZWx0by4gRWwgculjb3JkIFBUUiByZWxldmFudGUKK3RhbWJpZW4gZXMgY3JlYWRvLCB0cmF6YW5kbyBsYSBkaXJlY2Np824gZGUgbGEgaW50ZXJmYWNlIGEgZWwgbm9tYnJlLgorTeFzIGRlIHVuIG5vbWJyZSBwdWVkZSBzZXIgYXNvY2lhZG8gY29uIHVuYSBkaXJlY2Np824gZGUgaW50ZXJmYWNlLAorcmVwaXRpZW5kbyBsYSBvcGNp824uIEVuIHRhbCBjYXNvLCBsYSBwcmltZXJhIGluc3RhbmNpYSBlcyB1c2FkYSBwYXJhCitsYSB0cmF6YSByZXZlcnNhIGRpcmVjY2nzbi1hLW5vbWJyZS4KKy5UUAorLkIgXC1jLCAtLWNhY2hlLXNpemU9PHRhbWHxbyBkZSBjYWNo6T4KK0ZpamFyIGVsIHRhbWHxbyBkZWwgY2FjaOkgZGUgZG5zbWFzcS4gRWwgcHJlZGV0ZXJtaW5hZG8gZXMgMTUwIG5vbWJyZXMuCitGaWphciBlbCB0YW1h8W8gYSBjZXJvIGRlc2hhYmlsaXRhIGVsIGNhY2jpLgorLlRQCisuQiBcLU4sIC0tbm8tbmVnY2FjaGUKK0Rlc2hhYmlsaXRhciBjYWNo6SBuZWdhdGl2by4gRWwgY2FjaOkgbmVnYXRpdm8gbGUgcGVybWl0ZSBhIGRuc21hc3EKK3JlY29yZGFyIHJlc3VsdGFkb3MgdGlwbyAiZG9taW5pbyBubyBleGlzdGUiIGRlc2RlIHNlcnZpZG9yZXMgRE5TCit1cHN0cmVhbSB5IHJlc3BvbmRlciBi+nNxdWVkYXMgaWTpbnRpY2FzIHNpbiByZWVudmlhcmxhcyBudWV2YW1lbnRlLgorLlRQCisuQiBcLTAsIC0tZG5zLWZvcndhcmQtbWF4PTxi+nNxdWVkYXM+CitGaWphciBlbCBu+m1lcm8gbeF4aW1vIGRlIGL6c3F1ZWRhcyBETlMgc2ltdWx04W5lYXMuIEVsIHZhbG9yCitwcmVkZXRlcm1pbmFkbyBlcyAxNTAsIGxvIGN14WwgZGViZXLtYSBlc3RhciBiaWVuIHBhcmEgbGEgbWF5b3LtYQorZGUgY2Fzb3MuIExhIPpuaWNhIHNpdHVhY2nzbiBjb25vY2lkYSBkb25kZSBlc3RvIGRlYmUgc2VyIGluY3JlbWVudGFkbworZXMgYWwgdXNhciByZXNvbHZlZG9yZXMgZGUgYml04WNvcmFzIGRlIHNlcnZpZG9yZXMgd2ViLCBsb3MgY3VhbGVzIHB1ZWRlbgorZ2VuZXJhciB1biBu+m1lcm8gaW5tZW5zbyBkZSBi+nNxdWVkYXMgc2ltdWx04W5lYXMuCisuVFAKKy5CIFwtRiwgLS1kaGNwLXJhbmdlPVtpbnRlcmZhY2U6PGludGVyZmFjZT4sXVt0YWc6PHRhZz5bLHRhZzo8dGFnPl0sXVtzZXQ6PHRhZ10sXTxkaXJlY2Np824taW5pY2lvPiw8ZGlyZWNjafNuLWZpbmFsPlssPG5ldG1hc2s+Wyw8YnJvYWRjYXN0Pl1dWyw8dGllbXBvIGRlIGFycmllbmRvPl0KK0hhYmlsaXRhciBlbCBzZXJ2aWRvciBESENQLiBEaXJlY2Npb25lcyBzZXLhbiBkaXN0cmlidWlkYXMgZGVzZGUgZWwKK3JhbmdvIDxkaXJlY2Np824taW5pY2lvPiBoYXN0YSA8ZGlyZWNjafNuLWZpbmFsPiB5IGRlc2RlIGRpcmVjY2lvbmVzIGRlZmluaWRhcworZXN04XRpY2FtZW50ZSBlbiBvcGNpb25lcworLkIgZGhjcC1ob3N0CitTaSBlbCB0aWVtcG8gZGUgYXJyaWVuZG8gZXMgZXNwZWNpZmljYWRvLCBlbnRvbmNlcyBhcnJpZW5kb3Mgc2Vy4W4KK290b3JnYWRvcyBwb3IgZXNhIGNhbnRpZGFkIGRlIHRpZW1wby4gRWwgdGllbXBvIGRlIGFycmllbmRvIGVzIGVuCitzZWd1bmRvcywgbyBtaW51dG9zIChwb3IgZWplbXBsbywgNDVtKSwgdSBob3JhcyAocG9yIGVqZW1wbG8sIDFoKSwgbworImluZmluaXRlIi4gU2kgbm8gZXMgYnJpbmRhZGEsIGVsIHRpZW1wbyBkZSBhcnJpZW5kbyBwcmVkZXRlcm1pbmFkbworZXMgZGUgdW5hIGhvcmEuIEVsIHRpZW1wbyBkZSBhcnJpZW5kbyBt7W5pbW8gZXMgZGUgZG9zIG1pbnV0b3MuCitFc3RhIG9wY2nzbiBwdWVkZSBzZXIgcmVwZXRpZGEsIGNvbiBkaWZlcmVudGVzCitkaXJlY2Npb25lcywgcGFyYSBoYWJpbGl0YXIgc2VydmljaW8gREhDUCBlbiBt4XMgZGUgdW5hIHJlZC4gUGFyYQorcmVkZXMgY29uZWN0YWRhcyBkaXLpY3RhbWVudGUgKGVuIG90cmFzIHBhbGFicmFzLCByZWRlcyBlbiBsYXMKK2N1YWxlcyBsYSBt4XF1aW5hIGNvcnJpZW5kbyBkbnNtYXNxIHRpZW5lIHVuYSBpbnRlcmZhY2UpIGxhCitt4XNjYXJhIGRlIHN1YnJlZCBlcyBvcGNpb25hbC4gUGVybywgZXMgcmVxdWVyaWRhIHBhcmEgcmVkZXMgcXVlCityZWNpYmVuIHNlcnZpY2lvIERIQ1Agdu1hIHVuIGFnZW50ZSBkZSByZWxheS4gTGEgZGlyZWNjafNuIGRlCiticm9hZGNhc3Qgc2llbXByZSBlcyBvcGNpb25hbC4gU2llbXByZSBzZSBwZXJtaXRlIHRlbmVyIG3hcyBkZQordW4gcmFuZ28gZGhjcCAoZGhjcC1yYW5nZSkgZW4gdW5hIHN1YnJlZC4KKworRWwgcGFy4W1ldHJvIG9wY2lvbmFsCisuQiBzZXQ6PHRhZz4KK2ZpamEgdW5hIGV0aXF1ZXRhIGFsZmFudW3pcmljYSBsYSBjdWFsIG1hcmNhIGVzdGEgcmVkIGRlCit0YWwgZm9ybWEgcXVlIG9wY2lvbmVzIGRoY3AgcHVlZGFuIHNlciBlc3BlY2lmaWNhZGFzIGVuIGJhc2UgYSBjYWRhIHJlZC4KK0N1YW5kbyBlcyBwcmVmaWphZGEgY29uICd0YWc6JyBlbiB2ZXosIGVudG9uY2VzIGVsIHNpZ25pZmljYWRvIGNhbWJpYQorZGUgImZpamFyIGV0aXF1ZXRhIiBhICJjb2luY2lkaXIgY29uIGV0aXF1ZXRhIi4gU29sbyB1bmEgZXRpcXVldGEgcHVlZGUKK3NlciBmaWphZGEsIHBlcm8gbeFzIGRlIHVuYSBwdWVkZSBzZXIgcmV2aXNhZGEgcG9yIGNvaW5jaWRlbmNpYXMuIExhCitkaXJlY2Np824gZmluYWwgcHVlZGUgc2VyIHJlbXBsYXphZGEgcG9yIGxhIHBhbGFicmEgY2xhdmUKKy5CIHN0YXRpYworbGEgY3VhbCBsZSBkaWNlIGEgZG5zbWFzcSBxdWUgZGViZSBoYWJpbGl0YXIgREhDUCBwYXJhIGxhIHJlZAorZXNwZWNpZmljYWRhLCBwZXJvIG5vIGFsb2NhciBkaW7hbWljYW1lbnRlIGRpcmVjY2lvbmVzIElQOgorU29sbyBob3N0cyBxdWUgdGllbmVuIGRpcmVjY2lvbmVzIGVzdOF0aWNhcyBicmluZGFkYXMgdu1hCisuQiBkaGNwLWhvc3QKK28gZGVzZGUgL2V0Yy9ldGhlcnMgc2Vy4W4gc2VydmlkYXMuIExhIGRpcmVjY2nzbiBmaW5hbCBwdWVkZSBzZXIKK3JlbXBsYXphZGEgcG9yIGxhIHBhbGFicmEgY2xhdmUKKy5CIHByb3h5CitjYXNvIGVuIGVsIGN1YWwgZG5zbWFzcSBwcm92ZWVy4SBwcm94eS1ESENQIGVuIGxhIHN1YnJlZCBlc3BlY2lmaWNhZGEuIChWZXIKKy5CIHB4ZS1wcm9tcHQKK3kKKy5CIHB4ZS1zZXJ2aWNlCitwYXJhIGRldGFsbGVzLikKKworTGEgc2VjY2nzbiBpbnRlcmZhY2U6PGludGVyZmFjZSBuYW1lPiBubyBlcyBub3JtYWxtZW50ZSB1c2FkYS4gVmVyIGxhCitzZWNjafNuIE5PVEFTIHBhcmEgZGV0YWxsZXMgc29icmUgZXN0by4KKy5UUAorLkIgXC1HLCAtLWRoY3AtaG9zdD1bPGh3YWRkcj5dWyxpZDo8Y2xpZW50X2lkPnwqXVssc2V0Ojx0YWc+XVssPGlwYWRkcj5dWyw8aG9zdG5hbWU+XVssPHRpZW1wb19kZV9hcnJpZW5kbz5dWyxpZ25vcmFyXQorRXNwZWNpZmljYXIgcGFy4W1ldHJvcyBwb3IgaG9zdCBwYXJhIGVsIHNlcnZpZG9yIERIQ1AuIEVzdG8gcGVybWl0ZQorcXVlIHVuYSBt4XF1aW5hIGNvbiB1bmEgZGlyZWNjafNuIGRlIGhhcmR3YXJlIHBhcnRpY3VsYXIgc2VhIHNpZW1wcmUKK2Fsb2NhZGEgZWwgbWlzbW8gbm9tYnJlIGRlIGhvc3QsIGRpcmVjY2nzbiBJUCwgeSB0aWVtcG8gZGUgYXJyaWVuZG8uCitVbiBub21icmUgZGUgaG9zdCBlc3BlY2lmaWNhZG8gZGUgZXN0YSBtYW5lcmEgdG9tYSBwcmVzZWRlbmNpYQorc29icmUgY3VhbHF1aWVyYSBzdW1pbmlzdHJhZG8gcG9yIGVsIGNsaWVudGUgREhDUCBlbiBsYSBt4XF1aW5hLgorVGFtYmnpbiBzZSBwZXJtaXRlIG9taXRpciBsYSBkaXJlY2Npb24gZGUgaGFyZHdhcmUgeSBpbmNsdWlyIGVsCitub21icmUgZGUgaG9zdDsgZW4gdGFsIGNhc28gbGEgZGlyZWNjafNuIElQIHkgbG9zIHRpZW1wb3MgZGUgYXJyaWVuZG8KK3NlcuFuIGFwbGljYWJsZXMgYSBjdWFscXVpZXIgbeFxdWluYSBxdWUgcmVjbGFtZSBlc2Ugbm9tYnJlLgorUG9yIGVqZW1wbG86CisuQiAtLWRoY3AtaG9zdD0wMDoyMDplMDozYjoxMzphZix3YXAsaW5maW5pdGUKK2xlIGRpY2UgYSBkbnNtYXNxIHF1ZSBkZWJlIGRhcmxlIGEgbGEgbeFxdWluYSBjb24gZGlyZWNjafNuCitldGhlcm5ldCAwMDoyMDplMDozYjoxMzphZiBlbCBub21icmUgd2FwLCB5IHVuIGFycmllbmRvIERIQ1AgaW5maW5pdG8uCisuQiAtLWRoY3AtaG9zdD1sYXAsMTkyLjE2OC4wLjE5OQorbGUgZGljZSBhIGRuc21hc3EgcXVlIHNpZW1wcmUgZGViZSBhbG9jYXJsZSBhIGxhIG1hcXVpbmEgbGFwCitsYSBkaXJlY2Np824gSVAgMTkyLjE2OC4wLjE5OS4KKworRGlyZWNjaW9uZXMgYWxvY2FkYXMgZGUgZXN0YSBtYW5lcmEgbm8gdGllbmVuIHF1ZSBlc3RhciBkZW50cm8KK2RlbCByYW5nbyBkYWRvIGNvbiBsYSBvcGNp824gLS1kaGNwLXJhbmdlLCBwZXJvIGRlYmVuIGVzdGFyIGVuIGxhIHN1YnJlZAorZGUgdW4gcmFuZ28gREhDUCAoZGhjcC1yYW5nZSkgduFsaWRvLiBQYXJhIHN1YnJlZGVzIHF1ZSBubyBuZWNlc2l0YW4KK3VuYSBjb2xsZWNjafNuIGRlIGRpcmVjY2lvbmVzIGRpbmFtaWNhbWVudGUgYWxvY2FkYXMsIHVzYXIgbGEgcGFsYWJyYQorY2xhdmUgInN0YXRpYyIgaW4gbGEgZGVjbGFyYWNp824gZGhjcC1yYW5nZS4KKworRXMgcGVybWl0aWRvIHVzYXIgaWRlbnRpZmljYWRvcmVzIGRlIGNsaWVudGUgZW4gdmV6IGRlIGRpcmVjY2lvbmVzIGRlCitoYXJkd2FyZSBwYXJhIGlkZW50aWZpY2FyIGhvc3RzIHByZWZpamFuZG8gJ2lkOicuIE8gc2VhIHF1ZToKKy5CIC0tZGhjcC1ob3N0PWlkOjAxOjAyOjAzOjA0LC4uLi4uCitzZSByZWZpZXJlIGFsIGhvc3QgY29uIGlkZW50aWZpY2Fkb3IgZGUgY2xpZW50ZSAwMTowMjowMzowNC4KK1RhbWJp6W4gc2UgcGVybWl0ZSBlc3BlY2lmaWNhciBlbCBJRCBkZSBjbGllbnRlIGNvbW8gdGV4dG8sIGFz7ToKKy5CIC0tZGhjcC1ob3N0PWlkOmlkZGVjbGllbnRlY29tb3RleHRvLC4uLi4uCisKK0xhIG9wY2nzbiBlc3BlY2lhbCBpZDoqIHNpZ25pZmljYSAiaWdub3JhciBjdWFscXVpZXIgSUQgZGUgY2xpZW50ZQoreSB1c2FyIHNvbGFtZW50ZSBkaXJlY2Npb25lcyBNQUMuIiBFc3RvIGVzIPp0aWwgY3VhbmRvIHVuIGNsaWVudGUKK3ByZXNlbnRhIHVuIElEIGRlIGNsaWVudGUgYWxndW5hcyB2ZWNlcyBwZXJvIG90cmFzIG5vLgorCitTaSB1biBub21icmUgYXBhcmVjZSBlbiAvZXRjL2hvc3RzLCBsYSBkaXJlY2Np824gYXNvY2lhZGEgcHVlZGUKK3NlciBhbG9jYWRhIGEgdW4gYXJyaWVuZG8gREhDUCwgcGVybyBzb2xvIHNpIGV4aXN0ZSB1bmEgb3BjafNuCisuQiAtLWRoY3AtaG9zdAorbGEgY3VhbCBlc3BlY2lmaWNhIGVsIG5vbWJyZSB0YW1iaeluLiBTb2xvIHVuIGhvc3RuYW1lIHB1ZWRlIHNlcgorYnJpbmRhZG8gZW4gdW5hIG9wY2nzbgorLkIgZGhjcC1ob3N0CitwZXJvIGFsaWFzZXMgc29uIHBvc2libGVzIHBvciBtZWRpbyBkZWwgdXNvIGRlIENOQU1Fcy4gKFZlcgorLkIgLS1jbmFtZQorKS4KKworTGEgcGFsYWJyYSBjbGF2ZSAiaWdub3JlIgorbGUgZGljZSBhIGRuc21hc3EgcXVlIG5vIGRlYmUgb2ZyZWNlciBqYW3hcyB1biBhcnJpZW5kbyBESENQIGEKK3VuYSBt4XF1aW5hLiBMYSBt4XF1aW5hIHB1ZWRlIHNlciBlc3BlY2lmaWNhZGEgcG9yIGRpcmVjY2nzbiBkZQoraGFyZHdhcmUsIElEIGRlIGNsaWVudGUsIG8gbm9tYnJlIGRlIGhvc3QsIHBvciBlamVtcGxvOgorLkIgLS1kaGNwLWhvc3Q9MDA6MjA6ZTA6M2I6MTM6YWYsaWdub3JlCitFc3RvIGVzIPp0aWwgY3VhbmRvIGhheSBvdHJvIHNlcnZpZG9yIERIQ1AgZW4gbGEgcmVkIHF1ZSBkZWJlIHNlcgordXNhZG8gcG9yIGFsZ/puYXMgbeFxdWluYXMuCisKK0VsIHNldDo8dGFnPiBmaWphIGxhIGV0aXF1ZXRhIGN1YW5kbyBzZWEgcXVlCitlc3RhIGRpcmVjdGl2YSBkaGNwLWhvc3QgZXN04SBlbiB1c28uIEVzdG8gcHVlZGUgc2VyIHVzYWRvIHBhcmEKK2VudmlhciBzZWxlY3RpdmFtZW50ZSBvcGNpb25lcyBESENQIGEgZXN0ZSBob3N0LiBN4XMgZGUgdW5hIGV0aXF1ZXRhCitwdWVkZSBzZXIgZmlqYWRhIGVuIHVuYSBkaXJlY3RpdmEgZGhjcC1ob3N0IChwZXJvIG5vIGVuIG90cm9zIGx1Z2FyZXMKK2RvbmRlICJzZXQ6PHRhZz4iIGVzIHBlcm1pdGlkbykuIEN1YW5kbyB1biBob3N0IGNvaW5jaWRlIGNvbiAKK2N1YWxxdWllciBkaXJlY3RpdmEgZGhjcC1ob3N0IChvIHVuYSBpbXBsaWNhZGEgcG9yCisvZXRjL2V0aGVycykgZW50b25jZXMgbGEgZXRpcXVldGEgZXNwZWNpYWwgImtub3duIiBlcworZmlqYWRhLiBFc3RvIHBlcm1pdGUgcXVlIGRuc21hc3Egc2VhIGNvbmZpZ3VyYWRvIHBhcmEgaWdub3JhcgorcGVkaWRvcyBkZXNkZSBt4XF1aW5hcyBkZXNjb25vY2lkYXMgdXNhbmRvCisuQiAtLWRoY3AtaWdub3JlPXRhZzoha25vd24KK0RpcmVjY2lvbmVzIGV0aGVybmV0IChwZXJvIG5vIGNsaWVudC1pZHMpIHB1ZWRlbiB0ZW5lciBieXRlcworY29tb2TtbmVzLCBhc+0gcXVlIHBvciBlamVtcGxvCisuQiAtLWRoY3AtaG9zdD0wMDoyMDplMDozYjoxMzoqLGlnbm9yZQorY2F1c2Fy4SBxdWUgZG5zbWFzcSBpZ25vcmUgdW4gcmFuZ28gZGUgZGlyZWNjaW9uZXMgZXRoZXJuZXQuIE7zdGVzZQorcXVlIGVsICIqIiBuZWNlc2l0YXLhIHNlciBlc2NhcGFkbyBvIGVzY3JpdG8gZW50cmUgY29taWxsYXMgZW4gbGEKK2ztbmVhIGRlIGNvbWFuZG9zLCBwZXJvIG5vIGVuIGVsIGFyY2hpdm8gZGUgY29uZmlndXJhY2nzbi4KKworRGlyZWNjaW9uZXMgZGUgaGFyZHdhcmUgbm9ybWFsbWVudGUgY29pbmNpZGVuIGNvbiBjdWFscXVpZXIKK3RpcG8gZGUgcmVkIChBUlApLCBwZXJvIGVzIHBvc2libGUgcmVzdHJpbmdpcmxhcyBhIHVuIHRpcG8gQVJQCitzaW5ndWxhciBwcmVjZWRpZW5kb2xvIGNvbiBlbCB0aXBvIEFSUCAoZW4gSEVYKSB5ICItIi4gQXPtIHF1ZQorLkIgLS1kaGNwLWhvc3Q9MDYtMDA6MjA6ZTA6M2I6MTM6YWYsMS4yLjMuNAorc29sbyBjb2luY2lkaXLtYSBjb24gdW5hIGRpcmVjY2nzbiBkZSBoYXJkd2FyZSBUb2tlbi1SaW5nLCBkYWRvIHF1ZQorZWwgdGlwbyBBUlAgcGFyYSBUb2tlbi1SaW5nIGVzIDYuCisKK0NvbW8gY2FzbyBlc3BlY2lhbCwgZXMgcG9zaWJsZSBpbmNsdWlyIG3hcyBkZSB1bmEgZGlyZWNjafNuIGRlCitoYXJkd2FyZS4gRWplbXBsbzoKKy5CIC0tZGhjcC1ob3N0PTExOjIyOjMzOjQ0OjU1OjY2LDEyOjM0OjU2Ojc4OjkwOjEyLDE5Mi4xNjguMC4yCitFc3RvIHBlcm1pdGUgcXVlIHVuYSBkaXJlY2Np824gSVAgc2VhIGFzb2NpYWRhIGNvbgorZGlyZWNjaW9uZXMgZGUgaGFyZHdhcmUgbfpsdGlwbGVzLCB5IGxlIGJyaW5kYSBhIGRuc21hc3EgcGVybWlzbworcGFyYSBhYmFuZG9uYXIgdW4gYXJyaWVuZG8gREhDUCBhIHVuYSBkZSBsYXMgZGlyZWNjaW9uZXMgZGUgaGFyZHdhcmUKK2N1YW5kbyBvdHJhIHBpZGUgdW4gYXJyaWVuZG8uIE7zdGVzZSBxdWUgZXN0byBlcyBhbGdvIHBlbGlncm9zbywKK3PzbG8gZnVuY2lvbmFy4SBkZXBlbmRpYmxlbWVudGUgc2kgdW5hIGRlIGxhcyBkaXJlY2Npb25lcyBkZSBoYXJkd2FyZQorZXN04SBhY3RpdmEgZW4gY3VhbHF1aWVyIG1vbWVudG8geSBkbnNtYXNxIG5vIHRpZW5lIGZvcm1hIGRlIGVuZm9yemFyCitlc3RvLiBQZXJvIGVzIPp0aWwsIHBvciBlamVtcGxvLCBwYXJhIGFsb2NhciB1bmEgZGlyZWNjafNuIElQIGVzdGFibGUKK2EgdW5hIGxhcHRvcCBxdWUgdGllbmUgaW50ZXJmYWNlIGFs4W1icmljYSBlIGluYWzhbWJyaWNhLgorLlRQCisuQiAtLWRoY3AtaG9zdHNmaWxlPTxhcmNoaXZvPgorTGVlciBpbmZvcm1hY2nzbiBob3N0IERIQ1AgZGVzZGUgZWwgYXJjaGl2byBlc3BlY2lmaWNhZG8uIEVsIGFyY2hpdm8gY29udGllbmUgaW5mb3JtYWNp824gZGUgdW4gaG9zdCBwb3IgbO1uZWEuIEVsIGZvcm1hdG8gZGUgdW5hIGztbmVhIGVzIGlndWFsIHF1ZSB0ZXh0byBoYWNpYSBsYSBkZXJlY2hhIGRlICc9JyBlbiAtLWRoY3AtaG9zdC4gTGEgdmVudGFqYSBkZSBhbG1hY2VuYXIgaW5mb3JtYWNp824gaG9zdCBESENQIGVuIGVzdGUgYXJjaGl2byBlcyBxdWUgcHVlZGUgc2VyIGNhbWJpYWRhIHNpbiB0ZW5lciBxdWUgcmVpbmljaWFyIGRuc21hc3EuIEVsIGFyY2hpdm8gc2Vy4SByZS1sZe1kbyBjdWFuZG8gZG5zbWFzcSByZWNpYmUgdW4gU0lHSFVQLgorLlRQCisuQiAtLWRoY3Atb3B0c2ZpbGU9PGFyY2hpdm8+CitMZWVyIGluZm9ybWFjafNuIHNvYnJlIG9wY2lvbmVzIERIQ1AgZGVzZGUgZWwgYXJjaGl2byBlc3BlY2lmaWNhZG8uIExhCit2ZW50YWphIGRlIHVzYXIgZXN0YSBvcGNp824gZXMgbGEgbWlzbWEgcXVlIGNvbiAtLWRoY3AtaG9zdHNmaWxlOiBlbAorYXJjaGl2byBkaGNwLW9wdHNmaWxlIHNlcuEgcmUtbGXtZG8gY3VhbmRvIGRuc21hc3EgcmVjaWJlIHVuIFNJR0hVUC4KK07zdGVzZSBxdWUgZXMgcG9zaWJsZSBjb2xvY2FyIGxhIGluZm9ybWFjafNuIG1lZGlhbnRlCisuQiAtLWRoY3AtYm9vdAorY29tbyBvcGNpb25lcyBESENQLCB1c2FuZG8gbG9zIG5vbWJyZXMgZGUgb3BjafNuIGJvb3RmaWxlLW5hbWUsCitzZXJ2ZXItaXAtYWRkcmVzcywgeSB0ZnRwLXNlcnZlci4gRXN0byBwZXJtaXRlIHF1ZSBzZWFuIGluY2x1aWRhcyBlbgordW4gYXJjaGl2byBkaGNwLW9wdHNmaWxlLgorLlRQCisuQiBcLVosIC0tcmVhZC1ldGhlcnMKK0xlZXIgL2V0Yy9ldGhlcnMgZW4gYnVzY2EgZGUgaW5mb3JtYWNp824gc29icmUgaG9zdHMgcGFyYSBlbCBzZXJ2aWRvcgorREhDUC4gRWwgZm9ybWF0byBkZSAvZXRjL2V0aGVycyBlcyB1bmEgZGlyZWNjafNuIGRlIGhhcmR3YXJlLCBzZWd1aWRhCitwb3IgeWEgc2VhIHVuIG5vbWJyZSBkZSBob3N0IG8gdW5hIGRpcmVjY2nzbiBJUC4gQWwgc2VyIGxlaWRhcyBwb3IKK2Ruc21hc3EsIGVzdGFzIGztbmVhcyB0aWVuZW4gZXjhY3RhbWVudGUgZWwgbWlzbW8gZWZlY3RvIHF1ZSBvcGNpb25lcworLkIgLS1kaGNwLWhvc3QKK3F1ZSBjb250aWVuZW4gbGEgbWlzbWEgaW5mb3JtYWNp824uIC9ldGMvZXRoZXJzIGVzIHJlLWxl7WRhIGN1YW5kbworZG5zbWFzcSByZWNpYmUgdW4gU0lHSFVQLgorLlRQCisuQiBcLU8sIC0tZGhjcC1vcHRpb249W3RhZzo8dGFnPixbdGFnOjx0YWc+LF1dW2VuY2FwOjxvcHQ+LF1bdmktZW5jYXA6PGVudGVycHJpc2U+LF1bdmVuZG9yOls8dmVuZG9yLWNsYXNzPl0sXVs8b3B0PnxvcHRpb246PG9wdC1uYW1lPl0sWzx2YWx1ZT5bLDx2YWx1ZT5dXQorRXNwZWNpZmljYXIgb3BjaW9uZXMgZGlmZXJlbnRlcyBvIGV4dHJhIGEgY2xpZW50ZXMgREhDUC4gUG9yCitwcmVkZXRlcm1pbmFkbywgZG5zbWFzcSBlbnbtYSBhbGd1bmFzIG9wY2lvbmVzIGVzdOFuZGFyIGEgY2xpZW50ZXMKK0RIQ1AuIExhIG3hc2NhcmEgZGUgc3VicmVkIHkgZGlyZWNjafNuIGJyb2FkY2FzdCBzb24gZmlqYWRhcyBpZ3VhbAorYSBsYXMgZGVsIGhvc3QgcXVlIGNvcnJlIGRuc21hc3EsIHkgZWwgc2Vydmlkb3IgRE5TIHkgcnV0ZWFkb3IKK2EgbGEgZGlyZWNjafNuIGRlIGxhIG3hcXVpbmEgcXVlIGNvcnJlIGRuc21hc3EuIFNpIGxhIG9wY2nzbiBkZQorbm9tYnJlIGRlIGRvbWluaW8gaGEgc2lkbyBmaWphZGEsIGVzIGVudmlhZGEuIEVzdGEgb3BjafNuIHBlcm1pdGUKK3F1ZSBlc29zIHByZWRldGVybWluYWRvcyBzZWFuIHNvYnJlc2NyaXRvcywgbyBxdWUgc2VhbiBlc3BlY2lmaWNhZGFzCitvdHJhcyBvcGNpb25lcy4gTGEgb3BjafNuIGEgc2VyIGVudmlhZGEgcHVlZGUgc2VyIGJyaW5kYWRhIGNvbW8gdW4KK276bWVybyBkZWNpbWFsIG8gY29tbyAib3B0aW9uOjxvcHRpb24tbmFtZT4iLiBMb3MgbvptZXJvcyBkZSBvcGNp824KK2VzdOFuIGVzcGVjaWZpY2Fkb3MgZW4gUkZDMjEzMiB5IFJGQ3Mgc3Vic2lndWllbnRlcy4gRWwganVlZ28gZGUKK29wdGlvbi1uYW1lcyBjb25vY2lkbyBwb3IgZG5zbWFzcSBwdWVkZSBzZXIgZGVzY3ViaWVydG8gZWplY3V0YW5kbworImRuc21hc3EgLS1oZWxwIGRoY3AiLiBQb3IgZWplbXBsbywgcGFyYSBmaWphciBsYSBydXRhIHByZWRldGVybWluYWRhIGEKKzE5Mi4xNjguNC40LCBo4Wdhc2UgdW4KKy5CIC0tZGhjcC1vcHRpb249MywxOTIuMTY4LjQuNAorbworLkIgLS1kaGNwLW9wdGlvbj1vcHRpb246cm91dGVyLCAxOTIuMTY4LjQuNAoreSBwYXJhIGZpamFyIGxhIGRpcmVjY2nzbiBkZSBzZXJ2aWRvciBkZSB0aWVtcG8gYSAxOTIuMTY4LjAuNCwKK2jhZ2FzZSB1bgorLkIgLS1kaGNwLW9wdGlvbj00MiwxOTIuMTY4LjAuNAorbworLkIgLS1kaGNwLW9wdGlvbj1vcHRpb246bnRwLXNlcnZlciwgMTkyLjE2OC4wLjQKK0xhIGRpcmVjY2nzbiBlc3BlY2lhbCAwLjAuMC4wIGVzIGVudGVuZGlkYSBxdWUgc2lnbmlmaWNhICJsYQorZGlyZWNjafNuIGRlIGxhIG3hcXVpbmEgcXVlIGNvcnJlIGRuc21hc3EiLiBUaXBvcyBkZSBkYXRhIHBlcm1pdGlkb3MKK3NvbiBkaXJlY2Npb25lcyBJUCBkZSBjdWF0cm8gc2VnbWVudG9zLCB1biBu+m1lcm8gZGVjaW1hbCwgZO1naXRvcyBoZXgKK3NlcGFyYWRvcyBwb3IgY29sb25lcywgeSB1biBzdHJpbmcgZGUgdGV4dG8uIFNpIGxhcyBldGlxdWV0YXMKK29wY2lvbmFsZXMgc29uIGJyaW5kYWRhcywgZW50b25jZXMgZXN0YSBvcGNp824gZXMgc29sbyBlbnZpYWRhIGN1YW5kbwordG9kYXMgbGFzIGV0aXF1ZXRhcyBjb2luY2lkZW4uCisKK1Byb2Nlc2FtaWVudG8gZXNwZWNpYWwgZXMgbGxldmFkbyBhIGNhYm8gZW4gdW4gYXJndW1lbnRvIGRlIHRleHRvIHBhcmEKK2xhIG9wY2nzbiAxMTksIGVuIGNvbmZvcm1lIGNvbiBSRkMzMzk3LiBEaXJlY2Npb25lcyBJUCB0ZXh0dWFsZXMgbyBkZQorY3VhdHJvIHNlZ21lbnRvcyBjb21vIGFyZ3VtZW50b3MgYSBsYSBvcGNp824gMTIwIHNvbiBtYW5lamFkb3MgbWVkaWFudGUKK1JGQzMzNjEuIERpcmVjY2lvbmVzIElQIGRlIGN1YXRybyBzZWdtZW50b3MgcXVlIHNvbiBzZWd1aWRhcyBwb3IgdW4gZGlhZ29uYWwKKyhzbGFzaCkgeSBkZXNwdelzIHVuYSBt4XNjYXJhIHNvbiBjb2RpZmljYWRvcyBtZWRpYW50ZSBSRkMzNDQyLgorCitUZW5lciBjdWlkYWRvOiBuaWd1bmEgdmVyaWZpY2FjafNuIGVzIGhlY2hhIHNvYnJlIHNpIGVsIG76bWVybyBkZSB0aXBvCitjb3JyZWN0byBlcyBlbnZpYWRvLCB5IGVzIG11eSBwb3NpYmxlIHBlcnN1YWRpciBhIGRuc21hc3EgcGFyYSBxdWUKK2dlbmVyZSBwYXF1ZXRlcyBESENQIGlsZWdhbGVzIG1lZGlhbnRlIHVzbyBpbmFkZWN1YWRvIGRlIGVzdGEgb3BjafNuLgorQ3VhbmRvIGVsIHZhbG9yIGVzIHVuIG76bWVybyBkZWNpbWFsLCBkbnNtYXNxIGRlYmUgZGV0ZXJtaW5hciBxdekgdGFuCitncmFuZGUgZXMgZWwgb2JqZXRvIGRlIGRhdGEuIEVzdG8gZXMgaGVjaG8gbWVkaWFudGUgdW5hIGV4YW1pbmFjafNuIGRlbAorbvptZXJvIGRlIG9wY2nzbiwgeS9vIGVsIHZhbG9yLCBwZXJvIHB1ZWRlIHNlciBpbnZhbGlkYWRvIGFncmVn4W5kb2xlCit1bmEgb3BjafNuIGRlIHVuYSBzb2xhIGxldHJhIGRlIGVzdGEgZm9ybWE6IGIgPSB1biBieXRlLCBzID0gZG9zIGJ5dGVzLAoraSA9IGN1YXRybyBieXRlcy4gRXN0byBlcyBwcmluY2lwYWxtZW50ZSD6dGlsIGNvbiBvcGNpb25lcyBlbmNhcHN1bGFkYXMKK3RpcG8gdmVuZGVkb3IgKHZlciBhYmFqbykgZG9uZGUgZG5zbWFzcSBubyBwdWVkZSBkZXRlcm1pbmFyIGVsIHRhbWHxbworZGUgZGF0YSB1c2FuZG8gZWwgbvptZXJvIGRlIG9wY2nzbi4gRGF0YSBkZSBvcGNp824gbGEgY3VhbCBjb25zaXN0ZQorc29sbyBkZSBwdW50b3MgeSBk7WdpdG9zIHNlcuEgaW50ZXJwcmV0YWRhIHBvciBkbnNtYXNxIGNvbW8gdW5hCitkaXJlY2Np824gSVAsIHkgc2Vy4SBpbnNlcnRhZGEgZGVudHJvIGRlIHVuYSBvcGNp824gZGUgZXNhIG1hbmVyYS4KK1BhcmEgZm9yemFyIHVuIHN0cmluZyBsaXRlcmFsLCB1c2FyIGNvbWlsbGFzLiBQb3IgZWplbXBsbywgY3VhbmRvIHNlCit1c2EgbGEgb3BjafNuIDY2IHBhcmEgZW52aWFyIHVuYSBJUCBsaXRlcmFsIGNvbW8gdW4gbm9tYnJlIGRlIHNlcnZpZG9yCitURlRQLCBlcyBuZWNlc2FyaW8gaGFjZXI6CisuQiAtLWRoY3Atb3B0aW9uPTY2LCIxLjIuMy40IgorCitPcGNpb25lcyBlbmNhcHN1bGFkYXMgdmVuZG9yLWNsYXNzIHRhbWJp6W4gcHVlZGVuIHNlciBlc3BlY2lmaWNhZGFzIHVzYW5kbworLS1kaGNwLW9wdGlvbjogcG9yIGVqZW1wbG8KKy5CIC0tZGhjcC1vcHRpb249dmVuZG9yOlBYRUNsaWVudCwxLDAuMC4wLjAKK2Vudu1hIGxhIG9wY2nzbiBlc3BlY+1maWNhIGRlIGNsYXNlIGRlIHZlbmRlZG9yICJtZnRwLWFkZHJlc3M9MC4wLjAuMCIgYQorY3VhbHF1aWVyIGNsaWVudGUgY3V5byB2ZW5kb3ItY2xhc3MKK2NvaW5jaWRhIGNvbiAiUFhFQ2xpZW50Ii4gRWwgcmV2aXNhZG8gZGUgY29pbmNpZGVuY2lhcyB2ZW5kb3ItY2xhc3MgZXN04QorYmFzYWRvIGVuIHN1YnN0cmluZ3MgKHZlciAtLWRoY3AtdmVuZG9yY2xhc3MgcGFyYSBkZXRhbGxlcykuIFNpIHVuYSBvcGNp824KK3ZlbmRvci1jbGFzcyAobvptZXJvIDYwKSBlcyBlbnZpYWRhIHBvciBkbnNtYXNxLCBlbnRvbmNlcyBlcyB1c2FkYSBwYXJhCitzZWxlY2Npb25hciBvcGNpb25lcyBlbmNhcHN1bGFkYXMgZW4gcHJlZmVyZW5jaWEgc29icmUgY3VhbHF1aWVyYSBlbnZpYWRhCitwb3IgZWwgY2xpZW50ZS4gRXMgcG9zaWJsZSBvbWl0aXIgZWwgdmVuZG9yY2xhc3MgY29tcGxldGFtZW50ZTsKKy5CIC0tZGhjcC1vcHRpb249dmVuZG9yOiwxLDAuMC4wLjAKK2Nhc28gZW4gZWwgY3XhbCBsYSBvcGNp824gZW5jYXBzdWxhZGEgc2llbXByZSBlcyBlbnZpYWRhLgorT3BjaW9uZXMgcHVlZGVuIHNlciBlbmNhcHN1bGFkYXMgZGVudHJvIGRlIG90cmFzIG9wY2lvbmVzLCBwb3IgZWplbXBsbzoKKy5CIC0tZGhjcC1vcHRpb249ZW5jYXA6MTc1LCAxOTAsICJpc2NzaS1jbGllbnQwIgorZW52aWFy4SBvcGNp824gMTc1LCBkZW50cm8gZGUgbGEgY3VhbCBlc3ThIG9wY2nzbiAxOTAuIFNpIG36bHRpcGxlcworb3BjaW9uZXMgc29uIGJyaW5kYWRhcyBxdWUgZXN04W4gZW5jYXBzdWxhZGFzIGNvbiBlbCBtaXNtbyBu+m1lcm8gZGUKK29wY2nzbiBlbnRvbmNlcyBzZXLhbiBjb3JyZWN0YW1lbnRlIGNvbWJpbmFkYXMgZW4gdW5hIG9wY2nzbiBlbmNhcHN1bGFkYS4KK2VuY2FwOiB5IHZlbmRvcjogbm8gcHVlZGVuIHNlciBmaWphZGFzIGFtYmFzIGRlbnRybyBkZSBsYSBtaXNtYSBvcGNp824gZGhjcC1vcHRpb24uCisKK0xhIHZhcmlhbnRlIGZpbmFsIGVuIG9wY2lvbmVzIGVuY2Fwc3VsYWRhcyBlcyAiVmVuZG9yLUlkZW50aWZ5aW5nIFZlbmRvciBPcHRpb25zIgorY29tbyBlc3BlY2lmaWNhZG8gZW4gUkZDMzkyNS4gRXN0b3Mgc29uIGRlbm90YWRvcyBhc+06CisuQiAtLWRoY3Atb3B0aW9uPXJmYzM5MjUtZW5jYXA6MiwgMTAsICJ0ZXh0IgorRWwgbvptZXJvIGVuIGxhIHNlY2Np824gcmZjMzkyNS1lbmNhcDogZXMgZWwgbvptZXJvIGVudGVycHJpc2UgdXNhZG8KK3BhcmEgaWRlbnRpZmljYXIgZXN0YSBvcGNp824uCisKK0xhIGRpcmVjY2nzbiAwLjAuMC4wIG5vIGVzIHRyYXRhZGEgZGUgZm9ybWEgZXNwZWNpYWwgZW4gb3BjaW9uZXMgZW5jYXBzdWxhZGFzLgorLlRQCisuQiAtLWRoY3Atb3B0aW9uLWZvcmNlPVt0YWc6PHRhZz4sW3RhZzo8dGFnPixdXVtlbmNhcDo8b3B0PixdW3ZpLWVuY2FwOjxlbnRlcnByaXNlPixdW3ZlbmRvcjpbPHZlbmRvci1jbGFzcz5dLF08b3B0PixbPHZhbHVlPlssPHZhbHVlPl1dCitFc3RvIGZ1bmNpb25hIGV44WN0YW1lbnRlIGRlIGxhIG1pc21hIGZvcm1hIHF1ZQorLkIgLS1kaGNwLW9wdGlvbgorZXhjZXB0byBxdWUgbGEgb3BjafNuIHNpZW1wcmUgc2Vy4SBlbnZpYWRhLCBh+m4gc2kgZWwgY2xpZW50ZSBubyBsYSBwaWRlIGVuCitsYSBsaXN0YSBkZSBwZWRpZG8gZGUgcGFy4W1ldHJvcy4gRXN0byBzZSBuZWNlc2l0YSBhdmVjZXMsIHBvciBlamVtcGxvIGN1YW5kbworZW52aWFuZG8gb3BjaW9uZXMgYSBQWEVMaW51eC4KKy5UUAorLkIgLS1kaGNwLW5vLW92ZXJyaWRlCitEZXNoYWJpbGl0YXIgbGEgcmV1dGlsaXphY2nzbiBkZSBsb3MgY2FtcG9zIERIQ1AgZGUgbm9tYnJlIGRlIHNlcnZpZG9yIHkKK2FyY2hpdm8gY29tbyBlc3BhY2lvIHBhcmEgb3BjaW9uZXMgZXh0cmEuIFNpIHB1ZWRlLCBkbnNtYXNxIG11ZXZlIGxhIGluZm9ybWFjafNuCitkZWwgc2Vydmlkb3IgYm9vdCB5IGRlbCBub21icmUgZGUgYXJjaGl2byAoZGUgZGhjcC1ib290KSBkZSBzdXMgY2FtcG9zIGRlZGljYWRvcworaGFjaWEgb3BjaW9uZXMgREhDUC4gRXN0byBjcmVhIGVzcGFjaW8gZXh0cmEgZW4gZWwgcGFxdWV0ZSBESENQIHBhcmEgb3BjaW9uZXMsCitwZXJvIHB1ZWRlIHJhcmFtZW50ZSBjb25mdW5kaXIgY2xpZW50ZXMgdmllam9zIG8gZGVmZWN0dW9zb3MuIEVzdGEgb3BjafNuIGZvcnphCitjb21wb3J0YW1pZW50byAic2ltcGxlIHkgc2VuY2lsbG8iIHBhcmEgcHJldmVuaXIgcHJvYmxlbWFzIGVuIHRhbGVzIGNhc29zLgorLlRQCisuQiBcLVUsIC0tZGhjcC12ZW5kb3JjbGFzcz1zZXQ6PHRhZz4sPHZlbmRvci1jbGFzcz4KK1RyYXphciBkZXNkZSB1biBzdHJpbmcgdmVuZG9yLWNsYXNzIGEgdW5hIGV0aXF1ZXRhLiBMYSBtYXlvcu1hIGRlIGxvcworY2xpZW50ZXMgREhDUCBwcm92ZWVuIHVuYSAidmVuZG9yIGNsYXNzIiBsYSBjdWFsIHJlcHJlc2VudGEsIGVuIGNpZXJ0bworc2VudGlkbywgZWwgdGlwbyBkZSBob3N0LiBFc3RhIG9wY2nzbiB0cmF6YSBjbGFzZXMgZGUgdmVuZGVkb3IgYSBuZXR3b3JrCitpZHMsIGRlIHRhbCBmb3JtYSBxdWUgb3BjaW9uZXMgREhDUCBwdWVkZW4gc2VyIHNlbGVjdGl2YW1lbnRlIGVudHJlZ2FkYXMKK2EgZGlmZXJlbnRlcyBjbGFzZXMgZGUgaG9zdHMuIFBvciBlamVtcGxvCisuQiBkaGNwLXZlbmRvcmNsYXNzPXNldDpwcmludGVycyxIZXdsZXR0LVBhY2thcmQgSmV0RGlyZWN0CitwZXJpdGly7WEgcXVlIG9wY2lvbmVzIHNlYW4gZmlqYWRhcyBzb2xvIHBhcmEgaW1wcmVzb3JhcyBIUCBhc+06CisuQiAtLWRoY3Atb3B0aW9uPXRhZzpwcmludGVycywzLDE5Mi4xNjguNC40CitFbCBzdHJpbmcgdmVuZG9yLWNsYXNzIGVzIGNvb3JkaW5hZG8gY29uIGVsIHZlbmRvci1jbGFzcyBwcm92ZWlkbyBwb3IKK2VsIGNsaWVudGUsIHBhcmEgcGVybWl0aXIgY29pbmNpZGVuY2lhcyBib3Jyb3Nhcy4gRWwgcHJlZmlqbyBzZXQ6IGVzCitvcGNpb25hbCwgcGVybyBwZXJtaXRpZG8gcG9yIHJhem9uZXMgZGUgY29uc2lzdGVuY2lhLgorLlRQCisuQiBcLWosIC0tZGhjcC11c2VyY2xhc3M9c2V0Ojx0YWc+LDx1c2VyLWNsYXNzPgorVHJhemFyIGRlc2RlIHVuIHN0cmluZyB1c2VyLWNsYXNzIGEgdW5hIGV0aXF1ZXRhIChjb24gY29vcmRpbmFjafNuCitzdWJzdHJpbmcsIGNvbW8gY29uIHZlbmRvci1jbGFzcykuIExhIG1heW9y7WEgZGUgbG9zIGNsaWVudGVzIERIQ1AKK3Byb3ZlZW4gdW4gInVzZXIgY2xhc3MiIGVsIGN1YWwgZXMgY29uZmlndXJhYmxlLiBFc3RhIG9wY2nzbiB0cmF6YQorY2xhc2VzIHVzZXIgYSBuZXR3b3JrIGlkcywgZGUgdGFsIG1hbmVyYSBxdWUgb3BjaW9uZXMgREhDUCBwdWVkYW4KK3NlciBzZWxlY3RpdmFtZW50ZSBlbnZpYWRhcyBhIGRpZmVyZW50ZXMgdGlwb3MgZGUgaG9zdHMuIEVzIHBvc2libGUsCitwb3IgZWplbXBsbywgdXNhciBlc3RvIHBhcmEgZXNwZWNpZmljYXIgdW5hIGltcHJlc29yYSBkaWZlcmVudGUgcGFyYQoraG9zdHMgZW4gbGEgY2xhc2UgImN1ZW50YXMiIHF1ZSBwYXJhIGxvcyBkZSBsYSBjbGFzZSAiaW5nZW5pZXJpYSIuCisuVFAKKy5CIFwtNCwgLS1kaGNwLW1hYz1zZXQ6PHRhZz4sPE1BQyBhZGRyZXNzPgorVHJhemFyIGRlc2RlIHVuYSBkaXJlY2Np824gTUFDIGEgdW5hIGV0aXF1ZXRhLiBMYSBkaXJlY2Np824gTUFDCitwdWVkZSBpbmNsdWlyIGNvbW9k7W5lcy4gUG9yIGVqZW1wbG86CisuQiAtLWRoY3AtbWFjPXNldDozY29tLDAxOjM0OjIzOio6KjoqCitmaWphcu1hIGVsIHRhZyAiM2NvbSIgYSBjdWFscXVpZXIgaG9zdCBlbCBjdWFsIHN1IE1BQyBjb2luY2lkYSBjb24KK2VsIHBhdHLzbi4KKy5UUAorLkIgLS1kaGNwLWNpcmN1aXRpZD08bmV0d29yay1pZD4sPGNpcmN1aXQtaWQ+LCAtLWRoY3AtcmVtb3RlaWQ9PG5ldHdvcmstaWQ+LDxyZW1vdGUtaWQ+CitUcmF6YXIgZGUgb3BjaW9uZXMgYWdlbnRlIGRlIHJlbGF5IFJGQzMwNDYgYSBldGlxdWV0YXMuIEVzdG9zCitkYXRvcyBwdWVkZW4gc2VyIHByb3Zl7WRvcyBwb3IgYWdlbnRlcyBkZSByZWxheSBESENQLiBFbCBjaXJjdWl0LWlkIG8KK3JlbW90ZS1pZCBlcyBub3JtbGFtZW50ZSBicmluZGFkbyBjb21vIGhleCBzZXBhcmFkbyBwb3IgZG9ibGVwdW50b3MsIHBlcm8KK3RhbWJp6W4gc2UgcGVybWl0ZSB1biBzdHJpbmcgc2ltcGxlLiBTaSBzZSBvYnRpZW5lIHVuYSBjb2luY2lkZW5jaWEgZXhhY3RhCitlbnRyZSBlbCBjaXJjdWl0IG8gYWdlbnQgSUQgeSB1bm8gcHJvdmXtZG8gcG9yIHVuIGFnZW50ZSBkZSByZWxheSwKK2xhIGV0aXF1ZXRhIGVzIGZpamFkYS4KKy5UUAorLkIgLS1kaGNwLXN1YnNjcmlkPXNldDo8dGFnPiw8c3Vic2NyaWJlci1pZD4KK1RyYXphciBkZSBvcGNpb25lcyByZWxheSBzdWJzY3JpYmVyLWlkIFJGQzM5OTMgYSBldGlxdWV0YXMuCisuVFAKKy5CIC0tZGhjcC1wcm94eVs9PGlwIGFkZHI+XS4uLi4uLgorVW4gYWdlbnRlIGRlIHJlbGF5IG5vcm1hbCBlcyB1c2FkbyBzb2xhbWVudGUgcGFyYSByZWVudmlhciBsYXMgcGFydGVzCitpbmljaWFsZXMgZGUgdW5hIGludGVyYWNjafNuIERIQ1AgY29uIGVsIHNlcnZpZG9yIERIQ1AuIFVuYSB2ZXogcXVlCit1biBjbGllbnRlIGVzIGNvbmZpZ3VyYWRvLCBzZSBjb211bmljYSBkaWVjdGFtZW50ZSBjb24gZWwgc2Vydmlkb3IuIEVzdG8KK2VzIGluZGVzZWFibGUgc2kgZWwgYWdlbnRlIGRlIHJlbGF5IGVzdOEgYWdyZWdhbmRvIGluZm9ybWFjafNuIGV4dHJhIGEKK2xvcyBwYXF1ZXRlcyBESENQLCB0YWwgY29tbyB1c2FkbyBwb3IKKy5CIGRoY3AtY2lyY3VpdGlkCit5CisuQiBkaGNwLXJlbW90ZWlkLgorVW5hIGltcGxlbWVudGFjafNuIHJlbGF5IGNvbXBsZXRhIHB1ZWRlIHVzYXIgbGEgb3BjafNuIHNlcnZlcmlkLW92ZXJyaWRlCitSRkMgNTEwNyBwYXJhIG9ibGlnYXIgYWwgc2Vydmlkb3IgREhDUCBhIHVzYXIgZWwgcmVsYXkgY29tbyB1biBwcm94eQorY29tcGxldG8sIGNvbiB0b2RvcyBsb3MgcGFxdWV0ZXMgcGFzYW5kbyBhIHRyYXZleiBkZSBlbC4gRXN0YSBvcGNp824KK3Byb3ZlZSB1bmEgbWFuZXJhIGFsdGVybmF0aXZhIGRlIGhhY2VyIGxhIG1pc21hIGNvc2EsIHBhcmEgcmVsYXlzIHF1ZQorbm8gdGllbmVuIHNvcG9ydGUgUkZDIDUxMDcuIEJyaW5kYWRhIHBvciBzaSBzb2xhLCBtYW5pcHVsYSBlbCBzZXJ2ZXItaWQKK3BhcmEgdG9kYXMgbGFzIGludGVyYWNjaW9uZXMgdmlhIHJlbGF5cy4gU2kgdW5hIGxpc3RhIGRlIElQcyBlcyBicmluZGFkYSwKK3NvbG8gaW50ZXJhY2Npb25lcyB2aWEgcmVsYXlzIGVuIGVzYXMgZGlyZWNjaW9uZXMgc29uIGFmZWN0YWRhcy4KKy5UUAorLkIgLS1kaGNwLW1hdGNoPXNldDo8dGFnPiw8b3B0aW9uIG51bWJlcj58b3B0aW9uOjxvcHRpb24gbmFtZT58dmktZW5jYXA6PGVudGVycHJpc2U+Wyw8dmFsdWU+XQorU2luIHVuIHZhbG9yLCBmaWphciBsYSBldGlxdWV0YSBzaSBlbCBjbGllbnRlIGVudu1hIHVuYSBvcGNp824KK0RIQ1AgZGVsIG76bWVybyBvIHZhbG9yIGJyaW5kYWRvLiBDdWFuZG8gdW4gdmFsb3IgZXMgYnJpbmRhZG8sIGZpamFyIGxhCitldGlxdWV0YSBzb2xvIHNpIGxhIG9wY2nzbiBlcyBlbnZpYWRhIHkgY29pbmNpZGUgY29uIGVsIHZhbG9yLiBFbCB2YWxvciBwdWVkZQorc2VyIGRlIGxhIGZvcm1hICIwMTpmZjoqOjAyIiwgY2FzbyBlbiBlbCBjdWFsIGVsIHZhbG9yIGRlYmUgY29pbmNpZGlyIChhcGFydGUKK2RlIGxvcyBjb21vZGluZXMpIHBlcm8gbGEgb3BjafNuIGVudmlhZGEgcHVlZGUgdGVuZXIgZGF0YSBxdWUgbm8gY29pbmNpZGUgZGVzcHVlcworZGVsIGZpbmFsIGRlbCB2YWxvci4gRWwgdmFsb3IgdGFtYmnpbiBwdWVkZSBzZXIgZGUgbGEgbWlzbWEgZm9ybWEgcXVlCisuQiBkaGNwLW9wdGlvbgorY2FzbyBlbiBlbCBjdWFsIGxhIG9wY2nzbiBlbnZpYWRhIGVzIHRyYXRhZGEgY29tbyB1biBhcnJheSwgeSB1biBlbGVtZW50byBkZWJlCitjb2luY2lkaXIsIGFz7SBxdWUKKworLS1kaGNwLW1hdGNoPXNldDplZmktaWEzMixvcHRpb246Y2xpZW50LWFyY2gsNgorCitmaWphcuEgbGEgZXRpcXVldGEgYSAiZWZpLWlhMzIiIHNpIGVsIG76bWVybyA2IGFwYXJlY2UgZW4gbGEgbGlzdGEgZGUKK2FyY2hpdGVjdHVyYXMgZW52aWFkYSBwb3IgbG9zIGNsaWVudGVzIGVuIG9wY2nzbiA5My4gKFZlciBSRkMgNDU3OCBwYXJhCitkZXRhbGxlcy4pIFNpIGVsIHZhbG9yIGVzIHVuIHN0cmluZywgY29pbmNpZGVuY2lhIHN1YnN0cmluZyBlcyB1c2FkYS4KKworTGEgZm9ybWEgZXNwZWNpYWwgY29uIHZpLWVuY2FwOjxlbnRlcnBpc2UgbnVtYmVyPiBidXNjYSBjb2luY2lkZW5jaWEgY29uCitjbGFzZXMgZGUgdmVuZGVkb3IgaWRlbnRpZmljYWRvcmFzIHBhcmEgZWwgZW50ZXJwcmlzZSBlc3BlY2lmaWNhZG8uIFBvcgorZmF2b3IgdmVyIFJGQyAzOTI1IHBhcmEgbWFzIGRldGFsbGVzIHNvYnJlIGVzdGFzIGJlc3RpYXMgcmFyYXMgZSBpbnRlcmVzYW50ZXMuCisuVFAKKy5CIC0tdGFnLWlmPXNldDo8dGFnPlssc2V0Ojx0YWc+Wyx0YWc6PHRhZz5bLHRhZzo8dGFnPl1dXQorTGxldmFyIGEgY2FibyBvcGVyYWNpb25lcyBib29sZWFuIGVuIGV0aXF1ZXRhcy4gQ3VhbHF1aWVyIGV0aXF1ZXRhCitxdWUgYXBhcmVjZSBjb21vIHNldDo8dGFnPiBlcyBmaWphZGEgc2kgdG9kYXMgbGFzIGV0aXF1ZXRhcyBxdWUgYXBhcmVjZW4KK2NvbW8gdGFnOjx0YWc+IGVzdGFuIGZpamFkYXMsIChvIGRlc2ZpamFkYXMgY3VhbmRvIHRhZzohPHRhZz4gZXMKK3VzYWRvKS4gU2kgbmluZ/puIHRhZzo8dGFnPiBhcGFyZWNlLCBldGlxdWV0YXMgc2V0Ojx0YWc+IHNvbiBmaWphZGFzCitpbmNvbmRpY2lvbmFsbWVudGUuIEN1YWxxdWllciBjYW50aWRhZCBkZSBmb3JtYXMgc2V0OiB5IHRhZzoKK3B1ZWRlbiBhcGFyZWNlciwgZW4gY3VhbHF1aWVyIG9yZGVuLiBM7W5lYXMgdGFnLWlmIHNvbiBlamVjdXRhZGFzCitlbiBvcmRlbiwgYXPtIHF1ZSBzaSBsYSBldGlxdWV0YSBlbiB0YWc6PHRhZz4gZXMgdW5hIGV0aXF1ZXRhIGZpamFkYQorcG9yIG90cmEKKy5CIHRhZy1pZiwKK2xhIGztbmVhIHF1ZSBmaWphIGxhIGV0aXF1ZXRhIGRlYmUgcHJlY2VkZXIgYSBsYSBxdWUgY29tcHJ1ZWJhLgorLlRQCisuQiBcLUosIC0tZGhjcC1pZ25vcmU9dGFnOjx0YWc+Wyx0YWc6PHRhZz5dCitDdWFuZG8gdG9kb2FzIGxhcyBldGlxdWV0YXMgYnJpbmRhZGFzIGFwYXJlY2VuIGVuIGVsIGp1ZWdvIGRlIGV0aXF1ZXRhcworaWdub3JhciBlbCBob3N0IHkgbm8gYnJpbmRhcmxlIHVuIGFycmllbmRvIERIQ1AuCisuVFAKKy5CIC0tZGhjcC1pZ25vcmUtbmFtZXNbPXRhZzo8dGFnPlssdGFnOjx0YWc+XV0KK0N1YW5kbyB0b2RvcyBsYXMgZXRpcXVldGFzIGJyaW5kYWRhcyBhcGFyZWNlbiBlbiBlbCBqdWVnbyBkZSBldGlxdWV0YXMsIGlnbm9yYXIgY3VhbHF1aWVyIG5vbWJyZSBkZSBob3N0IHByb3ZlaWRvIHBvciBlbCBob3N0LiBO83Rlc2UgcXVlLAorYSBkaWZlcmVuY2lhIGRlIGRoY3AtaWdub3JlLCBlcyBwZXJtaXNpYmxlIG5vIGJyaW5kYXIgbmluZ3VuYSBldGlxdWV0YSwKK3kgZW4gdGFsIGNhc28gbm9tYnJlcyBkZSBob3N0IHByb3ZlaWRvcyBwb3IgY2xpZW50ZXMgREhDUCBzaWVtcHJlIHNvbgoraWdub3JhZG9zLCB5IGhvc3RzIERIQ1Agc29uIGFncmVnYWRvcyBhbCBETlMgdXNhbmRvIHNvbG8gbGEgY29uZmlndXJhY2nzbgorZGhjcC1ob3N0IGVuIGRuc21hc3EgeSBlbCBjb250ZW5pZG8gZGUgL2V0Yy9ob3N0cyB5IC9ldGMvZXRoZXJzLgorLlRQCisuQiAtLWRoY3AtZ2VuZXJhdGUtbmFtZXM9dGFnOjx0YWc+Wyx0YWc6PHRhZz5dCitHZW5lcmFyIHVuIG5vbWJyZSBwYXJhIGNsaWVudGVzIERIQ1AgcXVlIGRlIG90cmEgZm9ybWEgbm8gdGllbmVuIHVubywKK3VzYW5kbyBsYSBkaXJlY2Np824gTUFDIGV4cHJlc2FkYSBlbiBoZXgsIHNlcGFyYWRhIHBvciBndWlvbmVzLiBO83Rlc2UKK3F1ZSBzaSB1biBob3N0IHByb3ZlZSB1biBub21icmUsIHNlcuEgdXNhZG8gcHJlZmVyaWJsZW1lbnRlIHNvYnJlIGVzdGUsCithIG1lbm9zIHF1ZQorLkIgLS1kaGNwLWlnbm9yZS1uYW1lcworZXN06SBmaWphZG8uCisuVFAKKy5CIC0tZGhjcC1icm9hZGNhc3RbPXRhZzo8dGFnPlssdGFnOjx0YWc+XV0KK0N1YW5kbyB0b2RhcyBsYXMgZXRpcXVldGFzIGFwYXJlY2VuIGVuIGVsIGp1ZWdvIGRlIGV0aXF1ZXRhcywgc2llbXByZQordXNhciBicm9hZGNhc3QgcGFyYSBjb211bmljYXIgY29uIGVsIGhvc3QgY3VhbmRvIG5vIGVzdOEgY29uZmlndXJhZG8uCitFcyBwZXJtaXNpYmxlIG9taXRpciBsYXMgZXRpcXVldGFzLCBjYXNvIGVuIGVsIGN1YWwgZXN0byBlcworaW5jb25kaWNpb25hbC4gTGEgbWF5b3LtYSBkZSBjbGllbnRlcyBESENQIHF1ZSBuZWNlc2l0YW4KK3Jlc3B1ZXN0YXMgYnJvYWRjYXN0IGZpamFuIHVuYSBvcGNp824gZW4gc3VzIHBlZGlkb3MgcGFyYSBxdWUgZXN0byBwYXNlIGF1dG9tYXRpY2FtZW50ZSwgYWxndW5vcyBjbGllbnRlcyBCT09UUCB2aWVqb3Mgbm8gbG8gaGFjZW4uCisuVFAKKy5CIFwtTSwgLS1kaGNwLWJvb3Q9W3RhZzo8dGFnPixdPGZpbGVuYW1lPixbPHNlcnZlcm5hbWU+Wyw8c2VydmVyIGFkZHJlc3M+XV0KK0ZpamFyIG9wY2lvbmVzIEJPT1RQIHF1ZSBoYW4gZGUgc2VyIGRldnVlbHRhcyBwb3IgZWwgc2Vydmlkb3IgREhDUC4gTm9tYnJlCit5IGRpcmVjY2nzbiBkZSBzZXJ2aWRvciBzb24gb3BjaW9uYWxlczogc2kgbm8gc29uIGJyaW5kYWRhcywgZWwgbm9tYnJlIGVzCitkZWphZG8gZW4gYmxhbmNvLCB5IGxhIGRpcmVjY2nzbiBlcyBmaWphZGEgYSBsYSBkZSBsYSBt4XF1aW5hIHF1ZSBjb3JyZQorZG5zbWFzcS4gU2kgZG5zbWFzcSBlc3ThIGJyaW5kYW5kbyBzZXJ2aWNpbyBURlRQICh2ZXIKKy5CIC0tZW5hYmxlLXRmdHAKKykgZW50b25jZXMgc29sbyBlbCBub21icmUgZGUgYXJjaGl2byBlcyByZXF1aXJpZG8gYXF17SBwYXJhIGhhYmlsaXRhcgorZWwgaW5pY2lvIGF0cmF26XogZGUgdW5hIHJlZC4gU2kgbGFzIG9wY2lvbmFsZXMgZXRpcXVldGFzIHNvbiBicmluZGFkYXMsCitlbGxhcyBkZWJlcuFuIGNvaW5jaWRpciBwYXJhIHF1ZSBlc3RhIGNvbmZpZ3VyYWNp824gc2VhIGVudmlhZGEuIE7zdGVzZQorcXVlIG5ldHdvcmstaWRzIGVzdOFuIHByZWZpamFkYXMgY29uICJuZXQ6IiBwYXJhIGRpc3Rpbmd1aXJsYXMuCisuVFAKKy5CIC0tcHhlLXNlcnZpY2U9W3RhZzo8dGFnPixdPENTQT4sPG1lbnUgdGV4dD5bLDxiYXNlbmFtZT58PGJvb3RzZXJ2aWNldHlwZT5dWyw8c2VydmVyIGFkZHJlc3M+XQorTGEgbWF5b3LtYSBkZSB1c29zIHBhcmEgYm9vdC1ST01TIFBYRSBzaW1wbGVtZW50ZSBwZXJtaXRlbiBhbCBzaXN0ZW1hIFBYRQorb2J0ZW5lciB1bmEgZGlyZWNjafNuIElQIHkgZW50b25jZXMgYmFqYXIgZWwgYXJjaGl2byBlc3BlY2lmaWNhZG8gcG9yCisuQiBkaGNwLWJvb3QKK3kgZWplY3V0YXJsby4gU2luIGVtYmFyZ28sIGVsIHNpc3RlbWEgUFhFIGVzIGNhcGF6IGRlIGxsZXZhcgorYSBjYWJvIGZ1bmNpb25lcyBt4XMgY29tcGxlamFzIGN1YW5kbyBlc3ThbiBzb3BvcnRhZGFzIHBvciB1bgorc2Vydmlkb3IgREhDUCBhZGVjdWFkby4KKworRXN0byBlc3BlY2lmaWNhIHVuYSBvcGNp824gYm9vdCBxdWUgcHVlZGUgYXBhcmVjZXIgZW4gdW4gbWVu+iBkZSBib290CitQWEUuIDxDU0E+IGVzIHRpcG8gZGUgc2lzdGVtYSBkZSBjbGllbnRlLCBzb2xvIHNlcnZpY2lvcyBkZWwgdGlwbyBjb3JyZWN0bworYXBhcmVjZXLhbiBlbiB1biBtZW76LiBMb3MgdGlwb3MgY29ub2NpZG9zIHNvbiB4ODZQQywgUEM5OCwgSUE2NF9FRkksCitBbHBoYSwgQXJjX3g4NiwgSW50ZWxfTGVhbl9DbGllbnQsIElBMzJfRUZJLCBCQ19FRkksIFhzY2FsZV9FRkkgeSBYODYtNjRfRUZJOwordW4gbvptZXJvIGVudGVybyBwdWVkZSBzZXIgdXRpbGl6YWRvIHBhcmEgb3Ryb3MgdGlwb3MuIEVsIHBhcuFtZXRybyBkZXNwdelzCitkZWwgdGV4dG8gZGUgbWVu+iBwdWVkZSBzZXIgdW4gbm9tYnJlIGRlIGFyY2hpdm8sIGNhc28gZW4gZWwgY3XhbCBkbnNtYXNxCithY3T6YSBjb21vIHVuIHNlcnZpZG9yIGJvb3QgeSBsZSBvcmRlbmEgYWwgY2xpZW50ZSBQWEUgYmFqYXIgZWwgYXJjaGl2bwordu1hIFRGVFAsIHlhIHNlYSBkZSBz7SBtaXNtbyAoCisuQiBlbmFibGUtdGZ0cAorZGViZSBlc3RhciBmaWphZG8gcGFyYSBxdWUgZXN0byBmdW5jaW9uZSkgbyBkZXNkZSBvdHJvIHNlcnZpZG9yIFRGVFAgc2kgbGEKK2RpcmVjY2nzbiBJUCBmaW5hbCBlcyBicmluZGFkYS4KK07zdGVzZSBxdWUgZWwgc3VmaWpvICJsYXllciIgKG5vcm1hbG1lbnRlICIuMCIpIGVzIGJyaW5kYWRvIHBvciBQWEUsIHkKK25vIGRlYmUgc2VyIGFncmVnYWRvIGFsIG5vbWJyZSBiYXNlLiBTaSB1biBu+m1lcm8gZW50ZXJvIGVzIGJyaW5kYWRvIGVuIHZlegorZGUgdW4gbm9tYnJlIGJhc2UsIGVudG9uY2VzIGVsIGNsaWVudGUgUFhFIGJ1c2NhcuEgdW4gc2VydmljaW8gYm9vdCBhZGVjdWFkbworcGFyYSBlc2UgdGlwbyBkZSByZWQuIEVzdGEgYvpzcXVlZGEgcHVlZGUgc2VyIGhlY2hhIG1lZGlhbnRlIGJyb2FkY2FzdCwKK28gZGlyZWN0YW1lbnRlIGEgdW4gc2Vydmlkb3Igc2kgbGEgZGlyZWNjafNuIElQIGVzIGJyaW5kYWRhLiBTaSBuaW5n+m4gdGlwbworZGUgc2VydmljaW8gYm9vdCBvIG5vbWJyZSBkZSBhcmNoaXZvIGVzIGJyaW5kYWRvIChvIHVuIHRpcG8gZGUgc2VydmljaW8gYm9vdAorZGUgMCBlcyBlc3BlY2lmaWNhZG8pLCBlbnRvbmNlcyBsYSBvcGNp824gZGUgbWVu+iBhYm9ydGFy4SBlbCBwcm9jZXNvIG5ldCBib290Cit5IGNvbnRpbnVhcuEgZGVzZGUgZWwgbWVkaW8gbG9jYWwuCisuVFAKKy5CIC0tcHhlLXByb21wdD1bdGFnOjx0YWc+LF08cHJvbXB0PlssPHRpbWVvdXQ+XQorRmlqYXIgZXN0byBoYWNlIHF1ZSB1biBhdmlzbyBzZWEgZXhwdWVzdG8gZGVzcHVlcyBkZWwgYm9vdCBQWEUuIFNpIGVsIHRpbWVvdXQKK2VzIGJyaW5kYWRvLCBlbnRvbmNlcyBkZXNwdWVzIHF1ZSBlbCB0aW1lb3V0IHNlIGhheWEgdmVuY2lkbyBzaW4gaW5wdXQgZGVsCit0ZWNsYWRvLCBsYSBwcmltZXJhIG9wY2nzbiBkZWwgbWVu+iBzZXJhIGF1dG9tYXRpY2FtZW50ZSBlamVjdXRhZGEuIFNpIGVsCit0aW1lb3V0IGVzIGNlcm8gZW50b25jZXMgbGEgcHJpbWVyYSBvcGNp824gZGVsIG1lbvogc2VyYSBhdXRvbWF0aWNhbWVudGUKK2VqZWN1dGFkYS4gU2kKKy5CIHB4ZS1wcm9tcHQKK2VzIG9taXRpZG8sIGVsIHNpc3RlbWEgZXNwZXJhcuEgcGFyYSBlbCBpbnB1dCBkZWwgdXN1YXJpbyBzaSBoYXkgbfpsdGlwbGVzCithcnTtY3Vsb3MgZW4gZWwgbWVu+iwgcGVybyBoYXLhIGJvb3QgaW1lZGlhdGFtZW50ZSBzaSBoYXkgc29sbyB1bm8uIFZlcgorLkIgcHhlLXNlcnZpY2UKK3BhcmEgZGV0YWxsZXMgc29icmUgYXJ07WN1bG9zIGRlIG1lbnUuCisKK0Ruc21hc3EgdGllbmUgc29wb3J0ZSBwYXJhICJwcm94eS1ESENQIiBQWEUsIGVuIGVzdGUgY2FzbyBvdHJvIHNlcnZpZG9yCitESENQIGVuIGxhIHJlZCBlcyByZXNwb25zYWJsZSBwb3IgYXNpZ25hciBkaXJlY2Npb25lcyBJUCwgeSBkbnNtYXNxCitzaW1wbGVtZW50ZSBwcm92ZWUgbGEgZGlyZWNjafNuIGJyaW5kYWRhIGVuCisuQiBweGUtcHJvbXB0Cit5CisuQiBweGUtc2VydmljZQorcGFyYSBwZXJtaXRpciBib290IGEgdHJhdmV6IGRlIGxhIHJlZC4gRXN0ZSBtb2RvIGVzIGhhYmlsaXRhZG8gdXNhbmRvCitsYSBwYWxhYnJhIGNsYXZlCisuQiBwcm94eQorZW4KKy5CIGRoY3AtcmFuZ2UuCisuVFAKKy5CIFwtWCwgLS1kaGNwLWxlYXNlLW1heD08bvptZXJvPgorTGltaXRhIGEgZG5zbWFzcSBhIGVsIG76bWVybyBlc3BlY2lmaWNhZG8gZGUgYXJyaWVuZG9zIERIQ1AuIEVsCitwcmVkZXRlcm1pbmFkbyBlcyAxMDAwLiBFbCBsaW1pdGUgZXMgcGFyYSBwcmV2ZW5pciBhdGFxdWVzIERvUyBkZXNkZQoraG9zdHMgcXVlIGNyZWFuIGNpZW50b3MgZGUgYXJyaWVuZG9zIHkgdXNhbiBtdWNoYSBkZSBsYSBtZW1vcmlhIGRlbAorcHJvY2VzbyBkbnNtYXNxLgorLlRQCisuQiBcLUssIC0tZGhjcC1hdXRob3JpdGF0aXZlCitFc3RhIG9wY2nzbiBkZWJlIHNlciBmaWphZGEgY3VhbmRvIGRuc21hc3EgZXMgZGVmaW5pdGl2YW1lbnRlIGVsIPpuaWNvCitzZXJ2aWRvciBESENQIGVuIGxhIHJlZC4gQ2FtYmlhIGVsIGNvbXBvcnRhbWllbnRvIGRlIFJGQyBkZSB0YWwgbWFuZXJhCitxdWUgcGVkaWRvcyBkZXNkZSBob3N0cyBubyBjb25vY2lkb3Mgbm8gc2Vy4W4gaWdub3JhZG9zLiBFc3RvIHBlcm1pdGUgcXVlCitob3N0cyBudWV2b3MgcHVlZGFuIGNvbnNlZ3VpciB1biBhcnJpZW5kbyBzaW4gc2luIHVuIHRpbWVvdXQgYmFqbyB0b2RhCitjaXJjdW5zdGFuY2lhLiBUYW1iaeluIHBlcm1pdGUgcXVlIGRuc21hc3EgcmVjb25zdHJ1eWEgc3UgYmFzZSBkZSBkYXRvcworZGUgYXJyaWVuZG9zIHNpbiBxdWUgY2FkYSBjbGllbnRlIG5lY2VzaXRlIHJlYWRxdWlyaXIgdW4gYXJyaWVuZG8KK3NpIGxhIGJhc2UgZGUgZGF0b3MgZXMgcGVyZGlkYS4KKy5UUAorLkIgLS1kaGNwLWFsdGVybmF0ZS1wb3J0Wz08cHVlcnRvIGRlIHNlcnZpZG9yPlssPHB1ZXJ0byBkZSBjbGllbnRlPl1dCitDYW1iaWFyIGRlbCBwcmVkZXRlcm1pbmFkbyBsb3MgcHVlcnRvcyB1c2Fkb3MgcGFyYSBESENQLiBTaSBlc3RhIG9wY2nzbgorZXMgYnJpbmRhZGEgc29sYSwgc2luIGFyZ3VtZW50b3MsIGNhbWJpYSBsb3MgcHVlcnRvcyB1c2Fkb3MgcGFyYSBESENQCitkZSA2NyB5IDY4IGEgMTA2NyB5IDEwNjguIFNpIHVuIHNvbG8gYXJndW1lbnRvIGVzIGJyaW5kYWRvLCBlc2UgcHVlcnRvCitlcyB1c2FkbyBwYXJhIGVsIHNlcnZpZG9yIHkgZWwgbvptZXJvIGRlIHB1ZXJ0byBtYXMgdW5vIGVzIHVzYWRvCitwYXJhIGVsIGNsaWVudGUuIEZpbmFsbWVudGUsIGRvcyBu+m1lcm9zIHBlcm1pdGVuIHF1ZSBzZSBlc3BlY2lmaXF1ZW4KK2FtYm9zIGxvcyBwdWVydG9zIGRlIHNlcnZpZG9yIHkgY2xpZW50ZSBwYXJhIERIQ1AuCisuVFAKKy5CIFwtMywgLS1ib290cC1keW5hbWljWz08bmV0d29yay1pZD5bLDxuZXR3b3JrLWlkPl1dCitIYWJpbGl0YXIgYWxvY2FjafNuIGRpbuFtaWNhIGRlIGRpcmVjY2lvbmVzIElQIGEgY2xpZW50ZXMgQk9PVFAuIFVzYXIKK2VzdG8gY29uIGN1aWRhZG8sIHlhIHF1ZSBjYWRhIGRpcmVjY2nzbiBhbG9jYWRhIGEgdW4gY2xpZW50ZSBCT09UUAorZXMgYXJyZW5kYWRhIHBhcmEgc2llbXByZSwgeSBjb25zZWN1ZW50ZW1lbnRlIHF1ZWRhIG5vLWRpc3BvbmlibGUKK3BhcmEgcmUtdXNvIHBvciBvdHJvcyBob3N0cy4gU2kgZXN0byBlcyBicmluZGFkbyBzaW4gZXRpcXVldGFzLAorZW50b25jZXMgaW5jb25kaWNpb25hbG1lbnRlIGhhYmlsaXRhIGFsb2NhY2nzbiBkaW7hbWljYS4gQ29uCitldGlxdWV0YXMsIHNvbG8gY3VhbmRvIHRvZGFzIGxhcyBldGlxdWV0YXMgZXN04W4gZmlqYWRhcy4gUHVlZGUKK3NlciByZXBldGlkbyBjb24gZGlmZXJlbnRlcyBqdWVnb3MgZGUgZXRpcXVldGFzLgorLlRQCisuQiBcLTUsIC0tbm8tcGluZworUG9yIHByZWRldGVybWluZGFkbywgZWwgc2Vydmlkb3IgREhDUCB0cmF0YXLhIGRlIGFzZWd1cmFyc2UgcXVlIHVuYQorZGlyZWNjafNuIG5vIGVzdOkgZW4gdXNvIGFudGVzIGRlIGFsb2NhcnNlbGEgYSB1biBob3N0LiBIYWNlIGVzdG8KK2VudmlhbmRvIHVuIGVjaG8gSUNNUCAocGluZykgYSBsYSBkaXJlY2Np824gcmVmZXJlbnRlLiBTaSByZWNpYmUgdW5hCityZXNwdWVzdGEsIGVudG9uY2VzIGxhIGRpcmVjY2nzbiBkZWJlIGVzdGFyIHNpZW5kbyB1c2FkYSwgeSBzZSByZXBpdGUKK2xhIHBydWViYSBjb24gb3RyYS4gRXN0YSBvcGNp824gZGVzaGFiaWxpdGEgZXN0YSBwcnVlYmEuIFVzYXIgY29uCitjdWlkYWRvLgorLlRQCisuQiAtLWxvZy1kaGNwCitCaXRhY29y6W8gZXh0cmEgcGFyYSBESENQOiBCaXRhY29yZWFyIHRvZGFzIGxhcyBvcGNpb25lcyBlbnZpYWRhcyBhCitjbGllbnRlcyBESENQIHkgbGFzIGV0aXF1ZXRhcyB1c2FkYXMgcGFyYSBkZXRlcm1pbmFybG9zLgorLlRQCisuQiBcLWwsIC0tZGhjcC1sZWFzZWZpbGU9PHBhdGg+CitVc2FyIGVsIGFyY2hpdm8gZXNwZWNpZmljYWRvIHBhcmEgYWxtYWNlbmFyIGluZm9ybWFjafNuIGRlIGFycmllbmRvcworREhDUC4KKy5UUAorLkIgXC02IC0tZGhjcC1zY3JpcHQ9PHBhdGg+CitDdWFuZG8gdW4gYXJyaWVuZG8gREhDUCBudWV2byBlcyBjcmVhZG8sIG8gdW5vIHZpZWpvIGVzCitkZXN0cnVpZG8sIGVsIGVqZWN1dGFibGUgZXNwZWNpZmljYWRvIHBvciBlc3RhIG9wY2nzbiBlcyBlamVjdXRhZG8uCis8cGF0aD4gZGViZSBzZXIgdW4gcGF0aG5hbWUgYWJzb2x1dG8sIG5pbmd1bmEgYvpzcXVlZGEgUEFUSCBvY3VycmUuCitMb3MgYXJndW1lbnRvcyBwYXJhIGVsIGJpbmFyaW8gc29uICJhZGQiLCAib2xkIiwgbyAiZGVsIiwgbGEgZGlyZWNjafNuCitNQUMgZGVsIGhvc3QsIGxhIGRpcmVjY2nzbiBJUCwgeSBlbCBob3N0bmFtZSwgc2kgZXMKK2Nvbm9jaWRvLiAiYWRkIiBzaWduaWZpY2EgcXVlIHVuIGFycmllbmRvIGhhIHNpZG8gY3JlYWRvLCAiZGVsIiBxdWUKK2hhIHNpZG8gZGVzdHJ1aWRvLCB5ICJvbGQiIGVzIHVuYSBub3RpZmljYWNp824gZGUgdW4gYXJyaWVuZG8gZXhpc3RlbnRlCitjdWFuZG8gZG5zbWFzcSBpbmljaWEgbyB1biBjYW1iaW8gYSB1bmEgTUFDIG8gbm9tYnJlIGhvc3QgZGUgdW4gYXJyaWVuZG8KK2V4aXN0ZW50ZSAodGFtYmnpbiwgdGllbXBvIGRlIGFycmllbmRvIG8gdmVuY2ltaWVudG8geSBjbGllbnQtaWQsIHNpCitsZWFzZWZpbGUtcm8gZXN04SBmaWphZG8pLiBTaSBsYSBkaXJlY2Np824gTUFDIGVzIGRlIHVuIHRpcG8gZGUgcmVkCitxdWUgbm8gZXMgZXRoZXJuZXQsIHRlbmRy4SBlbCB0aXBvIGRlIHJlZCBwcmVjb2xvY2FkbywgcG9yIGVqZW1wbG8KKyIwNi0wMToyMzo0NTo2Nzo4OTphYiIgcGFyYSB0b2tlbiByaW5nLiBFbCBwcm9jZXNvIGVzIGVqZWN1dGFkbyBjb21vIHJvb3QKKyhhc3VtaWVuZG8gcXVlIGRuc21hc3EgZnVlIG9yaWdpbmFsbWVudGUgZWplY3V0YWRvIGNvbW8gcm9vdCkgYfpuIHNpIGRuc21hc3EKK2VzdOEgY29uZmlndXJhZG8gcGFyYSBjYW1iaWFyIHN1IFVJRCBhIHVuIHVzdWFyaW8gc2luIHByaXZpbGVnaW9zLgorCisKK0VsIGFtYmllbnRlIGVzIGhlcmVkYWRvIGRlbCB1c3VhcmlvIHF1ZSBoYSBpbnZvY2FkbyBhIGRuc21hc3EsIGNvbiBhbGd1bmFzCitvIHRvZGFzIGRlIGxhcyBzaWd1aWVudGVzIHZhcmlhYmxlcyBhZ3JlZ2FkYXMuCisKK0ROU01BU1FfQ0xJRU5UX0lEIHNpIGVsIGhvc3QgYnJpbmRvIHVuIGNsaWVudC1pZC4KKworRE5TTUFTUV9ET01BSU4gc2kgZWwgbm9tYnJlIGRlIGRvbWluaW8gY29tcGxldGFtZW50ZSBjYWxpZmljYWRvIGRlbCBob3N0CitlcyBjb25vY2lkbywgZXN0byBlcyBmaWphZG8gYSBsYSBwYXJ0ZSBkZWwgZG9taW5pby4KKworU2kgZWwgY2xpZW50ZSBicmluZGEgdmVuZG9yLWNsYXNzLCBob3N0bmFtZSBvIHVzZXItY2xhc3MsIGVzdG9zIHNvbgorYnJpbmRhZG9zIGVuIGxhcyB2YXJpYWJsZXMKK0ROU01BU1FfVkVORE9SX0NMQVNTLCBETlNNQVNRX1NVUFBMSUVEX0hPU1ROQU1FLCB5CitETlNNQVNRX1VTRVJfQ0xBU1MwLi5ETlNNQVNRX1VTRVJfQ0xBU1NuLCBwZXJvIHNvbG8gcGFyYSBhY2Npb25lcyAiYWRkIgoreSAib2xkIiBjdWFuZG8gdW4gaG9zdCByZWFudWRhIHVuIGFycmllbmRvIGV4aXN0ZW50ZSwgZGFkbyBhIHF1ZSBlc3RvcworZGF0b3Mgbm8gc29uIGFsbWFjZW5hZG9zIGVuIGxhIGJhc2UgZGUgZGF0b3MgZGUgYXJyaWVuZG9zIGRlIGRuc21hc3EuCisKK1NpIGRuc21hc3EgZnVlIGNvbXBpbGFkbyBjb24gSEFWRV9CUk9LRU5fUlRDLCBlbnRvbmNlcyBsYSBkdXJhY2nzbiBkZWwKK2FycmllbmRvIChlbiBzZWd1bmRvcykgZXMgYWxtYWNlbmFkYSBlbiBETlNNQVNRX0xFQVNFX0xFTkdUSCwgZGUgb3RyYQorbWFuZXJhIGVsIHRpZW1wbyBkZSB2ZW5jaW1pZW50byBlcyBhbG1hY2VuYWRvIGVuIEROU01BU1FfTEVBU0VfRVhQSVJFUy4KK0VsIG76bWVybyBkZSBzZWd1bmRvcyBmYWx0YW50ZSBwYXJhIGVsIHZlbmNpbWllbnRvIGRlbCBhcnJpZW5kbyBzaWVtcHJlCitlcyBhbG1hY2VuYWRvIGVuIEROU01BU1FfVElNRV9SRU1BSU5JTkcuCisKK1NpIHVuIGFycmllbmRvIHNvbO1hIHRlbmVyIHVuIG5vbWJyZSBkZSBob3N0LCBlbCBjdWFsIGVzIHJlbW92aWRvLCB1bgorZXZlbnRvICJvbGQiIGVzIGdlbmVyYWRvIGNvbiBlbCBudWV2byBlc3RhZG8gZGVsIGFycmllbmRvLCAocG9yIGVqZW1wbG8sIHNpbgorbm9tYnJlKSwgeSBlbCBub21icmUgYW50ZXJpb3IgZXMgYnJpbmRhZG8gZW4gbGEgdmFyaWFibGUgZGUgYW1iaWVudGUKK0ROU01BU1FfT0xEX0hPU1ROQU1FLgorCitETlNNQVNRX0lOVEVSRkFDRSBhbG1hY2VuYSBlbCBub21icmUgZGUgbGEgaW50ZXJmYWNlCitlbiBsYSBjdWFsIGxsZWfzIGVsIHBlZGlkbzsgZXN0byBubyBlcyBmaWphZG8gcGFyYSBhY2Npb25lcyAidmllamFzIgorY3VhbmRvIGRuc21hc3EgcmUtaW5pY2lhLgorCitETlNNQVNRX1JFTEFZX0FERFJFU1MgZXMgZmlqYWRvIHNpIGVsIGNsaWVudGUKK3Vz8yB1biByZWxheSBESENQIHBhcmEgY29udGFjdGFyIGEgZG5zbWFzcSB5IGxhIGRpcmVjY2nzbiBJUCBkZWwgcmVsYXkKK2VzIGNvbm9jaWRhLgorCitETlNNQVNRX1RBR1MgY29udGllbmUgdG9kYXMgbGFzIGV0aXF1ZXRhcyBuZXR3b3JrLWlkIGZpamFkYXMKK2R1cmFudGUgbGEgdHJhbnNhY2Np824gREhDUCwgc2VwYXJhZGFzIHBvciBlc3BhY2lvcy4KKworVG9kb3MgbG9zIGRlc2NyaXB0b3JlcyBkZSBhcmNoaXZvIGVzdOFuIGNlcnJhZG9zCitleGNlcHRvIHN0ZGluLCBzdGRvdXQsIHkgc3RkZXJyIGxvcyBjdWFsZXMgZXN04W4gYWJpZXJ0b3MgYSAvZGV2L251bGwKKyhleGNlcHRvIGVuIG1vZG8gZGVidWcpLgorCitFc3RlIGd1afNuIG5vIGVzIGludm9jYWRvIGNvbmN1cnJlbnRlbWVudGU6IG3heGltbyB1bmEgaW5zdGFtY2lhIGRlbAorZ3Vp824gZXN04SBjb3JyaWVuZG8gYSBsYSB2ZXogKGRuc21hc3EgZXNwZXJhIGEgcXVlIHVuYSBpbnN0YW5jaWEgZGUKK2d1afNuIGhhZ2EgZXhpdCBhbnRlcyBkZSBjb3JyZXIgbGEgc2lndWllbnRlKS4gQ2FtYmlvcyBhIGxhIGJhc2UgZGUKK2RhdG9zIGRlIGFycmllbmRvcyBxdWUgcmVxdWllcmVuIHF1ZSBlbCBndWnzbiBzZWEgaW52b2NhZG8gc29uIHB1ZXN0b3MKK2VuIGNvbGEgZXNwZXJhbmRvIGVsIGV4aXQgZGUgdW5hIGluc3RhbmNpYSBjb3JyaWVudGUuIFNpIGVzdGEgY29sYSBwZXJtaXRlCitxdWUgY2FtYmlvcyBtdWx0aXBsZXMgZGUgZXN0YWRvIGxlIG9jdXJyYW4gYSB1biBhcnJpZW5kbyBpbmRpdmlkdWFsIGFudGVzCitkZSBxdWUgZWwgZ3Vp824gcHVlZGEgc2VyIGVqZWN1dGFkbyBlbnRvbmNlcyBlc3RhZG9zIGFudGVyaW9yZXMgc29uIGRlc2NhcnRhZG9zCit5IGVsIGVzdGFkbyBhY3R1YWwgZGVsIGFycmllbmRvIGVzIHJlZmxlamFkbyBjdWFuZG8gZWwgZ3Vp824gZmluYWxtZW50ZSBjb3JyZS4KKworQWwgaW5pY2lvIGRlIGRuc21hc3EsIGVsIGd1afNuCitzZXLhIGludm9jYWRvIHBhcmEgdG9kb3MgbG9zIGFycmllbmRvcyBleGlzdGVudGVzIG1pZW50cmFzIHZhbiBzaWVuZG8KK2xl7WRvcyBkZXNkZSBlbCBhcmNoaXZvIGRlIGFycmllbmRvcy4gQXJyaWVuZG9zIHZlbmNpZG9zIHNlcuFuIGxsYW1hZG9zCitjb24gImRlbCIgeSBvdHJvcyBjb24gIm9sZCIuIDxwYXRoPiBkZWJlIHNlciB1biBwYXRoIGFic29sdXRvLCBuaW5ndW5hCiti+nNxdWVkYSBQQVRIIG9jdXJyZSBjdWFuZG8gYXJyaWVuZG9zIGRuc21hc3Egc2Vy4W4gbGxhbWFkb3MgY29uICJkZWwiCit5IG90cm9zIGNvbiAib2xkIi4gQ3VhbmRvIGRuc21hc3EgcmVjaWJlIHVuYSBzZfFhbCBIVVAsIGVsIGd1afNuIHNlcuEKK2ludm9jYWRvIHBhcmEgYXJyaWVuZG9zIGV4aXN0ZW50ZXMgY29uIHVuIGV2ZW50byAib2xkIi4KKy5UUAorLkIgLS1kaGNwLXNjcmlwdHVzZXIKK0VzcGVjaWZpY2FyIGVsIHVzdWFyaW8gY29tbyBlbCBjdWFsIHNlIGRlYmUgY29ycmVyIGVsIGFyY2hpdm8KK2d1afNuIGRlIGNhbWJpbyBkZSBhcnJpZW5kb3MuIEVzdGUgZXMgcm9vdCBwb3IgcHJlZGV0ZXJtaW5hZG8sCitwZXJvIHB1ZWRlIHNlciBjYW1iaWFkbyBhIG90cm8gdXN1YXJpbyBtZWRpYW50ZSBlc3RhIG9wY2nzbi4KKy5UUAorLkIgXC05LCAtLWxlYXNlZmlsZS1ybworU3VwcmltaXIgY29tcGxldGFtZW50ZSBlbCB1c28gZGVsIGFyY2hpdm8gZGUgYXJyaWVuZG9zLiBFbCBhcmNoaXZvIG5vIHNlcuEKK2NyZWFkbywgbGXtZG8sIG5pIGVzY3JpdG8uIENhbWJpYXIgbGEgbWFuZXJhIGVuIGxhIGN14WwgZWwgYXJjaGl2byBndWnzbiBkZQorY2FtYmlvIGRlIGFycmllbmRvIChzaSBlcyBicmluZGFkbykgZXMgbGxhbWFkbywgZGUgdGFsIGZvcm1hIHF1ZSBsYSBiYXNlIGRlCitkYXRvcyBkZSBhcnJpZW5kb3NwdWVkYSBzZXIgbWFudGVuaWRhIGVuIGFsbWFjZW5hamUgZXh0ZXJubyBwb3IgZWwgYXJjaGl2bworZ3Vp824uIEFkaWNpb27hbG1lbnRlIGEgbGFzIGludm9jYWNpb25lcyBicmluZGFkYXMgZW4KKy5CIC0tZGhjcC1zY3JpcHQKK2VsIGFyY2hpdm8gZGUgY2FtYmlvIGRlIGFycmllbmRvcyBlcyBsbGFtYWRvIHVuYSB2ZXosIGFsIGluaWNpbyBkZSBkbnNtYXNxLAorY29uIGVsIPpuaWNvIGFyZ3VtZW50byAiaW5pdCIuIEN1YW5kbyBpbnZvY2FkbyBkZSBlc3RhIGZvcm1hLCBlbCBndWnzbiBkZWJlcu1hCitlc2NyaWJpciBlbCBlc3RhZG8gZ3VhcmRhZG8gZGUgbGEgYmFzZSBkZSBkYXRvcyBkZSBhcnJpZW5kb3MsIGVuIGZvcm1hdG8gZGUKK2FyY2hpdm8gZGUgYXJyaWVuZG9zIGRuc21hc3EsIGEgc3Rkb3V0IHkgaGFjZXIgZXhpdCBjb24gY/NkaWdvIGV4aXQgY2Vyby4gRmlqYXIKK2VzdGEgb3BjafNuIHRhbWJp6W4gZm9yemEgcXVlIGVsIGFyY2hpdm8gZGUgY2FtYmlvIGRlIGFycmllbmRvcyBzZWEgbGxhbWFkbworY3VhbmRvIGhheSBjYW1iaW9zIGhlY2hvcyBhIGVsIGNsaWVudC1pZCB5IHRpZW1wb3MgZGUgYXJyaWVuZG8geSB2ZW5jaW1pZW50by4KKy5UUAorLkIgLS1icmlkZ2UtaW50ZXJmYWNlPTxub21icmUgZGUgaW50ZXJmYWNlPiw8YWxpYXM+Wyw8YWxpYXM+XQorVHJhdGFyIHBhcXVldGVzIGRlIHBlZGlkb3MgREhDUCBxdWUgbGxlZ2FuIGEgY3VhbHF1aWVyYSBkZSBsYXMgaW50ZXJmYWNlcyA8YWxpYXM+Citjb21vIHNpIGh1YmllcmFuIGxsZWdhZG8gYSBsYSBpbnRlcmZhY2UgPG5vbWJyZSBkZSBpbnRlcmZhY2U+LiBFc3RhIG9wY2nzbgorZXMgbmVjZXNhcmlhIGFsIHVzYXIgYnJpZGdpbmcgZXN0aWxvIHZpZWpvIGVuIHBsYXRhZm9ybWFzIEJTRCwgZGFkbyBhIHF1ZQorbG9zIHBhcXVldGVzIGxsZWdhbiBhIGludGVyZmFjZXMgdGFwIHF1ZSBubyB0aWVuZW4gdW5hIGRpcmVjY2nzbiBJUC4KKy5UUAorLkIgXC1zLCAtLWRvbWFpbj08ZG9taW5pbz5bLDxyYW5nbyBkZSBJUHM+XQorRXNwZWNpZmljYSBsb3MgZG9taW5pb3MgRE5TIHBhcmEgZWwgc2Vydmlkb3IgREhDUC4gRG9taW5pb3MgcHVlZGVuIHNlcgorYnJpbmRhZG9zIGluY29uZGljaW9uYWxtZW50ZSAoc2luIGVsIHJhbmdvIGRlIElQcykgbyBwYXJhIHJhbmdvcyBsaW1pdGFkb3MuIEVzdG8KK3RpZW5lIGRvcyBlZmVjdG9zOiBQcmltZXJhbWVudGUsIGNhdXNhIHF1ZSBlbCBzZXJ2aWRvciBESENQIGxlIGRldnVlbHZhIGVsCitkb21pbmlvIGEgY3VhbHF1aWVyIGhvc3QgcXVlIGxvIHBpZGEuIFNlZ3VuZGFtZW50ZSwgZmlqYSBlbCBkb21pbmlvIHBhcmEgZWwKK2N1YWwgZXMgbGVnYWwgcGFyYSBob3N0cyBjb25maWd1cmFkb3MgbWVkaWFudGUgREhDUCByZWNsYW1hci4gTGEgaW50ZW5jafNuIGVzCityZXN0cmluZ2lyIG5vbWJyZXMgZGUgaG9zdCBwYXJhIHF1ZSB1biBob3N0IG5vLWNvbmZpYWRvIGVuIGxhIExBTiBubworcHVlZGEgcHJvY2xhbWFyIHN1IG5vbWJyZSB27WEgREhDUCwgY29tbyBwb3IgZWplbXBsbyAibWljcm9zb2Z0LmNvbSIgeQorY2FwdHVyYXIgdHLhZmljbyBubyBkZXN0aW5hZG8gYSBlbGxhLiBTaSBuaW5n+m4gc3VmaWpvIGRlIGRvbWluaW8gZXMKK2VzcGVjaWZpY2FkbywgZW50b25jZXMgY3VhbHF1aWVyIG5vbWJyZSBkZSBob3N0IGNvbiB1bmEgcGFydGUgZGUgZG9taW5pbworKG8gc2VhIGNvbiB1biBwdW50bykgc2Vy4SBuZWdhZGEgeSBiaXRhY29yYWRhLiBTaSB1biBzdWZpam8gZXMgZXNwZWNpZmljYWRvLAorZW50b25jZXMgbm9tYnJlcyBkZSBob3N0IGNvbiB1bmEgcGFydGUgZGUgZG9taW5pbyBzb24gcGVybWl0aWRvcywgY29uIHRhbAorcXVlIGxhIHBhcnRlIGRlIGRvbWluaW8gY29pbmNpZGEgY29uIGVsIHN1Zmlqby4gQWRpY2lvbmFsbWVudGUsIGN1YW5kbwordW4gc3VmaWpvIGVzIGZpamFkbywgZW50b25jZXMgbm9tYnJlcyBkZSBob3N0IHNpbiBwYXJ0ZSBkZSBkb21pbmlvIHRpZW5lbgorZWwgc3VmaWpvIGFncmVnYWRvIGNvbW8gdW5hIHBhcnRlIGRlIGRvbWluaW8gb3BjaW9uYWwuIFBvciBlamVtcGxvLCBlbgorbWkgcmVkIHB1ZWRvIGZpamFyCisuQiAtLWRvbWFpbj10aGVrZWxsZXlzLm9yZy51aworeSB0ZW5lciB1bmEgbWFxdWluYSBjdXlvIG5vbWJyZSBob3N0IERIQ1AgZXMgImxhcHRvcCIuIExhIGRpcmVjY2nzbiBJUAorZGUgZXNhIG3hcXVpbmEgZXMgZGlzcG9uaWJsZSBkZXNkZQorLkIgZG5zbWFzcQorY29tbyAibGFwdG9wIiB5ICJsYXB0b3AudGhla2VsbGV5cy5vcmcudWsiLiBTaSBlbCBkb21pbmlvIGVzIGJyaW5kYWRvCitjb21vICIjIiBlbnRvbmNlcyBlbCBkb21pbmlvIGVzIGxlaWRvIGRlc2RlIGxhIHByaW1lcmEgZGlyZWN0aXZhIHNlYXJjaAorZW4gL2V0Yy9yZXNvbHYuY29uZiAobyBlcXVpdmFsZW50ZSkuIEVsIHJhbmdvIGRlIGRpcmVjY2lvbmVzIHB1ZWRlIHNlcgorPGRpcmVjY2nzbiBJUD4sPGRpcmVjY2nzbiBJUD4gb3IgPGRpcmVjY2nzbiBJUD4vPG3hc2NhcmEgZGUgc3VicmVkPi4gVmVyCisuQiAtLWRoY3AtZnFkbiBlbCBjdWFsIHB1ZWRlIGNhbWJpYXIgZWwgY29tcG9ydGFtaWVudG8gZGUgZG5zbWFzcSBjb24KK2RvbWluaW9zLgorLlRQCisuQiAtLWRoY3AtZnFkbgorRW4gZWwgbW9kbyBwcmVkZXRlcm1pbmFkbywgZG5zbWFzcSBwb25lIGxvcyBub21icmVzIG5vLWNhbGlmaWNhZG9zCitkZSBjbGllbnRlcyBESENQIGVuIGVsIEROUy4gUG9yIGVzdGEgcmF6824sIGxvcyBub21icmVzIGRlYmVuIHNlciD6bmljb3MsCith+m4gc2kgZG9zIGNsaWVudGVzIHF1ZSB0aWVuZW4gZWwgbWlzbW8gbm9tYnJlIGVzdOFuIGVuIGRvbWluaW9zCitkaWZlcmVudGVzLiBTaSB1biBzZWd1bmRvIGNsaWVudGUgREhDUCBhcGFyZWNlIGVsIGN1YWwgdGllbmUgZWwgbWlzbW8KK25vbWJyZSBxdWUgdW4gY2xpZW50ZSBleGlzdGVudGUsIGVsIG5vbWJyZSBlcyB0cmFuc2ZlcmlkbyBhbCBjbGllbnRlIG51ZXZvLiBTaQorLkIgLS1kaGNwLWZxZG4KK2VzdOEgZmlqYWRvLCBlc3RlIGNvbXBvcnRhbWllbnRvIGNhbWJpYTogRWwgbm9tYnJlIG5vLWNhbGlmaWNhZG8KK25vIGVzIHB1ZXN0byBlbiBlbCBETlMsIHNvbG8gZWwgbm9tYnJlIGNhbGlmaWNhZG8uIERvcyBjbGllbnRlcyBESENQIGNvbgorZWwgbWlzbW8gbm9tYnJlIHB1ZWRlbiBhbWJvcyBxdWVkYXJzZSBjb24gZWwgbm9tYnJlLCBjb24gdGFsIHF1ZSBsYSBwYXJ0ZQorZGUgZG9taW5pbyBzZWEgZGlmZXJlbnRlIChvIHNlYSBxdWUgbG9zIG5vbWJyZXMgY29tcGxldGFtZW50ZSBjYWxpZmljYWRvcworZGlmaWVyYW4pLiBQYXJhIGFzZWd1cmFyIHF1ZSB0b2RvcyBsb3Mgbm9tYnJlcyB0ZW5nYW4gdW5hIHBhcnRlIGRlIGRvbWluaW8sCitkZWJlIGhhYmVyIGFsIG1lbm9zCisuQiAtLWRvbWFpbgorc2luIHVuYSBkaXJlY2Np824gZXNwZWNpZmljYWRhIGN1YW5kbworLkIgLS1kaGNwLWZxZG4KK2VzdOEgZmlqYWRvLgorLlRQCisuQiAtLWVuYWJsZS10ZnRwWz08aW50ZXJmYWNlPl0KK0hhYmlsaXRhciBsYSBmdW5jafNuIGRlIHNlcnZpZG9yIFRGVFAuIEVzdG8gZXN04SBkZWxpYmVyYWRhbWVudGUgbGltaXRhZG8KK2EgbG8gbmVjZXNhcmlvIHBhcmEgaGFjZXJsZSBhIHVuIGNsaWVudGUgdW4gaW5pY2lvIHbtYSByZWQuIFNvbG8gbGVjdHVyYSBlcworcGVybWl0aWRhOyBsYXMgZXh0ZW5zaW9uZXMgdHNpemUgeSBibGtzaXplIHNvbiBzb3BvcnRhZGFzICh0c2l6ZSBzb2xvIGVzCitzb3BvcnRhZGEgZW4gbW9kbyBvY3RldG8pLiBWZXIgc2VjY2nzbiBkZSBOT1RBUyBwYXJhIGVsIHVzbyBkZSBlbCBhcmd1bWVudG8KK2RlIGludGVyZmFjZS4KKy5UUAorLkIgLS10ZnRwLXJvb3Q9PGRpcmVjdG9yeT5bLDxpbnRlcmZhY2U+XQorQnVzY2FyLCByZWxhdGl2byBhbCBkaXJlY3RvcmlvIGJyaW5kYWRvLCBhcmNoaXZvcyBwYXJhIHRyYW5zZmVyaXIgbWVkaWFudGUgZWwKK3VzbyBkZSBURlRQLiBDdWFuZG8gZXN0YSBvcGNp824gZXN04SBmaWphZGEsIHBhdGhzIFRGVFAgcXVlIGluY2x1eWVuICIuLiIgc29uCityZWNoYXphZG9zLCBwYXJhIHByZXZlbmlyIHF1ZSBjbGllbnRlcyBzYWxnYW4gZGUgbGEgcmHteiBlc3BlY2lmaWNhZGEuIFBhdGhzCithYnNvbHV0b3MgKGxvcyBxdWUgY29taWVuemFuIGNvbiAiLyIpIGVzdOFuIHBlcm1pdGlkb3MsIHBlcm8gZGViZW4gZXN0YXIKK2RlbnRybyBkZWwgdGZ0cC1yb290LiBTaSBlbCBhcmd1bWVudG8gb3BjaW9uYWwgZGUgaW50ZXJmYWNlIGVzIGJyaW5kYWRvLCBlbAorZGlyZWN0b3JpbyBlcyBzb2xvIHVzYWRvIHBhcmEgcGVkaWRvcyBURlRQIHbtYSBlc2EgaW50ZXJmYWNlLgorLlRQCisuQiAtLXRmdHAtdW5pcXVlLXJvb3QKK0FncmVnYXIgbGEgZGlyZWNjafNuIElQIGRlbCBjbGllbnRlIFRGVFAgY29tbyB1biBjb21wb25lbnRlIHBhdGggZGVsIGxhZG8gZGVsCitURlRQLXJvb3QgKGVuIGZvcm1hdG8gZXN04W5kYXIgZGUgY3VhdHJvIHB1bnRvcykuIFNvbG8gduFsaWRvIHNpIHVuIHRmdHAtcm9vdAorZXN04SBmaWphZG8geSBlbCBkaXJlY3RvcmlvIGV4aXN0ZS4gUG9yIGVqZW1wbG8sIHNpIHRmdHAtcm9vdCBlcyAiL3RmdHAiIHkgZWwKK2NsaWVudGUgMS4yLjMuNCBwaWRlIGVsIGFyY2hpdm8gIm1pYXJjaGl2byIgZW50b25jZXMgZWwgcGF0aCBlZmVjdGl2byBzZXLhCisiL3RmdHAvMS4yLjMuNC9taWFyY2hpdm8iIHNpIC90ZnRwLzEuMi4zLjQgZXhpc3RlIG8gL3RmdHAvbWlhcmNoaXZvIHNpIG5vLgorLlRQCisuQiAtLXRmdHAtc2VjdXJlCitIYWJpbGl0YXIgbW9kbyBURlRQIHNlZ3Vybzogc2luIGVzdG8sIGN1YWxxdWllciBhcmNoaXZvIHF1ZSBlcyBsZe1ibGUgcG9yIGVsCitwcm9jZXNvIGRuc21hc3EgYmFqbyByZWdsYXMgbm9ybWFsZXMgZGUgY29udHJvbCBkZSBhY2Nlc28gVU5JWCwgZXN04SBkaXNwb25pYmxlCit27WEgVEZUUC4gQ3VhbmRvIGxhIG9wY2nzbiAtLXRmdHAtc2VjdXJlIGVzIGZpamFkYSwgc29sbyBhcmNoaXZvcworcGVydGVuZWNpZW50ZXMgYWwgdXN1YXJpbyBxdWUgY29ycmUgZWwgcHJvY2VzbyBkbnNtYXNxIGVzdOFuIGFjY2VzaWJsZXMuIFNpCitkbnNtYXNxIGVzdOEgY29ycmllbmRvIGNvbW8gcm9vdCwgcmVnbGFzIGRpZmVyZW50ZXMgYXBsaWNhbjogLS10ZnRwLXNlY3VyZSBubwordGllbmUgbmluZ/puIGVmZWN0bywgcGVybyBzb2xvIGFyY2hpdm9zIHF1ZSB0aWVuZW4gZWwgYml0IGRlIGxlY3R1cmEgZ2xvYmFsCitmaWphZG9zIGVzdOFuIGFjY2VzaWJsZXMuIE5vIHNlIHJlY29taWVuZGEgY29ycmVyIGRuc21hc3EgY29tbyByb290IGNvbiBURlRQCitoYWJpbGl0YWRvLCB5IG11Y2hvIG1lbm9zIHNpbiBlc3BlY2lmaWNhciAtLXRmdHAtcm9vdCwgeWEgcXVlIHNlIHB1ZWRlIGV4cG9uZXIKK2N1YWxxdWllciBhcmNoaXZvIGRlIGxlY3R1cmEgZ2xvYmFsIGVuIGVsIHNlcnZpZG9yIGEgY3VhbHF1aWVyIGhvc3QgZGUgbGEgcmVkLgorLlRQCisuQiAtLXRmdHAtbWF4PTxjb25lY2Npb25lcz4KK0ZpamFyIGVsIG76bWVybyBt4XhpbW8gcGVybWl0aWRvIGRlIGNvbmVjY2lvbmVzIFRGVFAgc2ltdWx04W5lYXMuIEVzdG8gZXMgNTAKK3BvciBwcmVkZXRlcm1pbmFkby4gQWwgc2VydmlyIHVuIG76bWVybyBncmFuZGUgZGUgY29uZWNjaW9uZXMgVEZUUCwgbO1taXRlcworZGUgZGVzY3JpcHRvciBkZSBhcmNoaXZvIHBvciBwcm9jZXNvIHB1ZWRlbiBzZXIgZW5jb250cmFkb3MuIERuc21hc3EgbmVjZXNpdGEKK3VuIGRlc2NyaXB0b3IgZGUgYXJjaGl2byBwb3IgY2FkYSBjb25lY2Npb24gVEZUUCBjb25jdXJyZW50ZSwgeSBwb3IgYXJjaGl2bwor+m5pY28gKG1hcyBhbGd1bm9zIG90cm9zKS4gRGUgdGFsIG1hbmVyYSBxdWUgc2VydmlybGUgZWwgbWlzbW8gYXJjaGl2bworc2ltdWx04W5lbyBhIG4gY2xpZW50ZXMgcmVxdWVyaXLhIGVsIHVzbyBkZSBuICsgMTAgZGVzY3JpcHRvcmVzIGRlIGFyY2hpdm8sCit5IHNlcnZpcmxlcyBhcmNoaXZvcyBkaWZlcmVudGVzIHNpbXVsdOFuZWFtZW50ZSByZXF1ZXJpcuEgKDIqbikgKyAxMAorZGVzY3JpcHRvcmVzLiBTaQorLkIgLS10ZnRwLXBvcnQtcmFuZ2UKK2VzIGJyaW5kYWRvLCBlc28gcHVlZGUgYWZlY3RhciBlbCBu+m1lcm8gZGUgY29uZXhpb25lcyBzaW11bHThbmVhcy4KKy5UUAorLkIgLS10ZnRwLW5vLWJsb2Nrc2l6ZQorTm8gcGVybWl0aXIgcXVlIGVsIHNlcnZpZG9yIG5lZ29jaWUgbGEgb3BjafNuICJibG9ja3NpemUiIGNvbiB1biBjbGllbnRlLgorQWxndW5vcyBjbGllbnRlcyBjb24gZXJyb3JlcyBwaWRlbiBlc3RhIG9wY2nzbiBwZXJvIHNlIHBvcnThbiBtYWwgY3VhbmRvIHNlCitsZXMgYnJpbmRhLgorLlRQCisuQiAtLXRmdHAtcG9ydC1yYW5nZT08aW5pY2lvPiw8ZmluYWw+CitVbiBzZXJ2aWRvciBURlRQIGVzY3VjaGEgcG9yIGluaWNpb3MgZGUgY29uZXhp824gZW4gdW4gcHVlcnRvIGJpZW4gY29ub2NpZG8KKyg2OSksIHBlcm8gdGFtYmllbiB1c2EgdW4gcHVlcnRvIGRpbmFtaWNhbWVudGUgc2VsZWNjaW9uYWRvIHBhcmEgY2FkYQorY29uZXhp824uIE5vcm1hbG1lbnRlIGVzdG9zIHNvbiBzZWxlY2Npb25hZG9zIHBvciBlbCBzaXN0ZW1hIG9wZXJhdGl2bywKK3Blcm8gZXN0YSBvcGNp824gZXNwZWNpZmljYSB1biByYW5nbyBkZSBwdWVydG9zIHBhcmEgc2VyIHVzYWRvIHBvciB0cmFuc2ZlcmVuY2lhcworVEZUUC4gRXN0byBwdWVkZSBzZXIg+nRpbCBjdWFuZG8gVEZUUCB0aWVuZSBxdWUgcGFzYXIgYXRyYXZlcyBkZSB1biBmaXJld2FsbC4KK0VsIGNvbWllbnpvIGRlbCByYW5nbyBubyBwdWVkZSBzZXIgbWVub3IgYSAxMDI1IGEgbWVub3MgcXVlIGRuc21hc3EgZXN06SBjb3JyaWVuZG8KK2NvbW8gcm9vdC4gRWwgbvptZXJvIGRlIGNvbmV4aW9uZXMgc2ltdWx04W5lYXMgZXN04SBsaW1pdGFkbyBwb3IgZWwgdGFtYfFvIGRlbAorcmFuZ28gZGUgcHVlcnRvcy4KKy5UUAorLkIgXC1DLCAtLWNvbmYtZmlsZT08YXJjaGl2bz4KK0VzcGVjaWZpY2FyIHVuIGFyY2hpdm8gZGUgY29uZmlndXJhY2nzbiBkaWZlcmVudGUuIExhIG9wY2nzbiBjb25mLWZpbGUKK3RhbWJp6W4gZXMgcGVybWl0aWRhIGVuIGFyY2hpdm9zIGRlIGNvbmZpZ3VyYWNp824sIHBhcmEgaW5jbHVpciBt+mx0aXBsZXMKK2FyY2hpdm9zIGRlIGNvbmZpZ3VyYWNp824uCisuVFAKKy5CIFwtNywgLS1jb25mLWRpcj08ZGlyZWN0b3Jpbz5bLDxmaWxlLWV4dGVuc2lvbj4uLi4uLi5dCitMZWVyIHRvZG9zIGxvcyBhcmNoaXZvcyBkZW50cm8gZGVsIGRpcmVjdG9yaW8gYnJpbmRhZG8gY29tbyBhcmNoaXZvcworZGUgY29uZmlndXJhY2nzbi4gU2kgZXh0ZW5zaW9uZXMgc29uIGJyaW5kYWRhcywgY3VhbHF1aWVyIGFyY2hpdm8gcXVlCit0ZXJtaW5lIGVuIGVzYXMgZXh0ZW5zaW9uZXMgc29uIGlnbm9yYWRvcy4gQ3VhbHF1aWVyIGFyY2hpdm9zIGN1eW9zIG5vbWJyZXMKK3Rlcm1pbmVuIGNvbiB+IG8gY29taWVuemVuIGNvbiAuIG8gY29taWVuemVuIHkgdGVybWluZW4gY29uICMgc2llbXByZSBzb24KK2lnbm9yYWRvcy4gRXN0YSBvcGNp824gcHVlZGUgc2VyIGJyaW5kYWRhIGVuIGxhIGztbmVhIGRlIGNvbWFuZG9zIG8gZW4gdW4KK2FyY2hpdm8gZGUgY29uZmlndXJhY2nzbi4KKy5TSCBBUkNISVZPIERFIENPTkZJR1VSQUNJT04KK0FsIGluaWNpbywgZG5zbWFzcSBsZWUKKy5JIC9ldGMvZG5zbWFzcS5jb25mLAorc2kgZXhpc3RlLiAoRW4gRnJlZUJTRCwgZWwgYXJjaGl2byBlcworLkkgL3Vzci9sb2NhbC9ldGMvZG5zbWFzcS5jb25mCispIChwZXJvIHZlciBsYXMgb3BjafNuZXMKKy5CIFwtQworeQorLkIgXC03Citwb3JmYXZvci4pIEVsIGZvcm1hdG8gZGUgZXN0ZSBhcmNoaXZvIGNvbnNpc3RlIGRlIHVuYSBvcGNp824gcG9yIGztbmVhLAorZXjhY3RhbWVudGUgY29tbyBsYXMgb3BjaW9uZXMgbGFyZ2FzIGRldGFsbGFkYXMgZW4gbGEgc2VjY2nzbiBPUENJT05FUworcGVybyBzaW4gZWwgIi0tIiBhbCBmcmVudGUuIEztbmVhcyBxdWUgY29taWVuemFuIGNvbiAjIHNvbiBjb21lbnRhcmlvcworeSBzb24gaWdub3JhZGFzLiBQYXJhIG9wY2lvbmVzIHF1ZSBzb2xvIHB1ZWRlbiBzZXIgZXNwZWNpZmljYWRhcyB1bmEKK3NvbGEgdmV6LCBlbCBhcmNoaXZvIGRlIGNvbmZpZ3VyYWNp824gaW52YWxpZGEgbGEgbO1uZWEgZGUgY29tYW5kb3MuCitMYXMgY29taWxsYXMgc29uIHBlcm1pdGlkYXMgZW4gZWwgYXJjaGl2byBkZSBjb25maWd1cmFjafNuOiBlbnRyZSBjb21pbGxhcwordGlwbyAiIGxvcyBzaWduaWZpY2Fkb3MgZXNwZWNpYWxlcyBkZSAsOi4geSAjIHNvbiBlbGltaW5hZG9zIHkgbG9zCitzaWd1aWVudGVzIGVzY2FwZXMgc29uIHBlcm1pdGlkb3M6IFxcXFwgXFwiIFxcdCBcXGUgXFxiIFxcciB5IFxcbi4KK0NvcnJlc3BvbmRlbiBhIHRhYiwgZXNjYXBlLCBiYWNrc3BhY2UsIHJldHVybiB5IG5ld2xpbmUuCisuU0ggTk9UQVMKK0FsIHJlY2liaXIgdW4gU0lHSFVQCisuQiBkbnNtYXNxIAorbGliZXJhIHN1IGNhY2hlIHkgZW50b25jZXMgcmVjYXJnYQorLkkgL2V0Yy9ob3N0cworeQorLkkgL2V0Yy9ldGhlcnMKK2FsIGlndWFsIHF1ZSBjdWFscXVpZXIgYXJjaGl2byBicmluZGFkbyBjb24gLS1kaGNwLWhvc3RzZmlsZSwgLS1kaGNwLW9wdHNmaWxlLAorbyAtLWFkZG4taG9zdHMuCitFbCBhcmNoaXZvIGd1afNuIGRlIGNhbWJpbyBkZSBhcnJpZW5kb3MgZXMgbGxhbWFkbyBwYXJhIHRvZG9zIGxvcyBhcnJpZW5kb3MKK0RIQ1AgZXhpc3RlbnRlcy4gU2kKKy5CCistLW5vLXBvbGwKK2VzdOEgZmlqYWRvIGVudG9uY2VzIFNJR0hVUCB0YW1iaeluIHJlLWxlZQorLkkgL2V0Yy9yZXNvbHYuY29uZi4KK1NJR0hVUAorTk8gcmUtbGVlIGVsIGFyY2hpdm8gZGUgY29uZmlndXJhY2nzbi4KKy5QUAorQWwgcmVjaWJpciB1biBTSUdVU1IxLAorLkIgZG5zbWFzcSAKK2VzY3JpYmUgZXN0YWTtc3RpY2FzIGEgbGEgYml04WNvcmEgZGVsIHNpc3RlbWEuIEVzY3JpYmUgZWwgdGFtYfFvCitkZWwgY2FjaOksIGVsIG51bWVybyBkZSBub21icmVzIHF1ZSBoYW4gdGVuaWRvIHF1ZSBzZXIgcmVtb3ZpZG9zIGRlbAorY2FjaOkgYW50ZXMgZGUgcXVlIHZlbmNpZXJhbiBwYXJhIGhhY2VyIGVzcGFjaW8gcGFyYSBub21icmVzIG51ZXZvcywgeSBlbAorbvptZXJvIHRvdGFsIGRlIG5vbWJyZXMgcXVlIGhhbiBzaWRvIGluc2VydGFkb3MgZW4gZWwgY2FjaOkuIFBhcmEgY2FkYQorc2Vydmlkb3IgdXBzdHJlYW0gYnJpbmRhIGVsIG76bWVybyBkZSBi+nNxdWVkYXMgZW52aWFkYXMsIHkgZWwKK276bWVybyBxdWUgcmVzdWx0YXJvbiBlbiBlcnJvci4gRW4gbW9kbworLkIgLS1uby1kYWVtb24KK28gY3VhbmRvIGJpdGFjb3LpbyBjb21wbGV0byBlc3ThIGhhYmlsaXRhZG8gKC1xKSwgdW5hIGRlc2NhcmdhIGNvbXBsZXRhIGRlCitlbCBjb250ZW5pZG8gZGVsIGNhY2jpIGVzIGhlY2hhLgorLlBQCitDdWFuZG8gcmVjaWJlIHVuIFNJR1VTUjIgeSBlc3ThIGJpdGFjb3JlYW5kbyBkaXLpY3RhbWVudGUgYSB1biBhcmNoaXZvICh2ZXIKKy5CIC0tbG9nLWZhY2lsaXR5CispCisuQiBkbnNtYXNxCitjZXJyYXLhIHkgcmVhYnJpcuEgZWwgYXJjaGl2byBkZSBiaXThY29yYS4gTvN0ZXNlIHF1ZSBkdXJhbnRlIGVzdGEKK29wZXJhY2nzbiwgZG5zbWFzcSBubyBlc3RhcuEgY29ycmllbmRvIGNvbW8gcm9vdC4gQWwgY3JlYXIgZWwgYXJjaGl2byBkZQorYml04WNvcmEsIGRuc21hc3EgY2FtYmlhIGVsIGR1ZfFvIGRlbCBhcmNoaXZvIGEgZWwgdXN1YXJpbyBub3JtYWwgY29tbworZWwgcXVlIGNvcnJlcuEuIExvZ3JvdGF0ZSBkZWJlIHNlciBjb25maWd1cmFkbyBwYXJhIGNyZWFyIHVuIGFyY2hpdm8gZGUKK2JpdOFjb3JhIG51ZXZvIGNvbiBwZXJtaXNvcyBpZ3VhbGVzIGFsIGV4aXN0ZW50ZSwgYW50ZXMgZGUgZW52aWFyCitTSUdVU1IyLiBTaSBi+nNxdWVkYXMgRE5TIFRDUCBlc3ThbiBlbiBwcm9ncmVzbywgZWwgYXJjaGl2byBkZSBiaXThY29yYQordmllam8gc2UgbWFudGVuZHLhIGFiaWVydG8gZW4gcHJvY2Vzb3MgaGlqb3MgcXVlIGVzdOFuIG1hbmVqYW5kbworYvpzcXVlZGFzIFRDUCwgeSBwdWVkZSBjb250aW51YXJzZSBhIGVzY3JpYmlybGUuIEhheSB1biBs7W1pdGUgZGUgMTUwCitzZWd1bmRvcywgZGVzcHXpcyBkZSBsbyBjdWFsIHRvZG9zIGxvcyBwcm9jZXNvcyBUQ1AgZXhpc3RlbnRlcyBzZSBoYWJy4W4KK3ZlbmNpZG86IHBvciBlc3RhIHJhevNuLCBubyBlcyBzYWJpbyBjb25maWd1cmFyIGNvbXByZXNp824gZGUgYXJjaGl2b3MKK2RlIGJpdOFjb3JhIHBhcmEgYXJjaGl2b3MgcXVlIGFjYWJhbiBkZSBzZXIgcm90YWRvcy4gQ29uIGxvZ3JvdGF0ZSwgbGFzCitvcGNpb25lcyByZXF1ZXJpZGFzIHNvbgorLkIgY3JlYXRlCit5CisuQiBkZWxheWNvbXByZXNzLgorLlBQCitEbnNtYXNxIGVzIHVuIHJlZW52aWFkb3IgZGUgYvpzcXVlZGFzIEROUzogbm8gcHVlZGUgcmVzcG9uZGVyIGL6c3F1ZWRhcworYXJiaXRyYXJpYXMgY29tZW56YW5kbyBkZXNkZSBsb3Mgc2Vydmlkb3JlcyByb290IHBlcm8gcmVlbnbtYSBkaWNoYXMKK2L6c3F1ZWRhcyBhIHVuIHNlcnZpZG9yIEROUyByZWN1cnNpdm8sIGVsIGN1YWwgZXMgdO1waWNhbWVudGUgcHJvdmXtZG8KK3BvciBlbCBwcm92ZWVkb3IgZGUgSW50ZXJuZXQuIFBvciBwcmVkZXRlcm1pbmFkbywgZG5zbWFzcSBsZWUKKy5JIC9ldGMvcmVzb2x2LmNvbmYKK3BhcmEgZGVzY3ViaXIgbGFzIGRpcmVjY2lvbmVzIElQIGRlIGxvcyBzZXJ2aWRvcmVzIEROUyB1cHN0cmVhbSBxdWUKK2RlYmUgdXNhciwgZGFkbyBhIHF1ZSBlc3RhIGluZm9ybWFjafNuIGVzIG5vcm1hbG1lbnRlIGFsbWFjZW5hZGEgYWxs7S4KK0FtZW5vcyBxdWUKKy5CIC0tbm8tcG9sbAorc2VhIHVzYWRvLAorLkIgZG5zbWFzcQorcmV2aXNhIGVsIHRpZW1wbyBkZSBtb2RpZmljYWNp824gZGUKKy5JIC9ldGMvcmVzb2x2LmNvbmYKKyhvIGVxdWl2YWxlbnRlIHNpCisuQiBcLS1yZXNvbHYtZmlsZSAKK2VzIHVzYWRvKSB5IGxvIHJlLWxlZSBzaSBoYSBjYW1iaWFkby4gRXN0byBwZXJtaXRlIHF1ZSBzZXJ2aWRvcmVzIEROUyBz6WFuCitmaWphZG9zIGRpbuFtaWNhbWVudGUgdu1hIFBQUCBvIERIQ1AgeWEgcXVlIGFtYm9zIHByb3RvY29sb3MgYnJpbmRhbiBlc3RhCitpbmZvcm1hY2nzbi4KK0xhIGF1c2VuY2lhIGRlCisuSSAvZXRjL3Jlc29sdi5jb25mCitubyBlcyB1biBlcnJvciB5YSBxdWUgcHVkbyBoYWJlciBzaWRvIGNyZWFkYSBhbnRlcyBkZSBxdWUgdW5hIGNvbmV4afNuIFBQUAoraGF5YSBleGlzdGlkby4gRG5zbWFzcSBzaW1wbGVtZW50ZSBzaWd1ZSByZXZpc2FuZG8gZW4gY2FzbyBkZSBxdWUKKy5JIC9ldGMvcmVzb2x2LmNvbmYgCitzZWEgY3JlYWRvIGVuIGFsZ/puIG1vbWVudG8uIEEgZG5zbWFzcSBzZSBsZSBwdWVkZSBkZWNpciBxdWUgcmV2aXNlIG3hcworZGUgdW4gYXJjaGl2byByZXNvbHYuY29uZi4gRXN0byBlcyD6dGlsIGVuIHVuYSBsYXB0b3AsIGRvbmRlIGFtYm9zIFBQUCB5CitESENQIHBvZHLtYW4gZXN0YXIgc2llbmRvIHVzYWRvczogZG5zbWFzcSBwdWVkZSBzZXIgZmlqYWRvIHBhcmEgcmV2aXNhciBhbWJvcworLkkgL2V0Yy9wcHAvcmVzb2x2LmNvbmYgCit5CisuSSAvZXRjL2RoY3BjL3Jlc29sdi5jb25mIAoreSB1c2Fy4SBlbCBjb250ZW5pZG8gZGVsIHF1ZSBoYXlhIGNhbWJpYWRvIG1hcyByZWNpZW50ZW1lbnRlLAorYnJpbmRhbmRvIGFz7SBsYSBoYWJpbGlkYWQgZGUgY2FtYmlvIGF1dG9t4XRpY28gZW50cmUgc2Vydmlkb3JlcyBETlMuCisuUFAKK1NlcnZpZG9yZXMgdXBzdHJlYW0gdGFtYmnpbiBwdWVkZW4gc2VyIGVzcGVjaWZpY2Fkb3MgZW4gbGEgbO1uZWEgZGUKK2NvbWFuZG9zIG8gZW4gZWwgYXJjaGl2byBkZSBjb25maWd1cmFjafNuLiBFc3RhcyBlc3BlY2lmaWNhY2lvbmVzIGRlCitzZXJ2aWRvciBvcGNpb25hbG1lbnRlIGxsZXZhbiB1biBub21icmUgZGUgZG9taW5pbyBlbCBjdWFsIGxlIGRpY2UgYQorZG5zbWFzcSBxdWUgZGViZSB1c2FyIGVzZSBzZXJ2aWRvciBzb2xvIHBhcmEgZW5jb250cmFyIG5vbWJyZXMgZW4gZXNlCitkb21pbmlvIGVuIHBhcnRpY3VsYXIuCisuUFAKK1BhcmEgY29uZmlndXJhciBkbnNtYXNxIGNvbW8gY2FjaOkgcGFyYSBlbCBob3N0IGRvbmRlIGVzdOEKK2NvcnJpZW5kbywgcG9uZXIgdW4gIm5hbWVzZXJ2ZXIgMTI3LjAuMC4xIiBlbgorLkkgL2V0Yy9yZXNvbHYuY29uZgorcGFyYSBhc+0gZm9yemFyIHByb2Nlc29zIGxvY2FsZXMgYSBlbnZpYXIgYvpzcXVlZGFzIGEgZG5zbWFzcS4gRW50b25jZXMsCitvIGVzcGVjaWZpY2FyIGxvcyBzZXJ2aWRvcmVzIHVwc3RyZWFtIGRpculjdGFtZW50ZSBhIGRuc21hc3EgdXNhbmRvIG9wY2lvbmVzCisuQiBcLS1zZXJ2ZXIKK28gcG9uaWVuZG8gc3VzIGRpcmVjY2lvbmVzIHJlYWxlcyBlbiBvdHJvIGFyY2hpdm8sIGRpZ2Ftb3MKKy5JIC9ldGMvcmVzb2x2LmRuc21hc3EKK3kgY29ycmVyIGRuc21hc3EgY29uIGxhIG9wY2lvbgorLkIgXC1yIC9ldGMvcmVzb2x2LmRuc21hc3EKK0VzdGEgc2VndW5kYSB06WNuaWNhIHBlcm1pdGUgbGEgYWN0dWFsaXphY2nzbiBkaW7hbWljYSBkZSBsYXMgZGlyZWNjaW9uZXMKK2RlIHNlcnZpZG9yIG1lZGlhbnRlIFBQUCBvIERIQ1AuCisuUFAKK0RpcmVjY2lvbmVzIGVuIC9ldGMvaG9zdHMgImhhcuFuIHNvbWJyYSIgYSBkaWZlcmVudGVzIGRpcmVjY2lvbmVzIHBhcmEKK2xvcyBtaXNtb3Mgbm9tYnJlcyBlbiBzZXJ2aWRvcmVzIEROUyB1cHN0cmVhbSwgYXPtIHF1ZQorIm1pZW1wcmVzYS5jb20gMS4yLjMuNCIgZW4gL2V0Yy9ob3N0cyBzZSBhc2VndXJhcuEgcXVlIGxhcyBi+nNxdWVkYXMKK3BvciAibWllbXByZXNhLmNvbSIgc2llbXByZSByZXRvcm5hcuFuIDEuMi4zLjQgYfpuIHNpIGL6c3F1ZWRhcyBlbiBlbAorc2Vydmlkb3IgRE5TIHVwc3RyZWFtIGRldm9sdmVy7WFuIHVuYSBkaXJlY2Np824gZGlmZXJlbnRlLiBIYXkgdW5hCitleGNlcGNp824gYSBlc3RvOiBzaSBlbCBzZXJ2aWRvciBETlMgdXBzdHJlYW0gY29udGllbmUgdW4gQ05BTUUgcXVlCithcHVudGEgYSB1biBub21icmUgc29tYnJlYWRvLCBlbnRvbmNlcyBidXNjYW5kbyBlbCBDTkFNRSBhIHRyYXbpeiBkZQorZG5zbWFzcSByZXN1bHRhcuEgZW4gcXVlIGxhIGRpcmVjY2nzbiBuby1zb21icmVhZGEgc2Vy4SBhc29jaWFkYSBjb24KK2VsIGRlc3Rpbm8gZGVsIENOQU1FLiBQYXJhIGNpcmN1bXZlbnRhciBlc3RvLCBhZ3JlZ2FyIGVsIENOQU1FIGEKKy9ldGMvaG9zdHMgZGUgdGFsIG1hbmVyYSBxdWUgZWwgQ05BTUUgZXMgc29tYnJlYWRvIHRhbWJp6W4uCisKKy5QUAorRWwgc2lzdGVtYSBkZSBldGlxdWV0YXMgZnVuY2lvbmEgZGUgbGEgc2lndWllbnRlIG1hbmVyYTogUGFyYSBjYWRhIHBlZGlkbworREhDUCwgZG5zbWFzcSBjb2xlY2Npb25hIHVuIGp1ZWdvIGRlIGV0aXF1ZXRhcyB24WxpZGFzIGRlIGztbmVhcyBkZQorY29uZmlndXJhY2nzbiBhY3RpdmFzIHF1ZSBpbmNsdXllbiBzZXQ6PHRhZz4sIGluY2x1eWVuZG8gdW5hIGRlbAorLkIgZGhjcC1yYW5nZQordXNhZG8gcGFyYSBhbG9jYXIgbGEgZGlyZWNjafNuLCB1bmEgZGUgY3VhbHF1aWVyCisuQiBkaGNwLWhvc3QKK3F1ZSBjb2luY2lkYSAoeSAia25vd24iIHNpIHVuIGRoY3AtaG9zdCBjb2luY2lkZSkuCitMYSBldGlxdWV0YSAiYm9vdHAiIGVzIGZpamFkYSBwYXJhIHBlZGlkb3MgQk9PVFAsIHkgdW5hIGV0aXF1ZXRhIGN1eW8KK25vbWJyZSBlcyBlbCBub21icmUgZGUgbGEgaW50ZXJmYWNlIGRvbmRlIGxsZWfzIGVsIHBlZGlkbyB0YW1iaWVuIGVzCitmaWphZGEuCisKK0N1YWxxdWllciBsaW5lYSBkZSBjb25maWd1cmFjafNuIHF1ZSBpbmNsdXlhIHVubyBvIG1hcworY29uc3RydWNjaW9uZXMgdGFnOjx0YWc+IHNvbG8gc2Vy4SB24WxpZGEgc2kgdG9kYXMgbGFzIGV0aXF1ZXRhcworY29pbmNpZGVuIGVuIGVsIGp1ZWdvIGRlcml2YWRvIGFycmliYS4gVO1waWNhbWVudGUgZXN0byBlcyBkaGNwLW9wdGlvbi4KKy5CIGRoY3Atb3B0aW9uIAorcXVlIHRlbmdhIGV0aXF1ZXRhcyBzZXLhIHVzYWRhIGVuIHByZWZlcmVuY2lhIGRlIHVuYSBvcGNp824KKy5CIGRoY3Atb3B0aW9uLAorc2luIGV0aXF1ZXRhLCBjb24gdGFsIHF1ZSBfdG9kYXNfIGxhcyBldGlxdWV0YXMgY29pbmNpZGFuIGVuIGFsZ3VuYQorcGFydGUgZGVsIGp1ZWdvIGNvbGVjY2lvbmFkbyBkZXNjcmliaWRvIGFycmliYS4gRWwgcHJlZmlqbyAnIScgZW4gdW5hCitldGlxdWV0YSBzaWduaWZpY2EgIm5vIiBhc+0gcXVlIC0tZGhjcD1vcHRpb249dGFnOiFwdXJwbGUsMywxLjIuMy40IGVudu1hCitsYSBvcGNp824gY3VhbmRvIGxhIGV0aXF1ZXRhICJwdXJwbGUiIG5vIGVzdOEgZW4gZWwganVlZ28KK2RlIGV0aXF1ZXRhcyB24WxpZGFzLiAoU2kgc2UgZXN04SB1c2FuZG8gZXN0byBlbiB1bmEgbO1uZWEgZGUgY29tYW5kb3MKK2VuIHZleiBkZSB1biBhcmNoaXZvIGRlIGNvbmZpZ3VyYWNp824sIGFzZWd1cmVzZSBkZSBlc2NhcGFyICEsIGVsIGN1YWwKK2VzIHVuIG1ldGFjYXJhY3RlciBkZSBzaGVsbC4pCisuUFAKK07zdGVzZSBxdWUgcGFyYQorLkIgZGhjcC1yYW5nZQorYW1ib3MgdGFnOjx0YWc+IHkgc2V0Ojx0YWc+IHNvbiBwZXJtaXRpZG9zLCBwYXJhIHNlbGVjY2lvbmFyIGVsIHJhbmdvCitlbiB1c28gYmFzYWRvIGVuIChwb3IgZWplbXBsbykgZGhjcC1ob3N0LCB5IHBhcmEgYWZlY3RhciBsYXMgb3BjaW9uZXMKK2VudmlhZGFzLCBiYXNhZGFzIGVuIGVsIHJhbmdvIHNlbGVjY2lvbmFkby4KKworRXN0ZSBzaXN0ZW1hIGV2b2x1Y2lvbvMgZGUgdW5vIGFudGVyaW9yIG1hcyBsaW1pdGFkbyB5IHBhcmEgY29tcGF0aWJpbGRhZAorcmV2ZXJzYSAibmV0OiIgcHVlZGUgc2VyIHVzYWRhIGVuIHZleiBkZSAidGFnOiIgeSAic2V0OiIgcHVlZGUgc2VyCitvbWl0aWRhLiAoRXhjZXB0byBlbgorLkIgZGhjcC1ob3N0LAorZG9uZGUgIm5ldDoiIHB1ZWRlIHNlciB1c2FkbyBlbiB2ZXogZGUgInNldDoiLikgUG9yIGxhIG1pc21hIHJhevNuLCAnIycKK3B1ZWRlIHNlciB1c2FkbyBlbiB2ZXogZGUgJyEnIHBhcmEgaW5kaWNhciBOTy4KKy5QUAorRWwgc2Vydmlkb3IgREhDUCBkZSBkbnNtYXNxIGZ1bmNpb25hcuEgY29tbyBzZXJ2aWRvciBCT09UUCB0YW1iaWVuLAorY29uIHRhbCBxdWUgbGFzIGRpcmVjY2lvbmVzIE1BQyB5IElQIGRlIGxvcyBjbGllbnRlcyBzZWFuIGJyaW5kYWRhcywKK3lhIHNlYSB1c2FuZG8gY29uZmlndXJhY2lvbmVzCisuQiBkaGNwLWhvc3QgCitvIGVuCisuSSAvZXRjL2V0aGVycworLCB5IHVuYSBjb25maWd1cmFjafNuCisuQiBkaGNwLXJhbmdlIAorZXN06SBwcmVzZW50ZSBwYXJhIGFjdGl2YXIgZWwgc2Vydmlkb3IgREhDUCBlbiB1bmEgcmVkIHBhcnRpY3VsYXIuCisoRmlqYXIgLS1ib290cC1keW5hbWljIGVsaW1pbmEgbGEgbmVjZXNpZGFkIGRlIHRyYXphZG9zIGVzdOF0aWNvcy4pIEVsCitwYXLhbWV0cm8gZGUgbm9tYnJlIGRlIGFyY2hpdm9zIGVuIHVuIHBlZGlkbyBCT09UUCBlcyB1c2FkbyBjb21vCit1bmEgZXRpcXVldGEsIGFsIGlndWFsIHF1ZSBsYSBldGlxdWV0YSAiYm9vdHAiLCBwZXJtaXRpZW5kbyBhc+0gYWxn+m4KK2NvbnRyb2wgc29icmUgbGFzIG9wY2lvbmVzIGRldnVlbHRhcyBhIGRpZmVyZW50ZXMgY2xhc2VzIGRlIGhvc3RzLgorCisuQiBkaGNwLXJhbmdlCitwdWVkZSB0ZW5lciB1biBub21icmUgZGUgaW50ZXJmYWNlIGJyaW5kYWRvIGNvbW8KKyJpbnRlcmZhY2U6PGludGVyZmFjZS1uYW1lPiIuIExhIHNlbeFudGljYSBkZSBlc3RvIGVzIGFz7ToKK1BhcmEgREhDUCwgc2kgY3VhbHF1aWVyIG90cm8gZGhjcC1yYW5nZSBleGlzdGUgX3Npbl8gdW4gbm9tYnJlIGRlCitpbnRlcmZhY2UsIGVudG9uY2VzIGVsIG5vbWJyZSBkZSBpbnRlcmZhY2UgZXMgaWdub3JhZG8geSBkbnNtYXNxCitzZSBjb21wb3J0YSBjb21vIHNpIGxhcyBwYXJ0ZXMgZGUgaW50ZXJmYWNlIG5vIGV4aXN0aWVyYW4sIGRlIG90cmEgZm9ybWEKK0RIQ1Agc29sbyBzZSBwcm92ZWUgYSBpbnRlcmZhY2VzIG1lbmNpb25hZGFzIGVuIGRlY2xhcmFjaW9uZXMKK2RoY3AtcmFuZ2UuIFBhcmEgRE5TLCBzaSBubyBoYXkgb3BjaW9uZXMKKy5CIC0taW50ZXJmYWNlCitvCisuQiAtLWxpc3Rlbi1hZGRyZXNzCitlbCBjb21wb3J0YW1pZW50byBubyBzZSBtb2RpZmljYSBwb3IgbGEgcGFydGUgZGUgaW50ZXJmYWNlLiBTaSBjdWFscXVpZXJhCitkZSBlc3RhcyBvcGNpb25lcyBlc3ThIHByZXNlbnRlLCBsYXMgaW50ZXJmYWNlcyBtZW5jaW9uYWRhcyBlbiBkaGNwLXJhbmdlcworc29uIGFncmVnYWRhcyBhbGwganVlZ28gcXVlIG9idGllbmVuIHNlcnZpY2lvIEROUy4KKworU2ltaWxhcm1lbnRlLAorLkIgZW5hYmxlLXRmdHAKK3B1ZWRlIHRvbWFyIHVuIG5vbWJyZSBkZSBpbnRlcmZhY2UsIGVsIGN1YWwgaGFiaWxpdGEgVEZUUCBzb2xvIHBhcmEgdW5hCitpbnRlcmZhY2UgZW4gcGFydGljdWxhciwgaWdub3JhbmRvIG9wY2lvbmVzCisuQiAtLWludGVyZmFjZQorbworLkIgLS1saXN0ZW4tYWRkcmVzcy4KK0FkaWNpb25hbG1lbnRlLCAKKy5CIC0tdGZ0cC1zZWN1cmUKK3kKKy5CIC0tdGZ0cC11bmlxdWUtcm9vdAoreQorLkIgLS10ZnRwLW5vLWJsb2Nrc2l6ZQorc29uIGlnbm9yYWRvcyBwb3IgcGVkaWRvcyBkZXNkZSBkaWNoYXMgaW50ZXJmYWNlcy4gKFVuYSBkaXJlY3RpdmEKKy5CIC0tdGZ0cC1yb290CiticmluZGFuZG8gdW4gcGF0aCByYe16IHkgdW5hIGludGVyZmFjZSBkZWJlIHNlciBicmluZGFkYSB0YW1iaWVuLikKKworRXN0YXMgcmVnbGFzIHB1ZWRlbiBwYXJlY2VyIHJhcmFzIGEgcHJpbWVyYSB2aXN0YSwgcGVybyBwZXJtaXRlbiBxdWUKK3VuYSBzaW1wbGUgbGluZWEgZGUgbGEgZm9ybWEKKyJkaGNwLXJhbmdlPWludGVyZmFjZTp2aXJ0MCwxOTIuMTY4LjAuNCwxOTIuMTY4LjAuMjAwIiBzZWEgYWdyZWdhZGEgYQorY29uZmlndXJhY2nzbiBkbnNtYXNxLCBsbyBjdWFsIGJyaW5kYSBzZXJ2aWNpb3MgREhDUCB5IEROUyBhIGVzYSBpbnRlcmZhY2UsCitzaW4gYWZlY3RhciBsb3Mgc2VydmljaW9zIGVuIG90cmFzIGludGVyZmFjZXMgeSBpcnJlc3BlY3RpdmFtZW50ZSBkZQorbGEgZXhpc3RlbmNpYSBvIG5vIGRlIGxpbmVhcyAiaW50ZXJmYWNlPTxpbnRlcmZhY2U+IiBlbiBhbGd1bmEgb3RyYSBwYXJ0ZQorZGUgbGEgY29uZmlndXJhY2nzbiBkbnNtYXNxLgorImVuYWJsZS10ZnRwPXZpcnQwIiB5ICJ0ZnRwLXJvb3Q9PHJvb3Q+LHZpcnQwIiBoYWNlbiBlbCBtaXNtbyB0cmFiYWpvCitwYXJhIFRGVFAuCitMYSBpZGVhIGVzIHF1ZSB1bmEgbGluZWEgYXPtIHB1ZWRhIHNlciBhZ3JlZ2FkYSBhdXRvbWF0aWNhbWVudGUKK3BvciBsaWJ2aXJ0IG8gc2lzdGVtYXMgZXF1aXZhbGVudGVzLCBzaW4gZXN0b3JiYXIgYWxndW5hCitjb25maWd1cmFjafNuIG1hbnVhbC4KKworLlNIIEPTRElHT1MgRVhJVAorLlBQCiswIC0gRG5zbWFzcSBoaXpvIGZvcmsgaGFjaWEgZWwgZm9uZG8gZXhpdG9zYW1lbnRlLCBvIHRlcm1pbvMgZGUgbWFuZXJhCitub3JtYWwgc2kgaXIgYWwgZm9uZG8gbm8gZXN04SBoYWJpbGl0YWRvLgorLlBQCisxIC0gVW4gcHJvYmxlbWEgY29uIGxhIGNvbmZpZ3VyYWNp824gaGEgc2lkbyBkZXRlY3RhZG8uCisuUFAKKzIgLSBVbiBwcm9ibGVtYSBjb24gYWNjZXNvIGEgcmVkZXMgb2N1cnJp8yAoZGlyZWNjafNuIGVuIHVzbywgaW50ZW50bworZGUgdXNhciBwdWVydG9zIHByaXZpbGVnaWFkb3Mgc2luIHBlcm1pc28pLgorLlBQCiszIC0gVW4gcHJvYmxlbWEgY29uIHVuYSBvcGVyYWNp824gZGUgc2lzdGVtYSBkZSBhcmNoaXZvcyBvY3VycmnzIChhcmNoaXZvCitvIGRpcmVjdG9yaW8gYXVzZW50ZSwgcGVybWlzb3MpLgorLlBQCis0IC0gRmFsbGEgZGUgYWxvY2FjafNuIGRlIG1lbW9yaWEuCisuUFAKKzUgLSBPdHJvIHByb2JsZW1hIG1pc2NlbOFuZW8uCisuUFAKKzExIG8gbWF5b3IgLSB1biBjb2RpZ28gZGUgcmV0b3JubyBubyBjZXJvIGZ16SByZWNpYmlkbyBkZWwgbGxhbWFkbyAiaW5pdCIKK2RlbCBwcm9jZXNvIGRlIGFyY2hpdm8gZ3Vp824gZGUgYXJyaWVuZG9zLiBFbCBj82RpZ28gZXhpdCBkZSBkbnNtYXNxIGVzCitlbCBj82RpZ28gZXhpdCBkZWwgYXJjaGl2byBndWnzbiBjb24gMTAgc3VtYWRvLgorCisuU0ggTElNSVRFUworTG9zIHZhbG9yZXMgcHJlZGV0ZXJtaW5hZG9zIHBhcmEgbGltaXRlcyBkZSByZWN1cnNvcyBzb24gZ2VuZXLhbG1lbnRlCitjb25zZXJ2YWRvcmVzLCB5IGFwcm9waWFkb3MgcGFyYSB1c28gZW4gZGlzcG9zaXRpdm9zIHRpcG8gZW5ydXRhZG9yCitlbmNydXN0cmFkbyBjb24gcHJvY2VzYWRvcmVzIGxlbnRvcyB5IHBvY2EgbWVtb3JpYS4gRW4gaGFyZHdhcmUgbeFzCitjYXDheiwgZXMgcG9zaWJsZSBpbmNyZW1lbnRhciBsb3MgbO1taXRlcywgeSBzb3BvcnRhciBtdWNob3MgbWFzCitjbGllbnRlcy4gTG8gc2lndWllbnRlIHNlIGFwbGljYSBhIGRuc21hc3EtMi4zNzogdmVyc2lvbmVzIHByZXZpYXMKK25vIGVzY2FsYWJhbiB0YW4gYmllbi4KKworLlBQCitEbnNtYXNxIGVzIGNhcGF6IGRlIHNvcG9ydGFyIGNvbiBETlMgeSBESENQIGEgcG9yIGxvIG1lbm9zIG1pbCAoMSwwMDApCitjbGllbnRlcy4gTG9zIHRpZW1wb3MgZGUgYXJyaWVuZG8gbm8gZGViZW4gc2VyIG11eSBjb3J0b3MgKG1lbm9zCitkZSB1bmEgaG9yYSkuIEVsIHZhbG9yIGRlCisuQiAtLWRucy1mb3J3YXJkLW1heAorcHVlZGUgc2VyIGF1bWVudGFkbzogY29taWVuemUgY29uIGVsIGVxdWl2YWxlbnRlIGEgZWwgbvptZXJvIGRlIGNsaWVudGVzIHkKK2F1beludGVsbyBzaSBwYXJlY2UgbGVudG8gZWwgRE5TLiBO83Rlc2UgcXVlIGVsIHJlbmRpbWllbnRvIEROUyBkZXBlbmRlCit0YW1iaeluIGRlIGxvcyBzZXJ2aWRvcmVzIEROUyB1cHN0cmVhbS4gRWwgdGFtYfFvIGRlbCBjYWNo6SBETlMgcHVlZGUgc2VyCitpbmNyZW1lbnRhZG86IGVsIGztbWl0ZSBvYmxpZ2F0b3JpbyBlcyAxMCwwMDAgbm9tYnJlcyB5IGVsIHByZWRldGVybWluYWRvCisoMTUwKSBlcyBtdXkgYmFqby4gRWwgZW52aWFybGUgdW4gU0lHVVNSMSBhIGRuc21hc3EgaGFjZSBxdWUgYml0YWNvcullCitpbmZvcm1hY2nzbiBxdWUgZXMg+nRpbCBwYXJhIGFmaW5hciBlbCB0YW1h8W8gZGUgY2FjaOkuIFZlciBsYSBzZWNjafNuCisuQiBOT1RBUworcGFyYSBkZXRhbGxlcy4KKworLlBQCitFbCBzZXJ2aWRvciBURlRQIGluY29ycG9yYWRvIGVzIGNhcOF6IGRlIHNvcG9ydGFyIHZhcmlhcyB0cmFuc2ZlcmVuY2lhcworc2ltdWx04W5lYXMgZGUgYXJjaGl2b3M6IGVsIGztbWl0ZSBhYnNvbHV0byBlc3ThIHJlbGFjaW9uYWRvIGNvbiBlbCBu+m1lcm8KK2RlIGZpbGUtaGFuZGxlcyBwZXJtaXRpZG9zIGEgdW4gcHJvY2VzbyB5IGxhIGhhYmlsaWRhZCBkZWwgc3lzdGVtIGNhbGwKK3NlbGVjdCgpIGEgc29wb3J0YXIgbvptZXJvcyBncmFuZGVzIGRlIGZpbGUtaGFuZGxlcy4gU2kgZWwgbO1taXRlIGVzIGZpamFkbworZGVtYXNpYWRvIGFsdG8gY29uCisuQiAtLXRmdHAtbWF4CitzZXLhIGRlLWVzY2FsYWRvIHkgZWwgbO1taXRlIHJlYWwgc2Vy4SBiaXRhY29yZWFkbyBhbCBpbmljaW8uIE7zdGVzZSBxdWUgbeFzCit0cmFuc2ZlcmVuY2lhcyBzb24gcG9zaWJsZXMgY3VhbmRvIGVsIG1pc21vIGFyY2hpdm8gZXMgZW52aWFkbyBxdekgY3VhbmRvCitjYWRhIHRyYW5zZmVyZW5jaWEgZW527WEgdW4gYXJjaGl2byBkaWZlcmVudGUuCisKKy5QUAorRXMgcG9zaWJsZSB1c2FyIGRuc21hc3EgcGFyYSBuZWdhciBwdWJsaWNpZGFkIFdlYiB1c2FuZG8gdW5hIGxpc3RhIGRlCitzZXJ2aWRvcmVzIGRlIGJhbm5lcnMgYmllbiBjb25vY2lkb3MsIHRvZG9zIHJlc29sdmllbmRvc2UgYSAxMjcuMC4wLjEgbworMC4wLjAuMCBlbgorLkIgL2V0Yy9ob3N0cyAKK28gZW4gdW4gYXJjaGl2byBob3N0cyBhZGljaW9uYWwuIExhIGxpc3RhIHB1ZWRlIHNlciBtdXkgbGFyZ2EuIERuc21hc3EgaGEgc2lkbworcHJvYmFkbyBleGl083NhbWVudGUgY29uIHVuIG1pbGzzbiBkZSBub21icmVzLiBFc2UgdGFtYfFvIGRlIGFyY2hpdm8gbmVjZXNpdGEKK3VuIENQVSBkZSAxR0h6IHkgYXByb3hpbWFkYW1lbnRlIDYwTUIgZGUgUkFNLgorCisuU0ggSU5URVJOQUNJT05BTElaQUNJT04KKworRG5zbWFzcSBwdWVkZSBzZXIgY29tcGlsYWRvIGNvbiBzb3BvcnRlIHBhcmEgaW50ZXJuYWNpb25hbGl6YWNp824uIFBhcmEgaGFjZXIgZXN0bywKK2xvcyB0YXJnZXRzIG1ha2UgImFsbC1pMThuIiB5ICJpbnN0YWxsLWkxOG4iIGRlYmVy4W4gc2VyIHVzYWRvcyBlbiB2ZXogZGUKK2xvcyB0YXJnZXRzIGVzdOFuZGFyZXMgImFsbCIgeSAiaW5zdGFsbCIuIEN1YW5kbyBpbnRlcm5hY2lvbmFsaXphY2nzbiBlcworY29tcGlsYWRhLCBkbnNtYXNxIHByb2R1Y2ly4SBtZW5zYWplcyBkZSBiaXThY29yYSBlbiBlbCBsZW5ndWFqZSBsb2NhbCB5IHNvcG9ydGFy4QorZG9taW5pb3MgaW50ZXJuYWNpb25hbGl6YWRvcyAoSUROKS4gTm9tYnJlcyBkZSBkb21pbmlvIGVuIC9ldGMvaG9zdHMsIC9ldGMvZXRoZXJzLAoreSAvZXRjL2Ruc21hc3EuY29uZiBxdWUgY29udGllbmVuIGNhcuFjdGVyZXMgbm8tQVNDSUkgc2Vy4W4gdHJhZHVjaWRvcyBhCityZXByZXNlbnRhY2nzbiBpbnRlcm5hIEROUyBwdW55Y29kZS4gTvN0ZXNlIHF1ZSBkbnNtYXNxIGRldGVybWluYSBhbWJvcyBlbAorbGVuZ3VhamUgcGFyYSBtZW5zYWplcyB5IGVsIGp1ZWdvIGRlIGNhcuFjdGVyZXMgYXN1bWlkbyBwYXJhIGFyY2hpdm9zIGRlIGNvbmZpZ3VyYWNp824KK2RlIGxhIHZhcmlhYmxlIGFtYmllbnRhbCBMQU5HLiBFc3RvIGRlYmUgZXN0YXIgZmlqYWRvIGFsIHZhbG9yIHByZWRldGVybWluYWRvIGRlbCBzaXN0ZW1hCitwb3IgZWwgZ3Vp824gcmVzcG9uc2FibGUgZGUgaW5pY2lhciBkbnNtYXNxLiBBbCBlZGl0YXIgYXJjaGl2b3MgZGUgY29uZmlndXJhY2nzbiwKK3RlbmVyIGN1aWRhZG8gZGUgaGFjZXJsbyB1c2FuZG8gc29sbyBlbCBsb2NhbGUgcHJlZGV0ZXJtaW5hZG8gZGVsIHNpc3RlbWEgeSBubwordW5vIGVzcGVjaWZpY28gZGVsIHVzdWFyaW8sIGRhZG8gYSBxdWUgZG5zbWFzcSBubyB0aWVuZSBuaW5ndW5hIG1hbmVyYSBkaXJlY3RhIGRlCitkZXRlcm1pbmFyIGVsIGp1ZWdvIGRlIGNhcmFjdGVyZXMgZW4gdXNvLCB5IGRlYmUgYXN1bWlyIHF1ZSBlcyBlbCBwcmVkZXRlcm1pbmFkbworZGVsIHNpc3RlbWEuCisKKy5TSCBBUkNISVZPUworLklSIC9ldGMvZG5zbWFzcS5jb25mIAorCisuSVIgL3Vzci9sb2NhbC9ldGMvZG5zbWFzcS5jb25mCisKKy5JUiAvZXRjL3Jlc29sdi5jb25mCisKKy5JUiAvZXRjL2hvc3RzCisKKy5JUiAvZXRjL2V0aGVycworCisuSVIgL3Zhci9saWIvbWlzYy9kbnNtYXNxLmxlYXNlcyAKKworLklSIC92YXIvZGIvZG5zbWFzcS5sZWFzZXMKKworLklSIC92YXIvcnVuL2Ruc21hc3EucGlkCisuU0ggVkVSIFRBTUJJRU4KKy5CUiBob3N0cyAoNSksIAorLkJSIHJlc29sdmVyICg1KQorLlNIIEFVVE9SCitFc3RlIG1hbnVhbCBmdWUgZXNjcml0byBwb3IgU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4uCisKK1RyYWR1Y2lkbyBhIGVzcGHxb2wgcG9yIENocmlzdG9waGVyIENoYXRoYW0gPGNocmlzbGludXhAZ21haWwuY29tPi4KZGlmZiAtLWdpdCBhL21hbi9mci9kbnNtYXNxLjggYi9tYW4vZnIvZG5zbWFzcS44Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZDFlOWEKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vZnIvZG5zbWFzcS44CkBAIC0wLDAgKzEsMjM1NCBAQAorLlRIIEROU01BU1EgOAorLlNIIE5BTUUKK0Ruc21hc3EgXC0gVW4gc2VydmV1ciBESENQIGV0IGNhY2hlIEROUyBwb2lkcy1wbHVtZS4KKy5TSCBTWU5PUFNJUworLkIgZG5zbWFzcQorLkkgW09QVElPTl0uLi4KKy5TSCAiREVTQ1JJUFRJT04iCisuQlIgZG5zbWFzcQorZXN0IHVuIHNlcnZldXIgw6AgZmFpYmxlIGVtcHJlaW50ZSBtw6ltb2lyZSBmYWlzYW50IEROUywgVEZUUCwgUFhFLCBhbm5vbmNlcyBkZQorcm91dGV1cnMgZXQgREhDUC4gSWwgb2ZmcmUgw6AgbGEgZm9pcyBsZXMgc2VydmljZXMgRE5TIGV0IERIQ1AgcG91ciB1biByw6lzZWF1Citsb2NhbCAoTEFOKS4KKy5QUAorRG5zbWFzcSBhY2NlcHRlIGxlcyByZXF1w6p0ZXMgRE5TIGV0IHkgcsOpcG9uZHMgc29pdCBlbiB1dGlsaXNhbnQgdW4gcGV0aXQgY2FjaGUKK2xvY2FsLCBzb2l0IGVuIGVmZmVjdHVhbnQgdW5lIHJlcXXDqnRlIMOgIHVuIHNlcnZldXIgRE5TIHLDqWN1cnNpZiBleHRlcm5lIChwYXIKK2V4ZW1wbGUgY2VsdWkgZGUgdm90cmUgZm91cm5pc3NldXIgZCdhY2PDqHMgaW50ZXJuZXQpLiBJbCBjaGFyZ2UgbGUgY29udGVudSBkdQorZmljaGllciAvZXRjL2hvc3RzIGFmaW4gcXVlIGxlcyBub21zIGxvY2F1eCBuJ2FwcGFyYWlzc2FudCBwYXMgZGFucyBsZXMgRE5TCitnbG9iYXV4IHNvaWVudCB0b3V0IGRlIG3Dqm1lIHLDqXNvbHVzLCBldCBhc3N1cmUgw6lnYWxlbWVudCBsYSByw6lzb2x1dGlvbiBkZSBub20KK3BvdXIgbGVzIGjDtHRlcyBwcsOpc2VudHMgZGFucyBsZSBzZXJ2aWNlIERIQ1AuIElsIHBldXQgYXVzc2kgYWdpciBlbiB0ZW1wcyBxdWUKK3NlcnZldXIgRE5TIGZhaXNhbnQgYXV0b3JpdMOpIHBvdXIgdW4gb3UgcGx1c2lldXJzIGRvbWFpbmVzLCBwZXJtZXR0YW50IMOgIGRlcworbm9tcyBsb2NhdXggZCdhcHBhcmFpdHJlIGRhbnMgbGUgRE5TIGdsb2JhbC4KKy5QUAorTGUgc2VydmV1ciBESENQIERuc21hc3EgREhDUCBzdXBwb3J0ZSBsZXMgZMOpZmluaXRpb25zIGQnYWRyZXNzZXMgc3RhdGlxdWVzIGV0IGxlcworcsOpc2VhdXggbXVsdGlwbGVzLiBJbCBmb3Vybml0IHBhciBkw6lmYXV0IHVuIGpldSByYWlzb25uYWJsZSBkZSBwYXJhbcOodHJlcyBESENQLAorZXQgcGV1dCDDqnRyZSBjb25maWd1csOpIHBvdXIgZm91cm5pciBuJ2ltcG9ydGUgcXVlbGxlIG9wdGlvbiBESENQLgorSWwgaW5jbHV0IHVuIHNlcnZldXIgVEZUUCBzw6ljdXJpc8OpIGVuIGxlY3R1cmUgc2V1bGUgcGVybWV0dGFudCBsZSBkw6ltYXJyYWdlIHZpYQorbGUgcsOpc2VhdS9QWEUgZGUgY2xpZW50cyBESENQIGV0IHN1cHBvcnRlIMOpZ2FsZW1lbnQgbGUgcHJvdG9jb2xlIEJPT1RQLiBMZQorc3VwcG9ydCBQWEUgZXN0IGNvbXBsZXQsIGV0IGNvbXByZW5kIHVuIG1vZGUgcHJveHkgcGVybWV0dGFudCBkZSBmb3VybmlyIGRlcworaW5mb3JtYXRpb25zIFBYRSBhdXggY2xpZW50cyBhbG9ycyBxdWUgbCdhbGxvY2F0aW9uIERIQ1AgZXN0IGVmZmVjdHXDqWUgcGFyIHVuCithdXRyZSBzZXJ2ZXVyLgorLlBQCitMZSBzZXJ2ZXVyIERIQ1B2NiBkZSBkbnNtYXNxIHBvc3PDqGRlIG5vbiBzZXVsZW1lbnQgbGVzIG3Dqm1lcyBmb25jdGlvbmFsaXTDqXMKK3F1ZSBsZSBzZXJ2ZXVyIERIQ1B2NCwgbWFpcyBhdXNzaSBsZSBzdXBwb3J0IGRlcyBhbm5vbmNlcyBkZSByb3V0ZXVycyBhaW5zaQorcXUndW5lIGZvbmN0aW9uYWxpdMOpIHBlcm1ldHRhbnQgbCdhZGRpdGlvbiBkZSByZXNzb3VyY2VzIEFBQUEgcG91ciBkZXMKK2NsaWVudHMgdXRpbGlzYW50IERIQ1B2NCBldCBsYSBjb25maWd1cmF0aW9uIElQdjYgc2FucyDDqXRhdCAoc3RhdGVsZXNzCithdXRvY29uZmlndXJhdGlvbikuCitJbCBpbmNsdXQgbGUgc3VwcG9ydCBkJ2FsbG9jYXRpb25zIGQnYWRyZXNzZXMgKMOgIGxhIGZvaXMgZW4gREhDUHY2IGV0IGVuCithbm5vbmNlcyBkZSByb3V0ZXVycyAtIFJBKSBwb3VyIGRlcyBzb3VzLXLDqXNlYXV4IGR5bmFtaXF1ZW1lbnQgZMOpbMOpZ3XDqXMgdmlhCit1bmUgZMOpbMOpZ2F0aW9uIGRlIHByw6lmaXhlIERIQ1B2Ni4KKy5QUAorRG5zbWFzcSBlc3QgZGV2ZWxvcHDDqSBwb3VyIGRlIHBldGl0cyBzeXN0w6htZXMgZW1iYXJxdcOpcy4gSXQgdGVuZHMgw6AgYXZvaXIKK2wnZW1wcmVpbnRlIG3DqW1vaXJlIGxhIHBsdXMgZmFpYmxlIHBvc3NpYmxlIHBvdXIgbGVzIGZvbmN0aW9ucyBzdXBwb3J0w6llcywKK2V0IHBlcm1ldCBkJ2V4Y2x1cmUgbGVzIGZvbmN0aW9ucyBpbnV0aWxlcyBkdSBiaW5haXJlIGNvbXBpbMOpLgorLlNIIE9QVElPTlMKK05vdGVzIDogSWwgZXN0IHBvc3NpYmxlIGQndXRpbGlzZXIgZGVzIG9wdGlvbnMgc2FucyBsZXVyIGRvbm5lciBkZSBwYXJhbcOodHJlLgorRGFucyBjZSBjYXMsIGxhIGZvbmN0aW9uIGNvcnJlc3BvbmRhbnRlIHNlcmEgZMOpc2FjdGl2w6llLiBQYXIgZXhlbXBsZQorLkIgLS1waWQtZmlsZT0KKyhzYW5zIHBhcmFtw6h0cmUgYXByw6hzIGxlID0pIGTDqXNhY3RpdmUgbCfDqWNyaXR1cmUgZHUgZmljaGllciBQSUQuCitTdXIgQlNELCDDoCBtb2lucyBxdWUgbGUgbG9naWNpZWwgbmUgc29pdCBjb21waWzDqSBhdmVjIGxhIGJpYmxpb3Row6hxdWUgR05VCitnZXRvcHQsIGxhIGZvcm1lIGxvbmd1ZSBkZXMgb3B0aW9ucyBuZSBmb25jdGlvbm5lIHBhcyBlbiBsaWduZSBkZSBjb21tYW5kZTsgRWxsZQorZXN0IHRvdWpvdXJzIHN1cHBvcnTDqWUgZGFucyBsZSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24uCisuVFAKKy5CIC0tdGVzdAorVsOpcmlmaWUgbGEgc3ludGF4ZSBkdSBvdSBkZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbnMuIFNlIHRlcm1pbmUgYXZlYyBsZQorY29kZSBkZSByZXRvdXIgMCBzaSB0b3V0IGVzdCBPSywgb3UgdW4gY29kZSBkaWZmw6lyZW50IGRlIDAgZGFucyBsZSBjYXMKK2NvbnRyYWlyZS4gTmUgZMOpbWFycmUgcGFzIERuc21hc3EuCisuVFAKKy5CIFwtaCwgLS1uby1ob3N0cworTmUgcGFzIGNoYXJnZXIgbGVzIG5vbXMgZHUgZmljaGllciAvZXRjL2hvc3RzLgorLlRQCisuQiBcLUgsIC0tYWRkbi1ob3N0cz08ZmljaGllcj4KK0ZpY2hpZXJzIGQnaMO0dGVzIGFkZGl0aW9ubmVscy4gTGlyZSBsZSBmaWNoaWVyIHNww6ljaWZpw6kgZW4gcGx1cyBkZSAvZXRjL2hvc3RzLgorU2kgCisuQiAtaAorZXN0IHNww6ljaWZpw6ksIGxpcmUgdW5pcXVlbWVudCBsZSBmaWNoaWVyIHNww6ljaWZpw6kuIENldHRlIG9wdGlvbiBwZXV0IMOqdHJlCityw6lww6l0w6llIGFmaW4gZCdham91dGVyIGQnYXV0cmVzIGZpY2hpZXJzLiBTaSB1biByw6lwZXJ0b2lyZSBlc3QgZG9ubsOpLCBsaXMgbGVzCitmaWNoaWVycyBjb250ZW51cyBkYW5zIGNlIHLDqXBlcnRvaXJlLgorLlRQCisuQiBcLUUsIC0tZXhwYW5kLWhvc3RzCitBam91dGUgbGUgbm9tIGRlIGRvbWFpbmUgYXV4IG5vbXMgc2ltcGxlcyAobmUgY29udGVuYW50IHBhcyBkZSBwb2ludCBkYW5zIGxlCitub20pIGNvbnRlbnVzIGRhbnMgbGUgZmljaGllciAvZXRjL2hvc3RzLCBkZSBsYSBtw6ptZSBmYcOnb24gcXVlIHBvdXIgbGUgc2VydmljZQorREhDUC4gTm90ZXogcXVlIGNlbGEgbmUgcydhcHBsaXF1ZSBwYXMgYXUgbm9tIGRlIGRvbWFpbmUgZGFucyBsZXMgQ05BTUUsIGxlcworZW5yZWdpc3RyZW1lbnRzIFBUUiwgVFhULCBldGMuLi4KKy5UUAorLkIgXC1ULCAtLWxvY2FsLXR0bD08ZHVyw6llPgorTG9yc3F1ZSBEbnNtYXNxIHLDqXBvbmQgYXZlYyB1bmUgaW5mb3JtYXRpb24gcHJvdmVuYW50IGR1IGZpY2hpZXIgL2V0Yy9ob3N0cyBvdQorYXZlYyB1biBiYWlsIERIQ1AsIGlsIGRvbm5lIHVuIHRlbXBzIGRlIHZpZSAodGltZS10by1saXZlKSBwb3NpdGlvbm7DqSDDoCB6w6lybywKK2FmaW4gZCdpbmRpcXVlciDDoCBsYSBtYWNoaW5lIGZhaXNhbnQgbGEgcmVxdcOqdGUgcXVlIGNlbGxlLWNpICBuZSBkb2l0IHBhcyDDqnRyZQorbWlzZSBkYW5zIHVuIGNhY2hlLiBDZWNpIGVzdCBsZSBjb21wb3J0ZW1lbnQgY29ycmVjdCBkYW5zIHByZXNxdWUgdG91dGVzIGxlcworc2l0dWF0aW9ucy4KK0NldHRlIG9wdGlvbiBwZXJtZXQgZGUgc3DDqWNpZmllciBsYSB2YWxldXIgZGUgdGltZS10by1saXZlIMOgIHJldG91cm5lciAoZW4KK3NlY29uZGVzKS4gQ2VsYSBwZXJtZXQgZGUgcsOpZHVpcmUgbGEgY2hhcmdlIHN1ciBsZSBzZXJ2ZXVyLCBtYWlzIGxlcyBjbGllbnRzCityaXNxdWVudCBkJ3V0aWxpc2VyIGRlcyBkb25uw6llcyBww6lyaW3DqWVzIGRhbnMgY2VydGFpbnMgY2FzLgorLlRQCisuQiAtLW5lZy10dGw9PGR1csOpZT4KK0xlcyByw6lwb25zZXMgbsOpZ2F0aXZlcyBwcm92ZW5hbnQgZGVzIHNlcnZldXJzIGFtb250cyBjb250aWVubmVudCBub3JtYWxlbWVudAordW5lIGluZm9ybWF0aW9uIGRlIGR1csOpZSBkZSB2aWUgKHRpbWUtdG8tbGl2ZSkgZGFucyBsZXMgZW5yZWdpc3RyZW1lbnRzIFNPQSwKK2luZm9ybWF0aW9uIGRvbnQgZG5zbWFzcSBzZSBzZXJ0IHBvdXIgbWV0dHJlIGxhIHLDqXBvbnNlIGVuIGNhY2hlLiBTaSBsYSByw6lwb25zZQorZHUgc2VydmV1ciBhbW9udCBvbWV0IGNldHRlIGluZm9ybWF0aW9uLCBkbnNtYXNxIG5lIGNhY2hlIHBhcyBsYSByw6lwb25zZS4gQ2V0dGUKK29wdGlvbiBwZXJtZXQgZGUgZG9uZXIgdW5lIHZhbGV1ciBkZSBkdXLDqWUgZGUgdmllIHBhciBkw6lmYXV0IChlbiBzZWNvbmRlcykgcXVlCitkbnNtYXNxIHV0aWxpc2UgcG91ciBtZXR0cmUgbGVzIHLDqXBvbnNlcyBuw6lnYXRpdmVzIGRhbnMgc29uIGNhY2hlLCBtw6ptZSBlbgorbCdhYnNlbmNlIGQnZW5yZWdpc3RyZW1lbnQgU09BLgorLlRQCisuQiAtLW1heC10dGw9PGR1csOpZT4KK0TDqWZpbmllIGxhIHZhbGV1ciBkZSBUVEwgbWF4aW11bSBxdWkgc2VyYSBmb3VybmllIGF1eCBjbGllbnRzLiBMYSB2YWxldXIgbWF4aW11bQorZGUgVFRMIHNww6ljaWZpw6llIHNlcmEgZm91cm5pZSBhdXggY2xpZW50cyBlbiByZW1wbGFjZW1lbnQgZGUgbGEgdnJhaWUgdmFsZXVyIGRlCitUVEwgc2kgY2V0dGUgZGVybmnDqHJlIGVzdCBzdXDDqXJpZXVyZS4gTGEgdmFsZXVyIHLDqWVsbGUgZGUgVFRMIGVzdCBjZXBlbmRhbnQKK2NvbnNlcnbDqWUgZGFucyBsZSBjYWNoZSBhZmluIGQnw6l2aXRlciBkZSBzYXR1cmVyIGxlcyBzZXJ2ZXVycyBETlMgZW4gYW1vbnQuCisuVFAKKy5CIC0tbWF4LWNhY2hlLXR0bD08ZHVyw6llPgorRMOpZmluaWUgbGEgdmFsZXVyIGRlIFRUTCBtYXhpbXVtIHBvdXIgbGVzIGVudHLDqWVzIGRhbnMgbGUgY2FjaGUKKy5UUAorLkIgLS1hdXRoLXR0bD08ZHVyw6llPgorRMOpZmluaWUgbGEgdmFsZXVyIGRlIFRUTCByZXRvdXJuw6llIHBvdXIgbGVzIHLDqXBvbnNlcyBkdSBzZXJ2ZXVyIGZhaXNhbnQKK2F1dG9yaXTDqS4KKy5UUAorLkIgXC1rLCAtLWtlZXAtaW4tZm9yZWdyb3VuZAorTmUgcGFzIGFsbGVyIGVuIHTDomNoZSBkZSBmb25kIGF1IGxhbmNlbWVudCwgbWFpcyBlbiBkZWhvcnMgZGUgY2VsYSwgZm9uY3Rpb25uZXIKK25vcm1hbGVtZW50LiBDZSBtb2RlIGVzdCBwcsOpdnUgcG91ciBsZXMgY2FzIG/DuSBEbnNtYXNxIGVzdCBsYW5jw6kgcGFyIGRhZW1vbnRvb2xzCitvdSBsYXVuY2hkLgorLlRQCisuQiBcLWQsIC0tbm8tZGFlbW9uCitNb2RlIGRlYnVnIChkw6l2ZXJtaW5hZ2UpIDogbmUgcGFzIGFsbGVyIGVuIHTDomNoZSBkZSBmb25kLCBuZSBwYXMgw6ljcmlyZSBkZQorZmljaGllciBwaWQsIG5lIHBhcyBjaGFuZ2VyIGQnaWRlbnRpZmlhbnQgdXRpbGlzYXRldXIsIGfDqW7DqXJlciB1biDDqXRhdCBjb21wbGV0CitkdSBjYWNoZSBsb3JzIGRlIGxhIHLDqWNlcHRpb24gZCd1biBzaWduYWwgU0lHVVNSMSwgZW52b3llciBsZXMgbG9ncyBzdXIgbGEKK3NvcnRpZSBzdGFuZGFyZCBkJ2VycmV1ciAoInN0ZGVyciIpIGRlIG3Dqm1lIHF1ZSBkYW5zIGxlIHN5c2xvZywgbmUgcGFzIGNyw6llciBkZQorcHJvY2Vzc3VzIGZpbHMgcG91ciB0cmFpdGVyIGxlcyByZXF1w6p0ZXMgVENQLiBBIG5vdGVyIHF1ZSBjZXR0ZSBvcHRpb24gZXN0IMOgCit1c2VyIHBvdXIgZHUgZMOpdmVybWluYWdlIHNldWxlbWVudCA6IHBvdXIgZW1ww6pjaGVyIGRuc21hc3Egc2UgZm9uY3Rpb25uZXIgZW4KK21vZGUgZMOpbW9uIGVuIHByb2R1Y3Rpb24sIHV0aWxpc2VyCisuQiAtay4KKy5UUAorLkIgXC1xLCAtLWxvZy1xdWVyaWVzCitFbnJlZ2lzdHJlciBsZXMgcsOpc3VsdGF0cyBkZXMgcmVxdcOqdGVzIEROUyB0cmFpdMOpZXMgcGFyIERuc21hc3EgZGFucyB1biBmaWNoaWVyCitkZSB0cmFjZXMgKCJsb2dzIikuIEFjdGl2ZSBsYSBnw6luw6lyYXRpb24gZCd1biDDqXRhdCBjb21wbGV0IGR1IGNhY2hlIGxvcnMgZGUgbGEKK3LDqWNlcHRpb24gZCd1biBzaWduYWwgU0lHVVNSMS4KKy5UUAorLkIgXC04LCAtLWxvZy1mYWNpbGl0eT08ZmFjaWxpdHk+CitEw6lmaW5pdCBsYSAiZmFjaWxpdHkiIGRhbnMgbGFxdWVsbGUgRG5zbWFzcSBlbnZlcnJhIHNlcyBlbnRyw6llcyBzeXNsb2csIHBhcgorZMOpZmF1dCBEQUVNT04gb3UgTE9DQUwwIHNpIGxlIG1vZGUgZGVidWcgZXN0IGFjdGl2w6kuIFNpIGxhICJmYWNpbGl0eSIgY29udGllbnQKK2F1IG1vaW5zIHVuIGNhcmFjdMOocmUgIi8iLCBhbG9ycyBEbnNtYXNxIGNvbnNpZMOocmUgcXUnaWwgcydhZ2l0IGQndW4gZmljaGllciBldAorZW52ZXJyYSBsZXMgbG9ncyBkYW5zIGxlIGZpY2hpZXIgY29ycmVzcG9uZGFudCDDoCBsYSBwbGFjZSBkdSBzeXNsb2cuIFNpIGxhCisiZmFjaWxpdHkiIGVzdCAnLScsIGFsb3JzIGRuc21hc3EgZW52b2llIGxlcyBsb2dzIHN1ciBsYSBzb3J0aWUgZCdlcnJldXIKK3N0YW5kYXJkIHN0ZGVyci4gKExlcyBlcnJldXJzIGxvcnMgZGUgbGEgbGVjdHVyZSBkZSBsYSBjb25maWd1cmF0aW9uIHZvbnQKK3RvdWpvdXJzIHZlcnMgbGUgc3lzbG9nLCBtYWlzIHRvdXMgbGVzIG1lc3NhZ2VzIHBvc3TDqXJpZXVycyDDoCB1biBkw6ltYXJyYWdlCityw6l1c3NpIHNlcm9udCBleGNsdXNpdmVtZW50IGVudm95w6lzIHZlcnMgbGUgZmljaGllciBkZSBsb2dzKS4KK0xvcnNxdWUgRG5zbWFzcSBlc3QgY29uZmlndXLDqSBwb3VyIGVudm95ZXIKK3NlcyB0cmFjZXMgdmVycyB1biBmaWNoaWVyLCBsYSByw6ljZXB0aW9uIGQndW4gc2lnbmFsIFNJR1VTUjIgZW50cmFpbmUgbGEKK2Zlcm1ldHVyZSBldCByw6lvdXZlcnR1cmUgZHUgZmljaGllci4gQ2VsYSBwZXJtZXQgbGEgcm90YXRpb24gZGUgZmljaGllcnMgZGUKK3RyYWNlcyBzYW5zIG7DqWNlc3NpdGVyIGwnYXJyw6p0IGRlIERuc21hc3EuCisuVFAKKy5CIC0tbG9nLWFzeW5jWz08bGlnbmVzPl0KK1Blcm1ldCBsJ2Vudm9pIGRlIHRyYWNlcyBkZSBtYW5pw6hyZSBhc3luY2hyb25lLCBldCBkZSBtYW5pw6hyZSBvcHRpb25uZWxsZSwgbGUKK25vbWJyZSBkZSBsaWduZXMgZGV2YW50IMOqdHJlIG1pc2VzIGRhbnMgbGEgZmlsZSBkJ2F0dGVudGUgcGFyIERuc21hc3EgbG9yc3F1ZQorbCfDqWNyaXR1cmUgdmVycyBsZSBzeXNsb2cgZXN0IGxlbnRlLgorRG5zbWFzcSBwZXV0IGVudm95ZXIgc2VzIGxvZ3MgZGUgbWFuacOocmUgYXN5bmNocm9uZSA6IGNlbGEgbHVpIHBlcm1ldCBkZQorY29udGludWVyIMOgIGZvbmN0aW9ubmVyIHNhbnMgw6p0cmUgYmxvcXXDqSBwYXIgbGUgc3lzbG9nLCBldCBwZXJtZXQgw6Agc3lzbG9nCitkJ3V0aWxpc2VyIERuc21hc3EgcG91ciBsZXMgcsOpc29sdXRpb25zIEROUyBzYW5zIHJpc3F1ZSBkJ2ludGVyYmxvY2FnZS4KK1NpIGxhIGZpbGUgZCdhdHRlbnRlIGRldmllbnQgcGxlaW5lLCBEbnNtYXNxIGxvZ2dlcmEgbGUgZMOpcGFzc2VtZW50IGRlIGZpbGUgZXQKK2xlIG5vbWJyZSBkZSBtZXNzYWdlcyBwZXJkdXMuIExhIGxvbmd1ZXVyIHBhciBkw6lmYXV0IGRlIGxhIGZpbGUgZCdhdHRlbnRlIGVzdCBkZQorNSBldCB1bmUgdmFsZXVyIHNhaW5lIHNlcmEgY29tcHJpc2UgZW50cmUgNSBldCAyNSwgYXZlYyB1bmUgbGltaXRlIG1heGltdW0KK2ltcG9zw6llIGRlIDEwMC4KKy5UUAorLkIgXC14LCAtLXBpZC1maWxlPTxjaGVtaW4+CitTcMOpY2lmaWUgdW4gZmljaGllciBkYW5zIGxlcXVlbCBzdG9ja2VyIGxlIG51bcOpcm8gZGUgcHJvY2Vzc3VzIChwaWQpLiBMYSB2YWxldXIKK3BhciBkw6lmYXV0IGVzdCAvdmFyL3J1bi9kbnNtYXNxLnBpZC4KKy5UUAorLkIgXC11LCAtLXVzZXI9PG5vbSBkJ3V0aWxpc2F0ZXVyPgorU3DDqWNpZmllIGwnaWRlbnRpdMOpIChub20gZCd1dGlsaXNhdGV1cikgcHJpc2UgcGFyIERuc21hc3EgYXByw6hzIGxlIGTDqW1hcnJhZ2UuCitEbnNtYXNxIGRvaXQgbm9ybWFsZW1lbnQgw6p0cmUgZMOpbWFycsOpIGVuIHRlbXBzIHF1ZSByb290ICgic3VwZXItdXRpbGlzYXRldXIiKSwKK21haXMgYWJhbmRvbm5lIHNlcyBwcml2aWzDqGdlcyBhcHLDqHMgbGUgZMOpbWFycmFnZSBlbiBjaGFuZ2VhbnQgZCdpZGVudGl0w6kuCitOb3JtYWxlbWVudCBjZXQgdXRpbGlzYXRldXIgZXN0IGwndXRpbGlzYXRldXIgbm9ib2R5ICgicGVyc29ubmUiKSwgbWFpcyBpbCBlc3QKK3Bvc3NpYmxlIGQnZW4gZMOpZmluaXIgdW4gYXV0cmUgcGFyIGxlIGJpYWlzIGRlIGNlIHBhcmFtw6h0cmUuCisuVFAKKy5CIFwtZywgLS1ncm91cD08bm9tIGRlIGdyb3VwZT4gCitTcMOpY2lmaWUgbGUgZ3JvdXBlIHNvdXMgbGVxdWVsIERuc21hc3EgcydleMOpY3V0ZS4gUGFyIGTDqWZhdXQsIGlsIHMnYWdpdCBkdQorZ3JvdXBlICJkaXAiLCBhZmluIGRlIGZhY2lsaXRlciBsJ2FjY8OocyBhdSBmaWNoaWVyIC9ldGMvcHBwL3Jlc29sdi5jb25mIHF1aQorbidlc3QgZW4gZ8OpbsOpcmFsIHBhcyBlbiBsZWN0dXJlIHBhciB0b3V0IGxlIG1vbmRlLgorLlRQCisuQiBcLXYsIC0tdmVyc2lvbgorSW1wcmltZSBsZSBudW3DqXJvIGRlIHZlcnNpb24uCisuVFAKKy5CIFwtcCwgLS1wb3J0PTxwb3J0PgorRWNvdXRlIHN1ciBsZSBwb3J0IG51bcOpcm8gPHBvcnQ+IGF1IGxpZXUgZHUgcG9ydCBETlMgc3RhbmRhcmQgKDUzKS4gUGFyYW3DqXRyZXIKK2NldHRlIHZhbGV1ciDDoCB6w6lybyBkw6lzYWN0aXZlIGNvbXBsw6h0ZW1lbnQgbGEgZm9uY3Rpb24gRE5TIHBvdXIgbmUgbGFpc3NlciBhY3RpZgorcXVlIGxlIERIQ1Agb3UgbGUgVEZUUC4KKy5UUAorLkIgXC1QLCAtLWVkbnMtcGFja2V0LW1heD08dGFpbGxlPgorU3DDqWNpZmllIGxhIHRhaWxsZSBtYXhpbXVtIGRlIHBhcXVldCBVRFAgRUROUy4wIHN1cHBvcnTDqSBwYXIgbGUgcmVsYWkgRE5TLiBMZQorZMOpZmF1dCBlc3QgZGUgNDA5NiwgcXVpIGVzdCBsYSB2YWxldXIgcmVjb21tYW5kw6llIGRhbnMgbGEgUkZDNTYyNS4KKy5UUAorLkIgXC1RLCAtLXF1ZXJ5LXBvcnQ9PG51bcOpcm8gZGUgcG9ydD4KK0Vudm9pZSBldCDDqWNvdXRlIGxlcyByZXF1w6p0ZXMgRE5TIHNvcnRhbnRlcyBkZXB1aXMgbGUgcG9ydCBVRFAgc3DDqWNpZmnDqSBwYXIKKzxudW3DqXJvIGRlIHBvcnQ+LCBldCBub24gc3VyIHVuIHBvcnQgYWzDqWF0b2lyZS4gTk9URSA6IENldHRlIG9wdGlvbiByZW5kcworZG5zbWFzcSBtb2lucyBzw7tyIGNvbnRyZSBsZXMgYXR0YXF1ZXMgcGFyIHVzdXJwYXRpb24gRE5TICgiRE5TIHNwb29maW5nIiksIG1haXMKK2NlbGEgcGV1dCBwZXJtZXR0cmUgZCd1dGlsaXNlciBtb2lucyBkZSByZXNzb3VyY2VzIGV0IGQnw6p0cmUgcGx1cyByYXBpZGUuIERvbm5lcgordW5lIHZhbGV1ciBkZSB6w6lybyDDoCBjZXR0ZSBvcHRpb24gcmVzdGF1cmUgbGUgY29tcG9ydGVtZW50IHBhciBkw6lmYXV0IHByw6lzZW50IGRhbnMKK2xlcyB2ZXJzaW9ucyBkZSBkbnNtYXNxIGluZsOpcmlldXJlcyDDoCAyLjQzIHF1aSBjb25zaXN0ZSDDoCBuJ2FsbG91ZXIgcXUndW4gc2V1bCBwb3J0CithbGxvdcOpIHBhciBsZSBzeXN0w6htZSBkJ2V4cGxvaXRhdGlvbi4KKy5UUAorLkIgLS1taW4tcG9ydD08cG9ydD4KK05lIHBhcyB1dGlsaXNlciBkZSBwb3J0IGRvbnQgbGUgbnVtw6lybyBlc3QgaW5mw6lyaWV1ciDDoCBsYSB2YWxldXIgZG9ubsOpZSBlbiBwYXJhbcOodHJlCitwb3VyIGxlcyByZXF1w6p0ZXMgRE5TIHNvcnRhbnRlcy4gRG5zbWFzcSBjaG9pc2lzIHVuIHBvcnQgc291cmNlIGFsw6lhdG9pcmUgcG91ciBsZXMKK3JlcXXDqnRlcyBzb3J0YW50ZXMgOiBsb3JzcXVlIGNldHRlIG9wdGlvbiBlc3QgZm91cm5pZSwgbGVzIHBvcnRzIHV0aWxpc8OpcyBzZXJvbnQgdG91am91cnMKK2F1IGRlc3N1cyBkZSBsYSB2YWxldXIgc3DDqWNpZmnDqWUuIFV0aWxlIHBvdXIgZGVzIHN5c3TDqG1lcyBkZXJyacOocmUgZGVzIGRpc3Bvc2l0aWZzCitnYXJkZS1iYXJyacOocmVzICgiZmlyZXdhbGxzIikuCisuVFAKKy5CIFwtaSwgLS1pbnRlcmZhY2U9PG5vbSBkJ2ludGVyZmFjZT4KK04nw6ljb3V0ZXIgcXVlIHN1ciBsJ2ludGVyZmFjZSByw6lzZWF1IHNww6ljaWZpw6llLiBEbnNtYXNxIGF1am91dGUgYXV0b21hdGlxdWVtZW50CitsJ2ludGVyZmFjZSBsb2NhbGUgKCJsb29wYmFjayIpIMOgIGxhIGxpc3RlIGRlcyBpbnRlcmZhY2VzIGxvcnNxdWUgbCdvcHRpb24KKy5CIC0taW50ZXJmYWNlCitlc3QgdXRpbGlzw6llLgorU2kgYXVjdW5lIG9wdGlvbgorLkIgLS1pbnRlcmZhY2UKK291CisuQiAtLWxpc3Rlbi1hZGRyZXNzCituJ2VzdCBkb25uw6llLCBEbnNtYXNxIMOpY291dGVyYSBzdXIgdG91dGVzIGxlcyBpbnRlcmZhY2VzIGRpc3BvbmlibGVzIHNhdWYKK2NlbGxlKHMpIHNww6ljaWZpw6llKHMpIHBhciBsJ29wdGlvbgorLkIgLS1leGNlcHQtaW50ZXJmYWNlLgorTGVzIGFsaWFzIGQnaW50ZXJmYWNlcyBJUCAoZS1nICJldGgxOjAiKSBuZSBwZXV2ZW50IMOqdHJlIHV0aWxpc8OpcyBuaSBhdmVjCisuQiAtLWludGVyZmFjZQorbmkKKy5CIFwtLWV4Y2VwdC1pbnRlcmZhY2UuCitVdGlsaXNlciBsJ29wdGlvbiAKKy5CIC0tbGlzdGVuLWFkZHJlc3MKK8OgIGxhIHBsYWNlLiBVbiBzaW1wbGUgam9rZXIsIGNvbnNpc3RhbnQgZCd1biAnKicgZmluYWwsIHBldXQtw6p0cmUgdXRpbGlzw6kgZGFucworbGVzIG9wdGlvbnMKKy5CIFwtLWludGVyZmFjZSAKK2V0CisuQiBcLS1leGNlcHQtaW50ZXJmYWNlCisuVFAKKy5CIFwtSSwgLS1leGNlcHQtaW50ZXJmYWNlPTxpbnRlcmZhY2UgbmFtZT4KK05lIHBhcyDDqWNvdXRlciBzdXIgbCdpbnRlcmZhY2Ugc3DDqWNpZmnDqWUuIE5vdGV6IHF1ZSBsJ29yZHJlIGRhbnMgbGVzcXVlbGxlcyBsZXMKK29wdGlvbnMKKy5CIFwtLWxpc3Rlbi1hZGRyZXNzCissCisuQiAtLWludGVyZmFjZQorZXQKKy5CIC0tZXhjZXB0LWludGVyZmFjZQorc29udCBmb3VybmllcyBuJ2ltcG9ydGUgcGFzLCBldCBxdWUgbCdvcHRpb24gCisuQiAtLWV4Y2VwdC1pbnRlcmZhY2UKK2wnZW1wb3J0ZSB0b3Vqb3VycyBzdXIgbGVzIGF1dHJlcy4KKy5UUAorLkIgLS1hdXRoLXNlcnZlcj08ZG9tYWluZT4sPGludGVyZmFjZT58PGFkZHJlc3NlIElQPgorQWN0aXZlIGxlIG1vZGUgRE5TIGZhaXNhbnQgYXV0b3JpdMOpIHBvdXIgbGVzIHJlcXXDqnRlcyBhcnJpdmFudCBzdXIgY2V0dGUKK2ludGVyZmFjZSBvdSBzdXIgY2V0dGUgYWRyZXNzZS4gTm90ZXIgcXVlIGwnaW50ZXJmYWNlIG91IGwnYWRyZXNzZSBuJ29udAorcGFzIGJlc29pbiBkJ8OqdHJlIG1lbnRpb27DqWVzIG5pIGRhbnMKKy5CIC0taW50ZXJmYWNlCituaSBkYW5zCisuQiAtLWxpc3Rlbi1hZGRyZXNzCitFbiBlZmZldCwKKy5CIC0tYXV0aC1zZXJ2ZXIKK3ZhIHBhc3NlciBvdXRyZSBjZXV4LWNpIGV0IGZvdXJuaXIgdW4gc2VydmljZSBETlMgZGlmZsOpcmVudCBzdXIgbCdpbnRlcmZhY2UKK3Nww6ljaWZpw6llLiBMYSB2YWxldXIgZGUgPGRvbWFpbmU+IGVzdCBsJ2VucmVnaXN0cmVtZW50IGRlIHR5cGUgImNvbGxlIgorKCJnbHVlIHJlY29yZCIpLiBJbCBkb2l0IGNvcnJlc3BvbmRyZSBkYW5zIGxlIHNlcnZpY2UgRE5TIGdsb2JhbCBhdmVjIHVuCitlbnJlZ2lzdHJlbWVudCBkZSB0eXBlIEEgZXQvb3UgQUFBQSBwb2ludGFudCBzdXIgbCdhZHJlc3NlIHN1ciBsYXF1ZWxsZSBkbnNtYXNxCivDqWNvdXRlIHBvdXIgbGUgbW9kZSBETlMgZmFpc2FudCBhdXRvcml0w6kuCisuVFAgCisuQiBcLTIsIC0tbm8tZGhjcC1pbnRlcmZhY2U9PG5vbSBkJ2ludGVyZmFjZT4KK05lIHBhcyBmb3VybmlyIGRlIHNlcnZpY2UgREhDUCBzdXIgbCdpbnRlcmZhY2Ugc3DDqWNpZmnDqWUsIG1haXMgZm91cm5pciB0b3V0IGRlCittw6ptZSBsZSBzZXJ2aWNlIEROUy4KKy5UUAorLkIgXC1hLCAtLWxpc3Rlbi1hZGRyZXNzPTxhZHJlc3NlIElQPgorRWNvdXRlciBzdXIgbGEgb3UgbGVzIGFkcmVzc2UocykgSVAgc3DDqWNpZmnDqWUocykuIExlcyBvcHRpb25zIAorLkIgXC0taW50ZXJmYWNlCitldAorLkIgXC0tbGlzdGVuLWFkZHJlc3MKK3BldXZlbnQtw6p0cmUgc3DDqWNpZmnDqWVzIHNpbXVsdGFuw6ltZW50LCBhdXF1ZWwgY2FzIHVuIGpldSBkJ2ludGVyZmFjZXMgZXQKK2QnYWRyZXNzZXMgc2Vyb250IHV0aWxpc8OpZXMuIE5vdGV6IHF1ZSBzaQorYXVjdW5lIG9wdGlvbgorLkIgXC0taW50ZXJmYWNlCituJ2VzdCBkb25uw6llIGFsb3JzIHF1J3VuZSBvcHRpb24gCisuQiBcLS1saXN0ZW4tYWRkcmVzcworbCdlc3QsIERuc21hc3EgbifDqWNvdXRlcmEgcGFzIGF1dG9tYXRpcXVlbWVudCBzdXIgbCdpbnRlcmZhY2UgbG9jYWxlCisoImxvb3BiYWNrIikuIFBvdXIgYWN0aXZlciBsJ8OpY291dGUgc3VyIGwnaW50ZXJmYWNlIGxvY2FsZSwgaWwgZXN0IGFsb3JzCituw6ljZXNzYWlyZSBkZSBmb3VybmlyIGV4cGxpY2l0ZW1lbnQgc29uIGFkcmVzc2UgSVAsIDEyNy4wLjAuMSB2aWEgbCdvcHRpb24KKy5CIFwtLWxpc3Rlbi1hZGRyZXNzLgorLlRQCisuQiBcLXosIC0tYmluZC1pbnRlcmZhY2VzCitTdXIgbGVzIHN5c3TDqG1lcyBxdWkgbGUgc3VwcG9ydGUsIERuc21hc3Egcydhc3NvY2llIGF2ZWMgbCdpbnRlcmZhY2Ugam9rZXIKKygid2lsZGNhcmQiKSwgbcOqbWUgbG9yc3F1J2lsIG5lIGRvaXQgw6ljb3V0ZXIgcXVlIHN1ciBjZXJ0YWluZXMgaW50ZXJmYWNlcy4gUGFyCitsYSBzdWl0ZSwgaWwgcmVqZXR0ZSBsZXMgcmVxdcOqdGVzIGF1eHF1ZWxsZXMgaWwgbmUgZG9pdCBwYXMgcsOpcG9uZHJlLiBDZXR0ZQorc2l0dWF0aW9uIHByw6lzZW50ZSBsJ2F2YW50YWdlIGRlIGZvbmN0aW9ubmVyIG3Dqm1lIGxvcnNxdWUgbGVzIGludGVyZmFjZXMgdm9udAorZXQgdmllbm5lbnQgb3UgY2hhbmdlbnQgZCdhZHJlc3Nlcy4gTCdvcHRpb24gCisuQiAtLWJpbmQtaW50ZXJmYWNlcworZm9yY2UgRG5zbWFzcSDDoCBuZSByw6llbGxlbWVudCBzJ2Fzc29jaWVyIHF1J2F2ZWMgbGVzIGludGVyZmFjZXMgc3VyIGxlc3F1ZWxsZXMKK2lsIGRvaXQgw6ljb3V0ZXIuIEwndW4gZGVzIHNldWxzIGNhcyBvw7kgY2V0dGUgb3B0aW9uIGVzdCB1dGlsZSBlc3QgY2VsdWkgb8O5IHVuCithdXRyZSBzZXJ2ZXVyIGRlIG5vbSAob3UgdW5lIGF1dHJlIGluc3RhbmNlIGRlIERuc21hc3EpIHRvdXJuZSBzdXIgbGEgbcOqbWUKK21hY2hpbmUuIFV0aWxpc2VyIGNldHRlIG9wdGlvbiBwZXJtZXQgw6lnYWxlbWVudCBkJ2F2b2lyIHBsdXNpZXVycyBpbnN0YW5jZXMgZGUKK0Ruc21hc3EgZm91cm5pc3NhbnQgdW4gc2VydmljZSBESENQIHN1ciBsYSBtw6ptZSBtYWNoaW5lLgorLlRQCisuQiAtLWJpbmQtZHluYW1pYworQXV0b3Jpc2UgdW4gbW9kZSByw6lzZWF1IGludGVybcOpZGlhaXJlIGVudHJlCisuQiAtLWJpbmQtaW50ZXJmYWNlcworZXQgbGUgbW9kZSBwYXIgZMOpZmF1dC4gRG5zbWFzcSBzJ2Fzc29jaWUgw6AgdW5lIHNldWxlIGludGVyZmFjZSwgY2UgcXVpIHBlcm1ldAorcGx1c2lldXJzIGluc3RhbmNlcyBkZSBkbnNtYXNxLCBtYWlzIHNpIHVuZSBpbnRlcmZhY2Ugb3UgYWRyZXNzZSBhcHBhcmFpc3NlbnQsCitpbCBzZSBtZXR0cmEgYXV0b21hdGlxdWVtZW50IMOgIMOpY291dGVyIHN1ciBjZWxsZXMtY2kgKGxlcyByw6hnbGVzIGRlIGNvbnRyw7RsZQorZCdhY2PDqHMgcydhcHBsaXF1ZW50KS4KK0RlIGZhaXQsIGxlcyBpbnRlcmZhY2VzIGNyw6nDqWVzIGR5bmFtaXF1ZW1lbnQgZm9uY3Rpb25uZW50IGRlIGxhIG3Dqm1lIGZhw6dvbiBxdWUKK2RhbnMgbGUgY29tcG9ydGVtZW50IHBhciBkw6lmYXV0LiBDZSBmb25jdGlvbm5lbWVudCBuw6ljZXNzaXRlIGRlcyBBUElzIHLDqXNlYXUKK25vbiBzdGFuZGFyZCBldCBuJ2VzdCBkaXNwb25pYmxlIHF1ZSBzb3VzIExpbnV4LiBTdXIgbGVzIGF1dHJlcyBwbGF0ZWZvcm1lcywKK2xlIGZvbmN0aW9ubmVtZW50IGVzdCBjZWx1aSBkdSBtb2RlIC0tYmluZC1pbnRlcmZhY2VzLgorLlRQCisuQiBcLXksIC0tbG9jYWxpc2UtcXVlcmllcworUmV0b3VybmUgZGVzIHLDqXBvbnNlcyBhdXggcmVxdcOqdGVzIEROUyBkw6lwZW5kYW50ZXMgZGUgbCdpbnRlcmZhY2Ugc3VyIGxhcXVlbGxlCitsYSByZXF1w6p0ZSBhIMOpdMOpIHJlw6d1ZSwgw6AgcGFydGlyIGR1IGZpY2hpZXIgL2V0Yy9ob3N0cy4gU2kgdW4gbm9tIGRhbnMKKy9ldGMvaG9zdHMgYSBwbHVzIGQndW5lIGFkcmVzc2UgYXNzb2Npw6llIGF2ZWMgbHVpLCBldCBxdSd1bmUgZGVzIGFkcmVzc2VzIGF1Cittb2lucyBlc3QgZGFucyBsZSBtw6ptZSBzb3VzLXLDqXNlYXUgcXVlIGwnaW50ZXJmYWNlIHN1ciBsYXF1ZWxsZSBsYSByZXF1w6p0ZSBhIMOpdMOpCityZcOndWUsIGFsb3JzIG5lIHJldG91cm5lIHF1ZSBsYShsZXMpIGFkcmVzc2UocykgZHUgc291cy1yw6lzZWF1IGNvbnNpZMOpcsOpLiBDZWxhCitwZXJtZXQgZCdhdm9pciBkYW5zIC9ldGMvaG9zdHMgdW4gc2VydmV1ciBhdmVjIGRlIG11bHRpcGxlcyBhZHJlc3NlcywgdW5lIHBvdXIKK2NoYWN1bmUgZGUgc2VzIGludGVyZmFjZXMsIGV0IGRlIGZvdXJuaXIgYXV4IGjDtHRlcyBsJ2FkcmVzc2UgY29ycmVjdGUgKGJhc8OpZSBzdXIKK2xlIHLDqXNlYXUgYXVxdWVsIGlscyBzb250IGF0dGFjaMOpcykuIENldHRlIHBvc3NpYmlsaXTDqSBlc3QgYWN0dWVsbGVtZW50IGxpbWl0w6llCivDoCBJUHY0LgorLlRQCisuQiBcLWIsIC0tYm9ndXMtcHJpdgorRmF1c3NlIHLDqXNvbHV0aW9uIGludmVyc2UgcG91ciBsZXMgcsOpc2VhdXggcHJpdsOpcy4gVG91dGVzIGxlcyByZXF1w6p0ZXMgRE5TCitpbnZlcnNlcyBwb3VyIGRlcyBhZHJlc3NlcyBJUCBwcml2w6llcyAoaWUgMTkyLjE2OC54LngsIGV0Yy4uLikgcXVpIG5lIHNvbnQgcGFzCit0cm91dsOpZXMgZGFucyAvZXRjL2hvc3RzIG91IGRhbnMgbGUgZmljaGllciBkZSBiYXV4IERIQ1Agc2Ugdm9pZW50IHJldG91cm7DqWVzCit1bmUgcsOpcG9uc2UgInBhcyBkZSB0ZWwgZG9tYWluZSIgKCJubyBzdWNoIGRvbWFpbiIpIGF1IGxpZXUgZCfDqnRyZSB0cmFuc21pc2VzCithdXggc2VydmV1cnMgZGUgbm9tIGFtb250ICgidXBzdHJlYW0gc2VydmVyIikuCisuVFAKKy5CIFwtViwgLS1hbGlhcz1bPGFuY2llbm5lIElQPl18WzxJUCBkZSBkw6lidXQ+LTxJUCBkZSBmaW4+XSw8bm91dmVsbGUgSVA+Wyw8bWFzcXVlPl0KK01vZGlmaWUgbGVzIGFkcmVzc2VzIElQdjQgcmV0b3VybsOpZXMgcGFyIGxlcyBzZXJ2ZXVycyBkZSBub20gYW1vbnQ7Cis8YW5jaWVubmUgSVA+IGVzdCByZW1wbGFjw6llIHBhciA8bm91dmVsbGUgSVA+LiBTaSBsZSA8bWFzcXVlPiBvcHRpb25uZWwgZXN0Citmb3VybmksIGFsb3JzIHRvdXRlIGFkcmVzc2UgY29ycmVzcG9uZGFudCDDoCBsJ2FkcmVzc2UgPGFuY2llbm5lIElQPi88bWFzcXVlPgorc2VyYSByw6nDqWNyaXRlLiBBaW5zaSBwYXIgZXhlbXBsZQorLkIgLS1hbGlhcz0xLjIuMy4wLDYuNy44LjAsMjU1LjI1NS4yNTUuMCAKK21vZGlmaWVyYSAxLjIuMy41NiBlbiA2LjcuOC41NiBldCAxLjIuMy42NyBlbiA2LjcuOC42Ny4gCitDZXR0ZSBmb25jdGlvbm5hbGl0w6kgY29ycmVzcG9uZCDDoCBjZSBxdWUgbGVzIHJvdXRldXJzIENpc2NvIFBJWCBhcHBlbGxlbnQKKyJiaWRvdWlsbGFnZSBETlMiICgiRE5TIGRvY3RvcmluZyIpLiBTaSBsJ2FuY2llbm5lIElQIGVzdCBkb25uw6llIHNvdXMgbGEgZm9ybWUKK2QndW5lIGdhbW1lIGQnYWRyZXNzZXMsIGFsb3JzIHNldWxlcyBsZXMgYWRyZXNzZXMgZGFucyBjZXR0ZSBnYW1tZSBzZXJvbnQKK3LDqWVjcml0ZXMsIGV0IG5vbiBsZSBzb3VzLXLDqXNlYXUgZGFucyBzb24gZW5zZW1ibGUuIEFpbnNpLAorLkIgLS1hbGlhcz0xOTIuMTY4LjAuMTAtMTkyLjE2OC4wLjQwLDEwLjAuMC4wLDI1NS4yNTUuMjU1LjAKK2ZhaXQgY29ycmVzcG9uZHJlIDE5Mi4xNjguMC4xMC0+MTkyLjE2OC4wLjQwIMOgIDEwLjAuMC4xMC0+MTAuMC4wLjQwCisuVFAgCisuQiBcLUIsIC0tYm9ndXMtbnhkb21haW49PGFkcmVzc2UgSVA+CitUcmFuc2Zvcm1lIGxlcyByw6lwb25zZXMgY29udGVuYW50IGwnYWRyZXNzZSBJUCBmb3VybmllIGVuIHLDqXBvbnNlcyAicGFzIGRlIHRlbAorZG9tYWluZSIgKCJubyBzdWNoIGRvbWFpbiIpLiBDZWNpIGEgcG91ciBidXQgZGUgbmV1dHJhbGlzZXIgbGEgbW9kaWZpY2F0aW9uCitzb3Vybm9pc2UgbWlzZSBlbiBwbGFjZSBwYXIgVmVyaXNpZ24gZW4gc2VwdGVtYnJlIDIwMDMsIGxvcnNxdSdpbHMgb250IGNvbW1lbmPDqQorw6AgcmV0b3VybmVyIGwnYWRyZXNzZSBkJ3VuIHNlcnZldXIgd2ViIHB1YmxpY2l0YWlyZSBlbiByw6lwb25zZSBhdXggcmVxdcOqdGVzIHBvdXIKK2xlcyBub21zIGRlIGRvbWFpbmVzIG5vbiBlbnJlZ2lzdHLDqXMsIGF1IGxpZXUgZGUgbGEgcsOpcG9uc2UgY29ycmVjdGUgIk5YRE9NQUlOIi4KK0NldHRlIG9wdGlvbiBkZW1hbmRlIMOgIERuc21hc3EgZGUgcmV0b3VybmVyIGxhIHLDqXBvbnNlIGNvcnJlY3RlIGxvcnNxdSdpbAorY29uc3RhdGUgY2UgY29tcG9ydGVtZW50LiBMJ2FkcmVzc2UgcmV0b3VybsOpZSBwYXIgVmVyaXNpZ24gZW4gc2VwdGVtYnJlIDIwMDMKK2VzdCA2NC45NC4xMTAuMTEuCisuVFAKKy5CIFwtZiwgLS1maWx0ZXJ3aW4yaworTGVzIGRlcm5pw6hyZXMgdmVyc2lvbnMgZGUgd2luZG93cyBmb250IGRlcyByZXF1w6p0ZXMgRE5TIHDDqXJpb2RpcXVlcyBhdXhxdWVsbGVzCitub24gc2V1bGVtZW50IGxlcyBzZXJ2ZXVycyBETlMgcHVibGljcyBuZSBwZXV2ZW50IGRvbm5lciBkZSByw6lwb25zZSwgbWFpcyBxdWksCitkZSBzdXJjcm/DrnQsIHBldXZlbnQgcG9zZXIgZGVzIHByb2Jsw6htZXMgZW4gZMOpY2xlbmNoYW50IGRlcyBjb25uZXhpb25zCitpbnRlbXBlc3RpdmVzIHBvdXIgZGVzIGxpZW5zIHLDqXNlYXV4IGF2ZWMgZGVzIGNvbm5leGlvbnMgIsOgIGxhIGRlbWFuZGUiLiBGb3VybmlyCitjZXR0ZSBvcHRpb24gYWN0aXZlIGxlIGZpbHRyYWdlIGRlcyByZXF1w6p0ZXMgZGUgY2UgdHlwZS4gTGVzIHJlcXXDqnRlcyBibG9xdcOpZXMKK3NvbnQgbGVzIHJlcXXDqnRlcyBwb3VyIGxlcyBlbnRyw6llcyBkZSB0eXBlIFNPQSBvdSBTUlYsIGFpbnNpIHF1ZSBsZXMgcmVxdcOqdGVzIGRlCit0eXBlIEFOWSBhdmVjIGRlcyBub21zIHBvc3PDqWRhbnQgZGVzIGNhcmFjdMOocmVzIHNvdXMtbGlnbsOpcyAocmVxdcOqdGVzIHBvdXIgZGVzCitzZXJ2ZXVycyBMREFQKS4KKy5UUAorLkIgXC1yLCAtLXJlc29sdi1maWxlPTxmaWNoaWVyPgorTGlzIGxlcyBhZHJlc3NlcyBkZXMgc2VydmV1cnMgZGUgbm9tIGFtb250IGRhbnMgbGUgZmljaGllciBkZSBub20gPGZpY2hpZXI+LAorYXUgbGlldSBkdSBmaWNoaWVyIC9ldGMvcmVzb2x2LmNvbmYuIFBvdXIgbGUgZm9ybWF0IGRlIGNlIGZpY2hpZXIsIHZvaXIgZGFucyBsZQorbWFudWVsIHBvdXIKKy5CUiByZXNvbHYuY29uZiAoNSkgCitsZXMgZW50csOpZXMgY29ycmVzcG9uZGFudCBhdXggc2VydmV1cnMgZGUgbm9tcyAobmFtZXNlcnZlcikuIERuc21hc3EgcGV1dCBsaXJlCitwbHVzaWV1cnMgZmljaGllcnMgZGUgdHlwZSByZXNvbHYuY29uZiwgbGUgcHJlbWllciBmaWNoaWVyIHNww6ljaWZpw6kgcmVtcGxhY2UgbGUKK2ZpY2hpZXIgcGFyIGTDqWZhdXQsIGxlIGNvbnRlbnUgZGVzIHN1aXZhbnRzIGVzdCByYWpvdXTDqSBkYW5zIGxhIGxpc3RlIGRlcworZmljaGllcnMgw6AgY29uc3VsdGVyLiBTZXVsIGxlIGZpY2hpZXIgYXlhbnQgbGEgZGVybmnDqHJlIGRhdGUgZGUgbW9kaWZpY2F0aW9uCitzZXJhIGNoYXJnw6kgZW4gbcOpbW9pcmUuCisuVFAKKy5CIFwtUiwgLS1uby1yZXNvbHYKK05lIHBhcyBsaXJlIGxlIGNvbnRlbnUgZHUgZmljaGllciAvZXRjL3Jlc29sdi5jb25mLiBOJ29idGVuaXIgbCdhZHJlc3NlIGRlcworc2VydmV1cnMgZGUgbm9tIGFtb250IHF1ZSBkZXB1aXMgbGEgbGlnbmUgZGUgY29tbWFuZGUgb3UgbGUgZmljaGllciBkZQorY29uZmlndXJhdGlvbiBkZSBEbnNtYXNxLgorLlRQCisuQiBcLTEsIC0tZW5hYmxlLWRidXNbPTxub20gZGUgc2VydmljZT5dCitBdXRvcmlzZXIgbGEgbWlzZSDDoCBqb3VyIGRlIGxhIGNvbmZpZ3VyYXRpb24gZGUgRG5zbWFzcSBwYXIgbGUgYmlhaXMgZCdhcHBlbCBkZQorbcOpdGhvZGVzIERCdXMuIElsIGVzdCBwb3NzaWJsZSBwYXIgY2UgYmlhaXMgZGUgbWV0dHJlIMOgIGpvdXIgbCdhZHJlc3NlIGRlCitzZXJ2ZXVycyBETlMgYW1vbnQgKGV0IGxlcyBkb21haW5lcyBjb3JyZXNwb25kYW50cykgZXQgZGUgdmlkZXIgbGUgY2FjaGUuIENldHRlCitvcHRpb24gbsOpY2Vzc2l0ZSBxdWUgRG5zbWFzcSBzb2l0IGNvbXBpbMOpIGF2ZWMgbGUgc3VwcG9ydCBEQnVzLiBTaSB1biBub20gZGUKK3NlcnZpY2UgZXN0IGZvdXJuaSwgZG5zbWFzcSBmb3VybmkgdW4gc2VydmljZSDDoCBjZSBub20sIHBsdXTDtHQgcXUnYXZlYyBsYQordmFsZXVyIHBhciBkw6lmYXV0IDoKKy5CIHVrLm9yZy50aGVrZWxsZXlzLmRuc21hc3EKKy5UUCAKKy5CIFwtbywgLS1zdHJpY3Qtb3JkZXIKK1BhciBkw6lmYXV0LCBEbnNtYXNxIGVudm9pZSBsZXMgcmVxdcOqdGVzIMOgIG4naW1wb3J0ZSBsZXF1ZWwgZGVzIHNlcnZldXJzIGFtb250cworZG9udCBpbCBhIGNvbm5haXNzYW5jZSB0b3V0IGVuIGVzc2F5YW50IGRlIGZhdm9yaXNlciBsZXMgc2VydmV1cnMgcXUnaWwgc2FpdAorZm9uY3Rpb25uZXIuIENldHRlIG9wdGlvbiBmb3JjZSBEbnNtYXNxIMOgIGVzc2F5ZXIgZCdpbnRlcnJvZ2VyLCBwb3VyIGNoYXF1ZQorcmVxdcOqdGUsIGxlcyBzZXJ2ZXVycyBETlMgZGFucyBsZXVyIG9yZHJlIGQnYXBwYXJpdGlvbiBkYW5zIGxlIGZpY2hpZXIKKy9ldGMvcmVzb2x2LmNvbmYuCisuVFAKKy5CIC0tYWxsLXNlcnZlcnMKK1BhciBkw6lmYXV0LCBsb3JzcXVlIGRuc21hc3EgYSBwbHVzIGQndW4gc2VydmV1ciBhbW9udCBkaXNwb25pYmxlLCBpbCBuJ2Vudm9pZQorbGVzIHJlcXXDqnRlcyBxdSfDoCB1biBzZXVsIHNlcnZldXIuIFNww6ljaWZpZXIgY2V0dGUgb3B0aW9uIGZvcmNlIGRuc21hc3Egw6AKK2VmZmVjdHVlciBzZXMgcmVxdcOqdGVzIMOgIHRvdXMgbGVzIHNlcnZldXJzIGRpc3BvbmlibGVzLiBMZSByw6lzdWx0YXQgcmVudm95w6kKK2F1IGNsaWVudCBzZXJhIGNlbHVpIGZvdXJuaXQgcGFyIGxlIHByZW1pZXIgc2VydmV1ciBheWFudCByw6lwb25kdS4KKy5UUAorLkIgLS1zdG9wLWRucy1yZWJpbmQKK1JlamV0ZSAoZXQgZW5yZWdpc3RyZSBkYW5zIGxlIGpvdXJuYWwgZCdhY3Rpdml0w6kpIGxlcyBhZHJlc3NlcyBkYW5zIGxhIGdhbW1lCitkJ2FkcmVzc2VzIElQIHByaXbDqWUgKGF1IHNlbnMgUkZDMTkxOCkgcXVpIHBvdXJyYWllbnQgw6p0cmUgcmVudm95w6llcyBwYXIgbGVzCitzZXJ2ZXVycyBhbW9udHMgc3VpdGUgw6AgdW5lIHLDqXNvbHV0aW9uIGRlIG5vbS4gQ2VsYSBibG9xdWUgbGVzIGF0dGFxdWVzIGNoZXJjaGFudAorw6AgZMOpdG91cm5lciBkZSBsZXVyIHVzYWdlIGxlcyBsb2dpY2llbHMgZGUgbmF2aWdhdGlvbiB3ZWIgKCdicm93c2VyJykgZW4gcydlbgorc2VydmFudCBwb3VyIGTDqWNvdXZyaXIgbGVzIG1hY2hpbmVzIHNpdHXDqWVzIHN1ciBsZSByw6lzZWF1IGxvY2FsLgorLlRQCisuQiAtLXJlYmluZC1sb2NhbGhvc3Qtb2sKK0V4Y2x1ZSAxMjcuMC4wLzggZGVzIHbDqXJpZmljYXRpb25zIGRlIHLDqWFzc29jaWF0aW9uIEROUy4gQ2V0dGUgZ2FtbWUgZCdhZHJlc3NlcworZXN0IHJldG91cm7DqWUgcGFyIGxlcyBzZXJ2ZXVycyBSZWFsdGltZSBCbGFja2hvbGUgKFJCTCwgdXRpbGlzw6lzIGRhbnMgbGEKK2x1dHRlIGNvbnRyZSBsZSBzcGFtKSwgbGEgYmxvcXVlciBwZXV0IGVudHJhw65uZXIgZGVzIGRpc2ZvbmN0aW9ubmVtZW50cyBkZSBjZXMKK3NlcnZpY2VzLgorLlRQIAorLkIgIC0tcmViaW5kLWRvbWFpbi1vaz1bPGRvbWFpbmU+XXxbWy88ZG9tYWluZT4vWzxkb21haW5lPi9dCitOZSBwYXMgZMOpdGVjdGVyIG5pIGJsb3F1ZXIgbGVzIGFjdGlvbnMgZGUgdHlwZSBkbnMtcmViaW5kIHBvdXIgY2VzIGRvbWFpbmVzLgorQ2V0dGUgb3B0aW9uIHBldXQgcHJlbmRyZSBjb21tZSB2YWxldXIgc29pdCB1biBub20gZGUgZG9tYWluZSBzb2l0IHBsdXNpZXVycworbm9tcyBkZSBkb21haW5zIGVudG91csOpcyBwYXIgZGVzICcvJywgc2Vsb24gdW5lIHN5bnRheGUgc2ltaWxhaXJlIMOgIGwnb3B0aW9uCistLXNlcnZlciwgYy3DoC1kIDoKKy5CICAtLXJlYmluZC1kb21haW4tb2s9L2RvbWFpbmUxL2RvbWFpbmUyL2RvbWFpbmUzLworLlRQCisuQiBcLW4sIC0tbm8tcG9sbAorTmUgcGFzIHbDqXJpZmllciByw6lndWxpw6hyZW1lbnQgc2kgbGUgZmljaGllciAvZXRjL3Jlc29sdi5jb25mIGEgw6l0w6kgbW9kaWZpw6kuCisuVFAKKy5CIC0tY2xlYXItb24tcmVsb2FkCitMb3JzcXVlIGxlIGZpY2hpZXIgL2V0Yy9yZXNvbHYuY29uZiBlc3QgcmVsdSwgb3Ugc2kgbGVzIHNlcnZldXJzIGFtb250cyBzb250Citjb25maWd1csOpcyB2aWEgREJ1cywgdmlkZXIgbGUgY2FjaGUgRE5TLgorQ2VsYSBlc3QgdXRpbGUgc2kgbGVzIG5vdXZlYXV4IHNlcnZldXJzIHNvbnQgc3VzY2VwdGlibGVzIGQnYXZvaXIgZGVzIGRvbm7DqWVzCitkaWZmw6lyZW50ZXMgZGUgY2VsbGVzIHN0b2Nrw6llcyBkYW5zIGxlIGNhY2hlLgorLlRQCisuQiBcLUQsIC0tZG9tYWluLW5lZWRlZAorSW5kaXF1ZSDDoCBEbnNtYXNxIGRlIG5lIGphbWFpcyB0cmFuc21ldHRyZSBlbiBhbW9udCBkZSByZXF1w6p0ZXMgQSBvdSBBQUFBIHBvdXIKK2RlcyBub21zIHNpbXBsZXMsIGMnZXN0IMOgIGRpcmUgbmUgY29tcHJlbmFudCBuaSBwb2ludHMgbmkgbm9tIGRlIGRvbWFpbmUuIFNpIHVuCitub20gbidlc3QgcGFzIGRhbnMgL2V0Yy9ob3N0cyBvdSBkYW5zIGxhIGxpc3RlIGRlcyBiYXV4IERIQ1AsIGFsb3JzIHVuZSByw6lwb25zZQorZGUgdHlwZSAibm9uIHRyb3V2w6kiIGVzdCByZW52b3nDqWUuCisuVFAKKy5CIFwtUywgLS1sb2NhbCwgLS1zZXJ2ZXI9Wy9bPGRvbWFpbmU+XS9bZG9tYWluZS9dXVs8QWRyZXNzZSBJUD5bIzxwb3J0Pl1bQDxBZHJlc3NlIElQIHNvdXJjZT58PGludGVyZmFjZT5bIzxwb3J0Pl1dXQorU3DDqWNpZmllIGRpcmVjdGVtZW50IGwnYWRyZXNzZSBJUCBkJ3VuIHNlcnZldXIgZGUgbm9tIGFtb250LiBDZXR0ZSBvcHRpb24gbmUKK3N1cHByaW1lIHBhcyBsYSBsZWN0dXJlIGR1IGZpY2hpZXIgL2V0Yy9yZXNvbHYuY29uZiA6IHV0aWxpc2VyIHBvdXIgY2VsYQorbCdvcHRpb24KKy5CIC1SIC4KK1NpIHVuIG91IHBsdXNpZXVycyBub20ocykgZGUgZG9tYWluZShzKSBvcHRpb25uZWwocykgc29udCBmb3VybmlzLCBjZQorc2VydmV1ciBzZXJhIHVuaXF1ZW1lbnQgdXRpbGlzw6kgdW5pcXVlbWVudCBwb3VyIGNlKHMpIGRvbWFpbmUocyksIGV0IHRvdXRlCityZXF1w6p0ZSBjb25jZXJuYW50IGNlKHMpIGRvbWFpbmUocykgc2VyYSBhZHJlc3PDqWUgdW5pcXVlbWVudCDDoCBjZSBzZXJ2ZXVyLgorQ2V0dGUgb3B0aW9uIGVzdCBkZXN0aW7DqWUgYXV4IHNlcnZldXJzIGRlIG5vbSBwcml2w6lzIDogc2kgdm91cyBhdmV6IHVuIHNlcnZldXIKK2RlIG5vbSBzdXIgdm90cmUgcsOpc2VhdSBheWFudCBwb3VyIGFkcmVzc2UgSVAgMTkyLjE2OC4xLjEgZXQgZWZmZWN0dWFudCBsYQorcsOpc29sdXRpb24gZGVzIG5vbXMgZGUgbGEgZm9ybWUgeHh4LmludGVybmFsLnRoZWtlbGxleXMub3JnLnVrLCBhbG9ycworLkIgLVMgL2ludGVybmFsLnRoZWtlbGxleXMub3JnLnVrLzE5Mi4xNjguMS4xIAorZW52ZXJyYSB0b3V0ZXMgbGVzIHJlcXXDqnRlcyBwb3VyIGxlcyBtYWNoaW5lcyBpbnRlcm5lcyB2ZXJzIGNlIHNlcnZldXIgZGUgbm9tLAorYWxvcnMgcXVlIHRvdXRlcyBsZXMgYXV0cmVzIHJlcXXDqnRlcyBzZXJvbnQgYWRyZXNzw6llcyBhdXggc2VydmV1cnMgaW5kaXF1w6lzIGRhbnMKK2xlIGZpY2hpZXIgL2V0Yy9yZXNvbHYuY29uZi4gVW5lIHNww6ljaWZpY2F0aW9uIGRlIG5vbSBkZSBkb21haW5lIHZpZGUsCisuQiAvLyAKK3Bvc3PDqGRlIGxlIHNlbnMgcGFydGljdWxpZXIgZGUgInBvdXIgbGVzIG5vbXMgbm9uIHF1YWxpZmnDqXMgdW5pcXVlbWVudCIsCitjJ2VzdC3DoC1kaXJlIGxlcyBub21zIG5lIHBvc3PDqWRhbnQgcGFzIGRlIHBvaW50cy4gVW4gcG9ydCBub24gc3RhbmRhcmQgcGV1dCDDqnRyZQorcmFqb3V0w6kgw6AgbGEgc3VpdGUgZGVzIGFkcmVzc2VzIElQIGVuIHV0aWxpc2FudCBsZSBjYXJhY3TDqHJlICMuIFBsdXMgZCd1bmUKK29wdGlvbgorLkIgLVMKK2VzdCBhdXRvcmlzw6llLCBlbiByw6lww6l0YW50IGxlcyBkb21haW5lcyBldCBhZHJlc3NlcyBJUCBjb21tZSByZXF1aXMuCisKK0xlIGRvbWFpbmUgbGUgcGx1cyBzcMOpY2lmaXF1ZSBsJ2VtcG9ydGUgc3VyIGxlIGRvbWFpbmUgbGUgbW9pbnMgc3DDqWNpZmlxdWUsCithaW5zaSA6CisuQiAtLXNlcnZlcj0vZ29vZ2xlLmNvbS8xLjIuMy40CisuQiAtLXNlcnZlcj0vd3d3Lmdvb2dsZS5jb20vMi4zLjQuNQorZW52ZXJyYSBsZXMgcmVxdcOqdGVzIHBvdXIgKi5nb29nbGUuY29tIMOgIDEuMi4zLjQsIMOgIGwnZXhjZXB0aW9uIGRlcyByZXF1w6p0ZXMKKyp3d3cuZ29vZ2xlLmNvbSwgcXVpIHNlcm9udCBlbnZvecOpZXMgw6AgMi4zLjQuNS4KKworTCdhZHJlc3NlIHNww6ljaWFsZSAnIycgc2lnbmlmaWUgInV0aWxpc2VyIGxlcyBzZXJ2ZXVycyBzdGFuZGFyZHMiLCBhaW5zaQorLkIgLS1zZXJ2ZXI9L2dvb2dsZS5jb20vMS4yLjMuNAorLkIgLS1zZXJ2ZXI9L3d3dy5nb29nbGUuY29tLyMKK2VudmVycmEgbGVzIHJlcXXDqnRlcyBwb3VyICouZ29vZ2xlLmNvbSDDoCAxLjIuMy40LCDDoCBsJ2V4Y2VwdGlvbiBkZXMgcmVxdcOqdGVzCitwb3VyICp3d3cuZ29vZ2xlLmNvbSBxdWkgc2Vyb250IGVudm95w6llcyBjb21tZSBkJ2hhYml0dWRlIChjLcOgLWQgYXV4IHNlcnZldXJzCitkw6lmaW5pcyBwYXIgZMOpZmF1dCkuCisKK0lsIGVzdCDDqWdhbGVtZW50IHBlcm1pcyBkZSBkb25uZXIgdW5lIG9wdGlvbgorLkIgLVMKK2F2ZWMgdW4gbm9tIGRlIGRvbWFpbmUgbWFpcyBzYW5zCithZHJlc3NlIElQOyBDZWxhIGluZm9ybWUgRG5zbWFzcSBxdWUgbGUgZG9tYWluZSBlc3QgbG9jYWwgZXQgcXUnaWwgZG9pdCByw6lwb25kcmUKK2F1eCByZXF1w6p0ZXMgbGUgY29uY2VybmFudCBkZXB1aXMgbGVzIGVudHLDqWVzIGNvbnRlbnVlcyBkYW5zIGxlIGZpY2hpZXIKKy9ldGMvaG9zdHMgb3UgbGVzIGJhdXggREhDUCwgZXQgbmUgZG9pdCBlbiBhdWN1biBjYXMgdHJhbnNtZXR0cmUgbGVzIHJlcXXDqnRlcworYXV4IHNlcnZldXJzIGFtb250cy4KKy5CIGxvY2FsCitlc3Qgc3lub255bWUgZGUKKy5CIHNlcnZlcgorKCJzZXJ2ZXVyIikgYWZpbiBkZSByZW5kcmUgcGx1cyBjbGFpcmUgbCd1dGlsaXNhdGlvbiBkZSBjZXR0ZSBvcHRpb24gcG91ciBjZXQKK3VzYWdlIHBhcnRpY3VsaWVyLgorCitMZXMgYWRyZXNzZXMgSVB2NiBwZXV2ZW50IGluY2x1cmUgdW4gaWRlbnRpZmlhbnQgZGUgem9uZSBzb3VzIGxhIGZvcm1lCislaW50ZXJmYWNlIHRlbCBxdWUgcGFyIGV4ZW1wbGUKK2ZlODA6OjIwMjphNDEyOjQ1MTI6N2JiZiVldGgwLgorCitMYSBjaGHDrm5lIGRlIGNhcmFjdMOocmVzIG9wdGlvbm5lbGxlIHN1aXZhbnQgbGUgY2FyYWN0w6hyZSBAIHBlcm1ldCBkZSBkw6lmaW5pcgorbGEgc291cmNlIHF1ZSBEbnNtYXNxIGRvaXQgdXRpbGlzZXIgcG91ciBsZXMgcsOpcG9uc2VzIMOgIGNlCitzZXJ2ZXVyIGRlIG5vbS4gSWwgZG9pdCBzJ2FnaXIgZCd1bmUgZGVzIGFkcmVzc2VzIElQIGFwcGFydGVuYW50IMOgIGxhIG1hY2hpbmUgc3VyCitsYXF1ZWxsZSB0b3VybmUgRG5zbWFzcSBvdSBzaW5vbiBsYSBsaWduZSBzZXJhIGlnbm9yw6llIGV0IHVuZSBlcnJldXIgc2VyYQorY29uc2lnbsOpZSBkYW5zIGxlIGpvdXJuYWwgZGVzIMOpdsOpbmVtZW50cywgb3UgYWxvcnMgZCd1biBub20gZCdpbnRlcmZhY2UuIFNpIHVuIG5vbQorZCdpbnRlcmZhY2UgZXN0IGRvbm7DqSwgYWxvcnMgbGVzIHJlcXXDqnRlcyB2ZXJzIGxlIHNlcnZldXIgZGUgbm9tIHNlcm9udCBlbnZvecOpZXMKK2RlcHVpcyBjZXR0ZSBpbnRlcmZhY2U7IHNpIHVuZSBhZHJlc3NlIGlwIGVzdCBkb25uw6llLCBhbG9ycyBsJ2FkcmVzc2Ugc291cmNlIGRlCitsYSByZXF1w6p0ZSBzZXJhIGwnYWRyZXNzZSBlbiBxdWVzdGlvbi4gTCdvcHRpb24gcXVlcnktcG9ydCBlc3QgaWdub3LDqWUgcG91ciB0b3VzCitsZXMgc2VydmV1cnMgYXlhbnQgdW5lIGFkcmVzc2Ugc291cmNlIHNww6ljaWZpw6llLCBtYWlzIGlsIGVzdCBwb3NzaWJsZSBkZSBsYSBkb25uZXIKK2RpcmVjdGVtZW50IGRhbnMgbGEgc3DDqWNpZmljYXRpb24gZGUgbCdhZHJlc3NlIHNvdXJjZS4gRm9yY2VyIGxlcyByZXF1w6p0ZXMgw6Agw6p0cmUKK8OpbWlzZXMgZGVwdWlzIHVuZSBpbnRlcmZhY2Ugc3DDqWNpZmlxdWUgbidlc3QgcGFzIHBvc3NpYmxlIHN1ciB0b3V0ZXMgbGVzIHBsYXRlZm9ybWVzCitzdXBwb3J0w6llcyBwYXIgZG5zbWFzcS4KKy5UUAorLkIgXC1BLCAtLWFkZHJlc3M9Lzxkb21haW5lPi9bZG9tYWluZS9dPGFkcmVzc2UgSVA+CitTcMOpY2lmaWUgdW5lIGFkcmVzc2UgSVAgw6AgcmV0b3VybmVyIHBvdXIgdG91dGUgcmVxdcOqdGUgcG91ciBsZXMgZG9tYWluZXMgZm91cm5pcworZW4gb3B0aW9uLiBMZXMgcmVxdcOqdGVzIHBvdXIgY2UocykgZG9tYWluZShzKSBuZSBzb250IGphbWFpcyB0cmFuc21pc2VzIGF1eAorc2VydmV1cnMgYW1vbnRzIGV0IHJlw6dvaXZlbnQgY29tbWUgcsOpcG9uc2UgbCdhZHJlc3NlIElQIHNww6ljaWZpw6llIHF1aSBwZXV0IMOqdHJlCit1bmUgYWRyZXNzZSBJUHY0IG91IElQdjYuIFBvdXIgZG9ubmVyIMOgIGxhIGZvaXMgdW5lIGFkcmVzc2UgSVB2NCBldCB1bmUgYWRyZXNzZQorSVB2NiBwb3VyIHVuIGRvbWFpbmUsIHV0aWxpc2VyIHBsdXNpZXVycyBvcHRpb25zCisuQiAtQS4KK0lsIGZhdXQgbm90ZXIgcXVlIGxlCitjb250ZW51IGR1IGZpY2hpZXIgL2V0Yy9ob3N0cyBldCBkZSBjZWx1aSBkZXMgYmF1eCBESENQIHN1cHBsYW50ZSBjZWNpIHBvdXIgZGVzCitub21zIGluZGl2aWR1ZWxzLiBVbmUgdXRpbGlzYXRpb24gY291cmFudGUgZGUgY2V0dGUgb3B0aW9uIGVzdCBkZSByZWRpcmlnZXIgbGEKK3RvdGFsaXTDqSBkdSBkb21haW5lIGRvdWJsZWNsaWNrLm5ldCB2ZXJzIHVuIHNlcnZldXIgd2ViIGxvY2FsIGFmaW4gZCfDqXZpdGVyIGxlcworYmFubmnDqHJlcyBwdWJsaWNpdGFpcmVzLiBMYSBzcMOpY2lmaWNhdGlvbiBkZSBkb21haW5lIGZvbmN0aW9ubmUgZGUgbGEgbcOqbWUgZmHDp29uCitxdWUKKy5CICAtLXNlcnZlciwKK2F2ZWMgbGEgY2FyYWN0w6lyaXN0aXF1ZSBzdXBwbMOpbWVudGFpcmUgcXVlCisuQiAvIy8KK2Nvw69uY2lkZSBhdmVjIHRvdXQgZG9tYWluZS4gQWluc2ksCisuQiAtLWFkZHJlc3M9LyMvMS4yLjMuNAorcmV0b3VybmVyYSAxLjIuMy40IHBvdXIgdG91dGUgcmVxdcOqdGUKK24nYXlhbnQgZGUgcsOpcG9uc2UgbmkgZGFucyAvZXRjL2hvc3RzLCBuaSBkYW5zIGxlcyBiYXV4IERIQ1AsIGV0IG4nw6l0YW50IHBhcwordHJhbnNtaXNlIMOgIHVuIHNlcnZldXIgc3DDqWNpZmlxdWUgcGFyIGxlIGJpYWlzIGQndW5lIGRpcmVjdGl2ZQorLkIgLS1zZXJ2ZXIuCisuVFAKKy5CIC0taXBzZXQ9Lzxkb21haW5lPi9bZG9tYWluZS9dPGlwc2V0PlssPGlwc2V0Pl0KK09idGllbnQgbGVzIGFkcmVzc2VzIElQIGRlcyBkb21haW5lcyBzcMOpY2lmacOpcyBldCBsZXMgcGxhY2UgZGFucyBsZXMgZ3JvdXBlcworZCdJUCBuZXRmaWx0ZXIgKGlwc2V0KSBpbmRpcXXDqXMuIERvbWFpbmVzIGV0IHNvdXMtZG9tYWluZXMgc29udCByw6lzb2x1cyBkZSBsYQorbcOqbWUgZmHDp29uIHF1ZSBwb3VyIC0tYWRkcmVzcy4gQ2VzIGdyb3VwZXMgZCdJUCBkb2l2ZW50IGTDqWrDoCBleGlzdGVyLiBWb2lyCitpcHNldCg4KSBwb3VyIHBsdXMgZGUgZMOpdGFpbHMuCisuVFAKKy5CIFwtbSwgLS1teC1ob3N0PTxub20gZGUgbCdow7R0ZT5bWyw8bm9tIGR1IE1YPl0sPHByw6lmZXJlbmNlPl0KK1Nww6ljaWZpZSB1biBlbnJlZ2lzdHJlbWVudCBkZSB0eXBlIE1YIHBvdXIgPG5vbSBkZSBsJ2jDtHRlPiByZXRvdXJuYW50IGxlIG5vbQorZG9ubsOpIGRhbnMgPG5vbSBkdSBNWD4gKHMnaWwgZXN0IHByw6lzZW50KSwgb3Ugc2lub24gbGUgbm9tIHNww6ljaWZpw6kgZGFucworbCdvcHRpb24KKy5CIC0tbXgtdGFyZ2V0CitzaSBlbGxlIGVzdCBwcsOpc2VudGUuIFNpbm9uIHJldG91cm5lIGxlIG5vbSBkZSBsYSBtYWNoaW5lCitzdXIgbGFxdWVsbGUgRG5zbWFzcSB0b3VybmUuIExhIHZhbGV1ciBwYXIgZMOpZmF1dCAoc3DDqWNpZmnDqWUgZGFucyBsJ29wdGlvbgorLkIgLS1teC10YXJnZXQKKykgZXN0IHV0aWxlIGRhbnMgdW4gcsOpc2VhdSBsb2NhbCBwb3VyIHJlZGlyaWdlciBsZXMgY291cnJpZXJzCivDqWxlY3Ryb25pcXVlcyB2ZXJzIHVuIHNlcnZldXIgY2VudHJhbC4gTGEgdmFsZXVyIGRlIHByw6lmw6lyZW5jZSBlc3Qgb3B0aW9ubmVsbGUKK2V0IHZhdXQgcGFyIGTDqWZhdXQgMSBzaSBlbGxlIG4nZXN0IHBhcyBzcMOpY2lmacOpZS4gUGx1cyBkJ3VuZSBlbnRyw6llIE1YIHBldXQgw6p0cmUKK2ZvdXJuaWUgcG91ciB1biBow7R0ZSBkb25uw6kuCisuVFAgCisuQiBcLXQsIC0tbXgtdGFyZ2V0PTxub20gZCdow7R0ZT4KK1Nww6ljaWZpZSBsYSByw6lwb25zZSBwYXIgZMOpZmF1dCBmb3VybmllIHBhciBEbnNtYXNxIHBvdXIgbGVzIHJlcXXDqnRlcyBzdXIgZGVzCitlbnJlZ2lzdHJlbWVudHMgZGUgdHlwZSBNWC4gVm9pcgorLkIgLS1teC1ob3N0LgorU2kKKy5CIC0tbXgtdGFyZ2V0Citlc3QgZG9ubsOpIG1haXMgcGFzIGRlCisuQiAtLW14LWhvc3QsCithbG9ycyBEbnNtYXNxIHJldG91cm5lIGNvbW1lIHLDqXBvbnNlIHVuIGVucmVnaXN0cmVtZW50IE1YCitjb250ZW5hbnQgbGUgbm9tIGQnaMO0dGUgc3DDqWNpZmnDqSBkYW5zIGwnb3B0aW9uCisuQiAtLW14LXRhcmdldAorcG91ciB0b3V0ZSByZXF1w6p0ZQorY29uY2VybmFudCBsZSBNWCBkZSBsYSBtYWNoaW5lIHN1ciBsYXF1ZWxsZSB0b3VybmUgRG5zbWFzcS4KKy5UUAorLkIgXC1lLCAtLXNlbGZteAorRMOpZmluaXQsIHBvdXIgdG91dGVzIGxlcyBtYWNoaW5lcyBsb2NhbGVzLCB1biBNWCBjb3JyZXNwb25kYW50IMOgIGwnaMO0dGUKK2NvbnNpZMOpcsOpLiBMZXMgbWFjaGluZXMgbG9jYWxlcyBzb250IGNlbGxlcyBkw6lmaW5pZXMgZGFucyBsZSBmaWNoaWVyIC9ldGMvaG9zdHMKK291IGRhbnMgdW4gYmFpbCBESENQLgorLlRQIAorLkIgXC1MLCAtLWxvY2FsbXgKK0TDqWZpbml0LCBwb3VyIHRvdXRlcyBsZXMgbWFjaGluZXMgbG9jYWxlcywgdW4gZW5yZWdpc3RyZW1lbnQgTVggcG9pbnRhbnQgc3VyCitsJ2jDtHRlIHNww6ljaWZpw6kgcGFyIG14LXRhcmdldCAob3UgbGEgbWFjaGluZSBzdXIgbGFxdWVsbGUgRG5zbWFzcSB0b3VybmUpLiBMZXMKK21hY2hpbmVzIGxvY2FsZXMgc29udCBjZWxsZXMgZMOpZmluaWVzIGRhbnMgbGUgZmljaGllciAvZXRjL2hvc3RzIG91IGRhbnMgdW4gYmFpbAorREhDUC4KKy5UUAorLkIgXC1XIC0tc3J2LWhvc3Q9PF9zZXJ2aWNlPi48X3Byb3RvY29sZT4uWzxkb21haW5lPl0sWzxjaWJsZT5bLDxwb3J0PlssPHByaW9yaXTDqT5bLDxwb2lkcz5dXV1dCitTcMOpY2lmaWUgdW4gZW5yZWdpc3RyZW1lbnQgRE5TIGRlIHR5cGUgU1JWLiBWb2lyIGxhIFJGQzI3ODIgcG91ciBwbHVzIGRlCitkw6l0YWlscy4gU2kgbGUgY2hhbXBzIDxkb21haW5lPiBuJ2VzdCBwYXMgZm91cm5pLCBwcmVuZHMgcGFyIGTDqWZhdXQgbGEgdmFsZXVyCitmb3VybmllIGRhbnMgbCdvcHRpb24KKy5CIC0tZG9tYWluLgorTGEgdmFsZXVyIHBhciBkw6lmYXV0IHBvdXIgbGUgZG9tYWluZSBlc3QgdmlkZSBldCBsZSBwb3J0IHBhciBkw6lmYXV0IGVzdCAxLCBhbG9ycworcXVlIGxlcyBwb2lkcyBldCBwcmlvcml0w6lzIHBhciBkw6lmYXV0IHNvbnQgMC4gQXR0ZW50aW9uIGxvcnNxdWUgdm91cyB0cmFuc3Bvc2V6CitkZXMgdmFsZXVycyBpc3N1ZXMgZCd1bmUgY29uZmlndXJhdGlvbiBCSU5EIDogbGVzIHBvcnRzLCBwb2lkcyBldCBwcmlvcml0w6lzIHNvbnQKK2RhbnMgdW4gb3JkcmUgZGlmZsOpcmVudHMuIFBvdXIgdW4gc2VydmljZS9kb21haW5lIGRvbm7DqSwgcGx1cyBkJ3VuCitlbnJlZ2lzdHJlbWVudCBTUlYgZXN0IGF1dG9yaXPDqSBldCB0b3VzIGxlcyBlbnJlZ2lzdHJlbWVudHMgcXVpIGNvw69uY2lkZW50IHNvbnQKK3JldG91cm7DqXMgZGFucyBsYSByw6lwb25zZS4KKy5UUAorLkIgLS1ob3N0LXJlY29yZD08bm9tPlssPG5vbT4uLi4uXVs8YWRyZXNzZSBJUHY0Pl0sWzxhZHJlc3NlIElQdjY+XQorQWpvdXRlIGRlcyBlbnJlZ2lzdHJlbWVudHMgQSwgQUFBQSBldCBQVFIgZGFucyBsZSBETlMuIENlY2kgcGVybWV0IGQnYWpvdXRlcgordW4gb3UgcGx1c2lldXJzIG5vbXMgZGFucyBsZSBETlMgZXQgZGUgbGVzIGFzc29jaWVyIMOgIGRlcyBlbnJlZ2lzdHJlbWVudHMgSVB2NAorKEEpIG91IElQdjYgKEFBQUEpLiBVbiBub20gcGV1dCBhcHBhcmHDrnRyZSBkYW5zIHBsdXMgZCd1bmUgZW50csOpZQorLkIgaG9zdC1yZWNvcmQKK2V0IGRlIGZhaXQgw6p0cmUgYXNzb2Npw6kgw6AgcGx1cyBkJ3VuZSBhZHJlc3NlLiBTZXVsZSBsYSBwcmVtacOocmUgZW50csOpZSBjcsOpw6llCitsJ2VucmVnaXN0cmVtZW50IFBUUiBhc3NvY2nDqWUgYXUgbm9tLiBDZWNpIGNvcnJlc3BvbmQgw6AgbGEgbcOqbWUgcsOoZ2xlIHF1ZSBjZWxsZQordXRpbGlzw6llIGxvcnMgZGUgbGEgbGVjdHVyZSBkdSBmaWNoaWVyIGhvc3RzLgorTGVzIG9wdGlvbnMKKy5CIGhvc3QtcmVjb3JkCitzb250IGNvbnNpZMOpcsOpZXMgbHVlcyBhdmFudCBsZSBmaWNoaWVyIGhvc3RzLCBhaW5zaSB1biBub20gYXBwYXJhaXNzYW50IGRhbnMKK3VuZSBvcHRpb24gaG9zdC1yZWNvcmQgZXQgZGFucyBsZSBmaWNoaWVyIGhvc3RzIG4nYXVyYSBwYXMgZCdlbnJlZ2lzdHJlbWVudAorUFRSIGFzc29jacOpIMOgIGwnZW50csOpZSBkYW5zIGxlIGZpY2hpZXIgaG9zdHMuIEEgbCdpbnZlcnNlIGR1IGZpY2hpZXIgaG9zdHMsIGxlcworbm9tcyBuZSBzb250IHBhcyDDqXRlbmR1cywgbcOqbWUgbG9yc3F1ZSBsJ29wdGlvbgorLkIgZXhwYW5kLWhvc3RzCitlc3QgYWN0aXbDqWUuIExlcyBub21zIGxvbmdzIGV0IGxlcyBub21zIGNvdXJ0cyBwZXV2ZW50IGFwcGFyYWl0cmUgZGFucyBsYSBtw6ptZQorZW50csOpZSAKKy5CIGhvc3QtcmVjb3JkLAorYy3DoC1kCisuQiAtLWhvc3QtcmVjb3JkPWxhcHRvcCxsYXB0b3AudGhla2VsbGV5cy5vcmcsMTkyLjE2OC4wLjEsMTIzNDo6MTAwCisuVFAKKy5CIFwtWSwgLS10eHQtcmVjb3JkPTxub20+W1ssPHRleHRlPl0sPHRleHRlPl0KK0TDqWZpbml0IHVuIGVucmVnaXN0cmVtZW50IEROUyBkZSB0eXBlIFRYVC4gTGEgdmFsZXVyIGRlIGwnZW5yZWdpc3RyZW1lbnQgVFhUIGVzdAordW4gZW5zZW1ibGUgZGUgY2hhw65uZXMgZGUgY2FyYWN0w6hyZXMsIGRvbmMgdW4gbm9tYnJlIHZhcmlhYmxlIGRlIGNoYcOubmVzIGRlCitjYXJhY3TDqHJlcyBwZXV2ZW50IMOqdHJlIHNww6ljaWZpw6llcywgc8OpcGFyw6llcyBwYXIgZGVzIHZpcmd1bGVzLiBVdGlsaXNleiBkZXMKK2d1aWxsZW1ldHMgcG91ciBtZXR0cmUgdW5lIHZpcmd1bGUgZGFucyB1bmUgY2hhw65uZSBkZSBjYXJhY3TDqHJlcy4gTm90ZXogcXVlIGxhCitsb25ndWV1ciBtYXhpbWFsZSBwb3VyIHVuZSBjaGHDrm5lIGVzdCBkZSAyNTUgY2FyYWN0w6hyZXMsIGxlcyBjaGHDrm5lcyBwbHVzCitsb25ndWVzIMOpdGFudCBkw6ljb3Vww6llcyBlbiBtb3JjZWF1eCBkZSAyNTUgY2FyYWN0w6hyZXMgZGUgbG9uZ3MuCisuVFAKKy5CIC0tcHRyLXJlY29yZD08bm9tPlssPGNpYmxlPl0KK0TDqWZpbml0IHVuIGVucmVnaXN0cmVtZW50IEROUyBkZSB0eXBlIFBUUi4KKy5UUAorLkIgLS1uYXB0ci1yZWNvcmQ9PG5vbT4sPG9yZHJlPiw8cHLDqWbDqXJlbmNlPiw8ZHJhcGVhdXg+LDxzZXJ2aWNlPiw8ZXhwci4gcsOpZ3VsacOocmU+Wyw8cmVtcGxhY2VtZW50Pl0KK1JldG91cm5lIHVuIGVucmVnaXN0cmVtZW50IGRlIHR5cGUgTkFQVFIsIHRlbCBxdWUgc3DDqWNpZmnDqSBkYW5zIGxlIFJGQzM0MDMuCisuVFAKKy5CIC0tY25hbWU9PGNuYW1lPiw8Y2libGU+CitSZXRvdXJuZSB1biBlbnJlZ2lzdHJlbWVudCBkZSB0eXBlIENOQU1FIHF1aSBpbmRpcXVlIHF1ZSA8Y25hbWU+IGVzdCBlbgorcsOpYWxpdMOpIDxjaWJsZT4uIElsIGV4aXN0ZSBkZXMgY29udHJhaW50ZXMgaW1wb3J0YW50ZXMgc3VyIGxhIHZhbGV1cgorY2libGU7IGlsIGRvaXQgcydhZ2lyIGQndW4gbm9tIEROUyBxdWkgZXN0IGNvbm51IGRlIGRuc21hc3EgdmlhIC9ldGMvaG9zdHMKKyhvdSB1biBmaWNoaWVyIGjDtHRlcyBhZGRpdGlvbm5lbCksIHZpYSBESENQLCB2aWEgaW50ZXJmYWNlLS1uYW1lIG91IHBhciB1biBhdXRyZQorLkIgLS1jbmFtZS4KK1NpIHVuZSBjaWJsZSBuZSBzYXRpc2ZhaXQgcGFzIGNlcyBjcml0w6hyZXMsIGxlIENOQU1FIGVzdCBpZ25vcsOpLiBMZSBDTkFNRQorZG9pdCDDqnRyZSB1bmlxdWUsIG1haXMgaWwgZXN0IGF1dG9yaXPDqSBkJ2F2b2lyIHBsdXMgZCd1biBDTkFNRSBwb2ludGFudAordmVycyBsYSBtw6ptZSBjaWJsZS4KKy5UUAorLkIgLS1kbnMtcnI9PG5vbT4sPG51bcOpcm8tUlI+LFs8ZG9ubsOpZXMgaGV4YWTDqWNpbWFsZXM+XQorUmV0b3VybmUgdW4gZW5yZWdpc3RyZW1lbnQgRE5TIGFyYml0cmFpcmUuIExlIG51bcOpcm8gY29ycmVzcG9uZCBhdSB0eXBlCitkJ2VucmVnaXN0cmVtZW50IChxdWkgZXN0IHRvdWpvdXJzIGRlIGxhIGNsYXNzZSBDX0lOKS4gTGEgdmFsZXVyIGRlCitsJ2VucmVnaXN0cmVtZW50IGVzdCBkb25uw6llIGRhbnMgbGVzIGRvbm7DqWVzIGhleGFkw6ljaW1hbGVzLCBxdWkgcGV1dmVudAorw6p0cmUgZGUgbGEgZm9ybWUgMDE6MjM6NDUsIDAxIDIzIDQ1LCswMTIzNDUgb3UgbidpbXBvcnRlIHF1ZWxsZSBjb21iaW5haXNvbi4KKy5UUAorLkIgLS1pbnRlcmZhY2UtbmFtZT08bm9tPiw8aW50ZXJmYWNlPgorRMOpZmluaXQgdW4gZW50cmVnaXN0cmVtZW50IEROUyBhc3NvY2lhbnQgbGUgbm9tIGF2ZWMgbCdhZHJlc3NlIHByaW1haXJlIHN1cgorbCdpbnRlcmZhY2UgZG9ubsOpZSBlbiBhcmd1bWVudC4gQ2V0dGUgb3B0aW9uIHNww6ljaWZpZSB1biBlbnJlZ2lzdHJlbWVudCBkZSB0eXBlCitBIHBvdXIgbGUgbm9tIGRvbm7DqSBlbiBhcmd1bWVudCBkZSBsYSBtw6ptZSBmYcOnb24gcXVlIHMnaWwgw6l0YWl0IGTDqWZpbmkgcGFyIHVuZQorbGlnbmUgZGUgL2V0Yy9ob3N0cywgc2F1ZiBxdWUgbCdhZHJlc3NlIG4nZXN0IHBhcyBjb25zdGFudGUgbWFpcyBkw6lwZW5kYW50ZSBkZQorbCdpbnRlcmZhY2UgZMOpZmluaWUuIFNpIGwnaW50ZXJmYWNlIGVzdCBpbmFjdGl2ZSwgbm9uIGV4aXN0YW50ZSBvdSBub24KK2NvbmZpZ3Vyw6llLCB1bmUgcsOpcG9uc2UgdmlkZSBlc3QgZm91cm5pZS4gVW4gZW5yZWdpc3RyZW1lbnQgaW52ZXJzZSAoUFRSKSBlc3QKK8OpZ2FsZW1lbnQgY3LDqcOpIHBhciBjZXR0ZSBvcHRpb24sIGFzc29jaWFudCBsJ2FkcmVzc2UgZGUgbCdpbnRlcmZhY2UgYXZlYyBsZSBub20uCitQbHVzIGQndW4gbm9tIHBldXQgw6p0cmUgYXNzb2Npw6kgw6AgdW5lIGludGVyZmFjZSBkb25uw6llIGVuIHLDqXDDqXRhbnQgY2V0dGUgb3B0aW9uCitwbHVzaWV1cnMgZm9pczsgZGFucyBjZSBjYXMsIGwnZW5yZWdpc3RyZW1lbnQgaW52ZXJzZSBwb2ludGUgdmVycyBsZSBub20gZm91cm5pCitkYW5zIGxhIHByZW1pw6hyZSBpbnN0YW5jZSBkZSBjZXR0ZSBvcHRpb24uCisuVFAKKy5CIC0tc3ludGgtZG9tYWluPTxkb21haW5lPiw8cGxhZ2UgZCdhZHJlc3Nlcz5bLDxwcsOpZml4ZT5dCitDcsOpw6kgZGVzIGVucmVnaXN0cmVtZW50cyBBL0FBQUEgb3UgUFRSIHBvdXIgdW5lIHBsYWdlIGQnYWRyZXNzZXMuIExlcworZW5yZWdpc3RyZW1lbnRzIHV0aWxpc2VudCBsJ2FkcmVzc2UgYWluc2kgcXVlIGxlcyBwb2ludHMgKG91IGxlcyBkZXV4IHBvaW50cworZGFucyBsZSBjYXMgZCdJUHY2KSByZW1wbGFjw6lzIHBhciBkZXMgdGlyZXRzLgorCitVbiBleGVtcGxlIGRldnJhaXQgcmVuZHJlIGNlbGEgcGx1cyBjbGFpciA6CitMYSBjb25maWd1cmF0aW9uCisuQiAtLXN5bnRoLWRvbWFpbj10aGVrZWxsZXlzLm9yZy51aywxOTIuMTY4LjAuMC8yNCxpbnRlcm5hbC0KK3Blcm1ldCBkZSByZXRvdXJuZXIgaW50ZXJuYWwtMTkyLTE2OC0wLTU2LnRoZWtlbGxleXMub3JnLnVrIGxvcnMgZCd1bmUgcmVxdcOqdGUKK3N1ciBsJ2FkcmVzc2UgMTkyLjE2OC4wLjU2IGV0IHZpY2UtdmVyc2EgcG91ciBsYSByZXF1w6p0ZSBpbnZlcnNlLiBMYSBtw6ptZQorbG9naXF1ZSBzJ2FwcGxpcXVlIHBvdXIgSVB2NiwgYXZlYyBsYSBwYXJ0aWN1bGFyaXTDqSBzdWl2YW50ZSA6IGxlcyBhZHJlc3NlcworSVB2NiBwb3V2YW50IGNvbW1lbmNlciBwYXIgJzo6JywgbWFpcyBsZXMgbm9tcyBETlMgbmUgcG91dmFudCBwYXMgY29tbWVuY2VyCitwYXIgJy0nLCBzaSBhdWN1biBwcsOpZml4ZSBuJ2VzdCBkb25uw6ksIHVuIHrDqXJvIGVzdCBham91dMOpIGVuIGTDqWJ1dCBkZSBub20uCitBaW5zaSwgOjoxIGRldmllbnQgMC0tMS4KKworTGEgcGxhZ2UgZCdhZHJlc3NlcyBwZXV0LcOqdHJlIGRlIGxhIGZvcm1lCis8YWRyZXNzZSBJUD4sPGFkcmVzc2UgSVA+IG91IDxhZHJlc3NlIElQPi88bWFzcXVlIHLDqXNlYXU+CisuVFAKKy5CIC0tYWRkLW1hYworQWpvdXRlIGwnYWRyZXNzZSBNQUMgZHUgcmVxdcOqdGV1ciBhdXggcmVxdcOqdGVzIEROUyB0cmFuc21pc2VzIGF1eCBzZXJ2ZXVycworYW1vbnRzLiBDZWxhIHBldXQgw6p0cmUgdXRpbGlzw6kgZGFucyB1biBidXQgZGUgZmlsdHJhZ2UgRE5TIHBhciBsZXMgc2VydmV1cnMKK2Ftb250cy4gTCdhZHJlc3NlIE1BQyBwZXV0IHVuaXF1ZW1lbnQgw6p0cmUgYWpvdXTDqWUgc2kgbGUgcmVxdcOqdGV1ciBlc3Qgc3VyIGxlCittw6ptZSBzb3VzLXLDqXNlYXUgcXVlIGxlIHNlcnZldXIgZG5zbWFzcS4gVmV1aWxsZXogbm90ZXIgcXVlIGxlIG3DqWNhbmlzbWUKK3V0aWxpc8OpIHBvdXIgZWZmZWN0dWVyIGNlbGEgKHVuZSBvcHRpb24gRUROUzApIG4nZXN0IHBhcyBlbmNvcmUgc3RhbmRhcmRpc8OpZSwKK2F1c3NpIGNldHRlIGZvbmN0aW9uYWxpdMOpIGRvaXQgw6p0cmUgY29uc2lkw6lyw6llIGNvbW1lIGV4cMOpcmltZW50YWxlLiBOb3Rlegorw6lnYWxlbWVudCBxdSdleHBvc2VyIGxlcyBhZHJlc3NlcyBNQUMgZGUgbGEgc29ydGUgcGV1dCBhdm9pciBkZXMgaW1wbGljYXRpb25zCitlbiB0ZXJtZXMgZGUgc8OpY3VyaXTDqSBldCBkZSB2aWUgcHJpdsOpZS4gTCdhdmVydGlzc2VtZW50IGRvbm7DqSBwb3VyIC0tYWRkLXN1Ym5ldAorcydhcHBsaXF1ZSDDqWdhbGVtZW50IGljaS4KKy5UUAorLkIgLS1hZGQtc3VibmV0W1s9PGxvbmd1ZXVyIGRlIHByw6lmaXhlIElQdjQ+XSw8bG9uZ3VldXIgZGUgcHLDqWZpeGUgSVB2Nj5dCitSYWpvdXRlIGwnYWRyZXNzZSBkZSBzb3VzLXLDqXNlYXUgZHUgcmVxdcOqdGV1ciBhdXggcmVxdcOqdGVzIEROUyB0cmFuc21pc2VzCithdXggc2VydmV1cnMgYW1vbnRzLiBMYSBxdWFudGl0w6kgZCdhZHJlc3NlcyB0cmFuc21pc2VzIGTDqXBlbmQgZHUgcGFyYW3DqHRyZQorbG9uZ3VldXIgZHUgcHLDqWZpeGUgOiAzMiAob3UgMTI4IGRhbnMgbGUgY2FzIGQnSVB2NikgdHJhbnNtZXQgbGEgdG90YWxpdMOpCitkZSBsJ2FkcmVzc2UsIDAgbidlbiB0cmFuc21ldCBhdWN1biBtYWlzIG1hcnF1ZSBuw6lhbm1vaW5zIGxhIHJlcXXDqnRlIGNlIHF1aQorZmFpdCBxdSdhdWN1biBzZXJ2ZXVyIGFtb250IG5lIHJham91dGVyYSBkJ2FkcmVzc2UgY2xpZW50LiBMYSB2YWxldXIgcGFyCitkw6lmYXV0IGVzdCB6w6lybyBldCBwb3VyIElQdjQgZXQgcG91ciBJUHY2LiBBIG5vdGVyIHF1ZSBsZXMgc2VydmV1cnMgYW1vbnRzCitwZXV2ZW50LcOqdHJlIGNvbmZpZ3Vyw6lzIHBvdXIgcmV0b3VybmVyIGRlcyB2YWxldXJzIGRpZmbDqXJlbnRlcyBlbiBmb25jdGlvbgorZGUgY2V0dGUgaW5mb3JtYXRpb24gbWFpcyBxdWUgbGUgY2FjaGUgZGUgZG5zbWFzcSBuJ2VuIHRpZW50IHBhcyBjb21wdGUuCitTaSB1bmUgaW5zdGFuY2UgZGUgZG5zbWFzcSBlc3QgY29uZmlndXLDqWUgZGUgdGVsbGUgbWFuacOqcmUgcXVlIGRlcyB2YWxldXJzCitkaWZmw6lyZW50ZXMgcG91cnJhaWVudC3DqnRyZSByZW5jb250csOpcywgYWxvcnMgbGUgY2FjaGUgZGV2cmFpdCDDqnRyZSBkw6lzYWN0aXbDqS4KKy5UUAorLkIgXC1jLCAtLWNhY2hlLXNpemU9PHRhaWxsZT4KK0TDqWZpbml0IGxhIHRhaWxsZSBkdSBjYWNoZSBkZSBEbnNtYXNxLiBMYSB2YWxldXIgcGFyIGTDqWZhdXQgZXN0IGRlIDE1MCBub21zLgorRMOpZmluaXIgdW5lIHZhbGV1ciBkZSB6w6lybyBkw6lzYWN0aXZlIGxlIGNhY2hlLgorLlRQCisuQiBcLU4sIC0tbm8tbmVnY2FjaGUKK0TDqXNhY3RpdmUgbGUgImNhY2hlIG7DqWdhdGlmIi4gTGUgImNhY2hlIG7DqWdhdGlmIiBwZXJtZXQgw6AgRG5zbWFzcSBkZSBzZSBzb3V2ZW5pcgorZGVzIHLDqXBvbnNlcyBkZSB0eXBlICJubyBzdWNoIGRvbWFpbiIgZm91cm5pZXMgcGFyIGxlcyBzZXJ2ZXVycyBETlMgZW4gYW1vbnQgZXQKK2RlIGZvdXJuaXIgbGVzIHLDqXBvbnNlcyBzYW5zIGF2b2lyIMOgIHJlLXRyYW5zbWV0dHJlIGxlcyByZXF1w6p0ZXMgYXV4IHNlcnZldXJzCithbW9udC4KKy5UUAorLkIgXC0wLCAtLWRucy1mb3J3YXJkLW1heD08bm9tYnJlIGRlIHJlcXXDqnRlcz4KK0TDqWZpbml0IGxlIG5vbWJyZSBtYXhpbXVtIGRlIHJlcXXDqnRlcyBETlMgc2ltdWx0YW7DqWVzLiBMYSB2YWxldXIgcGFyIGTDqWZhdXQgZXN0CisxNTAsIGNlIHF1aSBkZXZyYWl0IMOqdHJlIHN1ZmZpc2FudCBkYW5zIGxhIG1ham9yaXTDqSBkZXMgY29uZmlndXJhdGlvbnMuIExhIHNldWxlCitzaXR1YXRpb24gaWRlbnRpZmnDqWUgZGFucyBsYXF1ZWxsZSBjZXR0ZSB2YWxldXIgbsOpY2Vzc2l0ZSBkJ8OqdHJlIGF1Z21lbnTDqWUgZXN0Citsb3JzcXUndW4gc2VydmV1ciB3ZWIgYSBsYSByw6lzb2x1dGlvbiBkZSBub20gYWN0aXbDqWUgcG91ciBsJ2VucmVnaXN0cmVtZW50IGRlCitzb24gam91cm5hbCBkZXMgcmVxdcOqdGVzLCBjZSBxdWkgcGV1dCBnw6luw6lyZXIgdW4gbm9tYnJlIGltcG9ydGFudCBkZSByZXF1w6p0ZXMKK3NpbXVsdGFuw6llcy4KKy5UUAorLkIgLS1wcm94eS1kbnNzZWMKK1VuIHJlc29sdmV1ciBzdXIgdW5lIG1hY2hpbmUgY2xpZW50ZSBwZXV0IGVmZmVjdHVlciBsYSB2YWxpZGF0aW9uIEROU1NFQyBkZQorZGV1eCBmYcOnb25zIDogaWwgcGV1dCBlZmZlY3R1ZXIgbHVpLW3Dqm1lIGxlcyBvcMOpcmF0aW9ucyBkZSBjaGlmZnJlbWVudHMgc3VyCitsYSByw6lwb25zZSByZcOndWUsIG91IGlsIHBldXQgbGFpc3NlciBsZSBzZXJ2ZXVyIHLDqWN1cnNpZiBhbW9udCBmYWlyZSBsYQordmFsaWRhdGlvbiBldCBwb3NpdGlvbm5lciB1biBkcmFwZWF1IGRhbnMgbGEgcsOpcG9uc2UgYXUgY2FzIG/DuSBjZWxsZS1jaSBlc3QKK2NvcnJlY3RlLiBEbnNtYXNxIG4nZXN0IHBhcyB1biB2YWxpZGF0ZXVyIEROU1NFQywgYXVzc2kgaWwgbmUgcGV1dCBlZmZlY3R1ZXIKK2xhIHZhbGlkYXRpb24gY29tbWUgdW4gc2VydmV1ciBkZSBub20gcsOpY3Vyc2lmLCBjZXBlbmRhbnQgaWwgcGV1dCByZXRyYW5zbWV0dHJlCitsZXMgcsOpc3VsdGF0cyBkZSB2YWxpZGF0aW9uIGRlIHNlcyBzZXJ2ZXVycyBhbW9udHMuIENldHRlIG9wdGlvbiBwZXJtZXQKK2wnYWN0aXZhdGlvbiBkZSBjZXR0ZSBmb25jdGlvbmFsaXTDqS4gVm91cyBuZSBkZXZyaWV6IHV0aWxpc2VyIGNlbGEgcXVlIHNpIHZvdXMKK2ZhaXRlcyBjb25maWFuY2UgYXV4IHNlcnZldXJzIGFtb250cworLkkgYWluc2kgcXVlIGxlIHLDqXNlYXUgZW50cmUgdm91cyBldCBldXguCitTaSB2b3VzIHV0aWxpc2V6IGxlIHByZW1pZXIgbW9kZSBETlNTRUMsIGxhIHZhbGlkYXRpb24gcGFyIGxlIHJlc29sdmV1ciBkZXMKK2NsaWVudHMsIGNldHRlIG9wdGlvbiBuJ2VzdCBwYXMgcmVxdWlzZS4gRG5zbWFzcSByZXRvdXJuZSB0b3Vqb3VycyB0b3V0ZXMgbGVzCitkb25uw6llcyBuw6ljZXNzYWlyZXMgcGFyIHVuIGNsaWVudCBwb3VyIGVmZmVjdHVlciBsYSB2YWxpZGF0aW9uIGx1aS1tw6ptZS4KKy5UUAorCisuQiAtLWF1dGgtem9uZT08ZG9tYWluZT5bLDxzb3VzLXLDqXNlYXU+Wy88bG9uZ3VldXIgZGUgcHLDqWZpeGU+XVssPHNvdXMtcsOpc2VhdT5bLzxsb25ndWV1ciBkZSBwcsOpZml4ZT5dLi4uLi5dXQorRMOpZmluaWUgdW5lIHpvbmUgRE5TIHBvdXIgbGFxdWVsbGUgZG5zbWFzcSBhZ2l0IGVuIHRlbXBzIHF1ZSBzZXJ2ZXVyIGZhaXNhbnQKK2F1dG9yaXTDqS4gTGVzIGVucmVnaXN0cmVtZW50cyBETlMgZMOpZmluaXMgbG9jYWxlbWVudCBldCBjb3JyZXNwb25kYW50IMOgIGNlCitkb21haW5lIHNlcm9udCBmb3VybmlzLiBMZXMgZW5yZWdpc3RyZW1lbnRzIEEgZXQgQUFBQSBkb2l2ZW50IHNlIHNpdHVlciBkYW5zCitsJ3VuIGRlcyBzb3VzLXLDqXNlYXV4IGTDqWZpbmlzLCBvdSBkYW5zIHVuIHLDqXNlYXUgY29ycmVzcG9uZGFudCDDoCB1bmUgcGxhZ2UgREhDUAorKGNlIGNvbXBvcnRlbWVudCBwZXV0LcOqdHJlIGTDqXNhY3RpdsOpIHBhcgorLkIgY29uc3RydWN0b3Itbm9hdXRoOgorKS4gTGUgb3UgbGVzIHNvdXMtcsOpc2VhdXggc29udCDDqWdhbGVtZW50IHV0aWxpc8OpKHMpIHBvdXIgZMOpZmluaXIgbGVzIGRvbWFpbmVzCitpbi1hZGRyLmFycGEgZXQgaXA2LmFycGEgc2VydmFudCDDoCBsJ2ludGVycm9nYXRpb24gRE5TIGludmVyc2UuIFNpIGxhIGxvbmd1ZXVyCitkZSBwcsOpZml4ZSBuJ2VzdCBwYXMgc3DDqWNpZmnDqWUsIGVsbGUgc2VyYSBwYXIgZMOpZmF1dCBkZSAyNCBwb3VyIElQdjQgZXQgNjQgcG91cgorSVB2Ni4gRGFucyBsZSBjYXMgZCdJUHY0LCBsYSBsb25ndWV1ciBkdSBtYXNxdWUgZGUgcsOpc2VhdSBkZXZyYWl0LcOqdHJlIGRlIDgsIDE2CitvdSAyNCwgc2F1ZiBzaSBlbiBjYXMgZGUgbWlzZSBlbiBwbGFjZSBkJ3VuZSBkw6lsw6lnYXRpb24gZGUgbGEgem9uZSBpbi1hZGRyLmFycGEKK2NvbmZvcm1lIGF1IFJGQyAyMzE3LgorLlRQCisuQiAtLWF1dGgtc29hPTxudW3DqXJvIGRlIHPDqXJpZT5bLDxtYWludGVuZXVyIGRlIHpvbmUgKGhvc3RtYXN0ZXIpPlssPHJhZnJhaWNoaXNzZW1lbnQ+Wyw8bm9tYnJlIGRlIHLDqWVzc2Fpcz5bLDxleHBpcmF0aW9uPl1dXV0KK1Nww6ljaWZpZSBsZXMgY2hhbXBzIGRlIGwnZW5yZWdpc3RyZW1lbnQgZGUgdHlwZSBTT0EgKFN0YXJ0IE9mIEF1dGhvcml0eSkKK2Fzc29jacOpIMOgIHVuZSB6b25lIHBvdXIgbGFxdWVsbGUgbGUgc2VydmV1ciBmYWl0IGF1dG9yaXTDqS4gQSBub3RlciBxdWUgY2VsYSBlc3QKK29wdGlvbm5lbCwgbGVzIHZhbGV1cnMgcGFyIGTDqWZhdXQgZGV2YW50IGNvbnZlbmlyIMOgIGxhIG1ham9yaXTDqSBkZXMgY2FzLgorLlRQCisuQiAtLWF1dGgtc2VjLXNlcnZlcnM9PGRvbWFpbmU+Wyw8ZG9tYWluZT5bLDxkb21haW5lPi4uLl1dCitTcMOpY2lmaWUgdW4gb3UgcGx1c2lldXJzIHNlcnZldXIgZGUgbm9tIHNlY29uZGFpcmVzIHBvdXIgdW5lIHpvbmUgcG91cgorbGFxdWVsbGUgZG5zbWFzcSBmYWl0IGF1dG9yaXTDqS4gQ2VzIHNlcnZldXJzIGRvaXZlbnQtw6p0cmUgY29uZmlndXLDqXMgcG91cgorcsOpY3Vww6lyZXIgYXVwcsOocyBkZSBkbnNtYXNxIGxlcyBpbmZvcm1hdGlvbnMgbGnDqWVzIMOgIGxhIHpvbmUgYXUgdHJhdmVycyBkJ3VuCit0cmFuc2ZlcnQgZGUgem9uZSwgZXQgcsOpcG9uZHJlIGF1eCByZXF1w6p0ZXMgcG91ciB0b3V0ZXMgbGVzIHpvbmVzIHBvdXIKK2xlc3F1ZWxsZXMgZG5zbWFzcSBmYWl0IGF1dG9yaXTDqS4KKy5UUAorLkIgLS1hdXRoLXBlZXI9PGFkcmVzc2UgSVA+Wyw8YWRyZXNzZSBJUD5bLDxhZHJlc3NlIElQPi4uLl1dCitTcMOpY2lmaWUgbGEgb3UgbGVzIGFkcmVzc2VzIGRlIHNlcnZldXJzIHNlY29uZGFpcmVzIGF1dG9yaXPDqXMgw6AgaW5pdGllciBkZXMKK3JlcXXDqnRlcyBkZSB0cmFuc2ZlcnQgZGUgem9uZSAoQVhGUikgcG91ciBsZXMgem9uZXMgcG91ciBsZXNxdWVsbGVzCitkbnNtYXNxIGZhaXQgYXV0b3JpdMOpLiBTaSBjZXR0ZSBvcHRpb24gbidlc3QgcGFzIGZvdXJuaWUsIGxlcyByZXF1w6p0ZXMgQVhGUgorc2Vyb250IGFjY2VwdMOpZXMgcG91ciB0b3VzIGxlcyBzZXJ2ZXVycyBzZWNvbmRhaXJlcy4KKy5UUCAKKy5CIC0tY29ubnRyYWNrCitMaXMgbGUgbWFycXVhZ2UgZGUgc3VpdmkgZGUgY29ubmV4aW9uIExpbnV4IGFzc29jacOpIGF1eCByZXF1w6p0ZXMgRE5TIGVudHJhbnRlcworZXQgcG9zaXRpb25uZSBsYSBtw6ptZSBtYXJxdWUgYXUgdHJhZmljIGFtb250IHV0aWxpc8OpIHBvdXIgcsOpcG9uZHJlIMOgIGNlcworcmVxdcOpdGVzLiBDZWxhIHBlcm1ldCBhdSB0cmFmaWMgZ8OpbsOpcsOpIHBhciBEbnNtYXNxIGQnw6l0cmUgYXNzb2Npw6kgYXV4IHJlcXXDqnRlcworbCdheWFudCBkw6ljbGVuY2jDqSwgY2UgcXVpIGVzdCBwcmF0aXF1ZSBwb3VyIGxhIGdlc3Rpb24gZGUgbGEgYmFuZGUgcGFzc2FudGUKKyhhY2NvdW50aW5nKSBldCBsZSBmaWx0cmFnZSAoZmlyZXdhbGwpLiBEbnNtYXNxIGRvaXQgcG91ciBjZWxhIMOqdHJlIGNvbXBpbMOpCithdmVjIGxlIHN1cHBvcnQgY29ubnRyYWNrLCBsZSBub3lhdSBkb2l0IMOpZ2FsZW1lbnQgaW5jbHVyZSBjb25udHJhY2sgZXQgw6p0cmUKK2NvbmZpZ3Vyw6kgcG91ciBjZWxhLiBDZXR0ZSBvcHRpb24gbmUgcGV1dCBwYXMgw6p0cmUgY29tYmluw6llIGF2ZWMKKy0tcXVlcnktcG9ydC4KKy5UUAorLkIgXC1GLCAtLWRoY3AtcmFuZ2U9W3RhZzo8bGFiZWw+Wyx0YWc6PGxhYmVsPl0sXVtzZXQ6PGxhYmVsPl0sXTxhZHJlc3NlIGRlIGTDqWJ1dD5bLDxhZHJlc3NlIGRlIGZpbj5dWyw8bW9kZT5dWyw8bWFzcXVlIGRlIHLDqXNlYXU+Wyw8YnJvYWRjYXN0Pl1dWyw8ZHVyw6llIGRlIGJhaWw+XQorLlRQCisuQiBcLUYsIC0tZGhjcC1yYW5nZT1bdGFnOjxsYWJlbD5bLHRhZzo8bGFiZWw+XSxdW3NldDo8bGFiZWw+XSxdPGFkZHJlc3NlIElQdjYgZGUgZMOpYnV0PlssPGFkcmVzc2UgSVB2NiBkZSBmaW4+fGNvbnN0cnVjdG9yOjxpbnRlcmZhY2U+XVssPG1vZGU+XVssPGxvbmd1ZXVyIGRlIHByw6lmaXhlPl1bLDxkdXLDqWUgZGUgYmFpbD5dCisKK0FjdGl2ZSBsZSBzZXJ2ZXVyIERIQ1AuIExlcyBhZHJlc3NlcyBzZXJvbnQgZG9ubsOpZXMgZGFucyBsYSBwbGFnZSBjb21wcmlzZSBlbnRyZQorPGFkcmVzc2UgZGUgZMOpYnV0PiBldCA8YWRyZXNzZSBkZSBmaW4+IGV0IMOgIHBhcnRpciBkZXMgYWRyZXNzZXMgZMOpZmluaWVzCitzdGF0aXF1ZW1lbnQgZGFucyBsJ29wdGlvbgorLkIgZGhjcC1ob3N0LgorU2kgdW5lIGR1csOpZSBkZSBiYWlsIGVzdCBkb25uw6llLCBhbG9ycyBsZXMgYmF1eCBzZXJvbnQgZG9ubsOpcyBwb3VyIGNldHRlCitkdXLDqWUuIExhIGR1csOpZSBkZSBiYWlsIGVzdCBkb25uw6llIGVuIHNlY29uZGVzLCBlbiBtaW51dGVzIChleGVtcGxlIDogNDVtKSwKK2VuIGhldXJlcyAoZXhlbXBsZSA6IDFoKSBvdSDDqnRyZSBsYSBjaGFpbmUgZGUgY2FyYWN0w6hyZSAiaW5maW5pdGUiIHBvdXIgdW5lCitkdXLDqWUgaW5kw6l0ZXJtaW7DqWUuIFNpIGF1Y3VuZSB2YWxldXIgbidlc3QgZG9ubsOpZSwgdW5lIGR1csOpZSBkZSBiYWlsIHBhciBkw6lmYXV0CitkZSB1bmUgaGV1cmUgZXN0IGFwcGxpcXXDqWUuIExhIHZhbGV1ciBtaW5pbXVtIHBvdXIgdW4gYmFpbCBESENQIGVzdCBkZSAyCittaW51dGVzLgorCitQb3VyIGxlcyBwbGFnZXMgSVB2NiwgbGEgZHVyw6llIGRlIGJhaWwgcGV1dC3DqnRyZSDDqWdhbGUgYXUgbW90LWNsZWYgImRlcHJlY2F0ZWQiCisob2Jzb2zDqHRlKTsgQ2VsYSBwb3NpdGlvbm5lIGxhIGR1csOpZSBkZSB2aWUgcHLDqWbDqXLDqWUgZW52b3nDqWUgZGFucyBsZXMgYmF1eCBESENQCitvdSBsZXMgYW5ub25jZXMgcm91dGV1cnMgw6AgesOpcm8sIGNlIHF1aSBpbmNpdGUgbGVzIGNsaWVudHMgw6AgdXRpbGlzZXIgZCdhdXRyZXMKK2FkcmVzc2VzIGF1dGFudCBxdWUgcG9zc2libGUsIHBvdXIgdG91dGUgbm91dmVsbGUgY29ubmV4aW9uLCBlbiBwcsOpYWxhYmxlIMOgCitsYSByZW51bcOpcm90YXRpb24uCisKK0NldHRlIG9wdGlvbiBwZXV0IMOqdHJlIHLDqXDDqXTDqWUsIGF2ZWMgZGlmZsOpcmVudGVzIGFkcmVzc2VzLAorcG91ciBhY3RpdmVyIGxlIHNlcnZpY2UgREhDUCBzdXIgcGx1cyBkJ3VuIHLDqXNlYXUuIFBvdXIgZGVzIHLDqXNlYXV4IGRpcmVjdGVtZW50Citjb25uZWN0w6lzIChjJ2VzdC3DoC1kaXJlIGRlcyByw6lzZWF1eCBkYW5zIGxlc3F1ZWxzIGxhIG1hY2hpbmUgc3VyIGxhcXVlbGxlIHRvdXJuZQorRG5zbWFzcSBwb3Nzw6hkZSB1bmUgaW50ZXJmYWNlKSwgbGUgbWFzcXVlIGRlIHLDqXNlYXUgZXN0IG9wdGlvbm5lbCA6IERuc21hc3EgbGEKK2TDqXRlcm1pbmVyYSDDoCBwYXJ0aXIgZGUgbGEgY29uZmlndXJhdGlvbiBkZXMgaW50ZXJmYWNlcy4KKworUG91ciBsZXMgcsOpc2VhdXggcG91ciBsZXNxdWVscyBsZSBzZXJ2aWNlIERIQ1Agc2UgZmFpdCB2aWEgdW4gcmVsYWlzIERIQ1AKKygicmVsYXkgYWdlbnQiKSwgRG5zbWFzcSBlc3QgaW5jYXBhYmxlIGRlIGTDqXRlcm1pbmVyIGxlIG1hc3F1ZSBwYXIgbHVpLW3Dqm1lLAorYXVzc2kgaWwgZG9pdCDDqnRyZSBzcMOpY2lmacOpLCBmYXV0ZSBkZSBxdW9pIERuc21hc3EgZXNzYWllcmEgZGUgbGUgZGV2aW5lciBlbgorZm9uY3Rpb24gZGUgbGEgY2xhc3NlIChBLCBCIG91IEMpIGRlIGwnYWRyZXNzZSByw6lzZWF1LiBMJ2FkcmVzc2UgZGUgYnJvYWRjYXN0Citlc3QgdG91am91cnMgb3B0aW9ubmVsbGUuCisKK0lsIGVzdCB0b3Vqb3VycyBwb3NzaWJsZSBkJ2F2b2lyIHBsdXMgZCd1bmUgcGxhZ2UgREhDUCBwb3VyIHVuIG3Dqm1lCitzb3VzLXLDqXNlYXUuCisKK1BvdXIgSVB2NiwgbGVzIHBhcmFtw6h0cmVzIHNvbnQgbMOpZ8OocmVtZW50IGRpZmbDqXJlbnRzIDogYXUgbGlldSBkJ3VuIG1hc3F1ZSBkZQorcsOpc2VhdSBldCBkJ3VuZSBhZHJlc3NlIGRlIGJyb2FkY2FzdCwgaWwgZXhpc3RlIHVuZSBsb25ndWV1ciBkZSBwcsOpZml4ZQorb3B0aW9ubmVsbGUuIFNpIGVsbGUgZXN0IG9taXNlLCBsYSB2YWxldXIgcGFyIGTDqWZhdXQgZXN0IDY0LiDDgCBsYSBkaWZmw6lyZW5jZQorZCdJUHY0LCBsYSBsb25ndWV1ciBkZSBwcsOpZml4ZSBuJ2VzdCBwYXMgYXV0b21hdGlxdWVtZW50IGTDqWR1aXRlIGRlIGxhCitjb25maWd1cmF0aW9uIGRlIGwnaW50ZXJmYWNlLiBMYSB0YWlsbGUgbWluaW1hbGUgcG91ciBsYSBsb25ndWV1ciBkZSBwcsOpZml4ZQorZXN0IDY0LgorCitQb3VyIElQdjYgKGV0IElQdjYgdW5pcXVlbWVudCksIGlsIGVzdCBwb3NzaWJsZSBkZSBkw6lmaW5pciBsZXMgcGxhZ2VzIGQndW5lCithdXRyZSBmYcOnb24uIERhbnMgY2UgY2FzLCBsJ2FkcmVzc2UgZGUgZMOpcGFydCBldCBsJ2FkcmVzc2UgZGUgZmluIG9wdGlvbm5lbGxlCitjb250aWVubmVudCB1bmlxdWVtZW50IGxhIHBhcnRpZSByw6lzZWF1IChwYXIgZXhlbXBsZSA6OjEpIGV0IHNvbnQgc3VpdmllcyBwYXIKKy5CIGNvbnN0cnVjdG9yOjxpbnRlcmZhY2U+LgorQ2VsYSBmb3JtZSB1biBtb2TDqGxlIGTDqWNyaXZhbnQgY29tbWVudCBjb25zdHJ1aXJlIGxhIHBsYWdlLCDDoCBwYXJ0aXIgZGVzCithZHJlc3NlcyBhc3NpZ27DqWVzIMOgIGwnaW50ZXJmYWNlLiBQYXIgZXhlbXBsZQorCisuQiAtLWRoY3AtcmFuZ2U9OjoxLDo6NDAwLGNvbnN0cnVjdG9yOmV0aDAKKworcHJvdm9xdWUgbGEgcmVjaGVyY2hlIGQnYWRyZXNzZXMgZGUgbGEgZm9ybWUgPHLDqXNlYXU+OjoxIHN1ciBldGgwIGV0IGNyw6llIHVuZQorcGxhZ2UgYWxsYW50IGRlIDxyw6lzZWF1Pjo6MSDDoCA8csOpc2VhdT46NDAwLiBTaSB1bmUgaW50ZXJmYWNlIGVzdCBhc3NpZ27DqWUgw6AKK3BsdXMgZCd1biByw6lzZWF1LCBsZXMgcGxhZ2VzIGNvcnJlc3BvbmRhbnRlcyBzZXJvbnQgYXV0b21hdGlxdWVtZW50IGNyw6nDqWVzLAorcmVuZHVlcyBvYnNvbMOodGVzIHB1aXMgc3VwcHJpbcOpZXMgbG9yc3F1ZSBsJ2FkcmVzcyBlc3QgcmVuZHVlIG9ic29sw6h0ZSBwdWlzCitzdXBwcmltw6llLiBMZSBub20gZGUgbCdpbnRlcmZhY2UgcGV1dCDDqnRyZSBzcMOpY2lmacOpIGF2ZWMgdW4gY2FyYWN0w6hyZSBqb2tlciAnKicKK2ZpbmFsLgorCitwcm92b3F1ZSBsYSByZWNoZXJjaGUgZCdhZHJlc3NlcyBzdXIgZXRoMCBldCBjcsOpZSB1bmUgcGxhZ2UgYWxsYW50IGRlCis8csOpc2VhdT46OjEgw6AgPHLDqXNlYXU+OjQwMC4gU2kgbCdpbnRlcmZhY2UgZXN0IGFzc2lnbsOpZSDDoAorcGx1cyBkJ3VuIHLDqXNlYXUsIGxlcyBwbGFnZXMgY29ycmVzcG9uZGFudGVzIHNlcm9udCByZXNwZWN0aXZlbWVudAorYXV0b21hdGlxdWVtZW50IGNyw6nDqWVzLCByZW5kdWVzIG9ic29sw6h0ZXMgZXQgc3VwcHJpbcOpZXMgbG9yc3F1ZSBsJ2FkcmVzc2UKK2VzdCByZW5kdWUgb2Jzb2zDqHRlIGV0IHN1cHByaW3DqWUuIExlIG5vbSBkZSBsJ2ludGVyZmFjZSBwZXV0IMOqdHJlIHNww6ljaWZpw6kgYXZlYwordW4gY2FyYWN0w6hyZSBqb2tlciAnKicgZmluYWwuIExlcyBhZHJlc3NlcyBhdXRvY29uZmlndXLDqWVzLCBwcml2w6llcyBvdQorb2Jzb2zDqHRlcyBuZSBjb252aWVubmVudCBwYXMuCisKK1NpIHVuZSBwbGFnZSBkaGNwLXJhbmdlIGVzdCB1bmlxdWVtZW50IHV0aWxpc8OpZSBwb3VyIGR1IERIQ1Agc2Fucy3DqXRhdAorKCJzdGF0ZWxlc3MiKSBvdSBkZSBsJ2F1dG9jb25maWd1cmF0aW9uIHNhbnMgw6l0YXQgKCJTTEFBQyIpLCBhbG9ycyBsJ2FkcmVzc2UKK3BldXQtw6p0cmUgaW5kaXF1w6llIHNvdXMgbGEgZm9ybWUgJzo6JworCisuQiAtLWRoY3AtcmFuZ2U9OjosY29uc3RydWN0b3I6ZXRoMAorCitJbCBleGlzdGUgdW5lIHZhcmlhbnRlIGRlIGxhIHN5bnRheGUgY29uc3RydWN0b3I6IHF1aSBjb25zaXN0ZSBlbiBsJ3V0aWxpc2F0aW9uCitkdSBtb3QtY2xlZgorLkIgY29uc3RydWN0b3Itbm9hdXRoLgorVm9pcgorLkIgLS1hdXRoLXpvbmUKK3BvdXIgZGVzIGV4cGxpY2F0aW9ucyDDoCBjZSBzdWpldC4KKworTCdpZGVudGlmaWFudCBkZSBsYWJlbCBvcHRpb25uZWwKKy5CIHNldDo8bGFiZWw+Citmb3VybmllIHVuZSDDqXRpcXVldHRlIGFscGhhbnVtw6lyaXF1ZSBxdWkgaWRlbnRpZmllIGNlIHLDqXNlYXUsIGFmaW4gZGUgcGVybWV0dHJlCitsYSBmb3Vybml0dXJlIGQnb3B0aW9ucyBESENQIHNww6ljaWZpcXVlcyDDoCBjaGFxdWUgcsOpc2VhdS4KK0xvcnNxdWUgcHLDqWZpeMOpIHBhciAndGFnOicsIGxhIHNpZ25pZmljYXRpb24gY2hhbmdlLCBldCBhdSBsaWV1IGRlIGTDqWZpbmlyIHVuCitsYWJlbCwgaWwgZMOpZmluaXQgbGUgbGFiZWwgcG91ciBsYXF1ZWxsZSBsYSByw6hnbGUgcydhcHBsaXF1ZS4gVW4gc2V1bCBsYWJlbCBwZXV0LQorw6p0cmUgZMOpZmluaSBtYWlzIHBsdXNpZXVycyBsYWJlbHMgcGV1dmVudCBjb8OvbmNpZGVyLgorCitMZSBtb3QgY2xlZiBvcHRpb25uZWwgPG1vZGU+IHBldXQgw6p0cmUgw6lnYWwgw6AKKy5CIHN0YXRpYworKCJzdGF0aXF1ZSIpIGNlIHF1aSBpbmRpcXVlIMOgIERuc21hc3EgZCdhY3RpdmVyIGxlIHNlcnZpY2UgREhDUCBwb3VyIGxlIHLDqXNlYXUKK3Nww6ljaWZpw6ksIG1haXMgZGUgbmUgcGFzIGFjdGl2ZXIgbCdhbGxvY2F0aW9uIGR5bmFtaXF1ZSBkJ2FkcmVzc2VzIElQIDogU2V1bHMKK2xlcyBow7R0ZXMgcG9zc8OpZGFudCBkZXMgYWRyZXNzZXMgSVAgc3RhdGlxdWVzIGZvdXJuaWVzIHZpYSAKKy5CIGRoY3AtaG9zdAorb3UgcHLDqXNlbnRlcyBkYW5zIGxlIGZpY2hpZXIgL2V0Yy9ldGhlcnMgc2Vyb250IGFsb3JzIHNlcnZpcyBwYXIgbGUgREhDUC4gSWwgZXN0Citwb3NzaWJsZSBkJ2FjdGl2ZXIgdW4gbW9kZSAiZm91cnJlLXRvdXQiIGVuIGTDqWZpbmlzc2FudCB1biByw6lzZWF1IHN0YXRpcXVlCitjb21wb3J0YW50IHVuaXF1ZW1lbnQgZGVzIHrDqXJvcywgYydlc3Qgw6AgZGlyZSA6CisuQiAtLWRoY3A9cmFuZ2U9Ojosc3RhdGljCitDZWxhIHBlcm1ldCBkZSByZXRvdXJuZXIgZGVzIHLDqXBvbnNlcyDDoCB0b3VzIGxlcyBwYXF1ZXRzIGRlIHR5cGUKK0luZm9ybWF0aW9uLXJlcXVlc3QgKHJlcXXDqnRlIGQnaW5mb3JtYXRpb24pIGVuIG1vZGUgREhDUHY2IHNhbnMgw6l0YXQgc3VyIGxlCitzb3VzLXLDqXNlYXUgY29uZmlndXLDqS4gCisKK1BvdXIgSVB2NCwgbGUgPG1vZGU+IHBldXQgZXN0IMOpZ2FsIMOgCisuQiBwcm94eQorLCBhdXF1ZWwgY2FzIERuc21hc3EgZm91cm5pcmEgdW4gc2VydmljZSBkZSBESENQIHByb3h5IHBvdXIgbGUgc291cy1yw6lzZWF1CitzcMOpY2lmacOpLiAodm9pcgorLkIgcHhlLXByb21wdAorZXQKKy5CIHB4ZS1zZXJ2aWNlCitwb3VyIHBsdXMgZGUgZMOpdGFpbHMpLgorCitQb3VyIElQdjYsIGxlIG1vZGUgcGV1dC3DqnRyZSB1bmUgY29tYmluYWlzb24gZGVzIHZhbGV1cnMKKy5CIHJhLW9ubHksIHNsYWFjLCByYS1uYW1lcywgcmEtc3RhdGVsZXNzLgorCisuQiByYS1vbmx5CitpbmRpcXVlIMOgIGRuc21hc3EgZGUgbidlZmZlY3R1ZXIgcXVlIGRlcyBhbm5vbmNlcyBkZSByb3V0ZXVyIChSb3V0ZXIKK0FkdmVydGlzZW1lbnQsIFJBKSBzdXIgY2Ugc291cy1yw6lzZWF1LCBldCBkZSBuZSBwYXMgZmFpcmUgZGUgREhDUC4KKworLkIgc2xhYWMKK2luZGlxdWUgw6AgZG5zbWFzcSBkJ2VmZmVjdHVlciBkZXMgYW5ub25jZXMgZGUgcm91dGV1ciBzdXIgY2Ugc291cy1yw6lzZWF1CitldCBkZSBwb3NpdGlvbm5lciBkYW5zIGNlbGxlcy1jaSBsZSBiaXQgQSwgYWZpbiBxdWUgbGVzIGNsaWVudHMgdXRpbGlzZW50CitkZXMgYWRyZXNzZXMgU0xBQUMuIExvcnNxdSd1dGlsaXPDqSBjb25qb2ludGVtZW50IGF2ZWMgdW5lIHBsYWdlIERIQ1Agb3UgZGVzCithZmZlY3RhdGlvbnMgc3RhdGlxdWVzIGQnYWRyZXNzZXMgREhDUCwgbGVzIGNsaWVudHMgZGlzcG9zZXJvbnQgw6AgbGEgZm9pcworZCdhZHJlc3NlcyBESENQIGFzc2lnbsOpZXMgZXQgZCdhZHJlc3NlcyBTTEFBQy4KKworLkIgcmEtc3RhdGVsZXNzCitpbmRpcXVlIMOgIGRuc21hc3EgZCdlZmZlY3R1ZXIgZGVzIGFubm9uY2VzIGRlIHJvdXRldXIgYXZlYyBsZXMgYml0cyAwIGV0IEEKK3Bvc2l0aW9ubsOpcywgZXQgZGUgZm91cm5pciB1biBzZXJ2aWNlIERIQ1Agc2FucyDDqXRhdCAoInN0YXRlbGVzcyIpLiBMZXMgY2xpZW50cwordXRpbGlzZXJvbnQgZGVzIGFkcmVzc2VzIFNMQUFDLCBldCB1dGlsaXNlcm9udCBESENQIHBvdXIgdG91dGVzIGxlcyBhdXRyZXMKK2luZm9ybWF0aW9ucyBkZSBjb25maWd1cmF0aW9uLgorCisuQiByYS1uYW1lcworYWN0aXZlIHVuIG1vZGUgcXVpIGZvdXJuaSBkZXMgbm9tcyBETlMgYXV4IGjDtHRlcyBmb25jdGlvbm5hbnQgZW4gZG91YmxlIHBpbGUKKygiZHVhbCBzdGFjayIpIGV0IGNvbmZpZ3Vyw6lzIHBvdXIgZmFpcmUgZHUgU0xBQUMgZW4gSVB2Ni4gRG5zbWFzcSB1dGlsaXNlIGxlCitiYWlsIElQdjQgZGUgbCdow7R0ZSBhZmluIGRlIGTDqXJpdmVyIGxlIG5vbSwgbGUgc2VnbWVudCBkZSByw6lzZWF1IGV0IGwnYWRyZXNzZQorTUFDIGV0IGFzc3VtZSBxdWUgbCdow7R0ZSBkaXNwb3NlcmEgZCd1bmUgYWRyZXNzZSBJUHY2IGNhbGN1bMOpZSB2aWEgbCdhbGdvcml0aG1lCitTTEFBQywgc3VyIGxlIG3Dqm1lIHNlZ21lbnQgZGUgcsOpc2VhdS4gVW4gcGluZyBlc3QgZW52b3nDqSDDoCBsJ2FkcmVzc2UsIGV0IHNpIHVuZQorcsOpcG9uc2UgZXN0IG9idGVudWUsIHVuIGVucmVnaXN0cmVtZW50IEFBQUEgZXN0IHJham91dMOpIGRhbnMgbGUgRE5TIHBvdXIgY2V0dGUKK2FkcmVzc2UgSVB2Ni4gVmV1aWxsZXotbm90ZXIgcXVlIGNlbGEgbidhcnJpdmUgcXVlIHBvdXIgbGVzIHLDqXNlYXV4IGRpcmVjdGVtZW50Citjb25uZWN0w6lzIChldCBub24gY2V1eCBwb3VyIGxlc3F1ZWxzIERIQ1Agc2UgZmFpdCB2aWEgcmVsYWkpLCBldCBuZQorZm9uY3Rpb25uZXJhIHBhcyBzaSB1biBow7R0ZSB1dGlsaXNlIGxlcyAiZXh0ZW5zaW9ucyBkZSB2aWUgcHJpdsOpZSIKKygicHJpdmFjeSBleHRlbnNpb25zIikuCisuQiByYS1uYW1lcworcGV1dC3DqnRyZSBjb21iaW7DqSBhdmVjCisuQiByYS1zdGF0ZWxlc3MKK2V0CisuQiBzbGFhYy4KKworLlRQCisuQiBcLUcsIC0tZGhjcC1ob3N0PVs8YWRyZXNzZSBtYXTDqXJpZWxsZT5dWyxpZDo8aWRlbnRpZmlhbnQgY2xpZW50PnwqXVssc2V0OjxsYWJlbD5dWyw8YWRyZXNzZSBJUD5dWyw8bm9tIGQnaMO0dGU+XVssPGR1csOpZSBkZSBiYWlsPl1bLGlnbm9yZV0KK1Nww6ljaWZpZSBsZXMgcGFyYW3DqHRyZXMgREhDUCByZWxhdGlmcyDDoCB1biBow7R0ZS4gQ2VsYSBwZXJtZXQgw6AgdW5lIG1hY2hpbmUKK3Bvc3PDqWRhbnQgdW5lIGFkcmVzc2UgbWF0w6lyaWVsbGUgc3DDqWNpZmlxdWUgZGUgc2Ugdm9pciB0b3Vqb3VycyBhbGxvdcOpZSBsZXMKK23Dqm1lcyBub20gZCdow7R0ZSwgYWRyZXNzZSBJUCBldCBkdXLDqWUgZGUgYmFpbC4gVW4gbm9tIGQnaMO0dGUgc3DDqWNpZmnDqSBjb21tZQorY2VjaSByZW1wbGFjZSBsZSBub20gZm91cm5pIHBhciBsZSBjbGllbnQgREhDUCBkZSBsYSBtYWNoaW5lIGjDtHRlLiBJbCBlc3QKK8OpZ2FsZW1lbnQgcG9zc2libGUgZCdvbWV0dHJlIGwnYWRyZXNzZSBtYXTDqXJpZWxsZSBldCBkJ2luY2x1cmUgbGUgbm9tIGQnaMO0dGUsCithdXF1ZWwgY2FzIGwnYWRyZXNzZSBJUCBldCBsYSBkdXLDqWUgZGUgYmFpbCBzJ2FwcGxpcXVlcm9udCDDoCB0b3V0ZSBtYWNoaW5lIHNlCityw6ljbGFtYW50IGRlIGNlIG5vbS4gUGFyIGV4ZW1wbGUKKy5CIC0tZGhjcC1ob3N0PTAwOjIwOmUwOjNiOjEzOmFmLHdhcCxpbmZpbml0ZSAKK3Nww6ljaWZpZSDDoCBEbnNtYXNxIGRlIGZvdXJuaXIgw6AgbGEgbWFjaGluZSBkJ2FkcmVzc2UgbWF0w6lyaWVsbGUKKzAwOjIwOmUwOjNiOjEzOmFmIGxlIG5vbSwgZXQgdW4gYmFpbCBkZSBkdXLDqWUgaW5kw6l0ZXJtaW7DqWUuCisKKy5CIC0tZGhjcC1ob3N0PWxhcCwxOTIuMTY4LjAuMTk5IAorc3DDqWNpZmllIMOgIERuc21hc3EgZCdhbGxvdWVyIHRvdWpvdXJzIMOgIGxhIG1hY2hpbmUgcG9ydGFudCBsZSBub20gbGFwCitsJ2FkcmVzc2UgSVAgMTkyLjE2OC4wLjE5OS4KKworTGVzIGFkcmVzc2VzIGFsbG91w6llcyBkZSBsYSBzb3J0ZSBuZSBzb250IHBhcyBjb250cmFpbnRlcyDDoCB1bmUgcGxhZ2UgZCdhZHJlc3NlCitzcMOpY2lmacOpZSBwYXIgdW5lIG9wdGlvbiAtLWRoY3AtcmFuZ2UsIG1haXMgZWxsZXMgc2UgdHJvdXZlciBkYW5zIGxlIG3Dqm1lCitzb3VzLXLDqXNlYXUgcXUndW5lIHBsYWdlIGRoY3AtcmFuZ2UgdmFsaWRlLiBQb3VyIGxlcyBzb3VzLXLDqXNlYXV4IHF1aSBuJ29udCBwYXMKK2Jlc29pbiBkJ2FkcmVzc2VzIGR5bmFtaXF1ZW1lbnQgYWxsb3XDqWVzLCB1dGlsaXNlciBsZSBtb3QtY2xlZiAic3RhdGljIiBkYW5zIGxhCitkw6ljbGFyYXRpb24gZGUgcGxhZ2UgZCdhZHJlc3NlcyBkaGNwLXJhbmdlLgorCitJbCBlc3QgcG9zc2libGUgZCd1dGlsaXNlciBkZXMgaWRlbnRpZmlhbnRzIGNsaWVudHMgKGFwcGVsbMOpICJEVUlEIGNsaWVudCIgZGFucworbGUgbW9uZGUgSVB2NikgcGx1dMO0dCBxdWUgZGVzIGFkcmVzc2VzIG1hdMOpcmllbGxlcyBwb3VyIGlkZW50aWZpZXIgbGVzIGjDtHRlcywKK2VuIHByw6lmaXhhbnQgY2V1eC1jaSBwYXIgJ2lkOicuIEFpbnNpLCAKKy5CIC0tZGhjcC1ob3N0PWlkOjAxOjAyOjAzOjA0LC4uLi4uIAorcsOpZsOocmUgw6AgbCdow7R0ZSBkJ2lkZW50aWZpYW50IDAxOjAyOjAzOjA0LiBJbCBlc3Qgw6lnYWxlbWVudCBwb3NzaWJsZSBkZQorc3DDqWNpZmllciBsJ2lkZW50aWZpYW50IGNsaWVudCBzb3VzIGxhIGZvcm1lIGQndW5lIGNoYcOubmUgZGUgY2FyYWN0w6hyZXMsIGNvbW1lCitjZWNpIDoKKy5CIC0tZGhjcC1ob3N0PWlkOmlkZW50aWZpYW50Y2xpZW50c291c2Zvcm1lZGVjaGFpbmUsLi4uLi4gCisKK1VuIHNldWwKKy5CIGRoY3AtaG9zdCAKK3BldXQgY29udGVuaXIgdW5lIGFkcmVzc2UgSVB2NCwgdW5lIGFkcmVzc2UgSVB2Niwgb3UgbGVzIGRldXggZW4gbcOqbWUgdGVtcHMuCitMZXMgYWRyZXNzZXMgSVB2NiBkb2l2ZW50LcOqdHJlIG1pc2VzIGVudHJlIGNyb2NoZXRzIGNvbW1lIHN1aXQgOgorLkIgLS1kaGNwLWhvc3Q9bGFwdG9wLFsxMjM0Ojo1Nl0KK0xlcyBhZHJlc3NlcyBJUHY2IHBldXZlbnQgbmUgY29udGVuaXIgcXVlIGxhIHBhcnRpZSBpZGVudGlmaWFudCBkZSBjbGllbnQgOgorLkIgLS1kaGNwLWhvc3Q9bGFwdG9wLFs6OjU2XQorRGFucyBjZSBjYXMsIGxvcnNxdWUgZGVzIHBsYWdlcyBkaGNwIHNvbnQgZMOpZmluaWVzIGF1dG9tYXRpcXVlbWVudCBwYXIgbGUgYmlhaXMKK2RlIGNvbnN0cnVjdGV1cnMsIGxhIHBhcnRpZSByw6lzZWF1IGNvcnJlc3BvbmRhbnRlIGVzdCByYWpvdXTDqWUgw6AgbCdhZHJlc3NlLgorCitBIG5vdGVyIHF1ZSBwb3VyIGxlIERIQ1AgSVB2NiwgbCdhZHJlc3NlIG1hdMOpcmllbGxlIG4nZXN0IHBhcyB0b3Vqb3VycworZGlzcG9uaWJsZSwgYmllbiBxdWUgY2Ugc29pdCB0b3Vqb3VycyBsZSBjYXMgcG91ciBkZXMgY2xpZW50cyBkaXJlY3RlbWVudAorY29ubmVjdMOpcyAoc3VyIGxlIG3Dqm1lIGRvbWFpbmUgZGUgYnJvYWRjYXN0KSBvdSBwb3VyIGRlcyBjbGllbnRzIHV0aWxpc2FudAorZGVzIHJlbGFpcyBESENQIHF1aSBzdXBwb3J0ZW50IGxhIFJGQyA2OTM5LgorCitFbiBESENQdjQsIGwnb3B0aW9uIHNww6ljaWFsZSBpZDoqIHNpZ25pZmllIDogImlnbm9yZXIgdG91dCBpZGVudGlmaWFudCBjbGllbnQgZXQgbid1dGlsaXNlcgorcXVlIGwnYWRyZXNzZSBtYXTDqXJpZWxsZSIuIENlbGEgZXN0IHV0aWxlIGxvcnNxdSd1biBjbGllbnQgcHLDqXNlbnRlIHVuCitpZGVudGlmaWFudCBjbGllbnQgbWFpcyBwYXMgbGVzIGF1dHJlcy4KKworU2kgdW4gbm9tIGFwcGFyYcOudCBkYW5zIC9ldGMvaG9zdHMsIGwnYWRyZXNzZSBhc3NvY2nDqWUgcGV1dCDDqnRyZSBhbGxvdcOpZSDDoCB1bgorYmFpbCBESENQIG1haXMgc2V1bGVtZW50IHNpIHVuZSBvcHRpb24KKy5CIC0tZGhjcC1ob3N0CitzcMOpY2lmaWFudCBsZSBub20gZXhpc3RlIHBhciBhaWxsZXVycy4gU2V1bCB1biBub20gZCdow7R0ZSBwZXV0LcOqdHJlIGRvbm7DqSBkYW5zCit1bmUgb3B0aW9uCisuQiBkaGNwLWhvc3QKKywgbWFpcyBsZXMgYWxpYXMgc29udCBwb3NzaWJsZXMgYXUgdHJhdmVycyBkZSBsJ3V0aWxpc2F0aW9uIGRlcyBDTkFNRXMuIChWb2lyCisuQiAtLWNuYW1lCispLgorTGUgbW90IGNsZWYgImlnbm9yZSIgKCJpZ25vcmVyIikgaW5kaXF1ZQorw6AgRG5zbWFzcSBkZSBuZSBqYW1haXMgZm91cm5pciBkZSBiYWlsIERIQ1Agw6AgdW5lIG1hY2hpbmUuIExhIG1hY2hpbmUgcGV1dCDDqnRyZQorc3DDqWNpZmnDqWUgcGFyIHNvbiBhZHJlc3NlIG1hdMOpcmllbGxlLCBzb24gaWRlbnRpZmlhbnQgY2xpZW50IG91IHNvbiBub20gZCdow7R0ZS4KK1BhciBleGVtcGxlCisuQiAtLWRoY3AtaG9zdD0wMDoyMDplMDozYjoxMzphZixpZ25vcmUKK0NlbGEgZXN0IHV0aWxlIGxvcnNxdSd1biBhdXRyZSBzZXJ2ZXVyIERIQ1Agc3VyIGxlIHLDqXNlYXUgZG9pdCDDqnRyZSB1dGlsaXPDqSBwYXIKK2NlcnRhaW5lcyBtYWNoaW5lcy4KKworTGUgcGFyYW3DqHRyZSBzZXQ6PGlkZW50aWZpYW50IHLDqXNlYXU+IHBlcm1ldCBkZSBkw6lmaW5pciB1bgoraWRlbnRpZmlhbnQgZGUgcsOpc2VhdSBsb3JzcXVlIGwnb3B0aW9uIGRoY3AtaG9zdCBlc3QgdXRpbGlzw6llLiBDZWxhIHBldXQgc2VydmlyCivDoCBzw6lsZWN0aW9ubmVyIGRlcyBvcHRpb25zIERIQ1AganVzdGUgcG91ciBjZXQgaMO0dGUuIFBsdXMgZCd1biBsYWJlbCBwZXV0IMOqdHJlCitmb3VybmkgZGFucyB1bmUgZGlyZWN0aXZlIGRoY3AtaG9zdCAoZXQgZGFucyBjZXR0ZSBzZXVsZSBkaXJlY3RpdmUpLiBMb3JzcXUndW5lCittYWNoaW5lIGNvw69uY2lkZSBhdmVjIHVuZSBkaXJlY3RpdmUgZGhjcC1ob3N0IChvdSB1bmUgaW1wbGlxdcOpZSBwYXIKKy9ldGMvZXRoZXJzKSwgYWxvcnMgbGUgbGFiZWwgcsOpc2VydsOpICJrbm93biIgKCJjb25udSIpIGVzdCBhc3NvY2nDqS4gQ2VsYSBwZXJtZXQgw6AKK0Ruc21hc3EgZCfDqnRyZSBjb25maWd1csOpIHBvdXIgaWdub3JlciBsZXMgcmVxdcOqdGVzIGlzc3VzIGRlIG1hY2hpbmVzIGluY29ubnVlCisgcGFyIGxlIGJpYWlzIGRlIAorLkIgLS1kaGNwLWlnbm9yZT10YWc6IWtub3duLgorCitMZXMgYWRyZXNzZXMgZXRoZXJuZXQgKG1haXMgcGFzIGxlcyBpZGVudGlmaWFudHMgY2xpZW50cykgcGV1dmVudCDDqnRyZSBkw6lmaW5pZXMKK2F2ZWMgZGVzIG9jdGV0cyBqb2tlciwgYWluc2kgcGFyIGV4ZW1wbGUKKy5CIC0tZGhjcC1ob3N0PTAwOjIwOmUwOjNiOjEzOiosaWdub3JlIAorZGVtYW5kZSDDoCBEbnNtYXNxIGQnaWdub3JlciB1bmUgZ2FtbWUgZCdhZHJlc3NlcyBtYXTDqXJpZWxsZXMuIElsIGVzdCAgw6Agbm90ZXIKK3F1ZSAiKiIgZG9pdC3DqnRyZSBwcsOpY8OpZMOpIGQndW4gY2FyYWN0w6hyZSBkJ8OpY2hhcHBlbWVudCBvdSBtaXMgZW50cmUgZ3VpbGxlbWV0cworbG9yc3F1ZSBzcMOpY2lmacOpIGVuIG9wdGlvbiBkZSBsaWduZSBkZSBjb21tYW5kZSwgbWFpcyBwYXMgZGFucyBsZSBmaWNoaWVyIGRlCitjb25maWd1cmF0aW9uLgorCitMZXMgYWRyZXNzZXMgbWF0w6lyaWVsbGVzIGNvw69uY2lkZW50IGVuIHByaW5jaXBlIGF2ZWMgbidpbXBvcnRlCitxdWVsIHR5cGUgZGUgcsOpc2VhdSAoQVJQKSwgbWFpcyBpbCBlc3QgcG9zc2libGUgZGUgbGVzIGxpbWl0ZXIgw6AgdW4gc2V1bCB0eXBlCitBUlAgZW4gbGVzIHByw6ljw6lkYW50IGR1IHR5cGUgQVJQIChlbiBIZXhhZMOpY2ltYWwpIGV0IGRlICItIi4gQWluc2kKKy5CIC0tZGhjcC1ob3N0PTA2LTAwOjIwOmUwOjNiOjEzOmFmLDEuMi4zLjQgCitjb8OvbmNpZGVyYSB1bmlxdWVtZW50IGF2ZWMgZGVzIGFkcmVzc2VzIG1hdMOpcmllbGxlcyBUb2tlbi1SaW5nLCBwdWlzcXVlIGxlIHR5cGUKK0FSUCBwb3VyIHVuZSBhZHJlc3NlIFRva2VuLVJpbmcgZXN0IDYuCisKK1VuIGNhcyBzcMOpY2lhbCwgcG91ciBJUHY0LCBjb3JyZXNwb25kIMOgIGwnaW5jbHVzaW9uIGQndW5lIG91IHBsdXNpZXVycyBhZHJlc3NlcworbWF0w6lyaWVsbGVzLCBjLcOgLWQgOgorLkIgLS1kaGNwLWhvc3Q9MTE6MjI6MzM6NDQ6NTU6NjYsMTI6MzQ6NTY6Nzg6OTA6MTIsMTkyLjE2OC4wLjIuCitDZWxhIHBlcm1ldCDDoCB1bmUgYWRyZXNzZSBJUCBkJ8OqdHJlIGFzc29jacOpIMOgIHBsdXNpZXVycyBhZHJlc3NlcworbWF0w6lyaWVsbGVzLCBldCBkb25uZSDDoCBkbnNtYXNxIGxhIHBlcm1pc3Npb24gZCdhYmFuZG9ubmVyIHVuIGJhaWwgREhDUAorYXR0cmlidcOpIMOgIGwndW5lIGRlIGNlcyBhZHJlc3NlcyBsb3JzcXUndW5lIGF1dHJlIGFkcmVzc2UgZGFucyBsYSBsaXN0ZQorZGVtYW5kZSB1biBiYWlsLiBDZWNpIGVzdCB1bmUgb3DDqXJhdGlvbiBkYW5nZXJldXNlIHF1aSBuZSBmb25jdGlvbm5lcmEKK2RlIG1hbmnDqHJlIGZpYWJsZSBxdWUgc2kgdW5lIGFkcmVzc2UgbWF0w6lyaWVsbGUgZXN0IGFjdGl2ZSDDoCB1biBtb21lbnQKK2Rvbm7DqSBldCBkbnNtYXNxIG4nYSBhdWN1biBtb3llbiBkZSBzJ2Fzc3VyZXIgZGUgY2VsYS4gQ2VsYSBlc3QgdXRpbGUsCitwYXIgZXhlbXBsZSwgcG91ciBhbGxvdWVyIHVuZSBhZHJlc3NlIElQIHN0YWJsZSDDoCB1biBsYXB0b3AgcXVpCithdXJhaXQgw6AgbGEgZm9pcyB1bmUgY29ubmV4aW9uIGZpbGFpcmUgZXQgc2Fucy1maWwuCisuVFAKKy5CIC0tZGhjcC1ob3N0c2ZpbGU9PGNoZW1pbj4KK0xpcyBsZXMgaW5mb3JtYXRpb25zIGQnaMO0dGVzIERIQ1AgZGFucyBsZSBmaWNoaWVyIHNww6ljaWZpw6kuIFNpIGwnYXJndW1lbnQgZXN0Cit1biBjaGVtaW4gdmVycyB1biByw6lwZXJ0b2lyZSwgbGlzIHRvdXMgbGVzIGZpY2hpZXJzIGRlIGNlIHLDqXBlcnRvaXJlLiBMZQorZmljaGllciBjb250aWVudCBkZXMgaW5mb3JtYXRpb25zIMOgIHJhaXNvbiBkJ3VuIGjDtHRlIHBhciBsaWduZS4gTGUgZm9ybWF0CitkJ3VuZSBsaWduZSBlc3QgbGEgbcOqbWUgcXVlIGxlIHRleHRlIGZvdXJuaSDDoCBsYSBkcm9pdGUgc3VyIGNhcmFjdMOocmUgIj0iIGRhbnMKK2wnb3B0aW9uCisuQiAtLWRoY3AtaG9zdC4KK0wnYXZhbnRhZ2UgZGUgc3RvY2tlciBsZXMgaW5mb3JtYXRpb25zIHN1ciBsZXMgaMO0dGVzIERIQ1AgZGFucyBjZSBmaWNoaWVyIGVzdAorcXVlIGNlbGxlcy1jaSBwZXV2ZW50IMOqdHJlIG1vZGlmacOpZXMgc2FucyByZWNoYXJnZXIgRG5zbWFzcTsgbGUgZmljaGllciBzZXJhCityZWx1IGxvcnNxdWUgRG5zbWFzcSByZcOnb2l0IHVuIHNpZ25hbCBTSUdIVVAuCisuVFAKKy5CIC0tZGhjcC1vcHRzZmlsZT08Y2hlbWluPgorTGlzIGxlcyBpbmZvcm1hdGlvbnMgcmVsYXRpdmVzIGF1eCBvcHRpb25zIERIQ1AgZGFucyBsZSBmaWNoaWVyIHNww6ljaWZpw6kuIFNpCitsJ2FyZ3VtZW50IGVzdCB1biBjaGVtaW4gdmVycyB1biByw6lwZXJ0b2lyZSwgbGlzIHRvdXMgbGVzIGZpY2hpZXJzIGRlIGNlCityw6lwZXJ0b2lyZS4gTCdpbnTDqXLDqnQgZCd1dGlsaXNlciBjZXR0ZSBvcHRpb24gZXN0IGxlIG3Dqm1lIHF1ZSBwb3VyCisgLS1kaGNwLWhvc3RzZmlsZSA6IGxlIGZpY2hpZXIgc3DDqWNpZmnDqSBzZXJhIHJlY2hhcmfDqSDDoCBsYSByw6ljZXB0aW9uIHBhcgorZG5zbWFzcSBkJ3VuIHNpZ25hbCBTSUdIVVAuIE5vdGV6IHF1J2lsIGVzdCBwb3NzaWJsZSBkJ2VuY29kZXIgbCdpbmZvcm1hdGlvbgordmlhCisuQiAtLWRoY3AtYm9vdAorZW4gdXRpbGlzYW50IGxlcyBub21zIG9wdGlvbm5lbHMgYm9vdGZpbGUtbmFtZSwgc2VydmVyLWlwLWFkZHJlc3MgZXQKK3RmdHAtc2VydmVyLiBDZWNpIHBlcm1ldCBkJ2luY2x1cmUgY2VzIG9wdGlvbnMgZGFucyB1biBmaWNoaWVyICJkaGNwLW9wdHNmaWxlIi5ETlNNQVNRX1NVUFBMSUVEX0hPU1ROQU1FCisuVFAKKy5CIFwtWiwgLS1yZWFkLWV0aGVycworTGlzIGxlcyBpbmZvcm1hdGlvbnMgZCdow7R0ZXMgREhDUCBkYW5zIGxlIGZpY2hpZXIgL2V0Yy9ldGhlcnMuIExlIGZvcm1hdCBkZQorL2V0Yy9ldGhlcnMgZXN0IHVuZSBhZHJlc3NlIG1hdMOpcmllbGxlIHN1aXZpZSwgc29pdCBwYXIgdW4gbm9tIGQnaMO0dGUsIHNvaXQgcGFyCit1bmUgYWRyZXNzZSBJUCBzb3VzIGxhIGZvcm1lIGRlIDQgY2hpZmZyZXMgc8OpcGFyw6lzIHBhciBkZXMgcG9pbnRzLiBMb3JzcXVlIGx1CitwYXIgRG5zbWFzcSwgY2VzIGxpZ25lcyBvbnQgZXhhY3RlbWVudCBsZSBtw6ptZSBlZmZldCBxdWUgbCdvcHRpb24KKy5CIC0tZGhjcC1ob3N0Citjb250ZW5hbnQgbGVzIG3Dqm1lcyBpbmZvcm1hdGlvbnMuIC9ldGMvZXRoZXJzIGVzdCByZWx1IMOgIGxhIHLDqWNlcHRpb24gZCd1bgorc2lnbmFsIFNJR0hVUCBwYXIgRG5zbWFzcS4gTGVzIGFkcmVzc2VzIElQdjYgbmUgc29udCBQQVMgbHVlcyBkYW5zIC9ldGMvZXRoZXJzLgorLlRQCisuQiBcLU8sIC0tZGhjcC1vcHRpb249W3RhZzo8bGFiZWw+LFt0YWc6PGxhYmVsPl1dW2VuY2FwOjxvcHRpb24+LF1bdmktZW5jYXA6PGVudHJlcHJpc2U+LF1bdmVuZG9yOls8Y2xhc3NlX3ZlbmRldXI+XSxdWzxvcHRpb24+fG9wdGlvbjo8bm9tIGQnb3B0aW9uPnxvcHRpb242OjxvcHRpb24+fG9wdGlvbjY6PG5vbSBkJ29wdGlvbj5dLFs8dmFsZXVyPlssPHZhbGV1cj5dXQorU3DDqWNpZmllIGRlcyBvcHRpb25zIGRpZmbDqXJlbnRlcyBvdSBzdXBwbMOpbWVudGFpcmVzIHBvdXIgZGVzIGNsaWVudHMgREhDUC4gUGFyCitkw6lmYXV0LCBEbnNtYXNxIGVudm9pZSB1biBlbnNlbWJsZSBzdGFuZGFyZCBkJ29wdGlvbnMgYXV4IGNsaWVudHMgREhDUCA6IGxlCittYXNxdWUgZGUgcsOpc2VhdSBldCBsJ2FkcmVzc2UgZGUgYnJvYWRjYXN0IHNvbnQgbGVzIG3Dqm1lcyBxdWUgcG91ciBsJ2jDtHRlCitzdXIgbGVxdWVsIHRvdXJuZSBEbnNtYXNxLCBldCBsZSBzZXJ2ZXVyIEROUyBhaW5zaSBxdWUgbGEgcm91dGUgcGFyIGTDqWZhdXQKK3ByZW5uZW50IGNvbW1lIHZhbGV1ciBsJ2FkcmVzc2UgZGUgbGEgbWFjaGluZSBzdXIgbGFxdWVsbGUgdG91cm5lIERuc21hc3EuIAorKERlcyByw6hnbGVzIMOpcXVpdmFsZW50ZXMgcydhcHBsaXF1ZW50IGVuIElQdjYpLiBTaSB1bmUgb3B0aW9uIGRlIG5vbSBkZSBkb21haW5lCithIMOpdMOpIGTDqWZpbmllLCBzb24gY29udGVudSBlc3QgdHJhbnNtaXMuIENldHRlIG9wdGlvbiBkZSBjb25maWd1cmF0aW9uIHBlcm1ldAorZGUgY2hhbmdlciB0b3V0ZXMgY2VzIHZhbGV1cnMgcGFyIGTDqWZhdXQsIG91IGRlIHNww6ljaWZpZXIgZCdhdXRyZXMgb3B0aW9ucy4KK0wnb3B0aW9uIERIQ1Agw6AgdHJhbnNtZXR0cmUgcGV1dCDDqnRyZSBmb3VybmllIHNvdXMgZm9ybWUgZCd1biBub21icmUgZMOpY2ltYWwgCitvdSBzb3VzIGxhIGZvcm1lICJvcHRpb246PG5vbSBkJ29wdGlvbj4iLiBMZXMgbm9tYnJlcyBjb3JyZXNwb25kYW50cyBhdXggb3B0aW9ucworc29udCBkw6lmaW5pcyBkYW5zIGxhIFJGQzIxMzIgZXQgc3VpdmFudHMuIExlcyBub21zIGQnb3B0aW9ucyBjb25udXMgcGFyIERuc21hc3EgCitwZXV2ZW50IMOqdHJlIG9idGVudXMgdmlhICJEbnNtYXNxIC0taGVscCBkaGNwIi4gUGFyIGV4ZW1wbGUsIHBvdXIgZMOpZmluaXIgbGEKK3JvdXRlIHBhciBkw6lmYXV0IMOgIDE5Mi4xNjguNC40LCBpbCBlc3QgcG9zc2libGUgZGUgZmFpcmUKKy5CIC0tZGhjcC1vcHRpb249MywxOTIuMTY4LjQuNCAKK291CisuQiAtLWRoY3Atb3B0aW9uID0gb3B0aW9uOnJvdXRlciwgMTkyLjE2OC40LjQKK291IGVuY29yZSwgcG91ciBwb3NpdGlvbm5lciBsJ2FkcmVzc2UgZHUgc2VydmV1ciBkZSB0ZW1wcyDDoCAxOTIuMTY4LjAuNCwgb24gcGV1dAorZmFpcmUKKy5CIC0tZGhjcC1vcHRpb24gPSA0MiwxOTIuMTY4LjAuNCAKK291IAorLkIgLS1kaGNwLW9wdGlvbiA9IG9wdGlvbjpudHAtc2VydmVyLCAxOTIuMTY4LjAuNAorTCdhZHJlc3NlIDAuMC4wLjAgcHJlbmRzIGljaSBsZSBzZW5zICJkJ2FkcmVzc2UgZGUgbGEgbWFjaGluZSBzdXIgbGFxdWVsbGUKK3RvdXJuZSBEbnNtYXNxIi4gTGVzIHR5cGVzIGRlIGRvbm7DqWVzIGF1dG9yaXPDqWVzIHNvbnQgZGVzIGFkcmVzc2VzIElQIHNvdXMgbGEKK2Zvcm1lIGRlIDQgY2hpZmZyZXMgc8OpcGFyw6lzIHBhciBkZXMgcG9pbnRzLCB1biBub21icmUgZMOpY2ltYWwsIHVuZSBsaXN0ZSBkZQorY2FyYWN0w6hyZXMgaGV4YWTDqWNpbWF1eCBzw6lwYXLDqXMgcGFyIGRlcyAyIHBvaW50cywgb3UgdW5lIGNoYcOubmUgZGUgY2FyYWN0w6hyZXMuCitTaSBkZXMgbGFiZWxzIG9wdGlvbm5lbHMgc29udCBmb3VybmlzLCBhbG9ycyBjZXR0ZSBvcHRpb24gbidlc3QgZW52b3nDqWUKK3F1J2F1eCByw6lzZWF1eCBkb250IHRvdXMgbGVzIGxhYmVscyBjb8OvbmNpZGVudCBhdmVjIGNldXggZGUgbGEgcmVxdcOqdGUuCisKK1VuIHRyYWl0ZW1lbnQgc3DDqWNpYWwgZXN0IGVmZmVjdHXDqSBzdXIgbGVzIGNoYcOubmVzIGRlIGNhcmFjdMOocmVzIGZvdXJuaWVzIHBvdXIKK2wnb3B0aW9uIDExOSwgY29uZm9ybcOpbWVudCDDoCBsYSBSRkMgMzM5Ny4gTGVzIGNoYcOubmVzIGRlIGNhcmFjdMOocmVzIG91IGxlcworYWRyZXNzZXMgSVAgc291cyBmb3JtZSBkZSA0IGNoaWZmcmVzIHPDqXBhcsOpcyBwYXIgZGVzIHBvaW50cyBkb25uw6lzIGVuIGFyZ3VtZW50cworZGUgbCdvcHRpb24gMTIwIHNvbnQgdHJhaXTDqXMgY29uZm9ybcOpbWVudHMgw6AgbGEgUkZDIDMzNjEuIExlcyBhZHJlc3NlcyBJUCBzb3VzCitmb3JtZSBkZSA0IGNoaWZmcmVzIHPDqXBhcsOpcyBwYXIgZGVzIHBvaW50cyBzdWl2aWVzIHBhciB1bmUgYmFycmUgbW9udGFudGUgIi8iLAorcHVpcyB1bmUgdGFpbGxlIGRlIG1hc3F1ZSBzb250IGVuY29kw6lzIGNvbmZvcm3DqW1lbnRzIMOgIGxhIFJGQyAzNDQyLgorCitMZXMgb3B0aW9ucyBJUHY2IHNvbnQgZm91cm5pZXMgZW4gdXRpbGlzYW50IGxlIG1vdC1jbGVmCisuQiBvcHRpb242Ogorc3VpdmkgcGFyIGxlIG51bcOpcm8gZCdvcHRpb24gb3UgbGUgbm9tIGQnb3B0aW9uLiBMJ2VzcGFjZSBkZSBub21tYWdlIGRlcyBvcHRpb25zCitJUHY2IGVzdCBkaXNqaW50IGRlIGwnZXNwYWNlIGRlIG5vbW1hZ2UgZGVzIG9wdGlvbnMgSVB2NC4gTGVzIGFkcmVzc2VzIElQdjYKK2VuIG9wdGlvbiBkb2l2ZW50IMOqdHJlIGVudG91csOpZXMgZGUgY3JvY2hldHMsIGNvbW1lIHBhciBleGVtcGxlIDoKKy5CIC0tZGhjcC1vcHRpb249b3B0aW9uNjpudHAtc2VydmVyLFsxMjM0Ojo1Nl0KKworQXR0ZW50aW9uIDogYXVjdW4gdGVzdCBuJ8OpdGFudCBmYWl0IHBvdXIgdsOpcmlmaWVyIHF1ZSBkZXMgZG9ubsOpZXMgZCd1biB0eXBlCithZMOpcXVhdCBzb250IGVudm95w6llcyBwb3VyIHVuIG51bcOpcm8gZCdvcHRpb24gZG9ubsOpLCBpbCBlc3QgdG91dCDDoCBmYWl0IHBvc3NpYmxlCitkZSBwZXJzdWFkZXIgRG5zbWFzcSBkZSBnw6luw6lyZXIgZGVzIHBhcXVldHMgREhDUCBpbGzDqWdhdXggcGFyIHVuZSB1dGlsaXNhdGlvbgoraW5jb3JyZWN0ZSBkZSBjZXR0ZSBvcHRpb24uIExvcnNxdWUgbGEgdmFsZXVyIGVzdCB1biBub21icmUgZMOpY2ltYWwsIERuc21hc3EKK2RvaXQgZMOpdGVybWluZXIgbGEgdGFpbGxlIGRlcyBkb25uw6llcy4gQ2VsYSBlc3QgZmFpdCBlbiBleGFtaW5hbnQgbGUgbnVtw6lybyBkZQorbCdvcHRpb24gZXQvb3UgbGEgdmFsZXVyLCBtYWlzIHBldXQtw6p0cmUgw6l2aXTDqSBlbiByYWpvdXRhbnQgdW4gc3VmZml4ZSBkJ3VuZQorbGV0dHJlIGNvbW1lIHN1aXQgOgorYiA9IHVuIG9jdGV0LCBzID0gMiBvY3RldHMsIGkgPSA0IG9jdGV0cy4gQ2VsYSBzZXJ0IGVzc2VudGllbGxlbWVudCBwb3VyIGRlcworb3B0aW9ucyBlbmNhcHN1bMOpZXMgZGUgY2xhc3NlcyBkZSB2ZW5kZXVycyAodm9pciBwbHVzIGJhcyksIHBvdXIgbGVzcXVlbGxlcyAKK0Ruc21hc3EgbmUgcGV1dCBkw6l0ZXJtaW5lciBsYSB0YWlsbGUgZGUgbGEgdmFsZXVyLiBMZXMgZG9ubsOpZXMgZCdvcHRpb25zCitjb25zaXN0YW50IHVuaXF1ZW1lbnQgZGUgcG9pbnRzIGV0IGRlIGTDqWNpbWF1eCBzb250IGludGVycHLDqXTDqWVzIHBhciBEbnNtYXNxCitjb21tZSBkZXMgYWRyZXNzZXMgSVAsIGV0IGVudm95w6llcyBjb21tZSB0ZWxsZXMuIFBvdXIgZm9yY2VyIGwnZW52b2kgc291cyBmb3JtZQorZGUgY2hhw65uZSBkZSBjYXJhY3TDqHJlLCBpbCBlc3QgbsOpY2Vzc2FpcmUgZCd1dGlsaXNlciBkZXMgZ3VpbGxlbWV0cyBkb3VibGVzLiBQYXIKK2V4ZW1wbGUsIGwndXRpbGlzYXRpb24gZGUgbCdvcHRpb24gNjYgcG91ciBmb3VybmlyIHVuZSBhZHJlc3NlIElQIHNvdXMgbGEgZm9ybWUKK2QndW5lIGNoYcOubmUgZGUgY2FyYWN0w6hyZXMgY29tbWUgbm9tIGRlIHNlcnZldXIgVEZUUCwgaWwgZXN0IG7DqWNlc3NhaXJlIGRlIGZhaXJlCitjb21tZSBzdWl0IDoKKy5CIC0tZGhjcC1vcHRpb249NjYsIjEuMi4zLjQiCisKK0xlcyBvcHRpb25zIGVuY2Fwc3Vsw6llcyBkZSBjbGFzc2VzIGRlIHZlbmRldXJzIHBldXZlbnQtw6p0cmUgYXVzc2kgc3DDqWNpZmnDqWVzIAorKHBvdXIgSVB2NCBzZXVsZW1lbnQpIGVuIHV0aWxpc2FudAorLkIgLS1kaGNwLW9wdGlvbgorOiBwYXIgZXhlbXBsZQorLkIgLS1kaGNwLW9wdGlvbj12ZW5kb3I6UFhFQ2xpZW50LDEsMC4wLjAuMAorZW52b2llIGwnb3B0aW9uIGVuY2Fwc3Vsw6llIGRlIGNsYXNzZSBkZSB2ZW5kZXVyICJtZnRwLWFkZHJlc3M9MC4wLjAuMCIgw6AKK24naW1wb3J0ZSBxdWVsIGNsaWVudCBkb250IGxhIGNsYXNzZSBkZSB2ZW5kZXVyIGNvcnJlc3BvbmQgw6AgIlBYRUNsaWVudCIuIExhCitjb3JyZXNwb25kYW5jZSBwb3VyIGxlcyBjbGFzc2VzIGRlIHZlbmRldXIgcydlZmZlY3R1ZSBzdXIgZGVzIHNvdXMtY2hhw65uZXMgZGUKK2NhcmFjdMOocmVzICh2b2lyCisuQiAtLWRoY3AtdmVuZG9yY2xhc3MKK3BvdXIgcGx1cyBkZSBkw6l0YWlscykuIFNpIHVuZSBvcHRpb24gZGUKK2NsYXNzZSBkZSB2ZW5kZXVyIChudW3DqXJvIDYwKSBlc3QgZW52b3nDqWUgcGFyIERuc21hc3EsIGFsb3JzIGNlbGEgZXN0IHV0aWxpc8OpCitwb3VyIHPDqWxlY3Rpb25uZXIgbGVzIG9wdGlvbnMgZW5jYXBzdWzDqWVzLCBkZSBwcsOpZsOpcmVuY2Ugw6AgdG91dGUgb3B0aW9uIGVudm95w6llCitwYXIgbGUgY2xpZW50LiBJbCBlc3QgcG9zc2libGUgZCdvbWV0dHJlIGNvbXBsw6h0ZW1lbnQgdW5lIGNsYXNzZSBkZSB2ZW5kZXVyIDoKKy5CIC0tZGhjcC1vcHRpb249dmVuZG9yOiwxLDAuMC4wLjAKK0RhbnMgY2UgY2FzIGwnb3B0aW9uIGVuY2Fwc3Vsw6llIGVzdCB0b3Vqb3VycyBlbnZvecOpZS4KKworRW4gSVB2NCwgbGVzIG9wdGlvbnMgcGV1dmVudC3DqnRyZSBlbmNhcHN1bMOpZXMgYXUgc2VpbiBkJ2F1dHJlcyBvcHRpb25zIDoKK3BhciBleGVtcGxlCisuQiAtLWRoY3Atb3B0aW9uPWVuY2FwOjE3NSwgMTkwLCAiaXNjc2ktY2xpZW50MCIKK2VudmVycmEgbCdvcHRpb24gMTc1LCBhdSBzZWluIGRlIGxhcXVlbGxlIHNlIHRyb3V2ZSBsJ29wdGlvbiAxOTAuCitQbHVzaWV1cnMgb3B0aW9ucyBlbmNhcHN1bMOpZXMgYXZlYyBsZSBtw6ptZSBudW3DqXJvIGQnb3B0aW9uIHNlcm9udCBjb3JyZWN0ZW1lbnQKK2NvbWJpbsOpZXMgYXUgc2VpbiBkJ3VuZSBzZXVsZSBvcHRpb24gZW5jYXBzdWzDqWUuIElsIG4nZXN0IHBhcyBwb3NzaWJsZSBkZQorc3DDqWNpZmllciBlbmNhcDogZXQgdmVuZG9yOiBhdSBzZWluIGQndW5lIG3Dqm1lIG9wdGlvbiBkaGNwLgorCitMYSBkZXJuacOocmUgdmFyaWFudGUgcG91ciBsZXMgb3B0aW9ucyBlbmNhcHN1bMOpZXMgZXN0ICJsJ29wdGlvbiBkZSBWZW5kZXVyCitpZGVudGlmaWFudCBsZSB2ZW5kZXVyIiAoIlZlbmRvci1JZGVudGlmeWluZyBWZW5kb3IgT3B0aW9ucyIpIHRlbGxlIHF1ZQorZMOpY3JpdGUgZGFucyBsZSBSRkMzOTI1LiBDZWxsZXMtY2kgc29udCBzcMOpY2lmacOpZXMgY29tbWUgc3VpdCA6CisuQiAtLWRoY3Atb3B0aW9uPXZpLWVuY2FwOjIsIDEwLCAidGV4dCIKK0xlIG51bcOpcm8gZGFucyBsYSBzZWN0aW9uIHZpLWVuY2FwOiBlc3QgbGUgbnVtw6lybyBJQU5BIGRlIGwnZW50cmVwcmlzZSBzZXJ2YW50CivDoCBpZGVudGlmaWVyIGNldHRlIG9wdGlvbi4gQ2V0dGUgZm9ybWUgZCdlbmNhcHN1bGF0aW9uIGVzdCDDqWdhbGVtZW50IHN1cHBvcnTDqWUKK2VuIElQdjYuCisKK0wnYWRyZXNzZSAwLjAuMC4wIG4nZXN0IHBhcyB0cmFpdMOpZSBkZSBtYW5pw6hyZSBwYXJ0aWN1bGnDqHJlIGxvcnNxdWUgZm91cm5pZSBkYW5zCit1bmUgb3B0aW9uIGVuY2Fwc3Vsw6llLgorLlRQCisuQiAtLWRoY3Atb3B0aW9uLWZvcmNlPVt0YWc6PGxhYmVsPixbdGFnOjxsYWJlbD5dXVtlbmNhcDo8b3B0aW9uPixdW3ZpLWVuY2FwOjxlbnRyZXByaXNlPixdW3ZlbmRvcjpbPGNsYXNzZV92ZW5kZXVyPl0sXVs8b3B0aW9uPnxvcHRpb246PG5vbSBkJ29wdGlvbj5dLFs8dmFsZXVyPlssPHZhbGV1cj5dXQorQ2VsYSBmb25jdGlvbm5lIGV4YWN0ZW1lbnQgZGUgbGEgbcOqbWUgZmHDp29uIHF1ZQorLkIgLS1kaGNwLW9wdGlvbgorc2F1ZiBxdWUgY2V0dGUgb3B0aW9uIHNlcmEgdG91am91cnMgZW52b3nDqWUsIG3Dqm1lIHNpIGxlIGNsaWVudCBuZSBsYSBkZW1hbmRlIHBhcworZGFucyBsYSBsaXN0ZSBkZSBwYXJhbcOqdHJlcyByZXF1aXMuIENlbGEgZXN0IHBhcmZvaXMgbsOpY2Vzc2FpcmUsIHBhciBleGVtcGxlIGxvcnMKK2RlIGxhIGZvdXJuaXR1cmUgZCdvcHRpb25zIMOgIFBYRUxpbnV4LgorLlRQCisuQiAtLWRoY3Atbm8tb3ZlcnJpZGUKKyhJUHY0IHNldWxlbWVudCkgRMOpc2FjdGl2ZSBsYSByw6l1dGlsaXNhdGlvbiBkZXMgY2hhbXBzIERIQ1Agbm9tIGRlIHNlcnZldXIgZXQKK25vbSBkZSBmaWNoaWVyIGNvbW1lIGVzcGFjZSBzdXBwbMOpbWVudGFpcmUgcG91ciBsZXMgb3B0aW9ucy4gU2kgY2VsYSBlc3QKK3Bvc3NpYmxlLCBkbnNtYXNxIGTDqXBsYWNlIGxlcyBpbmZvcm1hdGlvbnMgc3VyIGxlIHNlcnZldXIgZGUgZMOpbWFycmFnZQorZXQgbGUgbm9tIGRlIGZpY2hpZXIgKGZvdXJuaXMgcGFyICdkaGNwLWJvb3QnKSBlbiBkZWhvcnMgZGVzIGNoYW1wcworZMOpZGnDqXMgw6AgY2V0IHVzYWdlIGRhbnMgbGVzIG9wdGlvbnMgREhDUC4gQ2V0IGVzcGFjZSBzdXBwbMOpbWVudGFpcmUgZXN0CithbG9ycyBkaXNwb25pYmxlIGRhbnMgbGUgcGFxdWV0IERIQ1AgcG91ciBkJ2F1dHJlcyBvcHRpb25zLCBtYWlzIHBldXQsIGRhbnMKK3F1ZWxxdWVzIHJhcmVzIGNhcywgcGVydHVyYmVyIGRlcyBjbGllbnRzIHZpZXV4IG91IGTDqWZlY3R1ZXV4LiBDZXR0ZQorb3B0aW9uIGZvcmNlIGxlIGNvbXBvcnRlbWVudCDDoCBsJ3V0aWxpc2F0aW9uIGRlcyB2YWxldXJzICJzaW1wbGVzIGV0IHPDu3JlcyIKK2FmaW4gZCfDqXZpdGVyIGRlcyBwcm9ibMOobWVzIGRhbnMgZGUgdGVscyBjYXMuCisuVFAKKy5CIC0tZGhjcC1yZWxheT08YWRyZXNzZSBsb2NhbGU+LDxhZHJlc3NlIGRlIHNlcnZldXI+Wyw8aW50ZXJmYWNlXQorQ29uZmlndXJlIGRuc21hc3EgZW4gdGVtcHMgcXVlIHJlbGFpcyBESENQLiAgTCdhZHJlc3NlIGxvY2FsZSBlc3QgdW5lCithZHJlc3NlIGFsbG91w6llIMOgIGwndW5lIGludGVyZmFjZSBkZSBsYSBtYWNoaW5lIHN1ciBsYXF1ZWxsZSB0b3VybmUgZG5zbWFzcS4KK1RvdXRlcyBsZXMgcmVxdcOqdGVzIERIQ1AgYXJyaXZhbnQgc3VyIGNldHRlIGludGVyZmFjZSBzZXJvbnQgcmVsYXnDqWVzIGF1CitzZXJ2ZXVyIERIQ1AgZGlzdGFudCBjb3JyZXNwb25kYW50IMOgIGwnYWRyZXNzZSBkZSBzZXJ2ZXVyIGluZGlxdcOpZS4gSWwgZXN0Citwb3NzaWJsZSBkZSByZWxheWVyIGRlcHVpcyB1bmUgdW5pcXVlIGFkcmVzc2UgbG9jYWxlIHZlcnMgZGlmZsOpcmVudHMgc2VydmV1cnMKK2Rpc3RhbnQgZW4gc3DDqWNpZmlhbnQgcGx1c2lldXJzIGZvaXMgbCdvcHRpb24gZGhjcC1yZWxheSBhdmVjIGxhIG3Dqm1lIGFkcmVzc2UKK2xvY2FsZSBldCBkaWZmw6lyZW50ZXMgYWRyZXNzZXMgZGUgc2VydmV1ci4gTCdhZHJlc3NlIGRlIHNlcnZldXIgZG9pdC3DqnRyZQorc291cyBmb3JtZSBudW3DqXJpcXVlLiBEYW5zIGxlIGNhcyBkZSBESENQdjYsIGwnYWRyZXNzZSBkZSBzZXJ2ZXVyIHBldXQtw6p0cmUKK2wnYWRyZXNzZSBkZSBtdWx0aWNhc3QgZmYwNTo6MTozIGNvcnJlc3BvbmRhbnQgw6AgdG91cyBsZXMgc2VydmV1cnMgREhDUC4gRGFucworY2UgY2FzLCBsJ2ludGVyZmFjZSBkb2l0LcOpdHJlIHNww6ljaWZpw6llIGV0IG5lIHBldXQgY29tcG9ydGVyIGRlIGNhcmFjdMOocmUKK2pva2VyLiBFbGxlIHNlcmEgdXRpbGlzw6llIHBvdXIgaW5kaXF1ZXIgbCdpbnRlcmZhY2Ugw6AgcGFydGlyIGRlIGxhcXVlbGxlIGxlCittdWx0aWNhc3QgcG91cnJhIGF0dGVpbmRyZSBsZSBzZXJ2ZXVyIERIQ1AuCisKK0xlIGNvbnRyw7RsZSBkJ2FjY8OocyBwb3VyIGxlcyBjbGllbnRzIERIQ1Agc3VpdmVudCBsZXMgbcOqbWVzIHLDqGdsZXMgcXVlIHBvdXIKK2xlcyBzZXJ2ZXVycyBESENQIDogdm9pciAtLWludGVyZmFjZSwgLS1leGNlcHQtaW50ZXJmYWNlLCBldGMuIExlIG5vbQorZCdpbnRlcmZhY2Ugb3B0aW9uZWwgZGFucyBsJ29wdGlvbiBkaGNwLXJlbGF5IGNvbXBvcnRlIHVuZSBhdXRyZSBmb25jdGlvbiA6CitpbCBjb250csO0bGUgbCdpbnRlcmZhY2Ugc3VyIGxhcXVlbGxlIGxhIHLDqXBvbnNlIGR1IHNlcnZldXIgc2VyYSBhY2NlcHTDqWUuIENlbGEKK3NlcnQgcGFyIGV4ZW1wbGUgZGFucyBkZXMgY29uZmlndXJhdGlvbnMgw6AgMyBpbnRlcmZhY2VzIDogdW5lIMOgIHBhcnRpciBkZQorbGFxdWVsbGUgbGVzIHJlcXXDqnRlcyBzb250IHJlbGF5w6llcywgdW5lIHNlY29uZGUgcGVybWV0dGFudCBkZSBzZSBjb25uZWN0ZXIgw6AKK3VuIHNlcnZldXIgREhDUCwgZXQgdW5lIHRyb2lzacOobWUgcmVsacOpZSDDoCB1biByw6lzZWF1IG5vbi1zw6ljdXJpc8OpIHRlbAorcXUnaW50ZXJuZXQuIENlbGEgcGVybWV0IGQnw6l2aXRlciBsJ2Fycml2w6llIGRlIHJlcXXDqnRlcyB1c3VycMOpZXMgdmlhIGNldHRlCit0cm9pc2nDqG1lIGludGVyZmFjZS4KKworSWwgZXN0IHBlcm1pcyBkZSBjb25maWd1cmVyIGRuc21hc3EgcG91ciBmb25jdGlvbm5lciBjb21tZSBzZXJ2ZXVyIERIQ1Agc3VyCitjZXJ0YWluZXMgaW50ZXJmYWNlcyBldCBlbiB0ZW1wcyBxdWUgcmVsYWlzIHN1ciBkJ2F1dHJlcy4gQ2VwZW5kYW50LCBtw6ptZSBzJ2lsCitlc3QgcG9zc2libGUgZGUgY29uZmlndXJlciBkbnNtYXNxIGRlIHRlbGxlIG1hbmnDqHJlIHF1J2lsIHNvaXQgw6AgbGEgZm9pcworc2VydmV1ciBldCByZWxhaXMgcG91ciB1bmUgbcOqbWUgaW50ZXJmYWNlLCBjZWxhIG4nZXN0IHBhcyBzdXBwb3J0w6kgZXQgbGEKK2ZvbmN0aW9uIGRlIHJlbGFpcyBwcmVuZHJhIGxlIGRlc3N1cy4KKworTGUgcmVsYWlzIERIQ1B2NCBldCBsZSByZWxhaXMgREhDUHY2IHNvbnQgdG91cyBsZXMgZGV1eCBzdXBwb3J0w6lzLCBtYWlzIGlsCituJ2VzdCBwYXMgcG9zc2libGUgZGUgcmVsYXllciBkZXMgcmVxdcOqdGVzIERIQ1B2NCDDoCB1biBzZXJ2ZXVyIERIQ1B2NiBldAordmljZS12ZXJzYS4KKy5UUAorLkIgXC1VLCAtLWRoY3AtdmVuZG9yY2xhc3M9c2V0OjxsYWJlbD4sW2VudGVycHJpc2U6PG51bcOpcm8gSUFOQSBkJ2VudGVycHJpc2U+LF08Y2xhc3NlIGRlIHZlbmRldXI+CisKK0Fzc29jaWUgdW5lIGNoYcOubmUgZGUgY2xhc3NlIGRlIHZlbmRldXIgw6AgdW4gbGFiZWwuIExhIHBsdXBhcnQKK2RlcyBjbGllbnRzIERIQ1AgZm91cm5pc3NlbnQgdW5lICJjbGFzc2UgZGUgdmVuZGV1ciIgKCJ2ZW5kb3IgY2xhc3MiKSBxdWkKK3JlcHLDqXNlbnRlLCBkJ3VuZSBjZXJ0YWluZSBmYcOnb24sIGxlIHR5cGUgZCdow7R0ZS4gQ2V0dGUgb3B0aW9uIGFzc29jaWUgZGVzCitjbGFzc2VzIGRlIHZlbmRldXIgw6AgZGVzIGxhYmVscywgZGUgdGVsbGUgc29ydGUgcXVlIGRlcyBvcHRpb25zIERIQ1AgcGV1dmVudC3DqnRyZQorZm91cm5pZSBkZSBtYW5pw6hyZSBzw6lsZWN0aXZlIGF1eCBkaWZmw6lyZW50ZXMgY2xhc3NlcyBkJ2jDtHRlcy4gUGFyIGV4ZW1wbGUsCisuQiBkaGNwLXZlbmRvcmNsYXNzPXNldDpwcmludGVycyxIZXdsZXR0LVBhY2thcmQgSmV0RGlyZWN0CitvdQorLkIgZGhjcC12ZW5kb3JjbGFzcz1wcmludGVycyxIZXdsZXR0LVBhY2thcmQgSmV0RGlyZWN0CitwZXJtZXQgZGUgbidhbGxvdWVyIGRlcyBvcHRpb25zIHF1J2F1eCBpbXByaW1hbnRlcyBIUCBkZSBsYSBtYW5pw6hyZSBzdWl2YW50ZSA6CisuQiAtLWRoY3Atb3B0aW9uPXRhZzpwcmludGVycywzLDE5Mi4xNjguNC40CitMYSBjaGHDrm5lIGRlIGNhcmFjdMOocmVzIGRlIGxhIGNsYXNzZSBkZSB2ZW5kZXVyIGZvdW5pZSBlbiBhcmd1bWVudCBlc3QgY2hlcmNow6llCitlbiB0ZW1wcyBxdWUgc291cy1jaGHDrm5lIGRlIGNhcmFjdMOocmVzIGF1IHNlaW4gZGUgbGEgY2xhc3NlIGRlIHZlbmRldXIgZm91cm5pZQorcGFyIGxlIGNsaWVudCwgZGUgZmHDp29uIMOgIHBlcm1ldHRyZSBsYSByZWNoZXJjaGUgZCd1biBzb3VzLWVuc2VtYmxlIGRlIGxhIGNoYcOubmUKK2RlIGNhcmFjdMOocmVzICgiZnV6enkgbWF0Y2hpbmciKS4gTGUgcHLDqWZpeGUgc2V0OiBlc3Qgb3B0aW9ubmVsIG1haXMgYXV0b3Jpc8OpCithZmluIGRlIGNvbnNlcnZlciB1bmUgY2VydGFpbmUgaG9tb2fDqW7DqWl0w6kuCisKK05vdGV6IHF1J2VuIElQdjYgKGV0IHNldWxlbWVudCBlbiBJUHY2KSwgbGVzIG5vbXMgZGUgY2xhc3NlcyBkZSB2ZW5kZXVycworc29udCBkYW5zIHVuIGVzcGFjZSBkZSBub20gYXNzb2Npw6kgYXUgbnVtw6lybyBhdHRyaWJ1w6kgw6AgbCdlbnRyZXByaXNlIHBhcgorbCdJQU5BLiBDZSBudW3DqXJvIGVzdCBmb3VybmkgcGFyIGxlIGJpYWlzIGR1IG1vdC1jbGVmIGVudGVycHJpc2U6IGV0IHNldWxlcworbGVzIGNsYXNzZXMgZGUgdmVuZGV1cnMgYXNzb2Npw6llcyBhdSBudW3DqXJvIHNww6ljaWZpw6kgc2Vyb250IGNoZXJjaMOpZXMuCisuVFAKKy5CIFwtaiwgLS1kaGNwLXVzZXJjbGFzcz1zZXQ6PGxhYmVsPiw8Y2xhc3NlIHV0aWxpc2F0ZXVyPgorQXNzb2NpZSB1bmUgY2hhw65uZSBkZSBjbGFzc2UgZCd1dGlsaXNhdGV1ciDDoCB1biBsYWJlbCAoZWZmZWN0dWUgbGEKK3JlY2hlcmNoZSBzdXIgZGVzIHNvdXMtY2hhw65uZXMsIGNvbW1lIHBvdXIgbGVzIGNsYXNzZXMgZGUgdmVuZGV1cikuIExhIHBsdXBhcnQKK2RlcyBjbGllbnRzIHBlcm1ldHRlbnQgZGUgY29uZmlndXJlciB1bmUgImNsYXNzZSBkJ3V0aWxpc2F0ZXVyIi4gQ2V0dGUgb3B0aW9uCithc3NvY2llIHVuZSBjbGFzc2UgZCd1dGlsaXNhdGV1ciDDoCB1biBsYWJlbCwgZGUgdGVsbGUgbWFuacOocmUgcXUnaWwgc29pdAorcG9zc2libGUgZGUgZm91cm5pciBkZXMgb3B0aW9ucyBESENQIHNww6ljaWZpcXVlcyDDoCBkaWZmw6lyZW50ZXMgY2xhc3NlcyBkJ2jDtHRlcy4KK0lsIGVzdCBwb3NzaWJsZSwgcGFyIGV4ZW1wbGUsIGQndXRpbGlzZXIgY2VjaSBwb3VyIGTDqWZpbmlyIHVuIHNlcnZldXIKK2QnaW1wcmVzc2lvbiBkaWZmw6lyZW50IHBvdXIgbGVzIGjDtHRlcyBkZSBsYSBjbGFzc2UgImNvbXB0ZXMiIGV0IGNldXggZGUgbGEKK2NsYXNzZSAiaW5nw6luaWVyaWUiLgorLlRQCisuQiBcLTQsIC0tZGhjcC1tYWM9c2V0OjxsYWJlbD4sPGFkcmVzc2UgTUFDPgorQXNzb2NpZSB1bmUgYWRyZXNzZSBtYXTDqXJpZWxsZSAoTUFDKSDDoCB1biBsYWJlbC4gTCdhZHJlc3NlCittYXTDqXJpZWxsZSBwZXV0IGluY2x1cmUgZGVzIGpva2Vycy4gUGFyIGV4ZW1wbGUKKy5CIC0tZGhjcC1tYWM9c2V0OjNjb20sMDE6MzQ6MjM6KjoqOioKK3Blcm1ldCBkZSBkw6lmaW5pciBsZSBsYWJlbCAiM2NvbSIgcG91ciBuJ2ltcG9ydGUgcXVlbCBow7R0ZSBkb250IGwnYWRyZXNzZQorbWF0w6lyaWVsbGUgY2/Dr25jaWRlIGF2ZWMgbGVzIGNyaXTDqHJlcyBkw6lmaW5pcy4KKy5UUAorLkIgLS1kaGNwLWNpcmN1aXRpZD1zZXQ6PGxhYmVsPiw8aWRlbnRpZmlhbnQgZGUgY2lyY3VpdD4sIC0tZGhjcC1yZW1vdGVpZD1zZXQ6PGxhYmVsPiw8aWRlbnRpZmlhbnQgZGlzdGFudD4KK0Fzc29jaWUgZGVzIG9wdGlvbnMgZGUgcmVsYWlzIERIQ1AgaXNzdXMgZGUgbGEgUkZDMzA0NiDDoCBkZXMgbGFiZWxzLgorQ2V0dGUgaW5mb3JtYXRpb24gcGV1dC3DqnRyZSBmb3VybmllIHBhciBkZXMgcmVsYWlzIERIQ1AuIEwnaWRlbnRpZmlhbnQKK2RlIGNpcmN1aXQgb3UgbCdpZGVudGlmaWFudCBkaXN0YW50IGVzdCBub3JtYWxlbWVudCBmb3Vybmkgc291cyBsYSBmb3JtZSBkJ3VuZQorY2hhw65uZSBkZSB2YWxldXJzIGhleGFkw6ljaW1hbGVzIHPDqXBhcsOpZXMgcGFyIGRlcyAiOiIsIG1haXMgaWwgZXN0IMOpZ2FsZW1lbnQKK3Bvc3NpYmxlIHF1J2VsbGUgbGUgc29pdCBzb3VzIGxhIGZvcm1lIGQndW5lIHNpbXBsZSBjaGHDrm5lIGRlIGNhcmFjdMOocmVzLiBTaQorbCdpZGVudGlmaWFudCBkZSBjaXJjdWl0IG91IGQnYWdlbnQgY29ycmVzcG9uZCBleGFjdGVtZW50IMOgIGNlbHVpIGZvdXJuaSBwYXIgbGUKK3JlbGFpcyBESENQLCBhbG9ycyBsZSBsYWJlbCBlc3QgYXBwb3PDqS4KKy5CIGRoY3AtcmVtb3RlaWQKK2VzdCBzdXBwb3J0w6kgZW4gSVB2NiAobWFpcyBub24gZGhjcC1jaXJjdWl0aWQpLgorLlRQCisuQiAtLWRoY3Atc3Vic2NyaWQ9c2V0OjxsYWJlbD4sPGlkZW50aWZpYW50IGQnYWJvbm7DqT4KKyhJUHY0IGV0IElQdjYpIEFzc29jaWUgZGVzIG9wdGlvbnMgZGUgcmVsYWlzIERIQ1AgaXNzdWVzIGRlIGxhIFJGQzM5OTMgw6AgZGVzCitsYWJlbHMuCisuVFAKKy5CIC0tZGhjcC1wcm94eVs9PGFkcmVzc2UgaXA+XS4uLi4uLgorKElQdjQgc2V1bGVtZW50KSBVbiBhZ2VudCByZWxhaSBESENQIG5vcm1hbCBlc3QgdW5pcXVlbWVudCB1dGlsaXPDqSBwb3VyIGZhaXJlCitzdWl2cmUgbGVzIMOpbMOpbWVudHMgaW5pdGlhdXggZGUgbCdpbnRlcmFjdGlvbiBhdmVjIGxlIHNlcnZldXIgREhDUC4gVW5lIGZvaXMKK3F1ZSBsZSBjbGllbnQgZXN0IGNvbmZpZ3Vyw6ksIGlsIGNvbW11bmlxdWUgZGlyZWN0ZW1lbnQgYXZlYyBsZSBzZXJ2ZXVyLiBDZWxhCituJ2VzdCBwYXMgc291aGFpdGFibGUgc2kgbGUgcmVsYWlzIHJham91dGUgZGVzIGluZm9ybWF0aW9ucyBzdXBwbMOpbWVudGFpcmVzCithdXggcGFxdWV0cyBESENQLCB0ZWxsZXMgcXVlIGNlbGxlcyB1dGlsaXPDqWVzIGRhbnMKKy5CIGRoY3AtY2lyY3VpdGlkCitldAorLkIgZGhjcC1yZW1vdGVpZC4KK1VuZSBpbXBsw6ltZW50YXRpb24gY29tcGzDqHRlIGRlIHJlbGFpIHBldXQgdXRpbGlzZXIgbCdvcHRpb24gc2VydmVyaWQtb3ZlcnJpZGUKK2RlIGxhIFJGQyA1MTA3IGFmaW4gZGUgZm9yY2VyIGxlIHNlcnZldXIgREhDUCDDoCB1dGlsaXNlciBsZSByZWxhaSBlbiB0ZW1wcyBxdWUKK3Byb3h5IGNvbXBsZXQsIGRlIHNvcnRlIHF1ZSB0b3VzIGxlcyBwYXF1ZXRzIHBhc3NlbnQgcGFyIGxlIHJlbGFpLiBDZXR0ZSBvcHRpb24KK3Blcm1ldCBkJ29idGVuaXIgbGUgbcOqbWUgcsOpc3VsdGF0IHBvdXIgZGVzIHJlbGFpcyBuZSBzdXBwb3J0YW50IHBhcyBsYSBSRkMKKzUxMDcuIEZvdXJuaWUgc2V1bGUsIGVsbGUgbWFuaXB1bGUgbGEgdmFsZXVyIGRlIHNlcnZlci1pZCBwb3VyIHRvdXRlcyBsZXMKK2ludGVyYWN0aW9ucyB2aWEgZGVzIHJlbGFpcy4gU2kgdW5lIGxpc3RlIGQnYWRyZXNzZXMgSVAgZXN0IGRvbm7DqWUsIHNldWxlcyBsZXMKK2ludGVyYWN0aW9ucyBhdmVjIGxlcyByZWxhaXMgZG9udCBsJ2FkcmVzc2UgZXN0IGRhbnMgbGEgbGlzdGUgc2Vyb250IGFmZmVjdMOpZXMuCisuVFAKKy5CIC0tZGhjcC1tYXRjaD1zZXQ6PGxhYmVsPiw8bnVtw6lybyBkJ29wdGlvbj58b3B0aW9uOjxub20gZCdvcHRpb24+fHZpLWVuY2FwOjxlbnRyZXByaXNlPlssPHZhbGV1cj5dCitTaSBhdWN1bmUgdmFsZXVyIG4nZXN0IHNww6ljaWZpw6llLCBhc3NvY2llIGxlIGxhYmVsIHNpIGxlIGNsaWVudAorZW52b2llIHVuZSBvcHRpb24gREhDUCBhdmVjIGxlIG51bcOpcm8gb3UgbGUgbm9tIHNww6ljaWZpw6kuIExvcnNxdSd1bmUgdmFsZXVyIGVzdAorZm91cm5pZSwgcG9zaXRpb25uZSBsZSBsYWJlbCBzZXVsZW1lbnQgZGFucyBsZSBjYXMgb8O5IGwnb3B0aW9uIGVzdCBmb3VybmllIGV0Citjb3JyZXNwb25kIMOgIGxhIHZhbGV1ci4gTGEgdmFsZXVyIHBldXQtw6p0cmUgZGUgbGEgZm9ybWUgIjAxOmZmOio6MDIiLCBhdXF1ZWwKK2NhcyBsZSBkw6lidXQgZGUgbCdvcHRpb24gZG9pdCBjb3JyZXNwb25kcmUgKGVuIHJlc3BlY3RhbnQgbGVzIGpva2VycykuIExhCit2YWxldXIgcGV1dCBhdXNzaSDDqnRyZSBkZSBsYSBtw6ptZSBmb3JtZSBxdWUgZGFucworLkIgZGhjcC1vcHRpb24KKywgYXVxdWVsIGNhcyBsJ29wdGlvbiBlc3QgdHJhaXTDqWUgY29tbWUgdW4gdGFibGVhdSBkZSB2YWxldXIsIGV0IHVuIGRlcworw6lsw6ltZW50cyBkb2l0IGNvcnJlc3BvbmRyZSwgYWluc2kKKworLS1kaGNwLW1hdGNoPXNldDplZmktaWEzMixvcHRpb246Y2xpZW50LWFyY2gsNgorCitzcMOpY2lmaWUgbGUgbGFiZWwgImVmaS1pYTMyIiBzaSBsZSBudW3DqXJvIDYgYXBwYXJhw650IGRuYXMgbGEgbGlzdGUKK2QnYXJjaGl0ZWN0dXJlcyBlbnZvecOpIHBhciBsZSBjbGllbnQgYXUgc2VpbiBkZSBsJ29wdGlvbiA5My4gKHNlIHLDqWZlcmVyCithdSBSRkMgNDU3OCBwb3VyIHBsdXMgZGUgZMOpdGFpbHMpLiBTaSBsYSB2YWxldXIgZXN0IHVuIGNoYWluZSBkZSBjYXJhY3TDqHJlcywKK2NlbGxlLWNpIGVzdCByZWNoZXJjaMOpZSAoY29ycmVzcG9uZGFuY2UgZW4gdGVtcHMgcXVlIHNvdXMtY2hhw65uZSkuCisKK1BvdXIgbGEgZm9ybWUgcGFydGljdWxpw6hyZSB2aS1lbmNhcDo8bnVtw6lybyBkJ2VudHJlcHJpc2U+LCBsYSBjb21wYXJhaXNvbiBzZQorZmFpdCBhdmVjIGxlcyBjbGFzc2VzIGRlIHZlbmRldXIgImlkZW50aWZpYW50IGRlIHZlbmRldXIiICgidmVuZG9yLWlkZW50aWZ5aW5nCit2ZW5kb3IgY2xhc3NlcyIpIHBvdXIgbCdlbnRyZXByaXNlIGRvbnQgbGUgbnVtw6lybyBlc3QgZm91cm5pIGVuIG9wdGlvbi4KK1ZldWlsbGV6IHZvdXMgcsOpZmVyZXIgw6AgbGEgUkZDIDM5MjUgcG91ciBwbHVzIGRlIGTDqXRhaWwuCisuVFAKKy5CIC0tdGFnLWlmPXNldDo8bGFiZWw+WyxzZXQ6PGxhYmVsPlssdGFnOjxsYWJlbD5bLHRhZzo8bGFiZWw+XV1dCitFZmZlY3R1ZSB1bmUgb3DDqXJhdGlvbiBib29sw6llbm5lIHN1ciBsZXMgbGFiZWxzLiBTaSB0b3VzIGxlcyBsYWJlbHMKK2FwcGFyYWlzc2FudCBkYW5zIGxhIGxpc3RlIHRhZzo8bGFiZWw+IHNvbnQgcG9zaXRpb25uw6lzLCBhbG9ycyB0b3VzIGxlcworbGEgZGUgbGEgbGlzdGUgInNldDo8bGFiZWxzPiIgc29udCBwb3NpdGlvbm7DqXMgKG91IHN1cHByaW3DqXMsIGRhbnMgbGUgY2FzCitvw7kgInRhZzohPGxhYmVsPiIgdXRpbGlzw6kpLgorU2kgYXVjdW4gdGFnOjxsYWJlbD4gbidlc3Qgc3DDqWNpZmnDqSwgYWxvcnMgdG91cyBsZXMgbGFiZWxzIGZvdXJuaXMgcGFyCitzZXQ6PGxhYmVsPiBzb250IHBvc2l0aW9ubsOpcy4KK04naW1wb3J0ZSBxdWVsIG5vbWJyZSBkZSBzZXQ6IG91IHRhZzogcGV1dmVudCDDqnRyZSBmb3VybmlzLCBldCBsJ29yZHJlIGVzdCBzYW5zCitpbXBvcnRhbmNlLgorTGVzIGxpZ25lcyB0YWctaWYgc29udCBleGVjdXTDqWVzIGRhbnMgbCdvcmRyZSwgY2UgcXVpIGZhaXQgcXVlIHNpIHVuIGxhYmVsIGRhbnMKK3RhZzo8bGFiZWw+IGVzdCB1biBsYWJlbCBwb3NpdGlvbm7DqSBwYXIgdW5lIHLDqmdsZQorLkIgdGFnLWlmLAorbGEgbGlnbmUgcXVpIHBvc2l0aW9ubmUgbGUgbGFiZWwgZG9pdCBwcsOpY8OpZGVyIGNlbGxlIHF1aSBsZSB0ZXN0ZS4KKy5UUAorLkIgXC1KLCAtLWRoY3AtaWdub3JlPXRhZzo8bGFiZWw+Wyx0YWc6PGxhYmVsPl0KK0xvcnNxdWUgdG91cyBsZXMgbGFiZWxzIGZvdXJuaXMgZGFucyBsJ29wdGlvbiBzb250IHByw6lzZW50cywgaWdub3JlciBsJ2jDtHRlIGV0CituZSBwYXMgZG9ubmVyIGRlIGJhaWwgREhDUC4KKy5UUAorLkIgLS1kaGNwLWlnbm9yZS1uYW1lc1s9dGFnOjxsYWJlbD5bLHRhZzo8bGFiZWw+XV0KK0xvcnNxdWUgdG91cyBsZXMgbGFiZWxzIGZvdXJuaXMgZGFucyBsJ29wdGlvbiBzb250IHByw6lzZW50cywgaWdub3JlciBsZQorbm9tIGRlIG1hY2hpbmUgZm91cm5pIHBhciBsJ2jDtHRlLiBJbCBlc3Qgw6Agbm90ZXIgcXVlLCDDoCBsYSBkaWZmw6lyZW5jZSBkZQorbCdvcHRpb24gImRoY3AtaWdub3JlIiwgaWwgZXN0IHBlcm1pcyBkZSBuZSBwYXMgZm91cm5pciBkZSBsYWJlbC4KK0RhbnMgY2UgY2FzLCBsZXMgbm9tcyBkJ2jDtHRlcyBmb3VybmlzIHBhciBsZXMgY2xpZW50cyBESENQIHNlcm9udCB0b3Vqb3VycworaWdub3LDqXMsIGV0IGxlcyBub21zIGQnaMO0dGVzIHNlcm9udCBham91dMOpcyBhdSBETlMgZW4gdXRpbGlzYW50IHVuaXF1ZW1lbnQgbGEKK2NvbmZpZ3VyYXRpb24gZGhjcC1ob3N0IGRlIERuc21hc3EsIGFpbnNpIHF1ZSBsZSBjb250ZW51IGRlcyBmaWNoaWVycyAvZXRjL2hvc3RzCitldCAvZXRjL2V0aGVycy4KKy5UUAorLkIgLS1kaGNwLWdlbmVyYXRlLW5hbWVzPXRhZzo8bGFiZWw+Wyx0YWc6PGxhYmVsPl0KKyhJUHY0IHNldWxlbWVudCkgR8OpbsOpcmVyIHVuIG5vbSBwb3VyIGxlcyBjbGllbnRzIERIQ1AgcXVpIGF1dHJlbWVudCBuJ2VuIGF1cmFpdAorcGFzLCBlbiB1dGlsaXNhbnQgbCdhZHJlc3NlIE1BQyBzb3VzIHNhIGZvcm1lIGhleGFkw6ljaW1hbGUsIHPDqXBhcsOpZSBwYXIgZGVzCit0aXJldHMuCitOb3RlciBxdWUgc2kgdW4gaMO0dGUgZm91cm5pIHVuIG5vbSwgY2VsdWktY2kgc2VyYSB1dGlsaXPDqSBkZSBwcsOpZsOpcmVuY2UgYXUgbm9tCithdXRvZ8OpbsOpcsOpLCDDoCBtb2lucyBxdWUKKy5CIC0tZGhjcC1pZ25vcmUtbmFtZXMgCituZSBzb2l0IHBvc2l0aW9ubsOpLgorLlRQCisuQiAtLWRoY3AtYnJvYWRjYXN0PVt0YWc6PGxhYmVsPlssdGFnOjxsYWJlbD5dXQorKElQdjQgc2V1bGVtZW50KSBMb3JzcXVlIHRvdXMgbGVzIGxhYmVscyBmb3VybmlzIGRhbnMgbCdvcHRpb24gc29udCBwcsOpc2VudHMsCit0b3Vqb3VycyB1dGlsaXNlciBsZSBicm9hZGNhc3QgcG91ciBjb21tdW5pcXVlciBhdmVjIGwnaMO0dGUgbG9yc3F1ZSBjZWx1aS1jaQorbidlc3QgcGFzIGNvbmZpZ3Vyw6kuIElsIGVzdCBwb3NzaWJsZSBkZSBuZSBzcMOpY2lmaWVyIGF1Y3VuIGxhYmVsLCBhdXF1ZWwgY2FzCitjZXR0ZSBvcHRpb24gcydhcHBsaXF1ZSBpbmNvbmRpdGlvbm5lbGxlbWVudC4gTGEgcGx1cGFydCBkZXMgY2xpZW50cyBESENQCituw6ljZXNzaXRhbnQgdW5lIHLDqXBvbnNlIHBhciBsZSBiaWFpcyBkJ3VuIGJyb2FkY2FzdCBhY3RpdmVudCB1bmUgb3B0aW9uIGRhbnMKK2xldXIgcmVxdcOqdGUsIGNlIHF1aSBmYWl0IHF1ZSBjZWxhIHNlIGZhaXQgYXV0b21hdGlxdWVtZW50LCBtYWlzIGNlIG4nZXN0IHBhcworbGUgY2FzIGRlIGNlcnRhaW5zIHZpZXV4IGNsaWVudHMgQk9PVFAuCisuVFAKKy5CIFwtTSwgLS1kaGNwLWJvb3Q9W3RhZzo8bGFiZWw+LF08bm9tIGRlIGZpY2hpZXI+LFs8bm9tIGRlIHNlcnZldXI+Wyw8YWRyZXNzZSBkZSBzZXJ2ZXVyPnw8bm9tIGR1IHNlcnZldXIgdGZ0cD5dXQorKElQdjQgc2V1bGVtZW50KSBTcMOpY2lmaWUgbGVzIG9wdGlvbnMgQk9PVFAgZGV2YW50IMOqdHJlIHJldG91cm7DqWVzIHBhciBsZQorc2VydmV1ciBESENQLiBMZSBub20gZGUgc2VydmV1ciBhaW5zaSBxdWUgbCdhZHJlc3NlIHNvbnQgb3B0aW9ubmVscyA6IHMnaWxzCituZSBzb250IHBhcyBmb3VybmlzLCBsZSBub20gZXN0IGxhaXNzw6kgdmlkZSBldCBsJ2FkcmVzc2UgZm91cm5pZSBlc3QgY2VsbGUgZGUKK2xhIG1hY2hpbmUgc3VyIGxhcXVlbGxlIHMnZXjDqWN1dGUgRG5zbWFzcS4gU2kgRG5zbWFzcSBmb3VuaXQgdW4gc2VydmljZSBURlRQICh2b2lyCisuQiAtLWVuYWJsZS10ZnRwCispLCBhbG9ycyBzZXVsIHVuIG5vbSBkZSBmaWNoaWVyIGVzdCByZXF1aXMgaWNpIHBvdXIgcGVybWV0dHJlIHVuIGTDqW1hcnJhZ2UgcGFyCitsZSByw6lzZWF1LgorU2kgZCfDqXZlbnR1ZWxzIGxhYmVscyBzb250IGZvdXJuaXMsIGlscyBkb2l2ZW50IGNvw69uY2lkZXIgYXZlYworY2V1eCBkdSBjbGllbnQgcG91ciBxdWUgY2V0IMOpbGVtZW50IGRlIGNvbmZpZ3VyYXRpb24gbHVpIHNvaXQgZW52b3nDqS4KK1VuZSBhZHJlc3NlIGRlIHNlcnZldXIgVEZUUCBwZXV0IMOqdHJlIHNww6ljaWZpw6llIMOgIGxhIHBsYWNlIGRlIGwnYWRyZXNzZSBJUCwKK3NvdXMgbGEgZm9ybWUgZCd1biBub20gZGUgZG9tYWluZSBxdWkgc2VyYSBjaGVyY2jDqSBkYW5zIGxlIGZpY2hpZXIgL2V0Yy9ob3N0cy4KK0NlIG5vbSBwZXV0IMOqdHJlIGFzc29jacOpIGRhbnMgL2V0Yy9ob3N0cyBhdmVjIHBsdXNpZXVycyBhZHJlc3NlcyBJUCwgYXVxdWVsIGNhcworY2VsbGVzLWNpIHNlcm9udCB1dGlsaXPDqWVzIHRvdXIgw6AgdG91ciAoYWxnb3JpdGhtZSByb3VuZC1yb2JpbikuCitDZWxhIHBldXQtw6p0cmUgdXRpbGlzZXIgcG91ciDDqXF1aWxpYnJlciBsYSBjaGFyZ2UgdGZ0cCBzdXIgcGx1c2lldXJzIHNlcnZldXJzLgorLlRQCisuQiAtLWRoY3Atc2VxdWVudGlhbC1pcAorRG5zbWFzcSBlc3QgY29uw6d1IHBvdXIgY2hvaXNpciBsJ2FkcmVzc2UgSVAgZGVzIGNsaWVudHMgREhDUCBlbiB1dGlsaXNhbnQKK3VuIGhhY2hhZ2UgZGUgbCdhZHJlc3NlIE1BQyBkdSBjbGllbnQuIENlbGEgcGVybWV0IGVuIGfDqW7DqXJhbCDDoCBsJ2FkcmVzc2UKK0lQIGR1IGNsaWVudCBkZSByZXN0ZXIgc3RhYmxlIGF1IGZpbCBkdSB0ZW1wcywgbcOqbWUgbG9yc3F1ZSBsZSBjbGllbnQgbGFpc3NlCitleHBpcmVyIHNvbiBiYWlsIERIQ1AgZGUgdGVtcHMgZW4gdGVtcHMuIERhbnMgY2UgbW9kZSBkZSBmb25jdGlvbm5lbWVudCBwYXIKK2TDqWZhdXQsIGxlcyBhZHJlc3NlcyBJUCBzb250IGRpc3RyaWJ1w6llcyBkZSBmYcOnb24gcHNldWRvLWFsw6lhdG9pcmUgZGFucyBsYQordG90YWxpdMOpIGRlIGxhIHBsYWdlIGQnYWRyZXNzZXMgdXRpbGlzYWJsZS4gSWwgZXhpc3RlIGRlcyBjaXJjb25zdGFuY2VzIChwYXIKK2V4ZW1wbGVzIHBvdXIgZHUgZMOpcGxvaWVtZW50IGRlIHNlcnZldXIpIG/DuSBpbCBlc3QgcGx1cyBwcmF0aXF1ZSBkJ2FsbG91ZXIgbGVzCithZHJlc3NlcyBJUCBkZSBtYW5pw6hyZSBzw6lxdWVudGllbGxlLCBlbiBjb21tZW7Dp2FudCBwYXIgbGEgcGx1cyBwZXRpdGUgYWRyZXNzZQorZGlzcG9uaWJsZSwgZXQgYydlc3QgY2UgbW9kZSBkZSBmb25jdGlvbm5lbWVudCBxdWkgZXN0IHBlcm1pcyBwYXIgY2V0dGUgb3B0aW9uLgorVmV1aWxsZXogbm90ZXIgcXVlIGRhbnMgY2UgbW9kZSBzw6lxdWVudGllbCwgbGVzIGNsaWVudHMgcXVpIGxhaXNzZW50IGV4cGlyZXIKK2xldXIgYmFpbCBvbnQgYmVhdWNvdXAgcGx1cyBkZSBjaGFuY2UgZGUgdm9pciBsZXVyIGFkcmVzc2UgSVAgY2hhbmdlciwgYXVzc2kKK2NldHRlIG9wdGlvbiBuZSBkZXZyYWl0IHBhcyDDqnRyZSB1dGlsaXPDqWUgZGFucyB1biBjYXMgZ8OpbsOpcmFsLgorLlRQCisuQiAtLXB4ZS1zZXJ2aWNlPVt0YWc6PGxhYmVsPixdPENTQT4sPGVudHLDqWUgZGUgbWVudT5bLDxub20gZGUgZmljaGllcj58PHR5cGUgZGUgc2VydmljZSBkZSBkw6ltYXJyYWdlPl1bLDxhZHJlc3NlIGRlIHNlcnZldXI+fDxub20gZGUgc2VydmV1cj5dCitMYSBwbHVwYXJ0IGRlcyBST01TIGRlIGTDqW1hcnJhZ2UgUFhFIG5lIHBlcm1ldHRlbnQgYXUgc3lzdMOobWUgUFhFIHF1ZSBsYSBzaW1wbGUKK29idGVudGlvbiBkJ3VuZSBhZHJlc3NlIElQLCBsZSB0w6lsw6ljaGFyZ2VtZW50IGR1IGZpY2hpZXIgc3DDqWNpZmnDqSBkYW5zCisuQiBkaGNwLWJvb3QKK2V0IHNvbiBleMOpY3V0aW9uLiBDZXBlbmRhbnQsIGxlIHN5c3TDqG1lIFBYRSBlc3QgY2FwYWJsZSBkZSBmb25jdGlvbnMgYmllbiBwbHVzCitjb21wbGV4ZXMgcG91ciBwZXUgcXVlIGxlIHNlcnZldXIgREhDUCBzb2l0IGFkYXB0w6kuCisKK0NlY2kgc3DDqWNpZmllIGwnb3B0aW9uIGRlIGTDqW1hcnJhZ2UgcXVpIGFwcGFyYWl0cmEgZGFucyB1biBtZW51IGRlIGTDqW1hcnJhZ2UKK1BYRS4gPENTQT4gZXN0IGxlIHR5cGUgZHUgc3lzdMOobWUgY2xpZW50LiBTZXVscyBkZXMgdHlwZXMgZGUgc2VydmljZXMgdmFsaWRlcworYXBwYXJhaXRyb250IGRhbnMgdW4gbWVudS4gTGVzIHR5cGVzIGNvbm51cyBzb250IHg4NlBDLCBQQzk4LCBJQTY0X0VGSSwgQWxwaGEsCitBcmNfeDg2LCBJbnRlbF9MZWFuX0NsaWVudCwgSUEzMl9FRkksIEJDX0VGSSwgWHNjYWxlX0VGSSBldCBYODYtNjRfRUZJOworRCdhdXRyZXMgdHlwZXMgcGV1dmVudC3DqnRyZSBzcMOpY2lmacOpcyBzb3VzIGxhIGZvcm1lIGQndW5lIHZhbGV1ciBlbnRpw6hyZS4gTGUKK3BhcmFtw6h0cmUgYXByw6hzIGxlIHRleHRlIGNvcnJlc3BvbmRhbnQgw6AgbCdlbnRyw6llIGRhbnMgbGUgbWVudSBwZXV0IMOqdHJlIHVuIG5vbQorZGUgZmljaGllciwgYXVxdWVsIGNhcyBEbnNtYXNxIGFnaXQgY29tbWUgdW4gc2VydmV1ciBkZSBkw6ltYXJyYWdlIGV0IGluZGlxdWUgYXUKK2NsaWVudCBQWEUgcXUnaWwgZmF1dCB0w6lsw6ljaGFyZ2VyIGNlIGZpY2hpZXIgdmlhIFRGVFAsIHNvaXQgZGVwdWlzIGNlIHNlcnZldXIKKyhsJ29wdGlvbgorLkIgZW5hYmxlLXRmdHAgCitkb2l0IMOqdHJlIHNww6ljaWZpw6llIHBvdXIgcXVlIGNlbGEgbWFyY2hlKSwgc29pdCBkZXB1aXMgdW4gYXV0cmUgc2VydmV1ciBURlRQCitzaSB1bmUgYWRyZXNzZSBvdSB1biBub20gZGUgc2VydmV1ciBlc3QgZm91cm5pZS4KK1ZldWlsbGV6IG5vdGVyIHF1ZSBsZSBzdWZmaXhlIGRlICJjb3VjaGUiIChlbiBwcmluY2lwZSAiLjAiKSBlc3QgZm91cm5pIHBhciBQWEUKK2V0IG5lIGRvaXQgcGFzIMOqdHJlIHJham91dMOpIGF1IG5vbSBkZSBmaWNoaWVyLiBTaSB1bmUgdmFsZXVyIG51bcOpcmlxdWUgZW50acOocmUKK2VzdCBmb3VybmlyIHBvdXIgbGUgdHlwZSBkZSBkw6ltYXJyYWdlLCBlbiByZW1wbGFjZW1lbnQgZHUgbm9tIGRlIGZpY2hpZXIsIGxlCitjbGllbnQgUFhFIGRldnJhIGNoZXJjaGVyIHVuIHNlcnZpY2UgZGUgZMOpbWFycmFnZSBkZSBjZSB0eXBlIHN1ciBsZSByw6lzZWF1LgorQ2V0dGUgcmVjaGVyY2hlIHBldXQgw6p0cmUgZmFpdGUgdmlhIGJyb2FkY2FzdCBvdSBkaXJlY3RlbWVudCBhdXByw6hzIGQndW4KK3NlcnZldXIgc2kgc29uIGFkcmVzc2UgSVAgb3Ugc29uIG5vbSBzb250IGZvdXJuaXMgZGFucyBsJ29wdGlvbi4KK1NpIGF1Y3VuIG5vbSBkZSBmaWNoaWVyIG4nZXN0IGRvbm7DqSBuaSBhdWN1bmUgdmFsZXVyIGRlIHR5cGUgZGUgc2VydmljZSBkZQorZMOpbWFycmFnZSBuJ2VzdCBmb3VybmllIChvdSBxdSd1bmUgdmFsZXVyIGRlIDAgZXN0IGRvbm7DqWUgcG91ciBsZSB0eXBlIGRlCitzZXJ2aWNlKSwgYWxvcnMgbCdlbnRyw6llIGRlIG1lbnUgcHJvdm9xdWUgbCdpbnRlcnJ1cHRpb24gZHUgZMOpbWFycmFnZSBwYXIKK2xlIHLDqXNlYXUgZXQgbGEgcG91cnN1aXRlIGR1IGTDqW1hcnJhZ2Ugc3VyIHVuIG3DqWRpYSBsb2NhbC4gTCdhZHJlc3NlIGRlIHNlcnZldXIKK3BldXQgw6p0cmUgZG9ubsOpZSBzb3VzIGxhIGZvcm1lIGRlIG5vbSBkZSBkb21haW5lIHF1aSBlc3QgcmVjaGVyY2jDqSBkYW5zCisvZXRjL2hvc3RzLiBDZSBub20gcGV1dC3DqnRyZSBhc3NvY2nDqSDDoCBwbHVzaWV1cnMgYWRyZXNzZXMgSVAsIHF1aSBkYW5zIGNlIGNhcworc29udCB1dGlsaXPDqWVzIMOgIHRvdXIgZGUgcsO0bGUgKGVuICJyb3VuZC1yb2JpbiIpLgorLlRQCisuQiAtLXB4ZS1wcm9tcHQ9W3RhZzo8bGFiZWw+LF08aW52aXRlPlssPGTDqWxhaT5dCitDZXR0ZSBvcHRpb24gcGVybWV0IGQnYWZmaWNoZXIgdW5lIGludml0ZSDDoCBsYSBzdWl0ZSBkdSBkw6ltYXJyYWdlIFBYRS4gU2kgdW4KK2TDqWxhaSBlc3QgZm91cm5pLCBhbG9ycyBsYSBwcmVtacOocmUgZW50csOpZSBkdSBtZW51IGRlIGTDqW1hcnJhZ2Ugc2VyYQorYXV0b21hdGlxdWVtZW50IGV4w6ljdXTDqWUgYXByw6hzIGNlIGTDqWxhaS4gU2kgbGUgZMOpbGFpIHZhdXQgMCwgYWxvcnMgbGEgcHJlbWnDqHJlCitlbnRyw6llIGRpc3BvbmlibGUgc2VyYSBleMOpY3V0w6llIGltbcOpZGlhdGVtZW50LiBTaQorLkIgcHhlLXByb21wdAorZXN0IG9taXMsIGxlIHN5c3TDqG1lIGF0dGVuZHJhIHVuIGNob2l4IGRlIGwndXRpbGlzYXRldXIgcydpbCBleGlzdGUgcGx1c2lldXJzCitlbnRyw6llcyBkYW5zIGxlIG1lbnUsIG91IGTDqW1hcnJlcmEgaW1tw6lkaWF0ZW1lbnQgZGFucyBsZSBjYXMgb8O5IGlsIG4neSBhIHF1J3VuZQorc2V1bGUgZW50csOpZS4gVm9pcgorLkIgcHhlLXNlcnZpY2UgCitwb3VyIHBsdXMgZGUgZMOpdGFpbHMgc3VyIGxlcyBlbnRyw6llcyBkZSBtZW51LgorCitEbnNtYXNxIHBldXQgc2VydmlyIGRlICJwcm94eS1ESENQIiBQWEUsIGRhbnMgbGUgY2FzIG/DuSB1biBhdXRyZSBzZXJ2ZXVyIERIQ1AKK3N1ciBsZSByw6lzZWF1IGVzdCByZXNwb25zYWJsZSBkZSBsJ2FsbG9jYXRpb24gZGVzIGFkcmVzc2VzIElQLCBhdXF1ZWwgY2FzCitEbnNtYXNxIHNlIGNvbnRlbnRlIGRlIGZvdXJuaXIgbGVzIGluZm9ybWF0aW9ucyBkb25uw6llcyBkYW5zIGxlcyBvcHRpb25zCisuQiBweGUtcHJvbXB0CitldAorLkIgcHhlLXNlcnZpY2UKK3BvdXIgcGVybWV0dHJlIGxlIGTDqW1hcnJhZ2UgcGFyIGxlIHLDqXNlYXUuIENlIG1vZGUgZXN0IGFjdGl2w6kgZW4gdXRpbGlzYW50IGxlCittb3QtY2xlZgorLkIgcHJveHkKK2RhbnMKKy5CIGRoY3AtcmFuZ2UuCisuVFAKKy5CIFwtWCwgLS1kaGNwLWxlYXNlLW1heD08bm9tYnJlPgorTGltaXRlIERuc21hc3Egw6AgdW4gbWF4aW11bSBkZSA8bm9tYnJlPiBiYXV4IERIQ1AuIExlIGTDqWZhdXQgZXN0IGRlIDEwMDAuIENldHRlCitsaW1pdGUgcGVybWV0IGQnw6l2aXRlciBkZXMgYXR0YXF1ZXMgZGUgZMOpbmkgZGUgc2VydmljZSAoIkRvUyIpIHBhciBkZXMgaMO0dGVzCitjcsOpYW50IGRlcyBtaWxsaWVycyBkZSBiYXV4IGV0IHV0aWxpc2FudCBiZWF1Y291cCBkZSBtw6ltb2lyZSBkYW5zIGxlIHByb2Nlc3N1cworRG5zbWFzcS4KKy5UUAorLkIgXC1LLCAtLWRoY3AtYXV0aG9yaXRhdGl2ZQorRG9pdCDDqnRyZSBzcMOpY2lmacOpIGxvcnNxdWUgZG5zbWFzcSBlc3QgcsOpZWxsZW1lbnQgbGUgc2V1bCBzZXJ2ZXVyIERIQ1AKK3N1ciBsZSByw6lzZWF1LiBQb3VyIERIQ1B2NCwgY2VsYSBjaGFuZ2UgbGUgY29tcG9ydGVtZW50IHBhciBkw6lmYXV0IHF1aSBlc3QKK2NlbHVpIGQndW4gc3RyaWN0IHJlc3BlY3QgZGVzIFJGQywgYWZpbiBxdWUgbGVzIHJlcXXDqnRlcyBESENQIHBvdXIgZGVzIGJhdXgKK2luY29ubnVzIHBhciBkZXMgaMO0dGVzIGluY29ubnVzIG5lIHNvaWVudCBwYXMgaWdub3LDqWVzLiBDZWxhIHBlcm1ldCDDoCBkZQorbm91dmVhdXggaMO0dGVzIGQnb2J0ZW5pciBkZXMgYmF1eCBzYW5zIHRlbmlyIGNvbXB0ZSBkZSBmYXN0aWRpZXVzZXMKK3RlbXBvcmlzYXRpb25zICgidGltZW91dCIpLiBDZWxhIHBlcm1ldCDDqWdhbGVtZW50IMOgIERuc21hc3EgZGUgcmVjb25zdHJ1aXJlCitzYSBiYXNlIGRlIGRvbm7DqWVzIGNvbnRlbmFudCBsZXMgYmF1eCBzYW5zIHF1ZSBsZXMgY2xpZW50cyBuJ2FpZW50IGJlc29pbiBkZQorcmVkZW1hbmRlciB1biBiYWlsLCBzaSBjZWxsZS1jaSBlc3QgcGVyZHVlLgorRGFucyBsZSBjYXMgZGUgREhDUHY2LCBjZWxhIHBvc2l0aW9ubmUgbGEgcHJpb3JpdMOpIGRlcyByw6lwb25zZXMgw6AgMjU1IChsZQorbWF4aW11bSkgYXUgbGlldSBkZSAwIChsZSBtaW5pbXVtKS4KKy5UUAorLkIgLS1kaGNwLWFsdGVybmF0ZS1wb3J0Wz08cG9ydCBzZXJ2ZXVyPlssPHBvcnQgY2xpZW50Pl1dCisoSVB2NCBzZXVsZW1lbnQpIENoYW5nZSBsZXMgcG9ydHMgdXRpbGlzw6lzIHBhciBkw6lmYXV0IHBvdXIgbGUgREhDUC4gU2kgY2V0dGUKK29wdGlvbiBlc3QgZG9ubsOpZSBzZXVsZSBzYW5zIGFyZ3VtZW50LCBhbG9ycyBjaGFuZ2UgbGVzIHBvcnRzIHV0aWxpc8OpcyBwb3VyIGxlCitESENQIGRlIDY3IGV0IDY4IHJlc3BlY3RpdmVtZW50IMOgIDEwNjcgZXQgMTA2OC4gU2kgdW4gc2V1bCBhcmd1bWVudCBlc3QgZG9ubsOpLCBjZQorbnVtw6lybyBlc3QgdXRpbGlzw6kgcG91ciBsZSBwb3J0IHNlcnZldXIgZXQgY2UgbnVtw6lybyBwbHVzIDEgZXN0IHV0aWxpc8OpIHBvdXIgbGUKK3BvcnQgY2xpZW50LiBFbmZpbiwgZW4gZm91cm5pc3NhbnQgZGV1eCBudW3DqXJvcyBkZSBwb3J0cywgaWwgZXN0IHBvc3NpYmxlIGRlCitzcMOpY2lmaWVyIGFyYml0cmFpcmVtZW50IDIgcG9ydHMgw6AgbGEgZm9pcyBwb3VyIGxlIHNlcnZldXIgZXQgcG91ciBsZSBjbGllbnQgREhDUC4KKy5UUAorLkIgXC0zLCAtLWJvb3RwLWR5bmFtaWNbPTxpZGVudGlmaWFudCBkZSByw6lzZWF1PlssPGlkZW50aWZpYW50IGRlIHLDqXNlYXU+XV0KKyhJUHY0IHNldWxlbWVudCkgUGVybWV0IGwnYWxsb2NhdGlvbiBkeW5hbWlxdWUgZCdhZHJlc3NlcyBJUCDDoCBkZXMgY2xpZW50cyBCT09UUC4KK1V0aWxpc2VyIGNldHRlIG9wdGlvbiBhdmVjIHByw6ljYXV0aW9uLCB1bmUgYWRyZXNzZSBhbGxvdcOpZSDDoCB1biBjbGllbnQgQk9PVFAKK8OpdGFudCBwZXJww6l0dWVsbGUsIGV0IGRlIGZhaXQgbidlc3QgcGx1cyBkaXNwb25pYmxlcyBwb3VyIGQnYXV0cmVzIGjDtHRlcy4gU2kKK2F1Y3VuIGFyZ3VtZW50IG4nZXN0IGRvbm7DqSwgYWxvcnMgY2V0dGUgb3B0aW9uIHBlcm1ldCB1bmUgYWxsb2NhdGlvbiBkeW5hbWlxdWUKK2RhbnMgdG91cyBsZXMgY2FzLiBTaSBkZXMgYXJndW1lbnRzIHNvbnQgc3DDqWNpZmnDqXMsIGFsb3JzIGwnYWxsb2NhdGlvbiBuZSBzZQorZmFpdCBxdWUgbG9yc3F1ZSB0b3VzIGxlcyBpZGVudGlmaWFudHMgY2/Dr25jaWRlbnQuIElsIGVzdCBwb3NzaWJsZSBkZSByw6lwZXRlcgorY2V0dGUgb3B0aW9uIGF2ZWMgcGx1c2lldXJzIGpldXggZCdhcmd1bWVudHMuCisuVFAKKy5CIFwtNSwgLS1uby1waW5nCisoSVB2NCBzZXVsZW1lbnQpIFBhciBkw6lmYXV0LCBsZSBzZXJ2ZXVyIERIQ1AgdGVudGUgZGUgcydhc3N1cmVyIHF1J3VuZSBhZHJlc3NlCituJ2VzdCBwYXMgdXRpbGlzw6llIGF2YW50IGRlIGwnYWxsb3VlciDDoCB1biBow7R0ZS4gQ2VsYSBlc3QgZmFpdCBlbiBlbnZveWFudCB1bmUKK3JlcXXDqnRlIElDTVAgZGUgdHlwZSAiZWNobyByZXF1ZXN0IiAoYXVzc2kgY29ubnVlIHNvdXMgbGUgbm9tIGRlICJwaW5nIikgw6AKK2wnYWRyZXNzZSBlbiBxdWVzdGlvbi4gU2kgbGUgc2VydmV1ciBvYnRpZW50IHVuZSByw6lwb25zZSwgYWxvcnMgbCdhZHJlc3NlIGRvaXQKK2TDqWrDoCDDqnRyZSB1dGlsaXPDqWUgZXQgdW5lIGF1dHJlIGVzdCBlc3NhecOpZS4gQ2V0dGUgb3B0aW9uIHBlcm1ldCBkZSBzdXBwcmltZXIKK2NldHRlIHbDqXJpZmljYXRpb24uIEEgdXRpbGlzZXIgYXZlYyBwcsOpY2F1dGlvbi4KKy5UUAorLkIgLS1sb2ctZGhjcAorVHJhY2VzIGFkZGl0aW9ubmVsbGVzIHBvdXIgbGUgc2VydmljZSBESENQIDogZW5yZWdpc3RyZSB0b3V0ZXMgbGVzIG9wdGlvbnMKK2Vudm95w6llcyBhdXggY2xpZW50cyBESENQIGV0IGxlcyBsYWJlbHMgdXRpbGlzw6lzIHBvdXIgbGEKK2TDqXRlcm1pbmF0aW9uIGRlIGNlbGxlcy1jaS4KKy5UUAorLkIgLS1xdWlldC1kaGNwLCAtLXF1aWV0LWRoY3A2LCAtLXF1aWV0LXJhCitTdXBwcmltZSBsZXMgbG9ncyBkZXMgb3DDqXJhdGlvbnMgZGUgcm91dGluZSBkZXMgcHJvdG9jb2xlcyBjb25jZXJuw6lzLiBMZXMKK2VycmV1cnMgZXQgbGVzIHByb2Jsw6htZXMgc2Vyb250IHRvdWpvdXJzIGVucmVnaXN0csOpcy4gTCdvcHRpb24gLS1sb2ctZGhjcAorcHJlbmRzIGxlIHBhcyBzdXIgLS1xdWlldC1kaGNwIGV0IHF1aWV0LWRoY3A2LgorLlRQCisuQiBcLWwsIC0tZGhjcC1sZWFzZWZpbGU9PGNoZW1pbiBkZSBmaWNoaWVyPgorVXRpbGlzZSBsZSBmaWNoaWVyIGRvbnQgbGUgY2hlbWluIGVzdCBmb3VybmkgcG91ciBzdG9ja2VyIGxlcyBpbmZvcm1hdGlvbnMgZGUKK2JhdXggREhDUC4KKy5UUAorLkIgLS1kaGNwLWR1aWQ9PElEIGQnZW50cmVwcmlzZT4sPHVpZD4KKyhJUHY2IHNldWxlbWVudCkgU3DDqWNpZmllIGxlIG51bcOpcm8gZCdVSUQgZGUgc2VydmV1ciBwZXJzaXN0YW50IHF1ZSBsZSBzZXJ2ZXVyCitESENQdjYgZG9pdCB1dGlsaXNlci4gQ2V0dGUgb3B0aW9uIG4nZXN0IG5vcm1hbGVtZW50IHBhcyByZXF1aXNlLCBEbnNtYXNxCitjcsOpYW50IHVuIERVSUQgYXV0b21hdGlxdWVtZW50IGxvcnNxdWUgY2VsYSBlc3QgbsOpY2Vzc2FpcmUuIExvcnNxdWUgY2V0dGUKK29wdGlvbiBlc3QgcG9zaXRpb25uw6llLCBlbGxlIGZvdXJuaXQgw6AgRG5zbWFzcSBsZXMgZG9ubsOpZXMgbsOpY2Vzc2FpcmVzIMOgIGxhCitjcsOpYXRpb24gZCd1biBEVUlEIGRlIHR5cGUgRFVJRC1FTi4gVmV1aWxsZXogbm90ZXIgcXUndW5lIGZvaXMgY3LDqcOpLCBsZSBEVUlECitlc3Qgc3RvY2vDqSBkYW5zIGxhIGJhc2UgZGVzIGJhdXgsIGF1c3NpIGNoYW5nZXIgZW50cmUgdW4gRFVJRCBjcsOpw6kKK2F1dG9tYXRpcXVlbWVudCBldCB1biBEVUlELUVOIGV0IHZpY2UtdmVyc2EgaW1wb3NlIGRlIHLDqWluaXRpYWxpc2VyIGxhIGJhc2UgZGUKK2JhdXguIExlIG51bcOpcm8gZCdJRCBkJ2VudHJlcHJpc2UgZXN0IGFzc2lnbsOpIHBhciBsJ0lBTkEsIGV0IGwndWlkIGVzdCB1bmUKK2NoYWluZSBoZXhhZMOpY2ltYWxlIHVuaXF1ZSDDoCBjaGFxdWUgc2VydmV1ci4KKy5UUAorLkIgXC02IC0tZGhjcC1zY3JpcHQ9PGNoZW1pbiBkZSBmaWNoaWVyPgorTG9yc3F1J3VuIGJhaWwgREhDUCBlc3QgY3LDqcOpLCBxdSd1biBhbmNpZW4gZXN0IHN1cHByaW3DqSwgb3UgcXUndW4gdHJhbnNmZXJ0CitURlRQIGVzdCB0ZXJtaW7DqSwgbGUgZmljaGllciBkb250IGxlCitjaGVtaW4gIGVzdCBzcMOpY2lmacOpIGVzdCBleMOpY3V0w6kuIExlIDxjaGVtaW4gZGUgZmljaGllcj4gZG9pdCDDqnRyZSB1biBjaGVtaW4KK2Fic29sdSwgYXVjdW5lIHJlY2hlcmNoZSBuJ2VzdCBlZmZlY3R1w6llIHZpYSBsYSB2YXJpYWJsZSBkJ2Vudmlyb25uZW1lbnQgUEFUSC4KK0xlcyBhcmd1bWVudHMgZm91cm5pcyDDoCBjZWx1aS1jaSBzb250IHNvaXQKKyJhZGQiICgiYWpvdXRlciIpLCAib2xkIiAoImFuY2llbiIpIG91ICJkZWwiICgic3VwcHJpbWVyIiksIHN1aXZpIGRlIGwnYWRyZXNzZQorTUFDIGRlIGwnaMO0dGUgKG91IGxlIERVSUQgcG91ciBJUHY2KSBwdWlzIGwnYWRyZXNzZSBJUCBldCBsZSBub20gZCdow7R0ZSBzaQorY2VsdWktY2kgZXN0IGNvbm51LiJhZGQiIHNpZ25pZmllIHF1J3VuIGJhaWwgYSDDqXTDqSBjcsOpw6ksICJkZWwiIHNpZ25pZmllIHF1J2lsIGEKK8OpdMOpIHN1cHByaW3DqSwgIm9sZCIgbm90aWZpZSBxdWUgbGUgYmFpbCBleGlzdGFpdCBhdSBsYW5jZW1lbnQgZGUgRG5zbWFzcSwgb3UgdW4KK2NoYW5nZW1lbnQgZCdhZHJlc3NlIE1BQyBvdSBkZSBub20gZCdow7R0ZSBwb3VyIHVuIGJhaWwgZXhpc3RhbnQgKG91LCBkYW5zIGxlIGNhcworb8O5IGxlYXNlZmlsZS1ybyBlc3Qgc3DDqWNpZmnDqSwgdW4gY2hhbmdlbWVudCBkZSBkdXLDqWUgZGUgYmFpbCBvdSBkJ2lkZW50aWZpYW50CitkJ2jDtHRlKS4gU2kgbCdhZHJlc3NlIE1hYyBlc3QgZCd1biB0eXBlIGRlIHLDqXNlYXUgYXV0cmUgcXUnZXRoZXJuZXQsIGlsIGVzdAorbsOpY2Vzc2FpcmUgZGUgbGEgcHLDqWNlZGVyIGR1IHR5cGUgZGUgcsOpc2VhdSwgcGFyIGV4ZW1wbGUgIjA2LTAxOjIzOjQ1OjY3Ojg5OmFiIgorcG91ciBkdSB0b2tlbiByaW5nLiBMZSBwcm9jZXNzdXMgZXN0IGV4w6ljdXTDqSBlbiB0ZW1wcyBxdWUgc3VwZXItdXRpbGlzYXRldXIgCisoc2kgRG5zbWFzcSBhIMOpdMOpIGxhbmPDqSBlbiB0ZW1wcyBxdWUgInJvb3QiKSwgbcOqbWUgc2kgRG5zbWFzcSBlc3QgY29uZmlndXLDqSAKK3BvdXIgY2hhbmdlciBzb24gVUlEIHBvdXIgY2VsbGUgZCd1biB1dGlsaXNhdGV1ciBub24tcHJpdmlsw6lnacOpLgorCitMJ2Vudmlyb25uZW1lbnQgZXN0IGjDqXJpdMOpIGRlIGNlbHVpIGRlIGwnaW52b2NhdGlvbiBkdSBwcm9jZXNzdXMgRG5zbWFzcSwKK2F1cXVlbCBzZSByYWpvdXRlIHF1ZWxxdWVzIHVuZXMgb3UgdG91dGVzIGxlcyB2YXJpYWJsZXMgZMOpY3JpdGVzIGNpLWRlc3NvdXMgOgorCitQb3VyIElQdjQgZXQgSVB2NiA6CisKK0ROU01BU1FfRE9NQUlOIHNpIGxlIG5vbSBkZSBkb21haW5lIHBsZWluZW1lbnQgcXVhbGlmacOpIGRlIGwnaMO0dGUgZXN0IGNvbm51LCBsYQorcGFydCByZWxhdGl2ZSBhdSBkb21haW5lIHkgZXN0IHN0b2Nrw6llLiAoTm90ZXogcXVlIGxlIG5vbSBkJ2jDtHRlIHRyYW5zbWlzIGNvbW1lCithcmd1bWVudCBhdSBzY3JpcHQgbidlc3QgamFtYWlzIHBsZWluZW1lbnQgcXVhbGlmacOpKS4KKworU2kgbGUgY2xpZW50IGZvdXJuaXQgdW4gbm9tIGQnaMO0dGUsIEROU01BU1FfU1VQUExJRURfSE9TVE5BTUUuCisKK1NpIGxlIGNsaWVudCBmb3Vybml0IGRlcyBjbGFzc2VzIGQndXRpbGlzYXRldXIsIEROU01BU1FfVVNFUl9DTEFTUzAgw6AKK0ROU01BU1FfVVNFUl9DTEFTU24uCisKK1NpIERuc21hc3EgYSDDqXTDqSBjb21waWzDqSBhdmVjIGwnb3B0aW9uIEhBVkVfQlJPS0VOX1JUQyAoImhvcmxvZ2UgUlRDCitkw6lmZWN0dWV1c2UiKSwgYWxvcnMgbGEgZHVyw6llIGR1IGJhaWwgKGVuIHNlY29uZGVzKSBlc3Qgc3RvY2vDqWUgZGFucyBsYQordmFyaWFibGUgRE5TTUFTUV9MRUFTRV9MRU5HVEgsIHNpbm9uIGxhIGRhdGUgZCdleHBpcmF0aW9uIGR1IGJhaWwgZXN0IHRvdWpvdXJzCitzdG9ja8OpIGRhbnMgbGEgdmFyaWFibGUgZCdlbnZpcm9ubmVtZW50IEROU01BU1FfTEVBU0VfRVhQSVJFUy4gTGUgbm9tYnJlIGRlCitzZWNvbmRlcyBhdmFudCBleHBpcmF0aW9uIGVzdCB0b3Vqb3VycyBzdG9ja8OpIGRhbnMgRE5TTUFTUV9USU1FX1JFTUFJTklORy4KKworU2kgdW4gYmFpbCDDqXRhaXQgYXNzb2Npw6kgw6AgdW4gbm9tIGQnaMO0dGUgZXQKK3F1ZSBjZWx1aS1jaSBlc3Qgc3VwcHJpbcOpLCB1biDDqXbDqm5lbWVudCBkZSB0eXBlICJvbGQiIGVzdCBnw6luw6lyw6kgYXZlYyBsZQorbm91dmVhdSBzdGF0dXQgZHUgYmFpbCwgYy3DoC1kIHNhbnMgbm9tIGQnaMO0dGUsIGV0IGxlIG5vbSBpbml0aWFsIGVzdCBmb3VybmkKK2RhbnMgbGEgdmFyaWFibGUgZCdlbnZpcm9ubmVtZW50IEROU01BU1FfT0xEX0hPU1ROQU1FLgorCitMYSB2YXJpYWJsZSBETlNNQVNRX0lOVEVSRkFDRSBjb250aWVudCBsZSBub20gZGUgbCdpbnRlcmZhY2Ugc3VyIGxhcXVlbGxlIGxhCityZXF1w6p0ZSBlc3QgYXJyaXbDqWU7IGNlY2kgbidlc3QgcGFzIHJlbnNlaWduw6kgZGFucyBsZSBjYXMgZGVzIGFjdGlvbnMgIm9sZCIKK2F5YW50IGxpZXUgYXByw6hzIHVuIHJlZMOpbWFycmFnZSBkZSBkbnNtYXNxLgorCitMYSB2YXJpYWJsZSBETlNNQVNRX1JFTEFZX0FERFJFU1MgZXN0IHJlbnNlaWduw6llIHNpIGxlIGNsaWVudCBhIHV0aWxpc8OpIHVuCityZWxhaSBESENQIHBvdXIgY29udGFjdGVyIERuc21hc3EsIHNpIGwnYWRyZXNzZSBJUCBkdSByZWxhaSBlc3QgY29ubnVlLgorCitETlNNQVNRX1RBR1MgY29udGllbnQgdG91cyBsZXMgbGFiZWxzIGZvdXJuaXMgcGVuZGFudCBsYSB0cmFuc2FjdGlvbiBESENQLAorc8OpcGFyw6lzIHBhciBkZXMgZXNwYWNlcy4KKworRE5TTUFTUV9MT0dfREhDUCBlc3QgcG9zaXRpb25uw6kgc2kKKy5CIC0tbG9nLWRoY3AKK2VzdCBhY3RpdsOpLgorCitQb3VyIElQdjQgc2V1bGVtZW50IDoKKworRE5TTUFTUV9DTElFTlRfSUQsIHNpIGwnaMO0dGUgYSBmb3VybmkgdW4gaWRlbnRpZmlhbnQgZGUgY2xpZW50LgorCitETlNNQVNRX0NJUkNVSVRfSUQsIEROU01BU1FfU1VCU0NSSUJFUl9JRCwgRE5TTUFTUV9SRU1PVEVfSUQgc2kgdW4gcmVsYWkgREhDUCBhCityYWpvdXTDqSBsJ3VuZSBkZSBjZXMgb3B0aW9ucy4KKworU2kgbGUgY2xpZW50IGZvdXJuaXQgdW5lIGluZm9ybWF0aW9uIGRlIGNsYXNzZSBkZSB2ZW5kZXVyLCBETlNNQVNRX1ZFTkRPUl9DTEFTUy4KKworUG91ciBJUHY2IHNldWxlbWVudCA6CisKK1NpIGxlIGNsaWVudCBmb3Vybml0IHVuZSBjbGFzc2UgZGUgdmVuZGV1ciAodmVuZG9yLWNsYXNzKSwgcG9zaXRpb25uZQorRE5TTUFTUV9WRU5ET1JfQ0xBU1NfSUQgYXZlYyBjb21tZSBjb250ZW51IGxlIG51bcOpcm8gSUFOQSBkZSBsJ2VudHJlcHJpc2UgcG91cgorbGEgY2xhc3NlLCBldCBETlNNQVNRX1ZFTkRPUl9DTEFTUzAuLkROU01BU1FfVkVORE9SX0NMQVNTbiBwb3VyIGxlcyBkb25uw6llcy4KKworRE5TTUFTUV9TRVJWRVJfRFVJRCBjb250aWVudCBsZSBEVUlEIGR1IHNlcnZldXIgOiBjZXR0ZSB2YWxldXIgZXN0IGxhIG3Dqm1lCitwb3VyIGNoYXF1ZSBhcHBlbCBhdSBzY3JpcHQuCisKK0ROU01BU1FfSUFJRCBjb250ZW5hbnQgbCdJQUlEIHBvdXIgbGUgYmFpbC4gU2kgbGUgYmFpbCBlc3QgdW5lIGFsbG9jYXRpb24KK3RlbXBvcmFpcmUsIGNlbGEgZXN0IHByw6lmaXjDqSBwYXIgbGUgY2FyYWN0w6hyZSAnVCcuCisKK0ROU01BU1FfTUFDIGNvbnRpZW50IGwnYWRyZXNzZSBNQUMgZHUgY2xpZW50LCBzaSBjZWxsZS1jaSBlc3QgY29ubnVlLgorCitBIG5vdGVyIHF1ZSBsZSBub20gZCdow7R0ZSBmb3VybmksIGxhIGNsYXNzZSBkZSB2ZW5kZXVyIG91IGxlcyBkb25uw6llcyBkZSBjbGFzc2UKK2QndXRpbGlzYXRldXIgc29udCB1bmlxdWVtZW50IGZvdXJuaWVzIHBvdXIgbGVzIGFjdGlvbnMgImFkZCIgb3UgbCdhY3Rpb24gIm9sZCIKK2xvcnNxdSd1biBow7R0ZSByZXByZW5kIHVuIGJhaWwgZXhpc3RhbnQsIHB1aXNxdWUgY2VzIGluZm9ybWF0aW9ucyBuZSBzb250IHBhcworY29uc2VydsOpZXMgZGFucyBsYSBiYXNlIGRlIGJhdXggZGUgZG5zbWFzcS4KKworVG91cyBsZXMgZGVzY3JpcHRldXJzIGRlIGZpY2hpZXJzIHNvbnQgZmVybcOpcywgc2F1ZiBzdGRpbiwgc3Rkb3V0IGV0IHN0ZGVyciBxdWkKK3NvbnQgb3V2ZXJ0cyBzdXIgL2Rldi9udWxsIChzYXVmIGVuIG1vZGUgZMOpdmVybWluYWdlKS4KKworTGUgc2NyaXB0IG4nZXN0IHBhcyBsYW5jw6kgZGUgbWFuacOocmUgY29uY3VycmVudGUgOiBhdSBwbHVzIHVuZSBpbnN0YW5jZSBkdQorc2NyaXB0IGVzdCBleGVjdXTDqWUgw6AgbGEgZm9pcyAoZG5zbWFzcSBhdHRlbmRzIHF1J3VuZSBpbnN0YW5jZSBkZSBzY3JpcHQgc2UKK3Rlcm1pbmUgYXZhbnQgZGUgbGFuY2VyIGxhIHN1aXZhbnRlKS4gTGVzIGNoYW5nZW1lbnRzIGRhbnMgbGEgYmFzZSBkZXMgYmF1eAorbsOpY2Vzc2l0YW50IGxlIGxhbmNlbWVudCBkdSBzY3JpcHQgc29udCBwbGFjw6kgZW4gYXR0ZW50ZSBkYW5zIHVuZSBxdWV1ZSBqdXNxdSfDoAordGVybWluYWlzb24gZCd1bmUgaW5zdGFuY2UgZHUgc2NyaXB0IGVuIGNvdXJzLiBTaSBjZXR0ZSBtaXNlIGVuIHF1ZXVlIGZhaXQgcXVlCitwbHVzaWV1cnMgY2hhbmdlbWVudHMgZCfDqXRhdHMgYXBwYXJhaXNzZW50IHBvdXIgdW4gYmFpbCBkb25uw6kgYXZhbnQgcXVlIGxlCitzY3JpcHQgcHVpc3NlIMOqdHJlIGxhbmPDqSwgYWxvcnMgbGVzIMOpdGF0cyBsZXMgcGx1cyBhbmNpZW5zIHNvbnQgc3VwcHJpbcOpcyBldAorbG9yc3F1ZSBsZSBzY3JpcHQgc2VyYSBmaW5hbGVtZW50IGxhbmPDqSwgY2Ugc2VyYSBhdmVjIGwnw6l0YXQgY291cmFudCBkdSBiYWlsLgorCitBdSBkw6ltYXJyYWdlIGRlIERuc21hc3EsIGxlIHNjcmlwdCBzZXJhIGludm9xdcOpIHBvdXIgY2hhY3VuIGRlcyBiYXV4IGV4aXN0YW50cworZGFucyBsZSBmaWNoaWVyIGRlcyBiYXV4LiBMZSBzY3JpcHQgc2VyYSBsYW5jw6kgYXZlYyBsJ2FjdGlvbiAiZGVsIiBwb3VyIGxlcworYmF1eCBleHBpcsOpcywgZXQgIm9sZCIgcG91ciBsZXMgYXV0cmVzLiBMb3JzcXVlIERuc21hc3EgcmXDp29pdCB1biBzaWduYWwgSFVQLAorbGUgc2NyaXB0IHNlcmEgaW52b3F1w6kgYXZlYyB1bmUgYWN0aW9uICJvbGQiIHBvdXIgdG91cyBsZXMgYmF1eCBleGlzdGFudHMuCisKK0lsIGV4aXN0ZSBkZXV4IGF1dHJlcyBhY3Rpb25zIHBvdXZhbnQgYXBwYXJhw650cmUgY29tbWUgYXJndW1lbnQgYXUgc2NyaXB0IDoKKyJpbml0IiBldCAidGZ0cCIuIEQnYXV0cmVzIHNvbnQgc3VzY2VwdGlibGVzIGQnw6p0cmUgcmFqb3V0w6llcyBkYW5zIGxlIGZ1dHVyLAorYXVzc2kgbGVzIHNjcmlwdHMgZGV2cmFpZW50LcOqdHJlIMOpY3JpdHMgZGUgc29ydGUgw6AgaWdub3JlciBsZXMgYWN0aW9ucworaW5jb25udWVzLiAiaW5pdCIgZXN0IGTDqWNyaXRlIGNpLWRlc3NvdXMgZGFucworLkIgLS1sZWFzZWZpbGUtcm8uCitMJ2FjdGlvbiAidGZ0cCIgZXN0IGludm9xdcOpZSBsb3JzcXUndW4gdHJhbnNmZXJ0IGRlIGZpY2hpZXIgVEZUUCBzJ2VzdAordGVybWluw6kuIFNlcyBhcmd1bWVudHMgc29udCBsYSB0YWlsbGUgZHUgZmljaGllciBlbiBvY3RldHMsIGwnYWRyZXNzZSDDoAorbGFxdWVsbGUgbGUgZmljaGllciBhIMOpdMOpIGVudm95w6ksIGFpbnNpIHF1ZSBsZSBjaGVtaW4gY29tcGxldCBkdSBmaWNoaWVyLgorCisuVFAKKy5CIC0tZGhjcC1sdWFzY3JpcHQ9PGNoZW1pbj4KK1Nww6ljaWZpZSB1biBzY3JpcHQgw6ljcml0IGVuIEx1YSwgZGV2YW50IMOqdHJlIGV4w6ljdXTDqSBsb3JzcXVlIGRlcyBiYXV4IHNvbnQKK2Nyw6nDqXMsIGTDqXRydWl0cyBvdSBtb2RpZmnDqXMuIFBvdXIgdXRpbGlzZXIgY2V0dGUgb3B0aW9uLCBkbnNtYXNxIGRvaXQgw6p0cmUKK2NvbXBpbMOpIGF2ZWMgYXZlYyBsZSBzdXBwb3J0IGRlIEx1YS4gTCdpbnRlcnByw6l0ZXVyIEx1YSBlc3QgaW5pdGlhbGlzw6kgdW5lCitzZXVsZSBmb2lzLCBsb3JzcXVlIGRuc21hc3EgZMOpbWFycmUsIGNlIHF1aSBmYWl0IHF1ZSBsZXMgdmFyaWFibGVzIGdsb2JhbGVzCitwZXJzaXN0ZW50IGVudHJlIGxlcyDDqXbDqm5lbWVudHMgbGnDqXMgYXV4IGJhdXguIExlIGNvZGUgTHVhIGRvaXQgZMOpZmluaXIgdW5lCitmb25jdGlvbgorLkIgbGVhc2UKK2V0IHBldXQgZm91cm5pciBkZXMgZm9uY3Rpb25zCisuQiBpbml0CitldAorLkIgc2h1dGRvd24KK3F1aSBzb250IGFwcGVsbMOpZXMsIHNhbnMgYXJndW1lbnRzLCBsb3JzcXVlIGRuc21hc3EgZMOpbWFycmUgb3UgcydhcnLDqnRlLgorSWwgcGV1dCDDqWdhbGVtZW50IGZvdXJuaXIgdW5lIGZvbmN0aW9uCisuQiB0ZnRwLgorCitMYSBmb25jdGlvbgorLkIgbGVhc2UKK3Jlw6dvaXQgbGVzIGluZm9ybWF0aW9ucyBkw6l0YWlsbMOpZXMgZGFucworLkIgLS1kaGNwLXNjcmlwdC4gCitJbCByZcOnb2l0IGRldXggYXJndW1lbnRzLiBMZSBwcmVtaWVyIHNww6ljaWZpZSBsJ2FjdGlvbiwgcXVpIGVzdCB1bmUgY2hhw65uZSBkZQorY2FyYWN0w6hyZXMgY29udGVuYW50IGxlcyB2YWxldXJzICJhZGQiIChham91dCksICJvbGQiIChyw6lhY3RpdmF0aW9uIGQndW4gYmFpbAorZXhpc3RhbnQpIG91ICJkZWwiIChzdXBwcmVzc2lvbikuIExlIGRldXhpw6htZSBlc3QgdW5lIHRhYmxlIGNvbnRlbmFudCBkZXMKK3BhaXJlcyBkZSB2YWxldXJzIGRlIGxhYmVscy4gTGVzIGxhYmVscyBjb3JyZXNwb25kZW50IHBvdXIgbCdlc3NlbnRpZWwgYXV4Cit2YWxldXJzIGQnZW52aXJvbm5lbWVudCBkw6l0YWlsbMOpZXMgY2ktZGVzc3VzLCBhaW5zaSBsZSBsYWJlbCAiZG9tYWluIiAoZG9tYWluZSkKK2NvbnRpZW50IGxlcyBtw6ptZXMgZG9ubsOpZXMgcXVlIGxhIHZhcmlhYmxlIGQnZW52aXJvbm5lbWVudCBETlNNQVNRX0RPTUFJTi4gSWwKK2V4aXN0ZSBxdWVscXVlcyBsYWJlbHMgc3VwcGzDqW1lbnRhaXJlcyBjb250ZW5hbnQgbGVzIGRvbm7DqWVzIGZvdXJuaWVzIGNvbW1lCithcmd1bWVudHMgw6AKKy5CIC0tZGhjcC1zY3JpcHQuIAorQ2VzIGxhYmVscyBzb250CisuQiBtYWNfYWRkcmVzcywgaXBfYWRkcmVzcworKHBvdXIgcmVzcGVjdGl2ZW1lbnQgbCdhZHJlc3NlIE1BQyBldCBsJ2FkcmVzc2UgSVApCitldAorLkIgaG9zdG5hbWUKKyhsZSBub20gZCdow7R0ZSkgZGFucyBsZSBjYXMgZCdJUHY0LCBldAorLkIgY2xpZW50X2R1aWQsIGlwX2FkZHJlc3MKKyh2YWxldXIgRFVJRCBkdSBjbGllbnQgZXQgYWRyZXNzZSBJUCByZXNwZWN0aXZlbWVudCkKK2FpbnNpIHF1ZQorLkIgaG9zdG5hbWUKKyhsZSBub20gZCdow7R0ZSkgZGFucyBsZSBjYXMgZCdJUHY2LgorCitMYSBmb25jdGlvbgorLkIgdGZ0cAorZXN0IGFwcGVsw6llIGRlIGxhIG3Dqm1lIGZhw6dvbiBxdWUgbGEgZm9uY3Rpb24gImxlYXNlIiwgZXQgbGEgdGFibGUgY29udGllbnQgbGVzCitsYWJlbHMKKy5CIGRlc3RpbmF0aW9uX2FkZHJlc3MsCisuQiBmaWxlX25hbWUKK2V0CisuQiBmaWxlX3NpemUKKyhyZXNwZWN0aXZlbWVudCAiYWRyZXNzZSBkZSBkZXN0aW5hdGlvbiIsICJub20gZGUgZmljaGllciIgZXQgInRhaWxsZSBkZSBmaWNoaWVyIikuCisuVFAKKy5CIC0tZGhjcC1zY3JpcHR1c2VyCitTcMOpY2lmaWUgbCd1dGlsaXNhdGV1ciBzb3VzIGxlcXVlbCBsZSBzY3JpcHQgc2hlbGwgbGVhc2UtY2hhbmdlIG91IGxlIHNjcmlwdAorZG9pdmVudCDDqnRyZSBleMOpY3V0w6lzLiBMYSB2YWxldXIgcGFyIGTDqWZhdXQgY29ycmVzcG9uZCDDoCBsJ3V0aWxpc2F0ZXVyIHJvb3QKK21haXMgcGV1dC3DqnRyZSBjaGFuZ8OpZSBwYXIgbGUgYmlhaXMgZGUgY2V0dGUgb3B0aW9uLgorLlRQCisuQiBcLTksIC0tbGVhc2VmaWxlLXJvCitTdXBwcmltZXIgY29tcGzDqHRlbWVudCBsJ3VzYWdlIGR1IGZpY2hpZXIgc2VydmFudCBkZSBiYXNlIGRlIGRvbm7DqWUgcG91ciBsZXMKK2JhdXggREhDUC4gTGUgZmljaGllciBuZSBzZXJhIG5pIGNyw6nDqSwgbmkgbHUsIG5pIMOpY3JpdC4gQ2hhbmdlIGxhIGZhw6dvbiBkb250IGxlCitzY3JpcHQgZGUgY2hhbmdlbWVudCBkJ8OpdGF0IGRlIGJhaWwgZXN0IGxhbmPDqSAoc2kgY2VsdWktY2kgZXN0IGZvdXJuaSBwYXIgbGUKK2JpYWlzIGRlIGwnb3B0aW9uCisuQiAtLWRoY3Atc2NyaXB0CispLCBkZSBzb3J0ZSBxdWUgbGEgYmFzZSBkZSBkb25uw6llcyBkZSBiYXV4IHB1aXNzZQorw6p0cmUgY29tcGzDqHRlbWVudCBnw6lyw6llIHBhciBsZSBzY3JpcHQgc3VyIHVuIHN0b2NrYWdlIGV4dGVybmUuIEVuIGFkZGl0aW9uIGF1eAorYWN0aW9ucyBkw6ljcml0ZXMgZGFucyAKKy5CICAtLWRoY3Atc2NyaXB0LAorbGUgc2NyaXB0IGRlIGNoYW5nZW1lbnQgZCfDqXRhdCBkZSBiYWlsIGVzdCBhcHBlbGzDqSB1bmUgZm9pcywgYXUgbGFuY2VtZW50IGRlCitEbnNtYXNxLCBhdmVjIHBvdXIgc2V1bCBhcmd1bWVudCAiaW5pdCIuIExvcnNxdSdhcHBlbGzDqSBkZSBsYSBzb3J0ZSwgbGUgc2NyaXB0Citkb2l0IGZvdXJuaXIgbCfDqXRhdCBkZSBsYSBiYXNlIGRlIGJhdXgsIGRhbnMgbGUgZm9ybWF0IGRlIGZpY2hpZXIgZGUgYmF1eCBkZQorRG5zbWFzcSwgc3VyIHNhIHNvcnRpZSBzdGFuZGFyZCAoc3Rkb3V0KSBldCByZXRvdXJuZXIgdW4gY29kZSBkZSByZXRvdXIgZGUgMC4KK1Bvc2l0aW9ubmVyIGNldHRlIG9wdGlvbiBwcm92b3F1ZSDDqWdhbGVtZW50IHVuZSBpbnZvY2F0aW9uIGR1IHNjcmlwdCBkZQorY2hhbmdlbWVudCBkJ8OpdGF0IGRlIGJhaWwgw6AgY2hhcXVlIGNoYW5nZW1lbnQgZGUgbCdpZGVudGlmaWFudCBkZSBjbGllbnQsIGRlCitsb25ndWV1ciBkZSBiYWlsIG91IGRlIGRhdGUgZCdleHBpcmF0aW9uLgorLlRQCisuQiAtLWJyaWRnZS1pbnRlcmZhY2U9PGludGVyZmFjZT4sPGFsaWFzPlssPGFsaWFzPl0KK1RyYWl0ZXIgbGVzIHJlcXXDqnRlcyBESENQIGFycml2YW50IHN1ciBuJ2ltcG9ydGUgbGFxdWVsbGUgZGVzIGludGVyZmFjZXMgPGFsaWFzPgorY29tbWUgc2kgZWxsZXMgYXJyaXZhaWVudCBkZSBsJ2ludGVyZmFjZSA8aW50ZXJmYWNlPi4gQ2V0dGUgb3B0aW9uIGVzdAorbsOpY2Vzc2FpcmUgbG9ycyBkZSBsJ3V0aWxpc2F0aW9uIGRlIHBvbnQgZXRoZXJuZXQgImFuY2llbiBtb2RlIiBzdXIgcGxhdGUtZm9ybWUKK0JTRCwgcHVpc3F1ZSBkYW5zIGNlIGNhcyBsZXMgcGFxdWV0cyBhcnJpdmVudCBzdXIgZGVzIGludGVyZmFjZXMgInRhcCIgbidvbnQKK3BhcyBkJ2FkcmVzc2UgSVAuICBDaGFxdWUgPGFsaWFzPiBwZXV0IGZpbmlyIGF2ZWMgdW4gc2ltcGxlICcqJyBqb2tlci4KKy5UUAorLkIgXC1zLCAtLWRvbWFpbj08ZG9tYWluZT5bLDxnYW1tZSBkJ2FkcmVzc2VzPlssbG9jYWxdXQorU3DDqWNpZmllIGxlIGRvbWFpbmUgZHUgc2VydmV1ciBESENQLiBMZSBkb21haW5lIHBldXQgw6p0cmUgZG9ubsOpIGRlIG1hbmnDqHJlCitpbmNvbmRpdGlvbm5lbGxlIChzYW5zIHNww6ljaWZpZXIgZGUgZ2FtbWUgZCdhZHJlc3NlcyBJUCkgb3UgcG91ciBkZXMgZ2FtbWVzCitkJ2FkcmVzc2VzIElQIGxpbWl0w6llcy4gQ2VsYSBhIGRldXggZWZmZXRzOyB0b3V0IGQnYWJvcmQsIGxlCitzZXJ2ZXVyIERIQ1AgcmV0b3VybmUgbGUgZG9tYWluZSDDoCB0b3VzIGxlcyBow7R0ZXMgbGUgZGVtYW5kYW50LCBkZXV4acOobWVtZW50LAorY2VsYSBzcMOpY2lmaWUgbGUgZG9tYWluZSB2YWxpZGUgcG91ciBsZXMgaMO0dGVzIERIQ1AgY29uZmlndXLDqXMuIExlIGJ1dCBkZSBjZWxhCitlc3QgZGUgY29udHJhaW5kcmUgbGVzIG5vbXMgZCdow7R0ZSBhZmluIHF1J2F1Y3VuIGjDtHRlIHN1ciBsZSBMQU4gbmUgcHVpc3NlCitmb3VybmlyIHZpYSBESENQIHVuIG5vbSB0ZWwgcXVlIHBhciBleGVtcGxlICJtaWNyb3NvZnQuY29tIiBldCBjYXB0dXJlciBkdQordHJhZmljIGRlIG1hbmnDqHJlIGlsbMOpZ2l0aW1lLiBTaSBhdWN1biBub20gZGUgZG9tYWluZSBuJ2VzdCBzcMOpY2lmacOpLCBhbG9ycworbGVzIG5vbXMgZCdow7R0ZXMgYXZlYyB1biBub20gZGUgZG9tYWluZSAoYy3DoC1kIHVuIHBvaW50IGRhbnMgbGUgbm9tKSBzZXJvbnQKK2ludGVyZGl0cyBldCBlbnJlZ2lzdHLDqXMgZGFucyBsZSBqb3VybmFsIChsb2dzKS4gU2kgdW4gc3VmZml4ZSBlc3QgZm91cm5pLCBhbG9ycworbGVzIG5vbXMgZCdow7R0ZXMgcG9zc8OpZGFudCB1biBkb21haW5lIHNvbnQgYXV0b3Jpc8OpcywgcG91ciBwZXUgcXVlIGxlIG5vbSBkZQorZG9tYWluZSBjb8OvbmNpZGUgYXZlYyBsZSBub20gZm91cm5pLiBEZSBwbHVzLCBzaSB1biBzdWZmaXhlIGVzdCBmb3VybmksIGFsb3JzCitsZXMgbm9tcyBkJ2jDtHRlcyBuZSBwb3Nzw6lkYW50IHBhcyBkZSBub20gZGUgZG9tYWluIHNlIHZvaWVudCByYWpvdXRlciBsZQorc3VmZml4ZSBmb3VybmkgZGFucyBsJ29wdGlvbgorLkIgLS1kb21haW4uCitBaW5zaSwgc3VyIG1vbiByw6lzZWF1LCBqZSBwZXV4IGNvbmZpZ3VyZXIKKy5CIC0tZG9tYWluPXRoZWtlbGxleXMub3JnLnVrCitldCBhdm9pciB1bmUgbWFjaGluZSBkb250IGxlIG5vbSBESENQIHNlcmFpdCAibGFwdG9wIi4gTCdhZHJlc3NlIElQIGRlIGNldHRlCittYWNoaW5lIHNlcmEgZGlzcG9uaWJsZSDDoCBsYSBmb2lzIHBvdXIgImxhcHRvcCIgZXQgImxhcHRvcC50aGVrZWxsZXlzLm9yZy51ayIuCitTaSBsYSB2YWxldXIgZm91cm5pZSBwb3VyIDxkb21haW5lPiBlc3QgIiMiLCBhbG9ycyBsZSBub20gZGUgZG9tYWluZSBlc3QKK3Bvc2l0aW9ubsOpIMOgIGxhIHByZW1pw6hyZSB2YWxldXIgZGUgbGEgZGlyZWN0aXZlICJzZWFyY2giIGR1IGZpY2hpZXIKKy9ldGMvcmVzb2x2LmNvbmYgKG91IMOpcXVpdmFsZW50KS4KKworTGEgZ2FtbWUgZCdhZHJlc3NlcyBwZXV0IMOqdHJlIGRlIGxhIGZvcm1lCis8YWRyZXNzZSBpcD4sPGFkcmVzc2UgaXA+IG91IDxhZHJlc3NlIGlwPi88bWFzcXVlIGRlIHLDqXNlYXU+IHZvaXJlIHVuZSBzaW1wbGUKKzxhZHJlc3NlIGlwPi4gVm9pcgorLkIgLS1kaGNwLWZxZG4KK3F1aSBwZXV0IGNoYW5nZXIgbGUgY29tcG9ydGVtZW50IGRlIGRuc21hc3EgcmVsYXRpZiBhdXggZG9tYWluZXMuCisKK1NpIGxhIGdhbW1lIGQnYWRyZXNzZSBlc3QgZm91cm5pZSBzb3VzIGxhIGZvcm1lCis8YWRyZXNzZSBpcD4vPHRhaWxsZSBkZSByw6lzZWF1PiwgYWxvcnMgbGUgZHJhcGVhdSAibG9jYWwiIHBldXQtw6p0cmUgcmFqb3V0w6kKK3F1aSBhIHBvdXIgZWZmZWN0IGQnYWpvdXRlciAtLWxvY2FsLWRlY2xhcmF0aW9ucyBhdXggcmVxdcOqdGVzIEROUyBkaXJlY3RlcyBldAoraW52ZXJzZXMuIEMtw6AtZAorLkIgLS1kb21haW49dGhla2VsbGV5cy5vcmcudWssMTkyLjE2OC4wLjAvMjQsbG9jYWwKK2VzdCBpZGVudGlxdWUgw6AKKy5CIC0tZG9tYWluPXRoZWtlbGxleXMub3JnLnVrLDE5Mi4xNjguMC4wLzI0CistLWxvY2FsPS90aGVrZWxsZXlzLm9yZy51ay8gLS1sb2NhbD0vMC4xNjguMTkyLmluLWFkZHIuYXJwYS8KK0xhIHRhaWxsZSBkZSByw6lzZWF1IGRvaXQtw6p0cmUgZGUgOCwgMTYgb3UgMjQgcG91ciDDqnRyZSB2YWxpZGUuCisuVFAKKy5CIC0tZGhjcC1mcWRuCitEYW5zIGxlIG1vZGUgcGFyIGTDqWZhdXQsIGRuc21hc3EgaW5zw6hyZSBsZXMgbm9tcyBub24tcXVhbGlmacOpcyBkZXMgY2xpZW50cworREhDUCBkYW5zIGxlIEROUy4gUG91ciBjZXR0ZSByYWlzb24sIGxlcyBub21zIGRvaXZlbnQgw6p0cmUgdW5pcXVlcywgbcOqbWUgc2kKK2RldXggY2xpZW50cyBheWFudCBsZSBtw6ptZSBub20gc29udCBkYW5zIGRldXggZG9tYWluZXMgZGlmZsOpcmVudHMuIFNpIHVuCitkZXV4acOobWUgY2xpZW50IERIQ1AgYXBwYXJhw650IGF5YW50IGxlIG3Dqm1lIG5vbSBxdSd1biBjbGllbnQgZMOpasOgIGV4aXN0YW50LAorY2Ugbm9tIGVzdCB0cmFuc2bDqXLDqSBhdSBub3V2ZWF1IGNsaWVudC4gU2kKKy5CIC0tZGhjcC1mcWRuCitlc3Qgc3DDqWNpZmnDqSwgY2UgY29tcG9ydGVtZW50IGNoYW5nZSA6IGxlcyBub21zIG5vbiBxdWFsaWZpw6lzIG5lIHNvbnQgcGx1cworcmFqb3V0w6lzIGRhbnMgbGUgRE5TLCBzZXVscyBsZXMgbm9tcyBxdWFsaWZpw6lzIGxlIHNvbnQuIERldXggY2xpZW50cyBESENQCithdmVjIGxlIG3Dqm1lIG5vbSBwZXV2ZW50IHRvdXMgbGVzIGRldXggZ2FyZGVyIGxlIG5vbSwgcG91ciBwZXUgcXVlIGxhIHBhcnRpZQorcmVsYXRpdmUgYXUgZG9tYWluZSBzb2l0IGRpZmbDqXJlbnRlIChjLcOgLWQgcXVlIGxlcyBub21zIHBsZWluZW1lbnRzIHF1YWxpZmnDqXMKK2RpZmbDqHJlbnQpLiBQb3VyIGQnYXNzdXJlciBxdWUgdG91cyBsZXMgbm9tcyBvbnQgdW5lIHBhcnRpZSBkb21haW5lLCBpbCBkb2l0LXkKK2F2b2lyIGF1IG1vaW5zIHVuCisuQiAtLWRvbWFpbgorc2FucyBnYW1tZSBkJ2FkcmVzc2VzIGRlIHNww6ljaWZpw6kgbG9yc3F1ZSBsJ29wdGlvbgorLkIgLS1kaGNwLWZxZG4gCitlc3QgY29uZmlndXLDqWUuCisuVFAKKy5CIC0tZGhjcC1jbGllbnQtdXBkYXRlCitOb3JtYWxlbWVudCwgbG9yc3F1ZSBkbnNtYXNxIGZvdXJuaXQgdW4gYmFpbCBESENQLCBpbCBwb3NpdGlvbm5lIHVuIGxhYmVsCitkYW5zIGwnb3B0aW9uIEZRRE4gcG91ciBpbmRpcXVlciBhdSBjbGllbnQgcXUnaWwgbmUgZG9pdCBwYXMgdGVudGVyIGRlIGZhaXJlCit1bmUgbWlzZSDDoCBqb3VyIERETlMgYXZlYyBzb24gbm9tIGV0IHNvbiBhZHJlc3NlIElQLiBDZWNpIHBhcmNlIHF1ZSBsYSBwYWlyZQorTm9tLUlQIGVzdCByYWpvdXTDqWUgYXV0b21hdGlxdWVtZW50IGRhbnMgbGEgcGFydGllIEROUyBkZSBkbnNtYXNxLiBDZXR0ZSBvcHRpb24KK2luaGliZSBjZSBjb21wb3J0ZW1lbnQgY2UgcXVpIGVzdCB1dGlsZSwgcGFyIGV4ZW1wbGUsIHBvdXIgcGVybWV0dHJlIGF1eCBjbGllbnRzCitXaW5kb3dzIGRlIGxhIG1pc2Ugw6Agam91ciBkZSBzZXJ2ZXVycyBBY3RpdmUgRGlyZWN0b3J5LiBWb2lyIGxhIFJGQyA0NzAyIHBvdXIKK3BsdXMgZGUgZMOpdGFpbHMuCisuVFAKKy5CIC0tZW5hYmxlLXJhCitBY3RpdmUgbGEgZm9uY3Rpb25hbGl0w6kgZCdhbm5vbmNlcyByb3V0ZXVycyBJUHY2ICgiSVB2NiBSb3V0ZXIgQWR2ZXJ0aXNlbWVudCIpLgorREhDUHY2IG5lIGfDqHJlIHBhcyBsYSBjb25maWd1cmF0aW9uIGNvbXBsw6h0ZSBkdSByw6lzZWF1IGRlIGxhIG3Dqm1lIGZhw6dvbiBxdWUKK0RIQ1B2NC4gTGEgZMOpY291dmVydGUgZGUgcm91dGV1cnMgZXQgbGEgZMOpY291dmVydGUgKMOpdmVudHVlbGxlKSBkZSBwcsOpZml4ZXMgcG91cgorbGEgY3LDqWF0aW9uIGF1dG9ub21lIGQnYWRyZXNzZSBzb250IGfDqXLDqWVzIHBhciB1biBwcm90b2NvbGUgZGlmZsOpcmVudC4KK0xvcnNxdWUgREhDUCBlc3QgdXRpbGlzw6ksIHNldWwgdW4gc291cy1lbnNlbWJsZSBkZSB0b3V0IGNlY2kgZXN0IG7DqWNlc3NhaXJlIGV0CitkbnNtYXNxIGVzdCDDoCBtw6ptZSBkZSBsZSBnw6lyZXIsIGVuIHV0aWxpc2FudCBsYSBjb25maWd1cmF0aW9uIERIQ1AgcHLDqXNlbnRlIHBvdXIKK2ZvdXJuaXIgbGEgbWFqb3JpdMOpIGRlcyBkb25uw6llcy4gTG9yc3F1ZSBsZXMgYW5ub25jZXMgcm91dGV1cnMgKFJBIHBvdXIgIlJvdXRlcgorQWR2ZXJ0aXNlbWVudCIpIHNvbnQgYWN0aXbDqWVzLCBkbnNtYXNxIHZhIGFubm9uY2VyIHVuIHByw6lmaXhlIHBvdXIgY2hhcXVlCitkaGNwLXJhbmdlIGV0LCBwYXIgZMOpZmF1dCwgZm91cm5pciBjb21tZSB2YWxldXIgZGUgcm91dGV1ciBldCBkZSBETlMgcsOpY3Vyc2lmCitsYSB2YWxldXIgZCdhZHJlc3NlIGxpbmstbG9jYWwgYXBwcm9wcmnDqWUgcGFybWkgY2VsbGVzIGRlIGxhIG1hY2hpbmUgc3VyCitsYXF1ZWxsZSB0b3VybmUgZG5zbWFzcS4KK1BhciBkw6lmYXV0LCBsZXMgYml0cyAibWFuYWdlZCBhZGRyZXNzIiBzb250IHBvc2l0aW9ubsOpcywgZXQgbGUgYml0ICJ1c2UgU0xBQUMiCisoInV0aWxpc2VyIFNMQUFDIikgZXN0IHLDqWluaXRpYWxpc8OpLiBDZWxhIHBldXQtw6p0cmUgY2hhbmfDqSBwb3VyIGRlcworc291cy1yw6lzZWF1eCBkb25uw6lzIHBhciBsZSBiaWFpcyBkdSBtb3QgY2xlZiBkZSBtb2RlIGTDqWNyaXMgZGFucworLkIgLS1kaGNwLXJhbmdlLgorTGVzIHBhcmFtw6h0cmVzIEROUyBkdSBSRkM2MTA2IHNvbnQgaW5jbHVzIGRhbnMgbGVzIGFubm9uY2VzLiBQYXIgZMOpZmF1dCwKK2wnYWRyZXNzZSBsaW5rLWxvY2FsIGFwcHJvcHJpw6llIHBhcm1pIGNlbGxlcyBkZSBsYSBtYWNoaW5lIHN1ciBsYXF1ZWxsZSB0b3VybmUKK2Ruc21hc3EgZXN0IHNww6ljaWZpw6llIGNvbW1lIEROUyByw6ljdXJzaWYuIFNpIGVsbGVzIHNvbnQgZm91cm5pZXMsIGxlcworb3B0aW9ucyBkbnMtc2VydmVyIGV0IGRvbWFpbi1zZWFyY2ggc29udCB1dGlsaXPDqWVzIHJlc3BlY3RpdmVtZW50IHBvdXIgUkROU1MgZXQKK0ROU1NMLgorLlRQCisuQiAtLXJhLXBhcmFtPTxpbnRlcmZhY2U+LFtoaWdofGxvd10sW1s8aW50ZXJ2YWxsZSBkJ2Fubm9uY2Ugcm91dGV1cj5dLDxkdXLDqWUgZGUgdmllIHJvdXRlPl0KK0NvbmZpZ3VyZSBwb3VyIHVuZSBpbnRlcmZhY2UgZG9ubsOpZSBkZXMgdmFsZXVycyBwb3VyIGxlcyBhbm5vbmNlcyByb3V0ZXVycworZGlmZsOpcmVudGVzIGRlcyB2YWxldXJzIHBhciBkw6lmYXV0LiBMYSB2YWxldXIgcGFyIGTDqWZhdXQgZHUgY2hhbXAgcHJpb3JpdMOpCitwb3VyIGxlIHJvdXRldXIgcGV1dC3DqnRyZSBjaGFuZ8OpZSBkZSAibWVkaXVtIiAobW95ZW4pIMOgICJoaWdoIiAoaGF1dGUpIG91CisibG93IiAoYmFzc2UpLiBQYXIgZXhlbXBsZSA6CisuQiAtLXJhLXBhcmFtPWV0aDAsaGlnaC4KK1VuIGludGVydmFsbGUgKGVuIHNlY29uZGVzKSBlbnRyZSBsZXMgYW5ub25jZXMgcm91dGV1ciBwZXV0LcOqdHJlIGZvdXJuaSBwYXIgOgorLkIgLS1yYS1wYXJhbT1ldGgwLDYwLgorTGEgZHVyw6llIGRlIHZpZSBkZSBsYSByb3V0ZSBwZXV0LcOqdHJlIGNoYW5nw6llIG91IG1pc2Ugw6AgesOpcm8sIGF1cXVlbCBjYXMgCitsZSByb3V0ZXVyIHBldXQgYW5ub25jZXIgbGVzIHByw6lmaXhlcyBtYWlzIHBhcyBkZSByb3V0ZSA6CisuQiAtLXJhLXBhcm09ZXRoMCwwLDAKKyh1bmUgdmFsZXVyIGRlIHrDqXJvIHBvdXIgbCdpbnRlcnZhbGxlIHNpZ25pZmllIHF1J2lsIGdhcmRlIGxhIHZhbGV1ciBwYXIgZMOpZmF1dCkuCitDZXMgdHJvaXMgcGFyYW3DqHRyZXMgcGV1dmVudC3DqnRyZSBjb25maWd1csOpcyBlbiB1bmUgZm9pcyA6CisuQiAtLXJhLXBhcmFtPWxvdyw2MCwxMjAwCitMYSB2YWxldXIgcG91ciBsJ2ludGVyZmFjZSBwZXV0IGluY2x1cmUgdW4gY2FyYWN0w6hyZSBqb2tlci4KKy5UUAorLkIgLS1lbmFibGUtdGZ0cFs9PGludGVyZmFjZT5bLDxpbnRlcmZhY2U+XV0KK0FjdGl2ZSBsYSBmb25jdGlvbiBzZXJ2ZXVyIFRGVFAuIENlbHVpLWNpIGVzdCBkZSBtYW5pw6hyZSBkw6lsaWLDqXLDqWUgbGltaXTDqSBhdXgKK2ZvbmN0aW9ucyBuw6ljZXNzYWlyZXMgYXUgZMOpbWFycmFnZSBwYXIgbGUgcsOpc2VhdSAoIm5ldC1ib290IikgZCd1biBjbGllbnQuIFNldWwKK3VuIGFjY8OocyBlbiBsZWN0dXJlIGVzdCBwb3NzaWJsZTsgbGVzIGV4dGVuc2lvbnMgdHNpemUgZXQgYmxrc2l6ZSBzb250IHN1cHBvcnTDqWVzCisodHNpemUgZXN0IHNldWxlbWVudCBzdXBwb3J0w6kgZW4gbW9kZSBvY3RldCkuIFNhbnMgYXJndW1lbnQgb3B0aW9uZWwsIGxlIHNlcnZpY2UKK1RGVFAgZXN0IGZvdXJuaSBzdXIgbGVzIG3Dqm1lcyBpbnRlcmZhY2VzIHF1ZSBsZSBzZXJ2aWNlIERIQ1AuIFNpIHVuZSBsaXN0ZQorZCdpbnRlcmZhY2VzIGVzdCBmb3VybmllLCBjZWxhIGTDqWZpbml0IGxlcyBpbnRlcmZhY2VzIHN1ciBsZXNxdWVsbGVzIGxlCitzZXJ2aWNlIFRGVFAgc2VyYSBhY3RpdsOpLgorLlRQCisuQiAtLXRmdHAtcm9vdD08csOpcGVydG9pcmU+Wyw8aW50ZXJmYWNlPl0KK0xlcyBmaWNoaWVycyDDoCBmb3VybmlyIGRhbnMgbGVzIHRyYW5zZmVydHMgVEZUUCBzZXJvbnQgY2hlcmNow6lzIGVuIHByZW5hbnQgbGUKK3LDqXBlcnRvaXJlIGZvdXJuaSBjb21tZSByYWNpbmUuIExvcnNxdWUgY2VsYSBlc3QgZm91cm5pLCBsZXMgY2hlbWlucyBURlRQCitpbmNsdWFudCAiLi4iIHNvbnQgcmVqZXTDqXMsIGFmaW4gZCfDqXZpdGVyIHF1ZSBsZXMgY2xpZW50cyBuZSBwdWlzc2VudCBzb3J0aXIgZGUKK2xhIHJhY2luZSBzcMOpY2lmacOpZS4gTGVzIGNoZW1pbnMgYWJzb2x1cyAoY29tbWVuw6dhbnQgcGFyICIvIikgc29udCBhdXRvcmlzw6lzLAorbWFpcyBpbHMgZG9pdmVudCDDqnRyZSDDoCBsYSByYWNpbmUgVEZUUCBmb3VybmllLiBTaSBsJ29wdGlvbiBpbnRlcmZhY2UgZXN0CitzcMOpY2lmacOpZSwgbGUgcsOpcGVydG9pcmUgbidlc3QgdXRpbGlzw6kgcXVlIHBvdXIgbGVzIHJlcXXDqnRlcyBURlRQIHJlw6d1ZXMgc3VyCitjZXR0ZSBpbnRlcmZhY2UuCisuVFAKKy5CIC0tdGZ0cC11bmlxdWUtcm9vdAorQWpvdXRlciBsJ2FkcmVzc2UgSVAgZHUgY2xpZW50IFRGVFAgZW4gdGVtcHMgcXUnw6lsw6ltZW50IGRlIGNoZW1pbiwgw6AgbGEgc3VpdGUKK2RlIGxhIHJhY2luZSB0ZnRwIChhZHJlc3NlIHNvdXMgZm9ybWUgZGUgNCBjaGlmZnJlcyBzw6lwYXLDqXMgcGFyIGRlcyBwb2ludHMpLgorVW5pcXVlbWVudCB2YWxhYmxlIHNpIHVuZSByYWNpbmUgVEZUUCBlc3Qgc3DDqWNpZmnDqWUgZXQgc2kgbGUgcsOpcGVydG9pcmUKK2NvcnJlc3BvbmQgZXhpc3RlLiBBaW5zaSwgc2kgbGEgdmFsZXVyIHBvdXIgdGZ0cC1yb290IGVzdCAiL3RmdHAiIGV0IHF1ZSBsZQorY2xpZW50IGQnYWRyZXNzZSBJUCAxLjIuMy40IHJlcXVpZXJ0IGxlIGZpY2hpZXIgIm1vbmZpY2hpZXIiLCBhbG9ycyBsZSBjaGVtaW4KK2VmZmVjdGl2ZSByw6lzdWx0YW50IHNlcmEgIi90ZnRwLzEuMi4zLjQvbW9uZmljaGllciIgc2kgL3RmdHAvMS4yLjMuNCBleGlzdGUsIG91CisiL3RmdHAvbW9uZmljaGllciIgZGFucyBsZSBjYXMgY29udHJhaXJlLgorLlRQCisuQiAtLXRmdHAtc2VjdXJlCitBY3RpdmUgbGUgbW9kZSBURlRQIHPDqWN1cmlzw6kgOiBzYW5zIGNlbGEsIHRvdXQgZmljaGllciBsaXNpYmxlCitwYXIgRG5zbWFzcSBlc3QgZGlzcG9uaWJsZSB2aWEgVEZUUCAobGVzIHLDqGdsZXMgZGUgY29udHLDtGxlIGQnYWNjw6hzIHVuaXgKK2hhYml0dWVsbGVzIHMnYXBwbGlxdWVudCkuIExvcnNxdWUgbCdvcHRpb24KKy5CIC0tdGZ0cC1zZWN1cmUKK2VzdCBzcMOpY2lmacOpZSwgc2V1bHMgbGVzIGZpY2hpZXJzIHBvc3PDqWTDqXMgcGFyIGwndXRpbGlzYXRldXIgc291cyBsZXF1ZWwgdG91cm5lCitsZSBwcm9jZXNzdXMgRG5zbWFzcSBzb250IGFjY2Vzc2libGVzLiBTaSBEbnNtYXNxIGVzdCBleMOpY3V0w6kgZW4gdGVtcHMgcXVlCitzdXBlci11dGlsaXNhdGV1ciAoInJvb3QiKSwgZGVzIHLDqGdsZXMgZGlmZsOpcmVudGVzIHMnYXBwbGlxdWVudCA6CisuQiAtLXRmdHAtc2VjdXJlCituJ2EgYXVjdW4gZWZmZXQsIG1haXMgc2V1bHMgbGVzIGZpY2hpZXJzIGF5YW50IHVuIGRyb2l0IGRlIGxlY3R1cmUgcG91ciB0b3V0IGxlCittb25kZSBzb250IGFjY2Vzc2libGVzLiBJbCBuJ2VzdCBwYXMgcmVjb21tYW5kw6kgZCdleMOpY3V0ZXIgRG5zbWFzcSBzb3VzCitsJ3V0aWxpc2F0ZXVyICJyb290IiBsb3JzcXVlIGxlIHNlcnZpY2UgVEZUUCBlc3QgYWN0aXbDqSwgZXQgaWwgZXN0IGZvcm1lbGxlbWVudAorZMOpY29uc2VpbGzDqSBkZSBsZSBmYWlyZSBzYW5zIGZvdXJuaXIgbCdvcHRpb24KKy5CIC0tdGZ0cC1yb290LgorU2FucyBjZWxhLCBlbiBlZmZldCwgbCdhY2PDqHMgZGUgdG91cyBsZXMgZmljaGllcnMgZHUgc2VydmV1ciBwb3VyIGxlcXVlbCBsZQorZHJvaXQgZGUgbGVjdHVyZSBwb3VyIHRvdXQgbGUgbW9uZGUgZXN0IHBvc2l0aW9ubsOpICgid29ybGQtcmVhZGFibGUiKSBkZXZpZW50Citwb3NzaWJsZSBwYXIgbidpbXBvcnRlIHF1ZWwgaMO0dGUgc3VyIGxlIHLDqXNlYXUuCisuVFAKKy5CIC0tdGZ0cC1sb3dlcmNhc2UKK0NvbnZlcnRpIGxlcyBub21zIGRlIGZpY2hpZXJzIGRlcyByZXF1w6p0ZXMgVEZUUCBlbiBtaW51c2N1bGVzLiBDZWxhIGVzdCB1dGlsZQorcG91ciBsZXMgcmVxdcOqdGVzIGVmZmVjdHXDqWVzIGRlcHVpcyBsZXMgbWFjaGluZXMgV2luZG93cywgZG9udCBsZXMgc3lzdMOobWVzCitkZSBmaWNoaWVycyBzb250IGluc2Vuc2libGVzIMOgIGxhIGNhc3NlIGV0IHBvdXIgbGVzcXVlbHMgbGEgZMOpdGVybWluYXRpb24KK2RlIGxhIGNhc3NlIGVzdCBwYXJmb2lzIHVuIHBldSBhbMOpYXRvaXJlLiBBIG5vdGVyIHF1ZSBsZSBzZXJ2ZXVyIHRmdHAgZGUKK2Ruc21hc3EgY29udmVydGkgc3lzdMOpbWF0aXF1ZW1lbnQgbGVzICJcXCIgZW4gIi8iIGRhbnMgbGVzIG5vbXMgZGUgZmljaGllcnMuCisuVFAKKy5CIC0tdGZ0cC1tYXg9PGNvbm5leGlvbnM+CitEw6lmaW5pdCBsZSBub21icmUgbWF4aW11bSBkZSBjb25uZXhpb25zIFRGVFAgc2ltdWx0YW7DqWVzIGF1dG9yaXPDqWVzLiBMYSB2YWxldXIKK3BhciBkw6lmYXV0IGVzdCBkZSA1MC4gTG9yc3F1J3VuIGdyYW5kIG5vbWJyZSBkZSBjb25uZXhpb25zIFRGVFAgZXN0IHNww6ljaWZpw6ksCitpbCBzZSBwZXV0IHF1ZSBsYSBsaW1pdGUgZGUgbm9tYnJlIGRlIGRlc2NyaXB0ZXVycyBkZSBmaWNoaWVycyBwYXIgcHJvY2Vzc3VzCitzb2l0IGF0dGVpbnRlLiBEbnNtYXNxIG7DqWNlc3NpdGUgcXVlbHF1ZXMgZGVzY3JpcHRldXJzIGRlIGZpY2hpZXJzLCBhaW5zaSBxdSd1bgorZGVzY3JpcHRldXIgZGUgZmljaGllciBwb3VyIGNoYXF1ZSBjb25uZXhpb24gVEZUUCBzaW11bHRhbsOpZSBldCBwb3VyIGNoYWN1biBkZXMKK2ZpY2hpZXJzIGRldmFudCDDqnRyZSBmb3VybmlzLiBEZSBmYWl0LCBzZXJ2aXIgbGUgbcOqbWUgZmljaGllciDDoCBuIGNsaWVudHMgbmUKK27DqWNlc3NpdGVyYSBxdSdlbnZpcm9uIG4gKyAxMCBkZXNjcmlwdGV1cnMgZGUgZmljaGllcnMsIGFsb3JzIHF1ZSBmb3VybmlyIGRlcworZmljaGllcnMgdG91cyBkaWZmw6lyZW50cyDDoCBuIGNsaWVudHMgdXRpbGlzZXJhIGVudmlyb24gKDIqbikgKyAxMCBkZXNjcmlwdGV1cnMuCitTaSBlbGxlIGVzdCBkb25uw6llLCBsJ29wdGlvbiAKKy5CIC0tdGZ0cC1wb3J0LXJhbmdlCitwZXV0IGFmZmVjdGVyIGxlIG5vbWJyZSBtYXhpbXVtIGRlIGNvbm5leGlvbnMgY29uY3VycmVudGVzLgorLlRQCisuQiAtLXRmdHAtbm8tYmxvY2tzaXplCitFbXDDqmNoZSBsZSBzZXJ2ZXVyIFRGVFAgZGUgbsOpZ29jaWVyIGwnb3B0aW9uICJibG9ja3NpemUiICh0YWlsbGUgZGUgYmxvYykgYXZlYworbGVzIGNsaWVudHMuIENlcnRhaW5zIGNsaWVudHMgYnVnZ8OpcyBzcMOpY2lmaWVudCBjZXR0ZSBvcHRpb24gbWFpcyBzZSBjb21wb3J0ZW50CitlbnN1aXRlIGRlIG1hbmnDqHJlIGluY29ycmVjdGUgc2kgY2VsbGUtY2kgZXN0IGFjY29yZMOpZS4KKy5UUAorLkIgLS10ZnRwLXBvcnQtcmFuZ2U9PGTDqWJ1dD4sPGZpbj4KK1VuIHNlcnZldXIgVEZUUCDDqWNvdXRlIHN1ciBsZSBwb3J0IHByw6lkw6lmaW5pIDY5ICgid2VsbC1rbm93biBwb3J0IikgcG91cgorbCdpbml0aWF0aW9uIGRlIGxhIGNvbm5leGlvbiwgbWFpcyB1dGlsaXNlIMOpZ2FsZW1lbnQgdW4gcG9ydCBkeW5hbWlxdWVtZW50CithbGxvdcOpIHBvdXIgY2hhcXVlIGNvbm5leGlvbi4gTm9ybWFsZW1lbnQsIGNlcyBwb3J0cyBzb250IGFsbG91w6lzIHBhcgorbGUgc3lzdMOobWUgZCdleHBsb2l0YXRpb24sIG1haXMgY2V0dGUgb3B0aW9uIHBlcm1ldCBkZSBzcMOpY2lmaWVyIHVuZSBnYW1tZQorZGUgcG9ydHMgw6AgdXRpbGlzZXIgcG91ciBsZXMgdHJhbnNmZXJ0cyBURlRQLiBDZWxhIHBldXQtw6p0cmUgdXRpbGUgc2kKK1RGVFAgZG9pdCB0cmF2ZXJzZXIgdW4gZGlzcG9zaXRpZiBnYXJkZS1iYXJyacOocmUgKCJmaXJld2FsbCIpLiBMYSB2YWxldXIKK2RlIGTDqWJ1dCBwb3VyIGxhIHBsYWdlIGRlIHBvcnQgbmUgcGV1dC3DqnRyZSBpbmbDqXJpZXVyZSDDoCAxMDI1IHNhdWYgc2kKK2Ruc21hc3EgdG91cm5lIGVuIHRlbXBzIHF1ZSBzdXBlci11dGlsaXNhdGV1ciAoInJvb3QiKS4gTGUgbm9tYnJlIGRlCitjb25uZXhpb25zIFRGVFAgY29uY3VycmVudGVzIGVzdCBsaW1pdMOpZSBwYXIgbGEgdGFpbGxlIGRlIGxhIGdhbW1lIGRlCitwb3J0cyBhaW5zaSBzcMOpY2lmacOpZS4KKy5UUAorLkIgLS10ZnRwLXBvcnQtcmFuZ2U9PGTDqWJ1dD4sPGZpbj4KK1VuIHNlcnZldXIgVEZUUCDDqWNvdXRlIHN1ciB1biBudW3DqXJvIGRlIHBvcnQgYmllbiBjb25udSAoNjkpIHBvdXIgbCdpbml0aWF0aW9uCitkZSBsYSBjb25uZXhpb24sIGV0IGFsbG91ZSBkeW5hbWlxdWVtZW50IHVuIHBvcnQgcG91ciBjaGFxdWUgY29ubmV4aW9uLiBDZXMKK251bcOpcm9zIGRlIHBvcnRzIHNvbnQgZW4gcHJpbmNpcGUgYWxsb3XDqXMgcGFyIGxlIHN5c3TDqG1lIGQnZXhwbG9pdGF0aW9uLCBtYWlzCitjZXR0ZSBvcHRpb24gcGVybWV0IGRlIHNww6ljaWZpZXIgdW5lIGdhbW1lIGRlIHBvcnRzIMOgIHV0aWxpc2VyIHBvdXIgbGVzCit0cmFuc2ZlcnRzIFRGVFAuIENlbGEgcGV1dC3DqnRyZSB1dGlsZSBsb3JzcXVlIGNldXgtY2kgZG9pdmVudCB0cmF2ZXJzZXIgdW4KK2Rpc3Bvc2l0aWYgZ2FyZGUtYmFycmnDqHJlICgiZmlyZXdhbGwiKS4gTGUgZMOpYnV0IGRlIGxhIHBsYWdlIG5lIHBldXQtw6p0cmUKK2luZsOpcmlldXIgw6AgMTAyNCDDoCBtb2lucyBxdWUgRG5zbWFzcSBuZSBmb25jdGlvbm5lIGVuIHRlbXBzIHF1ZQorc3VwZXItdXRpbGlzYXRldXIgKCJyb290IikuIExlIG5vbWJyZSBtYXhpbWFsIGRlIGNvbm5leGlvbnMgVEZUUCBjb25jdXJyZW50ZXMKK2VzdCBsaW1pdMOpZSBwYXIgbGEgdGFpbGxlIGRlIGxhIHBsYWdlIGRlIHBvcnRzIGFpbnNpIGTDqWZpbmllLiAKKy5UUAorLkIgXC1DLCAtLWNvbmYtZmlsZT08ZmljaGllcj4KK1Nww6ljaWZpZSB1biBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gZGlmZsOpcmVudC4gTCdvcHRpb24gImNvbmYtZmlsZSIgZXN0CivDqWdhbGVtZW50IGF1dG9yaXPDqWUgZGFucyBkZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbiwgY2UgcXVpIHBlcm1ldAorbCdpbmNsdXNpb24gZGUgbXVsdGlwbGVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24uIEwndXRpbGlzYXRpb24gZGUgIi0iIGNvbW1lCitub20gZGUgZmljaGllciBwZXJtZXQgbGEgbGVjdHVyZSBwYXIgZG5zbWFzcSBkZSBzYSBjb25maWd1cmF0aW9uIHN1ciBsJ2VudHLDqWUgc3RhbmRhcmQKK3N0ZGluLgorLlRQCisuQiBcLTcsIC0tY29uZi1kaXI9PHLDqXBlcnRvaXJlPlssPGV4dGVuc2lvbiBkZSBmaWNoaWVyPi4uLl0KK0xpcyB0b3VzIGxlcyBmaWNoaWVycyBkdSByw6lwZXJ0b2lyZSBzcMOpY2lmacOpIGV0IGxlcyB0cmFpdGUgY29tbWUgZGVzIGZpY2hpZXJzIGRlCitjb25maWd1cmF0aW9uLiBTaSBkZXMgZXh0ZW5zaW9ucyBzb250IGRvbm7DqWVzLCB0b3V0IGZpY2hpZXIgZmluaXNzYW50IHBhciBjZXMKK2V4dGVuc2lvbnMgc2Vyb250IGlnbm9yw6lzLiBUb3V0IGZpY2hpZXIgZG9udCBsZSBub20gc2UgdGVybWluZSBlbiB+IG91IGNvbW1lbmNlCitwYXIgLiwgYWluc2kgcXVlIGNldXggY29tbWVuw6dhbnQgb3Ugc2UgdGVybWluYW50IHBhciAjIHNlcm9udCBzeXN0w6ltYXRpcXVlbWVudAoraWdub3LDqXMuCitDZXR0ZSBvcHRpb24gcGV1dCDDqnRyZSBkb25uw6llIGVuIGxpZ25lIGRlIGNvbW1hbmRlIG91IGRhbnMgdW4gZmljaGllciBkZQorY29uZmlndXJhdGlvbi4KKy5TSCBGSUNISUVSIERFIENPTkZJR1VSQVRJT04KK0F1IGTDqW1hcnJhZ2UsIERuc21hc3EgbGlzCisuSSAvZXRjL2Ruc21hc3EuY29uZiwKK3NpIGNlIGZpY2hpZXIgZXhpc3RlLiAoU3VyIEZyZWVCU0QsIGNlIGZpY2hpZXIgZXN0CisuSSAvdXNyL2xvY2FsL2V0Yy9kbnNtYXNxLmNvbmYKKykgKHZvaXIgY2VwZW5kYW50IGxlcyBvcHRpb25zIAorLkIgXC1DCitldAorLkIgXC03CispLiBMZSBmb3JtYXQgZGUgY2UgZmljaGllciBjb25zaXN0ZSBlbiB1bmUgb3B0aW9uIHBhciBsaWduZSwgZXhhY3RlbWVudCBjb21tZQorbGVzIG9wdGlvbnMgbG9uZ3VlcyBkw6l0YWlsbMOpZXMgZGFucyBsYSBzZWN0aW9uIE9QVElPTlMsIG1haXMgc2FucyDDqnRyZSBwcsOpY8OpZMOpZXMKK3BhciAiLS0iLiBMZXMgbGlnbmVzIGNvbW1lbsOnYW50IHBhciAjIHNvbnQgZGVzIGNvbW1lbnRhaXJlcyBldCBzb250IGlnbm9yw6llcy4KK1BvdXIgbGVzIG9wdGlvbnMgcXVpIG5lIHBldXZlbnQtw6p0cmUgc3DDqWNpZmnDqWVzIHF1J3VuZSBzZXVsZSBmb2lzLCBjZWxsZSBkdQorZmljaGllciBkZSBjb25maWd1cmF0aW9uIHByZW5kcyBsZSBwYXMgc3VyIGNlbGxlIGZvdXJuaWUgZW4gbGlnbmUgZGUgY29tbWFuZGUuCitJbCBlc3QgcG9zc2libGUgZCd1dGlsaXNlciBkZXMgZ3VpbGxlbWV0cyBhZmluIGQnw6l2aXRlciBxdWUgbGVzICIsIiwiOiIsIi4iIGV0CisiIyIgbmUgc29pdCBpbnRlcnByw6p0w6lzLCBldCBpbCBlc3QgcG9zc2libGUgZCd1dGlsaXNlciBsZXMgc8OpcXVlbmNlcworZCfDqWNoYXBwZW1lbnQgc3VpdmFudGVzIDogXFxcXCBcXCIgXFx0IFxcZSBcXGIgXFxyIGV0IFxcbi4gRWxsZXMgY29ycmVzcG9uZGVudAorcmVzcGVjdGl2ZW1lbnQgw6AgbGEgYmFycmUgb2JsaXF1ZSBkZXNjZW5kYW50ZSAoImFudGktc2xhc2giKSwgZ3VpbGxlbWV0cyBkb3VibGVzLAordGFidWxhdGlvbiwgY2FyYWN0w6hyZSBkJ8OpY2hhcHBlbWVudCAoImVzY2FwZSIpLCBzdXBwcmVzc2lvbiAoImJhY2tzcGFjZSIpLCByZXRvdXIgKCJyZXR1cm4iKSBldAorbm91dmVsbGUgbGlnbmUgKCJuZXdsaW5lIikuCisuU0ggTk9URVMKK0EgbGEgcsOpY2VwdGlvbiBkJ3VuIHNpZ25hbCBTSUdIVVAsCisuQiBEbnNtYXNxCit2aWRlIHNvbiBjYWNoZSBldCByZWNoYXJnZSBsZXMgZmljaGllcnMKKy5JIC9ldGMvaG9zdHMKK2V0CisuSSAvZXRjL2V0aGVycyAKK2FpbnNpIHF1ZSB0b3V0IGF1dHJlIGZpY2hpZXIgc3DDqWNpZmnDqSBwYXIgbGVzIG9wdGlvbnMKKy5CIC0tZGhjcC1ob3N0c2ZpbGUKKywKKy5CIC0tZGhjcC1vcHRzZmlsZQorb3UKKy5CIC0tYWRkbi1ob3N0cy4KK0xlIHNjcmlwdCBkZSBjaGFuZ2VtZW50IGRlIGJhaWwgZXN0IGFwcGVsbMOpIHBvdXIgY2hhcXVlIGJhaWwgREhDUCBleGlzdGFudC4gU2kKK2wnb3B0aW9uCisuQiAtLW5vLXBvbGwKK2VzdCBwb3NpdGlvbm7DqWUsIGFsb3JzIGxlIGZpY2hpZXIKKy5JIC9ldGMvcmVzb2x2LmNvbmYKK2VzdCDDqWdhbGVtZW50IHJlY2hhcmfDqS4KK1NJR0hVUCBuZSBwcm92b3F1ZSBQQVMgZGUgcmVjaGFyZ2VtZW50IGR1IGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbi4KKy5QUAorQSBsYSByw6ljZXB0aW9uIGQndW4gc2lnbmFsIFNJR1VTUjEsCisuQiBEbnNtYXNxIAorw6ljcml0IGRlcyBzdGF0aXN0aXF1ZXMgZGFucyBsZXMgdHJhY2VzIHN5c3TDqG1lLiBMZXMgaW5mb3JtYXRpb25zIGZvdXJuaWVzIHNvbnQgOgorbGEgdGFpbGxlIGR1IGNhY2hlLCBsZSBub21icmUgZGUgbm9tcyBheWFudCDDqXTDqSBzdXBwcmltw6lzIGR1IGNhY2hlIGF2YW50CitleHBpcmF0aW9uIGFmaW4gZGUgZmFpcmUgZGUgbGEgcGxhY2UgcG91ciBsZXMgbm91dmVhdXggbm9tcywgYWluc2kgcXVlIGxlIG5vbWJyZQordG90YWwgZCdlbnRyw6llcyBheWFudCDDqXTDqSBpbnPDqXLDqWVzIGRhbnMgbGUgY2FjaGUuIFBvdXIgY2hhcXVlIHNlcnZldXIgYW1vbnQsIGlsIGZvdXJuaXQKK2xlIG5vbW5icmUgZGUgcmVxdcOqdGVzIHRyYW5zbWlzZXMgYWluc2kgcXVlIGxlIG5vbWJyZSBkZSByZXF1w6p0ZXMgYXlhbnQgcsOpc3VsdMOpIHBhciB1bmUKK2VycmV1ci4gTG9yc3F1ZSBEbnNtYXNxIGEgw6l0w6kgbGFuY8OpIHZpYQorLkIgLS1uby1kYWVtb24KK291IGxvcnNxdWUgbGEgdHJhw6dhYmlsaXTDqSBtYXhpbWFsZSBhIMOpdMOpIGFjdGl2w6llICgKKy5CIC1xCispLCBsYSB0b3RhbGl0w6kgZHUgY29udGVudSBkdQorY2FjaGUgZXN0IGRlIHN1cmNyb8OudCBmb3VybmllLgorLlBQIAorQSBsYSByw6ljZXB0aW9uIGQndW4gc2lnbmFsIFNJR1VTUjIgZXQgbG9yc3F1J2lsIGVucmVnaXN0cmUgZGlyZWN0ZW1lbnQgc2VzCit0cmFjZXMgZGFucyB1biBmaWNoaWVyICh2b2lyCisuQiAtLWxvZy1mYWNpbGl0eQorKSwgYWxvcnMgCisuQiBEbnNtYXNxCitmZXJtZSBldCByZS1yb3V2cmUgbGUgZmljaGllciBkZSB0cmFjZXMuIElsIGZhdXQgbm90ZXIgcXVlIHBlbmRhbnQgY2V0dGUKK29ww6lyYXRpb24gRG5zbWFzcSBuZSBzJ2V4w6ljdXRlIHBhcyBlbiB0ZW1wcyBxdWUgInJvb3QiLiBMb3JzcXUnaWwgY3LDqcOpIHVuCitmaWNoaWVyIGRlIHRyYWNlcyBwb3VyIGxhIHByZW1pw6hyZSBmb2lzLCBEbnNtYXNxIGNoYW5nZSBsZSBwcm9wcmnDqXRhaXJlIGR1CitmaWNoaWVyIGFmaW4gZGUgbGUgZmFpcmUgYXBwYXJ0ZW5pciDDoCBsJ3V0aWxpc2F0ZXVyIG5vbiAicm9vdCIgc291cyBsZXF1ZWwKK0Ruc21hc3EgcydleMOpY3V0ZS4gTGUgbG9naWNpZWwgZGUgcm90YXRpb24gZGUgZmljaGllcnMgZGUgdHJhY2UgbG9ncm90YXRlIGRvaXQKK8OqdHJlIGNvbmZpZ3Vyw6kgcG91ciBjcsOpZXIgdW4gbm91dmVhdSBmaWNoaWVyIGF2ZWMgdW4gcHJvcHJpw6l0YWlyZSBpZGVudGlxdWUgYXUKK2ZpY2hpZXIgZXhpc3RhbnQgYXZhbnQgZCdlbnZveWVyIGxlIHNpZ25hbCBTSUdVU1IyLiBTaSB1bmUgcmVxdcOqdGUgRE5TIFRDUCBlc3QKK2VuIGNvdXJzLCBsJ2FuY2llbiBmaWNoaWVyIGRlIHRyYWNlcyByZXN0ZSBvdXZlcnQgZGFucyBsZSBwcm9jZXNzdXMgZmlscyBxdWkKK3RyYWl0ZSBsYSByZXF1w6p0ZSBUQ1AgZXQgaWwgcGV1dCB5IMOqdHJlIMOpY3JpdC4gSWwgZXhpc3RlIGNlcGVuZGFudCB1bmUgbGltaXRlCitkZSAxNTAgc2Vjb25kZXMgYXByw6hzIGxhcXVlbGxlIHRvdXMgbGVzIHByb2Nlc3N1cyB0cmFpdGFudCBkZXMgcmVxdcOqdGVzIFRDUAorZXhwaXJlbnQgOiBwb3VyIGNldHRlIHJhaXNvbiwgaWwgZXN0IHByw6lmw6lyYWJsZSBkZSBuZSBwYXMgY29uZmlndXJlciBsYQorY29tcHJlc3Npb24gZGVzIGZpY2hpZXJzIGRlIHRyYWNlcyB2ZW5hbnQganVzdGUgZGUgZmFpcmUgbCdvYmpldCBkJ3VuZSByb3RhdGlvbi4KK0RhbnMgbGUgY2FzIGRlIGwndXRpbGlzYXRpb24gZHUgbG9naWNpZWwgbG9ncm90YXRlLCBsZXMgb3B0aW9ucyByZXF1aXNlcyBzb250CisuQiBjcmVhdGUgCitldAorLkIgZGVsYXljb21wcmVzcy4KKyAKKy5QUAorRG5zbWFzcSBlc3QgdW4gbG9naWNpZWwgZGUgdHJhbnNtaXNzaW9uIGRlIHJlcXXDqnRlcyBETlMgOiBpbCBuJ2VzdCBwYXMgY2FwYWJsZQorZCdlZmZlY3R1ZXIgdW5lIHLDqXNvbHV0aW9uIGRlIG5vbSByw6ljdXJzaXZlIGVuIHBhcnRhbnQgZGVzIHNlcnZldXJzIEROUyByYWNpbmUsCittYWlzIHRyYW5zbWV0IGRlIHRlbGxlcyByZXF1w6p0ZXMgw6AgdW4gc2VydmV1ciBETlMgYW1vbnQgY2FwYWJsZSBkZSB0ZWxsZXMKK3JlY2hlcmNoZXMgcsOpY3Vyc2l2ZXMsIGNlIHF1aSBlc3QgdHlwaXF1ZW1lbnQgbGUgY2FzIGQndW4gc2VydmV1ciBETlMgZGUgRkFJLgorUGFyIGTDqWZhdXQsIERuc21hc3EgbGlzCisuSSAvZXRjL3Jlc29sdi5jb25mCitwb3VyIGTDqWNvdXZyaXIgbGVzIGFkcmVzc2VzIElQIGRlcyBzZXJ2ZXVycyBETlMgYW1vbnRzIMOgIHV0aWxpc2VyLCBwdWlzcXVlIGNldHRlCitpbmZvcm1hdGlvbiBlc3QgZW4gZ8OpbsOpcmFsIHN0b2Nrw6llIMOgIGNldCBlbmRyb2l0LiBBIG1vaW5zIHF1ZSBsJ29wdGlvbgorLkIgLS1uby1wb2xsCituZSBzb2l0IHV0aWxpc8OpZSwKKy5CIERuc21hc3EKK3bDqXJpZmllIGxhIGRhdGUgZGUgbW9kaWZpY2F0aW9uIGR1IGZpY2hpZXIKKy5JIC9ldGMvcmVzb2x2LmNvbmYKKyhvdSBsJ8OpcXVpdmFsZW50IHNpIAorLkIgXC0tcmVzb2x2LWZpbGUgCitlc3QgdXRpbGlzw6kpLCBldCBsZSByZWxpcyBsb3JzcXUnaWwgY2hhbmdlLiBDZWxhIHBlcm1ldCBkZSBkw6lmaW5pciBsZXMgc2VydmV1cnMKK0ROUyBhbW9udCBkZSBtYW5pw6hyZSBkeW5hbWlxdWUgbG9yc3F1ZSBQUFAgb3UgREhDUCBzb250IHV0aWxpc8OpcywgcHVpc3F1ZSBjZXMKK3Byb3RvY29sZXMgZm91cm5pc3NlbnQgY2V0dGUgaW5mb3JtYXRpb24uCitMJ2Fic2VuY2UgZHUgZmljaGllcgorLkkgL2V0Yy9yZXNvbHYuY29uZgorbmUgY29uZHVpdCBwYXMgw6AgdW5lIGVycmV1ciwgcHVpc3F1J2lsIHBldXQgdHLDqHMgYmllbiBuZSBwYXMgw6p0cmUgY3LDqcOpIGF2YW50CitxdSd1bmUgY29ubmV4aW9uIFBQUCBuZSBzb2l0IMOpdGFibGllLiBEYW5zIGNlIGNhcywgRG5zbWFzcSB2w6lyaWZpZSByw6lndWxpw6hyZW1lbnQKK3BvdXIgdm9pciBzaSB1biBmaWNoaWVyCisuSSAvZXRjL3Jlc29sdi5jb25mIAorZXN0IGNyw6nDqS4gRG5zbWFzcSBwZXV0IMOqdHJlIGNvbmZpZ3Vyw6kgcG91ciBsaXJlIHBsdXMgZCd1biBmaWNoaWVyIHJlc29sdi5jb25mLgorQ2VsYSBlc3QgdXRpbGUgc3VyIHVuIG9yZGluYXRldXIgcG9ydGFibGUgb8O5IFBQUCBldCBESENQIHBldXZlbnQtw6p0cmUgdXRpbGlzw6lzIDoKK0Ruc21hc3EgcGV1dCBhbG9ycyDDqnRyZSBjb25maWd1csOpIHBvdXIgbGlyZSDDoCBsYSBmb2lzCisuSSAvZXRjL3BwcC9yZXNvbHYuY29uZiAKK2V0CisuSSAvZXRjL2RoY3BjL3Jlc29sdi5jb25mIAorZXQgdXRpbGlzZXJhIGxlIGNvbnRlbnUgZHUgZmljaGllciBheWFudCBjaGFuZ8OpIGVuIGRlcm5pZXIsIGNlIHF1aSBwZXJtZXQgZGUKK3Bhc3NlciBhdXRvbWF0aXF1ZW1lbnQgZGUgc2VydmV1cnMgRE5TIMOgIGQnYXV0cmVzLgorLlBQCitMZXMgc2VydmV1cnMgYW1vbnRzIHBldXZlbnQgYXVzc2kgw6p0cmUgc3DDqWNpZmnDqXMgc3VyIGxhIGxpZ25lIGRlIGNvbW1hbmRlIG91CitkYW5zIHVuIGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbi4gQ2VzIHNww6ljaWZpY2F0aW9ucyBkZSBzZXJ2ZXVycyBwZXV2ZW50CivDqXZlbnR1ZWxsZW1lbnQgc2Ugdm9pciBhZGpvaW5kcmUgZCd1biBub20gZGUgZG9tYWluZSBxdWkgcHLDqWNpc2Ugw6AgRG5zbWFzcSBxdWVsCitzZXJ2ZXVyIHV0aWxpc2VyIHBvdXIgdHJvdXZlciBsZXMgbm9tcyBkJ3VuIGRvbWFpbmUgZG9ubsOpLgorLlBQCitQb3VyIGNvbmZpZ3VyZXIgRG5zbWFzcSBhZmluIHF1J2lsIHNlIGNvbXBvcnRlIGNvbW1lIHVuIGNhY2hlIHBvdXIgbGEgbWFjaGluZQorc3VyIGxhcXVlbGxlIGlsIHRvdXJuZSwgbWV0dHJlICJuYW1lc2VydmVyIDEyNy4wLjAuMSIgZGFucyBsZSBmaWNoaWVyCisuSSAvZXRjL3Jlc29sdi5jb25mCithZmluIGRlIGZvcmNlciBsZXMgcHJvY2Vzc3VzIGxvY2F1eCDDoCBlbnZveWVyIGxldXJzIHJlcXXDqnRlcyDDoCBEbnNtYXNxLiBFbnN1aXRlLAorc3DDqWNpZmllciBsZXMgc2VydmV1cnMgRE5TIGFtb250IHNvaXQgZW4gbGVzIGZvdXJuaXNzYW50IGRpcmVjdGVtZW50IMOgIERuc21hc3EKK3ZpYSBsJ29wdGlvbgorLkIgXC0tc2VydmVyCitvdSBhbG9ycyBlbiBtZXR0YW50IGxldXJzIGFkcmVzc2VzIGRhbnMgdW4gYXV0cmUgZmljaGllciwgcGFyIGV4ZW1wbGUKKy5JIC9ldGMvcmVzb2x2LmRuc21hc3EKK2V0IGVuIGxhbsOnYW50IERuc21hc3EgYXZlYyBsJ29wdGlvbgorLkIgXC1yIC9ldGMvcmVzb2x2LmRuc21hc3EuCitDZXR0ZSBkZXV4acOobWUgdGVjaG5pcXVlIHBlcm1ldCBsYSBtaXNlLcOgLWpvdXIgZHluYW1pcXVlIGRlcyBhZGRyZXNzZXMgZGUKK3NlcnZldXJzIEROUyBhbW9udCBwYXIgbGUgYmlhaXMgZGUgUFBQIG91IERIQ1AuCisuUFAKK0xlcyBhZHJlc3NlcyBkYW5zIC9ldGMvaG9zdHMgcHJlbm5lbnQgbGUgZGVzc3VzIHN1ciBjZWxsZXMgZm91cm5pZXMgcGFyIGxlCitzZXJ2ZXVyIEROUyBhbW9udCwgYWluc2kgIm1hY29tcGFnbmllLmNvbSAxLjIuMy40IiBkYW5zIC9ldGMvaG9zdHMgYXNzdXJlIHF1ZQorbGVzIHJlcXXDqnRlcyBwb3VyICJtYWNvbXBhZ25pZS5jb20iIHJldG91cm5lcm9udCB0b3Vqb3VycyAxLjIuMy40LCBtw6ptZSBzaSB1bmUKK3JlcXXDqnRlIGF1IHNlcnZldXIgRE5TIGFtb250IHJldG91cm5lcmFpdCB1bmUgYWRyZXNzZSBkaWZmw6lyZW50ZS4gSWwgeSBhIHVuZQorZXhjZXB0aW9uIMOgIGNlY2kgOiBzaSBsZSBETlMgYW1vbnQgY29udGllbnQgdW4gQ05BTUUgcXVpIHBvaW50ZSB2ZXJzIHVuIG5vbQorcHLDqXNlbnQgZGFucyAvZXRjL2hvc3RzLCBhbG9ycyBsYSByZWNoZXJjaGUgZHUgQ05BTUUgdmlhIERuc21hc3EgZm91cm5pcmEKK2wnYWRyZXNzZSBETlMgYW1vbnQuIFBvdXIgY29udG91cm5lciBjZWxhLCBpbCBzdWZmaXQgZGUgbWV0dHJlIGwnZW50csOpZQorY29ycmVzcG9uZGFudCBhdSBDTkFNRSBkYW5zIC9ldGMvaG9zdHMuCisuUFAKK2xlIHN5c3TDqG1lIGRlIGxhYmVsIGZvbmN0aW9ubmUgY29tbWUgc3VpdCA6IHBvdXIgY2hhcXVlIHJlcXXDqnRlIERIQ1AsIGRuc21hc3EKK2Fzc29jaWUgdW4gZW5zZW1ibGUgZGUgbGFiZWxzIG9idGVudXMgw6AgcGFydGlyIGRlcyBsaWduZXMgZGUgbGEgY29uZmlndXJhdGlvbgoraW5jbHVhbnQgc2V0OjxsYWJlbD4sIHkgY29tcHJpcyB1biBwb3VyIGxhIHBsYWdlIGQnYWRyZXNzZSAoCisuQiBkaGNwLXJhbmdlCispIHV0aWxpc8OpZSBwb3VyIGFsbG91ZXIgbCdhZHJlc3NlLCB1biBwb3VyIGNoYXF1ZSBlbnRyw6llCisuQiBkaGNwLWhvc3QKK2Fzc29jacOpZSAoYXVxdWVsIGVzdCByYWpvdXTDqSBsZSBtb3QtY2xlZiAia25vd24iIHNpIHVuZSBlbnRyw6llIGRoY3AtaG9zdAorY2/Dr25jaWRlKS4KKworTGUgbGFiZWwgImJvb3RwIiBlc3QgYXNzb2Npw6kgYXV4IHJlcXXDqnRlcyBCT09UUCwgdW4gbGFiZWwgZG9udCBsZSBub20gZXN0IGxlCitub20gZGUgbCdpbnRlcmZhY2Ugc3VyIGxhcXVlbGxlIGxhIHJlcXXDqnRlIGVzdCBhcnJpdsOpZS4KKworUG91ciBsZXMgbGlnbmVzIGRlIGNvbmZpZ3VyYXRpb24gY29tcG9ydGFudCBkZXMgw6lsw6ltZW50cyB0YWc6PGxhYmVsPiwKK3NldWxlcyBzZXJvbnQgdmFsaWRlcyBjZWxsZXMgcG91ciBsZXNxdWVscyB0b3VzIGxlcyBsYWJlbHMgY29ycmVzcG9uZGFudHMKK3Nlcm9udCBwcsOpc2VudHMuIEMnZXN0IHR5cGlxdWVtZW50IGxlIGNhcyBkZXMgbGlnbmVzIGRoY3Atb3B0aW9ucy4KK1VuCisuQiBkaGNwLW9wdGlvbiAKK3Bvc3PDqWRhbnQgZGVzIGxhYmVscyBzZXJhIHV0aWxpc8OpIGRlIHByw6lmw6lyZW5jZSDDoCB1bgorLkIgZGhjcC1vcHRpb24gCitzYW5zIGxhYmVsLCBwb3VyIHBldSBxdWUgX3RvdXNfIGxlcyBsYWJlbHMgcG9zaXRpb25uw6lzIGNvcnJlc3BvbmRlbnQgw6AgbCdlbnNlbWJsZQorZGUgbGFiZWxzIGTDqWNyaXQgcGx1cyBoYXV0LgorTGUgcHLDqWZpeGUgJyEnIHN1ciB1biBsYWJlbCBlc3QgdW4gaW5kaWNhdGV1ciBkZSBuw6lnYXRpb24sIGFpbnNpCisuQiAtLWRoY3A9b3B0aW9uPXRhZzohcHVycGxlLDMsMS4yLjMuNAorbidlbnZvaWUgbCdvcHRpb24gcXVlIGxvcnNxdWUgbGUgbGFiZWwgInB1cnBsZSIgbidlc3QgcGFzIGRhbnMgbGEgbGlzdGUgZGUKK2xhYmVscyBkw6lmaW5pcyBwb3VyIGwnaMO0dGUgY29uc2lkw6lyw6kuIChkYW5zIGxlIGNhcyBkZSBsJ3V0aWxpc2F0aW9uIGRhbnMgdW5lCitsaWduZSBkZSBjb21tYW5kZSBhdSBsaWV1IGQndW4gZmljaGllciBkZSBjb25maWd1cmF0aW9uLCBuZSBwYXMgb3VibGllcgorZCfDqWNoYXBwZXIgbGUgY2FyYWN0w6hyZSAhLCBxdWkgZXN0IHVuIG3DqXRhLWNhcmFjdMOocmUgZCdpbnRlcnByw6l0ZXVyIGRlIGNvbW1hbmRlCitzaGVsbCkuCisKK0xvcnMgZGUgbGEgc8OpbGVjdGlvbiBkJ3VuZSBvcHRpb24sIHVuZSDDqXRpcXVldHRlIHNww6ljaWZpw6llIHBhciBkaGNwLXJhbmdlCitwYXNzZSBhcHLDqHMgbGVzIGF1dHJlcyDDqXRpcXVldHRlcywgY2UgcXVpIHBlcm1ldCBkZSBmYWNpbGVtZW50IHJlbXBsYWNlciBkZXMKK29wdGlvbiBnw6luw6lyaXF1ZXMgcG91ciBkZXMgaMO0dGVzIHNww6ljaWZpcXVlcywgYWluc2kgOgorLkIgZGhjcC1yYW5nZT1zZXQ6aW50ZXJmYWNlMSwuLi4uLi4KKy5CIGRoY3AtaG9zdD1zZXQ6bW9uaG90ZSwuLi4uLgorLkIgZGhjcC1vcHRpb249dGFnOmludGVyZmFjZTEsb3B0aW9uOm5pcy1kb21haW4sImRvbWFpbmUxIgorLkIgZGhjcC1vcHRpb249dGFnOm1vbmhvdGUsb3B0aW9uOm5pcy1kb21haW4sImRvbWFpbmUyIgordmEgcG9zaXRpb25uZXIgbCdvcHRpb24gTklTLWRvbWFpbiDDoCBkb21haW5lMSBwb3VyIGxlcyBow7R0ZXMgZGFucyBsYSBwbGFnZQorZCdhZHJlc3NlLCBzYXVmIHBvdXIgbW9uaG90ZSBwb3VyIGxlcXVlbCBjZXR0ZSB2YWxldXIgc2VyYSBkb21haW5lMi4KKworLlBQCitWZXVpbGxleiBub3RlciBxdWUgcG91cgorLkIgZGhjcC1yYW5nZQorLCBsZXMgw6lsw6ltZW50cyB0YWc6PGxhYmVsPiBldCBzZXQ6PGxhYmVsPiBzb250IHRvdXMgbGVzIGRldXggYXV0b3Jpc8OpcworcG91ciBzw6lsZWN0aW9ubmVyIGxhIHBsYWdlIMOgIHV0aWxpc2VyIHNlbG9uLCBwYXIgZXhlbXBsZSwgbGUgZGhjcC1ob3N0LAorZXQgcG91ciBhZmZlY3RlciBsJ29wdGlvbiBlbnZvecOpZSwgc3VyIGxhIGJhc2UgZGUgbGEgcGxhZ2Ugc8OpbGVjdGlvbm7DqWUuCisKK0NlIHN5c3TDqG1lIGEgw6l2b2x1w6kgZCd1biBzeXN0w6htZSBwbHVzIGFuY2llbiBldCBhdXggcG9zc2liaWxpdMOpcyBwbHVzIGxpbWl0w6llcywKK2V0IHBvdXIgZGVzIHJhaXNvbnMgZGUgY29tcGF0aWJpbGl0w6kgIm5ldDoiIHBldXQgw6p0cmUgdXRpbGlzw6kgw6AgbGEgcGxhY2UgZGUKKyJ0YWc6IiBldCAic2V0OiIgcGV1dC3DqnRyZSBvbWlzICjDoCBsJ2V4Y2VwdGlvbiBkZQorLkIgZGhjcC1ob3N0LAorb8O5ICJuZXQ6IiBwZXV0LcOqdHJlIHV0aWxpc8OpIMOgIGxhIHBsYWNlIGRlICJzZXQ6IikuIFBvdXIgbGVzIG3Dqm1lcyByYWlzb25zLCAnIycKK3BldXQtw6p0cmUgdXRpbGlzw6kgw6AgbGEgcGxhY2UgZGUgJyEnIHBvdXIgaW5kaXF1ZXIgbGEgbsOpZ2F0aW9uLgorLlBQIAorTGUgc2VydmV1ciBESENQIGludMOpZ3LDqSBkYW5zIERuc21hc3EgZm9uY3Rpb25uZSDDqWdhbGVtZW50IGVuIHRlbXBzIHF1ZSBzZXJ2ZXVyCitCT09UUCwgcG91ciBwZXUgcXVlIGwnYWRyZXNzZSBNQUMgZXQgbCdhZHJlc3NlIElQIGRlcyBjbGllbnRzIHNvaWVudCBmb3VybmllcywKK3F1ZSBjZSBzb2l0IHBhciBsZSBiaWFpcyBkZSBsJ29wdGlvbiAKKy5CIGRoY3AtaG9zdCAKK291IGRhbnMgbGUgZmljaGllcgorLkkgL2V0Yy9ldGhlcnMKKywgZXQgcXVlIGwnb3B0aW9uCisuQiBkaGNwLXJhbmdlIAorc29pdCBwcsOpc2VudGUgYWZpbiBkJ2FjdGl2ZXIgbGUgc2VydmV1ciBESENQIHBvdXIgdW4gcsOpc2VhdSBkb25uw6kgKEwnb3B0aW9uCisuQiAtLWJvb3RwLWR5bmFtaWMKK3N1cHByaW1lIGxhIG7DqWNlc3NpdMOpIGRlcyBhc3NvY2lhdGlvbnMgc3RhdGlxdWVzKS4gTGUgcGFyYW3DqHRyZQorImZpbGVuYW1lIiAobm9tIGRlIGZpY2hpZXIpIGRlIGxhIHJlcXXDqnRlIEJPT1RQIGVzdCB1dGlsaXPDqSBjb21tZSBsYWJlbCwgYWluc2kKK3F1ZSBsZSBsYWJlbCAiYm9vdHAiLCBwZXJtZXR0YW50IHVuIGNlcnRhaW4gY29udHLDtGxlIHN1ciBsZXMgb3B0aW9ucyByZXRvdXJuw6llcworYXV4IGRpZmbDqXJlbnRlcyBjbGFzc2VzIGQnaMO0dGVzLgorCisKKy5TSCBDT05GSUdVUkFUSU9OIEVOIFRFTVBTIFFVRSBTRVJWRVVSIEZBSVNBTlQgQVVUT1JJVMOJCisuUFAgCitDb25maWd1cmVyIGRuc21hc3EgcG91ciBhZ2lyIGVuIHRlbXBzIHF1ZSBzZXJ2ZXVyIEROUyBmYWlzYW50IGF1dG9yaXTDqSBlc3QKK2NvbXBsaXF1w6kgcGFyIGxlIGZhaXQgcXVlIGNlbGEgaW1wbGlxdWUgbGEgY29uZmlndXJhdGlvbiBkZSBzZXJ2ZXVycyBETlMKK2V4dGVybmVzIHBvdXIgbWV0dHJlIGVuIHBsYWNlIGxhIGTDqWzDqWdhdGlvbi4gU2Vyb250IHByw6lzZW50w6lzIGNpLWRlc3NvdXMgdHJvaXMKK3Njw6luYXJpb3MgZGUgY29tcGxleGl0w6kgY3JvaXNzYW50ZS4gTGUgcHLDqS1yZXF1aXMgcG91ciBjaGFjdW4gZGUgY2VzIHNjw6luYXJpb3MKK2VzdCBsJ2V4aXN0ZW5jZSBkJ3VuZSBhZHJlc3NlIElQIGdsb2JhbGVtZW50IGRpc3BvbmlibGUsIGQndW4gZW5yZWdpc3RyZW1lbnQgZGUKK3R5cGUgQSBvdSBBQUFBIHBvaW50YW50IHZlcnMgY2V0dGUgYWRyZXNzZSwgYWluc2kgcXVlIGQndW4gc2VydmV1ciBETlMgZXh0ZXJuZQorY2FwYWJsZSBkJ2VmZmVjdHVlciBsYSBkw6lsw6lnYXRpb24gZGUgbGEgem9uZSBlbiBxdWVzdGlvbi4gUG91ciBsYSBwcmVtacOocmUKK3BhcnRpZSBkZSBjZXMgZXhwbGljYXRpb25zLCBub3VzIGFsbG9ucyBhcHBlbGxlciBzZXJ2ZXVyLmV4ZW1wbGUuY29tCitsJ2VucmVnaXN0cmVtZW50IEEgKG91IEFBQUEpIGRlIGwnYWRyZXNzZSBnbG9iYWxlbWVudCBhY2Nlc3NpYmxlLCBldAorbm90cmUuem9uZS5jb20gbGEgem9uZSBwb3VyIGxhcXVlbGxlIGRuc21hc3EgZmFpdCBhdXRvcml0w6kuCisKK0xhIGNvbmZpZ3VyYXRpb24gbGEgcGx1cyBzaW1wbGUgY29uc2lzdGUgZW4gZGV1eCBsaWduZXMgZGUgY29uZmlndXJhdGlvbiwKK3NvdXMgbGEgZm9ybWUgOgorLm5mCisuQiBhdXRoLXNlcnZlcj1zZXJ2ZXVyLmV4ZW1wbGUuY29tLGV0aDAKKy5CIGF1dGgtem9uZT1ub3RyZS56b25lLmNvbSwxLjIuMy4wLzI0CisuZmkKKworYWluc2kgcXVlIGRldXggZW5yZWdpc3RyZW1lbnRzIGRhbnMgbGUgRE5TIGV4dGVybmUgOgorCisubmYKK3NlcnZldXIuZXhlbXBsZS5jb20gICAgICAgQSAgICAxOTIuMC40My4xMAorbm90cmUuem9uZS5jb20gICAgICAgICAgICBOUyAgICBzZXJ2ZXVyLmV4ZW1wbGUuY29tCisuZmkKKworZXRoMCBlc3QgbCdpbnRlcmZhY2UgcsOpc2VhdSBleHRlcm5lIHN1ciBsYXF1ZWxsZSBkbnNtYXNxIMOpY291dGUsIGRvbnQgbCdhZHJlc3NlCitJUCAoZ2xvYmFsZW1lbnQgYWNjZXNzaWJsZSkgZXN0IDE5Mi4wLjQzLjEwLiAKKworQSBub3RlciBxdWUgbCdhZHJlc3NlIElQIGV4dGVybmUgcGV1dCBwYXJmYWl0ZW1lbnQgw6p0cmUgZHluYW1pcXVlIChwYXIgZXhlbXBsZQorYXR0cmlidcOpZSBwYXIgdW4gRkFJIHZpYSBESENQIG91IFBQUCkuIERhbnMgY2UgY2FzLCBsJ2VucmVnaXN0cmVtZW50IGRlIHR5cGUgQQorZG9pdCDDqnRyZSBsacOpIMOgIGNldCBlbnJlZ2lzdHJlbWVudCBkeW5hbWlxdWUgcGFyIGwndW5lIG91IGwnYXV0cmUgZGVzIHRlY2huaXF1ZXMKK2hhYml0dWVsbGVzIGRlIHN5c3TDqG1lIEROUyBkeW5hbWlxdWUuCisKK1VuIGV4ZW1wbGUgcGx1cyBjb21wbGV4ZSBtYWlzIGVuIHByYXRpcXVlIHBsdXMgdXRpbGUgY29ycmVzcG9uZCBhdSBjYXMgb8O5CitsJ2FkcmVzc2UgSVAgZ2xvYmFsZW1lbnQgYWNjZXNzaWJsZSBzZSB0cm91dmUgZGFucyBsYSB6b25lIHBvdXIgbGFxdWVsbGUKK2Ruc21hc3EgZmFpdCBhdXRvcml0w6ksIGxlIHBsdXMgc291dmVudCDDoCBsYSByYWNpbmUuIERhbnMgY2UgY2FzIG5vdXMgYXZvbnMgOgorCisubmYKKy5CIGF1dGgtc2VydmVyPW5vdHJlLnpvbmUuY29tLGV0aDAKKy5CIGF1dGgtem9uZT1ub3RyZS56b25lLmNvbSwxLjIuMy4wLzI0CisuZmkKKworLm5mCitub3RyZS56b25lLmNvbSAgICAgICAgICAgICBBICAgIDEuMi4zLjQKK25vdHJlLnpvbmUuY29tICAgICAgICAgICAgTlMgICAgb3VyLnpvbmUuY29tCisuZmkKKworTCdlbnJlZ2lzdHJlbWVudCBBIHBvdXIgbm90cmUuem9uZS5jb20gZXN0IGRvcsOpbmF2YW50IHVuIGVucmVnaXN0cmVtZW50ICJjb2xsZSIKK3F1aSByw6lzb3VkIGxlIHByb2Jsw6htZSBkZSBwb3VsZSBldCBkJ29ldWYgY29uc2lzdGFudCDDoCB0cm91dmVyIGwnYWRyZXNzZSBJUAorZHUgc2VydmV1ciBkZSBub20gcG91ciBub3RyZS56b25lLmNvbSBsb3JzcXVlIGwnZW5yZWdpc3RyZW1lbnQgc2UgdHJvdXZlIGRhbnMKK2xhIHpvbmUgZW4gcXVlc3Rpb24uIElsIHMnYWdpdCBkdSBzZXVsIHLDtGxlIGRlIGNldCBlbnJlZ2lzdHJlbWVudCA6IGNvbW1lIGRuc21hc3EKK2ZhaXQgZMOpc29ybWFpcyBhdXRvcml0w6kgcG91ciBub3RyZS56b25lLmNvbSwgaWwgZG9pdCDDqWdhbGVtZW50IGZvdXJuaXIgY2V0CitlbnJlZ2lzdHJlbWVudC4gU2kgbCdhZHJlc3NlIGV4dGVybmUgZXN0IHN0YXRpcXVlLCBjZWxhIHBldXQtw6p0cmUgcsOpYWxpc8OpIHBhcgorbGUgYmlhaXMgZCd1bmUgZW50csOpZSBkYW5zCisuQiAvZXRjL2hvc3RzIAorb3UgdmlhIHVuCisuQiAtLWhvc3QtcmVjb3JkLgorCisubmYKKy5CIGF1dGgtc2VydmVyPW5vdHJlLnpvbmUuY29tLGV0aDAKKy5CIGhvc3QtcmVjb3JkPW5vdHJlLnpvbmUuY29tLDEuMi4zLjQKKy5CIGF1dGgtem9uZT1ub3RyZS56b25lLmNvbSwxLjIuMy4wLzI0CisuZmkKKworU2kgbCdhZHJlc3NlIGV4dGVybmUgZXN0IGR5bmFtaXF1ZSwgbCdhZHJlc3NlIGFzc29jacOpZSDDoCBub3RyZS56b25lLmNvbSBkb2l0CivDqnRyZSBkw6lyaXbDqWUgZGUgbCdpbnRlcmZhY2UgY29ycmVzcG9uZGFudGUuIENlbGEgcGV1dCDDqnRyZSBmYWl0IGVuIHV0aWxpc2FudAorLkIgaW50ZXJmYWNlLW5hbWUKK1NvdXMgbGEgZm9ybWUgOgorCisubmYKKy5CIGF1dGgtc2VydmVyPW5vdHJlLnpvbmUuY29tLGV0aDAKKy5CIGludGVyZmFjZS1uYW1lPW5vdHJlLnpvbmUuY29tLGV0aDAKKy5CIGF1dGgtem9uZT1ub3RyZS56b25lLmNvbSwxLjIuMy4wLzI0CisuZmkKKworTGEgY29uZmlndXJhdGlvbiBmaW5hbGUgcmFqb3V0ZSDDoCBjZXR0ZSBiYXNlIHVuIHNlcnZldXIgRE5TIHNlY29uZGFpcmUuIElsCitzJ2FnaXQgZCd1biBhdXRyZSBzZXJ2ZXVyIEROUyBxdWkgYXBwcmVuZCBsZXMgZG9ubsOpZXMgRE5TIGRlIGxhIHpvbmUgZW4KK2VmZmVjdHVhbnQgdW4gdHJhbnNmZXJ0IGRlIHpvbmUsIGV0IHF1aSBqb3VlIGxlIHLDtGxlIGRlIHNlcnZldXIgZGUgc2Vjb3VycworYXUgY2FzIG/DuSBsZSBzZXJ2ZXVyIHByaW5jaXBhbCBkZXZlbmFpdCBpbmFjY2Vzc2libGUuIExhIGNvbmZpZ3VyYXRpb24KK2RlIGNlIHNlcnZldXIgc2Vjb25kYWlyZSBzb3J0IGR1IGNhZHJlIGRlIGNldHRlIHBhZ2UgZGUgbWFudWVsLiBMZXMgw6lsw6ltZW50cworZGUgY29uZmlndXJhdGlvbiDDoCByYWpvdXRlciBkYW5zIGRuc21hc3Egc29udCBsZXMgc2ltcGxlcyA6CisKKy5uZgorLkIgYXV0aC1zZWMtc2VydmVycz1zZWNvbmRhaXJlLm1vbmZhaS5jb20KKy5maQorCitldAorCisubmYKK25vdHJlLnpvbmUuY29tICAgICAgICAgICBOUyAgICBzZWNvbmRhaXJlLm1vbmZhaS5jb20KKy5maQorCitMJ2FkZGl0aW9uIGQndW5lIG9wdGlvbiBhdXRoLXNlYy1zZXJ2ZXJzIGFjdGl2ZSBsZXMgdHJhbnNmZXJ0cyBkZSB6b25lIGRhbnMKK2Ruc21hc3EsIGNlIHF1aSBwZXJtZXQgYXUgc2VydmV1ciBzZWNvbmRhaXJlIGRlIHZlbmlyIGNvbGxlY3RlciBsZXMgZG9ubsOpZXMKK0ROUy4gU2kgdm91cyBzb3VoYWl0ZXogcmVzdHJlaW5kcmUgbCdhY2PDqHMgw6AgY2VzIGRvbm7DqWVzIMOgIGRlcyBow7R0ZXMKK3Nww6ljaWZpcXVlcywgdm91cyBwb3V2ZXogbGUgZmFpcmUgdmlhIDoKKworLm5mCisuQiBhdXRoLXBlZXI9PGFkcmVzc2UgSVAgZHUgc2VydmV1ciBzZWNvbmRhaXJlPgorLmZpCisKK0Ruc21hc3Egam91ZSBsZSByw7RsZSBkZSBzZXJ2ZXVyIGZhaXNhbnQgYXV0b3JpdMOpIHBvdXIgbGVzIGRvbWFpbmVzIGluLWFkZHIuYXJwYQorZXQgaXA2LmFycGEgYXNzb2Npw6lzIGF1eCBzb3VzLXLDqXNlYXV4IGTDqWZpbmlzIGRhbnMgbGEgZMOpY2xhcmF0aW9uIGRlIHpvbmUKK2F1dGgtem9uZSwgY2UgcXVpIGZhaXQgcXVlIGxlcyByZXF1w6p0ZXMgRE5TIGludmVyc8OpZXMgKGRlIGwnYWRyZXNzZSB2ZXJzCitsZSBub20pIHBldXZlbnQtc2ltcGxlbWVudCDDqnRyZSBjb25maWd1csOpZXMgYXZlYyB1biBlbnJlZ2lzdHJlbWVudCBOUworYWTDqXF1YXQuIFBhciBleGVtcGxlLCBjb21tZSBub3VzIGTDqWZpbmlzc29ucyBwbHVzIGhhdXQgbGVzIGFkcmVzc2VzCisxLjIuMy4wLzI0IDoKKy5uZgorIDMuMi4xLmluLWFkZHIuYXJwYSAgTlMgICAgbm90cmUuem9uZS5jb20KKy5maQorCitWZXVpbGxleiBub3RlciBxdWUgcG91ciBsJ2luc3RhbnQsIGxlcyB6b25lcyBpbnZlcnNlcyBuZSBzb250IHBhcworZGlzcG9uaWJsZXMgZGFucyBsZXMgdHJhbnNmZXJ0cyBkZSB6b25lLCBkb25jIGlsIGVzdCBpbnV0aWxlIGRlIGNvbmZpZ3VyZXIKK2RlIHNlcnZldXIgc2Vjb25kYWlyZSBwb3VyIGxhIHLDqXNvbHV0aW9uIGludmVyc2UuCisKKy5QUAorTG9yc3F1ZSBkbnNtYXNxIGVzdCBjb25maWd1csOpIGVuIHRlbXBzIHF1ZSBzZXJ2ZXVyIGZhaXNhbnQgYXV0b3JpdMOpLAorbGVzIGRvbm7DqWVzIHN1aXZhbnRlcyBzb250IHV0aWxpc8OpZXMgcG91ciBwZXVwbGVyIGxhIHpvbmUgY29uc2lkw6lyw6llIDoKKy5QUAorLkIgLS1teC1ob3N0LCAtLXNydi1ob3N0LCAtLWRucy1yciwgLS10eHQtcmVjb3JkLCAtLW5hcHRyLXJlY29yZAorLCBwb3VyIGF1dGFudCBxdWUgbGVzIG5vbXMgZGVzIGVucmVnaXN0cmVtZW50cyBzZSB0cm91dmVudCBkYW5zIGxhIHpvbmUgZW4KK3F1ZXN0aW9uLgorLlBQCisuQiAtLWNuYW1lCitwb3VyIHBldSBxdWUgbGUgbm9tIHNvaXQgZGFucyBsZSBkb21haW5lLiBTaSBsYSBjaWJsZSBkdSBDTkFNRSBuJ2VzdAorcGFzIHBsZWluZW1lbnQgcXVhbGlmacOpZSwgYWxvcnMgZWxsZSBlc3QgcXVhbGlmacOpZSBhdmVjIGxlIG5vbSBkZSBsYQorem9uZSBwb3VyIGxhcXVlbGxlIGxlIHNlcnZldXIgZmFpdCBhdXRvcml0w6kuCisuUFAKK0xlcyBhZHJlc3NlcyBJUHY0IGV0IElQdjYgZXh0cmFpdGVzIGRlIC9ldGMvaG9zdHMgKGV0CisuQiAtLWFkZG4taG9zdHMKKykgYWluc2kgcXVlIGxlcyBvcHRpb25zCisuQiAtLWhvc3QtcmVjb3JkCitmb3Vybmlzc2FudCBkZXMgYWRyZXNzZXMgc2l0dcOpZXMgZGFucyBsJ3VuIGRlcyBzb3VzLXLDqXNlYXV4IHNww6ljaWZpw6lzIGRhbnMgCisuQiAtLWF1dGgtem9uZS4KKy5QUAorQWRyZXNzZXMgc3DDqWNpZmnDqWVzIHBhcgorLkIgLS1pbnRlcmZhY2UtbmFtZS4KK0RhbnMgY2UgY2FzLCBsJ2FkcmVzc2Ugbidlc3QgcGFzIGxpbWl0w6llIMOgIGwndW4gZGVzIHNvdXMtcsOpc2VhdXggZG9ubsOpIGRhbnMKKy5CIC0tYXV0aC16b25lLiAKKworLlBQCitMZXMgYWRyZXNzZXMgZGUgYmF1eCBESENQLCBzaSBsJ2FkcmVzc2UgZXN0IHNpdHXDqWUgZGFucyBsJ3VuIGRlcyBzb3VzLXLDqXNlYXV4IGRlCisuQiAtLWF1dGgtem9uZQorT1UgZGFucyB1bmUgcGxhZ2UgREhDUCBjb25zdHJ1aXRlLiBEYW5zIGxlIG1vZGUgcGFyIGTDqWZhdXQsIG/DuSBsZSBiYWlsCitESENQIGEgdW4gbm9tIG5vbiBxdWFsaWZpw6ksIGV0IMOpdmVudHVlbGxlbWVudCBwb3VyIHVuIG5vbSBxdWFsaWZpw6kgY29uc3RydWl0Cit2aWEKKy5CIC0tZG9tYWluCissIGFsb3JzIGxlIG5vbSBkYW5zIGxhIHpvbmUgZmFpc2FudCBhdXRvcml0w6kgZXN0IGNvbnN0cnVpdCDDoCBwYXJ0aXIgZHUgbm9tCitub24gcXVhbGlmacOpIGV0IGR1IG5vbSBkZSBkb21haW5lIGRlIGxhIHpvbmUuIENlbGEgcGV1dCBvbiBub24gw6p0cmUgw6lnYWwKK2NlbHVpIGZvdXJuaSBwYXIKKy5CIC0tZG9tYWluLgorU2kgbCdvcHRpb24KKy5CIC0tZGhjcC1mcWRuCitlc3QgZm91cm5pZSwgYWxvcnMgbGVzIG5vbXMgcGxlaW5lbWVuZXQgcXVhbGlmacOpcyBhc3NvY2nDqXMgYXV4IGJhdXggREhDUAorc29udCB1dGlsaXPDqXMsIGTDqHMgbG9ycyBxdSdpbHMgY29ycmVzcG9uZGVudCBhdSBub20gZGUgZG9tYWluZSBhc3NvY2nDqQorw6AgbGEgem9uZS4KKworCisuU0ggQ09ERVMgREUgU09SVElFCisuUFAKKzAgLSBEbnNtYXNxIHMnZXN0IGNvcnJlY3RlbWVudCBsYW5jw6kgZW4gdMOiY2hlIGRlIGZvbmQsIG91IGFsb3JzIHMnZXN0Citjb3JyZWN0ZW1lbnQgdGVybWluw6kgc2kgbGUgbGFuY2VtZW50IGVuIHTDomNoZSBkZSBmb25kIG4nYSBwYXMgw6l0w6kgYWN0aXbDqS4KKy5QUAorMSAtIFVuIHByb2Jsw6htZSBkZSBjb25maWd1cmF0aW9uIGEgw6l0w6kgZMOpdGVjdMOpLgorLlBQCisyIC0gVW4gcHJvYmzDqG1lIGVzdCBzdXJ2ZW51IGF2ZWMgdW4gYWNjw6hzIHLDqXNlYXUgKGFkcmVzc2UgZMOpasOgIHV0aWxpc8OpZSwKK3RlbnRhdGl2ZSBkJ3V0aWxpc2VyIHVuIHBvcnQgcHJpdmlsw6lnacOpIHNhbnMgbGVzIHBlcm1pc3Npb25zIG7DqWNlc3NhaXJlcykuCisuUFAKKzMgLSBVbiBwcm9ibMOobWUgZXN0IHN1cnZlbnUgYXZlYyB1bmUgb3DDqXJhdGlvbiBzdXIgdW4gc3lzdMOobWUgZGUgZmljaGllcgorKGZpY2hpZXIgb3UgcsOpcGVydG9pcmUgbWFucXVhbnQsIHBlcm1pc3Npb25zKS4KKy5QUAorNCAtIEltcG9zc2liaWxpdMOpIGQnYWxsb3VlciBkZSBsYSBtw6ltb2lyZS4KKy5QUAorNSAtIEF1dHJlIHByb2Jsw6htZS4KKy5QUAorMTEgb3UgcGx1cyAtIHVuIGNvZGUgZGUgcmV0b3VyIGRpZmbDqXJlbnQgZGUgMCBhIMOpdMOpIHJlw6d1IGxvcnMgZGUgbCdhcHBlbCBhdQorcHJvY2Vzc3VzICJpbml0IiBkdSBzY3JpcHQgZGVzIGJhaWxzLiBMZSBjb2RlIGRlIHJldG91ciBkZSBEbnNtYXNxIGNvcnJlc3BvbmQKK2F1IGNvZGUgZGUgcmV0b3VyIGR1IHNjcmlwdCBwbHVzIDEwLgorCisuU0ggTElNSVRFUworTGVzIHZhbGV1cnMgcGFyIGTDqWZhdXQgcG91ciBsZXMgbGltaXRlcyBkZSByZXNzb3VyY2VzIGRlIERuc21hc3Egc29udCBlbiBnw6luw6lyYWwKK2NvbnNlcnZhdHJpY2VzIGV0IGFwcHJvcHJpw6llcyBwb3VyIGRlcyB1dGlsaXNhdGlvbnMgZW1iYXJxdcOpZXMgc3VyIGRlcyBtYWNoaW5lcworZGUgdHlwZSByb3V0ZXVyIGF5YW50IGRlcyBwcm9jZXNzZXVycyBsZW50cyBldCB1bmUgbcOpbW9pcmUgbGltaXTDqWUuIFN1ciBkdQorbWF0w6lyaWVsIHBsdXMgcGVyZm9ybWFudCwgaWwgZXN0IHBvc3NpYmxlIGQnYXVnbWVudGVyIGxlcyBsaW1pdGVzIGV0IGRlIGfDqXJlcgorcGx1cyBkZSBjbGllbnRzLiBMZXMgcmVtYXJxdWVzIHN1aXZhbnRlcyBzJ2FwcGxpcXVlbnQgw6AgRG5zbWFzcSB2ZXJzaW9uIDIuMzcgZXQKK3VsdMOpcmlldXIgOiBsZXMgdmVyc2lvbnMgcHLDqWPDqWRlbnRlcyBuZSBtb250YWllbnQgcGFzIGVuIGNoYXJnZSBhdXNzaSBiaWVuLgorIAorLlBQCitEbnNtYXNxIGVzdCBjYXBhYmxlIGRlIGfDqXJlciBsZSBETlMgZXQgREhDUCBwb3VyIGF1IG1vaW5zIHVuIG1pbGxpZXIgZGUgY2xpZW50cy4KK1BvdXIgY2VsYSwgbGEgZHVyw6llIGRlcyBiYWlsIG5lIGRvaXQgcGFzIMOqdHJlIHRyw6hzIGNvdXJ0ZSAobW9pbnMgZCd1bmUgaGV1cmUpLgorTGEgdmFsZXVyIGRlCisuQiAtLWRucy1mb3J3YXJkLW1heCAKK3BldXQtw6p0cmUgYXVnbWVudMOpZSA6IGNvbW1lbmNlciBwYXIgbGEgcmVuZHJlIMOpZ2FsZSBhdSBub21icmUgZGUgY2xpZW50cyBldAorbCdhdWdtZW50ZXIgc2kgbGUgRE5TIHNlbWJsZSBsZW50LiBOb3RlciBxdWUgbGEgcGVyZm9ybWFuY2UgZHUgRE5TIGTDqXBlbmRzCivDqWdhbGVtZW50IGRlIGxhIHBlcmZvcm1hbmNlIGRlcyBzZXJ2ZXVycyBhbW9udHMuIExhIHRhaWxsZSBkdSBjYWNoZSBETlMgcGV1dC0KK8OqdHJlIGF1Z21lbnTDqWUgOiBsYSBsaW1pdGUgZW4gZHVyIGVzdCBkZSAxMDAwMCBlbnRyw6llcyBldCBsYSB2YWxldXIgcGFyIGTDqWZhdXQKKygxNTApIGVzdCB0csOocyBiYXNzZS4gRW52b3llciB1biBzaWduYWwgU0lHVVNSMSDDoCBEbnNtYXNxIGxlIGZhaXQgw6ltZXR0cmUgZGVzCitpbmZvcm1hdGlvbnMgdXRpbGVzIHBvdXIgcGFyYW3DqXRyZXIgbGEgdGFpbGxlIGRlIGNhY2hlLiBWb2lyIGxhIHNlY3Rpb24KKy5CIE5PVEVTCitwb3VyIHBsdXMgZGUgZMOpdGFpbHMuCisuUFAKK0xlIHNlcnZldXIgVEZUUCBpbnTDqWdyw6kgZXN0IGNhcGFibGUgZGUgcGx1c2lldXJzIHRyYW5zZmVydHMgZGUgZmljaGllcnMKK3NpbXVsdGFuw6lzIDogTGEgbGltaXRlIGFic29sdWUgZXN0IGxpw6llIGF1IG5vbWJyZSBtYXhpbWFsIGRlIGRlc2NyaXB0ZXVycyBkZQorZmljaGllcnMgYWxsb3XDqSDDoCB1biBwcm9jZXNzdXMgZXQgw6AgbGEgY2FwYWNpdMOpIGRlIGwnYXBwZWwgc3lzdMOobWUgc2VsZWN0KCkgw6AKK2fDqXJlciB1biBncmFuZCBub21icmUgZGUgSEFORExFIGRlIGZpY2hpZXIuIFNpIGxhIGxpbWl0ZSBlc3QgZml4w6llIHRyb3AgaGF1dCBwYXIKK2xlIGJpYWlzIGRlCisuQiAtLXRmdHAtbWF4CitlbGxlIHNlcmEgcsOpZHVpdGUgZXQgbGEgbGltaXRlIGFjdHVlbGxlIHNlcmEgZW5yZWdpc3Ryw6llIGF1IGTDqW1hcnJhZ2UuIElsIGZhdXQKK25vdGVyIHF1ZSBwbHVzIGRlIHRyYW5zZmVydHMgc29udCBwb3NzaWJsZSBsb3JzcXVlIGxlIG3Dqm1lIGZpY2hpZXIgZXN0IHRyYW5zbWlzCithdSBsaWV1IGQnYXZvaXIgdW4gZmljaGllciBkaWZmw6lyZW50IHBvdXIgY2hhcXVlIHRyYW5zZmVydC4KKworLlBQCitJbCBlc3QgcG9zc2libGUgZCd1dGlsaXNlciBEbnNtYXNxIHBvdXIgYmxvcXVlciBsYSBwdWJsaWNpdMOpIHN1ciBsYSB0b2lsZQorZW4gYXNzb2NpYW50IGRlcyBzZXJ2ZXVycyBkZSBwdWJsaWNpdMOpIGJpZW4gY29ubnVzIMOgIGwnYWRyZXNzZSAxMjcuMC4wLjEgb3UKKzAuMC4wLjAgcGFyIGxlIGJpYWlzIGR1IGZpY2hpZXIKKy5CIC9ldGMvaG9zdHMgCitvdSBkJ3VuIGZpY2hpZXIgZCdow7R0ZSBhZGRpdGlvbm5lbC4gQ2V0dGUgbGlzdGUgcGV1dC3DqnRyZSB0csOocyBsb25ndWUsIERuc21hc3EKK2F5YW50IMOpdMOpIHRlc3TDqSBhdmVjIHN1Y2PDqHMgYXZlYyB1biBtaWxsaW9uIGRlIG5vbXMuIENldHRlIHRhaWxsZSBkZSBmaWNoaWVyCituw6ljZXNzaXRlIHVuIHByb2Nlc3NldXIgw6AgMSBHaHogZXQgZW52aXJvbiA2MCBNbyBkZSBSQU0uCisKKy5TSCBJTlRFUk5BVElPTkFMSVNBVElPTgorRG5zbWFzcSBwZXV0IMOqdHJlIGNvbXBpbMOpIHBvdXIgc3VwcG9ydGVyIGwnaW50ZXJuYXRpb25hbGlzYXRpb24uIFBvdXIgY2VsYSwKK2xlcyBjaWJsZXMgImFsbC1pMThuIiBldCAiaW5zdGFsbC1pMThuIiBkb2l2ZW50IMOqdHJlIGRvbm7DqWVzIMOgIG1ha2UsIGVuIGxpZXUKK2V0IHBsYWNlIGRlcyBjaWJsZXMgc3RhbmRhcmRzICJhbGwiIGV0ICJpbnN0YWxsIi4gTG9yc3F1ZSBjb21waWzDqSBhdmVjIGxlCitzdXBwb3J0IGRlIGwnaW50ZXJuYXRpb25hbGlzYXRpb24sIGRuc21hc3Egc3VwcG9ydGUgbGVzIG5vbXMgZGUgZG9tYWluZXMKK2ludGVybmF0aW9uYWxpc8OpcyAoImludGVybmF0aW9uYWxpc2VkIGRvbWFpbiBuYW1lcyIgb3UgSUROKSwgZXQgbGVzIG1lc3NhZ2VzIGRlCit0cmFjZXMgKCJsb2dzIikgc29udCDDqWNyaXRzIGRhbnMgbGEgbGFuZ3VlIGxvY2FsZS4gTGVzIG5vbXMgZGUgZG9tYWluZXMgZGFucworL2V0Yy9ob3N0cywgL2V0Yy9ldGhlcnMgZXQgL2V0Yy9kbnNtYXNxLmNvbmYgY29udGVuYW50IGRlcyBjYXJhY3TDqHJlcworbm9uLUFTQ0lJIHNlcm9udCB0cmFuc2Zvcm3DqXMgc2Vsb24gbGEgcmVwcsOpc2VudGF0aW9uIHB1bnljb2RlIGludGVybmUKK2F1eCBETlMuIFZldWlsbGV6IG5vdGVyIHF1ZSBkbnNtYXNxIGTDqXRlcm1pbmUgbGEgbGFuZ3VlIHBvdXIgbGVzIG1lc3NhZ2VzCithaW5zaSBxdWUgbGUgamV1IGRlIGNhcmFjdMOocmVzIHN1c2NlcHRpYmxlIGQnw6p0cmUgdXRpbGlzw6kgZGFucyBsZXMgZmljaGllcnMKK2RlIGNvbmZpZ3VyYXRpb24gw6AgcGFydGlyIGRlIGxhIHZhcmlhYmxlIGQnZW52aXJvbm5lbWVudCBMQU5HLiBDZWNpIGRldnJhaXQKK8OqdHJlIGNvbmZpZ3Vyw6kgw6AgbGEgdmFsZXVyIHBhciBkw6lmYXV0IGR1IHN5c3TDqG1lIHBhciBsZXMgc2NyaXB0cyBkw6ltYXJyYW50CitkbnNtYXNxLiBMb3JzcXVlIGxlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uIHNvbnQgw6lkaXTDqXMsIHZldWlsbGV6IGZhaXJlCithdHRlbnRpb24gw6AgbGUgZmFpcmUgZW4gdXRpbGlzYW50IGxhIHZhbGV1ciBkZSBsb2NhbGUgcGFyIGTDqWZhdXQgZHUgc3lzdMOobWUKK2V0IG5vbiB1bmUgdmFsZXVyIHNww6ljaWZpcXVlIMOgIGwndXRpbGlzYXRldXIsIHB1aXNxdWUgZG5zbWFzcSBuJ2EgYXVjdW4KK21veWVuIGRlIGTDqXRlcm1pbmVyIGRpcmVjdGVtZW50IGxhIHZhbGV1ciBkZSBqZXUgZGUgY2FyYWN0w6hyZSB1dGlsaXPDqSwKK2V0IGFzc3VtZSBkZSBjZSBmYWl0IHF1J2lsIHMnYWdpdCBkZSBsYSB2YWxldXIgcGFyIGTDqWZhdXQgZHUgc3lzdMOobWUuCisKKy5TSCBGSUNISUVSUworLklSIC9ldGMvZG5zbWFzcS5jb25mIAorCisuSVIgL3Vzci9sb2NhbC9ldGMvZG5zbWFzcS5jb25mCisuSVIgL3Zhci9ydW4vZG5zbWFzcS9yZXNvbHYuY29uZgorLklSIC9ldGMvcHBwL3Jlc29sdi5jb25mCisuSVIgL2V0Yy9kaGNwYy9yZXNvbHYuY29uZgorCisuSVIgL2V0Yy9yZXNvbHYuY29uZgorCisuSVIgL2V0Yy9ob3N0cworCisuSVIgL2V0Yy9ldGhlcnMKKworLklSIC92YXIvbGliL21pc2MvZG5zbWFzcS5sZWFzZXMgCisKKy5JUiAvdmFyL2RiL2Ruc21hc3EubGVhc2VzCisKKy5JUiAvdmFyL3J1bi9kbnNtYXNxLnBpZAorLlNIIFZPSVIgQVVTU0kKKy5CUiBob3N0cyAoNSksIAorLkJSIHJlc29sdmVyICg1KQorLlNIIEFVVEVVUgorQ2V0dGUgcGFnZSBkZSBtYW51ZWwgYSDDqXTDqSDDqWNyaXRlIHBhciBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPi4KKworTGEgdHJhZHVjdGlvbiBkYW5zIHVuIGZyYW7Dp2FpcyBiYW5jYWwgYSDDqXTDqSBjb21taXNlIHBhciBHaWxkYXMgTGUgTmFkYW4KKzwzbnRyMHAxM0BnbWFpbC5jb20+IDogVG91dGUgcsOpdmlzaW9uL2NvcnJlY3Rpb24gcGVybWV0dGFudCBkZSBjb3JyaWdlcgorb3J0aG9ncmFwaGUgb3UgZ3JhbW1haXJlIG1haXMgc3VydG91dCBsZXMgw6l2ZW50dWVsbGVzIGZhdXRlcyBkZSBzZW5zIHNlcmEgbGEKK2JpZW52ZW51ZSEKZGlmZiAtLWdpdCBhL3BvL2RlLnBvIGIvcG8vZGUucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIzMTczNwotLS0gL2Rldi9udWxsCisrKyBiL3BvL2RlLnBvCkBAIC0wLDAgKzEsMjA5NCBAQAorIyBHZXJtYW4gdHJhbnNsYXRpb25zIGZvciBkbnNtYXNxIHBhY2thZ2UuCisjCisjIFRoaXMgcmV2aXNlZCB2ZXJzaW9uIGlzIChDKSBDb3B5cmlnaHQgYnkKKyMgTWF0dGhpYXMgQW5kcmVlIDxtYXR0aGlhcy5hbmRyZWVAZ214LmRlPiwgMjAxMC4KKyMgSXQgaXMgc3ViamVjdCB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIsCisjIG9yIGF0IHlvdXIgb3B0aW9uLCBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgQW4gb2xkZXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgd2FzIG9yaWdpbmFsbHkgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluIGJ5CisjIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+LCAyMDA1LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZG5zbWFzcSAyLjcwXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA5LTA2LTE4IDEyOjI0KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE0LTA1LTAxIDIyOjUxKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IENvbnJhZCBLb3N0ZWNraSA8Y2tAY29ucmFkLWtvc3RlY2tpLmRlPlxuIgorIkxhbmd1YWdlLVRlYW06IEdlcm1hbiA8ZGVAbGkub3JnPlxuIgorIkxhbmd1YWdlOiBkZVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorIlgtR2VuZXJhdG9yOiBQb2VkaXQgMS42LjVcbiIKKyJYLVBvZWRpdC1Tb3VyY2VDaGFyc2V0OiBVVEYtOFxuIgorCisjOiBjYWNoZS5jOjUwNQorbXNnaWQgIkludGVybmFsIGVycm9yIGluIGNhY2hlLiIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjkwOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBuYW1lcyBmcm9tICVzOiAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTGFkZW4gZGVyIE5hbWVuIHZvbiAlczogJXMiCisKKyM6IGNhY2hlLmM6OTM0IGRoY3AuYzo4MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGFkZHJlc3MgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAiRmVobGVyaGFmdGUgQWRyZXNzZSBpbiAlcyBaZWlsZSAlZCIKKworIzogY2FjaGUuYzo5ODUgZGhjcC5jOjgzNgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbmFtZSBhdCAlcyBsaW5lICVkIgorbXNnc3RyICJGZWhsZXJoYWZ0ZXIgTmFtZSBpbiAlcyBaZWlsZSAlZCIKKworIzogY2FjaGUuYzo5OTIgZGhjcC5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkICVzIC0gJWQgYWRkcmVzc2VzIgorbXNnc3RyICIlcyBnZWxlc2VuIC0gJWQgQWRyZXNzZW4iCisKKyM6IGNhY2hlLmM6MTEwMAorbXNnaWQgImNsZWFyZWQgY2FjaGUiCittc2dzdHIgIkNhY2hlIGdlbGVlcnQiCisKKyM6IGNhY2hlLmM6MTEyMworIywgYy1mb3JtYXQKK21zZ2lkICJObyBJUHY0IGFkZHJlc3MgZm91bmQgZm9yICVzIgorbXNnc3RyICJLZWluZSBJUHY0LUFkcmVzc2UgZsO8ciAlcyBnZWZ1bmRlbiIKKworIzogY2FjaGUuYzoxMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGEgQ05BTUUsIG5vdCBnaXZpbmcgaXQgdG8gdGhlIERIQ1AgbGVhc2Ugb2YgJXMiCittc2dzdHIgIiVzIGlzdCBlaW4gQ05BTUUsIHdlaXNlIGVzIGRlciBESENQLUxlYXNlIHZvbiAlcyBuaWNodCB6dSIKKworIzogY2FjaGUuYzoxMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBnaXZpbmcgbmFtZSAlcyB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyBiZWNhdXNlIHRoZSBuYW1lIGV4aXN0cyBpbiAlcyB3aXRoIGFkZHJlc3MgJXMiCittc2dzdHIgIk5hbWUgJXMgd3VyZGUgZGVtIERIQ1AtTGVhc2Ugdm9uICVzIG5pY2h0IHp1Z2V3aWVzZW4sIGRhIGRlciBOYW1lIGluICVzIGJlcmVpdHMgbWl0IEFkcmVzc2UgJXMgZXhpc3RpZXJ0IgorCisjOiBjYWNoZS5jOjEzNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZSAlbHUiCittc2dzdHIgIlplaXQgJWx1IgorCisjOiBjYWNoZS5jOjEzNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FjaGUgc2l6ZSAlZCwgJWQvJWQgY2FjaGUgaW5zZXJ0aW9ucyByZS11c2VkIHVuZXhwaXJlZCBjYWNoZSBlbnRyaWVzLiIKK21zZ3N0ciAiQ2FjaGUgR3LDtsOfZSAlZCwgJWQvJWQgQ2FjaGUtRWluZsO8Z3VuZ2VuIHZlcndlbmRldGVuIG5pY2h0IGFiZ2VsYXVmZW5lIENhY2hlLUVpbnRyw6RnZSB3aWVkZXIuIgorCisjOiBjYWNoZS5jOjEzNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicXVlcmllcyBmb3J3YXJkZWQgJXUsIHF1ZXJpZXMgYW5zd2VyZWQgbG9jYWxseSAldSIKK21zZ3N0ciAiJXUgd2VpdGVyZ2VsZWl0ZXRlIEFuZnJhZ2VuLCAldSBsb2thbCBiZWFudHdvcnRldGUgQW5mcmFnZW4iCisKKyM6IGNhY2hlLmM6MTM3MgorIywgYy1mb3JtYXQKK21zZ2lkICJxdWVyaWVzIGZvciBhdXRob3JpdGF0aXZlIHpvbmVzICV1IgorbXNnc3RyICJBbmZyYWdlbiBuYWNoIGF1dG9yaXRhdGl2ZW4gWm9uZW4gJXUiCisKKyM6IGNhY2hlLmM6MTM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgJXMjJWQ6IHF1ZXJpZXMgc2VudCAldSwgcmV0cmllZCBvciBmYWlsZWQgJXUiCittc2dzdHIgIlNlcnZlciAlcyMlZDogJXUgQW5mcmFnZW4gZ2VzZW5kZXQsICV1IGVybmV1dCB2ZXJzdWNodCBvZGVyIGZlaGxnZXNjaGxhZ2VuIgorCisjOiB1dGlsLmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNlZWQgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yOiAlcyIKK21zZ3N0ciAiS29ubnRlIGRlbiBadWZhbGxzemFobGVuZ2VuZXJhdG9yIG5pY2h0IGluaXRpYWxpc2llcmVuOiAlcyIKKworIzogdXRpbC5jOjIwNQorbXNnaWQgImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkiCittc2dzdHIgIktvbm50ZSBTcGVpY2hlciBuaWNodCBiZWxlZ2VuIgorCisjOiB1dGlsLmM6MjQzIG9wdGlvbi5jOjU3OQorbXNnaWQgImNvdWxkIG5vdCBnZXQgbWVtb3J5IgorbXNnc3RyICJTcGVpY2hlciBuaWNodCB2ZXJmw7xnYmFyIgorCisjOiB1dGlsLmM6MjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZTogJXMiCittc2dzdHIgIktvbm50ZSBQaXBlIG5pY2h0IGVyemV1Z2VuOiAlcyIKKworIzogdXRpbC5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWxsb2NhdGUgJWQgYnl0ZXMiCittc2dzdHIgIktvbm50ZSAlZCBCeXRlcyBuaWNodCBiZWxlZ2VuIgorCisjIEBTaW1vbjogbm90IHBlcmZlY3QgYnV0IEkgY2Fubm90IGdldCBuZWFyZXIgcmlnaHQgbm93LgorIzogdXRpbC5jOjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZpbml0ZSIKK21zZ3N0ciAidW5lbmRsaWNoIgorCisjOiBvcHRpb24uYzozMTgKK21zZ2lkICJTcGVjaWZ5IGxvY2FsIGFkZHJlc3MoZXMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIkxva2FsZSBhYnp1aMO2cmVuZGUgQWRyZXNzZShuKSBhbmdlYmVuLiIKKworIzogb3B0aW9uLmM6MzE5Cittc2dpZCAiUmV0dXJuIGlwYWRkciBmb3IgYWxsIGhvc3RzIGluIHNwZWNpZmllZCBkb21haW5zLiIKK21zZ3N0ciAiSVAtQWRyZXNzZSBmw7xyIGFsbGUgSG9zdHMgaW4gYW5nZWJlbmVuIERvbcOkbmVuIGZlc3RsZWdlbi4iCisKKyMgRklYTUU6IHRoZSBFbmdsaXNoIHRlc3QgaXMgbm90IHRvIHRoZSBwb2ludC4gSnVzdCB1c2UgYSBzaG9ydGVuZWQgZGVzY3JpcHRpb24KKyMgZnJvbSB0aGUgbWFucGFnZSBpbnN0ZWFkLiAtLSBNQQorIzogb3B0aW9uLmM6MzIwCittc2dpZCAiRmFrZSByZXZlcnNlIGxvb2t1cHMgZm9yIFJGQzE5MTggcHJpdmF0ZSBhZGRyZXNzIHJhbmdlcy4iCittc2dzdHIgIkbDvHIgcHJpdmF0ZSBBZHJlc3NiZXJlaWNoZSBuYWNoIFJGQzE5MTggXCJrZWluZSBzb2xjaGUgRG9tYWluXCIgbGllZmVybi4iCisKKyM6IG9wdGlvbi5jOjMyMQorbXNnaWQgIlRyZWF0IGlwYWRkciBhcyBOWERPTUFJTiAoZGVmZWF0cyBWZXJpc2lnbiB3aWxkY2FyZCkuIgorbXNnc3RyICJEaWVzZSBJUC1BZHJlc3NlIGFscyBOWERPTUFJTiBpbnRlcnByZXRpZXJlbiAod2VocnQgXCJTdWNoaGlsZmVuXCIgYWIpLiIKKworIzogb3B0aW9uLmM6MzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIGNhY2hlIGluIGVudHJpZXMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIkdyw7bDn2UgZGVzIENhY2hlcyAoWmFobCBkZXIgRWludHLDpGdlKSBmZXN0bGVnZW4gKFZvcmVpbnN0ZWxsdW5nOiAlcykuIgorCisjOiBvcHRpb24uYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBjb25maWd1cmF0aW9uIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIktvbmZpZ3VyYXRpb25zZGF0ZWkgZmVzdGxlZ2VuIChWb3JlaW5zdGVsbHVuZzogJXMpLiIKKworIzogb3B0aW9uLmM6MzI0Cittc2dpZCAiRG8gTk9UIGZvcmsgaW50byB0aGUgYmFja2dyb3VuZDogcnVuIGluIGRlYnVnIG1vZGUuIgorbXNnc3RyICJOSUNIVCBpbiBkZW4gSGludGVyZ3J1bmQgZ2VoZW46IEJldHJpZWIgaW0gRGVidWctTW9kdXMiCisKKyM6IG9wdGlvbi5jOjMyNQorbXNnaWQgIkRvIE5PVCBmb3J3YXJkIHF1ZXJpZXMgd2l0aCBubyBkb21haW4gcGFydC4iCittc2dzdHIgIkFuZnJhZ2VuIG9obmUgRG9tw6RuZW4tVGVpbCBOSUNIVCB3ZWl0ZXJzY2hpY2tlbi4iCisKKyM6IG9wdGlvbi5jOjMyNgorbXNnaWQgIlJldHVybiBzZWxmLXBvaW50aW5nIE1YIHJlY29yZHMgZm9yIGxvY2FsIGhvc3RzLiIKK21zZ3N0ciAiRsO8ciBsb2thbGUgRWludHLDpGdlIE1YLUVpbnRyw6RnZSBsaWVmZXJuLCBkaWUgYXVmIHNpY2ggc2VsYnN0IHplaWdlbi4iCisKKyM6IG9wdGlvbi5jOjMyNworbXNnaWQgIkV4cGFuZCBzaW1wbGUgbmFtZXMgaW4gL2V0Yy9ob3N0cyB3aXRoIGRvbWFpbi1zdWZmaXguIgorbXNnc3RyICJFcndlaXRlcmUgZWluZmFjaGUgTmFtZW4gaW4gL2V0Yy9ob3N0cyBtaXQgZGVyIERvbcOkbmVuLUVuZHVuZy4iCisKKyM6IG9wdGlvbi5jOjMyOAorbXNnaWQgIkRvbid0IGZvcndhcmQgc3B1cmlvdXMgRE5TIHJlcXVlc3RzIGZyb20gV2luZG93cyBob3N0cy4iCittc2dzdHIgIid1bmVjaHRlJyBETlMtQW5mcmFnZW4gdm9uIFdpbmRvd3MtUmVjaG5lcm4gbmljaHQgd2VpdGVybGVpdGVuIgorCisjIEBTaW1vbjogSSdtIGEgYml0IHVuc3VyZSBhYm91dCAic3B1cmlvdXMiCisjOiBvcHRpb24uYzozMjkKK21zZ2lkICJFbmFibGUgREhDUCBpbiB0aGUgcmFuZ2UgZ2l2ZW4gd2l0aCBsZWFzZSBkdXJhdGlvbi4iCittc2dzdHIgIkRIQ1AgZsO8ciBhbmdlZ2ViZW5lbiBCZXJlaWNoIHVuZCBEYXVlciBlaW5zY2hhbHRlbiIKKworIzogb3B0aW9uLmM6MzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZSB0byB0aGlzIGdyb3VwIGFmdGVyIHN0YXJ0dXAgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIk5hY2ggZGVtIFN0YXJ0IGluIGRpZXNlIEJlbnV0emVyZ3J1cHBlIHdlY2hzZWxuIChWb3JlaW5zdGVsbHVuZyAlcykuIgorCisjOiBvcHRpb24uYzozMzEKK21zZ2lkICJTZXQgYWRkcmVzcyBvciBob3N0bmFtZSBmb3IgYSBzcGVjaWZpZWQgbWFjaGluZS4iCittc2dzdHIgIkFkcmVzc2Ugb2RlciBIb3N0bmFtZW4gZsO8ciBlaW5lbiBhbmdlZ2ViZW5lbiBDb21wdXRlciBzZXR6ZW4uIgorCisjOiBvcHRpb24uYzozMzIKK21zZ2lkICJSZWFkIERIQ1AgaG9zdCBzcGVjcyBmcm9tIGZpbGUuIgorbXNnc3RyICJESENQLUhvc3QtQW5nYWJlbiBhdXMgRGF0ZWkgbGVzZW4uIgorCisjOiBvcHRpb24uYzozMzMKK21zZ2lkICJSZWFkIERIQ1Agb3B0aW9uIHNwZWNzIGZyb20gZmlsZS4iCittc2dzdHIgIkRIQ1AtT3B0aW9uZW4gYXVzIERhdGVpIGxlc2VuLiIKKworIzogb3B0aW9uLmM6MzM0Cittc2dpZCAiRXZhbHVhdGUgY29uZGl0aW9uYWwgdGFnIGV4cHJlc3Npb24uIgorbXNnc3RyICJBdXN3ZXJ0dW5nIGVpbmVzIEF1c2RydWNrcyBiZWRpbmd0ZXIgTWFya2VuLiIKKworIzogb3B0aW9uLmM6MzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRvIE5PVCBsb2FkICVzIGZpbGUuIgorbXNnc3RyICIlcy1EYXRlaSBOSUNIVCBsYWRlbi4iCisKKyM6IG9wdGlvbi5jOjMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGEgaG9zdHMgZmlsZSB0byBiZSByZWFkIGluIGFkZGl0aW9uIHRvICVzLiIKK21zZ3N0ciAiSG9zdHMtRGF0ZWkgZmVzdGxlZ2VuLCBkaWUgenVzw6R0emxpY2ggenUgJXMgZ2VsZXNlbiB3aXJkLiIKKworIzogb3B0aW9uLmM6MzM3Cittc2dpZCAiU3BlY2lmeSBpbnRlcmZhY2UocykgdG8gbGlzdGVuIG9uLiIKK21zZ3N0ciAiU2Nobml0dHN0ZWxsZShuKSB6dW0gRW1wZmFuZyBmZXN0bGVnZW4uIgorCisjOiBvcHRpb24uYzozMzgKK21zZ2lkICJTcGVjaWZ5IGludGVyZmFjZShzKSBOT1QgdG8gbGlzdGVuIG9uLiIKK21zZ3N0ciAiU2Nobml0dHN0ZWxsZShuKSBmZXN0bGVnZW4sIGRpZSBOSUNIVCBlbXBmYW5nZW4gc29sbGVuLiIKKworIzogb3B0aW9uLmM6MzM5Cittc2dpZCAiTWFwIERIQ1AgdXNlciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICJESENQLUJlbnV0emVya2xhc3NlIGF1ZiBNYXJrZSBhYmJpbGRlbi4iCisKKyM6IG9wdGlvbi5jOjM0MAorbXNnaWQgIk1hcCBSRkMzMDQ2IGNpcmN1aXQtaWQgdG8gdGFnLiIKK21zZ3N0ciAiUkZDMzA0NiBcImNpcmN1aXQtaWRcIiBhdWYgTWFya2UgYWJiaWxkZW4uIgorCisjOiBvcHRpb24uYzozNDEKK21zZ2lkICJNYXAgUkZDMzA0NiByZW1vdGUtaWQgdG8gdGFnLiIKK21zZ3N0ciAiUkZDMzA0NiBcInJlbW90ZS1pZFwiIGF1ZiBNYXJrZSBhYmJpbGRlbi4iCisKKyM6IG9wdGlvbi5jOjM0MgorbXNnaWQgIk1hcCBSRkMzOTkzIHN1YnNjcmliZXItaWQgdG8gdGFnLiIKK21zZ3N0ciAiUkZDMzk5MyBcInN1YnNjcmliZXItaWRcIiBhdWYgTWFya2UgYWJiaWxkZW4uIgorCisjOiBvcHRpb24uYzozNDMKK21zZ2lkICJEb24ndCBkbyBESENQIGZvciBob3N0cyB3aXRoIHRhZyBzZXQuIgorbXNnc3RyICJLZWluIERIQ1AgZsO8ciBIb3N0cyBtaXQgZ2VzZXR6dGVyIE1hcmtlIHZlcndlbmRlbi4iCisKKyM6IG9wdGlvbi5jOjM0NAorbXNnaWQgIkZvcmNlIGJyb2FkY2FzdCByZXBsaWVzIGZvciBob3N0cyB3aXRoIHRhZyBzZXQuIgorbXNnc3RyICJSdW5kc2VuZHVuZyBmw7xyIEhvc3RzIG1pdCBnZXNldHp0ZXIgTWFya2UgZXJ6d2luZ2VuLiIKKworIzogb3B0aW9uLmM6MzQ1Cittc2dpZCAiRG8gTk9UIGZvcmsgaW50byB0aGUgYmFja2dyb3VuZCwgZG8gTk9UIHJ1biBpbiBkZWJ1ZyBtb2RlLiIKK21zZ3N0ciAiTklDSFQgaW4gZGVuIEhpbnRlcmdydW5kIHdlY2hzZWxuLCBOSUNIVCBpbSBEZWJ1Zy1Nb2R1cyBsYXVmZW4uIgorCisjOiBvcHRpb24uYzozNDYKK21zZ2lkICJBc3N1bWUgd2UgYXJlIHRoZSBvbmx5IERIQ1Agc2VydmVyIG9uIHRoZSBsb2NhbCBuZXR3b3JrLiIKK21zZ3N0ciAiVm9yYXVzc2V0emVuLCBkYXNzIHdpciBkZXIgZWluemlnZSBESENQLVNlcnZlciBpbSBsb2thbGVuIE5ldHogc2luZC4iCisKKyM6IG9wdGlvbi5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHdoZXJlIHRvIHN0b3JlIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJGZXN0bGVnZW4sIHdvIERIQ1AtTGVhc2VzIGdlc3BlaWNoZXJ0IHdlcmRlbiAoVm9yZWluc3RlbGx1bmcgJXMpLiIKKworIzogb3B0aW9uLmM6MzQ4Cittc2dpZCAiUmV0dXJuIE1YIHJlY29yZHMgZm9yIGxvY2FsIGhvc3RzLiIKK21zZ3N0ciAiTVgtRWludHLDpGdlIGbDvHIgbG9rYWxlIEhvc3RzIGxpZWZlcm4uIgorCisjOiBvcHRpb24uYzozNDkKK21zZ2lkICJTcGVjaWZ5IGFuIE1YIHJlY29yZC4iCittc2dzdHIgIkVpbmVuIE1YLUVpbnRyYWcgZmVzdGxlZ2VuLiIKKworIzogb3B0aW9uLmM6MzUwCittc2dpZCAiU3BlY2lmeSBCT09UUCBvcHRpb25zIHRvIERIQ1Agc2VydmVyLiIKK21zZ3N0ciAiQk9PVFAtT3B0aW9uZW4gZsO8ciBESENQLVNlcnZlciBmZXN0bGVnZW4uIgorCisjOiBvcHRpb24uYzozNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG8gTk9UIHBvbGwgJXMgZmlsZSwgcmVsb2FkIG9ubHkgb24gU0lHSFVQLiIKK21zZ3N0ciAiJXMtRGF0ZWkgTklDSFQgYWJmcmFnZW4sIG51ciBiZWkgU0lHSFVQIG5ldSBsYWRlbi4iCisKKyM6IG9wdGlvbi5jOjM1MgorbXNnaWQgIkRvIE5PVCBjYWNoZSBmYWlsZWQgc2VhcmNoIHJlc3VsdHMuIgorbXNnc3RyICJGZWhsZXJoYWZ0ZSBTdWNoZXJnZWJuaXNzZSBOSUNIVCB6d2lzY2hlbnNwZWljaGVybi4iCisKKyM6IG9wdGlvbi5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgbmFtZXNlcnZlcnMgc3RyaWN0bHkgaW4gdGhlIG9yZGVyIGdpdmVuIGluICVzLiIKK21zZ3N0ciAiTmFtZW5zc2VydmVyIHN0cmVuZyBpbiBkZXIgaW4gJXMgYW5nZWdlYmVuZW4gUmVpaGVuZm9sZ2UgdmVyd2VuZGVuLiIKKworIzogb3B0aW9uLmM6MzU0Cittc2dpZCAiU3BlY2lmeSBvcHRpb25zIHRvIGJlIHNlbnQgdG8gREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiT3B0aW9uZW4gZmVzdGxlZ2VuLCBkaWUgYW4gREhDUC1LbGllbnRlbiBnZXNlbmRldCB3ZXJkZW4uIgorCisjOiBvcHRpb24uYzozNTUKK21zZ2lkICJESENQIG9wdGlvbiBzZW50IGV2ZW4gaWYgdGhlIGNsaWVudCBkb2VzIG5vdCByZXF1ZXN0IGl0LiIKK21zZ3N0ciAiREhDUC1PcHRpb24sIGRpZSBzZWxic3Qgb2huZSBLbGllbnRlbmFuZnJhZ2UgZ2VzZW5kZXQgd2lyZC4iCisKKyM6IG9wdGlvbi5jOjM1NgorbXNnaWQgIlNwZWNpZnkgcG9ydCB0byBsaXN0ZW4gZm9yIEROUyByZXF1ZXN0cyBvbiAoZGVmYXVsdHMgdG8gNTMpLiIKK21zZ3N0ciAiUG9ydCB6dW0gQWJow7ZyZW4gZGVyIEROUy1BbmZyYWdlbiBmZXN0bGVnZW4gKDUzIHZvcmVpbmdlc3RlbGx0KS4iCisKKyM6IG9wdGlvbi5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIHN1cHBvcnRlZCBVRFAgcGFja2V0IHNpemUgZm9yIEVETlMuMCAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiTWF4aW1hbGUgdW50ZXJzdMO8dHp0ZSBVRFAtUGFrZXRncsO2w59lIGbDvHIgRUROUy4wIChWb3JlaW5zdGVsbHVuZyAlcykuIgorCisjOiBvcHRpb24uYzozNTgKK21zZ2lkICJMb2cgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICJETlMtQW5mcmFnZW4gcHJvdG9rb2xsaWVyZW4uIgorCisjOiBvcHRpb24uYzozNTkKK21zZ2lkICJGb3JjZSB0aGUgb3JpZ2luYXRpbmcgcG9ydCBmb3IgdXBzdHJlYW0gRE5TIHF1ZXJpZXMuIgorbXNnc3RyICJBdXNnZWhlbmRlbiBQb3J0IGVyendpbmdlbiBmw7xyIEROUy1BbmZyYWdlbiBhbiB2b3JnZWxhZ2VydGUgU2VydmVyLiIKKworIzogb3B0aW9uLmM6MzYwCittc2dpZCAiRG8gTk9UIHJlYWQgcmVzb2x2LmNvbmYuIgorbXNnc3RyICJyZXNvbHYuY29uZiBOSUNIVCBsZXNlbi4iCisKKyM6IG9wdGlvbi5jOjM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggdG8gcmVzb2x2LmNvbmYgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlBmYWQgenUgcmVzb2x2LmNvbmYgZmVzdGxlZ2VuICglcyB2b3JlaW5nZXN0ZWxsdCkuIgorCisjOiBvcHRpb24uYzozNjIKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSBwYXRoIHRvIGZpbGUgd2l0aCBzZXJ2ZXI9IG9wdGlvbnMiCittc2dzdHIgIkRhdGVpcGZhZCBmw7xyIFByb3plc3NrZW5udW5nIChQSUQpIGZlc3RsZWdlbiAoVm9yZWluc3RlbGx1bmc6ICVzKS4iCisKKyM6IG9wdGlvbi5jOjM2MworbXNnaWQgIlNwZWNpZnkgYWRkcmVzcyhlcykgb2YgdXBzdHJlYW0gc2VydmVycyB3aXRoIG9wdGlvbmFsIGRvbWFpbnMuIgorbXNnc3RyICJBZHJlc3NlKG4pIHZvcmdlbGFnZXJ0ZXIgU2VydmVyIGZlc3RsZWdlbiwgb3B0aW9uYWwgbWl0IERvbcOkbmVuLiIKKworIzogb3B0aW9uLmM6MzY0CisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgYWRkcmVzcyBvZiB1cHN0cmVhbSBzZXJ2ZXJzIGZvciByZXZlcnNlIGFkZHJlc3MgcXVlcmllcyIKK21zZ3N0ciAiQWRyZXNzZShuKSB2b3JnZWxhZ2VydGVyIFNlcnZlciBmZXN0bGVnZW4sIG9wdGlvbmFsIG1pdCBEb23DpG5lbi4iCisKKyM6IG9wdGlvbi5jOjM2NQorbXNnaWQgIk5ldmVyIGZvcndhcmQgcXVlcmllcyB0byBzcGVjaWZpZWQgZG9tYWlucy4iCittc2dzdHIgIkFuZnJhZ2VuIGbDvHIgYW5nZWdlYmVuZSBEb23DpG5lbiBuaWVtYWxzIHdlaXRlcmxlaXRlbi4iCisKKyM6IG9wdGlvbi5jOjM2NgorbXNnaWQgIlNwZWNpZnkgdGhlIGRvbWFpbiB0byBiZSBhc3NpZ25lZCBpbiBESENQIGxlYXNlcy4iCittc2dzdHIgIkRvbcOkbmUgZmVzdGxlZ2VuLCBkaWUgZsO8ciBESENQLUxlYXNlcyB6dWdld2llc2VuIHdpcmQuIgorCisjOiBvcHRpb24uYzozNjcKK21zZ2lkICJTcGVjaWZ5IGRlZmF1bHQgdGFyZ2V0IGluIGFuIE1YIHJlY29yZC4iCittc2dzdHIgIlZvcmVpbmdlc3RlbGx0ZXMgWmllbCBmw7xyIE1YLUVpbnRyw6RnZSBmZXN0bGVnZW4uIgorCisjOiBvcHRpb24uYzozNjgKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzIGZvciByZXBsaWVzIGZyb20gL2V0Yy9ob3N0cy4iCittc2dzdHIgIkfDvGx0aWdrZWl0c2RhdWVyIGbDvHIgQW50d29ydGVuIGF1cyAvZXRjL2hvc3RzIGZlc3RsZWdlbi4iCisKKyM6IG9wdGlvbi5jOjM2OQorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG5lZ2F0aXZlIGNhY2hpbmcuIgorbXNnc3RyICJHw7xsdGlna2VpdHNkYXVlciBpbiBTZWt1bmRlbiBmw7xyIENhY2hpbmcgbmVnYXRpdmVyIEVyZ2Vibmlzc2UgZmVzdGxlZ2VuLiIKKworIzogb3B0aW9uLmM6MzcwCittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgbWF4aW11bSBUVEwgdG8gc2VuZCB0byBjbGllbnRzLiIKK21zZ3N0ciAiR8O8bHRpZ2tlaXRzZGF1ZXIgaW4gU2VrdW5kZW4gZsO8ciBDYWNoaW5nIG5lZ2F0aXZlciBFcmdlYm5pc3NlIGZlc3RsZWdlbi4iCisKKyM6IG9wdGlvbi5jOjM3MQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2UgdG8gdGhpcyB1c2VyIGFmdGVyIHN0YXJ0dXAuIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJOYWNoIGRlbSBTdGFydCBkaWVzZSBCZW51dHplcnJlY2h0ZSBhbm5laG1lbiAoJXMgdm9yZWluZ2VzdGVsbHQpLiIKKworIzogb3B0aW9uLmM6MzcyCittc2dpZCAiTWFwIERIQ1AgdmVuZG9yIGNsYXNzIHRvIHRhZy4iCittc2dzdHIgIkRIQ1AtXCJ2ZW5kb3IgY2xhc3NcIiBhdWYgTWFya2UgYWJiaWxkZW4uIgorCisjOiBvcHRpb24uYzozNzMKK21zZ2lkICJEaXNwbGF5IGRuc21hc3EgdmVyc2lvbiBhbmQgY29weXJpZ2h0IGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiZG5zbWFzcS1WZXJzaW9uIHVuZCBVcmhlYmVycmVjaHQgYW56ZWlnZW4uIgorCisjOiBvcHRpb24uYzozNzQKK21zZ2lkICJUcmFuc2xhdGUgSVB2NCBhZGRyZXNzZXMgZnJvbSB1cHN0cmVhbSBzZXJ2ZXJzLiIKK21zZ3N0ciAiSVB2NC1BZHJlc3NlbiB2b24gdm9yZ2VsYWdlcnRlbiBTZXJ2ZXJuIMO8YmVyc2V0emVuLiIKKworIzogb3B0aW9uLmM6Mzc1Cittc2dpZCAiU3BlY2lmeSBhIFNSViByZWNvcmQuIgorbXNnc3RyICJTUlYtRWludHJhZyBmZXN0bGVnZW4uIgorCisjOiBvcHRpb24uYzozNzYKK21zZ2lkICJEaXNwbGF5IHRoaXMgbWVzc2FnZS4gVXNlIC0taGVscCBkaGNwIGZvciBrbm93biBESENQIG9wdGlvbnMuIgorbXNnc3RyICJEaWVzZSBIaWxmZSBhbnplaWdlbi4gQmVudXR6ZW4gU2llIC0taGVscCBkaGNwIGbDvHIgYmVrYW5udGUgREhDUC1PcHRpb25lbi4iCisKKyM6IG9wdGlvbi5jOjM3NworIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggb2YgUElEIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIkRhdGVpcGZhZCBmw7xyIFByb3plc3NrZW5udW5nIChQSUQpIGZlc3RsZWdlbiAoVm9yZWluc3RlbGx1bmc6ICVzKS4iCisKKyM6IG9wdGlvbi5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJIw7ZjaHN0emFobCBkZXIgREhDUC1MZWFzZXMgZmVzdGxlZ2VuICglcyB2b3JlaW5nZXN0ZWxsdCkuIgorCisjOiBvcHRpb24uYzozNzkKK21zZ2lkICJBbnN3ZXIgRE5TIHF1ZXJpZXMgYmFzZWQgb24gdGhlIGludGVyZmFjZSBhIHF1ZXJ5IHdhcyBzZW50IHRvLiIKK21zZ3N0ciAiRE5TLUFuZnJhZ2VuIGFiaMOkbmdpZyBkZXIgRW1mcGFuZ3NzY2huaXR0c3RlbGxlIGJlYW50d29ydGVuLiIKKworIzogb3B0aW9uLmM6MzgwCittc2dpZCAiU3BlY2lmeSBUWFQgRE5TIHJlY29yZC4iCittc2dzdHIgIkROUy1UWFQtRWludHJhZyBmZXN0bGVnZW4uIgorCisjOiBvcHRpb24uYzozODEKK21zZ2lkICJTcGVjaWZ5IFBUUiBETlMgcmVjb3JkLiIKK21zZ3N0ciAiRE5TLVBUUi1FaW50cmFnIGZlc3RsZWdlbi4iCisKKyM6IG9wdGlvbi5jOjM4MgorbXNnaWQgIkdpdmUgRE5TIG5hbWUgdG8gSVB2NCBhZGRyZXNzIG9mIGludGVyZmFjZS4iCittc2dzdHIgIlNjaG5pdHRzdGVsbGVubmFtZW4genVyIElQdjQtQWRyZXNzZSBkZXMgSW50ZXJmYWNlcyBhdWZsw7ZzZW4uIgorCisjOiBvcHRpb24uYzozODMKK21zZ2lkICJCaW5kIG9ubHkgdG8gaW50ZXJmYWNlcyBpbiB1c2UuIgorbXNnc3RyICJOdXIgYW4gdmVyd2VuZGV0ZSBTY2huaXR0c3RlbGxlbiBiaW5kZW4uIgorCisjOiBvcHRpb24uYzozODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVhZCBESENQIHN0YXRpYyBob3N0IGluZm9ybWF0aW9uIGZyb20gJXMuIgorbXNnc3RyICJTdGF0aXNjaGUgREhDUC1Ib3N0LUluZm9ybWF0aW9uIGF1cyAlcyBsZXNlbi4iCisKKyM6IG9wdGlvbi5jOjM4NQorbXNnaWQgIkVuYWJsZSB0aGUgREJ1cyBpbnRlcmZhY2UgZm9yIHNldHRpbmcgdXBzdHJlYW0gc2VydmVycywgZXRjLiIKK21zZ3N0ciAiREJ1cy1TY2huaXR0c3RlbGxlIHp1bSBGZXN0bGVnZW4gdm9yZ2VsYWdlcnRlciBTZXJ2ZXIgdXN3LiBmZXN0bGVnZW4uIgorCisjOiBvcHRpb24uYzozODYKK21zZ2lkICJEbyBub3QgcHJvdmlkZSBESENQIG9uIHRoaXMgaW50ZXJmYWNlLCBvbmx5IHByb3ZpZGUgRE5TLiIKK21zZ3N0ciAiQXVmIGRpZXNlciBTY2huaXR0c3RlbGxlIGtlaW4gREhDUCBhbmJpZXRlbiwgc29uZGVybiBudXIgRE5TLiIKKworIzogb3B0aW9uLmM6Mzg3Cittc2dpZCAiRW5hYmxlIGR5bmFtaWMgYWRkcmVzcyBhbGxvY2F0aW9uIGZvciBib290cC4iCittc2dzdHIgIkR5bmFtaXNjaGUgQWRyZXNzYmVsZWd1bmcgZsO8ciBib290cCBlaW5zY2hhbHRlbi4iCisKKyM6IG9wdGlvbi5jOjM4OAorbXNnaWQgIk1hcCBNQUMgYWRkcmVzcyAod2l0aCB3aWxkY2FyZHMpIHRvIG9wdGlvbiBzZXQuIgorbXNnc3RyICJNQUMtQWRyZXNzZSAobWl0IEpva2VyemVpY2hlbikgYXVmIE5ldHptYXJrZSBhYmJpbGRlbi4iCisKKyM6IG9wdGlvbi5jOjM4OQorbXNnaWQgIlRyZWF0IERIQ1AgcmVxdWVzdHMgb24gYWxpYXNlcyBhcyBhcnJpdmluZyBmcm9tIGludGVyZmFjZS4iCittc2dzdHIgIkRIQ1AtQW5mcmFnZW4gdm9uIEFsaWFzLVNjaG5pdHRzdGVsbGVuIGbDvHIgZGllIEhhdXB0c2Nobml0dHN0ZWxsZSBiZWFudHdvcnRlbi4iCisKKyM6IG9wdGlvbi5jOjM5MAorbXNnaWQgIkRpc2FibGUgSUNNUCBlY2hvIGFkZHJlc3MgY2hlY2tpbmcgaW4gdGhlIERIQ1Agc2VydmVyLiIKK21zZ3N0ciAiSUNNUC1FY2hvLUFkcmVzc3Byw7xmdW5nIGltIERIQ1AtU2VydmVyIGFic2NoYWx0ZW4uIgorCisjOiBvcHRpb24uYzozOTEKK21zZ2lkICJTaGVsbCBzY3JpcHQgdG8gcnVuIG9uIERIQ1AgbGVhc2UgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uLiIKK21zZ3N0ciAiU2tyaXB0LCBkYXMgYmVpIEVyemV1Z3VuZy9Mw7ZzY2h1bmcgZWluZXIgREhDUC1MZWFzZSBsYXVmZW4gc29sbC4iCisKKyM6IG9wdGlvbi5jOjM5MgorbXNnaWQgIkx1YSBzY3JpcHQgdG8gcnVuIG9uIERIQ1AgbGVhc2UgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uLiIKK21zZ3N0ciAiTHVhLVNrcmlwdCwgd2VsY2hlcyBiZWkgRXJ6ZXVndW5nL0zDtnNjaHVuZyBlaW5lcyBESENQLUxlYXNlcyBsYXVmZW4gc29sbC4iCisKKyM6IG9wdGlvbi5jOjM5MworbXNnaWQgIlJ1biBsZWFzZS1jaGFuZ2Ugc2NyaXB0cyBhcyB0aGlzIHVzZXIuIgorbXNnc3RyICJMZWFzZS3DhG5kZXJ1bmdzLVNrcmlwdCBtaXQgZGVuIFJlY2h0ZW4gZGllc2VzIE51dHplcnMgYXVzZsO8aHJlbi4iCisKKyM6IG9wdGlvbi5jOjM5NAorbXNnaWQgIlJlYWQgY29uZmlndXJhdGlvbiBmcm9tIGFsbCB0aGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuIgorbXNnc3RyICJLb25maWd1cmF0aW9uIGF1cyBhbGxlbiBEYXRlaWVuIGluIGRpZXNlbSBWZXJ6ZWljaG5pcyBsZXNlbi4iCisKKyM6IG9wdGlvbi5jOjM5NQorbXNnaWQgIkxvZyB0byB0aGlzIHN5c2xvZyBmYWNpbGl0eSBvciBmaWxlLiAoZGVmYXVsdHMgdG8gREFFTU9OKSIKK21zZ3N0ciAiRsO8ciBkaWVzZSBTeXNsb2ctQW5sYWdlIG9kZXIgaW4gRGF0ZWkgbG9nZ2VuIChWb3JlaW5zdGVsbHVuZyBEQUVNT04pLiIKKworIzogb3B0aW9uLmM6Mzk2Cittc2dpZCAiRG8gbm90IHVzZSBsZWFzZWZpbGUuIgorbXNnc3RyICJLZWluZSBMZWFzZS1EYXRlaSBiZW7DvHR6ZW4uIgorCisjOiBvcHRpb24uYzozOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBETlMgcXVlcmllcy4gKGRlZmF1bHRzIHRvICVzKSIKK21zZ3N0ciAiSMO2Y2hzdHphaGwgbmViZW5sw6R1ZmlnZXIgRE5TLUFuZnJhZ2VuICglcyB2b3JlaW5nZXN0ZWxsdCkuIgorCisjOiBvcHRpb24uYzozOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXIgRE5TIGNhY2hlIHdoZW4gcmVsb2FkaW5nICVzLiIKK21zZ3N0ciAiRE5TLUNhY2hlIGJlaW0gTmV1bGFkZW4gdm9uICVzIGzDtnNjaGVuLiIKKworIzogb3B0aW9uLmM6Mzk5Cittc2dpZCAiSWdub3JlIGhvc3RuYW1lcyBwcm92aWRlZCBieSBESENQIGNsaWVudHMuIgorbXNnc3RyICJWb24gREhDUC1DbGllbnRzIGdlbGllZmVydGUgSG9zdG5hbWVuIGlnbm9yaWVyZW4uIgorCisjOiBvcHRpb24uYzo0MDAKK21zZ2lkICJEbyBOT1QgcmV1c2UgZmlsZW5hbWUgYW5kIHNlcnZlciBmaWVsZHMgZm9yIGV4dHJhIERIQ1Agb3B0aW9ucy4iCittc2dzdHIgIkRhdGVpbmFtZW4gdW5kIFNlcnZlci1EYXRlbmZlaGxlciBmw7xyIHp1c8OkdHpsaWNoZSBESENQLU9wdGlvbmVuIE5JQ0hUIHdpZWRlcnZlcndlbmRlbi4iCisKKyM6IG9wdGlvbi5jOjQwMQorbXNnaWQgIkVuYWJsZSBpbnRlZ3JhdGVkIHJlYWQtb25seSBURlRQIHNlcnZlci4iCittc2dzdHIgIkVpbmdlYmF1dGVuIE51ci1MZXNlLVRGVFAtU2VydmVyIGVpbnNjaGFsdGVuLiIKKworIzogb3B0aW9uLmM6NDAyCittc2dpZCAiRXhwb3J0IGZpbGVzIGJ5IFRGVFAgb25seSBmcm9tIHRoZSBzcGVjaWZpZWQgc3VidHJlZS4iCittc2dzdHIgIk51ciB2b20gZmVzdGdlbGVndGVuIFVudGVyYmF1bSBEYXRlaWVuIHBlciBURlRQIGV4cG9ydGllcmVuLiIKKworIzogb3B0aW9uLmM6NDAzCittc2dpZCAiQWRkIGNsaWVudCBJUCBhZGRyZXNzIHRvIHRmdHAtcm9vdC4iCittc2dzdHIgIklQLUFkcmVzc2UgZGVzIEtsaWVudGVuIGFuIHRmdHAtcm9vdCBhbmjDpG5nZW4uIgorCisjOiBvcHRpb24uYzo0MDQKK21zZ2lkICJBbGxvdyBhY2Nlc3Mgb25seSB0byBmaWxlcyBvd25lZCBieSB0aGUgdXNlciBydW5uaW5nIGRuc21hc3EuIgorbXNnc3RyICJadWdyaWZmIG51ciBhdWYgRGF0ZWllbiBnZXN0YXR0ZW4sIGRpZSBkZW0gZG5zbWFzcSBhdWZydWZlbmRlbiBCZW51dHplciBnZWjDtnJlbi4iCisKKyM6IG9wdGlvbi5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25uY3VycmVudCBURlRQIHRyYW5zZmVycyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiSMO2Y2hzdHphaGwgbmViZW5sw6R1ZmlnZXIgVEZUUC3DnGJlcnRyYWd1bmdlbiAoJXMgdm9yZWluZ2VzdGVsbHQpLiIKKworIzogb3B0aW9uLmM6NDA2Cittc2dpZCAiRGlzYWJsZSB0aGUgVEZUUCBibG9ja3NpemUgZXh0ZW5zaW9uLiIKK21zZ3N0ciAiVEZUUC1CbG9ja2dyw7bDn2VuLUVyd2VpdGVydW5nIGFic2NoYWx0ZW4uIgorCisjOiBvcHRpb24uYzo0MDcKK21zZ2lkICJDb252ZXJ0IFRGVFAgZmlsZW5hbWVzIHRvIGxvd2VyY2FzZSIKK21zZ3N0ciAiS29udmVydGllcmUgVEZUUCBEYXRlaW5hbWVuIGluIEtsZWluc2NocmVpYnVuZyIKKworIzogb3B0aW9uLmM6NDA4Cittc2dpZCAiRXBoZW1lcmFsIHBvcnQgcmFuZ2UgZm9yIHVzZSBieSBURlRQIHRyYW5zZmVycy4iCittc2dzdHIgIkJlcmVpY2ggZsO8ciB2b3LDvGJlcmdlaGVuZGUgUG9ydHMgZsO8ciBURlRQLcOcYmVydHJhZ3VuZ2VuLiIKKworIzogb3B0aW9uLmM6NDA5Cittc2dpZCAiRXh0cmEgbG9nZ2luZyBmb3IgREhDUC4iCittc2dzdHIgIkVyd2VpdGVydGUgREhDUC1Qcm90b2tvbGxpZXJ1bmcuIgorCisjOiBvcHRpb24uYzo0MTAKK21zZ2lkICJFbmFibGUgYXN5bmMuIGxvZ2dpbmc7IG9wdGlvbmFsbHkgc2V0IHF1ZXVlIGxlbmd0aC4iCittc2dzdHIgIkFzeW5jaHJvbmUgUHJvdG9rb2xsaWVydW5nIGVpbnNjaGFsdGVuLCBvcHQuIFdhcnRlc2NobGFuZ2VubMOkbmdlIGZlc3RsZWdlbi4iCisKKyM6IG9wdGlvbi5jOjQxMQorbXNnaWQgIlN0b3AgRE5TIHJlYmluZGluZy4gRmlsdGVyIHByaXZhdGUgSVAgcmFuZ2VzIHdoZW4gcmVzb2x2aW5nLiIKK21zZ3N0ciAiRE5TLVJlYmluZGluZyB1bnRlcmJpbmRlbiwgcHJpdmF0ZSBJUC1CZXJlaWNoZSBiZWkgZGVyIEF1ZmzDtnN1bmcgYXVzZmlsdGVybi4iCisKKyM6IG9wdGlvbi5jOjQxMgorbXNnaWQgIkFsbG93IHJlYmluZGluZyBvZiAxMjcuMC4wLjAvOCwgZm9yIFJCTCBzZXJ2ZXJzLiIKK21zZ3N0ciAiQXVmbMO2c3VuZyB6dSAxMjcuMC4wLjAvOCBlcmxhdWJlbiwgZsO8ciBSQkwtU2VydmVyLiIKKworIzogb3B0aW9uLmM6NDEzCittc2dpZCAiSW5oaWJpdCBETlMtcmViaW5kIHByb3RlY3Rpb24gb24gdGhpcyBkb21haW4uIgorbXNnc3RyICJETlMtUmViaW5kLVNjaHV0eiBmw7xyIGRpZXNlIERvbcOkbmUgc3BlcnJlbi4iCisKKyM6IG9wdGlvbi5jOjQxNAorbXNnaWQgIkFsd2F5cyBwZXJmb3JtIEROUyBxdWVyaWVzIHRvIGFsbCBzZXJ2ZXJzLiIKK21zZ3N0ciAiRE5TLUFuZnJhZ2VuIGltbWVyIGFuIGFsbGUgU2VydmVyIHdlaXRlcmxlaXRlbi4iCisKKyM6IG9wdGlvbi5jOjQxNQorbXNnaWQgIlNldCB0YWcgaWYgY2xpZW50IGluY2x1ZGVzIG1hdGNoaW5nIG9wdGlvbiBpbiByZXF1ZXN0LiIKK21zZ3N0ciAiTWFya2Ugc2V0emVuLCB3ZW5uIEtsaWVudCBlaW5lIGVudHNwcmVjaGVuZGUgT3B0aW9uIGFuZnJhZ3QuIgorCisjOiBvcHRpb24uYzo0MTYKK21zZ2lkICJVc2UgYWx0ZXJuYXRpdmUgcG9ydHMgZm9yIERIQ1AuIgorbXNnc3RyICJBbHRlcm5hdGl2ZSBQb3J0cyBmw7xyIERIQ1AgdmVyd2VuZGVuLiIKKworIzogb3B0aW9uLmM6NDE3Cittc2dpZCAiU3BlY2lmeSBOQVBUUiBETlMgcmVjb3JkLiIKK21zZ3N0ciAiRE5TLU5BUFRSLUVpbnRyYWcgZmVzdGxlZ2VuLiIKKworIzogb3B0aW9uLmM6NDE4Cittc2dpZCAiU3BlY2lmeSBsb3dlc3QgcG9ydCBhdmFpbGFibGUgZm9yIEROUyBxdWVyeSB0cmFuc21pc3Npb24uIgorbXNnc3RyICJOaWVkcmlnc3RlbiB2ZXJmw7xnYmFyZW4gUG9ydCBmw7xyIMOcYmVydHJhZ3VuZyB2b24gRE5TLUFuZnJhZ2VuIGZlc3RsZWdlbi4iCisKKyM6IG9wdGlvbi5jOjQxOQorbXNnaWQgIlVzZSBvbmx5IGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZXMgZm9yIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIkbDvHIgREhDUC1LbGllbnRlbiBudXIgdm9sbHN0w6RuZGlnIGJlc3RpbW10ZSBEb23DpG5lbm5hbWVuIGJlbnV0emVuLiIKKworIyBGSVhNRTogcHJvYmFibHkgdHlwbyBpbiBvcmlnaW5hbCBtZXNzYWdlLiAtLSBNQQorIzogb3B0aW9uLmM6NDIwCittc2dpZCAiR2VuZXJhdGUgaG9zdG5hbWVzIGJhc2VkIG9uIE1BQyBhZGRyZXNzIGZvciBuYW1lbGVzcyBjbGllbnRzLiIKK21zZ3N0ciAiR2VuZXJpZXJlIEhvc3RuYW1lbiBhdWYgQmFzaXMgZGVyIE1BQy1BZHJlc3NlIGbDvHIgbmFtZW5sb3NlIEtsaWVudGVuLiIKKworIzogb3B0aW9uLmM6NDIxCittc2dpZCAiVXNlIHRoZXNlIERIQ1AgcmVsYXlzIGFzIGZ1bGwgcHJveGllcy4iCittc2dzdHIgIkRpZXNlIERIQ1AtUmVsYWlzIGFscyB2b2xsd2VydGlnZSBQcm94aWVzIHZlcndlbmRlbi4iCisKKyM6IG9wdGlvbi5jOjQyMgorbXNnaWQgIlJlbGF5IERIQ1AgcmVxdWVzdHMgdG8gYSByZW1vdGUgc2VydmVyIgorbXNnc3RyICJMZXV0ZSBESENQIEFuZnJhZ2VuIGFuIGVudGZlcm50ZW4gU2VydmVyIHdlaXRlciIKKworIzogb3B0aW9uLmM6NDIzCittc2dpZCAiU3BlY2lmeSBhbGlhcyBuYW1lIGZvciBMT0NBTCBETlMgbmFtZS4iCittc2dzdHIgIkFsaWFzIGbDvHIgTE9LQUxFTiBETlMtTmFtZW4gZmVzdGxlZ2VuLiIKKworIzogb3B0aW9uLmM6NDI0Cittc2dpZCAiUHJvbXB0IHRvIHNlbmQgdG8gUFhFIGNsaWVudHMuIgorbXNnc3RyICJBdWZmb3JkZXJ1bmcsIGRpZSBhbiBQWEUtS2xpZW50ZW4gZ2VzY2hpY2t0IHdpcmQuIgorCisjOiBvcHRpb24uYzo0MjUKK21zZ2lkICJCb290IHNlcnZpY2UgZm9yIFBYRSBtZW51LiIKK21zZ3N0ciAiQm9vdC1EaWVuc3QgZsO8ciBQWEUtTWVuw7wuIgorCisjOiBvcHRpb24uYzo0MjYKK21zZ2lkICJDaGVjayBjb25maWd1cmF0aW9uIHN5bnRheC4iCittc2dzdHIgIktvbmZpZ3VyYXRpb25zc3ludGF4IHByw7xmZW4uIgorCisjOiBvcHRpb24uYzo0MjcKK21zZ2lkICJBZGQgcmVxdWVzdG9yJ3MgTUFDIGFkZHJlc3MgdG8gZm9yd2FyZGVkIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiQW5mcmFnZW5kZSBNQUMtQWRyZXNzZSBpbiBkaWUgd2VpdGVybGVpdGVuZGUgRE5TLUFuZnJhZ2UgZWluZsO8Z2VuIgorCisjOiBvcHRpb24uYzo0MjgKK21zZ2lkICJBZGQgcmVxdWVzdG9yJ3MgSVAgc3VibmV0IHRvIGZvcndhcmRlZCBETlMgcXVlcmllcy4iCittc2dzdHIgIkbDvGdlIGRhcyBJUC1TdWJuZXR6IGRlcyBBbmZyYWdlbmRlbiBpbiBkaWUgd2VpdGVyZ2VsZWl0ZXRlbiBETlMtQW5mcmFnZW4gaGluenUuIgorCisjOiBvcHRpb24uYzo0MjkKK21zZ2lkICJQcm94eSBETlNTRUMgdmFsaWRhdGlvbiByZXN1bHRzIGZyb20gdXBzdHJlYW0gbmFtZXNlcnZlcnMuIgorbXNnc3RyICJQcm94eS1ETlNTRUMtVmFsaWRpZXJ1bmctRXJnZWJuaXNzZSB2b24gVXBzdHJlYW0tTmFtZW5zc2VydmVybi4iCisKKyM6IG9wdGlvbi5jOjQzMAorbXNnaWQgIkF0dGVtcHQgdG8gYWxsb2NhdGUgc2VxdWVudGlhbCBJUCBhZGRyZXNzZXMgdG8gREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiVmVyc3VjaGUgc2VxdWVuemllbGxlIElQLUFkcmVzc2VuIGFuIERIQ1AtS2xpZW50ZW4genUgdmVyZ2ViZW4uIgorCisjOiBvcHRpb24uYzo0MzEKK21zZ2lkICJDb3B5IGNvbm5lY3Rpb24tdHJhY2sgbWFyayBmcm9tIHF1ZXJpZXMgdG8gdXBzdHJlYW0gY29ubmVjdGlvbnMuIgorbXNnc3RyICJLb3BpZXJlIFwiY29ubmVjdGlvbi10cmFjayBtYXJrXCIgdm9uIEFuZnJhZ2VuIG5hY2ggVXBzdHJlYW0tVmVyYmluZHVuZ2VuLiIKKworIzogb3B0aW9uLmM6NDMyCittc2dpZCAiQWxsb3cgREhDUCBjbGllbnRzIHRvIGRvIHRoZWlyIG93biBERE5TIHVwZGF0ZXMuIgorbXNnc3RyICJFcmxhdWJlIERIQ1AtS2xpZW50ZW4gaWhyZSBlaWdlbmVuIERETlMtVXBkYXRlcyBkdXJjaHp1ZsO8aHJlbi4iCisKKyM6IG9wdGlvbi5jOjQzMworbXNnaWQgIlNlbmQgcm91dGVyLWFkdmVydGlzZW1lbnRzIGZvciBpbnRlcmZhY2VzIGRvaW5nIERIQ1B2NiIKK21zZ3N0ciAiU2VuZGUgXCJSb3V0ZXItQWR2ZXJ0aXNtZW50c1wiIGbDvHIgTmV0endlcmtzY2huaXR0c3RlbGxlbiwgd2VsY2hlIERIQ1B2NiBudXR6ZW4iCisKKyM6IG9wdGlvbi5jOjQzNAorbXNnaWQgIlNwZWNpZnkgRFVJRF9FTi10eXBlIERIQ1B2NiBzZXJ2ZXIgRFVJRCIKK21zZ3N0ciAiU3BlemlmaXppZXJlIERVSURfRU4tdHlwZSBESENQdjYgU2VydmVyIERVSUQiCisKKyM6IG9wdGlvbi5jOjQzNQorbXNnaWQgIlNwZWNpZnkgaG9zdCAoQS9BQUFBIGFuZCBQVFIpIHJlY29yZHMiCittc2dzdHIgIlNwZXppZml6aWVyZSBIb3N0IChBL0FBQUEgdW5kIFBUUikgRWludHLDpGdlIgorCisjOiBvcHRpb24uYzo0MzYKK21zZ2lkICJTcGVjaWZ5IGFyYml0cmFyeSBETlMgcmVzb3VyY2UgcmVjb3JkIgorbXNnc3RyICJTcGV6aWZpemllcmUgZWluZW4gYmVsaWViaWVnZW4gRE5TIEVpbnRyYWciCisKKyM6IG9wdGlvbi5jOjQzNworbXNnaWQgIkJpbmQgdG8gaW50ZXJmYWNlcyBpbiB1c2UgLSBjaGVjayBmb3IgbmV3IGludGVyZmFjZXMiCittc2dzdHIgIkJpbmR1bmcgenUgU2Nobml0dHN0ZWxsZW4gaW4gQmVudXR6dW5nIC0gcHLDvGZlIGF1ZiBuZXVlIFNjaG5pdHRzdGVsbGVuIgorCisjOiBvcHRpb24uYzo0MzgKK21zZ2lkICJFeHBvcnQgbG9jYWwgbmFtZXMgdG8gZ2xvYmFsIEROUyIKK21zZ3N0ciAiRXhwb3J0aWVyZSBsb2thbGUgTmFtZW4gaW4gZGFzIGdsb2JhbGUgRE5TIgorCisjOiBvcHRpb24uYzo0MzkKK21zZ2lkICJEb21haW4gdG8gZXhwb3J0IHRvIGdsb2JhbCBETlMiCittc2dzdHIgIkRvbWFpbiBmw7xyIGRhcyBFeHBvcnRpZXJlbiBkZXMgZ2xvYmFsZW4gRE5TIgorCisjOiBvcHRpb24uYzo0NDAKK21zZ2lkICJTZXQgVFRMIGZvciBhdXRob3JpdGF0aXZlIHJlcGxpZXMiCittc2dzdHIgIlNldHp0ZSBUVEwgZsO8ciBhdXRvcml0YXRpdmUgQW50d29ydGVuIgorCisjOiBvcHRpb24uYzo0NDEKK21zZ2lkICJTZXQgYXV0aG9yaXRpdmUgem9uZSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiU2V0emUgYXV0b3JpdGF0aXZlIFpvbmVuaW5mb3JtYXRpb25lbiIKKworIzogb3B0aW9uLmM6NDQyCittc2dpZCAiU2Vjb25kYXJ5IGF1dGhvcml0YXRpdmUgbmFtZXNlcnZlcnMgZm9yIGZvcndhcmQgZG9tYWlucyIKK21zZ3N0ciAiU2VrdW5kw6RyZXIgYXV0b3JpdGF0aXZlciBOYW1lc2VydmVyIGbDvHIgd2VpdGVyZ2VsZWl0ZXRlIERvbWFpbnMiCisKKyM6IG9wdGlvbi5jOjQ0MworbXNnaWQgIlBlZXJzIHdoaWNoIGFyZSBhbGxvd2VkIHRvIGRvIHpvbmUgdHJhbnNmZXIiCittc2dzdHIgIlBlZXJzIHdlbGNoZSBlaW5lbiBab25lbnRyYW5zZmVyIGR1cmNoZsO8aHJlbiBkw7xyZmVuIgorCisjOiBvcHRpb24uYzo0NDQKK21zZ2lkICJTcGVjaWZ5IGlwc2V0cyB0byB3aGljaCBtYXRjaGluZyBkb21haW5zIHNob3VsZCBiZSBhZGRlZCIKK21zZ3N0ciAiU3BlemlmaXppZXJlIElQU2V0cyB6dSB3ZWxjaGVyIHBhc3NlbmRlIERvbWFpbnMgaGluenVnZWbDvGd0IHdlcmRlbiBzb2xsZW4iCisKKyM6IG9wdGlvbi5jOjQ0NQorbXNnaWQgIlNwZWNpZnkgYSBkb21haW4gYW5kIGFkZHJlc3MgcmFuZ2UgZm9yIHN5bnRoZXNpc2VkIG5hbWVzIgorbXNnc3RyICJTcGV6aWZpemllcmUgZWluZSBEb21haW4gdW5kIEFkcmVzc2JlcmVpY2ggZsO8ciBzeW50aGV0aXNpZXJ0ZSBOYW1lbiIKKworIzogb3B0aW9uLmM6NDQ2Cittc2dpZCAiQWN0aXZhdGUgRE5TU0VDIHZhbGlkYXRpb24iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ3Cittc2dpZCAiU3BlY2lmeSB0cnVzdCBhbmNob3Iga2V5IGRpZ2VzdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ4Cittc2dpZCAiRGlzYWJsZSB1cHN0cmVhbSBjaGVja2luZyBmb3IgRE5TU0VDIGRlYnVnZ2luZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ5Cittc2dpZCAiRW5zdXJlIGFuc3dlcnMgd2l0aG91dCBETlNTRUMgYXJlIGluIHVuc2lnbmVkIHpvbmVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTAKK21zZ2lkICJEb24ndCBjaGVjayBETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMgdW50aWwgZmlyc3QgY2FjaGUtcmVsb2FkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1MgorbXNnaWQgIlNwZWNpZnkgREhDUHY2IHByZWZpeCBjbGFzcyIKK21zZ3N0ciAiU3BlemlmaXppZXJlIERIQ1B2NiBQcmVmaXggS2xhc3NlIgorCisjOiBvcHRpb24uYzo0NTQKK21zZ2lkICJTZXQgcHJpb3JpdHksIHJlc2VuZC1pbnRlcnZhbCBhbmQgcm91dGVyLWxpZmV0aW1lIgorbXNnc3RyICJTZXR6ZSBQcmlvcml0w6R0LCBJbnRlcnZhbGwgZGVzIGVybmV1dGVuIFNlbmRlbnMgdW5kIFJvdXRlciBMZWJlbnN6ZWl0IgorCisjOiBvcHRpb24uYzo0NTUKK21zZ2lkICJEbyBub3QgbG9nIHJvdXRpbmUgREhDUC4iCittc2dzdHIgIlByb3Rva29sbGllcmUga2VpbiBESENQLiIKKworIzogb3B0aW9uLmM6NDU2Cittc2dpZCAiRG8gbm90IGxvZyByb3V0aW5lIERIQ1B2Ni4iCittc2dzdHIgIlByb3Rva29sbGllcmUga2VpbiBESENQdjYuIgorCisjOiBvcHRpb24uYzo0NTcKK21zZ2lkICJEbyBub3QgbG9nIFJBLiIKK21zZ3N0ciAiUkEgbmljaHQgcHJvdG9rb2xsaWVyZW4uIgorCisjOiBvcHRpb24uYzo0NTgKK21zZ2lkICJBY2NlcHQgcXVlcmllcyBvbmx5IGZyb20gZGlyZWN0bHktY29ubmVjdGVkIG5ldHdvcmtzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1OQorbXNnaWQgIkRldGVjdCBhbmQgcmVtb3ZlIEROUyBmb3J3YXJkaW5nIGxvb3BzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjY2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6IGRuc21hc3EgW29wdGlvbnNdXG4iCisiXG4iCittc2dzdHIgIiIKKyJWZXJ3ZW5kdW5nOiBkbnNtYXNxIFtPcHRpb25lbl1cbiIKKyJcbiIKKworIzogb3B0aW9uLmM6NjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSBzaG9ydCBvcHRpb25zIG9ubHkgb24gdGhlIGNvbW1hbmQgbGluZS5cbiIKK21zZ3N0ciAiQXVmIGRlciBCZWZlaGxzemVpbGUgbnVyIGt1cnplIE9wdGlvbmVuIHZlcndlbmRlbiFcbiIKKworIzogb3B0aW9uLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbGlkIG9wdGlvbnMgYXJlOlxuIgorbXNnc3RyICJHw7xsdGlnZSBPcHRpb25lbiBzaW5kOlxuIgorCisjOiBvcHRpb24uYzo3MjIgb3B0aW9uLmM6NzI2Cittc2dpZCAiYmFkIHBvcnQiCittc2dzdHIgInVuenVsw6Rzc2lnZXIgUG9ydCIKKworIzogb3B0aW9uLmM6NzUzIG9wdGlvbi5jOjc4NQorbXNnaWQgImludGVyZmFjZSBiaW5kaW5nIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIlNjaG5pdHRzdGVsbGVuYmluZHVuZyBuaWNodCB1bnRlcnN0w7x0enQiCisKKyM6IG9wdGlvbi5jOjc2MiBvcHRpb24uYzozNDk0Cittc2dpZCAiYmFkIGludGVyZmFjZSBuYW1lIgorbXNnc3RyICJ1bnp1bMOkc3NpZ2VyIFNjaG5pdHRlc3RlbGxlbm5hbWUiCisKKyM6IG9wdGlvbi5jOjc5MgorbXNnaWQgImJhZCBhZGRyZXNzIgorbXNnc3RyICJGZWhsZXJoYWZ0ZSBBZHJlc3NlIgorCisjOiBvcHRpb24uYzo5NzQKK21zZ2lkICJ1bnN1cHBvcnRlZCBlbmNhcHN1bGF0aW9uIGZvciBJUHY2IG9wdGlvbiIKK21zZ3N0ciAiTmljaHQgdW50ZXJzdMO8dHp0ZSBWZXJrYXBzZWx1bmcgZsO8ciBlaW5lIElQdjYtT3B0aW9uIgorCisjOiBvcHRpb24uYzo5ODgKK21zZ2lkICJiYWQgZGhjcC1vcHRpb24iCittc2dzdHIgIkZlaGxlcmhhZnRlIERIQ1AtT3B0aW9uIgorCisjOiBvcHRpb24uYzoxMDU2Cittc2dpZCAiYmFkIElQIGFkZHJlc3MiCittc2dzdHIgIkZlaGxlcmhhZnRlIElQLUFkcmVzc2UiCisKKyM6IG9wdGlvbi5jOjEwNTkgb3B0aW9uLmM6MTE5NyBvcHRpb24uYzoyODEyCittc2dpZCAiYmFkIElQdjYgYWRkcmVzcyIKK21zZ3N0ciAiRmVobGVyaGFmdGUgSVB2Ni1BZHJlc3NlIgorCisjOiBvcHRpb24uYzoxMjI0IG9wdGlvbi5jOjEzMTgKK21zZ2lkICJiYWQgZG9tYWluIGluIGRoY3Atb3B0aW9uIgorbXNnc3RyICJGZWhsZXJoYWZ0ZSBEb23DpG5lIGluIERIQ1AtT3B0aW9uIgorCisjOiBvcHRpb24uYzoxMzU2Cittc2dpZCAiZGhjcC1vcHRpb24gdG9vIGxvbmciCittc2dzdHIgIkRIQ1AtT3B0aW9uIHp1IGxhbmciCisKKyM6IG9wdGlvbi5jOjEzNjMKK21zZ2lkICJpbGxlZ2FsIGRoY3AtbWF0Y2giCittc2dzdHIgIlVuenVsw6Rzc2lnZSBkaGNwLW1hdGNoLU9wdGlvbiIKKworIzogb3B0aW9uLmM6MTQyNQorbXNnaWQgImlsbGVnYWwgcmVwZWF0ZWQgZmxhZyIKK21zZ3N0ciAidW56dWzDpHNzaWcgd2llZGVyaG9sdGUgTWFya2llcnVuZyIKKworIzogb3B0aW9uLmM6MTQzMworbXNnaWQgImlsbGVnYWwgcmVwZWF0ZWQga2V5d29yZCIKK21zZ3N0ciAidW56dWzDpHNzaWcgd2llZGVyaG9sdGVzIFNjaGzDvHNzZWx3b3J0IgorCisjOiBvcHRpb24uYzoxNDk1IG9wdGlvbi5jOjQwOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyBkaXJlY3RvcnkgJXM6ICVzIgorbXNnc3RyICJLYW5uIGF1ZiBWZXJ6ZWljaG5pcyAlcyBuaWNodCB6dWdyZWlmZW46ICVzIgorCisjOiBvcHRpb24uYzoxNTQxIHRmdHAuYzo0OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyAlczogJXMiCittc2dzdHIgIkthbm4gYXVmICVzIG5pY2h0IHp1Z3JlaWZlbjogJXMiCisKKyM6IG9wdGlvbi5jOjE1ODgKK21zZ2lkICJzZXR0aW5nIGxvZyBmYWNpbGl0eSBpcyBub3QgcG9zc2libGUgdW5kZXIgQW5kcm9pZCIKK21zZ3N0ciAiRGllIEVpbnN0ZWxsdW5nIFByb3Rva29sbGllcmVpbnJpY2h0dW5nIGthbm4gdW50ZXIgQW5kcm9pZCBuaWNodCBnZXNldHp0IHdlcmRlbiIKKworIzogb3B0aW9uLmM6MTU5NworbXNnaWQgImJhZCBsb2cgZmFjaWxpdHkiCittc2dzdHIgIkZhbHNjaGUgUHJvdG9rb2xsaWVyZWlucmljaHR1bmciCisKKyM6IG9wdGlvbi5jOjE2NTAKK21zZ2lkICJiYWQgTVggcHJlZmVyZW5jZSIKK21zZ3N0ciAidW56dWzDpHNzaWdlIE1YLVByw6RmZXJlbnotQW5nYWJlIgorCisjOiBvcHRpb24uYzoxNjU1Cittc2dpZCAiYmFkIE1YIG5hbWUiCittc2dzdHIgInVuenVsw6Rzc2lnZXIgTVgtTmFtZSIKKworIzogb3B0aW9uLmM6MTY2OQorbXNnaWQgImJhZCBNWCB0YXJnZXQiCittc2dzdHIgInVuenVsw6Rzc2lnZXMgTVgtWmllbCIKKworIzogb3B0aW9uLmM6MTY4MQorbXNnaWQgImNhbm5vdCBydW4gc2NyaXB0cyB1bmRlciB1Q2xpbnV4IgorbXNnc3RyICJ1bnRlciB1Q2xpbnV4IGlzdCBkaWUgU2tyaXB0YXVzZsO8aHJ1bmcgbmljaHQgbcO2Z2xpY2giCisKKyM6IG9wdGlvbi5jOjE2ODMKK21zZ2lkICJyZWNvbXBpbGUgd2l0aCBIQVZFX1NDUklQVCBkZWZpbmVkIHRvIGVuYWJsZSBsZWFzZS1jaGFuZ2Ugc2NyaXB0cyIKK21zZ3N0ciAiTmV1w7xiZXJzZXR6dW5nIG1pdCBIQVZFX1NDUklQVCBuw7Z0aWcsIHVtIExlYXNlLcOEbmRlcnVuZ3MtU2tyaXB0ZSBhdXN6dWbDvGhyZW4iCisKKyM6IG9wdGlvbi5jOjE2ODcKK21zZ2lkICJyZWNvbXBpbGUgd2l0aCBIQVZFX0xVQVNDUklQVCBkZWZpbmVkIHRvIGVuYWJsZSBMdWEgc2NyaXB0cyIKK21zZ3N0ciAiVW0gQmVudXR6ZXJkZWZpbmllcnRlIEx1YS1TY3JpcHRlIHp1IGVybcO2Z2xpY2hlbiwgbXVzcyBtaXQgSEFWRV9MVUFTQ1JJUFQgbmV1IGtvbXBpbGllcnQgd2VyZGVuIgorCisjOiBvcHRpb24uYzoxOTI4IG9wdGlvbi5jOjE5NjYgb3B0aW9uLmM6MjAxNQorbXNnaWQgImJhZCBwcmVmaXgiCittc2dzdHIgInVuenVsw6Rzc2lnZXIgUHLDpGZpeCIKKworIzogb3B0aW9uLmM6MjI4OQorbXNnaWQgInJlY29tcGlsZSB3aXRoIEhBVkVfSVBTRVQgZGVmaW5lZCB0byBlbmFibGUgaXBzZXQgZGlyZWN0aXZlcyIKK21zZ3N0ciAiVW0gSVBTZXQtRGlyZWt0aXZlbiB6dSBha3RpdmllcmVuLCBtdXNzIG1pdCBIQVZFX0lQU0VUIG5ldSDDvGJlcnNldHp0IHdlcmRlbiIKKworIzogb3B0aW9uLmM6MjQ2OQorbXNnaWQgImJhZCBwb3J0IHJhbmdlIgorbXNnc3RyICJ1bnp1bMOkc3NpZ2VyIFBvcnRiZXJlaWNoIgorCisjOiBvcHRpb24uYzoyNDg1Cittc2dpZCAiYmFkIGJyaWRnZS1pbnRlcmZhY2UiCittc2dzdHIgInVuenVsw6Rzc2lnZSBCcsO8Y2tlbi1TY2huaXR0c3RlbGxlIgorCisjOiBvcHRpb24uYzoyNTQ1Cittc2dpZCAib25seSBvbmUgdGFnIGFsbG93ZWQiCittc2dzdHIgIm51ciBlaW5lIE1hcmtlIHp1bMOkc3NpZyIKKworIzogb3B0aW9uLmM6MjU2NSBvcHRpb24uYzoyNTc3IG9wdGlvbi5jOjI2ODMgb3B0aW9uLmM6MjcyNAorbXNnaWQgImJhZCBkaGNwLXJhbmdlIgorbXNnc3RyICJ1bnp1bMOkc3NpZ2VyIERIQ1AtQmVyZWljaCIKKworIzogb3B0aW9uLmM6MjU5MgorbXNnaWQgImluY29uc2lzdGVudCBESENQIHJhbmdlIgorbXNnc3RyICJpbmtvbnNpc3RlbnRlciBESENQLUJlcmVpY2giCisKKyM6IG9wdGlvbi5jOjI2NTEKK21zZ2lkICJwcmVmaXggbGVuZ3RoIG11c3QgYmUgZXhhY3RseSA2NCBmb3IgUkEgc3VibmV0cyIKK21zZ3N0ciAiRGllIFByw6RmaXhsZW5nZSBtdXNzIGdlbmF1IDY0IGbDvHIgUkEgU3VibmV0emUgc2VpbiIKKworIzogb3B0aW9uLmM6MjY1MworbXNnaWQgInByZWZpeCBsZW5ndGggbXVzdCBiZSBleGFjdGx5IDY0IGZvciBzdWJuZXQgY29uc3RydWN0b3JzIgorbXNnc3RyICJEaWUgUHLDpGZpeGxlbmdlIG11c3MgZ2VuYXUgNjQgZsO8ciBTdWJuZXQgS29uc3RydWt0b3JlbiBzZWluIgorCisjOiBvcHRpb24uYzoyNjU3Cittc2dpZCAicHJlZml4IGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0IDY0IgorbXNnc3RyICJEaWUgUHLDpGZpeGzDpG5nZSBtdXNzIG1pbmRlc3RlbnMgNjQgc2VpbiIKKworIzogb3B0aW9uLmM6MjY2MAorbXNnaWQgImluY29uc2lzdGVudCBESENQdjYgcmFuZ2UiCittc2dzdHIgIklua29uc2lzdGVudGVyIERIQ1B2Ni1CZXJlaWNoIgorCisjOiBvcHRpb24uYzoyNjcxCittc2dpZCAicHJlZml4IG11c3QgYmUgemVybyB3aXRoIFwiY29uc3RydWN0b3I6XCIgYXJndW1lbnQiCittc2dzdHIgIlByZWZpeCBtdXNzIG1pdCBkZW0gXCJjb25zdHJ1Y3RvcjpcIiBBcmd1bWVudCBOdWxsIHNlaW4iCisKKyM6IG9wdGlvbi5jOjI3ODIgb3B0aW9uLmM6MjgzMAorbXNnaWQgImJhZCBoZXggY29uc3RhbnQiCittc2dzdHIgIkZhbHNjaGVyIEhleHdlcnQiCisKKyM6IG9wdGlvbi5jOjI4MDQKK21zZ2lkICJjYW5ub3QgbWF0Y2ggdGFncyBpbiAtLWRoY3AtaG9zdCIKK21zZ3N0ciAiS2FubiBkaWUgVGFncyBpbiAtLWRoY3AtaG9zdCBuaWNodCBhYmdsZWljaGVuIgorCisjOiBvcHRpb24uYzoyODUyCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBkaGNwLWhvc3QgSVAgYWRkcmVzcyAlcyIKK21zZ3N0ciAiZG9wcGVsdGUgZGhjcC1ob3N0IElQLUFkcmVzc2UgJXMiCisKKyM6IG9wdGlvbi5jOjI5MTAKK21zZ2lkICJiYWQgREhDUCBob3N0IG5hbWUiCittc2dzdHIgInVuenVsw6Rzc2lnZXIgREhDUC1Ib3N0bmFtZSIKKworIzogb3B0aW9uLmM6Mjk5MgorbXNnaWQgImJhZCB0YWctaWYiCittc2dzdHIgInVuenVsw6Rzc2lnZSBiZWRpbmd0ZSBNYXJrZSAodGFnLWlmKSIKKworIzogb3B0aW9uLmM6MzMxNiBvcHRpb24uYzozNzEwCittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAidW56dWzDpHNzaWdlIFBvcnRudW1tZXIiCisKKyM6IG9wdGlvbi5jOjMzNzgKK21zZ2lkICJiYWQgZGhjcC1wcm94eSBhZGRyZXNzIgorbXNnc3RyICJGZWhsZXJoYWZ0ZSBESENQLVByb3h5LUFkcmVzc2UiCisKKyM6IG9wdGlvbi5jOjM0MDQKK21zZ2lkICJCYWQgZGhjcC1yZWxheSIKK21zZ3N0ciAidW56dWzDpHNzaWdlciBkaGNwLXJlbGF5IgorCisjOiBvcHRpb24uYzozNDMwCittc2dpZCAiYmFkIFJBLXBhcmFtcyIKK21zZ3N0ciAidW56dWzDpHNzaWdlIFJBLVBhcmFtZXRlciIKKworIzogb3B0aW9uLmM6MzQzOQorbXNnaWQgImJhZCBEVUlEIgorbXNnc3RyICJ1bnp1bMOkc3NpZ2UgRFVJRCIKKworIzogb3B0aW9uLmM6MzQ4MQorbXNnaWQgImludmFsaWQgYWxpYXMgcmFuZ2UiCittc2dzdHIgInVuenVsw6Rzc2lnZXIgQWxpYXMtQmVyZWljaCIKKworIzogb3B0aW9uLmM6MzUzNQorbXNnaWQgImJhZCBDTkFNRSIKK21zZ3N0ciAidW56dWzDpHNzaWdlciBDTkFNRSIKKworIzogb3B0aW9uLmM6MzU0MAorbXNnaWQgImR1cGxpY2F0ZSBDTkFNRSIKK21zZ3N0ciAiZG9wcGVsdGVyIENOQU1FIgorCisjOiBvcHRpb24uYzozNTYwCittc2dpZCAiYmFkIFBUUiByZWNvcmQiCittc2dzdHIgInVuenVsw6Rzc2lnZXIgUFRSLUVpbnRyYWciCisKKyM6IG9wdGlvbi5jOjM1OTEKK21zZ2lkICJiYWQgTkFQVFIgcmVjb3JkIgorbXNnc3RyICJ1bnp1bMOkc3NpZ2VyIE5BUFRSLUVpbnRyYWciCisKKyM6IG9wdGlvbi5jOjM2MjUKK21zZ2lkICJiYWQgUlIgcmVjb3JkIgorbXNnc3RyICJ1bnp1bMOkc3NpZ2VyIFJSLUVpbnRyYWciCisKKyM6IG9wdGlvbi5jOjM2NTUKK21zZ2lkICJiYWQgVFhUIHJlY29yZCIKK21zZ3N0ciAidW56dWzDpHNzaWdlciBUWFQtRWludHJhZyIKKworIzogb3B0aW9uLmM6MzY5NgorbXNnaWQgImJhZCBTUlYgcmVjb3JkIgorbXNnc3RyICJ1bnp1bMOkc3NpZ2VyIFNSVi1FaW50cmFnIgorCisjOiBvcHRpb24uYzozNzAzCittc2dpZCAiYmFkIFNSViB0YXJnZXQiCittc2dzdHIgInVuenVsw6Rzc2lnZXMgU1JWLVppZWwiCisKKyM6IG9wdGlvbi5jOjM3MTcKK21zZ2lkICJpbnZhbGlkIHByaW9yaXR5IgorbXNnc3RyICJ1bnp1bMOkc3NpZ2UgUHJpb3JpdMOkdCIKKworIzogb3B0aW9uLmM6MzcyNAorbXNnaWQgImludmFsaWQgd2VpZ2h0IgorbXNnc3RyICJ1bnp1bMOkc3NpZ2UgV2ljaHR1bmciCisKKyM6IG9wdGlvbi5jOjM3NDgKK21zZ2lkICJCYWQgaG9zdC1yZWNvcmQiCittc2dzdHIgInVuenVsw6Rzc2lnZXIgaG9zdC1yZWNvcmQiCisKKyM6IG9wdGlvbi5jOjM3NjUKK21zZ2lkICJCYWQgbmFtZSBpbiBob3N0LXJlY29yZCIKK21zZ3N0ciAiVW56dWzDpHNzaWdlciBOYW1lIGluIGhvc3QtcmVjb3JkIgorCisjOiBvcHRpb24uYzozODI2CisjLCBmdXp6eQorbXNnaWQgImJhZCB0cnVzdCBhbmNob3IiCittc2dzdHIgInVuenVsw6Rzc2lnZXIgUG9ydGJlcmVpY2giCisKKyM6IG9wdGlvbi5jOjM4NDAKK21zZ2lkICJiYWQgSEVYIGluIHRydXN0IGFuY2hvciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODUwCisjLCBmdXp6eQorbXNnaWQgInVuc3VwcG9ydGVkIG9wdGlvbiAoY2hlY2sgdGhhdCBkbnNtYXNxIHdhcyBjb21waWxlZCB3aXRoIERIQ1AvVEZUUC9ETlNTRUMvREJ1cyBzdXBwb3J0KSIKK21zZ3N0ciAidW56dWzDpHNzaWdlIE9wdGlvbiAocHLDvGZlbiBTaWUsIG9iIGRuc21hc3EgbWl0IERIQ1AvVEZUUC9EQnVzLVVudGVyc3TDvHR6dCDDvGJlcnNldHp0IHd1cmRlKSIKKworIzogb3B0aW9uLmM6MzkwOQorbXNnaWQgIm1pc3NpbmcgXCIiCittc2dzdHIgImZlaGxlbmRlIFxcXCIiCisKKyM6IG9wdGlvbi5jOjM5NjYKK21zZ2lkICJiYWQgb3B0aW9uIgorbXNnc3RyICJ1bnp1bMOkc3NpZ2UgT3B0aW9uIgorCisjOiBvcHRpb24uYzozOTY4Cittc2dpZCAiZXh0cmFuZW91cyBwYXJhbWV0ZXIiCittc2dzdHIgIsO8YmVyc2Now7xzc2lnZXIgUGFyYW1ldGVyIgorCisjOiBvcHRpb24uYzozOTcwCittc2dpZCAibWlzc2luZyBwYXJhbWV0ZXIiCittc2dzdHIgImZlaGxlciBQYXJhbWV0ZXIiCisKKyM6IG9wdGlvbi5jOjM5NzIKKyMsIGZ1enp5Cittc2dpZCAiaWxsZWdhbCBvcHRpb24iCittc2dzdHIgInVuenVsw6Rzc2lnZSBPcHRpb24iCisKKyM6IG9wdGlvbi5jOjM5NzkKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiRmVobGVyIgorCisjOiBvcHRpb24uYzozOTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiBhdCBsaW5lICVkIG9mICVzIgorbXNnc3RyICIgaW4gWmVpbGUgJWQgdm9uICVzIgorCisjOiBvcHRpb24uYzo0MDQ1IG9wdGlvbi5jOjQxNjggdGZ0cC5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlczogJXMiCittc2dzdHIgImthbm4gJXMgbmljaHQgbGVzZW46ICVzIgorCisjOiBvcHRpb24uYzo0MjI5IG9wdGlvbi5jOjQyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCAlcyIKK21zZ3N0ciAiJXMgZ2VsZXNlbiIKKworIzogb3B0aW9uLmM6NDMzMQorbXNnaWQgImp1bmsgZm91bmQgaW4gY29tbWFuZCBsaW5lIgorbXNnc3RyICJNaXN0IGluIGRlciBLb21tYW5kb3plaWxlIGdlZnVuZGVuIgorCisjOiBvcHRpb24uYzo0MzY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRuc21hc3EgdmVyc2lvbiAlcyAgJXNcbiIKK21zZ3N0ciAiRG5zbWFzcSBWZXJzaW9uICVzICAlc1xuIgorCisjOiBvcHRpb24uYzo0MzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb21waWxlIHRpbWUgb3B0aW9uczogJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIktvbXBpbGllcnVuZ3MtT3B0aW9uZW4gJXNcbiIKKyJcbiIKKworIzogb3B0aW9uLmM6NDM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS5cbiIKK21zZ3N0ciAiRsO8ciBkaWVzZSBTb2Z0d2FyZSB3aXJkIEFCU09MVVQgS0VJTkUgR0FSQU5USUUgZ2V3w6RocnQuXG4iCisKKyMgRklYTUU6IHRoaXMgbXVzdCBiZSBvbmUgbG9uZyBzdHJpbmchIC0tIE1BCisjOiBvcHRpb24uYzo0MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRuc21hc3EgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXRcbiIKK21zZ3N0ciAiRG5zbWFzcSBpc3QgZnJlaWUgU29mdHdhcmUsIHVuZCBkdSBiaXN0IHdpbGxrb21tZW4gZXMgd2VpdGVyIHp1IHZlcnRlaWxlblxuIgorCisjOiBvcHRpb24uYzo0MzcwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiBvciAzLlxuIgorbXNnc3RyICJ1bnRlciBkZW4gQmVkaW5ndW5nZW4gZGVyIEdOVSBHZW5lcmFsIFB1YmxpYyBMaXplbnosIFZlcnNpb24gMiBvZGVyIDMuXG4iCisKKyM6IG9wdGlvbi5jOjQzODEKK21zZ2lkICJ0cnkgLS1oZWxwIgorbXNnc3RyICJ2ZXJzdWNoZW4gU2llIC0taGVscCIKKworIzogb3B0aW9uLmM6NDM4MworbXNnaWQgInRyeSAtdyIKK21zZ3N0ciAidmVyc3VjaGVuIFNpZSAtdyIKKworIzogb3B0aW9uLmM6NDM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29tbWFuZCBsaW5lIG9wdGlvbnM6ICVzIgorbXNnc3RyICJ1bnp1bMOkc3NpZ2UgT3B0aW9uZW4gYXVmIGRlciBCZWZlaGxzemVpbGU6ICVzIgorCisjOiBvcHRpb24uYzo0NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBnZXQgaG9zdC1uYW1lOiAlcyIKK21zZ3N0ciAia2FubiBIb3N0bmFtZW4gbmljaHQgZXJtaXR0ZWxuOiAlcyIKKworIzogb3B0aW9uLmM6NDQ2MgorbXNnaWQgIm9ubHkgb25lIHJlc29sdi5jb25mIGZpbGUgYWxsb3dlZCBpbiBuby1wb2xsIG1vZGUuIgorbXNnc3RyICJtaXQgLW4vLS1uby1wb2xsIGlzdCBudXIgZWluZSByZXNvbHYuY29uZi1EYXRlaSB6dWzDpHNzaWcuIgorCisjOiBvcHRpb24uYzo0NDcyCittc2dpZCAibXVzdCBoYXZlIGV4YWN0bHkgb25lIHJlc29sdi5jb25mIHRvIHJlYWQgZG9tYWluIGZyb20uIgorbXNnc3RyICJVbSBkaWUgRG9tw6RuZSB6dSBsZXNlbiwgbXVzcyBnZW5hdSBlaW5lIHJlc29sdi5jb25mLURhdGVpIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBvcHRpb24uYzo0NDc1IG5ldHdvcmsuYzoxNTA2IGRoY3AuYzo3NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXM6ICVzIgorbXNnc3RyICJrb25udGUgJXMgbmljaHQgbGVzZW46ICVzIgorCisjOiBvcHRpb24uYzo0NDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNlYXJjaCBkaXJlY3RpdmUgZm91bmQgaW4gJXMiCittc2dzdHIgImtlaW5lIFwic2VhcmNoXCItQW53ZWlzdW5nIGluICVzIGdlZnVuZGVuIgorCisjOiBvcHRpb24uYzo0NTEzCittc2dpZCAidGhlcmUgbXVzdCBiZSBhIGRlZmF1bHQgZG9tYWluIHdoZW4gLS1kaGNwLWZxZG4gaXMgc2V0IgorbXNnc3RyICJFcyBtdXNzIGVpbmUgc3RhbmRhcmQgRG9tYWluIGdlc2V0enQgc2Vpbiwgd2VubiAtLWRoY3AtZnFkbiBnZXNldHp0IGlzdCIKKworIzogb3B0aW9uLmM6NDUyMgorbXNnaWQgInN5bnRheCBjaGVjayBPSyIKK21zZ3N0ciAiU3ludGF4cHLDvGZ1bmcgT0siCisKKyM6IGZvcndhcmQuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNlbmQgcGFja2V0OiAlcyIKK21zZ3N0ciAiRmVobGdlc2NobGFnZW4sIGZvbGdlbmRlcyBQYWtldCB6dSBzZW5kZW46ICVzIgorCisjOiBmb3J3YXJkLmM6NTc0Cittc2dpZCAiZGlzY2FyZGluZyBETlMgcmVwbHk6IHN1Ym5ldCBvcHRpb24gbWlzbWF0Y2giCittc2dzdHIgIlZlcndlcmZlIEROUyBBbnR3b3J0OiBTdWJuZXRvcHRpb24gc3RpbW10IG5pY2h0IMO8YmVycmVpbiIKKworIzogZm9yd2FyZC5jOjU5NworIywgYy1mb3JtYXQKK21zZ2lkICJuYW1lc2VydmVyICVzIHJlZnVzZWQgdG8gZG8gYSByZWN1cnNpdmUgcXVlcnkiCittc2dzdHIgIk5hbWVuc3NlcnZlciAlcyBoYXQgZWluZSByZWt1cnNpdmUgQW5mcmFnZSB2ZXJ3ZWlnZXJ0IgorCisjOiBmb3J3YXJkLmM6NjI5CisjLCBjLWZvcm1hdAorbXNnaWQgInBvc3NpYmxlIEROUy1yZWJpbmQgYXR0YWNrIGRldGVjdGVkOiAlcyIKK21zZ3N0ciAibcO2Z2xpY2hlbiBETlMtUmViaW5kLUFuZ3JpZmYgZW50ZGVja3Q6ICVzIgorCisjOiBmb3J3YXJkLmM6MTEzMiBmb3J3YXJkLmM6MTY2MworbXNnaWQgIklnbm9yaW5nIHF1ZXJ5IGZyb20gbm9uLWxvY2FsIG5ldHdvcmsiCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjIxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBETlMgcXVlcmllcyByZWFjaGVkIChtYXg6ICVkKSIKK21zZ3N0ciAiTWF4aW1hbGUgQW56YWhsIGFuIG5lYmVubMOkdWZpZ2VyIEROUy1BbmZyYWdlbiBlcnJlaWNodCAoTWF4OiAlZCkiCisKKyM6IG5ldHdvcmsuYzo3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaXN0ZW5pbmcgc29ja2V0IGZvciAlczogJXMiCittc2dzdHIgIktvbm50ZSBFbXBmYW5ncy1Tb2NrZXQgZsO8ciAlczogJXMgbmljaHQgZXJ6ZXVnZW4iCisKKyM6IG5ldHdvcmsuYzoxMDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkxPVUQgV0FSTklORzogbGlzdGVuaW5nIG9uICVzIG1heSBhY2NlcHQgcmVxdWVzdHMgdmlhIGludGVyZmFjZXMgb3RoZXIgdGhhbiAlcyIKK21zZ3N0ciAiTE9VRCBXQVJOSU5HOiBEYXMgQWJow7ZyZW4gdm9uICVzIGthbm4gZGllIEFuZnJhZ2VuIGF1ZiBkZXIgU2Nobml0dHN0ZWxsZSBha3plcHRpZXJlbiBhbmRlcnMgYWxzICVzIgorCisjOiBuZXR3b3JrLmM6MTAyOAorbXNnaWQgIkxPVUQgV0FSTklORzogdXNlIC0tYmluZC1keW5hbWljIHJhdGhlciB0aGFuIC0tYmluZC1pbnRlcmZhY2VzIHRvIGF2b2lkIEROUyBhbXBsaWZpY2F0aW9uIGF0dGFja3MgdmlhIHRoZXNlIGludGVyZmFjZShzKSIKK21zZ3N0ciAiTE9VRCBXQVJOSU5HOiBFcyBzb2xsdGUgLS1iaW5kLWR5bmFtaWMgYW5zdGF0dCAtLWJpbmQtaW50ZXJmYWNlcyBiZW51dHp0IHdlcmRlbiwgdW0gRE5TLVZlcnN0w6Rya3VuZ3NhbmdyaWZmZSBhdWYgZGllc2VuIFNjaG5pdHRzdGVsbGVuIHp1IHVudGVyYmluZGVuIgorCisjOiBuZXR3b3JrLmM6MTAzNworIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBubyBhZGRyZXNzZXMgZm91bmQgZm9yIGludGVyZmFjZSAlcyIKK21zZ3N0ciAiV2FybnVuZzogS2VpbmUgQWRyZXNzZSBmw7xyIGRpZSBTY2huaXR0c3RlbGxlICVzIGdlZnVuZGVuIgorCisjOiBuZXR3b3JrLmM6MTA5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcmZhY2UgJXMgZmFpbGVkIHRvIGpvaW4gREhDUHY2IG11bHRpY2FzdCBncm91cDogJXMiCittc2dzdHIgIlNjaG5pdHRzdGVsbGUgJXMga29ubnRlIERIQ1B2Ni1NdWx0aWNhc3QtR3J1cHBlIG5pY2h0IGJlaXRyZXRlbjogJXMiCisKKyM6IG5ldHdvcmsuYzoxMjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIHNlcnZlciBzb2NrZXQgZm9yICVzOiAlcyIKK21zZ3N0ciAia29ubnRlIG5pY2h0IGFuIFNlcnZlci1Tb2NrZXQgZsO8ciAlcyBiaW5kZW46ICVzIgorCisjOiBuZXR3b3JrLmM6MTQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBuYW1lc2VydmVyICVzIC0gbG9jYWwgaW50ZXJmYWNlIgorbXNnc3RyICJpZ25vcmllcmUgTmFtZW5zc2VydmVyICVzIC0gbG9rYWxlIFNjaG5pdHRzdGVsbGUiCisKKyM6IG5ldHdvcmsuYzoxNDU1CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIG5hbWVzZXJ2ZXIgJXMgLSBjYW5ub3QgbWFrZS9iaW5kIHNvY2tldDogJXMiCittc2dzdHIgImlnbm9yaWVyZSBOYW1lbnNzZXJ2ZXIgJXMgLSBrYW5uIFNvY2tldCBuaWNodCBlcnpldWdlbi9iaW5kZW46ICVzIgorCisjIEZJWE1FOiB0aGlzIGlzbid0IHRyYW5zbGF0YWJsZSAtIGFsd2F5cyBwcm92aWRlIGZ1bGwgc3RyaW5ncywgZG8gbm90IGFzc2VtYmxlIHlvdXJzZWxmISAtLSBNQQorIzogbmV0d29yay5jOjE0NjgKK21zZ2lkICJ1bnF1YWxpZmllZCIKK21zZ3N0ciAidW5xdWFsaWZpemllcnQiCisKKyM6IG5ldHdvcmsuYzoxNDY4Cittc2dpZCAibmFtZXMiCittc2dzdHIgIk5hbWVuIgorCisjOiBuZXR3b3JrLmM6MTQ3MAorbXNnaWQgImRlZmF1bHQiCittc2dzdHIgIlN0YW5kYXJkIgorCisjOiBuZXR3b3JrLmM6MTQ3MgorbXNnaWQgImRvbWFpbiIKK21zZ3N0ciAiRG9tYWluIgorCisjOiBuZXR3b3JrLmM6MTQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBsb2NhbCBhZGRyZXNzZXMgb25seSBmb3IgJXMgJXMiCittc2dzdHIgIkJlbnV0emUgbG9rYWxlIEFkcmVzc2VuIG51ciBmw7xyICVzICVzIgorCisjOiBuZXR3b3JrLmM6MTQ3NworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBzdGFuZGFyZCBuYW1lc2VydmVycyBmb3IgJXMgJXMiCittc2dzdHIgIkJlbnV0emUgc3RhbmRhcmQgTmFtZW5zc2VydmVyIGbDvHIgJXMgJXMiCisKKyM6IG5ldHdvcmsuYzoxNDc5CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQgZm9yICVzICVzIgorbXNnc3RyICJCZW51dHplIE5hbWVuc3NlcnZlciAlcyMlZCBmw7xyICVzICVzIgorCisjOiBuZXR3b3JrLmM6MTQ4MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTk9UIHVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQgLSBxdWVyeSBsb29wIGRldGVjdGVkIgorbXNnc3RyICJCZW51dHplIE5hbWVuc3NlcnZlciAlcyMlZCBmw7xyICVzICVzIgorCisjOiBuZXR3b3JrLmM6MTQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkKHZpYSAlcykiCittc2dzdHIgIkJlbnV0emUgTmFtZW5zc2VydmVyICVzIyVkKHZpYSAlcykiCisKKyM6IG5ldHdvcmsuYzoxNDg4CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQiCittc2dzdHIgIkJlbnV0emUgTmFtZW5zc2VydmVyICVzIyVkIgorCisjOiBkbnNtYXNxLmM6MTU0Cittc2dpZCAiTm8gdHJ1c3QgYW5jaG9ycyBwcm92aWRlZCBmb3IgRE5TU0VDIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxNTcKK21zZ2lkICJDYW5ub3QgcmVkdWNlIGNhY2hlIHNpemUgZnJvbSBkZWZhdWx0IHdoZW4gRE5TU0VDIGVuYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE1OQorIywgZnV6enkKK21zZ2lkICJETlNTRUMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfRE5TU0VDIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiREJ1cyBuaWNodCB2ZXJmw7xnYmFyOiBzZXR6ZW4gU2llIEhBVkVfREJVUyBpbiBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzoxNjUKK21zZ2lkICJURlRQIHNlcnZlciBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9URlRQIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiVEZUUC1TZXJ2ZXIgbmljaHQgdmVyZsO8Z2Jhciwgc2V0emVuIFNpZSBIQVZFX1RGVFAgaW4gc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MTcwCittc2dpZCAiQ2Fubm90IHVzZSAtLWNvbm50cmFjayBBTkQgLS1xdWVyeS1wb3J0IgorbXNnc3RyICJLYW5uIG5pY2h0IC0tY29ubnRyYWNrIFVORCAtLXF1ZXJ5LXBvcnQgZWluc2V0emVuIgorCisjOiBkbnNtYXNxLmM6MTczCittc2dpZCAiQ29ubnRyYWNrIHN1cHBvcnQgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfQ09OTlRSQUNLIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiQ29ubnRyYWNrLVVudGVyc3TDvHR6dW5nIG5pY2h0IHZlcmbDvGdiYXI6IHNldHplIEhBVkVfQ09OTlRSQUNLIGluIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjE3OAorbXNnaWQgImFzeWNocm9ub3VzIGxvZ2dpbmcgaXMgbm90IGF2YWlsYWJsZSB1bmRlciBTb2xhcmlzIgorbXNnc3RyICJhc3luY2hyb25lIFByb3Rva29sbGllcnVuZyB1bnRlciBTb2xhcmlzIG5pY2h0IHZlcmbDvGdiYXIiCisKKyM6IGRuc21hc3EuYzoxODMKK21zZ2lkICJhc3ljaHJvbm91cyBsb2dnaW5nIGlzIG5vdCBhdmFpbGFibGUgdW5kZXIgQW5kcm9pZCIKK21zZ3N0ciAiQXN5bmNocm9uZSBQcm90b2tvbGxpZXJ1bmcgdW50ZXIgQW5kcm9pZCBuaWNodCB2ZXJmw7xnYmFyIgorCisjOiBkbnNtYXNxLmM6MTg4Cittc2dpZCAiYXV0aG9yaXRhdGl2ZSBETlMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfQVVUSCBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIkF1dGhvcml0YXRpdmVzIEROUyBuaWNodCB2ZXJmw7xnYmFyOiBFcyBtdXNzIEhBVkVfQVVUSCBpbiBzcmMvY29uZmlnLmggZ2VzZXR6dCBzZWluIgorCisjOiBkbnNtYXNxLmM6MTkzCisjLCBmdXp6eQorbXNnaWQgIkxvb3AgZGV0ZWN0aW9uIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0xPT1AgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJURlRQLVNlcnZlciBuaWNodCB2ZXJmw7xnYmFyLCBzZXR6ZW4gU2llIEhBVkVfVEZUUCBpbiBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzoyMDEKK21zZ2lkICJ6b25lIHNlcmlhbCBtdXN0IGJlIGNvbmZpZ3VyZWQgaW4gLS1hdXRoLXNvYSIKK21zZ3N0ciAiWm9uZW4gU2VyaWVubnVtbWVyIG11c3MgbWl0IC0tYXV0aC1zb2Ega29uZmlndXJpZXJ0IHdlcmRlbiIKKworIzogZG5zbWFzcS5jOjIxOQorbXNnaWQgImRoY3AtcmFuZ2UgY29uc3RydWN0b3Igbm90IGF2YWlsYWJsZSBvbiB0aGlzIHBsYXRmb3JtIgorbXNnc3RyICJkaGNwLXJhbmdlIEtvbnN0cnVrdG9yIGlzdCBhdWYgZGllc2VyIFBsYXR0Zm9ybSBuaWNodCB2ZXJmw7xiYXIiCisKKyM6IGRuc21hc3EuYzoyNjIKK21zZ2lkICJjYW5ub3Qgc2V0IC0tYmluZC1pbnRlcmZhY2VzIGFuZCAtLWJpbmQtZHluYW1pYyIKK21zZ3N0ciAiS2FubiBuaWNodCAtLWJpbmQtaW50ZXJmYWNlcyB1bmQgLS1iaW5kLWR5bmFtaWMgc2V0emVuIgorCisjOiBkbnNtYXNxLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIGxpc3Qgb2YgaW50ZXJmYWNlczogJXMiCittc2dzdHIgImtvbm50ZSBTY2huaXRzdGVsbGVubGlzdGUgbmljaHQgYmV6aWVoZW46ICVzIgorCisjOiBkbnNtYXNxLmM6Mjc0CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW50ZXJmYWNlICVzIgorbXNnc3RyICJ1bmJla2FubnRlIFNjaG5pdHRzdGVsbGUgJXMiCisKKyM6IGRuc21hc3EuYzozMzAgZG5zbWFzcS5jOjk1NAorIywgYy1mb3JtYXQKK21zZ2lkICJEQnVzIGVycm9yOiAlcyIKK21zZ3N0ciAiREJ1cy1GZWhsZXI6ICVzIgorCisjOiBkbnNtYXNxLmM6MzMzCittc2dpZCAiREJ1cyBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9EQlVTIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiREJ1cyBuaWNodCB2ZXJmw7xnYmFyOiBzZXR6ZW4gU2llIEhBVkVfREJVUyBpbiBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzozNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB1c2VyIG9yIGdyb3VwOiAlcyIKK21zZ3N0ciAiVW5iZWthbm50ZXIgQmVudXR6ZXIgb2RlciBHcnVwcGU6ICVzIgorCisjOiBkbnNtYXNxLmM6NDE2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byBmaWxlc3lzdGVtIHJvb3Q6ICVzIgorbXNnc3RyICJrYW5uIG5pY2h0IGlucyBXdXJ6ZWx2ZXJ6ZWljaG5pcyBkZXMgRGF0ZWlzeXN0ZW1zIHdlY2hzZWxuOiAlcyIKKworIyBGSVhNRTogdGhpcyBhbmQgdGhlIG5leHQgd291bGQgbmVlZCBjb21tYXMgYWZ0ZXIgdGhlIHZlcnNpb24KKyM6IGRuc21hc3EuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnRlZCwgdmVyc2lvbiAlcyBETlMgZGlzYWJsZWQiCittc2dzdHIgImdlc3RhcnRldCwgVmVyc2lvbiAlcywgRE5TIGFiZ2VzY2hhbHRldCIKKworIzogZG5zbWFzcS5jOjY1NQorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIGNhY2hlc2l6ZSAlZCIKK21zZ3N0ciAiZ2VzdGFydGV0LCBWZXJzaW9uICVzLCBDYWNoZWdyw7bDn2UgJWQiCisKKyM6IGRuc21hc3EuYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnRlZCwgdmVyc2lvbiAlcyBjYWNoZSBkaXNhYmxlZCIKK21zZ3N0ciAiR2VzdGFydGV0LCBWZXJzaW9uICVzIENhY2hlIGRlYWt0aXZpZXJ0IgorCisjOiBkbnNtYXNxLmM6NjU5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBpbGUgdGltZSBvcHRpb25zOiAlcyIKK21zZ3N0ciAiw5xiZXJzZXR6dW5nc29wdGlvbmVuOiAlcyIKKworIzogZG5zbWFzcS5jOjY2NQorbXNnaWQgIkRCdXMgc3VwcG9ydCBlbmFibGVkOiBjb25uZWN0ZWQgdG8gc3lzdGVtIGJ1cyIKK21zZ3N0ciAiREJ1cy1VbnRlcnN0w7x0enVuZyBlaW5nZXNjaGFsdGV0OiBtaXQgU3lzdGVtYnVzIHZlcmJ1bmRlbiIKKworIzogZG5zbWFzcS5jOjY2NworbXNnaWQgIkRCdXMgc3VwcG9ydCBlbmFibGVkOiBidXMgY29ubmVjdGlvbiBwZW5kaW5nIgorbXNnc3RyICJEQnVzLVVudGVyc3TDvHR6dW5nIGVpbmdlc2NoYWx0ZXQ6IHdhcnRlIGF1ZiBTeXN0ZW1idXMtVmVyYmluZHVuZyIKKworIzogZG5zbWFzcS5jOjY3MgorbXNnaWQgIkROUyBzZXJ2aWNlIGxpbWl0ZWQgdG8gbG9jYWwgc3VibmV0cyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6Njc3Cittc2dpZCAiRE5TU0VDIHZhbGlkYXRpb24gZW5hYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6Njc5Cittc2dpZCAiRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzIG5vdCBjaGVja2VkIHVudGlsIGZpcnN0IGNhY2hlIHJlbG9hZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGZhaWxlZCB0byBjaGFuZ2Ugb3duZXIgb2YgJXM6ICVzIgorbXNnc3RyICJXYXJudW5nOiBrb25udGUgZGVuIEJlc2l0emVyIHZvbiAlcyBuaWNodCDDpG5kZXJuOiAlcyIKKworIzogZG5zbWFzcS5jOjY4OAorbXNnaWQgInNldHRpbmcgLS1iaW5kLWludGVyZmFjZXMgb3B0aW9uIGJlY2F1c2Ugb2YgT1MgbGltaXRhdGlvbnMiCittc2dzdHIgIkFrdGl2aWVyZSAtLWJpbmQtaW50ZXJmYWNlcyB3ZWdlbiBFaW5zY2hyw6Rua3VuZ2VuIGRlcyBCZXRyaWVic3N5c3RlbXMiCisKKyM6IGRuc21hc3EuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogaW50ZXJmYWNlICVzIGRvZXMgbm90IGN1cnJlbnRseSBleGlzdCIKK21zZ3N0ciAiV2FybnVuZzogU2Nobml0dHN0ZWxsZSAlcyBleGlzdGllcnQgZGVyemVpdCBuaWNodCIKKworIzogZG5zbWFzcS5jOjcwMworbXNnaWQgIndhcm5pbmc6IGlnbm9yaW5nIHJlc29sdi1maWxlIGZsYWcgYmVjYXVzZSBuby1yZXNvbHYgaXMgc2V0IgorbXNnc3RyICJXYXJudW5nOiBJZ25vcmllcmUgXCJyZXNvbHYtZmlsZVwiLCB3ZWlsIFwibm8tcmVzb2x2XCIgYWt0aXYgaXN0IgorCisjOiBkbnNtYXNxLmM6NzA2Cittc2dpZCAid2FybmluZzogbm8gdXBzdHJlYW0gc2VydmVycyBjb25maWd1cmVkIgorbXNnc3RyICJXYXJudW5nOiBrZWluZSB2b3JnZWxhZ2VydGVuIChVcHN0cmVhbSkgU2VydmVyIGtvbmZpZ3VyaWVydCIKKworIzogZG5zbWFzcS5jOjcxMAorIywgYy1mb3JtYXQKK21zZ2lkICJhc3luY2hyb25vdXMgbG9nZ2luZyBlbmFibGVkLCBxdWV1ZSBsaW1pdCBpcyAlZCBtZXNzYWdlcyIKK21zZ3N0ciAiYXN5bmNocm9uZSBQcm90b2tvbGxpZXJ1bmcgZWluZ2VzY2hhbHRldCwgV2FydGVzY2hsYW5nZSBmYXNzdCAlZCBOYWNocmljaHRlbiIKKworIzogZG5zbWFzcS5jOjczMQorbXNnaWQgIklQdjYgcm91dGVyIGFkdmVydGlzZW1lbnQgZW5hYmxlZCIKK21zZ3N0ciAiSVB2Ni1Sb3V0ZXItQWR2ZXJ0aXNlbWVudCBha3RpdmllcnQiCisKKyM6IGRuc21hc3EuYzo3MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCwgc29ja2V0cyBib3VuZCBleGNsdXNpdmVseSB0byBpbnRlcmZhY2UgJXMiCittc2dzdHIgIkRIQ1AsIFNvY2tldHMgZXhrbHVzaXYgYW4gZGFzIEludGVyZmFjZSAlcyBnZWJ1bmRlbiIKKworIyBGSVhNRTogdGhpcyBhbmQgdGhlIG5leHQgZmV3IG11c3QgYmUgZnVsbCBzdHJpbmdzIHRvIGJlIHRyYW5zbGF0YWJsZSAtIGRvIG5vdCBhc3NlbWJsZSBpbiBjb2RlIgorIzogZG5zbWFzcS5jOjc1MworbXNnaWQgInJvb3QgaXMgIgorbXNnc3RyICJXdXJ6ZWwgaXN0IgorCisjOiBkbnNtYXNxLmM6NzUzCittc2dpZCAiZW5hYmxlZCIKK21zZ3N0ciAiQWt0aXZpZXJ0IgorCisjOiBkbnNtYXNxLmM6NzU1Cittc2dpZCAic2VjdXJlIG1vZGUiCittc2dzdHIgInNpY2hlcmVyIE1vZHVzIgorCisjOiBkbnNtYXNxLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlc3RyaWN0aW5nIG1heGltdW0gc2ltdWx0YW5lb3VzIFRGVFAgdHJhbnNmZXJzIHRvICVkIgorbXNnc3RyICJCZWdyZW56ZSBnbGVpY2h6ZWl0aWdlIFRGVFAtw5xiZXJ0cmFndW5nZW4gYXVmIG1heGltYWwgJWQiCisKKyM6IGRuc21hc3EuYzo5NTYKK21zZ2lkICJjb25uZWN0ZWQgdG8gc3lzdGVtIERCdXMiCittc2dzdHIgIk1pdCBTeXN0ZW0tREJ1cyB2ZXJidW5kZW4iCisKKyM6IGRuc21hc3EuYzoxMTA2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmb3JrIGludG8gYmFja2dyb3VuZDogJXMiCittc2dzdHIgImthbm4gbmljaHQgaW4gZGVuIEhpbnRlcmdydW5kIGFic3BhbHRlbjogJXMiCisKKyM6IGRuc21hc3EuYzoxMTA5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgaGVscGVyOiAlcyIKK21zZ3N0ciAia2FubiBIZWxmZXIgbmljaHQgZXJ6ZXVnZW46ICVzIgorCisjOiBkbnNtYXNxLmM6MTExMgorIywgYy1mb3JtYXQKK21zZ2lkICJzZXR0aW5nIGNhcGFiaWxpdGllcyBmYWlsZWQ6ICVzIgorbXNnc3RyICJrYW5uIFwiY2FwYWJpbGl0aWVzXCIgbmljaHQgc2V0emVuOiAlcyIKKworIzogZG5zbWFzcS5jOjExMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSB1c2VyLWlkIHRvICVzOiAlcyIKK21zZ3N0ciAiS2FubiBuaWNodCBCZW51dHplcnJlY2h0ZSAlcyBhbm5laG1lbjogJXMiCisKKyM6IGRuc21hc3EuYzoxMTE4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjaGFuZ2UgZ3JvdXAtaWQgdG8gJXM6ICVzIgorbXNnc3RyICJLYW5uIG5pY2h0IEdydXBwZW5yZWNodGUgJXMgYW5uZWhtZW46ICVzIgorCisjOiBkbnNtYXNxLmM6MTEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBwaWRmaWxlICVzOiAlcyIKK21zZ3N0ciAia2FubiBkaWUgUHJvemVzc2lkZW50aWZpa2F0aW9ucy0oUElEKS1EYXRlaSAlcyBuaWNodCDDtmZmbmVuOiAlcyIKKworIzogZG5zbWFzcS5jOjExMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gbG9nICVzOiAlcyIKK21zZ3N0ciAiS2FubiBMb2dkYXRlaSAlcyBuaWNodCDDtmZmbmVuOiAlcyIKKworIzogZG5zbWFzcS5jOjExMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgTHVhIHNjcmlwdDogJXMiCittc2dzdHIgIktvbm50ZSBMdWEtU2NyaXB0IG5pY2h0IGxhZGVuOiAlcyIKKworIzogZG5zbWFzcS5jOjExMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVEZUUCBkaXJlY3RvcnkgJXMgaW5hY2Nlc3NpYmxlOiAlcyIKK21zZ3N0ciAiRGFzIFRGVFAtVmVyemVpY2huaXMgJXMgaXN0IG5pY2h0IHp1Z3JlaWZiYXI6ICVzIgorCisjOiBkbnNtYXNxLmM6MTE1MQorbXNnaWQgIm5vdyBjaGVja2luZyBETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjEyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic2NyaXB0IHByb2Nlc3Mga2lsbGVkIGJ5IHNpZ25hbCAlZCIKK21zZ3N0ciAiU2NyaXB0cHJvemVzcyBkdXJjaCBTaWduYWwgJWQgZ2V0w7Z0ZXQiCisKKyM6IGRuc21hc3EuYzoxMjIyCisjLCBjLWZvcm1hdAorbXNnaWQgInNjcmlwdCBwcm9jZXNzIGV4aXRlZCB3aXRoIHN0YXR1cyAlZCIKK21zZ3N0ciAiU2NyaXB0cHJvemVzcyBoYXQgc2ljaCBtaXQgU3RhdHVzICVkIGJlZW5kZXQiCisKKyM6IGRuc21hc3EuYzoxMjI2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleGVjdXRlICVzOiAlcyIKK21zZ3N0ciAia29ubnRlICVzIG5pY2h0IGF1c2bDvGhyZW46ICVzIgorCisjOiBkbnNtYXNxLmM6MTI4MQorbXNnaWQgImV4aXRpbmcgb24gcmVjZWlwdCBvZiBTSUdURVJNIgorbXNnc3RyICJiZWVuZGUgbmFjaCBFbXBmYW5nIHZvbiBTSUdURVJNIgorCisjOiBkbnNtYXNxLmM6MTMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWNjZXNzICVzOiAlcyIKK21zZ3N0ciAia29ubnRlIGF1ZiAlcyBuaWNodCB6dWdyZWlmZW46ICVzIgorCisjOiBkbnNtYXNxLmM6MTMzOQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nICVzIgorbXNnc3RyICJsZXNlICVzIgorCisjOiBkbnNtYXNxLmM6MTM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzZXJ2ZXJzIGZvdW5kIGluICVzLCB3aWxsIHJldHJ5IgorbXNnc3RyICJrZWluZSBTZXJ2ZXIgaW4gJXMgZ2VmdW5kZW4sIHdlcmRlIGVzIHNww6R0ZXIgbmV1IHZlcnN1Y2hlbiIKKworIzogZGhjcC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJrYW5uIERIQ1AtU29ja2V0IG5pY2h0IGVyemV1Z2VuOiAlcyIKKworIzogZGhjcC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgb3B0aW9ucyBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgImthbm4gT3B0aW9uZW4gZsO8ciBESENQLVNvY2tldCBuaWNodCBzZXR6ZW46ICVzIgorCisjOiBkaGNwLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBTT19SRVVTRXtBRERSfFBPUlR9IG9uIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAia2FubiBTT19SRVVTRXtBRERSfFBPUlR9IGbDvHIgREhDUC1Tb2NrZXQgbmljaHQgYWt0aXZpZXJlbjogJXMiCisKKyM6IGRoY3AuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgREhDUCBzZXJ2ZXIgc29ja2V0OiAlcyIKK21zZ3N0ciAia2FubiBuaWNodCBhbiBESENQLVNlcnZlci1Tb2NrZXQgYmluZGVuOiAlcyIKKworIzogZGhjcC5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIElDTVAgcmF3IHNvY2tldDogJXMuIgorbXNnc3RyICJrYW5uIElDTVAtUm9oZGF0ZW4tU29ja2V0IG5pY2h0IGVyemV1Z2VuOiAlcy4iCisKKyM6IGRoY3AuYzoyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbnRlcmZhY2UgJXMgaW4gYnJpZGdlLWludGVyZmFjZSIKK21zZ3N0ciAidW5iZWthbm50ZSBTY2huaXR0c3RlbGxlICVzIGluIGJyaWRnZS1pbnRlcmZhY2UiCisKKyM6IGRoY3AuYzoyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCBwYWNrZXQgcmVjZWl2ZWQgb24gJXMgd2hpY2ggaGFzIG5vIGFkZHJlc3MiCittc2dzdHIgIkRIQ1AtUGFrZXQgb2huZSBBZHJlc3NlIGFuIFNjaG5pdHRzdGVsbGUgJXMgZW1wZmFuZ2VuIgorCisjOiBkaGNwLmM6NDA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFSUC1jYWNoZSBpbmplY3Rpb24gZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6NTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmFuZ2UgJXMgLS0gJXMgaXMgbm90IGNvbnNpc3RlbnQgd2l0aCBuZXRtYXNrICVzIgorbXNnc3RyICJESENQLUJlcmVpY2ggJXMgLSAlcyBwYXNzdCBuaWNodCB6dXIgTmV0em1hc2tlICVzIgorCisjOiBkaGNwLmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBsaW5lIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgInVuZ8O8bHRpZ2UgWmVpbGUgJTIkZCBpbiBEYXRlaSAlMSRzIgorCisjOiBkaGNwLmM6ODUwCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICVzIGxpbmUgJWQsIGR1cGxpY2F0ZSBuYW1lIG9yIElQIGFkZHJlc3MiCittc2dzdHIgImlnbm9yaWVyZSAlcyBaZWlsZSAlZCwgZG9wcGVsdGVyIE5hbWUgb2RlciBkb3BwZWx0ZSBJUC1BZHJlc3NlIgorCisjOiBkaGNwLmM6OTk0IHJmYzMzMTUuYzoyMDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVsYXkgJXMgLT4gJXMiCittc2dzdHIgIkRIQ1AgV2VpdGVybGVpdHVuZyAlcyAtPiAlcyIKKworIzogbGVhc2UuYzo2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBvciBjcmVhdGUgbGVhc2UgZmlsZSAlczogJXMiCittc2dzdHIgImthbm4gTGVhc2UtRGF0ZWkgJXMgbmljaHQgw7ZmZm5lbjogJXMiCisKKyM6IGxlYXNlLmM6MTM0Cittc2dpZCAidG9vIG1hbnkgc3RvcmVkIGxlYXNlcyIKK21zZ3N0ciAienUgdmllbGUgTGVhc2VzIGdlc3BlaWNoZXJ0IgorCisjOiBsZWFzZS5jOjE2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcnVuIGxlYXNlLWluaXQgc2NyaXB0ICVzOiAlcyIKK21zZ3N0ciAia2FubiBMZWFzZS1TdGFydC1Ta3JpcHQgJXMgbmljaHQgYXVzZsO8aHJlbjogJXMiCisKKyM6IGxlYXNlLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgImxlYXNlLWluaXQgc2NyaXB0IHJldHVybmVkIGV4aXQgY29kZSAlcyIKK21zZ3N0ciAiTGVhc2UtU3RhcnQtU2tyaXB0IGJlZW5kZXRlIHNpY2ggbWl0IENvZGUgJXMiCisKKyMgRklYTUU6IFRoaXMgc2hvdWxkIGJlICV1IHMgYWxzbyBpbiBFbmdsaXNoIGFjY29yZGluZyB0byBOSVNUIGFuZCBTSSBydWxlcy4gLS0gTUEKKyM6IGxlYXNlLmM6MzQyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSAlczogJXMgKHJldHJ5IGluICV1cykiCittc2dzdHIgIktvbm50ZSAlcyBuaWNodCBzY2hyZWliZW46ICVzIChOZXV2ZXJzdWNoIGluICV1IHMpIgorCisjOiBsZWFzZS5jOjkwNgorIywgYy1mb3JtYXQKK21zZ2lkICJJZ25vcmluZyBkb21haW4gJXMgZm9yIERIQ1AgaG9zdCBuYW1lICVzIgorbXNnc3RyICJJZ25vcmllcmUgRG9tw6RuZSAlcyBmw7xyIERIQ1AtSG9zdG5hbWVuICVzIgorCisjIEZJWE1FOiB0aGlzIGFuZCB0aGUgbmV4dCBmZXcgYXJlIG5vdCB0cmFuc2xhdGFibGUuIFBsZWFzZSBwcm92aWRlIGZ1bGwKKyMgc3RyaW5ncywgZG8gbm90IHByb2dyYW1tYXRpY2FsbHkgYXNzZW1ibGUgdGhlbS4KKyM6IHJmYzIxMzEuYzozNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgZm9yIERIQ1AgcmVxdWVzdCAlcyAlcyIKK21zZ3N0ciAiS2VpbiB2ZXJmw7xnYmFyZXIgREhDUC1CZXJlaWNoIGbDvHIgQW5mcmFnZSAlcyAlcyIKKworIzogcmZjMjEzMS5jOjM0MworbXNnaWQgIndpdGggc3VibmV0IHNlbGVjdG9yIgorbXNnc3RyICJtaXQgU3VibmV0ei1Xw6RobGVyIgorCisjOiByZmMyMTMxLmM6MzQzCittc2dpZCAidmlhIgorbXNnc3RyICJ2aWEiCisKKyM6IHJmYzIxMzEuYzozNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYXZhaWxhYmxlIERIQ1Agc3VibmV0OiAlcy8lcyIKK21zZ3N0ciAiJXUgdmVyZsO8Z2JhcmUocykgREhDUC1TdWJuZXR6OiAlcy8lcyIKKworIzogcmZjMjEzMS5jOjM1OCByZmMzMzE1LmM6MzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGF2YWlsYWJsZSBESENQIHJhbmdlOiAlcyAtLSAlcyIKK21zZ3N0ciAiJXUgdmVyZsO8Z2JhcmUocikgREhDUC1CZXJlaWNoOiAlcyAtICVzIgorCisjOiByZmMyMTMxLmM6NDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHZlbmRvciBjbGFzczogJXMiCittc2dzdHIgIiV1IFwiVmVuZG9yIGNsYXNzXCI6ICVzIgorCisjOiByZmMyMTMxLmM6NDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHVzZXIgY2xhc3M6ICVzIgorbXNnc3RyICIldSBCZW51dHplcmtsYXNzZTogJXMiCisKKyMgRklYTUU6IGRvIG5vdCBwcm9ncmFtbWF0aWNhbGx5IGFzc2VtYmxlIHN0cmluZ3MgLSB1bnRyYW5zbGF0YWJsZQorIzogcmZjMjEzMS5jOjQ5OAorbXNnaWQgImRpc2FibGVkIgorbXNnc3RyICJkZWFrdGl2aWVydCIKKworIzogcmZjMjEzMS5jOjUzOSByZmMyMTMxLmM6OTY3IHJmYzIxMzEuYzoxMzg1IHJmYzMzMTUuYzo2MDIgcmZjMzMxNS5jOjgyMworIzogcmZjMzMxNS5jOjEwOTUKK21zZ2lkICJpZ25vcmVkIgorbXNnc3RyICJpZ25vcmllcnQiCisKKyM6IHJmYzIxMzEuYzo1NTQgcmZjMjEzMS5jOjEyMDUgcmZjMzMxNS5jOjg3MworbXNnaWQgImFkZHJlc3MgaW4gdXNlIgorbXNnc3RyICJBZHJlc3NlIGluIE51dHp1bmciCisKKyM6IHJmYzIxMzEuYzo1NjggcmZjMjEzMS5jOjEwMjEKK21zZ2lkICJubyBhZGRyZXNzIGF2YWlsYWJsZSIKK21zZ3N0ciAiS2VpbmUgQWRyZXNzZSB2ZXJmw7xnYmFyIgorCisjOiByZmMyMTMxLmM6NTc1IHJmYzIxMzEuYzoxMTY4Cittc2dpZCAid3JvbmcgbmV0d29yayIKK21zZ3N0ciAiRmFsc2NoZXMgTmV0endlcmsiCisKKyM6IHJmYzIxMzEuYzo1OTAKK21zZ2lkICJubyBhZGRyZXNzIGNvbmZpZ3VyZWQiCittc2dzdHIgIktlaW5lIEFkcmVzc2Uga29uZmlndXJpZXJ0IgorCisjOiByZmMyMTMxLmM6NTk2IHJmYzIxMzEuYzoxMjE4Cittc2dpZCAibm8gbGVhc2VzIGxlZnQiCittc2dzdHIgIktlaW5lIExlYXNlcyDDvGJyaWciCisKKyM6IHJmYzIxMzEuYzo2OTEgcmZjMzMxNS5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBjbGllbnQgcHJvdmlkZXMgbmFtZTogJXMiCittc2dzdHIgIiV1IEtsaWVudCBzdGVsbHQgTmFtZSBiZXJlaXQ6ICVzIgorCisjOiByZmMyMTMxLmM6Nzk2Cittc2dpZCAiUFhFIEJJUyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJQWEUgQklTIG5pY2h0IHVudGVyc3TDvHR6dCIKKworIzogcmZjMjEzMS5jOjkzNSByZmMzMzE1LmM6MTE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJkaXNhYmxpbmcgREhDUCBzdGF0aWMgYWRkcmVzcyAlcyBmb3IgJXMiCittc2dzdHIgInNjaGFsdGUgc3RhdGlzY2hlIERIQ1AtQWRyZXNzZSAlcyBmw7xyICVzIGFiIgorCisjIEZJWE1FOiBkbyBub3QgYXNzZW1ibGUKKyM6IHJmYzIxMzEuYzo5NTYKK21zZ2lkICJ1bmtub3duIGxlYXNlIgorbXNnc3RyICJVbmJla2FubnRlciBMZWFzZSIKKworIzogcmZjMjEzMS5jOjk5MAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgaXMgbGVhc2VkIHRvICVzIgorbXNnc3RyICJiZW51dHplIGtvbmZpZ3VyaWVydGUgQWRyZXNzZSAlcyBuaWNodCwgd2VpbCBzaWUgYW4gJXMgdmVybGVhc3QgaXN0IgorCisjOiByZmMyMTMxLmM6MTAwMAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgaXMgaW4gdXNlIGJ5IHRoZSBzZXJ2ZXIgb3IgcmVsYXkiCittc2dzdHIgImJlbnV0emUga29uZmlndXJpZXJ0ZSBBZHJlc3NlICVzIG5pY2h0LCB3ZWlsIHNpZSB2b24gU2VydmVyL1JlbGFpcyB2ZXJ3ZW5kZXQgd2lyZCIKKworIzogcmZjMjEzMS5jOjEwMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IHdhcyBwcmV2aW91c2x5IGRlY2xpbmVkIgorbXNnc3RyICJiZW51dHplIGtvbmZpZ3VyaWVydGUgQWRyZXNzZSAlcyBuaWNodCwgd2VpbCBzaWUgenV2b3IgYWJnZWxlaG50IHd1cmRlIgorCisjIEZJWE1FOiBkbyBub3QgYXNzZW1ibGUKKyM6IHJmYzIxMzEuYzoxMDE5IHJmYzIxMzEuYzoxMjExCittc2dpZCAibm8gdW5pcXVlLWlkIgorbXNnc3RyICJLZWluZSBlaW5kZXV0aWdlIElEIgorCisjOiByZmMyMTMxLmM6MTEwNgorbXNnaWQgIndyb25nIHNlcnZlci1JRCIKK21zZ3N0ciAiRmFsc2NoZSBTZXJ2ZXItSUQiCisKKyM6IHJmYzIxMzEuYzoxMTI1Cittc2dpZCAid3JvbmcgYWRkcmVzcyIKK21zZ3N0ciAiRmFsc2NoZSBBZHJlc3NlIgorCisjOiByZmMyMTMxLmM6MTE0MyByZmMzMzE1LmM6OTY5Cittc2dpZCAibGVhc2Ugbm90IGZvdW5kIgorbXNnc3RyICJMZWFzZSBuaWNodCBnZWZ1bmRlbiIKKworIzogcmZjMjEzMS5jOjExNzYKK21zZ2lkICJhZGRyZXNzIG5vdCBhdmFpbGFibGUiCittc2dzdHIgIkFkcmVzc2UgbmljaHQgdmVyZsO8Z2JhciIKKworIzogcmZjMjEzMS5jOjExODcKK21zZ2lkICJzdGF0aWMgbGVhc2UgYXZhaWxhYmxlIgorbXNnc3RyICJTdGF0aXNjaGVyIExlYXNlIHZlcmbDvGdiYXIiCisKKyM6IHJmYzIxMzEuYzoxMTkxCittc2dpZCAiYWRkcmVzcyByZXNlcnZlZCIKK21zZ3N0ciAiQWRyZXNzZSByZXNlcnZpZXJ0IgorCisjOiByZmMyMTMxLmM6MTE5OQorIywgYy1mb3JtYXQKK21zZ2lkICJhYmFuZG9uaW5nIGxlYXNlIHRvICVzIG9mICVzIgorbXNnc3RyICJHZWJlIExlYXNlIHZvbiAlMiRzIGFuICUxJHMgYXVmIgorCisjOiByZmMyMTMxLmM6MTcxMgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBib290ZmlsZSBuYW1lOiAlcyIKK21zZ3N0ciAiJXUgTmFtZSBkZXIgQm9vdGRhdGVpOiAlcyIKKworIzogcmZjMjEzMS5jOjE3MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgc2VydmVyIG5hbWU6ICVzIgorbXNnc3RyICIldSBTZXJ2ZXJuYW1lOiAlcyIKKworIzogcmZjMjEzMS5jOjE3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgbmV4dCBzZXJ2ZXI6ICVzIgorbXNnc3RyICIldSBuw6RjaHN0ZXIgU2VydmVyOiAlcyIKKworIzogcmZjMjEzMS5jOjE3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYnJvYWRjYXN0IHJlc3BvbnNlIgorbXNnc3RyICIldSBBbnR3b3J0IHBlciBSdW5kc2VuZHVuZyIKKworIzogcmZjMjEzMS5jOjE3OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHNlbmQgREhDUC9CT09UUCBvcHRpb24gJWQ6IG5vIHNwYWNlIGxlZnQgaW4gcGFja2V0IgorbXNnc3RyICJrYW5uIERIQ1AvQk9PVFAtT3BpdGlvbiAlZCBuaWNodCBzZXR6ZW46IGtlaW4gUGxhdHogbWVociBpbSBQYWtldCIKKworIzogcmZjMjEzMS5jOjIwMzYKK21zZ2lkICJQWEUgbWVudSB0b28gbGFyZ2UiCittc2dzdHIgIlBYRS1NZW7DvGVpbnRyYWcgenUgZ3Jvw58iCisKKyM6IHJmYzIxMzEuYzoyMTczIHJmYzMzMTUuYzoxNDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHJlcXVlc3RlZCBvcHRpb25zOiAlcyIKK21zZ3N0ciAiJXUgYW5nZWZvcmRlcnRlIE9wdGlvbmVuOiAlcyIKKworIzogcmZjMjEzMS5jOjI0NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHNlbmQgUkZDMzkyNSBvcHRpb246IHRvbyBtYW55IG9wdGlvbnMgZm9yIGVudGVycHJpc2UgbnVtYmVyICVkIgorbXNnc3RyICJLYW5uIFJGQzM5MjUtT3B0aW9uIG5pY2h0IHNlbmRlbjogenUgdmllbGUgT3B0aW9uZW4gZsO8ciBVbnRlcm5laG1lbiBOci4gJWQiCisKKyM6IG5ldGxpbmsuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIG5ldGxpbmsgc29ja2V0OiAlcyIKK21zZ3N0ciAia2FubiBOZXRsaW5rLVNvY2tldCBuaWNodCBlcnpldWdlbjogJXMiCisKKyM6IG5ldGxpbmsuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV0bGluayByZXR1cm5zIGVycm9yOiAlcyIKK21zZ3N0ciAiTmV0bGluayBsaWVmZXJ0IEZlaGxlciAlcyIKKworIzogZGJ1cy5jOjE3MQorbXNnaWQgImF0dGVtcHQgdG8gc2V0IGFuIElQdjYgc2VydmVyIGFkZHJlc3MgdmlhIERCdXMgLSBubyBJUHY2IHN1cHBvcnQiCittc2dzdHIgIlZlcnN1Y2gsIHZpYSBEQnVzIGVpbmUgSVB2Ni1TZXJ2ZXJhZHJlc3NlIHp1IHNldHplbjoga2VpbmUgSVB2Ni1VbnRlcnN0w7x0enVuZyIKKworIzogZGJ1cy5jOjUwMAorbXNnaWQgInNldHRpbmcgdXBzdHJlYW0gc2VydmVycyBmcm9tIERCdXMiCittc2dzdHIgInZvcmdlbGFnZXJ0ZSBTZXJ2ZXIgdm9uIERCdXMgZ2VzZXR6dCIKKworIzogZGJ1cy5jOjU0NworbXNnaWQgImNvdWxkIG5vdCByZWdpc3RlciBhIERCdXMgbWVzc2FnZSBoYW5kbGVyIgorbXNnc3RyICJrb25udGUgU3RldWVydW5nc3Byb2dyYW1tIGbDvHIgREJ1cy1OYWNocmljaHRlbiBuaWNodCBhbm1lbGRlbiIKKworIzogYnBmLmM6MjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUCBCUEYgc29ja2V0OiAlcyIKK21zZ3N0ciAia29ubnRlIERIQ1AtQlBGLVNvY2tldCBuaWNodCBlaW5yaWNodGVuOiAlcyIKKworIzogYnBmLmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVxdWVzdCBmb3IgdW5zdXBwb3J0ZWQgaGFyZHdhcmUgdHlwZSAoJWQpIHJlY2VpdmVkIG9uICVzIgorbXNnc3RyICJESENQLUFuZnJhZ2UgZsO8ciBuaWNodCB1bnRlcnN0w7x0emVuIEhhcmR3YXJldHlwICglZCkgYXVmICVzIGVtcGZhbmdlbiIKKworIzogYnBmLmM6Mzc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIFBGX1JPVVRFIHNvY2tldDogJXMiCittc2dzdHIgImthbm4gREhDUC1Tb2NrZXQgbmljaHQgZXJ6ZXVnZW46ICVzIgorCisjOiBicGYuYzozOTcKK21zZ2lkICJVbmtub3duIHByb3RvY29sIHZlcnNpb24gZnJvbSByb3V0ZSBzb2NrZXQiCittc2dzdHIgIiIKKworIzogaGVscGVyLmM6MTUzCittc2dpZCAibGVhc2UoKSBmdW5jdGlvbiBtaXNzaW5nIGluIEx1YSBzY3JpcHQiCittc2dzdHIgIkRpZSBGdW5rdGlvbiBsZWFzZSgpIGZlaGx0IGltIEx1YS1TY3JpcHQiCisKKyM6IHRmdHAuYzozMDkKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IGZyZWUgcG9ydCBmb3IgVEZUUCIKK21zZ3N0ciAia29ubnRlIGtlaW5lbiBmcmVpZW4gUG9ydCBmw7xyIFRGVFAgYmVrb21tZW4iCisKKyM6IHRmdHAuYzozMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgcmVxdWVzdCBmcm9tICVzIgorbXNnc3RyICJuaWNodCB1bnRlcnN0w7x0enRlIEFuZnJhZ2Ugdm9uICVzIgorCisjOiB0ZnRwLmM6NDM5CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgbm90IGZvdW5kIgorbXNnc3RyICJEYXRlaSAlcyBuaWNodCBnZWZ1bmRlbiIKKworIzogdGZ0cC5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciAlZCAlcyByZWNlaXZlZCBmcm9tICVzIgorbXNnc3RyICJGZWhsZXIgJWQgJXMgdm9uICVzIGVtcGZhbmdlbiIKKworIzogdGZ0cC5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgc2VuZGluZyAlcyB0byAlcyIKK21zZ3N0ciAia29ubnRlICVzIG5pY2h0IGFuICVzIHNlbmRlbiIKKworIzogdGZ0cC5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICJzZW50ICVzIHRvICVzIgorbXNnc3RyICIlcyBhbiAlcyB2ZXJzY2hpY2t0IgorCisjOiBsb2cuYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAib3ZlcmZsb3c6ICVkIGxvZyBlbnRyaWVzIGxvc3QiCittc2dzdHIgIsOcYmVybGF1ZjogJWQgUHJvdG9rb2xsZWludHLDpGdlIHZlcmxvcmVuIgorCisjOiBsb2cuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZhaWxlZDogJXMiCittc2dzdHIgIlByb3Rva29sbGllcnVuZyBmZWhsZ2VzY2hsYWdlbjogJXMiCisKKyM6IGxvZy5jOjQ3MgorbXNnaWQgIkZBSUxFRCB0byBzdGFydCB1cCIKK21zZ3N0ciAiU3RhcnQgZmVobGdlc2NobGFnZW4iCisKKyM6IGNvbm50cmFjay5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbm50cmFjayBjb25uZWN0aW9uIG1hcmsgcmV0cmlldmFsIGZhaWxlZDogJXMiCittc2dzdHIgIlwiQ29ubnRyYWNrIGNvbm5lY3Rpb24gbWFya1wiLUFicnVmIGZlaGxnZXNjaGxhZ2VuOiAlcyIKKworIzogZGhjcDYuYzo1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1B2NiBzb2NrZXQ6ICVzIgorbXNnc3RyICJLYW5uIERIQ1B2Ni1Tb2NrZXQgbmljaHQgZXJ6ZXVnZW46ICVzIgorCisjOiBkaGNwNi5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgU09fUkVVU0V7QUREUnxQT1JUfSBvbiBESENQdjYgc29ja2V0OiAlcyIKK21zZ3N0ciAia2FubiBTT19SRVVTRXtBRERSfFBPUlR9IGbDvHIgREhDUHY2LVNvY2tldCBuaWNodCBha3RpdmllcmVuOiAlcyIKKworIzogZGhjcDYuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBESENQdjYgc2VydmVyIHNvY2tldDogJXMiCittc2dzdHIgIkthbm4gbmljaHQgYW4gREhDUHY2LVNlcnZlci1Tb2NrZXQgYmluZGVuOiAlcyIKKworIzogcmZjMzMxNS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJubyBhZGRyZXNzIHJhbmdlIGF2YWlsYWJsZSBmb3IgREhDUHY2IHJlcXVlc3QgZnJvbSByZWxheSBhdCAlcyIKK21zZ3N0ciAiS2VpbiBBZHJlc3NiZXJlaWNoIHZlcmbDvGdiYXIgZsO8ciBkaWUgREhDUHY2LUFuZnJhZ2Ugdm9tIFJlbGF5IGJlaSAlcyIKKworIzogcmZjMzMxNS5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBhZGRyZXNzIHJhbmdlIGF2YWlsYWJsZSBmb3IgREhDUHY2IHJlcXVlc3QgdmlhICVzIgorbXNnc3RyICJLZWluIEFkcmVzc2JlcmVpY2ggdmVyZsO8Z2JhciBmw7xyIGRpZSBESENQdjYtQW5mcmFnZSB2aWEgJXMiCisKKyM6IHJmYzMzMTUuYzoyOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYXZhaWxhYmxlIERIQ1B2NiBzdWJuZXQ6ICVzLyVkIgorbXNnc3RyICIldSB2ZXJmw7xnYmFyZShzKSBESENQdjYtU3VibmV0ejogJXMvJWQiCisKKyM6IHJmYzMzMTUuYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgdmVuZG9yIGNsYXNzOiAldSIKK21zZ3N0ciAiJXUgSGVyc3RlbGxlcmtsYXNzZTogJXUiCisKKyM6IHJmYzMzMTUuYzo0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgY2xpZW50IE1BQyBhZGRyZXNzOiAlcyIKK21zZ3N0ciAiJXUgS2xpZW50IE1BQy1BZHJlc3NlOiAlcyIKKworIyBGSVhNRTogZG8gbm90IGFzc2VtYmxlCisjOiByZmMzMzE1LmM6NjU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gcHJlZml4LWNsYXNzICVkIgorbXNnc3RyICJ1bmJla2FubnRlIFByw6RmaXhrbGFzc2UgJWQiCisKKyM6IHJmYzMzMTUuYzo3OTEgcmZjMzMxNS5jOjkxMworbXNnaWQgInN1Y2Nlc3MiCittc2dzdHIgIkVyZm9sZyIKKworIzogcmZjMzMxNS5jOjgwNiByZmMzMzE1LmM6ODA4IHJmYzMzMTUuYzo5MjEgcmZjMzMxNS5jOjkyMworbXNnaWQgIm5vIGFkZHJlc3NlcyBhdmFpbGFibGUiCittc2dzdHIgIktlaW5lIEFkcmVzc2VuIHZlcmbDvGdiYXIiCisKKyM6IHJmYzMzMTUuYzo4NjUKK21zZ2lkICJhZGRyZXNzIHVuYXZhaWxhYmxlIgorbXNnc3RyICJBZHJlc3NlIG5pY2h0IHZlcmbDvGdiYXIiCisKKyM6IHJmYzMzMTUuYzo5MDAKK21zZ2lkICJub3Qgb24gbGluayIKK21zZ3N0ciAibmljaHQgb24gbGluayIKKworIzogcmZjMzMxNS5jOjk3MyByZmMzMzE1LmM6MTE1MSByZmMzMzE1LmM6MTIyOAorbXNnaWQgIm5vIGJpbmRpbmcgZm91bmQiCittc2dzdHIgIktlaW5lIEJpbmR1bmcgZ2VmdW5kZW4iCisKKyM6IHJmYzMzMTUuYzoxMDExCittc2dpZCAiZGVwcmVjYXRlZCIKK21zZ3N0ciAidmVyYWx0ZXQiCisKKyM6IHJmYzMzMTUuYzoxMDE2Cittc2dpZCAiYWRkcmVzcyBpbnZhbGlkIgorbXNnc3RyICJBZHJlc3NlIHVuZ8O8bHRpZyIKKworIzogcmZjMzMxNS5jOjEwNjEKK21zZ2lkICJjb25maXJtIGZhaWxlZCIKK21zZ3N0ciAiQmVzdMOkdGlndW5nIGZlaGxnZXNjaGxhZ2VuIgorCisjOiByZmMzMzE1LmM6MTA3MgorbXNnaWQgImFsbCBhZGRyZXNzZXMgc3RpbGwgb24gbGluayIKK21zZ3N0ciAiQWxsZSBBZHJlc3NlbiBpbW1lciBub2NoIG9uIGxpbmsiCisKKyM6IHJmYzMzMTUuYzoxMTYwCittc2dpZCAicmVsZWFzZSByZWNlaXZlZCIKK21zZ3N0ciAiRnJlaWdhYmUgZW1wZmFuZ2VuIgorCisjOiByZmMzMzE1LmM6MjA4MAorbXNnaWQgIkNhbm5vdCBtdWx0aWNhc3QgdG8gREhDUHY2IHNlcnZlciB3aXRob3V0IGNvcnJlY3QgaW50ZXJmYWNlIgorbXNnc3RyICJLYW5uIG5pY2h0IHp1bSBESENQdjYgU2VydmVyIG11bHRpY2FzdGVuIG9obmUga29ycmVrdGUgU2Nobml0dHN0ZWxsZSIKKworIzogZGhjcC1jb21tb24uYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWdub3JpbmcgZHVwbGljYXRlIGRoY3Atb3B0aW9uICVkIgorbXNnc3RyICJJZ25vcmllcmUgZG9wcGVsdCB2b3JoYW5kZW5lIERIQ1AtT3B0aW9uICVkIgorCisjOiBkaGNwLWNvbW1vbi5jOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICIldSB0YWdzOiAlcyIKK21zZ3N0ciAiJXUgTWFya2VuOiAlcyIKKworIzogZGhjcC1jb21tb24uYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG1vcmUgdGhhbiBvbmUgYWRkcmVzcyBpbiBob3N0c2ZpbGUsIHVzaW5nICVzIGZvciBESENQIgorbXNnc3RyICIlcyBoYXQgbWVociBhbHMgZWluZSBBZHJlc3NlIGluIGhvc3RzLURhdGVpLCBiZW51dHplICVzIGbDvHIgREhDUCIKKworIzogZGhjcC1jb21tb24uYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgKCVzKSBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUiCittc2dzdHIgImRvcHBlbHRlIElQLUFkcmVzc2UgJXMgKCVzKSBpbiBcImRoY3AtY29uZmlnXCItQW53ZWlzdW5nIgorCisjOiBkaGNwLWNvbW1vbi5jOjQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX0JJTkRUT0RFVklDRSBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgImthbm4gU09fQklORFRPREVWSUNFIGbDvHIgREhDUC1Tb2NrZXQgbmljaHQgYWt0aXZpZXJlbjogJXMiCisKKyM6IGRoY3AtY29tbW9uLmM6NjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIktub3duIERIQ1Agb3B0aW9uczpcbiIKK21zZ3N0ciAiQmVrYW5udGUgREhDUC1PcHRpb25lbjpcbiIKKworIzogZGhjcC1jb21tb24uYzo2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiS25vd24gREhDUHY2IG9wdGlvbnM6XG4iCittc2dzdHIgIkJla2FubnRlIERIQ1B2Ni1PcHRpb25lbjpcbiIKKworIzogZGhjcC1jb21tb24uYzo4MjMKK21zZ2lkICIsIHByZWZpeCBkZXByZWNhdGVkIgorbXNnc3RyICIsIFByZWZpeCB2ZXJhbHRldCIKKworIzogZGhjcC1jb21tb24uYzo4MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBsZWFzZSB0aW1lICIKK21zZ3N0ciAiLCBMZWFzZSBaZWl0IgorCisjOiBkaGNwLWNvbW1vbi5jOjg2OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdGF0ZWxlc3Mgb24gJXMlLjBzJS4wcyVzIgorbXNnc3RyICIlcyBzdGF0ZWxlc3MgYXVmICVzJS4wcyUuMHMlcyIKKworIzogZGhjcC1jb21tb24uYzo4NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHN0YXRpYyBsZWFzZXMgb25seSBvbiAlLjBzJXMlcyUuMHMiCittc2dzdHIgIiVzLCBudXIgc3RhdGlzY2hlIExlYXNlcyBhdWYgJS4wcyVzJXMlLjBzIgorCisjOiBkaGNwLWNvbW1vbi5jOjg3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgcHJveHkgb24gc3VibmV0ICUuMHMlcyUuMHMlLjBzIgorbXNnc3RyICIlcywgUHJveHkgaW0gU3VibmV0eiAlLjBzJXMlLjBzJS4wcyIKKworIzogZGhjcC1jb21tb24uYzo4NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIElQIHJhbmdlICVzIC0tICVzJXMlLjBzIgorbXNnc3RyICIlcywgSVAtQmVyZWljaCAlcyAtLSAlcyVzJS4wcyIKKworIzogZGhjcC1jb21tb24uYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUHY0LWRlcml2ZWQgSVB2NiBuYW1lcyBvbiAlcyVzIgorbXNnc3RyICJESENQdjQtYWJnZWxlaXRldGUgSVB2NiBOYW1lbiBhdWYgJXMlcyIKKworIzogZGhjcC1jb21tb24uYzo4ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAicm91dGVyIGFkdmVydGlzZW1lbnQgb24gJXMlcyIKK21zZ3N0ciAiUm91dGVyLUFkdmVydGlzbWVudCBhdWYgJXMlcyIKKworIzogZGhjcC1jb21tb24uYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByZWxheSBmcm9tICVzIHRvICVzIHZpYSAlcyIKK21zZ3N0ciAiREhDUCBXZWl0ZXJsZWl0dW5nIHZvbiAlcyBuYWNoICVzIMO8YmVyICVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlbGF5IGZyb20gJXMgdG8gJXMiCittc2dzdHIgIkRIQ1AgV2VpdGVybGVpdHVuZyB2b24gJXMgbmFjaCAlcyIKKworIzogcmFkdi5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgSUNNUHY2IHNvY2tldDogJXMiCittc2dzdHIgIkthbm4gSUNNUHY2LVNvY2tldCBuaWNodCBlcnpldWdlbjogJXMiCisKKyM6IGF1dGguYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3Jpbmcgem9uZSB0cmFuc2ZlciByZXF1ZXN0IGZyb20gJXMiCittc2dzdHIgImlnbm9yaWVyZSBab25lbnRyYW5zZmVyLUFuZnJhZ2Ugdm9uICVzIgorCisjOiBpcHNldC5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIGtlcm5lbCB2ZXJzaW9uOiAlcyIKK21zZ3N0ciAia29ubnRlIEtlcm5lbHZlcnNpb24gbmljaHQgZmluZGVuOiAlcyIKKworIzogaXBzZXQuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBJUHNldCBjb250cm9sIHNvY2tldDogJXMiCittc2dzdHIgImtvbm50ZSBJUHNldC1Lb250cm9sbC1Tb2NrZXQgbmljaHQgZXJ6ZXVnZW46ICVzIgorCisjOiBibG9ja2RhdGEuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJETlNTRUMgbWVtb3J5IGluIHVzZSAldSwgbWF4ICV1LCBhbGxvY2F0ZWQgJXUiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6NzYKK21zZ2lkICJlcnJvcjogZmlsbF9hZGRyIG1pc3N1c2VkIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjEwNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFjY2VzcyBwZiBkZXZpY2VzOiAlcyIKK21zZ3N0ciAia29ubnRlIGF1ZiAlcyBuaWNodCB6dWdyZWlmZW46ICVzIgorCisjOiB0YWJsZXMuYzoxMTkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IG5vIG9wZW5lZCBwZiBkZXZpY2VzICVzIgorbXNnc3RyICJXYXJudW5nOiBLZWluZSBBZHJlc3NlIGbDvHIgZGllIFNjaG5pdHRzdGVsbGUgJXMgZ2VmdW5kZW4iCisKKyM6IHRhYmxlcy5jOjEyNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZXJyb3I6IGNhbm5vdCB1c2UgdGFibGUgbmFtZSAlcyIKK21zZ3N0ciAia2FubiBIb3N0bmFtZW4gbmljaHQgZXJtaXR0ZWxuOiAlcyIKKworIzogdGFibGVzLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yOiBjYW5ub3Qgc3RybGNweSB0YWJsZSBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBwZnJfYWRkX3RhYmxlczogJXMoJWQpIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjE0NworbXNnaWQgImluZm86IHRhYmxlIGNyZWF0ZWQiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IERJT0NSJXNBRERSUzogJXMiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTYyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlZCBhZGRyZXNzZXMgJXMiCittc2dzdHIgIkZlaGxlcmhhZnRlIEFkcmVzc2UiCisKKyN+IG1zZ2lkICJubyBpbnRlcmZhY2Ugd2l0aCBhZGRyZXNzICVzIgorI34gbXNnc3RyICJrZWluZSBTY2huaXR0c3RlbGxlIG1pdCBBZHJlc3NlICVzIgorCisjfiBtc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgaW4gZGhjcC1jb25maWcgZGlyZWN0aXZlLiIKKyN+IG1zZ3N0ciAiZG9wcGVsdGUgSVAtQWRyZXNzZSAlcyBpbiBcImRoY3AtY29uZmlnXCItQW53ZWlzdW5nIgorCisjLCBmdXp6eQorI34gbXNnaWQgIlNwZWNpZnkgcGF0aCB0byBMdWEgc2NyaXB0IChubyBkZWZhdWx0KS4iCisjfiBtc2dzdHIgIkRhdGVpcGZhZCBmw7xyIFByb3plc3NrZW5udW5nIChQSUQpIGZlc3RsZWdlbiAoVm9yZWluc3RlbGx1bmc6ICVzKS4iCisKKyN+IG1zZ2lkICJvbmx5IG9uZSBkaGNwLWhvc3RzZmlsZSBhbGxvd2VkIgorI34gbXNnc3RyICJudXIgZWluZSBESENQLUhvc3RkYXRlaSAoZGhjcC1ob3N0c2ZpbGUpIHp1bMOkc3NpZyIKKworI34gbXNnaWQgIm9ubHkgb25lIGRoY3Atb3B0c2ZpbGUgYWxsb3dlZCIKKyN+IG1zZ3N0ciAibnVyIGVpbmUgREhDUC1PcHRpb25zZGF0ZWkgKGRoY3Atb3B0c2ZpbGUpIHp1bMOkc3NpZyIKKworI34gbXNnaWQgImZpbGVzIG5lc3RlZCB0b28gZGVlcCBpbiAlcyIKKyN+IG1zZ3N0ciAiRGF0ZWllbiBpbiAlcyB6dSB0aWVmIHZlcnNjaGFjaHRlbHQiCisKKyN+IG1zZ2lkICJUWFQgcmVjb3JkIHN0cmluZyB0b28gbG9uZyIKKyN+IG1zZ3N0ciAiVFhULUVpbnRyYWcgenUgbGFuZyIKKworI34gbXNnaWQgImZhaWxlZCB0byBzZXQgSVBWNiBvcHRpb25zIG9uIGxpc3RlbmluZyBzb2NrZXQ6ICVzIgorI34gbXNnc3RyICJrb25udGUgSVBWNi1PcHRpb25lbiBhdWYgRW1wZmFuZ3MtU29ja2V0IG5pY2h0IGVpbnN0ZWxsZW46ICVzIgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIGJpbmQgbGlzdGVuaW5nIHNvY2tldCBmb3IgJXM6ICVzIgorI34gbXNnc3RyICJrb25udGUgRW1wZmFuZ3MtU29ja2V0IG5pY2h0IGFuICVzIGJpbmRlbjogJXMiCmRpZmYgLS1naXQgYS9wby9lcy5wbyBiL3BvL2VzLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZGZmNjcKLS0tIC9kZXYvbnVsbAorKysgYi9wby9lcy5wbwpAQCAtMCwwICsxLDIxNzkgQEAKKyMgU3BhbmlzaCB0cmFuc2xhdGlvbnMgZm9yIGRuc21hc3EgcGFja2FnZS4KKyMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyMgQ2hyaXN0b3BoZXIgQ2hhdGhhbSA8Y2hyaXNsaW51eEBnbWFpbC5jb20+LCAyMDA1LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZG5zbWFzcSAyLjY3XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA5LTA2LTE4IDEyOjI0KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEzLTEwLTA0IDEzOjI0KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFZpY2VudGUgU29yaWFubyA8dmljdGVrQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOlxuIgorIkxhbmd1YWdlOiBlc1xuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTFcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IGNhY2hlLmM6NTA1Cittc2dpZCAiSW50ZXJuYWwgZXJyb3IgaW4gY2FjaGUuIgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6OTA4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBuYW1lcyBmcm9tICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjYXJnYXIgbm9tYnJlcyBkZXNkZSAlczogJXMiCisKKyM6IGNhY2hlLmM6OTM0IGRoY3AuYzo4MjAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImJhZCBhZGRyZXNzIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgImRpcmVjY2nzbiBlcnLzbmVhIGVuICVzIGztbmVhICVkIgorCisjOiBjYWNoZS5jOjk4NSBkaGNwLmM6ODM2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBuYW1lIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgIm5vbWJyZSBlcnLzbmVvIGVuICVzIGztbmVhICVkIgorCisjOiBjYWNoZS5jOjk5MiBkaGNwLmM6OTExCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgJXMgLSAlZCBhZGRyZXNzZXMiCittc2dzdHIgImRpcmVjY2nzbmVzICVzIC0gJWQgbGXtZGFzIgorCisjOiBjYWNoZS5jOjExMDAKK21zZ2lkICJjbGVhcmVkIGNhY2hlIgorbXNnc3RyICJlbCBjYWNo6SBmdWUgbGliZXJhZG8iCisKKyM6IGNhY2hlLmM6MTEyMworIywgYy1mb3JtYXQKK21zZ2lkICJObyBJUHY0IGFkZHJlc3MgZm91bmQgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTIwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBhIENOQU1FLCBub3QgZ2l2aW5nIGl0IHRvIHRoZSBESENQIGxlYXNlIG9mICVzIgorbXNnc3RyICIlcyBlcyB1biBDTkFNRSwgbm8gc2UgbGUgZXN04SBkYW5kbyBjb25jZXNp824gREhDUCBkZSAlcyIKKworIzogY2FjaGUuYzoxMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBnaXZpbmcgbmFtZSAlcyB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyBiZWNhdXNlIHRoZSBuYW1lIGV4aXN0cyBpbiAlcyB3aXRoIGFkZHJlc3MgJXMiCittc2dzdHIgIm5vIG90b3JnYW5kbyBub21icmUgJXMgYSBjb25jZXNp824gREhDUCBkZSAlcyBwb3JxdWUgZWwgbm9tYnJlIGV4aXN0ZSBlbiAlcyBjb24gZGlyZWNjafNuICVzIgorCisjOiBjYWNoZS5jOjEzNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZSAlbHUiCittc2dzdHIgInRpZW1wbyAlbHUiCisKKyM6IGNhY2hlLmM6MTM2NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2FjaGUgc2l6ZSAlZCwgJWQvJWQgY2FjaGUgaW5zZXJ0aW9ucyByZS11c2VkIHVuZXhwaXJlZCBjYWNoZSBlbnRyaWVzLiIKK21zZ3N0ciAidGFtYfFvIGRlIGNhY2jpICVkLCAlZC8lZCBpbnNlcmNp825lcyBkZSBjYWNo6SByZXV0aWxpemFyb24gb2JqZXRvcyBubyB2ZW5jaWRvcy4iCisKKyM6IGNhY2hlLmM6MTM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJxdWVyaWVzIGZvcndhcmRlZCAldSwgcXVlcmllcyBhbnN3ZXJlZCBsb2NhbGx5ICV1IgorbXNnc3RyICJi+nNxdWVkYXMgcmVlbnZpYWRhcyAldSwgYvpzcXVlZGFzIHJlc3BvbmRpZGFzIGxvY2FsbWVudGUgJXUiCisKKyM6IGNhY2hlLmM6MTM3MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicXVlcmllcyBmb3IgYXV0aG9yaXRhdGl2ZSB6b25lcyAldSIKK21zZ3N0ciAiRmlqYXIgVFRMIHBhcmEgcmVzcHVlc3RhcyBhdXRvcml0YXJpYXMiCisKKyM6IGNhY2hlLmM6MTM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgJXMjJWQ6IHF1ZXJpZXMgc2VudCAldSwgcmV0cmllZCBvciBmYWlsZWQgJXUiCittc2dzdHIgInNlcnZpZG9yICVzIyVkOiBi+nNxdWVkYXMgZW52aWFkYXMgJXUsIHJlaW50ZW50YWRhcyBvIGZhbGxpZGFzICV1IgorCisjOiB1dGlsLmM6NDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZWVkIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcjogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gY3JlYXIgdmFsb3Igc2VtaWxsYSBwYXJhIGVsIGdlbmVyYWRvciBkZSBu+m1lcm9zIGFsZWF0b3Jpb3M6ICVzIgorCisjOiB1dGlsLmM6MjA1CisjLCBmdXp6eQorbXNnaWQgImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkiCittc2dzdHIgIm5vIHNlIHB1ZG8gYXNpZ25hciBtZW1vcmlhIgorCisjOiB1dGlsLmM6MjQzIG9wdGlvbi5jOjU3OQorbXNnaWQgImNvdWxkIG5vdCBnZXQgbWVtb3J5IgorbXNnc3RyICJubyBzZSBwdWRvIGFkcXVpcmlyIG1lbW9yaWEiCisKKyM6IHV0aWwuYzoyNTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZTogJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGNyZWFyIHBpcGU6ICVzIgorCisjOiB1dGlsLmM6MjYxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWxsb2NhdGUgJWQgYnl0ZXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gYXNpZ25hciAlZCBieXRlcyIKKworIzogdXRpbC5jOjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZpbml0ZSIKK21zZ3N0ciAiaW5maW5pdG8iCisKKyM6IG9wdGlvbi5jOjMxOAorbXNnaWQgIlNwZWNpZnkgbG9jYWwgYWRkcmVzcyhlcykgdG8gbGlzdGVuIG9uLiIKK21zZ3N0ciAiRXNwZWNpZmljYXIgZGlyZWNjafNuKGVzKSBsb2NhbGVzIGTzbmRlIGVzY3VjaGFyLiIKKworIzogb3B0aW9uLmM6MzE5Cittc2dpZCAiUmV0dXJuIGlwYWRkciBmb3IgYWxsIGhvc3RzIGluIHNwZWNpZmllZCBkb21haW5zLiIKK21zZ3N0ciAiUmV0b3JuYXIgaXBhZGRyIChkaXJlY2Np824gSVApIHBhcmEgdG9kb3MgbG9zIGhvc3RzIGVuIGxvcyBkb21pbmlvcyBlc3BlY2lmaWNhZG9zLiIKKworIzogb3B0aW9uLmM6MzIwCittc2dpZCAiRmFrZSByZXZlcnNlIGxvb2t1cHMgZm9yIFJGQzE5MTggcHJpdmF0ZSBhZGRyZXNzIHJhbmdlcy4iCittc2dzdHIgIkZhbHNpZmljYXIgYvpzcXVlZGFzIHJldmVyc2FzIHBhcmEgcmFuZ29zIGRlIGRpcmVjY2nzbiBwcml2YWRvcyBSRkMxOTE4LiIKKworIzogb3B0aW9uLmM6MzIxCittc2dpZCAiVHJlYXQgaXBhZGRyIGFzIE5YRE9NQUlOIChkZWZlYXRzIFZlcmlzaWduIHdpbGRjYXJkKS4iCittc2dzdHIgIlRyYXRhciBpcGFkZHIgKGRpcmVjY2nzbiBJUCkgY29tbyBOWERPTUFJTiAoZGVycm90YSBjb21vZO1uIFZlcmlzaWduKS4iCisKKyM6IG9wdGlvbi5jOjMyMgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHRoZSBzaXplIG9mIHRoZSBjYWNoZSBpbiBlbnRyaWVzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJFc3BlY2lmaWNhciB0YW1h8W8gZGUgY2FjaOkgZW4gY3VhbnRvIGEgY2FudGlkYWQgZGUgb2JqZXRvcyAoJXMgcG9yIHByZWRldGVybWluYWRvKS4iCisKKyM6IG9wdGlvbi5jOjMyMworIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGNvbmZpZ3VyYXRpb24gZmlsZSAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiRXNwZWNpZmljYXIgYXJjaGl2byBkZSBjb25maWd1cmFjafNuICglcyBwb3IgcHJlZGV0ZXJtaW5hZG8pLiIKKworIzogb3B0aW9uLmM6MzI0Cittc2dpZCAiRG8gTk9UIGZvcmsgaW50byB0aGUgYmFja2dyb3VuZDogcnVuIGluIGRlYnVnIG1vZGUuIgorbXNnc3RyICJOTyBoYWNlciB1biBmb3JrIGhhY2lhIGVsIGZvbmRvOiBjb3JyZXIgZW4gbW9kbyBkZWJ1Zy4iCisKKyM6IG9wdGlvbi5jOjMyNQorbXNnaWQgIkRvIE5PVCBmb3J3YXJkIHF1ZXJpZXMgd2l0aCBubyBkb21haW4gcGFydC4iCittc2dzdHIgIk5PIHJlZW52aWFyIGL6c3F1ZWRhcyBzaW4gcGFydGUgZGUgZG9taW5pby4iCisKKyM6IG9wdGlvbi5jOjMyNgorbXNnaWQgIlJldHVybiBzZWxmLXBvaW50aW5nIE1YIHJlY29yZHMgZm9yIGxvY2FsIGhvc3RzLiIKK21zZ3N0ciAiUmV0b3JuYXIgZXhwZWRpZW50ZXMgTVggYXV0by1zZfFhbGFkb3JlcyBwYXJhIGhvc3RzIGxvY2FsZXMuIgorCisjOiBvcHRpb24uYzozMjcKK21zZ2lkICJFeHBhbmQgc2ltcGxlIG5hbWVzIGluIC9ldGMvaG9zdHMgd2l0aCBkb21haW4tc3VmZml4LiIKK21zZ3N0ciAiRXhwYW5kaXIgbm9tYnJlcyBzaW1wbGVzIGVuIC9ldGMvaG9zdHMgY29uIGRvbWFpbi1zdWZmaXggKHN1ZmlqbyBkZSBkb21pbmlvKS4iCisKKyM6IG9wdGlvbi5jOjMyOAorbXNnaWQgIkRvbid0IGZvcndhcmQgc3B1cmlvdXMgRE5TIHJlcXVlc3RzIGZyb20gV2luZG93cyBob3N0cy4iCittc2dzdHIgIk5vIHJlZW52aWFyIHBlZGlkb3MgRE5TIGZhbHNvcyBkZXNkZSBt4XF1aW5hcyBXaW5kb3dzLiIKKworIzogb3B0aW9uLmM6MzI5Cittc2dpZCAiRW5hYmxlIERIQ1AgaW4gdGhlIHJhbmdlIGdpdmVuIHdpdGggbGVhc2UgZHVyYXRpb24uIgorbXNnc3RyICJIYWJpbGl0YXIgREhDUCBkZW50cm8gZGVsIHJhbmdvIGJyaW5kYWRvIGNvbiBkdXJhY2nzbiBkZSBjb25jZXNp824uIgorCisjOiBvcHRpb24uYzozMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlIHRvIHRoaXMgZ3JvdXAgYWZ0ZXIgc3RhcnR1cCAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiQ2FtYmlhciBhIGVzdGUgZ3J1cG8gZGVzcHXpcyBkZWwgaW5pY2lvICglcyBwb3IgcHJlZGV0ZXJtaW5hZG8pLiIKKworIzogb3B0aW9uLmM6MzMxCittc2dpZCAiU2V0IGFkZHJlc3Mgb3IgaG9zdG5hbWUgZm9yIGEgc3BlY2lmaWVkIG1hY2hpbmUuIgorbXNnc3RyICJGaWphciBkaXJlY2Np824gbyBub21icmUgZGUgaG9zdCBwYXJhIHVuYSBt4XF1aW5hIGVzcGVjaWZpY2FkYS4iCisKKyM6IG9wdGlvbi5jOjMzMgorIywgZnV6enkKK21zZ2lkICJSZWFkIERIQ1AgaG9zdCBzcGVjcyBmcm9tIGZpbGUuIgorbXNnc3RyICJMZWVyIGVzcGVjaWZpY2FjaW9uZXMgREhDUCBkZSBob3N0IGRlc2RlIGFyY2hpdm8iCisKKyM6IG9wdGlvbi5jOjMzMworIywgZnV6enkKK21zZ2lkICJSZWFkIERIQ1Agb3B0aW9uIHNwZWNzIGZyb20gZmlsZS4iCittc2dzdHIgIkxlZXIgb3BjaW9uZXMgREhDUCBkZSBob3N0IGRlc2RlIGFyY2hpdm8iCisKKyM6IG9wdGlvbi5jOjMzNAorbXNnaWQgIkV2YWx1YXRlIGNvbmRpdGlvbmFsIHRhZyBleHByZXNzaW9uLiIKK21zZ3N0ciAiRXZhbHVhciBleHByZXNp824gY29uZGljaW9uYWwgZGUgZXRpcXVldGEuIgorCisjOiBvcHRpb24uYzozMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG8gTk9UIGxvYWQgJXMgZmlsZS4iCittc2dzdHIgIk5PIGNhcmdhciBhcmNoaXZvICVzLiIKKworIzogb3B0aW9uLmM6MzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgYSBob3N0cyBmaWxlIHRvIGJlIHJlYWQgaW4gYWRkaXRpb24gdG8gJXMuIgorbXNnc3RyICJFc3BlY2lmaWNhciB1biBhcmNoaXZvIGRlIGhvc3RzIHBhcmEgc2VyIGxl7WRvIGFkaWNpb25hbG1lbnRlIGEgJXMuIgorCisjOiBvcHRpb24uYzozMzcKK21zZ2lkICJTcGVjaWZ5IGludGVyZmFjZShzKSB0byBsaXN0ZW4gb24uIgorbXNnc3RyICJFc3BlY2lmaWNhciBpbnRlcmZhc2UocykgZG9uZGUgZXNjdWNoYXIuIgorCisjOiBvcHRpb24uYzozMzgKK21zZ2lkICJTcGVjaWZ5IGludGVyZmFjZShzKSBOT1QgdG8gbGlzdGVuIG9uLiIKK21zZ3N0ciAiRXNwZWNpZmljYXIgaW50ZXJmYXNlKHMpIGRvbmRlIE5PIGVzY3VjaGFyLiIKKworIzogb3B0aW9uLmM6MzM5CisjLCBmdXp6eQorbXNnaWQgIk1hcCBESENQIHVzZXIgY2xhc3MgdG8gdGFnLiIKK21zZ3N0ciAiVHJhemFyIGNsYXNlIGRlIHVzdWFyaW8gREhDUCBhIGV0aXF1ZXRhLiIKKworIzogb3B0aW9uLmM6MzQwCittc2dpZCAiTWFwIFJGQzMwNDYgY2lyY3VpdC1pZCB0byB0YWcuIgorbXNnc3RyICJUcmF6YXIgY2lyY3VpdC1pZCAoaWRlbnRpZmljYWNp824gZGUgY2lyY3VpdG8pIFJGQzMwNDYgYSBldGlxdWV0YS4iCisKKyM6IG9wdGlvbi5jOjM0MQorbXNnaWQgIk1hcCBSRkMzMDQ2IHJlbW90ZS1pZCB0byB0YWcuIgorbXNnc3RyICJUcmF6YXIgcmVtb3RlLWlkIChpZGVudGlmaWNhY2nzbiByZW1vdGEpIFJGQzMwNDYgYSBldGlxdWV0YS4iCisKKyM6IG9wdGlvbi5jOjM0MgorbXNnaWQgIk1hcCBSRkMzOTkzIHN1YnNjcmliZXItaWQgdG8gdGFnLiIKK21zZ3N0ciAiVHJhemFyIHN1YnNjcmliZXItaWQgKGlkZW50aWZpY2FjafNuIGRlIHN1c2NyaXRvcikgUkZDMzk5MyBhIGV0aXF1ZXRhLiIKKworIzogb3B0aW9uLmM6MzQzCisjLCBmdXp6eQorbXNnaWQgIkRvbid0IGRvIERIQ1AgZm9yIGhvc3RzIHdpdGggdGFnIHNldC4iCittc2dzdHIgIk5vIGhhY2VyIERIQ1AgcGFyYSBob3N0cyBjb24gZXRpcXVldGEgZmlqYWRhLiIKKworIzogb3B0aW9uLmM6MzQ0CisjLCBmdXp6eQorbXNnaWQgIkZvcmNlIGJyb2FkY2FzdCByZXBsaWVzIGZvciBob3N0cyB3aXRoIHRhZyBzZXQuIgorbXNnc3RyICJGb3J6YXIgcmVzcHVlc3RhcyBicm9hZGNhc3QgcGFyYSBob3N0cyBjb24gZXRpcXVldGEgZmlqYWRhLiIKKworIzogb3B0aW9uLmM6MzQ1Cittc2dpZCAiRG8gTk9UIGZvcmsgaW50byB0aGUgYmFja2dyb3VuZCwgZG8gTk9UIHJ1biBpbiBkZWJ1ZyBtb2RlLiIKK21zZ3N0ciAiTk8gaGFjZXIgdW4gZm9yayBoYWNpYSBlbCBmb25kbywgTk8gY29ycmVyIGVuIG1vZG8gZGVidWcuIgorCisjOiBvcHRpb24uYzozNDYKK21zZ2lkICJBc3N1bWUgd2UgYXJlIHRoZSBvbmx5IERIQ1Agc2VydmVyIG9uIHRoZSBsb2NhbCBuZXR3b3JrLiIKK21zZ3N0ciAiQXN1bWlyIHF1ZSBzb21vcyBlbCD6bmljbyBzZXJ2aWRvciBESENQIGVuIGxhIHJlZCBsb2NhbC4iCisKKyM6IG9wdGlvbi5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHdoZXJlIHRvIHN0b3JlIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJFc3BlY2lmaWNhciBkb25kZSBhbG1hY2VuYXIgY29uY2VzafNuIERIQ1AgKCVzIHBvciBwcmVkZXRlcm1pbmFkbykuIgorCisjOiBvcHRpb24uYzozNDgKK21zZ2lkICJSZXR1cm4gTVggcmVjb3JkcyBmb3IgbG9jYWwgaG9zdHMuIgorbXNnc3RyICJSZXRvcm5hciBleHBlZGllbnRlcyBNWCBwYXJhIGhvc3RzIGxvY2FsZXMuIgorCisjOiBvcHRpb24uYzozNDkKK21zZ2lkICJTcGVjaWZ5IGFuIE1YIHJlY29yZC4iCittc2dzdHIgIkVzcGVjaWZpY2FyIHVuIGV4cGVkaWVudGUgTVguIgorCisjOiBvcHRpb24uYzozNTAKK21zZ2lkICJTcGVjaWZ5IEJPT1RQIG9wdGlvbnMgdG8gREhDUCBzZXJ2ZXIuIgorbXNnc3RyICJFc3BlY2lmaWNhciBvcGNpb25lcyBCT09UUCBhIHNlcnZpZG9yIERIQ1AuIgorCisjOiBvcHRpb24uYzozNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG8gTk9UIHBvbGwgJXMgZmlsZSwgcmVsb2FkIG9ubHkgb24gU0lHSFVQLiIKK21zZ3N0ciAiTk8gcmV2aXNhciBhcmNoaXZvICVzIHBlcmnzZGljYW1lbnRlLCByZWNhcmdhciBzb2xvIGNvbiBTSUdIVVAuIgorCisjOiBvcHRpb24uYzozNTIKK21zZ2lkICJEbyBOT1QgY2FjaGUgZmFpbGVkIHNlYXJjaCByZXN1bHRzLiIKK21zZ3N0ciAiTk8gYWxtYWNlbmFyIGVuIGNhY2jpIHJlc3VsdGFkb3MgZGUgYvpzcXVlZGFzIGZhbGxpZGFzLiIKKworIzogb3B0aW9uLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSBuYW1lc2VydmVycyBzdHJpY3RseSBpbiB0aGUgb3JkZXIgZ2l2ZW4gaW4gJXMuIgorbXNnc3RyICJVc2FyIHNlcnZpZG9yZXMgRE5TIGVzdHJpY3RhbWVudGUgZW4gZWwg83JkZW4gYnJpbmRhZG8gZW4gJXMuIgorCisjOiBvcHRpb24uYzozNTQKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSBvcHRpb25zIHRvIGJlIHNlbnQgdG8gREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiRXNwZWNpZmljYXIgb3BjaW9uZXMgcGFyYSBzZXIgZW52aWFkYXMgYSBjbGllbnRlcyBESENQLiIKKworIzogb3B0aW9uLmM6MzU1Cittc2dpZCAiREhDUCBvcHRpb24gc2VudCBldmVuIGlmIHRoZSBjbGllbnQgZG9lcyBub3QgcmVxdWVzdCBpdC4iCittc2dzdHIgIk9wY2nzbiBESENQIGVudmlhZGEgYfpuIHNpIGVsIGNsaWVudGUgbm8gbGEgcGlkZS4iCisKKyM6IG9wdGlvbi5jOjM1NgorbXNnaWQgIlNwZWNpZnkgcG9ydCB0byBsaXN0ZW4gZm9yIEROUyByZXF1ZXN0cyBvbiAoZGVmYXVsdHMgdG8gNTMpLiIKK21zZ3N0ciAiRXNwZWNpZmljYXIgcHVlcnRvIGRvbmRlIGVzY3VjaGFyIHBvciBi+nNxdWVkYXMgRE5TICg1MyBwb3IgcHJlZGV0ZXJtaW5hZG8pLiIKKworIzogb3B0aW9uLmM6MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gc3VwcG9ydGVkIFVEUCBwYWNrZXQgc2l6ZSBmb3IgRUROUy4wIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJUYW1h8W8gbeF4aW1vIGRlIHBhcXVldGVzIFVEUCBzb3BvcnRhZG8gcGFyYSBFRE5TLjAgKCVzIHBvciBwcmVkZXRlcm1pbmFkbykuIgorCisjOiBvcHRpb24uYzozNTgKKyMsIGZ1enp5Cittc2dpZCAiTG9nIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiQml0YWNvcmVhciBi+nNxdWVkYXMgRE5TLiIKKworIzogb3B0aW9uLmM6MzU5CisjLCBmdXp6eQorbXNnaWQgIkZvcmNlIHRoZSBvcmlnaW5hdGluZyBwb3J0IGZvciB1cHN0cmVhbSBETlMgcXVlcmllcy4iCittc2dzdHIgIkVuZm9yemFyIGVsIHB1ZXJ0byBvcmlnaW5hbCBwYXJhIGL6c3F1ZWRhcyBETlMgc3ViaWRhLiIKKworIzogb3B0aW9uLmM6MzYwCittc2dpZCAiRG8gTk9UIHJlYWQgcmVzb2x2LmNvbmYuIgorbXNnc3RyICJOTyBsZWVyIHJlc29sdi5jb25mLiIKKworIzogb3B0aW9uLmM6MzYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgcGF0aCB0byByZXNvbHYuY29uZiAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiRXNwZWNpZmljYXIgZWwgcGF0aCBoYWNpYSByZXNvbHYuY29uZiAoJXMgcG9yIHByZWRldGVybWluYWRvKS4iCisKKyM6IG9wdGlvbi5jOjM2MgorIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IHBhdGggdG8gZmlsZSB3aXRoIHNlcnZlcj0gb3B0aW9ucyIKK21zZ3N0ciAiRXNwZWNpZmljYXIgcGF0aCBkZSBhcmNoaXZvIFBJRCAoJXMgcG9yIHByZWRldGVybWluYWRvKS4iCisKKyM6IG9wdGlvbi5jOjM2MworbXNnaWQgIlNwZWNpZnkgYWRkcmVzcyhlcykgb2YgdXBzdHJlYW0gc2VydmVycyB3aXRoIG9wdGlvbmFsIGRvbWFpbnMuIgorbXNnc3RyICJFc3BlY2lmaWNhciBkaXJlY2Np824oZXMpIGRlIHNlcnZpZG9yZXMgc3ViaWRhIGNvbiBkb21pbmlvcyBvcGNpb25hbGVzLiIKKworIzogb3B0aW9uLmM6MzY0CisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgYWRkcmVzcyBvZiB1cHN0cmVhbSBzZXJ2ZXJzIGZvciByZXZlcnNlIGFkZHJlc3MgcXVlcmllcyIKK21zZ3N0ciAiRXNwZWNpZmljYXIgZGlyZWNjafNuKGVzKSBkZSBzZXJ2aWRvcmVzIHN1YmlkYSBjb24gZG9taW5pb3Mgb3BjaW9uYWxlcy4iCisKKyM6IG9wdGlvbi5jOjM2NQorbXNnaWQgIk5ldmVyIGZvcndhcmQgcXVlcmllcyB0byBzcGVjaWZpZWQgZG9tYWlucy4iCittc2dzdHIgIk51bmNhIHJlZW52aWFyIGL6c3F1ZWRhcyBhIGRvbWluaW9zIGVzcGVjaWZpY2Fkb3MuIgorCisjOiBvcHRpb24uYzozNjYKK21zZ2lkICJTcGVjaWZ5IHRoZSBkb21haW4gdG8gYmUgYXNzaWduZWQgaW4gREhDUCBsZWFzZXMuIgorbXNnc3RyICJFc3BlY2lmaWNhciBlbCBkb21pbmlvIHBhcmEgc2VyIGFzaWduYWRvIGVuIGNvbmNlc2nzbiBESENQLiIKKworIzogb3B0aW9uLmM6MzY3Cittc2dpZCAiU3BlY2lmeSBkZWZhdWx0IHRhcmdldCBpbiBhbiBNWCByZWNvcmQuIgorbXNnc3RyICJFc3BlY2lmaWNhciBkZXN0aW5vIHByZWRldGVybWluYWRvIGVuIHVuIGV4cGVkaWVudGUgTVguIgorCisjOiBvcHRpb24uYzozNjgKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzIGZvciByZXBsaWVzIGZyb20gL2V0Yy9ob3N0cy4iCittc2dzdHIgIkVzcGVjaWZpY2FyIHRpZW1wbyBkZSB2aWRhIGVuIHNlZ3VuZG9zIHBhcmEgcmVzcHVlc3RhcyBkZXNkZSAvZXRjL2hvc3RzLiIKKworIzogb3B0aW9uLmM6MzY5CisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG5lZ2F0aXZlIGNhY2hpbmcuIgorbXNnc3RyICJFc3BlY2lmaWNhciB0aWVtcG8gZGUgdmlkYSBlbiBzZWd1bmRvcyBwYXJhIGNhY2jpIG5lZ2F0aXZvLiIKKworIzogb3B0aW9uLmM6MzcwCisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG1heGltdW0gVFRMIHRvIHNlbmQgdG8gY2xpZW50cy4iCittc2dzdHIgIkVzcGVjaWZpY2FyIHRpZW1wbyBkZSB2aWRhIGVuIHNlZ3VuZG9zIHBhcmEgcmVzcHVlc3RhcyBkZXNkZSAvZXRjL2hvc3RzLiIKKworIzogb3B0aW9uLmM6MzcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZSB0byB0aGlzIHVzZXIgYWZ0ZXIgc3RhcnR1cC4gKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIkNhbWJpYXIgYSBlc3RlIHVzdWFyaW8gZGVzcHVlcyBkZWwgaW5pY2lvICglcyBwb3IgcHJlZGV0ZXJtaW5hZG8pLiIKKworIzogb3B0aW9uLmM6MzcyCisjLCBmdXp6eQorbXNnaWQgIk1hcCBESENQIHZlbmRvciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICJUcmF6YXIgY2xhc2UgZGUgdmVuZGVkb3IgREhDUCBhIGV0aXF1ZXRhLiIKKworIzogb3B0aW9uLmM6MzczCittc2dpZCAiRGlzcGxheSBkbnNtYXNxIHZlcnNpb24gYW5kIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4iCittc2dzdHIgIk1vc3RyYXIgaW5mb3JtYWNp824gc29icmUgbGEgdmVyc2nzbiB5IGNvcHlyaWdodCBkZSBkbnNtYXNxLiIKKworIzogb3B0aW9uLmM6Mzc0Cittc2dpZCAiVHJhbnNsYXRlIElQdjQgYWRkcmVzc2VzIGZyb20gdXBzdHJlYW0gc2VydmVycy4iCittc2dzdHIgIlRyYWR1Y2lyIGRpcmVjY2lvbmVzIElQdjQgZGVzZGUgc2Vydmlkb3JlcyBzdWJpZGEuIgorCisjOiBvcHRpb24uYzozNzUKK21zZ2lkICJTcGVjaWZ5IGEgU1JWIHJlY29yZC4iCittc2dzdHIgIkVzcGVjaWZpY2FyIHVuIGV4cGVkaWVudGUgU1JWLiIKKworIzogb3B0aW9uLmM6Mzc2Cittc2dpZCAiRGlzcGxheSB0aGlzIG1lc3NhZ2UuIFVzZSAtLWhlbHAgZGhjcCBmb3Iga25vd24gREhDUCBvcHRpb25zLiIKK21zZ3N0ciAiTW9zdHJhciBlc3RlIG1lbnNhamUuIFVzYXIgLS1oZWxwIGRoY3AgcGFyYSBvcGNpb25lcyBESENQIGNvbm9jaWRhcy4iCisKKyM6IG9wdGlvbi5jOjM3NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBwYXRoIG9mIFBJRCBmaWxlIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJFc3BlY2lmaWNhciBwYXRoIGRlIGFyY2hpdm8gUElEICglcyBwb3IgcHJlZGV0ZXJtaW5hZG8pLiIKKworIzogb3B0aW9uLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgbWF4aW11bSBudW1iZXIgb2YgREhDUCBsZWFzZXMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIkVzcGVjaWZpY2FyIG76bWVybyBt4XhpbW8gZGUgY29uY2VzafNuIERIQ1AgKCVzIHBvciBwcmVkZXRlcm1pbmFkbykuIgorCisjOiBvcHRpb24uYzozNzkKK21zZ2lkICJBbnN3ZXIgRE5TIHF1ZXJpZXMgYmFzZWQgb24gdGhlIGludGVyZmFjZSBhIHF1ZXJ5IHdhcyBzZW50IHRvLiIKK21zZ3N0ciAiUmVzcG9uZGVyIGEgYvpzcXVlZGFzIEROUyBlbiBiYXNlIGEgbGEgaW50ZXJmYXNlIGEgbGEgY3XhbCBmdWVyb24gZW52aWFkYXMuIgorCisjOiBvcHRpb24uYzozODAKK21zZ2lkICJTcGVjaWZ5IFRYVCBETlMgcmVjb3JkLiIKK21zZ3N0ciAiRXNwZWNpZmljYXIgZXhwZWRpZW50ZSBETlMgVFhULiIKKworIzogb3B0aW9uLmM6MzgxCisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgUFRSIEROUyByZWNvcmQuIgorbXNnc3RyICJFc3BlY2lmaWNhciBleHBlZGllbnRlIEROUyBQVFIuIgorCisjOiBvcHRpb24uYzozODIKK21zZ2lkICJHaXZlIEROUyBuYW1lIHRvIElQdjQgYWRkcmVzcyBvZiBpbnRlcmZhY2UuIgorbXNnc3RyICJPdG9yZ2FyIG5vbWJyZSBETlMgYSBkaXJlY2Np824gSVB2NCBkZSBpbnRlcmZhc2UuIgorCisjOiBvcHRpb24uYzozODMKK21zZ2lkICJCaW5kIG9ubHkgdG8gaW50ZXJmYWNlcyBpbiB1c2UuIgorbXNnc3RyICJBY29wbGFyIHNvbG8gYSBpbnRlcmZhc2VzIGVuIHVzby4iCisKKyM6IG9wdGlvbi5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWFkIERIQ1Agc3RhdGljIGhvc3QgaW5mb3JtYXRpb24gZnJvbSAlcy4iCittc2dzdHIgIkxlZXIgaW5mb3JtYWNp824gc29icmUgaG9zdHMgREhDUCBlc3ThdGljb3MgZGVzZGUgJXMuIgorCisjOiBvcHRpb24uYzozODUKK21zZ2lkICJFbmFibGUgdGhlIERCdXMgaW50ZXJmYWNlIGZvciBzZXR0aW5nIHVwc3RyZWFtIHNlcnZlcnMsIGV0Yy4iCittc2dzdHIgIkhhYmlsaXRhciBsYSBpbnRlcmZhc2UgREJ1cyBwYXJhIGZpamFyIHNlcnZpZG9yZXMgc3ViaWRhLCBldGMuIgorCisjOiBvcHRpb24uYzozODYKK21zZ2lkICJEbyBub3QgcHJvdmlkZSBESENQIG9uIHRoaXMgaW50ZXJmYWNlLCBvbmx5IHByb3ZpZGUgRE5TLiIKK21zZ3N0ciAiTm8gcHJvdmVlciBESENQIGVuIGVzdGEgaW50ZXJmYXNlLCBz82xvIHByb3ZlZXIgRE5TLiIKKworIzogb3B0aW9uLmM6Mzg3Cittc2dpZCAiRW5hYmxlIGR5bmFtaWMgYWRkcmVzcyBhbGxvY2F0aW9uIGZvciBib290cC4iCittc2dzdHIgIkhhYmlsaXRhciBhbG9jYWNp824gZGlu4W1pY2EgZGUgZGlyZWNjafNuZXMgcGFyYSBCT09UUC4iCisKKyM6IG9wdGlvbi5jOjM4OAorIywgZnV6enkKK21zZ2lkICJNYXAgTUFDIGFkZHJlc3MgKHdpdGggd2lsZGNhcmRzKSB0byBvcHRpb24gc2V0LiIKK21zZ3N0ciAiVHJhemFyIGRpcmVjY2nzbiBNQUMgKGNvbiBjb21vZO1uZXMpIGEgb3BjafNuIGZpamFkYS4iCisKKyM6IG9wdGlvbi5jOjM4OQorbXNnaWQgIlRyZWF0IERIQ1AgcmVxdWVzdHMgb24gYWxpYXNlcyBhcyBhcnJpdmluZyBmcm9tIGludGVyZmFjZS4iCittc2dzdHIgIlRyYXRhciBwZWRpZG9zIERIQ1AgZW4gYWxpYXMgY29tbyBzaSBsbGVnYXJhbiBkZSBsYSBpbnRlcmZhc2UuIgorCisjOiBvcHRpb24uYzozOTAKK21zZ2lkICJEaXNhYmxlIElDTVAgZWNobyBhZGRyZXNzIGNoZWNraW5nIGluIHRoZSBESENQIHNlcnZlci4iCittc2dzdHIgIkRlc2hhYmlsaXRhciB2ZXJpZmljYWNp824gZGUgZGlyZWNjafNuZXMgcGFyYSBlY2hvIElDTVAgZW4gZWwgc2Vydmlkb3IgREhDUC4iCisKKyM6IG9wdGlvbi5jOjM5MQorIywgZnV6enkKK21zZ2lkICJTaGVsbCBzY3JpcHQgdG8gcnVuIG9uIERIQ1AgbGVhc2UgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uLiIKK21zZ3N0ciAiQXJjaGl2byBndWnzbiBwYXJhIGVqZWN1dGFyIGN1YW5kbyBzZSBjcmVhIG8gZGVzdHJ1eWUgdW5hIGNvbmNlc2nzbiBESENQLiIKKworIzogb3B0aW9uLmM6MzkyCisjLCBmdXp6eQorbXNnaWQgIkx1YSBzY3JpcHQgdG8gcnVuIG9uIERIQ1AgbGVhc2UgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uLiIKK21zZ3N0ciAiQXJjaGl2byBndWnzbiBwYXJhIGVqZWN1dGFyIGN1YW5kbyBzZSBjcmVhIG8gZGVzdHJ1eWUgdW5hIGNvbmNlc2nzbiBESENQLiIKKworIzogb3B0aW9uLmM6MzkzCisjLCBmdXp6eQorbXNnaWQgIlJ1biBsZWFzZS1jaGFuZ2Ugc2NyaXB0cyBhcyB0aGlzIHVzZXIuIgorbXNnc3RyICJDb3JyZXIgYXJjaGl2byBndWnzbiBkZSBjYW1iaW8gZGUgY29uY2VzafNuIGNvbW8gZXN0ZSB1c3VhcmlvLiIKKworIzogb3B0aW9uLmM6Mzk0Cittc2dpZCAiUmVhZCBjb25maWd1cmF0aW9uIGZyb20gYWxsIHRoZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4iCittc2dzdHIgIkxlZXIgY29uZmlndXJhY2nzbiBkZXNkZSB0b2RvcyBsb3MgYXJjaGl2b3MgZW4gZXN0ZSBkaXJlY3RvcmlvLiIKKworIzogb3B0aW9uLmM6Mzk1CisjLCBmdXp6eQorbXNnaWQgIkxvZyB0byB0aGlzIHN5c2xvZyBmYWNpbGl0eSBvciBmaWxlLiAoZGVmYXVsdHMgdG8gREFFTU9OKSIKK21zZ3N0ciAiQml0YWNvcmVhciBhIGVzdGEgZmFjaWxpZGFkIHN5c2xvZyBvIGFyY2hpdm8uIChEQUVNT04gcG9yIHByZWRldGVybWluYWRvKSIKKworIzogb3B0aW9uLmM6Mzk2Cittc2dpZCAiRG8gbm90IHVzZSBsZWFzZWZpbGUuIgorbXNnc3RyICJObyB1c2FyIGFyY2hpdm8gZGUgY29uY2VzafNuLiIKKworIzogb3B0aW9uLmM6Mzk3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IEROUyBxdWVyaWVzLiAoZGVmYXVsdHMgdG8gJXMpIgorbXNnc3RyICJO+m1lcm8gbeF4aW1vIGRlIGL6c3F1ZWRhcyBETlMgc2ltdWx04W5lYXMuICglcyBwb3IgcHJlZGV0ZXJtaW5hZG8pIgorCisjOiBvcHRpb24uYzozOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXIgRE5TIGNhY2hlIHdoZW4gcmVsb2FkaW5nICVzLiIKK21zZ3N0ciAiTGliZXJhciBjYWNo6SBETlMgYWwgcmVjYXJnYXIgJXMuIgorCisjOiBvcHRpb24uYzozOTkKK21zZ2lkICJJZ25vcmUgaG9zdG5hbWVzIHByb3ZpZGVkIGJ5IERIQ1AgY2xpZW50cy4iCittc2dzdHIgIklnbm9yYXIgbm9tYnJlcyBkZSBob3N0IGJyaW5kYWRvcyBwb3IgY2xpZW50ZXMgREhDUC4iCisKKyM6IG9wdGlvbi5jOjQwMAorbXNnaWQgIkRvIE5PVCByZXVzZSBmaWxlbmFtZSBhbmQgc2VydmVyIGZpZWxkcyBmb3IgZXh0cmEgREhDUCBvcHRpb25zLiIKK21zZ3N0ciAiTk8gcmV1dGlsaXphciBjYW1wb3MgZGUgbm9tYnJlIGRlIGFyY2hpdm8geSBzZXJ2aWRvciBwYXJhIG9wY2lvbmVzIERIQ1AgZXh0cmEuIgorCisjOiBvcHRpb24uYzo0MDEKK21zZ2lkICJFbmFibGUgaW50ZWdyYXRlZCByZWFkLW9ubHkgVEZUUCBzZXJ2ZXIuIgorbXNnc3RyICJIYWJpbGl0YXIgc2Vydmlkb3IgaW50ZWdyYWRvIFRGVFAgc29sby1sZWN0dXJhLiIKKworIzogb3B0aW9uLmM6NDAyCittc2dpZCAiRXhwb3J0IGZpbGVzIGJ5IFRGVFAgb25seSBmcm9tIHRoZSBzcGVjaWZpZWQgc3VidHJlZS4iCittc2dzdHIgIkV4cG9ydGFyIGFyY2hpdm9zIHbtYSBURlRQIHNvbG8gZGVsIHN1Yi3hcmJvbCBlc3BlY2lmaWNhZG8uIgorCisjOiBvcHRpb24uYzo0MDMKK21zZ2lkICJBZGQgY2xpZW50IElQIGFkZHJlc3MgdG8gdGZ0cC1yb290LiIKK21zZ3N0ciAiQWdyZWdhciBJUCBkZSBjbGllbnRlIGEgdGZ0cC1yb290LiIKKworIzogb3B0aW9uLmM6NDA0Cittc2dpZCAiQWxsb3cgYWNjZXNzIG9ubHkgdG8gZmlsZXMgb3duZWQgYnkgdGhlIHVzZXIgcnVubmluZyBkbnNtYXNxLiIKK21zZ3N0ciAiUGVybWl0aXIgYWNjZXNvIHNvbG8gYSBhcmNoaXZvcyBwZXJ0ZW5lY2llbnRlcyBhbCB1c3VhcmlvIHF1ZSBjb3JyZSBkbnNtYXNxLiIKKworIzogb3B0aW9uLmM6NDA1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25uY3VycmVudCBURlRQIHRyYW5zZmVycyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiTvptZXJvIG3heGltbyBkZSB0cmFuc2ZlcmVuY2lhcyBURlRQIHNpbXVsdOFuZWFzICglcyBwb3IgcHJlZGV0ZXJtaW5hZG8pLiIKKworIzogb3B0aW9uLmM6NDA2Cittc2dpZCAiRGlzYWJsZSB0aGUgVEZUUCBibG9ja3NpemUgZXh0ZW5zaW9uLiIKK21zZ3N0ciAiRGVzaGFiaWxpdGFyIGxhIGV4dGVuc2nzbiBURlRQIGJsb2Nrc2l6ZSAodGFtYfFvIGRlIGJsb3F1ZSkuIgorCisjOiBvcHRpb24uYzo0MDcKK21zZ2lkICJDb252ZXJ0IFRGVFAgZmlsZW5hbWVzIHRvIGxvd2VyY2FzZSIKK21zZ3N0ciAiQ29udmVydGlyIGEgbWlu+nNjdWxhcyBsb3Mgbm9tYnJlcyBkZSBhcmNoaXZvcyBURlRQIgorCisjOiBvcHRpb24uYzo0MDgKK21zZ2lkICJFcGhlbWVyYWwgcG9ydCByYW5nZSBmb3IgdXNlIGJ5IFRGVFAgdHJhbnNmZXJzLiIKK21zZ3N0ciAiUmFuZ28gZGUgcHVlcnRvcyBlZu1tZXJvcyBwYXJhIHNlciB1c2Fkb3MgZW4gdHJhbnNmZXJlbmNpYXMgVEZUUC4iCisKKyM6IG9wdGlvbi5jOjQwOQorbXNnaWQgIkV4dHJhIGxvZ2dpbmcgZm9yIERIQ1AuIgorbXNnc3RyICJMb2cgZXh0cmEgcGFyYSBESENQLiIKKworIzogb3B0aW9uLmM6NDEwCittc2dpZCAiRW5hYmxlIGFzeW5jLiBsb2dnaW5nOyBvcHRpb25hbGx5IHNldCBxdWV1ZSBsZW5ndGguIgorbXNnc3RyICJIYWJpbGl0YXIgcmVnaXN0cm8gYXPtbmNyb25vOyBvcGNpb25hbG1lbnRlIGZpamFyIHRhbWHxbyBkZSBjb2xhLiIKKworIzogb3B0aW9uLmM6NDExCittc2dpZCAiU3RvcCBETlMgcmViaW5kaW5nLiBGaWx0ZXIgcHJpdmF0ZSBJUCByYW5nZXMgd2hlbiByZXNvbHZpbmcuIgorbXNnc3RyICJEZXRlbmVyIHJldmluY3VsYWNp824gRE5TLiBGaWx0cmFyIHJhbmdvcyBkZSBJUCBwcml2YWRvcyBhbCByZXNvbHZlci4iCisKKyM6IG9wdGlvbi5jOjQxMgorbXNnaWQgIkFsbG93IHJlYmluZGluZyBvZiAxMjcuMC4wLjAvOCwgZm9yIFJCTCBzZXJ2ZXJzLiIKK21zZ3N0ciAiUGVybWl0aXIgcmV2aW5jdWxhY2nzbiBkZSAxMjcuMC4wLjAvOCwgcGFyYSBzZXJ2aWRvcmVzIFJCTC4iCisKKyM6IG9wdGlvbi5jOjQxMworbXNnaWQgIkluaGliaXQgRE5TLXJlYmluZCBwcm90ZWN0aW9uIG9uIHRoaXMgZG9tYWluLiIKK21zZ3N0ciAiSW5oaWJpciBwcm90ZWNjafNuIGRlIHJldmluY3VsYWNp824gRE5TIGVuIGVzdGUgZG9taW5pby4iCisKKyM6IG9wdGlvbi5jOjQxNAorbXNnaWQgIkFsd2F5cyBwZXJmb3JtIEROUyBxdWVyaWVzIHRvIGFsbCBzZXJ2ZXJzLiIKK21zZ3N0ciAiU2llbXByZSByZWFsaXphciBi+nNxdWVkYXMgRE5TIGEgdG9kb3MgbG9zIHNlcnZpZG9yZXMuIgorCisjOiBvcHRpb24uYzo0MTUKKyMsIGZ1enp5Cittc2dpZCAiU2V0IHRhZyBpZiBjbGllbnQgaW5jbHVkZXMgbWF0Y2hpbmcgb3B0aW9uIGluIHJlcXVlc3QuIgorbXNnc3RyICJGaWphciBldGlxdWV0YSBzaSBjbGllbnRlIGluY2x1eWUgb3BjafNuIGNvaW5jaWRlbnRlIGVuIHBlZGlkby4iCisKKyM6IG9wdGlvbi5jOjQxNgorbXNnaWQgIlVzZSBhbHRlcm5hdGl2ZSBwb3J0cyBmb3IgREhDUC4iCittc2dzdHIgIlVzYXIgcHVlcnRvcyBhbHRlcm5hdGl2b3MgcGFyYSBESENQLiIKKworIzogb3B0aW9uLmM6NDE3CisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgTkFQVFIgRE5TIHJlY29yZC4iCittc2dzdHIgIkVzcGVjaWZpY2FyIGV4cGVkaWVudGUgRE5TIE5BUFRSLiIKKworIzogb3B0aW9uLmM6NDE4Cittc2dpZCAiU3BlY2lmeSBsb3dlc3QgcG9ydCBhdmFpbGFibGUgZm9yIEROUyBxdWVyeSB0cmFuc21pc3Npb24uIgorbXNnc3RyICJFc3BlY2lmaWNhciBwdWVydG8gbeFzIGJham8gZGlzcG9uaWJsZSBwYXJhIHRyYW5zbWlzafNuIGRlIGL6c3F1ZWRhcyBETlMuIgorCisjOiBvcHRpb24uYzo0MTkKK21zZ2lkICJVc2Ugb25seSBmdWxseSBxdWFsaWZpZWQgZG9tYWluIG5hbWVzIGZvciBESENQIGNsaWVudHMuIgorbXNnc3RyICJVc2FyIHNvbG8gbm9tYnJlcyBkZSBkb21pbmlvIGNvbXBsZXRhbWVudGUgY2FsaWZpY2Fkb3MgcGFyYSBjbGllbnRlcyBESENQLiIKKworIzogb3B0aW9uLmM6NDIwCittc2dpZCAiR2VuZXJhdGUgaG9zdG5hbWVzIGJhc2VkIG9uIE1BQyBhZGRyZXNzIGZvciBuYW1lbGVzcyBjbGllbnRzLiIKK21zZ3N0ciAiR2VuZXJhciBob3N0bmFtZXMgYmFzYWRvcyBlbiBkaXJlY2Npb25lcyBNQUMgcGFyYSBjbGllbnRlcyBzaW4gbm9tYnJlLiIKKworIzogb3B0aW9uLmM6NDIxCittc2dpZCAiVXNlIHRoZXNlIERIQ1AgcmVsYXlzIGFzIGZ1bGwgcHJveGllcy4iCittc2dzdHIgIlVzYXIgZXN0b3MgcmVsYXlzIERIQ1AgY29tbyBwcm94aWVzIGNvbXBsZXRvcy4iCisKKyM6IG9wdGlvbi5jOjQyMgorbXNnaWQgIlJlbGF5IERIQ1AgcmVxdWVzdHMgdG8gYSByZW1vdGUgc2VydmVyIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyMworbXNnaWQgIlNwZWNpZnkgYWxpYXMgbmFtZSBmb3IgTE9DQUwgRE5TIG5hbWUuIgorbXNnc3RyICJFc3BlY2lmaWNhciBub21icmUgYWxpYXMgcGFyYSBub21icmUgRE5TIExPQ0FMLiIKKworIzogb3B0aW9uLmM6NDI0CisjLCBmdXp6eQorbXNnaWQgIlByb21wdCB0byBzZW5kIHRvIFBYRSBjbGllbnRzLiIKK21zZ3N0ciAiQXZpc28gYSBzZXIgZW52aWFkbyBhIGNsaWVudGVzIFBYRS4iCisKKyM6IG9wdGlvbi5jOjQyNQorbXNnaWQgIkJvb3Qgc2VydmljZSBmb3IgUFhFIG1lbnUuIgorbXNnc3RyICJTZXJ2aWNpbyBkZSBhcnJhbnF1ZSBwYXJhIG1lbvogUFhFLiIKKworIzogb3B0aW9uLmM6NDI2Cittc2dpZCAiQ2hlY2sgY29uZmlndXJhdGlvbiBzeW50YXguIgorbXNnc3RyICJSZXZpc2FyIHNpbnRheGlzIGRlIGNvbmZpZ3VyYWNp824uIgorCisjOiBvcHRpb24uYzo0MjcKK21zZ2lkICJBZGQgcmVxdWVzdG9yJ3MgTUFDIGFkZHJlc3MgdG8gZm9yd2FyZGVkIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiQfFhZGlyIGRpcmVjY2lvbmVzIE1BQyBkZSBsb3MgcGV0aWNpb25hcmlvcyBhIGxvcyBmaWx0cm9zIEROUyBlbnZpYWRvcyIKKworIzogb3B0aW9uLmM6NDI4CisjLCBmdXp6eQorbXNnaWQgIkFkZCByZXF1ZXN0b3IncyBJUCBzdWJuZXQgdG8gZm9yd2FyZGVkIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiQfFhZGlyIGRpcmVjY2lvbmVzIE1BQyBkZSBsb3MgcGV0aWNpb25hcmlvcyBhIGxvcyBmaWx0cm9zIEROUyBlbnZpYWRvcyIKKworIzogb3B0aW9uLmM6NDI5CisjLCBmdXp6eQorbXNnaWQgIlByb3h5IEROU1NFQyB2YWxpZGF0aW9uIHJlc3VsdHMgZnJvbSB1cHN0cmVhbSBuYW1lc2VydmVycy4iCittc2dzdHIgIlRyYWR1Y2lyIGRpcmVjY2lvbmVzIElQdjQgZGVzZGUgc2Vydmlkb3JlcyBzdWJpZGEuIgorCisjOiBvcHRpb24uYzo0MzAKK21zZ2lkICJBdHRlbXB0IHRvIGFsbG9jYXRlIHNlcXVlbnRpYWwgSVAgYWRkcmVzc2VzIHRvIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIkludGVudG8gZGUgaW5zdGF1cmFyIGRpcmVjY2lvbmVzIElQIHNlY3VlbmNpYWxlcyBhIGNsaWVudGUgREhDUCIKKworIzogb3B0aW9uLmM6NDMxCittc2dpZCAiQ29weSBjb25uZWN0aW9uLXRyYWNrIG1hcmsgZnJvbSBxdWVyaWVzIHRvIHVwc3RyZWFtIGNvbm5lY3Rpb25zLiIKK21zZ3N0ciAiQ29waWFyIGxhIG1hcmNhIGRlIGNvbm5lY3Rpb24tdHJhY2sgZGVzZGUgbG9zIGZpbHRyb3MgYSBsYXMgY29uZXhpb25lcyBzYWxpZW50ZXMiCisKKyM6IG9wdGlvbi5jOjQzMgorbXNnaWQgIkFsbG93IERIQ1AgY2xpZW50cyB0byBkbyB0aGVpciBvd24gREROUyB1cGRhdGVzLiIKK21zZ3N0ciAiUGVybWl0ZSBhIGNsaWVudGVzIERIQ1AgcmVhbGl6YXIgc3VzIHByb3BpYXMgYWN0dWFsaXphY2lvbmVzIERETlMiCisKKyM6IG9wdGlvbi5jOjQzMworbXNnaWQgIlNlbmQgcm91dGVyLWFkdmVydGlzZW1lbnRzIGZvciBpbnRlcmZhY2VzIGRvaW5nIERIQ1B2NiIKK21zZ3N0ciAiRW52aWFyIGFudW5jaW9zIGRlbCByb3V0ZXIgYSBsb3MgaW50ZXJmYXNlcyByZWFsaXphbmRvIERIQ1B2NiIKKworIzogb3B0aW9uLmM6NDM0Cittc2dpZCAiU3BlY2lmeSBEVUlEX0VOLXR5cGUgREhDUHY2IHNlcnZlciBEVUlEIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzNQorIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IGhvc3QgKEEvQUFBQSBhbmQgUFRSKSByZWNvcmRzIgorbXNnc3RyICJFc3BlY2lmaWNhciB1biBleHBlZGllbnRlIE1YLiIKKworIzogb3B0aW9uLmM6NDM2CisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgYXJiaXRyYXJ5IEROUyByZXNvdXJjZSByZWNvcmQiCittc2dzdHIgIkVzcGVjaWZpY2FyIGV4cGVkaWVudGUgRE5TIFRYVC4iCisKKyM6IG9wdGlvbi5jOjQzNworIywgZnV6enkKK21zZ2lkICJCaW5kIHRvIGludGVyZmFjZXMgaW4gdXNlIC0gY2hlY2sgZm9yIG5ldyBpbnRlcmZhY2VzIgorbXNnc3RyICJpbnRlcmZhc2UgZGVzY29ub2NpZGEgJXMgZW4gYnJpZGdlLWludGVyZmFzZSIKKworIzogb3B0aW9uLmM6NDM4Cittc2dpZCAiRXhwb3J0IGxvY2FsIG5hbWVzIHRvIGdsb2JhbCBETlMiCittc2dzdHIgIkV4cG9ydGFyIG5vbWJyZXMgRE5TIGxvY2FsZXMgYSBnbG9iYWxlcyIKKworIzogb3B0aW9uLmM6NDM5Cittc2dpZCAiRG9tYWluIHRvIGV4cG9ydCB0byBnbG9iYWwgRE5TIgorbXNnc3RyICJEb21pbmlvIGEgZXhwb3J0YXIgYSBETlMgZ2xvYmFsIgorCisjOiBvcHRpb24uYzo0NDAKK21zZ2lkICJTZXQgVFRMIGZvciBhdXRob3JpdGF0aXZlIHJlcGxpZXMiCittc2dzdHIgIkZpamFyIFRUTCBwYXJhIHJlc3B1ZXN0YXMgYXV0b3JpdGFyaWFzIgorCisjOiBvcHRpb24uYzo0NDEKK21zZ2lkICJTZXQgYXV0aG9yaXRpdmUgem9uZSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiRmlqYXIgaW5mb3JtYWNp824gZGUgem9uYSBhdXRvcml0YXJpYSIKKworIzogb3B0aW9uLmM6NDQyCittc2dpZCAiU2Vjb25kYXJ5IGF1dGhvcml0YXRpdmUgbmFtZXNlcnZlcnMgZm9yIGZvcndhcmQgZG9tYWlucyIKK21zZ3N0ciAiTm9tYnJlcyBkZSBzZXJ2aWRvciBzZWN1bmRhcmlvIGF1dG9yaXRhdG9yaW9zIHBhcmEgZG9taW5pb3MgZW52aWFkb3MiCisKKyM6IG9wdGlvbi5jOjQ0MworbXNnaWQgIlBlZXJzIHdoaWNoIGFyZSBhbGxvd2VkIHRvIGRvIHpvbmUgdHJhbnNmZXIiCittc2dzdHIgIkNvbGVnYXMgYXV0b3JpemFkb3MgYSBsYSB6b25hIGRlIHRyYW5zZmVyZW5jaWEgKHRyYW5zZmVyKSIKKworIzogb3B0aW9uLmM6NDQ0Cittc2dpZCAiU3BlY2lmeSBpcHNldHMgdG8gd2hpY2ggbWF0Y2hpbmcgZG9tYWlucyBzaG91bGQgYmUgYWRkZWQiCittc2dzdHIgIkVzcGVjaWZpY2FyIGxvcyBpcHNldHMgY29pbmNpZGVudGVzIGVuIGRvbWluaW8gcXVlIGRlYnLtYW4gc2VyIGHxYWRpZG9zIgorCisjOiBvcHRpb24uYzo0NDUKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSBhIGRvbWFpbiBhbmQgYWRkcmVzcyByYW5nZSBmb3Igc3ludGhlc2lzZWQgbmFtZXMiCittc2dzdHIgIkVzcGVjaWZpY2FyIGRvbWluaW8geSByYW5nbyBkZSBkaXJlY2Npb25lcyBwYXJhIGxvcyBub21icmVzIGFjcvNuaW1vcyIKKworIzogb3B0aW9uLmM6NDQ2Cittc2dpZCAiQWN0aXZhdGUgRE5TU0VDIHZhbGlkYXRpb24iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ3Cittc2dpZCAiU3BlY2lmeSB0cnVzdCBhbmNob3Iga2V5IGRpZ2VzdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ4Cittc2dpZCAiRGlzYWJsZSB1cHN0cmVhbSBjaGVja2luZyBmb3IgRE5TU0VDIGRlYnVnZ2luZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ5Cittc2dpZCAiRW5zdXJlIGFuc3dlcnMgd2l0aG91dCBETlNTRUMgYXJlIGluIHVuc2lnbmVkIHpvbmVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTAKK21zZ2lkICJEb24ndCBjaGVjayBETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMgdW50aWwgZmlyc3QgY2FjaGUtcmVsb2FkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1MgorbXNnaWQgIlNwZWNpZnkgREhDUHY2IHByZWZpeCBjbGFzcyIKK21zZ3N0ciAiRXNwZWNpZmljYXIgcHJlZmlqbyBkZSBjbGFzZSBESENQdjYiCisKKyM6IG9wdGlvbi5jOjQ1NAorbXNnaWQgIlNldCBwcmlvcml0eSwgcmVzZW5kLWludGVydmFsIGFuZCByb3V0ZXItbGlmZXRpbWUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU1Cittc2dpZCAiRG8gbm90IGxvZyByb3V0aW5lIERIQ1AuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1NgorbXNnaWQgIkRvIG5vdCBsb2cgcm91dGluZSBESENQdjYuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1NworbXNnaWQgIkRvIG5vdCBsb2cgUkEuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1OAorbXNnaWQgIkFjY2VwdCBxdWVyaWVzIG9ubHkgZnJvbSBkaXJlY3RseS1jb25uZWN0ZWQgbmV0d29ya3MiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU5Cittc2dpZCAiRGV0ZWN0IGFuZCByZW1vdmUgRE5TIGZvcndhcmRpbmcgbG9vcHMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogZG5zbWFzcSBbb3B0aW9uc11cbiIKKyJcbiIKK21zZ3N0ciAiIgorIk1vZG8gZGUgdXNvOiBkbnNtYXNxIFtvcGNpb25lc11cbiIKKyJcbiIKKworIzogb3B0aW9uLmM6NjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSBzaG9ydCBvcHRpb25zIG9ubHkgb24gdGhlIGNvbW1hbmQgbGluZS5cbiIKK21zZ3N0ciAiVXNhciBvcGNpb25lcyBjb3J0YXMgc29sbyBlbiBsYSBs7W5lYSBkZSBjb21hbmRvcy5cbiIKKworIzogb3B0aW9uLmM6NjY1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJWYWxpZCBvcHRpb25zIGFyZTpcbiIKK21zZ3N0ciAiT3BjaW9uZXMgduFsaWRhcyBzb24gOlxuIgorCisjOiBvcHRpb24uYzo3MjIgb3B0aW9uLmM6NzI2Cittc2dpZCAiYmFkIHBvcnQiCittc2dzdHIgInB1ZXJ0byBlcnLzbmVvIgorCisjOiBvcHRpb24uYzo3NTMgb3B0aW9uLmM6Nzg1Cittc2dpZCAiaW50ZXJmYWNlIGJpbmRpbmcgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAidmluY3VsYWNp824gZGUgaW50ZXJmYXNlIG5vIGVzdOEgc29wb3J0YWRvIgorCisjOiBvcHRpb24uYzo3NjIgb3B0aW9uLmM6MzQ5NAorIywgZnV6enkKK21zZ2lkICJiYWQgaW50ZXJmYWNlIG5hbWUiCittc2dzdHIgIm5vbWJyZSBkZSBpbnRlcmZhc2UgZXJy825lbyIKKworIzogb3B0aW9uLmM6NzkyCisjLCBmdXp6eQorbXNnaWQgImJhZCBhZGRyZXNzIgorbXNnc3RyICJkaXJlY2Np824gSVAgZXJy825lYSIKKworIzogb3B0aW9uLmM6OTc0Cittc2dpZCAidW5zdXBwb3J0ZWQgZW5jYXBzdWxhdGlvbiBmb3IgSVB2NiBvcHRpb24iCittc2dzdHIgIkVuY2Fwc3VsYWNp824gbm8gc29wb3J0YWRhIHBhcmEgb3BjafNuIElQdjYiCisKKyM6IG9wdGlvbi5jOjk4OAorbXNnaWQgImJhZCBkaGNwLW9wdGlvbiIKK21zZ3N0ciAib3BjafNuIGRoY3Atb3B0aW9uIGVycvNuZWEiCisKKyM6IG9wdGlvbi5jOjEwNTYKKyMsIGZ1enp5Cittc2dpZCAiYmFkIElQIGFkZHJlc3MiCittc2dzdHIgImRpcmVjY2nzbiBJUCBlcnLzbmVhIgorCisjOiBvcHRpb24uYzoxMDU5IG9wdGlvbi5jOjExOTcgb3B0aW9uLmM6MjgxMgorIywgZnV6enkKK21zZ2lkICJiYWQgSVB2NiBhZGRyZXNzIgorbXNnc3RyICJkaXJlY2Np824gSVAgZXJy825lYSIKKworIzogb3B0aW9uLmM6MTIyNCBvcHRpb24uYzoxMzE4Cittc2dpZCAiYmFkIGRvbWFpbiBpbiBkaGNwLW9wdGlvbiIKK21zZ3N0ciAiZG9taW5pbyBlcnLzbmVvIGVuIGRoY3Atb3B0aW9uIgorCisjOiBvcHRpb24uYzoxMzU2Cittc2dpZCAiZGhjcC1vcHRpb24gdG9vIGxvbmciCittc2dzdHIgIm9wY2nzbiBkaGNwLW9wdGlvbiBkZW1hc2lhZG8gbGFyZ2EiCisKKyM6IG9wdGlvbi5jOjEzNjMKK21zZ2lkICJpbGxlZ2FsIGRoY3AtbWF0Y2giCittc2dzdHIgImRoY3AtbWF0Y2ggaWxlZ2FsIgorCisjOiBvcHRpb24uYzoxNDI1Cittc2dpZCAiaWxsZWdhbCByZXBlYXRlZCBmbGFnIgorbXNnc3RyICJvcGNp824gcmVwZXRpZGEgaWxlZ2FsIgorCisjOiBvcHRpb24uYzoxNDMzCittc2dpZCAiaWxsZWdhbCByZXBlYXRlZCBrZXl3b3JkIgorbXNnc3RyICJwYWxhYnJhIGNsYXZlIHJlcGV0aWRhIGlsZWdhbCIKKworIzogb3B0aW9uLmM6MTQ5NSBvcHRpb24uYzo0MDkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYWNjZXNzIGRpcmVjdG9yeSAlczogJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFjY2VkZXIgYSBkaXJlY3RvcmlvICVzOiAlcyIKKworIzogb3B0aW9uLmM6MTU0MSB0ZnRwLmM6NDkzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYWNjZXNzICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYWNjZWRlciAlczogJXMiCisKKyM6IG9wdGlvbi5jOjE1ODgKK21zZ2lkICJzZXR0aW5nIGxvZyBmYWNpbGl0eSBpcyBub3QgcG9zc2libGUgdW5kZXIgQW5kcm9pZCIKK21zZ3N0ciAibGEgY3JlYWNp824gZGUgdW4gcmVnaXN0cm8gbm8gZXMgcG9zaWJsZSBlbiBBbmRyb2lkIgorCisjOiBvcHRpb24uYzoxNTk3Cittc2dpZCAiYmFkIGxvZyBmYWNpbGl0eSIKK21zZ3N0ciAidWJpY2FjafNuIGRlbCByZWdpc3RybyBlcnLzbmVhIgorCisjOiBvcHRpb24uYzoxNjUwCittc2dpZCAiYmFkIE1YIHByZWZlcmVuY2UiCittc2dzdHIgInByZWZlcmVuY2lhIE1YIGVycvNuZWEiCisKKyM6IG9wdGlvbi5jOjE2NTUKK21zZ2lkICJiYWQgTVggbmFtZSIKK21zZ3N0ciAibm9tYnJlIE1YIGVycvNuZW8iCisKKyM6IG9wdGlvbi5jOjE2NjkKK21zZ2lkICJiYWQgTVggdGFyZ2V0IgorbXNnc3RyICJkZXN0aW5vIE1YIGVycvNuZW8iCisKKyM6IG9wdGlvbi5jOjE2ODEKK21zZ2lkICJjYW5ub3QgcnVuIHNjcmlwdHMgdW5kZXIgdUNsaW51eCIKK21zZ3N0ciAibm8gc2UgcHVlZGVuIGNvcnJlciBhcmNoaXZvcyAnc2NyaXB0JyBiYWpvIHVDbGludXgiCisKKyM6IG9wdGlvbi5jOjE2ODMKK21zZ2lkICJyZWNvbXBpbGUgd2l0aCBIQVZFX1NDUklQVCBkZWZpbmVkIHRvIGVuYWJsZSBsZWFzZS1jaGFuZ2Ugc2NyaXB0cyIKK21zZ3N0ciAicmVjb21waWxhciBjb24gSEFWRV9TQ1JJUFQgZGVmaW5pZG8gcGFyYSBoYWJpbGl0YXIgZ3Vp825lcyBkZSBjYW1iaW8gZGUgY29uY2VzafNuIgorCisjOiBvcHRpb24uYzoxNjg3CisjLCBmdXp6eQorbXNnaWQgInJlY29tcGlsZSB3aXRoIEhBVkVfTFVBU0NSSVBUIGRlZmluZWQgdG8gZW5hYmxlIEx1YSBzY3JpcHRzIgorbXNnc3RyICJyZWNvbXBpbGFyIGNvbiBIQVZFX1NDUklQVCBkZWZpbmlkbyBwYXJhIGhhYmlsaXRhciAnc2NyaXB0cycgZW4gTHVhIgorCisjOiBvcHRpb24uYzoxOTI4IG9wdGlvbi5jOjE5NjYgb3B0aW9uLmM6MjAxNQorIywgZnV6enkKK21zZ2lkICJiYWQgcHJlZml4IgorbXNnc3RyICJwcmVmaWpvIGVycvNuZW8iCisKKyM6IG9wdGlvbi5jOjIyODkKKyMsIGZ1enp5Cittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9JUFNFVCBkZWZpbmVkIHRvIGVuYWJsZSBpcHNldCBkaXJlY3RpdmVzIgorbXNnc3RyICJyZWNvbXBpbGFyIGNvbiBIQVZFX1NDUklQVCBkZWZpbmlkbyBwYXJhIGhhYmlsaXRhciBkaXJlY3RpdmFzIGlwc2V0IgorCisjOiBvcHRpb24uYzoyNDY5CisjLCBmdXp6eQorbXNnaWQgImJhZCBwb3J0IHJhbmdlIgorbXNnc3RyICJyYW5nbyBkZSBwdWVydG9zIGVycvNuZW8iCisKKyM6IG9wdGlvbi5jOjI0ODUKK21zZ2lkICJiYWQgYnJpZGdlLWludGVyZmFjZSIKK21zZ3N0ciAib3BjafNuIGJyaWRnZS1pbnRlcmZhY2UgKGludGVyZmFzZSBwdWVudGUpIGVycvNuZWEiCisKKyM6IG9wdGlvbi5jOjI1NDUKK21zZ2lkICJvbmx5IG9uZSB0YWcgYWxsb3dlZCIKK21zZ3N0ciAic29sbyB1bmEgZXRpcXVldGEgcGVybWl0aWRhIgorCisjOiBvcHRpb24uYzoyNTY1IG9wdGlvbi5jOjI1Nzcgb3B0aW9uLmM6MjY4MyBvcHRpb24uYzoyNzI0Cittc2dpZCAiYmFkIGRoY3AtcmFuZ2UiCittc2dzdHIgIm9wY2nzbiBkaGNwLXJhbmdlIChyYW5nbyBESENQKSBlcnLzbmVhIgorCisjOiBvcHRpb24uYzoyNTkyCittc2dpZCAiaW5jb25zaXN0ZW50IERIQ1AgcmFuZ2UiCittc2dzdHIgInJhbmdvIERIQ1AgaW5jb25zaXN0ZW50ZSIKKworIzogb3B0aW9uLmM6MjY1MQorbXNnaWQgInByZWZpeCBsZW5ndGggbXVzdCBiZSBleGFjdGx5IDY0IGZvciBSQSBzdWJuZXRzIgorbXNnc3RyICJsYSBsb25naXR1ZCBkZWwgcHJlZmlqbyBkZWJlIHNlciA2NCBleGFjdG8gcGFyYSBzdWJyZWRlcyBSQSIKKworIzogb3B0aW9uLmM6MjY1MworbXNnaWQgInByZWZpeCBsZW5ndGggbXVzdCBiZSBleGFjdGx5IDY0IGZvciBzdWJuZXQgY29uc3RydWN0b3JzIgorbXNnc3RyICJsYSBsb25naXR1ZCBkZWwgcHJlZmlqbyBkZWJlIHNlciA2NCBleGFjdG8gcGFyYSBzdWJyZWRlcyBjb25zdHJ1Y3RvcmFzIgorCisjOiBvcHRpb24uYzoyNjU3Cittc2dpZCAicHJlZml4IGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0IDY0IgorbXNnc3RyICJsYSBsb25naXR1ZCBkZWwgcHJlZmlqbyBkZWJlIHNlciBhbCBtZW5vcyA2NCIKKworIzogb3B0aW9uLmM6MjY2MAorIywgZnV6enkKK21zZ2lkICJpbmNvbnNpc3RlbnQgREhDUHY2IHJhbmdlIgorbXNnc3RyICJyYW5nbyBESENQIGluY29uc2lzdGVudGUiCisKKyM6IG9wdGlvbi5jOjI2NzEKK21zZ2lkICJwcmVmaXggbXVzdCBiZSB6ZXJvIHdpdGggXCJjb25zdHJ1Y3RvcjpcIiBhcmd1bWVudCIKK21zZ3N0ciAicHJlZmlqbyBkZWJlIHNlciBjZXJvIGNvbiBhcmd1bWVudG8gXCJjb25zdHJ1Y3RvcjpcIiIKKworIzogb3B0aW9uLmM6Mjc4MiBvcHRpb24uYzoyODMwCisjLCBmdXp6eQorbXNnaWQgImJhZCBoZXggY29uc3RhbnQiCittc2dzdHIgImNvbnN0YW50ZSBoZXhhZGVjaW1hbCBlcnLzbmVhIgorCisjOiBvcHRpb24uYzoyODA0Cittc2dpZCAiY2Fubm90IG1hdGNoIHRhZ3MgaW4gLS1kaGNwLWhvc3QiCittc2dzdHIgIm5vIGNvaW5jaWRlbiBldGlxdWV0YXMgZW4gLS1kaGNwLWhvc3QiCisKKyM6IG9wdGlvbi5jOjI4NTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBkaGNwLWhvc3QgSVAgYWRkcmVzcyAlcyIKK21zZ3N0ciAiZGlyZWNjafNuIElQIGR1cGxpY2FkYSAlcyBlbiAlcy4iCisKKyM6IG9wdGlvbi5jOjI5MTAKKyMsIGZ1enp5Cittc2dpZCAiYmFkIERIQ1AgaG9zdCBuYW1lIgorbXNnc3RyICJub21icmUgZGUgaG9zdCBESENQIGVycvNuZW8iCisKKyM6IG9wdGlvbi5jOjI5OTIKKyMsIGZ1enp5Cittc2dpZCAiYmFkIHRhZy1pZiIKK21zZ3N0ciAiZXRpcXVldGEgdGFnLWlmIGVycvNuZWEiCisKKyM6IG9wdGlvbi5jOjMzMTYgb3B0aW9uLmM6MzcxMAorbXNnaWQgImludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgIm76bWVybyBkZSBwdWVydG8gaW524WxpZG8iCisKKyM6IG9wdGlvbi5jOjMzNzgKKyMsIGZ1enp5Cittc2dpZCAiYmFkIGRoY3AtcHJveHkgYWRkcmVzcyIKK21zZ3N0ciAiZGlyZWNjafNuIElQIGVycvNuZWEiCisKKyM6IG9wdGlvbi5jOjM0MDQKKyMsIGZ1enp5Cittc2dpZCAiQmFkIGRoY3AtcmVsYXkiCittc2dzdHIgIm9wY2nzbiBkaGNwLXJhbmdlIChyYW5nbyBESENQKSBlcnLzbmVhIgorCisjOiBvcHRpb24uYzozNDMwCittc2dpZCAiYmFkIFJBLXBhcmFtcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDM5Cittc2dpZCAiYmFkIERVSUQiCittc2dzdHIgIkRVSUQgZXJy825lbyIKKworIzogb3B0aW9uLmM6MzQ4MQorIywgZnV6enkKK21zZ2lkICJpbnZhbGlkIGFsaWFzIHJhbmdlIgorbXNnc3RyICJyYW5nbyBhbGlhcyBpbnbhbGlkbyIKKworIzogb3B0aW9uLmM6MzUzNQorbXNnaWQgImJhZCBDTkFNRSIKK21zZ3N0ciAiQ05BTUUgZXJy825lbyIKKworIzogb3B0aW9uLmM6MzU0MAorbXNnaWQgImR1cGxpY2F0ZSBDTkFNRSIKK21zZ3N0ciAiQ05BTUUgZHVwbGljYWRvIgorCisjOiBvcHRpb24uYzozNTYwCisjLCBmdXp6eQorbXNnaWQgImJhZCBQVFIgcmVjb3JkIgorbXNnc3RyICJyZWdpc3RybyBQVFIgZXJy825lbyIKKworIzogb3B0aW9uLmM6MzU5MQorIywgZnV6enkKK21zZ2lkICJiYWQgTkFQVFIgcmVjb3JkIgorbXNnc3RyICJyZWdpc3RybyBOQVBUUiBlcnLzbmVvIgorCisjOiBvcHRpb24uYzozNjI1CisjLCBmdXp6eQorbXNnaWQgImJhZCBSUiByZWNvcmQiCittc2dzdHIgInJlZ2lzdHJvIFBUUiBlcnLzbmVvIgorCisjOiBvcHRpb24uYzozNjU1Cittc2dpZCAiYmFkIFRYVCByZWNvcmQiCittc2dzdHIgInJlZ2lzdHJvIFRYVCBlcnLzbmVvIgorCisjOiBvcHRpb24uYzozNjk2Cittc2dpZCAiYmFkIFNSViByZWNvcmQiCittc2dzdHIgInJlZ2lzdHJvIFNSViBlcnLzbmVvIgorCisjOiBvcHRpb24uYzozNzAzCittc2dpZCAiYmFkIFNSViB0YXJnZXQiCittc2dzdHIgImRlc3Rpbm8gU1JWIGVycvNuZW8iCisKKyM6IG9wdGlvbi5jOjM3MTcKK21zZ2lkICJpbnZhbGlkIHByaW9yaXR5IgorbXNnc3RyICJwcmlvcmlkYWQgaW524WxpZGEiCisKKyM6IG9wdGlvbi5jOjM3MjQKK21zZ2lkICJpbnZhbGlkIHdlaWdodCIKK21zZ3N0ciAicGVzbyBpbnbhbGlkbyIKKworIzogb3B0aW9uLmM6Mzc0OAorIywgZnV6enkKK21zZ2lkICJCYWQgaG9zdC1yZWNvcmQiCittc2dzdHIgInJlZ2lzdHJvIFBUUiBlcnLzbmVvIgorCisjOiBvcHRpb24uYzozNzY1CisjLCBmdXp6eQorbXNnaWQgIkJhZCBuYW1lIGluIGhvc3QtcmVjb3JkIgorbXNnc3RyICJub21icmUgZXJy825lbyBlbiAlcyIKKworIzogb3B0aW9uLmM6MzgyNgorIywgZnV6enkKK21zZ2lkICJiYWQgdHJ1c3QgYW5jaG9yIgorbXNnc3RyICJyYW5nbyBkZSBwdWVydG9zIGVycvNuZW8iCisKKyM6IG9wdGlvbi5jOjM4NDAKK21zZ2lkICJiYWQgSEVYIGluIHRydXN0IGFuY2hvciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODUwCisjLCBmdXp6eQorbXNnaWQgInVuc3VwcG9ydGVkIG9wdGlvbiAoY2hlY2sgdGhhdCBkbnNtYXNxIHdhcyBjb21waWxlZCB3aXRoIERIQ1AvVEZUUC9ETlNTRUMvREJ1cyBzdXBwb3J0KSIKK21zZ3N0ciAib3BjafNuIG5vIHNvcG9ydGFkYSAodmVyaWZpY2FyIHF1ZSBkbnNtYXNxIGZ1ZSBjb21waWxhZG8gY29uIHNvcG9ydGUgcGFyYSBESENQL1RGVFAvREJ1cykiCisKKyM6IG9wdGlvbi5jOjM5MDkKK21zZ2lkICJtaXNzaW5nIFwiIgorbXNnc3RyICJmYWx0YSBcIiIKKworIzogb3B0aW9uLmM6Mzk2NgorbXNnaWQgImJhZCBvcHRpb24iCittc2dzdHIgIm9wY2nzbiBlcnLzbmVhIgorCisjOiBvcHRpb24uYzozOTY4Cittc2dpZCAiZXh0cmFuZW91cyBwYXJhbWV0ZXIiCittc2dzdHIgInBhcuFtZXRybyBleHRyYfFvIgorCisjOiBvcHRpb24uYzozOTcwCittc2dpZCAibWlzc2luZyBwYXJhbWV0ZXIiCittc2dzdHIgInBhcuFtZXRybyBhdXNlbnRlIgorCisjOiBvcHRpb24uYzozOTcyCisjLCBmdXp6eQorbXNnaWQgImlsbGVnYWwgb3B0aW9uIgorbXNnc3RyICJvcGNp824gZXJy825lYSIKKworIzogb3B0aW9uLmM6Mzk3OQorbXNnaWQgImVycm9yIgorbXNnc3RyICJlcnJvciIKKworIzogb3B0aW9uLmM6Mzk4MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIGF0IGxpbmUgJWQgb2YgJXMiCittc2dzdHIgIiVzIGVuIGztbmVhICVkIGRlICUlcyIKKworIzogb3B0aW9uLmM6NDA0NSBvcHRpb24uYzo0MTY4IHRmdHAuYzo2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJXM6ICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBsZWVyICVzOiAlcyIKKworIzogb3B0aW9uLmM6NDIyOSBvcHRpb24uYzo0MjY1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJyZWFkICVzIgorbXNnc3RyICJsZWUgJXMiCisKKyM6IG9wdGlvbi5jOjQzMzEKK21zZ2lkICJqdW5rIGZvdW5kIGluIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiYmFzdXJhIGVuY29udHJhZGEgZW4gbGluZWEgZGUgY29tYW5kbyIKKworIzogb3B0aW9uLmM6NDM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIHZlcnNpb24gJXMgICVzXG4iCittc2dzdHIgIlZlcnNp824gZG5zbWFzcSAlcyAgJXNcbiIKKworIzogb3B0aW9uLmM6NDM2NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvbXBpbGUgdGltZSBvcHRpb25zOiAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiT3BjaW9uZXMgZGUgY29tcGlsYWNp824gJXNcbiIKKyJcbiIKKworIzogb3B0aW9uLmM6NDM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS5cbiIKK21zZ3N0ciAiRXN0ZSBzb2Z0d2FyZSB2aWVuZSBTSU4gTklOR1VOQSBHQVJBTlRJQS5cbiIKKworIzogb3B0aW9uLmM6NDM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0XG4iCittc2dzdHIgIkRuc21hc3EgZXMgc29mdHdhcmUgbGlicmUsIHkgdXN0ZWQgZXN04SBhdXRvcml6YWRvIGEgcmVkaXN0cmlidWlybG9cbiIKKworIzogb3B0aW9uLmM6NDM3MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyIG9yIDMuXG4iCittc2dzdHIgImJham8gbG9zIHTpcm1pbm9zIGRlIGxhIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzafNuIDIgbyAzLlxuIgorCisjOiBvcHRpb24uYzo0MzgxCittc2dpZCAidHJ5IC0taGVscCIKK21zZ3N0ciAicHJ1ZWJlIC0taGVscCIKKworIzogb3B0aW9uLmM6NDM4MworbXNnaWQgInRyeSAtdyIKK21zZ3N0ciAicHJ1ZWJlIC13IgorCisjOiBvcHRpb24uYzo0Mzg1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29tbWFuZCBsaW5lIG9wdGlvbnM6ICVzIgorbXNnc3RyICJvcGNpb25lcyBkZSBs7W5lYSBkZSBjb21hbmRvcyBlcnLzbmVhczogJXMiCisKKyM6IG9wdGlvbi5jOjQ0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCBob3N0LW5hbWU6ICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBvYnRlbmVyIGhvc3QtbmFtZSAobm9tYnJlIGRlIGhvc3QpOiAlcyIKKworIzogb3B0aW9uLmM6NDQ2MgorbXNnaWQgIm9ubHkgb25lIHJlc29sdi5jb25mIGZpbGUgYWxsb3dlZCBpbiBuby1wb2xsIG1vZGUuIgorbXNnc3RyICJzb2xvIHVuIGFyY2hpdm8gcmVzb2x2LmNvbmYgZXN04SBwZXJtaXRpZG8gZW4gbW9kbyBuby1wb2xsLiIKKworIzogb3B0aW9uLmM6NDQ3MgorbXNnaWQgIm11c3QgaGF2ZSBleGFjdGx5IG9uZSByZXNvbHYuY29uZiB0byByZWFkIGRvbWFpbiBmcm9tLiIKK21zZ3N0ciAiZGViZSBoYWJlciBleOFjdGFtZW50ZSB1biByZXNvbHYuY29uZiBkZXNkZSBkb25kZSBsZWVyIGRvbWluaW8uIgorCisjOiBvcHRpb24uYzo0NDc1IG5ldHdvcmsuYzoxNTA2IGRoY3AuYzo3NjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBsZWVyICVzOiAlcyIKKworIzogb3B0aW9uLmM6NDQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzZWFyY2ggZGlyZWN0aXZlIGZvdW5kIGluICVzIgorbXNnc3RyICJuaW5ndW5hIGRpcmVjdGl2YSBkZSBi+nNxdWVkYSBlbmNvbnRyYWRhIGVuICVzIgorCisjOiBvcHRpb24uYzo0NTEzCisjLCBmdXp6eQorbXNnaWQgInRoZXJlIG11c3QgYmUgYSBkZWZhdWx0IGRvbWFpbiB3aGVuIC0tZGhjcC1mcWRuIGlzIHNldCIKK21zZ3N0ciAiZGViZSBoYWJlciB1biBkb21pbmlvIHByZWRldGVybWluYWRvIGN1YW5kbyAtLWRoY3AtZnFkbiBlc3ThIGZpamFkbyIKKworIzogb3B0aW9uLmM6NDUyMgorbXNnaWQgInN5bnRheCBjaGVjayBPSyIKK21zZ3N0ciAicmV2aXNp824gZGUgc2ludGF4aXMgT0siCisKKyM6IGZvcndhcmQuYzoxMTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZW5kIHBhY2tldDogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gZXNjdWNoYXIgZW4gc29ja2V0OiAlcyIKKworIzogZm9yd2FyZC5jOjU3NAorbXNnaWQgImRpc2NhcmRpbmcgRE5TIHJlcGx5OiBzdWJuZXQgb3B0aW9uIG1pc21hdGNoIgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzo1OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibmFtZXNlcnZlciAlcyByZWZ1c2VkIHRvIGRvIGEgcmVjdXJzaXZlIHF1ZXJ5IgorbXNnc3RyICJzZXJ2aWRvciBETlMgJXMgcmVjaGF68yByZWFsaXphciB1bmEgYvpzcXVlZGEgcmVjdXJzaXZhIgorCisjOiBmb3J3YXJkLmM6NjI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJwb3NzaWJsZSBETlMtcmViaW5kIGF0dGFjayBkZXRlY3RlZDogJXMiCittc2dzdHIgInBvc2libGUgYXRhcXVlIGRlIHJldmluY3VsYWNp824gRE5TIGRldGVjdGFkbyIKKworIzogZm9yd2FyZC5jOjExMzIgZm9yd2FyZC5jOjE2NjMKK21zZ2lkICJJZ25vcmluZyBxdWVyeSBmcm9tIG5vbi1sb2NhbCBuZXR3b3JrIgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzoyMTAxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IEROUyBxdWVyaWVzIHJlYWNoZWQgKG1heDogJWQpIgorbXNnc3RyICJO+m1lcm8gbeF4aW1vIGRlIGL6c3F1ZWRhcyBETlMgc2ltdWx04W5lYXMgYWxjYW56YWRvLiAoJXMgcG9yIHByZWRldGVybWluYWRvKSIKKworIzogbmV0d29yay5jOjcxNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaXN0ZW5pbmcgc29ja2V0IGZvciAlczogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gY3JlYXIgdW4gevNjYWxvIGRlIGVzY3VjaGE6ICVzIgorCisjOiBuZXR3b3JrLmM6MTAyMQorIywgYy1mb3JtYXQKK21zZ2lkICJMT1VEIFdBUk5JTkc6IGxpc3RlbmluZyBvbiAlcyBtYXkgYWNjZXB0IHJlcXVlc3RzIHZpYSBpbnRlcmZhY2VzIG90aGVyIHRoYW4gJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjEwMjgKK21zZ2lkICJMT1VEIFdBUk5JTkc6IHVzZSAtLWJpbmQtZHluYW1pYyByYXRoZXIgdGhhbiAtLWJpbmQtaW50ZXJmYWNlcyB0byBhdm9pZCBETlMgYW1wbGlmaWNhdGlvbiBhdHRhY2tzIHZpYSB0aGVzZSBpbnRlcmZhY2UocykiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjEwMzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IG5vIGFkZHJlc3NlcyBmb3VuZCBmb3IgaW50ZXJmYWNlICVzIgorbXNnc3RyICJ1c2FuZG8gZGlyZWNjaW9uZXMgbG9jYWxlcyBzb2xvIHBhcmEgJXMgJXMiCisKKyM6IG5ldHdvcmsuYzoxMDk1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpbnRlcmZhY2UgJXMgZmFpbGVkIHRvIGpvaW4gREhDUHY2IG11bHRpY2FzdCBncm91cDogJXMiCittc2dzdHIgImVsIGludGVyZmFzZSAlIGZhbGzzIGFsIHVuaXJzZSBhbCBncnVwbyBtdWx0aWNhc3QgREhDUHY2OiAlcyIKKworIzogbmV0d29yay5jOjEyODkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIHNlcnZlciBzb2NrZXQgZm9yICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBhY29wbGFyIGFsIHrzY2FsbyBkZWwgc2Vydmlkb3IgcGFyYSAlczogJXMiCisKKyM6IG5ldHdvcmsuYzoxNDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIG5hbWVzZXJ2ZXIgJXMgLSBsb2NhbCBpbnRlcmZhY2UiCittc2dzdHIgImlnbm9yYW5kbyBzZXJ2aWRvciBETlMgJXMgLSBpbnRlcmZhc2UgbG9jYWwiCisKKyM6IG5ldHdvcmsuYzoxNDU1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBuYW1lc2VydmVyICVzIC0gY2Fubm90IG1ha2UvYmluZCBzb2NrZXQ6ICVzIgorbXNnc3RyICJpZ25vcmFuZG8gc2Vydmlkb3IgRE5TICVzIC0gbm8gc2UgcHVlZGUgY3JlYXIvYWNvcGxhciB682NhbG86ICVzIgorCisjOiBuZXR3b3JrLmM6MTQ2OAorbXNnaWQgInVucXVhbGlmaWVkIgorbXNnc3RyICJubyBjdWFsaWZpY2FkbyIKKworIzogbmV0d29yay5jOjE0NjgKK21zZ2lkICJuYW1lcyIKK21zZ3N0ciAibm9tYnJlcyIKKworIzogbmV0d29yay5jOjE0NzAKK21zZ2lkICJkZWZhdWx0IgorbXNnc3RyICJwcmVkZXRlcm1pbmFkbyIKKworIzogbmV0d29yay5jOjE0NzIKK21zZ2lkICJkb21haW4iCittc2dzdHIgImRvbWluaW8iCisKKyM6IG5ldHdvcmsuYzoxNDc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIGxvY2FsIGFkZHJlc3NlcyBvbmx5IGZvciAlcyAlcyIKK21zZ3N0ciAidXNhbmRvIGRpcmVjY2lvbmVzIGxvY2FsZXMgc29sbyBwYXJhICVzICVzIgorCisjOiBuZXR3b3JrLmM6MTQ3NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgc3RhbmRhcmQgbmFtZXNlcnZlcnMgZm9yICVzICVzIgorbXNnc3RyICJ1c2FuZG8gbm9tYnJlcyBlc3ThbmRhciAlcyMlZCBwYXJhICVzICVzIgorCisjOiBuZXR3b3JrLmM6MTQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkIGZvciAlcyAlcyIKK21zZ3N0ciAidXNhbmRvIG5vbWJyZSBkZSBzZXJ2aWRvciAlcyMlZCBwYXJhICVzICVzIgorCisjOiBuZXR3b3JrLmM6MTQ4MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTk9UIHVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQgLSBxdWVyeSBsb29wIGRldGVjdGVkIgorbXNnc3RyICJ1c2FuZG8gbm9tYnJlIGRlIHNlcnZpZG9yICVzIyVkIHBhcmEgJXMgJXMiCisKKyM6IG5ldHdvcmsuYzoxNDg2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkKHZpYSAlcykiCittc2dzdHIgInVzYW5kbyBub21icmUgZGUgc2Vydmlkb3IgJXMjJWQodu1hICVzKSIKKworIzogbmV0d29yay5jOjE0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCIKK21zZ3N0ciAidXNhbmRvIG5vbWJyZSBkZSBzZXJ2aWRvciAlcyMlZCIKKworIzogZG5zbWFzcS5jOjE1NAorbXNnaWQgIk5vIHRydXN0IGFuY2hvcnMgcHJvdmlkZWQgZm9yIEROU1NFQyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTU3Cittc2dpZCAiQ2Fubm90IHJlZHVjZSBjYWNoZSBzaXplIGZyb20gZGVmYXVsdCB3aGVuIEROU1NFQyBlbmFibGVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxNTkKKyMsIGZ1enp5Cittc2dpZCAiRE5TU0VDIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0ROU1NFQyBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIkRCdXMgbm8gZGlzcG9uaWJsZTogZmlqYXIgSEFWRV9EQlVTIGVuIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjE2NQorIywgZnV6enkKK21zZ2lkICJURlRQIHNlcnZlciBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9URlRQIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAic2Vydmlkb3IgVEZUUCBubyBkaXNwb25pYmxlOiBmaWphciBIQVZFX1RGVFAgZW4gc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MTcwCittc2dpZCAiQ2Fubm90IHVzZSAtLWNvbm50cmFjayBBTkQgLS1xdWVyeS1wb3J0IgorbXNnc3RyICJObyBwdWVkZSB1c2FyIC0tY29ubnRyYWNrIEFORCAtLXF1ZXJ5LXBvcnQiCisKKyM6IGRuc21hc3EuYzoxNzMKKyMsIGZ1enp5Cittc2dpZCAiQ29ubnRyYWNrIHN1cHBvcnQgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfQ09OTlRSQUNLIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAic2Vydmlkb3IgVEZUUCBubyBkaXNwb25pYmxlOiBmaWphciBIQVZFX1RGVFAgZW4gc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MTc4CisjLCBmdXp6eQorbXNnaWQgImFzeWNocm9ub3VzIGxvZ2dpbmcgaXMgbm90IGF2YWlsYWJsZSB1bmRlciBTb2xhcmlzIgorbXNnc3RyICJyZWdpc3RybyBhc+1uY3Jvbm8gbm8gZXN04SBkaXNwb25pYmxlIGJham8gU29sYXJpcyIKKworIzogZG5zbWFzcS5jOjE4MworIywgZnV6enkKK21zZ2lkICJhc3ljaHJvbm91cyBsb2dnaW5nIGlzIG5vdCBhdmFpbGFibGUgdW5kZXIgQW5kcm9pZCIKK21zZ3N0ciAicmVnaXN0cm8gYXPtbmNyb25vIG5vIGVzdOEgZGlzcG9uaWJsZSBiYWpvIFNvbGFyaXMiCisKKyM6IGRuc21hc3EuYzoxODgKKyMsIGZ1enp5Cittc2dpZCAiYXV0aG9yaXRhdGl2ZSBETlMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfQVVUSCBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIkRCdXMgbm8gZGlzcG9uaWJsZTogZmlqYXIgSEFWRV9EQlVTIGVuIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjE5MworIywgZnV6enkKK21zZ2lkICJMb29wIGRldGVjdGlvbiBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9MT09QIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAic2Vydmlkb3IgVEZUUCBubyBkaXNwb25pYmxlOiBmaWphciBIQVZFX1RGVFAgZW4gc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MjAxCittc2dpZCAiem9uZSBzZXJpYWwgbXVzdCBiZSBjb25maWd1cmVkIGluIC0tYXV0aC1zb2EiCittc2dzdHIgInpvbmEgc2VyaWUgZGViZSBzZXIgY29uZmlndXJhZGEgZW4gLS1hdXRoLXNvYSIKKworIzogZG5zbWFzcS5jOjIxOQorbXNnaWQgImRoY3AtcmFuZ2UgY29uc3RydWN0b3Igbm90IGF2YWlsYWJsZSBvbiB0aGlzIHBsYXRmb3JtIgorbXNnc3RyICJjb25zdHJ1Y3RvciByYW5nbyBkaGNwIG5vIGRpc3BvbmlibGUgZW4gZXN0YSBwbGF0YWZvcm1hIgorCisjOiBkbnNtYXNxLmM6MjYyCittc2dpZCAiY2Fubm90IHNldCAtLWJpbmQtaW50ZXJmYWNlcyBhbmQgLS1iaW5kLWR5bmFtaWMiCittc2dzdHIgIm5vIHB1ZWRlIHVzYXIgLS1iaW5kLWludGVyZmFzZXMgeSAtLWJpbmQtZHluYW1pYyIKKworIzogZG5zbWFzcS5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluZCBsaXN0IG9mIGludGVyZmFjZXM6ICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGVuY29udHJhciBsaXN0YSBkZSBpbnRlcmZhc2VzOiAlcyIKKworIzogZG5zbWFzcS5jOjI3NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGludGVyZmFjZSAlcyIKK21zZ3N0ciAiaW50ZXJmYXNlIGRlc2Nvbm9jaWRhICVzIgorCisjOiBkbnNtYXNxLmM6MzMwIGRuc21hc3EuYzo5NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiREJ1cyBlcnJvcjogJXMiCittc2dzdHIgImVycm9yIERCdXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MzMzCittc2dpZCAiREJ1cyBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9EQlVTIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiREJ1cyBubyBkaXNwb25pYmxlOiBmaWphciBIQVZFX0RCVVMgZW4gc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MzYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdXNlciBvciBncm91cDogJXMiCittc2dzdHIgInVzdWFyaW8gbyBncnVwbyBkZXNjb25vY2lkbzogJXMiCisKKyM6IGRuc21hc3EuYzo0MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvIGZpbGVzeXN0ZW0gcm9vdDogJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGNhbWJpYXIgZGlyZWN0b3JpbyBhIHJh7XogZGUgc2lzdGVtYSBkZSBhcmNoaXZvczogJXMiCisKKyM6IGRuc21hc3EuYzo2NTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgRE5TIGRpc2FibGVkIgorbXNnc3RyICJpbmljaWFkbywgdmVyc2nzbiAlcyBETlMgZGVzaGFiaWxpdGFkbyIKKworIzogZG5zbWFzcS5jOjY1NQorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIGNhY2hlc2l6ZSAlZCIKK21zZ3N0ciAiaW5pY2lhZG8sIHZlcnNp824gJXMgdGFtYfFvIGRlIGNhY2jpICVkIgorCisjOiBkbnNtYXNxLmM6NjU3CisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGUgZGlzYWJsZWQiCittc2dzdHIgImluaWNpYWRvLCB2ZXJzafNuICVzIGNhY2jpIGRlc2hhYmlsaXRhZG8iCisKKyM6IGRuc21hc3EuYzo2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tcGlsZSB0aW1lIG9wdGlvbnM6ICVzIgorbXNnc3RyICJvcGNpb25lcyBkZSBjb21waWxhY2nzbjogJXMiCisKKyM6IGRuc21hc3EuYzo2NjUKK21zZ2lkICJEQnVzIHN1cHBvcnQgZW5hYmxlZDogY29ubmVjdGVkIHRvIHN5c3RlbSBidXMiCittc2dzdHIgInNvcG9ydGUgREJ1cyBoYWJpbGl0YWRvOiBjb25lY3RhZG8gYSBidXMgZGUgc2lzdGVtYSIKKworIzogZG5zbWFzcS5jOjY2NworbXNnaWQgIkRCdXMgc3VwcG9ydCBlbmFibGVkOiBidXMgY29ubmVjdGlvbiBwZW5kaW5nIgorbXNnc3RyICJzb3BvcnRlIERCdXMgaGFiaWxpdGFkbzogY29uZXhp824gYSBidXMgcGVuZGllbnRlIgorCisjOiBkbnNtYXNxLmM6NjcyCittc2dpZCAiRE5TIHNlcnZpY2UgbGltaXRlZCB0byBsb2NhbCBzdWJuZXRzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo2NzcKK21zZ2lkICJETlNTRUMgdmFsaWRhdGlvbiBlbmFibGVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo2NzkKK21zZ2lkICJETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMgbm90IGNoZWNrZWQgdW50aWwgZmlyc3QgY2FjaGUgcmVsb2FkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo2ODQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGZhaWxlZCB0byBjaGFuZ2Ugb3duZXIgb2YgJXM6ICVzIgorbXNnc3RyICJhZHZlcnRlbmNpYTogbm8gc2UgcHVkbyBjYW1iaWFyIHByb3BpZXRhcmlvIGRlICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjY4OAorbXNnaWQgInNldHRpbmcgLS1iaW5kLWludGVyZmFjZXMgb3B0aW9uIGJlY2F1c2Ugb2YgT1MgbGltaXRhdGlvbnMiCittc2dzdHIgImZpamFuZG8gb3BjafNuIC0tYmluZC1pbnRlcmZhc2VzIGRlYmlkbyBhIGxpbWl0YWNpb25lcyBkZSBzaXN0ZW1hIG9wZXJhdGl2byIKKworIzogZG5zbWFzcS5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBpbnRlcmZhY2UgJXMgZG9lcyBub3QgY3VycmVudGx5IGV4aXN0IgorbXNnc3RyICJhZHZlcnRlbmNpYTogaW50ZXJmYXNlICVzIG5vIGV4aXN0ZSBhY3R1YWxtZW50ZSIKKworIzogZG5zbWFzcS5jOjcwMworbXNnaWQgIndhcm5pbmc6IGlnbm9yaW5nIHJlc29sdi1maWxlIGZsYWcgYmVjYXVzZSBuby1yZXNvbHYgaXMgc2V0IgorbXNnc3RyICJhZHZlcnRlbmNpYTogaWdub3JhbmRvIG9wY2nzbiByZXNvbHYtZmlsZSBwb3JxdWUgbm8tcmVzb2x2IGVzdOEgZmlqYWRvIgorCisjOiBkbnNtYXNxLmM6NzA2CisjLCBmdXp6eQorbXNnaWQgIndhcm5pbmc6IG5vIHVwc3RyZWFtIHNlcnZlcnMgY29uZmlndXJlZCIKK21zZ3N0ciAiYWR2ZXJ0ZW5jaWE6IG5pbmf6biBzZXJ2aWRvciBkZSBzdWJpZGEgY29uZmlndXJhZG8iCisKKyM6IGRuc21hc3EuYzo3MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXN5bmNocm9ub3VzIGxvZ2dpbmcgZW5hYmxlZCwgcXVldWUgbGltaXQgaXMgJWQgbWVzc2FnZXMiCittc2dzdHIgInJlZ2lzdHJvIGFz7W5jcm9ubyBoYWJpbGl0YWRvLCBlbCBs7W1pdGUgZGUgbGEgY29sYSBlcyAlZCBtZW5zYWplcyIKKworIzogZG5zbWFzcS5jOjczMQorbXNnaWQgIklQdjYgcm91dGVyIGFkdmVydGlzZW1lbnQgZW5hYmxlZCIKK21zZ3N0ciAiQW51bmNpbyBkZSByb3V0ZXIgSVB2NiBoYWJpbGl0YWRvIgorCisjOiBkbnNtYXNxLmM6NzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AsIHNvY2tldHMgYm91bmQgZXhjbHVzaXZlbHkgdG8gaW50ZXJmYWNlICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3NTMKK21zZ2lkICJyb290IGlzICIKK21zZ3N0ciAicm9vdCBlc3ThICIKKworIzogZG5zbWFzcS5jOjc1MworIywgZnV6enkKK21zZ2lkICJlbmFibGVkIgorbXNnc3RyICJoYWJpbGl0YWRvIgorCisjOiBkbnNtYXNxLmM6NzU1Cittc2dpZCAic2VjdXJlIG1vZGUiCittc2dzdHIgIm1vZG8gc2VndXJvIgorCisjOiBkbnNtYXNxLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlc3RyaWN0aW5nIG1heGltdW0gc2ltdWx0YW5lb3VzIFRGVFAgdHJhbnNmZXJzIHRvICVkIgorbXNnc3RyICJsaW1pdGFuZG8gbvptZXJvIG3heGltbyBkZSB0cmFuc2ZlcmVuY2lhcyBURlRQIHNpbXVsdOFuZWFzIGEgJWQiCisKKyM6IGRuc21hc3EuYzo5NTYKK21zZ2lkICJjb25uZWN0ZWQgdG8gc3lzdGVtIERCdXMiCittc2dzdHIgImNvbmVjdGFkbyBhIERCdXMgZGUgc2lzdGVtYSIKKworIzogZG5zbWFzcS5jOjExMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZvcmsgaW50byBiYWNrZ3JvdW5kOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgaGFjZXIgZm9yayBlbiBiYWNrZ3JvdW5kOiAlcyIKKworIzogZG5zbWFzcS5jOjExMDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgaGVscGVyOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjcmVhciBheXVkYW50ZTogJXMiCisKKyM6IGRuc21hc3EuYzoxMTEyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzZXR0aW5nIGNhcGFiaWxpdGllcyBmYWlsZWQ6ICVzIgorbXNnc3RyICJjb25maWd1cmFjafNuIGRlIGNhcGFjaWRhZGVzIGhhIGZhbGxhZG86ICVzIgorCisjOiBkbnNtYXNxLmM6MTExNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSB1c2VyLWlkIHRvICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjYW1iaWFyIHVzZXItaWQgYSAlczogJXMiCisKKyM6IGRuc21hc3EuYzoxMTE4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2hhbmdlIGdyb3VwLWlkIHRvICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBjYW1iaWFyIGdyb3VwLWlkIGEgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTEyMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gcGlkZmlsZSAlczogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gYWJyaXIgYXJjaGl2byBQSUQgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTEyNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gbG9nICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgYWJyaXIgcmVnaXN0cm8gJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTEyNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgTHVhIHNjcmlwdDogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gY2FyZ2FyIHNjcmlwdCBMdWEgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJURlRQIGRpcmVjdG9yeSAlcyBpbmFjY2Vzc2libGU6ICVzIgorbXNnc3RyICJkaXJlY3RvcmlvIFRGVFAgJSBpbmFjY2VzaWJsZTogJXMiCisKKyM6IGRuc21hc3EuYzoxMTUxCittc2dpZCAibm93IGNoZWNraW5nIEROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTIxOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAic2NyaXB0IHByb2Nlc3Mga2lsbGVkIGJ5IHNpZ25hbCAlZCIKK21zZ3N0ciAicHJvY2VzbyBzY3JpcHQgZWxpbWluYWRvIHBvciBzZfFhbCAlZCIKKworIzogZG5zbWFzcS5jOjEyMjIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInNjcmlwdCBwcm9jZXNzIGV4aXRlZCB3aXRoIHN0YXR1cyAlZCIKK21zZ3N0ciAicHJvY2VzbyBzY3JpcHQgc2FsafMgY29uIGNvbiBlc3RhZG8gJWQiCisKKyM6IGRuc21hc3EuYzoxMjI2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlY3V0ZSAlczogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gZWplY3V0YXIgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTI4MQorbXNnaWQgImV4aXRpbmcgb24gcmVjZWlwdCBvZiBTSUdURVJNIgorbXNnc3RyICJzYWxpZW5kbyBhbCByZWNpYmlyIFNJR1RFUk0iCisKKyM6IGRuc21hc3EuYzoxMzA5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWNjZXNzICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBhY2NlZGVyICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjEzMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyAlcyIKK21zZ3N0ciAibGV5ZW5kbyAlcyIKKworIzogZG5zbWFzcS5jOjEzNTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5vIHNlcnZlcnMgZm91bmQgaW4gJXMsIHdpbGwgcmV0cnkiCittc2dzdHIgIm5pbmf6biBzZXJ2aWRvciBlbmNvbnRyYWRvIGVuICVzLCBzZSByZWludGVudGFy4SIKKworIzogZGhjcC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBjcmVhciB682NhbG8gREhDUDogJXMiCisKKyM6IGRoY3AuYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IG9wdGlvbnMgb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGZpamFyIG9wY2lvbmVzIGVuIHrzY2FsbyBESENQOiAlcyIKKworIzogZGhjcC5jOjg5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX1JFVVNFe0FERFJ8UE9SVH0gb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGZpamFyIFNPX1JFVVNFe0FERFJ8UE9SVH0gZW4gevNjYWxvIERIQ1A6ICVzIgorCisjOiBkaGNwLmM6MTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIERIQ1Agc2VydmVyIHNvY2tldDogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gYWNvcGxhciB682NhbG8gZGUgc2Vydmlkb3IgREhDUDogJXMiCisKKyM6IGRoY3AuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBJQ01QIHJhdyBzb2NrZXQ6ICVzLiIKK21zZ3N0ciAibm8gc2UgcHVlZGUgY3JlYXIgevNjYWxvIHB1cm8gSUNNUDogJXMuIgorCisjOiBkaGNwLmM6MjM5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGludGVyZmFjZSAlcyBpbiBicmlkZ2UtaW50ZXJmYWNlIgorbXNnc3RyICJpbnRlcmZhc2UgZGVzY29ub2NpZGEgJXMgZW4gYnJpZGdlLWludGVyZmFjZSIKKworIzogZGhjcC5jOjI3OAorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHBhY2tldCByZWNlaXZlZCBvbiAlcyB3aGljaCBoYXMgbm8gYWRkcmVzcyIKK21zZ3N0ciAiUGFxdWV0ZSBESENQIHJlY2liaWRvIGVuICVzIHF1ZSBubyB0aWVuZSBkaXJlY2Np824iCisKKyM6IGRoY3AuYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQVJQLWNhY2hlIGluamVjdGlvbiBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo1MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByYW5nZSAlcyAtLSAlcyBpcyBub3QgY29uc2lzdGVudCB3aXRoIG5ldG1hc2sgJXMiCittc2dzdHIgInJhbmdvIERIQ1AgJXMgLS0gJXMgbm8gY29pbmNpZGUgY29uIG3hc2NhcmEgZGUgc3VicmVkICVzIgorCisjOiBkaGNwLmM6ODA3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJiYWQgbGluZSBhdCAlcyBsaW5lICVkIgorbXNnc3RyICJs7W5lYSBlcnLzbmVhIGVuICVzIGztbmVhICVkIgorCisjOiBkaGNwLmM6ODUwCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nICVzIGxpbmUgJWQsIGR1cGxpY2F0ZSBuYW1lIG9yIElQIGFkZHJlc3MiCittc2dzdHIgImlnbm9yYW5kbyAlcyBs7W5lYSAlZCwgbm9tYnJlIG8gZGlyZWNjafNuIElQIGR1cGxpY2FkYSIKKworIzogZGhjcC5jOjk5NCByZmMzMzE1LmM6MjA4OQorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlbGF5ICVzIC0+ICVzIgorbXNnc3RyICJESENQIHJlbGF5ICVzIC0+ICVzIgorCisjOiBsZWFzZS5jOjYxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBvciBjcmVhdGUgbGVhc2UgZmlsZSAlczogJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGFicmlyIG8gY3JlYXIgYXJjaGl2byBkZSBjb25jZXNp824gJXM6ICVzIgorCisjOiBsZWFzZS5jOjEzNAorbXNnaWQgInRvbyBtYW55IHN0b3JlZCBsZWFzZXMiCittc2dzdHIgImRlbWFzaWFkYXMgY29uY2VzaW9uZXMgYWxtYWNlbmFkYXMiCisKKyM6IGxlYXNlLmM6MTY1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcnVuIGxlYXNlLWluaXQgc2NyaXB0ICVzOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgZWplY3V0YXIgYXJjaGl2byBzY3JpcHQgbGVhc2UtaW5pdCAlczogJXMiCisKKyM6IGxlYXNlLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgImxlYXNlLWluaXQgc2NyaXB0IHJldHVybmVkIGV4aXQgY29kZSAlcyIKK21zZ3N0ciAiYXJjaGl2byBndWnzbiBsZWFzZS1pbml0IHJldG9ybvMgY/NkaWdvIGRlIHNhbGlkYSAlcyIKKworIzogbGVhc2UuYzozNDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSAlczogJXMgKHJldHJ5IGluICV1cykiCittc2dzdHIgImVycm9yIGFsIGVzY3JpYmlyICVzOiAlcyAocmVpbnRlbnRhciBlbiAldXMpIgorCisjOiBsZWFzZS5jOjkwNgorIywgYy1mb3JtYXQKK21zZ2lkICJJZ25vcmluZyBkb21haW4gJXMgZm9yIERIQ1AgaG9zdCBuYW1lICVzIgorbXNnc3RyICJJZ25vcmFuZG8gZG9taW5pbyAlcyBwYXJhIG5vbWJyZSBkZSBob3N0IERIQ1AgJXMiCisKKyM6IHJmYzIxMzEuYzozNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgZm9yIERIQ1AgcmVxdWVzdCAlcyAlcyIKK21zZ3N0ciAibmluZ/puIHJhbmdvIGRlIGRpcmVjY2nzbmVzIGRpc3BvbmlibGUgcGFyYSBwZWRpZG8gREhDUCAlcyAlcyIKKworIzogcmZjMjEzMS5jOjM0MworbXNnaWQgIndpdGggc3VibmV0IHNlbGVjdG9yIgorbXNnc3RyICJjb24gc2VsZWN0b3IgZGUgc3VicmVkIgorCisjOiByZmMyMTMxLmM6MzQzCittc2dpZCAidmlhIgorbXNnc3RyICJ27WEiCisKKyM6IHJmYzIxMzEuYzozNTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IGF2YWlsYWJsZSBESENQIHN1Ym5ldDogJXMvJXMiCittc2dzdHIgIiV1IFN1YnJlZCBESENQIGRpc3BvbmlibGU6ICVzLyVzIgorCisjOiByZmMyMTMxLmM6MzU4IHJmYzMzMTUuYzozMDAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IGF2YWlsYWJsZSBESENQIHJhbmdlOiAlcyAtLSAlcyIKK21zZ3N0ciAiJXUgUmFuZ28gREhDUCBkaXNwb25pYmxlOiAlcyAtLSAlcyIKKworIzogcmZjMjEzMS5jOjQ2OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXUgdmVuZG9yIGNsYXNzOiAlcyIKK21zZ3N0ciAiJXUgQ2xhc2UgZGUgdmVuZGVkb3I6ICVzIgorCisjOiByZmMyMTMxLmM6NDcxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSB1c2VyIGNsYXNzOiAlcyIKK21zZ3N0ciAiJXUgQ2xhc2UgZGUgdXN1YXJpbzogJXMiCisKKyM6IHJmYzIxMzEuYzo0OTgKK21zZ2lkICJkaXNhYmxlZCIKK21zZ3N0ciAiZGVzaGFiaWxpdGFkbyIKKworIzogcmZjMjEzMS5jOjUzOSByZmMyMTMxLmM6OTY3IHJmYzIxMzEuYzoxMzg1IHJmYzMzMTUuYzo2MDIgcmZjMzMxNS5jOjgyMworIzogcmZjMzMxNS5jOjEwOTUKK21zZ2lkICJpZ25vcmVkIgorbXNnc3RyICJpZ25vcmFkbyIKKworIzogcmZjMjEzMS5jOjU1NCByZmMyMTMxLmM6MTIwNSByZmMzMzE1LmM6ODczCittc2dpZCAiYWRkcmVzcyBpbiB1c2UiCittc2dzdHIgImRpcmVjY2nzbiBlbiB1c28iCisKKyM6IHJmYzIxMzEuYzo1NjggcmZjMjEzMS5jOjEwMjEKK21zZ2lkICJubyBhZGRyZXNzIGF2YWlsYWJsZSIKK21zZ3N0ciAibmluZ3VuYSBkaXJlY2Np824gZGlzcG9uaWJsZSIKKworIzogcmZjMjEzMS5jOjU3NSByZmMyMTMxLmM6MTE2OAorbXNnaWQgIndyb25nIG5ldHdvcmsiCittc2dzdHIgInJlZCBlcXVpdm9jYWRhIgorCisjOiByZmMyMTMxLmM6NTkwCittc2dpZCAibm8gYWRkcmVzcyBjb25maWd1cmVkIgorbXNnc3RyICJuaW5ndW5hIGRpcmVjY2nzbiBjb25maWd1cmFkYSIKKworIzogcmZjMjEzMS5jOjU5NiByZmMyMTMxLmM6MTIxOAorbXNnaWQgIm5vIGxlYXNlcyBsZWZ0IgorbXNnc3RyICJubyBzb2JyYSBuaW5ndW5hIGNvbmNlc2nzbiIKKworIzogcmZjMjEzMS5jOjY5MSByZmMzMzE1LmM6NDc1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSBjbGllbnQgcHJvdmlkZXMgbmFtZTogJXMiCittc2dzdHIgIiV1IGNsaWVudGUgcHJvdmVlIG5vbWJyZTogJXMiCisKKyM6IHJmYzIxMzEuYzo3OTYKK21zZ2lkICJQWEUgQklTIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIm5vIGhheSBzb3BvcnRlIHBhcmEgQklTIFBYRSIKKworIzogcmZjMjEzMS5jOjkzNSByZmMzMzE1LmM6MTE4OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZGlzYWJsaW5nIERIQ1Agc3RhdGljIGFkZHJlc3MgJXMgZm9yICVzIgorbXNnc3RyICJkZXNoYWJpbGl0YW5kbyBkaXJlY2Np824gREhDUCBlc3ThdGljYSAlcyBwYXJhICVzIgorCisjOiByZmMyMTMxLmM6OTU2Cittc2dpZCAidW5rbm93biBsZWFzZSIKK21zZ3N0ciAiY29uY2VzafNuIGRlc2Nvbm9jaWRhIgorCisjOiByZmMyMTMxLmM6OTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCBpcyBsZWFzZWQgdG8gJXMiCittc2dzdHIgIm5vIHVzYW5kbyBkaXJlY2Np824gY29uZmlndXJhZGEgJXMgcG9ycXVlIGVzdOEgY29uY2VkaWRhIGEgJXMiCisKKyM6IHJmYzIxMzEuYzoxMDAwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgaXMgaW4gdXNlIGJ5IHRoZSBzZXJ2ZXIgb3IgcmVsYXkiCittc2dzdHIgIm5vIHVzYW5kbyBkaXJlY2Np824gY29uZmlndXJhZGEgJXMgcG9ycXVlIGVzdOEgZW4gdXNvIHBvciBlbCBzZXJ2aWRvciBvIHJlbGF5IgorCisjOiByZmMyMTMxLmM6MTAwMworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IHdhcyBwcmV2aW91c2x5IGRlY2xpbmVkIgorbXNnc3RyICJubyB1c2FuZG8gZGlyZWNjafNuIGNvbmZpZ3VyYWRhICVzIHBvcnF1ZSBmdekgcHJldmlhbWVudGUgZGVuZWdhZGEiCisKKyM6IHJmYzIxMzEuYzoxMDE5IHJmYzIxMzEuYzoxMjExCittc2dpZCAibm8gdW5pcXVlLWlkIgorbXNnc3RyICJuaW5n+m4gdW5pcXVlLWlkIChpZGVudGlmaWNhY2nzbiD6bmljYSkiCisKKyM6IHJmYzIxMzEuYzoxMTA2Cittc2dpZCAid3Jvbmcgc2VydmVyLUlEIgorbXNnc3RyICJJRCBkZSBzZXJ2aWRvciBlcXVpdm9jYWRhIgorCisjOiByZmMyMTMxLmM6MTEyNQorbXNnaWQgIndyb25nIGFkZHJlc3MiCittc2dzdHIgImRpcmVjY2nzbiBlcXVpdm9jYWRhIgorCisjOiByZmMyMTMxLmM6MTE0MyByZmMzMzE1LmM6OTY5Cittc2dpZCAibGVhc2Ugbm90IGZvdW5kIgorbXNnc3RyICJjb25jZXNp824gbm8gZW5jb250cmFkYSIKKworIzogcmZjMjEzMS5jOjExNzYKK21zZ2lkICJhZGRyZXNzIG5vdCBhdmFpbGFibGUiCittc2dzdHIgImRpcmVjY2nzbiBubyBkaXNwb25pYmxlIgorCisjOiByZmMyMTMxLmM6MTE4NworbXNnaWQgInN0YXRpYyBsZWFzZSBhdmFpbGFibGUiCittc2dzdHIgImNvbmNlc2nzbiBlc3ThdGljYSBkaXNwb25pYmxlIgorCisjOiByZmMyMTMxLmM6MTE5MQorbXNnaWQgImFkZHJlc3MgcmVzZXJ2ZWQiCittc2dzdHIgImRpcmVjY2nzbiByZXNlcnZhZGEiCisKKyM6IHJmYzIxMzEuYzoxMTk5CisjLCBjLWZvcm1hdAorbXNnaWQgImFiYW5kb25pbmcgbGVhc2UgdG8gJXMgb2YgJXMiCittc2dzdHIgImFiYW5kb25hbmRvIGNvbmNlc2nzbiBhICVzIGRlICVzIgorCisjOiByZmMyMTMxLmM6MTcxMgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBib290ZmlsZSBuYW1lOiAlcyIKK21zZ3N0ciAiJXUgbm9tYnJlIGRlIGJvb3RmaWxlOiAlcyIKKworIzogcmZjMjEzMS5jOjE3MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgc2VydmVyIG5hbWU6ICVzIgorbXNnc3RyICIldSBub21icmUgZGUgc2Vydmlkb3I6ICVzIgorCisjOiByZmMyMTMxLmM6MTcyOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXUgbmV4dCBzZXJ2ZXI6ICVzIgorbXNnc3RyICIldSBzaWd1aWVudGUgc2Vydmlkb3I6ICVzIgorCisjOiByZmMyMTMxLmM6MTczMgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBicm9hZGNhc3QgcmVzcG9uc2UiCittc2dzdHIgIiV1IHJlc3B1ZXN0YSBicm9hZGNhc3QiCisKKyM6IHJmYzIxMzEuYzoxNzk1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc2VuZCBESENQL0JPT1RQIG9wdGlvbiAlZDogbm8gc3BhY2UgbGVmdCBpbiBwYWNrZXQiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGVudmlhciBvcGNp824gREhDUC9CT09UUCAlZDogbm8gcXVlZGEgZXNwYWNpbyBlbiBlbCBwYXF1ZXRlIgorCisjOiByZmMyMTMxLmM6MjAzNgorbXNnaWQgIlBYRSBtZW51IHRvbyBsYXJnZSIKK21zZ3N0ciAibWVu+iBQWEUgZGVtYXNpYWRvIGxhcmdvIgorCisjOiByZmMyMTMxLmM6MjE3MyByZmMzMzE1LmM6MTQ1NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXUgcmVxdWVzdGVkIG9wdGlvbnM6ICVzIgorbXNnc3RyICIldSBvcGNpb25lcyBzb2xpY2l0YWRhczogJXMiCisKKyM6IHJmYzIxMzEuYzoyNDUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzZW5kIFJGQzM5MjUgb3B0aW9uOiB0b28gbWFueSBvcHRpb25zIGZvciBlbnRlcnByaXNlIG51bWJlciAlZCIKK21zZ3N0ciAibm8gc2UgcHVlZGUgZW52aWFyIG9wY2nzbiBSRkMzOTI1OiBkZW1hc2lhZGFzIG9wY2lvbmVzIHBhcmEgbvptZXJvIGVudGVycHJpc2UgJWQiCisKKyM6IG5ldGxpbmsuYzo3NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBuZXRsaW5rIHNvY2tldDogJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGNyZWFyIHrzY2FsbyBuZXRsaW5rOiAlcyIKKworIzogbmV0bGluay5jOjM0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibmV0bGluayByZXR1cm5zIGVycm9yOiAlcyIKK21zZ3N0ciAibmV0bGluayByZXRvcm5hIGVycm9yOiAlcyIKKworIzogZGJ1cy5jOjE3MQorbXNnaWQgImF0dGVtcHQgdG8gc2V0IGFuIElQdjYgc2VydmVyIGFkZHJlc3MgdmlhIERCdXMgLSBubyBJUHY2IHN1cHBvcnQiCittc2dzdHIgImludGVudG8gZGUgZmlqYXIgZGlyZWNjafNuIGRlIHNlcnZpZG9yIElQdjYgdu1hIERCdXMgLSBubyBoYXkgc29wb3J0ZSBJUHY2IgorCisjOiBkYnVzLmM6NTAwCittc2dpZCAic2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzIGZyb20gREJ1cyIKK21zZ3N0ciAiZmlqYW5kbyBzZXJ2aWRvcmVzIHN1YmlkYSBkZXNkZSBEQnVzIgorCisjOiBkYnVzLmM6NTQ3Cittc2dpZCAiY291bGQgbm90IHJlZ2lzdGVyIGEgREJ1cyBtZXNzYWdlIGhhbmRsZXIiCittc2dzdHIgIm5vIHNlIHB1ZG8gcmVnaXN0cmFyIHVuIG1hbmVqYWRvciBkZSBtZW5zYWplcyBEQnVzIgorCisjOiBicGYuYzoyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQIEJQRiBzb2NrZXQ6ICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBjcmVhciB682NhbG8gQlBGIERIQ1A6ICVzIgorCisjOiBicGYuYzoyOTEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVxdWVzdCBmb3IgdW5zdXBwb3J0ZWQgaGFyZHdhcmUgdHlwZSAoJWQpIHJlY2VpdmVkIG9uICVzIgorbXNnc3RyICJwZWRpZG8gREhDUCBwb3IgdGlwbyBkZSBoYXJkd2FyZSBuby1zb3BvcnRhZG8gKCVkKSByZWNpYmlkbyBlbiAlcyIKKworIzogYnBmLmM6Mzc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIFBGX1JPVVRFIHNvY2tldDogJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGNyZWFyIHrzY2FsbyBESENQOiAlcyIKKworIzogYnBmLmM6Mzk3Cittc2dpZCAiVW5rbm93biBwcm90b2NvbCB2ZXJzaW9uIGZyb20gcm91dGUgc29ja2V0IgorbXNnc3RyICIiCisKKyM6IGhlbHBlci5jOjE1MworbXNnaWQgImxlYXNlKCkgZnVuY3Rpb24gbWlzc2luZyBpbiBMdWEgc2NyaXB0IgorbXNnc3RyICJsYSBmdW5jafNuIGxlYXNlKCkgbm8gc2UgZW5jdWVudHJhIGVuIGVsIHNjcmlwdCBMdWEiCisKKyM6IHRmdHAuYzozMDkKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IGZyZWUgcG9ydCBmb3IgVEZUUCIKK21zZ3N0ciAiaW5jYXBheiBkZSBjb25zZWd1aXIgcHVlcnRvIGxpYnJlIHBhcmEgVEZUUCIKKworIzogdGZ0cC5jOjMyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCByZXF1ZXN0IGZyb20gJXMiCittc2dzdHIgInBlZGlkbyBuby1zb3BvcnRhZG8gZGVzZGUgJXMiCisKKyM6IHRmdHAuYzo0MzkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgbm90IGZvdW5kIgorbXNnc3RyICJhcmNoaXZvICVzIG5vIGVuY29udHJhZG8iCisKKyM6IHRmdHAuYzo1NDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImVycm9yICVkICVzIHJlY2VpdmVkIGZyb20gJXMiCittc2dzdHIgImVycm9yIFRGVFAgJWQgJXMgcmVjaWJpZG8gZGUgJXMiCisKKyM6IHRmdHAuYzo1OTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCBzZW5kaW5nICVzIHRvICVzIgorbXNnc3RyICJURlRQIG5vIHB1ZG8gZW52aWFyICVzIGEgJXMiCisKKyM6IHRmdHAuYzo1OTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInNlbnQgJXMgdG8gJXMiCittc2dzdHIgIlRGVFAgZW52afMgJXMgYSAlcyIKKworIzogbG9nLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJmbG93OiAlZCBsb2cgZW50cmllcyBsb3N0IgorbXNnc3RyICJkZXNib3JkYW1pZW50bzogJWQgZW50cmFkYXMgZGUgcmVnaXN0cm8gcGVyZGlkYXMiCisKKyM6IGxvZy5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZmFpbGVkOiAlcyIKK21zZ3N0ciAicmVnaXN0cm8gZmFsbPM6ICVzIgorCisjOiBsb2cuYzo0NzIKK21zZ2lkICJGQUlMRUQgdG8gc3RhcnQgdXAiCittc2dzdHIgImVsIGluaWNpbyBoYSBGQUxMQURPIgorCisjOiBjb25udHJhY2suYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb25udHJhY2sgY29ubmVjdGlvbiBtYXJrIHJldHJpZXZhbCBmYWlsZWQ6ICVzIgorbXNnc3RyICJDb25leGnzbiBjb25udHJhY2sgY29uIG1hcmNhIHJlY3VwZXJhY2nzbiBmYWxs8yIKKworIzogZGhjcDYuYzo1OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQdjYgc29ja2V0OiAlcyIKK21zZ3N0ciAibm8gc2UgcHVlZGUgY3JlYXIgevNjYWxvIERIQ1A6ICVzIgorCisjOiBkaGNwNi5jOjgwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX1JFVVNFe0FERFJ8UE9SVH0gb24gREhDUHY2IHNvY2tldDogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gZmlqYXIgU09fUkVVU0V7QUREUnxQT1JUfSBlbiB682NhbG8gREhDUDogJXMiCisKKyM6IGRoY3A2LmM6OTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIERIQ1B2NiBzZXJ2ZXIgc29ja2V0OiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBhY29wbGFyIHrzY2FsbyBkZSBzZXJ2aWRvciBESENQOiAlcyIKKworIzogcmZjMzMxNS5jOjE1NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibm8gYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgZm9yIERIQ1B2NiByZXF1ZXN0IGZyb20gcmVsYXkgYXQgJXMiCittc2dzdHIgIm5pbmf6biByYW5nbyBkZSBkaXJlY2Np825lcyBkaXNwb25pYmxlIHBhcmEgcGVkaWRvIERIQ1AgJXMgJXMiCisKKyM6IHJmYzMzMTUuYzoxNjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQdjYgcmVxdWVzdCB2aWEgJXMiCittc2dzdHIgIm5pbmf6biByYW5nbyBkZSBkaXJlY2Np825lcyBkaXNwb25pYmxlIHBhcmEgcGVkaWRvIERIQ1AgJXMgJXMiCisKKyM6IHJmYzMzMTUuYzoyOTcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IGF2YWlsYWJsZSBESENQdjYgc3VibmV0OiAlcy8lZCIKK21zZ3N0ciAiJXUgU3VicmVkIERIQ1AgZGlzcG9uaWJsZTogJXMvJXMiCisKKyM6IHJmYzMzMTUuYzozNzkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IHZlbmRvciBjbGFzczogJXUiCittc2dzdHIgIiV1IENsYXNlIGRlIHZlbmRlZG9yOiAlcyIKKworIzogcmZjMzMxNS5jOjQyNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXUgY2xpZW50IE1BQyBhZGRyZXNzOiAlcyIKK21zZ3N0ciAiJXUgY2xpZW50ZSBwcm92ZWUgbm9tYnJlOiAlcyIKKworIzogcmZjMzMxNS5jOjY1OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBwcmVmaXgtY2xhc3MgJWQiCittc2dzdHIgImNsYXNlIGRlIHByZWZpam8gZGVzY29ub2NpZGEiCisKKyM6IHJmYzMzMTUuYzo3OTEgcmZjMzMxNS5jOjkxMworbXNnaWQgInN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjgwNiByZmMzMzE1LmM6ODA4IHJmYzMzMTUuYzo5MjEgcmZjMzMxNS5jOjkyMworIywgZnV6enkKK21zZ2lkICJubyBhZGRyZXNzZXMgYXZhaWxhYmxlIgorbXNnc3RyICJuaW5ndW5hIGRpcmVjY2nzbiBkaXNwb25pYmxlIgorCisjOiByZmMzMzE1LmM6ODY1CisjLCBmdXp6eQorbXNnaWQgImFkZHJlc3MgdW5hdmFpbGFibGUiCittc2dzdHIgImRpcmVjY2nzbiBubyBkaXNwb25pYmxlIgorCisjOiByZmMzMzE1LmM6OTAwCittc2dpZCAibm90IG9uIGxpbmsiCittc2dzdHIgIm5vIGVuIGVsIGVubGFjZSIKKworIzogcmZjMzMxNS5jOjk3MyByZmMzMzE1LmM6MTE1MSByZmMzMzE1LmM6MTIyOAorbXNnaWQgIm5vIGJpbmRpbmcgZm91bmQiCittc2dzdHIgInVuaW9uZXMgbm8gZW5jb250cmFkYXMiCisKKyM6IHJmYzMzMTUuYzoxMDExCittc2dpZCAiZGVwcmVjYXRlZCIKK21zZ3N0ciAiZGVzY2FydGFkbyIKKworIzogcmZjMzMxNS5jOjEwMTYKKyMsIGZ1enp5Cittc2dpZCAiYWRkcmVzcyBpbnZhbGlkIgorbXNnc3RyICJkaXJlY2Np824gZW4gdXNvIgorCisjOiByZmMzMzE1LmM6MTA2MQorbXNnaWQgImNvbmZpcm0gZmFpbGVkIgorbXNnc3RyICJjb25maXJtYWNp824gZmFsbPMiCisKKyM6IHJmYzMzMTUuYzoxMDcyCisjLCBmdXp6eQorbXNnaWQgImFsbCBhZGRyZXNzZXMgc3RpbGwgb24gbGluayIKK21zZ3N0ciAiZGlyZWNjafNuIGVycvNuZWEgZW4gJXMgbO1uZWEgJWQiCisKKyM6IHJmYzMzMTUuYzoxMTYwCittc2dpZCAicmVsZWFzZSByZWNlaXZlZCIKK21zZ3N0ciAiY29uY2VzafNuIHJlY2liaWRhIgorCisjOiByZmMzMzE1LmM6MjA4MAorbXNnaWQgIkNhbm5vdCBtdWx0aWNhc3QgdG8gREhDUHY2IHNlcnZlciB3aXRob3V0IGNvcnJlY3QgaW50ZXJmYWNlIgorbXNnc3RyICJObyBwdWVkZSBoYWNlciBtdWx0aWNhc3QgREhDUHY2IHNpbiBlbCBpbnRlcmZhc2UgY29ycmVjdG8iCisKKyM6IGRoY3AtY29tbW9uLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIklnbm9yaW5nIGR1cGxpY2F0ZSBkaGNwLW9wdGlvbiAlZCIKK21zZ3N0ciAiSWdub3JhbmRvIG9wY2nzbiBESENQIGR1cGxpY2FkYSIKKworIzogZGhjcC1jb21tb24uYzoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgdGFnczogJXMiCittc2dzdHIgIiV1IGV0aXF1ZXRhczogJXMiCisKKyM6IGRoY3AtY29tbW9uLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBtb3JlIHRoYW4gb25lIGFkZHJlc3MgaW4gaG9zdHNmaWxlLCB1c2luZyAlcyBmb3IgREhDUCIKK21zZ3N0ciAiJXMgdGllbmUgbeFzIGRlIHVuYSBkaXJlY2Np824gZW4gaG9zdHNmaWxlLCB1c2FuZG8gJXMgcGFyYSBESENQIgorCisjOiBkaGNwLWNvbW1vbi5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgSVAgYWRkcmVzcyAlcyAoJXMpIGluIGRoY3AtY29uZmlnIGRpcmVjdGl2ZSIKK21zZ3N0ciAiZGlyZWNjafNuIElQIGR1cGxpY2FkYSAlcyAoJXMpIGVuIGRpcmVjdGl2YSBkaGNwLWNvbmZpZyIKKworIzogZGhjcC1jb21tb24uYzo0OTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgU09fQklORFRPREVWSUNFIG9uIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBmaWphciBTT19SRVVTRXtBRERSfFBPUlR9IGVuIHNvY2tldCBESENQOiAlcyIKKworIzogZGhjcC1jb21tb24uYzo2MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiS25vd24gREhDUCBvcHRpb25zOlxuIgorbXNnc3RyICJPcGNpb25lcyBESENQIGNvbm9jaWRhczpcbiIKKworIzogZGhjcC1jb21tb24uYzo2MjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIktub3duIERIQ1B2NiBvcHRpb25zOlxuIgorbXNnc3RyICJPcGNpb25lcyBESENQIGNvbm9jaWRhczpcbiIKKworIzogZGhjcC1jb21tb24uYzo4MjMKK21zZ2lkICIsIHByZWZpeCBkZXByZWNhdGVkIgorbXNnc3RyICIsIHByZWZpam8gZGVzY2FydGFkbyIKKworIzogZGhjcC1jb21tb24uYzo4MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBsZWFzZSB0aW1lICIKK21zZ3N0ciAiLCB0aWVtcG8gZGUgY29uY2VzafNuIgorCisjOiBkaGNwLWNvbW1vbi5jOjg2OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdGF0ZWxlc3Mgb24gJXMlLjBzJS4wcyVzIgorbXNnc3RyICIlcyBhcOF0cmlkYSBlbiAlcyUuMHMlLjBzJXMiCisKKyM6IGRoY3AtY29tbW9uLmM6ODcwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcywgc3RhdGljIGxlYXNlcyBvbmx5IG9uICUuMHMlcyVzJS4wcyIKK21zZ3N0ciAiREhDUCwgY29uY2VzafNuIGVzdOF0aWNhIHNvbG8gZW4gJS4wcyVzLCB0aWVtcG8gZGUgY29uY2VzafNuICVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjg3MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMsIHByb3h5IG9uIHN1Ym5ldCAlLjBzJXMlLjBzJS4wcyIKK21zZ3N0ciAiREhDUCwgcHJveHkgZW4gc3VicmVkICUuMHMlcyUuMHMiCisKKyM6IGRoY3AtY29tbW9uLmM6ODczCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcywgSVAgcmFuZ2UgJXMgLS0gJXMlcyUuMHMiCittc2dzdHIgIkRIQ1AsIHJhbmdvIGRlIElQcyAlcyAtLSAlcywgdGllbXBvIGRlIGNvbmNlc2nzbiAlcyIKKworIzogZGhjcC1jb21tb24uYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUHY0LWRlcml2ZWQgSVB2NiBuYW1lcyBvbiAlcyVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODg5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJyb3V0ZXIgYWR2ZXJ0aXNlbWVudCBvbiAlcyVzIgorbXNnc3RyICJESENQLCBjb25jZXNp824gZXN04XRpY29zIHNvbG8gZW4gJS4wcyVzLCB0aWVtcG8gZGUgY29uY2VzafNuICVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlbGF5IGZyb20gJXMgdG8gJXMgdmlhICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6OTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVsYXkgZnJvbSAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiByYWR2LmM6OTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgSUNNUHY2IHNvY2tldDogJXMiCittc2dzdHIgIm5vIHNlIHB1ZWRlIGNyZWFyIHNvY2tldCBESENQOiAlcyIKKworIzogYXV0aC5jOjQyOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaWdub3Jpbmcgem9uZSB0cmFuc2ZlciByZXF1ZXN0IGZyb20gJXMiCittc2dzdHIgInBlZGlkbyBuby1zb3BvcnRhZG8gZGVzZGUgJXMiCisKKyM6IGlwc2V0LmM6OTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIGtlcm5lbCB2ZXJzaW9uOiAlcyIKK21zZ3N0ciAibm8gc2UgcHVkbyBhY29wbGFyIHNvY2tldCBkZSBzZXJ2aWRvciBESENQOiAlcyIKKworIzogaXBzZXQuYzoxMTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgSVBzZXQgY29udHJvbCBzb2NrZXQ6ICVzIgorbXNnc3RyICJubyBzZSBwdWRvIGNyZWFyIHNvY2tldCBURlRQOiAlcyIKKworIzogYmxvY2tkYXRhLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRE5TU0VDIG1lbW9yeSBpbiB1c2UgJXUsIG1heCAldSwgYWxsb2NhdGVkICV1IgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjc2Cittc2dpZCAiZXJyb3I6IGZpbGxfYWRkciBtaXNzdXNlZCIKK21zZ3N0ciAiIgorCisjOiB0YWJsZXMuYzoxMDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhY2Nlc3MgcGYgZGV2aWNlczogJXMiCittc2dzdHIgIm5vIHNlIHB1ZG8gYWNjZWRlciAlczogJXMiCisKKyM6IHRhYmxlcy5jOjExOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogbm8gb3BlbmVkIHBmIGRldmljZXMgJXMiCittc2dzdHIgInVzYW5kbyBkaXJlY2Npb25lcyBsb2NhbGVzIHNvbG8gcGFyYSAlcyAlcyIKKworIzogdGFibGVzLmM6MTI3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJlcnJvcjogY2Fubm90IHVzZSB0YWJsZSBuYW1lICVzIgorbXNnc3RyICJubyBzZSBwdWVkZSBvYnRlbmVyIGhvc3QtbmFtZSAobm9tYnJlIGRlIGhvc3QpOiAlcyIKKworIzogdGFibGVzLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yOiBjYW5ub3Qgc3RybGNweSB0YWJsZSBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBwZnJfYWRkX3RhYmxlczogJXMoJWQpIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjE0NworbXNnaWQgImluZm86IHRhYmxlIGNyZWF0ZWQiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IERJT0NSJXNBRERSUzogJXMiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTYyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlZCBhZGRyZXNzZXMgJXMiCittc2dzdHIgImRpcmVjY2nzbiBJUCBlcnLzbmVhIgorCisjfiBtc2dpZCAibm8gaW50ZXJmYWNlIHdpdGggYWRkcmVzcyAlcyIKKyN+IG1zZ3N0ciAibmluZ3VuYSBpbnRlcmZhc2UgY29uIGRpcmVjY2nzbiAlcyIKKworI34gbXNnaWQgImR1cGxpY2F0ZSBJUCBhZGRyZXNzICVzIGluIGRoY3AtY29uZmlnIGRpcmVjdGl2ZS4iCisjfiBtc2dzdHIgImRpcmVjY2nzbiBJUCBkdXBsaWNhZGEgJXMgZW4gZGlyZWN0aXZhIGRoY3AtY29uZmlnLiIKKworIywgZnV6enkKKyN+IG1zZ2lkICJTcGVjaWZ5IHBhdGggdG8gTHVhIHNjcmlwdCAobm8gZGVmYXVsdCkuIgorI34gbXNnc3RyICJFc3BlY2lmaWNhciBwYXRoIGRlIGFyY2hpdm8gUElEICglcyBwb3IgcHJlZGV0ZXJtaW5hZG8pLiIKKworIywgZnV6enkKKyN+IG1zZ2lkICJvbmx5IG9uZSBkaGNwLWhvc3RzZmlsZSBhbGxvd2VkIgorI34gbXNnc3RyICJzb2xvIHVuIGRoY3AtaG9zdHNmaWxlIHBlcm1pdGlkbyIKKworIywgZnV6enkKKyN+IG1zZ2lkICJvbmx5IG9uZSBkaGNwLW9wdHNmaWxlIGFsbG93ZWQiCisjfiBtc2dzdHIgInNvbG8gdW4gZGhjcC1vcHRzZmlsZSBwZXJtaXRpZG8iCisKKyN+IG1zZ2lkICJmaWxlcyBuZXN0ZWQgdG9vIGRlZXAgaW4gJXMiCisjfiBtc2dzdHIgImFyY2hpdm9zIGplcmFycXVpemFkb3MgZGVtYXNpYWRvIHByb2Z1bmRvIGVuICVzIgorCisjfiBtc2dpZCAiVFhUIHJlY29yZCBzdHJpbmcgdG9vIGxvbmciCisjfiBtc2dzdHIgImV4cGVkaWVudGUgVFhUIGRlbWFzaWFkbyBsYXJnbyIKKworI34gbXNnaWQgImZhaWxlZCB0byBzZXQgSVBWNiBvcHRpb25zIG9uIGxpc3RlbmluZyBzb2NrZXQ6ICVzIgorI34gbXNnc3RyICJubyBzZSBwdWRvIGZpamFyIG9wY2lvbmVzIElQdjYgc29icmUgc29ja2V0IGVzY3VjaGFkb3I6ICVzIgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIGJpbmQgbGlzdGVuaW5nIHNvY2tldCBmb3IgJXM6ICVzIgorI34gbXNnc3RyICJubyBzZSBwdWRvIGFjb3BsYXIgc29ja2V0IGVzY3VjaGFkb3IgcGFyYSAlczogJXMiCisKKyN+IG1zZ2lkICJESENQIHBhY2tldDogdHJhbnNhY3Rpb24taWQgaXMgJXUiCisjfiBtc2dzdHIgInBhcXVldGUgREhDUDogdHJhbnNhY3Rpb24taWQgKGlkZW50aWZpY2FjafNuIGRlIHRyYW5zYWNjafNuKSBlcyAldSIKKworI34gbXNnaWQgIm11c3Qgc2V0IGV4YWN0bHkgb25lIGludGVyZmFjZSBvbiBicm9rZW4gc3lzdGVtcyB3aXRob3V0IElQX1JFQ1ZJRiIKKyN+IG1zZ3N0ciAiZGViZSBmaWphcnNlIGV44WN0YW1lbnRlIHVuYSBpbnRlcmZhc2UgZW4gc2lzdGVtYXMgcm90b3Mgc2luIElQX1JFQ1ZJRiIKKworI34gbXNnaWQgIklnbm9yaW5nIERIQ1AgbGVhc2UgZm9yICVzIGJlY2F1c2UgaXQgaGFzIGFuIGlsbGVnYWwgZG9tYWluIHBhcnQiCisjfiBtc2dzdHIgIklnbm9yYW5kbyBjb25jZXNp824gREhDUCBwYXJhICVzIHBvcnF1ZSB0aWVuZSB1bmEgcGFydGUgaWxlZ2FsIGRlIGRvbWluaW8iCisKKyN+IG1zZ2lkICJJU0MgZGhjcGQgaW50ZWdyYXRpb24gbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfSVNDX1JFQURFUiBpbiBzcmMvY29uZmlnLmgiCisjfiBtc2dzdHIgImludGVncmFjafNuIGRoY3BkIElTQyBubyBkaXNwb25pYmxlOiBmaWphciBIQVZFX0lTQ19SRUFERVIgZW4gc3JjL2NvbmZpZy5oIgorCisjLCBmdXp6eQorI34gbXNnaWQgImlsbGVnYWwgZG9tYWluICVzIGluIGRoY3AtY29uZmlnIGRpcmVjdGl2ZS4iCisjfiBtc2dzdHIgImRvbWluaW8gaWxlZ2FsICVzIGVuIGRpcmVjdGl2YSBkaGNwLWNvbmZpZy4iCisKKyN+IG1zZ2lkICJpbGxlZ2FsIGRvbWFpbiAlcyBpbiAlcy4iCisjfiBtc2dzdHIgImRvbWluaW8gaWxlZ2FsICVzIGVuICVzLiIKKworI34gbXNnaWQgInJ1bm5pbmcgYXMgcm9vdCIKKyN+IG1zZ3N0ciAiY29ycmllbmRvIGNvbW8gcm9vdCIKKworI34gbXNnaWQgIlJlYWQgbGVhc2VzIGF0IHN0YXJ0dXAsIGJ1dCBuZXZlciB3cml0ZSB0aGUgbGVhc2UgZmlsZS4iCisjfiBtc2dzdHIgIkxlZXIgY29uY2VzafNuIGFsIGluaWNpbywgcGVybyBudW5jYSBlc2NyaWJpciBlbCBhcmNoaXZvIGRlIGNvbmNlc2nzbi4iCisKKyMsIGZ1enp5CisjfiBtc2dpZCAicmVhZCAlcyAtICVkIGhvc3RzIgorI34gbXNnc3RyICJkaXJlY2Np825lcyAlcyAtICVkIGxl7WRhcyIKKworI34gbXNnaWQgIkxpbWl0IG9mICVkIGxlYXNlcyBleGNlZWRlZC4iCisjfiBtc2dzdHIgIkztbWl0ZSBkZSAlZCBjb25jZXNp824gZXhjZWRpZG8uIgorCisjfiBtc2dpZCAiZG9tYWlucyIKKyN+IG1zZ3N0ciAiZG9taW5pb3MiCisKKyN+IG1zZ2lkICJJZ25vcmluZyBESENQIGhvc3QgbmFtZSAlcyBiZWNhdXNlIGl0IGhhcyBhbiBpbGxlZ2FsIGRvbWFpbiBwYXJ0IgorI34gbXNnc3RyICJJZ25vcmFuZG8gbm9tYnJlIGRlIGhvc3QgREhDUCAlcyBwb3JxdWUgY29udGllbmUgdW5hIHBhcnRlIGlsZWdhbCBkZSBkb21pbmlvIgorCisjfiBtc2dpZCAiRGlzcGxheSB0aGlzIG1lc3NhZ2UuIgorI34gbXNnc3RyICJNb3N0cmFyIGVzdGUgbWVuc2FqZS4iCisKKyN+IG1zZ2lkICJmYWlsZWQgdG8gcmVhZCAlczogJW0iCisjfiBtc2dzdHIgIm5vIHNlIHB1ZG8gbGVlciAlczogJW0iCisKKyN+IG1zZ2lkICJmYWlsZWQgdG8gcmVhZCAlczolbSIKKyN+IG1zZ3N0ciAibm8gc2UgcHVkbyBsZWVyICVzOiVtIgpkaWZmIC0tZ2l0IGEvcG8vZmkucG8gYi9wby9maS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmY0MzA5Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vZmkucG8KQEAgLTAsMCArMSwyMDMyIEBACisjIEZpbm5pc2ggdHJhbnNsYXRpb25zIGZvciBkbnNtYXNxIHBhY2thZ2UuCisjIFRoaXMgZmlsZSBpcyBwdXQgaW4gdGhlIHB1YmxpYyBkb21haW4uCisjIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+LCAyMDA1LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZG5zbWFzcSAyLjI0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA5LTA2LTE4IDEyOjI0KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA1LTExLTI4IDIyOjA1KzAwMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+XG4iCisiTGFuZ3VhZ2UtVGVhbTogRmlubmlzaCA8dHJhbnNsYXRpb24tdGVhbS1maUBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTGFuZ3VhZ2U6IGZpXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9QVNDSUlcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IGNhY2hlLmM6NTA1Cittc2dpZCAiSW50ZXJuYWwgZXJyb3IgaW4gY2FjaGUuIgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6OTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIG5hbWVzIGZyb20gJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6OTM0IGRoY3AuYzo4MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGFkZHJlc3MgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjk4NSBkaGNwLmM6ODM2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBuYW1lIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzo5OTIgZGhjcC5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkICVzIC0gJWQgYWRkcmVzc2VzIgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTEwMAorbXNnaWQgImNsZWFyZWQgY2FjaGUiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIElQdjQgYWRkcmVzcyBmb3VuZCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGEgQ05BTUUsIG5vdCBnaXZpbmcgaXQgdG8gdGhlIERIQ1AgbGVhc2Ugb2YgJXMiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBnaXZpbmcgbmFtZSAlcyB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyBiZWNhdXNlIHRoZSBuYW1lIGV4aXN0cyBpbiAlcyB3aXRoIGFkZHJlc3MgJXMiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMzY2CisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWUgJWx1IgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTM2NworIywgYy1mb3JtYXQKK21zZ2lkICJjYWNoZSBzaXplICVkLCAlZC8lZCBjYWNoZSBpbnNlcnRpb25zIHJlLXVzZWQgdW5leHBpcmVkIGNhY2hlIGVudHJpZXMuIgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJxdWVyaWVzIGZvcndhcmRlZCAldSwgcXVlcmllcyBhbnN3ZXJlZCBsb2NhbGx5ICV1IgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTM3MgorIywgYy1mb3JtYXQKK21zZ2lkICJxdWVyaWVzIGZvciBhdXRob3JpdGF0aXZlIHpvbmVzICV1IgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgJXMjJWQ6IHF1ZXJpZXMgc2VudCAldSwgcmV0cmllZCBvciBmYWlsZWQgJXUiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZWVkIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcjogJXMiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjIwNQorbXNnaWQgImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjI0MyBvcHRpb24uYzo1NzkKK21zZ2lkICJjb3VsZCBub3QgZ2V0IG1lbW9yeSIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6MjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZTogJXMiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWxsb2NhdGUgJWQgYnl0ZXMiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZpbml0ZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTgKK21zZ2lkICJTcGVjaWZ5IGxvY2FsIGFkZHJlc3MoZXMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzE5Cittc2dpZCAiUmV0dXJuIGlwYWRkciBmb3IgYWxsIGhvc3RzIGluIHNwZWNpZmllZCBkb21haW5zLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMjAKK21zZ2lkICJGYWtlIHJldmVyc2UgbG9va3VwcyBmb3IgUkZDMTkxOCBwcml2YXRlIGFkZHJlc3MgcmFuZ2VzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMjEKK21zZ2lkICJUcmVhdCBpcGFkZHIgYXMgTlhET01BSU4gKGRlZmVhdHMgVmVyaXNpZ24gd2lsZGNhcmQpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUgaW4gZW50cmllcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBjb25maWd1cmF0aW9uIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzI0Cittc2dpZCAiRG8gTk9UIGZvcmsgaW50byB0aGUgYmFja2dyb3VuZDogcnVuIGluIGRlYnVnIG1vZGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMyNQorbXNnaWQgIkRvIE5PVCBmb3J3YXJkIHF1ZXJpZXMgd2l0aCBubyBkb21haW4gcGFydC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzI2Cittc2dpZCAiUmV0dXJuIHNlbGYtcG9pbnRpbmcgTVggcmVjb3JkcyBmb3IgbG9jYWwgaG9zdHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMyNworbXNnaWQgIkV4cGFuZCBzaW1wbGUgbmFtZXMgaW4gL2V0Yy9ob3N0cyB3aXRoIGRvbWFpbi1zdWZmaXguIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMyOAorbXNnaWQgIkRvbid0IGZvcndhcmQgc3B1cmlvdXMgRE5TIHJlcXVlc3RzIGZyb20gV2luZG93cyBob3N0cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzI5Cittc2dpZCAiRW5hYmxlIERIQ1AgaW4gdGhlIHJhbmdlIGdpdmVuIHdpdGggbGVhc2UgZHVyYXRpb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMzMAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2UgdG8gdGhpcyBncm91cCBhZnRlciBzdGFydHVwIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMzMQorbXNnaWQgIlNldCBhZGRyZXNzIG9yIGhvc3RuYW1lIGZvciBhIHNwZWNpZmllZCBtYWNoaW5lLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMzIKK21zZ2lkICJSZWFkIERIQ1AgaG9zdCBzcGVjcyBmcm9tIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMzMworbXNnaWQgIlJlYWQgREhDUCBvcHRpb24gc3BlY3MgZnJvbSBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMzQKK21zZ2lkICJFdmFsdWF0ZSBjb25kaXRpb25hbCB0YWcgZXhwcmVzc2lvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRvIE5PVCBsb2FkICVzIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGEgaG9zdHMgZmlsZSB0byBiZSByZWFkIGluIGFkZGl0aW9uIHRvICVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMzcKK21zZ2lkICJTcGVjaWZ5IGludGVyZmFjZShzKSB0byBsaXN0ZW4gb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMzOAorbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIE5PVCB0byBsaXN0ZW4gb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMzOQorbXNnaWQgIk1hcCBESENQIHVzZXIgY2xhc3MgdG8gdGFnLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDAKK21zZ2lkICJNYXAgUkZDMzA0NiBjaXJjdWl0LWlkIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzQxCittc2dpZCAiTWFwIFJGQzMwNDYgcmVtb3RlLWlkIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzQyCittc2dpZCAiTWFwIFJGQzM5OTMgc3Vic2NyaWJlci1pZCB0byB0YWcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM0MworbXNnaWQgIkRvbid0IGRvIERIQ1AgZm9yIGhvc3RzIHdpdGggdGFnIHNldC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzQ0Cittc2dpZCAiRm9yY2UgYnJvYWRjYXN0IHJlcGxpZXMgZm9yIGhvc3RzIHdpdGggdGFnIHNldC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzQ1Cittc2dpZCAiRG8gTk9UIGZvcmsgaW50byB0aGUgYmFja2dyb3VuZCwgZG8gTk9UIHJ1biBpbiBkZWJ1ZyBtb2RlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDYKK21zZ2lkICJBc3N1bWUgd2UgYXJlIHRoZSBvbmx5IERIQ1Agc2VydmVyIG9uIHRoZSBsb2NhbCBuZXR3b3JrLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSB3aGVyZSB0byBzdG9yZSBESENQIGxlYXNlcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDgKK21zZ2lkICJSZXR1cm4gTVggcmVjb3JkcyBmb3IgbG9jYWwgaG9zdHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM0OQorbXNnaWQgIlNwZWNpZnkgYW4gTVggcmVjb3JkLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNTAKK21zZ2lkICJTcGVjaWZ5IEJPT1RQIG9wdGlvbnMgdG8gREhDUCBzZXJ2ZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJEbyBOT1QgcG9sbCAlcyBmaWxlLCByZWxvYWQgb25seSBvbiBTSUdIVVAuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1MgorbXNnaWQgIkRvIE5PVCBjYWNoZSBmYWlsZWQgc2VhcmNoIHJlc3VsdHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgbmFtZXNlcnZlcnMgc3RyaWN0bHkgaW4gdGhlIG9yZGVyIGdpdmVuIGluICVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNTQKK21zZ2lkICJTcGVjaWZ5IG9wdGlvbnMgdG8gYmUgc2VudCB0byBESENQIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1NQorbXNnaWQgIkRIQ1Agb3B0aW9uIHNlbnQgZXZlbiBpZiB0aGUgY2xpZW50IGRvZXMgbm90IHJlcXVlc3QgaXQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1NgorbXNnaWQgIlNwZWNpZnkgcG9ydCB0byBsaXN0ZW4gZm9yIEROUyByZXF1ZXN0cyBvbiAoZGVmYXVsdHMgdG8gNTMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBzdXBwb3J0ZWQgVURQIHBhY2tldCBzaXplIGZvciBFRE5TLjAgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzU4Cittc2dpZCAiTG9nIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNTkKK21zZ2lkICJGb3JjZSB0aGUgb3JpZ2luYXRpbmcgcG9ydCBmb3IgdXBzdHJlYW0gRE5TIHF1ZXJpZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2MAorbXNnaWQgIkRvIE5PVCByZWFkIHJlc29sdi5jb25mLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBwYXRoIHRvIHJlc29sdi5jb25mIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2MgorbXNnaWQgIlNwZWNpZnkgcGF0aCB0byBmaWxlIHdpdGggc2VydmVyPSBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2MworbXNnaWQgIlNwZWNpZnkgYWRkcmVzcyhlcykgb2YgdXBzdHJlYW0gc2VydmVycyB3aXRoIG9wdGlvbmFsIGRvbWFpbnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2NAorbXNnaWQgIlNwZWNpZnkgYWRkcmVzcyBvZiB1cHN0cmVhbSBzZXJ2ZXJzIGZvciByZXZlcnNlIGFkZHJlc3MgcXVlcmllcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNjUKK21zZ2lkICJOZXZlciBmb3J3YXJkIHF1ZXJpZXMgdG8gc3BlY2lmaWVkIGRvbWFpbnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2NgorbXNnaWQgIlNwZWNpZnkgdGhlIGRvbWFpbiB0byBiZSBhc3NpZ25lZCBpbiBESENQIGxlYXNlcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzY3Cittc2dpZCAiU3BlY2lmeSBkZWZhdWx0IHRhcmdldCBpbiBhbiBNWCByZWNvcmQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2OAorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIHJlcGxpZXMgZnJvbSAvZXRjL2hvc3RzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNjkKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzIGZvciBuZWdhdGl2ZSBjYWNoaW5nLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNzAKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzIGZvciBtYXhpbXVtIFRUTCB0byBzZW5kIHRvIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3MQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2UgdG8gdGhpcyB1c2VyIGFmdGVyIHN0YXJ0dXAuIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3MgorbXNnaWQgIk1hcCBESENQIHZlbmRvciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3MworbXNnaWQgIkRpc3BsYXkgZG5zbWFzcSB2ZXJzaW9uIGFuZCBjb3B5cmlnaHQgaW5mb3JtYXRpb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3NAorbXNnaWQgIlRyYW5zbGF0ZSBJUHY0IGFkZHJlc3NlcyBmcm9tIHVwc3RyZWFtIHNlcnZlcnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3NQorbXNnaWQgIlNwZWNpZnkgYSBTUlYgcmVjb3JkLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNzYKK21zZ2lkICJEaXNwbGF5IHRoaXMgbWVzc2FnZS4gVXNlIC0taGVscCBkaGNwIGZvciBrbm93biBESENQIG9wdGlvbnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3NworIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggb2YgUElEIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgbWF4aW11bSBudW1iZXIgb2YgREhDUCBsZWFzZXMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzc5Cittc2dpZCAiQW5zd2VyIEROUyBxdWVyaWVzIGJhc2VkIG9uIHRoZSBpbnRlcmZhY2UgYSBxdWVyeSB3YXMgc2VudCB0by4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzgwCittc2dpZCAiU3BlY2lmeSBUWFQgRE5TIHJlY29yZC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzgxCittc2dpZCAiU3BlY2lmeSBQVFIgRE5TIHJlY29yZC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzgyCittc2dpZCAiR2l2ZSBETlMgbmFtZSB0byBJUHY0IGFkZHJlc3Mgb2YgaW50ZXJmYWNlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODMKK21zZ2lkICJCaW5kIG9ubHkgdG8gaW50ZXJmYWNlcyBpbiB1c2UuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWFkIERIQ1Agc3RhdGljIGhvc3QgaW5mb3JtYXRpb24gZnJvbSAlcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg1Cittc2dpZCAiRW5hYmxlIHRoZSBEQnVzIGludGVyZmFjZSBmb3Igc2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzLCBldGMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4NgorbXNnaWQgIkRvIG5vdCBwcm92aWRlIERIQ1Agb24gdGhpcyBpbnRlcmZhY2UsIG9ubHkgcHJvdmlkZSBETlMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4NworbXNnaWQgIkVuYWJsZSBkeW5hbWljIGFkZHJlc3MgYWxsb2NhdGlvbiBmb3IgYm9vdHAuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4OAorbXNnaWQgIk1hcCBNQUMgYWRkcmVzcyAod2l0aCB3aWxkY2FyZHMpIHRvIG9wdGlvbiBzZXQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4OQorbXNnaWQgIlRyZWF0IERIQ1AgcmVxdWVzdHMgb24gYWxpYXNlcyBhcyBhcnJpdmluZyBmcm9tIGludGVyZmFjZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzkwCittc2dpZCAiRGlzYWJsZSBJQ01QIGVjaG8gYWRkcmVzcyBjaGVja2luZyBpbiB0aGUgREhDUCBzZXJ2ZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5MQorbXNnaWQgIlNoZWxsIHNjcmlwdCB0byBydW4gb24gREhDUCBsZWFzZSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5MgorbXNnaWQgIkx1YSBzY3JpcHQgdG8gcnVuIG9uIERIQ1AgbGVhc2UgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTMKK21zZ2lkICJSdW4gbGVhc2UtY2hhbmdlIHNjcmlwdHMgYXMgdGhpcyB1c2VyLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTQKK21zZ2lkICJSZWFkIGNvbmZpZ3VyYXRpb24gZnJvbSBhbGwgdGhlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTUKK21zZ2lkICJMb2cgdG8gdGhpcyBzeXNsb2cgZmFjaWxpdHkgb3IgZmlsZS4gKGRlZmF1bHRzIHRvIERBRU1PTikiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzk2Cittc2dpZCAiRG8gbm90IHVzZSBsZWFzZWZpbGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5NworIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IEROUyBxdWVyaWVzLiAoZGVmYXVsdHMgdG8gJXMpIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJDbGVhciBETlMgY2FjaGUgd2hlbiByZWxvYWRpbmcgJXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5OQorbXNnaWQgIklnbm9yZSBob3N0bmFtZXMgcHJvdmlkZWQgYnkgREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDAKK21zZ2lkICJEbyBOT1QgcmV1c2UgZmlsZW5hbWUgYW5kIHNlcnZlciBmaWVsZHMgZm9yIGV4dHJhIERIQ1Agb3B0aW9ucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDAxCittc2dpZCAiRW5hYmxlIGludGVncmF0ZWQgcmVhZC1vbmx5IFRGVFAgc2VydmVyLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDIKK21zZ2lkICJFeHBvcnQgZmlsZXMgYnkgVEZUUCBvbmx5IGZyb20gdGhlIHNwZWNpZmllZCBzdWJ0cmVlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDMKK21zZ2lkICJBZGQgY2xpZW50IElQIGFkZHJlc3MgdG8gdGZ0cC1yb290LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDQKK21zZ2lkICJBbGxvdyBhY2Nlc3Mgb25seSB0byBmaWxlcyBvd25lZCBieSB0aGUgdXNlciBydW5uaW5nIGRuc21hc3EuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25uY3VycmVudCBURlRQIHRyYW5zZmVycyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDYKK21zZ2lkICJEaXNhYmxlIHRoZSBURlRQIGJsb2Nrc2l6ZSBleHRlbnNpb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwNworbXNnaWQgIkNvbnZlcnQgVEZUUCBmaWxlbmFtZXMgdG8gbG93ZXJjYXNlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwOAorbXNnaWQgIkVwaGVtZXJhbCBwb3J0IHJhbmdlIGZvciB1c2UgYnkgVEZUUCB0cmFuc2ZlcnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwOQorbXNnaWQgIkV4dHJhIGxvZ2dpbmcgZm9yIERIQ1AuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxMAorbXNnaWQgIkVuYWJsZSBhc3luYy4gbG9nZ2luZzsgb3B0aW9uYWxseSBzZXQgcXVldWUgbGVuZ3RoLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTEKK21zZ2lkICJTdG9wIEROUyByZWJpbmRpbmcuIEZpbHRlciBwcml2YXRlIElQIHJhbmdlcyB3aGVuIHJlc29sdmluZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDEyCittc2dpZCAiQWxsb3cgcmViaW5kaW5nIG9mIDEyNy4wLjAuMC84LCBmb3IgUkJMIHNlcnZlcnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxMworbXNnaWQgIkluaGliaXQgRE5TLXJlYmluZCBwcm90ZWN0aW9uIG9uIHRoaXMgZG9tYWluLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTQKK21zZ2lkICJBbHdheXMgcGVyZm9ybSBETlMgcXVlcmllcyB0byBhbGwgc2VydmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE1Cittc2dpZCAiU2V0IHRhZyBpZiBjbGllbnQgaW5jbHVkZXMgbWF0Y2hpbmcgb3B0aW9uIGluIHJlcXVlc3QuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxNgorbXNnaWQgIlVzZSBhbHRlcm5hdGl2ZSBwb3J0cyBmb3IgREhDUC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE3Cittc2dpZCAiU3BlY2lmeSBOQVBUUiBETlMgcmVjb3JkLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTgKK21zZ2lkICJTcGVjaWZ5IGxvd2VzdCBwb3J0IGF2YWlsYWJsZSBmb3IgRE5TIHF1ZXJ5IHRyYW5zbWlzc2lvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE5Cittc2dpZCAiVXNlIG9ubHkgZnVsbHkgcXVhbGlmaWVkIGRvbWFpbiBuYW1lcyBmb3IgREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjAKK21zZ2lkICJHZW5lcmF0ZSBob3N0bmFtZXMgYmFzZWQgb24gTUFDIGFkZHJlc3MgZm9yIG5hbWVsZXNzIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyMQorbXNnaWQgIlVzZSB0aGVzZSBESENQIHJlbGF5cyBhcyBmdWxsIHByb3hpZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyMgorbXNnaWQgIlJlbGF5IERIQ1AgcmVxdWVzdHMgdG8gYSByZW1vdGUgc2VydmVyIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyMworbXNnaWQgIlNwZWNpZnkgYWxpYXMgbmFtZSBmb3IgTE9DQUwgRE5TIG5hbWUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyNAorbXNnaWQgIlByb21wdCB0byBzZW5kIHRvIFBYRSBjbGllbnRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjUKK21zZ2lkICJCb290IHNlcnZpY2UgZm9yIFBYRSBtZW51LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjYKK21zZ2lkICJDaGVjayBjb25maWd1cmF0aW9uIHN5bnRheC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDI3Cittc2dpZCAiQWRkIHJlcXVlc3RvcidzIE1BQyBhZGRyZXNzIHRvIGZvcndhcmRlZCBETlMgcXVlcmllcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDI4Cittc2dpZCAiQWRkIHJlcXVlc3RvcidzIElQIHN1Ym5ldCB0byBmb3J3YXJkZWQgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyOQorbXNnaWQgIlByb3h5IEROU1NFQyB2YWxpZGF0aW9uIHJlc3VsdHMgZnJvbSB1cHN0cmVhbSBuYW1lc2VydmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDMwCittc2dpZCAiQXR0ZW1wdCB0byBhbGxvY2F0ZSBzZXF1ZW50aWFsIElQIGFkZHJlc3NlcyB0byBESENQIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzMQorbXNnaWQgIkNvcHkgY29ubmVjdGlvbi10cmFjayBtYXJrIGZyb20gcXVlcmllcyB0byB1cHN0cmVhbSBjb25uZWN0aW9ucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDMyCittc2dpZCAiQWxsb3cgREhDUCBjbGllbnRzIHRvIGRvIHRoZWlyIG93biBERE5TIHVwZGF0ZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzMworbXNnaWQgIlNlbmQgcm91dGVyLWFkdmVydGlzZW1lbnRzIGZvciBpbnRlcmZhY2VzIGRvaW5nIERIQ1B2NiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzQKK21zZ2lkICJTcGVjaWZ5IERVSURfRU4tdHlwZSBESENQdjYgc2VydmVyIERVSUQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM1Cittc2dpZCAiU3BlY2lmeSBob3N0IChBL0FBQUEgYW5kIFBUUikgcmVjb3JkcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzYKK21zZ2lkICJTcGVjaWZ5IGFyYml0cmFyeSBETlMgcmVzb3VyY2UgcmVjb3JkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzNworbXNnaWQgIkJpbmQgdG8gaW50ZXJmYWNlcyBpbiB1c2UgLSBjaGVjayBmb3IgbmV3IGludGVyZmFjZXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM4Cittc2dpZCAiRXhwb3J0IGxvY2FsIG5hbWVzIHRvIGdsb2JhbCBETlMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM5Cittc2dpZCAiRG9tYWluIHRvIGV4cG9ydCB0byBnbG9iYWwgRE5TIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0MAorbXNnaWQgIlNldCBUVEwgZm9yIGF1dGhvcml0YXRpdmUgcmVwbGllcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDEKK21zZ2lkICJTZXQgYXV0aG9yaXRpdmUgem9uZSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDIKK21zZ2lkICJTZWNvbmRhcnkgYXV0aG9yaXRhdGl2ZSBuYW1lc2VydmVycyBmb3IgZm9yd2FyZCBkb21haW5zIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0MworbXNnaWQgIlBlZXJzIHdoaWNoIGFyZSBhbGxvd2VkIHRvIGRvIHpvbmUgdHJhbnNmZXIiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ0Cittc2dpZCAiU3BlY2lmeSBpcHNldHMgdG8gd2hpY2ggbWF0Y2hpbmcgZG9tYWlucyBzaG91bGQgYmUgYWRkZWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ1Cittc2dpZCAiU3BlY2lmeSBhIGRvbWFpbiBhbmQgYWRkcmVzcyByYW5nZSBmb3Igc3ludGhlc2lzZWQgbmFtZXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ2Cittc2dpZCAiQWN0aXZhdGUgRE5TU0VDIHZhbGlkYXRpb24iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ3Cittc2dpZCAiU3BlY2lmeSB0cnVzdCBhbmNob3Iga2V5IGRpZ2VzdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ4Cittc2dpZCAiRGlzYWJsZSB1cHN0cmVhbSBjaGVja2luZyBmb3IgRE5TU0VDIGRlYnVnZ2luZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ5Cittc2dpZCAiRW5zdXJlIGFuc3dlcnMgd2l0aG91dCBETlNTRUMgYXJlIGluIHVuc2lnbmVkIHpvbmVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTAKK21zZ2lkICJEb24ndCBjaGVjayBETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMgdW50aWwgZmlyc3QgY2FjaGUtcmVsb2FkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1MgorbXNnaWQgIlNwZWNpZnkgREhDUHY2IHByZWZpeCBjbGFzcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTQKK21zZ2lkICJTZXQgcHJpb3JpdHksIHJlc2VuZC1pbnRlcnZhbCBhbmQgcm91dGVyLWxpZmV0aW1lIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1NQorbXNnaWQgIkRvIG5vdCBsb2cgcm91dGluZSBESENQLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTYKK21zZ2lkICJEbyBub3QgbG9nIHJvdXRpbmUgREhDUHY2LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTcKK21zZ2lkICJEbyBub3QgbG9nIFJBLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTgKK21zZ2lkICJBY2NlcHQgcXVlcmllcyBvbmx5IGZyb20gZGlyZWN0bHktY29ubmVjdGVkIG5ldHdvcmtzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1OQorbXNnaWQgIkRldGVjdCBhbmQgcmVtb3ZlIEROUyBmb3J3YXJkaW5nIGxvb3BzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjY2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6IGRuc21hc3EgW29wdGlvbnNdXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSBzaG9ydCBvcHRpb25zIG9ubHkgb24gdGhlIGNvbW1hbmQgbGluZS5cbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo2NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVmFsaWQgb3B0aW9ucyBhcmU6XG4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NzIyIG9wdGlvbi5jOjcyNgorbXNnaWQgImJhZCBwb3J0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjc1MyBvcHRpb24uYzo3ODUKK21zZ2lkICJpbnRlcmZhY2UgYmluZGluZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjc2MiBvcHRpb24uYzozNDk0Cittc2dpZCAiYmFkIGludGVyZmFjZSBuYW1lIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjc5MgorbXNnaWQgImJhZCBhZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjk3NAorbXNnaWQgInVuc3VwcG9ydGVkIGVuY2Fwc3VsYXRpb24gZm9yIElQdjYgb3B0aW9uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjk4OAorbXNnaWQgImJhZCBkaGNwLW9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMDU2Cittc2dpZCAiYmFkIElQIGFkZHJlc3MiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTA1OSBvcHRpb24uYzoxMTk3IG9wdGlvbi5jOjI4MTIKK21zZ2lkICJiYWQgSVB2NiBhZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjEyMjQgb3B0aW9uLmM6MTMxOAorbXNnaWQgImJhZCBkb21haW4gaW4gZGhjcC1vcHRpb24iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTM1NgorbXNnaWQgImRoY3Atb3B0aW9uIHRvbyBsb25nIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjEzNjMKK21zZ2lkICJpbGxlZ2FsIGRoY3AtbWF0Y2giCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTQyNQorbXNnaWQgImlsbGVnYWwgcmVwZWF0ZWQgZmxhZyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNDMzCittc2dpZCAiaWxsZWdhbCByZXBlYXRlZCBrZXl3b3JkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE0OTUgb3B0aW9uLmM6NDA5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYWNjZXNzIGRpcmVjdG9yeSAlczogJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTU0MSB0ZnRwLmM6NDkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhY2Nlc3MgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE1ODgKK21zZ2lkICJzZXR0aW5nIGxvZyBmYWNpbGl0eSBpcyBub3QgcG9zc2libGUgdW5kZXIgQW5kcm9pZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNTk3Cittc2dpZCAiYmFkIGxvZyBmYWNpbGl0eSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNjUwCittc2dpZCAiYmFkIE1YIHByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTY1NQorbXNnaWQgImJhZCBNWCBuYW1lIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE2NjkKK21zZ2lkICJiYWQgTVggdGFyZ2V0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE2ODEKK21zZ2lkICJjYW5ub3QgcnVuIHNjcmlwdHMgdW5kZXIgdUNsaW51eCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNjgzCittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9TQ1JJUFQgZGVmaW5lZCB0byBlbmFibGUgbGVhc2UtY2hhbmdlIHNjcmlwdHMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTY4NworbXNnaWQgInJlY29tcGlsZSB3aXRoIEhBVkVfTFVBU0NSSVBUIGRlZmluZWQgdG8gZW5hYmxlIEx1YSBzY3JpcHRzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE5Mjggb3B0aW9uLmM6MTk2NiBvcHRpb24uYzoyMDE1Cittc2dpZCAiYmFkIHByZWZpeCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyMjg5Cittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9JUFNFVCBkZWZpbmVkIHRvIGVuYWJsZSBpcHNldCBkaXJlY3RpdmVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0NjkKK21zZ2lkICJiYWQgcG9ydCByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNDg1Cittc2dpZCAiYmFkIGJyaWRnZS1pbnRlcmZhY2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjU0NQorbXNnaWQgIm9ubHkgb25lIHRhZyBhbGxvd2VkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1NjUgb3B0aW9uLmM6MjU3NyBvcHRpb24uYzoyNjgzIG9wdGlvbi5jOjI3MjQKK21zZ2lkICJiYWQgZGhjcC1yYW5nZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTkyCittc2dpZCAiaW5jb25zaXN0ZW50IERIQ1AgcmFuZ2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjY1MQorbXNnaWQgInByZWZpeCBsZW5ndGggbXVzdCBiZSBleGFjdGx5IDY0IGZvciBSQSBzdWJuZXRzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2NTMKK21zZ2lkICJwcmVmaXggbGVuZ3RoIG11c3QgYmUgZXhhY3RseSA2NCBmb3Igc3VibmV0IGNvbnN0cnVjdG9ycyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjU3Cittc2dpZCAicHJlZml4IGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0IDY0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2NjAKK21zZ2lkICJpbmNvbnNpc3RlbnQgREhDUHY2IHJhbmdlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2NzEKK21zZ2lkICJwcmVmaXggbXVzdCBiZSB6ZXJvIHdpdGggXCJjb25zdHJ1Y3RvcjpcIiBhcmd1bWVudCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNzgyIG9wdGlvbi5jOjI4MzAKK21zZ2lkICJiYWQgaGV4IGNvbnN0YW50IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4MDQKK21zZ2lkICJjYW5ub3QgbWF0Y2ggdGFncyBpbiAtLWRoY3AtaG9zdCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyODUyCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBkaGNwLWhvc3QgSVAgYWRkcmVzcyAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyOTEwCittc2dpZCAiYmFkIERIQ1AgaG9zdCBuYW1lIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5OTIKK21zZ2lkICJiYWQgdGFnLWlmIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMzMTYgb3B0aW9uLmM6MzcxMAorbXNnaWQgImludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzM3OAorbXNnaWQgImJhZCBkaGNwLXByb3h5IGFkZHJlc3MiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzQwNAorbXNnaWQgIkJhZCBkaGNwLXJlbGF5IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM0MzAKK21zZ2lkICJiYWQgUkEtcGFyYW1zIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM0MzkKK21zZ2lkICJiYWQgRFVJRCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDgxCittc2dpZCAiaW52YWxpZCBhbGlhcyByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNTM1Cittc2dpZCAiYmFkIENOQU1FIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1NDAKK21zZ2lkICJkdXBsaWNhdGUgQ05BTUUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzU2MAorbXNnaWQgImJhZCBQVFIgcmVjb3JkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1OTEKK21zZ2lkICJiYWQgTkFQVFIgcmVjb3JkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2MjUKK21zZ2lkICJiYWQgUlIgcmVjb3JkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2NTUKK21zZ2lkICJiYWQgVFhUIHJlY29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNjk2Cittc2dpZCAiYmFkIFNSViByZWNvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzcwMworbXNnaWQgImJhZCBTUlYgdGFyZ2V0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3MTcKK21zZ2lkICJpbnZhbGlkIHByaW9yaXR5IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3MjQKK21zZ2lkICJpbnZhbGlkIHdlaWdodCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNzQ4Cittc2dpZCAiQmFkIGhvc3QtcmVjb3JkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3NjUKK21zZ2lkICJCYWQgbmFtZSBpbiBob3N0LXJlY29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODI2Cittc2dpZCAiYmFkIHRydXN0IGFuY2hvciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODQwCittc2dpZCAiYmFkIEhFWCBpbiB0cnVzdCBhbmNob3IiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg1MAorbXNnaWQgInVuc3VwcG9ydGVkIG9wdGlvbiAoY2hlY2sgdGhhdCBkbnNtYXNxIHdhcyBjb21waWxlZCB3aXRoIERIQ1AvVEZUUC9ETlNTRUMvREJ1cyBzdXBwb3J0KSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTA5Cittc2dpZCAibWlzc2luZyBcIiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTY2Cittc2dpZCAiYmFkIG9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTY4Cittc2dpZCAiZXh0cmFuZW91cyBwYXJhbWV0ZXIiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzk3MAorbXNnaWQgIm1pc3NpbmcgcGFyYW1ldGVyIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5NzIKK21zZ2lkICJpbGxlZ2FsIG9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTc5Cittc2dpZCAiZXJyb3IiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzk4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgYXQgbGluZSAlZCBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDQ1IG9wdGlvbi5jOjQxNjggdGZ0cC5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlczogJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDIyOSBvcHRpb24uYzo0MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDMzMQorbXNnaWQgImp1bmsgZm91bmQgaW4gY29tbWFuZCBsaW5lIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG5zbWFzcSB2ZXJzaW9uICVzICAlc1xuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvbXBpbGUgdGltZSBvcHRpb25zOiAlc1xuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuXG4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0XG4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIgb3IgMy5cbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzgxCittc2dpZCAidHJ5IC0taGVscCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzgzCittc2dpZCAidHJ5IC13IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbW1hbmQgbGluZSBvcHRpb25zOiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBnZXQgaG9zdC1uYW1lOiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDYyCittc2dpZCAib25seSBvbmUgcmVzb2x2LmNvbmYgZmlsZSBhbGxvd2VkIGluIG5vLXBvbGwgbW9kZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ3MgorbXNnaWQgIm11c3QgaGF2ZSBleGFjdGx5IG9uZSByZXNvbHYuY29uZiB0byByZWFkIGRvbWFpbiBmcm9tLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDc1IG5ldHdvcmsuYzoxNTA2IGRoY3AuYzo3NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2VhcmNoIGRpcmVjdGl2ZSBmb3VuZCBpbiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTEzCittc2dpZCAidGhlcmUgbXVzdCBiZSBhIGRlZmF1bHQgZG9tYWluIHdoZW4gLS1kaGNwLWZxZG4gaXMgc2V0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1MjIKK21zZ2lkICJzeW50YXggY2hlY2sgT0siCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2VuZCBwYWNrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzo1NzQKK21zZ2lkICJkaXNjYXJkaW5nIEROUyByZXBseTogc3VibmV0IG9wdGlvbiBtaXNtYXRjaCIKK21zZ3N0ciAiIgorCisjOiBmb3J3YXJkLmM6NTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5hbWVzZXJ2ZXIgJXMgcmVmdXNlZCB0byBkbyBhIHJlY3Vyc2l2ZSBxdWVyeSIKK21zZ3N0ciAiIgorCisjOiBmb3J3YXJkLmM6NjI5CisjLCBjLWZvcm1hdAorbXNnaWQgInBvc3NpYmxlIEROUy1yZWJpbmQgYXR0YWNrIGRldGVjdGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBmb3J3YXJkLmM6MTEzMiBmb3J3YXJkLmM6MTY2MworbXNnaWQgIklnbm9yaW5nIHF1ZXJ5IGZyb20gbm9uLWxvY2FsIG5ldHdvcmsiCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjIxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBETlMgcXVlcmllcyByZWFjaGVkIChtYXg6ICVkKSIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6NzE1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgbGlzdGVuaW5nIHNvY2tldCBmb3IgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxMDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkxPVUQgV0FSTklORzogbGlzdGVuaW5nIG9uICVzIG1heSBhY2NlcHQgcmVxdWVzdHMgdmlhIGludGVyZmFjZXMgb3RoZXIgdGhhbiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTAyOAorbXNnaWQgIkxPVUQgV0FSTklORzogdXNlIC0tYmluZC1keW5hbWljIHJhdGhlciB0aGFuIC0tYmluZC1pbnRlcmZhY2VzIHRvIGF2b2lkIEROUyBhbXBsaWZpY2F0aW9uIGF0dGFja3MgdmlhIHRoZXNlIGludGVyZmFjZShzKSIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTAzNworIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBubyBhZGRyZXNzZXMgZm91bmQgZm9yIGludGVyZmFjZSAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTA5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnRlcmZhY2UgJXMgZmFpbGVkIHRvIGpvaW4gREhDUHY2IG11bHRpY2FzdCBncm91cDogJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjEyODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgc2VydmVyIHNvY2tldCBmb3IgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIG5hbWVzZXJ2ZXIgJXMgLSBsb2NhbCBpbnRlcmZhY2UiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGNhbm5vdCBtYWtlL2JpbmQgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTQ2OAorbXNnaWQgInVucXVhbGlmaWVkIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNDY4Cittc2dpZCAibmFtZXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE0NzAKK21zZ2lkICJkZWZhdWx0IgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNDcyCittc2dpZCAiZG9tYWluIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNDc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIGxvY2FsIGFkZHJlc3NlcyBvbmx5IGZvciAlcyAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTQ3NworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBzdGFuZGFyZCBuYW1lc2VydmVycyBmb3IgJXMgJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCBmb3IgJXMgJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTk9UIHVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQgLSBxdWVyeSBsb29wIGRldGVjdGVkIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNDg2CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQodmlhICVzKSIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxNTQKK21zZ2lkICJObyB0cnVzdCBhbmNob3JzIHByb3ZpZGVkIGZvciBETlNTRUMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE1NworbXNnaWQgIkNhbm5vdCByZWR1Y2UgY2FjaGUgc2l6ZSBmcm9tIGRlZmF1bHQgd2hlbiBETlNTRUMgZW5hYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTU5Cittc2dpZCAiRE5TU0VDIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0ROU1NFQyBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE2NQorbXNnaWQgIlRGVFAgc2VydmVyIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX1RGVFAgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxNzAKK21zZ2lkICJDYW5ub3QgdXNlIC0tY29ubnRyYWNrIEFORCAtLXF1ZXJ5LXBvcnQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE3MworbXNnaWQgIkNvbm50cmFjayBzdXBwb3J0IG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0NPTk5UUkFDSyBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE3OAorbXNnaWQgImFzeWNocm9ub3VzIGxvZ2dpbmcgaXMgbm90IGF2YWlsYWJsZSB1bmRlciBTb2xhcmlzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxODMKK21zZ2lkICJhc3ljaHJvbm91cyBsb2dnaW5nIGlzIG5vdCBhdmFpbGFibGUgdW5kZXIgQW5kcm9pZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTg4Cittc2dpZCAiYXV0aG9yaXRhdGl2ZSBETlMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfQVVUSCBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE5MworbXNnaWQgIkxvb3AgZGV0ZWN0aW9uIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0xPT1AgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyMDEKK21zZ2lkICJ6b25lIHNlcmlhbCBtdXN0IGJlIGNvbmZpZ3VyZWQgaW4gLS1hdXRoLXNvYSIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MjE5Cittc2dpZCAiZGhjcC1yYW5nZSBjb25zdHJ1Y3RvciBub3QgYXZhaWxhYmxlIG9uIHRoaXMgcGxhdGZvcm0iCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjI2MgorbXNnaWQgImNhbm5vdCBzZXQgLS1iaW5kLWludGVyZmFjZXMgYW5kIC0tYmluZC1keW5hbWljIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQgbGlzdCBvZiBpbnRlcmZhY2VzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6Mjc0CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW50ZXJmYWNlICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzozMzAgZG5zbWFzcS5jOjk1NAorIywgYy1mb3JtYXQKK21zZ2lkICJEQnVzIGVycm9yOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MzMzCittc2dpZCAiREJ1cyBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9EQlVTIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MzYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdXNlciBvciBncm91cDogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjQxNgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gZmlsZXN5c3RlbSByb290OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NjUzCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgRE5TIGRpc2FibGVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo2NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnRlZCwgdmVyc2lvbiAlcyBjYWNoZXNpemUgJWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjY1NworIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIGNhY2hlIGRpc2FibGVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tcGlsZSB0aW1lIG9wdGlvbnM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo2NjUKK21zZ2lkICJEQnVzIHN1cHBvcnQgZW5hYmxlZDogY29ubmVjdGVkIHRvIHN5c3RlbSBidXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjY2NworbXNnaWQgIkRCdXMgc3VwcG9ydCBlbmFibGVkOiBidXMgY29ubmVjdGlvbiBwZW5kaW5nIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo2NzIKK21zZ2lkICJETlMgc2VydmljZSBsaW1pdGVkIHRvIGxvY2FsIHN1Ym5ldHMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjY3NworbXNnaWQgIkROU1NFQyB2YWxpZGF0aW9uIGVuYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjY3OQorbXNnaWQgIkROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyBub3QgY2hlY2tlZCB1bnRpbCBmaXJzdCBjYWNoZSByZWxvYWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjY4NAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBmYWlsZWQgdG8gY2hhbmdlIG93bmVyIG9mICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6Njg4Cittc2dpZCAic2V0dGluZyAtLWJpbmQtaW50ZXJmYWNlcyBvcHRpb24gYmVjYXVzZSBvZiBPUyBsaW1pdGF0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGludGVyZmFjZSAlcyBkb2VzIG5vdCBjdXJyZW50bHkgZXhpc3QiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjcwMworbXNnaWQgIndhcm5pbmc6IGlnbm9yaW5nIHJlc29sdi1maWxlIGZsYWcgYmVjYXVzZSBuby1yZXNvbHYgaXMgc2V0IgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3MDYKK21zZ2lkICJ3YXJuaW5nOiBubyB1cHN0cmVhbSBzZXJ2ZXJzIGNvbmZpZ3VyZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjcxMAorIywgYy1mb3JtYXQKK21zZ2lkICJhc3luY2hyb25vdXMgbG9nZ2luZyBlbmFibGVkLCBxdWV1ZSBsaW1pdCBpcyAlZCBtZXNzYWdlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzMxCittc2dpZCAiSVB2NiByb3V0ZXIgYWR2ZXJ0aXNlbWVudCBlbmFibGVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCwgc29ja2V0cyBib3VuZCBleGNsdXNpdmVseSB0byBpbnRlcmZhY2UgJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc1MworbXNnaWQgInJvb3QgaXMgIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3NTMKK21zZ2lkICJlbmFibGVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3NTUKK21zZ2lkICJzZWN1cmUgbW9kZSIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlc3RyaWN0aW5nIG1heGltdW0gc2ltdWx0YW5lb3VzIFRGVFAgdHJhbnNmZXJzIHRvICVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo5NTYKK21zZ2lkICJjb25uZWN0ZWQgdG8gc3lzdGVtIERCdXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjExMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZvcmsgaW50byBiYWNrZ3JvdW5kOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGhlbHBlcjogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjExMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic2V0dGluZyBjYXBhYmlsaXRpZXMgZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTExNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2hhbmdlIHVzZXItaWQgdG8gJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMTE4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjaGFuZ2UgZ3JvdXAtaWQgdG8gJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMTIxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIHBpZGZpbGUgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIGxvZyAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjExMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgTHVhIHNjcmlwdDogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjExMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVEZUUCBkaXJlY3RvcnkgJXMgaW5hY2Nlc3NpYmxlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTE1MQorbXNnaWQgIm5vdyBjaGVja2luZyBETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjEyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic2NyaXB0IHByb2Nlc3Mga2lsbGVkIGJ5IHNpZ25hbCAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJzY3JpcHQgcHJvY2VzcyBleGl0ZWQgd2l0aCBzdGF0dXMgJWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjEyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4ZWN1dGUgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMjgxCittc2dpZCAiZXhpdGluZyBvbiByZWNlaXB0IG9mIFNJR1RFUk0iCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjEzMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFjY2VzcyAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjEzMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzZXJ2ZXJzIGZvdW5kIGluICVzLCB3aWxsIHJldHJ5IgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBvcHRpb25zIG9uIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBTT19SRVVTRXtBRERSfFBPUlR9IG9uIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6MTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIERIQ1Agc2VydmVyIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIElDTVAgcmF3IHNvY2tldDogJXMuIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzoyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbnRlcmZhY2UgJXMgaW4gYnJpZGdlLWludGVyZmFjZSIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcGFja2V0IHJlY2VpdmVkIG9uICVzIHdoaWNoIGhhcyBubyBhZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQVJQLWNhY2hlIGluamVjdGlvbiBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo1MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByYW5nZSAlcyAtLSAlcyBpcyBub3QgY29uc2lzdGVudCB3aXRoIG5ldG1hc2sgJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjgwNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbGluZSBhdCAlcyBsaW5lICVkIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJXMgbGluZSAlZCwgZHVwbGljYXRlIG5hbWUgb3IgSVAgYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6OTk0IHJmYzMzMTUuYzoyMDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVsYXkgJXMgLT4gJXMiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzo2MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBvciBjcmVhdGUgbGVhc2UgZmlsZSAlczogJXMiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzoxMzQKK21zZ2lkICJ0b28gbWFueSBzdG9yZWQgbGVhc2VzIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBydW4gbGVhc2UtaW5pdCBzY3JpcHQgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgImxlYXNlLWluaXQgc2NyaXB0IHJldHVybmVkIGV4aXQgY29kZSAlcyIKK21zZ3N0ciAiIgorCisjOiBsZWFzZS5jOjM0MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgJXM6ICVzIChyZXRyeSBpbiAldXMpIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6OTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIklnbm9yaW5nIGRvbWFpbiAlcyBmb3IgREhDUCBob3N0IG5hbWUgJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjM0MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBhZGRyZXNzIHJhbmdlIGF2YWlsYWJsZSBmb3IgREhDUCByZXF1ZXN0ICVzICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzozNDMKK21zZ2lkICJ3aXRoIHN1Ym5ldCBzZWxlY3RvciIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MzQzCittc2dpZCAidmlhIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzozNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYXZhaWxhYmxlIERIQ1Agc3VibmV0OiAlcy8lcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MzU4IHJmYzMzMTUuYzozMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYXZhaWxhYmxlIERIQ1AgcmFuZ2U6ICVzIC0tICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgdmVuZG9yIGNsYXNzOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHVzZXIgY2xhc3M6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo0OTgKK21zZ2lkICJkaXNhYmxlZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NTM5IHJmYzIxMzEuYzo5NjcgcmZjMjEzMS5jOjEzODUgcmZjMzMxNS5jOjYwMiByZmMzMzE1LmM6ODIzCisjOiByZmMzMzE1LmM6MTA5NQorbXNnaWQgImlnbm9yZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjU1NCByZmMyMTMxLmM6MTIwNSByZmMzMzE1LmM6ODczCittc2dpZCAiYWRkcmVzcyBpbiB1c2UiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjU2OCByZmMyMTMxLmM6MTAyMQorbXNnaWQgIm5vIGFkZHJlc3MgYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo1NzUgcmZjMjEzMS5jOjExNjgKK21zZ2lkICJ3cm9uZyBuZXR3b3JrIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo1OTAKK21zZ2lkICJubyBhZGRyZXNzIGNvbmZpZ3VyZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjU5NiByZmMyMTMxLmM6MTIxOAorbXNnaWQgIm5vIGxlYXNlcyBsZWZ0IgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo2OTEgcmZjMzMxNS5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBjbGllbnQgcHJvdmlkZXMgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjc5NgorbXNnaWQgIlBYRSBCSVMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6OTM1IHJmYzMzMTUuYzoxMTg5CisjLCBjLWZvcm1hdAorbXNnaWQgImRpc2FibGluZyBESENQIHN0YXRpYyBhZGRyZXNzICVzIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6OTU2Cittc2dpZCAidW5rbm93biBsZWFzZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6OTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCBpcyBsZWFzZWQgdG8gJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IGlzIGluIHVzZSBieSB0aGUgc2VydmVyIG9yIHJlbGF5IgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCB3YXMgcHJldmlvdXNseSBkZWNsaW5lZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTAxOSByZmMyMTMxLmM6MTIxMQorbXNnaWQgIm5vIHVuaXF1ZS1pZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTEwNgorbXNnaWQgIndyb25nIHNlcnZlci1JRCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTEyNQorbXNnaWQgIndyb25nIGFkZHJlc3MiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjExNDMgcmZjMzMxNS5jOjk2OQorbXNnaWQgImxlYXNlIG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTE3NgorbXNnaWQgImFkZHJlc3Mgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTE4NworbXNnaWQgInN0YXRpYyBsZWFzZSBhdmFpbGFibGUiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjExOTEKK21zZ2lkICJhZGRyZXNzIHJlc2VydmVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMTk5CisjLCBjLWZvcm1hdAorbXNnaWQgImFiYW5kb25pbmcgbGVhc2UgdG8gJXMgb2YgJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYm9vdGZpbGUgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE3MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgc2VydmVyIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxNzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IG5leHQgc2VydmVyOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTczMgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBicm9hZGNhc3QgcmVzcG9uc2UiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE3OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHNlbmQgREhDUC9CT09UUCBvcHRpb24gJWQ6IG5vIHNwYWNlIGxlZnQgaW4gcGFja2V0IgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoyMDM2Cittc2dpZCAiUFhFIG1lbnUgdG9vIGxhcmdlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoyMTczIHJmYzMzMTUuYzoxNDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHJlcXVlc3RlZCBvcHRpb25zOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MjQ1MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc2VuZCBSRkMzOTI1IG9wdGlvbjogdG9vIG1hbnkgb3B0aW9ucyBmb3IgZW50ZXJwcmlzZSBudW1iZXIgJWQiCittc2dzdHIgIiIKKworIzogbmV0bGluay5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgbmV0bGluayBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IG5ldGxpbmsuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV0bGluayByZXR1cm5zIGVycm9yOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkYnVzLmM6MTcxCittc2dpZCAiYXR0ZW1wdCB0byBzZXQgYW4gSVB2NiBzZXJ2ZXIgYWRkcmVzcyB2aWEgREJ1cyAtIG5vIElQdjYgc3VwcG9ydCIKK21zZ3N0ciAiIgorCisjOiBkYnVzLmM6NTAwCittc2dpZCAic2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzIGZyb20gREJ1cyIKK21zZ3N0ciAiIgorCisjOiBkYnVzLmM6NTQ3Cittc2dpZCAiY291bGQgbm90IHJlZ2lzdGVyIGEgREJ1cyBtZXNzYWdlIGhhbmRsZXIiCittc2dzdHIgIiIKKworIzogYnBmLmM6MjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUCBCUEYgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBicGYuYzoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByZXF1ZXN0IGZvciB1bnN1cHBvcnRlZCBoYXJkd2FyZSB0eXBlICglZCkgcmVjZWl2ZWQgb24gJXMiCittc2dzdHIgIiIKKworIzogYnBmLmM6Mzc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgUEZfUk9VVEUgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBicGYuYzozOTcKK21zZ2lkICJVbmtub3duIHByb3RvY29sIHZlcnNpb24gZnJvbSByb3V0ZSBzb2NrZXQiCittc2dzdHIgIiIKKworIzogaGVscGVyLmM6MTUzCittc2dpZCAibGVhc2UoKSBmdW5jdGlvbiBtaXNzaW5nIGluIEx1YSBzY3JpcHQiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjMwOQorbXNnaWQgInVuYWJsZSB0byBnZXQgZnJlZSBwb3J0IGZvciBURlRQIgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzozMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgcmVxdWVzdCBmcm9tICVzIgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzo0MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBub3QgZm91bmQiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciAlZCAlcyByZWNlaXZlZCBmcm9tICVzIgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHNlbmRpbmcgJXMgdG8gJXMiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICJzZW50ICVzIHRvICVzIgorbXNnc3RyICIiCisKKyM6IGxvZy5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyZmxvdzogJWQgbG9nIGVudHJpZXMgbG9zdCIKK21zZ3N0ciAiIgorCisjOiBsb2cuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZhaWxlZDogJXMiCittc2dzdHIgIiIKKworIzogbG9nLmM6NDcyCittc2dpZCAiRkFJTEVEIHRvIHN0YXJ0IHVwIgorbXNnc3RyICIiCisKKyM6IGNvbm50cmFjay5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbm50cmFjayBjb25uZWN0aW9uIG1hcmsgcmV0cmlldmFsIGZhaWxlZDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcDYuYzo1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1B2NiBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3A2LmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBTT19SRVVTRXtBRERSfFBPUlR9IG9uIERIQ1B2NiBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3A2LmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgREhDUHY2IHNlcnZlciBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgZm9yIERIQ1B2NiByZXF1ZXN0IGZyb20gcmVsYXkgYXQgJXMiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBhZGRyZXNzIHJhbmdlIGF2YWlsYWJsZSBmb3IgREhDUHY2IHJlcXVlc3QgdmlhICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzoyOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYXZhaWxhYmxlIERIQ1B2NiBzdWJuZXQ6ICVzLyVkIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgdmVuZG9yIGNsYXNzOiAldSIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6NDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGNsaWVudCBNQUMgYWRkcmVzczogJXMiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHByZWZpeC1jbGFzcyAlZCIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6NzkxIHJmYzMzMTUuYzo5MTMKK21zZ2lkICJzdWNjZXNzIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzo4MDYgcmZjMzMxNS5jOjgwOCByZmMzMzE1LmM6OTIxIHJmYzMzMTUuYzo5MjMKK21zZ2lkICJubyBhZGRyZXNzZXMgYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzo4NjUKK21zZ2lkICJhZGRyZXNzIHVuYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzo5MDAKK21zZ2lkICJub3Qgb24gbGluayIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6OTczIHJmYzMzMTUuYzoxMTUxIHJmYzMzMTUuYzoxMjI4Cittc2dpZCAibm8gYmluZGluZyBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6MTAxMQorbXNnaWQgImRlcHJlY2F0ZWQiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjEwMTYKK21zZ2lkICJhZGRyZXNzIGludmFsaWQiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjEwNjEKK21zZ2lkICJjb25maXJtIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6MTA3MgorbXNnaWQgImFsbCBhZGRyZXNzZXMgc3RpbGwgb24gbGluayIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6MTE2MAorbXNnaWQgInJlbGVhc2UgcmVjZWl2ZWQiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjIwODAKK21zZ2lkICJDYW5ub3QgbXVsdGljYXN0IHRvIERIQ1B2NiBzZXJ2ZXIgd2l0aG91dCBjb3JyZWN0IGludGVyZmFjZSIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJJZ25vcmluZyBkdXBsaWNhdGUgZGhjcC1vcHRpb24gJWQiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgdGFnczogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG1vcmUgdGhhbiBvbmUgYWRkcmVzcyBpbiBob3N0c2ZpbGUsIHVzaW5nICVzIGZvciBESENQIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBJUCBhZGRyZXNzICVzICglcykgaW4gZGhjcC1jb25maWcgZGlyZWN0aXZlIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6NDk0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgU09fQklORFRPREVWSUNFIG9uIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJLbm93biBESENQIG9wdGlvbnM6XG4iCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiS25vd24gREhDUHY2IG9wdGlvbnM6XG4iCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4MjMKK21zZ2lkICIsIHByZWZpeCBkZXByZWNhdGVkIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgbGVhc2UgdGltZSAiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3RhdGVsZXNzIG9uICVzJS4wcyUuMHMlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjg3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgc3RhdGljIGxlYXNlcyBvbmx5IG9uICUuMHMlcyVzJS4wcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjg3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgcHJveHkgb24gc3VibmV0ICUuMHMlcyUuMHMlLjBzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBJUCByYW5nZSAlcyAtLSAlcyVzJS4wcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjg4NgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQdjQtZGVyaXZlZCBJUHY2IG5hbWVzIG9uICVzJXMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAicm91dGVyIGFkdmVydGlzZW1lbnQgb24gJXMlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlbGF5IGZyb20gJXMgdG8gJXMgdmlhICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6OTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVsYXkgZnJvbSAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiByYWR2LmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBJQ01QdjYgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBhdXRoLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHpvbmUgdHJhbnNmZXIgcmVxdWVzdCBmcm9tICVzIgorbXNnc3RyICIiCisKKyM6IGlwc2V0LmM6OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQga2VybmVsIHZlcnNpb246ICVzIgorbXNnc3RyICIiCisKKyM6IGlwc2V0LmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgSVBzZXQgY29udHJvbCBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGJsb2NrZGF0YS5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkROU1NFQyBtZW1vcnkgaW4gdXNlICV1LCBtYXggJXUsIGFsbG9jYXRlZCAldSIKK21zZ3N0ciAiIgorCisjOiB0YWJsZXMuYzo3NgorbXNnaWQgImVycm9yOiBmaWxsX2FkZHIgbWlzc3VzZWQiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTA1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhY2Nlc3MgcGYgZGV2aWNlczogJXMiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IG5vIG9wZW5lZCBwZiBkZXZpY2VzICVzIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvcjogY2Fubm90IHVzZSB0YWJsZSBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvcjogY2Fubm90IHN0cmxjcHkgdGFibGUgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiB0YWJsZXMuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogcGZyX2FkZF90YWJsZXM6ICVzKCVkKSIKK21zZ3N0ciAiIgorCisjOiB0YWJsZXMuYzoxNDcKK21zZ2lkICJpbmZvOiB0YWJsZSBjcmVhdGVkIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBESU9DUiVzQUREUlM6ICVzIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBhZGRyZXNzZXMgJXMiCittc2dzdHIgIiIKZGlmZiAtLWdpdCBhL3BvL2ZyLnBvIGIvcG8vZnIucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFjNDg0OAotLS0gL2Rldi9udWxsCisrKyBiL3BvL2ZyLnBvCkBAIC0wLDAgKzEsMjE2MyBAQAorIyBGcmVuY2ggdHJhbnNsYXRpb25zIGZvciBkbnNtYXNxIHBhY2thZ2UuCisjIFRoaXMgZmlsZSBpcyBwdXQgaW4gdGhlIHB1YmxpYyBkb21haW4uCisjIExpb25lbCBUcmljb24gPGxpb25lbC50cmljb25AZnJlZS5mcj4sIDIwMDUuCisjIFRyYW5zbGF0aW9uIGNvbXBsZXRlZCBieSBHaWxkYXMgTGUgTmFkYW4gPDNudHIwcDEzQGdtYWlsLmNvbT4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGRuc21hc3EgMi42N1xuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOS0wNi0xOCAxMjoyNCswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMy0xMC0yNCAxOToyNCsxMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiAgR2lsZGFzIExlIE5hZGFuIDwzbnRyMHAxM0BnbWFpbC5jb20+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMVxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiA+IDEpO1xuIgorCisjOiBjYWNoZS5jOjUwNQorbXNnaWQgIkludGVybmFsIGVycm9yIGluIGNhY2hlLiIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjkwOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBuYW1lcyBmcm9tICVzOiAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBjaGFyZ2VyIGxlcyBub21zIOAgcGFydGlyIGRlICVzIDogJXMiCisKKyM6IGNhY2hlLmM6OTM0IGRoY3AuYzo4MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGFkZHJlc3MgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAibWF1dmFpc2UgYWRyZXNzZSBkYW5zICVzIGxpZ25lICVkIgorCisjOiBjYWNoZS5jOjk4NSBkaGNwLmM6ODM2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBuYW1lIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgIm1hdXZhaXMgbm9tIGRhbnMgJXMgbGlnbmUgJWQiCisKKyM6IGNhY2hlLmM6OTkyIGRoY3AuYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCAlcyAtICVkIGFkZHJlc3NlcyIKK21zZ3N0ciAibGVjdHVyZSAlcyAtICVkIGFkcmVzc2VzIgorCisjOiBjYWNoZS5jOjExMDAKK21zZ2lkICJjbGVhcmVkIGNhY2hlIgorbXNnc3RyICJjYWNoZSB2aWTpIgorCisjOiBjYWNoZS5jOjExMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gSVB2NCBhZGRyZXNzIGZvdW5kIGZvciAlcyIKK21zZ3N0ciAiQXVjdW5lIGFkcmVzc2UgSVB2NCB0cm91dullIHBvdXIgJXMiCisKKyM6IGNhY2hlLmM6MTIwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBhIENOQU1FLCBub3QgZ2l2aW5nIGl0IHRvIHRoZSBESENQIGxlYXNlIG9mICVzIgorbXNnc3RyICIlcyBlc3QgdW4gQ05BTUUsIGlsIG5lIHNlcmEgcGFzIGRvbm7pIGF1IGJhaWwgREhDUCBkZSAlcyIKKworIzogY2FjaGUuYzoxMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBnaXZpbmcgbmFtZSAlcyB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyBiZWNhdXNlIHRoZSBuYW1lIGV4aXN0cyBpbiAlcyB3aXRoIGFkZHJlc3MgJXMiCittc2dzdHIgIm5lIGRvbm5lIHBhcyBkZSBub20gJXMgYXUgYmFpbCBESENQIGRlICVzIHBhcmNlLXF1ZSBsZSBub20gZXhpc3RlIGRhbnMgJXMgYXZlYyBsJ2FkcmVzc2UgJXMiCisKKyM6IGNhY2hlLmM6MTM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lICVsdSIKK21zZ3N0ciAiaG9yb2RhdGFnZSAlbHUiCisKKyM6IGNhY2hlLmM6MTM2NworIywgYy1mb3JtYXQKK21zZ2lkICJjYWNoZSBzaXplICVkLCAlZC8lZCBjYWNoZSBpbnNlcnRpb25zIHJlLXVzZWQgdW5leHBpcmVkIGNhY2hlIGVudHJpZXMuIgorbXNnc3RyICJ0YWlsbGUgZGUgY2FjaGUgJWQsICVkLyVkIGluc2VydGlvbnMgZGFucyBsZSBjYWNoZSBlbnRy6WVzIG5vbi1leHBpcullcyBy6XV0aWxpc+llcyIKKworIzogY2FjaGUuYzoxMzY5CisjLCBjLWZvcm1hdAorbXNnaWQgInF1ZXJpZXMgZm9yd2FyZGVkICV1LCBxdWVyaWVzIGFuc3dlcmVkIGxvY2FsbHkgJXUiCittc2dzdHIgInJlcXXqdGVzIHRyYW5zbWlzZXMgJXUsIHJlcXXqdGVzIHLpc29sdWVzIGxvY2FsZW1lbnQgJXUiCisKKyM6IGNhY2hlLmM6MTM3MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicXVlcmllcyBmb3IgYXV0aG9yaXRhdGl2ZSB6b25lcyAldSIKK21zZ3N0ciAiQ29uZmlndXJlIGxhIGR1cullIGRlIHZpZSAoVGltZSBUbyBMaXZlKSBwb3VyIGxlcyBy6XBvbnNlcyBmYWlzYW50IGF1dG9yaXTpIgorCisjOiBjYWNoZS5jOjEzOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyICVzIyVkOiBxdWVyaWVzIHNlbnQgJXUsIHJldHJpZWQgb3IgZmFpbGVkICV1IgorbXNnc3RyICJzZXJ2ZXVyICVzIyVkOiByZXF16nRlcyBlbnZveellcyAldSwgcmVxdep0ZXMgcullc3NheellcyBvdSDpY2hvdellcyAldSIKKworIzogdXRpbC5jOjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZWVkIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcjogJXMiCittc2dzdHIgImltcG9zc2libGUgZCdpbml0aWFsaXNlciBsZSBn6W7pcmF0ZXVyIGRlIG5vbWJyZSBhbOlhdG9pcmUgOiAlcyIKKworIzogdXRpbC5jOjIwNQorbXNnaWQgImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkiCittc2dzdHIgImltcG9zc2libGUgZCdhbGxvdWVyIGxhIG3pbW9pcmUiCisKKyM6IHV0aWwuYzoyNDMgb3B0aW9uLmM6NTc5Cittc2dpZCAiY291bGQgbm90IGdldCBtZW1vcnkiCittc2dzdHIgImltcG9zc2libGUgZCdhbGxvdWVyIGRlIGxhIG3pbW9pcmUiCisKKyM6IHV0aWwuYzoyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBwaXBlOiAlcyIKK21zZ3N0ciAiTmUgcGV1dCBwYXMgY3LpZXIgbGUgdHViZSAlcyA6ICVzIgorCisjOiB1dGlsLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhbGxvY2F0ZSAlZCBieXRlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FsbG91ZXIgJWQgb2N0ZXRzIgorCisjOiB1dGlsLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgImluZmluaXRlIgorbXNnc3RyICJpbGxpbWl06ShlKSIKKworIzogb3B0aW9uLmM6MzE4Cittc2dpZCAiU3BlY2lmeSBsb2NhbCBhZGRyZXNzKGVzKSB0byBsaXN0ZW4gb24uIgorbXNnc3RyICJTcOljaWZpZSBsYSBvdSBsZXMgYWRyZXNzZShzKSBsb2NhbGVzIG/5IGxlIGTpbW9uIGRvaXQgc2UgbWV0dHJlIOAgbCfpY291dGUuIgorCisjOiBvcHRpb24uYzozMTkKK21zZ2lkICJSZXR1cm4gaXBhZGRyIGZvciBhbGwgaG9zdHMgaW4gc3BlY2lmaWVkIGRvbWFpbnMuIgorbXNnc3RyICJSZXRvdXJuZSBsZXMgYWRyZXNzZXMgSVAgcG91ciB0b3V0ZXMgbGVzIG1hY2hpbmVzIHBy6XNlbnRlcyBkYW5zIGxlcyBkb21haW5lcyBzcOljaWZp6XMiCisKKyM6IG9wdGlvbi5jOjMyMAorbXNnaWQgIkZha2UgcmV2ZXJzZSBsb29rdXBzIGZvciBSRkMxOTE4IHByaXZhdGUgYWRkcmVzcyByYW5nZXMuIgorbXNnc3RyICJUcmFkdWN0aW9uIGludmVyc2UgdHJ1cXXpZSBwb3VyIGxhIHBsYWdlIGQnYWRyZXNzZSBwcml26WUgUkZDMTkxOCIKKworIzogb3B0aW9uLmM6MzIxCittc2dpZCAiVHJlYXQgaXBhZGRyIGFzIE5YRE9NQUlOIChkZWZlYXRzIFZlcmlzaWduIHdpbGRjYXJkKS4iCittc2dzdHIgIlRyYWl0ZSBsJ2FkcmVzc2UgSVAgY29tbWUgdW4gZG9tYWluZSBpbmV4aXN0YW50IE5YRE9NQUlOIChjb250b3VybmUgbGUgc3lzdGVtZSBkZSByZWRpcmVjdGlvbiBkZSBWZXJpc2lnbikiCisKKyM6IG9wdGlvbi5jOjMyMgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHRoZSBzaXplIG9mIHRoZSBjYWNoZSBpbiBlbnRyaWVzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTcOljaWZpZSBsZSBub21icmUgZCdlbnRy6WVzIHF1ZSBjb250aWVuZHJhIGxlIGNhY2hlIChwYXIgZOlmYXV0IDogJXMpLiIKKworIzogb3B0aW9uLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgY29uZmlndXJhdGlvbiBmaWxlIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTcOljaWZpZSBsZSBub20gZHUgZmljaGllciBkZSBjb25maWd1cmF0aW9uIChwYXIgZOlmYXV0IDogJXMpIgorCisjOiBvcHRpb24uYzozMjQKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kOiBydW4gaW4gZGVidWcgbW9kZS4iCittc2dzdHIgIk5lIHBhc3NlIHBhcyBlbiB04mNoZSBkZSBmb25kIDogZOltYXJyZSBlbiBtb2RlIGRlYnVnIgorCisjOiBvcHRpb24uYzozMjUKK21zZ2lkICJEbyBOT1QgZm9yd2FyZCBxdWVyaWVzIHdpdGggbm8gZG9tYWluIHBhcnQuIgorbXNnc3RyICJOZSByZXRyYW5zbWV0IHBhcyBsZXMgcmVxdep0ZXMgcXVpIG4nb250IHBhcyBkZSBkb21haW5lLiIKKworIzogb3B0aW9uLmM6MzI2Cittc2dpZCAiUmV0dXJuIHNlbGYtcG9pbnRpbmcgTVggcmVjb3JkcyBmb3IgbG9jYWwgaG9zdHMuIgorbXNnc3RyICJSZXRvdXJuZSBsZXMgY2hhbXBzIE1YIHBvdXIgbGVzIG1hY2hpbmVzIGxvY2FsZXMuIgorCisjOiBvcHRpb24uYzozMjcKK21zZ2lkICJFeHBhbmQgc2ltcGxlIG5hbWVzIGluIC9ldGMvaG9zdHMgd2l0aCBkb21haW4tc3VmZml4LiIKK21zZ3N0ciAiRXRlbmQgbGVzIG5vbXMgdW5pcXVlcyBkZXMgbWFjaGluZXMgZGFucyAvZXRjL2hvc3RzIGF2ZWMgbGUgc3VmZml4ZSBkdSBkb21haW5lLiIKKworIzogb3B0aW9uLmM6MzI4Cittc2dpZCAiRG9uJ3QgZm9yd2FyZCBzcHVyaW91cyBETlMgcmVxdWVzdHMgZnJvbSBXaW5kb3dzIGhvc3RzLiIKK21zZ3N0ciAiTmUgcmV0cmFuc21ldCBwYXMgbGVzIGZhdXNzZXMgcmVxdep0ZXMgRE5TIGVuIHByb3ZlbmFuY2UgZGVzIG1hY2hpbmVzIFdpbmRvd3MuIgorCisjOiBvcHRpb24uYzozMjkKK21zZ2lkICJFbmFibGUgREhDUCBpbiB0aGUgcmFuZ2UgZ2l2ZW4gd2l0aCBsZWFzZSBkdXJhdGlvbi4iCittc2dzdHIgIkF1dG9yaXNlIERIQ1AgZGFucyBsYSBwbGFnZSBkJ2FkcmVzc2VzIGRvbm7pZSBzdXIgbGEgZHVy6WUgZGUgdmFsaWRpdOkgZHUgYmFpbC4iCisKKyM6IG9wdGlvbi5jOjMzMAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2UgdG8gdGhpcyBncm91cCBhZnRlciBzdGFydHVwIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJPbiBjaGFuZ2UgcG91ciBjZSBncm91cGUgYXBy6HMgbGUgZOltYXJyYWdlIChwYXIgZOlmYXV0IDogJXMpLiIKKworIzogb3B0aW9uLmM6MzMxCittc2dpZCAiU2V0IGFkZHJlc3Mgb3IgaG9zdG5hbWUgZm9yIGEgc3BlY2lmaWVkIG1hY2hpbmUuIgorbXNnc3RyICJPbiBhc3NpZ25lIHVuZSBhZHJlc3NlIG91IHVuIG5vbSBwb3VyIHVuZSBtYWNoaW5lIHNw6WNpZmnpZS4iCisKKyM6IG9wdGlvbi5jOjMzMgorbXNnaWQgIlJlYWQgREhDUCBob3N0IHNwZWNzIGZyb20gZmlsZS4iCittc2dzdHIgIkxlY3R1cmUgZGVzIHNw6WNpZmljYXRpb25zIGQnaPR0ZXMgREhDUCDgIHBhcnRpciBkdSBmaWNoaWVyIgorCisjOiBvcHRpb24uYzozMzMKK21zZ2lkICJSZWFkIERIQ1Agb3B0aW9uIHNwZWNzIGZyb20gZmlsZS4iCittc2dzdHIgIkxlY3R1cmUgZGVzIG9wdGlvbnMgREhDUCDgIHBhcnRpciBkdSBmaWNoaWVyIgorCisjOiBvcHRpb24uYzozMzQKK21zZ2lkICJFdmFsdWF0ZSBjb25kaXRpb25hbCB0YWcgZXhwcmVzc2lvbi4iCittc2dzdHIgIkV4cHJlc3Npb24gZCfpdmFsdWF0aW9uIGNvbmRpdGlvbm5lbGxlIGQn6XRpcXVldHRlIgorCisjOiBvcHRpb24uYzozMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG8gTk9UIGxvYWQgJXMgZmlsZS4iCittc2dzdHIgIk5lIGNoYXJnZSBQQVMgbGUgZmljaGllciAlcy4iCisKKyM6IG9wdGlvbi5jOjMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGEgaG9zdHMgZmlsZSB0byBiZSByZWFkIGluIGFkZGl0aW9uIHRvICVzLiIKK21zZ3N0ciAiU3DpY2lmaWUgdW4gbm9tIGRlIGZpY2hpZXIgaG9zdHMg4CBsaXJlIGVuIGNvbXBs6W1lbnQgZGUgJXMiCisKKyM6IG9wdGlvbi5jOjMzNworbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIlNw6WNpZmllIGxhIG91IGxlcyBpbnRlcmZhY2Uocykgb/kgbGUgZOltb24gZG9pdCBzZSBtZXR0cmUg4CBsJ+ljb3V0ZS4iCisKKyM6IG9wdGlvbi5jOjMzOAorbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIE5PVCB0byBsaXN0ZW4gb24uIgorbXNnc3RyICJTcOljaWZpZSBsYSBvdSBsZXMgaW50ZXJmYWNlKHMpIHF1ZSBsZSBk6W1vbiBuZSBkb2l0IFBBUyB0cmFpdGVyLiIKKworIworIzogb3B0aW9uLmM6MzM5Cittc2dpZCAiTWFwIERIQ1AgdXNlciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICJBc3NvY2llIGxlcyBjbGFzc2VzIGQndXRpbGlzYXRldXJzICgndXNlciBjbGFzcycpIERIQ1AgYXV4IG9wdGlvbnMuIgorCisjOiBvcHRpb24uYzozNDAKK21zZ2lkICJNYXAgUkZDMzA0NiBjaXJjdWl0LWlkIHRvIHRhZy4iCittc2dzdHIgIkFzc29jaWUgbGVzIGlkZW50aWZpYW50cyBkZSBjaXJjdWl0cyBSRkMzMDQ2ICgnY2lyY3VpdC1pZCcpIGF1eCBvcHRpb25zIgorCisjOiBvcHRpb24uYzozNDEKK21zZ2lkICJNYXAgUkZDMzA0NiByZW1vdGUtaWQgdG8gdGFnLiIKK21zZ3N0ciAiQXNzb2NpZSBsZXMgaWRlbnRpZmlhbnRzIGRpc3RhbnRzIFJGQzMwNDYgKCdyZW1vdGUtaWQnKSBhdXggb3B0aW9ucyIKKworIzogb3B0aW9uLmM6MzQyCittc2dpZCAiTWFwIFJGQzM5OTMgc3Vic2NyaWJlci1pZCB0byB0YWcuIgorbXNnc3RyICJBc3NvY2llIGxlcyBpZGVudGlmaWFudHMgZGUgc291c2NyaXB0ZXVycyBSRkMzOTkzICgnc3Vic2NyaWJlci1pZCcpIGF1eCBvcHRpb25zIgorCisjCisjOiBvcHRpb24uYzozNDMKK21zZ2lkICJEb24ndCBkbyBESENQIGZvciBob3N0cyB3aXRoIHRhZyBzZXQuIgorbXNnc3RyICJOZSBwYXMgYXV0b3Jpc2VyIERIQ1AgcG91ciBsZXMgbWFjaGluZXMg6W51bWVy6WVzIGRhbnMgbGVzIG9wdGlvbnMuIgorCisjCisjOiBvcHRpb24uYzozNDQKK21zZ2lkICJGb3JjZSBicm9hZGNhc3QgcmVwbGllcyBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIKK21zZ3N0ciAiRm9yY2VyIGxlcyBy6XBvbnNlcyBwYXIgJ2Jyb2FkY2FzdCcgcG91ciBsZXMgbWFjaGluZXMg6W51bWVy6WVzIGRhbnMgbGVzIG9wdGlvbnMuIgorCisjOiBvcHRpb24uYzozNDUKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kLCBkbyBOT1QgcnVuIGluIGRlYnVnIG1vZGUuIgorbXNnc3RyICJOZSBwYXNzZSBwYXMgZW4gdOJjaGUgZGUgZm9uZCwgbmUgcGFzIHMnZXjpY3V0ZXIgZW4gbW9kZSBkZWJ1Zy4iCisKKyM6IG9wdGlvbi5jOjM0NgorbXNnaWQgIkFzc3VtZSB3ZSBhcmUgdGhlIG9ubHkgREhDUCBzZXJ2ZXIgb24gdGhlIGxvY2FsIG5ldHdvcmsuIgorbXNnc3RyICJPbiBjb25zaWTocmUgcXVlIGwnb24gZXN0IGxlIHNldWwgc2VydmV1ciBESENQIHN1ciBsZSBy6XNlYXUgbG9jYWwuIgorCisjOiBvcHRpb24uYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSB3aGVyZSB0byBzdG9yZSBESENQIGxlYXNlcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU3DpY2lmaWUgb/kgaWwgZmF1dCBzYXV2ZWdhcmRlciBsZXMgYmF1eCBESENQIChwYXIgZOlmYXV0IDogJXMpLiIKKworIzogb3B0aW9uLmM6MzQ4Cittc2dpZCAiUmV0dXJuIE1YIHJlY29yZHMgZm9yIGxvY2FsIGhvc3RzLiIKK21zZ3N0ciAiUmV0b3VybmUgbGVzIGNoYW1wcyBNWCBwb3VyIGxlcyBtYWNoaW5lcyBsb2NhbGVzLiIKKworIzogb3B0aW9uLmM6MzQ5Cittc2dpZCAiU3BlY2lmeSBhbiBNWCByZWNvcmQuIgorbXNnc3RyICJTcOljaWZpZSB1biBjaGFtcCBNWC4iCisKKyM6IG9wdGlvbi5jOjM1MAorbXNnaWQgIlNwZWNpZnkgQk9PVFAgb3B0aW9ucyB0byBESENQIHNlcnZlci4iCittc2dzdHIgIlNw6WNpZmllIGxlcyBvcHRpb25zIEJPT1RQIHBvdXIgbGUgc2VydmV1ciBESENQLiIKKworIzogb3B0aW9uLmM6MzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvIE5PVCBwb2xsICVzIGZpbGUsIHJlbG9hZCBvbmx5IG9uIFNJR0hVUC4iCittc2dzdHIgIk5lIHBhcyBzY3J1dGVyIGxlIGZpY2hpZXIgJXMsIG5lIHJlY2hhcmdlciBsZXMgbW9kaWZpY2F0aW9ucyBxdWUgc3VyIHLpY2VwdGlvbiBkdSBzaWduYWwgU0lHSFVQLiIKKworIzogb3B0aW9uLmM6MzUyCittc2dpZCAiRG8gTk9UIGNhY2hlIGZhaWxlZCBzZWFyY2ggcmVzdWx0cy4iCittc2dzdHIgIk5lIHBsYWNlIHBhcyBlbiBjYWNoZSBsZSBy6XN1bHRhdCBkZXMgcmVxdep0ZXMgcXVpIG9udCDpY2hvdellcy4iCisKKyM6IG9wdGlvbi5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgbmFtZXNlcnZlcnMgc3RyaWN0bHkgaW4gdGhlIG9yZGVyIGdpdmVuIGluICVzLiIKK21zZ3N0ciAiVXRpbGlzZSBsZXMgc2VydmV1cnMgZGUgbm9tcyBkYW5zIGwnb3JkcmUgZG9ubukgZGFucyAlcy4iCisKKyMKKyM6IG9wdGlvbi5jOjM1NAorbXNnaWQgIlNwZWNpZnkgb3B0aW9ucyB0byBiZSBzZW50IHRvIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIk9wdGlvbnMgc3VwcGzpbWVudGFpcmVzIOAgYXNzb2NpZXIgYXV4IGNsaWVudHMgREhDUC4iCisKKyM6IG9wdGlvbi5jOjM1NQorbXNnaWQgIkRIQ1Agb3B0aW9uIHNlbnQgZXZlbiBpZiB0aGUgY2xpZW50IGRvZXMgbm90IHJlcXVlc3QgaXQuIgorbXNnc3RyICJPcHRpb24gREhDUCBlbnZveellIG3qbWUgc2kgbGUgY2xpZW50IGRlIGxhIGRlbWFuZGUgcGFzLiIKKworIzogb3B0aW9uLmM6MzU2Cittc2dpZCAiU3BlY2lmeSBwb3J0IHRvIGxpc3RlbiBmb3IgRE5TIHJlcXVlc3RzIG9uIChkZWZhdWx0cyB0byA1MykuIgorbXNnc3RyICJTcOljaWZpZSBsZSBwb3J0IG/5IGlsIGZhdXQg6WNvdXRlciBsZXMgcmVxdep0ZXMgRE5TIChwYXIgZOlmYXV0IDogNTMpLiIKKworIzogb3B0aW9uLmM6MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gc3VwcG9ydGVkIFVEUCBwYWNrZXQgc2l6ZSBmb3IgRUROUy4wIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJUYWlsbGUgbWF4aW1hbGUgZGVzIHBhcXVldHMgVURQIHN1cHBvcnTpcyBwb3VyIEVETlMuMCAocGFyIGTpZmF1dCA6ICVzKS4iCisKKyMKKyM6IG9wdGlvbi5jOjM1OAorbXNnaWQgIkxvZyBETlMgcXVlcmllcy4iCittc2dzdHIgIkVucmVnaXN0cmUgbGVzIHJlcXXqdGVzIEROUyBkYW5zIHVuIGpvdXJuYWwgZCdhY3Rpdml06S4iCisKKyMKKyM6IG9wdGlvbi5jOjM1OQorbXNnaWQgIkZvcmNlIHRoZSBvcmlnaW5hdGluZyBwb3J0IGZvciB1cHN0cmVhbSBETlMgcXVlcmllcy4iCittc2dzdHIgIkZvcmNlIGxlIHBvcnQgZCdvcmlnaW5lIHBvdXIgbGVzIHJlcXXqdGVzIHZlcnMgbGVzIHNlcnZldXJzIGFtb250cy4iCisKKyM6IG9wdGlvbi5jOjM2MAorbXNnaWQgIkRvIE5PVCByZWFkIHJlc29sdi5jb25mLiIKK21zZ3N0ciAiTmUgcGFzIGxpcmUgbGUgZmljaGllciByZXNvbHYuY29uZi4iCisKKyM6IG9wdGlvbi5jOjM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggdG8gcmVzb2x2LmNvbmYgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNw6WNpZmllIGxlIGNoZW1pbiBwb3VyIGxlIGZpY2hpZXIgcmVzb2x2LmNvbmYgKHBhciBk6WZhdXQgOiAlcykuIgorCisjOiBvcHRpb24uYzozNjIKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSBwYXRoIHRvIGZpbGUgd2l0aCBzZXJ2ZXI9IG9wdGlvbnMiCittc2dzdHIgIlNw6WNpZmllIHVuIGNoZW1pbiBwb3VyIGxlIGZpY2hpZXIgUElEIChwYXIgZOlmYXV0IDogJXMpLiIKKworIzogb3B0aW9uLmM6MzYzCittc2dpZCAiU3BlY2lmeSBhZGRyZXNzKGVzKSBvZiB1cHN0cmVhbSBzZXJ2ZXJzIHdpdGggb3B0aW9uYWwgZG9tYWlucy4iCittc2dzdHIgIlNw6WNpZmllIGxhIG91IGxlcyBhZHJlc3NlcyBkZXMgc2VydmV1cnMgYW1vbnRzIGF2ZWMgZGVzIGRvbWFpbmVzIG9wdGlvbmVscy4iCisKKyM6IG9wdGlvbi5jOjM2NAorIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IGFkZHJlc3Mgb2YgdXBzdHJlYW0gc2VydmVycyBmb3IgcmV2ZXJzZSBhZGRyZXNzIHF1ZXJpZXMiCittc2dzdHIgIlNw6WNpZmllIGxhIG91IGxlcyBhZHJlc3NlcyBkZXMgc2VydmV1cnMgYW1vbnRzIGF2ZWMgZGVzIGRvbWFpbmVzIG9wdGlvbmVscy4iCisKKyM6IG9wdGlvbi5jOjM2NQorbXNnaWQgIk5ldmVyIGZvcndhcmQgcXVlcmllcyB0byBzcGVjaWZpZWQgZG9tYWlucy4iCittc2dzdHIgIk5lIGphbWFpcyByZXRyYW5zbWV0dHJlIGxlcyByZXF16nRlcyBwb3VyIGxlcyBkb21haW5lcyBzcOljaWZp6XMuIgorCisjOiBvcHRpb24uYzozNjYKK21zZ2lkICJTcGVjaWZ5IHRoZSBkb21haW4gdG8gYmUgYXNzaWduZWQgaW4gREhDUCBsZWFzZXMuIgorbXNnc3RyICJTcOljaWZpZSBsZSBkb21haW5lIHF1aSBkb2l0IGV0cmUgYXNzaWdu6SBhdXggYmF1eCBESENQLiIKKworIzogb3B0aW9uLmM6MzY3Cittc2dpZCAiU3BlY2lmeSBkZWZhdWx0IHRhcmdldCBpbiBhbiBNWCByZWNvcmQuIgorbXNnc3RyICJTcOljaWZpZSBsYSBjaWJsZSBwYXIgZOlmYXV0IGRhbnMgdW4gY2hhbXAgTVguIgorCisjOiBvcHRpb24uYzozNjgKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzIGZvciByZXBsaWVzIGZyb20gL2V0Yy9ob3N0cy4iCittc2dzdHIgIlNw6WNpZmllIGxlIFRUTCBlbiBzZWNvbmRlcyBwb3VyIGxlcyBy6XBvbnNlcyBxdWkgdXRpbGlzZW50IC9ldGMvaG9zdHMuIgorCisjCisjOiBvcHRpb24uYzozNjkKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzIGZvciBuZWdhdGl2ZSBjYWNoaW5nLiIKK21zZ3N0ciAiU3DpY2lmaWUgbGUgVFRMIGVuIHNlY29uZGVzIHBvdXIgbGVzIHLpcG9uc2VzIHF1aSB1dGlsaXNlbnQgL2V0Yy9ob3N0cy4iCisKKyM6IG9wdGlvbi5jOjM3MAorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG1heGltdW0gVFRMIHRvIHNlbmQgdG8gY2xpZW50cy4iCittc2dzdHIgIlNw6WNpZmllLCBlbiBzZWNvbmRlcywgbGEgdmFsZXVyIG1heGltdW0gZGUgVFRMIOAgcmVudm95ZXIgYXV4IGNsaWVudHMuIgorCisjOiBvcHRpb24uYzozNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlIHRvIHRoaXMgdXNlciBhZnRlciBzdGFydHVwLiAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiQ2hhbmdlIHBvdXIgY2V0IHV0aWxpc2F0ZXVyIGFwcuhzIGxlIGTpbWFycmFnZSAocGFyIGTpZmF1dCA6ICVzKS4iCisKKyMKKyM6IG9wdGlvbi5jOjM3MgorbXNnaWQgIk1hcCBESENQIHZlbmRvciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICJBc3NvY2llIGxlcyBjbGFzc2VzIGRlIGZvdXJuaXNzZXVycyAoJ3ZlbmRvciBjbGFzcycpIERIQ1AgYXV4IG9wdGlvbnMuIgorCisjOiBvcHRpb24uYzozNzMKK21zZ2lkICJEaXNwbGF5IGRuc21hc3EgdmVyc2lvbiBhbmQgY29weXJpZ2h0IGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiQWZmaWNoZSBsYSB2ZXJzaW9uIGRlIERuc21hc3EgZXQgbGVzIGluZm9ybWF0aW9ucyBsaellcyBhdSBjb3B5cmlnaHQuIgorCisjOiBvcHRpb24uYzozNzQKK21zZ2lkICJUcmFuc2xhdGUgSVB2NCBhZGRyZXNzZXMgZnJvbSB1cHN0cmVhbSBzZXJ2ZXJzLiIKK21zZ3N0ciAiVHJhZHVpdCBsZXMgYWRyZXNzZXMgSVBWNCBkZXMgc2VydmV1cnMgYW1vbnRzLiIKKworIzogb3B0aW9uLmM6Mzc1Cittc2dpZCAiU3BlY2lmeSBhIFNSViByZWNvcmQuIgorbXNnc3RyICJTcOljaWZpZSB1biBjaGFtcCBTUlYuIgorCisjOiBvcHRpb24uYzozNzYKK21zZ2lkICJEaXNwbGF5IHRoaXMgbWVzc2FnZS4gVXNlIC0taGVscCBkaGNwIGZvciBrbm93biBESENQIG9wdGlvbnMuIgorbXNnc3RyICJBZmZpY2hlciBjZSBtZXNzYWdlLiBVdGlsaXNlciAtLWhlbHAgZGhjcCBwb3VyIG9idGVuaXIgbGEgbGlzdGUgZGVzIG9wdGlvbnMgREhDUCBjb25udWVzLiIKKworIzogb3B0aW9uLmM6Mzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgcGF0aCBvZiBQSUQgZmlsZSAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU3DpY2lmaWUgdW4gY2hlbWluIHBvdXIgbGUgZmljaGllciBQSUQgKHBhciBk6WZhdXQgOiAlcykuIgorCisjOiBvcHRpb24uYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBtYXhpbXVtIG51bWJlciBvZiBESENQIGxlYXNlcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU3DpY2lmaWUgbGUgbm9tYnJlIG1heGltdW0gZGUgYmF1eCBESENQIChwYXIgZOlmYXV0IDogJXMpLiIKKworIzogb3B0aW9uLmM6Mzc5Cittc2dpZCAiQW5zd2VyIEROUyBxdWVyaWVzIGJhc2VkIG9uIHRoZSBpbnRlcmZhY2UgYSBxdWVyeSB3YXMgc2VudCB0by4iCittc2dzdHIgIlJlcG9uZCBhdXggcmVxdep0ZXMgRE5TIGVuIHNlIGJhc2FudCBzdXIgbCdpbnRlcmZhY2Ugb3UgYSDpdOkgZW52b3npZSBsYSByZXF16nRlLiIKKworIzogb3B0aW9uLmM6MzgwCittc2dpZCAiU3BlY2lmeSBUWFQgRE5TIHJlY29yZC4iCittc2dzdHIgIlNw6WNpZmllIHVuIGNoYW1wIEROUyBUWFQiCisKKyMKKyM6IG9wdGlvbi5jOjM4MQorbXNnaWQgIlNwZWNpZnkgUFRSIEROUyByZWNvcmQuIgorbXNnc3RyICJTcOljaWZpZSB1biBjaGFtcCBETlMgUFRSIgorCisjOiBvcHRpb24uYzozODIKK21zZ2lkICJHaXZlIEROUyBuYW1lIHRvIElQdjQgYWRkcmVzcyBvZiBpbnRlcmZhY2UuIgorbXNnc3RyICJEb25uZSBsZSBub20gRE5TIHBvdXIgbCdhZHJlc3NlIElQdjQgZGUgbCdpbnRlcmZhY2UuIgorCisjOiBvcHRpb24uYzozODMKK21zZ2lkICJCaW5kIG9ubHkgdG8gaW50ZXJmYWNlcyBpbiB1c2UuIgorbXNnc3RyICJBc3NvY2lhdGlvbiB1bmlxdWVtZW50IGF1eCBpbnRlcmZhY2VzIHLpc2VhdSBhY3R1ZWxsZW1lbnQgYWN0aXZlcy4iCisKKyM6IG9wdGlvbi5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWFkIERIQ1Agc3RhdGljIGhvc3QgaW5mb3JtYXRpb24gZnJvbSAlcy4iCittc2dzdHIgIkxlY3R1cmUgZGVzIGluZm9ybWF0aW9ucyBkZSBESENQIHN0YXRpcXVlIOAgcGFydGlyIGRlICVzLiIKKworIzogb3B0aW9uLmM6Mzg1Cittc2dpZCAiRW5hYmxlIHRoZSBEQnVzIGludGVyZmFjZSBmb3Igc2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzLCBldGMuIgorbXNnc3RyICJBdXRvcmlzZSBsJ2ludGVyZmFjZSBEQnVzIHBvdXIgbGEgY29uZmlndXJhdGlvbiBkZXMgc2VydmV1cnMgYW1vbnRzLCBldGMuIgorCisjOiBvcHRpb24uYzozODYKK21zZ2lkICJEbyBub3QgcHJvdmlkZSBESENQIG9uIHRoaXMgaW50ZXJmYWNlLCBvbmx5IHByb3ZpZGUgRE5TLiIKK21zZ3N0ciAiTmUgcGFzIGFzc3VyZXIgZGUgZm9uY3Rpb24gREhDUCBzdXIgY2V0dGUgaW50ZXJmYWNlLCBtYWlzIHNldWxlbWVudCBsYSBmb25jdGlvbiBETlMuIgorCisjOiBvcHRpb24uYzozODcKK21zZ2lkICJFbmFibGUgZHluYW1pYyBhZGRyZXNzIGFsbG9jYXRpb24gZm9yIGJvb3RwLiIKK21zZ3N0ciAiQXV0b3Jpc2UgbCdhbGxvY2F0aW9uIGR5bmFtaXF1ZSBkJ2FkcmVzc2UgcG91ciBib290cC4iCisKKyMKKyM6IG9wdGlvbi5jOjM4OAorbXNnaWQgIk1hcCBNQUMgYWRkcmVzcyAod2l0aCB3aWxkY2FyZHMpIHRvIG9wdGlvbiBzZXQuIgorbXNnc3RyICJBc3NvY2llIGwnYWRyZXNzZSBNQUMgKGF2ZWMgbGVzIGpva2VycykgYXV4IG9wdGlvbnMuIgorCisjOiBvcHRpb24uYzozODkKK21zZ2lkICJUcmVhdCBESENQIHJlcXVlc3RzIG9uIGFsaWFzZXMgYXMgYXJyaXZpbmcgZnJvbSBpbnRlcmZhY2UuIgorbXNnc3RyICJUcmFpdGVyIGxlcyByZXF16nRlcyBESENQIHN1ciBsZXMgYWxpYXMgY29tbWUgYXJyaXZhbnQgZGUgbCdpbnRlcmZhY2UuIgorCisjOiBvcHRpb24uYzozOTAKK21zZ2lkICJEaXNhYmxlIElDTVAgZWNobyBhZGRyZXNzIGNoZWNraW5nIGluIHRoZSBESENQIHNlcnZlci4iCittc2dzdHIgIlN1cHByaW1lIGxhIHbpcmlmaWNhdGlvbiBkJ2FkcmVzc2Ugc3VyIGxlIHNlcnZldXIgYXUgbW95ZW4gZGUgcGFxdWV0cyBJQ01QIGVjaG8iCisKKyM6IG9wdGlvbi5jOjM5MQorbXNnaWQgIlNoZWxsIHNjcmlwdCB0byBydW4gb24gREhDUCBsZWFzZSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uIgorbXNnc3RyICJTY3JpcHQgc2hlbGwg4CBleOljdXRlciBsb3JzIGRlIGxhIGNy6WF0aW9uIG91IGRlc3RydWN0aW9uIGRlIGJhaWwgREhDUC4iCisKKyM6IG9wdGlvbi5jOjM5MgorbXNnaWQgIkx1YSBzY3JpcHQgdG8gcnVuIG9uIERIQ1AgbGVhc2UgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uLiIKK21zZ3N0ciAiU2NyaXB0IEx1YSDgIGV46WN1dGVyIGxvcnMgZGUgbGEgY3LpYXRpb24gb3UgZGVzdHJ1Y3Rpb24gZGUgYmFpbCBESENQLiIKKworIzogb3B0aW9uLmM6MzkzCittc2dpZCAiUnVuIGxlYXNlLWNoYW5nZSBzY3JpcHRzIGFzIHRoaXMgdXNlci4iCittc2dzdHIgIkxhbmNlciBsZSBzY3JpcHQgJ2xlYXNlLWNoYW5nZScgYXZlYyBjZXQgdXRpbGlzYXRldXIuIgorCisjOiBvcHRpb24uYzozOTQKK21zZ2lkICJSZWFkIGNvbmZpZ3VyYXRpb24gZnJvbSBhbGwgdGhlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5LiIKK21zZ3N0ciAiTGVjdHVyZSBkZSBsYSBjb25maWd1cmF0aW9uIGRhbnMgdG91cyBsZXMgZmljaGllcnMgZGUgY2UgculwZXJ0b2lyZS4iCisKKyMKKyM6IG9wdGlvbi5jOjM5NQorbXNnaWQgIkxvZyB0byB0aGlzIHN5c2xvZyBmYWNpbGl0eSBvciBmaWxlLiAoZGVmYXVsdHMgdG8gREFFTU9OKSIKK21zZ3N0ciAiRW5yZWdpc3RyZXIgbGVzIGpvdXJuYXV4IGQnYWN0aXZpdOkgZGFucyBjZXR0ZSBmYWNpbGl06SBzeXNsb2cuIChk6WZhdXQgOiBEQUVNT04pIgorCisjOiBvcHRpb24uYzozOTYKK21zZ2lkICJEbyBub3QgdXNlIGxlYXNlZmlsZS4iCittc2dzdHIgIk5lIHBhcyB1dGlsaXNlciBkZSBmaWNoaWVyIGRlIGJhdXguIgorCisjOiBvcHRpb24uYzozOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBETlMgcXVlcmllcy4gKGRlZmF1bHRzIHRvICVzKSIKK21zZ3N0ciAiU3DpY2lmaWUgbGUgbm9tYnJlIG1heGltdW0gZGUgcmVxdep0ZXMgREhDUCBjb25jdXJyZW50ZXMgKHBhciBk6WZhdXQgOiAlcykuIgorCisjOiBvcHRpb24uYzozOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXIgRE5TIGNhY2hlIHdoZW4gcmVsb2FkaW5nICVzLiIKK21zZ3N0ciAiVmlkZXIgbGUgY2FjaGUgRE5TIGxvcnMgZHUgcmVjaGFyZ2VtZW50IGRlICVzLiIKKworIzogb3B0aW9uLmM6Mzk5Cittc2dpZCAiSWdub3JlIGhvc3RuYW1lcyBwcm92aWRlZCBieSBESENQIGNsaWVudHMuIgorbXNnc3RyICJJZ25vcmVyIGxlcyBub21zIGQnaPR0ZXMgZm91cm5pcyBwYXIgbGVzIGNsaWVudHMgREhDUCIKKworIzogb3B0aW9uLmM6NDAwCittc2dpZCAiRG8gTk9UIHJldXNlIGZpbGVuYW1lIGFuZCBzZXJ2ZXIgZmllbGRzIGZvciBleHRyYSBESENQIG9wdGlvbnMuIgorbXNnc3RyICJOZSBwYXMgcul1dGlsaXNlciBsZXMgY2hhbXBzIG5vbSBkZSBmaWNoaWVyIGV0IHNlcnZldXIgZGFucyBsZXMgb3B0aW9ucyBESENQIHN1cHBs6W1lbnRhaXJlcy4iCisKKyM6IG9wdGlvbi5jOjQwMQorbXNnaWQgIkVuYWJsZSBpbnRlZ3JhdGVkIHJlYWQtb25seSBURlRQIHNlcnZlci4iCittc2dzdHIgIkFjdGl2ZXIgbGUgc2VydmVyIFRGVFAgaW506Wdy6SAoZm9uY3Rpb25uYW50IGVuIGxlY3R1cmUgc2V1bGVtZW50KSIKKworIzogb3B0aW9uLmM6NDAyCittc2dpZCAiRXhwb3J0IGZpbGVzIGJ5IFRGVFAgb25seSBmcm9tIHRoZSBzcGVjaWZpZWQgc3VidHJlZS4iCittc2dzdHIgIk4nZXhwb3J0ZXIgcGFyIFRGVFAgcXVlIGxlcyBmaWNoaWVycyBkZSBsJ2FyYm9yZXNjZW5jZSBkZSBmaWNoaWVyIHNw6WNpZmnpZSIKKworIzogb3B0aW9uLmM6NDAzCittc2dpZCAiQWRkIGNsaWVudCBJUCBhZGRyZXNzIHRvIHRmdHAtcm9vdC4iCittc2dzdHIgIkFqb3V0ZXIgbGVzIGFkcmVzc2VzIElQIGNsaWVudGVzIOAgbGEgcmFjaW5lIHRmdHAgKCd0ZnRwLXJvb3QnKS4iCisKKyM6IG9wdGlvbi5jOjQwNAorbXNnaWQgIkFsbG93IGFjY2VzcyBvbmx5IHRvIGZpbGVzIG93bmVkIGJ5IHRoZSB1c2VyIHJ1bm5pbmcgZG5zbWFzcS4iCittc2dzdHIgIkFjY+hzIGF1eCBzZXVscyBmaWNoaWVycyBhcHBhcnRlbmFudHMg4CBsJ3V0aWxpc2F0ZXVyIHNvdXMgbGVxdWVsIHRvdXJuZSBkbnNtYXNxIgorCisjOiBvcHRpb24uYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBudW1iZXIgb2YgY29ubmN1cnJlbnQgVEZUUCB0cmFuc2ZlcnMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNw6WNpZmllIGxlIG5vbWJyZSBtYXhpbXVtIGRlIHRyYW5zZmVydCBURlRQIGNvbmN1cnJlbnRzIChk6WZhdXQgOiAlcykuIgorCisjOiBvcHRpb24uYzo0MDYKK21zZ2lkICJEaXNhYmxlIHRoZSBURlRQIGJsb2Nrc2l6ZSBleHRlbnNpb24uIgorbXNnc3RyICJE6XNhY3RpdmF0aW9uIGRlIGwnZXh0ZW5zaW9uIFRGVFAgqyB0YWlsbGUgZGUgYmxvYyC7IgorCisjOiBvcHRpb24uYzo0MDcKK21zZ2lkICJDb252ZXJ0IFRGVFAgZmlsZW5hbWVzIHRvIGxvd2VyY2FzZSIKK21zZ3N0ciAiQ29udmVydGlzIGxlcyBub21zIGRlIGZpY2hpZXJzIFRGVFAgZW4gbWludXNjdWxlIgorCisjOiBvcHRpb24uYzo0MDgKK21zZ2lkICJFcGhlbWVyYWwgcG9ydCByYW5nZSBmb3IgdXNlIGJ5IFRGVFAgdHJhbnNmZXJzLiIKK21zZ3N0ciAiR2FtbWUgZGUgcG9ydHMgZGFucyBsYXF1ZWxsZSBzZXJvbnQgY2hvaXNpcyBsZXMgcG9ydHMgdGVtcG9yYWlyZXMgdXRpbGlz6XMgZGFucyBsZXMgdHJhbnNmZXJ0cyBURlRQLiIKKworIzogb3B0aW9uLmM6NDA5Cittc2dpZCAiRXh0cmEgbG9nZ2luZyBmb3IgREhDUC4iCittc2dzdHIgIlRyYWNlcyBzdXBwbOltZW50YWlyZXMgcG91ciBsZSBESENQLiIKKworIzogb3B0aW9uLmM6NDEwCittc2dpZCAiRW5hYmxlIGFzeW5jLiBsb2dnaW5nOyBvcHRpb25hbGx5IHNldCBxdWV1ZSBsZW5ndGguIgorbXNnc3RyICJBY3RpdmUgbCfpY3JpdHVyZSBkZSB0cmFjZXMgZW4gbW9kZSBhc3luY2hyb25lLiBQZXV0IHByZW5kcmUgZW4gb3B0aW9uIGxhIHZhbGV1ciBkZSBsYSBsb25ndWV1ciBkZSBsYSBxdWV1ZS4iCisKKyM6IG9wdGlvbi5jOjQxMQorbXNnaWQgIlN0b3AgRE5TIHJlYmluZGluZy4gRmlsdGVyIHByaXZhdGUgSVAgcmFuZ2VzIHdoZW4gcmVzb2x2aW5nLiIKK21zZ3N0ciAiU3RvcHBlciBsYSBy6WFzc29jaWF0aW9uIEROUyAoJ0ROUyByZWJpbmRpbmcnKS4gRmlsdHJlIGxlcyBnYW1tZXMgZCdhZHJlc3NlcyBJUCBwcml26WVzIGxvcnMgZGUgbGEgculzb2x1dGlvbi4iCisKKyM6IG9wdGlvbi5jOjQxMgorbXNnaWQgIkFsbG93IHJlYmluZGluZyBvZiAxMjcuMC4wLjAvOCwgZm9yIFJCTCBzZXJ2ZXJzLiIKK21zZ3N0ciAiQXV0b3Jpc2UgbGEgculhc3NvY2lhdGlvbiBkZSAxMjcuMC4wLzgsIHBvdXIgbGVzIHNlcnZldXJzIFJCTCAoUmVhbHRpbWUgQmxhY2tob2xlIExpc3QpIgorCisjOiBvcHRpb24uYzo0MTMKK21zZ2lkICJJbmhpYml0IEROUy1yZWJpbmQgcHJvdGVjdGlvbiBvbiB0aGlzIGRvbWFpbi4iCittc2dzdHIgIkTpc2FjdGl2ZSBsYSBwcm90ZWN0aW9uIGNvbnRyZSBsZXMgculhc3NvY2lhdGlvbiBETlMgcG91ciBjZSBkb21haW5lIgorCisjOiBvcHRpb24uYzo0MTQKK21zZ2lkICJBbHdheXMgcGVyZm9ybSBETlMgcXVlcmllcyB0byBhbGwgc2VydmVycy4iCittc2dzdHIgIlRvdWpvdXJzIGVmZmVjdHVlciBsZXMgcmVxdep0ZXMgRE5TIOAgdG91cyBsZXMgc2VydmV1cnMuIgorCisjCisjOiBvcHRpb24uYzo0MTUKK21zZ2lkICJTZXQgdGFnIGlmIGNsaWVudCBpbmNsdWRlcyBtYXRjaGluZyBvcHRpb24gaW4gcmVxdWVzdC4iCittc2dzdHIgIlNw6WNpZmllIGxlIGxhYmVsIHNpIGxlIGNsaWVudCBpbmNsdXMgbCdvcHRpb24gZGFucyBsYSByZXF16nRlLiIKKworIzogb3B0aW9uLmM6NDE2Cittc2dpZCAiVXNlIGFsdGVybmF0aXZlIHBvcnRzIGZvciBESENQLiIKK21zZ3N0ciAiVXRpbGlzZXIgZGVzIHBvcnRzIGFsdGVybmF0aWZzIHBvdXIgbGUgREhDUC4iCisKKyMKKyM6IG9wdGlvbi5jOjQxNworbXNnaWQgIlNwZWNpZnkgTkFQVFIgRE5TIHJlY29yZC4iCittc2dzdHIgIlNw6WNpZmllIHVuIGNoYW1wIEROUyBOQVBUUi4iCisKKyM6IG9wdGlvbi5jOjQxOAorbXNnaWQgIlNwZWNpZnkgbG93ZXN0IHBvcnQgYXZhaWxhYmxlIGZvciBETlMgcXVlcnkgdHJhbnNtaXNzaW9uLiIKK21zZ3N0ciAiROlmaW5pZSBsZSBwbHVzIHBldGl0IHBvcnQgdXRpbGlz6SBwb3VyIGxhIHRyYW5zbWlzc2lvbiBkJ3VuZSByZXF16nRlIEROUy4iCisKKyM6IG9wdGlvbi5jOjQxOQorbXNnaWQgIlVzZSBvbmx5IGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZXMgZm9yIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIlV0aWxpc2Ugc2V1bGVtZW50IGxlcyBub21zIGRlIGRvbWFpbmUgcGxlaW5lbWVudCBxdWFsaWZp6XMgcG91ciBsZXMgY2xpZW50cyBESENQLiIKKworIzogb3B0aW9uLmM6NDIwCittc2dpZCAiR2VuZXJhdGUgaG9zdG5hbWVzIGJhc2VkIG9uIE1BQyBhZGRyZXNzIGZvciBuYW1lbGVzcyBjbGllbnRzLiIKK21zZ3N0ciAiR+lu6HJlIGxlcyBub21zIGQnaPR0ZXMg4CBwYXJ0aXIgZGUgbCdhZHJlc3NlIE1BQyBwb3VyIGxlcyBjbGllbnRzIHNhbnMgbm9tLiIKKworIzogb3B0aW9uLmM6NDIxCittc2dpZCAiVXNlIHRoZXNlIERIQ1AgcmVsYXlzIGFzIGZ1bGwgcHJveGllcy4iCittc2dzdHIgIlV0aWxpc2UgY2VzIHJlbGFpcyBESENQIGVuIHRlbXBzIHF1ZSBwcm94eSBjb21wbGV0cy4iCisKKyM6IG9wdGlvbi5jOjQyMgorbXNnaWQgIlJlbGF5IERIQ1AgcmVxdWVzdHMgdG8gYSByZW1vdGUgc2VydmVyIgorbXNnc3RyICJSZXF16nRlcyBkZSByZWxhaXMgREhDUCDgIHVuIHNlcnZldXIgZGlzdGFudCIKKworIzogb3B0aW9uLmM6NDIzCittc2dpZCAiU3BlY2lmeSBhbGlhcyBuYW1lIGZvciBMT0NBTCBETlMgbmFtZS4iCittc2dzdHIgIlNw6WNpZmllIHVuIGFsaWFzIHBvdXIgdW4gbm9tIEROUyBsb2NhbC4iCisKKyMKKyM6IG9wdGlvbi5jOjQyNAorbXNnaWQgIlByb21wdCB0byBzZW5kIHRvIFBYRSBjbGllbnRzLiIKK21zZ3N0ciAiSW52aXRlIOAgZW52b3llciBhdXggY2xpZW50cyBQWEUuIgorCisjOiBvcHRpb24uYzo0MjUKK21zZ2lkICJCb290IHNlcnZpY2UgZm9yIFBYRSBtZW51LiIKK21zZ3N0ciAiU2VydmljZSBkZSBk6W1hcnJhZ2UgcG91ciBtZW51IFBYRS4iCisKKyM6IG9wdGlvbi5jOjQyNgorbXNnaWQgIkNoZWNrIGNvbmZpZ3VyYXRpb24gc3ludGF4LiIKK21zZ3N0ciAidulyaWZpY2F0aW9uIGRlIGxhIHN5bnRheGUgZGUgbGEgY29uZmlndXJhdGlvbi4iCisKKyM6IG9wdGlvbi5jOjQyNworbXNnaWQgIkFkZCByZXF1ZXN0b3IncyBNQUMgYWRkcmVzcyB0byBmb3J3YXJkZWQgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICJBam91dGUgbCdhZHJlc3NlIE1BQyBkdSByZXF16nRldXIgYXV4IHJlcXXqdGVzIEROUyB0cmFuc21pc2VzIgorCisjOiBvcHRpb24uYzo0MjgKKyMsIGZ1enp5Cittc2dpZCAiQWRkIHJlcXVlc3RvcidzIElQIHN1Ym5ldCB0byBmb3J3YXJkZWQgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICJBam91dGUgbCdhZHJlc3NlIE1BQyBkdSByZXF16nRldXIgYXV4IHJlcXXqdGVzIEROUyB0cmFuc21pc2VzIgorCisjOiBvcHRpb24uYzo0MjkKK21zZ2lkICJQcm94eSBETlNTRUMgdmFsaWRhdGlvbiByZXN1bHRzIGZyb20gdXBzdHJlYW0gbmFtZXNlcnZlcnMuIgorbXNnc3RyICJDb3BpZSBkYW5zIGxhIHLpcG9uc2UgRE5TIGxlIHLpc3VsdGF0IGRlIGxhIHZhbGlkYXRpb24gRE5TU0VDIGVmZmVjdHXpZSBwYXIgbGVzIHNlcnZldXJzIEROUyBhbW9udHMuIgorCisjOiBvcHRpb24uYzo0MzAKK21zZ2lkICJBdHRlbXB0IHRvIGFsbG9jYXRlIHNlcXVlbnRpYWwgSVAgYWRkcmVzc2VzIHRvIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIkVzc2FpZSBkJ2FsbG91ZXIgZGVzIGFkcmVzc2VzIElQIHPpcXVlbnRpZWxsZXMgYXV4IGNsaWVudHMgREhDUC4iCisKKyM6IG9wdGlvbi5jOjQzMQorbXNnaWQgIkNvcHkgY29ubmVjdGlvbi10cmFjayBtYXJrIGZyb20gcXVlcmllcyB0byB1cHN0cmVhbSBjb25uZWN0aW9ucy4iCittc2dzdHIgIkNvcGllIGxlcyBtYXJxdWVzIGRlIHN1aXZpIGRlIGNvbm5leGlvbiBwb3VyIGxlcyByZXF16nRlcyBhbW9udC4iCisKKyM6IG9wdGlvbi5jOjQzMgorbXNnaWQgIkFsbG93IERIQ1AgY2xpZW50cyB0byBkbyB0aGVpciBvd24gREROUyB1cGRhdGVzLiIKK21zZ3N0ciAiQXV0b3Jpc2VyIGxlcyBjbGllbnRzIERIQ1Ag4CBmYWlyZSBsZXVycyBwcm9wcmVzIG1pc2VzIOAgam91ciBERE5TIChEeW5hbWljIEROUykiCisKKyM6IG9wdGlvbi5jOjQzMworbXNnaWQgIlNlbmQgcm91dGVyLWFkdmVydGlzZW1lbnRzIGZvciBpbnRlcmZhY2VzIGRvaW5nIERIQ1B2NiIKK21zZ3N0ciAiRW52b3llciBkZXMgYW5ub25jZXMgZGUgcm91dGV1cnMgcG91ciB0b3V0ZXMgbGVzIGludGVyZmFjZXMgZmFpc2FudCBkdSBESENQdjYiCisKKyM6IG9wdGlvbi5jOjQzNAorbXNnaWQgIlNwZWNpZnkgRFVJRF9FTi10eXBlIERIQ1B2NiBzZXJ2ZXIgRFVJRCIKK21zZ3N0ciAiU3DpY2lmaWUgcG91ciBsZSBzZXJ2ZXVyIERIQ1B2NiB1biBpZGVudGlmaWFudCB1bmlxdWUgREhDUCAoRFVJRCkgYmFz6SBzdXIgdW4gbnVt6XJvIHVuaXF1ZSBkZSB2ZW5kZXVyIChEVUlEX0VOKSIKKworIzogb3B0aW9uLmM6NDM1Cittc2dpZCAiU3BlY2lmeSBob3N0IChBL0FBQUEgYW5kIFBUUikgcmVjb3JkcyIKK21zZ3N0ciAiU3DpY2lmaWUgbGVzIGVucmVnaXN0cmVtZW50cyAoQS9BQUFBIGV0IFBUUikgZCd1biBo9HRlLiIKKworIzogb3B0aW9uLmM6NDM2Cittc2dpZCAiU3BlY2lmeSBhcmJpdHJhcnkgRE5TIHJlc291cmNlIHJlY29yZCIKK21zZ3N0ciAiROlmaW5pZSB1bmUgcmVzb3VyY2UgRE5TIGQndW4gdHlwZSBzcOljaWZpcXVlIgorCisjOiBvcHRpb24uYzo0MzcKK21zZ2lkICJCaW5kIHRvIGludGVyZmFjZXMgaW4gdXNlIC0gY2hlY2sgZm9yIG5ldyBpbnRlcmZhY2VzIgorbXNnc3RyICJTZSBsaWUgYXV4IGludGVyZmFjZXMgcHLpZXhpc3RhbnRlcyAtIHbpcmlmaWUgbCdhcHBhcml0aW9uIGRlIG5vdXZlbGxlcyBpbnRlcmZhY2VzIgorCisjOiBvcHRpb24uYzo0MzgKK21zZ2lkICJFeHBvcnQgbG9jYWwgbmFtZXMgdG8gZ2xvYmFsIEROUyIKK21zZ3N0ciAiRXhwb3J0ZSBsZXMgbm9tcyBsb2NhdXggZGFucyBsZSBETlMgZ2xvYmFsIgorCisjOiBvcHRpb24uYzo0MzkKK21zZ2lkICJEb21haW4gdG8gZXhwb3J0IHRvIGdsb2JhbCBETlMiCittc2dzdHIgIkRvbWFpbmUg4CBleHBvcnRlciBkYW5zIGxlIEROUyBnbG9iYWwiCisKKyM6IG9wdGlvbi5jOjQ0MAorbXNnaWQgIlNldCBUVEwgZm9yIGF1dGhvcml0YXRpdmUgcmVwbGllcyIKK21zZ3N0ciAiQ29uZmlndXJlIGxhIGR1cullIGRlIHZpZSAoVGltZSBUbyBMaXZlKSBwb3VyIGxlcyBy6XBvbnNlcyBmYWlzYW50IGF1dG9yaXTpIgorCisjOiBvcHRpb24uYzo0NDEKK21zZ2lkICJTZXQgYXV0aG9yaXRpdmUgem9uZSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiQ29uZmlndXJlIGxlcyBpbmZvcm1hdGlvbnMgcG91ciB1bmUgem9uZSBkZSBub20gZmFpc2FudCBhdXRvcml06SIKKworIzogb3B0aW9uLmM6NDQyCittc2dpZCAiU2Vjb25kYXJ5IGF1dGhvcml0YXRpdmUgbmFtZXNlcnZlcnMgZm9yIGZvcndhcmQgZG9tYWlucyIKK21zZ3N0ciAiU2VydmV1cnMgZGUgbm9tcyBzZWNvbmRhaXJlcyBmYWlzYW50IGF1dG9yaXTpIHBvdXIgbGVzIGRvbWFpbmVzIGTpbOlndelzIgorCisjOiBvcHRpb24uYzo0NDMKK21zZ2lkICJQZWVycyB3aGljaCBhcmUgYWxsb3dlZCB0byBkbyB6b25lIHRyYW5zZmVyIgorbXNnc3RyICJQYWlycyBhdXRvcmlz6XMg4CBmYWlyZSBkZXMgdHJhbnNmZXJ0cyBkZSB6b25lIgorCisjOiBvcHRpb24uYzo0NDQKK21zZ2lkICJTcGVjaWZ5IGlwc2V0cyB0byB3aGljaCBtYXRjaGluZyBkb21haW5zIHNob3VsZCBiZSBhZGRlZCIKK21zZ3N0ciAiU3DpY2lmaWUgbGVzIGlwc2V0cyBhdXhxdWVscyBsZXMgZG9tYWluZXMgY29ycmVzcG9uZGFudHMgZG9pdmVudC3qdHJlIGFqb3V06XMiCisKKyM6IG9wdGlvbi5jOjQ0NQorIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IGEgZG9tYWluIGFuZCBhZGRyZXNzIHJhbmdlIGZvciBzeW50aGVzaXNlZCBuYW1lcyIKK21zZ3N0ciAiU3DpY2lmaWUgdW4gZG9tYWluZSBldCB1bmUgcGxhZ2UgZCdhZHJlc3NlcyBwb3VyIGxlcyBub21zIGF1dG8tZ+lu6XLpcyIKKworIzogb3B0aW9uLmM6NDQ2Cittc2dpZCAiQWN0aXZhdGUgRE5TU0VDIHZhbGlkYXRpb24iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ3Cittc2dpZCAiU3BlY2lmeSB0cnVzdCBhbmNob3Iga2V5IGRpZ2VzdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ4Cittc2dpZCAiRGlzYWJsZSB1cHN0cmVhbSBjaGVja2luZyBmb3IgRE5TU0VDIGRlYnVnZ2luZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ5Cittc2dpZCAiRW5zdXJlIGFuc3dlcnMgd2l0aG91dCBETlNTRUMgYXJlIGluIHVuc2lnbmVkIHpvbmVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTAKK21zZ2lkICJEb24ndCBjaGVjayBETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMgdW50aWwgZmlyc3QgY2FjaGUtcmVsb2FkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1MgorbXNnaWQgIlNwZWNpZnkgREhDUHY2IHByZWZpeCBjbGFzcyIKK21zZ3N0ciAiU3DpY2lmaWUgbGUgcHLpZml4ZSBkZSBjbGFzc2UgREhDUHY2IgorCisjOiBvcHRpb24uYzo0NTQKK21zZ2lkICJTZXQgcHJpb3JpdHksIHJlc2VuZC1pbnRlcnZhbCBhbmQgcm91dGVyLWxpZmV0aW1lIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1NQorbXNnaWQgIkRvIG5vdCBsb2cgcm91dGluZSBESENQLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTYKK21zZ2lkICJEbyBub3QgbG9nIHJvdXRpbmUgREhDUHY2LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTcKK21zZ2lkICJEbyBub3QgbG9nIFJBLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTgKK21zZ2lkICJBY2NlcHQgcXVlcmllcyBvbmx5IGZyb20gZGlyZWN0bHktY29ubmVjdGVkIG5ldHdvcmtzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1OQorbXNnaWQgIkRldGVjdCBhbmQgcmVtb3ZlIEROUyBmb3J3YXJkaW5nIGxvb3BzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjY2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6IGRuc21hc3EgW29wdGlvbnNdXG4iCisiXG4iCittc2dzdHIgIiIKKyJVc2FnZSA6IGRuc21hc3EgW29wdGlvbnNdXG4iCisiXG4iCisKKyM6IG9wdGlvbi5jOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICJVc2Ugc2hvcnQgb3B0aW9ucyBvbmx5IG9uIHRoZSBjb21tYW5kIGxpbmUuXG4iCittc2dzdHIgIlV0aWxpc2V6IGxlcyBvcHRpb25zIGNvdXJ0ZXMgdW5pcXVlbWVudCBzdXIgbGEgbGlnbmUgZGUgY29tbWFuZGUuXG4iCisKKyM6IG9wdGlvbi5jOjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJWYWxpZCBvcHRpb25zIGFyZTpcbiIKK21zZ3N0ciAiTGVzIG9wdGlvbnMgdmFsaWRlcyBzb250IDpcbiIKKworIzogb3B0aW9uLmM6NzIyIG9wdGlvbi5jOjcyNgorbXNnaWQgImJhZCBwb3J0IgorbXNnc3RyICJudW3pcm8gZGUgcG9ydCBpbmNvcnJlY3QiCisKKyM6IG9wdGlvbi5jOjc1MyBvcHRpb24uYzo3ODUKK21zZ2lkICJpbnRlcmZhY2UgYmluZGluZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJhc3NvY2lhdGlvbiBkJ2ludGVyZmFjZSBub24gc3VwcG9ydOllIgorCisjCisjOiBvcHRpb24uYzo3NjIgb3B0aW9uLmM6MzQ5NAorbXNnaWQgImJhZCBpbnRlcmZhY2UgbmFtZSIKK21zZ3N0ciAibm9tIGQnaW50ZXJmYWNlIGludmFsaWRlIgorCisjCisjOiBvcHRpb24uYzo3OTIKK21zZ2lkICJiYWQgYWRkcmVzcyIKK21zZ3N0ciAibWF1dmFpc2UgYWRyZXNzZSIKKworIzogb3B0aW9uLmM6OTc0Cittc2dpZCAidW5zdXBwb3J0ZWQgZW5jYXBzdWxhdGlvbiBmb3IgSVB2NiBvcHRpb24iCittc2dzdHIgImVuY2Fwc3VsYXRpb24gZCdvcHRpb24gbm9uIHN1cHBvcnTpZSBwb3VyIElQdjYiCisKKyM6IG9wdGlvbi5jOjk4OAorbXNnaWQgImJhZCBkaGNwLW9wdGlvbiIKK21zZ3N0ciAibWF1dmFpc2UgdmFsZXVyIGRlICdkaGNwLW9wdGlvbiciCisKKyMKKyM6IG9wdGlvbi5jOjEwNTYKK21zZ2lkICJiYWQgSVAgYWRkcmVzcyIKK21zZ3N0ciAibWF1dmFpc2UgYWRyZXNzZSBJUCIKKworIworIzogb3B0aW9uLmM6MTA1OSBvcHRpb24uYzoxMTk3IG9wdGlvbi5jOjI4MTIKK21zZ2lkICJiYWQgSVB2NiBhZGRyZXNzIgorbXNnc3RyICJtYXV2YWlzZSBhZHJlc3NlIElQdjYiCisKKyM6IG9wdGlvbi5jOjEyMjQgb3B0aW9uLmM6MTMxOAorbXNnaWQgImJhZCBkb21haW4gaW4gZGhjcC1vcHRpb24iCittc2dzdHIgIm1hdXZhaXMgZG9tYWluZSBkYW5zIGRoY3Atb3B0aW9uIgorCisjOiBvcHRpb24uYzoxMzU2Cittc2dpZCAiZGhjcC1vcHRpb24gdG9vIGxvbmciCittc2dzdHIgImRoY3Atb3B0aW9uIHRyb3AgbG9uZyIKKworIzogb3B0aW9uLmM6MTM2MworbXNnaWQgImlsbGVnYWwgZGhjcC1tYXRjaCIKK21zZ3N0ciAidmFsZXVyIGlsbOlnYWxlIHBvdXIgJ2RoY3AtbWF0Y2gnIgorCisjOiBvcHRpb24uYzoxNDI1Cittc2dpZCAiaWxsZWdhbCByZXBlYXRlZCBmbGFnIgorbXNnc3RyICJVbmUgb3B0aW9uIG5lIHBvdXZhbnQg6nRyZSBzcOljaWZp6SBxdSd1bmUgc2V1bGUgZm9pcyDgIOl06SBkb25u6WUgcGx1c2lldXJzIGZvaXMiCisKKyM6IG9wdGlvbi5jOjE0MzMKK21zZ2lkICJpbGxlZ2FsIHJlcGVhdGVkIGtleXdvcmQiCittc2dzdHIgIk1vdC1jbGVmIG5lIHBvdXZhbnQg6nRyZSBy6XDpdOkiCisKKyM6IG9wdGlvbi5jOjE0OTUgb3B0aW9uLmM6NDA5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYWNjZXNzIGRpcmVjdG9yeSAlczogJXMiCittc2dzdHIgIk5lIHBldXQgcGFzIGxpcmUgbGUgculwZXJ0b2lyZSAlcyA6ICVzIgorCisjOiBvcHRpb24uYzoxNTQxIHRmdHAuYzo0OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyAlczogJXMiCittc2dzdHIgIk5lIHBldXQgcGFzIGxpcmUgJXMgOiAlcyIKKworIzogb3B0aW9uLmM6MTU4OAorbXNnaWQgInNldHRpbmcgbG9nIGZhY2lsaXR5IGlzIG5vdCBwb3NzaWJsZSB1bmRlciBBbmRyb2lkIgorbXNnc3RyICJTb3VzIGFuZHJvaWQsIGltcG9zc2libGUgZGUgcG9zaXRpb25uZXIgbGEgY2libGUgKGZhY2lsaXR5KSBwb3VyIGxlcyB0cmFjZXMgKGxvZ3MpLiIKKworIzogb3B0aW9uLmM6MTU5NworbXNnaWQgImJhZCBsb2cgZmFjaWxpdHkiCittc2dzdHIgIk1hdXZhaXNlIGNpYmxlIChmYWNpbGl0eSkgcG91ciBsZXMgdHJhY2VzLiIKKworIzogb3B0aW9uLmM6MTY1MAorbXNnaWQgImJhZCBNWCBwcmVmZXJlbmNlIgorbXNnc3RyICJwculmZXJlbmNlIE1YIGluY29ycmVjdGUiCisKKyM6IG9wdGlvbi5jOjE2NTUKK21zZ2lkICJiYWQgTVggbmFtZSIKK21zZ3N0ciAibm9tIE1YIGluY29ycmVjdCIKKworIzogb3B0aW9uLmM6MTY2OQorbXNnaWQgImJhZCBNWCB0YXJnZXQiCittc2dzdHIgInZhbGV1ciBNWCBjaWJsZSBpbmNvcnJlY3RlIgorCisjOiBvcHRpb24uYzoxNjgxCittc2dpZCAiY2Fubm90IHJ1biBzY3JpcHRzIHVuZGVyIHVDbGludXgiCittc2dzdHIgIm5lIHBldXQgZXjpY3V0ZXIgZGUgc2NyaXB0IHNvdXMgdUNsaW51eCIKKworIzogb3B0aW9uLmM6MTY4MworbXNnaWQgInJlY29tcGlsZSB3aXRoIEhBVkVfU0NSSVBUIGRlZmluZWQgdG8gZW5hYmxlIGxlYXNlLWNoYW5nZSBzY3JpcHRzIgorbXNnc3RyICJyZWNvbXBpbGVyIGVuIGTpZmluaXNzYW50IEhBVkVfU0NSSVBUIHBvdXIgcGVybWV0dHJlIGwnZXjpY3V0aW9uIGRlIHNjcmlwdHMgc2hlbGwgYXUgY2hhbmdlbWVudCBkZSBiYWlsIChsZWFzZS1jaGFuZ2UpIgorCisjOiBvcHRpb24uYzoxNjg3Cittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9MVUFTQ1JJUFQgZGVmaW5lZCB0byBlbmFibGUgTHVhIHNjcmlwdHMiCittc2dzdHIgInJlY29tcGlsZXIgZW4gZOlmaW5pc3NhbnQgSEFWRV9MVUFTQ1JJUFQgcG91ciBwZXJtZXR0cmUgbCdleOljdXRpb24gZGUgc2NyaXB0cyBMVUEgYXUgY2hhbmdlbWVudCBkZSBiYWlsIChsZWFzZS1jaGFuZ2UpIgorCisjOiBvcHRpb24uYzoxOTI4IG9wdGlvbi5jOjE5NjYgb3B0aW9uLmM6MjAxNQorbXNnaWQgImJhZCBwcmVmaXgiCittc2dzdHIgIm1hdXZhaXMgcHLpZml4ZSIKKworIzogb3B0aW9uLmM6MjI4OQorbXNnaWQgInJlY29tcGlsZSB3aXRoIEhBVkVfSVBTRVQgZGVmaW5lZCB0byBlbmFibGUgaXBzZXQgZGlyZWN0aXZlcyIKK21zZ3N0ciAicmVjb21waWxlciBlbiBk6WZpbmlzc2FudCBIQVZFX0lQU0VUIHBvdXIgcGVybWV0dHJlIGwndXRpbGlzYXRpb24gZGUgZGlyZWN0aXZlcyBkZSBncm91cGVzIGQnSVAgKElQc2V0KSIKKworIworIzogb3B0aW9uLmM6MjQ2OQorbXNnaWQgImJhZCBwb3J0IHJhbmdlIgorbXNnc3RyICJnYW1tZSBkZSBwb3J0cyBpbmNvcnJlY3RlIgorCisjOiBvcHRpb24uYzoyNDg1Cittc2dpZCAiYmFkIGJyaWRnZS1pbnRlcmZhY2UiCittc2dzdHIgImludGVyZmFjZS1wb250IGluY29ycmVjdGUiCisKKyM6IG9wdGlvbi5jOjI1NDUKK21zZ2lkICJvbmx5IG9uZSB0YWcgYWxsb3dlZCIKK21zZ3N0ciAidW5lIHNldWxlIOl0aXF1ZXR0ZSBlc3QgYXV0b3Jpc+llIgorCisjOiBvcHRpb24uYzoyNTY1IG9wdGlvbi5jOjI1Nzcgb3B0aW9uLmM6MjY4MyBvcHRpb24uYzoyNzI0Cittc2dpZCAiYmFkIGRoY3AtcmFuZ2UiCittc2dzdHIgInBsYWdlIGQnYWRyZXNzZXMgREhDUCAoZGhjcC1yYW5nZSkgaW5jb3JyZWN0ZSIKKworIzogb3B0aW9uLmM6MjU5MgorbXNnaWQgImluY29uc2lzdGVudCBESENQIHJhbmdlIgorbXNnc3RyICJwbGFnZSBkJ2FkcmVzc2VzIERIQ1AgaW5jb2jpcmVudGUiCisKKyM6IG9wdGlvbi5jOjI2NTEKK21zZ2lkICJwcmVmaXggbGVuZ3RoIG11c3QgYmUgZXhhY3RseSA2NCBmb3IgUkEgc3VibmV0cyIKK21zZ3N0ciAibGEgdGFpbGxlIGR1IHBy6WZpeGUgZG9pdCDqdHJlIGV4YWN0ZW1lbnQgNjQgcG91ciBsZXMgc291cy1y6XNlYXV4IGQnYW5ub25jZXMgZGUgcm91dGV1cnMgKFJBKSIKKworIzogb3B0aW9uLmM6MjY1MworbXNnaWQgInByZWZpeCBsZW5ndGggbXVzdCBiZSBleGFjdGx5IDY0IGZvciBzdWJuZXQgY29uc3RydWN0b3JzIgorbXNnc3RyICJsYSB0YWlsbGUgZHUgcHLpZml4ZSBkb2l0IOp0cmUgZXhhY3RlbWVudCA2NCBwb3VyIGxlIGNvbnN0cnVjdGV1ciBkZSBzb3VzLXLpc2VhdXgiCisKKyM6IG9wdGlvbi5jOjI2NTcKK21zZ2lkICJwcmVmaXggbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgNjQiCittc2dzdHIgImxhIHRhaWxsZSBkZSBwculmaXhlIGRvaXQg6nRyZSBhdSBtaW5pbXVtIDY0IgorCisjOiBvcHRpb24uYzoyNjYwCittc2dpZCAiaW5jb25zaXN0ZW50IERIQ1B2NiByYW5nZSIKK21zZ3N0ciAicGxhZ2UgZCdhZHJlc3NlcyBESENQdjYgaW5jb2jpcmVudGUiCisKKyM6IG9wdGlvbi5jOjI2NzEKK21zZ2lkICJwcmVmaXggbXVzdCBiZSB6ZXJvIHdpdGggXCJjb25zdHJ1Y3RvcjpcIiBhcmd1bWVudCIKK21zZ3N0ciAibGUgcHLpZml4ZSBkb2l0IGF2b2lyIHVuZSB0YWlsbGUgZGUgMCBsb3JzcXVlIGwnYXJndW1lbnQgXCJjb25zdHJ1Y3RvcjpcIiBlc3QgdXRpbGlz6SIKKworIzogb3B0aW9uLmM6Mjc4MiBvcHRpb24uYzoyODMwCittc2dpZCAiYmFkIGhleCBjb25zdGFudCIKK21zZ3N0ciAibWF1dmFpc2UgY29uc3RhbnRlIGhleGFkZWNpbWFsZSIKKworIzogb3B0aW9uLmM6MjgwNAorbXNnaWQgImNhbm5vdCBtYXRjaCB0YWdzIGluIC0tZGhjcC1ob3N0IgorbXNnc3RyICJMJ3V0aWxpc2F0aW9uIGRlIGxhYmVscyBlc3QgcHJvaGli6WUgZGFucyAtLWRoY3AtaG9zdCIKKworIzogb3B0aW9uLmM6Mjg1MgorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgZGhjcC1ob3N0IElQIGFkZHJlc3MgJXMiCittc2dzdHIgImFkcmVzc2UgSVAgZGhjcC1ob3N0IGR1cGxpcXXpZSBkYW5zICVzLiIKKworIworIzogb3B0aW9uLmM6MjkxMAorbXNnaWQgImJhZCBESENQIGhvc3QgbmFtZSIKK21zZ3N0ciAibm9tIGQnaPR0ZSBESENQIGluY29ycmVjdCIKKworIzogb3B0aW9uLmM6Mjk5MgorbXNnaWQgImJhZCB0YWctaWYiCittc2dzdHIgIm1hdXZhaXNlIOl0aXF1ZXR0ZSB0YWctaWYiCisKKyM6IG9wdGlvbi5jOjMzMTYgb3B0aW9uLmM6MzcxMAorbXNnaWQgImludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgIm51belybyBkZSBwb3J0IGludmFsaWRlIgorCisjCisjOiBvcHRpb24uYzozMzc4Cittc2dpZCAiYmFkIGRoY3AtcHJveHkgYWRkcmVzcyIKK21zZ3N0ciAiYWRyZXNzZSBkaGNwLXByb3h5IGluY29ycmVjdGUiCisKKyM6IG9wdGlvbi5jOjM0MDQKK21zZ2lkICJCYWQgZGhjcC1yZWxheSIKK21zZ3N0ciAidmFsZXVyIGluY29ycmVjdGUgcG91ciBsZSByZWxhaXMgREhDUCAoZGhjcC1yZWxheSkiCisKKyM6IG9wdGlvbi5jOjM0MzAKK21zZ2lkICJiYWQgUkEtcGFyYW1zIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM0MzkKK21zZ2lkICJiYWQgRFVJRCIKK21zZ3N0ciAibWF1dmFpcyBpZGVudGlmaWFudCB1bmlxdWUgREhDUCAoRFVJRCkiCisKKyMKKyM6IG9wdGlvbi5jOjM0ODEKK21zZ2lkICJpbnZhbGlkIGFsaWFzIHJhbmdlIgorbXNnc3RyICJwb2lkcyBpbnZhbGlkZSIKKworIzogb3B0aW9uLmM6MzUzNQorbXNnaWQgImJhZCBDTkFNRSIKK21zZ3N0ciAibWF1dmFpcyBDTkFNRSIKKworIzogb3B0aW9uLmM6MzU0MAorbXNnaWQgImR1cGxpY2F0ZSBDTkFNRSIKK21zZ3N0ciAiY2UgQ05BTUUgZXhpc3RlIGTpamEiCisKKyMKKyM6IG9wdGlvbi5jOjM1NjAKK21zZ2lkICJiYWQgUFRSIHJlY29yZCIKK21zZ3N0ciAibWF1dmFpcyBjaGFtcCBQVFIiCisKKyMKKyM6IG9wdGlvbi5jOjM1OTEKK21zZ2lkICJiYWQgTkFQVFIgcmVjb3JkIgorbXNnc3RyICJtYXV2YWlzIGNoYW1wIE5BUFRSIgorCisjCisjOiBvcHRpb24uYzozNjI1Cittc2dpZCAiYmFkIFJSIHJlY29yZCIKK21zZ3N0ciAibWF1dmFpcyBlbnJlZ2lzdHJlbWVudCBSUiIKKworIzogb3B0aW9uLmM6MzY1NQorbXNnaWQgImJhZCBUWFQgcmVjb3JkIgorbXNnc3RyICJjaGFtcCBUWFQgaW52YWxpZGUiCisKKyM6IG9wdGlvbi5jOjM2OTYKK21zZ2lkICJiYWQgU1JWIHJlY29yZCIKK21zZ3N0ciAiY2hhbXAgU1JWIGludmFsaWRlIgorCisjOiBvcHRpb24uYzozNzAzCittc2dpZCAiYmFkIFNSViB0YXJnZXQiCittc2dzdHIgImNpYmxlIFNSViBpbnZhbGlkZSIKKworIzogb3B0aW9uLmM6MzcxNworbXNnaWQgImludmFsaWQgcHJpb3JpdHkiCittc2dzdHIgInByaW9yaXTpIGludmFsaWRlIgorCisjOiBvcHRpb24uYzozNzI0Cittc2dpZCAiaW52YWxpZCB3ZWlnaHQiCittc2dzdHIgInBvaWRzIGludmFsaWRlIgorCisjCisjOiBvcHRpb24uYzozNzQ4Cittc2dpZCAiQmFkIGhvc3QtcmVjb3JkIgorbXNnc3RyICJtYXV2YWlzIGNoYW1wIGhvc3QtcmVjb3JkIgorCisjOiBvcHRpb24uYzozNzY1Cittc2dpZCAiQmFkIG5hbWUgaW4gaG9zdC1yZWNvcmQiCittc2dzdHIgIm1hdXZhaXMgbm9tIGRhbnMgbGUgY2hhbXAgaG9zdC1yZWNvcmQiCisKKyMKKyM6IG9wdGlvbi5jOjM4MjYKKyMsIGZ1enp5Cittc2dpZCAiYmFkIHRydXN0IGFuY2hvciIKK21zZ3N0ciAiZ2FtbWUgZGUgcG9ydHMgaW5jb3JyZWN0ZSIKKworIzogb3B0aW9uLmM6Mzg0MAorbXNnaWQgImJhZCBIRVggaW4gdHJ1c3QgYW5jaG9yIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4NTAKKyMsIGZ1enp5Cittc2dpZCAidW5zdXBwb3J0ZWQgb3B0aW9uIChjaGVjayB0aGF0IGRuc21hc3Egd2FzIGNvbXBpbGVkIHdpdGggREhDUC9URlRQL0ROU1NFQy9EQnVzIHN1cHBvcnQpIgorbXNnc3RyICJvcHRpb24gbm9uIHN1cHBvcnTpZSAodulyaWZpZXIgcXVlIERuc21hc3EgYSDpdOkgY29tcGls6SBhdmVjIGxlIHN1cHBvcnQgREhDUC9URlRQL0RCdXMpIgorCisjOiBvcHRpb24uYzozOTA5Cittc2dpZCAibWlzc2luZyBcIiIKK21zZ3N0ciAiaWwgbWFucXVlIFwiIgorCisjOiBvcHRpb24uYzozOTY2Cittc2dpZCAiYmFkIG9wdGlvbiIKK21zZ3N0ciAibWF1dmFpc2Ugb3B0aW9uIgorCisjOiBvcHRpb24uYzozOTY4Cittc2dpZCAiZXh0cmFuZW91cyBwYXJhbWV0ZXIiCittc2dzdHIgInBhcmFt6HRyZSBlbiB0cm9wIgorCisjOiBvcHRpb24uYzozOTcwCittc2dpZCAibWlzc2luZyBwYXJhbWV0ZXIiCittc2dzdHIgInBhcmFt6HRyZSBtYW5xdWFudCIKKworIzogb3B0aW9uLmM6Mzk3MgorIywgZnV6enkKK21zZ2lkICJpbGxlZ2FsIG9wdGlvbiIKK21zZ3N0ciAibWF1dmFpc2Ugb3B0aW9uIgorCisjOiBvcHRpb24uYzozOTc5Cittc2dpZCAiZXJyb3IiCittc2dzdHIgImVycmV1ciIKKworIzogb3B0aW9uLmM6Mzk4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgYXQgbGluZSAlZCBvZiAlcyIKK21zZ3N0ciAi4CBsYSBsaWduZSAlZCBkZSAlcyIKKworIzogb3B0aW9uLmM6NDA0NSBvcHRpb24uYzo0MTY4IHRmdHAuYzo2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJXM6ICVzIgorbXNnc3RyICJOZSBwZXV0IHBhcyBsaXJlICVzIDogJXMiCisKKyM6IG9wdGlvbi5jOjQyMjkgb3B0aW9uLmM6NDI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkICVzIgorbXNnc3RyICJMZWN0dXJlIGRlICVzIgorCisjOiBvcHRpb24uYzo0MzMxCittc2dpZCAianVuayBmb3VuZCBpbiBjb21tYW5kIGxpbmUiCittc2dzdHIgImxhIGxpZ25lIGRlIGNvbW1hbmRlIGNvbnRpZW50IGRlcyDpbOltZW50cyBpbmTpc2lyYWJsZXMgb3UgaW5jb21wculoZW5zaWJsZXMiCisKKyM6IG9wdGlvbi5jOjQzNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG5zbWFzcSB2ZXJzaW9uICVzICAlc1xuIgorbXNnc3RyICJWZXJzaW9uIGRlIERuc21hc3EgJXMgICVzXG4iCisKKyM6IG9wdGlvbi5jOjQzNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvbXBpbGUgdGltZSBvcHRpb25zOiAlc1xuIgorIlxuIgorbXNnc3RyICIiCisiT3B0aW9ucyDgIGxhIGNvbXBpbGF0aW9uICVzXG4iCisiXG4iCisKKyM6IG9wdGlvbi5jOjQzNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuXG4iCittc2dzdHIgIkNlIGxvZ2ljaWVsIGVzdCBmb3Vybmkgc2FucyBBVUNVTkUgR0FSQU5USUUuXG4iCisKKyM6IG9wdGlvbi5jOjQzNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG5zbWFzcSBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdFxuIgorbXNnc3RyICJEbnNtYXNxIGVzdCB1biBsb2dpY2llbCBsaWJyZSwgaWwgdm91cyBlc3QgcGVybWlzIGRlIGxlIHJlZGlzdHJpYnVlclxuIgorCisjOiBvcHRpb24uYzo0MzcwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiBvciAzLlxuIgorbXNnc3RyICJzb3VzIGxlcyB0ZXJtZXMgZGUgbGEgbGljZW5jZSBHUEwgKEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKSwgdmVyc2lvbiAyIG91IDMuXG4iCisKKyM6IG9wdGlvbi5jOjQzODEKK21zZ2lkICJ0cnkgLS1oZWxwIgorbXNnc3RyICJlc3NheWV6IGF2ZWMgLS1oZWxwIgorCisjOiBvcHRpb24uYzo0MzgzCittc2dpZCAidHJ5IC13IgorbXNnc3RyICJlc3NheWV6IGF2ZWMgLXciCisKKyM6IG9wdGlvbi5jOjQzODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbW1hbmQgbGluZSBvcHRpb25zOiAlcyIKK21zZ3N0ciAibWF1dmFpc2VzIG9wdGlvbnMgZW4gbGlnbmUgZGUgY29tbWFuZGUgOiAlcy4iCisKKyM6IG9wdGlvbi5jOjQ0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCBob3N0LW5hbWU6ICVzIgorbXNnc3RyICJuZSBwZXV0IHBhcyBvYnRlbmlyIGxlIG5vbSBkZSBsYSBtYWNoaW5lIDogJXMiCisKKyM6IG9wdGlvbi5jOjQ0NjIKK21zZ2lkICJvbmx5IG9uZSByZXNvbHYuY29uZiBmaWxlIGFsbG93ZWQgaW4gbm8tcG9sbCBtb2RlLiIKK21zZ3N0ciAic2V1bCB1biBmaWNoaWVyIHJlc29sdi5jb25mIGVzdCBhdXRvcmlz6SBkYW5zIGxlIG1vZGUgbm8tcG9sbCIKKworIzogb3B0aW9uLmM6NDQ3MgorbXNnaWQgIm11c3QgaGF2ZSBleGFjdGx5IG9uZSByZXNvbHYuY29uZiB0byByZWFkIGRvbWFpbiBmcm9tLiIKK21zZ3N0ciAidW4gZmljaGllciByZXNvbHYuY29uZiAoZXQgdW4gc2V1bCkgZXN0IG7pY2Vzc2FpcmUgcG91ciB5IHLpY3VwZXJlciBsZSBub20gZGUgZG9tYWluZS4iCisKKyM6IG9wdGlvbi5jOjQ0NzUgbmV0d29yay5jOjE1MDYgZGhjcC5jOjc2OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAlczogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSAlcyA6ICVzIgorCisjOiBvcHRpb24uYzo0NDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNlYXJjaCBkaXJlY3RpdmUgZm91bmQgaW4gJXMiCittc2dzdHIgInBhcyBkZSBkaXJlY3RpdmUgZGUgcmVjaGVyY2hlIHRyb3V26WUgZGFucyAlcyIKKworIzogb3B0aW9uLmM6NDUxMworbXNnaWQgInRoZXJlIG11c3QgYmUgYSBkZWZhdWx0IGRvbWFpbiB3aGVuIC0tZGhjcC1mcWRuIGlzIHNldCIKK21zZ3N0ciAidW4gZG9tYWluZSBwYXIgZOlmYXV0IGRvaXQg6nRyZSBzcOljaWZp6SBsb3JzcXVlIGwnb3B0aW9uIC0tZGhjcC1mcWRuIGVzdCB1dGlsaXPpZSIKKworIzogb3B0aW9uLmM6NDUyMgorbXNnaWQgInN5bnRheCBjaGVjayBPSyIKK21zZ3N0ciAidulyaWZpY2F0aW9uIGRlIHN5bnRheGUgT0siCisKKyM6IGZvcndhcmQuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNlbmQgcGFja2V0OiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2Vudm95ZXIgbGUgcGFxdWV0IDogJXMiCisKKyM6IGZvcndhcmQuYzo1NzQKK21zZ2lkICJkaXNjYXJkaW5nIEROUyByZXBseTogc3VibmV0IG9wdGlvbiBtaXNtYXRjaCIKK21zZ3N0ciAiIgorCisjOiBmb3J3YXJkLmM6NTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5hbWVzZXJ2ZXIgJXMgcmVmdXNlZCB0byBkbyBhIHJlY3Vyc2l2ZSBxdWVyeSIKK21zZ3N0ciAibGUgc2VydmV1ciBkZSBub20gJXMgYSByZWZ1c+kgZGUgZmFpcmUgdW5lIHJlY2hlcmNoZSBy6WN1cnNpdmUiCisKKyM6IGZvcndhcmQuYzo2MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zc2libGUgRE5TLXJlYmluZCBhdHRhY2sgZGV0ZWN0ZWQ6ICVzIgorbXNnc3RyICJk6XRlY3Rpb24gZCd1bmUgcG9zc2libGUgYXR0YXF1ZSBkZSB0eXBlIEROUy1yZWJpbmQ6ICVzIgorCisjOiBmb3J3YXJkLmM6MTEzMiBmb3J3YXJkLmM6MTY2MworbXNnaWQgIklnbm9yaW5nIHF1ZXJ5IGZyb20gbm9uLWxvY2FsIG5ldHdvcmsiCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjIxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBETlMgcXVlcmllcyByZWFjaGVkIChtYXg6ICVkKSIKK21zZ3N0ciAiTm9tYnJlIG1heGltdW0gZGUgcmVxdep0ZXMgRE5TIGNvbmN1cnJlbnRlcyBhdHRlaW50IChtYXhpbXVtIDogJWQpLiIKKworIzogbmV0d29yay5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGxpc3RlbmluZyBzb2NrZXQgZm9yICVzOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjcullciB1bmUgc29ja2V0IGQn6WNvdXRlIHBvdXIgJXMgOiAlcyIKKworIzogbmV0d29yay5jOjEwMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTE9VRCBXQVJOSU5HOiBsaXN0ZW5pbmcgb24gJXMgbWF5IGFjY2VwdCByZXF1ZXN0cyB2aWEgaW50ZXJmYWNlcyBvdGhlciB0aGFuICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxMDI4Cittc2dpZCAiTE9VRCBXQVJOSU5HOiB1c2UgLS1iaW5kLWR5bmFtaWMgcmF0aGVyIHRoYW4gLS1iaW5kLWludGVyZmFjZXMgdG8gYXZvaWQgRE5TIGFtcGxpZmljYXRpb24gYXR0YWNrcyB2aWEgdGhlc2UgaW50ZXJmYWNlKHMpIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxMDM3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBubyBhZGRyZXNzZXMgZm91bmQgZm9yIGludGVyZmFjZSAlcyIKK21zZ3N0ciAidXRpbGlzZSBsZXMgYWRyZXNzZXMgbG9jYWxlcyBzZXVsZW1lbnQgcG91ciAlcyAlcyIKKworIzogbmV0d29yay5jOjEwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJmYWNlICVzIGZhaWxlZCB0byBqb2luIERIQ1B2NiBtdWx0aWNhc3QgZ3JvdXA6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGZhaXJlIHJlam9pbmRyZSBsJ2ludGVyZmFjZSAlcyBkYW5zIGxlIGdyb3VwZSBtdWx0aWNhc3QgREhDUHY2ICVzIgorCisjOiBuZXR3b3JrLmM6MTI4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBzZXJ2ZXIgc29ja2V0IGZvciAlczogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgbGllciBsYSBzb2NrZXQgZGUgc2VydmV1ciBwb3VyICVzIDogJXMiCisKKyM6IG5ldHdvcmsuYzoxNDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIG5hbWVzZXJ2ZXIgJXMgLSBsb2NhbCBpbnRlcmZhY2UiCittc2dzdHIgImlnbm9yZSBsZSBzZXJ2ZXVyIGRlIG5vbSAlcyAtIGludGVyZmFjZSBsb2NhbGUiCisKKyM6IG5ldHdvcmsuYzoxNDU1CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIG5hbWVzZXJ2ZXIgJXMgLSBjYW5ub3QgbWFrZS9iaW5kIHNvY2tldDogJXMiCittc2dzdHIgImlnbm9yZSBsZSBzZXJ2ZXVyIGRlIG5vbSAlcyAtIG5lIHBldXQgY29uc3RydWlyZS9saWVyIGxhIHNvY2tldCA6ICVtIgorCisjOiBuZXR3b3JrLmM6MTQ2OAorbXNnaWQgInVucXVhbGlmaWVkIgorbXNnc3RyICJub24tcXVhbGlmaekoZSkiCisKKyM6IG5ldHdvcmsuYzoxNDY4Cittc2dpZCAibmFtZXMiCittc2dzdHIgIm5vbXMiCisKKyM6IG5ldHdvcmsuYzoxNDcwCittc2dpZCAiZGVmYXVsdCIKK21zZ3N0ciAiZOlmYXV0IgorCisjOiBuZXR3b3JrLmM6MTQ3MgorbXNnaWQgImRvbWFpbiIKK21zZ3N0ciAiZG9tYWluZSIKKworIzogbmV0d29yay5jOjE0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbG9jYWwgYWRkcmVzc2VzIG9ubHkgZm9yICVzICVzIgorbXNnc3RyICJ1dGlsaXNlIGxlcyBhZHJlc3NlcyBsb2NhbGVzIHNldWxlbWVudCBwb3VyICVzICVzIgorCisjOiBuZXR3b3JrLmM6MTQ3NworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBzdGFuZGFyZCBuYW1lc2VydmVycyBmb3IgJXMgJXMiCittc2dzdHIgInV0aWxpc2F0aW9uIGRlcyBzZXJ2ZXVycyBkZSBub20gc3RhbmRhcmRzIHBvdXIgJXMgJXMiCisKKyM6IG5ldHdvcmsuYzoxNDc5CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQgZm9yICVzICVzIgorbXNnc3RyICJ1dGlsaXNlIGxlIHNlcnZldXIgZGUgbm9tICVzIyVkIHBvdXIgJXMgJXMiCisKKyM6IG5ldHdvcmsuYzoxNDgzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJOT1QgdXNpbmcgbmFtZXNlcnZlciAlcyMlZCAtIHF1ZXJ5IGxvb3AgZGV0ZWN0ZWQiCittc2dzdHIgInV0aWxpc2UgbGUgc2VydmV1ciBkZSBub20gJXMjJWQgcG91ciAlcyAlcyIKKworIzogbmV0d29yay5jOjE0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCh2aWEgJXMpIgorbXNnc3RyICJ1dGlsaXNlIGxlIHNlcnZldXIgZGUgbm9tICVzIyVkICh2aWEgJXMpIgorCisjOiBuZXR3b3JrLmM6MTQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkIgorbXNnc3RyICJ1dGlsaXNlIGxlIHNlcnZldXIgZGUgbm9tICVzIyVkIgorCisjOiBkbnNtYXNxLmM6MTU0Cittc2dpZCAiTm8gdHJ1c3QgYW5jaG9ycyBwcm92aWRlZCBmb3IgRE5TU0VDIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxNTcKK21zZ2lkICJDYW5ub3QgcmVkdWNlIGNhY2hlIHNpemUgZnJvbSBkZWZhdWx0IHdoZW4gRE5TU0VDIGVuYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE1OQorIywgZnV6enkKK21zZ2lkICJETlNTRUMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfRE5TU0VDIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiREJ1cyBuJ2VzdCBwYXMgZGlzcG9uaWJsZSA6IGFjdGl2ZXogSEFWRV9EQlVTIGRhbnMgc3JjL2NvbmZpZy5oIgorCisjCisjOiBkbnNtYXNxLmM6MTY1Cittc2dpZCAiVEZUUCBzZXJ2ZXIgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfVEZUUCBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIlRGVFAgbidlc3QgcGFzIGRpc3BvbmlibGUgOiBhY3RpdmV6IEhBVkVfVEZUUCBkYW5zIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjE3MAorbXNnaWQgIkNhbm5vdCB1c2UgLS1jb25udHJhY2sgQU5EIC0tcXVlcnktcG9ydCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ3V0aWxpc2VyIGNvbmpvaW50ZW1lbnQgLS1jb25udHJhY2sgZXQgLS1xdWVyeS1wb3J0IgorCisjCisjOiBkbnNtYXNxLmM6MTczCittc2dpZCAiQ29ubnRyYWNrIHN1cHBvcnQgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfQ09OTlRSQUNLIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiU3VwcG9ydCBkZSBzdWl2aSBkZSBjb25uZXhpb24gbm9uIGRpc3BvbmlibGUgOiBhY3RpdmV6IEhBVkVfQ09OTlRSQUNLIGRhbnMgc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MTc4Cittc2dpZCAiYXN5Y2hyb25vdXMgbG9nZ2luZyBpcyBub3QgYXZhaWxhYmxlIHVuZGVyIFNvbGFyaXMiCittc2dzdHIgImwn6WNyaXR1cmUgZGUgdHJhY2VzIGVuIG1vZGUgYXN5bmNocm9uZSBuJ2VzdCBwYXMgZGlzcG9uaWJsZSBzb3VzIFNvbGFyaXMuIgorCisjOiBkbnNtYXNxLmM6MTgzCittc2dpZCAiYXN5Y2hyb25vdXMgbG9nZ2luZyBpcyBub3QgYXZhaWxhYmxlIHVuZGVyIEFuZHJvaWQiCittc2dzdHIgImwn6WNyaXR1cmUgZGUgdHJhY2VzIGVuIG1vZGUgYXN5bmNocm9uZSBuJ2VzdCBwYXMgZGlzcG9uaWJsZSBzb3VzIEFuZHJvaWQuIgorCisjOiBkbnNtYXNxLmM6MTg4Cittc2dpZCAiYXV0aG9yaXRhdGl2ZSBETlMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfQVVUSCBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgImxlIG1vZGUgqyBhdXRvcml06SBETlMguyBuJ2VzdCBwYXMgZGlzcG9uaWJsZSA6IGFjdGl2ZXogSEFWRV9BVVRIIGRhbnMgc3JjL2NvbmZpZy5oIgorCisjCisjOiBkbnNtYXNxLmM6MTkzCisjLCBmdXp6eQorbXNnaWQgIkxvb3AgZGV0ZWN0aW9uIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0xPT1AgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJURlRQIG4nZXN0IHBhcyBkaXNwb25pYmxlIDogYWN0aXZleiBIQVZFX1RGVFAgZGFucyBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzoyMDEKK21zZ2lkICJ6b25lIHNlcmlhbCBtdXN0IGJlIGNvbmZpZ3VyZWQgaW4gLS1hdXRoLXNvYSIKK21zZ3N0ciAibGUgbnVt6XJvIGRlIHPpcmllIGRlIGxhIHpvbmUgZG9pdCDqdHJlIGNvbmZpZ3Vy6SBkYW5zIC0tYXV0aC1zb2EiCisKKyM6IGRuc21hc3EuYzoyMTkKK21zZ2lkICJkaGNwLXJhbmdlIGNvbnN0cnVjdG9yIG5vdCBhdmFpbGFibGUgb24gdGhpcyBwbGF0Zm9ybSIKK21zZ3N0ciAibGUgY29uc3RydWN0ZXVyIGRlIHBsYWdlIGRoY3Agbidlc3QgcGFzIGRpc3BvbmlibGUgc3VyIGNldHRlIHBsYXRlLWZvcm1lIgorCisjOiBkbnNtYXNxLmM6MjYyCittc2dpZCAiY2Fubm90IHNldCAtLWJpbmQtaW50ZXJmYWNlcyBhbmQgLS1iaW5kLWR5bmFtaWMiCittc2dzdHIgIi0tYmluZC1pbnRlcmZhY2VzIGV0IC0tYmluZC1keW5hbWljIHNvbnQgbXV0dWVsbGVtZW50IGV4Y2x1c2l2ZXMiCisKKyM6IGRuc21hc3EuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQgbGlzdCBvZiBpbnRlcmZhY2VzOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSB0cm91dmVyIGxhIGxpc3RlIGRlcyBpbnRlcmZhY2VzIDogJXMiCisKKyM6IGRuc21hc3EuYzoyNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbnRlcmZhY2UgJXMiCittc2dzdHIgImludGVyZmFjZSAlcyBpbmNvbm51ZSIKKworIzogZG5zbWFzcS5jOjMzMCBkbnNtYXNxLmM6OTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRCdXMgZXJyb3I6ICVzIgorbXNnc3RyICJFcnJldXIgREJ1cyA6ICVzIgorCisjOiBkbnNtYXNxLmM6MzMzCittc2dpZCAiREJ1cyBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9EQlVTIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiREJ1cyBuJ2VzdCBwYXMgZGlzcG9uaWJsZSA6IGFjdGl2ZXogSEFWRV9EQlVTIGRhbnMgc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MzYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdXNlciBvciBncm91cDogJXMiCittc2dzdHIgInV0aWxpc2F0ZXVyIG91IGdyb3VwZSBpbmNvbm51IDogJXMiCisKKyM6IGRuc21hc3EuYzo0MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvIGZpbGVzeXN0ZW0gcm9vdDogJXMiCittc2dzdHIgIk5lIHBldXQgZWZmZWN0dWVyIHVuICdjaGRpcicg4CBsYSByYWNpbmUgZHUgc3lzdOhtZSBkZSBmaWNoaWVyIDogJXMiCisKKyM6IGRuc21hc3EuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnRlZCwgdmVyc2lvbiAlcyBETlMgZGlzYWJsZWQiCittc2dzdHIgImTpbWFycmFnZSBhdmVjIGxlIEROUyBk6XNhY3RpdukgKHZlcnNpb24gJXMpIgorCisjOiBkbnNtYXNxLmM6NjU1CisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGVzaXplICVkIgorbXNnc3RyICJkZW1hcnLpLCB2ZXJzaW9uICVzICh0YWlsbGUgZGUgY2FjaGUgJWQpIgorCisjOiBkbnNtYXNxLmM6NjU3CisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGUgZGlzYWJsZWQiCittc2dzdHIgImTpbWFycmFnZSBhdmVjIGxlIGNhY2hlIGTpc2FjdGl26SAodmVyc2lvbiAlcykiCisKKyM6IGRuc21hc3EuYzo2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tcGlsZSB0aW1lIG9wdGlvbnM6ICVzIgorbXNnc3RyICJvcHRpb25zIOAgbGEgY29tcGlsYXRpb24gOiAlcyIKKworIzogZG5zbWFzcS5jOjY2NQorbXNnaWQgIkRCdXMgc3VwcG9ydCBlbmFibGVkOiBjb25uZWN0ZWQgdG8gc3lzdGVtIGJ1cyIKK21zZ3N0ciAiU3VwcG9ydCBEQnVzIGF1dG9yaXPpIDogY29ubmVjdOkgYXUgYnVzIHN5c3TobWUiCisKKyM6IGRuc21hc3EuYzo2NjcKK21zZ2lkICJEQnVzIHN1cHBvcnQgZW5hYmxlZDogYnVzIGNvbm5lY3Rpb24gcGVuZGluZyIKK21zZ3N0ciAiU3VwcG9ydCBEQnVzIGF1dG9yaXPpIDogY29ubmV4aW9uIGF1IGJ1cyBlbiBhdHRlbnRlIgorCisjOiBkbnNtYXNxLmM6NjcyCittc2dpZCAiRE5TIHNlcnZpY2UgbGltaXRlZCB0byBsb2NhbCBzdWJuZXRzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo2NzcKK21zZ2lkICJETlNTRUMgdmFsaWRhdGlvbiBlbmFibGVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo2NzkKK21zZ2lkICJETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMgbm90IGNoZWNrZWQgdW50aWwgZmlyc3QgY2FjaGUgcmVsb2FkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogZmFpbGVkIHRvIGNoYW5nZSBvd25lciBvZiAlczogJXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgY2hhbmdlciBwb3VyIGwndXRpbGlzYXRldXIgJXMgOiAlcyIKKworIzogZG5zbWFzcS5jOjY4OAorbXNnaWQgInNldHRpbmcgLS1iaW5kLWludGVyZmFjZXMgb3B0aW9uIGJlY2F1c2Ugb2YgT1MgbGltaXRhdGlvbnMiCittc2dzdHIgImFjdGl2ZSBsJ29wdGlvbiAtLWJpbmQtaW50ZXJmYWNlcyDgIGNhdXNlIGRlIGxpbWl0YXRpb25zIGRhbnMgbGUgc3lzdOhtZSBkJ2V4cGxvaXRhdGlvbiIKKworIzogZG5zbWFzcS5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBpbnRlcmZhY2UgJXMgZG9lcyBub3QgY3VycmVudGx5IGV4aXN0IgorbXNnc3RyICJhdHRlbnRpb24gOiBsJ2ludGVyZmFjZSAlcyBuJ2V4aXN0ZSBwYXMgYWN0dWVsbGVtZW50IgorCisjOiBkbnNtYXNxLmM6NzAzCittc2dpZCAid2FybmluZzogaWdub3JpbmcgcmVzb2x2LWZpbGUgZmxhZyBiZWNhdXNlIG5vLXJlc29sdiBpcyBzZXQiCittc2dzdHIgImF0dGVudGlvbiA6IGwnb3B0aW9uIKsgcmVzb2x2LWZpbGUguyBzZXJhIGlnbm9y6WUgY2FyIKsgbm8tcmVzb2x2ILsgYSDpdOkgc3DpY2lmaekiCisKKyMKKyM6IGRuc21hc3EuYzo3MDYKK21zZ2lkICJ3YXJuaW5nOiBubyB1cHN0cmVhbSBzZXJ2ZXJzIGNvbmZpZ3VyZWQiCittc2dzdHIgImF0dGVudGlvbiA6IGF1Y3VuIHNlcnZldXIgYW1vbnQgbidlc3QgY29uZmlndXLpIgorCisjOiBkbnNtYXNxLmM6NzEwCisjLCBjLWZvcm1hdAorbXNnaWQgImFzeW5jaHJvbm91cyBsb2dnaW5nIGVuYWJsZWQsIHF1ZXVlIGxpbWl0IGlzICVkIG1lc3NhZ2VzIgorbXNnc3RyICJtb2RlIGFzeW5jaHJvbmUgZCfpY3JpdHVyZSBkZSB0cmFjZXMsIGxhIHRhaWxsZSBtYXhpbXVtIGRlIGxhIHF1ZXVlIGVzdCBkZSAlZCBtZXNzYWdlcy4iCisKKyM6IGRuc21hc3EuYzo3MzEKK21zZ2lkICJJUHY2IHJvdXRlciBhZHZlcnRpc2VtZW50IGVuYWJsZWQiCittc2dzdHIgImFubm9uY2VzIGRlIHJvdXRldXIgSVB2NiBhY3RpdullcyIKKworIzogZG5zbWFzcS5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQLCBzb2NrZXRzIGJvdW5kIGV4Y2x1c2l2ZWx5IHRvIGludGVyZmFjZSAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzUzCittc2dpZCAicm9vdCBpcyAiCittc2dzdHIgInJvb3QgZXN0IgorCisjCisjOiBkbnNtYXNxLmM6NzUzCittc2dpZCAiZW5hYmxlZCIKK21zZ3N0ciAiYWN0aXbpIgorCisjOiBkbnNtYXNxLmM6NzU1Cittc2dpZCAic2VjdXJlIG1vZGUiCittc2dzdHIgIm1vZGUgc+ljdXJpc+kiCisKKyM6IGRuc21hc3EuYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVzdHJpY3RpbmcgbWF4aW11bSBzaW11bHRhbmVvdXMgVEZUUCB0cmFuc2ZlcnMgdG8gJWQiCittc2dzdHIgImxlIG5vbWJyZSBtYXhpbXVtIGRlIHRyYW5zZmVydHMgVEZUUCBzaW11bHRhbulzIHNlcmEgcmVzdHJlaW50IOAgJWQiCisKKyM6IGRuc21hc3EuYzo5NTYKK21zZ2lkICJjb25uZWN0ZWQgdG8gc3lzdGVtIERCdXMiCittc2dzdHIgImNvbm5lY3TpIGF1IHN5c3RlbWUgREJ1cyIKKworIzogZG5zbWFzcS5jOjExMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZvcmsgaW50byBiYWNrZ3JvdW5kOiAlcyIKK21zZ3N0ciAiTmUgcGV1dCBzZSBsYW5jZXIgZW4gdOJjaGUgZGUgZm9uZCA6ICVzIgorCisjOiBkbnNtYXNxLmM6MTEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGhlbHBlcjogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgY3LpZXIgbGUgJ2hlbHBlcicgOiAlcyIKKworIzogZG5zbWFzcS5jOjExMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic2V0dGluZyBjYXBhYmlsaXRpZXMgZmFpbGVkOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjb25maWd1cmVyIGxhIGNhcGFjaXTpICVzIgorCisjOiBkbnNtYXNxLmM6MTExNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2hhbmdlIHVzZXItaWQgdG8gJXM6ICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGNoYW5nZXIgbCdpZGVudGlmaWFudCB1dGlsaXNhdGV1ciBwb3VyICVzIDogJXMiCisKKyM6IGRuc21hc3EuYzoxMTE4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjaGFuZ2UgZ3JvdXAtaWQgdG8gJXM6ICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGNoYW5nZXIgbCdpZGVudGlmaWFudCBkZSBncm91cGUgcG91ciAlcyA6ICVzIgorCisjOiBkbnNtYXNxLmM6MTEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBwaWRmaWxlICVzOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGxlIGZpY2hpZXIgZGUgUElEICVzIDogJXMiCisKKyM6IGRuc21hc3EuYzoxMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIGxvZyAlczogJXMiCittc2dzdHIgIk5lIHBldXQgb3V2cmlyIGxlIGZpY2hpZXIgZGUgbG9nICVzIDogJXMiCisKKyMKKyM6IGRuc21hc3EuYzoxMTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIEx1YSBzY3JpcHQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNoYXJnZXIgbGUgc2NyaXB0IEx1YSA6ICVzIgorCisjOiBkbnNtYXNxLmM6MTEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJURlRQIGRpcmVjdG9yeSAlcyBpbmFjY2Vzc2libGU6ICVzIgorbXNnc3RyICJy6XBlcnRvaXJlIFRGVFAgJXMgaW5hY2Nlc3NpYmxlIDogJXMiCisKKyM6IGRuc21hc3EuYzoxMTUxCittc2dpZCAibm93IGNoZWNraW5nIEROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTIxOAorIywgYy1mb3JtYXQKK21zZ2lkICJzY3JpcHQgcHJvY2VzcyBraWxsZWQgYnkgc2lnbmFsICVkIgorbXNnc3RyICJMZSBzY3JpcHQgYSDpdOkgdGVybWlu6SBwYXIgbGUgc2lnbmFsICVkIgorCisjOiBkbnNtYXNxLmM6MTIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJzY3JpcHQgcHJvY2VzcyBleGl0ZWQgd2l0aCBzdGF0dXMgJWQiCittc2dzdHIgIkxlIHNjcmlwdCBzJ2VzdCB0ZXJtaW7pIGF2ZWMgbGUgc3RhdHV0ICVkIgorCisjOiBkbnNtYXNxLmM6MTIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlY3V0ZSAlczogJXMiCittc2dzdHIgImltcG9zc2libGUgZCdleOljdXRlciDgICVzIDogJXMiCisKKyM6IGRuc21hc3EuYzoxMjgxCittc2dpZCAiZXhpdGluZyBvbiByZWNlaXB0IG9mIFNJR1RFUk0iCittc2dzdHIgInNvcnRpZSBzdXIgculjZXB0aW9uIGR1IHNpZ25hbCBTSUdURVJNIgorCisjOiBkbnNtYXNxLmM6MTMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWNjZXNzICVzOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FjY+lkZXIg4CAlcyA6ICVzIgorCisjOiBkbnNtYXNxLmM6MTMzOQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nICVzIgorbXNnc3RyICJMZWN0dXJlIGRlICVzIgorCisjOiBkbnNtYXNxLmM6MTM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzZXJ2ZXJzIGZvdW5kIGluICVzLCB3aWxsIHJldHJ5IgorbXNnc3RyICJhdWN1biBzZXJ2ZXVyIHRyb3V26SBkYW5zICVzLCB2YSBy6WVzc2F5ZXIiCisKKyM6IGRoY3AuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAibmUgcGV1dCBjcullciBsYSBzb2NrZXQgREhDUDogJXMiCisKKyM6IGRoY3AuYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IG9wdGlvbnMgb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYXBwbGlxdWVyIGxlcyBvcHRpb25zIHN1ciBsYSBzb2NrZXQgREhDUCA6ICVzIgorCisjOiBkaGNwLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBTT19SRVVTRXtBRERSfFBPUlR9IG9uIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBk6WNsYXJlciBTT19SRVVTRXtBRERSfFBPUlR9IHN1ciBsYSBzb2NrZXQgREhDUCA6ICVzIgorCisjOiBkaGNwLmM6MTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIERIQ1Agc2VydmVyIHNvY2tldDogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgbGllciBsYSBzb2NrZXQgc2VydmV1ciBESENQIDogJXMiCisKKyM6IGRoY3AuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBJQ01QIHJhdyBzb2NrZXQ6ICVzLiIKK21zZ3N0ciAibmUgcGV1dCBjcullciBkZSBzb2NrZXQgZW4gbW9kZSByYXcgcG91ciBJQ01QIDogJXMuIgorCisjOiBkaGNwLmM6MjM5CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW50ZXJmYWNlICVzIGluIGJyaWRnZS1pbnRlcmZhY2UiCittc2dzdHIgImludGVyZmFjZSAlcyBpbmNvbm51ZSBzcOljaWZp6WUgY29tbWUgaW50ZXJmYWNlIGRlIHBvbnQiCisKKyM6IGRoY3AuYzoyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCBwYWNrZXQgcmVjZWl2ZWQgb24gJXMgd2hpY2ggaGFzIG5vIGFkZHJlc3MiCittc2dzdHIgIlBhcXVldCBESENQIHJl53Ugc3VyICVzIHF1aSBuJ2EgcGFzIGQnYWRyZXNzZSIKKworIzogZGhjcC5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJBUlAtY2FjaGUgaW5qZWN0aW9uIGZhaWxlZDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjUwNgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJhbmdlICVzIC0tICVzIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggbmV0bWFzayAlcyIKK21zZ3N0ciAiTGEgcGxhZ2UgZCdhZHJlc3NlcyBESENQICVzIC0tICVzIG4nZXN0IHBhcyBjb2jpcmVudGUgYXZlYyBsZSBtYXNxdWUgZGUgculzZWF1ICVzIgorCisjOiBkaGNwLmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBsaW5lIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgIm1hdXZhaXNlIGxpZ25lIGRhbnMgJXMgbGlnbmUgJWQiCisKKyM6IGRoY3AuYzo4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJXMgbGluZSAlZCwgZHVwbGljYXRlIG5hbWUgb3IgSVAgYWRkcmVzcyIKK21zZ3N0ciAiaWdub3JlICVzIOAgbGEgbGlnbmUgJWQgOiBkdXBsaWNhdGlvbiBkZSBub20gb3UgZCdhZHJlc3NlIElQIgorCisjOiBkaGNwLmM6OTk0IHJmYzMzMTUuYzoyMDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVsYXkgJXMgLT4gJXMiCittc2dzdHIgIlJlbGFpcyBESENQICVzIC0+ICVzIgorCisjOiBsZWFzZS5jOjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIG9yIGNyZWF0ZSBsZWFzZSBmaWxlICVzOiAlcyIKK21zZ3N0ciAibmUgcGV1dCBvdXZyaXIgb3UgY3LpZXIgbGUgZmljaGllcnMgZGUgYmF1eCAlcyA6ICVzIgorCisjOiBsZWFzZS5jOjEzNAorbXNnaWQgInRvbyBtYW55IHN0b3JlZCBsZWFzZXMiCittc2dzdHIgImJlYXVjb3VwIHRyb3AgZGUgYmF1eCBlbnJlZ2lzdHLpcyIKKworIzogbGVhc2UuYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJ1biBsZWFzZS1pbml0IHNjcmlwdCAlczogJXMiCittc2dzdHIgIk5lIHBldXQgcGFzIGV46WN1dGVyIGxlIHNjcmlwdCBsZWFzZS1pbml0ICVzIDogJXMiCisKKyM6IGxlYXNlLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgImxlYXNlLWluaXQgc2NyaXB0IHJldHVybmVkIGV4aXQgY29kZSAlcyIKK21zZ3N0ciAibGUgc2NyaXB0IGxlYXNlLWluaXQgYSByZXRvdXJu6SBsZSBjb2RlICVzIgorCisjOiBsZWFzZS5jOjM0MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgJXM6ICVzIChyZXRyeSBpbiAldXMpIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgJXMgOiAlcyAocHJvY2hhaW4gZXNzYWkgZGFucyAldXMpIgorCisjOiBsZWFzZS5jOjkwNgorIywgYy1mb3JtYXQKK21zZ2lkICJJZ25vcmluZyBkb21haW4gJXMgZm9yIERIQ1AgaG9zdCBuYW1lICVzIgorbXNnc3RyICJMZSBkb21haW5lICVzIGVzdCBpZ25vcukgcG91ciBsJ2j0dGUgREhDUCAlcyIKKworIzogcmZjMjEzMS5jOjM0MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBhZGRyZXNzIHJhbmdlIGF2YWlsYWJsZSBmb3IgREhDUCByZXF1ZXN0ICVzICVzIgorbXNnc3RyICJwYXMgZGUgcGxhZ2UgZCdhZHJlc3NlIGRpc3BvbmlibGUgcG91ciBsYSByZXF16nRlIERIQ1AgJXMgJXMiCisKKyM6IHJmYzIxMzEuYzozNDMKK21zZ2lkICJ3aXRoIHN1Ym5ldCBzZWxlY3RvciIKK21zZ3N0ciAiYXZlYyBz6WxlY3RldXIgZGUgc291cy1yZXNlYXUiCisKKyM6IHJmYzIxMzEuYzozNDMKK21zZ2lkICJ2aWEiCittc2dzdHIgInBhciBsJ2ludGVybelkaWFpcmUgZGUiCisKKyM6IHJmYzIxMzEuYzozNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYXZhaWxhYmxlIERIQ1Agc3VibmV0OiAlcy8lcyIKK21zZ3N0ciAiJXUgc291cy1y6XNlYXV4IERIQ1AgZGlzcG9uaWJsZXMgOiAlcy8lcyIKKworIzogcmZjMjEzMS5jOjM1OCByZmMzMzE1LmM6MzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGF2YWlsYWJsZSBESENQIHJhbmdlOiAlcyAtLSAlcyIKK21zZ3N0ciAiJXUgbGEgZ2FtbWUgREhDUCBkaXNwb25pYmxlIGVzdCA6ICVzIC0tICVzIgorCisjOiByZmMyMTMxLmM6NDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHZlbmRvciBjbGFzczogJXMiCittc2dzdHIgIiV1IENsYXNzZSBkZSB2ZW5kZXVyICgnVmVuZG9yIENsYXNzJykgOiAlcyIKKworIzogcmZjMjEzMS5jOjQ3MQorIywgYy1mb3JtYXQKK21zZ2lkICIldSB1c2VyIGNsYXNzOiAlcyIKK21zZ3N0ciAiJXUgQ2xhc3NlIGQndXRpbGlzYXRldXIgOiAlcyIKKworIzogcmZjMjEzMS5jOjQ5OAorbXNnaWQgImRpc2FibGVkIgorbXNnc3RyICJk6XNhY3RpdukiCisKKyM6IHJmYzIxMzEuYzo1MzkgcmZjMjEzMS5jOjk2NyByZmMyMTMxLmM6MTM4NSByZmMzMzE1LmM6NjAyIHJmYzMzMTUuYzo4MjMKKyM6IHJmYzMzMTUuYzoxMDk1Cittc2dpZCAiaWdub3JlZCIKK21zZ3N0ciAiaWdub3LpIgorCisjOiByZmMyMTMxLmM6NTU0IHJmYzIxMzEuYzoxMjA1IHJmYzMzMTUuYzo4NzMKK21zZ2lkICJhZGRyZXNzIGluIHVzZSIKK21zZ3N0ciAiYWRyZXNzZSBk6WrgIHV0aWxpc+llIgorCisjOiByZmMyMTMxLmM6NTY4IHJmYzIxMzEuYzoxMDIxCittc2dpZCAibm8gYWRkcmVzcyBhdmFpbGFibGUiCittc2dzdHIgInBhcyBkJ2FkcmVzc2UgZGlzcG9uaWJsZSIKKworIzogcmZjMjEzMS5jOjU3NSByZmMyMTMxLmM6MTE2OAorbXNnaWQgIndyb25nIG5ldHdvcmsiCittc2dzdHIgIm1hdXZhaXMgculzZWF1IgorCisjOiByZmMyMTMxLmM6NTkwCittc2dpZCAibm8gYWRkcmVzcyBjb25maWd1cmVkIgorbXNnc3RyICJwYXMgZCdhZHJlc3NlIGNvbmZpZ3Vy6WUiCisKKyM6IHJmYzIxMzEuYzo1OTYgcmZjMjEzMS5jOjEyMTgKK21zZ2lkICJubyBsZWFzZXMgbGVmdCIKK21zZ3N0ciAicGx1cyBhdWN1biBiYWlsIGRpc3BvbmlibGUiCisKKyM6IHJmYzIxMzEuYzo2OTEgcmZjMzMxNS5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBjbGllbnQgcHJvdmlkZXMgbmFtZTogJXMiCittc2dzdHIgImxlIGNsaWVudCAldSBmb3VybmkgbGUgbm9tIDogJXMiCisKKyM6IHJmYzIxMzEuYzo3OTYKK21zZ2lkICJQWEUgQklTIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIlNlcnZpY2UgUFhFIEJJUyAoQm9vdCBJbnRlZ3JpdHkgU2VydmljZXMpIG5vbiBzdXBwb3J06SIKKworIzogcmZjMjEzMS5jOjkzNSByZmMzMzE1LmM6MTE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJkaXNhYmxpbmcgREhDUCBzdGF0aWMgYWRkcmVzcyAlcyBmb3IgJXMiCittc2dzdHIgImTpc2FjdGl2ZSBsJ2FkcmVzc2Ugc3RhdGlxdWUgREhDUCAlcyBwb3VyICVzIgorCisjOiByZmMyMTMxLmM6OTU2Cittc2dpZCAidW5rbm93biBsZWFzZSIKK21zZ3N0ciAiYmFpbCBpbmNvbm51IgorCisjOiByZmMyMTMxLmM6OTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCBpcyBsZWFzZWQgdG8gJXMiCittc2dzdHIgIkwnYWRyZXNzZSBzdGF0aXF1ZSAlcyBuZSBzZXJhIHBhcyB1dGlsaXPpZSBjYXIgdW4gYmFpbCBlc3QgZOlq4CBhdHRyaWJ16SDgICVzIgorCisjOiByZmMyMTMxLmM6MTAwMAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgaXMgaW4gdXNlIGJ5IHRoZSBzZXJ2ZXIgb3IgcmVsYXkiCittc2dzdHIgIkwnYWRyZXNzZSBzdGF0aXF1ZSAlcyBuZSBzZXJhIHBhcyB1dGlsaXPpZSBjYXIgZWxsZSBlc3QgdXRpbGlz6WUgcGFyIGxlIHNlcnZldXIgb3UgdW4gcmVsYWkiCisKKyM6IHJmYzIxMzEuYzoxMDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCB3YXMgcHJldmlvdXNseSBkZWNsaW5lZCIKK21zZ3N0ciAiTCdhZHJlc3NlIHN0YXRpcXVlICVzIG5lIHNlcmEgcGFzIHV0aWxpc+llIGNhciBlbGxlIGEgcHLpYWxhYmxlbWVudCDpdOkgcmVmdXPpZSIKKworIzogcmZjMjEzMS5jOjEwMTkgcmZjMjEzMS5jOjEyMTEKK21zZ2lkICJubyB1bmlxdWUtaWQiCittc2dzdHIgInBhcyBkJ2lkZW50aWZpYW50IHVuaXF1ZSIKKworIzogcmZjMjEzMS5jOjExMDYKK21zZ2lkICJ3cm9uZyBzZXJ2ZXItSUQiCittc2dzdHIgIm1hdXZhaXMgaWRlbnRpZmlhbnQgZGUgc2VydmV1ciIKKworIzogcmZjMjEzMS5jOjExMjUKK21zZ2lkICJ3cm9uZyBhZGRyZXNzIgorbXNnc3RyICJtYXV2YWlzZSBhZHJlc3NlIgorCisjOiByZmMyMTMxLmM6MTE0MyByZmMzMzE1LmM6OTY5Cittc2dpZCAibGVhc2Ugbm90IGZvdW5kIgorbXNnc3RyICJiYWlsIG5vbiB0cm91dukiCisKKyM6IHJmYzIxMzEuYzoxMTc2Cittc2dpZCAiYWRkcmVzcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICJhZHJlc3NlIG5vbiBkaXNwb25pYmxlIgorCisjOiByZmMyMTMxLmM6MTE4NworbXNnaWQgInN0YXRpYyBsZWFzZSBhdmFpbGFibGUiCittc2dzdHIgImJhaWwgc3RhdGlxdWUgZGlzcG9uaWJsZSIKKworIzogcmZjMjEzMS5jOjExOTEKK21zZ2lkICJhZGRyZXNzIHJlc2VydmVkIgorbXNnc3RyICJhZHJlc3NlIHJlc2VydullIgorCisjOiByZmMyMTMxLmM6MTE5OQorIywgYy1mb3JtYXQKK21zZ2lkICJhYmFuZG9uaW5nIGxlYXNlIHRvICVzIG9mICVzIgorbXNnc3RyICJhYmFuZG9uIGR1IGJhaWwgZGUgJXMgcG91ciAlcyIKKworIzogcmZjMjEzMS5jOjE3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYm9vdGZpbGUgbmFtZTogJXMiCittc2dzdHIgIiV1IG5vbSBkZSBmaWNoaWVyICdib290ZmlsZScgOiAlcyIKKworIzogcmZjMjEzMS5jOjE3MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgc2VydmVyIG5hbWU6ICVzIgorbXNnc3RyICIldSBub20gZHUgc2VydmV1ciA6ICVzIgorCisjOiByZmMyMTMxLmM6MTcyOQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBuZXh0IHNlcnZlcjogJXMiCittc2dzdHIgIiV1IHNlcnZldXIgc3VpdmFudCA6ICVzIgorCisjOiByZmMyMTMxLmM6MTczMgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBicm9hZGNhc3QgcmVzcG9uc2UiCittc2dzdHIgIiV1IHLpcG9uc2UgYnJvYWRjYXN0IgorCisjOiByZmMyMTMxLmM6MTc5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc2VuZCBESENQL0JPT1RQIG9wdGlvbiAlZDogbm8gc3BhY2UgbGVmdCBpbiBwYWNrZXQiCittc2dzdHIgIkltcG9zc2libGUgZCdlbnZveWVyIGwnb3B0aW9uIERIQ1AvQk9PVFAgJWQgOiBwYXMgYXNzZXogZCdlc3BhY2UgZGFucyBsZSBwYXF1ZXQiCisKKyM6IHJmYzIxMzEuYzoyMDM2Cittc2dpZCAiUFhFIG1lbnUgdG9vIGxhcmdlIgorbXNnc3RyICJtZW51IFBYRSB0cm9wIGdyYW5kIgorCisjOiByZmMyMTMxLmM6MjE3MyByZmMzMzE1LmM6MTQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICIldSByZXF1ZXN0ZWQgb3B0aW9uczogJXMiCittc2dzdHIgIiV1IG9wdGlvbnMgZGVtYW5k6WVzIDogJXMiCisKKyM6IHJmYzIxMzEuYzoyNDUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzZW5kIFJGQzM5MjUgb3B0aW9uOiB0b28gbWFueSBvcHRpb25zIGZvciBlbnRlcnByaXNlIG51bWJlciAlZCIKK21zZ3N0ciAibmUgcGV1eCBlbnZveWVyIGwnb3B0aW9uIFJGQzM5MjUgOiB0cm9wIGQnb3B0aW9ucyBwb3VyIGxlIG51belybyBkJ2VudHJlcHJpc2UgJWQiCisKKyM6IG5ldGxpbmsuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIG5ldGxpbmsgc29ja2V0OiAlcyIKK21zZ3N0ciAibmUgcGV1eCBsaWVyIHVuZSBzb2NrZXQgbmV0bGluayA6ICVzIgorCisjOiBuZXRsaW5rLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldGxpbmsgcmV0dXJucyBlcnJvcjogJXMiCittc2dzdHIgIkVycmV1ciBuZXRsaW5rIDogJXMiCisKKyM6IGRidXMuYzoxNzEKK21zZ2lkICJhdHRlbXB0IHRvIHNldCBhbiBJUHY2IHNlcnZlciBhZGRyZXNzIHZpYSBEQnVzIC0gbm8gSVB2NiBzdXBwb3J0IgorbXNnc3RyICJ0ZW50YXRpdmUgZGUgbGllciB1bmUgYWRyZXNzZSBzZXJ2ZXVyIElQVjYgdmlhIERCdXMgLSBwYXMgZGUgc3VwcG9ydCBJUFY2IgorCisjOiBkYnVzLmM6NTAwCittc2dpZCAic2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzIGZyb20gREJ1cyIKK21zZ3N0ciAiY29uZmlndXJhdGlvbiBkZXMgc2VydmV1cnMgYW1vbnRzIOAgcGFydGlyIGRlIERCdXMiCisKKyM6IGRidXMuYzo1NDcKK21zZ2lkICJjb3VsZCBub3QgcmVnaXN0ZXIgYSBEQnVzIG1lc3NhZ2UgaGFuZGxlciIKK21zZ3N0ciAibmUgcGV1dCBlbnJlZ2lzdHJlciB1bmUgcm91dGluZSBkZSB0cmFpdGVtZW50IGRlcyBtZXNzYWdlcyBEQnVzIgorCisjOiBicGYuYzoyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQIEJQRiBzb2NrZXQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNy6WVyIHVuZSBzb2NrZXQgQlBGIHBvdXIgREhDUCA6ICVzIgorCisjOiBicGYuYzoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByZXF1ZXN0IGZvciB1bnN1cHBvcnRlZCBoYXJkd2FyZSB0eXBlICglZCkgcmVjZWl2ZWQgb24gJXMiCittc2dzdHIgInJlcXXqdGUgREhDUCBwb3VyIHVuIHR5cGUgZGUgbWF06XJpZWwgbm9uIHN1cHBvcnTpICglZCkgcmXndWUgc3VyICVzIgorCisjOiBicGYuYzozNzYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgUEZfUk9VVEUgc29ja2V0OiAlcyIKK21zZ3N0ciAibmUgcGV1dCBjcullciBsYSBzb2NrZXQgREhDUDogJXMiCisKKyM6IGJwZi5jOjM5NworbXNnaWQgIlVua25vd24gcHJvdG9jb2wgdmVyc2lvbiBmcm9tIHJvdXRlIHNvY2tldCIKK21zZ3N0ciAiIgorCisjOiBoZWxwZXIuYzoxNTMKK21zZ2lkICJsZWFzZSgpIGZ1bmN0aW9uIG1pc3NpbmcgaW4gTHVhIHNjcmlwdCIKK21zZ3N0ciAibGEgZm9uY3Rpb24gbGVhc2UoKSBlc3QgYWJzZW50ZSBkdSBzY3JpcHQgTHVhIgorCisjOiB0ZnRwLmM6MzA5Cittc2dpZCAidW5hYmxlIHRvIGdldCBmcmVlIHBvcnQgZm9yIFRGVFAiCittc2dzdHIgImltcG9zc2libGUgZCdvYnRlbmlyIHVuIHBvcnQgbGlicmUgcG91ciBURlRQIgorCisjOiB0ZnRwLmM6MzI1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIHJlcXVlc3QgZnJvbSAlcyIKK21zZ3N0ciAicmVxdep0ZSBkZSAlcyBub24gc3VwcG9ydOllIgorCisjOiB0ZnRwLmM6NDM5CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgbm90IGZvdW5kIgorbXNnc3RyICJmaWNoaWVyICVzIG5vbiB0cm91dukiCisKKyM6IHRmdHAuYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgJWQgJXMgcmVjZWl2ZWQgZnJvbSAlcyIKK21zZ3N0ciAiZXJyZXVyICVkICVzIHJl53UgZGUgJXMiCisKKyM6IHRmdHAuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHNlbmRpbmcgJXMgdG8gJXMiCittc2dzdHIgImltcG9zc2libGUgZCdlbnZveWVyICVzIOAgJXMiCisKKyM6IHRmdHAuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VudCAlcyB0byAlcyIKK21zZ3N0ciAiZW52b3npICVzIOAgJXMiCisKKyM6IGxvZy5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyZmxvdzogJWQgbG9nIGVudHJpZXMgbG9zdCIKK21zZ3N0ciAiZOlib3JkZW1lbnQgOiAlZCB0cmFjZXMgcGVyZHVlcyIKKworIzogbG9nLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmYWlsZWQ6ICVzIgorbXNnc3RyICJ0cmFjZSBwZXJkdWUgOiAlcyIKKworIzogbG9nLmM6NDcyCittc2dpZCAiRkFJTEVEIHRvIHN0YXJ0IHVwIgorbXNnc3RyICJJTVBPU1NJQkxFIGRlIGTpbWFycmVyIgorCisjOiBjb25udHJhY2suYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb25udHJhY2sgY29ubmVjdGlvbiBtYXJrIHJldHJpZXZhbCBmYWlsZWQ6ICVzIgorbXNnc3RyICJMYSBy6WN1cOlyYXRpb24gZGUgbGEgbWFycXVlIGRlIHN1aXZpIGRlIGNvbm5leGlvbiBhIOljaG916SA6ICVzIgorCisjOiBkaGNwNi5jOjU5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUHY2IHNvY2tldDogJXMiCittc2dzdHIgIm5lIHBldXQgY3LpZXIgbGEgc29ja2V0IERIQ1B2NjogJXMiCisKKyM6IGRoY3A2LmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBTT19SRVVTRXtBRERSfFBPUlR9IG9uIERIQ1B2NiBzb2NrZXQ6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGTpY2xhcmVyIFNPX1JFVVNFe0FERFJ8UE9SVH0gc3VyIGxhIHNvY2tldCBESENQdjYgOiAlcyIKKworIzogZGhjcDYuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBESENQdjYgc2VydmVyIHNvY2tldDogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgbGllciBsYSBzb2NrZXQgc2VydmV1ciBESENQdjYgOiAlcyIKKworIzogcmZjMzMxNS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJubyBhZGRyZXNzIHJhbmdlIGF2YWlsYWJsZSBmb3IgREhDUHY2IHJlcXVlc3QgZnJvbSByZWxheSBhdCAlcyIKK21zZ3N0ciAicGFzIGRlIHBsYWdlIGQnYWRyZXNzZSBkaXNwb25pYmxlIHBvdXIgbGEgcmVxdep0ZSBESENQdjYgdHJhbnNtaXNlIHZpYSBsZSByZWxhaSAlcyIKKworIzogcmZjMzMxNS5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBhZGRyZXNzIHJhbmdlIGF2YWlsYWJsZSBmb3IgREhDUHY2IHJlcXVlc3QgdmlhICVzIgorbXNnc3RyICJwYXMgZGUgcGxhZ2UgZCdhZHJlc3NlIGRpc3BvbmlibGUgcG91ciBsYSByZXF16nRlIERIQ1B2NiB2aWEgJXMiCisKKyM6IHJmYzMzMTUuYzoyOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYXZhaWxhYmxlIERIQ1B2NiBzdWJuZXQ6ICVzLyVkIgorbXNnc3RyICIldSBzb3VzLXLpc2VhdXggREhDUHY2IGRpc3BvbmlibGVzIDogJXMvJWQiCisKKyM6IHJmYzMzMTUuYzozNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgdmVuZG9yIGNsYXNzOiAldSIKK21zZ3N0ciAiJXUgQ2xhc3NlIGRlIHZlbmRldXIgKCdWZW5kb3IgQ2xhc3MnKSA6ICV1IgorCisjOiByZmMzMzE1LmM6NDI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGNsaWVudCBNQUMgYWRkcmVzczogJXMiCittc2dzdHIgIiV1IE1BQyBhZHJlc3NlIGR1IGNsaWVudCA6ICVzIgorCisjOiByZmMzMzE1LmM6NjU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gcHJlZml4LWNsYXNzICVkIgorbXNnc3RyICJwculmaXhlIGRlIGNsYXNzZSBpbmNvbm51ICVkIgorCisjOiByZmMzMzE1LmM6NzkxIHJmYzMzMTUuYzo5MTMKK21zZ2lkICJzdWNjZXNzIgorbXNnc3RyICJy6XVzc2kiCisKKyM6IHJmYzMzMTUuYzo4MDYgcmZjMzMxNS5jOjgwOCByZmMzMzE1LmM6OTIxIHJmYzMzMTUuYzo5MjMKK21zZ2lkICJubyBhZGRyZXNzZXMgYXZhaWxhYmxlIgorbXNnc3RyICJwYXMgZCdhZHJlc3NlIGRpc3BvbmlibGUiCisKKyM6IHJmYzMzMTUuYzo4NjUKK21zZ2lkICJhZGRyZXNzIHVuYXZhaWxhYmxlIgorbXNnc3RyICJhZHJlc3NlIG5vbiBkaXNwb25pYmxlIgorCisjOiByZmMzMzE1LmM6OTAwCittc2dpZCAibm90IG9uIGxpbmsiCittc2dzdHIgInBhcyBzdXIgY2UgbGllbiIKKworIzogcmZjMzMxNS5jOjk3MyByZmMzMzE1LmM6MTE1MSByZmMzMzE1LmM6MTIyOAorbXNnaWQgIm5vIGJpbmRpbmcgZm91bmQiCittc2dzdHIgImF1Y3VuZSBsaWFpc29uIHRyb3V26WUiCisKKyM6IHJmYzMzMTUuYzoxMDExCittc2dpZCAiZGVwcmVjYXRlZCIKK21zZ3N0ciAib2Jzb2zodGUiCisKKyM6IHJmYzMzMTUuYzoxMDE2Cittc2dpZCAiYWRkcmVzcyBpbnZhbGlkIgorbXNnc3RyICJhZHJlc3NlIG5vbiB2YWxpZGUiCisKKyM6IHJmYzMzMTUuYzoxMDYxCittc2dpZCAiY29uZmlybSBmYWlsZWQiCittc2dzdHIgImNvbmZpcm1hdGlvbiBkJ+ljaGVjIgorCisjOiByZmMzMzE1LmM6MTA3MgorbXNnaWQgImFsbCBhZGRyZXNzZXMgc3RpbGwgb24gbGluayIKK21zZ3N0ciAidG91dGVzIGxlcyBhZHJlc3NlcyBzb250IHRvdWpvdXJzIHN1ciBsZSBsaWVuIgorCisjOiByZmMzMzE1LmM6MTE2MAorbXNnaWQgInJlbGVhc2UgcmVjZWl2ZWQiCittc2dzdHIgImxpYulyYXRpb24gcmXndWUiCisKKyM6IHJmYzMzMTUuYzoyMDgwCittc2dpZCAiQ2Fubm90IG11bHRpY2FzdCB0byBESENQdjYgc2VydmVyIHdpdGhvdXQgY29ycmVjdCBpbnRlcmZhY2UiCittc2dzdHIgIkltcG9zc2libGUgZGUgZmFpcmUgZHUgbXVsdGljYXN0IGF1IHNlcnZlciBESENQdjYgc2FucyBpbnRlcmZhY2UgdmFsaWRlIgorCisjOiBkaGNwLWNvbW1vbi5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJJZ25vcmluZyBkdXBsaWNhdGUgZGhjcC1vcHRpb24gJWQiCittc2dzdHIgIkwnb3B0aW9uIGRoY3Atb3B0aW9uIHJlZG9uZGFudGUgJWQgc2VyYSBpZ25vcullIgorCisjOiBkaGNwLWNvbW1vbi5jOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICIldSB0YWdzOiAlcyIKK21zZ3N0ciAiJXUgb3B0aW9uczogJXMiCisKKyM6IGRoY3AtY29tbW9uLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBtb3JlIHRoYW4gb25lIGFkZHJlc3MgaW4gaG9zdHNmaWxlLCB1c2luZyAlcyBmb3IgREhDUCIKK21zZ3N0ciAiJXMgYSBwbHVzIGQndW5lIGFkcmVzc2UgZGFucyBsZSBmaWNoaWVyIGQnaPR0ZSwgdXRpbGlzYXRpb24gZGUgJXMgcG91ciBsZSBESENQLiIKKworIzogZGhjcC1jb21tb24uYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgKCVzKSBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUiCittc2dzdHIgImFkcmVzc2UgSVAgJXMgKCVzKSBkdXBsaXF16WUgZGFucyBsYSBkaXJlY3RpdmUgZGhjcC1jb25maWcuIgorCisjOiBkaGNwLWNvbW1vbi5jOjQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX0JJTkRUT0RFVklDRSBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgZOljbGFyZXIgU09fQklORFRPREVWSUNFIHN1ciBsYSBzb2NrZXQgREhDUCA6ICVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJLbm93biBESENQIG9wdGlvbnM6XG4iCittc2dzdHIgIk9wdGlvbnMgREhDUCBjb25udWVzIDpcbiIKKworIzogZGhjcC1jb21tb24uYzo2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiS25vd24gREhDUHY2IG9wdGlvbnM6XG4iCittc2dzdHIgIk9wdGlvbnMgREhDUHY2IGNvbm51ZXMgOlxuIgorCisjOiBkaGNwLWNvbW1vbi5jOjgyMworbXNnaWQgIiwgcHJlZml4IGRlcHJlY2F0ZWQiCittc2dzdHIgIiwgcHLpZml4ZSBvYnNvbOh0ZSIKKworIzogZGhjcC1jb21tb24uYzo4MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBsZWFzZSB0aW1lICIKK21zZ3N0ciAiLCBkdXLpZSBkZSBiYWlsICIKKworIzogZGhjcC1jb21tb24uYzo4NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3RhdGVsZXNzIG9uICVzJS4wcyUuMHMlcyIKK21zZ3N0ciAiJXMgc2FucyDpdGF0IChzdGF0ZWxlc3MpIHN1ciAlcyUuMHMlLjBzJXMiCisKKyM6IGRoY3AtY29tbW9uLmM6ODcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBzdGF0aWMgbGVhc2VzIG9ubHkgb24gJS4wcyVzJXMlLjBzIgorbXNnc3RyICIlcywgYmF1eCBzdGF0aXF1ZXMgc2V1bGVtZW50IHN1ciAlLjBzJXMlcyUuMHMiCisKKyM6IGRoY3AtY29tbW9uLmM6ODcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBwcm94eSBvbiBzdWJuZXQgJS4wcyVzJS4wcyUuMHMiCittc2dzdHIgIiVzLCBwcm94eSBzdXIgbGUgc291cy1y6XNlYXUgJS4wcyVzJS4wcyIKKworIzogZGhjcC1jb21tb24uYzo4NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIElQIHJhbmdlICVzIC0tICVzJXMlLjBzIgorbXNnc3RyICIlcywgcGxhZ2UgZCdhZHJlc3NlcyBJUCAlcyAtLSAlcyVzJS4wcyIKKworIzogZGhjcC1jb21tb24uYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUHY0LWRlcml2ZWQgSVB2NiBuYW1lcyBvbiAlcyVzIgorbXNnc3RyICJub21zIElQdjYgZOlyaXbpcyBkZSBESENQdjQgc3VyICVzJXMiCisKKyM6IGRoY3AtY29tbW9uLmM6ODg5CisjLCBjLWZvcm1hdAorbXNnaWQgInJvdXRlciBhZHZlcnRpc2VtZW50IG9uICVzJXMiCittc2dzdHIgImFubm9uY2VzIGRlIHJvdXRldXJzIHN1ciAlcyVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlbGF5IGZyb20gJXMgdG8gJXMgdmlhICVzIgorbXNnc3RyICJSZWxhaXMgREhDUCBkZSAlcyDgICVzIHZpYSAlcyIKKworIzogZGhjcC1jb21tb24uYzo5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByZWxheSBmcm9tICVzIHRvICVzIgorbXNnc3RyICJSZWxhaXMgREhDUCBkZSAlcyDgICVzIgorCisjOiByYWR2LmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBJQ01QdjYgc29ja2V0OiAlcyIKK21zZ3N0ciAibmUgcGV1dCBjcullciBsYSBzb2NrZXQgSUNNUHY2OiAlcyIKKworIzogYXV0aC5jOjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB6b25lIHRyYW5zZmVyIHJlcXVlc3QgZnJvbSAlcyIKK21zZ3N0ciAibGEgcmVxdep0ZSBkZSB0cmFuc2ZlcnQgZGUgem9uZSBlbiBwcm92ZW5hbmNlIGRlICVzIGVzdCBpZ25vcullIgorCisjOiBpcHNldC5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIGtlcm5lbCB2ZXJzaW9uOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSB0cm91dmVyIGxhIHZlcnNpb24gZGUgbm95YXUgOiAlcyIKKworIzogaXBzZXQuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBJUHNldCBjb250cm9sIHNvY2tldDogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgY3LpZXIgdW5lIHNvY2tldCBkZSBjb250cvRsZSBJUHNldCA6ICVzIgorCisjOiBibG9ja2RhdGEuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJETlNTRUMgbWVtb3J5IGluIHVzZSAldSwgbWF4ICV1LCBhbGxvY2F0ZWQgJXUiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6NzYKK21zZ2lkICJlcnJvcjogZmlsbF9hZGRyIG1pc3N1c2VkIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjEwNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFjY2VzcyBwZiBkZXZpY2VzOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FjY+lkZXIg4CAlcyA6ICVzIgorCisjOiB0YWJsZXMuYzoxMTkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IG5vIG9wZW5lZCBwZiBkZXZpY2VzICVzIgorbXNnc3RyICJ1dGlsaXNlIGxlcyBhZHJlc3NlcyBsb2NhbGVzIHNldWxlbWVudCBwb3VyICVzICVzIgorCisjOiB0YWJsZXMuYzoxMjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImVycm9yOiBjYW5ub3QgdXNlIHRhYmxlIG5hbWUgJXMiCittc2dzdHIgIm5lIHBldXQgcGFzIG9idGVuaXIgbGUgbm9tIGRlIGxhIG1hY2hpbmUgOiAlcyIKKworIzogdGFibGVzLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yOiBjYW5ub3Qgc3RybGNweSB0YWJsZSBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBwZnJfYWRkX3RhYmxlczogJXMoJWQpIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjE0NworbXNnaWQgImluZm86IHRhYmxlIGNyZWF0ZWQiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IERJT0NSJXNBRERSUzogJXMiCittc2dzdHIgIiIKKworIworIzogdGFibGVzLmM6MTYyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlZCBhZGRyZXNzZXMgJXMiCittc2dzdHIgIm1hdXZhaXNlIGFkcmVzc2UiCisKKyN+IG1zZ2lkICJBbHdheXMgc2VuZCBmcmVxdWVudCByb3V0ZXItYWR2ZXJ0aXNlbWVudHMiCisjfiBtc2dzdHIgIkVudm95ZXIgZGVzIGFubm9uY2VzIGRlIHJvdXRldXJzIGZy6XF1ZW50ZXMiCisKKyN+IG1zZ2lkICJubyBpbnRlcmZhY2Ugd2l0aCBhZGRyZXNzICVzIgorI34gbXNnc3RyICJwYXMgZCdpbnRlcmZhY2UgYXZlYyBsJ2FkcmVzc2UgJXMiCisKKyN+IG1zZ2lkICJkdXBsaWNhdGUgSVAgYWRkcmVzcyAlcyBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUuIgorI34gbXNnc3RyICJhZHJlc3NlIElQICVzIGR1cGxpcXXpZSBkYW5zIGxhIGRpcmVjdGl2ZSBkaGNwLWNvbmZpZy4iCisKKyN+IG1zZ2lkICJTcGVjaWZ5IHBhdGggdG8gTHVhIHNjcmlwdCAobm8gZGVmYXVsdCkuIgorI34gbXNnc3RyICJTcOljaWZpZSB1biBjaGVtaW4gcG91ciBsZSBmaWNoaWVyIFBJRCAocGFyIGTpZmF1dCA6ICVzKS4iCisKKyMKKyN+IG1zZ2lkICJvbmx5IG9uZSBkaGNwLWhvc3RzZmlsZSBhbGxvd2VkIgorI34gbXNnc3RyICJ1bmUgc2V1bGUgdmFsZXVyIGVzdCBhdXRvcmlz6WUgcG91ciAnZGhjcC1ob3N0c2ZpbGUnIgorCisjCisjfiBtc2dpZCAib25seSBvbmUgZGhjcC1vcHRzZmlsZSBhbGxvd2VkIgorI34gbXNnc3RyICJ1bmUgc2V1bGUgdmFsZXVyIGVzdCBhdXRvcmlz6WUgcG91ciAnZGhjcC1vcHRzZmlsZSciCisKKyN+IG1zZ2lkICJmaWxlcyBuZXN0ZWQgdG9vIGRlZXAgaW4gJXMiCisjfiBtc2dzdHIgInRyb3AgZGUgbml2ZWF1eCBkZSBy6WN1cnNpb24gcG91ciBsZXMgZmljaGllcnMgZGFucyAlcyIKKworI34gbXNnaWQgIlRYVCByZWNvcmQgc3RyaW5nIHRvbyBsb25nIgorI34gbXNnc3RyICJjaGHubmUgZHUgY2hhbXAgVFhUIHRyb3AgbG9uZ3VlIgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIHNldCBJUFY2IG9wdGlvbnMgb24gbGlzdGVuaW5nIHNvY2tldDogJXMiCisjfiBtc2dzdHIgImltcG9zc2libGUgZCdhY3RpdmVyIGxlcyBvcHRpb25zIElQVjYgc3VyIGxhIHNvY2tldCBkZSBsZWN0dXJlIDogJXMiCisKKyN+IG1zZ2lkICJmYWlsZWQgdG8gYmluZCBsaXN0ZW5pbmcgc29ja2V0IGZvciAlczogJXMiCisjfiBtc2dzdHIgImltcG9zc2libGUgZGUgbGllciBsYSBzb2NrZXQgZGUgbGVjdHVyZSBwb3VyICVzIDogJXMiCisKKyN+IG1zZ2lkICJESENQIHBhY2tldDogdHJhbnNhY3Rpb24taWQgaXMgJXUiCisjfiBtc2dzdHIgInBhcXVldCBESENQIDogbCdpZGVudGlmaWFudCBkZSB0cmFuc2FjdGlvbiAoJ3RyYW5zYWN0aW9uLWlkJykgZXN0ICV1IgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXM6JXMiCisjfiBtc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSAlcyA6ICVzIgorCisjfiBtc2dpZCAibXVzdCBzZXQgZXhhY3RseSBvbmUgaW50ZXJmYWNlIG9uIGJyb2tlbiBzeXN0ZW1zIHdpdGhvdXQgSVBfUkVDVklGIgorI34gbXNnc3RyICJVbmUgaW50ZXJmYWNlIGV0IHVuZSBzZXVsZSBkb2l0IOp0cmUgZOljbGFy6WUgc3VyIGxlcyBzeXN06G1lcyBzYW5zIElQX1JFQ1ZJRiIKKworI34gbXNnaWQgIklnbm9yaW5nIERIQ1AgbGVhc2UgZm9yICVzIGJlY2F1c2UgaXQgaGFzIGFuIGlsbGVnYWwgZG9tYWluIHBhcnQiCisjfiBtc2dzdHIgIk9uIGlnbm9yZSBsZSBiYWlsIERIQ1AgcG91ciAlcyBjYXIgaWwgcG9zc+hkZSB1biBub20gZGUgZG9tYWluZSBpbGzpZ2FsIgorCisjfiBtc2dpZCAiSVNDIGRoY3BkIGludGVncmF0aW9uIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0lTQ19SRUFERVIgaW4gc3JjL2NvbmZpZy5oIgorI34gbXNnc3RyICJMJ2ludOlncmF0aW9uIERIQ1AgSVNDIG4nZXN0IHBhcyBkaXNwb25pYmxlIDogYWN0aXZleiBIQVZFX0lTQ19SRUFERVIgZGFucyBzcmMvY29uZmlnLmgiCisKKyMKKyN+IG1zZ2lkICJpbGxlZ2FsIGRvbWFpbiAlcyBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUuIgorI34gbXNnc3RyICJkb21haW5lICVzIGR1cGxpcXXpIGRhbnMgbGEgZGlyZWN0aXZlIGRoY3AtY29uZmlnLiIKKworI34gbXNnaWQgImlsbGVnYWwgZG9tYWluICVzIGluICVzLiIKKyN+IG1zZ3N0ciAiZG9tYWluZSAlcyBpbGzpZ2FsIGRhbnMgJXMuIgorCisjfiBtc2dpZCAicnVubmluZyBhcyByb290IgorI34gbXNnc3RyICJleGVjdXTpIGVuIHRlbXBzIHF1ZSByb290IgorCisjfiBtc2dpZCAiUmVhZCBsZWFzZXMgYXQgc3RhcnR1cCwgYnV0IG5ldmVyIHdyaXRlIHRoZSBsZWFzZSBmaWxlLiIKKyN+IG1zZ3N0ciAiTGVjdHVyZSBkZXMgYmF1eCBhdSBk6W1hcnJhZ2UsIG1haXMgYXVjdW5lIOljcml0dXJlIGRlIGZpY2hpZXIgZGUgYmF1eCIKKworIworI34gbXNnaWQgInJlYWQgJXMgLSAlZCBob3N0cyIKKyN+IG1zZ3N0ciAibGVjdHVyZSAlcyAtICVkIGj0dGVzIgorCisjfiBtc2dpZCAiZG9tYWlucyIKKyN+IG1zZ3N0ciAiZG9tYWluZXMiCisKKyN+IG1zZ2lkICJJZ25vcmluZyBESENQIGhvc3QgbmFtZSAlcyBiZWNhdXNlIGl0IGhhcyBhbiBpbGxlZ2FsIGRvbWFpbiBwYXJ0IgorI34gbXNnc3RyICJMZSBub20gZGUgbWFjaGluZSBESENQICVzIHNlcmEgaWdub3LpIHBhcmNlIHF1J2lsIHBvc3PoZGUgdW4gbm9tIGRlIGRvbWFpbmUgaWxs6WdhbCIKKworI34gbXNnaWQgIkRpc3BsYXkgdGhpcyBtZXNzYWdlLiIKKyN+IG1zZ3N0ciAiQWZmaWNoZSBjZSBtZXNzYWdlLiIKKworI34gbXNnaWQgImZhaWxlZCB0byByZWFkICVzOiAlbSIKKyN+IG1zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlICVzIDogJW0iCisKKyN+IG1zZ2lkICJmYWlsZWQgdG8gcmVhZCAlczolbSIKKyN+IG1zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlICVzIDogJW0iCisKKyMKKyN+IG1zZ2lkICJjYW5ub3Qgc2VuZCBlbmNhcHN1bGF0ZWQgb3B0aW9uICVkOiBubyBzcGFjZSBsZWZ0IGluIHdyYXBwZXIiCisjfiBtc2dzdHIgIkltcG9zc2libGUgZCdlbnZveWVyIGwnb3B0aW9uIERIQ1AgJWQgOiBwYXMgYXNzZXogZCdlc3BhY2UgZGFucyBsZSBwYXF1ZXQiCisKKyN+IG1zZ2lkICJNb3JlIHRoYW4gb25lIHZlbmRvciBjbGFzcyBtYXRjaGVzLCB1c2luZyAlcyIKKyN+IG1zZ3N0ciAiUGx1c2lldXJzIGNsYXNzZXMgZGUgZm91cm5pc3NldXJzIGNvcnJlc3BvbmRlbnQsICVzIHNlcmEgdXRpbGlz6SIKZGlmZiAtLWdpdCBhL3BvL2lkLnBvIGIvcG8vaWQucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE4MDliNgotLS0gL2Rldi9udWxsCisrKyBiL3BvL2lkLnBvCkBAIC0wLDAgKzEsMjQzNiBAQAorIyBJbmRvbmVzaWFuIHRyYW5zbGF0aW9ucyBmb3IgZG5zbWFzcSBwYWNrYWdlLgorIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgorIyBTYWxtYW4gQVMgPHNhc0BzYWxtYW4ub3IuaWQ+LCAyMDA1LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZG5zbWFzcSAyLjI0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA5LTA2LTE4IDEyOjI0KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA1LTEwLTA3IDExOjQ1KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFNhbG1hbiBBUyA8c2FzQHNhbG1hbi5vci5pZD5cbiIKKyJMYW5ndWFnZS1UZWFtOiBJbmRvbmVzaWFuIDx0cmFuc2xhdGlvbi10ZWFtLWlkQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogaWRcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1BU0NJSVxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogY2FjaGUuYzo1MDUKK21zZ2lkICJJbnRlcm5hbCBlcnJvciBpbiBjYWNoZS4iCittc2dzdHIgIiIKKworIyBPSworIzogY2FjaGUuYzo5MDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIG5hbWVzIGZyb20gJXM6ICVzIgorbXNnc3RyICJnYWdhbCBtZW11YXQgbmFtYS1uYW1hIGRhcmkgJXM6ICVzIgorCisjIE9LCisjOiBjYWNoZS5jOjkzNCBkaGNwLmM6ODIwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJiYWQgYWRkcmVzcyBhdCAlcyBsaW5lICVkIgorbXNnc3RyICJrZXNhbGFoYW4gbmFtYSBwYWRhICVzIGJhcmlzICVkIgorCisjIE9LCisjOiBjYWNoZS5jOjk4NSBkaGNwLmM6ODM2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBuYW1lIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgImtlc2FsYWhhbiBuYW1hIHBhZGEgJXMgYmFyaXMgJWQiCisKKyMgT0sKKyM6IGNhY2hlLmM6OTkyIGRoY3AuYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCAlcyAtICVkIGFkZHJlc3NlcyIKK21zZ3N0ciAibWVtYmFjYSAlcyAtICVkIGFsYW1hdCIKKworIyBPSworIzogY2FjaGUuYzoxMTAwCittc2dpZCAiY2xlYXJlZCBjYWNoZSIKK21zZ3N0ciAiY2FjaGUgdGVsYWggZGloYXB1cyIKKworIzogY2FjaGUuYzoxMTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIElQdjQgYWRkcmVzcyBmb3VuZCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGEgQ05BTUUsIG5vdCBnaXZpbmcgaXQgdG8gdGhlIERIQ1AgbGVhc2Ugb2YgJXMiCittc2dzdHIgIiIKKworIyBPSworIzogY2FjaGUuYzoxMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBnaXZpbmcgbmFtZSAlcyB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyBiZWNhdXNlIHRoZSBuYW1lIGV4aXN0cyBpbiAlcyB3aXRoIGFkZHJlc3MgJXMiCittc2dzdHIgInRpZGFrIG1lbWJlcmlrYW4gbmFtYSAlcyBrZXBhZGEgbGVhc2UgREhDUCAlcyBrYXJlbmEgbmFtYSB0ZWxhaCBhZGEgZGFsYW0gJXNkZW5nYW4gYWxhbWF0ICVzIgorCisjOiBjYWNoZS5jOjEzNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZSAlbHUiCittc2dzdHIgIiIKKworIyBPSworIzogY2FjaGUuYzoxMzY3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYWNoZSBzaXplICVkLCAlZC8lZCBjYWNoZSBpbnNlcnRpb25zIHJlLXVzZWQgdW5leHBpcmVkIGNhY2hlIGVudHJpZXMuIgorbXNnc3RyICJ1a3VyYW4gY2FjaGUgJWQsICVkLyVkIHBlbnlpc2lwYW4gY2FjaGUgbWVuaW1wYSBjYWNoZSB5YW5nIGJlbHVtIGthZGFsdXdhcnNhIgorCisjOiBjYWNoZS5jOjEzNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicXVlcmllcyBmb3J3YXJkZWQgJXUsIHF1ZXJpZXMgYW5zd2VyZWQgbG9jYWxseSAldSIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjEzNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicXVlcmllcyBmb3IgYXV0aG9yaXRhdGl2ZSB6b25lcyAldSIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjEzOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VydmVyICVzIyVkOiBxdWVyaWVzIHNlbnQgJXUsIHJldHJpZWQgb3IgZmFpbGVkICV1IgorbXNnc3RyICIiCisKKyMgT0sKKyM6IHV0aWwuYzo0NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNlZWQgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yOiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVuZGVuZ2Fya2FuIGRpIHNvY2tldDogJXMiCisKKyMgT0sKKyM6IHV0aWwuYzoyMDUKKyMsIGZ1enp5Cittc2dpZCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSIKK21zZ3N0ciAiZ2FnYWwgbWVtdWF0ICVTOiAlbSIKKworIyBPSworIzogdXRpbC5jOjI0MyBvcHRpb24uYzo1NzkKK21zZ2lkICJjb3VsZCBub3QgZ2V0IG1lbW9yeSIKK21zZ3N0ciAidGlkYWsgYmlzYSBtZW5kYXBhdGthbiBtZW1vcnkiCisKKyMgT0sKKyM6IHV0aWwuYzoyNTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZTogJXMiCittc2dzdHIgInRpZGFrIGJpc2EgbWVtYmFjYSAlczogJXMiCisKKyMgT0sKKyM6IHV0aWwuYzoyNjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhbGxvY2F0ZSAlZCBieXRlcyIKK21zZ3N0ciAiZ2FnYWwgbWVtdWF0ICVTOiAlbSIKKworIyBPSworIzogdXRpbC5jOjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZpbml0ZSIKK21zZ3N0ciAidGFrIHRlcmJhdGFzIgorCisjIE9LCisjOiBvcHRpb24uYzozMTgKK21zZ2lkICJTcGVjaWZ5IGxvY2FsIGFkZHJlc3MoZXMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIlRlbnR1a2FuIGFsYW1hdCBsb2thbCB1bnR1ayBtZW5kZW5nYXJrYW4uIgorCisjIE9LCisjOiBvcHRpb24uYzozMTkKK21zZ2lkICJSZXR1cm4gaXBhZGRyIGZvciBhbGwgaG9zdHMgaW4gc3BlY2lmaWVkIGRvbWFpbnMuIgorbXNnc3RyICJNZW5naGFzaWxrYW4gaXBhZGRyIHVudHVrIHNlbXVhIGhvc3QgZGFsYW0gZG9tYWluIHlhbmcgZGlwaWxpaC4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjMyMAorbXNnaWQgIkZha2UgcmV2ZXJzZSBsb29rdXBzIGZvciBSRkMxOTE4IHByaXZhdGUgYWRkcmVzcyByYW5nZXMuIgorbXNnc3RyICJGYWtlIHBlbmNhcmlhbiBiYWxpayB1bnR1ayBhbGFtYXQgcHJpdmF0ZSBzZXN1YWkgZGVuZ2FuIFJGQzE5MTguIgorCisjIE9LCisjOiBvcHRpb24uYzozMjEKK21zZ2lkICJUcmVhdCBpcGFkZHIgYXMgTlhET01BSU4gKGRlZmVhdHMgVmVyaXNpZ24gd2lsZGNhcmQpLiIKK21zZ3N0ciAiUGVybGFrdWthbiBpcGFkZHIgc2ViYWdhaSBOWERPTUFJTiAobWVuZ2FsYWhrYW4gd2lsZGNhcmQgVmVyaXNpZ24pLiIKKworIyBPSworIzogb3B0aW9uLmM6MzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIGNhY2hlIGluIGVudHJpZXMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlRlbnR1a2FuIHVrdXJhbiBjYWNoZSwgZGFsYW0ganVtbGFoIGlzaWFuIChkZWZhdWx0ICVzKS4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjMyMworIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGNvbmZpZ3VyYXRpb24gZmlsZSAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiVGVudHVrYW4gZmlsZSBrb25maWd1cmFzaSAoZGVmYXVsdCAlcykuIgorCisjIE9LCisjOiBvcHRpb24uYzozMjQKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kOiBydW4gaW4gZGVidWcgbW9kZS4iCittc2dzdHIgIkpBTkdBTiBiZXJqYWxhbiBkaSBiYWNrZ3JvdW5kOiBiZXJqYWxhbiBkYWxhbSBtb2R1cyBkZWJ1Zy4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjMyNQorbXNnaWQgIkRvIE5PVCBmb3J3YXJkIHF1ZXJpZXMgd2l0aCBubyBkb21haW4gcGFydC4iCittc2dzdHIgIkpBTkdBTiB0ZXJ1c2thbiBwZXJtaW50YWFuIHRhbnBhIGJhZ2lhbiBkb21haW4uIgorCisjIE9LCisjOiBvcHRpb24uYzozMjYKK21zZ2lkICJSZXR1cm4gc2VsZi1wb2ludGluZyBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIk1lbmdlbWJhbGlrYW4gcmVjb3JkIE1YIHVudHVrIGRpcmkgc2VuZGlyaSBob3N0LWhvc3QgbG9rYWwuIgorCisjIE9LCisjOiBvcHRpb24uYzozMjcKK21zZ2lkICJFeHBhbmQgc2ltcGxlIG5hbWVzIGluIC9ldGMvaG9zdHMgd2l0aCBkb21haW4tc3VmZml4LiIKK21zZ3N0ciAiTWVsZW5na2FwaSBuYW1hLW5hbWEgZGkgL2V0Yy9ob3N0cyBkZW5nYW4gYWtoaXJhbiBkb21haW4uIgorCisjIE9LCisjOiBvcHRpb24uYzozMjgKK21zZ2lkICJEb24ndCBmb3J3YXJkIHNwdXJpb3VzIEROUyByZXF1ZXN0cyBmcm9tIFdpbmRvd3MgaG9zdHMuIgorbXNnc3RyICJKYW5nYW4gbWVuZXJ1c2thbiBwZXJtaW50YWFuIEROUyBzcHVyaW91cyBkYXJpIGhvc3QtaG9zdCBXaW5kb3dzLiIKKworIyBPSworIzogb3B0aW9uLmM6MzI5Cittc2dpZCAiRW5hYmxlIERIQ1AgaW4gdGhlIHJhbmdlIGdpdmVuIHdpdGggbGVhc2UgZHVyYXRpb24uIgorbXNnc3RyICJCb2xlaGthbiBESENQIGRhbGFtIGphbmdrYXVhbiB5YW5nIGRpYmVyaWthbiBkZW5nYW4gZHVyYXNpIGxlYXNlLiIKKworIyBPSworIzogb3B0aW9uLmM6MzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZSB0byB0aGlzIGdyb3VwIGFmdGVyIHN0YXJ0dXAgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlViYWgga2UgZ3JvdXAgaW5pIHNldGVsYWggbXVsYWkgKGRlZmF1bHQgJXMpLiIKKworIyBPSworIzogb3B0aW9uLmM6MzMxCittc2dpZCAiU2V0IGFkZHJlc3Mgb3IgaG9zdG5hbWUgZm9yIGEgc3BlY2lmaWVkIG1hY2hpbmUuIgorbXNnc3RyICJTZXRlbCBhbGFtYXQgYXRhdSBuYW1hIGhvc3QgdW50dWsgbWVzaW4geWFuZyBkaXNlYnV0a2FuLiIKKworIyBPSworIzogb3B0aW9uLmM6MzMyCisjLCBmdXp6eQorbXNnaWQgIlJlYWQgREhDUCBob3N0IHNwZWNzIGZyb20gZmlsZS4iCittc2dzdHIgIm5hbWEgTVggc2FsYWgiCisKKyM6IG9wdGlvbi5jOjMzMworbXNnaWQgIlJlYWQgREhDUCBvcHRpb24gc3BlY3MgZnJvbSBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMzQKK21zZ2lkICJFdmFsdWF0ZSBjb25kaXRpb25hbCB0YWcgZXhwcmVzc2lvbi4iCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6MzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRvIE5PVCBsb2FkICVzIGZpbGUuIgorbXNnc3RyICJKQU5HQU4gbXVhdCBmaWxlICVzLiIKKworIyBPSworIzogb3B0aW9uLmM6MzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgYSBob3N0cyBmaWxlIHRvIGJlIHJlYWQgaW4gYWRkaXRpb24gdG8gJXMuIgorbXNnc3RyICJTZWJ1dGthbiBzZWJ1YWggZmlsZSBob3N0cyB5YW5nIGhhcnVzIGRpYmFjYSBzZWJhZ2FpIHRhbWJhaGFuIHVudHVrICVzLiIKKworIyBPSworIzogb3B0aW9uLmM6MzM3Cittc2dpZCAiU3BlY2lmeSBpbnRlcmZhY2UocykgdG8gbGlzdGVuIG9uLiIKK21zZ3N0ciAiU2VidXRrYW4gYW50YXJtdWthIHVudHVrIG1lbmRlbmdhcmthbi4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjMzOAorbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIE5PVCB0byBsaXN0ZW4gb24uIgorbXNnc3RyICJTZWJ1dGthbiBhbnRhcm11a2EgdW50dWsgVElEQUsgbWVuZGVuZ2Fya2FuLiIKKworIyBPSworIzogb3B0aW9uLmM6MzM5CisjLCBmdXp6eQorbXNnaWQgIk1hcCBESENQIHVzZXIgY2xhc3MgdG8gdGFnLiIKK21zZ3N0ciAiUGV0YWthbiBrZWxhcyB1c2VyIERIQ1Aga2Ugc2V0ZWxhbiB5YW5nIGRpcGlsaWguIgorCisjOiBvcHRpb24uYzozNDAKK21zZ2lkICJNYXAgUkZDMzA0NiBjaXJjdWl0LWlkIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzQxCittc2dpZCAiTWFwIFJGQzMwNDYgcmVtb3RlLWlkIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzQyCittc2dpZCAiTWFwIFJGQzM5OTMgc3Vic2NyaWJlci1pZCB0byB0YWcuIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM0MworIywgZnV6enkKK21zZ2lkICJEb24ndCBkbyBESENQIGZvciBob3N0cyB3aXRoIHRhZyBzZXQuIgorbXNnc3RyICJKYW5nYW4gbWVuZ2d1bmFrYW4gREhDUCB1bnR1ayBob3N0LWhvc3QgeWFuZyBkaXBpbGloLiIKKworIyBPSworIzogb3B0aW9uLmM6MzQ0CisjLCBmdXp6eQorbXNnaWQgIkZvcmNlIGJyb2FkY2FzdCByZXBsaWVzIGZvciBob3N0cyB3aXRoIHRhZyBzZXQuIgorbXNnc3RyICJKYW5nYW4gbWVuZ2d1bmFrYW4gREhDUCB1bnR1ayBob3N0LWhvc3QgeWFuZyBkaXBpbGloLiIKKworIyBPSworIzogb3B0aW9uLmM6MzQ1Cittc2dpZCAiRG8gTk9UIGZvcmsgaW50byB0aGUgYmFja2dyb3VuZCwgZG8gTk9UIHJ1biBpbiBkZWJ1ZyBtb2RlLiIKK21zZ3N0ciAiSkFOR0FOIGJlcmphbGFuIGRpIGJhY2tncm91bmQsIGphbmdhbiBiZXJqYWxhbiBkYWxhbSBtb2R1cyBkZWJ1Zy4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM0NgorbXNnaWQgIkFzc3VtZSB3ZSBhcmUgdGhlIG9ubHkgREhDUCBzZXJ2ZXIgb24gdGhlIGxvY2FsIG5ldHdvcmsuIgorbXNnc3RyICJCZXJwaWtpciBiYWh3YSBraXRhIHNhdHUtc2F0dW55YSBESENQIHNlcnZlciBkYWxhbSBqYXJpbmdhbi4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHdoZXJlIHRvIHN0b3JlIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTZWJ1dGthbiBsb2thc2kgdW50dWsgbWVueWltcGFuIGxlYXNlIERIQ1AgKGRlZmF1bHQgJXMpLiIKKworIyBPSworIzogb3B0aW9uLmM6MzQ4Cittc2dpZCAiUmV0dXJuIE1YIHJlY29yZHMgZm9yIGxvY2FsIGhvc3RzLiIKK21zZ3N0ciAiS2VtYmFsaWthbiByZWtvcmQgTVggdW50dWsgaG9zdC1ob3N0IGxva2FsLiIKKworIyBPSworIzogb3B0aW9uLmM6MzQ5Cittc2dpZCAiU3BlY2lmeSBhbiBNWCByZWNvcmQuIgorbXNnc3RyICJTZWJ1dGthbiBzZWJ1YWggcmVrb3JkIE1YLiIKKworIyBPSworIzogb3B0aW9uLmM6MzUwCittc2dpZCAiU3BlY2lmeSBCT09UUCBvcHRpb25zIHRvIERIQ1Agc2VydmVyLiIKK21zZ3N0ciAiU2VidXRrYW4gcGlsaWhhbi1waWxpaGFuIEJPT1RQIHVudHVrIERIQ1Agc2VydmVyLiIKKworIzogb3B0aW9uLmM6MzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvIE5PVCBwb2xsICVzIGZpbGUsIHJlbG9hZCBvbmx5IG9uIFNJR0hVUC4iCittc2dzdHIgIkphbmdhbiBrdW1wdWxrYW4gZmlsZSAlcywgbXVhdCBrZW1iYWxpIHNhYXQgU0lHSFVQLiIKKworIyBPSworIzogb3B0aW9uLmM6MzUyCittc2dpZCAiRG8gTk9UIGNhY2hlIGZhaWxlZCBzZWFyY2ggcmVzdWx0cy4iCittc2dzdHIgIkpBTkdBTiBtZW55aW1wYW4gaGFzaWwgcGVuY2FyaWFuIHlhbmcgZ2FnYWwuIgorCisjIE9LCisjOiBvcHRpb24uYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIG5hbWVzZXJ2ZXJzIHN0cmljdGx5IGluIHRoZSBvcmRlciBnaXZlbiBpbiAlcy4iCittc2dzdHIgIkd1bmFrYW4gc2VjYXJhIGtldGF0IG5hbWFzZXJ2ZXIgeWFuZyBkaXNlYnV0a2FuIHNlc3VhaSB1cnV0YW4gZGkgJXMuIgorCisjIE9LCisjOiBvcHRpb24uYzozNTQKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSBvcHRpb25zIHRvIGJlIHNlbnQgdG8gREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiU2V0ZWwgcGlsaWhhbi1waWxpaGFuIHRhbWJhaGFuIHlhbmcgYWthbiBkaXNldGVsIHVudHVrIGtsaWVuLWtsaWVuIERIQ1AuIgorCisjOiBvcHRpb24uYzozNTUKK21zZ2lkICJESENQIG9wdGlvbiBzZW50IGV2ZW4gaWYgdGhlIGNsaWVudCBkb2VzIG5vdCByZXF1ZXN0IGl0LiIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzozNTYKK21zZ2lkICJTcGVjaWZ5IHBvcnQgdG8gbGlzdGVuIGZvciBETlMgcmVxdWVzdHMgb24gKGRlZmF1bHRzIHRvIDUzKS4iCittc2dzdHIgIlNlYnV0a2FuIHBvcnQgdW50dWsgbWVuZGVuZ2Fya2FuIHBlcm1pbnRhYW4gRE5TIChkZWZhdWx0IHBvcnQgNTMpLiIKKworIyBPSworIzogb3B0aW9uLmM6MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gc3VwcG9ydGVkIFVEUCBwYWNrZXQgc2l6ZSBmb3IgRUROUy4wIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJVa3VyYW4gbWFrc2ltdW0gcGFrZXQgVURQIHlhbmcgZGlkdWt1bmcgdW50dWsgRUROUy4wIChkZWZhdWx0ICVzKS4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM1OAorIywgZnV6enkKK21zZ2lkICJMb2cgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICJQZXJtaW50YWFuIGxvZy4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM1OQorIywgZnV6enkKK21zZ2lkICJGb3JjZSB0aGUgb3JpZ2luYXRpbmcgcG9ydCBmb3IgdXBzdHJlYW0gRE5TIHF1ZXJpZXMuIgorbXNnc3RyICJQYWtzYSBwb3J0IGFzYWwgdW50dWsgcGVybWludGFhbiBrZSBhdGFzLiIKKworIyBPSworIzogb3B0aW9uLmM6MzYwCittc2dpZCAiRG8gTk9UIHJlYWQgcmVzb2x2LmNvbmYuIgorbXNnc3RyICJKQU5HQU4gYmFjYSByZXNvbHYuY29uZi4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggdG8gcmVzb2x2LmNvbmYgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNlYnV0a2FuIHBhdGgga2UgcmVzb2x2LmNvbmYgKGRlZmF1bHQgJXMpLiIKKworIyBPSworIzogb3B0aW9uLmM6MzYyCisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgcGF0aCB0byBmaWxlIHdpdGggc2VydmVyPSBvcHRpb25zIgorbXNnc3RyICJTZWJ1dGthbiBwYXRoIGZpbGUgUElELiAoZGVmYXVsdCAlcykuIgorCisjIE9LCisjOiBvcHRpb24uYzozNjMKK21zZ2lkICJTcGVjaWZ5IGFkZHJlc3MoZXMpIG9mIHVwc3RyZWFtIHNlcnZlcnMgd2l0aCBvcHRpb25hbCBkb21haW5zLiIKK21zZ3N0ciAiU2VidXRrYW4gYWxhbWF0LWFsYW1hdCBzZXJ2ZXIgZGkgYXRhcywgYm9sZWggZGlsZW5na2FwaSBkZW5nYW4gbmFtYSBkb21haW4uIgorCisjIE9LCisjOiBvcHRpb24uYzozNjQKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSBhZGRyZXNzIG9mIHVwc3RyZWFtIHNlcnZlcnMgZm9yIHJldmVyc2UgYWRkcmVzcyBxdWVyaWVzIgorbXNnc3RyICJTZWJ1dGthbiBhbGFtYXQtYWxhbWF0IHNlcnZlciBkaSBhdGFzLCBib2xlaCBkaWxlbmdrYXBpIGRlbmdhbiBuYW1hIGRvbWFpbi4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM2NQorbXNnaWQgIk5ldmVyIGZvcndhcmQgcXVlcmllcyB0byBzcGVjaWZpZWQgZG9tYWlucy4iCittc2dzdHIgIkpBTkdBTiBwZXJuYWggbWVuZXJ1c2thbiBwZXJtaW50YWFuIGtlIGRvbWFpbiB5YW5nIGRpc2VidXRrYW4uIgorCisjIE9LCisjOiBvcHRpb24uYzozNjYKK21zZ2lkICJTcGVjaWZ5IHRoZSBkb21haW4gdG8gYmUgYXNzaWduZWQgaW4gREhDUCBsZWFzZXMuIgorbXNnc3RyICJTZWJ1dGthbiBkb21haW4geWFuZyBkaWd1bmFrYW4gZGFsYW0gbGVhc2UgREhDUC4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM2NworbXNnaWQgIlNwZWNpZnkgZGVmYXVsdCB0YXJnZXQgaW4gYW4gTVggcmVjb3JkLiIKK21zZ3N0ciAiU2VidXRrYW4gdHVqdWFuIGRlZmF1bHQgZGFsYW0gcmVrb3JkIE1YLiIKKworIyBPSworIzogb3B0aW9uLmM6MzY4Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgcmVwbGllcyBmcm9tIC9ldGMvaG9zdHMuIgorbXNnc3RyICJTZWJ1dGthbiB0aW1lLXRvLWxpdmUgZGFsYW0gZGV0aWsgdW50dWsgamF3YWJhbiBkYXJpIC9ldGMvaG9zdHMuIgorCisjIE9LCisjOiBvcHRpb24uYzozNjkKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgbmVnYXRpdmUgY2FjaGluZy4iCittc2dzdHIgIlNlYnV0a2FuIHRpbWUtdG8tbGl2ZSBkYWxhbSBkZXRpayB1bnR1ayBqYXdhYmFuIGRhcmkgL2V0Yy9ob3N0cy4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM3MAorIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzIGZvciBtYXhpbXVtIFRUTCB0byBzZW5kIHRvIGNsaWVudHMuIgorbXNnc3RyICJTZWJ1dGthbiB0aW1lLXRvLWxpdmUgZGFsYW0gZGV0aWsgdW50dWsgamF3YWJhbiBkYXJpIC9ldGMvaG9zdHMuIgorCisjIE9LCisjOiBvcHRpb24uYzozNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlIHRvIHRoaXMgdXNlciBhZnRlciBzdGFydHVwLiAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiVWJhaCBrZSB1c2VyIGluaSBzZXRlbGFoIG11bGFpLiAoZGVmYXVsdCAlcykuIgorCisjIE9LCisjOiBvcHRpb24uYzozNzIKKyMsIGZ1enp5Cittc2dpZCAiTWFwIERIQ1AgdmVuZG9yIGNsYXNzIHRvIHRhZy4iCittc2dzdHIgIk1lbWV0YWthbiBrZWxhcyB2ZW5kb3IgREhDUCBrZSBkYWZ0YXIgcGlsaWhhbi4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM3MworbXNnaWQgIkRpc3BsYXkgZG5zbWFzcSB2ZXJzaW9uIGFuZCBjb3B5cmlnaHQgaW5mb3JtYXRpb24uIgorbXNnc3RyICJNZW5hbXBpbGthbiB2ZXJzaSBkYW4gaW5mb3JtYXNpIGhhayBjaXB0YSBkbnNtYXNxLiIKKworIyBPSworIzogb3B0aW9uLmM6Mzc0Cittc2dpZCAiVHJhbnNsYXRlIElQdjQgYWRkcmVzc2VzIGZyb20gdXBzdHJlYW0gc2VydmVycy4iCittc2dzdHIgIlRlcmplbWFoa2FuIGFsYW1hdC1hbGFtYXQgSVB2NCBkYXJpIHNlcnZlci1zZXJ2ZXIgZGkgYXRhcy4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM3NQorbXNnaWQgIlNwZWNpZnkgYSBTUlYgcmVjb3JkLiIKK21zZ3N0ciAiU2VidXRrYW4gcmVrb3JkIFNSVi4iCisKKyM6IG9wdGlvbi5jOjM3NgorbXNnaWQgIkRpc3BsYXkgdGhpcyBtZXNzYWdlLiBVc2UgLS1oZWxwIGRoY3AgZm9yIGtub3duIERIQ1Agb3B0aW9ucy4iCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6Mzc3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggb2YgUElEIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNlYnV0a2FuIHBhdGggZmlsZSBQSUQuIChkZWZhdWx0ICVzKS4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTZWJ1dGthbiBqdW1sYWggbWFrc2ltdW0gbGVhc2UgREhDUCAoZGVmYXVsdCAlcykuIgorCisjIE9LCisjOiBvcHRpb24uYzozNzkKK21zZ2lkICJBbnN3ZXIgRE5TIHF1ZXJpZXMgYmFzZWQgb24gdGhlIGludGVyZmFjZSBhIHF1ZXJ5IHdhcyBzZW50IHRvLiIKK21zZ3N0ciAiSmF3YWIgcGVybWludGFhbiBETlMgYmVyZGFzYXJrYW4gYW50YXJtdWthIGRpbWFuYSBwZXJtaW50YWFuIGRpa2lyaW1rYW4uIgorCisjIE9LCisjOiBvcHRpb24uYzozODAKK21zZ2lkICJTcGVjaWZ5IFRYVCBETlMgcmVjb3JkLiIKK21zZ3N0ciAiU2VidXRrYW4gcmVrb3JkIFRYVCBETlMuIgorCisjIE9LCisjOiBvcHRpb24uYzozODEKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSBQVFIgRE5TIHJlY29yZC4iCittc2dzdHIgIlNlYnV0a2FuIHJla29yZCBUWFQgRE5TLiIKKworIzogb3B0aW9uLmM6MzgyCittc2dpZCAiR2l2ZSBETlMgbmFtZSB0byBJUHY0IGFkZHJlc3Mgb2YgaW50ZXJmYWNlLiIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzozODMKK21zZ2lkICJCaW5kIG9ubHkgdG8gaW50ZXJmYWNlcyBpbiB1c2UuIgorbXNnc3RyICJIYW55YSBrYWl0a2FuIGtlIGFudGFybXVrYSB5YW5nIHNlZGFuZyBkaWd1bmFrYW4gc2FqYS4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWFkIERIQ1Agc3RhdGljIGhvc3QgaW5mb3JtYXRpb24gZnJvbSAlcy4iCittc2dzdHIgIkJhY2EgaW5mb3JtYXNpIHN0YXRpayBob3N0IERIQ1AgZGFyaSAlcy4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM4NQorbXNnaWQgIkVuYWJsZSB0aGUgREJ1cyBpbnRlcmZhY2UgZm9yIHNldHRpbmcgdXBzdHJlYW0gc2VydmVycywgZXRjLiIKK21zZ3N0ciAiTXVuZ2tpbmthbiBhbnRhciBtdWthIERCdXMgdW50dWsgbWVueWV0ZWwgc2VydmVyLXNlcnZlciBkaSBhdGFzLCBkc2IuIgorCisjIE9LCisjOiBvcHRpb24uYzozODYKK21zZ2lkICJEbyBub3QgcHJvdmlkZSBESENQIG9uIHRoaXMgaW50ZXJmYWNlLCBvbmx5IHByb3ZpZGUgRE5TLiIKK21zZ3N0ciAiSkFOR0FOIG1lbnllZGlha2FuIERIQ1AgcGFkYSBhbnRhcm11a2EgaW5pLCBoYW55YSBtZW55ZWRpYWthbiBETlMuIgorCisjIE9LCisjOiBvcHRpb24uYzozODcKK21zZ2lkICJFbmFibGUgZHluYW1pYyBhZGRyZXNzIGFsbG9jYXRpb24gZm9yIGJvb3RwLiIKK21zZ3N0ciAiTXVuZ2tpbmthbiBhbG9rYXNpIGFsYW1hdCBkaW5hbWlzIHVudHVrIGJvb3RwLiIKKworIyBPSworIzogb3B0aW9uLmM6Mzg4CisjLCBmdXp6eQorbXNnaWQgIk1hcCBNQUMgYWRkcmVzcyAod2l0aCB3aWxkY2FyZHMpIHRvIG9wdGlvbiBzZXQuIgorbXNnc3RyICJNZW1ldGFrYW4ga2VsYXMgdmVuZG9yIERIQ1Aga2UgZGFmdGFyIHBpbGloYW4uIgorCisjOiBvcHRpb24uYzozODkKK21zZ2lkICJUcmVhdCBESENQIHJlcXVlc3RzIG9uIGFsaWFzZXMgYXMgYXJyaXZpbmcgZnJvbSBpbnRlcmZhY2UuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5MAorbXNnaWQgIkRpc2FibGUgSUNNUCBlY2hvIGFkZHJlc3MgY2hlY2tpbmcgaW4gdGhlIERIQ1Agc2VydmVyLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTEKK21zZ2lkICJTaGVsbCBzY3JpcHQgdG8gcnVuIG9uIERIQ1AgbGVhc2UgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTIKK21zZ2lkICJMdWEgc2NyaXB0IHRvIHJ1biBvbiBESENQIGxlYXNlIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzkzCittc2dpZCAiUnVuIGxlYXNlLWNoYW5nZSBzY3JpcHRzIGFzIHRoaXMgdXNlci4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzk0Cittc2dpZCAiUmVhZCBjb25maWd1cmF0aW9uIGZyb20gYWxsIHRoZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4iCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6Mzk1CisjLCBmdXp6eQorbXNnaWQgIkxvZyB0byB0aGlzIHN5c2xvZyBmYWNpbGl0eSBvciBmaWxlLiAoZGVmYXVsdHMgdG8gREFFTU9OKSIKK21zZ3N0ciAiVWJhaCBrZSB1c2VyIGluaSBzZXRlbGFoIG11bGFpLiAoZGVmYXVsdCAlcykuIgorCisjOiBvcHRpb24uYzozOTYKK21zZ2lkICJEbyBub3QgdXNlIGxlYXNlZmlsZS4iCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6Mzk3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IEROUyBxdWVyaWVzLiAoZGVmYXVsdHMgdG8gJXMpIgorbXNnc3RyICJTZWJ1dGthbiBqdW1sYWggbWFrc2ltdW0gbGVhc2UgREhDUCAoZGVmYXVsdCAlcykuIgorCisjOiBvcHRpb24uYzozOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXIgRE5TIGNhY2hlIHdoZW4gcmVsb2FkaW5nICVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTkKK21zZ2lkICJJZ25vcmUgaG9zdG5hbWVzIHByb3ZpZGVkIGJ5IERIQ1AgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDAwCittc2dpZCAiRG8gTk9UIHJldXNlIGZpbGVuYW1lIGFuZCBzZXJ2ZXIgZmllbGRzIGZvciBleHRyYSBESENQIG9wdGlvbnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwMQorbXNnaWQgIkVuYWJsZSBpbnRlZ3JhdGVkIHJlYWQtb25seSBURlRQIHNlcnZlci4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDAyCittc2dpZCAiRXhwb3J0IGZpbGVzIGJ5IFRGVFAgb25seSBmcm9tIHRoZSBzcGVjaWZpZWQgc3VidHJlZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDAzCittc2dpZCAiQWRkIGNsaWVudCBJUCBhZGRyZXNzIHRvIHRmdHAtcm9vdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA0Cittc2dpZCAiQWxsb3cgYWNjZXNzIG9ubHkgdG8gZmlsZXMgb3duZWQgYnkgdGhlIHVzZXIgcnVubmluZyBkbnNtYXNxLiIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzo0MDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbm5jdXJyZW50IFRGVFAgdHJhbnNmZXJzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTZWJ1dGthbiBqdW1sYWggbWFrc2ltdW0gbGVhc2UgREhDUCAoZGVmYXVsdCAlcykuIgorCisjOiBvcHRpb24uYzo0MDYKK21zZ2lkICJEaXNhYmxlIHRoZSBURlRQIGJsb2Nrc2l6ZSBleHRlbnNpb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwNworbXNnaWQgIkNvbnZlcnQgVEZUUCBmaWxlbmFtZXMgdG8gbG93ZXJjYXNlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwOAorbXNnaWQgIkVwaGVtZXJhbCBwb3J0IHJhbmdlIGZvciB1c2UgYnkgVEZUUCB0cmFuc2ZlcnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwOQorbXNnaWQgIkV4dHJhIGxvZ2dpbmcgZm9yIERIQ1AuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxMAorbXNnaWQgIkVuYWJsZSBhc3luYy4gbG9nZ2luZzsgb3B0aW9uYWxseSBzZXQgcXVldWUgbGVuZ3RoLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTEKK21zZ2lkICJTdG9wIEROUyByZWJpbmRpbmcuIEZpbHRlciBwcml2YXRlIElQIHJhbmdlcyB3aGVuIHJlc29sdmluZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDEyCittc2dpZCAiQWxsb3cgcmViaW5kaW5nIG9mIDEyNy4wLjAuMC84LCBmb3IgUkJMIHNlcnZlcnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxMworbXNnaWQgIkluaGliaXQgRE5TLXJlYmluZCBwcm90ZWN0aW9uIG9uIHRoaXMgZG9tYWluLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTQKK21zZ2lkICJBbHdheXMgcGVyZm9ybSBETlMgcXVlcmllcyB0byBhbGwgc2VydmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE1Cittc2dpZCAiU2V0IHRhZyBpZiBjbGllbnQgaW5jbHVkZXMgbWF0Y2hpbmcgb3B0aW9uIGluIHJlcXVlc3QuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxNgorbXNnaWQgIlVzZSBhbHRlcm5hdGl2ZSBwb3J0cyBmb3IgREhDUC4iCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6NDE3CisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgTkFQVFIgRE5TIHJlY29yZC4iCittc2dzdHIgIlNlYnV0a2FuIHJla29yZCBUWFQgRE5TLiIKKworIzogb3B0aW9uLmM6NDE4Cittc2dpZCAiU3BlY2lmeSBsb3dlc3QgcG9ydCBhdmFpbGFibGUgZm9yIEROUyBxdWVyeSB0cmFuc21pc3Npb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxOQorbXNnaWQgIlVzZSBvbmx5IGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZXMgZm9yIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDIwCittc2dpZCAiR2VuZXJhdGUgaG9zdG5hbWVzIGJhc2VkIG9uIE1BQyBhZGRyZXNzIGZvciBuYW1lbGVzcyBjbGllbnRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjEKK21zZ2lkICJVc2UgdGhlc2UgREhDUCByZWxheXMgYXMgZnVsbCBwcm94aWVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjIKK21zZ2lkICJSZWxheSBESENQIHJlcXVlc3RzIHRvIGEgcmVtb3RlIHNlcnZlciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjMKK21zZ2lkICJTcGVjaWZ5IGFsaWFzIG5hbWUgZm9yIExPQ0FMIEROUyBuYW1lLiIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzo0MjQKKyMsIGZ1enp5Cittc2dpZCAiUHJvbXB0IHRvIHNlbmQgdG8gUFhFIGNsaWVudHMuIgorbXNnc3RyICJTZXRlbCBwaWxpaGFuLXBpbGloYW4gdGFtYmFoYW4geWFuZyBha2FuIGRpc2V0ZWwgdW50dWsga2xpZW4ta2xpZW4gREhDUC4iCisKKyM6IG9wdGlvbi5jOjQyNQorbXNnaWQgIkJvb3Qgc2VydmljZSBmb3IgUFhFIG1lbnUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyNgorbXNnaWQgIkNoZWNrIGNvbmZpZ3VyYXRpb24gc3ludGF4LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjcKK21zZ2lkICJBZGQgcmVxdWVzdG9yJ3MgTUFDIGFkZHJlc3MgdG8gZm9yd2FyZGVkIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjgKK21zZ2lkICJBZGQgcmVxdWVzdG9yJ3MgSVAgc3VibmV0IHRvIGZvcndhcmRlZCBETlMgcXVlcmllcy4iCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6NDI5CisjLCBmdXp6eQorbXNnaWQgIlByb3h5IEROU1NFQyB2YWxpZGF0aW9uIHJlc3VsdHMgZnJvbSB1cHN0cmVhbSBuYW1lc2VydmVycy4iCittc2dzdHIgIlRlcmplbWFoa2FuIGFsYW1hdC1hbGFtYXQgSVB2NCBkYXJpIHNlcnZlci1zZXJ2ZXIgZGkgYXRhcy4iCisKKyM6IG9wdGlvbi5jOjQzMAorbXNnaWQgIkF0dGVtcHQgdG8gYWxsb2NhdGUgc2VxdWVudGlhbCBJUCBhZGRyZXNzZXMgdG8gREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzEKK21zZ2lkICJDb3B5IGNvbm5lY3Rpb24tdHJhY2sgbWFyayBmcm9tIHF1ZXJpZXMgdG8gdXBzdHJlYW0gY29ubmVjdGlvbnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzMgorbXNnaWQgIkFsbG93IERIQ1AgY2xpZW50cyB0byBkbyB0aGVpciBvd24gREROUyB1cGRhdGVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzMKK21zZ2lkICJTZW5kIHJvdXRlci1hZHZlcnRpc2VtZW50cyBmb3IgaW50ZXJmYWNlcyBkb2luZyBESENQdjYiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM0Cittc2dpZCAiU3BlY2lmeSBEVUlEX0VOLXR5cGUgREhDUHY2IHNlcnZlciBEVUlEIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjQzNQorIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IGhvc3QgKEEvQUFBQSBhbmQgUFRSKSByZWNvcmRzIgorbXNnc3RyICJTZWJ1dGthbiBzZWJ1YWggcmVrb3JkIE1YLiIKKworIyBPSworIzogb3B0aW9uLmM6NDM2CisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgYXJiaXRyYXJ5IEROUyByZXNvdXJjZSByZWNvcmQiCittc2dzdHIgIlNlYnV0a2FuIHJla29yZCBUWFQgRE5TLiIKKworIyBPSworIzogb3B0aW9uLmM6NDM3CisjLCBmdXp6eQorbXNnaWQgIkJpbmQgdG8gaW50ZXJmYWNlcyBpbiB1c2UgLSBjaGVjayBmb3IgbmV3IGludGVyZmFjZXMiCittc2dzdHIgImFudGFybXVrYSB0aWRhayBkaWtlbmFsICVzIgorCisjOiBvcHRpb24uYzo0MzgKK21zZ2lkICJFeHBvcnQgbG9jYWwgbmFtZXMgdG8gZ2xvYmFsIEROUyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzkKK21zZ2lkICJEb21haW4gdG8gZXhwb3J0IHRvIGdsb2JhbCBETlMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQwCittc2dpZCAiU2V0IFRUTCBmb3IgYXV0aG9yaXRhdGl2ZSByZXBsaWVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0MQorbXNnaWQgIlNldCBhdXRob3JpdGl2ZSB6b25lIGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0MgorbXNnaWQgIlNlY29uZGFyeSBhdXRob3JpdGF0aXZlIG5hbWVzZXJ2ZXJzIGZvciBmb3J3YXJkIGRvbWFpbnMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQzCittc2dpZCAiUGVlcnMgd2hpY2ggYXJlIGFsbG93ZWQgdG8gZG8gem9uZSB0cmFuc2ZlciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDQKK21zZ2lkICJTcGVjaWZ5IGlwc2V0cyB0byB3aGljaCBtYXRjaGluZyBkb21haW5zIHNob3VsZCBiZSBhZGRlZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDUKK21zZ2lkICJTcGVjaWZ5IGEgZG9tYWluIGFuZCBhZGRyZXNzIHJhbmdlIGZvciBzeW50aGVzaXNlZCBuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDYKK21zZ2lkICJBY3RpdmF0ZSBETlNTRUMgdmFsaWRhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDcKK21zZ2lkICJTcGVjaWZ5IHRydXN0IGFuY2hvciBrZXkgZGlnZXN0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDgKK21zZ2lkICJEaXNhYmxlIHVwc3RyZWFtIGNoZWNraW5nIGZvciBETlNTRUMgZGVidWdnaW5nLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDkKK21zZ2lkICJFbnN1cmUgYW5zd2VycyB3aXRob3V0IEROU1NFQyBhcmUgaW4gdW5zaWduZWQgem9uZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1MAorbXNnaWQgIkRvbid0IGNoZWNrIEROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyB1bnRpbCBmaXJzdCBjYWNoZS1yZWxvYWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDUyCittc2dpZCAiU3BlY2lmeSBESENQdjYgcHJlZml4IGNsYXNzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1NAorbXNnaWQgIlNldCBwcmlvcml0eSwgcmVzZW5kLWludGVydmFsIGFuZCByb3V0ZXItbGlmZXRpbWUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU1Cittc2dpZCAiRG8gbm90IGxvZyByb3V0aW5lIERIQ1AuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1NgorbXNnaWQgIkRvIG5vdCBsb2cgcm91dGluZSBESENQdjYuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1NworbXNnaWQgIkRvIG5vdCBsb2cgUkEuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1OAorbXNnaWQgIkFjY2VwdCBxdWVyaWVzIG9ubHkgZnJvbSBkaXJlY3RseS1jb25uZWN0ZWQgbmV0d29ya3MiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU5Cittc2dpZCAiRGV0ZWN0IGFuZCByZW1vdmUgRE5TIGZvcndhcmRpbmcgbG9vcHMiCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogZG5zbWFzcSBbb3B0aW9uc11cbiIKKyJcbiIKK21zZ3N0ciAiIgorIlBlbmdndW5hYW46IGRuc21hc3EgW3BpbGloYW5dXG4iCisiXG4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICJVc2Ugc2hvcnQgb3B0aW9ucyBvbmx5IG9uIHRoZSBjb21tYW5kIGxpbmUuXG4iCittc2dzdHIgIkd1bmFrYW4gcGlsaWhhbiBwZW5kZWsgc2FqYSBwYWRhIHBlcmludGFoIGJhcmlzLlxuIgorCisjIE9LCisjOiBvcHRpb24uYzo2NjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlZhbGlkIG9wdGlvbnMgYXJlOlxuIgorbXNnc3RyICJQaWxpaGFuIHlhbmcgYm9sZWggYWRhbGFoOlxuIgorCisjIE9LCisjOiBvcHRpb24uYzo3MjIgb3B0aW9uLmM6NzI2Cittc2dpZCAiYmFkIHBvcnQiCittc2dzdHIgInBvcnQgc2FsYWgiCisKKyM6IG9wdGlvbi5jOjc1MyBvcHRpb24uYzo3ODUKK21zZ2lkICJpbnRlcmZhY2UgYmluZGluZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjc2MiBvcHRpb24uYzozNDk0CisjLCBmdXp6eQorbXNnaWQgImJhZCBpbnRlcmZhY2UgbmFtZSIKK21zZ3N0ciAibmFtYSBNWCBzYWxhaCIKKworIyBPSworIzogb3B0aW9uLmM6NzkyCisjLCBmdXp6eQorbXNnaWQgImJhZCBhZGRyZXNzIgorbXNnc3RyICJtZW1iYWNhICVzIC0gJWQgYWxhbWF0IgorCisjOiBvcHRpb24uYzo5NzQKK21zZ2lkICJ1bnN1cHBvcnRlZCBlbmNhcHN1bGF0aW9uIGZvciBJUHY2IG9wdGlvbiIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzo5ODgKK21zZ2lkICJiYWQgZGhjcC1vcHRpb24iCittc2dzdHIgImRoY3Atb3B0aW9uIHNhbGFoIgorCisjIE9LCisjOiBvcHRpb24uYzoxMDU2CisjLCBmdXp6eQorbXNnaWQgImJhZCBJUCBhZGRyZXNzIgorbXNnc3RyICJtZW1iYWNhICVzIC0gJWQgYWxhbWF0IgorCisjIE9LCisjOiBvcHRpb24uYzoxMDU5IG9wdGlvbi5jOjExOTcgb3B0aW9uLmM6MjgxMgorIywgZnV6enkKK21zZ2lkICJiYWQgSVB2NiBhZGRyZXNzIgorbXNnc3RyICJtZW1iYWNhICVzIC0gJWQgYWxhbWF0IgorCisjIE9LCisjOiBvcHRpb24uYzoxMjI0IG9wdGlvbi5jOjEzMTgKK21zZ2lkICJiYWQgZG9tYWluIGluIGRoY3Atb3B0aW9uIgorbXNnc3RyICJkb21haW4gZGFsYW0gZGhjcC1vcHRpb24gc2FsYWgiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjEzNTYKK21zZ2lkICJkaGNwLW9wdGlvbiB0b28gbG9uZyIKK21zZ3N0ciAiZGhjcC1vcHRpb24gdGVybGFsdSBwYW5qYW5nIgorCisjOiBvcHRpb24uYzoxMzYzCittc2dpZCAiaWxsZWdhbCBkaGNwLW1hdGNoIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE0MjUKK21zZ2lkICJpbGxlZ2FsIHJlcGVhdGVkIGZsYWciCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTQzMworbXNnaWQgImlsbGVnYWwgcmVwZWF0ZWQga2V5d29yZCIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzoxNDk1IG9wdGlvbi5jOjQwOTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhY2Nlc3MgZGlyZWN0b3J5ICVzOiAlcyIKK21zZ3N0ciAidGlkYWsgYmlzYSBtZW1iYWNhICVzOiAlcyIKKworIyBPSworIzogb3B0aW9uLmM6MTU0MSB0ZnRwLmM6NDkzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgYWNjZXNzICVzOiAlcyIKK21zZ3N0ciAidGlkYWsgYmlzYSBtZW1iYWNhICVzOiAlcyIKKworIzogb3B0aW9uLmM6MTU4OAorbXNnaWQgInNldHRpbmcgbG9nIGZhY2lsaXR5IGlzIG5vdCBwb3NzaWJsZSB1bmRlciBBbmRyb2lkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE1OTcKK21zZ2lkICJiYWQgbG9nIGZhY2lsaXR5IgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjE2NTAKK21zZ2lkICJiYWQgTVggcHJlZmVyZW5jZSIKK21zZ3N0ciAia2VzdWthYW4gTVggc2FsYWgiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjE2NTUKK21zZ2lkICJiYWQgTVggbmFtZSIKK21zZ3N0ciAibmFtYSBNWCBzYWxhaCIKKworIyBPSworIzogb3B0aW9uLmM6MTY2OQorbXNnaWQgImJhZCBNWCB0YXJnZXQiCittc2dzdHIgInRhcmdldCBNWCBzYWxhaCIKKworIzogb3B0aW9uLmM6MTY4MQorbXNnaWQgImNhbm5vdCBydW4gc2NyaXB0cyB1bmRlciB1Q2xpbnV4IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE2ODMKK21zZ2lkICJyZWNvbXBpbGUgd2l0aCBIQVZFX1NDUklQVCBkZWZpbmVkIHRvIGVuYWJsZSBsZWFzZS1jaGFuZ2Ugc2NyaXB0cyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNjg3Cittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9MVUFTQ1JJUFQgZGVmaW5lZCB0byBlbmFibGUgTHVhIHNjcmlwdHMiCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6MTkyOCBvcHRpb24uYzoxOTY2IG9wdGlvbi5jOjIwMTUKKyMsIGZ1enp5Cittc2dpZCAiYmFkIHByZWZpeCIKK21zZ3N0ciAicG9ydCBzYWxhaCIKKworIzogb3B0aW9uLmM6MjI4OQorbXNnaWQgInJlY29tcGlsZSB3aXRoIEhBVkVfSVBTRVQgZGVmaW5lZCB0byBlbmFibGUgaXBzZXQgZGlyZWN0aXZlcyIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzoyNDY5CisjLCBmdXp6eQorbXNnaWQgImJhZCBwb3J0IHJhbmdlIgorbXNnc3RyICJwb3J0IHNhbGFoIgorCisjOiBvcHRpb24uYzoyNDg1Cittc2dpZCAiYmFkIGJyaWRnZS1pbnRlcmZhY2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjU0NQorbXNnaWQgIm9ubHkgb25lIHRhZyBhbGxvd2VkIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI1NjUgb3B0aW9uLmM6MjU3NyBvcHRpb24uYzoyNjgzIG9wdGlvbi5jOjI3MjQKK21zZ2lkICJiYWQgZGhjcC1yYW5nZSIKK21zZ3N0ciAiZGhjcC1yYW5nZSBzYWxhaCIKKworIyBPSworIzogb3B0aW9uLmM6MjU5MgorbXNnaWQgImluY29uc2lzdGVudCBESENQIHJhbmdlIgorbXNnc3RyICJqYW5na2F1YW4gREhDUCB0aWRhayBrb25zaXN0ZW4iCisKKyM6IG9wdGlvbi5jOjI2NTEKK21zZ2lkICJwcmVmaXggbGVuZ3RoIG11c3QgYmUgZXhhY3RseSA2NCBmb3IgUkEgc3VibmV0cyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjUzCittc2dpZCAicHJlZml4IGxlbmd0aCBtdXN0IGJlIGV4YWN0bHkgNjQgZm9yIHN1Ym5ldCBjb25zdHJ1Y3RvcnMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjY1NworbXNnaWQgInByZWZpeCBsZW5ndGggbXVzdCBiZSBhdCBsZWFzdCA2NCIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzoyNjYwCisjLCBmdXp6eQorbXNnaWQgImluY29uc2lzdGVudCBESENQdjYgcmFuZ2UiCittc2dzdHIgImphbmdrYXVhbiBESENQIHRpZGFrIGtvbnNpc3RlbiIKKworIzogb3B0aW9uLmM6MjY3MQorbXNnaWQgInByZWZpeCBtdXN0IGJlIHplcm8gd2l0aCBcImNvbnN0cnVjdG9yOlwiIGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI3ODIgb3B0aW9uLmM6MjgzMAorIywgZnV6enkKK21zZ2lkICJiYWQgaGV4IGNvbnN0YW50IgorbXNnc3RyICJkaGNwLWhvc3Qgc2FsYWgiCisKKyM6IG9wdGlvbi5jOjI4MDQKK21zZ2lkICJjYW5ub3QgbWF0Y2ggdGFncyBpbiAtLWRoY3AtaG9zdCIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzoyODUyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgZGhjcC1ob3N0IElQIGFkZHJlc3MgJXMiCittc2dzdHIgImFsYW1hdCBJUCBrZW1iYXIgJXMgZGFsYW0gZGlyZWt0aWYgZGhjcC1jb25maWciCisKKyMgT0sKKyM6IG9wdGlvbi5jOjI5MTAKKyMsIGZ1enp5Cittc2dpZCAiYmFkIERIQ1AgaG9zdCBuYW1lIgorbXNnc3RyICJuYW1hIE1YIHNhbGFoIgorCisjIE9LCisjOiBvcHRpb24uYzoyOTkyCisjLCBmdXp6eQorbXNnaWQgImJhZCB0YWctaWYiCittc2dzdHIgInRhcmdldCBNWCBzYWxhaCIKKworIyBPSworIzogb3B0aW9uLmM6MzMxNiBvcHRpb24uYzozNzEwCittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAibm9tb3IgcG9ydCB0aWRhayBiZW5hciIKKworIyBPSworIzogb3B0aW9uLmM6MzM3OAorIywgZnV6enkKK21zZ2lkICJiYWQgZGhjcC1wcm94eSBhZGRyZXNzIgorbXNnc3RyICJtZW1iYWNhICVzIC0gJWQgYWxhbWF0IgorCisjIE9LCisjOiBvcHRpb24uYzozNDA0CisjLCBmdXp6eQorbXNnaWQgIkJhZCBkaGNwLXJlbGF5IgorbXNnc3RyICJkaGNwLXJhbmdlIHNhbGFoIgorCisjOiBvcHRpb24uYzozNDMwCittc2dpZCAiYmFkIFJBLXBhcmFtcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDM5Cittc2dpZCAiYmFkIERVSUQiCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6MzQ4MQorIywgZnV6enkKK21zZ2lkICJpbnZhbGlkIGFsaWFzIHJhbmdlIgorbXNnc3RyICJ3ZWlnaHQgdGlkYWsgYmVuYXIiCisKKyM6IG9wdGlvbi5jOjM1MzUKK21zZ2lkICJiYWQgQ05BTUUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzU0MAorbXNnaWQgImR1cGxpY2F0ZSBDTkFNRSIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzozNTYwCisjLCBmdXp6eQorbXNnaWQgImJhZCBQVFIgcmVjb3JkIgorbXNnc3RyICJyZWtvcmQgU1JWIHNhbGFoIgorCisjIE9LCisjOiBvcHRpb24uYzozNTkxCisjLCBmdXp6eQorbXNnaWQgImJhZCBOQVBUUiByZWNvcmQiCittc2dzdHIgInJla29yZCBTUlYgc2FsYWgiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM2MjUKKyMsIGZ1enp5Cittc2dpZCAiYmFkIFJSIHJlY29yZCIKK21zZ3N0ciAicmVrb3JkIFNSViBzYWxhaCIKKworIyBPSworIzogb3B0aW9uLmM6MzY1NQorbXNnaWQgImJhZCBUWFQgcmVjb3JkIgorbXNnc3RyICJyZWtvcmQgVFhUIHNhbGFoIgorCisjIE9LCisjOiBvcHRpb24uYzozNjk2Cittc2dpZCAiYmFkIFNSViByZWNvcmQiCittc2dzdHIgInJla29yZCBTUlYgc2FsYWgiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM3MDMKK21zZ2lkICJiYWQgU1JWIHRhcmdldCIKK21zZ3N0ciAidGFyZ2V0IFNSViBzYWxhaCIKKworIyBPSworIzogb3B0aW9uLmM6MzcxNworbXNnaWQgImludmFsaWQgcHJpb3JpdHkiCittc2dzdHIgInByaW9yaXRhcyB0aWRhayBiZW5hciIKKworIyBPSworIzogb3B0aW9uLmM6MzcyNAorbXNnaWQgImludmFsaWQgd2VpZ2h0IgorbXNnc3RyICJ3ZWlnaHQgdGlkYWsgYmVuYXIiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjM3NDgKKyMsIGZ1enp5Cittc2dpZCAiQmFkIGhvc3QtcmVjb3JkIgorbXNnc3RyICJyZWtvcmQgU1JWIHNhbGFoIgorCisjIE9LCisjOiBvcHRpb24uYzozNzY1CisjLCBmdXp6eQorbXNnaWQgIkJhZCBuYW1lIGluIGhvc3QtcmVjb3JkIgorbXNnc3RyICJrZXNhbGFoYW4gbmFtYSBkaSAlcyIKKworIyBPSworIzogb3B0aW9uLmM6MzgyNgorIywgZnV6enkKK21zZ2lkICJiYWQgdHJ1c3QgYW5jaG9yIgorbXNnc3RyICJwb3J0IHNhbGFoIgorCisjOiBvcHRpb24uYzozODQwCittc2dpZCAiYmFkIEhFWCBpbiB0cnVzdCBhbmNob3IiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg1MAorbXNnaWQgInVuc3VwcG9ydGVkIG9wdGlvbiAoY2hlY2sgdGhhdCBkbnNtYXNxIHdhcyBjb21waWxlZCB3aXRoIERIQ1AvVEZUUC9ETlNTRUMvREJ1cyBzdXBwb3J0KSIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzozOTA5Cittc2dpZCAibWlzc2luZyBcIiIKK21zZ3N0ciAia3VyYW5nIFwiIgorCisjIE9LCisjOiBvcHRpb24uYzozOTY2Cittc2dpZCAiYmFkIG9wdGlvbiIKK21zZ3N0ciAicGlsaWhhbiBzYWxhaCIKKworIyBPSworIzogb3B0aW9uLmM6Mzk2OAorbXNnaWQgImV4dHJhbmVvdXMgcGFyYW1ldGVyIgorbXNnc3RyICJwYXJhbWV0ZXIgYmVybGViaWhhbiIKKworIyBPSworIzogb3B0aW9uLmM6Mzk3MAorbXNnaWQgIm1pc3NpbmcgcGFyYW1ldGVyIgorbXNnc3RyICJwYXJhbWV0ZXIga3VyYW5nIgorCisjIE9LCisjOiBvcHRpb24uYzozOTcyCisjLCBmdXp6eQorbXNnaWQgImlsbGVnYWwgb3B0aW9uIgorbXNnc3RyICJwaWxpaGFuIHNhbGFoIgorCisjIE9LCisjOiBvcHRpb24uYzozOTc5Cittc2dpZCAiZXJyb3IiCittc2dzdHIgImtlc2FsYWhhbiIKKworIyBPSworIzogb3B0aW9uLmM6Mzk4MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIGF0IGxpbmUgJWQgb2YgJXMiCittc2dzdHIgIiVzIHBhZGEgYmFyaXMgJWQgZGFyaSAlJXMiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjQwNDUgb3B0aW9uLmM6NDE2OCB0ZnRwLmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICVzOiAlcyIKK21zZ3N0ciAidGlkYWsgYmlzYSBtZW1iYWNhICVzOiAlcyIKKworIyBPSworIzogb3B0aW9uLmM6NDIyOSBvcHRpb24uYzo0MjY1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJyZWFkICVzIgorbXNnc3RyICJtZW1iYWNhICVzIgorCisjOiBvcHRpb24uYzo0MzMxCittc2dpZCAianVuayBmb3VuZCBpbiBjb21tYW5kIGxpbmUiCittc2dzdHIgIiIKKworIyBPSworIzogb3B0aW9uLmM6NDM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIHZlcnNpb24gJXMgICVzXG4iCittc2dzdHIgIkRuc21hc3EgdmVyc2kgJXMgICVzXG4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjQzNjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb21waWxlIHRpbWUgb3B0aW9uczogJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlBpbGloYW4tcGlsaWhhbiBzYWF0IGtvbXBpbGFzaSAlc1xuIgorIlxuIgorCisjIE9LCisjOiBvcHRpb24uYzo0MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLlxuIgorbXNnc3RyICJQZXJhbmdrYXQgbHVuYWsgaW5pIHRlcnNlZGlhIFRBTlBBIEpBTUlOQU4gU0VESUtJVFBVTi5cbiIKKworIyBPSworIzogb3B0aW9uLmM6NDM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0XG4iCittc2dzdHIgIkRuc2RtYXNxIGFkYWxhaCBwZXJhbmdrYXQgbHVuYWsgYmViYXMsIGRhbiBBbmRhIGRpcGVyc2lsYWhrYW4gdW50dWsgbWVtYmFnaWthbm55YVxuIgorCisjIE9LCisjOiBvcHRpb24uYzo0MzcwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIgb3IgMy5cbiIKK21zZ3N0ciAiZGVuZ2FuIGF0dXJhbiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2kgMi5cbiIKKworIzogb3B0aW9uLmM6NDM4MQorbXNnaWQgInRyeSAtLWhlbHAiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM4MworbXNnaWQgInRyeSAtdyIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBvcHRpb24uYzo0Mzg1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29tbWFuZCBsaW5lIG9wdGlvbnM6ICVzIgorbXNnc3RyICJwaWxpaGFuIGJhcmlzIHBlcmludGFoIHNhbGFoOiAlcy4iCisKKyMgT0sKKyM6IG9wdGlvbi5jOjQ0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCBob3N0LW5hbWU6ICVzIgorbXNnc3RyICJ0aWRhayBiaXNhIG1lbmRhcGF0a2FuIGhvc3QtbmFtZTogJXMiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjQ0NjIKK21zZ2lkICJvbmx5IG9uZSByZXNvbHYuY29uZiBmaWxlIGFsbG93ZWQgaW4gbm8tcG9sbCBtb2RlLiIKK21zZ3N0ciAiaGFueWEgc2F0dSBmaWxlIHJlc29sdi5jb25mIHlhbmcgZGlwZXJib2xlaGthbiBkYWxhbSBtb2R1cyBuby1wb2xsLiIKKworIyBPSworIzogb3B0aW9uLmM6NDQ3MgorbXNnaWQgIm11c3QgaGF2ZSBleGFjdGx5IG9uZSByZXNvbHYuY29uZiB0byByZWFkIGRvbWFpbiBmcm9tLiIKK21zZ3N0ciAiaGFydXMgbWVtcHVueWFpIHRlcGF0IHNhdHUgcmVzb2x2LmNvbmYgdW50dWsgbWVuZGFwYXRrYW4gbmFtYSBkb21haW4uIgorCisjIE9LCisjOiBvcHRpb24uYzo0NDc1IG5ldHdvcmsuYzoxNTA2IGRoY3AuYzo3NjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzOiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVtYmFjYSAlczogJXMiCisKKyMgT0sKKyM6IG9wdGlvbi5jOjQ0OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2VhcmNoIGRpcmVjdGl2ZSBmb3VuZCBpbiAlcyIKK21zZ3N0ciAidGlkYWsgZGl0ZW11a2FuIGRpcmVrdGlmIHNlYXJjaCBkaSAlcyIKKworIzogb3B0aW9uLmM6NDUxMworbXNnaWQgInRoZXJlIG11c3QgYmUgYSBkZWZhdWx0IGRvbWFpbiB3aGVuIC0tZGhjcC1mcWRuIGlzIHNldCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTIyCittc2dpZCAic3ludGF4IGNoZWNrIE9LIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGZvcndhcmQuYzoxMTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZW5kIHBhY2tldDogJXMiCittc2dzdHIgImdhZ2FsIG1lbmRlbmdhcmthbiBkaSBzb2NrZXQ6ICVzIgorCisjOiBmb3J3YXJkLmM6NTc0Cittc2dpZCAiZGlzY2FyZGluZyBETlMgcmVwbHk6IHN1Ym5ldCBvcHRpb24gbWlzbWF0Y2giCittc2dzdHIgIiIKKworIyBPSworIzogZm9yd2FyZC5jOjU5NworIywgYy1mb3JtYXQKK21zZ2lkICJuYW1lc2VydmVyICVzIHJlZnVzZWQgdG8gZG8gYSByZWN1cnNpdmUgcXVlcnkiCittc2dzdHIgIm5hbWVzZXJ2ZXIgJXMgbWVub2xhayBtZWxha3VrYW4gcmVzb2x1c2kgcmVrdXJzaWYiCisKKyM6IGZvcndhcmQuYzo2MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zc2libGUgRE5TLXJlYmluZCBhdHRhY2sgZGV0ZWN0ZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzoxMTMyIGZvcndhcmQuYzoxNjYzCittc2dpZCAiSWdub3JpbmcgcXVlcnkgZnJvbSBub24tbG9jYWwgbmV0d29yayIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBmb3J3YXJkLmM6MjEwMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBETlMgcXVlcmllcyByZWFjaGVkIChtYXg6ICVkKSIKK21zZ3N0ciAiU2VidXRrYW4ganVtbGFoIG1ha3NpbXVtIGxlYXNlIERIQ1AgKGRlZmF1bHQgJXMpLiIKKworIyBPSworIzogbmV0d29yay5jOjcxNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaXN0ZW5pbmcgc29ja2V0IGZvciAlczogJXMiCittc2dzdHIgImdhZ2FsIG1lbWJ1YXQgc29ja2V0OiAlcyAiCisKKyM6IG5ldHdvcmsuYzoxMDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkxPVUQgV0FSTklORzogbGlzdGVuaW5nIG9uICVzIG1heSBhY2NlcHQgcmVxdWVzdHMgdmlhIGludGVyZmFjZXMgb3RoZXIgdGhhbiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTAyOAorbXNnaWQgIkxPVUQgV0FSTklORzogdXNlIC0tYmluZC1keW5hbWljIHJhdGhlciB0aGFuIC0tYmluZC1pbnRlcmZhY2VzIHRvIGF2b2lkIEROUyBhbXBsaWZpY2F0aW9uIGF0dGFja3MgdmlhIHRoZXNlIGludGVyZmFjZShzKSIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBuZXR3b3JrLmM6MTAzNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogbm8gYWRkcmVzc2VzIGZvdW5kIGZvciBpbnRlcmZhY2UgJXMiCittc2dzdHIgIm1lbmdndW5ha2FuIGFsYW1hdCBsb2thbCBzYWphIHVudHVrICVzICVzIgorCisjIE9LCisjOiBuZXR3b3JrLmM6MTA5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJmYWNlICVzIGZhaWxlZCB0byBqb2luIERIQ1B2NiBtdWx0aWNhc3QgZ3JvdXA6ICVzIgorbXNnc3RyICJnYWdhbCBtZW0tYmluZCBzb2NrZXQgc2VydmVyIERIQ1A6ICVzIgorCisjOiBuZXR3b3JrLmM6MTI4OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgc2VydmVyIHNvY2tldCBmb3IgJXM6ICVzIgorbXNnc3RyICJnYWdhbCBtZW0tYmluZCBzb2NrZXQgdW50dWsgbWVuZGVuZ2Fya2FuICVzOiAlcyIKKworIyBPSworIzogbmV0d29yay5jOjE0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGxvY2FsIGludGVyZmFjZSIKK21zZ3N0ciAibWVuZ2FiYWlrYW4gbmFtZXNlcnZlciAlcyAtIGFudGFybXVrYSBsb2thbCIKKworIyBPSworIzogbmV0d29yay5jOjE0NTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIG5hbWVzZXJ2ZXIgJXMgLSBjYW5ub3QgbWFrZS9iaW5kIHNvY2tldDogJXMiCittc2dzdHIgIm1lbmdhYmFpa2FuIG5hbWVzZXJ2ZXIgJXMgLSB0YWsgZGFwYXQgbWVtYnVhdC9tZW0tYmluZCBzb2NrZXQ6ICVzIgorCisjIE9LCisjOiBuZXR3b3JrLmM6MTQ2OAorbXNnaWQgInVucXVhbGlmaWVkIgorbXNnc3RyICJ0aWRhayBtZW1lbnVoaSBzeWFyYXQiCisKKyM6IG5ldHdvcmsuYzoxNDY4Cittc2dpZCAibmFtZXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE0NzAKK21zZ2lkICJkZWZhdWx0IgorbXNnc3RyICIiCisKKyMgT0sKKyM6IG5ldHdvcmsuYzoxNDcyCittc2dpZCAiZG9tYWluIgorbXNnc3RyICJkb21haW4iCisKKyMgT0sKKyM6IG5ldHdvcmsuYzoxNDc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIGxvY2FsIGFkZHJlc3NlcyBvbmx5IGZvciAlcyAlcyIKK21zZ3N0ciAibWVuZ2d1bmFrYW4gYWxhbWF0IGxva2FsIHNhamEgdW50dWsgJXMgJXMiCisKKyMgT0sKKyM6IG5ldHdvcmsuYzoxNDc3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBzdGFuZGFyZCBuYW1lc2VydmVycyBmb3IgJXMgJXMiCittc2dzdHIgIm1lbmdndW5ha2FuIG5hbWVzZXJ2ZXIgJXMjJWQgdW50dWsgJXMgJXMiCisKKyMgT0sKKyM6IG5ldHdvcmsuYzoxNDc5CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQgZm9yICVzICVzIgorbXNnc3RyICJtZW5nZ3VuYWthbiBuYW1lc2VydmVyICVzIyVkIHVudHVrICVzICVzIgorCisjIE9LCisjOiBuZXR3b3JrLmM6MTQ4MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTk9UIHVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQgLSBxdWVyeSBsb29wIGRldGVjdGVkIgorbXNnc3RyICJtZW5nZ3VuYWthbiBuYW1lc2VydmVyICVzIyVkIHVudHVrICVzICVzIgorCisjIE9LCisjOiBuZXR3b3JrLmM6MTQ4NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCh2aWEgJXMpIgorbXNnc3RyICJtZW5nZ3VuYWthbiBuYW1lc2VydmVyICVzIyVkIgorCisjIE9LCisjOiBuZXR3b3JrLmM6MTQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkIgorbXNnc3RyICJtZW5nZ3VuYWthbiBuYW1lc2VydmVyICVzIyVkIgorCisjOiBkbnNtYXNxLmM6MTU0Cittc2dpZCAiTm8gdHJ1c3QgYW5jaG9ycyBwcm92aWRlZCBmb3IgRE5TU0VDIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxNTcKK21zZ2lkICJDYW5ub3QgcmVkdWNlIGNhY2hlIHNpemUgZnJvbSBkZWZhdWx0IHdoZW4gRE5TU0VDIGVuYWJsZWQiCittc2dzdHIgIiIKKworIyBPSworIzogZG5zbWFzcS5jOjE1OQorIywgZnV6enkKK21zZ2lkICJETlNTRUMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfRE5TU0VDIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiREJ1cyB0aWRhayB0ZXJzZWRpYTogc2V0ZWwgSEFWRV9EQlVTIGRhbGFtIHNyYy9jb25maWcuaCIKKworIyBPSworIzogZG5zbWFzcS5jOjE2NQorIywgZnV6enkKK21zZ2lkICJURlRQIHNlcnZlciBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9URlRQIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiREJ1cyB0aWRhayB0ZXJzZWRpYTogc2V0ZWwgSEFWRV9EQlVTIGRhbGFtIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjE3MAorbXNnaWQgIkNhbm5vdCB1c2UgLS1jb25udHJhY2sgQU5EIC0tcXVlcnktcG9ydCIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBkbnNtYXNxLmM6MTczCisjLCBmdXp6eQorbXNnaWQgIkNvbm50cmFjayBzdXBwb3J0IG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0NPTk5UUkFDSyBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIkRCdXMgdGlkYWsgdGVyc2VkaWE6IHNldGVsIEhBVkVfREJVUyBkYWxhbSBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzoxNzgKK21zZ2lkICJhc3ljaHJvbm91cyBsb2dnaW5nIGlzIG5vdCBhdmFpbGFibGUgdW5kZXIgU29sYXJpcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTgzCittc2dpZCAiYXN5Y2hyb25vdXMgbG9nZ2luZyBpcyBub3QgYXZhaWxhYmxlIHVuZGVyIEFuZHJvaWQiCittc2dzdHIgIiIKKworIyBPSworIzogZG5zbWFzcS5jOjE4OAorIywgZnV6enkKK21zZ2lkICJhdXRob3JpdGF0aXZlIEROUyBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9BVVRIIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiREJ1cyB0aWRhayB0ZXJzZWRpYTogc2V0ZWwgSEFWRV9EQlVTIGRhbGFtIHNyYy9jb25maWcuaCIKKworIyBPSworIzogZG5zbWFzcS5jOjE5MworIywgZnV6enkKK21zZ2lkICJMb29wIGRldGVjdGlvbiBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9MT09QIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiREJ1cyB0aWRhayB0ZXJzZWRpYTogc2V0ZWwgSEFWRV9EQlVTIGRhbGFtIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjIwMQorbXNnaWQgInpvbmUgc2VyaWFsIG11c3QgYmUgY29uZmlndXJlZCBpbiAtLWF1dGgtc29hIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyMTkKK21zZ2lkICJkaGNwLXJhbmdlIGNvbnN0cnVjdG9yIG5vdCBhdmFpbGFibGUgb24gdGhpcyBwbGF0Zm9ybSIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MjYyCittc2dpZCAiY2Fubm90IHNldCAtLWJpbmQtaW50ZXJmYWNlcyBhbmQgLS1iaW5kLWR5bmFtaWMiCittc2dzdHIgIiIKKworIyBPSworIzogZG5zbWFzcS5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluZCBsaXN0IG9mIGludGVyZmFjZXM6ICVzIgorbXNnc3RyICJnYWdhbCBtZW5kYXBhdGthbiBkYWZ0YXIgYW50YXJtdWthOiAlcyIKKworIyBPSworIzogZG5zbWFzcS5jOjI3NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGludGVyZmFjZSAlcyIKK21zZ3N0ciAiYW50YXJtdWthIHRpZGFrIGRpa2VuYWwgJXMiCisKKyMgT0sKKyM6IGRuc21hc3EuYzozMzAgZG5zbWFzcS5jOjk1NAorIywgYy1mb3JtYXQKK21zZ2lkICJEQnVzIGVycm9yOiAlcyIKK21zZ3N0ciAiREJ1cyBlcnJvcjogJXMiCisKKyMgT0sKKyM6IGRuc21hc3EuYzozMzMKK21zZ2lkICJEQnVzIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0RCVVMgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJEQnVzIHRpZGFrIHRlcnNlZGlhOiBzZXRlbCBIQVZFX0RCVVMgZGFsYW0gc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MzYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdXNlciBvciBncm91cDogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjQxNgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gZmlsZXN5c3RlbSByb290OiAlcyIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBkbnNtYXNxLmM6NjUzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIEROUyBkaXNhYmxlZCIKK21zZ3N0ciAiZGltdWxhaSwgY2FjaGUgdmVyc2kgJXMgZGkgZGlzYWJsZSIKKworIyBPSworIzogZG5zbWFzcS5jOjY1NQorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIGNhY2hlc2l6ZSAlZCIKK21zZ3N0ciAiZGltdWxhaSwgdmVyc2kgJXMgdWt1cmFuIGNhY2hlICVkIgorCisjIE9LCisjOiBkbnNtYXNxLmM6NjU3CisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGUgZGlzYWJsZWQiCittc2dzdHIgImRpbXVsYWksIGNhY2hlIHZlcnNpICVzIGRpIGRpc2FibGUiCisKKyMgT0sKKyM6IGRuc21hc3EuYzo2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tcGlsZSB0aW1lIG9wdGlvbnM6ICVzIgorbXNnc3RyICJwaWxpaGFuLXBpbGloYW4gc2FhdCBrb21waWxhc2k6ICVzIgorCisjIE9LCisjOiBkbnNtYXNxLmM6NjY1Cittc2dpZCAiREJ1cyBzdXBwb3J0IGVuYWJsZWQ6IGNvbm5lY3RlZCB0byBzeXN0ZW0gYnVzIgorbXNnc3RyICJkdWt1bmdhbiBEQnVzIGRpbXVuZ2tpbmthbjogdGVya29uZWtzaSBwYWRhIGJ1cyBzaXN0ZW0iCisKKyMgT0sKKyM6IGRuc21hc3EuYzo2NjcKK21zZ2lkICJEQnVzIHN1cHBvcnQgZW5hYmxlZDogYnVzIGNvbm5lY3Rpb24gcGVuZGluZyIKK21zZ3N0ciAiZHVrdW5nYW4gREJ1cyBkaW11bmdraW5rYW46IGtvbmVrc2kgYnVzIGRpdHVuZGEiCisKKyM6IGRuc21hc3EuYzo2NzIKK21zZ2lkICJETlMgc2VydmljZSBsaW1pdGVkIHRvIGxvY2FsIHN1Ym5ldHMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjY3NworbXNnaWQgIkROU1NFQyB2YWxpZGF0aW9uIGVuYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjY3OQorbXNnaWQgIkROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyBub3QgY2hlY2tlZCB1bnRpbCBmaXJzdCBjYWNoZSByZWxvYWQiCittc2dzdHIgIiIKKworIyBPSworIzogZG5zbWFzcS5jOjY4NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogZmFpbGVkIHRvIGNoYW5nZSBvd25lciBvZiAlczogJXMiCittc2dzdHIgImdhZ2FsIG1lbXVhdCBuYW1hLW5hbWEgZGFyaSAlczogJXMiCisKKyMgT0sKKyM6IGRuc21hc3EuYzo2ODgKK21zZ2lkICJzZXR0aW5nIC0tYmluZC1pbnRlcmZhY2VzIG9wdGlvbiBiZWNhdXNlIG9mIE9TIGxpbWl0YXRpb25zIgorbXNnc3RyICJzZXRlbGFuIG9wc2kgLS1iaW5kLWludGVyZmFjZXMgZGlzZWJhYmthbiBrZXRlcmJhdGFzYW4gT1MiCisKKyMgT0sKKyM6IGRuc21hc3EuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogaW50ZXJmYWNlICVzIGRvZXMgbm90IGN1cnJlbnRseSBleGlzdCIKK21zZ3N0ciAicGVyaW5nYXRhbjogYW50YXJtdWthICVzIHRpZGFrIGFkYSIKKworIzogZG5zbWFzcS5jOjcwMworbXNnaWQgIndhcm5pbmc6IGlnbm9yaW5nIHJlc29sdi1maWxlIGZsYWcgYmVjYXVzZSBuby1yZXNvbHYgaXMgc2V0IgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGRuc21hc3EuYzo3MDYKKyMsIGZ1enp5Cittc2dpZCAid2FybmluZzogbm8gdXBzdHJlYW0gc2VydmVycyBjb25maWd1cmVkIgorbXNnc3RyICJtZW55ZXRlbCBzZXJ2ZXItc2VydmVyIGRpIGF0YXMgZGVuZ2FuIERCdXMiCisKKyM6IGRuc21hc3EuYzo3MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXN5bmNocm9ub3VzIGxvZ2dpbmcgZW5hYmxlZCwgcXVldWUgbGltaXQgaXMgJWQgbWVzc2FnZXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjczMQorbXNnaWQgIklQdjYgcm91dGVyIGFkdmVydGlzZW1lbnQgZW5hYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AsIHNvY2tldHMgYm91bmQgZXhjbHVzaXZlbHkgdG8gaW50ZXJmYWNlICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3NTMKK21zZ2lkICJyb290IGlzICIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBkbnNtYXNxLmM6NzUzCisjLCBmdXp6eQorbXNnaWQgImVuYWJsZWQiCittc2dzdHIgImRpIGRpc2FibGUiCisKKyM6IGRuc21hc3EuYzo3NTUKK21zZ2lkICJzZWN1cmUgbW9kZSIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlc3RyaWN0aW5nIG1heGltdW0gc2ltdWx0YW5lb3VzIFRGVFAgdHJhbnNmZXJzIHRvICVkIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGRuc21hc3EuYzo5NTYKK21zZ2lkICJjb25uZWN0ZWQgdG8gc3lzdGVtIERCdXMiCittc2dzdHIgInRlcmh1YnVuZyBrZSBzaXN0ZW0gREJ1cyIKKworIzogZG5zbWFzcS5jOjExMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZvcmsgaW50byBiYWNrZ3JvdW5kOiAlcyIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBkbnNtYXNxLmM6MTEwOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBoZWxwZXI6ICVzIgorbXNnc3RyICJnYWdhbCBtZW1iYWNhICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjExMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic2V0dGluZyBjYXBhYmlsaXRpZXMgZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBkbnNtYXNxLmM6MTExNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSB1c2VyLWlkIHRvICVzOiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVtdWF0IG5hbWEtbmFtYSBkYXJpICVzOiAlcyIKKworIyBPSworIzogZG5zbWFzcS5jOjExMTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjaGFuZ2UgZ3JvdXAtaWQgdG8gJXM6ICVzIgorbXNnc3RyICJnYWdhbCBtZW11YXQgbmFtYS1uYW1hIGRhcmkgJXM6ICVzIgorCisjIE9LCisjOiBkbnNtYXNxLmM6MTEyMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gcGlkZmlsZSAlczogJXMiCittc2dzdHIgImdhZ2FsIG1lbWJhY2EgJXM6ICVzIgorCisjIE9LCisjOiBkbnNtYXNxLmM6MTEyNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gbG9nICVzOiAlcyIKK21zZ3N0ciAidGlkYWsgYmlzYSBtZW1idWthICVzOiVzIgorCisjIE9LCisjOiBkbnNtYXNxLmM6MTEyNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgTHVhIHNjcmlwdDogJXMiCittc2dzdHIgImdhZ2FsIG1lbXVhdCAlUzogJXMiCisKKyM6IGRuc21hc3EuYzoxMTMwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRGVFAgZGlyZWN0b3J5ICVzIGluYWNjZXNzaWJsZTogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjExNTEKK21zZ2lkICJub3cgY2hlY2tpbmcgRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMjE4CisjLCBjLWZvcm1hdAorbXNnaWQgInNjcmlwdCBwcm9jZXNzIGtpbGxlZCBieSBzaWduYWwgJWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjEyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAic2NyaXB0IHByb2Nlc3MgZXhpdGVkIHdpdGggc3RhdHVzICVkIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGRuc21hc3EuYzoxMjI2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlY3V0ZSAlczogJXMiCittc2dzdHIgImdhZ2FsIG1lbmdha3NlcyAlczogJXMiCisKKyM6IGRuc21hc3EuYzoxMjgxCittc2dpZCAiZXhpdGluZyBvbiByZWNlaXB0IG9mIFNJR1RFUk0iCittc2dzdHIgImtlbHVhciBrYXJlbmEgbWVuZXJpbWEgU0lHVEVSTSIKKworIyBPSworIzogZG5zbWFzcS5jOjEzMDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhY2Nlc3MgJXM6ICVzIgorbXNnc3RyICJnYWdhbCBtZW5nYWtzZXMgJXM6ICVzIgorCisjIE9LCisjOiBkbnNtYXNxLmM6MTMzOQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nICVzIgorbXNnc3RyICJtZW1iYWNhICVzIgorCisjIE9LCisjOiBkbnNtYXNxLmM6MTM1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibm8gc2VydmVycyBmb3VuZCBpbiAlcywgd2lsbCByZXRyeSIKK21zZ3N0ciAidGlkYWsgZGl0ZW11a2FuIGRpcmVrdGlmIHNlYXJjaCBkaSAlcyIKKworIyBPSworIzogZGhjcC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJ0aWRhayBiaXNhIG1lbWJ1YXQgc29ja2V0IERIQ1A6ICVzIgorCisjIE9LCisjOiBkaGNwLmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBvcHRpb25zIG9uIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVueWV0ZWwgb3BzaSBwYWRhIHNvY2tldCBESENQOiAlcyIKKworIyBPSworIzogZGhjcC5jOjg5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX1JFVVNFe0FERFJ8UE9SVH0gb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJnYWdhbCBtZW55ZXRlbCBTT19SRVVTRUFERFIgcGFkYSBzb2NrZXQgREhDUDogJXMiCisKKyMgT0sKKyM6IGRoY3AuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgREhDUCBzZXJ2ZXIgc29ja2V0OiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVtLWJpbmQgc29ja2V0IHNlcnZlciBESENQOiAlcyIKKworIyBPSworIzogZGhjcC5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIElDTVAgcmF3IHNvY2tldDogJXMuIgorbXNnc3RyICJ0aWRhayBkYXBhdCBtZW1idWF0IHNvY2tldCBJQ01QIHJhdzogJXMiCisKKyMgT0sKKyM6IGRoY3AuYzoyMzkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW50ZXJmYWNlICVzIGluIGJyaWRnZS1pbnRlcmZhY2UiCittc2dzdHIgImFudGFybXVrYSB0aWRhayBkaWtlbmFsICVzIgorCisjOiBkaGNwLmM6Mjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcGFja2V0IHJlY2VpdmVkIG9uICVzIHdoaWNoIGhhcyBubyBhZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQVJQLWNhY2hlIGluamVjdGlvbiBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGRoY3AuYzo1MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByYW5nZSAlcyAtLSAlcyBpcyBub3QgY29uc2lzdGVudCB3aXRoIG5ldG1hc2sgJXMiCittc2dzdHIgImphbmdrYXVhbiBESENQICVzIC0tICVzIHRpZGFrIGtvbnNpc3RlbiBkZW5nYW4gbmV0bWFzayAlcyIKKworIyBPSworIzogZGhjcC5jOjgwNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYmFkIGxpbmUgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAia2VzYWxhaGFuIG5hbWEgcGFkYSAlcyBiYXJpcyAlZCIKKworIzogZGhjcC5jOjg1MAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlcyBsaW5lICVkLCBkdXBsaWNhdGUgbmFtZSBvciBJUCBhZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo5OTQgcmZjMzMxNS5jOjIwODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByZWxheSAlcyAtPiAlcyIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBsZWFzZS5jOjYxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBvciBjcmVhdGUgbGVhc2UgZmlsZSAlczogJXMiCittc2dzdHIgInRpZGFrIGRhcGF0IG1lbWJ1a2EgYXRhdSBtZW1idWF0IGZpbGUgbGVhc2U6ICVzIgorCisjIE9LCisjOiBsZWFzZS5jOjEzNAorbXNnaWQgInRvbyBtYW55IHN0b3JlZCBsZWFzZXMiCittc2dzdHIgInRlcmxhbHUgYmFueWFrIGxlYXNlIHlhbmcgZGlzaW1wYW4iCisKKyMgT0sKKyM6IGxlYXNlLmM6MTY1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcnVuIGxlYXNlLWluaXQgc2NyaXB0ICVzOiAlcyIKK21zZ3N0ciAidGlkYWsgYmlzYSBtZW1iYWNhICVzOiAlcyIKKworIzogbGVhc2UuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAibGVhc2UtaW5pdCBzY3JpcHQgcmV0dXJuZWQgZXhpdCBjb2RlICVzIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGxlYXNlLmM6MzQyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgJXM6ICVzIChyZXRyeSBpbiAldXMpIgorbXNnc3RyICJnYWdhbCBtZW1iYWNhICVzOiAlcyIKKworIzogbGVhc2UuYzo5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWdub3JpbmcgZG9tYWluICVzIGZvciBESENQIGhvc3QgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjIE9LCisjOiByZmMyMTMxLmM6MzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQIHJlcXVlc3QgJXMgJXMiCittc2dzdHIgInRpZGFrIGFkYSBhbGFtYXQgeWFuZyBiaXNhIGRpcGFrYWkgdW50dWsgcGVybWludGFhbiBESENQICVzICVzIgorCisjIE9LCisjOiByZmMyMTMxLmM6MzQzCittc2dpZCAid2l0aCBzdWJuZXQgc2VsZWN0b3IiCittc2dzdHIgImRlbmdhbiBwZW1pbGloIHN1Ym5ldCIKKworIyBPSworIzogcmZjMjEzMS5jOjM0MworbXNnaWQgInZpYSIKK21zZ3N0ciAibGV3YXQiCisKKyMgT0sKKyM6IHJmYzIxMzEuYzozNTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IGF2YWlsYWJsZSBESENQIHN1Ym5ldDogJXMvJXMiCittc2dzdHIgInRpZGFrIGFkYSBhbGFtYXQgeWFuZyBiaXNhIGRpcGFrYWkgdW50dWsgcGVybWludGFhbiBESENQICVzICVzIgorCisjOiByZmMyMTMxLmM6MzU4IHJmYzMzMTUuYzozMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYXZhaWxhYmxlIERIQ1AgcmFuZ2U6ICVzIC0tICVzIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IHJmYzIxMzEuYzo0NjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IHZlbmRvciBjbGFzczogJXMiCittc2dzdHIgIkRCdXMgZXJyb3I6ICVzIgorCisjIE9LCisjOiByZmMyMTMxLmM6NDcxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSB1c2VyIGNsYXNzOiAlcyIKK21zZ3N0ciAiREJ1cyBlcnJvcjogJXMiCisKKyMgT0sKKyM6IHJmYzIxMzEuYzo0OTgKK21zZ2lkICJkaXNhYmxlZCIKK21zZ3N0ciAiZGkgZGlzYWJsZSIKKworIyBPSworIzogcmZjMjEzMS5jOjUzOSByZmMyMTMxLmM6OTY3IHJmYzIxMzEuYzoxMzg1IHJmYzMzMTUuYzo2MDIgcmZjMzMxNS5jOjgyMworIzogcmZjMzMxNS5jOjEwOTUKK21zZ2lkICJpZ25vcmVkIgorbXNnc3RyICJkaWFiYWlrYW4iCisKKyMgT0sKKyM6IHJmYzIxMzEuYzo1NTQgcmZjMjEzMS5jOjEyMDUgcmZjMzMxNS5jOjg3MworbXNnaWQgImFkZHJlc3MgaW4gdXNlIgorbXNnc3RyICJhbGFtYXQgdGVsYWggZGlndW5ha2FuIgorCisjIE9LCisjOiByZmMyMTMxLmM6NTY4IHJmYzIxMzEuYzoxMDIxCittc2dpZCAibm8gYWRkcmVzcyBhdmFpbGFibGUiCittc2dzdHIgInRhayBhZGEgYWxhbWF0IHlhbmcgdGVyc2VkaWEiCisKKyMgT0sKKyM6IHJmYzIxMzEuYzo1NzUgcmZjMjEzMS5jOjExNjgKK21zZ2lkICJ3cm9uZyBuZXR3b3JrIgorbXNnc3RyICJqYXJpbmdhbiB5YW5nIHNhbGFoIgorCisjIE9LCisjOiByZmMyMTMxLmM6NTkwCittc2dpZCAibm8gYWRkcmVzcyBjb25maWd1cmVkIgorbXNnc3RyICJ0YWsgYWRhIGFsYW1hdCB5YW5nIGRpc2V0ZWwiCisKKyMgT0sKKyM6IHJmYzIxMzEuYzo1OTYgcmZjMjEzMS5jOjEyMTgKK21zZ2lkICJubyBsZWFzZXMgbGVmdCIKK21zZ3N0ciAidGFrIGFkYSBsZWFzZSB5YW5nIHRlcnNpc2EiCisKKyM6IHJmYzIxMzEuYzo2OTEgcmZjMzMxNS5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBjbGllbnQgcHJvdmlkZXMgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjc5NgorbXNnaWQgIlBYRSBCSVMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjIE9LCisjOiByZmMyMTMxLmM6OTM1IHJmYzMzMTUuYzoxMTg5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJkaXNhYmxpbmcgREhDUCBzdGF0aWMgYWRkcmVzcyAlcyBmb3IgJXMiCittc2dzdHIgIm1lbi1kaXNhYmxlIGFsYW1hdCBzdGF0aWsgREhDUCAlcyIKKworIyBPSworIzogcmZjMjEzMS5jOjk1NgorbXNnaWQgInVua25vd24gbGVhc2UiCittc2dzdHIgImxlYXNlIHRpZGFrIGRpa2V0YWh1aSIKKworIzogcmZjMjEzMS5jOjk5MAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgaXMgbGVhc2VkIHRvICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCBpcyBpbiB1c2UgYnkgdGhlIHNlcnZlciBvciByZWxheSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTAwMworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgd2FzIHByZXZpb3VzbHkgZGVjbGluZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwMTkgcmZjMjEzMS5jOjEyMTEKK21zZ2lkICJubyB1bmlxdWUtaWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjExMDYKK21zZ2lkICJ3cm9uZyBzZXJ2ZXItSUQiCittc2dzdHIgIiIKKworIyBPSworIzogcmZjMjEzMS5jOjExMjUKK21zZ2lkICJ3cm9uZyBhZGRyZXNzIgorbXNnc3RyICJhbGFtYXQgc2FsYWgiCisKKyMgT0sKKyM6IHJmYzIxMzEuYzoxMTQzIHJmYzMzMTUuYzo5NjkKK21zZ2lkICJsZWFzZSBub3QgZm91bmQiCittc2dzdHIgImxlYXNlIHRhayBkaXRlbXVrYW4iCisKKyMgT0sKKyM6IHJmYzIxMzEuYzoxMTc2Cittc2dpZCAiYWRkcmVzcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICJhbGFtYXQgdGFrIHRlcnNlZGlhIgorCisjIE9LCisjOiByZmMyMTMxLmM6MTE4NworbXNnaWQgInN0YXRpYyBsZWFzZSBhdmFpbGFibGUiCittc2dzdHIgImxlYXNlIHN0YXRpayB0YWsgdGVyc2VkaWEiCisKKyMgT0sKKyM6IHJmYzIxMzEuYzoxMTkxCittc2dpZCAiYWRkcmVzcyByZXNlcnZlZCIKK21zZ3N0ciAiYWxhbWF0IHRlbGFoIGRpcGVzYW4iCisKKyM6IHJmYzIxMzEuYzoxMTk5CisjLCBjLWZvcm1hdAorbXNnaWQgImFiYW5kb25pbmcgbGVhc2UgdG8gJXMgb2YgJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYm9vdGZpbGUgbmFtZTogJXMiCittc2dzdHIgIiIKKworIyBPSworIzogcmZjMjEzMS5jOjE3MjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IHNlcnZlciBuYW1lOiAlcyIKK21zZ3N0ciAiREJ1cyBlcnJvcjogJXMiCisKKyMgT0sKKyM6IHJmYzIxMzEuYzoxNzI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSBuZXh0IHNlcnZlcjogJXMiCittc2dzdHIgIkRCdXMgZXJyb3I6ICVzIgorCisjOiByZmMyMTMxLmM6MTczMgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBicm9hZGNhc3QgcmVzcG9uc2UiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE3OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHNlbmQgREhDUC9CT09UUCBvcHRpb24gJWQ6IG5vIHNwYWNlIGxlZnQgaW4gcGFja2V0IgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoyMDM2Cittc2dpZCAiUFhFIG1lbnUgdG9vIGxhcmdlIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IHJmYzIxMzEuYzoyMTczIHJmYzMzMTUuYzoxNDU2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSByZXF1ZXN0ZWQgb3B0aW9uczogJXMiCittc2dzdHIgInBpbGloYW4tcGlsaWhhbiBzYWF0IGtvbXBpbGFzaTogJXMiCisKKyM6IHJmYzIxMzEuYzoyNDUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzZW5kIFJGQzM5MjUgb3B0aW9uOiB0b28gbWFueSBvcHRpb25zIGZvciBlbnRlcnByaXNlIG51bWJlciAlZCIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBuZXRsaW5rLmM6NzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgbmV0bGluayBzb2NrZXQ6ICVzIgorbXNnc3RyICJ0aWRhayBiaXNhIG1lbS1iaW5kIG5ldGxpbmsgc29ja2V0OiAlcyIKKworIyBPSworIzogbmV0bGluay5jOjM0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibmV0bGluayByZXR1cm5zIGVycm9yOiAlcyIKK21zZ3N0ciAiREJ1cyBlcnJvcjogJXMiCisKKyMgT0sKKyM6IGRidXMuYzoxNzEKK21zZ2lkICJhdHRlbXB0IHRvIHNldCBhbiBJUHY2IHNlcnZlciBhZGRyZXNzIHZpYSBEQnVzIC0gbm8gSVB2NiBzdXBwb3J0IgorbXNnc3RyICJtZW5jb2JhIG1lbnlldGVsIHNlYnVhaCBhbGFtYXQgSVB2NiBzZXJ2ZXIgbGV3YXQgREJ1cyAtIHRpZGFrIGFkYSBkdWt1bmdhbiB1bnR1ayBJUHY2IgorCisjIE9LCisjOiBkYnVzLmM6NTAwCittc2dpZCAic2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzIGZyb20gREJ1cyIKK21zZ3N0ciAibWVueWV0ZWwgc2VydmVyLXNlcnZlciBkaSBhdGFzIGRlbmdhbiBEQnVzIgorCisjIE9LCisjOiBkYnVzLmM6NTQ3Cittc2dpZCAiY291bGQgbm90IHJlZ2lzdGVyIGEgREJ1cyBtZXNzYWdlIGhhbmRsZXIiCittc2dzdHIgInRpZGFrIGJpc2EgbWVuZGFmdGFyIHNlYnVhaCBEQnVzIG1lc3NhZ2UgaGFuZGxlciIKKworIyBPSworIzogYnBmLmM6MjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUCBCUEYgc29ja2V0OiAlcyIKK21zZ3N0ciAidGlkYWsgZGFwYXQgbWVtYnVhdCBzb2NrZXQgREhDUCBCUEY6ICVzIgorCisjIE9LCisjOiBicGYuYzoyOTEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVxdWVzdCBmb3IgdW5zdXBwb3J0ZWQgaGFyZHdhcmUgdHlwZSAoJWQpIHJlY2VpdmVkIG9uICVzIgorbXNnc3RyICJwZXJtaW50YWFuIERIQ1AgdW50dWsgdGlwZSBoYXJkd2FyZSB5YW5nIHRpZGFrIGRpZHVrdW5nICglZCkgZGl0ZXJpbWEgcGFkYSAlcyIKKworIyBPSworIzogYnBmLmM6Mzc2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIFBGX1JPVVRFIHNvY2tldDogJXMiCittc2dzdHIgInRpZGFrIGJpc2EgbWVtYnVhdCBzb2NrZXQgREhDUDogJXMiCisKKyM6IGJwZi5jOjM5NworbXNnaWQgIlVua25vd24gcHJvdG9jb2wgdmVyc2lvbiBmcm9tIHJvdXRlIHNvY2tldCIKK21zZ3N0ciAiIgorCisjOiBoZWxwZXIuYzoxNTMKK21zZ2lkICJsZWFzZSgpIGZ1bmN0aW9uIG1pc3NpbmcgaW4gTHVhIHNjcmlwdCIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6MzA5Cittc2dpZCAidW5hYmxlIHRvIGdldCBmcmVlIHBvcnQgZm9yIFRGVFAiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjMyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCByZXF1ZXN0IGZyb20gJXMiCittc2dzdHIgIiIKKworIyBPSworIzogdGZ0cC5jOjQzOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBub3QgZm91bmQiCittc2dzdHIgImxlYXNlIHRhayBkaXRlbXVrYW4iCisKKyM6IHRmdHAuYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgJWQgJXMgcmVjZWl2ZWQgZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjIE9LCisjOiB0ZnRwLmM6NTkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgc2VuZGluZyAlcyB0byAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVtYmFjYSAlczogJXMiCisKKyM6IHRmdHAuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VudCAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBsb2cuYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAib3ZlcmZsb3c6ICVkIGxvZyBlbnRyaWVzIGxvc3QiCittc2dzdHIgIiIKKworIzogbG9nLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IGxvZy5jOjQ3MgorbXNnaWQgIkZBSUxFRCB0byBzdGFydCB1cCIKK21zZ3N0ciAiR0FHQUwgdW50dWsgbWVtdWxhaSIKKworIzogY29ubnRyYWNrLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ubnRyYWNrIGNvbm5lY3Rpb24gbWFyayByZXRyaWV2YWwgZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBkaGNwNi5jOjU5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1B2NiBzb2NrZXQ6ICVzIgorbXNnc3RyICJ0aWRhayBiaXNhIG1lbWJ1YXQgc29ja2V0IERIQ1A6ICVzIgorCisjIE9LCisjOiBkaGNwNi5jOjgwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX1JFVVNFe0FERFJ8UE9SVH0gb24gREhDUHY2IHNvY2tldDogJXMiCittc2dzdHIgImdhZ2FsIG1lbnlldGVsIFNPX1JFVVNFQUREUiBwYWRhIHNvY2tldCBESENQOiAlcyIKKworIyBPSworIzogZGhjcDYuYzo5MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgREhDUHY2IHNlcnZlciBzb2NrZXQ6ICVzIgorbXNnc3RyICJnYWdhbCBtZW0tYmluZCBzb2NrZXQgc2VydmVyIERIQ1A6ICVzIgorCisjIE9LCisjOiByZmMzMzE1LmM6MTU3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJubyBhZGRyZXNzIHJhbmdlIGF2YWlsYWJsZSBmb3IgREhDUHY2IHJlcXVlc3QgZnJvbSByZWxheSBhdCAlcyIKK21zZ3N0ciAidGlkYWsgYWRhIGFsYW1hdCB5YW5nIGJpc2EgZGlwYWthaSB1bnR1ayBwZXJtaW50YWFuIERIQ1AgJXMgJXMiCisKKyMgT0sKKyM6IHJmYzMzMTUuYzoxNjYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQdjYgcmVxdWVzdCB2aWEgJXMiCittc2dzdHIgInRpZGFrIGFkYSBhbGFtYXQgeWFuZyBiaXNhIGRpcGFrYWkgdW50dWsgcGVybWludGFhbiBESENQICVzICVzIgorCisjIE9LCisjOiByZmMzMzE1LmM6Mjk3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSBhdmFpbGFibGUgREhDUHY2IHN1Ym5ldDogJXMvJWQiCittc2dzdHIgInRpZGFrIGFkYSBhbGFtYXQgeWFuZyBiaXNhIGRpcGFrYWkgdW50dWsgcGVybWludGFhbiBESENQICVzICVzIgorCisjIE9LCisjOiByZmMzMzE1LmM6Mzc5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSB2ZW5kb3IgY2xhc3M6ICV1IgorbXNnc3RyICJEQnVzIGVycm9yOiAlcyIKKworIyBPSworIzogcmZjMzMxNS5jOjQyNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXUgY2xpZW50IE1BQyBhZGRyZXNzOiAlcyIKK21zZ3N0ciAidGlkYWsgYWRhIGFudGFybXVrYSBkZW5nYW4gYWxhbWF0ICVzIgorCisjIE9LCisjOiByZmMzMzE1LmM6NjU5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHByZWZpeC1jbGFzcyAlZCIKK21zZ3N0ciAibGVhc2UgdGlkYWsgZGlrZXRhaHVpIgorCisjOiByZmMzMzE1LmM6NzkxIHJmYzMzMTUuYzo5MTMKK21zZ2lkICJzdWNjZXNzIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IHJmYzMzMTUuYzo4MDYgcmZjMzMxNS5jOjgwOCByZmMzMzE1LmM6OTIxIHJmYzMzMTUuYzo5MjMKKyMsIGZ1enp5Cittc2dpZCAibm8gYWRkcmVzc2VzIGF2YWlsYWJsZSIKK21zZ3N0ciAidGFrIGFkYSBhbGFtYXQgeWFuZyB0ZXJzZWRpYSIKKworIyBPSworIzogcmZjMzMxNS5jOjg2NQorIywgZnV6enkKK21zZ2lkICJhZGRyZXNzIHVuYXZhaWxhYmxlIgorbXNnc3RyICJhbGFtYXQgdGFrIHRlcnNlZGlhIgorCisjOiByZmMzMzE1LmM6OTAwCittc2dpZCAibm90IG9uIGxpbmsiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjk3MyByZmMzMzE1LmM6MTE1MSByZmMzMzE1LmM6MTIyOAorbXNnaWQgIm5vIGJpbmRpbmcgZm91bmQiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjEwMTEKK21zZ2lkICJkZXByZWNhdGVkIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IHJmYzMzMTUuYzoxMDE2CisjLCBmdXp6eQorbXNnaWQgImFkZHJlc3MgaW52YWxpZCIKK21zZ3N0ciAiYWxhbWF0IHRlbGFoIGRpZ3VuYWthbiIKKworIzogcmZjMzMxNS5jOjEwNjEKK21zZ2lkICJjb25maXJtIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjIE9LCisjOiByZmMzMzE1LmM6MTA3MgorIywgZnV6enkKK21zZ2lkICJhbGwgYWRkcmVzc2VzIHN0aWxsIG9uIGxpbmsiCittc2dzdHIgImtlc2FsYWhhbiBuYW1hIHBhZGEgJXMgYmFyaXMgJWQiCisKKyM6IHJmYzMzMTUuYzoxMTYwCittc2dpZCAicmVsZWFzZSByZWNlaXZlZCIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6MjA4MAorbXNnaWQgIkNhbm5vdCBtdWx0aWNhc3QgdG8gREhDUHY2IHNlcnZlciB3aXRob3V0IGNvcnJlY3QgaW50ZXJmYWNlIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIklnbm9yaW5nIGR1cGxpY2F0ZSBkaGNwLW9wdGlvbiAlZCIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICIldSB0YWdzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgbW9yZSB0aGFuIG9uZSBhZGRyZXNzIGluIGhvc3RzZmlsZSwgdXNpbmcgJXMgZm9yIERIQ1AiCittc2dzdHIgIiIKKworIyBPSworIzogZGhjcC1jb21tb24uYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgKCVzKSBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUiCittc2dzdHIgImFsYW1hdCBJUCBrZW1iYXIgJXMgKCVzKSBkYWxhbSBkaXJla3RpZiBkaGNwLWNvbmZpZyIKKworIyBPSworIzogZGhjcC1jb21tb24uYzo0OTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgU09fQklORFRPREVWSUNFIG9uIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVueWV0ZWwgU09fUkVVU0VBRERSIHBhZGEgc29ja2V0IERIQ1A6ICVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJLbm93biBESENQIG9wdGlvbnM6XG4iCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiS25vd24gREhDUHY2IG9wdGlvbnM6XG4iCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4MjMKK21zZ2lkICIsIHByZWZpeCBkZXByZWNhdGVkIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiwgbGVhc2UgdGltZSAiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgc3RhdGVsZXNzIG9uICVzJS4wcyUuMHMlcyIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBkaGNwLWNvbW1vbi5jOjg3MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXMsIHN0YXRpYyBsZWFzZXMgb25seSBvbiAlLjBzJXMlcyUuMHMiCittc2dzdHIgIkRIQ1AsIGxlYXNlIHN0YXRpYyBwYWRhICUuMHMlcywgd2FrdHUgbGVhc2UgJXMiCisKKyM6IGRoY3AtY29tbW9uLmM6ODcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBwcm94eSBvbiBzdWJuZXQgJS4wcyVzJS4wcyUuMHMiCittc2dzdHIgIiIKKworIyBPSworIzogZGhjcC1jb21tb24uYzo4NzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzLCBJUCByYW5nZSAlcyAtLSAlcyVzJS4wcyIKK21zZ3N0ciAiREhDUCwgamFuZ2thdW4gSVAgJXMgLS0gJXMsIHdha3R1IGxlYXNlICVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjg4NgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQdjQtZGVyaXZlZCBJUHY2IG5hbWVzIG9uICVzJXMiCittc2dzdHIgIiIKKworIyBPSworIzogZGhjcC1jb21tb24uYzo4ODkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInJvdXRlciBhZHZlcnRpc2VtZW50IG9uICVzJXMiCittc2dzdHIgIkRIQ1AsIGxlYXNlIHN0YXRpYyBwYWRhICUuMHMlcywgd2FrdHUgbGVhc2UgJXMiCisKKyM6IGRoY3AtY29tbW9uLmM6OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVsYXkgZnJvbSAlcyB0byAlcyB2aWEgJXMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByZWxheSBmcm9tICVzIHRvICVzIgorbXNnc3RyICIiCisKKyMgT0sKKyM6IHJhZHYuYzo5OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBJQ01QdjYgc29ja2V0OiAlcyIKK21zZ3N0ciAidGlkYWsgYmlzYSBtZW1idWF0IHNvY2tldCBESENQOiAlcyIKKworIzogYXV0aC5jOjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB6b25lIHRyYW5zZmVyIHJlcXVlc3QgZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjIE9LCisjOiBpcHNldC5jOjk1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluZCBrZXJuZWwgdmVyc2lvbjogJXMiCittc2dzdHIgImdhZ2FsIG1lbS1iaW5kIHNvY2tldCBzZXJ2ZXIgREhDUDogJXMiCisKKyMgT0sKKyM6IGlwc2V0LmM6MTE0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIElQc2V0IGNvbnRyb2wgc29ja2V0OiAlcyIKK21zZ3N0ciAiZ2FnYWwgbWVtYnVhdCBzb2NrZXQ6ICVzICIKKworIzogYmxvY2tkYXRhLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRE5TU0VDIG1lbW9yeSBpbiB1c2UgJXUsIG1heCAldSwgYWxsb2NhdGVkICV1IgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjc2Cittc2dpZCAiZXJyb3I6IGZpbGxfYWRkciBtaXNzdXNlZCIKK21zZ3N0ciAiIgorCisjIE9LCisjOiB0YWJsZXMuYzoxMDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhY2Nlc3MgcGYgZGV2aWNlczogJXMiCittc2dzdHIgImdhZ2FsIG1lbmdha3NlcyAlczogJXMiCisKKyMgT0sKKyM6IHRhYmxlcy5jOjExOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogbm8gb3BlbmVkIHBmIGRldmljZXMgJXMiCittc2dzdHIgIm1lbmdndW5ha2FuIGFsYW1hdCBsb2thbCBzYWphIHVudHVrICVzICVzIgorCisjIE9LCisjOiB0YWJsZXMuYzoxMjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImVycm9yOiBjYW5ub3QgdXNlIHRhYmxlIG5hbWUgJXMiCittc2dzdHIgInRpZGFrIGJpc2EgbWVuZGFwYXRrYW4gaG9zdC1uYW1lOiAlcyIKKworIzogdGFibGVzLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yOiBjYW5ub3Qgc3RybGNweSB0YWJsZSBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBwZnJfYWRkX3RhYmxlczogJXMoJWQpIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjE0NworbXNnaWQgImluZm86IHRhYmxlIGNyZWF0ZWQiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IERJT0NSJXNBRERSUzogJXMiCittc2dzdHIgIiIKKworIyBPSworIzogdGFibGVzLmM6MTYyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlZCBhZGRyZXNzZXMgJXMiCittc2dzdHIgIm1lbWJhY2EgJXMgLSAlZCBhbGFtYXQiCisKKyMgT0sKKyN+IG1zZ2lkICJkdXBsaWNhdGUgSVAgYWRkcmVzcyAlcyBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUuIgorI34gbXNnc3RyICJhbGFtYXQgSVAga2VtYmFyICVzIGRhbGFtIGRpcmVrdGlmIGRoY3AtY29uZmlnIgorCisjIE9LCisjLCBmdXp6eQorI34gbXNnaWQgIlNwZWNpZnkgcGF0aCB0byBMdWEgc2NyaXB0IChubyBkZWZhdWx0KS4iCisjfiBtc2dzdHIgIlNlYnV0a2FuIHBhdGggZmlsZSBQSUQuIChkZWZhdWx0ICVzKS4iCisKKyMgT0sKKyN+IG1zZ2lkICJUWFQgcmVjb3JkIHN0cmluZyB0b28gbG9uZyIKKyN+IG1zZ3N0ciAic3RyaW5nIHJla29yZCBUWFQgdGVybGFsdSBwYW5qYW5nIgorCisjIE9LCisjfiBtc2dpZCAiZmFpbGVkIHRvIHNldCBJUFY2IG9wdGlvbnMgb24gbGlzdGVuaW5nIHNvY2tldDogJXMiCisjfiBtc2dzdHIgImdhZ2FsIG1lbnlldGVsIElQVjYgcGFkYSBzb2NrZXQ6ICVzIgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIGJpbmQgbGlzdGVuaW5nIHNvY2tldCBmb3IgJXM6ICVzIgorI34gbXNnc3RyICJnYWdhbCBtZW0tYmluZCBzb2NrZXQgdW50dWsgbWVuZGVuZ2Fya2FuICVzOiAlcyIKKworIyBPSworI34gbXNnaWQgIm11c3Qgc2V0IGV4YWN0bHkgb25lIGludGVyZmFjZSBvbiBicm9rZW4gc3lzdGVtcyB3aXRob3V0IElQX1JFQ1ZJRiIKKyN+IG1zZ3N0ciAiaGFydXMgbWVueWV0ZWwgc2F0dSBhbnRhcm11a2Egc2FqYSBwYWRhIHNpc3RlbSB5YW5nIHRpZGFrIGJlbmFyIGRlbmdhbiBJUF9SRUNWSUYiCisKKyMgT0sKKyN+IG1zZ2lkICJJZ25vcmluZyBESENQIGxlYXNlIGZvciAlcyBiZWNhdXNlIGl0IGhhcyBhbiBpbGxlZ2FsIGRvbWFpbiBwYXJ0IgorI34gbXNnc3RyICJNZW5nYWJhaWthbiBsZWFzZSBESENQIHVudHVrICVzIHNlYmFiIHRlcmRhcGF0IGJhZ2lhbiBkb21haW4geWFuZyB0aWRhayBzYWgiCisKKyMgT0sKKyN+IG1zZ2lkICJJU0MgZGhjcGQgaW50ZWdyYXRpb24gbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfSVNDX1JFQURFUiBpbiBzcmMvY29uZmlnLmgiCisjfiBtc2dzdHIgIkludGVncmFzaSBkZW5nYW4gZGhjcGQgSVNDIHRpZGFrIHRlcnNlZGlhOiBhdHVyIEhBVkVfSVNDX1JFQURFUiBkYWxhbSBzcmMvY29uZmlnLmgiCisKKyMgT0sKKyMsIGZ1enp5CisjfiBtc2dpZCAiaWxsZWdhbCBkb21haW4gJXMgaW4gZGhjcC1jb25maWcgZGlyZWN0aXZlLiIKKyN+IG1zZ3N0ciAiYWxhbWF0IElQIGtlbWJhciAlcyBkYWxhbSBkaXJla3RpZiBkaGNwLWNvbmZpZyIKKworIyBPSworI34gbXNnaWQgInJ1bm5pbmcgYXMgcm9vdCIKKyN+IG1zZ3N0ciAiYmVyamFsYW4gbWVuZ2d1bmFrYW4gcm9vdCIKKworIyBPSworIywgZnV6enkKKyN+IG1zZ2lkICJyZWFkICVzIC0gJWQgaG9zdHMiCisjfiBtc2dzdHIgIm1lbWJhY2EgJXMgLSAlZCBhbGFtYXQiCisKKyMgT0sKKyN+IG1zZ2lkICJkb21haW5zIgorI34gbXNnc3RyICJkb21haW4tZG9tYWluIgorCisjIE9LCisjfiBtc2dpZCAiSWdub3JpbmcgREhDUCBob3N0IG5hbWUgJXMgYmVjYXVzZSBpdCBoYXMgYW4gaWxsZWdhbCBkb21haW4gcGFydCIKKyN+IG1zZ3N0ciAiTWVuZ2FiYWlrYW4gbmFtYSBob3N0IERIQ1AgJXMgc2ViYWIgbWVtaWxpa2kgYmFnaWFuIGRvbWFpbiB5YW5nIHRpZGFrIHNhaCIKKworIyBPSworI34gbXNnaWQgIkRpc3BsYXkgdGhpcyBtZXNzYWdlLiIKKyN+IG1zZ3N0ciAiTWVuYW1waWxrYW4gcGVzYW4gaW5pLiIKKworIyBPSworI34gbXNnaWQgImZhaWxlZCB0byByZWFkICVzOiAlbSIKKyN+IG1zZ3N0ciAiZ2FnYWwgbWVtYmFjYSAlczogJW0iCisKKyMgT0sKKyN+IG1zZ2lkICJmYWlsZWQgdG8gcmVhZCAlczolbSIKKyN+IG1zZ3N0ciAiZ2FnYWwgbWVtYmFjYSAlczolbSIKKworIyBPSworI34gbXNnaWQgIk1vcmUgdGhhbiBvbmUgdmVuZG9yIGNsYXNzIG1hdGNoZXMsIHVzaW5nICVzIgorI34gbXNnc3RyICJMZWJpaCBkYXJpIHNhdHUga2VsYXMgdmVuZG9yIHlhbmcgc2VzdWFpLCBtZW5nZ3VuYWthbiAlcyIKKworIyBPSworI34gbXNnaWQgImZvcndhcmRpbmcgdGFibGUgb3ZlcmZsb3c6IGNoZWNrIGZvciBzZXJ2ZXIgbG9vcHMuIgorI34gbXNnc3RyICJtZW5lcnVza2FuIHRhYmVsIG92ZXJmbG93OiBtZW1lcmlrc2EgYXBha2FoIHRlcmphZGkgbG9vcCBzZXJ2ZXIuIgorCisjIE9LCisjfiBtc2dpZCAibmVzdGVkIGluY2x1ZGVzIG5vdCBhbGxvd2VkIgorI34gbXNnc3RyICJpbmNsdWRlcyBiZXJzYXJhbmcgdGlkYWsgZGlpamlua2FuIgorCisjIE9LCisjfiBtc2dpZCAiREhDUCwgJXMgd2lsbCBiZSB3cml0dGVuIGV2ZXJ5ICVzIgorI34gbXNnc3RyICJESENQLCAlcyBha2FuIGRpdHVsaXMgc2V0aWFwICVzIgorCisjIE9LCisjfiBtc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQIHBhY2tldCBzb2NrZXQ6ICVzLiBJcyBDT05GSUdfUEFDS0VUIGVuYWJsZWQgaW4geW91ciBrZXJuZWw/IgorI34gbXNnc3RyICJ0aWRhayBkYXBhdCBtZW1idWF0IHNvY2tldCBwYWNrZXQgREhDUDogJXMuIEFwYWthaCBDT05GSUdfUEFDS0VUIGRpbXVuZ2tpbmthbiBwYWRhIGtlcm5lbD8iCmRpZmYgLS1naXQgYS9wby9pdC5wbyBiL3BvL2l0LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYjU0NzUKLS0tIC9kZXYvbnVsbAorKysgYi9wby9pdC5wbwpAQCAtMCwwICsxLDIwMzIgQEAKKyMgSXRhbGlhbiB0cmFuc2xhdGlvbnMgZm9yIGRuc21hc3EgcGFja2FnZS4KKyMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyMgU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4sIDIwMDYuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBkbnNtYXNxIDIuMzJcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDktMDYtMTggMTI6MjQrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDYtMDUtMjIgMTE6MDkrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az5cbiIKKyJMYW5ndWFnZS1UZWFtOiBJdGFsaWFuIDx0cEBsaXN0cy5saW51eC5pdD5cbiIKKyJMYW5ndWFnZTogaXRcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1BU0NJSVxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworIzogY2FjaGUuYzo1MDUKK21zZ2lkICJJbnRlcm5hbCBlcnJvciBpbiBjYWNoZS4iCittc2dzdHIgIiIKKworIzogY2FjaGUuYzo5MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgbmFtZXMgZnJvbSAlczogJXMiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzo5MzQgZGhjcC5jOjgyMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgYWRkcmVzcyBhdCAlcyBsaW5lICVkIgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6OTg1IGRoY3AuYzo4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG5hbWUgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjk5MiBkaGNwLmM6OTExCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgJXMgLSAlZCBhZGRyZXNzZXMiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMTAwCittc2dpZCAiY2xlYXJlZCBjYWNoZSIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjExMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gSVB2NCBhZGRyZXNzIGZvdW5kIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjEyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBDTkFNRSwgbm90IGdpdmluZyBpdCB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjEyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGdpdmluZyBuYW1lICVzIHRvIHRoZSBESENQIGxlYXNlIG9mICVzIGJlY2F1c2UgdGhlIG5hbWUgZXhpc3RzIGluICVzIHdpdGggYWRkcmVzcyAlcyIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjEzNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZSAlbHUiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMzY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhY2hlIHNpemUgJWQsICVkLyVkIGNhY2hlIGluc2VydGlvbnMgcmUtdXNlZCB1bmV4cGlyZWQgY2FjaGUgZW50cmllcy4iCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMzY5CisjLCBjLWZvcm1hdAorbXNnaWQgInF1ZXJpZXMgZm9yd2FyZGVkICV1LCBxdWVyaWVzIGFuc3dlcmVkIGxvY2FsbHkgJXUiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMzcyCisjLCBjLWZvcm1hdAorbXNnaWQgInF1ZXJpZXMgZm9yIGF1dGhvcml0YXRpdmUgem9uZXMgJXUiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMzk4CisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZlciAlcyMlZDogcXVlcmllcyBzZW50ICV1LCByZXRyaWVkIG9yIGZhaWxlZCAldSIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNlZWQgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yOiAlcyIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6MjA1Cittc2dpZCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6MjQzIG9wdGlvbi5jOjU3OQorbXNnaWQgImNvdWxkIG5vdCBnZXQgbWVtb3J5IgorbXNnc3RyICIiCisKKyM6IHV0aWwuYzoyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBwaXBlOiAlcyIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhbGxvY2F0ZSAlZCBieXRlcyIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgImluZmluaXRlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxOAorbXNnaWQgIlNwZWNpZnkgbG9jYWwgYWRkcmVzcyhlcykgdG8gbGlzdGVuIG9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTkKK21zZ2lkICJSZXR1cm4gaXBhZGRyIGZvciBhbGwgaG9zdHMgaW4gc3BlY2lmaWVkIGRvbWFpbnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMyMAorbXNnaWQgIkZha2UgcmV2ZXJzZSBsb29rdXBzIGZvciBSRkMxOTE4IHByaXZhdGUgYWRkcmVzcyByYW5nZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMyMQorbXNnaWQgIlRyZWF0IGlwYWRkciBhcyBOWERPTUFJTiAoZGVmZWF0cyBWZXJpc2lnbiB3aWxkY2FyZCkuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMyMgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHRoZSBzaXplIG9mIHRoZSBjYWNoZSBpbiBlbnRyaWVzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMyMworIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGNvbmZpZ3VyYXRpb24gZmlsZSAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMjQKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kOiBydW4gaW4gZGVidWcgbW9kZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzI1Cittc2dpZCAiRG8gTk9UIGZvcndhcmQgcXVlcmllcyB3aXRoIG5vIGRvbWFpbiBwYXJ0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMjYKK21zZ2lkICJSZXR1cm4gc2VsZi1wb2ludGluZyBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzI3Cittc2dpZCAiRXhwYW5kIHNpbXBsZSBuYW1lcyBpbiAvZXRjL2hvc3RzIHdpdGggZG9tYWluLXN1ZmZpeC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzI4Cittc2dpZCAiRG9uJ3QgZm9yd2FyZCBzcHVyaW91cyBETlMgcmVxdWVzdHMgZnJvbSBXaW5kb3dzIGhvc3RzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMjkKK21zZ2lkICJFbmFibGUgREhDUCBpbiB0aGUgcmFuZ2UgZ2l2ZW4gd2l0aCBsZWFzZSBkdXJhdGlvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZSB0byB0aGlzIGdyb3VwIGFmdGVyIHN0YXJ0dXAgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzMxCittc2dpZCAiU2V0IGFkZHJlc3Mgb3IgaG9zdG5hbWUgZm9yIGEgc3BlY2lmaWVkIG1hY2hpbmUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMzMgorbXNnaWQgIlJlYWQgREhDUCBob3N0IHNwZWNzIGZyb20gZmlsZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzMzCittc2dpZCAiUmVhZCBESENQIG9wdGlvbiBzcGVjcyBmcm9tIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMzNAorbXNnaWQgIkV2YWx1YXRlIGNvbmRpdGlvbmFsIHRhZyBleHByZXNzaW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG8gTk9UIGxvYWQgJXMgZmlsZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgYSBob3N0cyBmaWxlIHRvIGJlIHJlYWQgaW4gYWRkaXRpb24gdG8gJXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMzNworbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzM4Cittc2dpZCAiU3BlY2lmeSBpbnRlcmZhY2UocykgTk9UIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzM5Cittc2dpZCAiTWFwIERIQ1AgdXNlciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM0MAorbXNnaWQgIk1hcCBSRkMzMDQ2IGNpcmN1aXQtaWQgdG8gdGFnLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDEKK21zZ2lkICJNYXAgUkZDMzA0NiByZW1vdGUtaWQgdG8gdGFnLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDIKK21zZ2lkICJNYXAgUkZDMzk5MyBzdWJzY3JpYmVyLWlkIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzQzCittc2dpZCAiRG9uJ3QgZG8gREhDUCBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDQKK21zZ2lkICJGb3JjZSBicm9hZGNhc3QgcmVwbGllcyBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDUKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kLCBkbyBOT1QgcnVuIGluIGRlYnVnIG1vZGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM0NgorbXNnaWQgIkFzc3VtZSB3ZSBhcmUgdGhlIG9ubHkgREhDUCBzZXJ2ZXIgb24gdGhlIGxvY2FsIG5ldHdvcmsuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHdoZXJlIHRvIHN0b3JlIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM0OAorbXNnaWQgIlJldHVybiBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzQ5Cittc2dpZCAiU3BlY2lmeSBhbiBNWCByZWNvcmQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1MAorbXNnaWQgIlNwZWNpZnkgQk9PVFAgb3B0aW9ucyB0byBESENQIHNlcnZlci4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvIE5PVCBwb2xsICVzIGZpbGUsIHJlbG9hZCBvbmx5IG9uIFNJR0hVUC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzUyCittc2dpZCAiRG8gTk9UIGNhY2hlIGZhaWxlZCBzZWFyY2ggcmVzdWx0cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSBuYW1lc2VydmVycyBzdHJpY3RseSBpbiB0aGUgb3JkZXIgZ2l2ZW4gaW4gJXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1NAorbXNnaWQgIlNwZWNpZnkgb3B0aW9ucyB0byBiZSBzZW50IHRvIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzU1Cittc2dpZCAiREhDUCBvcHRpb24gc2VudCBldmVuIGlmIHRoZSBjbGllbnQgZG9lcyBub3QgcmVxdWVzdCBpdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzU2Cittc2dpZCAiU3BlY2lmeSBwb3J0IHRvIGxpc3RlbiBmb3IgRE5TIHJlcXVlc3RzIG9uIChkZWZhdWx0cyB0byA1MykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIHN1cHBvcnRlZCBVRFAgcGFja2V0IHNpemUgZm9yIEVETlMuMCAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNTgKK21zZ2lkICJMb2cgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1OQorbXNnaWQgIkZvcmNlIHRoZSBvcmlnaW5hdGluZyBwb3J0IGZvciB1cHN0cmVhbSBETlMgcXVlcmllcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzYwCittc2dpZCAiRG8gTk9UIHJlYWQgcmVzb2x2LmNvbmYuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggdG8gcmVzb2x2LmNvbmYgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzYyCittc2dpZCAiU3BlY2lmeSBwYXRoIHRvIGZpbGUgd2l0aCBzZXJ2ZXI9IG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzYzCittc2dpZCAiU3BlY2lmeSBhZGRyZXNzKGVzKSBvZiB1cHN0cmVhbSBzZXJ2ZXJzIHdpdGggb3B0aW9uYWwgZG9tYWlucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzY0Cittc2dpZCAiU3BlY2lmeSBhZGRyZXNzIG9mIHVwc3RyZWFtIHNlcnZlcnMgZm9yIHJldmVyc2UgYWRkcmVzcyBxdWVyaWVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2NQorbXNnaWQgIk5ldmVyIGZvcndhcmQgcXVlcmllcyB0byBzcGVjaWZpZWQgZG9tYWlucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzY2Cittc2dpZCAiU3BlY2lmeSB0aGUgZG9tYWluIHRvIGJlIGFzc2lnbmVkIGluIERIQ1AgbGVhc2VzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNjcKK21zZ2lkICJTcGVjaWZ5IGRlZmF1bHQgdGFyZ2V0IGluIGFuIE1YIHJlY29yZC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzY4Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgcmVwbGllcyBmcm9tIC9ldGMvaG9zdHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2OQorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG5lZ2F0aXZlIGNhY2hpbmcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3MAorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG1heGltdW0gVFRMIHRvIHNlbmQgdG8gY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZSB0byB0aGlzIHVzZXIgYWZ0ZXIgc3RhcnR1cC4gKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzcyCittc2dpZCAiTWFwIERIQ1AgdmVuZG9yIGNsYXNzIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzczCittc2dpZCAiRGlzcGxheSBkbnNtYXNxIHZlcnNpb24gYW5kIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzc0Cittc2dpZCAiVHJhbnNsYXRlIElQdjQgYWRkcmVzc2VzIGZyb20gdXBzdHJlYW0gc2VydmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzc1Cittc2dpZCAiU3BlY2lmeSBhIFNSViByZWNvcmQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3NgorbXNnaWQgIkRpc3BsYXkgdGhpcyBtZXNzYWdlLiBVc2UgLS1oZWxwIGRoY3AgZm9yIGtub3duIERIQ1Agb3B0aW9ucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgcGF0aCBvZiBQSUQgZmlsZSAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBtYXhpbXVtIG51bWJlciBvZiBESENQIGxlYXNlcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNzkKK21zZ2lkICJBbnN3ZXIgRE5TIHF1ZXJpZXMgYmFzZWQgb24gdGhlIGludGVyZmFjZSBhIHF1ZXJ5IHdhcyBzZW50IHRvLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODAKK21zZ2lkICJTcGVjaWZ5IFRYVCBETlMgcmVjb3JkLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODEKK21zZ2lkICJTcGVjaWZ5IFBUUiBETlMgcmVjb3JkLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODIKK21zZ2lkICJHaXZlIEROUyBuYW1lIHRvIElQdjQgYWRkcmVzcyBvZiBpbnRlcmZhY2UuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4MworbXNnaWQgIkJpbmQgb25seSB0byBpbnRlcmZhY2VzIGluIHVzZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYWQgREhDUCBzdGF0aWMgaG9zdCBpbmZvcm1hdGlvbiBmcm9tICVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODUKK21zZ2lkICJFbmFibGUgdGhlIERCdXMgaW50ZXJmYWNlIGZvciBzZXR0aW5nIHVwc3RyZWFtIHNlcnZlcnMsIGV0Yy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg2Cittc2dpZCAiRG8gbm90IHByb3ZpZGUgREhDUCBvbiB0aGlzIGludGVyZmFjZSwgb25seSBwcm92aWRlIEROUy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg3Cittc2dpZCAiRW5hYmxlIGR5bmFtaWMgYWRkcmVzcyBhbGxvY2F0aW9uIGZvciBib290cC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg4Cittc2dpZCAiTWFwIE1BQyBhZGRyZXNzICh3aXRoIHdpbGRjYXJkcykgdG8gb3B0aW9uIHNldC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg5Cittc2dpZCAiVHJlYXQgREhDUCByZXF1ZXN0cyBvbiBhbGlhc2VzIGFzIGFycml2aW5nIGZyb20gaW50ZXJmYWNlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTAKK21zZ2lkICJEaXNhYmxlIElDTVAgZWNobyBhZGRyZXNzIGNoZWNraW5nIGluIHRoZSBESENQIHNlcnZlci4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzkxCittc2dpZCAiU2hlbGwgc2NyaXB0IHRvIHJ1biBvbiBESENQIGxlYXNlIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzkyCittc2dpZCAiTHVhIHNjcmlwdCB0byBydW4gb24gREhDUCBsZWFzZSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5MworbXNnaWQgIlJ1biBsZWFzZS1jaGFuZ2Ugc2NyaXB0cyBhcyB0aGlzIHVzZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5NAorbXNnaWQgIlJlYWQgY29uZmlndXJhdGlvbiBmcm9tIGFsbCB0aGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5NQorbXNnaWQgIkxvZyB0byB0aGlzIHN5c2xvZyBmYWNpbGl0eSBvciBmaWxlLiAoZGVmYXVsdHMgdG8gREFFTU9OKSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTYKK21zZ2lkICJEbyBub3QgdXNlIGxlYXNlZmlsZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzk3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRE5TIHF1ZXJpZXMuIChkZWZhdWx0cyB0byAlcykiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyIEROUyBjYWNoZSB3aGVuIHJlbG9hZGluZyAlcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzk5Cittc2dpZCAiSWdub3JlIGhvc3RuYW1lcyBwcm92aWRlZCBieSBESENQIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwMAorbXNnaWQgIkRvIE5PVCByZXVzZSBmaWxlbmFtZSBhbmQgc2VydmVyIGZpZWxkcyBmb3IgZXh0cmEgREhDUCBvcHRpb25zLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDEKK21zZ2lkICJFbmFibGUgaW50ZWdyYXRlZCByZWFkLW9ubHkgVEZUUCBzZXJ2ZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwMgorbXNnaWQgIkV4cG9ydCBmaWxlcyBieSBURlRQIG9ubHkgZnJvbSB0aGUgc3BlY2lmaWVkIHN1YnRyZWUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwMworbXNnaWQgIkFkZCBjbGllbnQgSVAgYWRkcmVzcyB0byB0ZnRwLXJvb3QuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwNAorbXNnaWQgIkFsbG93IGFjY2VzcyBvbmx5IHRvIGZpbGVzIG93bmVkIGJ5IHRoZSB1c2VyIHJ1bm5pbmcgZG5zbWFzcS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbm5jdXJyZW50IFRGVFAgdHJhbnNmZXJzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwNgorbXNnaWQgIkRpc2FibGUgdGhlIFRGVFAgYmxvY2tzaXplIGV4dGVuc2lvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA3Cittc2dpZCAiQ29udmVydCBURlRQIGZpbGVuYW1lcyB0byBsb3dlcmNhc2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA4Cittc2dpZCAiRXBoZW1lcmFsIHBvcnQgcmFuZ2UgZm9yIHVzZSBieSBURlRQIHRyYW5zZmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA5Cittc2dpZCAiRXh0cmEgbG9nZ2luZyBmb3IgREhDUC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDEwCittc2dpZCAiRW5hYmxlIGFzeW5jLiBsb2dnaW5nOyBvcHRpb25hbGx5IHNldCBxdWV1ZSBsZW5ndGguIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxMQorbXNnaWQgIlN0b3AgRE5TIHJlYmluZGluZy4gRmlsdGVyIHByaXZhdGUgSVAgcmFuZ2VzIHdoZW4gcmVzb2x2aW5nLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTIKK21zZ2lkICJBbGxvdyByZWJpbmRpbmcgb2YgMTI3LjAuMC4wLzgsIGZvciBSQkwgc2VydmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDEzCittc2dpZCAiSW5oaWJpdCBETlMtcmViaW5kIHByb3RlY3Rpb24gb24gdGhpcyBkb21haW4uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxNAorbXNnaWQgIkFsd2F5cyBwZXJmb3JtIEROUyBxdWVyaWVzIHRvIGFsbCBzZXJ2ZXJzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTUKK21zZ2lkICJTZXQgdGFnIGlmIGNsaWVudCBpbmNsdWRlcyBtYXRjaGluZyBvcHRpb24gaW4gcmVxdWVzdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE2Cittc2dpZCAiVXNlIGFsdGVybmF0aXZlIHBvcnRzIGZvciBESENQLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTcKK21zZ2lkICJTcGVjaWZ5IE5BUFRSIEROUyByZWNvcmQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxOAorbXNnaWQgIlNwZWNpZnkgbG93ZXN0IHBvcnQgYXZhaWxhYmxlIGZvciBETlMgcXVlcnkgdHJhbnNtaXNzaW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTkKK21zZ2lkICJVc2Ugb25seSBmdWxseSBxdWFsaWZpZWQgZG9tYWluIG5hbWVzIGZvciBESENQIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyMAorbXNnaWQgIkdlbmVyYXRlIGhvc3RuYW1lcyBiYXNlZCBvbiBNQUMgYWRkcmVzcyBmb3IgbmFtZWxlc3MgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDIxCittc2dpZCAiVXNlIHRoZXNlIERIQ1AgcmVsYXlzIGFzIGZ1bGwgcHJveGllcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDIyCittc2dpZCAiUmVsYXkgREhDUCByZXF1ZXN0cyB0byBhIHJlbW90ZSBzZXJ2ZXIiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDIzCittc2dpZCAiU3BlY2lmeSBhbGlhcyBuYW1lIGZvciBMT0NBTCBETlMgbmFtZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDI0Cittc2dpZCAiUHJvbXB0IHRvIHNlbmQgdG8gUFhFIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyNQorbXNnaWQgIkJvb3Qgc2VydmljZSBmb3IgUFhFIG1lbnUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyNgorbXNnaWQgIkNoZWNrIGNvbmZpZ3VyYXRpb24gc3ludGF4LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjcKK21zZ2lkICJBZGQgcmVxdWVzdG9yJ3MgTUFDIGFkZHJlc3MgdG8gZm9yd2FyZGVkIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjgKK21zZ2lkICJBZGQgcmVxdWVzdG9yJ3MgSVAgc3VibmV0IHRvIGZvcndhcmRlZCBETlMgcXVlcmllcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDI5Cittc2dpZCAiUHJveHkgRE5TU0VDIHZhbGlkYXRpb24gcmVzdWx0cyBmcm9tIHVwc3RyZWFtIG5hbWVzZXJ2ZXJzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzAKK21zZ2lkICJBdHRlbXB0IHRvIGFsbG9jYXRlIHNlcXVlbnRpYWwgSVAgYWRkcmVzc2VzIHRvIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDMxCittc2dpZCAiQ29weSBjb25uZWN0aW9uLXRyYWNrIG1hcmsgZnJvbSBxdWVyaWVzIHRvIHVwc3RyZWFtIGNvbm5lY3Rpb25zLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzIKK21zZ2lkICJBbGxvdyBESENQIGNsaWVudHMgdG8gZG8gdGhlaXIgb3duIERETlMgdXBkYXRlcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDMzCittc2dpZCAiU2VuZCByb3V0ZXItYWR2ZXJ0aXNlbWVudHMgZm9yIGludGVyZmFjZXMgZG9pbmcgREhDUHY2IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzNAorbXNnaWQgIlNwZWNpZnkgRFVJRF9FTi10eXBlIERIQ1B2NiBzZXJ2ZXIgRFVJRCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzUKK21zZ2lkICJTcGVjaWZ5IGhvc3QgKEEvQUFBQSBhbmQgUFRSKSByZWNvcmRzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzNgorbXNnaWQgIlNwZWNpZnkgYXJiaXRyYXJ5IEROUyByZXNvdXJjZSByZWNvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM3Cittc2dpZCAiQmluZCB0byBpbnRlcmZhY2VzIGluIHVzZSAtIGNoZWNrIGZvciBuZXcgaW50ZXJmYWNlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzgKK21zZ2lkICJFeHBvcnQgbG9jYWwgbmFtZXMgdG8gZ2xvYmFsIEROUyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzkKK21zZ2lkICJEb21haW4gdG8gZXhwb3J0IHRvIGdsb2JhbCBETlMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQwCittc2dpZCAiU2V0IFRUTCBmb3IgYXV0aG9yaXRhdGl2ZSByZXBsaWVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0MQorbXNnaWQgIlNldCBhdXRob3JpdGl2ZSB6b25lIGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0MgorbXNnaWQgIlNlY29uZGFyeSBhdXRob3JpdGF0aXZlIG5hbWVzZXJ2ZXJzIGZvciBmb3J3YXJkIGRvbWFpbnMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQzCittc2dpZCAiUGVlcnMgd2hpY2ggYXJlIGFsbG93ZWQgdG8gZG8gem9uZSB0cmFuc2ZlciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDQKK21zZ2lkICJTcGVjaWZ5IGlwc2V0cyB0byB3aGljaCBtYXRjaGluZyBkb21haW5zIHNob3VsZCBiZSBhZGRlZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDUKK21zZ2lkICJTcGVjaWZ5IGEgZG9tYWluIGFuZCBhZGRyZXNzIHJhbmdlIGZvciBzeW50aGVzaXNlZCBuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDYKK21zZ2lkICJBY3RpdmF0ZSBETlNTRUMgdmFsaWRhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDcKK21zZ2lkICJTcGVjaWZ5IHRydXN0IGFuY2hvciBrZXkgZGlnZXN0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDgKK21zZ2lkICJEaXNhYmxlIHVwc3RyZWFtIGNoZWNraW5nIGZvciBETlNTRUMgZGVidWdnaW5nLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDkKK21zZ2lkICJFbnN1cmUgYW5zd2VycyB3aXRob3V0IEROU1NFQyBhcmUgaW4gdW5zaWduZWQgem9uZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1MAorbXNnaWQgIkRvbid0IGNoZWNrIEROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyB1bnRpbCBmaXJzdCBjYWNoZS1yZWxvYWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDUyCittc2dpZCAiU3BlY2lmeSBESENQdjYgcHJlZml4IGNsYXNzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1NAorbXNnaWQgIlNldCBwcmlvcml0eSwgcmVzZW5kLWludGVydmFsIGFuZCByb3V0ZXItbGlmZXRpbWUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU1Cittc2dpZCAiRG8gbm90IGxvZyByb3V0aW5lIERIQ1AuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1NgorbXNnaWQgIkRvIG5vdCBsb2cgcm91dGluZSBESENQdjYuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1NworbXNnaWQgIkRvIG5vdCBsb2cgUkEuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1OAorbXNnaWQgIkFjY2VwdCBxdWVyaWVzIG9ubHkgZnJvbSBkaXJlY3RseS1jb25uZWN0ZWQgbmV0d29ya3MiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU5Cittc2dpZCAiRGV0ZWN0IGFuZCByZW1vdmUgRE5TIGZvcndhcmRpbmcgbG9vcHMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogZG5zbWFzcSBbb3B0aW9uc11cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIHNob3J0IG9wdGlvbnMgb25seSBvbiB0aGUgY29tbWFuZCBsaW5lLlxuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJWYWxpZCBvcHRpb25zIGFyZTpcbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo3MjIgb3B0aW9uLmM6NzI2Cittc2dpZCAiYmFkIHBvcnQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NzUzIG9wdGlvbi5jOjc4NQorbXNnaWQgImludGVyZmFjZSBiaW5kaW5nIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NzYyIG9wdGlvbi5jOjM0OTQKK21zZ2lkICJiYWQgaW50ZXJmYWNlIG5hbWUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NzkyCittc2dpZCAiYmFkIGFkZHJlc3MiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6OTc0Cittc2dpZCAidW5zdXBwb3J0ZWQgZW5jYXBzdWxhdGlvbiBmb3IgSVB2NiBvcHRpb24iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6OTg4Cittc2dpZCAiYmFkIGRoY3Atb3B0aW9uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjEwNTYKK21zZ2lkICJiYWQgSVAgYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMDU5IG9wdGlvbi5jOjExOTcgb3B0aW9uLmM6MjgxMgorbXNnaWQgImJhZCBJUHY2IGFkZHJlc3MiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTIyNCBvcHRpb24uYzoxMzE4Cittc2dpZCAiYmFkIGRvbWFpbiBpbiBkaGNwLW9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMzU2Cittc2dpZCAiZGhjcC1vcHRpb24gdG9vIGxvbmciCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTM2MworbXNnaWQgImlsbGVnYWwgZGhjcC1tYXRjaCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNDI1Cittc2dpZCAiaWxsZWdhbCByZXBlYXRlZCBmbGFnIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE0MzMKK21zZ2lkICJpbGxlZ2FsIHJlcGVhdGVkIGtleXdvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTQ5NSBvcHRpb24uYzo0MDkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhY2Nlc3MgZGlyZWN0b3J5ICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNTQxIHRmdHAuYzo0OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyAlczogJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTU4OAorbXNnaWQgInNldHRpbmcgbG9nIGZhY2lsaXR5IGlzIG5vdCBwb3NzaWJsZSB1bmRlciBBbmRyb2lkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE1OTcKK21zZ2lkICJiYWQgbG9nIGZhY2lsaXR5IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE2NTAKK21zZ2lkICJiYWQgTVggcHJlZmVyZW5jZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNjU1Cittc2dpZCAiYmFkIE1YIG5hbWUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTY2OQorbXNnaWQgImJhZCBNWCB0YXJnZXQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTY4MQorbXNnaWQgImNhbm5vdCBydW4gc2NyaXB0cyB1bmRlciB1Q2xpbnV4IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE2ODMKK21zZ2lkICJyZWNvbXBpbGUgd2l0aCBIQVZFX1NDUklQVCBkZWZpbmVkIHRvIGVuYWJsZSBsZWFzZS1jaGFuZ2Ugc2NyaXB0cyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNjg3Cittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9MVUFTQ1JJUFQgZGVmaW5lZCB0byBlbmFibGUgTHVhIHNjcmlwdHMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTkyOCBvcHRpb24uYzoxOTY2IG9wdGlvbi5jOjIwMTUKK21zZ2lkICJiYWQgcHJlZml4IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjIyODkKK21zZ2lkICJyZWNvbXBpbGUgd2l0aCBIQVZFX0lQU0VUIGRlZmluZWQgdG8gZW5hYmxlIGlwc2V0IGRpcmVjdGl2ZXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQ2OQorbXNnaWQgImJhZCBwb3J0IHJhbmdlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0ODUKK21zZ2lkICJiYWQgYnJpZGdlLWludGVyZmFjZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTQ1Cittc2dpZCAib25seSBvbmUgdGFnIGFsbG93ZWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjU2NSBvcHRpb24uYzoyNTc3IG9wdGlvbi5jOjI2ODMgb3B0aW9uLmM6MjcyNAorbXNnaWQgImJhZCBkaGNwLXJhbmdlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1OTIKK21zZ2lkICJpbmNvbnNpc3RlbnQgREhDUCByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjUxCittc2dpZCAicHJlZml4IGxlbmd0aCBtdXN0IGJlIGV4YWN0bHkgNjQgZm9yIFJBIHN1Ym5ldHMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjY1MworbXNnaWQgInByZWZpeCBsZW5ndGggbXVzdCBiZSBleGFjdGx5IDY0IGZvciBzdWJuZXQgY29uc3RydWN0b3JzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2NTcKK21zZ2lkICJwcmVmaXggbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgNjQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjY2MAorbXNnaWQgImluY29uc2lzdGVudCBESENQdjYgcmFuZ2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjY3MQorbXNnaWQgInByZWZpeCBtdXN0IGJlIHplcm8gd2l0aCBcImNvbnN0cnVjdG9yOlwiIGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3ODIgb3B0aW9uLmM6MjgzMAorbXNnaWQgImJhZCBoZXggY29uc3RhbnQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjgwNAorbXNnaWQgImNhbm5vdCBtYXRjaCB0YWdzIGluIC0tZGhjcC1ob3N0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIGRoY3AtaG9zdCBJUCBhZGRyZXNzICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5MTAKK21zZ2lkICJiYWQgREhDUCBob3N0IG5hbWUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjk5MgorbXNnaWQgImJhZCB0YWctaWYiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzMxNiBvcHRpb24uYzozNzEwCittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMzc4Cittc2dpZCAiYmFkIGRoY3AtcHJveHkgYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDA0Cittc2dpZCAiQmFkIGRoY3AtcmVsYXkiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzQzMAorbXNnaWQgImJhZCBSQS1wYXJhbXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzQzOQorbXNnaWQgImJhZCBEVUlEIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM0ODEKK21zZ2lkICJpbnZhbGlkIGFsaWFzIHJhbmdlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1MzUKK21zZ2lkICJiYWQgQ05BTUUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzU0MAorbXNnaWQgImR1cGxpY2F0ZSBDTkFNRSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNTYwCittc2dpZCAiYmFkIFBUUiByZWNvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzU5MQorbXNnaWQgImJhZCBOQVBUUiByZWNvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzYyNQorbXNnaWQgImJhZCBSUiByZWNvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzY1NQorbXNnaWQgImJhZCBUWFQgcmVjb3JkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2OTYKK21zZ2lkICJiYWQgU1JWIHJlY29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNzAzCittc2dpZCAiYmFkIFNSViB0YXJnZXQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzcxNworbXNnaWQgImludmFsaWQgcHJpb3JpdHkiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzcyNAorbXNnaWQgImludmFsaWQgd2VpZ2h0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3NDgKK21zZ2lkICJCYWQgaG9zdC1yZWNvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzc2NQorbXNnaWQgIkJhZCBuYW1lIGluIGhvc3QtcmVjb3JkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4MjYKK21zZ2lkICJiYWQgdHJ1c3QgYW5jaG9yIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4NDAKK21zZ2lkICJiYWQgSEVYIGluIHRydXN0IGFuY2hvciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODUwCittc2dpZCAidW5zdXBwb3J0ZWQgb3B0aW9uIChjaGVjayB0aGF0IGRuc21hc3Egd2FzIGNvbXBpbGVkIHdpdGggREhDUC9URlRQL0ROU1NFQy9EQnVzIHN1cHBvcnQpIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5MDkKK21zZ2lkICJtaXNzaW5nIFwiIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5NjYKK21zZ2lkICJiYWQgb3B0aW9uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5NjgKK21zZ2lkICJleHRyYW5lb3VzIHBhcmFtZXRlciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTcwCittc2dpZCAibWlzc2luZyBwYXJhbWV0ZXIiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzk3MgorbXNnaWQgImlsbGVnYWwgb3B0aW9uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5NzkKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiBhdCBsaW5lICVkIG9mICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwNDUgb3B0aW9uLmM6NDE2OCB0ZnRwLmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjI5IG9wdGlvbi5jOjQyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzMxCittc2dpZCAianVuayBmb3VuZCBpbiBjb21tYW5kIGxpbmUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIHZlcnNpb24gJXMgICVzXG4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ29tcGlsZSB0aW1lIG9wdGlvbnM6ICVzXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS5cbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRuc21hc3EgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXRcbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzcwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiBvciAzLlxuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzODEKK21zZ2lkICJ0cnkgLS1oZWxwIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzODMKK21zZ2lkICJ0cnkgLXciCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29tbWFuZCBsaW5lIG9wdGlvbnM6ICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCBob3N0LW5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0NjIKK21zZ2lkICJvbmx5IG9uZSByZXNvbHYuY29uZiBmaWxlIGFsbG93ZWQgaW4gbm8tcG9sbCBtb2RlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDcyCittc2dpZCAibXVzdCBoYXZlIGV4YWN0bHkgb25lIHJlc29sdi5jb25mIHRvIHJlYWQgZG9tYWluIGZyb20uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0NzUgbmV0d29yay5jOjE1MDYgZGhjcC5jOjc2OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAlczogJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzZWFyY2ggZGlyZWN0aXZlIGZvdW5kIGluICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1MTMKK21zZ2lkICJ0aGVyZSBtdXN0IGJlIGEgZGVmYXVsdCBkb21haW4gd2hlbiAtLWRoY3AtZnFkbiBpcyBzZXQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDUyMgorbXNnaWQgInN5bnRheCBjaGVjayBPSyIKK21zZ3N0ciAiIgorCisjOiBmb3J3YXJkLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZW5kIHBhY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjU3NAorbXNnaWQgImRpc2NhcmRpbmcgRE5TIHJlcGx5OiBzdWJuZXQgb3B0aW9uIG1pc21hdGNoIgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzo1OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibmFtZXNlcnZlciAlcyByZWZ1c2VkIHRvIGRvIGEgcmVjdXJzaXZlIHF1ZXJ5IgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzo2MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zc2libGUgRE5TLXJlYmluZCBhdHRhY2sgZGV0ZWN0ZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzoxMTMyIGZvcndhcmQuYzoxNjYzCittc2dpZCAiSWdub3JpbmcgcXVlcnkgZnJvbSBub24tbG9jYWwgbmV0d29yayIKK21zZ3N0ciAiIgorCisjOiBmb3J3YXJkLmM6MjEwMQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IEROUyBxdWVyaWVzIHJlYWNoZWQgKG1heDogJWQpIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaXN0ZW5pbmcgc29ja2V0IGZvciAlczogJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjEwMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTE9VRCBXQVJOSU5HOiBsaXN0ZW5pbmcgb24gJXMgbWF5IGFjY2VwdCByZXF1ZXN0cyB2aWEgaW50ZXJmYWNlcyBvdGhlciB0aGFuICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxMDI4Cittc2dpZCAiTE9VRCBXQVJOSU5HOiB1c2UgLS1iaW5kLWR5bmFtaWMgcmF0aGVyIHRoYW4gLS1iaW5kLWludGVyZmFjZXMgdG8gYXZvaWQgRE5TIGFtcGxpZmljYXRpb24gYXR0YWNrcyB2aWEgdGhlc2UgaW50ZXJmYWNlKHMpIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IG5vIGFkZHJlc3NlcyBmb3VuZCBmb3IgaW50ZXJmYWNlICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxMDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVyZmFjZSAlcyBmYWlsZWQgdG8gam9pbiBESENQdjYgbXVsdGljYXN0IGdyb3VwOiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTI4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBzZXJ2ZXIgc29ja2V0IGZvciAlczogJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGxvY2FsIGludGVyZmFjZSIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBuYW1lc2VydmVyICVzIC0gY2Fubm90IG1ha2UvYmluZCBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNDY4Cittc2dpZCAidW5xdWFsaWZpZWQiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE0NjgKK21zZ2lkICJuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTQ3MAorbXNnaWQgImRlZmF1bHQiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE0NzIKK21zZ2lkICJkb21haW4iCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbG9jYWwgYWRkcmVzc2VzIG9ubHkgZm9yICVzICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNDc3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIHN0YW5kYXJkIG5hbWVzZXJ2ZXJzIGZvciAlcyAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkIGZvciAlcyAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTQ4MworIywgYy1mb3JtYXQKK21zZ2lkICJOT1QgdXNpbmcgbmFtZXNlcnZlciAlcyMlZCAtIHF1ZXJ5IGxvb3AgZGV0ZWN0ZWQiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCh2aWEgJXMpIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNDg4CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE1NAorbXNnaWQgIk5vIHRydXN0IGFuY2hvcnMgcHJvdmlkZWQgZm9yIEROU1NFQyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTU3Cittc2dpZCAiQ2Fubm90IHJlZHVjZSBjYWNoZSBzaXplIGZyb20gZGVmYXVsdCB3aGVuIEROU1NFQyBlbmFibGVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxNTkKK21zZ2lkICJETlNTRUMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfRE5TU0VDIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTY1Cittc2dpZCAiVEZUUCBzZXJ2ZXIgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfVEZUUCBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE3MAorbXNnaWQgIkNhbm5vdCB1c2UgLS1jb25udHJhY2sgQU5EIC0tcXVlcnktcG9ydCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTczCittc2dpZCAiQ29ubnRyYWNrIHN1cHBvcnQgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfQ09OTlRSQUNLIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTc4Cittc2dpZCAiYXN5Y2hyb25vdXMgbG9nZ2luZyBpcyBub3QgYXZhaWxhYmxlIHVuZGVyIFNvbGFyaXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE4MworbXNnaWQgImFzeWNocm9ub3VzIGxvZ2dpbmcgaXMgbm90IGF2YWlsYWJsZSB1bmRlciBBbmRyb2lkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxODgKK21zZ2lkICJhdXRob3JpdGF0aXZlIEROUyBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9BVVRIIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTkzCittc2dpZCAiTG9vcCBkZXRlY3Rpb24gbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfTE9PUCBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjIwMQorbXNnaWQgInpvbmUgc2VyaWFsIG11c3QgYmUgY29uZmlndXJlZCBpbiAtLWF1dGgtc29hIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyMTkKK21zZ2lkICJkaGNwLXJhbmdlIGNvbnN0cnVjdG9yIG5vdCBhdmFpbGFibGUgb24gdGhpcyBwbGF0Zm9ybSIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MjYyCittc2dpZCAiY2Fubm90IHNldCAtLWJpbmQtaW50ZXJmYWNlcyBhbmQgLS1iaW5kLWR5bmFtaWMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluZCBsaXN0IG9mIGludGVyZmFjZXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbnRlcmZhY2UgJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjMzMCBkbnNtYXNxLmM6OTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRCdXMgZXJyb3I6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzozMzMKK21zZ2lkICJEQnVzIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0RCVVMgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzozNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB1c2VyIG9yIGdyb3VwOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDE2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byBmaWxlc3lzdGVtIHJvb3Q6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnRlZCwgdmVyc2lvbiAlcyBETlMgZGlzYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjY1NQorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIGNhY2hlc2l6ZSAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NjU3CisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGUgZGlzYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21waWxlIHRpbWUgb3B0aW9uczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjY2NQorbXNnaWQgIkRCdXMgc3VwcG9ydCBlbmFibGVkOiBjb25uZWN0ZWQgdG8gc3lzdGVtIGJ1cyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NjY3Cittc2dpZCAiREJ1cyBzdXBwb3J0IGVuYWJsZWQ6IGJ1cyBjb25uZWN0aW9uIHBlbmRpbmciCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjY3MgorbXNnaWQgIkROUyBzZXJ2aWNlIGxpbWl0ZWQgdG8gbG9jYWwgc3VibmV0cyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6Njc3Cittc2dpZCAiRE5TU0VDIHZhbGlkYXRpb24gZW5hYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6Njc5Cittc2dpZCAiRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzIG5vdCBjaGVja2VkIHVudGlsIGZpcnN0IGNhY2hlIHJlbG9hZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGZhaWxlZCB0byBjaGFuZ2Ugb3duZXIgb2YgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo2ODgKK21zZ2lkICJzZXR0aW5nIC0tYmluZC1pbnRlcmZhY2VzIG9wdGlvbiBiZWNhdXNlIG9mIE9TIGxpbWl0YXRpb25zIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogaW50ZXJmYWNlICVzIGRvZXMgbm90IGN1cnJlbnRseSBleGlzdCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzAzCittc2dpZCAid2FybmluZzogaWdub3JpbmcgcmVzb2x2LWZpbGUgZmxhZyBiZWNhdXNlIG5vLXJlc29sdiBpcyBzZXQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjcwNgorbXNnaWQgIndhcm5pbmc6IG5vIHVwc3RyZWFtIHNlcnZlcnMgY29uZmlndXJlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzEwCisjLCBjLWZvcm1hdAorbXNnaWQgImFzeW5jaHJvbm91cyBsb2dnaW5nIGVuYWJsZWQsIHF1ZXVlIGxpbWl0IGlzICVkIG1lc3NhZ2VzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3MzEKK21zZ2lkICJJUHY2IHJvdXRlciBhZHZlcnRpc2VtZW50IGVuYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQLCBzb2NrZXRzIGJvdW5kIGV4Y2x1c2l2ZWx5IHRvIGludGVyZmFjZSAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzUzCittc2dpZCAicm9vdCBpcyAiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc1MworbXNnaWQgImVuYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc1NQorbXNnaWQgInNlY3VyZSBtb2RlIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVzdHJpY3RpbmcgbWF4aW11bSBzaW11bHRhbmVvdXMgVEZUUCB0cmFuc2ZlcnMgdG8gJWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjk1NgorbXNnaWQgImNvbm5lY3RlZCB0byBzeXN0ZW0gREJ1cyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTEwNgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZm9yayBpbnRvIGJhY2tncm91bmQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMTA5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgaGVscGVyOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTExMgorIywgYy1mb3JtYXQKK21zZ2lkICJzZXR0aW5nIGNhcGFiaWxpdGllcyBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMTE1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjaGFuZ2UgdXNlci1pZCB0byAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjExMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSBncm91cC1pZCB0byAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjExMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gcGlkZmlsZSAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjExMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gbG9nICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTEyNworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBMdWEgc2NyaXB0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJURlRQIGRpcmVjdG9yeSAlcyBpbmFjY2Vzc2libGU6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMTUxCittc2dpZCAibm93IGNoZWNraW5nIEROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTIxOAorIywgYy1mb3JtYXQKK21zZ2lkICJzY3JpcHQgcHJvY2VzcyBraWxsZWQgYnkgc2lnbmFsICVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMjIyCisjLCBjLWZvcm1hdAorbXNnaWQgInNjcmlwdCBwcm9jZXNzIGV4aXRlZCB3aXRoIHN0YXR1cyAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlY3V0ZSAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjEyODEKK21zZ2lkICJleGl0aW5nIG9uIHJlY2VpcHQgb2YgU0lHVEVSTSIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWNjZXNzICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTMzOQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNlcnZlcnMgZm91bmQgaW4gJXMsIHdpbGwgcmV0cnkiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IG9wdGlvbnMgb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX1JFVVNFe0FERFJ8UE9SVH0gb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgREhDUCBzZXJ2ZXIgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgSUNNUCByYXcgc29ja2V0OiAlcy4iCittc2dzdHIgIiIKKworIzogZGhjcC5jOjIzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGludGVyZmFjZSAlcyBpbiBicmlkZ2UtaW50ZXJmYWNlIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzoyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCBwYWNrZXQgcmVjZWl2ZWQgb24gJXMgd2hpY2ggaGFzIG5vIGFkZHJlc3MiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJBUlAtY2FjaGUgaW5qZWN0aW9uIGZhaWxlZDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjUwNgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJhbmdlICVzIC0tICVzIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggbmV0bWFzayAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBsaW5lIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjg1MAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlcyBsaW5lICVkLCBkdXBsaWNhdGUgbmFtZSBvciBJUCBhZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo5OTQgcmZjMzMxNS5jOjIwODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByZWxheSAlcyAtPiAlcyIKK21zZ3N0ciAiIgorCisjOiBsZWFzZS5jOjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIG9yIGNyZWF0ZSBsZWFzZSBmaWxlICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBsZWFzZS5jOjEzNAorbXNnaWQgInRvbyBtYW55IHN0b3JlZCBsZWFzZXMiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJ1biBsZWFzZS1pbml0IHNjcmlwdCAlczogJXMiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAibGVhc2UtaW5pdCBzY3JpcHQgcmV0dXJuZWQgZXhpdCBjb2RlICVzIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6MzQyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSAlczogJXMgKHJldHJ5IGluICV1cykiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzo5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWdub3JpbmcgZG9tYWluICVzIGZvciBESENQIGhvc3QgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQIHJlcXVlc3QgJXMgJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjM0MworbXNnaWQgIndpdGggc3VibmV0IHNlbGVjdG9yIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzozNDMKK21zZ2lkICJ2aWEiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjM1NQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBhdmFpbGFibGUgREhDUCBzdWJuZXQ6ICVzLyVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzozNTggcmZjMzMxNS5jOjMwMAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBhdmFpbGFibGUgREhDUCByYW5nZTogJXMgLS0gJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSB2ZW5kb3IgY2xhc3M6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgdXNlciBjbGFzczogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjQ5OAorbXNnaWQgImRpc2FibGVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo1MzkgcmZjMjEzMS5jOjk2NyByZmMyMTMxLmM6MTM4NSByZmMzMzE1LmM6NjAyIHJmYzMzMTUuYzo4MjMKKyM6IHJmYzMzMTUuYzoxMDk1Cittc2dpZCAiaWdub3JlZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NTU0IHJmYzIxMzEuYzoxMjA1IHJmYzMzMTUuYzo4NzMKK21zZ2lkICJhZGRyZXNzIGluIHVzZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NTY4IHJmYzIxMzEuYzoxMDIxCittc2dpZCAibm8gYWRkcmVzcyBhdmFpbGFibGUiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjU3NSByZmMyMTMxLmM6MTE2OAorbXNnaWQgIndyb25nIG5ldHdvcmsiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjU5MAorbXNnaWQgIm5vIGFkZHJlc3MgY29uZmlndXJlZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NTk2IHJmYzIxMzEuYzoxMjE4Cittc2dpZCAibm8gbGVhc2VzIGxlZnQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjY5MSByZmMzMzE1LmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGNsaWVudCBwcm92aWRlcyBuYW1lOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6Nzk2Cittc2dpZCAiUFhFIEJJUyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo5MzUgcmZjMzMxNS5jOjExODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlzYWJsaW5nIERIQ1Agc3RhdGljIGFkZHJlc3MgJXMgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo5NTYKK21zZ2lkICJ1bmtub3duIGxlYXNlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo5OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IGlzIGxlYXNlZCB0byAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTAwMAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgaXMgaW4gdXNlIGJ5IHRoZSBzZXJ2ZXIgb3IgcmVsYXkiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IHdhcyBwcmV2aW91c2x5IGRlY2xpbmVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMDE5IHJmYzIxMzEuYzoxMjExCittc2dpZCAibm8gdW5pcXVlLWlkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMTA2Cittc2dpZCAid3Jvbmcgc2VydmVyLUlEIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMTI1Cittc2dpZCAid3JvbmcgYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTE0MyByZmMzMzE1LmM6OTY5Cittc2dpZCAibGVhc2Ugbm90IGZvdW5kIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMTc2Cittc2dpZCAiYWRkcmVzcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMTg3Cittc2dpZCAic3RhdGljIGxlYXNlIGF2YWlsYWJsZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTE5MQorbXNnaWQgImFkZHJlc3MgcmVzZXJ2ZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjExOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWJhbmRvbmluZyBsZWFzZSB0byAlcyBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTcxMgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBib290ZmlsZSBuYW1lOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTcyMQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBzZXJ2ZXIgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgbmV4dCBzZXJ2ZXI6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxNzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJyb2FkY2FzdCByZXNwb25zZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTc5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc2VuZCBESENQL0JPT1RQIG9wdGlvbiAlZDogbm8gc3BhY2UgbGVmdCBpbiBwYWNrZXQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjIwMzYKK21zZ2lkICJQWEUgbWVudSB0b28gbGFyZ2UiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjIxNzMgcmZjMzMxNS5jOjE0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgcmVxdWVzdGVkIG9wdGlvbnM6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoyNDUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzZW5kIFJGQzM5MjUgb3B0aW9uOiB0b28gbWFueSBvcHRpb25zIGZvciBlbnRlcnByaXNlIG51bWJlciAlZCIKK21zZ3N0ciAiIgorCisjOiBuZXRsaW5rLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBuZXRsaW5rIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogbmV0bGluay5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJuZXRsaW5rIHJldHVybnMgZXJyb3I6ICVzIgorbXNnc3RyICIiCisKKyM6IGRidXMuYzoxNzEKK21zZ2lkICJhdHRlbXB0IHRvIHNldCBhbiBJUHY2IHNlcnZlciBhZGRyZXNzIHZpYSBEQnVzIC0gbm8gSVB2NiBzdXBwb3J0IgorbXNnc3RyICIiCisKKyM6IGRidXMuYzo1MDAKK21zZ2lkICJzZXR0aW5nIHVwc3RyZWFtIHNlcnZlcnMgZnJvbSBEQnVzIgorbXNnc3RyICIiCisKKyM6IGRidXMuYzo1NDcKK21zZ2lkICJjb3VsZCBub3QgcmVnaXN0ZXIgYSBEQnVzIG1lc3NhZ2UgaGFuZGxlciIKK21zZ3N0ciAiIgorCisjOiBicGYuYzoyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQIEJQRiBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGJwZi5jOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlcXVlc3QgZm9yIHVuc3VwcG9ydGVkIGhhcmR3YXJlIHR5cGUgKCVkKSByZWNlaXZlZCBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBicGYuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBQRl9ST1VURSBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGJwZi5jOjM5NworbXNnaWQgIlVua25vd24gcHJvdG9jb2wgdmVyc2lvbiBmcm9tIHJvdXRlIHNvY2tldCIKK21zZ3N0ciAiIgorCisjOiBoZWxwZXIuYzoxNTMKK21zZ2lkICJsZWFzZSgpIGZ1bmN0aW9uIG1pc3NpbmcgaW4gTHVhIHNjcmlwdCIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6MzA5Cittc2dpZCAidW5hYmxlIHRvIGdldCBmcmVlIHBvcnQgZm9yIFRGVFAiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjMyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCByZXF1ZXN0IGZyb20gJXMiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yICVkICVzIHJlY2VpdmVkIGZyb20gJXMiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgc2VuZGluZyAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgInNlbnQgJXMgdG8gJXMiCittc2dzdHIgIiIKKworIzogbG9nLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJmbG93OiAlZCBsb2cgZW50cmllcyBsb3N0IgorbXNnc3RyICIiCisKKyM6IGxvZy5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBsb2cuYzo0NzIKK21zZ2lkICJGQUlMRUQgdG8gc3RhcnQgdXAiCittc2dzdHIgIiIKKworIzogY29ubnRyYWNrLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ubnRyYWNrIGNvbm5lY3Rpb24gbWFyayByZXRyaWV2YWwgZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwNi5jOjU5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUHY2IHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcDYuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX1JFVVNFe0FERFJ8UE9SVH0gb24gREhDUHY2IHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcDYuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBESENQdjYgc2VydmVyIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJubyBhZGRyZXNzIHJhbmdlIGF2YWlsYWJsZSBmb3IgREhDUHY2IHJlcXVlc3QgZnJvbSByZWxheSBhdCAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQdjYgcmVxdWVzdCB2aWEgJXMiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjI5NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBhdmFpbGFibGUgREhDUHY2IHN1Ym5ldDogJXMvJWQiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSB2ZW5kb3IgY2xhc3M6ICV1IgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzo0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgY2xpZW50IE1BQyBhZGRyZXNzOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6NjU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gcHJlZml4LWNsYXNzICVkIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzo3OTEgcmZjMzMxNS5jOjkxMworbXNnaWQgInN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjgwNiByZmMzMzE1LmM6ODA4IHJmYzMzMTUuYzo5MjEgcmZjMzMxNS5jOjkyMworbXNnaWQgIm5vIGFkZHJlc3NlcyBhdmFpbGFibGUiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjg2NQorbXNnaWQgImFkZHJlc3MgdW5hdmFpbGFibGUiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjkwMAorbXNnaWQgIm5vdCBvbiBsaW5rIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzo5NzMgcmZjMzMxNS5jOjExNTEgcmZjMzMxNS5jOjEyMjgKK21zZ2lkICJubyBiaW5kaW5nIGZvdW5kIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzoxMDExCittc2dpZCAiZGVwcmVjYXRlZCIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6MTAxNgorbXNnaWQgImFkZHJlc3MgaW52YWxpZCIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6MTA2MQorbXNnaWQgImNvbmZpcm0gZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzoxMDcyCittc2dpZCAiYWxsIGFkZHJlc3NlcyBzdGlsbCBvbiBsaW5rIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzoxMTYwCittc2dpZCAicmVsZWFzZSByZWNlaXZlZCIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6MjA4MAorbXNnaWQgIkNhbm5vdCBtdWx0aWNhc3QgdG8gREhDUHY2IHNlcnZlciB3aXRob3V0IGNvcnJlY3QgaW50ZXJmYWNlIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIklnbm9yaW5nIGR1cGxpY2F0ZSBkaGNwLW9wdGlvbiAlZCIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICIldSB0YWdzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgbW9yZSB0aGFuIG9uZSBhZGRyZXNzIGluIGhvc3RzZmlsZSwgdXNpbmcgJXMgZm9yIERIQ1AiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgKCVzKSBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBTT19CSU5EVE9ERVZJQ0Ugb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6NjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIktub3duIERIQ1Agb3B0aW9uczpcbiIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJLbm93biBESENQdjYgb3B0aW9uczpcbiIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjgyMworbXNnaWQgIiwgcHJlZml4IGRlcHJlY2F0ZWQiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBsZWFzZSB0aW1lICIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjg2OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdGF0ZWxlc3Mgb24gJXMlLjBzJS4wcyVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBzdGF0aWMgbGVhc2VzIG9ubHkgb24gJS4wcyVzJXMlLjBzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBwcm94eSBvbiBzdWJuZXQgJS4wcyVzJS4wcyUuMHMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIElQIHJhbmdlICVzIC0tICVzJXMlLjBzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1B2NC1kZXJpdmVkIElQdjYgbmFtZXMgb24gJXMlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjg4OQorIywgYy1mb3JtYXQKK21zZ2lkICJyb3V0ZXIgYWR2ZXJ0aXNlbWVudCBvbiAlcyVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVsYXkgZnJvbSAlcyB0byAlcyB2aWEgJXMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByZWxheSBmcm9tICVzIHRvICVzIgorbXNnc3RyICIiCisKKyM6IHJhZHYuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIElDTVB2NiBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGF1dGguYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3Jpbmcgem9uZSB0cmFuc2ZlciByZXF1ZXN0IGZyb20gJXMiCittc2dzdHIgIiIKKworIzogaXBzZXQuYzo5NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluZCBrZXJuZWwgdmVyc2lvbjogJXMiCittc2dzdHIgIiIKKworIzogaXBzZXQuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBJUHNldCBjb250cm9sIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogYmxvY2tkYXRhLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRE5TU0VDIG1lbW9yeSBpbiB1c2UgJXUsIG1heCAldSwgYWxsb2NhdGVkICV1IgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjc2Cittc2dpZCAiZXJyb3I6IGZpbGxfYWRkciBtaXNzdXNlZCIKK21zZ3N0ciAiIgorCisjOiB0YWJsZXMuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFjY2VzcyBwZiBkZXZpY2VzOiAlcyIKK21zZ3N0ciAiIgorCisjOiB0YWJsZXMuYzoxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogbm8gb3BlbmVkIHBmIGRldmljZXMgJXMiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yOiBjYW5ub3QgdXNlIHRhYmxlIG5hbWUgJXMiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yOiBjYW5ub3Qgc3RybGNweSB0YWJsZSBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBwZnJfYWRkX3RhYmxlczogJXMoJWQpIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjE0NworbXNnaWQgImluZm86IHRhYmxlIGNyZWF0ZWQiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IERJT0NSJXNBRERSUzogJXMiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGFkZHJlc3NlcyAlcyIKK21zZ3N0ciAiIgpkaWZmIC0tZ2l0IGEvcG8vbm8ucG8gYi9wby9uby5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjdlYWFkCi0tLSAvZGV2L251bGwKKysrIGIvcG8vbm8ucG8KQEAgLTAsMCArMSwyMTY0IEBACisjIE5vcndlZ2lhbiB0cmFuc2xhdGlvbnMgZm9yIGRuc21hc3EgcGFja2FnZS4KKyMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyMgU2ltb24gS2VsbGV5IDxzaW1vbkB0aGVrZWxsZXlzLm9yZy51az4sIDIwMDYuCisjCisjIEN1cnJlbnQgdHJhbnNsYXRvcjogSmFuIEVyaWsgQXNraWxkdCA8amVhc2tpbGR0QGdtYWlsLmNvbT4sIDIwMDYKKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGRuc21hc3EgMi4yNVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOS0wNi0xOCAxMjoyNCswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwNi0wMS0xMSAxNzozOSswMDAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBKYW4gRXJpayBBc2tpbGR0IDxqZWFza2lsZHRAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IE5vcndlZ2lhbiA8aTE4bi1uYkBsaXN0ZXIucGluZy51aW8ubm8+XG4iCisiTGFuZ3VhZ2U6IG5vXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMVxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworIzogY2FjaGUuYzo1MDUKK21zZ2lkICJJbnRlcm5hbCBlcnJvciBpbiBjYWNoZS4iCittc2dzdHIgIiIKKworIzogY2FjaGUuYzo5MDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIG5hbWVzIGZyb20gJXM6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBsYXN0ZSBuYXZuIGZyYSAlczogJXMiCisKKyM6IGNhY2hlLmM6OTM0IGRoY3AuYzo4MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGFkZHJlc3MgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAiZOVybGlnIGFkcmVzc2UgdmVkICVzIGxpbmplICVkIgorCisjOiBjYWNoZS5jOjk4NSBkaGNwLmM6ODM2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBuYW1lIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgImTlcmxpZyBuYXZuIHZlZCAlcyBsaW5qZSAlZCIKKworIzogY2FjaGUuYzo5OTIgZGhjcC5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkICVzIC0gJWQgYWRkcmVzc2VzIgorbXNnc3RyICJsZXMgJXMgLSAlZCBhZHJlc3NlciIKKworIzogY2FjaGUuYzoxMTAwCittc2dpZCAiY2xlYXJlZCBjYWNoZSIKK21zZ3N0ciAibWVsbG9tbGFnZXIgdPhtdCIKKworIzogY2FjaGUuYzoxMTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIElQdjQgYWRkcmVzcyBmb3VuZCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGEgQ05BTUUsIG5vdCBnaXZpbmcgaXQgdG8gdGhlIERIQ1AgbGVhc2Ugb2YgJXMiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBnaXZpbmcgbmFtZSAlcyB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyBiZWNhdXNlIHRoZSBuYW1lIGV4aXN0cyBpbiAlcyB3aXRoIGFkZHJlc3MgJXMiCittc2dzdHIgImdpciBpa2tlIG5hdm5ldCAlcyB0aWwgREhDUCBsZWllbiBmb3IgJXMgZm9yZGkgbmF2bmV0IGVrc2lzdGVyZXIgaSAlcyBtZWQgYWRyZXNzZW4gJXMiCisKKyM6IGNhY2hlLmM6MTM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lICVsdSIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjEzNjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhY2hlIHNpemUgJWQsICVkLyVkIGNhY2hlIGluc2VydGlvbnMgcmUtdXNlZCB1bmV4cGlyZWQgY2FjaGUgZW50cmllcy4iCittc2dzdHIgIm1lbGxvbWxhZ2VyIHN0+HJyZWxzZSAlZCwgJWQvJWQgbWVsbG9tbGFnZXIgaW5uc2V0dGluZ2VyIHJlLWJydWtlciBtZWxsb21sYWdlciBwbGFzc2VyIHNvbSBpa2tlIGVyIHV0bPhwdCIKKworIzogY2FjaGUuYzoxMzY5CisjLCBjLWZvcm1hdAorbXNnaWQgInF1ZXJpZXMgZm9yd2FyZGVkICV1LCBxdWVyaWVzIGFuc3dlcmVkIGxvY2FsbHkgJXUiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMzcyCisjLCBjLWZvcm1hdAorbXNnaWQgInF1ZXJpZXMgZm9yIGF1dGhvcml0YXRpdmUgem9uZXMgJXUiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMzk4CisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZlciAlcyMlZDogcXVlcmllcyBzZW50ICV1LCByZXRyaWVkIG9yIGZhaWxlZCAldSIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6NDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZWVkIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcjogJXMiCittc2dzdHIgImZlaWxldCDlIGx5dHRlIHDlIHNvY2tldDogJXMiCisKKyM6IHV0aWwuYzoyMDUKKyMsIGZ1enp5Cittc2dpZCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSIKK21zZ3N0ciAiZmVpbGV0IOUgbGFzdGUgJWQgYnl0ZXMiCisKKyM6IHV0aWwuYzoyNDMgb3B0aW9uLmM6NTc5Cittc2dpZCAiY291bGQgbm90IGdldCBtZW1vcnkiCittc2dzdHIgImt1bm5lIGlra2UgZuUgbWlubmUiCisKKyM6IHV0aWwuYzoyNTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZTogJXMiCittc2dzdHIgImthbiBpa2tlIGxlc2UgJXM6ICVzIgorCisjOiB1dGlsLmM6MjYxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWxsb2NhdGUgJWQgYnl0ZXMiCittc2dzdHIgImZlaWxldCDlIGxhc3RlICVkIGJ5dGVzIgorCisjOiB1dGlsLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgImluZmluaXRlIgorbXNnc3RyICJ1ZW5kZWxpZyIKKworIzogb3B0aW9uLmM6MzE4Cittc2dpZCAiU3BlY2lmeSBsb2NhbCBhZGRyZXNzKGVzKSB0byBsaXN0ZW4gb24uIgorbXNnc3RyICJTcGVzaWZpc2VyIGxva2FsKGUpIGFkcmVzc2Uocikg5SBseXR0ZSBw5S4iCisKKyM6IG9wdGlvbi5jOjMxOQorbXNnaWQgIlJldHVybiBpcGFkZHIgZm9yIGFsbCBob3N0cyBpbiBzcGVjaWZpZWQgZG9tYWlucy4iCittc2dzdHIgIlJldHVybmVyIGlwYWRkciBmb3IgYWxsZSB2ZXJ0ZXIgaSBkZXQgc3Blc2lmaXNlcnRlIGRvbWVuZXQuIgorCisjOiBvcHRpb24uYzozMjAKK21zZ2lkICJGYWtlIHJldmVyc2UgbG9va3VwcyBmb3IgUkZDMTkxOCBwcml2YXRlIGFkZHJlc3MgcmFuZ2VzLiIKK21zZ3N0ciAiRm9yZmFsc2sgcmV2ZXJzIG9wcHNsYWcgZm9yIFJGQzE5MTggcHJpdmF0ZSBhZHJlc3NlIG9tcuVkZXIuIgorCisjOiBvcHRpb24uYzozMjEKK21zZ2lkICJUcmVhdCBpcGFkZHIgYXMgTlhET01BSU4gKGRlZmVhdHMgVmVyaXNpZ24gd2lsZGNhcmQpLiIKK21zZ3N0ciAiQmVoYW5kbGUgaXBhZGRyIHNvbSBOWERPTUFJTiAob21n5XIgVmVyaXNpZ24gd2lsZGNhcmQpLiIKKworIzogb3B0aW9uLmM6MzIyCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIGNhY2hlIGluIGVudHJpZXMgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNwZXNpZmlzZXIgc3T4cnJlbHNlbiBw5SBtZWxsb21sYWdlciBwbGFzc2VuZSAoc3RhbmRhcmQgZXIgJXMpLiIKKworIzogb3B0aW9uLmM6MzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgY29uZmlndXJhdGlvbiBmaWxlIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTcGVzaWZpc2VyIGtvbmZpZ3VyYXNqb25zZmlsIChzdGFuZGFyZCBlciAlcykuIgorCisjOiBvcHRpb24uYzozMjQKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kOiBydW4gaW4gZGVidWcgbW9kZS4iCittc2dzdHIgIklLS0UgbGVnZyAoZm9yaykgc29tIGJha2dydW5uc3Byb3Nlc3M6IGtq+HIgaSBkZWJ1ZyBtb2R1cy4iCisKKyM6IG9wdGlvbi5jOjMyNQorbXNnaWQgIkRvIE5PVCBmb3J3YXJkIHF1ZXJpZXMgd2l0aCBubyBkb21haW4gcGFydC4iCittc2dzdHIgIklLS0UgdmlkZXJlc2VuZCBvcHBzbGFnIHNvbSBtYW5nbGVyIGRvbWVuZSBkZWwuIgorCisjOiBvcHRpb24uYzozMjYKK21zZ2lkICJSZXR1cm4gc2VsZi1wb2ludGluZyBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIlJldHVybmVyIHNlbHYtcGVrZW5kZSBNWCBwb3N0IGZvciBsb2thbGUgdmVydGVyLiIKKworIzogb3B0aW9uLmM6MzI3Cittc2dpZCAiRXhwYW5kIHNpbXBsZSBuYW1lcyBpbiAvZXRjL2hvc3RzIHdpdGggZG9tYWluLXN1ZmZpeC4iCittc2dzdHIgIlV0dmlkIGVua2xlIG5hdm4gaSAvZXRjL2hvc3RzIG1lZCBkb21lbmUtc3VmZmlrcy4iCisKKyM6IG9wdGlvbi5jOjMyOAorbXNnaWQgIkRvbid0IGZvcndhcmQgc3B1cmlvdXMgRE5TIHJlcXVlc3RzIGZyb20gV2luZG93cyBob3N0cy4iCittc2dzdHIgIklra2UgdmlkZXJlc2VuZCBmYWxza2UvdWVrdGUgRE5TIGZvcmVzcPhyc2xlciBmcmEgV2luZG93cyB2ZXJ0ZXIuIgorCisjOiBvcHRpb24uYzozMjkKK21zZ2lkICJFbmFibGUgREhDUCBpbiB0aGUgcmFuZ2UgZ2l2ZW4gd2l0aCBsZWFzZSBkdXJhdGlvbi4iCittc2dzdHIgIkFrdGl2ZXIgREhDUCBpIGRldCBnaXR0ZSBvbXLlZGV0IG1lZCBsZWllIHZhcmlnaGV0IgorCisjOiBvcHRpb24uYzozMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlIHRvIHRoaXMgZ3JvdXAgYWZ0ZXIgc3RhcnR1cCAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU2tpZnQgdGlsIGRlbm5lIGdydXBwZW4gZXR0ZXIgb3Bwc3RhcnQgKHN0YW5kYXJkIGVyICVzKS4iCisKKyM6IG9wdGlvbi5jOjMzMQorbXNnaWQgIlNldCBhZGRyZXNzIG9yIGhvc3RuYW1lIGZvciBhIHNwZWNpZmllZCBtYWNoaW5lLiIKK21zZ3N0ciAiU2V0dCBhZHJlc3NlIGVsbGVyIHZlcnRzbmF2biBmb3IgZW4gc3Blc2lmaWtrIG1hc2tpbi4iCisKKyM6IG9wdGlvbi5jOjMzMgorIywgZnV6enkKK21zZ2lkICJSZWFkIERIQ1AgaG9zdCBzcGVjcyBmcm9tIGZpbGUuIgorbXNnc3RyICJk5XJsaWcgTVggbmF2biIKKworIzogb3B0aW9uLmM6MzMzCittc2dpZCAiUmVhZCBESENQIG9wdGlvbiBzcGVjcyBmcm9tIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMzNAorbXNnaWQgIkV2YWx1YXRlIGNvbmRpdGlvbmFsIHRhZyBleHByZXNzaW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG8gTk9UIGxvYWQgJXMgZmlsZS4iCittc2dzdHIgIklLS0UgbGFzdCAlcyBmaWxlbi4iCisKKyM6IG9wdGlvbi5jOjMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGEgaG9zdHMgZmlsZSB0byBiZSByZWFkIGluIGFkZGl0aW9uIHRvICVzLiIKK21zZ3N0ciAiU3Blc2lmaXNlciBlbiB2ZXJ0cyAoaG9zdHMpIGZpbCBzb20gc2thbCBsZXNlcyBpIHRpbGxlZyB0aWwgJXMuIgorCisjOiBvcHRpb24uYzozMzcKK21zZ2lkICJTcGVjaWZ5IGludGVyZmFjZShzKSB0byBsaXN0ZW4gb24uIgorbXNnc3RyICJTcGVzaWZpc2VyIG5ldHR2ZXJrc2tvcnQgZGV0IHNrYWwgbHl0dGVzIHDlLiIKKworIzogb3B0aW9uLmM6MzM4Cittc2dpZCAiU3BlY2lmeSBpbnRlcmZhY2UocykgTk9UIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIlNwZXNpZmlzZXIgbmV0dHZlcmtza29ydCBkZXQgSUtLRSBza2FsIGx5dHRlcyBw5S4iCisKKyM6IG9wdGlvbi5jOjMzOQorIywgZnV6enkKK21zZ2lkICJNYXAgREhDUCB1c2VyIGNsYXNzIHRvIHRhZy4iCittc2dzdHIgIk1hcCBESENQIGJydWtlciBrbGFzc2UgdGlsIG9wc2pvbiBzZXR0LiIKKworIzogb3B0aW9uLmM6MzQwCittc2dpZCAiTWFwIFJGQzMwNDYgY2lyY3VpdC1pZCB0byB0YWcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM0MQorbXNnaWQgIk1hcCBSRkMzMDQ2IHJlbW90ZS1pZCB0byB0YWcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM0MgorbXNnaWQgIk1hcCBSRkMzOTkzIHN1YnNjcmliZXItaWQgdG8gdGFnLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDMKKyMsIGZ1enp5Cittc2dpZCAiRG9uJ3QgZG8gREhDUCBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIKK21zZ3N0ciAiSWtrZSB1dGb4ciBESENQIGZvciBrbGllbnRlciBpIG9wc2pvbiBzZXR0LiIKKworIzogb3B0aW9uLmM6MzQ0CisjLCBmdXp6eQorbXNnaWQgIkZvcmNlIGJyb2FkY2FzdCByZXBsaWVzIGZvciBob3N0cyB3aXRoIHRhZyBzZXQuIgorbXNnc3RyICJJa2tlIHV0ZvhyIERIQ1AgZm9yIGtsaWVudGVyIGkgb3Bzam9uIHNldHQuIgorCisjOiBvcHRpb24uYzozNDUKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kLCBkbyBOT1QgcnVuIGluIGRlYnVnIG1vZGUuIgorbXNnc3RyICJJS0tFIGxhc3QgKGZvcmspIHNvbSBiYWtncnVubnNwcm9zZXNzLCBJS0tFIGtq+HIgaSBkZWJ1ZyBtb2R1cy4iCisKKyM6IG9wdGlvbi5jOjM0NgorbXNnaWQgIkFzc3VtZSB3ZSBhcmUgdGhlIG9ubHkgREhDUCBzZXJ2ZXIgb24gdGhlIGxvY2FsIG5ldHdvcmsuIgorbXNnc3RyICJBbnRhIGF0IHZpIGVyIGRlbiBlbmVzdGUgREhDUCB0amVuZXJlbiBw5SBkZXQgbG9rYWxlIG5ldHR2ZXJrZXQuIgorCisjOiBvcHRpb24uYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSB3aGVyZSB0byBzdG9yZSBESENQIGxlYXNlcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU3Blc2lmaXNlciBodm9yIERIQ1AgbGVpZW5lIHNrYWwgbGFncmVzIChzdGFuZGFyZCBlciAlcykuIgorCisjOiBvcHRpb24uYzozNDgKK21zZ2lkICJSZXR1cm4gTVggcmVjb3JkcyBmb3IgbG9jYWwgaG9zdHMuIgorbXNnc3RyICJSZXR1cm5lciBNWCByZWNvcmRzIGZvciBsb2thbGUgdmVydGVyLiIKKworIzogb3B0aW9uLmM6MzQ5Cittc2dpZCAiU3BlY2lmeSBhbiBNWCByZWNvcmQuIgorbXNnc3RyICJTcGVzaWZpc2VyIGVuIE1YIHBvc3QuIgorCisjOiBvcHRpb24uYzozNTAKK21zZ2lkICJTcGVjaWZ5IEJPT1RQIG9wdGlvbnMgdG8gREhDUCBzZXJ2ZXIuIgorbXNnc3RyICJTcGVzaWZpc2VyIEJPT1RQIG9wc2pvbmVyIHRpbCBESENQIHRqZW5lci4iCisKKyM6IG9wdGlvbi5jOjM1MQorIywgYy1mb3JtYXQKK21zZ2lkICJEbyBOT1QgcG9sbCAlcyBmaWxlLCByZWxvYWQgb25seSBvbiBTSUdIVVAuIgorbXNnc3RyICJJS0tFIHNw+HIgKHBvbGwpICVzIGZpbCwgbGVzIHDlIG55dHQga3VuIHZlZCBTSUdIVVAiCisKKyM6IG9wdGlvbi5jOjM1MgorbXNnaWQgIkRvIE5PVCBjYWNoZSBmYWlsZWQgc2VhcmNoIHJlc3VsdHMuIgorbXNnc3RyICJJS0tFIG1lbGxvbWxhZ3JlIHP4a2VyZXN1bHRhdGVyIHNvbSBmZWlsZXIuIgorCisjOiBvcHRpb24uYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIG5hbWVzZXJ2ZXJzIHN0cmljdGx5IGluIHRoZSBvcmRlciBnaXZlbiBpbiAlcy4iCittc2dzdHIgIkJydWsgbmF2bmV0amVuZXJlIGt1biBzb20gYmVzdGVtdCBpIHJla2tlZvhsZ2VuIGdpdHQgaSAlcy4iCisKKyM6IG9wdGlvbi5jOjM1NAorIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IG9wdGlvbnMgdG8gYmUgc2VudCB0byBESENQIGNsaWVudHMuIgorbXNnc3RyICJTZXR0IGVrc3RyYSBvcHNqb25lciBzb20gc2thbCBmb3JkZWxlcyB0aWwgREhDUCBrbGllbnRlbmUuIgorCisjOiBvcHRpb24uYzozNTUKK21zZ2lkICJESENQIG9wdGlvbiBzZW50IGV2ZW4gaWYgdGhlIGNsaWVudCBkb2VzIG5vdCByZXF1ZXN0IGl0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNTYKK21zZ2lkICJTcGVjaWZ5IHBvcnQgdG8gbGlzdGVuIGZvciBETlMgcmVxdWVzdHMgb24gKGRlZmF1bHRzIHRvIDUzKS4iCittc2dzdHIgIlNwZXNpZmlzZXIgbHl0dGVwb3J0IGZvciBETlMgb3Bwc2xhZyAoc3RhbmRhcmQgZXIgNTMpLiIKKworIzogb3B0aW9uLmM6MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gc3VwcG9ydGVkIFVEUCBwYWNrZXQgc2l6ZSBmb3IgRUROUy4wIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJNYWtzaW1hbCBzdPh0dGV0IFVEUCBwYWtrZXN0+HJyZWxzZSBmb3IgRUROUy4wIChzdGFuZGFyZCBlciAlcykuIgorCisjOiBvcHRpb24uYzozNTgKKyMsIGZ1enp5Cittc2dpZCAiTG9nIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiTG9nZyBvcHBzbGFnLiIKKworIzogb3B0aW9uLmM6MzU5CisjLCBmdXp6eQorbXNnaWQgIkZvcmNlIHRoZSBvcmlnaW5hdGluZyBwb3J0IGZvciB1cHN0cmVhbSBETlMgcXVlcmllcy4iCittc2dzdHIgIlR2aW5nIGJydWsgYXYgb3BwcmlubmVsaWcgcG9ydCBmb3Igb3Bwc3Ry+G1zIG9wcHNsYWcuIgorCisjOiBvcHRpb24uYzozNjAKK21zZ2lkICJEbyBOT1QgcmVhZCByZXNvbHYuY29uZi4iCittc2dzdHIgIklLS0UgbGVzIHJlc29sdi5jb25mLiIKKworIzogb3B0aW9uLmM6MzYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgcGF0aCB0byByZXNvbHYuY29uZiAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU3Blc2lmaXNlciBzdGllbiB0aWwgcmVzb2x2LmNvbmYgKHN0YW5kYXJkIGVyICVzKS4iCisKKyM6IG9wdGlvbi5jOjM2MgorIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IHBhdGggdG8gZmlsZSB3aXRoIHNlcnZlcj0gb3B0aW9ucyIKK21zZ3N0ciAiU3Blc2lmaXNlciBzdGllbiB0aWwgUElEIGZpbC4gKHN0YW5kYXJkIGVyICVzKS4iCisKKyM6IG9wdGlvbi5jOjM2MworbXNnaWQgIlNwZWNpZnkgYWRkcmVzcyhlcykgb2YgdXBzdHJlYW0gc2VydmVycyB3aXRoIG9wdGlvbmFsIGRvbWFpbnMuIgorbXNnc3RyICJTcGVzaWZpc2VyIGFkcmVzc2VuKGUpIHRpbCBvcHBzdHL4bXMgdGplbmVyZSBtZWQgdmFsZ2ZyaWUgZG9tZW5lci4iCisKKyM6IG9wdGlvbi5jOjM2NAorIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IGFkZHJlc3Mgb2YgdXBzdHJlYW0gc2VydmVycyBmb3IgcmV2ZXJzZSBhZGRyZXNzIHF1ZXJpZXMiCittc2dzdHIgIlNwZXNpZmlzZXIgYWRyZXNzZW4oZSkgdGlsIG9wcHN0cvhtcyB0amVuZXJlIG1lZCB2YWxnZnJpZSBkb21lbmVyLiIKKworIzogb3B0aW9uLmM6MzY1Cittc2dpZCAiTmV2ZXIgZm9yd2FyZCBxdWVyaWVzIHRvIHNwZWNpZmllZCBkb21haW5zLiIKK21zZ3N0ciAiQWxkcmkgdmlkZXJlc2VuZCBvcHBzbGFnIHRpbCBzcGVzaWZpc2VydGUgZG9tZW5lci4iCisKKyM6IG9wdGlvbi5jOjM2NgorbXNnaWQgIlNwZWNpZnkgdGhlIGRvbWFpbiB0byBiZSBhc3NpZ25lZCBpbiBESENQIGxlYXNlcy4iCittc2dzdHIgIlNwZXNpZmlzZXIgZG9tZW5ldCBzb20gc2thbCB0aWxkZWxlcyBpIERIQ1AgbGVpZW4uIgorCisjOiBvcHRpb24uYzozNjcKK21zZ2lkICJTcGVjaWZ5IGRlZmF1bHQgdGFyZ2V0IGluIGFuIE1YIHJlY29yZC4iCittc2dzdHIgIlNwZXNpZmlzZXIgZGVmYXVsdCBt5WwgaSBlbiBNWCBwb3N0LiIKKworIzogb3B0aW9uLmM6MzY4Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgcmVwbGllcyBmcm9tIC9ldGMvaG9zdHMuIgorbXNnc3RyICJTcGVzaWZpc2VyIHRpbWUtdG8tbGl2ZSBpIHNla3VuZGVyIGZvciBzdmFyIGZyYSAvZXRjL2hvc3RzLiIKKworIzogb3B0aW9uLmM6MzY5CisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG5lZ2F0aXZlIGNhY2hpbmcuIgorbXNnc3RyICJTcGVzaWZpc2VyIHRpbWUtdG8tbGl2ZSBpIHNla3VuZGVyIGZvciBzdmFyIGZyYSAvZXRjL2hvc3RzLiIKKworIzogb3B0aW9uLmM6MzcwCisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG1heGltdW0gVFRMIHRvIHNlbmQgdG8gY2xpZW50cy4iCittc2dzdHIgIlNwZXNpZmlzZXIgdGltZS10by1saXZlIGkgc2VrdW5kZXIgZm9yIHN2YXIgZnJhIC9ldGMvaG9zdHMuIgorCisjOiBvcHRpb24uYzozNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hhbmdlIHRvIHRoaXMgdXNlciBhZnRlciBzdGFydHVwLiAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU2tpZnQgdGlsIGRlbm5lIGJydWtlciBldHRlciBvcHBzdGFydCAoc3RhbmRhcmQgZXIgJXMpLiIKKworIzogb3B0aW9uLmM6MzcyCisjLCBmdXp6eQorbXNnaWQgIk1hcCBESENQIHZlbmRvciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICJNYXAgREhDUCBwcm9kdXNlbnQga2xhc3NlIHRpbCBvcHNqb24gc2V0dC4iCisKKyM6IG9wdGlvbi5jOjM3MworbXNnaWQgIkRpc3BsYXkgZG5zbWFzcSB2ZXJzaW9uIGFuZCBjb3B5cmlnaHQgaW5mb3JtYXRpb24uIgorbXNnc3RyICJWaXMgZG5zbWFzcSB2ZXJzam9uIG9nIGNvcHlyaWdodCBpbmZvcm1hc2pvbi4iCisKKyM6IG9wdGlvbi5jOjM3NAorbXNnaWQgIlRyYW5zbGF0ZSBJUHY0IGFkZHJlc3NlcyBmcm9tIHVwc3RyZWFtIHNlcnZlcnMuIgorbXNnc3RyICJPdmVyc2V0dCBJUHY0IGFkcmVzc2VyIGZyYSBvcHBzdHL4bXMgdGplbmVyZS4iCisKKyM6IG9wdGlvbi5jOjM3NQorbXNnaWQgIlNwZWNpZnkgYSBTUlYgcmVjb3JkLiIKK21zZ3N0ciAiU3Blc2lmaXNlciBlbiBTUlYgcG9zdC4iCisKKyM6IG9wdGlvbi5jOjM3NgorbXNnaWQgIkRpc3BsYXkgdGhpcyBtZXNzYWdlLiBVc2UgLS1oZWxwIGRoY3AgZm9yIGtub3duIERIQ1Agb3B0aW9ucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzc3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggb2YgUElEIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNwZXNpZmlzZXIgc3RpZW4gdGlsIFBJRCBmaWwuIChzdGFuZGFyZCBlciAlcykuIgorCisjOiBvcHRpb24uYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBtYXhpbXVtIG51bWJlciBvZiBESENQIGxlYXNlcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU3Blc2lmaXNlciBtYWtzaW11bSBhbnRhbGwgREhDUCBsZWllciAoc3RhbmRhcmQgZXIgJXMpIgorCisjOiBvcHRpb24uYzozNzkKK21zZ2lkICJBbnN3ZXIgRE5TIHF1ZXJpZXMgYmFzZWQgb24gdGhlIGludGVyZmFjZSBhIHF1ZXJ5IHdhcyBzZW50IHRvLiIKK21zZ3N0ciAiU3ZhciBETlMgb3Bwc2xhZyBiYXNlcnQgcOUgbmV0dHZlcmtza29ydGV0IG9wcHNsYWdldCBibGUgc2VuZHQgdGlsLiIKKworIzogb3B0aW9uLmM6MzgwCittc2dpZCAiU3BlY2lmeSBUWFQgRE5TIHJlY29yZC4iCittc2dzdHIgIlNwZXNpZmlzZXIgVFhUIEROUyBwb3N0LiIKKworIzogb3B0aW9uLmM6MzgxCisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgUFRSIEROUyByZWNvcmQuIgorbXNnc3RyICJTcGVzaWZpc2VyIFRYVCBETlMgcG9zdC4iCisKKyM6IG9wdGlvbi5jOjM4MgorbXNnaWQgIkdpdmUgRE5TIG5hbWUgdG8gSVB2NCBhZGRyZXNzIG9mIGludGVyZmFjZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzgzCittc2dpZCAiQmluZCBvbmx5IHRvIGludGVyZmFjZXMgaW4gdXNlLiIKK21zZ3N0ciAiQmluZCBrdW4gdGlsIG5ldHR2ZXJrc2tvcnQgc29tIGVyIGkgYnJ1ay4iCisKKyM6IG9wdGlvbi5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWFkIERIQ1Agc3RhdGljIGhvc3QgaW5mb3JtYXRpb24gZnJvbSAlcy4iCittc2dzdHIgIkxlcyBESENQIHN0YXRpc2sgdmVydCBpbmZvcm1hc2pvbiBmcmEgJXMuIgorCisjOiBvcHRpb24uYzozODUKK21zZ2lkICJFbmFibGUgdGhlIERCdXMgaW50ZXJmYWNlIGZvciBzZXR0aW5nIHVwc3RyZWFtIHNlcnZlcnMsIGV0Yy4iCittc2dzdHIgIkFrdGl2ZXIgREJ1cyBpbnRlcmZhY2UgZm9yIOUgc2V0dGUgb3Bwc3Ry+G1zIHRqZW5lcmUsIG9zdi4iCisKKyM6IG9wdGlvbi5jOjM4NgorbXNnaWQgIkRvIG5vdCBwcm92aWRlIERIQ1Agb24gdGhpcyBpbnRlcmZhY2UsIG9ubHkgcHJvdmlkZSBETlMuIgorbXNnc3RyICJJa2tlIGxldmVyIERIQ1AgcOUgZGV0dGUgbmV0dHZlcmtza29ydGV0LCBrdW4gbGV2ZXIgRE5TLiIKKworIzogb3B0aW9uLmM6Mzg3Cittc2dpZCAiRW5hYmxlIGR5bmFtaWMgYWRkcmVzcyBhbGxvY2F0aW9uIGZvciBib290cC4iCittc2dzdHIgIkFrdGl2ZXIgZHluYW1pc2sgYWRyZXNzZSBhbGxva2VyaW5nIGZvciBib290cC4iCisKKyM6IG9wdGlvbi5jOjM4OAorIywgZnV6enkKK21zZ2lkICJNYXAgTUFDIGFkZHJlc3MgKHdpdGggd2lsZGNhcmRzKSB0byBvcHRpb24gc2V0LiIKK21zZ3N0ciAiTWFwIERIQ1AgcHJvZHVzZW50IGtsYXNzZSB0aWwgb3Bzam9uIHNldHQuIgorCisjOiBvcHRpb24uYzozODkKK21zZ2lkICJUcmVhdCBESENQIHJlcXVlc3RzIG9uIGFsaWFzZXMgYXMgYXJyaXZpbmcgZnJvbSBpbnRlcmZhY2UuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5MAorbXNnaWQgIkRpc2FibGUgSUNNUCBlY2hvIGFkZHJlc3MgY2hlY2tpbmcgaW4gdGhlIERIQ1Agc2VydmVyLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTEKK21zZ2lkICJTaGVsbCBzY3JpcHQgdG8gcnVuIG9uIERIQ1AgbGVhc2UgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTIKK21zZ2lkICJMdWEgc2NyaXB0IHRvIHJ1biBvbiBESENQIGxlYXNlIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzkzCittc2dpZCAiUnVuIGxlYXNlLWNoYW5nZSBzY3JpcHRzIGFzIHRoaXMgdXNlci4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzk0Cittc2dpZCAiUmVhZCBjb25maWd1cmF0aW9uIGZyb20gYWxsIHRoZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzk1CisjLCBmdXp6eQorbXNnaWQgIkxvZyB0byB0aGlzIHN5c2xvZyBmYWNpbGl0eSBvciBmaWxlLiAoZGVmYXVsdHMgdG8gREFFTU9OKSIKK21zZ3N0ciAiU2tpZnQgdGlsIGRlbm5lIGJydWtlciBldHRlciBvcHBzdGFydCAoc3RhbmRhcmQgZXIgJXMpLiIKKworIzogb3B0aW9uLmM6Mzk2Cittc2dpZCAiRG8gbm90IHVzZSBsZWFzZWZpbGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBETlMgcXVlcmllcy4gKGRlZmF1bHRzIHRvICVzKSIKK21zZ3N0ciAiU3Blc2lmaXNlciBtYWtzaW11bSBhbnRhbGwgREhDUCBsZWllciAoc3RhbmRhcmQgZXIgJXMpIgorCisjOiBvcHRpb24uYzozOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xlYXIgRE5TIGNhY2hlIHdoZW4gcmVsb2FkaW5nICVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTkKK21zZ2lkICJJZ25vcmUgaG9zdG5hbWVzIHByb3ZpZGVkIGJ5IERIQ1AgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDAwCittc2dpZCAiRG8gTk9UIHJldXNlIGZpbGVuYW1lIGFuZCBzZXJ2ZXIgZmllbGRzIGZvciBleHRyYSBESENQIG9wdGlvbnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwMQorbXNnaWQgIkVuYWJsZSBpbnRlZ3JhdGVkIHJlYWQtb25seSBURlRQIHNlcnZlci4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDAyCittc2dpZCAiRXhwb3J0IGZpbGVzIGJ5IFRGVFAgb25seSBmcm9tIHRoZSBzcGVjaWZpZWQgc3VidHJlZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDAzCittc2dpZCAiQWRkIGNsaWVudCBJUCBhZGRyZXNzIHRvIHRmdHAtcm9vdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA0Cittc2dpZCAiQWxsb3cgYWNjZXNzIG9ubHkgdG8gZmlsZXMgb3duZWQgYnkgdGhlIHVzZXIgcnVubmluZyBkbnNtYXNxLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbm5jdXJyZW50IFRGVFAgdHJhbnNmZXJzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTcGVzaWZpc2VyIG1ha3NpbXVtIGFudGFsbCBESENQIGxlaWVyIChzdGFuZGFyZCBlciAlcykiCisKKyM6IG9wdGlvbi5jOjQwNgorbXNnaWQgIkRpc2FibGUgdGhlIFRGVFAgYmxvY2tzaXplIGV4dGVuc2lvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA3Cittc2dpZCAiQ29udmVydCBURlRQIGZpbGVuYW1lcyB0byBsb3dlcmNhc2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA4Cittc2dpZCAiRXBoZW1lcmFsIHBvcnQgcmFuZ2UgZm9yIHVzZSBieSBURlRQIHRyYW5zZmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA5Cittc2dpZCAiRXh0cmEgbG9nZ2luZyBmb3IgREhDUC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDEwCittc2dpZCAiRW5hYmxlIGFzeW5jLiBsb2dnaW5nOyBvcHRpb25hbGx5IHNldCBxdWV1ZSBsZW5ndGguIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxMQorbXNnaWQgIlN0b3AgRE5TIHJlYmluZGluZy4gRmlsdGVyIHByaXZhdGUgSVAgcmFuZ2VzIHdoZW4gcmVzb2x2aW5nLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTIKK21zZ2lkICJBbGxvdyByZWJpbmRpbmcgb2YgMTI3LjAuMC4wLzgsIGZvciBSQkwgc2VydmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDEzCittc2dpZCAiSW5oaWJpdCBETlMtcmViaW5kIHByb3RlY3Rpb24gb24gdGhpcyBkb21haW4uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxNAorbXNnaWQgIkFsd2F5cyBwZXJmb3JtIEROUyBxdWVyaWVzIHRvIGFsbCBzZXJ2ZXJzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTUKK21zZ2lkICJTZXQgdGFnIGlmIGNsaWVudCBpbmNsdWRlcyBtYXRjaGluZyBvcHRpb24gaW4gcmVxdWVzdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE2Cittc2dpZCAiVXNlIGFsdGVybmF0aXZlIHBvcnRzIGZvciBESENQLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTcKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSBOQVBUUiBETlMgcmVjb3JkLiIKK21zZ3N0ciAiU3Blc2lmaXNlciBUWFQgRE5TIHBvc3QuIgorCisjOiBvcHRpb24uYzo0MTgKK21zZ2lkICJTcGVjaWZ5IGxvd2VzdCBwb3J0IGF2YWlsYWJsZSBmb3IgRE5TIHF1ZXJ5IHRyYW5zbWlzc2lvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE5Cittc2dpZCAiVXNlIG9ubHkgZnVsbHkgcXVhbGlmaWVkIGRvbWFpbiBuYW1lcyBmb3IgREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjAKK21zZ2lkICJHZW5lcmF0ZSBob3N0bmFtZXMgYmFzZWQgb24gTUFDIGFkZHJlc3MgZm9yIG5hbWVsZXNzIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyMQorbXNnaWQgIlVzZSB0aGVzZSBESENQIHJlbGF5cyBhcyBmdWxsIHByb3hpZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyMgorbXNnaWQgIlJlbGF5IERIQ1AgcmVxdWVzdHMgdG8gYSByZW1vdGUgc2VydmVyIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyMworbXNnaWQgIlNwZWNpZnkgYWxpYXMgbmFtZSBmb3IgTE9DQUwgRE5TIG5hbWUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyNAorIywgZnV6enkKK21zZ2lkICJQcm9tcHQgdG8gc2VuZCB0byBQWEUgY2xpZW50cy4iCittc2dzdHIgIlNldHQgZWtzdHJhIG9wc2pvbmVyIHNvbSBza2FsIGZvcmRlbGVzIHRpbCBESENQIGtsaWVudGVuZS4iCisKKyM6IG9wdGlvbi5jOjQyNQorbXNnaWQgIkJvb3Qgc2VydmljZSBmb3IgUFhFIG1lbnUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyNgorbXNnaWQgIkNoZWNrIGNvbmZpZ3VyYXRpb24gc3ludGF4LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjcKK21zZ2lkICJBZGQgcmVxdWVzdG9yJ3MgTUFDIGFkZHJlc3MgdG8gZm9yd2FyZGVkIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjgKK21zZ2lkICJBZGQgcmVxdWVzdG9yJ3MgSVAgc3VibmV0IHRvIGZvcndhcmRlZCBETlMgcXVlcmllcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDI5CisjLCBmdXp6eQorbXNnaWQgIlByb3h5IEROU1NFQyB2YWxpZGF0aW9uIHJlc3VsdHMgZnJvbSB1cHN0cmVhbSBuYW1lc2VydmVycy4iCittc2dzdHIgIk92ZXJzZXR0IElQdjQgYWRyZXNzZXIgZnJhIG9wcHN0cvhtcyB0amVuZXJlLiIKKworIzogb3B0aW9uLmM6NDMwCittc2dpZCAiQXR0ZW1wdCB0byBhbGxvY2F0ZSBzZXF1ZW50aWFsIElQIGFkZHJlc3NlcyB0byBESENQIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzMQorbXNnaWQgIkNvcHkgY29ubmVjdGlvbi10cmFjayBtYXJrIGZyb20gcXVlcmllcyB0byB1cHN0cmVhbSBjb25uZWN0aW9ucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDMyCittc2dpZCAiQWxsb3cgREhDUCBjbGllbnRzIHRvIGRvIHRoZWlyIG93biBERE5TIHVwZGF0ZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzMworbXNnaWQgIlNlbmQgcm91dGVyLWFkdmVydGlzZW1lbnRzIGZvciBpbnRlcmZhY2VzIGRvaW5nIERIQ1B2NiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzQKK21zZ2lkICJTcGVjaWZ5IERVSURfRU4tdHlwZSBESENQdjYgc2VydmVyIERVSUQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM1CisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgaG9zdCAoQS9BQUFBIGFuZCBQVFIpIHJlY29yZHMiCittc2dzdHIgIlNwZXNpZmlzZXIgZW4gTVggcG9zdC4iCisKKyM6IG9wdGlvbi5jOjQzNgorIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IGFyYml0cmFyeSBETlMgcmVzb3VyY2UgcmVjb3JkIgorbXNnc3RyICJTcGVzaWZpc2VyIFRYVCBETlMgcG9zdC4iCisKKyM6IG9wdGlvbi5jOjQzNworIywgZnV6enkKK21zZ2lkICJCaW5kIHRvIGludGVyZmFjZXMgaW4gdXNlIC0gY2hlY2sgZm9yIG5ldyBpbnRlcmZhY2VzIgorbXNnc3RyICJ1a2plbnQgdGlsa255dG5pbmcgKGludGVyZmFjZSkgJXMiCisKKyM6IG9wdGlvbi5jOjQzOAorbXNnaWQgIkV4cG9ydCBsb2NhbCBuYW1lcyB0byBnbG9iYWwgRE5TIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzOQorbXNnaWQgIkRvbWFpbiB0byBleHBvcnQgdG8gZ2xvYmFsIEROUyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDAKK21zZ2lkICJTZXQgVFRMIGZvciBhdXRob3JpdGF0aXZlIHJlcGxpZXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQxCittc2dpZCAiU2V0IGF1dGhvcml0aXZlIHpvbmUgaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQyCittc2dpZCAiU2Vjb25kYXJ5IGF1dGhvcml0YXRpdmUgbmFtZXNlcnZlcnMgZm9yIGZvcndhcmQgZG9tYWlucyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDMKK21zZ2lkICJQZWVycyB3aGljaCBhcmUgYWxsb3dlZCB0byBkbyB6b25lIHRyYW5zZmVyIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0NAorbXNnaWQgIlNwZWNpZnkgaXBzZXRzIHRvIHdoaWNoIG1hdGNoaW5nIGRvbWFpbnMgc2hvdWxkIGJlIGFkZGVkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0NQorbXNnaWQgIlNwZWNpZnkgYSBkb21haW4gYW5kIGFkZHJlc3MgcmFuZ2UgZm9yIHN5bnRoZXNpc2VkIG5hbWVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0NgorbXNnaWQgIkFjdGl2YXRlIEROU1NFQyB2YWxpZGF0aW9uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0NworbXNnaWQgIlNwZWNpZnkgdHJ1c3QgYW5jaG9yIGtleSBkaWdlc3QuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0OAorbXNnaWQgIkRpc2FibGUgdXBzdHJlYW0gY2hlY2tpbmcgZm9yIEROU1NFQyBkZWJ1Z2dpbmcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0OQorbXNnaWQgIkVuc3VyZSBhbnN3ZXJzIHdpdGhvdXQgRE5TU0VDIGFyZSBpbiB1bnNpZ25lZCB6b25lcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDUwCittc2dpZCAiRG9uJ3QgY2hlY2sgRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzIHVudGlsIGZpcnN0IGNhY2hlLXJlbG9hZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTIKK21zZ2lkICJTcGVjaWZ5IERIQ1B2NiBwcmVmaXggY2xhc3MiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU0Cittc2dpZCAiU2V0IHByaW9yaXR5LCByZXNlbmQtaW50ZXJ2YWwgYW5kIHJvdXRlci1saWZldGltZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTUKK21zZ2lkICJEbyBub3QgbG9nIHJvdXRpbmUgREhDUC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU2Cittc2dpZCAiRG8gbm90IGxvZyByb3V0aW5lIERIQ1B2Ni4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU3Cittc2dpZCAiRG8gbm90IGxvZyBSQS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU4Cittc2dpZCAiQWNjZXB0IHF1ZXJpZXMgb25seSBmcm9tIGRpcmVjdGx5LWNvbm5lY3RlZCBuZXR3b3JrcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTkKK21zZ2lkICJEZXRlY3QgYW5kIHJlbW92ZSBETlMgZm9yd2FyZGluZyBsb29wcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiBkbnNtYXNxIFtvcHRpb25zXVxuIgorIlxuIgorbXNnc3RyICIiCisiQnJ1azogZG5zbWFzcSBbb3Bzam9uZXJdXG4iCisiXG4iCisKKyM6IG9wdGlvbi5jOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICJVc2Ugc2hvcnQgb3B0aW9ucyBvbmx5IG9uIHRoZSBjb21tYW5kIGxpbmUuXG4iCittc2dzdHIgIkJydWsga29ydGUgb3Bzam9uZXIga3VuIHDlIGtvbW1hbmRvbGluamVuLlxuIgorCisjOiBvcHRpb24uYzo2NjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlZhbGlkIG9wdGlvbnMgYXJlOlxuIgorbXNnc3RyICJHeWxkaWdlIG9wc2pvbmVyIGVyIDpcbiIKKworIzogb3B0aW9uLmM6NzIyIG9wdGlvbi5jOjcyNgorbXNnaWQgImJhZCBwb3J0IgorbXNnc3RyICJk5XJsaWcgcG9ydCIKKworIzogb3B0aW9uLmM6NzUzIG9wdGlvbi5jOjc4NQorbXNnaWQgImludGVyZmFjZSBiaW5kaW5nIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NzYyIG9wdGlvbi5jOjM0OTQKKyMsIGZ1enp5Cittc2dpZCAiYmFkIGludGVyZmFjZSBuYW1lIgorbXNnc3RyICJk5XJsaWcgTVggbmF2biIKKworIzogb3B0aW9uLmM6NzkyCisjLCBmdXp6eQorbXNnaWQgImJhZCBhZGRyZXNzIgorbXNnc3RyICJsZXMgJXMgLSAlZCBhZHJlc3NlciIKKworIzogb3B0aW9uLmM6OTc0Cittc2dpZCAidW5zdXBwb3J0ZWQgZW5jYXBzdWxhdGlvbiBmb3IgSVB2NiBvcHRpb24iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6OTg4Cittc2dpZCAiYmFkIGRoY3Atb3B0aW9uIgorbXNnc3RyICJk5XJsaWcgZGhjcC1vcHNqb24iCisKKyM6IG9wdGlvbi5jOjEwNTYKKyMsIGZ1enp5Cittc2dpZCAiYmFkIElQIGFkZHJlc3MiCittc2dzdHIgImxlcyAlcyAtICVkIGFkcmVzc2VyIgorCisjOiBvcHRpb24uYzoxMDU5IG9wdGlvbi5jOjExOTcgb3B0aW9uLmM6MjgxMgorIywgZnV6enkKK21zZ2lkICJiYWQgSVB2NiBhZGRyZXNzIgorbXNnc3RyICJsZXMgJXMgLSAlZCBhZHJlc3NlciIKKworIzogb3B0aW9uLmM6MTIyNCBvcHRpb24uYzoxMzE4Cittc2dpZCAiYmFkIGRvbWFpbiBpbiBkaGNwLW9wdGlvbiIKK21zZ3N0ciAiZOVybGlnIGRvbWVuZSBpIGRoY3Atb3Bzam9uIgorCisjOiBvcHRpb24uYzoxMzU2Cittc2dpZCAiZGhjcC1vcHRpb24gdG9vIGxvbmciCittc2dzdHIgImRoY3Atb3Bzam9uIGZvciBsYW5nIgorCisjOiBvcHRpb24uYzoxMzYzCittc2dpZCAiaWxsZWdhbCBkaGNwLW1hdGNoIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE0MjUKK21zZ2lkICJpbGxlZ2FsIHJlcGVhdGVkIGZsYWciCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTQzMworbXNnaWQgImlsbGVnYWwgcmVwZWF0ZWQga2V5d29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNDk1IG9wdGlvbi5jOjQwOTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhY2Nlc3MgZGlyZWN0b3J5ICVzOiAlcyIKK21zZ3N0ciAia2FuIGlra2UgbGVzZSAlczogJXMiCisKKyM6IG9wdGlvbi5jOjE1NDEgdGZ0cC5jOjQ5MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyAlczogJXMiCittc2dzdHIgImthbiBpa2tlIGxlc2UgJXM6ICVzIgorCisjOiBvcHRpb24uYzoxNTg4Cittc2dpZCAic2V0dGluZyBsb2cgZmFjaWxpdHkgaXMgbm90IHBvc3NpYmxlIHVuZGVyIEFuZHJvaWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTU5NworbXNnaWQgImJhZCBsb2cgZmFjaWxpdHkiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTY1MAorbXNnaWQgImJhZCBNWCBwcmVmZXJlbmNlIgorbXNnc3RyICJk5XJsaWcgTVggcHJlZmVyYW5zZSIKKworIzogb3B0aW9uLmM6MTY1NQorbXNnaWQgImJhZCBNWCBuYW1lIgorbXNnc3RyICJk5XJsaWcgTVggbmF2biIKKworIzogb3B0aW9uLmM6MTY2OQorbXNnaWQgImJhZCBNWCB0YXJnZXQiCittc2dzdHIgImTlcmxpZyBNWCBt5WwiCisKKyM6IG9wdGlvbi5jOjE2ODEKK21zZ2lkICJjYW5ub3QgcnVuIHNjcmlwdHMgdW5kZXIgdUNsaW51eCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNjgzCittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9TQ1JJUFQgZGVmaW5lZCB0byBlbmFibGUgbGVhc2UtY2hhbmdlIHNjcmlwdHMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTY4NworbXNnaWQgInJlY29tcGlsZSB3aXRoIEhBVkVfTFVBU0NSSVBUIGRlZmluZWQgdG8gZW5hYmxlIEx1YSBzY3JpcHRzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE5Mjggb3B0aW9uLmM6MTk2NiBvcHRpb24uYzoyMDE1CisjLCBmdXp6eQorbXNnaWQgImJhZCBwcmVmaXgiCittc2dzdHIgImTlcmxpZyBwb3J0IgorCisjOiBvcHRpb24uYzoyMjg5Cittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9JUFNFVCBkZWZpbmVkIHRvIGVuYWJsZSBpcHNldCBkaXJlY3RpdmVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0NjkKKyMsIGZ1enp5Cittc2dpZCAiYmFkIHBvcnQgcmFuZ2UiCittc2dzdHIgImTlcmxpZyBwb3J0IgorCisjOiBvcHRpb24uYzoyNDg1Cittc2dpZCAiYmFkIGJyaWRnZS1pbnRlcmZhY2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjU0NQorbXNnaWQgIm9ubHkgb25lIHRhZyBhbGxvd2VkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1NjUgb3B0aW9uLmM6MjU3NyBvcHRpb24uYzoyNjgzIG9wdGlvbi5jOjI3MjQKK21zZ2lkICJiYWQgZGhjcC1yYW5nZSIKK21zZ3N0ciAiZOVybGlnIGRoY3Atb21y5WRlIgorCisjOiBvcHRpb24uYzoyNTkyCittc2dpZCAiaW5jb25zaXN0ZW50IERIQ1AgcmFuZ2UiCittc2dzdHIgImlra2Uga29uc2lzdGVudCBESENQIG9tcuVkZSIKKworIzogb3B0aW9uLmM6MjY1MQorbXNnaWQgInByZWZpeCBsZW5ndGggbXVzdCBiZSBleGFjdGx5IDY0IGZvciBSQSBzdWJuZXRzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2NTMKK21zZ2lkICJwcmVmaXggbGVuZ3RoIG11c3QgYmUgZXhhY3RseSA2NCBmb3Igc3VibmV0IGNvbnN0cnVjdG9ycyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjU3Cittc2dpZCAicHJlZml4IGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0IDY0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2NjAKKyMsIGZ1enp5Cittc2dpZCAiaW5jb25zaXN0ZW50IERIQ1B2NiByYW5nZSIKK21zZ3N0ciAiaWtrZSBrb25zaXN0ZW50IERIQ1Agb21y5WRlIgorCisjOiBvcHRpb24uYzoyNjcxCittc2dpZCAicHJlZml4IG11c3QgYmUgemVybyB3aXRoIFwiY29uc3RydWN0b3I6XCIgYXJndW1lbnQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjc4MiBvcHRpb24uYzoyODMwCisjLCBmdXp6eQorbXNnaWQgImJhZCBoZXggY29uc3RhbnQiCittc2dzdHIgImTlcmxpZyBkaGNwLXZlcnQiCisKKyM6IG9wdGlvbi5jOjI4MDQKK21zZ2lkICJjYW5ub3QgbWF0Y2ggdGFncyBpbiAtLWRoY3AtaG9zdCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyODUyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgZGhjcC1ob3N0IElQIGFkZHJlc3MgJXMiCittc2dzdHIgImR1Ymxpc2VydGUgSVAgYWRyZXNzZXIgaSAlcyBkaGNwLWNvbmZpZyBkaXJla3Rpdi4iCisKKyM6IG9wdGlvbi5jOjI5MTAKKyMsIGZ1enp5Cittc2dpZCAiYmFkIERIQ1AgaG9zdCBuYW1lIgorbXNnc3RyICJk5XJsaWcgTVggbmF2biIKKworIzogb3B0aW9uLmM6Mjk5MgorIywgZnV6enkKK21zZ2lkICJiYWQgdGFnLWlmIgorbXNnc3RyICJk5XJsaWcgTVggbeVsIgorCisjOiBvcHRpb24uYzozMzE2IG9wdGlvbi5jOjM3MTAKK21zZ2lkICJpbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICJ1Z3lsZGlnIHBvcnRudW1tZXIiCisKKyM6IG9wdGlvbi5jOjMzNzgKKyMsIGZ1enp5Cittc2dpZCAiYmFkIGRoY3AtcHJveHkgYWRkcmVzcyIKK21zZ3N0ciAibGVzICVzIC0gJWQgYWRyZXNzZXIiCisKKyM6IG9wdGlvbi5jOjM0MDQKKyMsIGZ1enp5Cittc2dpZCAiQmFkIGRoY3AtcmVsYXkiCittc2dzdHIgImTlcmxpZyBkaGNwLW9tcuVkZSIKKworIzogb3B0aW9uLmM6MzQzMAorbXNnaWQgImJhZCBSQS1wYXJhbXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzQzOQorbXNnaWQgImJhZCBEVUlEIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM0ODEKKyMsIGZ1enp5Cittc2dpZCAiaW52YWxpZCBhbGlhcyByYW5nZSIKK21zZ3N0ciAidWd5bGRpZyB2ZWt0IgorCisjOiBvcHRpb24uYzozNTM1Cittc2dpZCAiYmFkIENOQU1FIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1NDAKK21zZ2lkICJkdXBsaWNhdGUgQ05BTUUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzU2MAorIywgZnV6enkKK21zZ2lkICJiYWQgUFRSIHJlY29yZCIKK21zZ3N0ciAiZOVybGlnIFNSViBwb3N0IgorCisjOiBvcHRpb24uYzozNTkxCisjLCBmdXp6eQorbXNnaWQgImJhZCBOQVBUUiByZWNvcmQiCittc2dzdHIgImTlcmxpZyBTUlYgcG9zdCIKKworIzogb3B0aW9uLmM6MzYyNQorIywgZnV6enkKK21zZ2lkICJiYWQgUlIgcmVjb3JkIgorbXNnc3RyICJk5XJsaWcgU1JWIHBvc3QiCisKKyM6IG9wdGlvbi5jOjM2NTUKK21zZ2lkICJiYWQgVFhUIHJlY29yZCIKK21zZ3N0ciAiZOVybGlnIFRYVCBwb3N0IgorCisjOiBvcHRpb24uYzozNjk2Cittc2dpZCAiYmFkIFNSViByZWNvcmQiCittc2dzdHIgImTlcmxpZyBTUlYgcG9zdCIKKworIzogb3B0aW9uLmM6MzcwMworbXNnaWQgImJhZCBTUlYgdGFyZ2V0IgorbXNnc3RyICJk5XJsaWcgU1JWIG3lbCIKKworIzogb3B0aW9uLmM6MzcxNworbXNnaWQgImludmFsaWQgcHJpb3JpdHkiCittc2dzdHIgInVneWxkaWcgcHJpb3JpdGV0IgorCisjOiBvcHRpb24uYzozNzI0Cittc2dpZCAiaW52YWxpZCB3ZWlnaHQiCittc2dzdHIgInVneWxkaWcgdmVrdCIKKworIzogb3B0aW9uLmM6Mzc0OAorIywgZnV6enkKK21zZ2lkICJCYWQgaG9zdC1yZWNvcmQiCittc2dzdHIgImTlcmxpZyBTUlYgcG9zdCIKKworIzogb3B0aW9uLmM6Mzc2NQorIywgZnV6enkKK21zZ2lkICJCYWQgbmFtZSBpbiBob3N0LXJlY29yZCIKK21zZ3N0ciAiZOVybGlnIG5hdm4gaSAlcyIKKworIzogb3B0aW9uLmM6MzgyNgorIywgZnV6enkKK21zZ2lkICJiYWQgdHJ1c3QgYW5jaG9yIgorbXNnc3RyICJk5XJsaWcgcG9ydCIKKworIzogb3B0aW9uLmM6Mzg0MAorbXNnaWQgImJhZCBIRVggaW4gdHJ1c3QgYW5jaG9yIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4NTAKK21zZ2lkICJ1bnN1cHBvcnRlZCBvcHRpb24gKGNoZWNrIHRoYXQgZG5zbWFzcSB3YXMgY29tcGlsZWQgd2l0aCBESENQL1RGVFAvRE5TU0VDL0RCdXMgc3VwcG9ydCkiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzkwOQorbXNnaWQgIm1pc3NpbmcgXCIiCittc2dzdHIgIm1hbmdsZXIgXCIiCisKKyM6IG9wdGlvbi5jOjM5NjYKK21zZ2lkICJiYWQgb3B0aW9uIgorbXNnc3RyICJk5XJsaWcgb3Bzam9uIgorCisjOiBvcHRpb24uYzozOTY4Cittc2dpZCAiZXh0cmFuZW91cyBwYXJhbWV0ZXIiCittc2dzdHIgIm92ZXJmbPhkaWcgcGFyYW1ldGVyIgorCisjOiBvcHRpb24uYzozOTcwCittc2dpZCAibWlzc2luZyBwYXJhbWV0ZXIiCittc2dzdHIgIm1hbmdsZXIgcGFyYW1ldGVyIgorCisjOiBvcHRpb24uYzozOTcyCisjLCBmdXp6eQorbXNnaWQgImlsbGVnYWwgb3B0aW9uIgorbXNnc3RyICJk5XJsaWcgb3Bzam9uIgorCisjOiBvcHRpb24uYzozOTc5Cittc2dpZCAiZXJyb3IiCittc2dzdHIgImZlaWwiCisKKyM6IG9wdGlvbi5jOjM5ODEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiBhdCBsaW5lICVkIG9mICVzIgorbXNnc3RyICIlcyBw5SBsaW5qZSAlZCBhdiAlJXMiCisKKyM6IG9wdGlvbi5jOjQwNDUgb3B0aW9uLmM6NDE2OCB0ZnRwLmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICVzOiAlcyIKK21zZ3N0ciAia2FuIGlra2UgbGVzZSAlczogJXMiCisKKyM6IG9wdGlvbi5jOjQyMjkgb3B0aW9uLmM6NDI2NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicmVhZCAlcyIKK21zZ3N0ciAibGVzZXIgJXMiCisKKyM6IG9wdGlvbi5jOjQzMzEKK21zZ2lkICJqdW5rIGZvdW5kIGluIGNvbW1hbmQgbGluZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzY2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRuc21hc3EgdmVyc2lvbiAlcyAgJXNcbiIKK21zZ3N0ciAiRG5zbWFzcSB2ZXJzam9uICVzICVzXG4iCisKKyM6IG9wdGlvbi5jOjQzNjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb21waWxlIHRpbWUgb3B0aW9uczogJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorIktvbXBpbGVyaW5nc29wc2pvbmVyICVzXG4iCisiXG4iCisKKyM6IG9wdGlvbi5jOjQzNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuXG4iCittc2dzdHIgIkRlbm5lIHByb2dyYW12YXJlbiBrb21tZXIgbWVkIEFCU09MVVRUIElOR0VOIEdBUkFOVEkuXG4iCisKKyM6IG9wdGlvbi5jOjQzNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG5zbWFzcSBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdFxuIgorbXNnc3RyICJETnNtYXNxIGVyIGZyaSBwcm9ncmFtdmFyZSwgZHUgZXIgdmVsa29tbWVuIHRpbCDlIHJlZGlzdHJpYnVlcmUgZGVuXG4iCisKKyM6IG9wdGlvbi5jOjQzNzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiBvciAzLlxuIgorbXNnc3RyICJ1bmRlciB2aWxr5XJlbmUgZ2l0dCBpIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzam9uIDIuXG4iCisKKyM6IG9wdGlvbi5jOjQzODEKK21zZ2lkICJ0cnkgLS1oZWxwIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzODMKK21zZ2lkICJ0cnkgLXciCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM4NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbW1hbmQgbGluZSBvcHRpb25zOiAlcyIKK21zZ3N0ciAiZOVybGlnZSBrb21tYW5kbGluamUgb3Bzam9uZXI6ICVzLiIKKworIzogb3B0aW9uLmM6NDQzNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZ2V0IGhvc3QtbmFtZTogJXMiCittc2dzdHIgImtsYXJlciBpa2tlIOUgZuUgdmVydHNuYXZuOiAlcyIKKworIzogb3B0aW9uLmM6NDQ2MgorbXNnaWQgIm9ubHkgb25lIHJlc29sdi5jb25mIGZpbGUgYWxsb3dlZCBpbiBuby1wb2xsIG1vZGUuIgorbXNnc3RyICJrdW4gZW4gcmVzb2x2LmNvbmYgZmlsIHRpbGxhdCBpIG5vLXBvbGwgbW9kdXMuIgorCisjOiBvcHRpb24uYzo0NDcyCittc2dpZCAibXVzdCBoYXZlIGV4YWN0bHkgb25lIHJlc29sdi5jb25mIHRvIHJlYWQgZG9tYWluIGZyb20uIgorbXNnc3RyICJt5SBoYSBu+Hlha3RpZyBlbiByZXNvbHYuY29uZiDlIGxlc2UgZG9tZW5lIGZyYS4iCisKKyM6IG9wdGlvbi5jOjQ0NzUgbmV0d29yay5jOjE1MDYgZGhjcC5jOjc2OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXM6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBsZXNlICVzOiAlcyIKKworIzogb3B0aW9uLmM6NDQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzZWFyY2ggZGlyZWN0aXZlIGZvdW5kIGluICVzIgorbXNnc3RyICJpbnRldCBz+GtlIGRpcmVrdGl2IGZ1bm5ldCBpICVzIgorCisjOiBvcHRpb24uYzo0NTEzCittc2dpZCAidGhlcmUgbXVzdCBiZSBhIGRlZmF1bHQgZG9tYWluIHdoZW4gLS1kaGNwLWZxZG4gaXMgc2V0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1MjIKK21zZ2lkICJzeW50YXggY2hlY2sgT0siCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjExNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNlbmQgcGFja2V0OiAlcyIKK21zZ3N0ciAiZmVpbGV0IOUgbHl0dGUgcOUgc29ja2V0OiAlcyIKKworIzogZm9yd2FyZC5jOjU3NAorbXNnaWQgImRpc2NhcmRpbmcgRE5TIHJlcGx5OiBzdWJuZXQgb3B0aW9uIG1pc21hdGNoIgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzo1OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibmFtZXNlcnZlciAlcyByZWZ1c2VkIHRvIGRvIGEgcmVjdXJzaXZlIHF1ZXJ5IgorbXNnc3RyICJuYXZuZXRqZW5lciAlcyBuZWt0ZXQg5SBnavhyZSBldCByZWt1cnNpdnQgb3Bwc2xhZyIKKworIzogZm9yd2FyZC5jOjYyOQorIywgYy1mb3JtYXQKK21zZ2lkICJwb3NzaWJsZSBETlMtcmViaW5kIGF0dGFjayBkZXRlY3RlZDogJXMiCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjExMzIgZm9yd2FyZC5jOjE2NjMKK21zZ2lkICJJZ25vcmluZyBxdWVyeSBmcm9tIG5vbi1sb2NhbCBuZXR3b3JrIgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzoyMTAxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IEROUyBxdWVyaWVzIHJlYWNoZWQgKG1heDogJWQpIgorbXNnc3RyICJTcGVzaWZpc2VyIG1ha3NpbXVtIGFudGFsbCBESENQIGxlaWVyIChzdGFuZGFyZCBlciAlcykiCisKKyM6IG5ldHdvcmsuYzo3MTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgbGlzdGVuaW5nIHNvY2tldCBmb3IgJXM6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBsYWdlIGx5dHRlIHNvY2tldDogJXMiCisKKyM6IG5ldHdvcmsuYzoxMDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkxPVUQgV0FSTklORzogbGlzdGVuaW5nIG9uICVzIG1heSBhY2NlcHQgcmVxdWVzdHMgdmlhIGludGVyZmFjZXMgb3RoZXIgdGhhbiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTAyOAorbXNnaWQgIkxPVUQgV0FSTklORzogdXNlIC0tYmluZC1keW5hbWljIHJhdGhlciB0aGFuIC0tYmluZC1pbnRlcmZhY2VzIHRvIGF2b2lkIEROUyBhbXBsaWZpY2F0aW9uIGF0dGFja3MgdmlhIHRoZXNlIGludGVyZmFjZShzKSIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTAzNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogbm8gYWRkcmVzc2VzIGZvdW5kIGZvciBpbnRlcmZhY2UgJXMiCittc2dzdHIgImJlbnl0dGVyIGxva2FsZSBhZHJlc3NlciBrdW4gZm9yICVzICVzIgorCisjOiBuZXR3b3JrLmM6MTA5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJmYWNlICVzIGZhaWxlZCB0byBqb2luIERIQ1B2NiBtdWx0aWNhc3QgZ3JvdXA6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBiaW5kZSBESENQIHRqZW5lciBzb2NrZXQ6ICVzIgorCisjOiBuZXR3b3JrLmM6MTI4OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgc2VydmVyIHNvY2tldCBmb3IgJXM6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBiaW5kZSBseXR0ZSBzb2NrZXQgZm9yICVzOiAlcyIKKworIzogbmV0d29yay5jOjE0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGxvY2FsIGludGVyZmFjZSIKK21zZ3N0ciAiaWdub3JlcmVyIG5hdm5ldGplbmVyICVzIC0gbG9rYWwgdGlsa255dG5pbmciCisKKyM6IG5ldHdvcmsuYzoxNDU1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBuYW1lc2VydmVyICVzIC0gY2Fubm90IG1ha2UvYmluZCBzb2NrZXQ6ICVzIgorbXNnc3RyICJpZ25vcmVyZXIgbmF2bmV0amVuZXIgJXMgLSBrYW4gaWtrZSBsYWdlL2RpbmRlIHNvY2tldDogJXMiCisKKyM6IG5ldHdvcmsuYzoxNDY4Cittc2dpZCAidW5xdWFsaWZpZWQiCittc2dzdHIgImlra2Uga3ZhbGlmaXNlcnQiCisKKyM6IG5ldHdvcmsuYzoxNDY4Cittc2dpZCAibmFtZXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE0NzAKK21zZ2lkICJkZWZhdWx0IgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNDcyCittc2dpZCAiZG9tYWluIgorbXNnc3RyICJkb21lbmUiCisKKyM6IG5ldHdvcmsuYzoxNDc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIGxvY2FsIGFkZHJlc3NlcyBvbmx5IGZvciAlcyAlcyIKK21zZ3N0ciAiYmVueXR0ZXIgbG9rYWxlIGFkcmVzc2VyIGt1biBmb3IgJXMgJXMiCisKKyM6IG5ldHdvcmsuYzoxNDc3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBzdGFuZGFyZCBuYW1lc2VydmVycyBmb3IgJXMgJXMiCittc2dzdHIgImJlbnl0dGVyIG5hdm5ldGplbmVyICVzIyVkIGZvciAlcyAlcyIKKworIzogbmV0d29yay5jOjE0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCBmb3IgJXMgJXMiCittc2dzdHIgImJlbnl0dGVyIG5hdm5ldGplbmVyICVzIyVkIGZvciAlcyAlcyIKKworIzogbmV0d29yay5jOjE0ODMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk5PVCB1c2luZyBuYW1lc2VydmVyICVzIyVkIC0gcXVlcnkgbG9vcCBkZXRlY3RlZCIKK21zZ3N0ciAiYmVueXR0ZXIgbmF2bmV0amVuZXIgJXMjJWQgZm9yICVzICVzIgorCisjOiBuZXR3b3JrLmM6MTQ4NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCh2aWEgJXMpIgorbXNnc3RyICJiZW55dHRlciBuYXZuZXRqZW5lciAlcyMlZCIKKworIzogbmV0d29yay5jOjE0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCIKK21zZ3N0ciAiYmVueXR0ZXIgbmF2bmV0amVuZXIgJXMjJWQiCisKKyM6IGRuc21hc3EuYzoxNTQKK21zZ2lkICJObyB0cnVzdCBhbmNob3JzIHByb3ZpZGVkIGZvciBETlNTRUMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE1NworbXNnaWQgIkNhbm5vdCByZWR1Y2UgY2FjaGUgc2l6ZSBmcm9tIGRlZmF1bHQgd2hlbiBETlNTRUMgZW5hYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTU5CisjLCBmdXp6eQorbXNnaWQgIkROU1NFQyBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9ETlNTRUMgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJEQnVzIGlra2UgdGlsZ2plbmdlbGlnOiBzZXR0IEhBVkVfREJVUyBpIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjE2NQorIywgZnV6enkKK21zZ2lkICJURlRQIHNlcnZlciBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9URlRQIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiREJ1cyBpa2tlIHRpbGdqZW5nZWxpZzogc2V0dCBIQVZFX0RCVVMgaSBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzoxNzAKK21zZ2lkICJDYW5ub3QgdXNlIC0tY29ubnRyYWNrIEFORCAtLXF1ZXJ5LXBvcnQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE3MworIywgZnV6enkKK21zZ2lkICJDb25udHJhY2sgc3VwcG9ydCBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9DT05OVFJBQ0sgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJEQnVzIGlra2UgdGlsZ2plbmdlbGlnOiBzZXR0IEhBVkVfREJVUyBpIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjE3OAorbXNnaWQgImFzeWNocm9ub3VzIGxvZ2dpbmcgaXMgbm90IGF2YWlsYWJsZSB1bmRlciBTb2xhcmlzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxODMKK21zZ2lkICJhc3ljaHJvbm91cyBsb2dnaW5nIGlzIG5vdCBhdmFpbGFibGUgdW5kZXIgQW5kcm9pZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTg4CisjLCBmdXp6eQorbXNnaWQgImF1dGhvcml0YXRpdmUgRE5TIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0FVVEggaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJEQnVzIGlra2UgdGlsZ2plbmdlbGlnOiBzZXR0IEhBVkVfREJVUyBpIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjE5MworIywgZnV6enkKK21zZ2lkICJMb29wIGRldGVjdGlvbiBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9MT09QIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiREJ1cyBpa2tlIHRpbGdqZW5nZWxpZzogc2V0dCBIQVZFX0RCVVMgaSBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzoyMDEKK21zZ2lkICJ6b25lIHNlcmlhbCBtdXN0IGJlIGNvbmZpZ3VyZWQgaW4gLS1hdXRoLXNvYSIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MjE5Cittc2dpZCAiZGhjcC1yYW5nZSBjb25zdHJ1Y3RvciBub3QgYXZhaWxhYmxlIG9uIHRoaXMgcGxhdGZvcm0iCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjI2MgorbXNnaWQgImNhbm5vdCBzZXQgLS1iaW5kLWludGVyZmFjZXMgYW5kIC0tYmluZC1keW5hbWljIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQgbGlzdCBvZiBpbnRlcmZhY2VzOiAlcyIKK21zZ3N0ciAiZmVpbGV0IOUgZmlubmUgbGlzdGUgYXYgdGlsa255dG5pbmdlciAoaW50ZXJmYWNlcyk6ICVzIgorCisjOiBkbnNtYXNxLmM6Mjc0CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW50ZXJmYWNlICVzIgorbXNnc3RyICJ1a2plbnQgdGlsa255dG5pbmcgKGludGVyZmFjZSkgJXMiCisKKyM6IGRuc21hc3EuYzozMzAgZG5zbWFzcS5jOjk1NAorIywgYy1mb3JtYXQKK21zZ2lkICJEQnVzIGVycm9yOiAlcyIKK21zZ3N0ciAiREJ1cyBmZWlsOiAlcyIKKworIzogZG5zbWFzcS5jOjMzMworbXNnaWQgIkRCdXMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfREJVUyBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIkRCdXMgaWtrZSB0aWxnamVuZ2VsaWc6IHNldHQgSEFWRV9EQlVTIGkgc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MzYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdXNlciBvciBncm91cDogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjQxNgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gZmlsZXN5c3RlbSByb290OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NjUzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIEROUyBkaXNhYmxlZCIKK21zZ3N0ciAic3RhcnRldCwgdmVyc2pvbiAlcyBtZWxsb21sYWdlciBkZWFrdGl2ZXJ0IgorCisjOiBkbnNtYXNxLmM6NjU1CisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGVzaXplICVkIgorbXNnc3RyICJzdGFydGV0LCB2ZXJzam9uICVzIG1lbGxvbWxhZ2VyIHN0+HJyZWxzZSAlZCIKKworIzogZG5zbWFzcS5jOjY1NworIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIGNhY2hlIGRpc2FibGVkIgorbXNnc3RyICJzdGFydGV0LCB2ZXJzam9uICVzIG1lbGxvbWxhZ2VyIGRlYWt0aXZlcnQiCisKKyM6IGRuc21hc3EuYzo2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tcGlsZSB0aW1lIG9wdGlvbnM6ICVzIgorbXNnc3RyICJrb21waWxlcmluZ3Mgb3Bzam9uZXI6ICVzIgorCisjOiBkbnNtYXNxLmM6NjY1Cittc2dpZCAiREJ1cyBzdXBwb3J0IGVuYWJsZWQ6IGNvbm5lY3RlZCB0byBzeXN0ZW0gYnVzIgorbXNnc3RyICJEQnVzIHN0+HR0ZSBha3RpdmVydDoga29ibGV0IHRpbCBzeXN0ZW0gYnVzcyIKKworIzogZG5zbWFzcS5jOjY2NworbXNnaWQgIkRCdXMgc3VwcG9ydCBlbmFibGVkOiBidXMgY29ubmVjdGlvbiBwZW5kaW5nIgorbXNnc3RyICJEQnVzIHN0+HR0ZSBha3RpdmVydDogYXZ2ZW50ZXIgYnVzcyB0aWxrb2JsaW5nIgorCisjOiBkbnNtYXNxLmM6NjcyCittc2dpZCAiRE5TIHNlcnZpY2UgbGltaXRlZCB0byBsb2NhbCBzdWJuZXRzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo2NzcKK21zZ2lkICJETlNTRUMgdmFsaWRhdGlvbiBlbmFibGVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo2NzkKK21zZ2lkICJETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMgbm90IGNoZWNrZWQgdW50aWwgZmlyc3QgY2FjaGUgcmVsb2FkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo2ODQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGZhaWxlZCB0byBjaGFuZ2Ugb3duZXIgb2YgJXM6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBsYXN0ZSBuYXZuIGZyYSAlczogJXMiCisKKyM6IGRuc21hc3EuYzo2ODgKK21zZ2lkICJzZXR0aW5nIC0tYmluZC1pbnRlcmZhY2VzIG9wdGlvbiBiZWNhdXNlIG9mIE9TIGxpbWl0YXRpb25zIgorbXNnc3RyICJzZXR0ZXIgLS1iaW5kLWludGVyZmFjZXMgb3Bzam9uIHDlIGdydW5uIGF2IE9TIGJlZ3JlbnNuaW5nZXIiCisKKyM6IGRuc21hc3EuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogaW50ZXJmYWNlICVzIGRvZXMgbm90IGN1cnJlbnRseSBleGlzdCIKK21zZ3N0ciAiYWR2YXJzZWw6IG5ldHR2ZXJrc2tvcnQgJXMgZWtzaXN0ZXJlciBpa2tlIGZvciB0aWRlbiIKKworIzogZG5zbWFzcS5jOjcwMworbXNnaWQgIndhcm5pbmc6IGlnbm9yaW5nIHJlc29sdi1maWxlIGZsYWcgYmVjYXVzZSBuby1yZXNvbHYgaXMgc2V0IgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3MDYKKyMsIGZ1enp5Cittc2dpZCAid2FybmluZzogbm8gdXBzdHJlYW0gc2VydmVycyBjb25maWd1cmVkIgorbXNnc3RyICJzZXR0ZXIgb3Bwc3Ry+G1zIHRqZW5lciBmcmEgREJ1cyIKKworIzogZG5zbWFzcS5jOjcxMAorIywgYy1mb3JtYXQKK21zZ2lkICJhc3luY2hyb25vdXMgbG9nZ2luZyBlbmFibGVkLCBxdWV1ZSBsaW1pdCBpcyAlZCBtZXNzYWdlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzMxCittc2dpZCAiSVB2NiByb3V0ZXIgYWR2ZXJ0aXNlbWVudCBlbmFibGVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCwgc29ja2V0cyBib3VuZCBleGNsdXNpdmVseSB0byBpbnRlcmZhY2UgJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc1MworbXNnaWQgInJvb3QgaXMgIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3NTMKKyMsIGZ1enp5Cittc2dpZCAiZW5hYmxlZCIKK21zZ3N0ciAiZGVha3RpdmVydCIKKworIzogZG5zbWFzcS5jOjc1NQorbXNnaWQgInNlY3VyZSBtb2RlIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVzdHJpY3RpbmcgbWF4aW11bSBzaW11bHRhbmVvdXMgVEZUUCB0cmFuc2ZlcnMgdG8gJWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjk1NgorbXNnaWQgImNvbm5lY3RlZCB0byBzeXN0ZW0gREJ1cyIKK21zZ3N0ciAidGlsa29ibGV0IHRpbCBzeXN0ZW0gREJ1cyIKKworIzogZG5zbWFzcS5jOjExMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZvcmsgaW50byBiYWNrZ3JvdW5kOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTEwOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBoZWxwZXI6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBsZXNlICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjExMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic2V0dGluZyBjYXBhYmlsaXRpZXMgZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTExNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSB1c2VyLWlkIHRvICVzOiAlcyIKK21zZ3N0ciAiZmVpbGV0IOUgbGFzdGUgbmF2biBmcmEgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTExOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSBncm91cC1pZCB0byAlczogJXMiCittc2dzdHIgImZlaWxldCDlIGxhc3RlIG5hdm4gZnJhICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjExMjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuIHBpZGZpbGUgJXM6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBsZXNlICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjExMjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIGxvZyAlczogJXMiCittc2dzdHIgImthbiBpa2tlIOVwbmUgJXM6JXMiCisKKyM6IGRuc21hc3EuYzoxMTI3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBMdWEgc2NyaXB0OiAlcyIKK21zZ3N0ciAiZmVpbGV0IOUgbGFzdGUgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJURlRQIGRpcmVjdG9yeSAlcyBpbmFjY2Vzc2libGU6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMTUxCittc2dpZCAibm93IGNoZWNraW5nIEROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTIxOAorIywgYy1mb3JtYXQKK21zZ2lkICJzY3JpcHQgcHJvY2VzcyBraWxsZWQgYnkgc2lnbmFsICVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMjIyCisjLCBjLWZvcm1hdAorbXNnaWQgInNjcmlwdCBwcm9jZXNzIGV4aXRlZCB3aXRoIHN0YXR1cyAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTIyNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4ZWN1dGUgJXM6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBm5SB0aWxnYW5nIHRpbCAlczogJXMiCisKKyM6IGRuc21hc3EuYzoxMjgxCittc2dpZCAiZXhpdGluZyBvbiByZWNlaXB0IG9mIFNJR1RFUk0iCittc2dzdHIgImF2c2x1dHRlciBldHRlciBtb3R0YWsgYXYgU0lHVEVSTSIKKworIzogZG5zbWFzcS5jOjEzMDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhY2Nlc3MgJXM6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBm5SB0aWxnYW5nIHRpbCAlczogJXMiCisKKyM6IGRuc21hc3EuYzoxMzM5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgJXMiCittc2dzdHIgImxlc2VyICVzIgorCisjOiBkbnNtYXNxLmM6MTM1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibm8gc2VydmVycyBmb3VuZCBpbiAlcywgd2lsbCByZXRyeSIKK21zZ3N0ciAiaW50ZXQgc/hrZSBkaXJla3RpdiBmdW5uZXQgaSAlcyIKKworIzogZGhjcC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJrYW4gaWtrZSBsYWdlIERIQ1Agc29ja2V0OiAlcyIKKworIzogZGhjcC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgb3B0aW9ucyBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgImZlaWxldCDlIHNldHRlIG9wc2pvbmVyIHDlIERIQ1Agc29ja2V0OiAlcyIKKworIzogZGhjcC5jOjg5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX1JFVVNFe0FERFJ8UE9SVH0gb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBzZXR0ZSBTT19SRVVTRUFERFIgcOUgREhDUCBzb2NrZXQ6ICVzIgorCisjOiBkaGNwLmM6MTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIERIQ1Agc2VydmVyIHNvY2tldDogJXMiCittc2dzdHIgImZlaWxldCDlIGJpbmRlIERIQ1AgdGplbmVyIHNvY2tldDogJXMiCisKKyM6IGRoY3AuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBJQ01QIHJhdyBzb2NrZXQ6ICVzLiIKK21zZ3N0ciAia2FuIGlra2UgbGFnZSBJQ01QIHJhdyBzb2NrZXQ6ICVzIgorCisjOiBkaGNwLmM6MjM5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGludGVyZmFjZSAlcyBpbiBicmlkZ2UtaW50ZXJmYWNlIgorbXNnc3RyICJ1a2plbnQgdGlsa255dG5pbmcgKGludGVyZmFjZSkgJXMiCisKKyM6IGRoY3AuYzoyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCBwYWNrZXQgcmVjZWl2ZWQgb24gJXMgd2hpY2ggaGFzIG5vIGFkZHJlc3MiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJBUlAtY2FjaGUgaW5qZWN0aW9uIGZhaWxlZDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjUwNgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJhbmdlICVzIC0tICVzIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggbmV0bWFzayAlcyIKK21zZ3N0ciAiREhDUCBvbXLlZGUgJXMgLS0gJXMgZXIgaWtrZSBrb25zaXN0ZW50IG1lZCBuZXR0bWFza2UgJXMiCisKKyM6IGRoY3AuYzo4MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGxpbmUgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAiZOVybGlnIGxpbmplIHZlZCAlcyBsaW5qZSAlZCIKKworIzogZGhjcC5jOjg1MAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlcyBsaW5lICVkLCBkdXBsaWNhdGUgbmFtZSBvciBJUCBhZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo5OTQgcmZjMzMxNS5jOjIwODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByZWxheSAlcyAtPiAlcyIKK21zZ3N0ciAiIgorCisjOiBsZWFzZS5jOjYxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBvciBjcmVhdGUgbGVhc2UgZmlsZSAlczogJXMiCittc2dzdHIgImthbiBpa2tlIOVwbmUgZWxsZXIgbGFnZSBsZWllIGZpbDogJXMiCisKKyM6IGxlYXNlLmM6MTM0Cittc2dpZCAidG9vIG1hbnkgc3RvcmVkIGxlYXNlcyIKK21zZ3N0ciAiZm9yIG1hbmdlIGxhZ3JlZGUgbGVpZXIiCisKKyM6IGxlYXNlLmM6MTY1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcnVuIGxlYXNlLWluaXQgc2NyaXB0ICVzOiAlcyIKK21zZ3N0ciAia2FuIGlra2UgbGVzZSAlczogJXMiCisKKyM6IGxlYXNlLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgImxlYXNlLWluaXQgc2NyaXB0IHJldHVybmVkIGV4aXQgY29kZSAlcyIKK21zZ3N0ciAiIgorCisjOiBsZWFzZS5jOjM0MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlICVzOiAlcyAocmV0cnkgaW4gJXVzKSIKK21zZ3N0ciAiZmVpbGV0IOUgbGVzZSAlczogJXMiCisKKyM6IGxlYXNlLmM6OTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIklnbm9yaW5nIGRvbWFpbiAlcyBmb3IgREhDUCBob3N0IG5hbWUgJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjM0MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBhZGRyZXNzIHJhbmdlIGF2YWlsYWJsZSBmb3IgREhDUCByZXF1ZXN0ICVzICVzIgorbXNnc3RyICJpbmdlbiBhZHJlc3NlIG9tcuVkZSB0aWxnamVuZ2VsaWcgZm9yIERIQ1Aga3JhdiAlcyAlcyIKKworIzogcmZjMjEzMS5jOjM0MworbXNnaWQgIndpdGggc3VibmV0IHNlbGVjdG9yIgorbXNnc3RyICJtZWQgc3VibmV0IHZlbGdlciIKKworIzogcmZjMjEzMS5jOjM0MworbXNnaWQgInZpYSIKK21zZ3N0ciAidmlhIgorCisjOiByZmMyMTMxLmM6MzU1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSBhdmFpbGFibGUgREhDUCBzdWJuZXQ6ICVzLyVzIgorbXNnc3RyICJpbmdlbiBhZHJlc3NlIG9tcuVkZSB0aWxnamVuZ2VsaWcgZm9yIERIQ1Aga3JhdiAlcyAlcyIKKworIzogcmZjMjEzMS5jOjM1OCByZmMzMzE1LmM6MzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGF2YWlsYWJsZSBESENQIHJhbmdlOiAlcyAtLSAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NDY5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSB2ZW5kb3IgY2xhc3M6ICVzIgorbXNnc3RyICJEQnVzIGZlaWw6ICVzIgorCisjOiByZmMyMTMxLmM6NDcxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSB1c2VyIGNsYXNzOiAlcyIKK21zZ3N0ciAiREJ1cyBmZWlsOiAlcyIKKworIzogcmZjMjEzMS5jOjQ5OAorbXNnaWQgImRpc2FibGVkIgorbXNnc3RyICJkZWFrdGl2ZXJ0IgorCisjOiByZmMyMTMxLmM6NTM5IHJmYzIxMzEuYzo5NjcgcmZjMjEzMS5jOjEzODUgcmZjMzMxNS5jOjYwMiByZmMzMzE1LmM6ODIzCisjOiByZmMzMzE1LmM6MTA5NQorbXNnaWQgImlnbm9yZWQiCittc2dzdHIgIm92ZXJzZXR0IgorCisjOiByZmMyMTMxLmM6NTU0IHJmYzIxMzEuYzoxMjA1IHJmYzMzMTUuYzo4NzMKK21zZ2lkICJhZGRyZXNzIGluIHVzZSIKK21zZ3N0ciAiYWRyZXNzZSBpIGJydWsiCisKKyM6IHJmYzIxMzEuYzo1NjggcmZjMjEzMS5jOjEwMjEKK21zZ2lkICJubyBhZGRyZXNzIGF2YWlsYWJsZSIKK21zZ3N0ciAiaW5nZW4gYWRyZXNzZSB0aWxnamVuZ2VsaWciCisKKyM6IHJmYzIxMzEuYzo1NzUgcmZjMjEzMS5jOjExNjgKK21zZ2lkICJ3cm9uZyBuZXR3b3JrIgorbXNnc3RyICJnYWx0IG5ldHR2ZXJrIgorCisjOiByZmMyMTMxLmM6NTkwCittc2dpZCAibm8gYWRkcmVzcyBjb25maWd1cmVkIgorbXNnc3RyICJpbmdlbiBhZHJlc3NlIGtvbmZpZ3VyZXJ0IgorCisjOiByZmMyMTMxLmM6NTk2IHJmYzIxMzEuYzoxMjE4Cittc2dpZCAibm8gbGVhc2VzIGxlZnQiCittc2dzdHIgImluZ2VuIGxlaWVyIGlnamVuIgorCisjOiByZmMyMTMxLmM6NjkxIHJmYzMzMTUuYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgY2xpZW50IHByb3ZpZGVzIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo3OTYKK21zZ2lkICJQWEUgQklTIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjkzNSByZmMzMzE1LmM6MTE4OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZGlzYWJsaW5nIERIQ1Agc3RhdGljIGFkZHJlc3MgJXMgZm9yICVzIgorbXNnc3RyICJkZWFrdGl2ZXJlciBESENQIHN0YXRpc2sgYWRyZXNzZSAlcyIKKworIzogcmZjMjEzMS5jOjk1NgorbXNnaWQgInVua25vd24gbGVhc2UiCittc2dzdHIgInVramVudCBsZWllIgorCisjOiByZmMyMTMxLmM6OTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCBpcyBsZWFzZWQgdG8gJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IGlzIGluIHVzZSBieSB0aGUgc2VydmVyIG9yIHJlbGF5IgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCB3YXMgcHJldmlvdXNseSBkZWNsaW5lZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTAxOSByZmMyMTMxLmM6MTIxMQorbXNnaWQgIm5vIHVuaXF1ZS1pZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTEwNgorbXNnaWQgIndyb25nIHNlcnZlci1JRCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTEyNQorbXNnaWQgIndyb25nIGFkZHJlc3MiCittc2dzdHIgImdhbCBhZHJlc3NlIgorCisjOiByZmMyMTMxLmM6MTE0MyByZmMzMzE1LmM6OTY5Cittc2dpZCAibGVhc2Ugbm90IGZvdW5kIgorbXNnc3RyICJsZWllIGlra2UgZnVubmV0IgorCisjOiByZmMyMTMxLmM6MTE3NgorbXNnaWQgImFkZHJlc3Mgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAiYWRyZXNzZSBpa2tlIHRpbGdqZW5nZWxpZyIKKworIzogcmZjMjEzMS5jOjExODcKK21zZ2lkICJzdGF0aWMgbGVhc2UgYXZhaWxhYmxlIgorbXNnc3RyICJzdGF0aXNrIGxlaWUgdGlsZ2plbmdlbGlnIgorCisjOiByZmMyMTMxLmM6MTE5MQorbXNnaWQgImFkZHJlc3MgcmVzZXJ2ZWQiCittc2dzdHIgImFkcmVzc2UgcmVzZXJ2ZXJ0IgorCisjOiByZmMyMTMxLmM6MTE5OQorIywgYy1mb3JtYXQKK21zZ2lkICJhYmFuZG9uaW5nIGxlYXNlIHRvICVzIG9mICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxNzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJvb3RmaWxlIG5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxNzIxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSBzZXJ2ZXIgbmFtZTogJXMiCittc2dzdHIgIkRCdXMgZmVpbDogJXMiCisKKyM6IHJmYzIxMzEuYzoxNzI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSBuZXh0IHNlcnZlcjogJXMiCittc2dzdHIgIkRCdXMgZmVpbDogJXMiCisKKyM6IHJmYzIxMzEuYzoxNzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJyb2FkY2FzdCByZXNwb25zZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTc5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHNlbmQgREhDUC9CT09UUCBvcHRpb24gJWQ6IG5vIHNwYWNlIGxlZnQgaW4gcGFja2V0IgorbXNnc3RyICJrYW4gaWtrZSBzZW5kZSBESENQIG9wc2pvbiAlZDogaWtrZSBtZXIgcGxhc3MgaSBwYWtrZW4iCisKKyM6IHJmYzIxMzEuYzoyMDM2Cittc2dpZCAiUFhFIG1lbnUgdG9vIGxhcmdlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoyMTczIHJmYzMzMTUuYzoxNDU2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSByZXF1ZXN0ZWQgb3B0aW9uczogJXMiCittc2dzdHIgImtvbXBpbGVyaW5ncyBvcHNqb25lcjogJXMiCisKKyM6IHJmYzIxMzEuYzoyNDUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzZW5kIFJGQzM5MjUgb3B0aW9uOiB0b28gbWFueSBvcHRpb25zIGZvciBlbnRlcnByaXNlIG51bWJlciAlZCIKK21zZ3N0ciAiIgorCisjOiBuZXRsaW5rLmM6NzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgbmV0bGluayBzb2NrZXQ6ICVzIgorbXNnc3RyICJrYW4gaWtrZSBiaW5kZSBuZXRsaW5rIHNvY2tldDogJXMiCisKKyM6IG5ldGxpbmsuYzozNDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5ldGxpbmsgcmV0dXJucyBlcnJvcjogJXMiCittc2dzdHIgIkRCdXMgZmVpbDogJXMiCisKKyM6IGRidXMuYzoxNzEKK21zZ2lkICJhdHRlbXB0IHRvIHNldCBhbiBJUHY2IHNlcnZlciBhZGRyZXNzIHZpYSBEQnVzIC0gbm8gSVB2NiBzdXBwb3J0IgorbXNnc3RyICJmb3Jz+GsgcOUg5SBzZXR0ZSBlbiBJUHY2IHRqZW5lciBhZHJlc3NlIHZpYSBEQnVzIC0gaW5nZW4gSVB2NiBzdPh0dGUiCisKKyM6IGRidXMuYzo1MDAKK21zZ2lkICJzZXR0aW5nIHVwc3RyZWFtIHNlcnZlcnMgZnJvbSBEQnVzIgorbXNnc3RyICJzZXR0ZXIgb3Bwc3Ry+G1zIHRqZW5lciBmcmEgREJ1cyIKKworIzogZGJ1cy5jOjU0NworbXNnaWQgImNvdWxkIG5vdCByZWdpc3RlciBhIERCdXMgbWVzc2FnZSBoYW5kbGVyIgorbXNnc3RyICJrdW5uZSBpa2tlIHJlZ2lzdHJlcmUgZW4gREJ1cyBtZWxkaW5nc2jlbmR0ZXJlciIKKworIzogYnBmLmM6MjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUCBCUEYgc29ja2V0OiAlcyIKK21zZ3N0ciAia2FuIGlra2UgbGFnZSBESENQIEJQRiBzb2NrZXQ6ICVzIgorCisjOiBicGYuYzoyOTEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVxdWVzdCBmb3IgdW5zdXBwb3J0ZWQgaGFyZHdhcmUgdHlwZSAoJWQpIHJlY2VpdmVkIG9uICVzIgorbXNnc3RyICJESENQIGtyYXYgZm9yIGlra2Ugc3T4dHRldCBtYXNraW52YXJlIHR5cGUgKCVkKSBtb3R0YXR0IHDlICVzIgorCisjOiBicGYuYzozNzYKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgUEZfUk9VVEUgc29ja2V0OiAlcyIKK21zZ3N0ciAia2FuIGlra2UgbGFnZSBESENQIHNvY2tldDogJXMiCisKKyM6IGJwZi5jOjM5NworbXNnaWQgIlVua25vd24gcHJvdG9jb2wgdmVyc2lvbiBmcm9tIHJvdXRlIHNvY2tldCIKK21zZ3N0ciAiIgorCisjOiBoZWxwZXIuYzoxNTMKK21zZ2lkICJsZWFzZSgpIGZ1bmN0aW9uIG1pc3NpbmcgaW4gTHVhIHNjcmlwdCIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6MzA5Cittc2dpZCAidW5hYmxlIHRvIGdldCBmcmVlIHBvcnQgZm9yIFRGVFAiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjMyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCByZXF1ZXN0IGZyb20gJXMiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjQzOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBub3QgZm91bmQiCittc2dzdHIgImxlaWUgaWtrZSBmdW5uZXQiCisKKyM6IHRmdHAuYzo1NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3IgJWQgJXMgcmVjZWl2ZWQgZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6NTkwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgc2VuZGluZyAlcyB0byAlcyIKK21zZ3N0ciAiZmVpbGV0IOUgbGVzZSAlczogJXMiCisKKyM6IHRmdHAuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VudCAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBsb2cuYzoxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAib3ZlcmZsb3c6ICVkIGxvZyBlbnRyaWVzIGxvc3QiCittc2dzdHIgIiIKKworIzogbG9nLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImxvZyBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGxvZy5jOjQ3MgorbXNnaWQgIkZBSUxFRCB0byBzdGFydCB1cCIKK21zZ3N0ciAiRkVJTEVUIOUgc3RhcnRlIG9wcCIKKworIzogY29ubnRyYWNrLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ubnRyYWNrIGNvbm5lY3Rpb24gbWFyayByZXRyaWV2YWwgZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwNi5jOjU5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1B2NiBzb2NrZXQ6ICVzIgorbXNnc3RyICJrYW4gaWtrZSBsYWdlIERIQ1Agc29ja2V0OiAlcyIKKworIzogZGhjcDYuYzo4MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBTT19SRVVTRXtBRERSfFBPUlR9IG9uIERIQ1B2NiBzb2NrZXQ6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBzZXR0ZSBTT19SRVVTRUFERFIgcOUgREhDUCBzb2NrZXQ6ICVzIgorCisjOiBkaGNwNi5jOjkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBESENQdjYgc2VydmVyIHNvY2tldDogJXMiCittc2dzdHIgImZlaWxldCDlIGJpbmRlIERIQ1AgdGplbmVyIHNvY2tldDogJXMiCisKKyM6IHJmYzMzMTUuYzoxNTcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQdjYgcmVxdWVzdCBmcm9tIHJlbGF5IGF0ICVzIgorbXNnc3RyICJpbmdlbiBhZHJlc3NlIG9tcuVkZSB0aWxnamVuZ2VsaWcgZm9yIERIQ1Aga3JhdiAlcyAlcyIKKworIzogcmZjMzMxNS5jOjE2NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibm8gYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgZm9yIERIQ1B2NiByZXF1ZXN0IHZpYSAlcyIKK21zZ3N0ciAiaW5nZW4gYWRyZXNzZSBvbXLlZGUgdGlsZ2plbmdlbGlnIGZvciBESENQIGtyYXYgJXMgJXMiCisKKyM6IHJmYzMzMTUuYzoyOTcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IGF2YWlsYWJsZSBESENQdjYgc3VibmV0OiAlcy8lZCIKK21zZ3N0ciAiaW5nZW4gYWRyZXNzZSBvbXLlZGUgdGlsZ2plbmdlbGlnIGZvciBESENQIGtyYXYgJXMgJXMiCisKKyM6IHJmYzMzMTUuYzozNzkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IHZlbmRvciBjbGFzczogJXUiCittc2dzdHIgIkRCdXMgZmVpbDogJXMiCisKKyM6IHJmYzMzMTUuYzo0MjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IGNsaWVudCBNQUMgYWRkcmVzczogJXMiCittc2dzdHIgImluZ2VuIHRpbGtueXRuaW5nIChpbnRlcmZhY2UpIG1lZCBhZHJlc3NlICVzIgorCisjOiByZmMzMzE1LmM6NjU5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHByZWZpeC1jbGFzcyAlZCIKK21zZ3N0ciAidWtqZW50IGxlaWUiCisKKyM6IHJmYzMzMTUuYzo3OTEgcmZjMzMxNS5jOjkxMworbXNnaWQgInN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjgwNiByZmMzMzE1LmM6ODA4IHJmYzMzMTUuYzo5MjEgcmZjMzMxNS5jOjkyMworIywgZnV6enkKK21zZ2lkICJubyBhZGRyZXNzZXMgYXZhaWxhYmxlIgorbXNnc3RyICJpbmdlbiBhZHJlc3NlIHRpbGdqZW5nZWxpZyIKKworIzogcmZjMzMxNS5jOjg2NQorIywgZnV6enkKK21zZ2lkICJhZGRyZXNzIHVuYXZhaWxhYmxlIgorbXNnc3RyICJhZHJlc3NlIGlra2UgdGlsZ2plbmdlbGlnIgorCisjOiByZmMzMzE1LmM6OTAwCittc2dpZCAibm90IG9uIGxpbmsiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjk3MyByZmMzMzE1LmM6MTE1MSByZmMzMzE1LmM6MTIyOAorbXNnaWQgIm5vIGJpbmRpbmcgZm91bmQiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjEwMTEKK21zZ2lkICJkZXByZWNhdGVkIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzoxMDE2CisjLCBmdXp6eQorbXNnaWQgImFkZHJlc3MgaW52YWxpZCIKK21zZ3N0ciAiYWRyZXNzZSBpIGJydWsiCisKKyM6IHJmYzMzMTUuYzoxMDYxCittc2dpZCAiY29uZmlybSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjEwNzIKKyMsIGZ1enp5Cittc2dpZCAiYWxsIGFkZHJlc3NlcyBzdGlsbCBvbiBsaW5rIgorbXNnc3RyICJk5XJsaWcgYWRyZXNzZSB2ZWQgJXMgbGluamUgJWQiCisKKyM6IHJmYzMzMTUuYzoxMTYwCittc2dpZCAicmVsZWFzZSByZWNlaXZlZCIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6MjA4MAorbXNnaWQgIkNhbm5vdCBtdWx0aWNhc3QgdG8gREhDUHY2IHNlcnZlciB3aXRob3V0IGNvcnJlY3QgaW50ZXJmYWNlIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIklnbm9yaW5nIGR1cGxpY2F0ZSBkaGNwLW9wdGlvbiAlZCIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICIldSB0YWdzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgbW9yZSB0aGFuIG9uZSBhZGRyZXNzIGluIGhvc3RzZmlsZSwgdXNpbmcgJXMgZm9yIERIQ1AiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgKCVzKSBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUiCittc2dzdHIgImR1Ymxpc2VydGUgSVAgYWRyZXNzZXIgaSAlcyAoJXMpIGkgZGhjcC1jb25maWcgZGlyZWt0aXYiCisKKyM6IGRoY3AtY29tbW9uLmM6NDk0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX0JJTkRUT0RFVklDRSBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgImZlaWxldCDlIHNldHRlIFNPX1JFVVNFQUREUiBw5SBESENQIHNvY2tldDogJXMiCisKKyM6IGRoY3AtY29tbW9uLmM6NjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIktub3duIERIQ1Agb3B0aW9uczpcbiIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJLbm93biBESENQdjYgb3B0aW9uczpcbiIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjgyMworbXNnaWQgIiwgcHJlZml4IGRlcHJlY2F0ZWQiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBsZWFzZSB0aW1lICIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjg2OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdGF0ZWxlc3Mgb24gJXMlLjBzJS4wcyVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODcwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcywgc3RhdGljIGxlYXNlcyBvbmx5IG9uICUuMHMlcyVzJS4wcyIKK21zZ3N0ciAiREhDUCwgc3RhdGlzayBsZWllIGt1biBw5SAlLjBzJXMsIGxlaWUgdGlkICVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjg3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgcHJveHkgb24gc3VibmV0ICUuMHMlcyUuMHMlLjBzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODczCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcywgSVAgcmFuZ2UgJXMgLS0gJXMlcyUuMHMiCittc2dzdHIgIkRIQ1AsIElQIG9tcuVkZSAlcyAtLSAlcywgbGVpZSB0aWQgJXMiCisKKyM6IGRoY3AtY29tbW9uLmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1B2NC1kZXJpdmVkIElQdjYgbmFtZXMgb24gJXMlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjg4OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicm91dGVyIGFkdmVydGlzZW1lbnQgb24gJXMlcyIKK21zZ3N0ciAiREhDUCwgc3RhdGlzayBsZWllIGt1biBw5SAlLjBzJXMsIGxlaWUgdGlkICVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlbGF5IGZyb20gJXMgdG8gJXMgdmlhICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6OTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVsYXkgZnJvbSAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiByYWR2LmM6OTgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgSUNNUHY2IHNvY2tldDogJXMiCittc2dzdHIgImthbiBpa2tlIGxhZ2UgREhDUCBzb2NrZXQ6ICVzIgorCisjOiBhdXRoLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHpvbmUgdHJhbnNmZXIgcmVxdWVzdCBmcm9tICVzIgorbXNnc3RyICIiCisKKyM6IGlwc2V0LmM6OTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIGtlcm5lbCB2ZXJzaW9uOiAlcyIKK21zZ3N0ciAiZmVpbGV0IOUgYmluZGUgREhDUCB0amVuZXIgc29ja2V0OiAlcyIKKworIzogaXBzZXQuYzoxMTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgSVBzZXQgY29udHJvbCBzb2NrZXQ6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBsYWdlIGx5dHRlIHNvY2tldDogJXMiCisKKyM6IGJsb2NrZGF0YS5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkROU1NFQyBtZW1vcnkgaW4gdXNlICV1LCBtYXggJXUsIGFsbG9jYXRlZCAldSIKK21zZ3N0ciAiIgorCisjOiB0YWJsZXMuYzo3NgorbXNnaWQgImVycm9yOiBmaWxsX2FkZHIgbWlzc3VzZWQiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTA1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWNjZXNzIHBmIGRldmljZXM6ICVzIgorbXNnc3RyICJmZWlsZXQg5SBm5SB0aWxnYW5nIHRpbCAlczogJXMiCisKKyM6IHRhYmxlcy5jOjExOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogbm8gb3BlbmVkIHBmIGRldmljZXMgJXMiCittc2dzdHIgImJlbnl0dGVyIGxva2FsZSBhZHJlc3NlciBrdW4gZm9yICVzICVzIgorCisjOiB0YWJsZXMuYzoxMjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImVycm9yOiBjYW5ub3QgdXNlIHRhYmxlIG5hbWUgJXMiCittc2dzdHIgImtsYXJlciBpa2tlIOUgZuUgdmVydHNuYXZuOiAlcyIKKworIzogdGFibGVzLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yOiBjYW5ub3Qgc3RybGNweSB0YWJsZSBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBwZnJfYWRkX3RhYmxlczogJXMoJWQpIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjE0NworbXNnaWQgImluZm86IHRhYmxlIGNyZWF0ZWQiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IERJT0NSJXNBRERSUzogJXMiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTYyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlZCBhZGRyZXNzZXMgJXMiCittc2dzdHIgImxlcyAlcyAtICVkIGFkcmVzc2VyIgorCisjfiBtc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgaW4gZGhjcC1jb25maWcgZGlyZWN0aXZlLiIKKyN+IG1zZ3N0ciAiZHVibGlzZXJ0ZSBJUCBhZHJlc3NlciBpICVzIGRoY3AtY29uZmlnIGRpcmVrdGl2LiIKKworIywgZnV6enkKKyN+IG1zZ2lkICJTcGVjaWZ5IHBhdGggdG8gTHVhIHNjcmlwdCAobm8gZGVmYXVsdCkuIgorI34gbXNnc3RyICJTcGVzaWZpc2VyIHN0aWVuIHRpbCBQSUQgZmlsLiAoc3RhbmRhcmQgZXIgJXMpLiIKKworI34gbXNnaWQgIlRYVCByZWNvcmQgc3RyaW5nIHRvbyBsb25nIgorI34gbXNnc3RyICJUWFQgcG9zdCBzdHJlbmcgZm9yIGxhbmciCisKKyN+IG1zZ2lkICJmYWlsZWQgdG8gc2V0IElQVjYgb3B0aW9ucyBvbiBsaXN0ZW5pbmcgc29ja2V0OiAlcyIKKyN+IG1zZ3N0ciAiZmVpbGV0IOUgc2V0dGUgSVB2NiBvcHNqb25lciBw5SBseXR0ZSBzb2NrZXQ6ICVzIgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIGJpbmQgbGlzdGVuaW5nIHNvY2tldCBmb3IgJXM6ICVzIgorI34gbXNnc3RyICJmZWlsZXQg5SBiaW5kZSBseXR0ZSBzb2NrZXQgZm9yICVzOiAlcyIKKworI34gbXNnaWQgIm11c3Qgc2V0IGV4YWN0bHkgb25lIGludGVyZmFjZSBvbiBicm9rZW4gc3lzdGVtcyB3aXRob3V0IElQX1JFQ1ZJRiIKKyN+IG1zZ3N0ciAibeUgc2V0dGUgbvh5YWt0aWcgZXQgaW50ZXJmYWNlIHDlIPhkZWxhZ3RlIHN5c3RlbWVyIHV0ZW4gSVBfUkVDVklGIgorCisjfiBtc2dpZCAiSWdub3JpbmcgREhDUCBsZWFzZSBmb3IgJXMgYmVjYXVzZSBpdCBoYXMgYW4gaWxsZWdhbCBkb21haW4gcGFydCIKKyN+IG1zZ3N0ciAiSWdub3JlcmVyIERIQ1AgbGVpZSBmb3IgJXMgc2lkZW4gZGVuIGhhciBlbiB1bG92bGlnIGRvbWVuZSBkZWwiCisKKyN+IG1zZ2lkICJJU0MgZGhjcGQgaW50ZWdyYXRpb24gbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfSVNDX1JFQURFUiBpbiBzcmMvY29uZmlnLmgiCisjfiBtc2dzdHIgIklTQyBkaGNwZiBpbnRlZ3Jhc2pvbiBpa2tlIHRpbGdqZW5nZWxpZzogc2V0dCBIQVZFX0lTQ19SRUFERVIgaSBzcmMvY29uZmlnLmgiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiaWxsZWdhbCBkb21haW4gJXMgaW4gZGhjcC1jb25maWcgZGlyZWN0aXZlLiIKKyN+IG1zZ3N0ciAiZHVibGlzZXJ0ZSBJUCBhZHJlc3NlciBpICVzIGRoY3AtY29uZmlnIGRpcmVrdGl2LiIKKworI34gbXNnaWQgInJ1bm5pbmcgYXMgcm9vdCIKKyN+IG1zZ3N0ciAia2r4cmVyIHNvbSByb3QgKHJvb3QpIgorCisjLCBmdXp6eQorI34gbXNnaWQgInJlYWQgJXMgLSAlZCBob3N0cyIKKyN+IG1zZ3N0ciAibGVzICVzIC0gJWQgYWRyZXNzZXIiCisKKyN+IG1zZ2lkICJkb21haW5zIgorI34gbXNnc3RyICJkb21lbmVyIgorCisjfiBtc2dpZCAiSWdub3JpbmcgREhDUCBob3N0IG5hbWUgJXMgYmVjYXVzZSBpdCBoYXMgYW4gaWxsZWdhbCBkb21haW4gcGFydCIKKyN+IG1zZ3N0ciAiSWdub3JlcmVyIERIQ1AgdmVydHMgbmF2biAlcyBw5SBncnVubiBhdiB1bG92bGlnIGRvbWVuZSBkZWwiCisKKyN+IG1zZ2lkICJEaXNwbGF5IHRoaXMgbWVzc2FnZS4iCisjfiBtc2dzdHIgIlZpcyBkZW5uZSBtZWxkaW5nZW4uIgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIHJlYWQgJXM6ICVtIgorI34gbXNnc3RyICJmZWlsZXQg5SBsZXNlICVzOiAlbSIKKworI34gbXNnaWQgImZhaWxlZCB0byByZWFkICVzOiVtIgorI34gbXNnc3RyICJmZWlsZXQg5SBsZXNlICVzOiVtIgorCisjLCBmdXp6eQorI34gbXNnaWQgImNhbm5vdCBzZW5kIGVuY2Fwc3VsYXRlZCBvcHRpb24gJWQ6IG5vIHNwYWNlIGxlZnQgaW4gd3JhcHBlciIKKyN+IG1zZ3N0ciAia2FuIGlra2Ugc2VuZGUgREhDUCBvcHNqb24gJWQ6IGlra2UgbWVyIHBsYXNzIGkgcGFra2VuIgorCisjfiBtc2dpZCAiTW9yZSB0aGFuIG9uZSB2ZW5kb3IgY2xhc3MgbWF0Y2hlcywgdXNpbmcgJXMiCisjfiBtc2dzdHIgIk1lciBlbm4gZW4gcHJvZHVzZW50IGtsYXNzZSBzb20gcGFzc2VyLCBicnVrZXIgJXMiCisKKyN+IG1zZ2lkICJmb3J3YXJkaW5nIHRhYmxlIG92ZXJmbG93OiBjaGVjayBmb3Igc2VydmVyIGxvb3BzLiIKKyN+IG1zZ3N0ciAiZnJlbXNlbmRlbHNlIChmb3J3YXJkaW5nKSB0YWJlbGwgb3ZlcmZseXQ6IHNqZWtrIGV0dGVyIHRqZW5lciBs+GtrZXIuIgorCisjfiBtc2dpZCAibmVzdGVkIGluY2x1ZGVzIG5vdCBhbGxvd2VkIgorI34gbXNnc3RyICJu+HN0ZWRlIGlua2x1ZGVyaW5nZXIgZXIgaWtrZSB0aWxsYXR0IgorCisjfiBtc2dpZCAiREhDUCwgJXMgd2lsbCBiZSB3cml0dGVuIGV2ZXJ5ICVzIgorI34gbXNnc3RyICJESENQLCAlcyB2aWwgYmxpIHNrcmV2ZXQgaHZlciAlcyIKKworI34gbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUCBwYWNrZXQgc29ja2V0OiAlcy4gSXMgQ09ORklHX1BBQ0tFVCBlbmFibGVkIGluIHlvdXIga2VybmVsPyIKKyN+IG1zZ3N0ciAia2FuIGlra2UgbGFnZSBESENQIHBha2tlIHNvY2tldDogJXMuIEVyIENPTkZJR19QQUNLRVQgYWt0aXZlcnQgaSBkaW4ga2plcm5lPyIKKworI34gbXNnaWQgIkNhbm5vdCB1c2UgUlRuZXRsaW5rIHNvY2tldCwgZmFsbGluZyBiYWNrIHRvIGlvY3RsIEFQSSIKKyN+IG1zZ3N0ciAiS2FuIGlra2UgYmVueXR0ZSBSVG5ldGxpbmsgc29ja2V0LCBmYWxsZXIgdGlsYmFrZSB0aWwgaW9jdGwgQVBJIgpkaWZmIC0tZ2l0IGEvcG8vcGwucG8gYi9wby9wbC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDVmMTc3Ci0tLSAvZGV2L251bGwKKysrIGIvcG8vcGwucG8KQEAgLTAsMCArMSwyMDcyIEBACisjIHRyYW5zbGF0aW9uIG9mIHBsLnBvIHRvIHBvbHNraQorIyBQb2xpc2ggdHJhbnNsYXRpb25zIGZvciBkbnNtYXNxIHBhY2thZ2UuCisjIFRoaXMgZmlsZSBpcyBwdXQgaW4gdGhlIHB1YmxpYyBkb21haW4uCisjCisjIFRvbWFzeiBTb2NoYcWEc2tpIDxuZXJkaGVyb0BnbWFpbC5jb20+LCAyMDA1LgorIyBKYW4gUHNvdGEgPGphc2l1cHNvdGFAZ21haWwuY29tPiwgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMy4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHBsXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA5LTA2LTEwIDIwOjU3KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE0LTA5LTIzIDEyOjQ1KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEphbiBQc290YSA8amFzaXVwc290YUBnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogcG9sc2tpIDw+XG4iCisiTGFuZ3VhZ2U6IHBsXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4hPTEpO1xuIgorIlgtR2VuZXJhdG9yOiBQb2VkaXQgMS42LjlcbiIKKyJYLUxhbmd1YWdlOiBwbF9QTFxuIgorCisjOiBjYWNoZS5jOjUwNQorbXNnaWQgIkludGVybmFsIGVycm9yIGluIGNhY2hlLiIKK21zZ3N0ciAiV2V3bsSZdHJ6bnkgYsWCxIVkIHcgcGFtacSZY2kgcG9kcsSZY3puZWouIgorCisjOiBjYWNoZS5jOjkwOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBuYW1lcyBmcm9tICVzOiAlcyIKK21zZ3N0ciAibmllIHBvdHJhZmnEmSB3Y3p5dGHEhyBuYXp3IHogJXM6ICVzIgorCisjOiBjYWNoZS5jOjkzNCBkaGNwLmM6ODIwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBhZGRyZXNzIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgImLFgsSZZG55IGFkcmVzIHcgcGxpa3UgJXMsIHcgbGluaWkgJWQiCisKKyM6IGNhY2hlLmM6OTg1IGRoY3AuYzo4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG5hbWUgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAiYsWCxJlkbmEgbmF6d2EgdyBwbGlrdSAlcywgdyBsaW5paSAlZCIKKworIzogY2FjaGUuYzo5OTIgZGhjcC5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkICVzIC0gJWQgYWRkcmVzc2VzIgorbXNnc3RyICJ3Y3p5dGHFgmVtICVzIC0gJWQgYWRyZXPDs3ciCisKKyM6IGNhY2hlLmM6MTEwMAorbXNnaWQgImNsZWFyZWQgY2FjaGUiCittc2dzdHIgInd5Y3p5c3pjem9ubyBwYW1pxJnEhyBwb2RyxJljem7EhSIKKworIzogY2FjaGUuYzoxMTIzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIElQdjQgYWRkcmVzcyBmb3VuZCBmb3IgJXMiCittc2dzdHIgIk5pZSB6bmFsYXrFgmVtIGFkcmVzdSBJUHY0IGtvbXB1dGVyYSAlcyIKKworIzogY2FjaGUuYzoxMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGEgQ05BTUUsIG5vdCBnaXZpbmcgaXQgdG8gdGhlIERIQ1AgbGVhc2Ugb2YgJXMiCittc2dzdHIgIiVzIHRvIG5hendhIENOQU1FLCBuaWUgcHJ6eXBpc3VqxJkgamVqIGR6aWVyxbxhd2llIERIQ1AgJXMiCisKKyM6IGNhY2hlLmM6MTIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgZ2l2aW5nIG5hbWUgJXMgdG8gdGhlIERIQ1AgbGVhc2Ugb2YgJXMgYmVjYXVzZSB0aGUgbmFtZSBleGlzdHMgaW4gJXMgd2l0aCBhZGRyZXNzICVzIgorbXNnc3RyICJuYXp3YSAlcyBuaWUgem9zdGHFgmEgbmFkYW5hIGR6aWVyxbxhd2llIERIQ1AgJXMsIHBvbmlld2HFvCBuYXp3YSBpc3RuaWVqZSB3ICVzIGkgbWEganXFvCBhZHJlcyAlcyIKKworIzogY2FjaGUuYzoxMzY2CisjLCBjLWZvcm1hdAorbXNnaWQgInRpbWUgJWx1IgorbXNnc3RyICJjemFzICVsdSIKKworIzogY2FjaGUuYzoxMzY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhY2hlIHNpemUgJWQsICVkLyVkIGNhY2hlIGluc2VydGlvbnMgcmUtdXNlZCB1bmV4cGlyZWQgY2FjaGUgZW50cmllcy4iCittc2dzdHIgIndpZWxrb8WbxIcgcGFtacSZY2kgcG9kcsSZY3puZWo6ICVkOyAlZCB6ICVkIG1pZWpzYyBha3R1YWxueWNoIHdwaXPDs3cgdcW8eXRvIHBvbm93bmllLiIKKworIzogY2FjaGUuYzoxMzY5CisjLCBjLWZvcm1hdAorbXNnaWQgInF1ZXJpZXMgZm9yd2FyZGVkICV1LCBxdWVyaWVzIGFuc3dlcmVkIGxvY2FsbHkgJXUiCittc2dzdHIgIiV1IHphcHl0YcWEIHByemVzxYJhbnljaCBkYWxlaiwgJXUgb2Rwb3dpZWR6aSB1ZHppZWxvbnljaCBzYW1vZHppZWxuaWUiCisKKyM6IGNhY2hlLmM6MTM3MgorIywgYy1mb3JtYXQKK21zZ2lkICJxdWVyaWVzIGZvciBhdXRob3JpdGF0aXZlIHpvbmVzICV1IgorbXNnc3RyICJ6YXB5dGHFhCBkbyBzdHJlZiBhdXRvcnl0YXR5d255Y2ggJXUiCisKKyM6IGNhY2hlLmM6MTM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgJXMjJWQ6IHF1ZXJpZXMgc2VudCAldSwgcmV0cmllZCBvciBmYWlsZWQgJXUiCittc2dzdHIgInNlcndlciAlcyMlZDogJXUgemFweXRhxYQgd3lzxYJhbnljaCwgJXUgcG9ub3dpb255Y2ggbHViIG5pZXVkYW55Y2giCisKKyM6IHV0aWwuYzo0NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2VlZCB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3I6ICVzIgorbXNnc3RyICJicmFrIG1vxbxsaXdvxZtjaSB1xbx5Y2lhIGdlbmVyYXRvcmEgbGljemIgbG9zb3d5Y2g6ICVzIgorCisjOiB1dGlsLmM6MjA1Cittc2dpZCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSIKK21zZ3N0ciAibmllIHVkYcWCbyBzacSZIHByenlkemllbGnEhyBwYW1pxJljaSIKKworIzogdXRpbC5jOjI0MyBvcHRpb24uYzo1NzkKK21zZ2lkICJjb3VsZCBub3QgZ2V0IG1lbW9yeSIKK21zZ3N0ciAibmllIG1vxbxuYSBkb3N0YcSHIHBhbWnEmWNpIgorCisjOiB1dGlsLmM6MjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgcGlwZTogJXMiCittc2dzdHIgImLFgsSFZCBwb2RjemFzIHByw7NieSB1dHdvcnplbmlhIHBvdG9rdTogJXMiCisKKyM6IHV0aWwuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFsbG9jYXRlICVkIGJ5dGVzIgorbXNnc3RyICJuaWVtb8W8bGl3b8WbxIcgcHJ6eWR6aWVsZW5pYSAlZCBiYWp0w7N3IHBhbWnEmWNpIgorCisjOiB1dGlsLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgImluZmluaXRlIgorbXNnc3RyICJuaWVza2/FhGN6b25hIgorCisjOiBvcHRpb24uYzozMTgKK21zZ2lkICJTcGVjaWZ5IGxvY2FsIGFkZHJlc3MoZXMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIldza2F6YW5pZSBhZHJlc8OzdywgbmEga3TDs3J5Y2ggbmFsZcW8eSBuYXPFgnVjaGl3YcSHLiIKKworIzogb3B0aW9uLmM6MzE5Cittc2dpZCAiUmV0dXJuIGlwYWRkciBmb3IgYWxsIGhvc3RzIGluIHNwZWNpZmllZCBkb21haW5zLiIKK21zZ3N0ciAiWndyYWNhbmllIGFkcmVzdSBJUCBkbGEgd3N6eXN0a2ljaCBob3N0w7N3IHdlIHdza2F6YW55Y2ggZG9tZW5hY2guIgorCisjOiBvcHRpb24uYzozMjAKK21zZ2lkICJGYWtlIHJldmVyc2UgbG9va3VwcyBmb3IgUkZDMTkxOCBwcml2YXRlIGFkZHJlc3MgcmFuZ2VzLiIKK21zZ3N0ciAiV3nFgsSFY3plbmllIHByemVrYXp5d2FuaWEgemFweXRhxYQgb2R3cm90bnljaCBkbGEgcHJ5d2F0bnljaCB6YWtyZXPDs3cgSVAuIgorCisjOiBvcHRpb24uYzozMjEKK21zZ2lkICJUcmVhdCBpcGFkZHIgYXMgTlhET01BSU4gKGRlZmVhdHMgVmVyaXNpZ24gd2lsZGNhcmQpLiIKK21zZ3N0ciAiVHJha3Rvd2FuaWUgYWRyZXN1IElQIGpha28gTlhET01BSU4gKHVuaWV3YcW8bmlhICwsVmVyaXNpZ24gd2lsZGNhcmQnJykuIgorCisjOiBvcHRpb24uYzozMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUgaW4gZW50cmllcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiV3NrYXphbmllIHdpZWxrb8WbY2kgcGFtacSZY2kgcG9kcsSZY3puZWogKGRvbXnFm2xuaWU6ICVzIG1pZWpzYykuIgorCisjOiBvcHRpb24uYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBjb25maWd1cmF0aW9uIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIldza2F6YW5pZSBwbGlrdSBrb25maWd1cmFjeWpuZWdvIChkb215xZtsbmllOiAlcykuIgorCisjOiBvcHRpb24uYzozMjQKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kOiBydW4gaW4gZGVidWcgbW9kZS4iCittc2dzdHIgIk5JRSB0d8OzcnogcHJvY2VzdSBwb3RvbW5lZ28gdyB0bGU6IGR6aWHFgmFuaWUgdyB0cnliaWUgZGVidWdvd2FuaWEuIgorCisjOiBvcHRpb24uYzozMjUKK21zZ2lkICJEbyBOT1QgZm9yd2FyZCBxdWVyaWVzIHdpdGggbm8gZG9tYWluIHBhcnQuIgorbXNnc3RyICJXecWCxIVjemVuaWUgcHJ6ZWthenl3YW5pYSB6YXB5dGHFhCBiZXogcG9kYW5laiBjesSZxZtjaSBkb21lbm93ZWouIgorCisjOiBvcHRpb24uYzozMjYKK21zZ2lkICJSZXR1cm4gc2VsZi1wb2ludGluZyBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIlp3cmFjYW5pZSBzYW1vd3NrYXp1asSFY2VnbyByZWtvcmR1IE1YIGRsYSBsb2thbG55Y2ggaG9zdMOzdy4iCisKKyM6IG9wdGlvbi5jOjMyNworbXNnaWQgIkV4cGFuZCBzaW1wbGUgbmFtZXMgaW4gL2V0Yy9ob3N0cyB3aXRoIGRvbWFpbi1zdWZmaXguIgorbXNnc3RyICJSb3p3aWphbmllIHByb3N0eWNoIG5hencgeiAvZXRjL2hvc3RzIHByenlyb3N0a2llbSBkb21lbm93eW0uIgorCisjOiBvcHRpb24uYzozMjgKK21zZ2lkICJEb24ndCBmb3J3YXJkIHNwdXJpb3VzIEROUyByZXF1ZXN0cyBmcm9tIFdpbmRvd3MgaG9zdHMuIgorbXNnc3RyICJXecWCxIVjemVuaWUgcHJ6ZWthenl3YW5pYSBwb3pvcm55Y2ggemFweXRhxYQgRE5TIHoga29tcHV0ZXLDs3cgZHppYcWCYWrEhWN5Y2ggcG9kIFdpbmRvd3MuIgorCisjOiBvcHRpb24uYzozMjkKK21zZ2lkICJFbmFibGUgREhDUCBpbiB0aGUgcmFuZ2UgZ2l2ZW4gd2l0aCBsZWFzZSBkdXJhdGlvbi4iCittc2dzdHIgIlfFgsSFY3plbmllIHNlcndlcmEgREhDUCBkbGEgd3NrYXphbmVnbyB6YWtyZXN1IGFkcmVzw7N3LiIKKworIzogb3B0aW9uLmM6MzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZSB0byB0aGlzIGdyb3VwIGFmdGVyIHN0YXJ0dXAgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlBvIHVydWNob21pZW5pdSB6bWlhbmEgZ3J1cHkgcHJvY2VzdSBuYSBwb2RhbsSFIChkb215xZtsbmllOiAlcykuIgorCisjOiBvcHRpb24uYzozMzEKK21zZ2lkICJTZXQgYWRkcmVzcyBvciBob3N0bmFtZSBmb3IgYSBzcGVjaWZpZWQgbWFjaGluZS4iCittc2dzdHIgIlVzdGF3aWVuaWUgYWRyZXN1IGx1YiBuYXp3eSBkbGEgd3NrYXphbmVnbyBrb21wdXRlcmEuIgorCisjOiBvcHRpb24uYzozMzIKK21zZ2lkICJSZWFkIERIQ1AgaG9zdCBzcGVjcyBmcm9tIGZpbGUuIgorbXNnc3RyICJXc2themFuaWUgcGxpa3UgeiB3YXJ0b8WbY2lhbWkgJ2RoY3AtaG9zdD0nLiIKKworIzogb3B0aW9uLmM6MzMzCittc2dpZCAiUmVhZCBESENQIG9wdGlvbiBzcGVjcyBmcm9tIGZpbGUuIgorbXNnc3RyICJXc2themFuaWUgcGxpa3UgeiB3YXJ0b8WbY2lhbWkgJ2RoY3Atb3B0aW9uPScuIgorCisjOiBvcHRpb24uYzozMzQKK21zZ2lkICJFdmFsdWF0ZSBjb25kaXRpb25hbCB0YWcgZXhwcmVzc2lvbi4iCittc2dzdHIgIldhcnVua293ZSB1c3Rhd2lhbmllIHpuYWN6bmlrw7N3LiIKKworIzogb3B0aW9uLmM6MzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkRvIE5PVCBsb2FkICVzIGZpbGUuIgorbXNnc3RyICJOSUUgd2N6eXR5d2FuaWUgcGxpa3UgJXMuIgorCisjOiBvcHRpb24uYzozMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBhIGhvc3RzIGZpbGUgdG8gYmUgcmVhZCBpbiBhZGRpdGlvbiB0byAlcy4iCittc2dzdHIgIldza2F6YW5pZSBkb2RhdGtvd2VnbyBwbGlrdSAnaG9zdHMnIG9wcsOzY3ogJXMuIgorCisjOiBvcHRpb24uYzozMzcKK21zZ2lkICJTcGVjaWZ5IGludGVyZmFjZShzKSB0byBsaXN0ZW4gb24uIgorbXNnc3RyICJJbnRlcmZlanN5LCBuYSBrdMOzcnljaCBuYXPFgnVjaGl3YcSHLiIKKworIzogb3B0aW9uLmM6MzM4Cittc2dpZCAiU3BlY2lmeSBpbnRlcmZhY2UocykgTk9UIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIkludGVyZmVqc3ksIG5hIGt0w7NyeWNoIE5JRSBuYXPFgnVjaGl3YcSHLiIKKworIzogb3B0aW9uLmM6MzM5Cittc2dpZCAiTWFwIERIQ1AgdXNlciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICJQcnp5cG9yesSFZGtvd2FuaWUgem5hY3puaWthIHcgemFsZcW8bm/Fm2NpIG9kIGtsYXN5IHXFvHl0a293bmlrYSBESENQLiIKKworIzogb3B0aW9uLmM6MzQwCittc2dpZCAiTWFwIFJGQzMwNDYgY2lyY3VpdC1pZCB0byB0YWcuIgorbXNnc3RyICJQcnp5cG9yesSFZGtvd2FuaWUgem5hY3puaWthIHcgemFsZcW8bm/Fm2NpIG9kIG51bWVydSBvYndvZHUgKHcgcm96dW1pZW5pdSBSRkMzMDQ2KS4iCisKKyM6IG9wdGlvbi5jOjM0MQorbXNnaWQgIk1hcCBSRkMzMDQ2IHJlbW90ZS1pZCB0byB0YWcuIgorbXNnc3RyICJQcnp5cG9yesSFZGtvd2FuaWUgem5hY3puaWthIHcgemFsZcW8bm/Fm2NpIG9kIG51bWVydSBhZ2VudGEgKHcgcm96dW1pZW5pdSBSRkMzMDQ2KS4iCisKKyM6IG9wdGlvbi5jOjM0MgorbXNnaWQgIk1hcCBSRkMzOTkzIHN1YnNjcmliZXItaWQgdG8gdGFnLiIKK21zZ3N0ciAiUHJ6eXBvcnrEhWRrb3dhbmllIHpuYWN6bmlrYSB3IHphbGXFvG5vxZtjaSBvZCBudW1lcnUgc3Vic2tyeWJlbnRhICh3IHJvenVtaWVuaXUgUkZDMzk5MykuIgorCisjOiBvcHRpb24uYzozNDMKK21zZ2lkICJEb24ndCBkbyBESENQIGZvciBob3N0cyB3aXRoIHRhZyBzZXQuIgorbXNnc3RyICJXecWCxIVjemVuaWUgREhDUCBkbGEgaG9zdMOzdyB6IG9rcmXFm2xvbnltIHpuYWN6bmlraWVtLiIKKworIzogb3B0aW9uLmM6MzQ0Cittc2dpZCAiRm9yY2UgYnJvYWRjYXN0IHJlcGxpZXMgZm9yIGhvc3RzIHdpdGggdGFnIHNldC4iCittc2dzdHIgIld5bXVzemVuaWUgb2Rwb3dpZWR6aSB3IHRyeWJpZSByb3pnxYJvc3plbmlvd3ltIGRsYSBob3N0w7N3IHogb2tyZcWbbG9ueW0gem5hY3puaWtpZW0uIgorCisjOiBvcHRpb24uYzozNDUKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kLCBkbyBOT1QgcnVuIGluIGRlYnVnIG1vZGUuIgorbXNnc3RyICJOSUUgdHfDs3J6IHByb2Nlc3UgcG90b21uZWdvIHcgdGxlIGkgTklFIHfFgsSFY3phaiB0cnlidSBkZWJ1Z293YW5pYS4iCisKKyM6IG9wdGlvbi5jOjM0NgorbXNnaWQgIkFzc3VtZSB3ZSBhcmUgdGhlIG9ubHkgREhDUCBzZXJ2ZXIgb24gdGhlIGxvY2FsIG5ldHdvcmsuIgorbXNnc3RyICJaYWvFgmFkYW5pZSwgxbxlIGplc3RlxZtteSBqZWR5bnltIHNlcndlcmVtIERIQ1AgdyBzaWVjaSBsb2thbG5lai4iCisKKyM6IG9wdGlvbi5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHdoZXJlIHRvIHN0b3JlIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICLFmmNpZcW8a2EgcHJ6ZWNob3d5d2FuaWEgcGxpa3UgZHppZXLFvGF3IERIQ1AgKGRvbXnFm2xuaWU6ICVzKS4iCisKKyM6IG9wdGlvbi5jOjM0OAorbXNnaWQgIlJldHVybiBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIlfFgsSFY3plbmllIHp3cmFjYW5pYSByZWtvcmR1IE1YIGRsYSBob3N0w7N3IGxva2FsbnljaC4iCisKKyM6IG9wdGlvbi5jOjM0OQorbXNnaWQgIlNwZWNpZnkgYW4gTVggcmVjb3JkLiIKK21zZ3N0ciAiU3BlY3lmaWthY2phIHJla29yZHUgTVguIgorCisjOiBvcHRpb24uYzozNTAKK21zZ2lkICJTcGVjaWZ5IEJPT1RQIG9wdGlvbnMgdG8gREhDUCBzZXJ2ZXIuIgorbXNnc3RyICJPa3JlxZtsZW5pZSBvcGNqaSBCT09UUCBzZXJ3ZXJhIERIQ1AuIgorCisjOiBvcHRpb24uYzozNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG8gTk9UIHBvbGwgJXMgZmlsZSwgcmVsb2FkIG9ubHkgb24gU0lHSFVQLiIKK21zZ3N0ciAiV3nFgsSFY3plbmllIG9ic2Vyd293YW5pYSBwbGlrdSAlczsgcG9ub3duZSBvZGN6eXR5d2FuaWUgdHlsa28gcG8gb2RlYnJhbml1IHN5Z25hxYJ1IFNJR0hVUC4iCisKKyM6IG9wdGlvbi5jOjM1MgorbXNnaWQgIkRvIE5PVCBjYWNoZSBmYWlsZWQgc2VhcmNoIHJlc3VsdHMuIgorbXNnc3RyICJXecWCxIVjemVuaWUgcHJ6ZWNob3d5d2FuaWEgdyBwYW1pxJljaSBwb2RyxJljem5laiB3eW5pa8OzdyBuaWV1ZGFueWNoIHd5c3p1a2l3YcWELiIKKworIzogb3B0aW9uLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSBuYW1lc2VydmVycyBzdHJpY3RseSBpbiB0aGUgb3JkZXIgZ2l2ZW4gaW4gJXMuIgorbXNnc3RyICJPZHB5dHl3YW5pZSBzZXJ3ZXLDs3cgbmF6dyB3IGtvbGVqbm/Fm2NpIGljaCB3eXN0xIVwaWVuaWEgdyAlcy4iCisKKyM6IG9wdGlvbi5jOjM1NAorbXNnaWQgIlNwZWNpZnkgb3B0aW9ucyB0byBiZSBzZW50IHRvIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIlNwZWN5ZmlrYWNqYSBvcGNqaSB3eXN5xYJhbmVqIGRvIGtsaWVudMOzdyBESENQLiIKKworIzogb3B0aW9uLmM6MzU1Cittc2dpZCAiREhDUCBvcHRpb24gc2VudCBldmVuIGlmIHRoZSBjbGllbnQgZG9lcyBub3QgcmVxdWVzdCBpdC4iCittc2dzdHIgIk9wY2phIERIQ1Agd3lzecWCYW5hIG5hd2V0IGplxbxlbGkga2xpZW50IG8gbmnEhSBuaWUgcHJvc2kuIgorCisjOiBvcHRpb24uYzozNTYKK21zZ2lkICJTcGVjaWZ5IHBvcnQgdG8gbGlzdGVuIGZvciBETlMgcmVxdWVzdHMgb24gKGRlZmF1bHRzIHRvIDUzKS4iCittc2dzdHIgIldza2F6YW5pZSBwb3J0dSBkbyBuYXPFgnVjaGl3YW5pYSB6YXB5dGHFhCBETlMgKGRvbXnFm2xuaWU6IDUzKS4iCisKKyM6IG9wdGlvbi5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIHN1cHBvcnRlZCBVRFAgcGFja2V0IHNpemUgZm9yIEVETlMuMCAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiTWFrc3ltYWxuYSBvYnPFgnVnaXdhbmEgd2llbGtvxZvEhyBwYWtpZXR1IEVETlMuMCAoZG9tecWbbG5pZTogJXMpLiIKKworIzogb3B0aW9uLmM6MzU4Cittc2dpZCAiTG9nIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiV8WCxIVjemVuaWUgc3Bpc3l3YW5pYSB6YXB5dGHFhCBETlMgZG8gbG9ndS4iCisKKyM6IG9wdGlvbi5jOjM1OQorbXNnaWQgIkZvcmNlIHRoZSBvcmlnaW5hdGluZyBwb3J0IGZvciB1cHN0cmVhbSBETlMgcXVlcmllcy4iCittc2dzdHIgIld5bXVzemVuaWUgdcW8eWNpYSB3c2themFuZWdvIHBvcnR1IFVEUCBkbyBvZHB5dHl3YW5pYSBuYWRyesSZZG55Y2ggc2Vyd2Vyw7N3IEROUyBpIG9kYmllcmFuaWEgb2QgbmljaCBvZHBvd2llZHppLiIKKworIzogb3B0aW9uLmM6MzYwCittc2dpZCAiRG8gTk9UIHJlYWQgcmVzb2x2LmNvbmYuIgorbXNnc3RyICJXecWCxIVjemVuaWUgY3p5dGFuaWEgcGxpa3UgcmVzb2x2LmNvbmYuIgorCisjOiBvcHRpb24uYzozNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBwYXRoIHRvIHJlc29sdi5jb25mIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJXc2themFuaWUgcG/Fgm/FvGVuaWEgcGxpa3UgcmVzb2x2LmNvbmYgKGRvbXnFm2xuaWU6ICVzKS4iCisKKyM6IG9wdGlvbi5jOjM2MgorbXNnaWQgIlNwZWNpZnkgcGF0aCB0byBmaWxlIHdpdGggc2VydmVyPSBvcHRpb25zIgorbXNnc3RyICJXc2themFuaWUgcG/Fgm/FvGVuaWEgcGxpa3UgeiBvcGNqYW1pIHNlcnZlcj0iCisKKyM6IG9wdGlvbi5jOjM2MworbXNnaWQgIlNwZWNpZnkgYWRkcmVzcyhlcykgb2YgdXBzdHJlYW0gc2VydmVycyB3aXRoIG9wdGlvbmFsIGRvbWFpbnMuIgorbXNnc3RyICJXc2thenl3YW5pZSBhZHJlc8OzdyBzZXJ3ZXLDs3cgbmF6dywgb3Bjam9uYWxuaWUgeiBwcnp5cGlzYW5pZW0gZG8gZG9tZW55LiIKKworIzogb3B0aW9uLmM6MzY0Cittc2dpZCAiU3BlY2lmeSBhZGRyZXNzIG9mIHVwc3RyZWFtIHNlcnZlcnMgZm9yIHJldmVyc2UgYWRkcmVzcyBxdWVyaWVzIgorbXNnc3RyICJXc2themFuaWUgc2Vyd2Vyw7N3IG5hencgZG8gb2R3cm90bmVqIHRyYW5zbGFjamkgYWRyZXPDs3cuIgorCisjOiBvcHRpb24uYzozNjUKK21zZ2lkICJOZXZlciBmb3J3YXJkIHF1ZXJpZXMgdG8gc3BlY2lmaWVkIGRvbWFpbnMuIgorbXNnc3RyICJXecWCxIVjemVuaWUgcHJ6ZWthenl3YW5pYSB6YXB5dGHFhCBkbyB3c2themFueWNoIGRvbWVuLiIKKworIzogb3B0aW9uLmM6MzY2Cittc2dpZCAiU3BlY2lmeSB0aGUgZG9tYWluIHRvIGJlIGFzc2lnbmVkIGluIERIQ1AgbGVhc2VzLiIKK21zZ3N0ciAiV3NrYXphbmllIGRvbWVueSBkbGEgc2Vyd2VyYSBESENQLiIKKworIzogb3B0aW9uLmM6MzY3Cittc2dpZCAiU3BlY2lmeSBkZWZhdWx0IHRhcmdldCBpbiBhbiBNWCByZWNvcmQuIgorbXNnc3RyICJPa3JlxZtsZW5pZSBkb215xZtsbmVnbyBjZWx1IHcgcmVrb3JkemllIE1YLiIKKworIzogb3B0aW9uLmM6MzY4Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgcmVwbGllcyBmcm9tIC9ldGMvaG9zdHMuIgorbXNnc3RyICJPa3JlxZtsZW5pZSAodyBzZWt1bmRhY2gpIGN6YXN1IHdhxbxub8WbY2kgb2Rwb3dpZWR6aSB1ZHppZWxvbnljaCBuYSBwb2RzdGF3aWUgL2V0Yy9ob3N0cyAoZG9tecWbbG5pZSAwKS4iCisKKyM6IG9wdGlvbi5jOjM2OQorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG5lZ2F0aXZlIGNhY2hpbmcuIgorbXNnc3RyICJPa3JlxZtsZW5pZSAodyBzZWt1bmRhY2gpIGN6YXN1IHdhxbxub8WbY2kgbmVnYXR5d255Y2ggb2Rwb3dpZWR6aS4iCisKKyM6IG9wdGlvbi5jOjM3MAorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG1heGltdW0gVFRMIHRvIHNlbmQgdG8gY2xpZW50cy4iCittc2dzdHIgIk9ncmFuaWN6ZW5pZSBtYWtzeW1hbG5lZ28gY3phc3Ugd2HFvG5vxZtjaSBvZHBvd2llZHppIChUVEwpIHBvZGF3YW5lZ28ga2xpZW50b20gW3cgc2VrdW5kYWNoXS4iCisKKyM6IG9wdGlvbi5jOjM3MQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2UgdG8gdGhpcyB1c2VyIGFmdGVyIHN0YXJ0dXAuIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJabWlhbmEgdcW8eXRrb3duaWthIHByb2Nlc3UgbmEgd3NrYXphbmVnbyAocG8gdXJ1Y2hvbWllbml1LCBkb215xZtsbmllOiAlcykuIgorCisjOiBvcHRpb24uYzozNzIKK21zZ2lkICJNYXAgREhDUCB2ZW5kb3IgY2xhc3MgdG8gdGFnLiIKK21zZ3N0ciAiUHJ6eXBvcnrEhWRrb3dhbmllIHpuYWN6bmlrYSB3IHphbGXFvG5vxZtjaSBvZCB0eXB1IGtsaWVudGEgREhDUC4iCisKKyM6IG9wdGlvbi5jOjM3MworbXNnaWQgIkRpc3BsYXkgZG5zbWFzcSB2ZXJzaW9uIGFuZCBjb3B5cmlnaHQgaW5mb3JtYXRpb24uIgorbXNnc3RyICJXeWRydWtvd2FuaWUgaW5mb3JtYWNqaSBvIHByb2dyYW1pZSBpIG9jaHJvbmllIHByYXcgYXV0b3Jza2ljaC4iCisKKyM6IG9wdGlvbi5jOjM3NAorbXNnaWQgIlRyYW5zbGF0ZSBJUHY0IGFkZHJlc3NlcyBmcm9tIHVwc3RyZWFtIHNlcnZlcnMuIgorbXNnc3RyICJUxYJ1bWFjemVuaWUgYWRyZXPDs3cgSVB2NCB6IHNlcndlcsOzdyBuYWRyesSZZG55Y2guIgorCisjOiBvcHRpb24uYzozNzUKK21zZ2lkICJTcGVjaWZ5IGEgU1JWIHJlY29yZC4iCittc2dzdHIgIk9rcmXFm2xlbmllIHJla29yZHUgU1JWLiIKKworIzogb3B0aW9uLmM6Mzc2Cittc2dpZCAiRGlzcGxheSB0aGlzIG1lc3NhZ2UuIFVzZSAtLWhlbHAgZGhjcCBmb3Iga25vd24gREhDUCBvcHRpb25zLiIKK21zZ3N0ciAiV3nFm3dpZXRsYSB0ZW4ga29tdW5pa2F0LiBVxbx5aiAnLS1oZWxwIGRoY3AnIGNoY8SFYyBwcnplanJ6ZcSHIGxpc3TEmSBvcGNqaSBESENQIChkaGNwLW9wdGlvbj14eHgsLi4uKS4iCisKKyM6IG9wdGlvbi5jOjM3NworIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggb2YgUElEIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIk9rcmXFm2xlbmllIMWbY2llxbxraSBkbyBwbGlrdSBQSUQgKGRvbXnFm2xuaWU6ICVzKS4iCisKKyM6IG9wdGlvbi5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJNYWtzeW1hbG5hIGxpY3piYSBkemllcsW8YXcgREhDUCAoZG9tecWbbG5pZTogJXMpLiIKKworIzogb3B0aW9uLmM6Mzc5Cittc2dpZCAiQW5zd2VyIEROUyBxdWVyaWVzIGJhc2VkIG9uIHRoZSBpbnRlcmZhY2UgYSBxdWVyeSB3YXMgc2VudCB0by4iCittc2dzdHIgIlV6YWxlxbxuaWVuaWUgb2Rwb3dpZWR6aSBETlMgb2QgaW50ZXJmZWpzdSwgbmEga3TDs3J5bSBvZGVicmFubyB6YXB5dGFuaWUgKHd5Z29kbmUgZGxhIHNlcndlcsOzdyBraWxrdSBwb2RzaWVjaSB6IHLDs8W8bnltaSBhZHJlc2FtaSB3IC9ldGMvaG9zdHMpLiIKKworIzogb3B0aW9uLmM6MzgwCittc2dpZCAiU3BlY2lmeSBUWFQgRE5TIHJlY29yZC4iCittc2dzdHIgIlNwZWN5ZmlrYWNqYSByZWtvcmR1IEROUyBUWFQuIgorCisjOiBvcHRpb24uYzozODEKK21zZ2lkICJTcGVjaWZ5IFBUUiBETlMgcmVjb3JkLiIKK21zZ3N0ciAiU3BlY3lmaWthY2phIHJla29yZHUgRE5TIFBUUi4iCisKKyM6IG9wdGlvbi5jOjM4MgorbXNnaWQgIkdpdmUgRE5TIG5hbWUgdG8gSVB2NCBhZGRyZXNzIG9mIGludGVyZmFjZS4iCittc2dzdHIgIlp3cmFjYSBuYXp3xJkgZG9tZW5vd8SFIHBvd2nEhXphbsSFIHogYWRyZXNlbSBpbnRlcmZlanN1IHNpZWNpb3dlZ28uIgorCisjOiBvcHRpb24uYzozODMKK21zZ2lkICJCaW5kIG9ubHkgdG8gaW50ZXJmYWNlcyBpbiB1c2UuIgorbXNnc3RyICJOYXPFgnVjaGl3YW5pZSB0eWxrbyBuYSB3eWtvcnp5c3R5d2FueWNoIGludGVyZmVqc2FjaCAodW1vxbxsaXdpYSB1cnVjaG9taWVuaWUgb3NvYm55Y2ggc2Vyd2Vyw7N3IGRsYSByw7PFvG55Y2gga2FydCkuIgorCisjOiBvcHRpb24uYzozODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVhZCBESENQIHN0YXRpYyBob3N0IGluZm9ybWF0aW9uIGZyb20gJXMuIgorbXNnc3RyICJXY3p5dGFuaWUgcHJ6eXBvcnrEhWRrb3dhxYQgYWRyZXPDs3cgeiAlcy4iCisKKyM6IG9wdGlvbi5jOjM4NQorbXNnaWQgIkVuYWJsZSB0aGUgREJ1cyBpbnRlcmZhY2UgZm9yIHNldHRpbmcgdXBzdHJlYW0gc2VydmVycywgZXRjLiIKK21zZ3N0ciAiV8WCxIVjemVuaWUgdcW8eXdhbmlhIGludGVyZmVqc3UgREJ1cyBkbyBpbmZvcm1vd2FuaWEgbyB6bWlhbmFjaCBrb25maWd1cmFjamkuIgorCisjOiBvcHRpb24uYzozODYKK21zZ2lkICJEbyBub3QgcHJvdmlkZSBESENQIG9uIHRoaXMgaW50ZXJmYWNlLCBvbmx5IHByb3ZpZGUgRE5TLiIKK21zZ3N0ciAiVXJ1Y2hvbWllbmllIG5hIHdza2F6YW55bSBpbnRlcmZlanNpZSB0eWxrbyBETlMtYSwgYmV6IHVzxYJ1ZyBESENQIGkgVEZUUC4iCisKKyM6IG9wdGlvbi5jOjM4NworbXNnaWQgIkVuYWJsZSBkeW5hbWljIGFkZHJlc3MgYWxsb2NhdGlvbiBmb3IgYm9vdHAuIgorbXNnc3RyICJXxYLEhWN6ZW5pZSBkeW5hbWljem5lZ28gcHJ6eWR6aWVsYW5pYSBhZHJlc8OzdyBkbGEga2xpZW50w7N3IEJPT1RQLiIKKworIzogb3B0aW9uLmM6Mzg4Cittc2dpZCAiTWFwIE1BQyBhZGRyZXNzICh3aXRoIHdpbGRjYXJkcykgdG8gb3B0aW9uIHNldC4iCittc2dzdHIgIlByenlwb3J6xIVka293YW5pZSB6bmFjem5pa2EgdyB6YWxlxbxub8WbY2kgb2QgYWRyZXN1IE1BQyAobW/FvG5hIHXFvHl3YcSHIHVvZ8OzbG5pZcWEOiAqKS4iCisKKyM6IG9wdGlvbi5jOjM4OQorbXNnaWQgIlRyZWF0IERIQ1AgcmVxdWVzdHMgb24gYWxpYXNlcyBhcyBhcnJpdmluZyBmcm9tIGludGVyZmFjZS4iCittc2dzdHIgIlRyYWt0b3dhbmllIMW8xIVkYcWEIERIQ1Agb2RlYnJhbnljaCBuYSBpbnRlcmZlanNhY2ggYWxpYXMsIC4uLiwgamFrbyBvZGVicmFueWNoIG5hIGlmYWNlLiIKKworIzogb3B0aW9uLmM6MzkwCittc2dpZCAiRGlzYWJsZSBJQ01QIGVjaG8gYWRkcmVzcyBjaGVja2luZyBpbiB0aGUgREhDUCBzZXJ2ZXIuIgorbXNnc3RyICJQb21pbmnEmWNpZSBzcHJhd2R6YW5pYSB6YSBwb21vY8SFIElDTVAgbmllemFqxJl0b8WbY2kgYWRyZXN1IHByemVkIGplZ28gd3lkemllcsW8YXdpZW5pZW0uIgorCisjOiBvcHRpb24uYzozOTEKK21zZ2lkICJTaGVsbCBzY3JpcHQgdG8gcnVuIG9uIERIQ1AgbGVhc2UgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uLiIKK21zZ3N0ciAiU2tyeXB0IHBvd8WCb2tpIHVydWNoYW1pYW55IHBvIHByenl6bmFuaXUgbHViIHp3b2xuaWVuaXUgYWRyZXN1LiIKKworIzogb3B0aW9uLmM6MzkyCittc2dpZCAiTHVhIHNjcmlwdCB0byBydW4gb24gREhDUCBsZWFzZSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uIgorbXNnc3RyICJTa3J5cHQgTHVhIHVydWNoYW1pYW55IHBvIHByenl6bmFuaXUgbHViIHp3b2xuaWVuaXUgYWRyZXN1LiIKKworIzogb3B0aW9uLmM6MzkzCittc2dpZCAiUnVuIGxlYXNlLWNoYW5nZSBzY3JpcHRzIGFzIHRoaXMgdXNlci4iCittc2dzdHIgIldza2F6YW5pZSB1xbx5dGtvd25pa2EgeiBrdMOzcmVnbyB1cHJhd25pZW5pYW1pIGLEmWTEhSB1cnVjaGFtaWFuZSBza3J5cHR5LiIKKworIzogb3B0aW9uLmM6Mzk0Cittc2dpZCAiUmVhZCBjb25maWd1cmF0aW9uIGZyb20gYWxsIHRoZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4iCittc2dzdHIgIldjenl0YW5pZSB3c3p5c3RraWNoIHBsaWvDs3cgemUgd3NrYXphbmVnbyBrYXRhbG9ndSBqYWtvIGtvbmZpZ3VyYWN5am55Y2guIgorCisjOiBvcHRpb24uYzozOTUKK21zZ2lkICJMb2cgdG8gdGhpcyBzeXNsb2cgZmFjaWxpdHkgb3IgZmlsZS4gKGRlZmF1bHRzIHRvIERBRU1PTikiCittc2dzdHIgIldza2F6YW5pZSBrYW5hxYJ1IHN5c2xvZy1hIGRvIGt0w7NyZWdvIG1hasSFIHRyYWZpYcSHIGtvbXVuaWthdHkgKGRvbXnFm2xuaWU6IERBRU1PTikiCisKKyM6IG9wdGlvbi5jOjM5NgorbXNnaWQgIkRvIG5vdCB1c2UgbGVhc2VmaWxlLiIKK21zZ3N0ciAiTmlldcW8eXdhbmllIGJhenkgZHppZXLFvGF3LiIKKworIzogb3B0aW9uLmM6Mzk3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRE5TIHF1ZXJpZXMuIChkZWZhdWx0cyB0byAlcykiCittc2dzdHIgIk1ha3N5bWFsbmEgbGljemJhIGplZG5vY3plxZtuaWUgb2JzxYJ1Z2l3YW55Y2ggemFweXRhxYQgRE5TIChkb215xZtsbmllOiAlcykiCisKKyM6IG9wdGlvbi5jOjM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJDbGVhciBETlMgY2FjaGUgd2hlbiByZWxvYWRpbmcgJXMuIgorbXNnc3RyICJDenlzemN6ZW5pZSBwYW1pxJljaSBwb2RyxJljem5laiBzZXJ3ZXJhIG5hencgdyBwcnp5cGFka3UgcG9ub3duZWdvIG9kY3p5dHUgJXMuIgorCisjOiBvcHRpb24uYzozOTkKK21zZ2lkICJJZ25vcmUgaG9zdG5hbWVzIHByb3ZpZGVkIGJ5IERIQ1AgY2xpZW50cy4iCittc2dzdHIgIk5pZSB6d3JhY2FuaWUgdXdhZ2kgbmEgbmF6d8SZIHBvZGF3YW7EhSBwcnpleiBrbGllbnRhIHcgcHJ6eXBhZGt1IGRvcGFzb3dhbmlhIHdzenlzdGtpY2ggd3ltaWVuaW9ueWNoIHpuYWN6bmlrw7N3LiIKKworIzogb3B0aW9uLmM6NDAwCittc2dpZCAiRG8gTk9UIHJldXNlIGZpbGVuYW1lIGFuZCBzZXJ2ZXIgZmllbGRzIGZvciBleHRyYSBESENQIG9wdGlvbnMuIgorbXNnc3RyICJXecWCxIVjemVuaWUgb3N6Y3rEmWR6YW5pYSBtaWVqc2NhIHcgcGFraWVjaWUgREhDUCBwcnpleiBwcnplc3V3YW5pZSBww7NsIHNlcnZlcm5hbWUgaSBmaWxlbmFtZSBkbyBvcGNqaSBESENQLiBXeW11c3phIHByb3N0c3p5IHRyeWIgYnVkb3d5IHBha2lldHUgcm96d2nEhXp1asSFYyBwcm9ibGVteSB6IG5pZXByenlzdG9zb3dhbnltaSBrbGllbnRhbWkgREhDUC4iCisKKyM6IG9wdGlvbi5jOjQwMQorbXNnaWQgIkVuYWJsZSBpbnRlZ3JhdGVkIHJlYWQtb25seSBURlRQIHNlcnZlci4iCittc2dzdHIgIlfFgsSFY3plbmllIHdidWRvd2FuZWdvIHNlcndlcmEgVEZUUCAodHlsa28gZG8gd3lzecWCYW5pYSkuIgorCisjOiBvcHRpb24uYzo0MDIKK21zZ2lkICJFeHBvcnQgZmlsZXMgYnkgVEZUUCBvbmx5IGZyb20gdGhlIHNwZWNpZmllZCBzdWJ0cmVlLiIKK21zZ3N0ciAiT2dyYW5pY3plbmllIGR6aWHFgmFuaWEgc2Vyd2VyYSBURlRQIGRvIHdza2F6YW5lZ28ga2F0YWxvZ3UgaSBwb2RrYXRhbG9nw7N3LiBOYXp3eSB6IC4uIHPEhSBvZHJ6dWNhbmUsIC8gb2Rub3NpIHNpxJkgZG8gd3NrYXphbmVnbyBrYXRhbG9ndS4iCisKKyM6IG9wdGlvbi5jOjQwMworbXNnaWQgIkFkZCBjbGllbnQgSVAgYWRkcmVzcyB0byB0ZnRwLXJvb3QuIgorbXNnc3RyICJEb2tsZWphbmllIGFkcmVzdSBJUCBrbGllbnRhIGRvIGfFgsOzd25lZ28ga2F0YWxvZ3UgVEZUUC4gSmXFvGVsaSB3eW5pa293eSBrYXRhbG9nIG5pZSBpc3RuaWVqZSwgbmFkYWwgd3lrb3J6eXN0dWplIHNpxJkgdGZ0cC1yb290LiIKKworIzogb3B0aW9uLmM6NDA0Cittc2dpZCAiQWxsb3cgYWNjZXNzIG9ubHkgdG8gZmlsZXMgb3duZWQgYnkgdGhlIHVzZXIgcnVubmluZyBkbnNtYXNxLiIKK21zZ3N0ciAiT2dyYW5pY3plbmllIGRvc3TEmXB1IGRvIHBsaWvDs3cgcHJ6ZXogVEZUUCBkbyB0eWNoLCBrdMOzcnljaCB3xYJhxZtjaWNpZWxlbSBqZXN0IHXFvHl0a293bmlrIHVydWNoYW1pYWrEhWN5IGRuc21hc3EtYS4iCisKKyM6IG9wdGlvbi5jOjQwNQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25uY3VycmVudCBURlRQIHRyYW5zZmVycyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiTWFrc3ltYWxuYSBsaWN6YmEgamVkbm9jemXFm25pZSBvYnPFgnVnaXdhbnljaCBwb8WCxIVjemXFhCBURlRQIChkb215xZtsbmllICVzKS4iCisKKyM6IG9wdGlvbi5jOjQwNgorbXNnaWQgIkRpc2FibGUgdGhlIFRGVFAgYmxvY2tzaXplIGV4dGVuc2lvbi4iCittc2dzdHIgIld5xYLEhWN6ZW5pZSBtb8W8bGl3b8WbY2kgbmVnb2Nqb3dhbmlhIHdpZWxrb8WbY2kgYmxva3UgZGxhIHByemVzecWCw7N3IHByemV6IFRGVFAuIgorCisjOiBvcHRpb24uYzo0MDcKK21zZ2lkICJDb252ZXJ0IFRGVFAgZmlsZW5hbWVzIHRvIGxvd2VyY2FzZSIKK21zZ3N0ciAiS29ud2VydG93YW5pZSBuYXp3IHBsaWvDs3cgxbzEhWRhbnljaCBwcnpleiBURlRQIGRvIG1hxYJ5Y2ggbGl0ZXIiCisKKyM6IG9wdGlvbi5jOjQwOAorbXNnaWQgIkVwaGVtZXJhbCBwb3J0IHJhbmdlIGZvciB1c2UgYnkgVEZUUCB0cmFuc2ZlcnMuIgorbXNnc3RyICJXc2themFuaWUgemFrcmVzdSBwb3J0w7N3IGRvIHXFvHl0a3UgVEZUUC4iCisKKyM6IG9wdGlvbi5jOjQwOQorbXNnaWQgIkV4dHJhIGxvZ2dpbmcgZm9yIERIQ1AuIgorbXNnc3RyICJXxYLEhWN6ZW5pZSBzcGlzeXdhbmlhIHcgbG9ndSBvcGVyYWNqaSBESENQLiIKKworIzogb3B0aW9uLmM6NDEwCittc2dpZCAiRW5hYmxlIGFzeW5jLiBsb2dnaW5nOyBvcHRpb25hbGx5IHNldCBxdWV1ZSBsZW5ndGguIgorbXNnc3RyICJXxYLEhWN6ZW5pZSBhc3luY2hyb25pY3puZWdvIHphcGlzeXdhbmlhIGRvIGxvZ3UgeiBld2VudHVhbG55bSB3c2themFuaWVtIGTFgnVnb8WbY2kga29sZWpraS4iCisKKyM6IG9wdGlvbi5jOjQxMQorbXNnaWQgIlN0b3AgRE5TIHJlYmluZGluZy4gRmlsdGVyIHByaXZhdGUgSVAgcmFuZ2VzIHdoZW4gcmVzb2x2aW5nLiIKK21zZ3N0ciAiT2RmaWx0cm93eXdhbmllIGFkcmVzw7N3IHdza2F6dWrEhWN5Y2ggbmEga29tcHV0ZXJ5IHcgc2llY2lhY2ggd2V3bsSZdHJ6bnljaCBzcG/Fm3LDs2Qgb2Rwb3dpZWR6aSBvZCB6ZXduxJl0cnpueWNoIHNlcndlcsOzdyBETlMuIgorCisjOiBvcHRpb24uYzo0MTIKK21zZ2lkICJBbGxvdyByZWJpbmRpbmcgb2YgMTI3LjAuMC4wLzgsIGZvciBSQkwgc2VydmVycy4iCittc2dzdHIgIlplendvbGVuaWUgbmEgcHJ6ZWthenl3YW5pZSBvZHBvd2llZHppIHcga2xhc2llIDEyNy4wLjAuMC84LiBEbGEgc2Vyd2Vyw7N3IFJCTC4iCisKKyM6IG9wdGlvbi5jOjQxMworbXNnaWQgIkluaGliaXQgRE5TLXJlYmluZCBwcm90ZWN0aW9uIG9uIHRoaXMgZG9tYWluLiIKK21zZ3N0ciAiRGV6YWt0eXdhY2phIHphYmV6cGllY3plbmlhIHByemVkIGF0YWthbWkgRE5TLXJlYmluZCBkbGEgd3NrYXphbnljaCBkb21lbi4iCisKKyM6IG9wdGlvbi5jOjQxNAorbXNnaWQgIkFsd2F5cyBwZXJmb3JtIEROUyBxdWVyaWVzIHRvIGFsbCBzZXJ2ZXJzLiIKK21zZ3N0ciAiSmVkbm9jemVzbmUgb2RweXR5d2FuaWUgd3N6eXN0a2ljaCBzZXJ3ZXLDs3cgbmFkcnrEmWRueWNoOyBrbGllbnRvd2kgcHJ6ZWthenl3YW5hIGplc3QgcGllcndzemEgb2Rwb3dpZWTFui4iCisKKyM6IG9wdGlvbi5jOjQxNQorbXNnaWQgIlNldCB0YWcgaWYgY2xpZW50IGluY2x1ZGVzIG1hdGNoaW5nIG9wdGlvbiBpbiByZXF1ZXN0LiIKK21zZ3N0ciAiVXN0YXdpZW5pZSB6bmFjem5pa2EgamXFvGVsaSB3IMW8xIVkYW5pdSBESENQIHBvamF3aSBzacSZIHdza2F6YW5hIG9wY2phLCBld2VudHVhbG5pZSBvIGtvbmtyZXRuZWogd2FydG/Fm2NpLiIKKworIzogb3B0aW9uLmM6NDE2Cittc2dpZCAiVXNlIGFsdGVybmF0aXZlIHBvcnRzIGZvciBESENQLiIKK21zZ3N0ciAiVcW8eWNpZSBhbHRlcm5hdHl3bnljaCBwb3J0w7N3IGRsYSB1c8WCdWdpIERIQ1AuIgorCisjOiBvcHRpb24uYzo0MTcKK21zZ2lkICJTcGVjaWZ5IE5BUFRSIEROUyByZWNvcmQuIgorbXNnc3RyICJTcGVjeWZpa2FjamEgcmVrb3JkdSBETlMgTkFQVFIuIgorCisjOiBvcHRpb24uYzo0MTgKK21zZ2lkICJTcGVjaWZ5IGxvd2VzdCBwb3J0IGF2YWlsYWJsZSBmb3IgRE5TIHF1ZXJ5IHRyYW5zbWlzc2lvbi4iCittc2dzdHIgIlVzdGF3aWVuaWUgZG9sbmVqIGdyYW5pY3kgbnVtZXLDs3cgcG9ydMOzdyBkbyBwcnplc3nFgmFuaWEgemFweXRhxYQgRE5TLiIKKworIzogb3B0aW9uLmM6NDE5Cittc2dpZCAiVXNlIG9ubHkgZnVsbHkgcXVhbGlmaWVkIGRvbWFpbiBuYW1lcyBmb3IgREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiUHJ6ZWNob3d5d2FuaWUgdyBzZXJ3ZXJ6ZSBETlMgZG5zbWFzcS1hIHR5bGtvIHcgcGXFgm5pIGt3YWxpZmlrb3dhbnljaCBuYXp3IHpnxYJhc3phbnljaCBwcnpleiBrbGllbnTDs3cgREhDUC4iCisKKyM6IG9wdGlvbi5jOjQyMAorbXNnaWQgIkdlbmVyYXRlIGhvc3RuYW1lcyBiYXNlZCBvbiBNQUMgYWRkcmVzcyBmb3IgbmFtZWxlc3MgY2xpZW50cy4iCittc2dzdHIgIkdlbmVyb3dhbmllIG5hencgbmEgcG9kc3Rhd2llIE1BQy1hZHJlc8OzdyBkbGEga2xpZW50w7N3IGJleiBuYXp3eS4iCisKKyM6IG9wdGlvbi5jOjQyMQorbXNnaWQgIlVzZSB0aGVzZSBESENQIHJlbGF5cyBhcyBmdWxsIHByb3hpZXMuIgorbXNnc3RyICJUcmFrdG93YW5pZSB3c2themFueWNoIHNlcndlcsOzdyBwb8WbcmVkbmljesSFY3ljaCBESENQIGpha28gZHppYcWCYWrEhWN5Y2ggdyB0cnliaWUgXCJwZcWCbm9tb2NuaWthXCIgKGZ1bGwtcHJveHkpLiIKKworIzogb3B0aW9uLmM6NDIyCittc2dpZCAiUmVsYXkgREhDUCByZXF1ZXN0cyB0byBhIHJlbW90ZSBzZXJ2ZXIiCittc2dzdHIgIlByemVrYXp5d2FuaWUgxbzEhWRhxYQgREhDUCBkbyB6ZGFsbmVnbyBzZXJ3ZXJhIgorCisjOiBvcHRpb24uYzo0MjMKK21zZ2lkICJTcGVjaWZ5IGFsaWFzIG5hbWUgZm9yIExPQ0FMIEROUyBuYW1lLiIKK21zZ3N0ciAiV3NrYXphbmllIHN5bm9uaW11IG5hend5IGtvbXB1dGVyYSBsb2thbG5lZ28gLSB6bmFuZWdvIHogL2V0Yy9ob3N0cyBhbGJvIHogREhDUC4iCisKKyM6IG9wdGlvbi5jOjQyNAorbXNnaWQgIlByb21wdCB0byBzZW5kIHRvIFBYRSBjbGllbnRzLiIKK21zZ3N0ciAiWmfFgm9zemVuaWUgd3lzecWCYW5lIGtsaWVudG9tIFBYRS4iCisKKyM6IG9wdGlvbi5jOjQyNQorbXNnaWQgIkJvb3Qgc2VydmljZSBmb3IgUFhFIG1lbnUuIgorbXNnc3RyICJTa8WCYWRuaWsgbWVudSBQWEUgKC0tPiBtYW4pLiIKKworIzogb3B0aW9uLmM6NDI2Cittc2dpZCAiQ2hlY2sgY29uZmlndXJhdGlvbiBzeW50YXguIgorbXNnc3RyICJTcHJhd2R6ZW5pZSBza8WCYWRuaS4iCisKKyM6IG9wdGlvbi5jOjQyNworbXNnaWQgIkFkZCByZXF1ZXN0b3IncyBNQUMgYWRkcmVzcyB0byBmb3J3YXJkZWQgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICJQcnpla2F6eXdhbmllIE1BQy1hZHJlc3Uga29tcHV0ZXJhIHB5dGFqxIVjZWdvIHcgcnVjaHUgd3ljaG9kesSFY3ltIEROUy4iCisKKyM6IG9wdGlvbi5jOjQyOAorbXNnaWQgIkFkZCByZXF1ZXN0b3IncyBJUCBzdWJuZXQgdG8gZm9yd2FyZGVkIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiWmFtaWVzemN6YW5pZSBhZHJlc3UgSVAgcHl0YWrEhWNlZ28gdyBwcnpla2F6eXdhbnljaCB6YXB5dGFuaWFjaCBETlMuIgorCisjOiBvcHRpb24uYzo0MjkKK21zZ2lkICJQcm94eSBETlNTRUMgdmFsaWRhdGlvbiByZXN1bHRzIGZyb20gdXBzdHJlYW0gbmFtZXNlcnZlcnMuIgorbXNnc3RyICJQcnpla2F6eXdhbmllIHd5bmlrw7N3IHdlcnlmaWthY2ppIEROU1NFQyB6IHNlcndlcsOzdyBuYWRyesSZZG55Y2guIgorCisjOiBvcHRpb24uYzo0MzAKK21zZ2lkICJBdHRlbXB0IHRvIGFsbG9jYXRlIHNlcXVlbnRpYWwgSVAgYWRkcmVzc2VzIHRvIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIlptaWFuYSBzcG9zb2J1IHByenlkemllbGFuaWEgYWRyZXPDs3cgSVAgbmEgc2Vrd2VuY3lqbnkuIgorCisjOiBvcHRpb24uYzo0MzEKK21zZ2lkICJDb3B5IGNvbm5lY3Rpb24tdHJhY2sgbWFyayBmcm9tIHF1ZXJpZXMgdG8gdXBzdHJlYW0gY29ubmVjdGlvbnMuIgorbXNnc3RyICJaYWNob3dhbmllIHpuYWN6bmlrYSBwb8WCxIVjemVuaWEgeiBvZGVicmFuZWdvIHphcHl0YW5pYSBETlMgdyBydWNodSB6ZXduxJl0cnpueW0uIgorCisjOiBvcHRpb24uYzo0MzIKK21zZ2lkICJBbGxvdyBESENQIGNsaWVudHMgdG8gZG8gdGhlaXIgb3duIERETlMgdXBkYXRlcy4iCittc2dzdHIgIlplendvbGVuaWUga2xpZW50b20gREhDUCBuYSB1YWt0dWFsbmlhbmllIERETlMtw7N3LiIKKworIzogb3B0aW9uLmM6NDMzCittc2dpZCAiU2VuZCByb3V0ZXItYWR2ZXJ0aXNlbWVudHMgZm9yIGludGVyZmFjZXMgZG9pbmcgREhDUHY2IgorbXNnc3RyICJaYcWCxIVjemVuaWUgYW5vbnNvd2FuaWEgKFJBKSBuYSBpbnRlcmZlanNhY2ggc2Vyd3VqxIVjeWNoIERIQ1B2NiIKKworIzogb3B0aW9uLmM6NDM0Cittc2dpZCAiU3BlY2lmeSBEVUlEX0VOLXR5cGUgREhDUHY2IHNlcnZlciBEVUlEIgorbXNnc3RyICJPa3JlxZtsZW5pZSBESENQdjYgRFVJRCIKKworIzogb3B0aW9uLmM6NDM1Cittc2dpZCAiU3BlY2lmeSBob3N0IChBL0FBQUEgYW5kIFBUUikgcmVjb3JkcyIKK21zZ3N0ciAiT2tyZcWbbGVuaWUgcmVrb3Jkw7N3IEEvQUFBQSBpIFBUUiIKKworIzogb3B0aW9uLmM6NDM2Cittc2dpZCAiU3BlY2lmeSBhcmJpdHJhcnkgRE5TIHJlc291cmNlIHJlY29yZCIKK21zZ3N0ciAiT2tyZcWbbGVuaWUgcmVrb3JkdSBUWFQiCisKKyM6IG9wdGlvbi5jOjQzNworbXNnaWQgIkJpbmQgdG8gaW50ZXJmYWNlcyBpbiB1c2UgLSBjaGVjayBmb3IgbmV3IGludGVyZmFjZXMiCittc2dzdHIgIkR5bmFtaWN6bmUgcG9kcGluYW5pZSBkbyBpbnRlcmZlanPDs3cgc2llY2lvd3ljaCIKKworIzogb3B0aW9uLmM6NDM4Cittc2dpZCAiRXhwb3J0IGxvY2FsIG5hbWVzIHRvIGdsb2JhbCBETlMiCittc2dzdHIgIkVrc3BvcnRvd2FuaWUgbG9rYWxueWNoIG5hencgaG9zdMOzdyBkbyBnbG9iYWxuZWdvIEROUy1hIgorCisjOiBvcHRpb24uYzo0MzkKK21zZ2lkICJEb21haW4gdG8gZXhwb3J0IHRvIGdsb2JhbCBETlMiCittc2dzdHIgIkRvbWVuYSBwb2Qga3TDs3LEhSBixJlkxIUgZWtzcG9ydG93YW5lIGxva2FsbmUgbmF6d3kiCisKKyM6IG9wdGlvbi5jOjQ0MAorbXNnaWQgIlNldCBUVEwgZm9yIGF1dGhvcml0YXRpdmUgcmVwbGllcyIKK21zZ3N0ciAiT2tyZcWbbGVuaWUgVFRMIGRsYSBvZHBvd2llZHppIGF1dG9yeXRhdHl3bnljaCIKKworIzogb3B0aW9uLmM6NDQxCittc2dpZCAiU2V0IGF1dGhvcml0aXZlIHpvbmUgaW5mb3JtYXRpb24iCittc2dzdHIgIk9rcmXFm2xlbmllIGRhbnljaCBzdHJlZnkgYXV0b3J5dGF0eXduZWogKFNPQSkiCisKKyM6IG9wdGlvbi5jOjQ0MgorbXNnaWQgIlNlY29uZGFyeSBhdXRob3JpdGF0aXZlIG5hbWVzZXJ2ZXJzIGZvciBmb3J3YXJkIGRvbWFpbnMiCittc2dzdHIgIlBvbW9jbmljemUgc2Vyd2VyeSBhdXRvcnl0YXR5d25lIGRsYSBmb3J3YXJkb3dhbnljaCBkb21lbiIKKworIzogb3B0aW9uLmM6NDQzCittc2dpZCAiUGVlcnMgd2hpY2ggYXJlIGFsbG93ZWQgdG8gZG8gem9uZSB0cmFuc2ZlciIKK21zZ3N0ciAiV3NrYXphbmllIHNlcndlcsOzdyB1cHJhd25pb255Y2ggZG8gdHJhbnNmZXJ1IHN0cmVmIgorCisjOiBvcHRpb24uYzo0NDQKK21zZ2lkICJTcGVjaWZ5IGlwc2V0cyB0byB3aGljaCBtYXRjaGluZyBkb21haW5zIHNob3VsZCBiZSBhZGRlZCIKK21zZ3N0ciAiV3lzemN6ZWfDs2xuaWVuaWUgaXBzZXQtw7N3LCBkbyBrdMOzcnljaCBixJlkxIUgZG9waXN5d2FuZSBhZHJlc3kgSVAgbGXFvMSFY2Ugd2Ugd3NrYXphbnljaCBkb21lbmFjaCIKKworIzogb3B0aW9uLmM6NDQ1Cittc2dpZCAiU3BlY2lmeSBhIGRvbWFpbiBhbmQgYWRkcmVzcyByYW5nZSBmb3Igc3ludGhlc2lzZWQgbmFtZXMiCittc2dzdHIgIldza2F6YW5pZSBkb21lbnkgaSB6YWtyZXN1IGFkcmVzw7N3IGRsYSBnZW5lcm93YW55Y2ggbmF6dyIKKworIzogb3B0aW9uLmM6NDQ2Cittc2dpZCAiQWN0aXZhdGUgRE5TU0VDIHZhbGlkYXRpb24iCittc2dzdHIgIlVha3R5d25pZW5pZSB3YWxpZGFjamkgRE5TU0VDIgorCisjOiBvcHRpb24uYzo0NDcKK21zZ2lkICJTcGVjaWZ5IHRydXN0IGFuY2hvciBrZXkgZGlnZXN0LiIKK21zZ3N0ciAiV3NrYXphbmllIHB1bmt0dSB6YXVmYW5pYSBkbGEgdXdpZXJ6eXRlbG5pYW5pYSBETlNTRUMuIgorCisjOiBvcHRpb24uYzo0NDgKK21zZ2lkICJEaXNhYmxlIHVwc3RyZWFtIGNoZWNraW5nIGZvciBETlNTRUMgZGVidWdnaW5nLiIKK21zZ3N0ciAiQWtjZXB0b3dhbmllIG5pZXV3aWFyeWdvZG5pb255Y2ggb2Rwb3dpZWR6aSBETlNTRUMgKHVzdGF3aWVuaWUgYml0dSBDRCB3IHphcHl0YW5pYWNoKS4iCisKKyM6IG9wdGlvbi5jOjQ0OQorbXNnaWQgIkVuc3VyZSBhbnN3ZXJzIHdpdGhvdXQgRE5TU0VDIGFyZSBpbiB1bnNpZ25lZCB6b25lcy4iCittc2dzdHIgIlVwZXduaWFuaWUgc2nEmSwgxbxlIG9kcG93aWVkemkgYmV6IEROU1NFQyBwb2Nob2R6xIUgemUgc3RyZWYgbmllcG9kcGlzYW55Y2guIgorCisjOiBvcHRpb24uYzo0NTAKK21zZ2lkICJEb24ndCBjaGVjayBETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMgdW50aWwgZmlyc3QgY2FjaGUtcmVsb2FkIgorbXNnc3RyICJXecWCxIVjemVuaWUgc3ByYXdkemFuaWEgc3lnbmF0dXIgY3phc293eWNoIEROU1NFQyBkbyBwaWVyd3N6ZWdvIHByemXFgmFkb3dhbmlhIHBhbWnEmWNpIHBvZHLEmWN6bmVqLiIKKworIzogb3B0aW9uLmM6NDUyCittc2dpZCAiU3BlY2lmeSBESENQdjYgcHJlZml4IGNsYXNzIgorbXNnc3RyICJPa3JlxZtsZW5pZSBwcmVmaWtzdSBrbGFzeSBESENQdjYiCisKKyM6IG9wdGlvbi5jOjQ1NAorbXNnaWQgIlNldCBwcmlvcml0eSwgcmVzZW5kLWludGVydmFsIGFuZCByb3V0ZXItbGlmZXRpbWUiCittc2dzdHIgIlVzdGF3aWFuaWUgcHJpb3J5dGV0dSwgb2tyZXN1IHJvenN5xYJhbmlhIG9yYXogY3phc3Ugxbx5Y2lhIHJ1dGVyYSAoUkEpLiIKKworIzogb3B0aW9uLmM6NDU1Cittc2dpZCAiRG8gbm90IGxvZyByb3V0aW5lIERIQ1AuIgorbXNnc3RyICJXecWCxIVjemVuaWUgbG9nb3dhbmlhIHp3eWN6YWpuZWdvIERIQ1AuIgorCisjOiBvcHRpb24uYzo0NTYKK21zZ2lkICJEbyBub3QgbG9nIHJvdXRpbmUgREhDUHY2LiIKK21zZ3N0ciAiV3nFgsSFY3plbmllIGxvZ293YW5pYSB6d3ljemFqbmVnbyBESENQdjYuIgorCisjOiBvcHRpb24uYzo0NTcKK21zZ2lkICJEbyBub3QgbG9nIFJBLiIKK21zZ3N0ciAiV3nFgsSFY3plbmllIGxvZ293YW5pYSBSQS4iCisKKyM6IG9wdGlvbi5jOjQ1OAorbXNnaWQgIkFjY2VwdCBxdWVyaWVzIG9ubHkgZnJvbSBkaXJlY3RseS1jb25uZWN0ZWQgbmV0d29ya3MiCittc2dzdHIgIkFrY2VwdG93YW5pZSB6YXB5dGHFhCB3ecWCxIVjem5pZSB6IHNpZWNpIHBvZHBpxJl0eWNoIGJlenBvxZtyZWRuaW8uIgorCisjOiBvcHRpb24uYzo0NTkKK21zZ2lkICJEZXRlY3QgYW5kIHJlbW92ZSBETlMgZm9yd2FyZGluZyBsb29wcyIKK21zZ3N0ciAiV3lrcnl3YW5pZSBpIHVzdXdhbmllIHDEmXRsaSB6YXB5dGHFhCBETlMuIgorCisjOiBvcHRpb24uYzo2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlVzYWdlOiBkbnNtYXNxIFtvcHRpb25zXVxuIgorIlxuIgorbXNnc3RyICIiCisiVcW8eWNpZTogZG5zbWFzcSBbb3BjamVdXG4iCisiXG4iCisKKyM6IG9wdGlvbi5jOjY2MworIywgYy1mb3JtYXQKK21zZ2lkICJVc2Ugc2hvcnQgb3B0aW9ucyBvbmx5IG9uIHRoZSBjb21tYW5kIGxpbmUuXG4iCittc2dzdHIgIlcgdHltIHN5c3RlbWllIHcgbGluaWkgcG9sZWNlxYQgbW/FvG5hIHXFvHl3YcSHIHd5xYLEhWN6bmllIGplZG5vbGl0ZXJvd3ljaCBvcGNqaS5cbiIKKworIzogb3B0aW9uLmM6NjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIlZhbGlkIG9wdGlvbnMgYXJlOlxuIgorbXNnc3RyICJEb3N0xJlwbmUgb3BjamU6XG4iCisKKyM6IG9wdGlvbi5jOjcyMiBvcHRpb24uYzo3MjYKK21zZ2lkICJiYWQgcG9ydCIKK21zZ3N0ciAibmllcHJhd2lkxYJvd3kgbnVtZXIgcG9ydHUiCisKKyM6IG9wdGlvbi5jOjc1MyBvcHRpb24uYzo3ODUKK21zZ2lkICJpbnRlcmZhY2UgYmluZGluZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJuaWUgbWEgbW/FvGxpd2/Fm2NpIGRvd2nEhXp5d2FuaWEgZG8gaW50ZXJmZWpzdSIKKworIzogb3B0aW9uLmM6NzYyIG9wdGlvbi5jOjM0OTQKK21zZ2lkICJiYWQgaW50ZXJmYWNlIG5hbWUiCittc2dzdHIgIm5pZXByYXdpZMWCb3dhIG5hendhIGludGVyZmVqc3UiCisKKyM6IG9wdGlvbi5jOjc5MgorbXNnaWQgImJhZCBhZGRyZXNzIgorbXNnc3RyICJ6xYJ5IGFkcmVzIgorCisjOiBvcHRpb24uYzo5NzQKK21zZ2lkICJ1bnN1cHBvcnRlZCBlbmNhcHN1bGF0aW9uIGZvciBJUHY2IG9wdGlvbiIKK21zZ3N0ciAibmllb2JzxYJ1Z2l3YW55IHJvZHphaiBlbmthcHN1bGFjamkgb3BjamkgSVB2NiIKKworIzogb3B0aW9uLmM6OTg4Cittc2dpZCAiYmFkIGRoY3Atb3B0aW9uIgorbXNnc3RyICJixYLEhWQgdyBkaGNwLW9wdGlvbiIKKworIzogb3B0aW9uLmM6MTA1NgorbXNnaWQgImJhZCBJUCBhZGRyZXNzIgorbXNnc3RyICJ6xYJ5IGFkcmVzIElQIgorCisjOiBvcHRpb24uYzoxMDU5IG9wdGlvbi5jOjExOTcgb3B0aW9uLmM6MjgxMgorbXNnaWQgImJhZCBJUHY2IGFkZHJlc3MiCittc2dzdHIgInrFgnkgYWRyZXMgSVB2NiIKKworIzogb3B0aW9uLmM6MTIyNCBvcHRpb24uYzoxMzE4Cittc2dpZCAiYmFkIGRvbWFpbiBpbiBkaGNwLW9wdGlvbiIKK21zZ3N0ciAibmllcHJhd2lkxYJvd2EgbmF6d2EgZG9tZW55IHcgZGhjcC1vcHRpb24iCisKKyM6IG9wdGlvbi5jOjEzNTYKK21zZ2lkICJkaGNwLW9wdGlvbiB0b28gbG9uZyIKK21zZ3N0ciAiemJ5dCBkxYJ1Z2EgZGhjcC1vcHRpb24gKD4yNTUgem5ha8OzdykiCisKKyM6IG9wdGlvbi5jOjEzNjMKK21zZ2lkICJpbGxlZ2FsIGRoY3AtbWF0Y2giCittc2dzdHIgIm5pZWRvcHVzemN6YWxuZSBkaGNwLW1hdGNoIgorCisjOiBvcHRpb24uYzoxNDI1Cittc2dpZCAiaWxsZWdhbCByZXBlYXRlZCBmbGFnIgorbXNnc3RyICJ3aWVsb2tyb3RuZSB1xbx5Y2llIG9wY2ppIG5pZWRvendvbG9uZSAocG9qYXdpxYJhIHNpxJkgd2N6ZcWbbmllaiB3IGxpbmlpIHBvbGVjZcWEKSIKKworIzogb3B0aW9uLmM6MTQzMworbXNnaWQgImlsbGVnYWwgcmVwZWF0ZWQga2V5d29yZCIKK21zZ3N0ciAid2llbG9rcm90bmUgdcW8eWNpZSBvcGNqaSBuaWVkb3p3b2xvbmUgKHBvamF3acWCYSBzacSZIHdzemXFm25pZWogdyBwbGlrdSBrb25maWd1cmFjeWpueW0pIgorCisjOiBvcHRpb24uYzoxNDk1IG9wdGlvbi5jOjQwOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyBkaXJlY3RvcnkgJXM6ICVzIgorbXNnc3RyICJicmFrIGRvc3TEmXB1IGRvIGthdGFsb2d1ICVzOiAlcyIKKworIzogb3B0aW9uLmM6MTU0MSB0ZnRwLmM6NDkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhY2Nlc3MgJXM6ICVzIgorbXNnc3RyICJicmFrIGRvc3TEmXB1IGRvICVzOiAlcyIKKworIzogb3B0aW9uLmM6MTU4OAorbXNnaWQgInNldHRpbmcgbG9nIGZhY2lsaXR5IGlzIG5vdCBwb3NzaWJsZSB1bmRlciBBbmRyb2lkIgorbXNnc3RyICJ6bWlhbmEgbG9nLWZhY2lsaXR5IHcgc3lzdGVtaWUgQW5kcm9pZCBuaWUgamVzdCBtb8W8bGl3YSIKKworIzogb3B0aW9uLmM6MTU5NworbXNnaWQgImJhZCBsb2cgZmFjaWxpdHkiCittc2dzdHIgIm5pZXJvenBvem5hbnkgem5hY3puaWsgbG9nw7N3IgorCisjOiBvcHRpb24uYzoxNjUwCittc2dpZCAiYmFkIE1YIHByZWZlcmVuY2UiCittc2dzdHIgIm5pZXByYXdpZMWCb3dhIHdhcnRvxZvEhyBwcmVmZXJlbmNqaSBNWCIKKworIzogb3B0aW9uLmM6MTY1NQorbXNnaWQgImJhZCBNWCBuYW1lIgorbXNnc3RyICJuaWVwcmF3aWTFgm93YSBuYXp3YSBNWCIKKworIzogb3B0aW9uLmM6MTY2OQorbXNnaWQgImJhZCBNWCB0YXJnZXQiCittc2dzdHIgIm5pZXByYXdpZMWCb3dhIHdhcnRvxZvEhyBjZWx1IE1YIgorCisjOiBvcHRpb24uYzoxNjgxCittc2dpZCAiY2Fubm90IHJ1biBzY3JpcHRzIHVuZGVyIHVDbGludXgiCittc2dzdHIgIncgdUNsaW51a3NpZSBuaWUgbWEgbW/FvGxpd2/Fm2NpIHVydWNoYW1pYW5pYSBza3J5cHTDs3ciCisKKyM6IG9wdGlvbi5jOjE2ODMKK21zZ2lkICJyZWNvbXBpbGUgd2l0aCBIQVZFX1NDUklQVCBkZWZpbmVkIHRvIGVuYWJsZSBsZWFzZS1jaGFuZ2Ugc2NyaXB0cyIKK21zZ3N0ciAixbxlYnkgbWllxIcgbW/FvGxpd2/Fm8SHIHXFvHl3YW5pYSBza3J5cHTDs3cgd3l3b8WCeXdhbnljaCBwcnp5IHptaWFuaWUgZHppZXLFvGF3eSwgcHJ6ZWtvbXBpbHVqIGRuc21hc3EtYSB6IHfFgsSFY3pvbsSFIGZsYWfEhSBIQVZFX1NDUklQVCIKKworIzogb3B0aW9uLmM6MTY4NworbXNnaWQgInJlY29tcGlsZSB3aXRoIEhBVkVfTFVBU0NSSVBUIGRlZmluZWQgdG8gZW5hYmxlIEx1YSBzY3JpcHRzIgorbXNnc3RyICJ1xbx5d2FuaWUgc2tyeXB0w7N3IEx1YSwgd3ltYWdhIHNrb21waWxvd2FuaWEgZG5zbWFzcS1hIHogZmxhZ8SFIEhBVkVfTFVBU0NSSVBUIgorCisjOiBvcHRpb24uYzoxOTI4IG9wdGlvbi5jOjE5NjYgb3B0aW9uLmM6MjAxNQorbXNnaWQgImJhZCBwcmVmaXgiCittc2dzdHIgInrFgmEgbWFza2EiCisKKyM6IG9wdGlvbi5jOjIyODkKK21zZ2lkICJyZWNvbXBpbGUgd2l0aCBIQVZFX0lQU0VUIGRlZmluZWQgdG8gZW5hYmxlIGlwc2V0IGRpcmVjdGl2ZXMiCittc2dzdHIgImNoY8SFYyBrb3J6eXN0YcSHIHogaXBzZXRzIHByemVrb21waWx1aiBkbnNtYXNxLWEgeiBIQVZFX0lQU0VUIgorCisjOiBvcHRpb24uYzoyNDY5Cittc2dpZCAiYmFkIHBvcnQgcmFuZ2UiCittc2dzdHIgIm5pZXByYXdpZMWCb3d5IHpha3JlcyBudW1lcsOzdyBwb3J0w7N3IgorCisjOiBvcHRpb24uYzoyNDg1Cittc2dpZCAiYmFkIGJyaWRnZS1pbnRlcmZhY2UiCittc2dzdHIgIm5pZXByYXdpZMWCb3dhIG5hendhIHVyesSFZHplbmlhIHcgYnJpZGdlLWludGVyZmFjZSIKKworIzogb3B0aW9uLmM6MjU0NQorbXNnaWQgIm9ubHkgb25lIHRhZyBhbGxvd2VkIgorbXNnc3RyICJtb8W8bmEgd3NrYXphxIcgdHlsa28gamVkZW4gem5hY3puaWsgc2llY2kiCisKKyM6IG9wdGlvbi5jOjI1NjUgb3B0aW9uLmM6MjU3NyBvcHRpb24uYzoyNjgzIG9wdGlvbi5jOjI3MjQKK21zZ2lkICJiYWQgZGhjcC1yYW5nZSIKK21zZ3N0ciAibmllcHJhd2lkxYJvd3kgemFrcmVzIGRoY3AtcmFuZ2UiCisKKyM6IG9wdGlvbi5jOjI1OTIKK21zZ2lkICJpbmNvbnNpc3RlbnQgREhDUCByYW5nZSIKK21zZ3N0ciAibmllc3DDs2pueSB6YWtyZXMgYWRyZXPDs3cgREhDUCIKKworIzogb3B0aW9uLmM6MjY1MQorbXNnaWQgInByZWZpeCBsZW5ndGggbXVzdCBiZSBleGFjdGx5IDY0IGZvciBSQSBzdWJuZXRzIgorbXNnc3RyICJkxYJ1Z2/Fm8SHIHByZWZpa3N1IG11c2kgd3lub3NpxIcgZG9rxYJhZG5pZSA2NCBkbGEgcG9kc2llY2kgUkEiCisKKyM6IG9wdGlvbi5jOjI2NTMKK21zZ2lkICJwcmVmaXggbGVuZ3RoIG11c3QgYmUgZXhhY3RseSA2NCBmb3Igc3VibmV0IGNvbnN0cnVjdG9ycyIKK21zZ3N0ciAiZMWCdWdvxZvEhyBwcmVmaWtzdSBtdXNpIHd5bm9zacSHIGRva8WCYWRuaWUgNjQgZGxhIGtvbnN0cnVrdG9yw7N3IHBvZHNpZWNpIgorCisjOiBvcHRpb24uYzoyNjU3Cittc2dpZCAicHJlZml4IGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0IDY0IgorbXNnc3RyICJkxYJ1Z2/Fm8SHIHByZWZpa3N1IG11c2kgd3lub3NpxIcgY28gbmFqbW5pZWogNjQiCisKKyM6IG9wdGlvbi5jOjI2NjAKK21zZ2lkICJpbmNvbnNpc3RlbnQgREhDUHY2IHJhbmdlIgorbXNnc3RyICJuaWVzcMOzam55IHpha3JlcyBhZHJlc8OzdyBESENQdjYiCisKKyM6IG9wdGlvbi5jOjI2NzEKK21zZ2lkICJwcmVmaXggbXVzdCBiZSB6ZXJvIHdpdGggXCJjb25zdHJ1Y3RvcjpcIiBhcmd1bWVudCIKK21zZ3N0ciAicHJlZmlrcyBtdXNpIHd5bm9zacSHIHplcm8geiBhcmd1bWVudGVtIFwiY29uc3RydWN0b3I6XCIiCisKKyM6IG9wdGlvbi5jOjI3ODIgb3B0aW9uLmM6MjgzMAorbXNnaWQgImJhZCBoZXggY29uc3RhbnQiCittc2dzdHIgInphcGlzIG5pZXpnb2RueSB6IGZvcm1hdGVtIHN6ZXNuYXN0a293eW0iCisKKyM6IG9wdGlvbi5jOjI4MDQKK21zZ2lkICJjYW5ub3QgbWF0Y2ggdGFncyBpbiAtLWRoY3AtaG9zdCIKK21zZ3N0ciAiLS1kaGNwLWhvc3QgbmllIGRvcHVzemN6YSBkb3Bhc293eXdhbmlhIG5hIHBvZHN0YXdpZSB6bmFjem5pa8OzdyIKKworIzogb3B0aW9uLmM6Mjg1MgorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgZGhjcC1ob3N0IElQIGFkZHJlc3MgJXMiCittc2dzdHIgInBvd3TDs3J6b255IGFkcmVzIElQICVzIHcgc3BlY3lmaWthY2ppIGRoY3AtaG9zdCIKKworIzogb3B0aW9uLmM6MjkxMAorbXNnaWQgImJhZCBESENQIGhvc3QgbmFtZSIKK21zZ3N0ciAibmllZG9wdXN6Y3phbG5hIG5hendhIGtvbXB1dGVyYSB3IGRoY3AtaG9zdCIKKworIzogb3B0aW9uLmM6Mjk5MgorbXNnaWQgImJhZCB0YWctaWYiCittc2dzdHIgIm5pZXByYXdpZMWCb3dhIHNrxYJhZG5pYSAndGFnLWlmJyIKKworIzogb3B0aW9uLmM6MzMxNiBvcHRpb24uYzozNzEwCittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAibmllcHJhd2lkxYJvd3kgbnVtZXIgcG9ydHUiCisKKyM6IG9wdGlvbi5jOjMzNzgKK21zZ2lkICJiYWQgZGhjcC1wcm94eSBhZGRyZXNzIgorbXNnc3RyICJ6xYJ5IGFkcmVzIGRoY3AtcHJveHkiCisKKyM6IG9wdGlvbi5jOjM0MDQKK21zZ2lkICJCYWQgZGhjcC1yZWxheSIKK21zZ3N0ciAiesWCeSBkaGNwLXJlbGF5IgorCisjOiBvcHRpb24uYzozNDMwCittc2dpZCAiYmFkIFJBLXBhcmFtcyIKK21zZ3N0ciAibmllcHJhd2lkxYJvd2UgYXJndW1lbnR5IFJBIgorCisjOiBvcHRpb24uYzozNDM5Cittc2dpZCAiYmFkIERVSUQiCittc2dzdHIgInrFgnkgRFVJRCIKKworIzogb3B0aW9uLmM6MzQ4MQorbXNnaWQgImludmFsaWQgYWxpYXMgcmFuZ2UiCittc2dzdHIgIm5pZXByYXdpZMWCb3d5IHpha3JlcyBhZHJlc8OzdyB3IC0tYWxpYXMiCisKKyM6IG9wdGlvbi5jOjM1MzUKK21zZ2lkICJiYWQgQ05BTUUiCittc2dzdHIgInrFgmEgQ05BTUUiCisKKyM6IG9wdGlvbi5jOjM1NDAKK21zZ2lkICJkdXBsaWNhdGUgQ05BTUUiCittc2dzdHIgInBvd3TDs3J6b25hIENOQU1FIgorCisjOiBvcHRpb24uYzozNTYwCittc2dpZCAiYmFkIFBUUiByZWNvcmQiCittc2dzdHIgIm5pZXByYXdpZMWCb3d5IHphcGlzIHJla29yZHUgUFRSIgorCisjOiBvcHRpb24uYzozNTkxCittc2dpZCAiYmFkIE5BUFRSIHJlY29yZCIKK21zZ3N0ciAibmllcHJhd2lkxYJvd3kgemFwaXMgcmVrb3JkdSBOQVBUUiIKKworIzogb3B0aW9uLmM6MzYyNQorbXNnaWQgImJhZCBSUiByZWNvcmQiCittc2dzdHIgIm5pZXByYXdpZMWCb3d5IHphcGlzIHJla29yZHUgUlIiCisKKyM6IG9wdGlvbi5jOjM2NTUKK21zZ2lkICJiYWQgVFhUIHJlY29yZCIKK21zZ3N0ciAibmllcHJhd2lkxYJvd3kgemFwaXMgcmVrb3JkdSBUWFQiCisKKyM6IG9wdGlvbi5jOjM2OTYKK21zZ2lkICJiYWQgU1JWIHJlY29yZCIKK21zZ3N0ciAibmllcHJhd2lkxYJvd3kgemFwaXMgcmVrb3JkdSBTUlYiCisKKyM6IG9wdGlvbi5jOjM3MDMKK21zZ2lkICJiYWQgU1JWIHRhcmdldCIKK21zZ3N0ciAibmllcHJhd2lkxYJvd2Egd2FydG/Fm8SHIGNlbHUgU1JWIgorCisjOiBvcHRpb24uYzozNzE3Cittc2dpZCAiaW52YWxpZCBwcmlvcml0eSIKK21zZ3N0ciAibmllcHJhd2lkxYJvd3kgcHJpb3J5dGV0IgorCisjOiBvcHRpb24uYzozNzI0Cittc2dpZCAiaW52YWxpZCB3ZWlnaHQiCittc2dzdHIgIm5pZXByYXdpZMWCb3dhIHdhZ2EiCisKKyM6IG9wdGlvbi5jOjM3NDgKK21zZ2lkICJCYWQgaG9zdC1yZWNvcmQiCittc2dzdHIgIm5pZXByYXdpZMWCb3d5IHphcGlzIGhvc3QtcmVjb3JkIgorCisjOiBvcHRpb24uYzozNzY1Cittc2dpZCAiQmFkIG5hbWUgaW4gaG9zdC1yZWNvcmQiCittc2dzdHIgIm5pZWRvcHVzemN6YWxuYSBuYXp3YSB3IGhvc3QtcmVjb3JkIgorCisjOiBvcHRpb24uYzozODI2Cittc2dpZCAiYmFkIHRydXN0IGFuY2hvciIKK21zZ3N0ciAibmllcHJhd2lkxYJvd2Egc3BlY3lmaWthY2phIHB1bmt0dSB6YXVmYW5pYSIKKworIzogb3B0aW9uLmM6Mzg0MAorbXNnaWQgImJhZCBIRVggaW4gdHJ1c3QgYW5jaG9yIgorbXNnc3RyICJ6xYJ5IHphcGlzIHN6ZXNuYXN0a293eSIKKworIzogb3B0aW9uLmM6Mzg1MAorbXNnaWQgInVuc3VwcG9ydGVkIG9wdGlvbiAoY2hlY2sgdGhhdCBkbnNtYXNxIHdhcyBjb21waWxlZCB3aXRoIERIQ1AvVEZUUC9ETlNTRUMvREJ1cyBzdXBwb3J0KSIKK21zZ3N0ciAibmllb2JzxYJ1Z2l3YW5hIG9wY2phIChzcHJhd2TFuiwgY3p5IG9ic8WCdWdhIERIQ1AvVEZUUC9ETlNTRUMvREJ1cyB6b3N0YcWCYSB3a29tcGlsb3dhbmEpIgorCisjOiBvcHRpb24uYzozOTA5Cittc2dpZCAibWlzc2luZyBcIiIKK21zZ3N0ciAiYnJha3VqZSBcIiIKKworIzogb3B0aW9uLmM6Mzk2NgorbXNnaWQgImJhZCBvcHRpb24iCittc2dzdHIgIm5pZXByYXdpZMWCb3dhIG9wY2phIgorCisjOiBvcHRpb24uYzozOTY4Cittc2dpZCAiZXh0cmFuZW91cyBwYXJhbWV0ZXIiCittc2dzdHIgIm5hZHd5xbxrb3d5IHBhcmFtZXRyIgorCisjOiBvcHRpb24uYzozOTcwCittc2dpZCAibWlzc2luZyBwYXJhbWV0ZXIiCittc2dzdHIgImJyYWsgcGFyYW1ldHJ1IgorCisjOiBvcHRpb24uYzozOTcyCittc2dpZCAiaWxsZWdhbCBvcHRpb24iCittc2dzdHIgIm5pZWRvcHVzemN6YWxuYSBvcGNqYSIKKworIzogb3B0aW9uLmM6Mzk3OQorbXNnaWQgImVycm9yIgorbXNnc3RyICJixYLEhWQiCisKKyM6IG9wdGlvbi5jOjM5ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGF0IGxpbmUgJWQgb2YgJXMiCittc2dzdHIgIiB3IGxpbmlpICVkIHBsaWt1ICVzIgorCisjOiBvcHRpb24uYzo0MDQ1IG9wdGlvbi5jOjQxNjggdGZ0cC5jOjY2NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlczogJXMiCittc2dzdHIgImLFgsSFZCBvZGN6eXR1IHogcGxpa3UgJXM6ICVzIgorCisjOiBvcHRpb24uYzo0MjI5IG9wdGlvbi5jOjQyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCAlcyIKK21zZ3N0ciAicHJ6ZWN6eXRhxYJlbSAlcyIKKworIzogb3B0aW9uLmM6NDMzMQorbXNnaWQgImp1bmsgZm91bmQgaW4gY29tbWFuZCBsaW5lIgorbXNnc3RyICJqYWtpZcWbIMWbbWllY2kgdyBsaW5paSBwb2xlY2XFhCIKKworIzogb3B0aW9uLmM6NDM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIHZlcnNpb24gJXMgICVzXG4iCittc2dzdHIgIkRuc21hc3EsIHdlcnNqYSAlcyAgJXNcbiIKKworIzogb3B0aW9uLmM6NDM2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ29tcGlsZSB0aW1lIG9wdGlvbnM6ICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJXa29tcGlsb3dhbmUgb3BjamUgJXNcbiIKKyJcbiIKKworIzogb3B0aW9uLmM6NDM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS5cbiIKK21zZ3N0ciAiQXV0b3IgbmllIGRhamUgxbtBRE5ZQ0ggR1dBUkFOQ0pJIGVnemVrd293YWxueWNoIHByYXduaWUuXG4iCisKKyM6IG9wdGlvbi5jOjQzNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG5zbWFzcSBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdFxuIgorbXNnc3RyICJEbnNtYXNxIGplc3Qgd29sbnltIG9wcm9ncmFtb3dhbmllbSwgbW/FvGVzeiBnbyByb3pwcm93YWR6YcSHXG4iCisKKyM6IG9wdGlvbi5jOjQzNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyIG9yIDMuXG4iCittc2dzdHIgIm5hIHdhcnVua2FjaCBva3JlxZtsb255Y2ggdyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSwgdyB3ZXJzamkgMiBsdWIgMy5cbiIKKworIzogb3B0aW9uLmM6NDM4MQorbXNnaWQgInRyeSAtLWhlbHAiCittc2dzdHIgInNwcsOzYnVqOiAtLWhlbHAiCisKKyM6IG9wdGlvbi5jOjQzODMKK21zZ2lkICJ0cnkgLXciCittc2dzdHIgInNwcsOzYnVqOiAtdyIKKworIzogb3B0aW9uLmM6NDM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29tbWFuZCBsaW5lIG9wdGlvbnM6ICVzIgorbXNnc3RyICJuaWVwcmF3aWTFgm93YSBvcGNqYSB3IGxpbmlpIHBvbGVjZcWEICVzIgorCisjOiBvcHRpb24uYzo0NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBnZXQgaG9zdC1uYW1lOiAlcyIKK21zZ3N0ciAibmllIG1vxbxuYSBwb2JyYcSHIG5hend5IGhvc3RhOiAlcyIKKworIzogb3B0aW9uLmM6NDQ2MgorbXNnaWQgIm9ubHkgb25lIHJlc29sdi5jb25mIGZpbGUgYWxsb3dlZCBpbiBuby1wb2xsIG1vZGUuIgorbXNnc3RyICJ3IHRyeWJpZSBuby1wb2xsIG1vxbxuYSB3c2themHEhyBuYWp3ecW8ZWogamVkZW4gcGxpayByZXNvbHYuY29uZi4iCisKKyM6IG9wdGlvbi5jOjQ0NzIKK21zZ2lkICJtdXN0IGhhdmUgZXhhY3RseSBvbmUgcmVzb2x2LmNvbmYgdG8gcmVhZCBkb21haW4gZnJvbS4iCittc2dzdHIgIm11c2lzeiBtaWXEhyBkb2vFgmFkbmllIGplZGVuIHBsaWsgcmVzb2x2LmNvbmYgZG8gb2Rjenl0dSBkb21lbi4iCisKKyM6IG9wdGlvbi5jOjQ0NzUgbmV0d29yay5jOjE1MDYgZGhjcC5jOjc2OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAlczogJXMiCittc2dzdHIgIm5pZSB1ZGHFgm8gc2nEmSBvZGN6eXRhxIcgJXM6ICVzIgorCisjOiBvcHRpb24uYzo0NDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNlYXJjaCBkaXJlY3RpdmUgZm91bmQgaW4gJXMiCittc2dzdHIgImJyYWsgd3l0eWN6bnljaCB3eXN6dWtpd2FuaWEgdyAlcyIKKworIzogb3B0aW9uLmM6NDUxMworbXNnaWQgInRoZXJlIG11c3QgYmUgYSBkZWZhdWx0IGRvbWFpbiB3aGVuIC0tZGhjcC1mcWRuIGlzIHNldCIKK21zZ3N0ciAidyBwcnp5cGFka3UgdcW8eXdhbmlhIC0tZGhjcC1mcWRuIHRyemViYSB3c2themHEhyBkb215xZtsbsSFIGRvbWVuxJkiCisKKyM6IG9wdGlvbi5jOjQ1MjIKK21zZ2lkICJzeW50YXggY2hlY2sgT0siCittc2dzdHIgInNrxYJhZG5pYSBzcHJhd2R6b25hLCBqZXN0IHByYXdpZMWCb3dhIgorCisjOiBmb3J3YXJkLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZW5kIHBhY2tldDogJXMiCittc2dzdHIgInd5c3nFgmFuaWUgcGFraWV0dSBuaWUgcG93aW9kxYJvIHNpxJk6ICVzIgorCisjOiBmb3J3YXJkLmM6NTc0Cittc2dpZCAiZGlzY2FyZGluZyBETlMgcmVwbHk6IHN1Ym5ldCBvcHRpb24gbWlzbWF0Y2giCittc2dzdHIgIm9kcnp1Y2FtIG9kcG93aWVkxbogRE5TOiBuaWUgemdhZHphIHNpxJkgc3BlY3lmaWthY2phIHBvZHNpZWNpIgorCisjOiBmb3J3YXJkLmM6NTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5hbWVzZXJ2ZXIgJXMgcmVmdXNlZCB0byBkbyBhIHJlY3Vyc2l2ZSBxdWVyeSIKK21zZ3N0ciAic2Vyd2VyIG5hencgJXMgb2RtYXdpYSB3eWtvbmFuaWEgemFweXRhbmlhIHJla3VyZW5jeWpuZWdvIgorCisjOiBmb3J3YXJkLmM6NjI5CisjLCBjLWZvcm1hdAorbXNnaWQgInBvc3NpYmxlIEROUy1yZWJpbmQgYXR0YWNrIGRldGVjdGVkOiAlcyIKK21zZ3N0ciAicHJhd2RvcG9kb2JuaWUgd3lrcnl0byBhdGFrIEROUy1yZWJpbmQ6ICVzIgorCisjOiBmb3J3YXJkLmM6MTEzMiBmb3J3YXJkLmM6MTY2MworbXNnaWQgIklnbm9yaW5nIHF1ZXJ5IGZyb20gbm9uLWxvY2FsIG5ldHdvcmsiCittc2dzdHIgIklnbm9yb3dhbmllIHphcHl0YcWEIHogc2llY2kgcG96YWxva2FsbnljaC4iCisKKyM6IGZvcndhcmQuYzoyMTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRE5TIHF1ZXJpZXMgcmVhY2hlZCAobWF4OiAlZCkiCittc2dzdHIgIk9zacSFZ25pxJl0byBncmFuaWN6bsSFIGlsb8WbxIcgamVkbm9jemXFm25pZSBvYnPFgnVnaXdhbnljaCB6YXB5dGHFhCBETlMgKG1ha3M6ICVkKSIKKworIzogbmV0d29yay5jOjcxNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGxpc3RlbmluZyBzb2NrZXQgZm9yICVzOiAlcyIKK21zZ3N0ciAibmllIHVkYcWCbyBzacSZIG90d29yennEhyBnbmlhemRhICVzOiAlcyIKKworIzogbmV0d29yay5jOjEwMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTE9VRCBXQVJOSU5HOiBsaXN0ZW5pbmcgb24gJXMgbWF5IGFjY2VwdCByZXF1ZXN0cyB2aWEgaW50ZXJmYWNlcyBvdGhlciB0aGFuICVzIgorbXNnc3RyICJVV0FHQTogbmFzxYJ1Y2hpd2FuaWUgbmEgJXMgbW/FvGUgcHJ6eWptb3dhxIcgxbzEhWRhbmlhIHByenljaG9kesSFY2UgcHJ6ZXogaW50ZXJmZWpzeSBpbm5lIG5pxbwgJXMiCisKKyM6IG5ldHdvcmsuYzoxMDI4Cittc2dpZCAiTE9VRCBXQVJOSU5HOiB1c2UgLS1iaW5kLWR5bmFtaWMgcmF0aGVyIHRoYW4gLS1iaW5kLWludGVyZmFjZXMgdG8gYXZvaWQgRE5TIGFtcGxpZmljYXRpb24gYXR0YWNrcyB2aWEgdGhlc2UgaW50ZXJmYWNlKHMpIgorbXNnc3RyICJVV0FHQTogemFzdG9zb3dhbmllIC0tYmluZC1keW5hbWljIHphbWlhc3QgLS1iaW5kLWludGVyZmFjZXMgZGFqZSBvY2hyb27EmSBwcnplZCBhdGFrYW1pIHd6bW9jbmllbmlhIEROUyIKKworIzogbmV0d29yay5jOjEwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogbm8gYWRkcmVzc2VzIGZvdW5kIGZvciBpbnRlcmZhY2UgJXMiCittc2dzdHIgInV3YWdhOiBuaWUgem5hbGV6aW9ubyBhZHJlc3UgaW50ZXJmZWpzdSAlcyIKKworIzogbmV0d29yay5jOjEwOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJmYWNlICVzIGZhaWxlZCB0byBqb2luIERIQ1B2NiBtdWx0aWNhc3QgZ3JvdXA6ICVzIgorbXNnc3RyICJpbnRlcmZlanMgJXMgbmllIHBvendvbGnFgiBzacSZIHByennFgsSFY3p5xIcgZG8gZ3J1cHkgcm96Z8WCb3N6ZW5pb3dlaiBESENQdjY6ICVzIgorCisjOiBuZXR3b3JrLmM6MTI4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBzZXJ2ZXIgc29ja2V0IGZvciAlczogJXMiCittc2dzdHIgImLFgsSFZCBwcnp5IHByenl6bmF3YW5pdSBuYXp3eSBnbmlhemR1IHNlcndlcmEgJXM6ICVzIgorCisjOiBuZXR3b3JrLmM6MTQ0NAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBuYW1lc2VydmVyICVzIC0gbG9jYWwgaW50ZXJmYWNlIgorbXNnc3RyICJpZ25vcm93YW5pZSBzZXJ3ZXJhIG5hencgJXMgLSBpbnRlcmZlanMgbG9rYWxueSIKKworIzogbmV0d29yay5jOjE0NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGNhbm5vdCBtYWtlL2JpbmQgc29ja2V0OiAlcyIKK21zZ3N0ciAiaWdub3Jvd2FuaWUgc2Vyd2VyYSBuYXp3ICVzIC0gbmllIG1vxbxuYSB1dHdvcnp5xIcvZG93acSFemHEhyBnbmlhemRhOiAlcyIKKworIzogbmV0d29yay5jOjE0NjgKK21zZ2lkICJ1bnF1YWxpZmllZCIKK21zZ3N0ciAibmlla3dhbGlmaWtvd2FuZSgtYSkiCisKKyM6IG5ldHdvcmsuYzoxNDY4Cittc2dpZCAibmFtZXMiCittc2dzdHIgIm5hend5IgorCisjOiBuZXR3b3JrLmM6MTQ3MAorbXNnaWQgImRlZmF1bHQiCittc2dzdHIgImRvbXnFm2xuZSIKKworIzogbmV0d29yay5jOjE0NzIKK21zZ2lkICJkb21haW4iCittc2dzdHIgImRvbWVueSIKKworIzogbmV0d29yay5jOjE0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbG9jYWwgYWRkcmVzc2VzIG9ubHkgZm9yICVzICVzIgorbXNnc3RyICJ1xbx5d2FtIGFkcmVzw7N3IGxva2FsbnljaCB0eWxrbyBkbGEgJXMgJXMiCisKKyM6IG5ldHdvcmsuYzoxNDc3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIHN0YW5kYXJkIG5hbWVzZXJ2ZXJzIGZvciAlcyAlcyIKK21zZ3N0ciAidcW8eXdhbSBzdGFuZGFyZG93eWNoIHNlcndlcsOzdyBuYXp3IGRsYSAlcyAlcyIKKworIzogbmV0d29yay5jOjE0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCBmb3IgJXMgJXMiCittc2dzdHIgInXFvHl3YW0gc2Vyd2VyYSBuYXp3ICVzIyVkIGRsYSAlcyAlcyIKKworIzogbmV0d29yay5jOjE0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTk9UIHVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQgLSBxdWVyeSBsb29wIGRldGVjdGVkIgorbXNnc3RyICJOSUUgdcW8eXdhbSBzZXJ3ZXJhIG5hencgJXMjJWQgLSB3eWtyeXRvIHDEmXRsxJkgemFweXRhxYQiCisKKyM6IG5ldHdvcmsuYzoxNDg2CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQodmlhICVzKSIKK21zZ3N0ciAidcW8eXdhbSBzZXJ3ZXJhIG5hencgJXMjJWQgKHByemV6ICVzKSIKKworIzogbmV0d29yay5jOjE0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCIKK21zZ3N0ciAidcW8eXdhbSBzZXJ3ZXJhIG5hencgJXMjJWQiCisKKyM6IGRuc21hc3EuYzoxNTQKK21zZ2lkICJObyB0cnVzdCBhbmNob3JzIHByb3ZpZGVkIGZvciBETlNTRUMiCittc2dzdHIgIk5pZSB3c2themFubyBwdW5rdMOzdyB6YXVmYW5pYSBkbGEgRE5TU0VDLiIKKworIzogZG5zbWFzcS5jOjE1NworbXNnaWQgIkNhbm5vdCByZWR1Y2UgY2FjaGUgc2l6ZSBmcm9tIGRlZmF1bHQgd2hlbiBETlNTRUMgZW5hYmxlZCIKK21zZ3N0ciAiQnJhayBtb8W8bGl3b8WbY2kgem1uaWVqc3plbmlhIHBhbWnEmWNpIHBvZHLEmWN6bmVqIHBvbmnFvGVqIHdpZWxrb8WbY2kgZG9tecWbbG5laiB3IHByenlwYWRrdSB1xbx5d2FuaWEgRE5TU0VDLiIKKworIzogZG5zbWFzcS5jOjE1OQorbXNnaWQgIkROU1NFQyBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9ETlNTRUMgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJvYnPFgnVnYSBETlNTRUMgbmllZG9zdMSZcG5hIC0gdXN0YXcgSEFWRV9ETlNTRUMgdyBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzoxNjUKK21zZ2lkICJURlRQIHNlcnZlciBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9URlRQIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiU2Vyd2VyIFRGVFAgbmllIHpvc3RhxYIgd2tvbXBpbG93YW55IC0tIHVzdGF3IEhBVkVfVEZUUCB3IHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjE3MAorbXNnaWQgIkNhbm5vdCB1c2UgLS1jb25udHJhY2sgQU5EIC0tcXVlcnktcG9ydCIKK21zZ3N0ciAiLS1jb25udHJhY2sgaSAtLXF1ZXJ5LXBvcnQgd3lrbHVjemFqxIUgc2nEmSB3emFqZW1uaWUiCisKKyM6IGRuc21hc3EuYzoxNzMKK21zZ2lkICJDb25udHJhY2sgc3VwcG9ydCBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9DT05OVFJBQ0sgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJXc3BhcmNpZSBkbGEgcHJ6ZWthenl3YW5pYSB6bmFjem5pa8OzdyBwb8WCxIVjemXFhCAoY29ubnRyYWNrKSBuaWUgem9zdGHFgm8gd2tvbXBpbG93YW5lIC0gdXN0YXcgSEFWRV9DT05OVFJBQ0sgdyBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzoxNzgKK21zZ2lkICJhc3ljaHJvbm91cyBsb2dnaW5nIGlzIG5vdCBhdmFpbGFibGUgdW5kZXIgU29sYXJpcyIKK21zZ3N0ciAiemFwaXMgZG8gbG9nw7N3IHcgdHJ5YmllIGFzeW5jaHJvbmljem55bSBuaWUgamVzdCBkb3N0xJlwbnkgdyBTb2xhcmlzaWUiCisKKyM6IGRuc21hc3EuYzoxODMKK21zZ2lkICJhc3ljaHJvbm91cyBsb2dnaW5nIGlzIG5vdCBhdmFpbGFibGUgdW5kZXIgQW5kcm9pZCIKK21zZ3N0ciAiemFwaXMgZG8gbG9nw7N3IHcgdHJ5YmllIGFzeW5jaHJvbmljem55bSBuaWUgamVzdCBkb3N0xJlwbnkgdyBBbmRyb2lkemllIgorCisjOiBkbnNtYXNxLmM6MTg4Cittc2dpZCAiYXV0aG9yaXRhdGl2ZSBETlMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfQVVUSCBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgInRyeWIgYXV0b3J5dGF0eXdueSBETlMtYSBuaWVkb3N0xJlwbnkgLSB1c3RhdyBIQVZFX0FVVEggdyBzcmMvY29uZmlnLmgiCisKKyM6IGRuc21hc3EuYzoxOTMKK21zZ2lkICJMb29wIGRldGVjdGlvbiBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9MT09QIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiV3lrcnl3YW5pZSBwxJl0bGkgemFweXRhxYQgbmllIHpvc3RhxYJvIHdrb21waWxvd2FuZSAtIHVzdGF3IEhBVkVfTE9PUCB3IHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjIwMQorbXNnaWQgInpvbmUgc2VyaWFsIG11c3QgYmUgY29uZmlndXJlZCBpbiAtLWF1dGgtc29hIgorbXNnc3RyICJ6YSBwb21vY8SFIC0tYXV0aC1zb2EgbXVzaSB6b3N0YcSHIHVzdGF3aW9ueSBudW1lciBzZXJ5am55IHN0cmVmeSIKKworIzogZG5zbWFzcS5jOjIxOQorbXNnaWQgImRoY3AtcmFuZ2UgY29uc3RydWN0b3Igbm90IGF2YWlsYWJsZSBvbiB0aGlzIHBsYXRmb3JtIgorbXNnc3RyICJrb25zdHJ1a2NqYSBkaGNwLXJhbmdlIG5pZSBqZXN0IGRvc3TEmXBuYSB3IHR5bSBzeXN0ZW1pZSIKKworIzogZG5zbWFzcS5jOjI2MgorbXNnaWQgImNhbm5vdCBzZXQgLS1iaW5kLWludGVyZmFjZXMgYW5kIC0tYmluZC1keW5hbWljIgorbXNnc3RyICItLWJpbmQtaW50ZXJmYWNlcyBpIC0tYmluZC1keW5hbWljIHd6YWplbW5pZSBzacSZIHd5a2x1Y3phasSFIgorCisjOiBkbnNtYXNxLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIGxpc3Qgb2YgaW50ZXJmYWNlczogJXMiCittc2dzdHIgImLFgsSFZCBwb2RjemFzIHR3b3J6ZW5pYSBsaXN0eSBpbnRlcmZlanPDs3cgc2llY2lvd3ljaDogJXMiCisKKyM6IGRuc21hc3EuYzoyNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbnRlcmZhY2UgJXMiCittc2dzdHIgIm5pZXpuYW55IGludGVyZmVqcyAlcyIKKworIzogZG5zbWFzcS5jOjMzMCBkbnNtYXNxLmM6OTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRCdXMgZXJyb3I6ICVzIgorbXNnc3RyICJixYLEhWQgREJ1czogJXMiCisKKyM6IGRuc21hc3EuYzozMzMKK21zZ2lkICJEQnVzIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0RCVVMgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJPYnPFgnVnYSBEQnVzIG5pZSB6b3N0YcWCYSB3a29tcGlsb3dhbmEgLS0gdXN0YXcgSEFWRV9EQlVTIHcgc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MzYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdXNlciBvciBncm91cDogJXMiCittc2dzdHIgIm5pZXpuYW55IHXFvHl0a293bmlrIGx1YiBncnVwYTogJXMiCisKKyM6IGRuc21hc3EuYzo0MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvIGZpbGVzeXN0ZW0gcm9vdDogJXMiCittc2dzdHIgIm5pZSBwb3RyYWZpxJkgd2VqxZvEhyBkbyBnxYLDs3duZWdvIGthdGFsb2d1OiAlcyIKKworIzogZG5zbWFzcS5jOjY1MworIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIEROUyBkaXNhYmxlZCIKK21zZ3N0ciAidXJ1Y2hvbWlvbnksIHdlcnNqYSAlcywgRE5TIHd5xYLEhWN6b255IgorCisjOiBkbnNtYXNxLmM6NjU1CisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGVzaXplICVkIgorbXNnc3RyICJ1cnVjaG9taW9ueSwgd2Vyc2phICVzLCAlZCBtaWVqc2MgdyBwYW1pxJljaSBwb2RyxJljem5laiIKKworIzogZG5zbWFzcS5jOjY1NworIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIGNhY2hlIGRpc2FibGVkIgorbXNnc3RyICJ1cnVjaG9taW9ueSwgd2Vyc2phICVzLCBwYW1pxJnEhyBwb2RyxJljem5hIHd5xYLEhWN6b25hIgorCisjOiBkbnNtYXNxLmM6NjU5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBpbGUgdGltZSBvcHRpb25zOiAlcyIKK21zZ3N0ciAib3BjamUga29tcGlsYWNqaTogJXMiCisKKyM6IGRuc21hc3EuYzo2NjUKK21zZ2lkICJEQnVzIHN1cHBvcnQgZW5hYmxlZDogY29ubmVjdGVkIHRvIHN5c3RlbSBidXMiCittc2dzdHIgIm9ic8WCdWdhIERCdXMgd8WCxIVjem9uYSwgcG9kxYLEhWN6b25vIGRvIHNlcndlcmEgREJ1cyIKKworIzogZG5zbWFzcS5jOjY2NworbXNnaWQgIkRCdXMgc3VwcG9ydCBlbmFibGVkOiBidXMgY29ubmVjdGlvbiBwZW5kaW5nIgorbXNnc3RyICJvYnPFgnVnYSBEQnVzIHfFgsSFY3pvbmEsIHRyd2EgcG9kxYLEhWN6YW5pZSBkbyBzZXJ3ZXJhIERCdXMiCisKKyM6IGRuc21hc3EuYzo2NzIKK21zZ2lkICJETlMgc2VydmljZSBsaW1pdGVkIHRvIGxvY2FsIHN1Ym5ldHMiCittc2dzdHIgInVzxYJ1Z2EgRE5TIG9ncmFuaWN6b25hIGRvIGxva2FsbnljaCBwb2RzaWVjaSIKKworIzogZG5zbWFzcS5jOjY3NworbXNnaWQgIkROU1NFQyB2YWxpZGF0aW9uIGVuYWJsZWQiCittc2dzdHIgIndhbGlkYWNqYSBETlNTRUMgd8WCxIVjem9uYSIKKworIzogZG5zbWFzcS5jOjY3OQorbXNnaWQgIkROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyBub3QgY2hlY2tlZCB1bnRpbCBmaXJzdCBjYWNoZSByZWxvYWQiCittc2dzdHIgInNwcmF3ZHphbmllIHN5Z25hdHVyIGN6YXNvd3ljaCBETlNTRUMgd3nFgsSFY3pvbmUgZG8gY3phc3UgcHJ6ZcWCYWRvd2FuaWEgcGFtacSZY2kgcG9kcsSZY3puZWoiCisKKyM6IGRuc21hc3EuYzo2ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogZmFpbGVkIHRvIGNoYW5nZSBvd25lciBvZiAlczogJXMiCittc2dzdHIgIlVXQUdBISBOaWUgdWRhxYJvIHNpxJkgem1pZW5pxIcgdcW8eXRrb3duaWthIHBsaWt1ICVzOiAlcyIKKworIzogZG5zbWFzcS5jOjY4OAorbXNnaWQgInNldHRpbmcgLS1iaW5kLWludGVyZmFjZXMgb3B0aW9uIGJlY2F1c2Ugb2YgT1MgbGltaXRhdGlvbnMiCittc2dzdHIgInVzdGF3aWFtIC0tYmluZC1pbnRlcmZhY2VzIHogcG93b2R1IG9ncmFuaWN6ZcWEIHN5c3RlbXUgb3BlcmFjeWpuZWdvIgorCisjOiBkbnNtYXNxLmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGludGVyZmFjZSAlcyBkb2VzIG5vdCBjdXJyZW50bHkgZXhpc3QiCittc2dzdHIgInV3YWdhOiBpbnRlcmZlanMgJXMgbmllIGplc3Qgd8WCxIVjem9ueSIKKworIzogZG5zbWFzcS5jOjcwMworbXNnaWQgIndhcm5pbmc6IGlnbm9yaW5nIHJlc29sdi1maWxlIGZsYWcgYmVjYXVzZSBuby1yZXNvbHYgaXMgc2V0IgorbXNnc3RyICJ1d2FnYTogaWdub3J1asSZIG9wY2rEmSByZXNvbHYtZmlsZSwgcG9uaWV3YcW8IHd5YnJhbm8gdHJ5YiBuby1yZXNvbHYiCisKKyM6IGRuc21hc3EuYzo3MDYKK21zZ2lkICJ3YXJuaW5nOiBubyB1cHN0cmVhbSBzZXJ2ZXJzIGNvbmZpZ3VyZWQiCittc2dzdHIgInV3YWdhOiBuaWUgd3NrYXphbm8gbmFkcnrEmWRueWNoIHNlcndlcsOzdyBETlMiCisKKyM6IGRuc21hc3EuYzo3MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXN5bmNocm9ub3VzIGxvZ2dpbmcgZW5hYmxlZCwgcXVldWUgbGltaXQgaXMgJWQgbWVzc2FnZXMiCittc2dzdHIgInfFgsSFY3pvbm8gYXN5bmNocm9uaWN6bnkgdHJ5YiB6YXBpc3UgZG8gbG9nw7N3IHoga29sZWprxIUgbmEgJWQga29tdW5pa2F0w7N3IgorCisjOiBkbnNtYXNxLmM6NzMxCittc2dpZCAiSVB2NiByb3V0ZXIgYWR2ZXJ0aXNlbWVudCBlbmFibGVkIgorbXNnc3RyICJhbm9uc293YW5pZSBydXRlcmEgSVB2NiB3xYLEhWN6b25lIgorCisjOiBkbnNtYXNxLmM6NzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AsIHNvY2tldHMgYm91bmQgZXhjbHVzaXZlbHkgdG8gaW50ZXJmYWNlICVzIgorbXNnc3RyICJESENQLCBnbmlhemRhIGRvd2nEhXphbmUgbmEgd3nFgsSFY3pub8WbxIcgaW50ZXJmZWpzb3dpICVzIgorCisjOiBkbnNtYXNxLmM6NzUzCittc2dpZCAicm9vdCBpcyAiCittc2dzdHIgInogZ8WCw7N3bnltIGthdGFsb2dpZW0gdyAiCisKKyM6IGRuc21hc3EuYzo3NTMKK21zZ2lkICJlbmFibGVkIgorbXNnc3RyICJ3xYLEhWN6b255IgorCisjOiBkbnNtYXNxLmM6NzU1Cittc2dpZCAic2VjdXJlIG1vZGUiCittc2dzdHIgIncgdHJ5YmllIGJlenBpZWN6bnltIgorCisjOiBkbnNtYXNxLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlc3RyaWN0aW5nIG1heGltdW0gc2ltdWx0YW5lb3VzIFRGVFAgdHJhbnNmZXJzIHRvICVkIgorbXNnc3RyICJvZ3JhbmljemFtIGlsb8WbxIcgamVkbm9jemVzbnljaCBwcnplc8WCYcWEIFRGVFAgZG8gJWQiCisKKyM6IGRuc21hc3EuYzo5NTYKK21zZ2lkICJjb25uZWN0ZWQgdG8gc3lzdGVtIERCdXMiCittc2dzdHIgInBvZMWCxIVjem9ubyBkbyBEQnVzLWEiCisKKyM6IGRuc21hc3EuYzoxMTA2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmb3JrIGludG8gYmFja2dyb3VuZDogJXMiCittc2dzdHIgIm5pZSBwb3RyYWZpxJkgcHJ6ZcWCxIVjennEhyBzacSZIGRvIHByYWN5IHcgdGxlOiAlcyIKKworIzogZG5zbWFzcS5jOjExMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBoZWxwZXI6ICVzIgorbXNnc3RyICJuaWUgdWRhxYJvIHNpxJkgdXR3b3J6ecSHIHByb2Nlc3UgcG9tb2NuaWN6ZWdvOiAlcyIKKworIzogZG5zbWFzcS5jOjExMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAic2V0dGluZyBjYXBhYmlsaXRpZXMgZmFpbGVkOiAlcyIKK21zZ3N0ciAibmllIHBvd2lvZMWCbyBzacSZIHVzdGF3aWFuaWUgb2dyYW5pY3plxYQgKGNhcGFiaWxpdGllcyk6ICVzIgorCisjOiBkbnNtYXNxLmM6MTExNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2hhbmdlIHVzZXItaWQgdG8gJXM6ICVzIgorbXNnc3RyICJuaWUgdWRhxYJvIHNpxJkgem1pZW5pxIcgdcW8eXRrb3duaWthIHByb2Nlc3UgbmEgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTExOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2hhbmdlIGdyb3VwLWlkIHRvICVzOiAlcyIKK21zZ3N0ciAibmllIHVkYcWCbyBzacSZIHptaWVuacSHIGdydXB5IHByb2Nlc3UgbmEgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBwaWRmaWxlICVzOiAlcyIKK21zZ3N0ciAibmllIHVkYcWCbyBzacSZIG90d29yennEhyBwbGlrdSB6IFBJRC1lbSAlczogJXMiCisKKyM6IGRuc21hc3EuYzoxMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIGxvZyAlczogJXMiCittc2dzdHIgIm5pZSB1ZGHFgm8gc2nEmSBvdHdvcnp5xIcgbG9ndSAlczogJXMiCisKKyM6IGRuc21hc3EuYzoxMTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIEx1YSBzY3JpcHQ6ICVzIgorbXNnc3RyICJuaWUgdWRhxYJvIHNpxJkgd2N6eXRhxIcgc2tyeXB0dSBMdWE6ICVzIgorCisjOiBkbnNtYXNxLmM6MTEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJURlRQIGRpcmVjdG9yeSAlcyBpbmFjY2Vzc2libGU6ICVzIgorbXNnc3RyICJrYXRhbG9nIFRGVFAgJXMgbmllIGplc3QgZG9zdMSZcG55OiAlcyIKKworIzogZG5zbWFzcS5jOjExNTEKK21zZ2lkICJub3cgY2hlY2tpbmcgRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzIgorbXNnc3RyICJ0cndhIHNwcmF3ZHphbmllIHN5Z25hdHVyIGN6YXNvd3ljaCBwb2RwaXPDs3cgRE5TU0VDIgorCisjOiBkbnNtYXNxLmM6MTIxOAorIywgYy1mb3JtYXQKK21zZ2lkICJzY3JpcHQgcHJvY2VzcyBraWxsZWQgYnkgc2lnbmFsICVkIgorbXNnc3RyICJza3J5cHQgem9zdGHFgiB6YWJpdHkgc3lnbmHFgmVtICVkIgorCisjOiBkbnNtYXNxLmM6MTIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJzY3JpcHQgcHJvY2VzcyBleGl0ZWQgd2l0aCBzdGF0dXMgJWQiCittc2dzdHIgInNrcnlwdCB6YWtvxYRjennFgiBzacSZIHoga29kZW0gcG93cm90dSAlZCIKKworIzogZG5zbWFzcS5jOjEyMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4ZWN1dGUgJXM6ICVzIgorbXNnc3RyICJuaWUgdWRhxYJvIHNpxJkgdXJ1Y2hvbWnEhyAlczogJXMiCisKKyM6IGRuc21hc3EuYzoxMjgxCittc2dpZCAiZXhpdGluZyBvbiByZWNlaXB0IG9mIFNJR1RFUk0iCittc2dzdHIgInpha2/FhGN6ecWCZW0gZHppYcWCYW5pZSB6IHBvd29kdSBvZGVicmFuaWEgU0lHVEVSTSIKKworIzogZG5zbWFzcS5jOjEzMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFjY2VzcyAlczogJXMiCittc2dzdHIgImJyYWsgZG9zdMSZcHUgZG8gJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTMzOQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nICVzIgorbXNnc3RyICJjenl0YW5pZSAlcyIKKworIzogZG5zbWFzcS5jOjEzNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc2VydmVycyBmb3VuZCBpbiAlcywgd2lsbCByZXRyeSIKK21zZ3N0ciAidyAlcyBuaWUgem5hbGF6xYJlbSBzZXJ3ZXLDs3csIHNwcsOzYnVqxJkgcG9ub3duaWUgcMOzxbpuaWVqIgorCisjOiBkaGNwLmM6NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQIHNvY2tldDogJXMiCittc2dzdHIgIm5pZSB1ZGHFgm8gc2nEmSB1dHdvcnp5xIcgZ25pYXpkYSBkbGEgREhDUDogJXMiCisKKyM6IGRoY3AuYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IG9wdGlvbnMgb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJixYLEhWQgcG9kY3phcyB1c3Rhd2lhbmlhIG9wY2ppIGduaWF6ZGEgREhDUDogJXMiCisKKyM6IGRoY3AuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX1JFVVNFe0FERFJ8UE9SVH0gb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICJuaWUgdWRhxYJvIHNpxJkgdXN0YXdpxIcgU09fUkVVU0V7QUREUnxQT1JUfSBnbmlhemRhIERIQ1A6ICVzIgorCisjOiBkaGNwLmM6MTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIERIQ1Agc2VydmVyIHNvY2tldDogJXMiCittc2dzdHIgImLFgsSFZCBwcnp5IHByenl6bmF3YW5pdSBuYXp3eSBnbmlhemR1IHNlcndlcmEgREhDUDogJXMiCisKKyM6IGRoY3AuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBJQ01QIHJhdyBzb2NrZXQ6ICVzLiIKK21zZ3N0ciAibmllIHVkYcWCbyBzacSZIHV0d29yennEhyBzdXJvd2VnbyBnbmlhemRhIElDTVA6ICVzLiIKKworIzogZGhjcC5jOjIzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGludGVyZmFjZSAlcyBpbiBicmlkZ2UtaW50ZXJmYWNlIgorbXNnc3RyICJuaWV6bmFueSBpbnRlcmZlanMgJXMgdyBicmlkZ2UtdSIKKworIzogZGhjcC5jOjI3OAorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHBhY2tldCByZWNlaXZlZCBvbiAlcyB3aGljaCBoYXMgbm8gYWRkcmVzcyIKK21zZ3N0ciAixbzEhWRhbmllIERIQ1Agb2RlYnJhbm8gbmEgaW50ZXJmZWpzaWUgJXMsIGt0w7NyeSBuaWUgbWEgYWRyZXN1IgorCisjOiBkaGNwLmM6NDA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFSUC1jYWNoZSBpbmplY3Rpb24gZmFpbGVkOiAlcyIKK21zZ3N0ciAidXp1cGXFgm5pZW5pZSBwYW1pxJljaSBwb2RyxJljem5laiBBUlAgbmllIHBvd2lvZMWCbyBzacSZOiAlcyIKKworIzogZGhjcC5jOjUwNgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJhbmdlICVzIC0tICVzIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggbmV0bWFzayAlcyIKK21zZ3N0ciAiemFrcmVzIGFkcmVzw7N3IERIQ1AgJXMgLS0gJXMgamVzdCBuaWVzcMOzam55IHogbWFza8SFIHNpZWNpICVzIgorCisjOiBkaGNwLmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBsaW5lIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgInrFgmEgemF3YXJ0b8WbxIcgcGxpa3UgJXMsIHcgbGluaWkgJWQiCisKKyM6IGRoY3AuYzo4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJXMgbGluZSAlZCwgZHVwbGljYXRlIG5hbWUgb3IgSVAgYWRkcmVzcyIKK21zZ3N0ciAidyAlcyBwb21pamFtIGxpbmnEmSAlZCAtLSBwb3d0w7Nyem9uYSBuYXp3YSBsdWIgYWRyZXMgSVAiCisKKyM6IGRoY3AuYzo5OTQgcmZjMzMxNS5jOjIwODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByZWxheSAlcyAtPiAlcyIKK21zZ3N0ciAicHJ6ZWthenl3YW5pZSBESENQICVzIC0+ICVzIgorCisjOiBsZWFzZS5jOjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIG9yIGNyZWF0ZSBsZWFzZSBmaWxlICVzOiAlcyIKK21zZ3N0ciAibmllIHBvdHJhZmnEmSBvdHdvcnp5xIcgYWxibyB1dHdvcnp5xIcgcGxpa3UgZHppZXLFvGF3ICVzOiAlcyIKKworIzogbGVhc2UuYzoxMzQKK21zZ2lkICJ0b28gbWFueSBzdG9yZWQgbGVhc2VzIgorbXNnc3RyICJ6Ynl0IGR1xbxhIGlsb8WbxIcgemFwaXNhbnljaCBkemllcsW8YXciCisKKyM6IGxlYXNlLmM6MTY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBydW4gbGVhc2UtaW5pdCBzY3JpcHQgJXM6ICVzIgorbXNnc3RyICJuaWUgcG90cmFmacSZIHVydWNob21pxIcgc2tyeXB0dSAlczogJXMiCisKKyM6IGxlYXNlLmM6MTcxCisjLCBjLWZvcm1hdAorbXNnaWQgImxlYXNlLWluaXQgc2NyaXB0IHJldHVybmVkIGV4aXQgY29kZSAlcyIKK21zZ3N0ciAic2tyeXB0IHpha2/FhGN6ecWCIHNpxJkgeiBrb2RlbSBwb3dyb3R1ICVzIgorCisjOiBsZWFzZS5jOjM0MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgJXM6ICVzIChyZXRyeSBpbiAldXMpIgorbXNnc3RyICJixYLEhWQgemFwaXN1IGRvICVzOiAlcyAoc3Byw7NidWrEmSBwb25vd25pZSB6YSAldXMpIgorCisjOiBsZWFzZS5jOjkwNgorIywgYy1mb3JtYXQKK21zZ2lkICJJZ25vcmluZyBkb21haW4gJXMgZm9yIERIQ1AgaG9zdCBuYW1lICVzIgorbXNnc3RyICJOaWUgdXd6Z2zEmWRuaWFtIGN6xJnFm2NpIGRvbWVub3dlaiAoJXMpIGRsYSBrb21wdXRlcmEgJXMiCisKKyM6IHJmYzIxMzEuYzozNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgZm9yIERIQ1AgcmVxdWVzdCAlcyAlcyIKK21zZ3N0ciAibmllIHpkZWZpbmlvd2FubyB6YWtyZXN1IGFkcmVzw7N3IG9kcG93aWVkbmllZ28gZGxhIMW8xIVkYW5pYSAlcyAlcyIKKworIzogcmZjMjEzMS5jOjM0MworbXNnaWQgIndpdGggc3VibmV0IHNlbGVjdG9yIgorbXNnc3RyICJ6IHd5Ym9yZW0gcG9kc2llY2kiCisKKyM6IHJmYzIxMzEuYzozNDMKK21zZ2lkICJ2aWEiCittc2dzdHIgInByemV6IgorCisjOiByZmMyMTMxLmM6MzU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGF2YWlsYWJsZSBESENQIHN1Ym5ldDogJXMvJXMiCittc2dzdHIgIiV1IGRvc3TEmXBuYSBwb2RzaWXEhyBESENQOiAlcy8lcyIKKworIzogcmZjMjEzMS5jOjM1OCByZmMzMzE1LmM6MzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGF2YWlsYWJsZSBESENQIHJhbmdlOiAlcyAtLSAlcyIKK21zZ3N0ciAiJXUgZG9zdMSZcG55IHpha3JlcyBhZHJlc8OzdyBESENQOiAlcyAtLSAlcyIKKworIzogcmZjMjEzMS5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSB2ZW5kb3IgY2xhc3M6ICVzIgorbXNnc3RyICIldSBrbGFzYSBkb3N0YXdjeTogJXMiCisKKyM6IHJmYzIxMzEuYzo0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgdXNlciBjbGFzczogJXMiCittc2dzdHIgIiV1IGtsYXNhIHXFvHl0a293bmlrYTogJXMiCisKKyM6IHJmYzIxMzEuYzo0OTgKK21zZ2lkICJkaXNhYmxlZCIKK21zZ3N0ciAid3nFgsSFY3pvbnkoYSkiCisKKyM6IHJmYzIxMzEuYzo1MzkgcmZjMjEzMS5jOjk2NyByZmMyMTMxLmM6MTM4NSByZmMzMzE1LmM6NjAyIHJmYzMzMTUuYzo4MjMKKyM6IHJmYzMzMTUuYzoxMDk1Cittc2dpZCAiaWdub3JlZCIKK21zZ3N0ciAiaWdub3J1asSZIgorCisjOiByZmMyMTMxLmM6NTU0IHJmYzIxMzEuYzoxMjA1IHJmYzMzMTUuYzo4NzMKK21zZ2lkICJhZGRyZXNzIGluIHVzZSIKK21zZ3N0ciAiYWRyZXMgamVzdCB3IHXFvHljaXUiCisKKyM6IHJmYzIxMzEuYzo1NjggcmZjMjEzMS5jOjEwMjEKK21zZ2lkICJubyBhZGRyZXNzIGF2YWlsYWJsZSIKK21zZ3N0ciAiYnJhayBkb3N0xJlwbmVnbyBhZHJlc3UiCisKKyM6IHJmYzIxMzEuYzo1NzUgcmZjMjEzMS5jOjExNjgKK21zZ2lkICJ3cm9uZyBuZXR3b3JrIgorbXNnc3RyICJuaWVwcmF3aWTFgm93YSBzaWXEhyIKKworIzogcmZjMjEzMS5jOjU5MAorbXNnaWQgIm5vIGFkZHJlc3MgY29uZmlndXJlZCIKK21zZ3N0ciAiYnJhayBza29uZmlndXJvd2FuZWdvIGFkcmVzdSIKKworIzogcmZjMjEzMS5jOjU5NiByZmMyMTMxLmM6MTIxOAorbXNnaWQgIm5vIGxlYXNlcyBsZWZ0IgorbXNnc3RyICJicmFrIHdvbG55Y2ggZHppZXLFvGF3IgorCisjOiByZmMyMTMxLmM6NjkxIHJmYzMzMTUuYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgY2xpZW50IHByb3ZpZGVzIG5hbWU6ICVzIgorbXNnc3RyICJrbGllbnQgJXUgcHJ6ZWRzdGF3aWEgc2nEmSBqYWtvICVzIgorCisjOiByZmMyMTMxLmM6Nzk2Cittc2dpZCAiUFhFIEJJUyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICJQWEUgQklTIG5pZSBqZXN0IG9ic8WCdWdpd2FuZSIKKworIzogcmZjMjEzMS5jOjkzNSByZmMzMzE1LmM6MTE4OQorIywgYy1mb3JtYXQKK21zZ2lkICJkaXNhYmxpbmcgREhDUCBzdGF0aWMgYWRkcmVzcyAlcyBmb3IgJXMiCittc2dzdHIgInd5xYLEhWN6YW0gc3RhdHljem5lIHByenlwaXNhbmllIGFkcmVzdSAlcyBkbGEgJXMiCisKKyM6IHJmYzIxMzEuYzo5NTYKK21zZ2lkICJ1bmtub3duIGxlYXNlIgorbXNnc3RyICJuaWV6bmFuYSBkemllcsW8YXdhIgorCisjOiByZmMyMTMxLmM6OTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCBpcyBsZWFzZWQgdG8gJXMiCittc2dzdHIgIm5pZSBwcm9wb251asSZIHpha8WCYWRhbmVnbyB3IGtvbmZpZ3VyYWNqaSBhZHJlc3UgJXMsIGJvIGplc3Qgb24ganXFvCB3eWR6aWVyxbxhd2lvbnkga29tcHV0ZXJvd2kgJXMiCisKKyM6IHJmYzIxMzEuYzoxMDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCBpcyBpbiB1c2UgYnkgdGhlIHNlcnZlciBvciByZWxheSIKK21zZ3N0ciAibmllIHByb3BvbnVqxJkgemFrxYJhZGFuZWdvIHcga29uZmlndXJhY2ppIGFkcmVzdSAlcywgYm8gdcW8eXdhIGdvIGt0w7NyecWbIHogc2Vyd2Vyw7N3IgorCisjOiByZmMyMTMxLmM6MTAwMworIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgd2FzIHByZXZpb3VzbHkgZGVjbGluZWQiCittc2dzdHIgIm5pZSBwcm9wb251asSZIHpha8WCYWRhbmVnbyB3IGtvbmZpZ3VyYWNqaSBhZHJlc3UgJXMsIGJvIGp1xbwgcG9wcnplZG5pbyB6b3N0YcWCIG9kcnp1Y29ueSIKKworIzogcmZjMjEzMS5jOjEwMTkgcmZjMjEzMS5jOjEyMTEKK21zZ2lkICJubyB1bmlxdWUtaWQiCittc2dzdHIgImJyYWsgdW5pa2FsbmVnbyBpZCIKKworIzogcmZjMjEzMS5jOjExMDYKK21zZ2lkICJ3cm9uZyBzZXJ2ZXItSUQiCittc2dzdHIgIm5pZXByYXdpZMWCb3d5IGlkZW50eWZpa2F0b3Igc2Vyd2VyYSAoc2VydmVyLUlEKSIKKworIzogcmZjMjEzMS5jOjExMjUKK21zZ2lkICJ3cm9uZyBhZGRyZXNzIgorbXNnc3RyICJixYLEmWRueSBhZHJlcyIKKworIzogcmZjMjEzMS5jOjExNDMgcmZjMzMxNS5jOjk2OQorbXNnaWQgImxlYXNlIG5vdCBmb3VuZCIKK21zZ3N0ciAiZHppZXLFvGF3YSBuaWV6bmFsZXppb25hIgorCisjOiByZmMyMTMxLmM6MTE3NgorbXNnaWQgImFkZHJlc3Mgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAiYWRyZXMgbmllZG9zdMSZcG55IgorCisjOiByZmMyMTMxLmM6MTE4NworbXNnaWQgInN0YXRpYyBsZWFzZSBhdmFpbGFibGUiCittc2dzdHIgImRvc3TEmXBuYSBzdGF0eWN6bmEgZHppZXLFvGF3YSIKKworIzogcmZjMjEzMS5jOjExOTEKK21zZ2lkICJhZGRyZXNzIHJlc2VydmVkIgorbXNnc3RyICJhZHJlcyB6YXJlemVyd293YW55IgorCisjOiByZmMyMTMxLmM6MTE5OQorIywgYy1mb3JtYXQKK21zZ2lkICJhYmFuZG9uaW5nIGxlYXNlIHRvICVzIG9mICVzIgorbXNnc3RyICJwb3J6dWNhbSBwcnp5cGlzYW5pZSBkbyAlcyBuYXp3eSAlcyIKKworIzogcmZjMjEzMS5jOjE3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYm9vdGZpbGUgbmFtZTogJXMiCittc2dzdHIgIiV1IG5hendhIHBsaWt1IGJvb3Rvd2FuaWE6ICVzIgorCisjOiByZmMyMTMxLmM6MTcyMQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBzZXJ2ZXIgbmFtZTogJXMiCittc2dzdHIgIiV1IG5hendhIHNlcndlcmE6ICVzIgorCisjOiByZmMyMTMxLmM6MTcyOQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBuZXh0IHNlcnZlcjogJXMiCittc2dzdHIgIiV1IG5hc3TEmXBueSBzZXJ3ZXI6ICVzIgorCisjOiByZmMyMTMxLmM6MTczMgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBicm9hZGNhc3QgcmVzcG9uc2UiCittc2dzdHIgIiV1IG9kcG93aWVkxbogcm96Z8WCb3N6ZW5pb3dhIgorCisjOiByZmMyMTMxLmM6MTc5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc2VuZCBESENQL0JPT1RQIG9wdGlvbiAlZDogbm8gc3BhY2UgbGVmdCBpbiBwYWNrZXQiCittc2dzdHIgIm5pZSBtYW0gbW/FvGxpd2/Fm2NpIHd5c8WCYW5pYSBvcGNqaSAlZCBESENQL0JPT1RQOiBuaWVkb3N0YXRlY3puYSBpbG/Fm8SHIG1pZWpzY2EgdyBwYWtpZWNpZSIKKworIzogcmZjMjEzMS5jOjIwMzYKK21zZ2lkICJQWEUgbWVudSB0b28gbGFyZ2UiCittc2dzdHIgIm1lbnUgUFhFIHpieXQgZHXFvGUiCisKKyM6IHJmYzIxMzEuYzoyMTczIHJmYzMzMTUuYzoxNDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHJlcXVlc3RlZCBvcHRpb25zOiAlcyIKK21zZ3N0ciAiJXUgemHFvMSFZGFubzogJXMiCisKKyM6IHJmYzIxMzEuYzoyNDUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzZW5kIFJGQzM5MjUgb3B0aW9uOiB0b28gbWFueSBvcHRpb25zIGZvciBlbnRlcnByaXNlIG51bWJlciAlZCIKK21zZ3N0ciAibmllIG1vZ8SZIHd5c8WCYcSHIG9wY2ppIFJGQzM5MjU6IHphIGTFgnVnaSDFgmHFhGN1Y2ggb3BjamkgcHJ6eSBudW1lcnplICVkIgorCisjOiBuZXRsaW5rLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBuZXRsaW5rIHNvY2tldDogJXMiCittc2dzdHIgIm5pZSBwb3RyYWZpxJkgdXR3b3J6ecSHIHBvxYLEhWN6ZW5pYSBuZXRsaW5rICVzIgorCisjOiBuZXRsaW5rLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldGxpbmsgcmV0dXJucyBlcnJvcjogJXMiCittc2dzdHIgInd5c3TEhXBpxYIgYsWCxIVkIHcgcG/FgsSFY3plbml1IG5ldGxpbmsgJXMiCisKKyM6IGRidXMuYzoxNzEKK21zZ2lkICJhdHRlbXB0IHRvIHNldCBhbiBJUHY2IHNlcnZlciBhZGRyZXNzIHZpYSBEQnVzIC0gbm8gSVB2NiBzdXBwb3J0IgorbXNnc3RyICJwcsOzYmEgdXN0YXdpZW5pYSBhZHJlc3UgSVB2NiBzZXJ3ZXJhIHByemV6IERCdXMsIGFsZSBicmFrIG9ic8WCdWdpIElQdjYiCisKKyM6IGRidXMuYzo1MDAKK21zZ2lkICJzZXR0aW5nIHVwc3RyZWFtIHNlcnZlcnMgZnJvbSBEQnVzIgorbXNnc3RyICJ1c3Rhd2lhbSBhZHJlc3kgc2Vyd2Vyw7N3IG5hZHJ6xJlkbnljaCBuYSBwb2RzdGF3aWUgaW5mb3JtYWNqaSBvZGVicmFueWNoIHogREJ1cyIKKworIzogZGJ1cy5jOjU0NworbXNnaWQgImNvdWxkIG5vdCByZWdpc3RlciBhIERCdXMgbWVzc2FnZSBoYW5kbGVyIgorbXNnc3RyICJuaWUgbW/FvG5hIHphcmVqZXN0cm93YcSHIHVjaHd5dHUgREJ1cyIKKworIzogYnBmLmM6MjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUCBCUEYgc29ja2V0OiAlcyIKK21zZ3N0ciAibmllIHBvdHJhZmnEmSB1dHdvcnp5xIcgZ25pYXpkYSBESENQIEJQRjogJXMiCisKKyM6IGJwZi5jOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlcXVlc3QgZm9yIHVuc3VwcG9ydGVkIGhhcmR3YXJlIHR5cGUgKCVkKSByZWNlaXZlZCBvbiAlcyIKK21zZ3N0ciAixbzEhWRhbmllIERIQ1Agb2QgdXJ6xIVkemVuaWEgbmllb2JzxYJ1Z2l3YW5lZ28gdHlwdSAoJWQpIG9kZWJyYW5vIG5hICVzIgorCisjOiBicGYuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBQRl9ST1VURSBzb2NrZXQ6ICVzIgorbXNnc3RyICJuaWUgdWRhxYJvIHNpxJkgdXR3b3J6ecSHIGduaWF6ZGEgUEZfUk9VVEU6ICVzIgorCisjOiBicGYuYzozOTcKK21zZ2lkICJVbmtub3duIHByb3RvY29sIHZlcnNpb24gZnJvbSByb3V0ZSBzb2NrZXQiCittc2dzdHIgIk5pZXpuYW5hIHdlcnNqYSBwcm90b2tvxYJ1LiIKKworIzogaGVscGVyLmM6MTUzCittc2dpZCAibGVhc2UoKSBmdW5jdGlvbiBtaXNzaW5nIGluIEx1YSBzY3JpcHQiCittc2dzdHIgIncgc2tyeXBjaWUgTHVhIGJyYWsgZnVua2NqaSBsZWFzZSgpIgorCisjOiB0ZnRwLmM6MzA5Cittc2dpZCAidW5hYmxlIHRvIGdldCBmcmVlIHBvcnQgZm9yIFRGVFAiCittc2dzdHIgImJyYWsgd29sbmVnbyBwb3J0dSBkbGEgdXPFgnVnaSBURlRQIgorCisjOiB0ZnRwLmM6MzI1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIHJlcXVlc3QgZnJvbSAlcyIKK21zZ3N0ciAibmllb2JzxYJ1Z2l3YW5lIMW8xIVkYW5pZSBvZCBrb21wdXRlcmEgJXMiCisKKyM6IHRmdHAuYzo0MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmlsZSAlcyBub3QgZm91bmQiCittc2dzdHIgInBsaWsgJXMgbmllIHpvc3RhxYIgem5hbGV6aW9ueSIKKworIzogdGZ0cC5jOjU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJlcnJvciAlZCAlcyByZWNlaXZlZCBmcm9tICVzIgorbXNnc3RyICJixYLEhWQgJWQgJXMgb2RlYnJhbm8gb2QgJXMiCisKKyM6IHRmdHAuYzo1OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHNlbmRpbmcgJXMgdG8gJXMiCittc2dzdHIgImLFgsSFZCB3eXN5xYJhbmlhIHBsaWt1ICVzIGRvIGtvbXB1dGVyYSAlcyIKKworIzogdGZ0cC5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICJzZW50ICVzIHRvICVzIgorbXNnc3RyICJwbGlrICVzIHByemVzxYJhbm8gZG8gJXMiCisKKyM6IGxvZy5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyZmxvdzogJWQgbG9nIGVudHJpZXMgbG9zdCIKK21zZ3N0ciAicHJ6ZXBlxYJuaWVuaWU6IHN0cmFjb25vICVkIHdwaXPDs3cgZG8gbG9nw7N3IgorCisjOiBsb2cuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZhaWxlZDogJXMiCittc2dzdHIgIm5pZSB1ZGHFgm8gc2nEmSB6YXBpc2HEhyBrb211bmlrYXTDs3cgZG8gJXMiCisKKyM6IGxvZy5jOjQ3MgorbXNnaWQgIkZBSUxFRCB0byBzdGFydCB1cCIKK21zZ3N0ciAiQsWBxIREOiBuaWUgdWRhxYJvIHNpxJkgdXJ1Y2hvbWnEhyBkbnNtYXNxLWEiCisKKyM6IGNvbm50cmFjay5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbm50cmFjayBjb25uZWN0aW9uIG1hcmsgcmV0cmlldmFsIGZhaWxlZDogJXMiCittc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBvZGN6dGHEhyB6bmFjem5pa2EgcG/FgsSFY3plbmlhIChjb25udHJhY2spOiAlcyIKKworIzogZGhjcDYuYzo1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1B2NiBzb2NrZXQ6ICVzIgorbXNnc3RyICJuaWUgdWRhxYJvIHNpxJkgdXR3b3J6ecSHIGduaWF6ZGEgZGxhIERIQ1B2NjogJXMiCisKKyM6IGRoY3A2LmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBTT19SRVVTRXtBRERSfFBPUlR9IG9uIERIQ1B2NiBzb2NrZXQ6ICVzIgorbXNnc3RyICJuaWUgdWRhxYJvIHNpxJkgdXN0YXdpxIcgU09fUkVVU0V7QUREUnxQT1JUfSBnbmlhemRhIERIQ1B2NjogJXMiCisKKyM6IGRoY3A2LmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgREhDUHY2IHNlcnZlciBzb2NrZXQ6ICVzIgorbXNnc3RyICJkb3dpxIV6eXdhbmllIGduaWF6ZGEgc2Vyd2VyYSBESENQdjYgemFrb8WEY3pvbmUgbmllcG93b2R6ZW5pZW06ICVzIgorCisjOiByZmMzMzE1LmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQdjYgcmVxdWVzdCBmcm9tIHJlbGF5IGF0ICVzIgorbXNnc3RyICJuaWUgemRlZmluaW93YW5vIHpha3Jlc3UgYWRyZXPDs3cgb2Rwb3dpZWRuaWVnbyBkbGEgxbzEhWRhbmlhIERIQ1B2NiBwcnpla2F6YW5lZ28gcHJ6ZXogJXMiCisKKyM6IHJmYzMzMTUuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgZm9yIERIQ1B2NiByZXF1ZXN0IHZpYSAlcyIKK21zZ3N0ciAibmllIHpkZWZpbmlvd2FubyB6YWtyZXN1IGFkcmVzw7N3IG9kcG93aWVkbmllZ28gZGxhIMW8xIVkYW5pYSBESENQdjYgb2QgJXMiCisKKyM6IHJmYzMzMTUuYzoyOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYXZhaWxhYmxlIERIQ1B2NiBzdWJuZXQ6ICVzLyVkIgorbXNnc3RyICIldSBkb3N0xJlwbmEgcG9kc2llxIcgREhDUHY2OiAlcy8lZCIKKworIzogcmZjMzMxNS5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSB2ZW5kb3IgY2xhc3M6ICV1IgorbXNnc3RyICIldSBrbGFzYSBkb3N0YXdjeTogJXUiCisKKyM6IHJmYzMzMTUuYzo0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgY2xpZW50IE1BQyBhZGRyZXNzOiAlcyIKK21zZ3N0ciAiYWRyZXMgTUFDIGtsaWVudGEgJXU6ICVzIgorCisjOiByZmMzMzE1LmM6NjU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gcHJlZml4LWNsYXNzICVkIgorbXNnc3RyICJuaWV6bmFuYSBrbGFzYSBzaWVjaSAlZCIKKworIzogcmZjMzMxNS5jOjc5MSByZmMzMzE1LmM6OTEzCittc2dpZCAic3VjY2VzcyIKK21zZ3N0ciAidWRhbmUiCisKKyM6IHJmYzMzMTUuYzo4MDYgcmZjMzMxNS5jOjgwOCByZmMzMzE1LmM6OTIxIHJmYzMzMTUuYzo5MjMKK21zZ2lkICJubyBhZGRyZXNzZXMgYXZhaWxhYmxlIgorbXNnc3RyICJicmFrIHdvbG55Y2ggYWRyZXPDs3ciCisKKyM6IHJmYzMzMTUuYzo4NjUKK21zZ2lkICJhZGRyZXNzIHVuYXZhaWxhYmxlIgorbXNnc3RyICJhZHJlcyBuaWVkb3N0xJlwbnkiCisKKyM6IHJmYzMzMTUuYzo5MDAKK21zZ2lkICJub3Qgb24gbGluayIKK21zZ3N0ciAicG96YSB6YXNpxJlnaWVtIgorCisjOiByZmMzMzE1LmM6OTczIHJmYzMzMTUuYzoxMTUxIHJmYzMzMTUuYzoxMjI4Cittc2dpZCAibm8gYmluZGluZyBmb3VuZCIKK21zZ3N0ciAiYnJhayBwb3dpxIV6YW5pYSIKKworIzogcmZjMzMxNS5jOjEwMTEKK21zZ2lkICJkZXByZWNhdGVkIgorbXNnc3RyICJwcnplc3RhcnphxYJ5IgorCisjOiByZmMzMzE1LmM6MTAxNgorbXNnaWQgImFkZHJlc3MgaW52YWxpZCIKK21zZ3N0ciAibmllcG9wcmF3bnkgYWRyZXMiCisKKyM6IHJmYzMzMTUuYzoxMDYxCittc2dpZCAiY29uZmlybSBmYWlsZWQiCittc2dzdHIgImJyYWsgcG90d2llcmR6ZW5pYSIKKworIzogcmZjMzMxNS5jOjEwNzIKK21zZ2lkICJhbGwgYWRkcmVzc2VzIHN0aWxsIG9uIGxpbmsiCittc2dzdHIgIndzenlzdGtpZSBhZHJlc3kgY2nEhWdsZSB3IHXFvHljaXUiCisKKyM6IHJmYzMzMTUuYzoxMTYwCittc2dpZCAicmVsZWFzZSByZWNlaXZlZCIKK21zZ3N0ciAiYWRyZXMgem9zdGHFgiB6d29sbmlvbnkiCisKKyM6IHJmYzMzMTUuYzoyMDgwCittc2dpZCAiQ2Fubm90IG11bHRpY2FzdCB0byBESENQdjYgc2VydmVyIHdpdGhvdXQgY29ycmVjdCBpbnRlcmZhY2UiCittc2dzdHIgIk5pZSBtb2fEmSByb3plc8WCYcSHIGRvIHNlcndlcsOzdyBESENQdjYgbmllIG1hasSFYyBwcmF3aWTFgm93ZWdvIGludGVyZmVqc3UiCisKKyM6IGRoY3AtY29tbW9uLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIklnbm9yaW5nIGR1cGxpY2F0ZSBkaGNwLW9wdGlvbiAlZCIKK21zZ3N0ciAiUG9taWphbSBwb3d0w7Nyem9uxIUgZGhjcC1vcHRpb24gJWQiCisKKyM6IGRoY3AtY29tbW9uLmM6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IHRhZ3M6ICVzIgorbXNnc3RyICIldSBjZWNoeTogJXMiCisKKyM6IGRoY3AtY29tbW9uLmM6NDA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBtb3JlIHRoYW4gb25lIGFkZHJlc3MgaW4gaG9zdHNmaWxlLCB1c2luZyAlcyBmb3IgREhDUCIKK21zZ3N0ciAiZG8ga29tcHV0ZXJhIG8gbmF6d2llICVzIHBhc3VqZSB3acSZY2VqIG5pxbwgamVkZW4gYWRyZXMsIHcgb2Rwb3dpZWR6aSBESENQIHd5c3nFgmFtICVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICJkdXBsaWNhdGUgSVAgYWRkcmVzcyAlcyAoJXMpIGluIGRoY3AtY29uZmlnIGRpcmVjdGl2ZSIKK21zZ3N0ciAicG93dMOzcnplbmllIGFkcmVzdSBJUCAlcyAoJXMpIHcgb3BjamkgZGhjcC1jb25maWciCisKKyM6IGRoY3AtY29tbW9uLmM6NDk0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgU09fQklORFRPREVWSUNFIG9uIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAibmllIHVkYcWCbyBzacSZIHVzdGF3acSHIFNPX0JJTkRUT0RFVklDRSBnbmlhemRhIERIQ1A6ICVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjYxNQorIywgYy1mb3JtYXQKK21zZ2lkICJLbm93biBESENQIG9wdGlvbnM6XG4iCittc2dzdHIgIlpuYW5lIG9wY2plIERIQ1A6XG4iCisKKyM6IGRoY3AtY29tbW9uLmM6NjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIktub3duIERIQ1B2NiBvcHRpb25zOlxuIgorbXNnc3RyICJSb3pwb3puYXdhbmUgb3BjamUgREhDUHY2OlxuIgorCisjOiBkaGNwLWNvbW1vbi5jOjgyMworbXNnaWQgIiwgcHJlZml4IGRlcHJlY2F0ZWQiCittc2dzdHIgIiwgcHJ6ZXN0YXJ6YcWCeSBwcmVmaWtzIgorCisjOiBkaGNwLWNvbW1vbi5jOjgyNgorIywgYy1mb3JtYXQKK21zZ2lkICIsIGxlYXNlIHRpbWUgIgorbXNnc3RyICIsIGN6YXMgZHppZXLFvGF3eSAiCisKKyM6IGRoY3AtY29tbW9uLmM6ODY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHN0YXRlbGVzcyBvbiAlcyUuMHMlLjBzJXMiCittc2dzdHIgIiVzIGJlenN0YW5vd3kgbmEgJXMlLjBzJS4wcyVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjg3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgc3RhdGljIGxlYXNlcyBvbmx5IG9uICUuMHMlcyVzJS4wcyIKK21zZ3N0ciAiJXMsIHd5xYLEhWN6bmllIHN0YXR5Y3puZSBkemllcsW8YXd5IG5hICUuMHMlcyVzJS4wcyIKKworIzogZGhjcC1jb21tb24uYzo4NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHByb3h5IG9uIHN1Ym5ldCAlLjBzJXMlLjBzJS4wcyIKK21zZ3N0ciAiJXMsIHd5a3J5dG8gcG/Fm3JlZG5pa2EgbmEgcG9kc2llY2kgJS4wcyVzJS4wcyUuMHMiCisKKyM6IGRoY3AtY29tbW9uLmM6ODczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBJUCByYW5nZSAlcyAtLSAlcyVzJS4wcyIKK21zZ3N0ciAiJXMsIHpha3JlcyBJUCAlcyAtLSAlcyVzJS4wcyIKKworIzogZGhjcC1jb21tb24uYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUHY0LWRlcml2ZWQgSVB2NiBuYW1lcyBvbiAlcyVzIgorbXNnc3RyICJwb2Nob2R6xIVjZSB6IERIQ1B2NCBuYXp3eSBJUHY2IG5hICVzJXMiCisKKyM6IGRoY3AtY29tbW9uLmM6ODg5CisjLCBjLWZvcm1hdAorbXNnaWQgInJvdXRlciBhZHZlcnRpc2VtZW50IG9uICVzJXMiCittc2dzdHIgImFub25zb3dhbmllIHJ1dGVyYSBuYSAlcyVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlbGF5IGZyb20gJXMgdG8gJXMgdmlhICVzIgorbXNnc3RyICJwcnpla2F6eXdhbmllIERIQ1AgeiAlcyBkbyAlcyB6YSBwb21vY8SFICVzIgorCisjOiBkaGNwLWNvbW1vbi5jOjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlbGF5IGZyb20gJXMgdG8gJXMiCittc2dzdHIgInByemVrYXp5d2FuaWUgREhDUCB6ICVzIGRvICVzIgorCisjOiByYWR2LmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBJQ01QdjYgc29ja2V0OiAlcyIKK21zZ3N0ciAibmllIHVkYcWCbyBzacSZIHV0d29yennEhyBnbmlhemRhIGRsYSBJQ01QdjY6ICVzIgorCisjOiBhdXRoLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHpvbmUgdHJhbnNmZXIgcmVxdWVzdCBmcm9tICVzIgorbXNnc3RyICJpZ25vcnVqxJkgxbzEhWRhbmllIHRyYW5zZmVydSBzdHJlZnkgb2QgJXMiCisKKyM6IGlwc2V0LmM6OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmQga2VybmVsIHZlcnNpb246ICVzIgorbXNnc3RyICJuaWV6Z29kbmEgd2Vyc2phIGrEhWRyYTogJXMiCisKKyM6IGlwc2V0LmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgSVBzZXQgY29udHJvbCBzb2NrZXQ6ICVzIgorbXNnc3RyICJuaWUgcG93aW9kxYJvIHNpxJkgb3R3aWVyYW5pZSBnbmlhemRhIHN0ZXJ1asSFY2VnbyBJUHNldDogJXMiCisKKyM6IGJsb2NrZGF0YS5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkROU1NFQyBtZW1vcnkgaW4gdXNlICV1LCBtYXggJXUsIGFsbG9jYXRlZCAldSIKK21zZ3N0ciAiRE5TU0VDOiB6dcW8eWNpZSBwYW1pxJljaSAldSwgbWFrcy4gJXUsIHByenlkemllbG9uYSAldSIKKworIzogdGFibGVzLmM6NzYKK21zZ2lkICJlcnJvcjogZmlsbF9hZGRyIG1pc3N1c2VkIgorbXNnc3RyICJixYLEhWQ6IG5pZXBvcHJhd25pZSB1xbx5dHkgZmlsbF9hZGRyIgorCisjOiB0YWJsZXMuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFjY2VzcyBwZiBkZXZpY2VzOiAlcyIKK21zZ3N0ciAiYnJhayBkb3N0xJlwdSBkbyAvZGV2L3BmIChmaWx0cmEgcGFraWV0w7N3KTogJXMiCisKKyM6IHRhYmxlcy5jOjExOQorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBubyBvcGVuZWQgcGYgZGV2aWNlcyAlcyIKK21zZ3N0ciAidXdhZ2E6IGJyYWsgb3R3YXJ0eWNoIGZpbHRyw7N3IHBha2lldMOzdyAlcyIKKworIzogdGFibGVzLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yOiBjYW5ub3QgdXNlIHRhYmxlIG5hbWUgJXMiCittc2dzdHIgImLFgsSFZDogbmllIHBvdHJhZmnEmSB1xbx5xIcgbmF6d3kgdGFibGljeSAlcyIKKworIzogdGFibGVzLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yOiBjYW5ub3Qgc3RybGNweSB0YWJsZSBuYW1lICVzIgorbXNnc3RyICJixYLEhWQ6IG5pZSBwb3RyYWZpxJkgc3RybGNweSBuYXp3eSB0YWJsaWN5ICVzIgorCisjOiB0YWJsZXMuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogcGZyX2FkZF90YWJsZXM6ICVzKCVkKSIKK21zZ3N0ciAidXdhZ2E6IHBmcl9hZGRfdGFibGVzOiAlcyglZCkiCisKKyM6IHRhYmxlcy5jOjE0NworbXNnaWQgImluZm86IHRhYmxlIGNyZWF0ZWQiCittc2dzdHIgImluZm86IHRhYmxpY2EgdXR3b3J6b25hIgorCisjOiB0YWJsZXMuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogRElPQ1Ilc0FERFJTOiAlcyIKK21zZ3N0ciAidXdhZ2E6IERJT0NSJXNBRERSUzogJXMiCisKKyM6IHRhYmxlcy5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBhZGRyZXNzZXMgJXMiCittc2dzdHIgIiVkIGFkcmVzw7N3ICVzIgorCisjfiBtc2dpZCAiQWx3YXlzIHNlbmQgZnJlcXVlbnQgcm91dGVyLWFkdmVydGlzZW1lbnRzIgorI34gbXNnc3RyICJSb3pzecWCYW5pZSB3aWVsb2tyb3RuZSBhbm9uc8OzdyBydXRlcmEgKFJBKSIKKworI34gbXNnaWQgIm5vIGludGVyZmFjZSB3aXRoIGFkZHJlc3MgJXMiCisjfiBtc2dzdHIgImJyYWsgaW50ZXJmZWpzdSB6IGFkcmVzZW0gJXMiCisKKyN+IG1zZ2lkICJkdXBsaWNhdGUgSVAgYWRkcmVzcyAlcyBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUuIgorI34gbXNnc3RyICJwb3d0w7Nyem9ueSBhZHJlcyBJUCAoJXMpIHcgcGFyYW1ldHJ6ZSBkaGNwLWNvbmZpZyIKKworIywgZnV6enkKKyN+IG1zZ2lkICJTcGVjaWZ5IHBhdGggdG8gTHVhIHNjcmlwdCAobm8gZGVmYXVsdCkuIgorI34gbXNnc3RyICJPa3JlxZtsZW5pZSDFm2NpZcW8a2kgZG8gcGxpa3UgUElEIChkb215xZtsbmllOiAlcykuIgorCisjfiBtc2dpZCAib25seSBvbmUgZGhjcC1ob3N0c2ZpbGUgYWxsb3dlZCIKKyN+IG1zZ3N0ciAibW/FvG5hIHdza2F6YcSHIHR5bGtvIGplZGVuIHBsaWsgZGhjcC1ob3N0c2ZpbGUiCisKKyN+IG1zZ2lkICJvbmx5IG9uZSBkaGNwLW9wdHNmaWxlIGFsbG93ZWQiCisjfiBtc2dzdHIgIm1vxbxuYSB3c2themHEhyB0eWxrbyBqZWRlbiBwbGlrIGRoY3Atb3B0c2ZpbGUiCisKKyN+IG1zZ2lkICJmaWxlcyBuZXN0ZWQgdG9vIGRlZXAgaW4gJXMiCisjfiBtc2dzdHIgInpieXQgZHXFvGUgemFnxYLEmWJpZW5pZSBwbGlrw7N3IHcgJXMiCisKKyN+IG1zZ2lkICJUWFQgcmVjb3JkIHN0cmluZyB0b28gbG9uZyIKKyN+IG1zZ3N0ciAiemJ5dCBkxYJ1Z2kgcmVrb3JkIFRYVCIKKworI34gbXNnaWQgImZhaWxlZCB0byBzZXQgSVBWNiBvcHRpb25zIG9uIGxpc3RlbmluZyBzb2NrZXQ6ICVzIgorI34gbXNnc3RyICJixYLEhWQgdXN0YXdpYW5pYSBvcGNqaSBJUFY2IG5hIG5hc8WCdWNodWrEhWN5bSBnbmllxbpkemllOiAlcyIKKworI34gbXNnaWQgImZhaWxlZCB0byBiaW5kIGxpc3RlbmluZyBzb2NrZXQgZm9yICVzOiAlcyIKKyN+IG1zZ3N0ciAiYsWCxIVkIHByenkgcHJ6eXpuYXdhbml1IG5hend5IGduaWF6ZHUgJXM6ICVzIgpkaWZmIC0tZ2l0IGEvcG8vcHRfQlIucG8gYi9wby9wdF9CUi5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTFjZjZjCi0tLSAvZGV2L251bGwKKysrIGIvcG8vcHRfQlIucG8KQEAgLTAsMCArMSwyMDMyIEBACisjIFBvcnR1Z3Vlc2UgdHJhbnNsYXRpb25zIGZvciBkbnNtYXNxIHBhY2thZ2UuCisjIFRoaXMgZmlsZSBpcyBwdXQgaW4gdGhlIHB1YmxpYyBkb21haW4uCisjIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+LCAyMDA2LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZG5zbWFzcSAyLjI2XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA5LTA2LTE4IDEyOjI0KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA2LTAxLTE2IDIwOjQyKzAwMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+XG4iCisiTGFuZ3VhZ2UtVGVhbTogUG9ydHVndWVzZSA8bGRwLWJyQGJhemFyLmNvbmVjdGl2YS5jb20uYnI+XG4iCisiTGFuZ3VhZ2U6IHB0XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9QVNDSUlcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gPiAxKTtcbiIKKworIzogY2FjaGUuYzo1MDUKK21zZ2lkICJJbnRlcm5hbCBlcnJvciBpbiBjYWNoZS4iCittc2dzdHIgIiIKKworIzogY2FjaGUuYzo5MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgbmFtZXMgZnJvbSAlczogJXMiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzo5MzQgZGhjcC5jOjgyMAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgYWRkcmVzcyBhdCAlcyBsaW5lICVkIgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6OTg1IGRoY3AuYzo4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG5hbWUgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjk5MiBkaGNwLmM6OTExCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgJXMgLSAlZCBhZGRyZXNzZXMiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMTAwCittc2dpZCAiY2xlYXJlZCBjYWNoZSIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjExMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gSVB2NCBhZGRyZXNzIGZvdW5kIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjEyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBDTkFNRSwgbm90IGdpdmluZyBpdCB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjEyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGdpdmluZyBuYW1lICVzIHRvIHRoZSBESENQIGxlYXNlIG9mICVzIGJlY2F1c2UgdGhlIG5hbWUgZXhpc3RzIGluICVzIHdpdGggYWRkcmVzcyAlcyIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjEzNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidGltZSAlbHUiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMzY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhY2hlIHNpemUgJWQsICVkLyVkIGNhY2hlIGluc2VydGlvbnMgcmUtdXNlZCB1bmV4cGlyZWQgY2FjaGUgZW50cmllcy4iCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMzY5CisjLCBjLWZvcm1hdAorbXNnaWQgInF1ZXJpZXMgZm9yd2FyZGVkICV1LCBxdWVyaWVzIGFuc3dlcmVkIGxvY2FsbHkgJXUiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMzcyCisjLCBjLWZvcm1hdAorbXNnaWQgInF1ZXJpZXMgZm9yIGF1dGhvcml0YXRpdmUgem9uZXMgJXUiCittc2dzdHIgIiIKKworIzogY2FjaGUuYzoxMzk4CisjLCBjLWZvcm1hdAorbXNnaWQgInNlcnZlciAlcyMlZDogcXVlcmllcyBzZW50ICV1LCByZXRyaWVkIG9yIGZhaWxlZCAldSIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNlZWQgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yOiAlcyIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6MjA1Cittc2dpZCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6MjQzIG9wdGlvbi5jOjU3OQorbXNnaWQgImNvdWxkIG5vdCBnZXQgbWVtb3J5IgorbXNnc3RyICIiCisKKyM6IHV0aWwuYzoyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBwaXBlOiAlcyIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhbGxvY2F0ZSAlZCBieXRlcyIKK21zZ3N0ciAiIgorCisjOiB1dGlsLmM6NDI5CisjLCBjLWZvcm1hdAorbXNnaWQgImluZmluaXRlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMxOAorbXNnaWQgIlNwZWNpZnkgbG9jYWwgYWRkcmVzcyhlcykgdG8gbGlzdGVuIG9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMTkKK21zZ2lkICJSZXR1cm4gaXBhZGRyIGZvciBhbGwgaG9zdHMgaW4gc3BlY2lmaWVkIGRvbWFpbnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMyMAorbXNnaWQgIkZha2UgcmV2ZXJzZSBsb29rdXBzIGZvciBSRkMxOTE4IHByaXZhdGUgYWRkcmVzcyByYW5nZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMyMQorbXNnaWQgIlRyZWF0IGlwYWRkciBhcyBOWERPTUFJTiAoZGVmZWF0cyBWZXJpc2lnbiB3aWxkY2FyZCkuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMyMgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHRoZSBzaXplIG9mIHRoZSBjYWNoZSBpbiBlbnRyaWVzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMyMworIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGNvbmZpZ3VyYXRpb24gZmlsZSAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMjQKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kOiBydW4gaW4gZGVidWcgbW9kZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzI1Cittc2dpZCAiRG8gTk9UIGZvcndhcmQgcXVlcmllcyB3aXRoIG5vIGRvbWFpbiBwYXJ0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMjYKK21zZ2lkICJSZXR1cm4gc2VsZi1wb2ludGluZyBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzI3Cittc2dpZCAiRXhwYW5kIHNpbXBsZSBuYW1lcyBpbiAvZXRjL2hvc3RzIHdpdGggZG9tYWluLXN1ZmZpeC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzI4Cittc2dpZCAiRG9uJ3QgZm9yd2FyZCBzcHVyaW91cyBETlMgcmVxdWVzdHMgZnJvbSBXaW5kb3dzIGhvc3RzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMjkKK21zZ2lkICJFbmFibGUgREhDUCBpbiB0aGUgcmFuZ2UgZ2l2ZW4gd2l0aCBsZWFzZSBkdXJhdGlvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZSB0byB0aGlzIGdyb3VwIGFmdGVyIHN0YXJ0dXAgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzMxCittc2dpZCAiU2V0IGFkZHJlc3Mgb3IgaG9zdG5hbWUgZm9yIGEgc3BlY2lmaWVkIG1hY2hpbmUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMzMgorbXNnaWQgIlJlYWQgREhDUCBob3N0IHNwZWNzIGZyb20gZmlsZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzMzCittc2dpZCAiUmVhZCBESENQIG9wdGlvbiBzcGVjcyBmcm9tIGZpbGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMzNAorbXNnaWQgIkV2YWx1YXRlIGNvbmRpdGlvbmFsIHRhZyBleHByZXNzaW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG8gTk9UIGxvYWQgJXMgZmlsZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgYSBob3N0cyBmaWxlIHRvIGJlIHJlYWQgaW4gYWRkaXRpb24gdG8gJXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMzNworbXNnaWQgIlNwZWNpZnkgaW50ZXJmYWNlKHMpIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzM4Cittc2dpZCAiU3BlY2lmeSBpbnRlcmZhY2UocykgTk9UIHRvIGxpc3RlbiBvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzM5Cittc2dpZCAiTWFwIERIQ1AgdXNlciBjbGFzcyB0byB0YWcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM0MAorbXNnaWQgIk1hcCBSRkMzMDQ2IGNpcmN1aXQtaWQgdG8gdGFnLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDEKK21zZ2lkICJNYXAgUkZDMzA0NiByZW1vdGUtaWQgdG8gdGFnLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDIKK21zZ2lkICJNYXAgUkZDMzk5MyBzdWJzY3JpYmVyLWlkIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzQzCittc2dpZCAiRG9uJ3QgZG8gREhDUCBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDQKK21zZ2lkICJGb3JjZSBicm9hZGNhc3QgcmVwbGllcyBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDUKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kLCBkbyBOT1QgcnVuIGluIGRlYnVnIG1vZGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM0NgorbXNnaWQgIkFzc3VtZSB3ZSBhcmUgdGhlIG9ubHkgREhDUCBzZXJ2ZXIgb24gdGhlIGxvY2FsIG5ldHdvcmsuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHdoZXJlIHRvIHN0b3JlIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM0OAorbXNnaWQgIlJldHVybiBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzQ5Cittc2dpZCAiU3BlY2lmeSBhbiBNWCByZWNvcmQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1MAorbXNnaWQgIlNwZWNpZnkgQk9PVFAgb3B0aW9ucyB0byBESENQIHNlcnZlci4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvIE5PVCBwb2xsICVzIGZpbGUsIHJlbG9hZCBvbmx5IG9uIFNJR0hVUC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzUyCittc2dpZCAiRG8gTk9UIGNhY2hlIGZhaWxlZCBzZWFyY2ggcmVzdWx0cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSBuYW1lc2VydmVycyBzdHJpY3RseSBpbiB0aGUgb3JkZXIgZ2l2ZW4gaW4gJXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1NAorbXNnaWQgIlNwZWNpZnkgb3B0aW9ucyB0byBiZSBzZW50IHRvIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzU1Cittc2dpZCAiREhDUCBvcHRpb24gc2VudCBldmVuIGlmIHRoZSBjbGllbnQgZG9lcyBub3QgcmVxdWVzdCBpdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzU2Cittc2dpZCAiU3BlY2lmeSBwb3J0IHRvIGxpc3RlbiBmb3IgRE5TIHJlcXVlc3RzIG9uIChkZWZhdWx0cyB0byA1MykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIHN1cHBvcnRlZCBVRFAgcGFja2V0IHNpemUgZm9yIEVETlMuMCAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNTgKK21zZ2lkICJMb2cgRE5TIHF1ZXJpZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1OQorbXNnaWQgIkZvcmNlIHRoZSBvcmlnaW5hdGluZyBwb3J0IGZvciB1cHN0cmVhbSBETlMgcXVlcmllcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzYwCittc2dpZCAiRG8gTk9UIHJlYWQgcmVzb2x2LmNvbmYuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggdG8gcmVzb2x2LmNvbmYgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzYyCittc2dpZCAiU3BlY2lmeSBwYXRoIHRvIGZpbGUgd2l0aCBzZXJ2ZXI9IG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzYzCittc2dpZCAiU3BlY2lmeSBhZGRyZXNzKGVzKSBvZiB1cHN0cmVhbSBzZXJ2ZXJzIHdpdGggb3B0aW9uYWwgZG9tYWlucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzY0Cittc2dpZCAiU3BlY2lmeSBhZGRyZXNzIG9mIHVwc3RyZWFtIHNlcnZlcnMgZm9yIHJldmVyc2UgYWRkcmVzcyBxdWVyaWVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2NQorbXNnaWQgIk5ldmVyIGZvcndhcmQgcXVlcmllcyB0byBzcGVjaWZpZWQgZG9tYWlucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzY2Cittc2dpZCAiU3BlY2lmeSB0aGUgZG9tYWluIHRvIGJlIGFzc2lnbmVkIGluIERIQ1AgbGVhc2VzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNjcKK21zZ2lkICJTcGVjaWZ5IGRlZmF1bHQgdGFyZ2V0IGluIGFuIE1YIHJlY29yZC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzY4Cittc2dpZCAiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgcmVwbGllcyBmcm9tIC9ldGMvaG9zdHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2OQorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG5lZ2F0aXZlIGNhY2hpbmcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3MAorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG1heGltdW0gVFRMIHRvIHNlbmQgdG8gY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoYW5nZSB0byB0aGlzIHVzZXIgYWZ0ZXIgc3RhcnR1cC4gKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzcyCittc2dpZCAiTWFwIERIQ1AgdmVuZG9yIGNsYXNzIHRvIHRhZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzczCittc2dpZCAiRGlzcGxheSBkbnNtYXNxIHZlcnNpb24gYW5kIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzc0Cittc2dpZCAiVHJhbnNsYXRlIElQdjQgYWRkcmVzc2VzIGZyb20gdXBzdHJlYW0gc2VydmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzc1Cittc2dpZCAiU3BlY2lmeSBhIFNSViByZWNvcmQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3NgorbXNnaWQgIkRpc3BsYXkgdGhpcyBtZXNzYWdlLiBVc2UgLS1oZWxwIGRoY3AgZm9yIGtub3duIERIQ1Agb3B0aW9ucy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNwZWNpZnkgcGF0aCBvZiBQSUQgZmlsZSAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBtYXhpbXVtIG51bWJlciBvZiBESENQIGxlYXNlcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNzkKK21zZ2lkICJBbnN3ZXIgRE5TIHF1ZXJpZXMgYmFzZWQgb24gdGhlIGludGVyZmFjZSBhIHF1ZXJ5IHdhcyBzZW50IHRvLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODAKK21zZ2lkICJTcGVjaWZ5IFRYVCBETlMgcmVjb3JkLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODEKK21zZ2lkICJTcGVjaWZ5IFBUUiBETlMgcmVjb3JkLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODIKK21zZ2lkICJHaXZlIEROUyBuYW1lIHRvIElQdjQgYWRkcmVzcyBvZiBpbnRlcmZhY2UuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4MworbXNnaWQgIkJpbmQgb25seSB0byBpbnRlcmZhY2VzIGluIHVzZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlYWQgREhDUCBzdGF0aWMgaG9zdCBpbmZvcm1hdGlvbiBmcm9tICVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODUKK21zZ2lkICJFbmFibGUgdGhlIERCdXMgaW50ZXJmYWNlIGZvciBzZXR0aW5nIHVwc3RyZWFtIHNlcnZlcnMsIGV0Yy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg2Cittc2dpZCAiRG8gbm90IHByb3ZpZGUgREhDUCBvbiB0aGlzIGludGVyZmFjZSwgb25seSBwcm92aWRlIEROUy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg3Cittc2dpZCAiRW5hYmxlIGR5bmFtaWMgYWRkcmVzcyBhbGxvY2F0aW9uIGZvciBib290cC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg4Cittc2dpZCAiTWFwIE1BQyBhZGRyZXNzICh3aXRoIHdpbGRjYXJkcykgdG8gb3B0aW9uIHNldC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg5Cittc2dpZCAiVHJlYXQgREhDUCByZXF1ZXN0cyBvbiBhbGlhc2VzIGFzIGFycml2aW5nIGZyb20gaW50ZXJmYWNlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTAKK21zZ2lkICJEaXNhYmxlIElDTVAgZWNobyBhZGRyZXNzIGNoZWNraW5nIGluIHRoZSBESENQIHNlcnZlci4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzkxCittc2dpZCAiU2hlbGwgc2NyaXB0IHRvIHJ1biBvbiBESENQIGxlYXNlIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzkyCittc2dpZCAiTHVhIHNjcmlwdCB0byBydW4gb24gREhDUCBsZWFzZSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5MworbXNnaWQgIlJ1biBsZWFzZS1jaGFuZ2Ugc2NyaXB0cyBhcyB0aGlzIHVzZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5NAorbXNnaWQgIlJlYWQgY29uZmlndXJhdGlvbiBmcm9tIGFsbCB0aGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5NQorbXNnaWQgIkxvZyB0byB0aGlzIHN5c2xvZyBmYWNpbGl0eSBvciBmaWxlLiAoZGVmYXVsdHMgdG8gREFFTU9OKSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTYKK21zZ2lkICJEbyBub3QgdXNlIGxlYXNlZmlsZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzk3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRE5TIHF1ZXJpZXMuIChkZWZhdWx0cyB0byAlcykiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyIEROUyBjYWNoZSB3aGVuIHJlbG9hZGluZyAlcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzk5Cittc2dpZCAiSWdub3JlIGhvc3RuYW1lcyBwcm92aWRlZCBieSBESENQIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwMAorbXNnaWQgIkRvIE5PVCByZXVzZSBmaWxlbmFtZSBhbmQgc2VydmVyIGZpZWxkcyBmb3IgZXh0cmEgREhDUCBvcHRpb25zLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDEKK21zZ2lkICJFbmFibGUgaW50ZWdyYXRlZCByZWFkLW9ubHkgVEZUUCBzZXJ2ZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwMgorbXNnaWQgIkV4cG9ydCBmaWxlcyBieSBURlRQIG9ubHkgZnJvbSB0aGUgc3BlY2lmaWVkIHN1YnRyZWUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwMworbXNnaWQgIkFkZCBjbGllbnQgSVAgYWRkcmVzcyB0byB0ZnRwLXJvb3QuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwNAorbXNnaWQgIkFsbG93IGFjY2VzcyBvbmx5IHRvIGZpbGVzIG93bmVkIGJ5IHRoZSB1c2VyIHJ1bm5pbmcgZG5zbWFzcS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heGltdW0gbnVtYmVyIG9mIGNvbm5jdXJyZW50IFRGVFAgdHJhbnNmZXJzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwNgorbXNnaWQgIkRpc2FibGUgdGhlIFRGVFAgYmxvY2tzaXplIGV4dGVuc2lvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA3Cittc2dpZCAiQ29udmVydCBURlRQIGZpbGVuYW1lcyB0byBsb3dlcmNhc2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA4Cittc2dpZCAiRXBoZW1lcmFsIHBvcnQgcmFuZ2UgZm9yIHVzZSBieSBURlRQIHRyYW5zZmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA5Cittc2dpZCAiRXh0cmEgbG9nZ2luZyBmb3IgREhDUC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDEwCittc2dpZCAiRW5hYmxlIGFzeW5jLiBsb2dnaW5nOyBvcHRpb25hbGx5IHNldCBxdWV1ZSBsZW5ndGguIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxMQorbXNnaWQgIlN0b3AgRE5TIHJlYmluZGluZy4gRmlsdGVyIHByaXZhdGUgSVAgcmFuZ2VzIHdoZW4gcmVzb2x2aW5nLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTIKK21zZ2lkICJBbGxvdyByZWJpbmRpbmcgb2YgMTI3LjAuMC4wLzgsIGZvciBSQkwgc2VydmVycy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDEzCittc2dpZCAiSW5oaWJpdCBETlMtcmViaW5kIHByb3RlY3Rpb24gb24gdGhpcyBkb21haW4uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxNAorbXNnaWQgIkFsd2F5cyBwZXJmb3JtIEROUyBxdWVyaWVzIHRvIGFsbCBzZXJ2ZXJzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTUKK21zZ2lkICJTZXQgdGFnIGlmIGNsaWVudCBpbmNsdWRlcyBtYXRjaGluZyBvcHRpb24gaW4gcmVxdWVzdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE2Cittc2dpZCAiVXNlIGFsdGVybmF0aXZlIHBvcnRzIGZvciBESENQLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTcKK21zZ2lkICJTcGVjaWZ5IE5BUFRSIEROUyByZWNvcmQuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxOAorbXNnaWQgIlNwZWNpZnkgbG93ZXN0IHBvcnQgYXZhaWxhYmxlIGZvciBETlMgcXVlcnkgdHJhbnNtaXNzaW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTkKK21zZ2lkICJVc2Ugb25seSBmdWxseSBxdWFsaWZpZWQgZG9tYWluIG5hbWVzIGZvciBESENQIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyMAorbXNnaWQgIkdlbmVyYXRlIGhvc3RuYW1lcyBiYXNlZCBvbiBNQUMgYWRkcmVzcyBmb3IgbmFtZWxlc3MgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDIxCittc2dpZCAiVXNlIHRoZXNlIERIQ1AgcmVsYXlzIGFzIGZ1bGwgcHJveGllcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDIyCittc2dpZCAiUmVsYXkgREhDUCByZXF1ZXN0cyB0byBhIHJlbW90ZSBzZXJ2ZXIiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDIzCittc2dpZCAiU3BlY2lmeSBhbGlhcyBuYW1lIGZvciBMT0NBTCBETlMgbmFtZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDI0Cittc2dpZCAiUHJvbXB0IHRvIHNlbmQgdG8gUFhFIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyNQorbXNnaWQgIkJvb3Qgc2VydmljZSBmb3IgUFhFIG1lbnUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyNgorbXNnaWQgIkNoZWNrIGNvbmZpZ3VyYXRpb24gc3ludGF4LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjcKK21zZ2lkICJBZGQgcmVxdWVzdG9yJ3MgTUFDIGFkZHJlc3MgdG8gZm9yd2FyZGVkIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjgKK21zZ2lkICJBZGQgcmVxdWVzdG9yJ3MgSVAgc3VibmV0IHRvIGZvcndhcmRlZCBETlMgcXVlcmllcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDI5Cittc2dpZCAiUHJveHkgRE5TU0VDIHZhbGlkYXRpb24gcmVzdWx0cyBmcm9tIHVwc3RyZWFtIG5hbWVzZXJ2ZXJzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzAKK21zZ2lkICJBdHRlbXB0IHRvIGFsbG9jYXRlIHNlcXVlbnRpYWwgSVAgYWRkcmVzc2VzIHRvIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDMxCittc2dpZCAiQ29weSBjb25uZWN0aW9uLXRyYWNrIG1hcmsgZnJvbSBxdWVyaWVzIHRvIHVwc3RyZWFtIGNvbm5lY3Rpb25zLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzIKK21zZ2lkICJBbGxvdyBESENQIGNsaWVudHMgdG8gZG8gdGhlaXIgb3duIERETlMgdXBkYXRlcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDMzCittc2dpZCAiU2VuZCByb3V0ZXItYWR2ZXJ0aXNlbWVudHMgZm9yIGludGVyZmFjZXMgZG9pbmcgREhDUHY2IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzNAorbXNnaWQgIlNwZWNpZnkgRFVJRF9FTi10eXBlIERIQ1B2NiBzZXJ2ZXIgRFVJRCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzUKK21zZ2lkICJTcGVjaWZ5IGhvc3QgKEEvQUFBQSBhbmQgUFRSKSByZWNvcmRzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzNgorbXNnaWQgIlNwZWNpZnkgYXJiaXRyYXJ5IEROUyByZXNvdXJjZSByZWNvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM3Cittc2dpZCAiQmluZCB0byBpbnRlcmZhY2VzIGluIHVzZSAtIGNoZWNrIGZvciBuZXcgaW50ZXJmYWNlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzgKK21zZ2lkICJFeHBvcnQgbG9jYWwgbmFtZXMgdG8gZ2xvYmFsIEROUyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzkKK21zZ2lkICJEb21haW4gdG8gZXhwb3J0IHRvIGdsb2JhbCBETlMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQwCittc2dpZCAiU2V0IFRUTCBmb3IgYXV0aG9yaXRhdGl2ZSByZXBsaWVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0MQorbXNnaWQgIlNldCBhdXRob3JpdGl2ZSB6b25lIGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0MgorbXNnaWQgIlNlY29uZGFyeSBhdXRob3JpdGF0aXZlIG5hbWVzZXJ2ZXJzIGZvciBmb3J3YXJkIGRvbWFpbnMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQzCittc2dpZCAiUGVlcnMgd2hpY2ggYXJlIGFsbG93ZWQgdG8gZG8gem9uZSB0cmFuc2ZlciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDQKK21zZ2lkICJTcGVjaWZ5IGlwc2V0cyB0byB3aGljaCBtYXRjaGluZyBkb21haW5zIHNob3VsZCBiZSBhZGRlZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDUKK21zZ2lkICJTcGVjaWZ5IGEgZG9tYWluIGFuZCBhZGRyZXNzIHJhbmdlIGZvciBzeW50aGVzaXNlZCBuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDYKK21zZ2lkICJBY3RpdmF0ZSBETlNTRUMgdmFsaWRhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDcKK21zZ2lkICJTcGVjaWZ5IHRydXN0IGFuY2hvciBrZXkgZGlnZXN0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDgKK21zZ2lkICJEaXNhYmxlIHVwc3RyZWFtIGNoZWNraW5nIGZvciBETlNTRUMgZGVidWdnaW5nLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDkKK21zZ2lkICJFbnN1cmUgYW5zd2VycyB3aXRob3V0IEROU1NFQyBhcmUgaW4gdW5zaWduZWQgem9uZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1MAorbXNnaWQgIkRvbid0IGNoZWNrIEROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyB1bnRpbCBmaXJzdCBjYWNoZS1yZWxvYWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDUyCittc2dpZCAiU3BlY2lmeSBESENQdjYgcHJlZml4IGNsYXNzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1NAorbXNnaWQgIlNldCBwcmlvcml0eSwgcmVzZW5kLWludGVydmFsIGFuZCByb3V0ZXItbGlmZXRpbWUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU1Cittc2dpZCAiRG8gbm90IGxvZyByb3V0aW5lIERIQ1AuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1NgorbXNnaWQgIkRvIG5vdCBsb2cgcm91dGluZSBESENQdjYuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1NworbXNnaWQgIkRvIG5vdCBsb2cgUkEuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1OAorbXNnaWQgIkFjY2VwdCBxdWVyaWVzIG9ubHkgZnJvbSBkaXJlY3RseS1jb25uZWN0ZWQgbmV0d29ya3MiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDU5Cittc2dpZCAiRGV0ZWN0IGFuZCByZW1vdmUgRE5TIGZvcndhcmRpbmcgbG9vcHMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJVc2FnZTogZG5zbWFzcSBbb3B0aW9uc11cbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIHNob3J0IG9wdGlvbnMgb25seSBvbiB0aGUgY29tbWFuZCBsaW5lLlxuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJWYWxpZCBvcHRpb25zIGFyZTpcbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo3MjIgb3B0aW9uLmM6NzI2Cittc2dpZCAiYmFkIHBvcnQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NzUzIG9wdGlvbi5jOjc4NQorbXNnaWQgImludGVyZmFjZSBiaW5kaW5nIG5vdCBzdXBwb3J0ZWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NzYyIG9wdGlvbi5jOjM0OTQKK21zZ2lkICJiYWQgaW50ZXJmYWNlIG5hbWUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NzkyCittc2dpZCAiYmFkIGFkZHJlc3MiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6OTc0Cittc2dpZCAidW5zdXBwb3J0ZWQgZW5jYXBzdWxhdGlvbiBmb3IgSVB2NiBvcHRpb24iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6OTg4Cittc2dpZCAiYmFkIGRoY3Atb3B0aW9uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjEwNTYKK21zZ2lkICJiYWQgSVAgYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMDU5IG9wdGlvbi5jOjExOTcgb3B0aW9uLmM6MjgxMgorbXNnaWQgImJhZCBJUHY2IGFkZHJlc3MiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTIyNCBvcHRpb24uYzoxMzE4Cittc2dpZCAiYmFkIGRvbWFpbiBpbiBkaGNwLW9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxMzU2Cittc2dpZCAiZGhjcC1vcHRpb24gdG9vIGxvbmciCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTM2MworbXNnaWQgImlsbGVnYWwgZGhjcC1tYXRjaCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNDI1Cittc2dpZCAiaWxsZWdhbCByZXBlYXRlZCBmbGFnIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE0MzMKK21zZ2lkICJpbGxlZ2FsIHJlcGVhdGVkIGtleXdvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTQ5NSBvcHRpb24uYzo0MDkyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhY2Nlc3MgZGlyZWN0b3J5ICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNTQxIHRmdHAuYzo0OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGFjY2VzcyAlczogJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTU4OAorbXNnaWQgInNldHRpbmcgbG9nIGZhY2lsaXR5IGlzIG5vdCBwb3NzaWJsZSB1bmRlciBBbmRyb2lkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE1OTcKK21zZ2lkICJiYWQgbG9nIGZhY2lsaXR5IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE2NTAKK21zZ2lkICJiYWQgTVggcHJlZmVyZW5jZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNjU1Cittc2dpZCAiYmFkIE1YIG5hbWUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTY2OQorbXNnaWQgImJhZCBNWCB0YXJnZXQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTY4MQorbXNnaWQgImNhbm5vdCBydW4gc2NyaXB0cyB1bmRlciB1Q2xpbnV4IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE2ODMKK21zZ2lkICJyZWNvbXBpbGUgd2l0aCBIQVZFX1NDUklQVCBkZWZpbmVkIHRvIGVuYWJsZSBsZWFzZS1jaGFuZ2Ugc2NyaXB0cyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNjg3Cittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9MVUFTQ1JJUFQgZGVmaW5lZCB0byBlbmFibGUgTHVhIHNjcmlwdHMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTkyOCBvcHRpb24uYzoxOTY2IG9wdGlvbi5jOjIwMTUKK21zZ2lkICJiYWQgcHJlZml4IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjIyODkKK21zZ2lkICJyZWNvbXBpbGUgd2l0aCBIQVZFX0lQU0VUIGRlZmluZWQgdG8gZW5hYmxlIGlwc2V0IGRpcmVjdGl2ZXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjQ2OQorbXNnaWQgImJhZCBwb3J0IHJhbmdlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI0ODUKK21zZ2lkICJiYWQgYnJpZGdlLWludGVyZmFjZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTQ1Cittc2dpZCAib25seSBvbmUgdGFnIGFsbG93ZWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjU2NSBvcHRpb24uYzoyNTc3IG9wdGlvbi5jOjI2ODMgb3B0aW9uLmM6MjcyNAorbXNnaWQgImJhZCBkaGNwLXJhbmdlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI1OTIKK21zZ2lkICJpbmNvbnNpc3RlbnQgREhDUCByYW5nZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjUxCittc2dpZCAicHJlZml4IGxlbmd0aCBtdXN0IGJlIGV4YWN0bHkgNjQgZm9yIFJBIHN1Ym5ldHMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjY1MworbXNnaWQgInByZWZpeCBsZW5ndGggbXVzdCBiZSBleGFjdGx5IDY0IGZvciBzdWJuZXQgY29uc3RydWN0b3JzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2NTcKK21zZ2lkICJwcmVmaXggbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgNjQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjY2MAorbXNnaWQgImluY29uc2lzdGVudCBESENQdjYgcmFuZ2UiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjY3MQorbXNnaWQgInByZWZpeCBtdXN0IGJlIHplcm8gd2l0aCBcImNvbnN0cnVjdG9yOlwiIGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3ODIgb3B0aW9uLmM6MjgzMAorbXNnaWQgImJhZCBoZXggY29uc3RhbnQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjgwNAorbXNnaWQgImNhbm5vdCBtYXRjaCB0YWdzIGluIC0tZGhjcC1ob3N0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIGRoY3AtaG9zdCBJUCBhZGRyZXNzICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI5MTAKK21zZ2lkICJiYWQgREhDUCBob3N0IG5hbWUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mjk5MgorbXNnaWQgImJhZCB0YWctaWYiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzMxNiBvcHRpb24uYzozNzEwCittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozMzc4Cittc2dpZCAiYmFkIGRoY3AtcHJveHkgYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDA0Cittc2dpZCAiQmFkIGRoY3AtcmVsYXkiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzQzMAorbXNnaWQgImJhZCBSQS1wYXJhbXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzQzOQorbXNnaWQgImJhZCBEVUlEIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM0ODEKK21zZ2lkICJpbnZhbGlkIGFsaWFzIHJhbmdlIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1MzUKK21zZ2lkICJiYWQgQ05BTUUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzU0MAorbXNnaWQgImR1cGxpY2F0ZSBDTkFNRSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNTYwCittc2dpZCAiYmFkIFBUUiByZWNvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzU5MQorbXNnaWQgImJhZCBOQVBUUiByZWNvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzYyNQorbXNnaWQgImJhZCBSUiByZWNvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzY1NQorbXNnaWQgImJhZCBUWFQgcmVjb3JkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM2OTYKK21zZ2lkICJiYWQgU1JWIHJlY29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNzAzCittc2dpZCAiYmFkIFNSViB0YXJnZXQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzcxNworbXNnaWQgImludmFsaWQgcHJpb3JpdHkiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzcyNAorbXNnaWQgImludmFsaWQgd2VpZ2h0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3NDgKK21zZ2lkICJCYWQgaG9zdC1yZWNvcmQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzc2NQorbXNnaWQgIkJhZCBuYW1lIGluIGhvc3QtcmVjb3JkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4MjYKK21zZ2lkICJiYWQgdHJ1c3QgYW5jaG9yIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4NDAKK21zZ2lkICJiYWQgSEVYIGluIHRydXN0IGFuY2hvciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozODUwCittc2dpZCAidW5zdXBwb3J0ZWQgb3B0aW9uIChjaGVjayB0aGF0IGRuc21hc3Egd2FzIGNvbXBpbGVkIHdpdGggREhDUC9URlRQL0ROU1NFQy9EQnVzIHN1cHBvcnQpIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5MDkKK21zZ2lkICJtaXNzaW5nIFwiIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5NjYKK21zZ2lkICJiYWQgb3B0aW9uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5NjgKK21zZ2lkICJleHRyYW5lb3VzIHBhcmFtZXRlciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTcwCittc2dpZCAibWlzc2luZyBwYXJhbWV0ZXIiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzk3MgorbXNnaWQgImlsbGVnYWwgb3B0aW9uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5NzkKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiBhdCBsaW5lICVkIG9mICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwNDUgb3B0aW9uLmM6NDE2OCB0ZnRwLmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjI5IG9wdGlvbi5jOjQyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCAlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzMxCittc2dpZCAianVuayBmb3VuZCBpbiBjb21tYW5kIGxpbmUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIHZlcnNpb24gJXMgICVzXG4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ29tcGlsZSB0aW1lIG9wdGlvbnM6ICVzXG4iCisiXG4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS5cbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRuc21hc3EgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXRcbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzcwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiBvciAzLlxuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzODEKK21zZ2lkICJ0cnkgLS1oZWxwIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzODMKK21zZ2lkICJ0cnkgLXciCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM4NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29tbWFuZCBsaW5lIG9wdGlvbnM6ICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGdldCBob3N0LW5hbWU6ICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0NjIKK21zZ2lkICJvbmx5IG9uZSByZXNvbHYuY29uZiBmaWxlIGFsbG93ZWQgaW4gbm8tcG9sbCBtb2RlLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDcyCittc2dpZCAibXVzdCBoYXZlIGV4YWN0bHkgb25lIHJlc29sdi5jb25mIHRvIHJlYWQgZG9tYWluIGZyb20uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0NzUgbmV0d29yay5jOjE1MDYgZGhjcC5jOjc2OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAlczogJXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzZWFyY2ggZGlyZWN0aXZlIGZvdW5kIGluICVzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1MTMKK21zZ2lkICJ0aGVyZSBtdXN0IGJlIGEgZGVmYXVsdCBkb21haW4gd2hlbiAtLWRoY3AtZnFkbiBpcyBzZXQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDUyMgorbXNnaWQgInN5bnRheCBjaGVjayBPSyIKK21zZ3N0ciAiIgorCisjOiBmb3J3YXJkLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZW5kIHBhY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZm9yd2FyZC5jOjU3NAorbXNnaWQgImRpc2NhcmRpbmcgRE5TIHJlcGx5OiBzdWJuZXQgb3B0aW9uIG1pc21hdGNoIgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzo1OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibmFtZXNlcnZlciAlcyByZWZ1c2VkIHRvIGRvIGEgcmVjdXJzaXZlIHF1ZXJ5IgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzo2MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zc2libGUgRE5TLXJlYmluZCBhdHRhY2sgZGV0ZWN0ZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzoxMTMyIGZvcndhcmQuYzoxNjYzCittc2dpZCAiSWdub3JpbmcgcXVlcnkgZnJvbSBub24tbG9jYWwgbmV0d29yayIKK21zZ3N0ciAiIgorCisjOiBmb3J3YXJkLmM6MjEwMQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IEROUyBxdWVyaWVzIHJlYWNoZWQgKG1heDogJWQpIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzo3MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaXN0ZW5pbmcgc29ja2V0IGZvciAlczogJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjEwMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTE9VRCBXQVJOSU5HOiBsaXN0ZW5pbmcgb24gJXMgbWF5IGFjY2VwdCByZXF1ZXN0cyB2aWEgaW50ZXJmYWNlcyBvdGhlciB0aGFuICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxMDI4Cittc2dpZCAiTE9VRCBXQVJOSU5HOiB1c2UgLS1iaW5kLWR5bmFtaWMgcmF0aGVyIHRoYW4gLS1iaW5kLWludGVyZmFjZXMgdG8gYXZvaWQgRE5TIGFtcGxpZmljYXRpb24gYXR0YWNrcyB2aWEgdGhlc2UgaW50ZXJmYWNlKHMpIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IG5vIGFkZHJlc3NlcyBmb3VuZCBmb3IgaW50ZXJmYWNlICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxMDk1CisjLCBjLWZvcm1hdAorbXNnaWQgImludGVyZmFjZSAlcyBmYWlsZWQgdG8gam9pbiBESENQdjYgbXVsdGljYXN0IGdyb3VwOiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTI4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBzZXJ2ZXIgc29ja2V0IGZvciAlczogJXMiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGxvY2FsIGludGVyZmFjZSIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTQ1NQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyBuYW1lc2VydmVyICVzIC0gY2Fubm90IG1ha2UvYmluZCBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNDY4Cittc2dpZCAidW5xdWFsaWZpZWQiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE0NjgKK21zZ2lkICJuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTQ3MAorbXNnaWQgImRlZmF1bHQiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE0NzIKK21zZ2lkICJkb21haW4iCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbG9jYWwgYWRkcmVzc2VzIG9ubHkgZm9yICVzICVzIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNDc3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIHN0YW5kYXJkIG5hbWVzZXJ2ZXJzIGZvciAlcyAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBuYW1lc2VydmVyICVzIyVkIGZvciAlcyAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTQ4MworIywgYy1mb3JtYXQKK21zZ2lkICJOT1QgdXNpbmcgbmFtZXNlcnZlciAlcyMlZCAtIHF1ZXJ5IGxvb3AgZGV0ZWN0ZWQiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCh2aWEgJXMpIgorbXNnc3RyICIiCisKKyM6IG5ldHdvcmsuYzoxNDg4CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE1NAorbXNnaWQgIk5vIHRydXN0IGFuY2hvcnMgcHJvdmlkZWQgZm9yIEROU1NFQyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTU3Cittc2dpZCAiQ2Fubm90IHJlZHVjZSBjYWNoZSBzaXplIGZyb20gZGVmYXVsdCB3aGVuIEROU1NFQyBlbmFibGVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxNTkKK21zZ2lkICJETlNTRUMgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfRE5TU0VDIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTY1Cittc2dpZCAiVEZUUCBzZXJ2ZXIgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfVEZUUCBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE3MAorbXNnaWQgIkNhbm5vdCB1c2UgLS1jb25udHJhY2sgQU5EIC0tcXVlcnktcG9ydCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTczCittc2dpZCAiQ29ubnRyYWNrIHN1cHBvcnQgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfQ09OTlRSQUNLIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTc4Cittc2dpZCAiYXN5Y2hyb25vdXMgbG9nZ2luZyBpcyBub3QgYXZhaWxhYmxlIHVuZGVyIFNvbGFyaXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE4MworbXNnaWQgImFzeWNocm9ub3VzIGxvZ2dpbmcgaXMgbm90IGF2YWlsYWJsZSB1bmRlciBBbmRyb2lkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxODgKK21zZ2lkICJhdXRob3JpdGF0aXZlIEROUyBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9BVVRIIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTkzCittc2dpZCAiTG9vcCBkZXRlY3Rpb24gbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfTE9PUCBpbiBzcmMvY29uZmlnLmgiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjIwMQorbXNnaWQgInpvbmUgc2VyaWFsIG11c3QgYmUgY29uZmlndXJlZCBpbiAtLWF1dGgtc29hIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyMTkKK21zZ2lkICJkaGNwLXJhbmdlIGNvbnN0cnVjdG9yIG5vdCBhdmFpbGFibGUgb24gdGhpcyBwbGF0Zm9ybSIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MjYyCittc2dpZCAiY2Fubm90IHNldCAtLWJpbmQtaW50ZXJmYWNlcyBhbmQgLS1iaW5kLWR5bmFtaWMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluZCBsaXN0IG9mIGludGVyZmFjZXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbnRlcmZhY2UgJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjMzMCBkbnNtYXNxLmM6OTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRCdXMgZXJyb3I6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzozMzMKK21zZ2lkICJEQnVzIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0RCVVMgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzozNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB1c2VyIG9yIGdyb3VwOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NDE2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byBmaWxlc3lzdGVtIHJvb3Q6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo2NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnRlZCwgdmVyc2lvbiAlcyBETlMgZGlzYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjY1NQorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIGNhY2hlc2l6ZSAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NjU3CisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGUgZGlzYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21waWxlIHRpbWUgb3B0aW9uczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjY2NQorbXNnaWQgIkRCdXMgc3VwcG9ydCBlbmFibGVkOiBjb25uZWN0ZWQgdG8gc3lzdGVtIGJ1cyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NjY3Cittc2dpZCAiREJ1cyBzdXBwb3J0IGVuYWJsZWQ6IGJ1cyBjb25uZWN0aW9uIHBlbmRpbmciCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjY3MgorbXNnaWQgIkROUyBzZXJ2aWNlIGxpbWl0ZWQgdG8gbG9jYWwgc3VibmV0cyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6Njc3Cittc2dpZCAiRE5TU0VDIHZhbGlkYXRpb24gZW5hYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6Njc5Cittc2dpZCAiRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzIG5vdCBjaGVja2VkIHVudGlsIGZpcnN0IGNhY2hlIHJlbG9hZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6Njg0CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGZhaWxlZCB0byBjaGFuZ2Ugb3duZXIgb2YgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo2ODgKK21zZ2lkICJzZXR0aW5nIC0tYmluZC1pbnRlcmZhY2VzIG9wdGlvbiBiZWNhdXNlIG9mIE9TIGxpbWl0YXRpb25zIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogaW50ZXJmYWNlICVzIGRvZXMgbm90IGN1cnJlbnRseSBleGlzdCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzAzCittc2dpZCAid2FybmluZzogaWdub3JpbmcgcmVzb2x2LWZpbGUgZmxhZyBiZWNhdXNlIG5vLXJlc29sdiBpcyBzZXQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjcwNgorbXNnaWQgIndhcm5pbmc6IG5vIHVwc3RyZWFtIHNlcnZlcnMgY29uZmlndXJlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzEwCisjLCBjLWZvcm1hdAorbXNnaWQgImFzeW5jaHJvbm91cyBsb2dnaW5nIGVuYWJsZWQsIHF1ZXVlIGxpbWl0IGlzICVkIG1lc3NhZ2VzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3MzEKK21zZ2lkICJJUHY2IHJvdXRlciBhZHZlcnRpc2VtZW50IGVuYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQLCBzb2NrZXRzIGJvdW5kIGV4Y2x1c2l2ZWx5IHRvIGludGVyZmFjZSAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzUzCittc2dpZCAicm9vdCBpcyAiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc1MworbXNnaWQgImVuYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc1NQorbXNnaWQgInNlY3VyZSBtb2RlIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVzdHJpY3RpbmcgbWF4aW11bSBzaW11bHRhbmVvdXMgVEZUUCB0cmFuc2ZlcnMgdG8gJWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjk1NgorbXNnaWQgImNvbm5lY3RlZCB0byBzeXN0ZW0gREJ1cyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTEwNgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZm9yayBpbnRvIGJhY2tncm91bmQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMTA5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgaGVscGVyOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTExMgorIywgYy1mb3JtYXQKK21zZ2lkICJzZXR0aW5nIGNhcGFiaWxpdGllcyBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMTE1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjaGFuZ2UgdXNlci1pZCB0byAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjExMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSBncm91cC1pZCB0byAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjExMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gcGlkZmlsZSAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjExMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gbG9nICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTEyNworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gbG9hZCBMdWEgc2NyaXB0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJURlRQIGRpcmVjdG9yeSAlcyBpbmFjY2Vzc2libGU6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMTUxCittc2dpZCAibm93IGNoZWNraW5nIEROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTIxOAorIywgYy1mb3JtYXQKK21zZ2lkICJzY3JpcHQgcHJvY2VzcyBraWxsZWQgYnkgc2lnbmFsICVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMjIyCisjLCBjLWZvcm1hdAorbXNnaWQgInNjcmlwdCBwcm9jZXNzIGV4aXRlZCB3aXRoIHN0YXR1cyAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlY3V0ZSAlczogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjEyODEKK21zZ2lkICJleGl0aW5nIG9uIHJlY2VpcHQgb2YgU0lHVEVSTSIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWNjZXNzICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTMzOQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNlcnZlcnMgZm91bmQgaW4gJXMsIHdpbGwgcmV0cnkiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IG9wdGlvbnMgb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX1JFVVNFe0FERFJ8UE9SVH0gb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGJpbmQgREhDUCBzZXJ2ZXIgc29ja2V0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgSUNNUCByYXcgc29ja2V0OiAlcy4iCittc2dzdHIgIiIKKworIzogZGhjcC5jOjIzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIGludGVyZmFjZSAlcyBpbiBicmlkZ2UtaW50ZXJmYWNlIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzoyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCBwYWNrZXQgcmVjZWl2ZWQgb24gJXMgd2hpY2ggaGFzIG5vIGFkZHJlc3MiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJBUlAtY2FjaGUgaW5qZWN0aW9uIGZhaWxlZDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjUwNgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJhbmdlICVzIC0tICVzIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggbmV0bWFzayAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBsaW5lIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogZGhjcC5jOjg1MAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyAlcyBsaW5lICVkLCBkdXBsaWNhdGUgbmFtZSBvciBJUCBhZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IGRoY3AuYzo5OTQgcmZjMzMxNS5jOjIwODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByZWxheSAlcyAtPiAlcyIKK21zZ3N0ciAiIgorCisjOiBsZWFzZS5jOjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIG9yIGNyZWF0ZSBsZWFzZSBmaWxlICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBsZWFzZS5jOjEzNAorbXNnaWQgInRvbyBtYW55IHN0b3JlZCBsZWFzZXMiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzoxNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJ1biBsZWFzZS1pbml0IHNjcmlwdCAlczogJXMiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAibGVhc2UtaW5pdCBzY3JpcHQgcmV0dXJuZWQgZXhpdCBjb2RlICVzIgorbXNnc3RyICIiCisKKyM6IGxlYXNlLmM6MzQyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSAlczogJXMgKHJldHJ5IGluICV1cykiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzo5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWdub3JpbmcgZG9tYWluICVzIGZvciBESENQIGhvc3QgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQIHJlcXVlc3QgJXMgJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjM0MworbXNnaWQgIndpdGggc3VibmV0IHNlbGVjdG9yIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzozNDMKK21zZ2lkICJ2aWEiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjM1NQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBhdmFpbGFibGUgREhDUCBzdWJuZXQ6ICVzLyVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzozNTggcmZjMzMxNS5jOjMwMAorIywgYy1mb3JtYXQKK21zZ2lkICIldSBhdmFpbGFibGUgREhDUCByYW5nZTogJXMgLS0gJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSB2ZW5kb3IgY2xhc3M6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgdXNlciBjbGFzczogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjQ5OAorbXNnaWQgImRpc2FibGVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo1MzkgcmZjMjEzMS5jOjk2NyByZmMyMTMxLmM6MTM4NSByZmMzMzE1LmM6NjAyIHJmYzMzMTUuYzo4MjMKKyM6IHJmYzMzMTUuYzoxMDk1Cittc2dpZCAiaWdub3JlZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NTU0IHJmYzIxMzEuYzoxMjA1IHJmYzMzMTUuYzo4NzMKK21zZ2lkICJhZGRyZXNzIGluIHVzZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NTY4IHJmYzIxMzEuYzoxMDIxCittc2dpZCAibm8gYWRkcmVzcyBhdmFpbGFibGUiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjU3NSByZmMyMTMxLmM6MTE2OAorbXNnaWQgIndyb25nIG5ldHdvcmsiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjU5MAorbXNnaWQgIm5vIGFkZHJlc3MgY29uZmlndXJlZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NTk2IHJmYzIxMzEuYzoxMjE4Cittc2dpZCAibm8gbGVhc2VzIGxlZnQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjY5MSByZmMzMzE1LmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGNsaWVudCBwcm92aWRlcyBuYW1lOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6Nzk2Cittc2dpZCAiUFhFIEJJUyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo5MzUgcmZjMzMxNS5jOjExODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlzYWJsaW5nIERIQ1Agc3RhdGljIGFkZHJlc3MgJXMgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo5NTYKK21zZ2lkICJ1bmtub3duIGxlYXNlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzo5OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IGlzIGxlYXNlZCB0byAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTAwMAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgaXMgaW4gdXNlIGJ5IHRoZSBzZXJ2ZXIgb3IgcmVsYXkiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IHdhcyBwcmV2aW91c2x5IGRlY2xpbmVkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMDE5IHJmYzIxMzEuYzoxMjExCittc2dpZCAibm8gdW5pcXVlLWlkIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMTA2Cittc2dpZCAid3Jvbmcgc2VydmVyLUlEIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMTI1Cittc2dpZCAid3JvbmcgYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTE0MyByZmMzMzE1LmM6OTY5Cittc2dpZCAibGVhc2Ugbm90IGZvdW5kIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMTc2Cittc2dpZCAiYWRkcmVzcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMTg3Cittc2dpZCAic3RhdGljIGxlYXNlIGF2YWlsYWJsZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTE5MQorbXNnaWQgImFkZHJlc3MgcmVzZXJ2ZWQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjExOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWJhbmRvbmluZyBsZWFzZSB0byAlcyBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTcxMgorIywgYy1mb3JtYXQKK21zZ2lkICIldSBib290ZmlsZSBuYW1lOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTcyMQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBzZXJ2ZXIgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE3MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgbmV4dCBzZXJ2ZXI6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxNzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJyb2FkY2FzdCByZXNwb25zZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTc5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc2VuZCBESENQL0JPT1RQIG9wdGlvbiAlZDogbm8gc3BhY2UgbGVmdCBpbiBwYWNrZXQiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjIwMzYKK21zZ2lkICJQWEUgbWVudSB0b28gbGFyZ2UiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjIxNzMgcmZjMzMxNS5jOjE0NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgcmVxdWVzdGVkIG9wdGlvbnM6ICVzIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoyNDUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzZW5kIFJGQzM5MjUgb3B0aW9uOiB0b28gbWFueSBvcHRpb25zIGZvciBlbnRlcnByaXNlIG51bWJlciAlZCIKK21zZ3N0ciAiIgorCisjOiBuZXRsaW5rLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBuZXRsaW5rIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogbmV0bGluay5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJuZXRsaW5rIHJldHVybnMgZXJyb3I6ICVzIgorbXNnc3RyICIiCisKKyM6IGRidXMuYzoxNzEKK21zZ2lkICJhdHRlbXB0IHRvIHNldCBhbiBJUHY2IHNlcnZlciBhZGRyZXNzIHZpYSBEQnVzIC0gbm8gSVB2NiBzdXBwb3J0IgorbXNnc3RyICIiCisKKyM6IGRidXMuYzo1MDAKK21zZ2lkICJzZXR0aW5nIHVwc3RyZWFtIHNlcnZlcnMgZnJvbSBEQnVzIgorbXNnc3RyICIiCisKKyM6IGRidXMuYzo1NDcKK21zZ2lkICJjb3VsZCBub3QgcmVnaXN0ZXIgYSBEQnVzIG1lc3NhZ2UgaGFuZGxlciIKK21zZ3N0ciAiIgorCisjOiBicGYuYzoyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQIEJQRiBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGJwZi5jOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlcXVlc3QgZm9yIHVuc3VwcG9ydGVkIGhhcmR3YXJlIHR5cGUgKCVkKSByZWNlaXZlZCBvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBicGYuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBQRl9ST1VURSBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGJwZi5jOjM5NworbXNnaWQgIlVua25vd24gcHJvdG9jb2wgdmVyc2lvbiBmcm9tIHJvdXRlIHNvY2tldCIKK21zZ3N0ciAiIgorCisjOiBoZWxwZXIuYzoxNTMKK21zZ2lkICJsZWFzZSgpIGZ1bmN0aW9uIG1pc3NpbmcgaW4gTHVhIHNjcmlwdCIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6MzA5Cittc2dpZCAidW5hYmxlIHRvIGdldCBmcmVlIHBvcnQgZm9yIFRGVFAiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjMyNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCByZXF1ZXN0IGZyb20gJXMiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJmaWxlICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yICVkICVzIHJlY2VpdmVkIGZyb20gJXMiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgc2VuZGluZyAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiB0ZnRwLmM6NTkwCisjLCBjLWZvcm1hdAorbXNnaWQgInNlbnQgJXMgdG8gJXMiCittc2dzdHIgIiIKKworIzogbG9nLmM6MTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJmbG93OiAlZCBsb2cgZW50cmllcyBsb3N0IgorbXNnc3RyICIiCisKKyM6IGxvZy5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJsb2cgZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBsb2cuYzo0NzIKK21zZ2lkICJGQUlMRUQgdG8gc3RhcnQgdXAiCittc2dzdHIgIiIKKworIzogY29ubnRyYWNrLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ubnRyYWNrIGNvbm5lY3Rpb24gbWFyayByZXRyaWV2YWwgZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwNi5jOjU5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUHY2IHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcDYuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX1JFVVNFe0FERFJ8UE9SVH0gb24gREhDUHY2IHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogZGhjcDYuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBESENQdjYgc2VydmVyIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICJubyBhZGRyZXNzIHJhbmdlIGF2YWlsYWJsZSBmb3IgREhDUHY2IHJlcXVlc3QgZnJvbSByZWxheSBhdCAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQdjYgcmVxdWVzdCB2aWEgJXMiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjI5NworIywgYy1mb3JtYXQKK21zZ2lkICIldSBhdmFpbGFibGUgREhDUHY2IHN1Ym5ldDogJXMvJWQiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjM3OQorIywgYy1mb3JtYXQKK21zZ2lkICIldSB2ZW5kb3IgY2xhc3M6ICV1IgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzo0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgY2xpZW50IE1BQyBhZGRyZXNzOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6NjU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gcHJlZml4LWNsYXNzICVkIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzo3OTEgcmZjMzMxNS5jOjkxMworbXNnaWQgInN1Y2Nlc3MiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjgwNiByZmMzMzE1LmM6ODA4IHJmYzMzMTUuYzo5MjEgcmZjMzMxNS5jOjkyMworbXNnaWQgIm5vIGFkZHJlc3NlcyBhdmFpbGFibGUiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjg2NQorbXNnaWQgImFkZHJlc3MgdW5hdmFpbGFibGUiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjkwMAorbXNnaWQgIm5vdCBvbiBsaW5rIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzo5NzMgcmZjMzMxNS5jOjExNTEgcmZjMzMxNS5jOjEyMjgKK21zZ2lkICJubyBiaW5kaW5nIGZvdW5kIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzoxMDExCittc2dpZCAiZGVwcmVjYXRlZCIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6MTAxNgorbXNnaWQgImFkZHJlc3MgaW52YWxpZCIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6MTA2MQorbXNnaWQgImNvbmZpcm0gZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzoxMDcyCittc2dpZCAiYWxsIGFkZHJlc3NlcyBzdGlsbCBvbiBsaW5rIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzoxMTYwCittc2dpZCAicmVsZWFzZSByZWNlaXZlZCIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6MjA4MAorbXNnaWQgIkNhbm5vdCBtdWx0aWNhc3QgdG8gREhDUHY2IHNlcnZlciB3aXRob3V0IGNvcnJlY3QgaW50ZXJmYWNlIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIklnbm9yaW5nIGR1cGxpY2F0ZSBkaGNwLW9wdGlvbiAlZCIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICIldSB0YWdzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjQwNworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgbW9yZSB0aGFuIG9uZSBhZGRyZXNzIGluIGhvc3RzZmlsZSwgdXNpbmcgJXMgZm9yIERIQ1AiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo0MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgKCVzKSBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHNldCBTT19CSU5EVE9ERVZJQ0Ugb24gREhDUCBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6NjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIktub3duIERIQ1Agb3B0aW9uczpcbiIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJLbm93biBESENQdjYgb3B0aW9uczpcbiIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjgyMworbXNnaWQgIiwgcHJlZml4IGRlcHJlY2F0ZWQiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBsZWFzZSB0aW1lICIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjg2OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdGF0ZWxlc3Mgb24gJXMlLjBzJS4wcyVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBzdGF0aWMgbGVhc2VzIG9ubHkgb24gJS4wcyVzJXMlLjBzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBwcm94eSBvbiBzdWJuZXQgJS4wcyVzJS4wcyUuMHMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIElQIHJhbmdlICVzIC0tICVzJXMlLjBzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1B2NC1kZXJpdmVkIElQdjYgbmFtZXMgb24gJXMlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjg4OQorIywgYy1mb3JtYXQKK21zZ2lkICJyb3V0ZXIgYWR2ZXJ0aXNlbWVudCBvbiAlcyVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVsYXkgZnJvbSAlcyB0byAlcyB2aWEgJXMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByZWxheSBmcm9tICVzIHRvICVzIgorbXNnc3RyICIiCisKKyM6IHJhZHYuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIElDTVB2NiBzb2NrZXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGF1dGguYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3Jpbmcgem9uZSB0cmFuc2ZlciByZXF1ZXN0IGZyb20gJXMiCittc2dzdHIgIiIKKworIzogaXBzZXQuYzo5NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluZCBrZXJuZWwgdmVyc2lvbjogJXMiCittc2dzdHIgIiIKKworIzogaXBzZXQuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBJUHNldCBjb250cm9sIHNvY2tldDogJXMiCittc2dzdHIgIiIKKworIzogYmxvY2tkYXRhLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRE5TU0VDIG1lbW9yeSBpbiB1c2UgJXUsIG1heCAldSwgYWxsb2NhdGVkICV1IgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjc2Cittc2dpZCAiZXJyb3I6IGZpbGxfYWRkciBtaXNzdXNlZCIKK21zZ3N0ciAiIgorCisjOiB0YWJsZXMuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFjY2VzcyBwZiBkZXZpY2VzOiAlcyIKK21zZ3N0ciAiIgorCisjOiB0YWJsZXMuYzoxMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogbm8gb3BlbmVkIHBmIGRldmljZXMgJXMiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yOiBjYW5ub3QgdXNlIHRhYmxlIG5hbWUgJXMiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yOiBjYW5ub3Qgc3RybGNweSB0YWJsZSBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBwZnJfYWRkX3RhYmxlczogJXMoJWQpIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjE0NworbXNnaWQgImluZm86IHRhYmxlIGNyZWF0ZWQiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IERJT0NSJXNBRERSUzogJXMiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGFkZHJlc3NlcyAlcyIKK21zZ3N0ciAiIgpkaWZmIC0tZ2l0IGEvcG8vcm8ucG8gYi9wby9yby5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODg3ZmNiCi0tLSAvZGV2L251bGwKKysrIGIvcG8vcm8ucG8KQEAgLTAsMCArMSwyMTU5IEBACisjIFJvbWFuaWFuIHRyYW5zbGF0aW9ucyBmb3IgZG5zbWFzcSBwYWNrYWdlLgorIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgorIyBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPiwgMjAwNS4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGRuc21hc3EgMi4yNFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOS0wNi0xOCAxMjoyNCswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwNS0xMS0yMiAxNjo0NiswMDAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPlxuIgorIkxhbmd1YWdlLVRlYW06IFJvbWFuaWFuIDx0cmFuc2xhdGlvbi10ZWFtLXJvQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKKyJMYW5ndWFnZTogcm9cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogY2FjaGUuYzo1MDUKK21zZ2lkICJJbnRlcm5hbCBlcnJvciBpbiBjYWNoZS4iCittc2dzdHIgIiIKKworIyBmb3IgY29tcGF0aWJpbGl0eSBwdXJwb3NlcyB0aGUgbGV0dGVycyDDoiwgxIMsIMWfLCDFoyBhbmQgw64gY2FuIGJlIHdyaXR0ZW4gYXMgdGhlaXIgbG9vay1hbGlrZSBjb3JyZXNwb25kZW50LgorIzogY2FjaGUuYzo5MDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBsb2FkIG5hbWVzIGZyb20gJXM6ICVzIgorbXNnc3RyICLDrm5jxINyY2FyZWEgbnVtZWxvciBkaW4gJXM6ICVzIGEgZcWfdWF0IgorCisjOiBjYWNoZS5jOjkzNCBkaGNwLmM6ODIwCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBhZGRyZXNzIGF0ICVzIGxpbmUgJWQiCittc2dzdHIgImFkcmVzxIMgZ3JlxZ9pdMSDIMOubiAlcywgbGluaWEgJWQiCisKKyM6IGNhY2hlLmM6OTg1IGRoY3AuYzo4MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG5hbWUgYXQgJXMgbGluZSAlZCIKK21zZ3N0ciAibnVtZSBncmXFn2l0IMOubiAlcyBsaW5pYSAlZCIKKworIzogY2FjaGUuYzo5OTIgZGhjcC5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkICVzIC0gJWQgYWRkcmVzc2VzIgorbXNnc3RyICJjaXRlc2MgJXMgLSAlZCBhZHJlc2UiCisKKyM6IGNhY2hlLmM6MTEwMAorbXNnaWQgImNsZWFyZWQgY2FjaGUiCittc2dzdHIgIm1lbW9yaWEgdGVtcG9yYXLEgyBhIGZvc3QgxZ90ZWFyc8SDIgorCisjOiBjYWNoZS5jOjExMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gSVB2NCBhZGRyZXNzIGZvdW5kIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjEyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBDTkFNRSwgbm90IGdpdmluZyBpdCB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjEyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGdpdmluZyBuYW1lICVzIHRvIHRoZSBESENQIGxlYXNlIG9mICVzIGJlY2F1c2UgdGhlIG5hbWUgZXhpc3RzIGluICVzIHdpdGggYWRkcmVzcyAlcyIKK21zZ3N0ciAibnUgcG90IGRhIG51bWVsZSAlcyDDrm1wcnVtdXR1bHVpIGRlIGFkcmVzxIMgREhDUCBhIGx1aSAlcyBkZW9hcmVjZSBudW1lbGVleGlzdMSDIMOubiAlcyBjdSBhZHJlc2EgJXMiCisKKyM6IGNhY2hlLmM6MTM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJ0aW1lICVsdSIKK21zZ3N0ciAiIgorCisjOiBjYWNoZS5jOjEzNjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhY2hlIHNpemUgJWQsICVkLyVkIGNhY2hlIGluc2VydGlvbnMgcmUtdXNlZCB1bmV4cGlyZWQgY2FjaGUgZW50cmllcy4iCittc2dzdHIgImNhbnRpdGF0ZSBkZSBtZW1vcmllIHRlbXBvcmFyxIMgJWQsICVkLyVkIHN0b2PEg3JpIHRlbXBvcmFyZSBhdXJldXRpbGl6YXQgbG9jYcWjaWkgbmVleHBpcmF0ZS4iCisKKyM6IGNhY2hlLmM6MTM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJxdWVyaWVzIGZvcndhcmRlZCAldSwgcXVlcmllcyBhbnN3ZXJlZCBsb2NhbGx5ICV1IgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTM3MgorIywgYy1mb3JtYXQKK21zZ2lkICJxdWVyaWVzIGZvciBhdXRob3JpdGF0aXZlIHpvbmVzICV1IgorbXNnc3RyICIiCisKKyM6IGNhY2hlLmM6MTM5OAorIywgYy1mb3JtYXQKK21zZ2lkICJzZXJ2ZXIgJXMjJWQ6IHF1ZXJpZXMgc2VudCAldSwgcmV0cmllZCBvciBmYWlsZWQgJXUiCittc2dzdHIgIiIKKworIzogdXRpbC5jOjQ1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2VlZCB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3I6ICVzIgorbXNnc3RyICJhc2N1bHRhcmVhIHBlIHNvY2tldCBhIGXFn3VhdDogJXMiCisKKyM6IHV0aWwuYzoyMDUKKyMsIGZ1enp5Cittc2dpZCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSIKK21zZ3N0ciAibnUgcG90IMOubmPEg3JjYSAlZCBieXRlcyIKKworIzogdXRpbC5jOjI0MyBvcHRpb24uYzo1NzkKK21zZ2lkICJjb3VsZCBub3QgZ2V0IG1lbW9yeSIKK21zZ3N0ciAibnUgYW0gcHV0dXQgYWxvY2EgbWVtb3JpZSIKKworIzogdXRpbC5jOjI1MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBwaXBlOiAlcyIKK21zZ3N0ciAibnUgcG90IGNpdGkgJXM6ICVzIgorCisjOiB1dGlsLmM6MjYxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYWxsb2NhdGUgJWQgYnl0ZXMiCittc2dzdHIgIm51IHBvdCDDrm5jxINyY2EgJWQgYnl0ZXMiCisKKyM6IHV0aWwuYzo0MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5maW5pdGUiCittc2dzdHIgImluZmluaXQiCisKKyM6IG9wdGlvbi5jOjMxOAorbXNnaWQgIlNwZWNpZnkgbG9jYWwgYWRkcmVzcyhlcykgdG8gbGlzdGVuIG9uLiIKK21zZ3N0ciAiU3BlY2lmaWNhxaNpIGFkcmVzZWxlIGxvY2FsZSBkZXNlcnZpdGUuIgorCisjOiBvcHRpb24uYzozMTkKK21zZ2lkICJSZXR1cm4gaXBhZGRyIGZvciBhbGwgaG9zdHMgaW4gc3BlY2lmaWVkIGRvbWFpbnMuIgorbXNnc3RyICJBZmnFn2VhesSDIGFkcmVzZWxlIElQIGFsZSBtYcWfaW5pbG9yIMOubiBkb21lbml1bCBkYXQuIgorCisjOiBvcHRpb24uYzozMjAKK21zZ2lkICJGYWtlIHJldmVyc2UgbG9va3VwcyBmb3IgUkZDMTkxOCBwcml2YXRlIGFkZHJlc3MgcmFuZ2VzLiIKK21zZ3N0ciAiU2ltdWxlYXrEgyBjxIN1dMSDcmkgZHVwxIMgYWRyZXPEgyBwZW50cnUgZG9tZW5paSBkZSBhZHJlc8SDIHByaXZhdGUgKFJGQzE5MTgpLiIKKworIzogb3B0aW9uLmM6MzIxCittc2dpZCAiVHJlYXQgaXBhZGRyIGFzIE5YRE9NQUlOIChkZWZlYXRzIFZlcmlzaWduIHdpbGRjYXJkKS4iCittc2dzdHIgIkludGVycHJldGVhesSDIGFkcmVzYSBJUCBjYSBOWERPTUFJTiAow65tcG90cml2YSBtYW5pcHVsxINyaWxvciBWZXJpc2lnbikiCisKKyM6IG9wdGlvbi5jOjMyMgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHRoZSBzaXplIG9mIHRoZSBjYWNoZSBpbiBlbnRyaWVzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTcGVjaWZpY8SDIG3Eg3JpbWVhIMOubnJlZ2lzdHLEg3JpbG9yIHRlbXBvcmFyZSAoaW1wbGljaXQgZSAlcykuIgorCisjOiBvcHRpb24uYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBjb25maWd1cmF0aW9uIGZpbGUgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNwZWNpZmljxIMgZmnFn2llciBkZSBjb25maWd1cmFyZSAoaW1wbGljaXQgZSAlcykuIgorCisjOiBvcHRpb24uYzozMjQKK21zZ2lkICJEbyBOT1QgZm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kOiBydW4gaW4gZGVidWcgbW9kZS4iCittc2dzdHIgIk5VIHBvcm5lxZ90ZSDDrm4gZnVuZGFsOiBydWxlYXrEgyDDrm4gbW9kdWwgZGVwYW5hcmUuIgorCisjOiBvcHRpb24uYzozMjUKK21zZ2lkICJEbyBOT1QgZm9yd2FyZCBxdWVyaWVzIHdpdGggbm8gZG9tYWluIHBhcnQuIgorbXNnc3RyICJOVSDDrm5haW50YSBjZXJlcmlsZSBjZSBudSBjb27Fo2luIGRvbWVuaXUgRE5TLiIKKworIzogb3B0aW9uLmM6MzI2Cittc2dpZCAiUmV0dXJuIHNlbGYtcG9pbnRpbmcgTVggcmVjb3JkcyBmb3IgbG9jYWwgaG9zdHMuIgorbXNnc3RyICJSxINzcHVuZGUgY3Ugw65ucmVnaXN0csSDcmkgTVggc3ByZSBlbCDDrm5zdcWfaSBwZW50cnUgbWHFn2luaSBsb2NhbGUuIgorCisjOiBvcHRpb24uYzozMjcKK21zZ2lkICJFeHBhbmQgc2ltcGxlIG5hbWVzIGluIC9ldGMvaG9zdHMgd2l0aCBkb21haW4tc3VmZml4LiIKK21zZ3N0ciAiQWRhdWfEgyBudW1lbG9yIHNpbXBsZSBkaW4gL2V0Yy9ob3N0cyBudW1lbGUgZG9tZW5pdWx1aSBjYSBzdWZpeC4iCisKKyM6IG9wdGlvbi5jOjMyOAorbXNnaWQgIkRvbid0IGZvcndhcmQgc3B1cmlvdXMgRE5TIHJlcXVlc3RzIGZyb20gV2luZG93cyBob3N0cy4iCittc2dzdHIgIk51IGluYWludGEgY2VyZXJpIEROUyBkZWZlY3RlIHByb3Zlbml0ZSBkZSBsYSBtYcWfaW5pIFdpbmRvd3MuIgorCisjOiBvcHRpb24uYzozMjkKK21zZ2lkICJFbmFibGUgREhDUCBpbiB0aGUgcmFuZ2UgZ2l2ZW4gd2l0aCBsZWFzZSBkdXJhdGlvbi4iCittc2dzdHIgIkFjdGl2ZWF6xIMgREhDUCDDrm4gZG9tZW5pdWwgZGF0IGN1IGR1cmF0xIMgbGltaXRhdMSDIGRlIMOubXBydW11dC4iCisKKyM6IG9wdGlvbi5jOjMzMAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2UgdG8gdGhpcyBncm91cCBhZnRlciBzdGFydHVwIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJSdWxlYXrEgyBzdWIgYWNlc3QgZ3J1cCBkdXDEgyBwb3JuaXJlIChpbXBsaWNpdCBlICVzKS4iCisKKyM6IG9wdGlvbi5jOjMzMQorbXNnaWQgIlNldCBhZGRyZXNzIG9yIGhvc3RuYW1lIGZvciBhIHNwZWNpZmllZCBtYWNoaW5lLiIKK21zZ3N0ciAiU2NoaW1ixIMgYWRyZXNhIHNhdSBudW1lbGUgbWHFn2luaWkgc3BlY2lmaWNhdGUuIgorCisjOiBvcHRpb24uYzozMzIKKyMsIGZ1enp5Cittc2dpZCAiUmVhZCBESENQIGhvc3Qgc3BlY3MgZnJvbSBmaWxlLiIKK21zZ3N0ciAibnVtZSBNWCBpbnZhbGlkIgorCisjOiBvcHRpb24uYzozMzMKK21zZ2lkICJSZWFkIERIQ1Agb3B0aW9uIHNwZWNzIGZyb20gZmlsZS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzM0Cittc2dpZCAiRXZhbHVhdGUgY29uZGl0aW9uYWwgdGFnIGV4cHJlc3Npb24uIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjMzNQorIywgYy1mb3JtYXQKK21zZ2lkICJEbyBOT1QgbG9hZCAlcyBmaWxlLiIKK21zZ3N0ciAiTnUgw65uY2FyY8SDIGZpxZ9pZXJ1bCAlcy4iCisKKyM6IG9wdGlvbi5jOjMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IGEgaG9zdHMgZmlsZSB0byBiZSByZWFkIGluIGFkZGl0aW9uIHRvICVzLiIKK21zZ3N0ciAiU3BlY2lmaWPEgyBzcHJlIGNpdGlyZSB1biBmacWfaWVyIGhvc3RzIGFkacWjaW9uYWwgbGEgJXMuIgorCisjOiBvcHRpb24uYzozMzcKK21zZ2lkICJTcGVjaWZ5IGludGVyZmFjZShzKSB0byBsaXN0ZW4gb24uIgorbXNnc3RyICJTcGVjaWZpY8SDIGludGVyZmXFo2VsZSBkZXNlcnZpdGUuIgorCisjOiBvcHRpb24uYzozMzgKK21zZ2lkICJTcGVjaWZ5IGludGVyZmFjZShzKSBOT1QgdG8gbGlzdGVuIG9uLiIKK21zZ3N0ciAiU3BlY2lmaWPEgyBpbnRlcmZlxaNlbGUgTkUtZGVzZXJ2aXRlLiIKKworIzogb3B0aW9uLmM6MzM5CisjLCBmdXp6eQorbXNnaWQgIk1hcCBESENQIHVzZXIgY2xhc3MgdG8gdGFnLiIKK21zZ3N0ciAiTGVhZ8SDIGNsYXNhIGRlIHV0aWxpemF0b3IgREhDUCBjdSBncnVwIGRlIG9wxaNpdW5pLiIKKworIzogb3B0aW9uLmM6MzQwCittc2dpZCAiTWFwIFJGQzMwNDYgY2lyY3VpdC1pZCB0byB0YWcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM0MQorbXNnaWQgIk1hcCBSRkMzMDQ2IHJlbW90ZS1pZCB0byB0YWcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM0MgorbXNnaWQgIk1hcCBSRkMzOTkzIHN1YnNjcmliZXItaWQgdG8gdGFnLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDMKKyMsIGZ1enp5Cittc2dpZCAiRG9uJ3QgZG8gREhDUCBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIKK21zZ3N0ciAiTnUgZnVybml6YSBESENQIG1hxZ9pbmlsb3IgZGluIGdydXB1bCBkZSBvcMWjaXVuaS4iCisKKyM6IG9wdGlvbi5jOjM0NAorIywgZnV6enkKK21zZ2lkICJGb3JjZSBicm9hZGNhc3QgcmVwbGllcyBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIKK21zZ3N0ciAiTnUgZnVybml6YSBESENQIG1hxZ9pbmlsb3IgZGluIGdydXB1bCBkZSBvcMWjaXVuaS4iCisKKyM6IG9wdGlvbi5jOjM0NQorbXNnaWQgIkRvIE5PVCBmb3JrIGludG8gdGhlIGJhY2tncm91bmQsIGRvIE5PVCBydW4gaW4gZGVidWcgbW9kZS4iCittc2dzdHIgIk5VIHBvcm5lxZ90ZSDDrm4gZnVuZGFsLCBOVSBydWxlYXrEgyDDrm4gbW9kdWwgZGVwYW5hcmUuIgorCisjOiBvcHRpb24uYzozNDYKK21zZ2lkICJBc3N1bWUgd2UgYXJlIHRoZSBvbmx5IERIQ1Agc2VydmVyIG9uIHRoZSBsb2NhbCBuZXR3b3JrLiIKK21zZ3N0ciAiUHJlc3VwdW5lIGPEgyBzdW50ZW0gc2luZ3VydWwgc2VydmVyIERIQ1AgZGluIHJlxaNlYXVhIGxvY2FsxIMuIgorCisjOiBvcHRpb24uYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSB3aGVyZSB0byBzdG9yZSBESENQIGxlYXNlcyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU3BlY2lmaWPEgyBmacWfaWVydWwgZGUgc3RvY2FyZSBhIMOubXBydW11dHVyaWxvciBESENQIChpbXBsaWNpdCBlICVzKS4iCisKKyM6IG9wdGlvbi5jOjM0OAorbXNnaWQgIlJldHVybiBNWCByZWNvcmRzIGZvciBsb2NhbCBob3N0cy4iCittc2dzdHIgIlLEg3NwdW5kZSBjdSDDrm50cmVnaXN0csSDcmkgTVggcGVudHJ1IG1hxZ9pbmkgbG9jYWxlLiIKKworIzogb3B0aW9uLmM6MzQ5Cittc2dpZCAiU3BlY2lmeSBhbiBNWCByZWNvcmQuIgorbXNnc3RyICJTcGVjaWZpY8SDIG8gw65ucmVnaXN0cmFyZSBNWC4iCisKKyM6IG9wdGlvbi5jOjM1MAorbXNnaWQgIlNwZWNpZnkgQk9PVFAgb3B0aW9ucyB0byBESENQIHNlcnZlci4iCittc2dzdHIgIlNwZWNpZmljxIMgb3DFo2l1bmkgQk9PVFAgc2VydmVydWx1aSBESENQLiIKKworIzogb3B0aW9uLmM6MzUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvIE5PVCBwb2xsICVzIGZpbGUsIHJlbG9hZCBvbmx5IG9uIFNJR0hVUC4iCittc2dzdHIgIk51IMOubmPEg3JjYSBmacWfaWVydWwgJXMsIGNpdGXFn3RlLWwgZG9hciBsYSBTSUdIVVAuIgorCisjOiBvcHRpb24uYzozNTIKK21zZ2lkICJEbyBOT1QgY2FjaGUgZmFpbGVkIHNlYXJjaCByZXN1bHRzLiIKK21zZ3N0ciAiTlUgbWVtb3JhIHJlenVsdGF0ZWxlIGRlIGPEg3V0YXJlIEROUyBlxZ91YXRhdMSDLiIKKworIzogb3B0aW9uLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSBuYW1lc2VydmVycyBzdHJpY3RseSBpbiB0aGUgb3JkZXIgZ2l2ZW4gaW4gJXMuIgorbXNnc3RyICJGb2xvc2XFn3RlIHNlcnZlcmUgRE5TIHN0cmljdCDDrm4gb3JkaW5lYSBkYXTEgyDDrm4gJXMuIgorCisjOiBvcHRpb24uYzozNTQKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSBvcHRpb25zIHRvIGJlIHNlbnQgdG8gREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiQ29uZmlndXJlYXrEgyBvcMWjaXVuaSDDrm4gcGx1c2NlIHRyZWJ1aWUgdHJpbWlzZSBjbGllbsWjaWxvciBESENQLiIKKworIzogb3B0aW9uLmM6MzU1Cittc2dpZCAiREhDUCBvcHRpb24gc2VudCBldmVuIGlmIHRoZSBjbGllbnQgZG9lcyBub3QgcmVxdWVzdCBpdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzU2Cittc2dpZCAiU3BlY2lmeSBwb3J0IHRvIGxpc3RlbiBmb3IgRE5TIHJlcXVlc3RzIG9uIChkZWZhdWx0cyB0byA1MykuIgorbXNnc3RyICJTcGVjaWZpY8SDIG51bcSDcnVsIHBvcnR1bHVpIHBlbnRydSBjZXJlcmkgRE5TIChpbXBsaWNpdCBlIDUzKS4iCisKKyM6IG9wdGlvbi5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIHN1cHBvcnRlZCBVRFAgcGFja2V0IHNpemUgZm9yIEVETlMuMCAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiTWFyaW1lYSBtYXhpbcSDIGEgcGFjaGV0dWx1aSBVRFAgcGVudHJ1IEVETlMuMCAoaW1wbGljaXQgZSAlcykuIgorCisjOiBvcHRpb24uYzozNTgKKyMsIGZ1enp5Cittc2dpZCAiTG9nIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiw45ucmVnaXN0cmVhesSDIHRyYW56YWPFo2lpbGUuIgorCisjOiBvcHRpb24uYzozNTkKKyMsIGZ1enp5Cittc2dpZCAiRm9yY2UgdGhlIG9yaWdpbmF0aW5nIHBvcnQgZm9yIHVwc3RyZWFtIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiRm9yxaNlYXrEgyBhY2VzdCBwb3J0IHBlbnRydSBkYXRlbGUgY2UgcGxlYWPEgy4iCisKKyM6IG9wdGlvbi5jOjM2MAorbXNnaWQgIkRvIE5PVCByZWFkIHJlc29sdi5jb25mLiIKK21zZ3N0ciAiTlUgY2l0aSBmacWfaWVydWwgcmVzb2x2LmNvbmYiCisKKyM6IG9wdGlvbi5jOjM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IHBhdGggdG8gcmVzb2x2LmNvbmYgKGRlZmF1bHRzIHRvICVzKS4iCittc2dzdHIgIlNwZWNpZmljxIMgY2FsZWEgY8SDdHJlIHJlc29sdi5jb25mIChpbXBsaWNpdCBlICVzKS4iCisKKyM6IG9wdGlvbi5jOjM2MgorIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IHBhdGggdG8gZmlsZSB3aXRoIHNlcnZlcj0gb3B0aW9ucyIKK21zZ3N0ciAiU3BlY2lmaWPEgyBvIGNhbGUgcGVudHJ1IGZpxZ9pZXJ1bCBQSUQuIChpbXBsaWNpdCAlcykuIgorCisjOiBvcHRpb24uYzozNjMKK21zZ2lkICJTcGVjaWZ5IGFkZHJlc3MoZXMpIG9mIHVwc3RyZWFtIHNlcnZlcnMgd2l0aCBvcHRpb25hbCBkb21haW5zLiIKK21zZ3N0ciAiU3BlY2lmaWPEgyBhZHJlc2VsZSBzZXJ2ZXIoZWxvcikgc3VwZXJpb2FyZSBjdSBkb21lbmlpIG9wxaNpb25hbGUuIgorCisjOiBvcHRpb24uYzozNjQKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSBhZGRyZXNzIG9mIHVwc3RyZWFtIHNlcnZlcnMgZm9yIHJldmVyc2UgYWRkcmVzcyBxdWVyaWVzIgorbXNnc3RyICJTcGVjaWZpY8SDIGFkcmVzZWxlIHNlcnZlcihlbG9yKSBzdXBlcmlvYXJlIGN1IGRvbWVuaWkgb3DFo2lvbmFsZS4iCisKKyM6IG9wdGlvbi5jOjM2NQorbXNnaWQgIk5ldmVyIGZvcndhcmQgcXVlcmllcyB0byBzcGVjaWZpZWQgZG9tYWlucy4iCittc2dzdHIgIk51IMOubmFpbnRlYXrEgyBjZXJlcmlsZSBzcHJlIGRvbWVuaWlsZSBzcGVjaWZpY2F0ZS4iCisKKyM6IG9wdGlvbi5jOjM2NgorbXNnaWQgIlNwZWNpZnkgdGhlIGRvbWFpbiB0byBiZSBhc3NpZ25lZCBpbiBESENQIGxlYXNlcy4iCittc2dzdHIgIlNwZWNpZmljxIMgZG9tZW5pdWwgZGUgdHJhbnNtaXMgcHJpbiBESENQLiIKKworIzogb3B0aW9uLmM6MzY3Cittc2dpZCAiU3BlY2lmeSBkZWZhdWx0IHRhcmdldCBpbiBhbiBNWCByZWNvcmQuIgorbXNnc3RyICJTcGVjaWZpY8SDIG8gxaNpbnTEgyDDrm50ci1vIMOubnJlZ2lzdHJhcmUgTVguIgorCisjOiBvcHRpb24uYzozNjgKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzIGZvciByZXBsaWVzIGZyb20gL2V0Yy9ob3N0cy4iCittc2dzdHIgIlNwZWNpZmljxIMgVFRMIMOubiBzZWN1bmRlIHBlbnRydSByxINzcHVuc3VyaWxlIGRpbiAvZXRjL2hvc3RzLiIKKworIzogb3B0aW9uLmM6MzY5CisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG5lZ2F0aXZlIGNhY2hpbmcuIgorbXNnc3RyICJTcGVjaWZpY8SDIFRUTCDDrm4gc2VjdW5kZSBwZW50cnUgcsSDc3B1bnN1cmlsZSBkaW4gL2V0Yy9ob3N0cy4iCisKKyM6IG9wdGlvbi5jOjM3MAorIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzIGZvciBtYXhpbXVtIFRUTCB0byBzZW5kIHRvIGNsaWVudHMuIgorbXNnc3RyICJTcGVjaWZpY8SDIFRUTCDDrm4gc2VjdW5kZSBwZW50cnUgcsSDc3B1bnN1cmlsZSBkaW4gL2V0Yy9ob3N0cy4iCisKKyM6IG9wdGlvbi5jOjM3MQorIywgYy1mb3JtYXQKK21zZ2lkICJDaGFuZ2UgdG8gdGhpcyB1c2VyIGFmdGVyIHN0YXJ0dXAuIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJSdWxlYXrEgyBzdWIgYWNlc3QgdXRpbGl6YXRvciBkdXDEgyBwb3JuaXJlLiAoaW1wbGljaXQgZSAlcykuIgorCisjOiBvcHRpb24uYzozNzIKKyMsIGZ1enp5Cittc2dpZCAiTWFwIERIQ1AgdmVuZG9yIGNsYXNzIHRvIHRhZy4iCittc2dzdHIgIlRyaW1pdGUgb3DFo2l1bmkgREhDUCDDrm4gZnVuY8WjaWUgZGUgbWFyY2EgcGzEg2NpaSBkZSByZcWjZWEuIgorCisjOiBvcHRpb24uYzozNzMKK21zZ2lkICJEaXNwbGF5IGRuc21hc3EgdmVyc2lvbiBhbmQgY29weXJpZ2h0IGluZm9ybWF0aW9uLiIKK21zZ3N0ciAiQWZpxZ9lYXrEgyB2ZXJzaXVuZWEgZG5zbWFzcSDFn2kgZHJlcHR1cmlsZSBkZSBhdXRvci4iCisKKyM6IG9wdGlvbi5jOjM3NAorbXNnaWQgIlRyYW5zbGF0ZSBJUHY0IGFkZHJlc3NlcyBmcm9tIHVwc3RyZWFtIHNlcnZlcnMuIgorbXNnc3RyICJUcmFkdWNlIGFkcmVzZWxlIElQdjQgZGUgbGEgc2VydmVyZWxlIEROUyBzdXBlcmlvYXJlLiIKKworIzogb3B0aW9uLmM6Mzc1Cittc2dpZCAiU3BlY2lmeSBhIFNSViByZWNvcmQuIgorbXNnc3RyICJTcGVjaWZpY8SDIG8gw65ucmVnaXN0cmFyZSBTUlYuIgorCisjOiBvcHRpb24uYzozNzYKK21zZ2lkICJEaXNwbGF5IHRoaXMgbWVzc2FnZS4gVXNlIC0taGVscCBkaGNwIGZvciBrbm93biBESENQIG9wdGlvbnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM3NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiU3BlY2lmeSBwYXRoIG9mIFBJRCBmaWxlIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTcGVjaWZpY8SDIG8gY2FsZSBwZW50cnUgZmnFn2llcnVsIFBJRC4gKGltcGxpY2l0ICVzKS4iCisKKyM6IG9wdGlvbi5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJTcGVjaWZ5IG1heGltdW0gbnVtYmVyIG9mIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIgorbXNnc3RyICJTcGVjaWZpY8SDIG51bcSDcnVsIG1heGltIGRlIMOubXBydW11dHVyaSBESENQIChpbXBsaWNpdCAlcykuIgorCisjOiBvcHRpb24uYzozNzkKK21zZ2lkICJBbnN3ZXIgRE5TIHF1ZXJpZXMgYmFzZWQgb24gdGhlIGludGVyZmFjZSBhIHF1ZXJ5IHdhcyBzZW50IHRvLiIKK21zZ3N0ciAiUsSDc3B1bmRlIGNlcmVyaWxvciBETlMgw65uIGZ1bmPFo2llIGRlIGludGVyZmHFo2EgcGUgY2FyZSBhIHZlbml0IGNlcmVyZWEuIgorCisjOiBvcHRpb24uYzozODAKK21zZ2lkICJTcGVjaWZ5IFRYVCBETlMgcmVjb3JkLiIKK21zZ3N0ciAiU3BlY2lmaWPEgyBvIMOubnJlZ2lzdHJhcmUgVFhULiIKKworIzogb3B0aW9uLmM6MzgxCisjLCBmdXp6eQorbXNnaWQgIlNwZWNpZnkgUFRSIEROUyByZWNvcmQuIgorbXNnc3RyICJTcGVjaWZpY8SDIG8gw65ucmVnaXN0cmFyZSBUWFQuIgorCisjOiBvcHRpb24uYzozODIKK21zZ2lkICJHaXZlIEROUyBuYW1lIHRvIElQdjQgYWRkcmVzcyBvZiBpbnRlcmZhY2UuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM4MworbXNnaWQgIkJpbmQgb25seSB0byBpbnRlcmZhY2VzIGluIHVzZS4iCittc2dzdHIgIkFzY3VsdMSDIGRvYXIgcGUgaW50ZXJmZcWjZWxlIGFjdGl2ZS4iCisKKyM6IG9wdGlvbi5jOjM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWFkIERIQ1Agc3RhdGljIGhvc3QgaW5mb3JtYXRpb24gZnJvbSAlcy4iCittc2dzdHIgIkNpdGXFn3RlIGluZm9ybWHFo2lpIERIQ1Agc3RhdGljZSBkZXNwcmUgbWHFn2luxIMgZGluICVzLiIKKworIzogb3B0aW9uLmM6Mzg1Cittc2dpZCAiRW5hYmxlIHRoZSBEQnVzIGludGVyZmFjZSBmb3Igc2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzLCBldGMuIgorbXNnc3RyICJBY3RpdmVhemEgaW50ZXJmYcWjYSBEQnVzIHBlbnRydSBjb25maWd1cmFyZWEgc2VydmVyZWxvciBzdXBlcmlvYXJlLiIKKworIzogb3B0aW9uLmM6Mzg2Cittc2dpZCAiRG8gbm90IHByb3ZpZGUgREhDUCBvbiB0aGlzIGludGVyZmFjZSwgb25seSBwcm92aWRlIEROUy4iCittc2dzdHIgIk51IGFjdGl2ZWF6xIMgREhDUCBjaSBkb2FyIEROUyBwZSBhY2Vhc3TEgyBpbnRlcmZhxaPEgy4iCisKKyM6IG9wdGlvbi5jOjM4NworbXNnaWQgIkVuYWJsZSBkeW5hbWljIGFkZHJlc3MgYWxsb2NhdGlvbiBmb3IgYm9vdHAuIgorbXNnc3RyICJBY3RpdmVhesSDIGFsb2NhcmVhIGRpbmFtaWPEgyBhIGFkcmVzZWxvciBwZW50cnUgQk9PVFAuIgorCisjOiBvcHRpb24uYzozODgKKyMsIGZ1enp5Cittc2dpZCAiTWFwIE1BQyBhZGRyZXNzICh3aXRoIHdpbGRjYXJkcykgdG8gb3B0aW9uIHNldC4iCittc2dzdHIgIlRyaW1pdGUgb3DFo2l1bmkgREhDUCDDrm4gZnVuY8WjaWUgZGUgbWFyY2EgcGzEg2NpaSBkZSByZcWjZWEuIgorCisjOiBvcHRpb24uYzozODkKK21zZ2lkICJUcmVhdCBESENQIHJlcXVlc3RzIG9uIGFsaWFzZXMgYXMgYXJyaXZpbmcgZnJvbSBpbnRlcmZhY2UuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5MAorbXNnaWQgIkRpc2FibGUgSUNNUCBlY2hvIGFkZHJlc3MgY2hlY2tpbmcgaW4gdGhlIERIQ1Agc2VydmVyLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTEKK21zZ2lkICJTaGVsbCBzY3JpcHQgdG8gcnVuIG9uIERIQ1AgbGVhc2UgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTIKK21zZ2lkICJMdWEgc2NyaXB0IHRvIHJ1biBvbiBESENQIGxlYXNlIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzkzCittc2dpZCAiUnVuIGxlYXNlLWNoYW5nZSBzY3JpcHRzIGFzIHRoaXMgdXNlci4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzk0Cittc2dpZCAiUmVhZCBjb25maWd1cmF0aW9uIGZyb20gYWxsIHRoZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzk1CisjLCBmdXp6eQorbXNnaWQgIkxvZyB0byB0aGlzIHN5c2xvZyBmYWNpbGl0eSBvciBmaWxlLiAoZGVmYXVsdHMgdG8gREFFTU9OKSIKK21zZ3N0ciAiUnVsZWF6xIMgc3ViIGFjZXN0IHV0aWxpemF0b3IgZHVwxIMgcG9ybmlyZS4gKGltcGxpY2l0IGUgJXMpLiIKKworIzogb3B0aW9uLmM6Mzk2Cittc2dpZCAiRG8gbm90IHVzZSBsZWFzZWZpbGUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM5NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBETlMgcXVlcmllcy4gKGRlZmF1bHRzIHRvICVzKSIKK21zZ3N0ciAiU3BlY2lmaWPEgyBudW3Eg3J1bCBtYXhpbSBkZSDDrm1wcnVtdXR1cmkgREhDUCAoaW1wbGljaXQgJXMpLiIKKworIzogb3B0aW9uLmM6Mzk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsZWFyIEROUyBjYWNoZSB3aGVuIHJlbG9hZGluZyAlcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzk5Cittc2dpZCAiSWdub3JlIGhvc3RuYW1lcyBwcm92aWRlZCBieSBESENQIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwMAorbXNnaWQgIkRvIE5PVCByZXVzZSBmaWxlbmFtZSBhbmQgc2VydmVyIGZpZWxkcyBmb3IgZXh0cmEgREhDUCBvcHRpb25zLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDEKK21zZ2lkICJFbmFibGUgaW50ZWdyYXRlZCByZWFkLW9ubHkgVEZUUCBzZXJ2ZXIuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwMgorbXNnaWQgIkV4cG9ydCBmaWxlcyBieSBURlRQIG9ubHkgZnJvbSB0aGUgc3BlY2lmaWVkIHN1YnRyZWUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwMworbXNnaWQgIkFkZCBjbGllbnQgSVAgYWRkcmVzcyB0byB0ZnRwLXJvb3QuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQwNAorbXNnaWQgIkFsbG93IGFjY2VzcyBvbmx5IHRvIGZpbGVzIG93bmVkIGJ5IHRoZSB1c2VyIHJ1bm5pbmcgZG5zbWFzcS4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDA1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIG51bWJlciBvZiBjb25uY3VycmVudCBURlRQIHRyYW5zZmVycyAoZGVmYXVsdHMgdG8gJXMpLiIKK21zZ3N0ciAiU3BlY2lmaWPEgyBudW3Eg3J1bCBtYXhpbSBkZSDDrm1wcnVtdXR1cmkgREhDUCAoaW1wbGljaXQgJXMpLiIKKworIzogb3B0aW9uLmM6NDA2Cittc2dpZCAiRGlzYWJsZSB0aGUgVEZUUCBibG9ja3NpemUgZXh0ZW5zaW9uLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDcKK21zZ2lkICJDb252ZXJ0IFRGVFAgZmlsZW5hbWVzIHRvIGxvd2VyY2FzZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDgKK21zZ2lkICJFcGhlbWVyYWwgcG9ydCByYW5nZSBmb3IgdXNlIGJ5IFRGVFAgdHJhbnNmZXJzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MDkKK21zZ2lkICJFeHRyYSBsb2dnaW5nIGZvciBESENQLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTAKK21zZ2lkICJFbmFibGUgYXN5bmMuIGxvZ2dpbmc7IG9wdGlvbmFsbHkgc2V0IHF1ZXVlIGxlbmd0aC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDExCittc2dpZCAiU3RvcCBETlMgcmViaW5kaW5nLiBGaWx0ZXIgcHJpdmF0ZSBJUCByYW5nZXMgd2hlbiByZXNvbHZpbmcuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxMgorbXNnaWQgIkFsbG93IHJlYmluZGluZyBvZiAxMjcuMC4wLjAvOCwgZm9yIFJCTCBzZXJ2ZXJzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTMKK21zZ2lkICJJbmhpYml0IEROUy1yZWJpbmQgcHJvdGVjdGlvbiBvbiB0aGlzIGRvbWFpbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE0Cittc2dpZCAiQWx3YXlzIHBlcmZvcm0gRE5TIHF1ZXJpZXMgdG8gYWxsIHNlcnZlcnMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxNQorbXNnaWQgIlNldCB0YWcgaWYgY2xpZW50IGluY2x1ZGVzIG1hdGNoaW5nIG9wdGlvbiBpbiByZXF1ZXN0LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MTYKK21zZ2lkICJVc2UgYWx0ZXJuYXRpdmUgcG9ydHMgZm9yIERIQ1AuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQxNworIywgZnV6enkKK21zZ2lkICJTcGVjaWZ5IE5BUFRSIEROUyByZWNvcmQuIgorbXNnc3RyICJTcGVjaWZpY8SDIG8gw65ucmVnaXN0cmFyZSBUWFQuIgorCisjOiBvcHRpb24uYzo0MTgKK21zZ2lkICJTcGVjaWZ5IGxvd2VzdCBwb3J0IGF2YWlsYWJsZSBmb3IgRE5TIHF1ZXJ5IHRyYW5zbWlzc2lvbi4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDE5Cittc2dpZCAiVXNlIG9ubHkgZnVsbHkgcXVhbGlmaWVkIGRvbWFpbiBuYW1lcyBmb3IgREhDUCBjbGllbnRzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjAKK21zZ2lkICJHZW5lcmF0ZSBob3N0bmFtZXMgYmFzZWQgb24gTUFDIGFkZHJlc3MgZm9yIG5hbWVsZXNzIGNsaWVudHMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyMQorbXNnaWQgIlVzZSB0aGVzZSBESENQIHJlbGF5cyBhcyBmdWxsIHByb3hpZXMuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyMgorbXNnaWQgIlJlbGF5IERIQ1AgcmVxdWVzdHMgdG8gYSByZW1vdGUgc2VydmVyIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyMworbXNnaWQgIlNwZWNpZnkgYWxpYXMgbmFtZSBmb3IgTE9DQUwgRE5TIG5hbWUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyNAorIywgZnV6enkKK21zZ2lkICJQcm9tcHQgdG8gc2VuZCB0byBQWEUgY2xpZW50cy4iCittc2dzdHIgIkNvbmZpZ3VyZWF6xIMgb3DFo2l1bmkgw65uIHBsdXNjZSB0cmVidWllIHRyaW1pc2UgY2xpZW7Fo2lsb3IgREhDUC4iCisKKyM6IG9wdGlvbi5jOjQyNQorbXNnaWQgIkJvb3Qgc2VydmljZSBmb3IgUFhFIG1lbnUuIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQyNgorbXNnaWQgIkNoZWNrIGNvbmZpZ3VyYXRpb24gc3ludGF4LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjcKK21zZ2lkICJBZGQgcmVxdWVzdG9yJ3MgTUFDIGFkZHJlc3MgdG8gZm9yd2FyZGVkIEROUyBxdWVyaWVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MjgKK21zZ2lkICJBZGQgcmVxdWVzdG9yJ3MgSVAgc3VibmV0IHRvIGZvcndhcmRlZCBETlMgcXVlcmllcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDI5CisjLCBmdXp6eQorbXNnaWQgIlByb3h5IEROU1NFQyB2YWxpZGF0aW9uIHJlc3VsdHMgZnJvbSB1cHN0cmVhbSBuYW1lc2VydmVycy4iCittc2dzdHIgIlRyYWR1Y2UgYWRyZXNlbGUgSVB2NCBkZSBsYSBzZXJ2ZXJlbGUgRE5TIHN1cGVyaW9hcmUuIgorCisjOiBvcHRpb24uYzo0MzAKK21zZ2lkICJBdHRlbXB0IHRvIGFsbG9jYXRlIHNlcXVlbnRpYWwgSVAgYWRkcmVzc2VzIHRvIERIQ1AgY2xpZW50cy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDMxCittc2dpZCAiQ29weSBjb25uZWN0aW9uLXRyYWNrIG1hcmsgZnJvbSBxdWVyaWVzIHRvIHVwc3RyZWFtIGNvbm5lY3Rpb25zLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzIKK21zZ2lkICJBbGxvdyBESENQIGNsaWVudHMgdG8gZG8gdGhlaXIgb3duIERETlMgdXBkYXRlcy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDMzCittc2dpZCAiU2VuZCByb3V0ZXItYWR2ZXJ0aXNlbWVudHMgZm9yIGludGVyZmFjZXMgZG9pbmcgREhDUHY2IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzNAorbXNnaWQgIlNwZWNpZnkgRFVJRF9FTi10eXBlIERIQ1B2NiBzZXJ2ZXIgRFVJRCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzUKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSBob3N0IChBL0FBQUEgYW5kIFBUUikgcmVjb3JkcyIKK21zZ3N0ciAiU3BlY2lmaWPEgyBvIMOubnJlZ2lzdHJhcmUgTVguIgorCisjOiBvcHRpb24uYzo0MzYKKyMsIGZ1enp5Cittc2dpZCAiU3BlY2lmeSBhcmJpdHJhcnkgRE5TIHJlc291cmNlIHJlY29yZCIKK21zZ3N0ciAiU3BlY2lmaWPEgyBvIMOubnJlZ2lzdHJhcmUgVFhULiIKKworIzogb3B0aW9uLmM6NDM3CisjLCBmdXp6eQorbXNnaWQgIkJpbmQgdG8gaW50ZXJmYWNlcyBpbiB1c2UgLSBjaGVjayBmb3IgbmV3IGludGVyZmFjZXMiCittc2dzdHIgImludGVyZmHFo8SDIG5lY3Vub3NjdXTEgyAlcyIKKworIzogb3B0aW9uLmM6NDM4Cittc2dpZCAiRXhwb3J0IGxvY2FsIG5hbWVzIHRvIGdsb2JhbCBETlMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM5Cittc2dpZCAiRG9tYWluIHRvIGV4cG9ydCB0byBnbG9iYWwgRE5TIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0MAorbXNnaWQgIlNldCBUVEwgZm9yIGF1dGhvcml0YXRpdmUgcmVwbGllcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDEKK21zZ2lkICJTZXQgYXV0aG9yaXRpdmUgem9uZSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NDIKK21zZ2lkICJTZWNvbmRhcnkgYXV0aG9yaXRhdGl2ZSBuYW1lc2VydmVycyBmb3IgZm9yd2FyZCBkb21haW5zIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ0MworbXNnaWQgIlBlZXJzIHdoaWNoIGFyZSBhbGxvd2VkIHRvIGRvIHpvbmUgdHJhbnNmZXIiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ0Cittc2dpZCAiU3BlY2lmeSBpcHNldHMgdG8gd2hpY2ggbWF0Y2hpbmcgZG9tYWlucyBzaG91bGQgYmUgYWRkZWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ1Cittc2dpZCAiU3BlY2lmeSBhIGRvbWFpbiBhbmQgYWRkcmVzcyByYW5nZSBmb3Igc3ludGhlc2lzZWQgbmFtZXMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ2Cittc2dpZCAiQWN0aXZhdGUgRE5TU0VDIHZhbGlkYXRpb24iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ3Cittc2dpZCAiU3BlY2lmeSB0cnVzdCBhbmNob3Iga2V5IGRpZ2VzdC4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ4Cittc2dpZCAiRGlzYWJsZSB1cHN0cmVhbSBjaGVja2luZyBmb3IgRE5TU0VDIGRlYnVnZ2luZy4iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDQ5Cittc2dpZCAiRW5zdXJlIGFuc3dlcnMgd2l0aG91dCBETlNTRUMgYXJlIGluIHVuc2lnbmVkIHpvbmVzLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTAKK21zZ2lkICJEb24ndCBjaGVjayBETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMgdW50aWwgZmlyc3QgY2FjaGUtcmVsb2FkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1MgorbXNnaWQgIlNwZWNpZnkgREhDUHY2IHByZWZpeCBjbGFzcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTQKK21zZ2lkICJTZXQgcHJpb3JpdHksIHJlc2VuZC1pbnRlcnZhbCBhbmQgcm91dGVyLWxpZmV0aW1lIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1NQorbXNnaWQgIkRvIG5vdCBsb2cgcm91dGluZSBESENQLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTYKK21zZ2lkICJEbyBub3QgbG9nIHJvdXRpbmUgREhDUHY2LiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTcKK21zZ2lkICJEbyBub3QgbG9nIFJBLiIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0NTgKK21zZ2lkICJBY2NlcHQgcXVlcmllcyBvbmx5IGZyb20gZGlyZWN0bHktY29ubmVjdGVkIG5ldHdvcmtzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQ1OQorbXNnaWQgIkRldGVjdCBhbmQgcmVtb3ZlIEROUyBmb3J3YXJkaW5nIGxvb3BzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjY2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVXNhZ2U6IGRuc21hc3EgW29wdGlvbnNdXG4iCisiXG4iCittc2dzdHIgIiIKKyJVdGlsaXphcmU6IGRuc21hc3EgW29wxaNpdW5pXVxuIgorIlxuIgorCisjOiBvcHRpb24uYzo2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIHNob3J0IG9wdGlvbnMgb25seSBvbiB0aGUgY29tbWFuZCBsaW5lLlxuIgorbXNnc3RyICJGb2xvc2nFo2kgb3DFo2l1bmlsZSBwcmVzY3VydGF0ZSBkb2FyIMOubiBsaW5pZSBkZSBjb21hbmTEgy5cbiIKKworIzogb3B0aW9uLmM6NjY1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJWYWxpZCBvcHRpb25zIGFyZTpcbiIKK21zZ3N0ciAiT3DFo2l1bmlsZSB2YWxpZGUgc3VudDpcbiIKKworIzogb3B0aW9uLmM6NzIyIG9wdGlvbi5jOjcyNgorbXNnaWQgImJhZCBwb3J0IgorbXNnc3RyICJwb3J0IGludmFsaWQiCisKKyM6IG9wdGlvbi5jOjc1MyBvcHRpb24uYzo3ODUKK21zZ2lkICJpbnRlcmZhY2UgYmluZGluZyBub3Qgc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjc2MiBvcHRpb24uYzozNDk0CisjLCBmdXp6eQorbXNnaWQgImJhZCBpbnRlcmZhY2UgbmFtZSIKK21zZ3N0ciAibnVtZSBNWCBpbnZhbGlkIgorCisjOiBvcHRpb24uYzo3OTIKKyMsIGZ1enp5Cittc2dpZCAiYmFkIGFkZHJlc3MiCittc2dzdHIgImNpdGVzYyAlcyAtICVkIGFkcmVzZSIKKworIzogb3B0aW9uLmM6OTc0Cittc2dpZCAidW5zdXBwb3J0ZWQgZW5jYXBzdWxhdGlvbiBmb3IgSVB2NiBvcHRpb24iCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6OTg4Cittc2dpZCAiYmFkIGRoY3Atb3B0aW9uIgorbXNnc3RyICJkaGNwLW9wdGlvbiBpbnZhbGlkIgorCisjOiBvcHRpb24uYzoxMDU2CisjLCBmdXp6eQorbXNnaWQgImJhZCBJUCBhZGRyZXNzIgorbXNnc3RyICJjaXRlc2MgJXMgLSAlZCBhZHJlc2UiCisKKyM6IG9wdGlvbi5jOjEwNTkgb3B0aW9uLmM6MTE5NyBvcHRpb24uYzoyODEyCisjLCBmdXp6eQorbXNnaWQgImJhZCBJUHY2IGFkZHJlc3MiCittc2dzdHIgImNpdGVzYyAlcyAtICVkIGFkcmVzZSIKKworIzogb3B0aW9uLmM6MTIyNCBvcHRpb24uYzoxMzE4Cittc2dpZCAiYmFkIGRvbWFpbiBpbiBkaGNwLW9wdGlvbiIKK21zZ3N0ciAiZG9tZW5pdSBETlMgaW52YWxpZCDDrm4gZGVjbGFyYcWjaWEgZGhjcC1vcHRpb24iCisKKyM6IG9wdGlvbi5jOjEzNTYKK21zZ2lkICJkaGNwLW9wdGlvbiB0b28gbG9uZyIKK21zZ3N0ciAiZGVjbGFyYXJlYSBkaGNwLW9wdGlvbiBlc3RlIHByZWEgbHVuZ8SDIgorCisjOiBvcHRpb24uYzoxMzYzCittc2dpZCAiaWxsZWdhbCBkaGNwLW1hdGNoIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE0MjUKK21zZ2lkICJpbGxlZ2FsIHJlcGVhdGVkIGZsYWciCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTQzMworbXNnaWQgImlsbGVnYWwgcmVwZWF0ZWQga2V5d29yZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNDk1IG9wdGlvbi5jOjQwOTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhY2Nlc3MgZGlyZWN0b3J5ICVzOiAlcyIKK21zZ3N0ciAibnUgcG90IGNpdGkgJXM6ICVzIgorCisjOiBvcHRpb24uYzoxNTQxIHRmdHAuYzo0OTMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBhY2Nlc3MgJXM6ICVzIgorbXNnc3RyICJudSBwb3QgY2l0aSAlczogJXMiCisKKyM6IG9wdGlvbi5jOjE1ODgKK21zZ2lkICJzZXR0aW5nIGxvZyBmYWNpbGl0eSBpcyBub3QgcG9zc2libGUgdW5kZXIgQW5kcm9pZCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNTk3Cittc2dpZCAiYmFkIGxvZyBmYWNpbGl0eSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNjUwCittc2dpZCAiYmFkIE1YIHByZWZlcmVuY2UiCittc2dzdHIgInByZWZlcmluxaPEgyBNWCBpbnZhbGlkxIMiCisKKyM6IG9wdGlvbi5jOjE2NTUKK21zZ2lkICJiYWQgTVggbmFtZSIKK21zZ3N0ciAibnVtZSBNWCBpbnZhbGlkIgorCisjOiBvcHRpb24uYzoxNjY5Cittc2dpZCAiYmFkIE1YIHRhcmdldCIKK21zZ3N0ciAixaNpbnTEgyBNWCBpbnZhbGlkxIMiCisKKyM6IG9wdGlvbi5jOjE2ODEKK21zZ2lkICJjYW5ub3QgcnVuIHNjcmlwdHMgdW5kZXIgdUNsaW51eCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoxNjgzCittc2dpZCAicmVjb21waWxlIHdpdGggSEFWRV9TQ1JJUFQgZGVmaW5lZCB0byBlbmFibGUgbGVhc2UtY2hhbmdlIHNjcmlwdHMiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MTY4NworbXNnaWQgInJlY29tcGlsZSB3aXRoIEhBVkVfTFVBU0NSSVBUIGRlZmluZWQgdG8gZW5hYmxlIEx1YSBzY3JpcHRzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjE5Mjggb3B0aW9uLmM6MTk2NiBvcHRpb24uYzoyMDE1CisjLCBmdXp6eQorbXNnaWQgImJhZCBwcmVmaXgiCittc2dzdHIgInBvcnQgaW52YWxpZCIKKworIzogb3B0aW9uLmM6MjI4OQorbXNnaWQgInJlY29tcGlsZSB3aXRoIEhBVkVfSVBTRVQgZGVmaW5lZCB0byBlbmFibGUgaXBzZXQgZGlyZWN0aXZlcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNDY5CisjLCBmdXp6eQorbXNnaWQgImJhZCBwb3J0IHJhbmdlIgorbXNnc3RyICJwb3J0IGludmFsaWQiCisKKyM6IG9wdGlvbi5jOjI0ODUKK21zZ2lkICJiYWQgYnJpZGdlLWludGVyZmFjZSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNTQ1Cittc2dpZCAib25seSBvbmUgdGFnIGFsbG93ZWQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MjU2NSBvcHRpb24uYzoyNTc3IG9wdGlvbi5jOjI2ODMgb3B0aW9uLmM6MjcyNAorbXNnaWQgImJhZCBkaGNwLXJhbmdlIgorbXNnc3RyICJkaGNwLXJhbmdlIGludmFsaWQiCisKKyM6IG9wdGlvbi5jOjI1OTIKK21zZ2lkICJpbmNvbnNpc3RlbnQgREhDUCByYW5nZSIKK21zZ3N0ciAiZG9tZW5pdSBESENQIGluY29uc2lzdGVudCIKKworIzogb3B0aW9uLmM6MjY1MQorbXNnaWQgInByZWZpeCBsZW5ndGggbXVzdCBiZSBleGFjdGx5IDY0IGZvciBSQSBzdWJuZXRzIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2NTMKK21zZ2lkICJwcmVmaXggbGVuZ3RoIG11c3QgYmUgZXhhY3RseSA2NCBmb3Igc3VibmV0IGNvbnN0cnVjdG9ycyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzoyNjU3Cittc2dpZCAicHJlZml4IGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0IDY0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI2NjAKKyMsIGZ1enp5Cittc2dpZCAiaW5jb25zaXN0ZW50IERIQ1B2NiByYW5nZSIKK21zZ3N0ciAiZG9tZW5pdSBESENQIGluY29uc2lzdGVudCIKKworIzogb3B0aW9uLmM6MjY3MQorbXNnaWQgInByZWZpeCBtdXN0IGJlIHplcm8gd2l0aCBcImNvbnN0cnVjdG9yOlwiIGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI3ODIgb3B0aW9uLmM6MjgzMAorIywgZnV6enkKK21zZ2lkICJiYWQgaGV4IGNvbnN0YW50IgorbXNnc3RyICJkaGNwLWhvc3QgaW52YWxpZCIKKworIzogb3B0aW9uLmM6MjgwNAorbXNnaWQgImNhbm5vdCBtYXRjaCB0YWdzIGluIC0tZGhjcC1ob3N0IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjI4NTIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBkaGNwLWhvc3QgSVAgYWRkcmVzcyAlcyIKK21zZ3N0ciAiYWRyZXPEgyBJUCBkdXBsaWNhdCAlcyDDrm4gZGVjbGFyYcWjaWEgZGhjcC1jb25maWcuIgorCisjOiBvcHRpb24uYzoyOTEwCisjLCBmdXp6eQorbXNnaWQgImJhZCBESENQIGhvc3QgbmFtZSIKK21zZ3N0ciAibnVtZSBNWCBpbnZhbGlkIgorCisjOiBvcHRpb24uYzoyOTkyCisjLCBmdXp6eQorbXNnaWQgImJhZCB0YWctaWYiCittc2dzdHIgIsWjaW50xIMgTVggaW52YWxpZMSDIgorCisjOiBvcHRpb24uYzozMzE2IG9wdGlvbi5jOjM3MTAKK21zZ2lkICJpbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICJudW3Eg3IgZGUgcG9ydCBpbnZhbGlkIgorCisjOiBvcHRpb24uYzozMzc4CisjLCBmdXp6eQorbXNnaWQgImJhZCBkaGNwLXByb3h5IGFkZHJlc3MiCittc2dzdHIgImNpdGVzYyAlcyAtICVkIGFkcmVzZSIKKworIzogb3B0aW9uLmM6MzQwNAorIywgZnV6enkKK21zZ2lkICJCYWQgZGhjcC1yZWxheSIKK21zZ3N0ciAiZGhjcC1yYW5nZSBpbnZhbGlkIgorCisjOiBvcHRpb24uYzozNDMwCittc2dpZCAiYmFkIFJBLXBhcmFtcyIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNDM5Cittc2dpZCAiYmFkIERVSUQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6MzQ4MQorIywgZnV6enkKK21zZ2lkICJpbnZhbGlkIGFsaWFzIHJhbmdlIgorbXNnc3RyICJwb25kZXJlIGludmFsaWTEgyIKKworIzogb3B0aW9uLmM6MzUzNQorbXNnaWQgImJhZCBDTkFNRSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozNTQwCittc2dpZCAiZHVwbGljYXRlIENOQU1FIgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjM1NjAKKyMsIGZ1enp5Cittc2dpZCAiYmFkIFBUUiByZWNvcmQiCittc2dzdHIgIsOubnJlZ2lzdHJhcmUgU1JWIGludmFsaWTEgyIKKworIzogb3B0aW9uLmM6MzU5MQorIywgZnV6enkKK21zZ2lkICJiYWQgTkFQVFIgcmVjb3JkIgorbXNnc3RyICLDrm5yZWdpc3RyYXJlIFNSViBpbnZhbGlkxIMiCisKKyM6IG9wdGlvbi5jOjM2MjUKKyMsIGZ1enp5Cittc2dpZCAiYmFkIFJSIHJlY29yZCIKK21zZ3N0ciAiw65ucmVnaXN0cmFyZSBTUlYgaW52YWxpZMSDIgorCisjOiBvcHRpb24uYzozNjU1Cittc2dpZCAiYmFkIFRYVCByZWNvcmQiCittc2dzdHIgIsOubnJlZ2lzdHJhcmUgVFhUIGludmFsaWTEgyIKKworIzogb3B0aW9uLmM6MzY5NgorbXNnaWQgImJhZCBTUlYgcmVjb3JkIgorbXNnc3RyICLDrm5yZWdpc3RyYXJlIFNSViBpbnZhbGlkxIMiCisKKyM6IG9wdGlvbi5jOjM3MDMKK21zZ2lkICJiYWQgU1JWIHRhcmdldCIKK21zZ3N0ciAixaNpbnTEgyBTUlYgaW52YWxpZMSDIgorCisjOiBvcHRpb24uYzozNzE3Cittc2dpZCAiaW52YWxpZCBwcmlvcml0eSIKK21zZ3N0ciAicHJpb3JpdGF0ZSBpbnZhbGlkxIMiCisKKyM6IG9wdGlvbi5jOjM3MjQKK21zZ2lkICJpbnZhbGlkIHdlaWdodCIKK21zZ3N0ciAicG9uZGVyZSBpbnZhbGlkxIMiCisKKyM6IG9wdGlvbi5jOjM3NDgKKyMsIGZ1enp5Cittc2dpZCAiQmFkIGhvc3QtcmVjb3JkIgorbXNnc3RyICLDrm5yZWdpc3RyYXJlIFNSViBpbnZhbGlkxIMiCisKKyM6IG9wdGlvbi5jOjM3NjUKKyMsIGZ1enp5Cittc2dpZCAiQmFkIG5hbWUgaW4gaG9zdC1yZWNvcmQiCittc2dzdHIgIm51bWUgaW52YWxpZCDDrm4gJXMiCisKKyM6IG9wdGlvbi5jOjM4MjYKKyMsIGZ1enp5Cittc2dpZCAiYmFkIHRydXN0IGFuY2hvciIKK21zZ3N0ciAicG9ydCBpbnZhbGlkIgorCisjOiBvcHRpb24uYzozODQwCittc2dpZCAiYmFkIEhFWCBpbiB0cnVzdCBhbmNob3IiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6Mzg1MAorbXNnaWQgInVuc3VwcG9ydGVkIG9wdGlvbiAoY2hlY2sgdGhhdCBkbnNtYXNxIHdhcyBjb21waWxlZCB3aXRoIERIQ1AvVEZUUC9ETlNTRUMvREJ1cyBzdXBwb3J0KSIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzozOTA5Cittc2dpZCAibWlzc2luZyBcIiIKK21zZ3N0ciAibGlwc2XFn3RlIFwiIgorCisjOiBvcHRpb24uYzozOTY2Cittc2dpZCAiYmFkIG9wdGlvbiIKK21zZ3N0ciAib3DFo2l1bmUgaW52YWxpZMSDIgorCisjOiBvcHRpb24uYzozOTY4Cittc2dpZCAiZXh0cmFuZW91cyBwYXJhbWV0ZXIiCittc2dzdHIgInBhcmFtZXRydSBuZXJlY3Vub3NjdXQiCisKKyM6IG9wdGlvbi5jOjM5NzAKK21zZ2lkICJtaXNzaW5nIHBhcmFtZXRlciIKK21zZ3N0ciAicGFyYW1ldHJ1IGxpcHNhIgorCisjOiBvcHRpb24uYzozOTcyCisjLCBmdXp6eQorbXNnaWQgImlsbGVnYWwgb3B0aW9uIgorbXNnc3RyICJvcMWjaXVuZSBpbnZhbGlkxIMiCisKKyM6IG9wdGlvbi5jOjM5NzkKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiZXJvYXJlIgorCisjOiBvcHRpb24uYzozOTgxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgYXQgbGluZSAlZCBvZiAlcyIKK21zZ3N0ciAiJXMgbGEgbGluaWEgJWQgZGluICUlcyIKKworIzogb3B0aW9uLmM6NDA0NSBvcHRpb24uYzo0MTY4IHRmdHAuYzo2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJXM6ICVzIgorbXNnc3RyICJudSBwb3QgY2l0aSAlczogJXMiCisKKyM6IG9wdGlvbi5jOjQyMjkgb3B0aW9uLmM6NDI2NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicmVhZCAlcyIKK21zZ3N0ciAiY2l0ZXNjICVzIgorCisjOiBvcHRpb24uYzo0MzMxCittc2dpZCAianVuayBmb3VuZCBpbiBjb21tYW5kIGxpbmUiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDM2NgorIywgYy1mb3JtYXQKK21zZ2lkICJEbnNtYXNxIHZlcnNpb24gJXMgICVzXG4iCittc2dzdHIgImRuc21hc3EgdmVyc2l1bmVhICVzICAlc1xuIgorCisjOiBvcHRpb24uYzo0MzY3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiQ29tcGlsZSB0aW1lIG9wdGlvbnM6ICVzXG4iCisiXG4iCittc2dzdHIgIiIKKyJPcMWjaXVuaSBjdSBjYXJlIGEgZm9zdCBjb21waWxhdCAlc1xuIgorIlxuIgorCisjOiBvcHRpb24uYzo0MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLlxuIgorbXNnc3RyICJBY2VzdCBwcm9ncmFtIHZpbmUgRsSCUsSCIE5JQ0kgTyBHQVJBTsWiSUUuXG4iCisKKyM6IG9wdGlvbi5jOjQzNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG5zbWFzcSBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdFxuIgorbXNnc3RyICJEbnNtYXNxIGVzdGUgdW4gcHJvZ3JhbSBncmF0dWl0LCBzdW50ZcWjaSBpbnZpdGHFo2kgc8SDLWwgcmVkaXN0cmlidWnFo2lcbiIKKworIzogb3B0aW9uLmM6NDM3MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyIG9yIDMuXG4iCittc2dzdHIgIsOubiB0ZXJtZW5paSBMaWNlbsWjZWkgcHVibGljZSBnZW5lcmFsZSBHTlUsIHZlcnNpdW5lYSAyLlxuIgorCisjOiBvcHRpb24uYzo0MzgxCittc2dpZCAidHJ5IC0taGVscCIKK21zZ3N0ciAiIgorCisjOiBvcHRpb24uYzo0MzgzCittc2dpZCAidHJ5IC13IgorbXNnc3RyICIiCisKKyM6IG9wdGlvbi5jOjQzODUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb21tYW5kIGxpbmUgb3B0aW9uczogJXMiCittc2dzdHIgIm9wxaNpdW5pIMOubiBsaW5pZSBkZSBjb21hbmTEgyBpbnZhbGlkZTogJXMuIgorCisjOiBvcHRpb24uYzo0NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBnZXQgaG9zdC1uYW1lOiAlcyIKK21zZ3N0ciAibnUgcG90IGNpdGkgbnVtZWxlIG1hxZ9pbmlpOiAlcyIKKworIzogb3B0aW9uLmM6NDQ2MgorbXNnaWQgIm9ubHkgb25lIHJlc29sdi5jb25mIGZpbGUgYWxsb3dlZCBpbiBuby1wb2xsIG1vZGUuIgorbXNnc3RyICJzZSBwZXJtaXRlIHVuIHNpbmd1ciBmacWfaWVyIHJlc29sdi5jb25mIMOubiBtb2R1bCBuby1wb2xsIgorCisjOiBvcHRpb24uYzo0NDcyCittc2dpZCAibXVzdCBoYXZlIGV4YWN0bHkgb25lIHJlc29sdi5jb25mIHRvIHJlYWQgZG9tYWluIGZyb20uIgorbXNnc3RyICJhbSBuZXZvaWUgZGUgdW4gc2luZ3VyIHJlc29sdi5jb25mIGRpbiBjYXJlIHPEgyBjaXRlc2MgbnVtZWxlIGRvbWVuaXVsdWkuIgorCisjOiBvcHRpb24uYzo0NDc1IG5ldHdvcmsuYzoxNTA2IGRoY3AuYzo3NjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzOiAlcyIKK21zZ3N0ciAibnUgcG90IGNpdGkgJXM6ICVzIgorCisjOiBvcHRpb24uYzo0NDkyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHNlYXJjaCBkaXJlY3RpdmUgZm91bmQgaW4gJXMiCittc2dzdHIgIm51IHMtYSBnxINzaXQgbmljaSB1biBjcml0ZXJpdSBkZSBjxIN1dGFyZSDDrm4gJXMiCisKKyM6IG9wdGlvbi5jOjQ1MTMKK21zZ2lkICJ0aGVyZSBtdXN0IGJlIGEgZGVmYXVsdCBkb21haW4gd2hlbiAtLWRoY3AtZnFkbiBpcyBzZXQiCittc2dzdHIgIiIKKworIzogb3B0aW9uLmM6NDUyMgorbXNnaWQgInN5bnRheCBjaGVjayBPSyIKK21zZ3N0ciAiIgorCisjOiBmb3J3YXJkLmM6MTE0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2VuZCBwYWNrZXQ6ICVzIgorbXNnc3RyICJhc2N1bHRhcmVhIHBlIHNvY2tldCBhIGXFn3VhdDogJXMiCisKKyM6IGZvcndhcmQuYzo1NzQKK21zZ2lkICJkaXNjYXJkaW5nIEROUyByZXBseTogc3VibmV0IG9wdGlvbiBtaXNtYXRjaCIKK21zZ3N0ciAiIgorCisjOiBmb3J3YXJkLmM6NTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5hbWVzZXJ2ZXIgJXMgcmVmdXNlZCB0byBkbyBhIHJlY3Vyc2l2ZSBxdWVyeSIKK21zZ3N0ciAic2VydmVydWwgRE5TICVzIHJlZnV6xIMgaW50ZXJvZ8SDcmlsZSByZWN1cnNpdmUiCisKKyM6IGZvcndhcmQuYzo2MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAicG9zc2libGUgRE5TLXJlYmluZCBhdHRhY2sgZGV0ZWN0ZWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGZvcndhcmQuYzoxMTMyIGZvcndhcmQuYzoxNjYzCittc2dpZCAiSWdub3JpbmcgcXVlcnkgZnJvbSBub24tbG9jYWwgbmV0d29yayIKK21zZ3N0ciAiIgorCisjOiBmb3J3YXJkLmM6MjEwMQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBETlMgcXVlcmllcyByZWFjaGVkIChtYXg6ICVkKSIKK21zZ3N0ciAiU3BlY2lmaWPEgyBudW3Eg3J1bCBtYXhpbSBkZSDDrm1wcnVtdXR1cmkgREhDUCAoaW1wbGljaXQgJXMpLiIKKworIzogbmV0d29yay5jOjcxNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaXN0ZW5pbmcgc29ja2V0IGZvciAlczogJXMiCittc2dzdHIgImNyZWVhcmVhIHNvY2tldC11bHVpIGRlIGFzY3VsdGFyZSBhIGXFn3VhdDogJXMiCisKKyM6IG5ldHdvcmsuYzoxMDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkxPVUQgV0FSTklORzogbGlzdGVuaW5nIG9uICVzIG1heSBhY2NlcHQgcmVxdWVzdHMgdmlhIGludGVyZmFjZXMgb3RoZXIgdGhhbiAlcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTAyOAorbXNnaWQgIkxPVUQgV0FSTklORzogdXNlIC0tYmluZC1keW5hbWljIHJhdGhlciB0aGFuIC0tYmluZC1pbnRlcmZhY2VzIHRvIGF2b2lkIEROUyBhbXBsaWZpY2F0aW9uIGF0dGFja3MgdmlhIHRoZXNlIGludGVyZmFjZShzKSIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTAzNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogbm8gYWRkcmVzc2VzIGZvdW5kIGZvciBpbnRlcmZhY2UgJXMiCittc2dzdHIgImZvbG9zaW0gYWRyZXNlbGUgbG9jYWxlIGRvYXIgcGVudHJ1ICVTICVzIgorCisjOiBuZXR3b3JrLmM6MTA5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiaW50ZXJmYWNlICVzIGZhaWxlZCB0byBqb2luIERIQ1B2NiBtdWx0aWNhc3QgZ3JvdXA6ICVzIgorbXNnc3RyICJhY3RpdmFyZWEgc29ja2V0LXVsdWkgc2VydmVyLXVsdWkgREhDUCBhIGXFn3VhdDogJXMiCisKKyM6IG5ldHdvcmsuYzoxMjg5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBzZXJ2ZXIgc29ja2V0IGZvciAlczogJXMiCittc2dzdHIgImFjdGl2YXJlYSBzb2NrZXQtdWx1aSBkZSBhc2N1bHRhcmUgcGVudHJ1ICVzIGEgZcWfdWF0OiAlcyIKKworIzogbmV0d29yay5jOjE0NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGxvY2FsIGludGVyZmFjZSIKK21zZ3N0ciAiaWdub3LEg20gc2VydmVydWwgRE5TICVzIC0gaW50ZXJmYcWjxIMgbG9jYWzEgyIKKworIzogbmV0d29yay5jOjE0NTUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIG5hbWVzZXJ2ZXIgJXMgLSBjYW5ub3QgbWFrZS9iaW5kIHNvY2tldDogJXMiCittc2dzdHIgImlnbm9yxINtIHNlcnZlcnVsIEROUyAlcyAtIG51IHBvdCBjcmVlYS9hY3RpdmEgc29ja2V0LXVsOiAlcyIKKworIzogbmV0d29yay5jOjE0NjgKK21zZ2lkICJ1bnF1YWxpZmllZCIKK21zZ3N0ciAiaW52YWxpZCIKKworIzogbmV0d29yay5jOjE0NjgKK21zZ2lkICJuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBuZXR3b3JrLmM6MTQ3MAorbXNnaWQgImRlZmF1bHQiCittc2dzdHIgIiIKKworIzogbmV0d29yay5jOjE0NzIKK21zZ2lkICJkb21haW4iCittc2dzdHIgImRvbWVuaXUiCisKKyM6IG5ldHdvcmsuYzoxNDc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVzaW5nIGxvY2FsIGFkZHJlc3NlcyBvbmx5IGZvciAlcyAlcyIKK21zZ3N0ciAiZm9sb3NpbSBhZHJlc2VsZSBsb2NhbGUgZG9hciBwZW50cnUgJVMgJXMiCisKKyM6IG5ldHdvcmsuYzoxNDc3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ1c2luZyBzdGFuZGFyZCBuYW1lc2VydmVycyBmb3IgJXMgJXMiCittc2dzdHIgImZvbG9zaW0gc2VydmVydWwgRE5TICVzIyVkIHBlbnRydSAlcyAlcyIKKworIzogbmV0d29yay5jOjE0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCBmb3IgJXMgJXMiCittc2dzdHIgImZvbG9zaW0gc2VydmVydWwgRE5TICVzIyVkIHBlbnRydSAlcyAlcyIKKworIzogbmV0d29yay5jOjE0ODMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIk5PVCB1c2luZyBuYW1lc2VydmVyICVzIyVkIC0gcXVlcnkgbG9vcCBkZXRlY3RlZCIKK21zZ3N0ciAiZm9sb3NpbSBzZXJ2ZXJ1bCBETlMgJXMjJWQgcGVudHJ1ICVzICVzIgorCisjOiBuZXR3b3JrLmM6MTQ4NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCh2aWEgJXMpIgorbXNnc3RyICJmb2xvc2ltIHNlcnZlcnVsIEROUyAlcyMlZCIKKworIzogbmV0d29yay5jOjE0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNpbmcgbmFtZXNlcnZlciAlcyMlZCIKK21zZ3N0ciAiZm9sb3NpbSBzZXJ2ZXJ1bCBETlMgJXMjJWQiCisKKyM6IGRuc21hc3EuYzoxNTQKK21zZ2lkICJObyB0cnVzdCBhbmNob3JzIHByb3ZpZGVkIGZvciBETlNTRUMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjE1NworbXNnaWQgIkNhbm5vdCByZWR1Y2UgY2FjaGUgc2l6ZSBmcm9tIGRlZmF1bHQgd2hlbiBETlNTRUMgZW5hYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTU5CisjLCBmdXp6eQorbXNnaWQgIkROU1NFQyBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9ETlNTRUMgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJEQnVzIG51IGVzdGUgZGlzcG9uaWJpbDogcHVuZcWjaSBIQVZFX0RCVVMgaW4gc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MTY1CisjLCBmdXp6eQorbXNnaWQgIlRGVFAgc2VydmVyIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX1RGVFAgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJEQnVzIG51IGVzdGUgZGlzcG9uaWJpbDogcHVuZcWjaSBIQVZFX0RCVVMgaW4gc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MTcwCittc2dpZCAiQ2Fubm90IHVzZSAtLWNvbm50cmFjayBBTkQgLS1xdWVyeS1wb3J0IgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxNzMKKyMsIGZ1enp5Cittc2dpZCAiQ29ubnRyYWNrIHN1cHBvcnQgbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfQ09OTlRSQUNLIGluIHNyYy9jb25maWcuaCIKK21zZ3N0ciAiREJ1cyBudSBlc3RlIGRpc3BvbmliaWw6IHB1bmXFo2kgSEFWRV9EQlVTIGluIHNyYy9jb25maWcuaCIKKworIzogZG5zbWFzcS5jOjE3OAorbXNnaWQgImFzeWNocm9ub3VzIGxvZ2dpbmcgaXMgbm90IGF2YWlsYWJsZSB1bmRlciBTb2xhcmlzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxODMKK21zZ2lkICJhc3ljaHJvbm91cyBsb2dnaW5nIGlzIG5vdCBhdmFpbGFibGUgdW5kZXIgQW5kcm9pZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTg4CisjLCBmdXp6eQorbXNnaWQgImF1dGhvcml0YXRpdmUgRE5TIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0FVVEggaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJEQnVzIG51IGVzdGUgZGlzcG9uaWJpbDogcHVuZcWjaSBIQVZFX0RCVVMgaW4gc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MTkzCisjLCBmdXp6eQorbXNnaWQgIkxvb3AgZGV0ZWN0aW9uIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0xPT1AgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJEQnVzIG51IGVzdGUgZGlzcG9uaWJpbDogcHVuZcWjaSBIQVZFX0RCVVMgaW4gc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MjAxCittc2dpZCAiem9uZSBzZXJpYWwgbXVzdCBiZSBjb25maWd1cmVkIGluIC0tYXV0aC1zb2EiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjIxOQorbXNnaWQgImRoY3AtcmFuZ2UgY29uc3RydWN0b3Igbm90IGF2YWlsYWJsZSBvbiB0aGlzIHBsYXRmb3JtIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoyNjIKK21zZ2lkICJjYW5ub3Qgc2V0IC0tYmluZC1pbnRlcmZhY2VzIGFuZCAtLWJpbmQtZHluYW1pYyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5kIGxpc3Qgb2YgaW50ZXJmYWNlczogJXMiCittc2dzdHIgImVudW1lcmFyZWEgaW50ZXJmZcWjZWxvciBhIGXFn3VhdDogJXMiCisKKyM6IGRuc21hc3EuYzoyNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBpbnRlcmZhY2UgJXMiCittc2dzdHIgImludGVyZmHFo8SDIG5lY3Vub3NjdXTEgyAlcyIKKworIzogZG5zbWFzcS5jOjMzMCBkbnNtYXNxLmM6OTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRCdXMgZXJyb3I6ICVzIgorbXNnc3RyICJlcm9hcmUgREJ1czogJXMiCisKKyM6IGRuc21hc3EuYzozMzMKK21zZ2lkICJEQnVzIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0RCVVMgaW4gc3JjL2NvbmZpZy5oIgorbXNnc3RyICJEQnVzIG51IGVzdGUgZGlzcG9uaWJpbDogcHVuZcWjaSBIQVZFX0RCVVMgaW4gc3JjL2NvbmZpZy5oIgorCisjOiBkbnNtYXNxLmM6MzYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdXNlciBvciBncm91cDogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjQxNgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gZmlsZXN5c3RlbSByb290OiAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NjUzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIEROUyBkaXNhYmxlZCIKK21zZ3N0ciAiYW0gcG9ybml0LCB2ZXJzaXVuZWEgJXMgbWVtb3JpZSB0ZW1wb3JhcsSDIGRlemFjdGl2YXTEgyIKKworIzogZG5zbWFzcS5jOjY1NQorIywgYy1mb3JtYXQKK21zZ2lkICJzdGFydGVkLCB2ZXJzaW9uICVzIGNhY2hlc2l6ZSAlZCIKK21zZ3N0ciAiYW0gcG9uaXQsIHZlcnNpdW5lYSAlcyBtZW1vcmllIHRlbXBvcmFyxIMgJWQiCisKKyM6IGRuc21hc3EuYzo2NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhcnRlZCwgdmVyc2lvbiAlcyBjYWNoZSBkaXNhYmxlZCIKK21zZ3N0ciAiYW0gcG9ybml0LCB2ZXJzaXVuZWEgJXMgbWVtb3JpZSB0ZW1wb3JhcsSDIGRlemFjdGl2YXTEgyIKKworIzogZG5zbWFzcS5jOjY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21waWxlIHRpbWUgb3B0aW9uczogJXMiCittc2dzdHIgImNvbXBpbGF0IGN1IG9wxaNpdW5pbGU6ICVzIgorCisjOiBkbnNtYXNxLmM6NjY1Cittc2dpZCAiREJ1cyBzdXBwb3J0IGVuYWJsZWQ6IGNvbm5lY3RlZCB0byBzeXN0ZW0gYnVzIgorbXNnc3RyICJzdXBvcnR1bCBEQnVzIGFjdGl2OiBzdW50IGNvbmVjdGF0IGxhIG1hZ2lzdHJhbGEgc2lzdGVtIgorCisjOiBkbnNtYXNxLmM6NjY3Cittc2dpZCAiREJ1cyBzdXBwb3J0IGVuYWJsZWQ6IGJ1cyBjb25uZWN0aW9uIHBlbmRpbmciCittc2dzdHIgInN1cG9ydHVsIERCdXMgYWN0aXY6IGHFn3RlcHQgY29uZXhpdW5lYSBsYSBtYWdpc3RyYWzEgyIKKworIzogZG5zbWFzcS5jOjY3MgorbXNnaWQgIkROUyBzZXJ2aWNlIGxpbWl0ZWQgdG8gbG9jYWwgc3VibmV0cyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6Njc3Cittc2dpZCAiRE5TU0VDIHZhbGlkYXRpb24gZW5hYmxlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6Njc5Cittc2dpZCAiRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzIG5vdCBjaGVja2VkIHVudGlsIGZpcnN0IGNhY2hlIHJlbG9hZCIKK21zZ3N0ciAiIgorCisjIGZvciBjb21wYXRpYmlsaXR5IHB1cnBvc2VzIHRoZSBsZXR0ZXJzIMOiLCDEgywgxZ8sIMWjIGFuZCDDriBjYW4gYmUgd3JpdHRlbiBhcyB0aGVpciBsb29rLWFsaWtlIGNvcnJlc3BvbmRlbnQuCisjOiBkbnNtYXNxLmM6Njg0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBmYWlsZWQgdG8gY2hhbmdlIG93bmVyIG9mICVzOiAlcyIKK21zZ3N0ciAiw65uY8SDcmNhcmVhIG51bWVsb3IgZGluICVzOiAlcyBhIGXFn3VhdCIKKworIzogZG5zbWFzcS5jOjY4OAorbXNnaWQgInNldHRpbmcgLS1iaW5kLWludGVyZmFjZXMgb3B0aW9uIGJlY2F1c2Ugb2YgT1MgbGltaXRhdGlvbnMiCittc2dzdHIgInNwZWNpZmljIG9wxaNpdW5lYSAtLWJpbmQtaW50ZXJmYWNlcyBkaW4gY2F1emEgbGltaXTEg3JpbG9yIFNPIgorCisjOiBkbnNtYXNxLmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IGludGVyZmFjZSAlcyBkb2VzIG5vdCBjdXJyZW50bHkgZXhpc3QiCittc2dzdHIgImF0ZW7Fo2llOiBpbnRlcmZhxaNhICVzIG51IGV4aXN0xIMgbW9tZW50YW4iCisKKyM6IGRuc21hc3EuYzo3MDMKK21zZ2lkICJ3YXJuaW5nOiBpZ25vcmluZyByZXNvbHYtZmlsZSBmbGFnIGJlY2F1c2Ugbm8tcmVzb2x2IGlzIHNldCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzA2CisjLCBmdXp6eQorbXNnaWQgIndhcm5pbmc6IG5vIHVwc3RyZWFtIHNlcnZlcnMgY29uZmlndXJlZCIKK21zZ3N0ciAiY29uZmlndXLEg20gc2VydmVyZWxlIHN1cGVyaW9hcmUgcHJpbiBEYnVzIgorCisjOiBkbnNtYXNxLmM6NzEwCisjLCBjLWZvcm1hdAorbXNnaWQgImFzeW5jaHJvbm91cyBsb2dnaW5nIGVuYWJsZWQsIHF1ZXVlIGxpbWl0IGlzICVkIG1lc3NhZ2VzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzo3MzEKK21zZ2lkICJJUHY2IHJvdXRlciBhZHZlcnRpc2VtZW50IGVuYWJsZWQiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJESENQLCBzb2NrZXRzIGJvdW5kIGV4Y2x1c2l2ZWx5IHRvIGludGVyZmFjZSAlcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6NzUzCittc2dpZCAicm9vdCBpcyAiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc1MworIywgZnV6enkKK21zZ2lkICJlbmFibGVkIgorbXNnc3RyICJkZXphY3RpdmF0IgorCisjOiBkbnNtYXNxLmM6NzU1Cittc2dpZCAic2VjdXJlIG1vZGUiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJyZXN0cmljdGluZyBtYXhpbXVtIHNpbXVsdGFuZW91cyBURlRQIHRyYW5zZmVycyB0byAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6OTU2Cittc2dpZCAiY29ubmVjdGVkIHRvIHN5c3RlbSBEQnVzIgorbXNnc3RyICJtYWdpc3RyYWxhIHNpc3RlbSBEYnVzIGNvbmVjdGF0xIMiCisKKyM6IGRuc21hc3EuYzoxMTA2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmb3JrIGludG8gYmFja2dyb3VuZDogJXMiCittc2dzdHIgIiIKKworIzogZG5zbWFzcS5jOjExMDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgaGVscGVyOiAlcyIKK21zZ3N0ciAibnUgcG90IGNpdGkgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTExMgorIywgYy1mb3JtYXQKK21zZ2lkICJzZXR0aW5nIGNhcGFiaWxpdGllcyBmYWlsZWQ6ICVzIgorbXNnc3RyICIiCisKKyMgZm9yIGNvbXBhdGliaWxpdHkgcHVycG9zZXMgdGhlIGxldHRlcnMgw6IsIMSDLCDFnywgxaMgYW5kIMOuIGNhbiBiZSB3cml0dGVuIGFzIHRoZWlyIGxvb2stYWxpa2UgY29ycmVzcG9uZGVudC4KKyM6IGRuc21hc3EuYzoxMTE1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2hhbmdlIHVzZXItaWQgdG8gJXM6ICVzIgorbXNnc3RyICLDrm5jxINyY2FyZWEgbnVtZWxvciBkaW4gJXM6ICVzIGEgZcWfdWF0IgorCisjIGZvciBjb21wYXRpYmlsaXR5IHB1cnBvc2VzIHRoZSBsZXR0ZXJzIMOiLCDEgywgxZ8sIMWjIGFuZCDDriBjYW4gYmUgd3JpdHRlbiBhcyB0aGVpciBsb29rLWFsaWtlIGNvcnJlc3BvbmRlbnQuCisjOiBkbnNtYXNxLmM6MTExOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNoYW5nZSBncm91cC1pZCB0byAlczogJXMiCittc2dzdHIgIsOubmPEg3JjYXJlYSBudW1lbG9yIGRpbiAlczogJXMgYSBlxZ91YXQiCisKKyM6IGRuc21hc3EuYzoxMTIxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiBwaWRmaWxlICVzOiAlcyIKK21zZ3N0ciAibnUgcG90IGNpdGkgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTEyNAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gbG9nICVzOiAlcyIKK21zZ3N0ciAibnUgcG90IGRlc2NoaWRlICVzOiVzIgorCisjOiBkbnNtYXNxLmM6MTEyNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGxvYWQgTHVhIHNjcmlwdDogJXMiCittc2dzdHIgIm51IHBvdCDDrm5jxINyY2EgJXM6ICVzIgorCisjOiBkbnNtYXNxLmM6MTEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJURlRQIGRpcmVjdG9yeSAlcyBpbmFjY2Vzc2libGU6ICVzIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMTUxCittc2dpZCAibm93IGNoZWNraW5nIEROU1NFQyBzaWduYXR1cmUgdGltZXN0YW1wcyIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTIxOAorIywgYy1mb3JtYXQKK21zZ2lkICJzY3JpcHQgcHJvY2VzcyBraWxsZWQgYnkgc2lnbmFsICVkIgorbXNnc3RyICIiCisKKyM6IGRuc21hc3EuYzoxMjIyCisjLCBjLWZvcm1hdAorbXNnaWQgInNjcmlwdCBwcm9jZXNzIGV4aXRlZCB3aXRoIHN0YXR1cyAlZCIKK21zZ3N0ciAiIgorCisjOiBkbnNtYXNxLmM6MTIyNgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4ZWN1dGUgJXM6ICVzIgorbXNnc3RyICJhY2Nlc2FyZWEgc2VydmVydWx1aSAlcyBhIGXFn3VhdDogJXMiCisKKyM6IGRuc21hc3EuYzoxMjgxCittc2dpZCAiZXhpdGluZyBvbiByZWNlaXB0IG9mIFNJR1RFUk0iCittc2dzdHIgImFtIHByaW1pdCBTSUdURVJNLCBhbSB0ZXJtaW5hdCIKKworIzogZG5zbWFzcS5jOjEzMDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBhY2Nlc3MgJXM6ICVzIgorbXNnc3RyICJhY2Nlc2FyZWEgc2VydmVydWx1aSAlcyBhIGXFn3VhdDogJXMiCisKKyM6IGRuc21hc3EuYzoxMzM5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgJXMiCittc2dzdHIgImNpdGVzYyAlcyIKKworIzogZG5zbWFzcS5jOjEzNTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm5vIHNlcnZlcnMgZm91bmQgaW4gJXMsIHdpbGwgcmV0cnkiCittc2dzdHIgIm51IHMtYSBnxINzaXQgbmljaSB1biBjcml0ZXJpdSBkZSBjxIN1dGFyZSDDrm4gJXMiCisKKyM6IGRoY3AuYzo1MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAibnUgcG90IGNyZWVhIHNvY2tldCBESENQOiAlcyIKKworIzogZGhjcC5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgb3B0aW9ucyBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgImNvbmZpZ3VyYXJlYSBvcMWjaXVuaWxvciBzb2NrZXR1bHVpIERIQ1AgYSBlxZ91YXQ6ICVzIgorCisjOiBkaGNwLmM6ODkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgU09fUkVVU0V7QUREUnxQT1JUfSBvbiBESENQIHNvY2tldDogJXMiCittc2dzdHIgImNvbmZpZ3VyYXJlYSBTT19SRVVTRUFERFIgcGUgc29ja2V0LXVsIERIQ1AgYSBlxZ91YXQ6ICVzIgorCisjOiBkaGNwLmM6MTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBiaW5kIERIQ1Agc2VydmVyIHNvY2tldDogJXMiCittc2dzdHIgImFjdGl2YXJlYSBzb2NrZXQtdWx1aSBzZXJ2ZXItdWx1aSBESENQIGEgZcWfdWF0OiAlcyIKKworIzogZGhjcC5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIElDTVAgcmF3IHNvY2tldDogJXMuIgorbXNnc3RyICJudSBwb3QgY3JlZWEgc29ja2V0IElDTVAgcmF3OiAlcy4iCisKKyM6IGRoY3AuYzoyMzkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gaW50ZXJmYWNlICVzIGluIGJyaWRnZS1pbnRlcmZhY2UiCittc2dzdHIgImludGVyZmHFo8SDIG5lY3Vub3NjdXTEgyAlcyIKKworIzogZGhjcC5jOjI3OAorIywgYy1mb3JtYXQKK21zZ2lkICJESENQIHBhY2tldCByZWNlaXZlZCBvbiAlcyB3aGljaCBoYXMgbm8gYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6NDA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFSUC1jYWNoZSBpbmplY3Rpb24gZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6NTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmFuZ2UgJXMgLS0gJXMgaXMgbm90IGNvbnNpc3RlbnQgd2l0aCBuZXRtYXNrICVzIgorbXNnc3RyICJkb21lbml1IERIQ1AgJXMgLS0gJXMgbnUgZXN0ZSBjb25zaXN0ZW50IGN1IG1hc2NhIGRlIHJlxaNlYSAlcyIKKworIzogZGhjcC5jOjgwNworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbGluZSBhdCAlcyBsaW5lICVkIgorbXNnc3RyICJsaW5pZSBpbnZhbGlkxIMgw65uICVzIHLDom5kdWwgJWQiCisKKyM6IGRoY3AuYzo4NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgJXMgbGluZSAlZCwgZHVwbGljYXRlIG5hbWUgb3IgSVAgYWRkcmVzcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLmM6OTk0IHJmYzMzMTUuYzoyMDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVsYXkgJXMgLT4gJXMiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzo2MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gb3IgY3JlYXRlIGxlYXNlIGZpbGUgJXM6ICVzIgorbXNnc3RyICJudSBwb3QgY3JlZWEgc2F1IGRlc2NoaWRlIGZpxZ9pZXJ1bCBjdSDDrm1wcnVtdXR1cmk6ICVzIgorCisjOiBsZWFzZS5jOjEzNAorbXNnaWQgInRvbyBtYW55IHN0b3JlZCBsZWFzZXMiCittc2dzdHIgInByZWEgbXVsdGUgw65tcHJ1bXV0dXJpIHN0b2NhdGUiCisKKyM6IGxlYXNlLmM6MTY1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcnVuIGxlYXNlLWluaXQgc2NyaXB0ICVzOiAlcyIKK21zZ3N0ciAibnUgcG90IGNpdGkgJXM6ICVzIgorCisjOiBsZWFzZS5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICJsZWFzZS1pbml0IHNjcmlwdCByZXR1cm5lZCBleGl0IGNvZGUgJXMiCittc2dzdHIgIiIKKworIzogbGVhc2UuYzozNDIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSAlczogJXMgKHJldHJ5IGluICV1cykiCittc2dzdHIgIm51IHBvdCBjaXRpICVzOiAlcyIKKworIzogbGVhc2UuYzo5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWdub3JpbmcgZG9tYWluICVzIGZvciBESENQIGhvc3QgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQIHJlcXVlc3QgJXMgJXMiCittc2dzdHIgIm5pY2kgdW4gZG9tZW5pdSBkZSBhZHJlc2UgZGlzcG9uaWJpbCBwZW50cnUgY2VyZXJlYSBESENQICVzICVzIgorCisjOiByZmMyMTMxLmM6MzQzCittc2dpZCAid2l0aCBzdWJuZXQgc2VsZWN0b3IiCittc2dzdHIgImN1IHNlbGVjdG9ydWwgZGUgc3VicmXFo2VhIgorCisjOiByZmMyMTMxLmM6MzQzCittc2dpZCAidmlhIgorbXNnc3RyICJwcmluIgorCisjOiByZmMyMTMxLmM6MzU1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSBhdmFpbGFibGUgREhDUCBzdWJuZXQ6ICVzLyVzIgorbXNnc3RyICJuaWNpIHVuIGRvbWVuaXUgZGUgYWRyZXNlIGRpc3BvbmliaWwgcGVudHJ1IGNlcmVyZWEgREhDUCAlcyAlcyIKKworIzogcmZjMjEzMS5jOjM1OCByZmMzMzE1LmM6MzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGF2YWlsYWJsZSBESENQIHJhbmdlOiAlcyAtLSAlcyIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6NDY5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSB2ZW5kb3IgY2xhc3M6ICVzIgorbXNnc3RyICJlcm9hcmUgREJ1czogJXMiCisKKyM6IHJmYzIxMzEuYzo0NzEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IHVzZXIgY2xhc3M6ICVzIgorbXNnc3RyICJlcm9hcmUgREJ1czogJXMiCisKKyM6IHJmYzIxMzEuYzo0OTgKK21zZ2lkICJkaXNhYmxlZCIKK21zZ3N0ciAiZGV6YWN0aXZhdCIKKworIzogcmZjMjEzMS5jOjUzOSByZmMyMTMxLmM6OTY3IHJmYzIxMzEuYzoxMzg1IHJmYzMzMTUuYzo2MDIgcmZjMzMxNS5jOjgyMworIzogcmZjMzMxNS5jOjEwOTUKK21zZ2lkICJpZ25vcmVkIgorbXNnc3RyICJpZ25vcmF0IgorCisjOiByZmMyMTMxLmM6NTU0IHJmYzIxMzEuYzoxMjA1IHJmYzMzMTUuYzo4NzMKK21zZ2lkICJhZGRyZXNzIGluIHVzZSIKK21zZ3N0ciAiYWRyZXNhIGVzdGUgZm9sb3NpdMSDIgorCisjOiByZmMyMTMxLmM6NTY4IHJmYzIxMzEuYzoxMDIxCittc2dpZCAibm8gYWRkcmVzcyBhdmFpbGFibGUiCittc2dzdHIgIm5pY2kgbyBhZHJlc8SDIGRpc3BvbmliaWzEgyIKKworIzogcmZjMjEzMS5jOjU3NSByZmMyMTMxLmM6MTE2OAorbXNnaWQgIndyb25nIG5ldHdvcmsiCittc2dzdHIgInJlxaNlYSBncmXFn2l0xIMiCisKKyM6IHJmYzIxMzEuYzo1OTAKK21zZ2lkICJubyBhZGRyZXNzIGNvbmZpZ3VyZWQiCittc2dzdHIgImFkcmVzxIMgbGlwc8SDIgorCisjOiByZmMyMTMxLmM6NTk2IHJmYzIxMzEuYzoxMjE4Cittc2dpZCAibm8gbGVhc2VzIGxlZnQiCittc2dzdHIgIm51IG1haSBhbSBkZSB1bmRlIHPEgyDDrm1wcnVtdXQiCisKKyM6IHJmYzIxMzEuYzo2OTEgcmZjMzMxNS5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICIldSBjbGllbnQgcHJvdmlkZXMgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjc5NgorbXNnaWQgIlBYRSBCSVMgbm90IHN1cHBvcnRlZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6OTM1IHJmYzMzMTUuYzoxMTg5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJkaXNhYmxpbmcgREhDUCBzdGF0aWMgYWRkcmVzcyAlcyBmb3IgJXMiCittc2dzdHIgImRlemFjdGl2xINtIGFkcmVzZWxlIERIQ1Agc3RhdGljZSAlcyIKKworIzogcmZjMjEzMS5jOjk1NgorbXNnaWQgInVua25vd24gbGVhc2UiCittc2dzdHIgIsOubXBydW11dCBuZWN1bm9zY3V0IgorCisjOiByZmMyMTMxLmM6OTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCBpcyBsZWFzZWQgdG8gJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjEwMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IGlzIGluIHVzZSBieSB0aGUgc2VydmVyIG9yIHJlbGF5IgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoxMDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCB3YXMgcHJldmlvdXNseSBkZWNsaW5lZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTAxOSByZmMyMTMxLmM6MTIxMQorbXNnaWQgIm5vIHVuaXF1ZS1pZCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTEwNgorbXNnaWQgIndyb25nIHNlcnZlci1JRCIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTEyNQorbXNnaWQgIndyb25nIGFkZHJlc3MiCittc2dzdHIgImFkcmVzxIMgZ3JlxZ9pdMSDIgorCisjOiByZmMyMTMxLmM6MTE0MyByZmMzMzE1LmM6OTY5Cittc2dpZCAibGVhc2Ugbm90IGZvdW5kIgorbXNnc3RyICLDrm1wcnVtdXR1bCBudSBhIGZvc3QgZ8SDc2l0IgorCisjOiByZmMyMTMxLmM6MTE3NgorbXNnaWQgImFkZHJlc3Mgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAiYWRyZXPEgyBpbmRpc3BvbmliaWzEgyIKKworIzogcmZjMjEzMS5jOjExODcKK21zZ2lkICJzdGF0aWMgbGVhc2UgYXZhaWxhYmxlIgorbXNnc3RyICLDrm1wcnVtdXQgc3RhdGljIGVzdGUgZGlzcG9uaWJpbCIKKworIzogcmZjMjEzMS5jOjExOTEKK21zZ2lkICJhZGRyZXNzIHJlc2VydmVkIgorbXNnc3RyICJhZHJlc8SDIHJlemVydmF0xIMiCisKKyM6IHJmYzIxMzEuYzoxMTk5CisjLCBjLWZvcm1hdAorbXNnaWQgImFiYW5kb25pbmcgbGVhc2UgdG8gJXMgb2YgJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE3MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgYm9vdGZpbGUgbmFtZTogJXMiCittc2dzdHIgIiIKKworIzogcmZjMjEzMS5jOjE3MjEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiV1IHNlcnZlciBuYW1lOiAlcyIKK21zZ3N0ciAiZXJvYXJlIERCdXM6ICVzIgorCisjOiByZmMyMTMxLmM6MTcyOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXUgbmV4dCBzZXJ2ZXI6ICVzIgorbXNnc3RyICJlcm9hcmUgREJ1czogJXMiCisKKyM6IHJmYzIxMzEuYzoxNzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiV1IGJyb2FkY2FzdCByZXNwb25zZSIKK21zZ3N0ciAiIgorCisjOiByZmMyMTMxLmM6MTc5NQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHNlbmQgREhDUC9CT09UUCBvcHRpb24gJWQ6IG5vIHNwYWNlIGxlZnQgaW4gcGFja2V0IgorbXNnc3RyICJudSBwb3QgdHJpbWl0ZSBvcMWjaXVuZWEgREhDUCAlZDogbnUgbWFpIGVzdGUgbG9jIMOubiBwYWNoZXQiCisKKyM6IHJmYzIxMzEuYzoyMDM2Cittc2dpZCAiUFhFIG1lbnUgdG9vIGxhcmdlIgorbXNnc3RyICIiCisKKyM6IHJmYzIxMzEuYzoyMTczIHJmYzMzMTUuYzoxNDU2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSByZXF1ZXN0ZWQgb3B0aW9uczogJXMiCittc2dzdHIgImNvbXBpbGF0IGN1IG9wxaNpdW5pbGU6ICVzIgorCisjOiByZmMyMTMxLmM6MjQ1MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc2VuZCBSRkMzOTI1IG9wdGlvbjogdG9vIG1hbnkgb3B0aW9ucyBmb3IgZW50ZXJwcmlzZSBudW1iZXIgJWQiCittc2dzdHIgIiIKKworIzogbmV0bGluay5jOjc3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIG5ldGxpbmsgc29ja2V0OiAlcyIKK21zZ3N0ciAibnUgcG90IHPEgyBhY3RpdmV6IHNvY2tldC11bCBuZXRsaW5rOiAlcyIKKworIzogbmV0bGluay5jOjM0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibmV0bGluayByZXR1cm5zIGVycm9yOiAlcyIKK21zZ3N0ciAiZXJvYXJlIERCdXM6ICVzIgorCisjOiBkYnVzLmM6MTcxCittc2dpZCAiYXR0ZW1wdCB0byBzZXQgYW4gSVB2NiBzZXJ2ZXIgYWRkcmVzcyB2aWEgREJ1cyAtIG5vIElQdjYgc3VwcG9ydCIKK21zZ3N0ciAiaW5jZXJjIHPEgyBjb25maWd1cmV6IHVuIHNlcnZlciBJUHY2IHByaW4gRGJ1cyAtIG51IGVzdGUgc3Vwb3J0IElQdjYiCisKKyM6IGRidXMuYzo1MDAKK21zZ2lkICJzZXR0aW5nIHVwc3RyZWFtIHNlcnZlcnMgZnJvbSBEQnVzIgorbXNnc3RyICJjb25maWd1csSDbSBzZXJ2ZXJlbGUgc3VwZXJpb2FyZSBwcmluIERidXMiCisKKyM6IGRidXMuYzo1NDcKK21zZ2lkICJjb3VsZCBub3QgcmVnaXN0ZXIgYSBEQnVzIG1lc3NhZ2UgaGFuZGxlciIKK21zZ3N0ciAibnUgcG90IGFjdGl2YSBvIGludGVyZmHFo8SDIGRlIG1lc2FqZSBEQnVzIgorCisjOiBicGYuYzoyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBESENQIEJQRiBzb2NrZXQ6ICVzIgorbXNnc3RyICJudSBwb3QgY3JlZWEgc29ja2V0IERIQ1AgQlBGOiAlcyIKKworIzogYnBmLmM6MjkxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJESENQIHJlcXVlc3QgZm9yIHVuc3VwcG9ydGVkIGhhcmR3YXJlIHR5cGUgKCVkKSByZWNlaXZlZCBvbiAlcyIKK21zZ3N0ciAiY2VyZXJlIERIQ1AgcGVudHJ1IGRpc3Bveml0aXYgbmVzdXBvcnRhdCAoJWQpIHJlY2VwxaNpb25hdMSDIHByaW4gJXMiCisKKyM6IGJwZi5jOjM3NgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBQRl9ST1VURSBzb2NrZXQ6ICVzIgorbXNnc3RyICJudSBwb3QgY3JlZWEgc29ja2V0IERIQ1A6ICVzIgorCisjOiBicGYuYzozOTcKK21zZ2lkICJVbmtub3duIHByb3RvY29sIHZlcnNpb24gZnJvbSByb3V0ZSBzb2NrZXQiCittc2dzdHIgIiIKKworIzogaGVscGVyLmM6MTUzCittc2dpZCAibGVhc2UoKSBmdW5jdGlvbiBtaXNzaW5nIGluIEx1YSBzY3JpcHQiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjMwOQorbXNnaWQgInVuYWJsZSB0byBnZXQgZnJlZSBwb3J0IGZvciBURlRQIgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzozMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgcmVxdWVzdCBmcm9tICVzIgorbXNnc3RyICIiCisKKyM6IHRmdHAuYzo0MzkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZpbGUgJXMgbm90IGZvdW5kIgorbXNnc3RyICLDrm1wcnVtdXR1bCBudSBhIGZvc3QgZ8SDc2l0IgorCisjOiB0ZnRwLmM6NTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImVycm9yICVkICVzIHJlY2VpdmVkIGZyb20gJXMiCittc2dzdHIgIiIKKworIzogdGZ0cC5jOjU5MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHNlbmRpbmcgJXMgdG8gJXMiCittc2dzdHIgIm51IHBvdCBjaXRpICVzOiAlcyIKKworIzogdGZ0cC5jOjU5MAorIywgYy1mb3JtYXQKK21zZ2lkICJzZW50ICVzIHRvICVzIgorbXNnc3RyICIiCisKKyM6IGxvZy5jOjE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyZmxvdzogJWQgbG9nIGVudHJpZXMgbG9zdCIKK21zZ3N0ciAiIgorCisjOiBsb2cuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9nIGZhaWxlZDogJXMiCittc2dzdHIgIiIKKworIzogbG9nLmM6NDcyCittc2dpZCAiRkFJTEVEIHRvIHN0YXJ0IHVwIgorbXNnc3RyICJwb3JuaXJlYSBBIEXFnlVBVCIKKworIzogY29ubnRyYWNrLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ubnRyYWNrIGNvbm5lY3Rpb24gbWFyayByZXRyaWV2YWwgZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwNi5jOjU5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIERIQ1B2NiBzb2NrZXQ6ICVzIgorbXNnc3RyICJudSBwb3QgY3JlZWEgc29ja2V0IERIQ1A6ICVzIgorCisjOiBkaGNwNi5jOjgwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc2V0IFNPX1JFVVNFe0FERFJ8UE9SVH0gb24gREhDUHY2IHNvY2tldDogJXMiCittc2dzdHIgImNvbmZpZ3VyYXJlYSBTT19SRVVTRUFERFIgcGUgc29ja2V0LXVsIERIQ1AgYSBlxZ91YXQ6ICVzIgorCisjOiBkaGNwNi5jOjkyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gYmluZCBESENQdjYgc2VydmVyIHNvY2tldDogJXMiCittc2dzdHIgImFjdGl2YXJlYSBzb2NrZXQtdWx1aSBzZXJ2ZXItdWx1aSBESENQIGEgZcWfdWF0OiAlcyIKKworIzogcmZjMzMxNS5jOjE1NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibm8gYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgZm9yIERIQ1B2NiByZXF1ZXN0IGZyb20gcmVsYXkgYXQgJXMiCittc2dzdHIgIm5pY2kgdW4gZG9tZW5pdSBkZSBhZHJlc2UgZGlzcG9uaWJpbCBwZW50cnUgY2VyZXJlYSBESENQICVzICVzIgorCisjOiByZmMzMzE1LmM6MTY2CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJubyBhZGRyZXNzIHJhbmdlIGF2YWlsYWJsZSBmb3IgREhDUHY2IHJlcXVlc3QgdmlhICVzIgorbXNnc3RyICJuaWNpIHVuIGRvbWVuaXUgZGUgYWRyZXNlIGRpc3BvbmliaWwgcGVudHJ1IGNlcmVyZWEgREhDUCAlcyAlcyIKKworIzogcmZjMzMxNS5jOjI5NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXUgYXZhaWxhYmxlIERIQ1B2NiBzdWJuZXQ6ICVzLyVkIgorbXNnc3RyICJuaWNpIHVuIGRvbWVuaXUgZGUgYWRyZXNlIGRpc3BvbmliaWwgcGVudHJ1IGNlcmVyZWEgREhDUCAlcyAlcyIKKworIzogcmZjMzMxNS5jOjM3OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiJXUgdmVuZG9yIGNsYXNzOiAldSIKK21zZ3N0ciAiZXJvYXJlIERCdXM6ICVzIgorCisjOiByZmMzMzE1LmM6NDI3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIldSBjbGllbnQgTUFDIGFkZHJlc3M6ICVzIgorbXNnc3RyICJudSBleGlzdGEgaW50ZXJmYcWjxIMgcGVudHJ1IGFkcmVzYSAlcyIKKworIzogcmZjMzMxNS5jOjY1OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBwcmVmaXgtY2xhc3MgJWQiCittc2dzdHIgIsOubXBydW11dCBuZWN1bm9zY3V0IgorCisjOiByZmMzMzE1LmM6NzkxIHJmYzMzMTUuYzo5MTMKK21zZ2lkICJzdWNjZXNzIgorbXNnc3RyICIiCisKKyM6IHJmYzMzMTUuYzo4MDYgcmZjMzMxNS5jOjgwOCByZmMzMzE1LmM6OTIxIHJmYzMzMTUuYzo5MjMKKyMsIGZ1enp5Cittc2dpZCAibm8gYWRkcmVzc2VzIGF2YWlsYWJsZSIKK21zZ3N0ciAibmljaSBvIGFkcmVzxIMgZGlzcG9uaWJpbMSDIgorCisjOiByZmMzMzE1LmM6ODY1CisjLCBmdXp6eQorbXNnaWQgImFkZHJlc3MgdW5hdmFpbGFibGUiCittc2dzdHIgImFkcmVzxIMgaW5kaXNwb25pYmlsxIMiCisKKyM6IHJmYzMzMTUuYzo5MDAKK21zZ2lkICJub3Qgb24gbGluayIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6OTczIHJmYzMzMTUuYzoxMTUxIHJmYzMzMTUuYzoxMjI4Cittc2dpZCAibm8gYmluZGluZyBmb3VuZCIKK21zZ3N0ciAiIgorCisjOiByZmMzMzE1LmM6MTAxMQorbXNnaWQgImRlcHJlY2F0ZWQiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjEwMTYKKyMsIGZ1enp5Cittc2dpZCAiYWRkcmVzcyBpbnZhbGlkIgorbXNnc3RyICJhZHJlc2EgZXN0ZSBmb2xvc2l0xIMiCisKKyM6IHJmYzMzMTUuYzoxMDYxCittc2dpZCAiY29uZmlybSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjEwNzIKKyMsIGZ1enp5Cittc2dpZCAiYWxsIGFkZHJlc3NlcyBzdGlsbCBvbiBsaW5rIgorbXNnc3RyICJhZHJlc8SDIGdyZcWfaXTEgyDDrm4gJXMsIGxpbmlhICVkIgorCisjOiByZmMzMzE1LmM6MTE2MAorbXNnaWQgInJlbGVhc2UgcmVjZWl2ZWQiCittc2dzdHIgIiIKKworIzogcmZjMzMxNS5jOjIwODAKK21zZ2lkICJDYW5ub3QgbXVsdGljYXN0IHRvIERIQ1B2NiBzZXJ2ZXIgd2l0aG91dCBjb3JyZWN0IGludGVyZmFjZSIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJJZ25vcmluZyBkdXBsaWNhdGUgZGhjcC1vcHRpb24gJWQiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXUgdGFnczogJXMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo0MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG1vcmUgdGhhbiBvbmUgYWRkcmVzcyBpbiBob3N0c2ZpbGUsIHVzaW5nICVzIGZvciBESENQIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgImR1cGxpY2F0ZSBJUCBhZGRyZXNzICVzICglcykgaW4gZGhjcC1jb25maWcgZGlyZWN0aXZlIgorbXNnc3RyICJhZHJlc8SDIElQIGR1cGxpY2F0ICVzICglcykgw65uIGRlY2xhcmHFo2lhIGRoY3AtY29uZmlnLiIKKworIzogZGhjcC1jb21tb24uYzo0OTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzZXQgU09fQklORFRPREVWSUNFIG9uIERIQ1Agc29ja2V0OiAlcyIKK21zZ3N0ciAiY29uZmlndXJhcmVhIFNPX1JFVVNFQUREUiBwZSBzb2NrZXQtdWwgREhDUCBhIGXFn3VhdDogJXMiCisKKyM6IGRoY3AtY29tbW9uLmM6NjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIktub3duIERIQ1Agb3B0aW9uczpcbiIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJLbm93biBESENQdjYgb3B0aW9uczpcbiIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjgyMworbXNnaWQgIiwgcHJlZml4IGRlcHJlY2F0ZWQiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCBsZWFzZSB0aW1lICIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjg2OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBzdGF0ZWxlc3Mgb24gJXMlLjBzJS4wcyVzIgorbXNnc3RyICIiCisKKyM6IGRoY3AtY29tbW9uLmM6ODcwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIlcywgc3RhdGljIGxlYXNlcyBvbmx5IG9uICUuMHMlcyVzJS4wcyIKK21zZ3N0ciAiREhDUCwgw65tcHJ1bXV0dXJpIHN0YXRpY2UgZG9hciBjxIN0cmUgICUuMHMlcywgdGltcHVsIHJlw65ub2lyaWkgJXMiCisKKyM6IGRoY3AtY29tbW9uLmM6ODcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBwcm94eSBvbiBzdWJuZXQgJS4wcyVzJS4wcyUuMHMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo4NzMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVzLCBJUCByYW5nZSAlcyAtLSAlcyVzJS4wcyIKK21zZ3N0ciAiREhDUCwgZG9tZW5pdSBJUCAlcyAtLSAlcywgdGltcHVsIHJlw65ub2lyaWkgJXMiCisKKyM6IGRoY3AtY29tbW9uLmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1B2NC1kZXJpdmVkIElQdjYgbmFtZXMgb24gJXMlcyIKK21zZ3N0ciAiIgorCisjOiBkaGNwLWNvbW1vbi5jOjg4OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAicm91dGVyIGFkdmVydGlzZW1lbnQgb24gJXMlcyIKK21zZ3N0ciAiREhDUCwgw65tcHJ1bXV0dXJpIHN0YXRpY2UgZG9hciBjxIN0cmUgICUuMHMlcywgdGltcHVsIHJlw65ub2lyaWkgJXMiCisKKyM6IGRoY3AtY29tbW9uLmM6OTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRIQ1AgcmVsYXkgZnJvbSAlcyB0byAlcyB2aWEgJXMiCittc2dzdHIgIiIKKworIzogZGhjcC1jb21tb24uYzo5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiREhDUCByZWxheSBmcm9tICVzIHRvICVzIgorbXNnc3RyICIiCisKKyM6IHJhZHYuYzo5OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBJQ01QdjYgc29ja2V0OiAlcyIKK21zZ3N0ciAibnUgcG90IGNyZWVhIHNvY2tldCBESENQOiAlcyIKKworIzogYXV0aC5jOjQyOQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB6b25lIHRyYW5zZmVyIHJlcXVlc3QgZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjOiBpcHNldC5jOjk1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluZCBrZXJuZWwgdmVyc2lvbjogJXMiCittc2dzdHIgImFjdGl2YXJlYSBzb2NrZXQtdWx1aSBzZXJ2ZXItdWx1aSBESENQIGEgZcWfdWF0OiAlcyIKKworIzogaXBzZXQuYzoxMTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgSVBzZXQgY29udHJvbCBzb2NrZXQ6ICVzIgorbXNnc3RyICJjcmVlYXJlYSBzb2NrZXQtdWx1aSBkZSBhc2N1bHRhcmUgYSBlxZ91YXQ6ICVzIgorCisjOiBibG9ja2RhdGEuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJETlNTRUMgbWVtb3J5IGluIHVzZSAldSwgbWF4ICV1LCBhbGxvY2F0ZWQgJXUiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6NzYKK21zZ2lkICJlcnJvcjogZmlsbF9hZGRyIG1pc3N1c2VkIgorbXNnc3RyICIiCisKKyM6IHRhYmxlcy5jOjEwNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGFjY2VzcyBwZiBkZXZpY2VzOiAlcyIKK21zZ3N0ciAiYWNjZXNhcmVhIHNlcnZlcnVsdWkgJXMgYSBlxZ91YXQ6ICVzIgorCisjOiB0YWJsZXMuYzoxMTkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IG5vIG9wZW5lZCBwZiBkZXZpY2VzICVzIgorbXNnc3RyICJmb2xvc2ltIGFkcmVzZWxlIGxvY2FsZSBkb2FyIHBlbnRydSAlUyAlcyIKKworIzogdGFibGVzLmM6MTI3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJlcnJvcjogY2Fubm90IHVzZSB0YWJsZSBuYW1lICVzIgorbXNnc3RyICJudSBwb3QgY2l0aSBudW1lbGUgbWHFn2luaWk6ICVzIgorCisjOiB0YWJsZXMuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXJyb3I6IGNhbm5vdCBzdHJsY3B5IHRhYmxlIG5hbWUgJXMiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IHBmcl9hZGRfdGFibGVzOiAlcyglZCkiCittc2dzdHIgIiIKKworIzogdGFibGVzLmM6MTQ3Cittc2dpZCAiaW5mbzogdGFibGUgY3JlYXRlZCIKK21zZ3N0ciAiIgorCisjOiB0YWJsZXMuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAid2FybmluZzogRElPQ1Ilc0FERFJTOiAlcyIKK21zZ3N0ciAiIgorCisjOiB0YWJsZXMuYzoxNjIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiVkIGFkZHJlc3NlcyAlcyIKK21zZ3N0ciAiY2l0ZXNjICVzIC0gJWQgYWRyZXNlIgorCisjfiBtc2dpZCAiZHVwbGljYXRlIElQIGFkZHJlc3MgJXMgaW4gZGhjcC1jb25maWcgZGlyZWN0aXZlLiIKKyN+IG1zZ3N0ciAiYWRyZXPEgyBJUCBkdXBsaWNhdCAlcyDDrm4gZGVjbGFyYcWjaWEgZGhjcC1jb25maWcuIgorCisjLCBmdXp6eQorI34gbXNnaWQgIlNwZWNpZnkgcGF0aCB0byBMdWEgc2NyaXB0IChubyBkZWZhdWx0KS4iCisjfiBtc2dzdHIgIlNwZWNpZmljxIMgbyBjYWxlIHBlbnRydSBmacWfaWVydWwgUElELiAoaW1wbGljaXQgJXMpLiIKKworI34gbXNnaWQgIlRYVCByZWNvcmQgc3RyaW5nIHRvbyBsb25nIgorI34gbXNnc3RyICLFn2lydWwgZGUgY2FyYWN0ZXJlIHBlbnRydSDDrm5yZWdpc3RyYXJlYSBUWFQgZXN0ZSBwcmVhIGx1bmciCisKKyN+IG1zZ2lkICJmYWlsZWQgdG8gc2V0IElQVjYgb3B0aW9ucyBvbiBsaXN0ZW5pbmcgc29ja2V0OiAlcyIKKyN+IG1zZ3N0ciAiY29uZmlndXJhcmVhIG9wxaNpdW5pbG9yIElQdjYgYSBlxZ91YXQgcGUgc29ja2V0LXVsIGRlIGFzY3VsdGFyZTogJXMiCisKKyN+IG1zZ2lkICJmYWlsZWQgdG8gYmluZCBsaXN0ZW5pbmcgc29ja2V0IGZvciAlczogJXMiCisjfiBtc2dzdHIgImFjdGl2YXJlYSBzb2NrZXQtdWx1aSBkZSBhc2N1bHRhcmUgcGVudHJ1ICVzIGEgZcWfdWF0OiAlcyIKKworI34gbXNnaWQgIm11c3Qgc2V0IGV4YWN0bHkgb25lIGludGVyZmFjZSBvbiBicm9rZW4gc3lzdGVtcyB3aXRob3V0IElQX1JFQ1ZJRiIKKyN+IG1zZ3N0ciAidHJlYnVpZSBzcGVjaWZpY2F0xIMgZXhhY3QgbyBzaW5ndXLEgyBpbnRlcmZhxaPEgyBwZSBzaXN0ZW1lbGUgZGVmZWN0ZWNlIG51IGF1IElQX1JFQ1ZJRiIKKworI34gbXNnaWQgIklnbm9yaW5nIERIQ1AgbGVhc2UgZm9yICVzIGJlY2F1c2UgaXQgaGFzIGFuIGlsbGVnYWwgZG9tYWluIHBhcnQiCisjfiBtc2dzdHIgIsOObXBydW11dHVsIERIQ1AgcGVudHJ1ICVzIHZhIGZpIGlnbm9yYXQgZGVvYXJlY2UgYXJlIGRvbWVuaXUgaW52YWxpZCIKKworI34gbXNnaWQgIklTQyBkaGNwZCBpbnRlZ3JhdGlvbiBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9JU0NfUkVBREVSIGluIHNyYy9jb25maWcuaCIKKyN+IG1zZ3N0ciAiSW50ZWdyYXJlYSBjdSBJU0MgZGhjcGQgbnUgZXN0ZSBkaXNwb25pYmlsxIM6cHVuZcWjaSBIQVZFX0lTQ19IRUFERVIgw65uIHNyYy9jb25maWcuaCIKKworIywgZnV6enkKKyN+IG1zZ2lkICJpbGxlZ2FsIGRvbWFpbiAlcyBpbiBkaGNwLWNvbmZpZyBkaXJlY3RpdmUuIgorI34gbXNnc3RyICJhZHJlc8SDIElQIGR1cGxpY2F0ICVzIMOubiBkZWNsYXJhxaNpYSBkaGNwLWNvbmZpZy4iCisKKyN+IG1zZ2lkICJydW5uaW5nIGFzIHJvb3QiCisjfiBtc2dzdHIgInJ1bGV6IGNhIHJvb3QiCisKKyMsIGZ1enp5CisjfiBtc2dpZCAicmVhZCAlcyAtICVkIGhvc3RzIgorI34gbXNnc3RyICJjaXRlc2MgJXMgLSAlZCBhZHJlc2UiCisKKyN+IG1zZ2lkICJkb21haW5zIgorI34gbXNnc3RyICJkb21lbmlpIgorCisjfiBtc2dpZCAiSWdub3JpbmcgREhDUCBob3N0IG5hbWUgJXMgYmVjYXVzZSBpdCBoYXMgYW4gaWxsZWdhbCBkb21haW4gcGFydCIKKyN+IG1zZ3N0ciAiSWdub3IgbnVtZWxlIERIQ1AgYWwgbWHFn2luaWkgJXMgZGVvYXJlY2UgYXJlIGRvbWVuaXUgRE5TIGlsZWdhbCIKKworI34gbXNnaWQgIkRpc3BsYXkgdGhpcyBtZXNzYWdlLiIKKyN+IG1zZ3N0ciAiQWZpxZ9lYXrEgyBhY2VzdCBtZXNhai4iCisKKyN+IG1zZ2lkICJmYWlsZWQgdG8gcmVhZCAlczolbSIKKyN+IG1zZ3N0ciAiY2l0aXJlYSAlczolbiBhIGXFn3VhdCIKKworIywgZnV6enkKKyN+IG1zZ2lkICJjYW5ub3Qgc2VuZCBlbmNhcHN1bGF0ZWQgb3B0aW9uICVkOiBubyBzcGFjZSBsZWZ0IGluIHdyYXBwZXIiCisjfiBtc2dzdHIgIm51IHBvdCB0cmltaXRlIG9wxaNpdW5lYSBESENQICVkOiBudSBtYWkgZXN0ZSBsb2Mgw65uIHBhY2hldCIKKworI34gbXNnaWQgIk1vcmUgdGhhbiBvbmUgdmVuZG9yIGNsYXNzIG1hdGNoZXMsIHVzaW5nICVzIgorI34gbXNnc3RyICJTZSBwb3RyaXZlc2MgbWFpIG11bHRlIGNsYXNlIGRlIG3Eg3JjaSBkZSBpbnRlcmZlxaNlLCBmb2xvc2ltICVzIgorCisjfiBtc2dpZCAiZm9yd2FyZGluZyB0YWJsZSBvdmVyZmxvdzogY2hlY2sgZm9yIHNlcnZlciBsb29wcy4iCisjfiBtc2dzdHIgImRlcMSDxZ9pcmUgZGUgbWVtb3JpZSDDrm4gdGFiZWxhIGN1IMOubmFpbnTEg3JpIEROUzogdmVyaWZpY2HFo2kgZGUgYnVjbGUuIgorCisjfiBtc2dpZCAibmVzdGVkIGluY2x1ZGVzIG5vdCBhbGxvd2VkIgorI34gbXNnc3RyICJpbmNsdXppdW5pbGUgbG9jYWxlIG51IHN1bnQgcGVybWlzZSIKKworI34gbXNnaWQgIkRIQ1AsICVzIHdpbGwgYmUgd3JpdHRlbiBldmVyeSAlcyIKKyN+IG1zZ3N0ciAiREhDUCwgJXMgdmEgZmkgcmVzY3JpcyBvZGF0xIMgbGEgZmllY2FyZSAlcyIKKworI34gbXNnaWQgImNhbm5vdCBjcmVhdGUgREhDUCBwYWNrZXQgc29ja2V0OiAlcy4gSXMgQ09ORklHX1BBQ0tFVCBlbmFibGVkIGluIHlvdXIga2VybmVsPyIKKyN+IG1zZ3N0ciAibnUgcG90IGNyZWVhIHNvY2tldCBESENQIHBhY2tldDogJXMuIEF2ZcWjaSBhY3RpdmF0xIMgw65uIG51Y2xldWxzaXN0ZW11bHVpIG9wxaNpdW5lYSBDT05GSUdfUEFDS0VUID8iCmRpZmYgLS1naXQgYS9zZXR1cC5odG1sIGIvc2V0dXAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODJmZjVkCi0tLSAvZGV2L251bGwKKysrIGIvc2V0dXAuaHRtbApAQCAtMCwwICsxLDIzMSBAQAorPEhUTUw+Cis8SEVBRD4KKzxUSVRMRT4gQ29uZmlndXJpbmcgRG5zbWFzcS48L1RJVExFPgorPC9IRUFEPgorPEJPRFkgQkdDT0xPUj0iV0hJVEUiPiAKKzxIMSBBTElHTj1jZW50ZXI+RG5zbWFzcSBzZXR1cDwvSDE+IAorPEgyPkluc3RhbGxhdGlvbi48L0gyPgorVG8gY29tcGlsZSBhbmQgaW5zdGFsbCBkbnNtYXNxLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgKGFzIHJvb3QpIGlzIGVub3VnaC4KKworPFBSRT4KK21ha2UgaW5zdGFsbAorPC9QUkU+CisKK1lvdSBtaWdodCB3YW50IHRvIGVkaXQgY29uZmlnLmguIERuc21hc3EgaGFzCitiZWVuIHJ1biBvbiAoYXQgbGVhc3QpIExpbnV4LCB1Q0xpbnV4LCBBSVggNC4xLjUsIEZyZWVCU0QgNC40IE9wZW5CU0QgYW5kIFRydTY0IDQueCAKKworRG5zbWFzcSBpcyBub3JtYWxseSAgcnVuIG9uIGEgZmlyZXdhbGwgbWFjaGluZSAodGhlIG1hY2hpbmUgd2l0aCB0aGUKK21vZGVtIG9yIG90aGVyIGNvbm5lY3Rpb24gdG8geW91ciBJU1AuKSBidXQgaXQgY2FuIHJ1biBvbiBhbnkgbWFjaGluZQord2l0aCBhY2Nlc3MgdG8gdGhlIElTUHMgbmFtZXNlcnZlcnMuCisKK1B1dCB0aGUgYmluYXJ5IGluIDxUVD4vdXNyL2xvY2FsL3NiaW4vZG5zbWFzcTwvVFQ+IChydW5uaW5nIDxUVD5tYWtlIGluc3RhbGw8L1RUPiAgd2lsbCBkbyB0aGlzKSBhbmQgYXJyYW5nZSBmb3IgaXQKK3RvIGJlIHN0YXJ0ZWQgYXQgYm9vdCB0aW1lLgorCitOb3RlIHRoYXQgZG5zbWFzcSBuZWVkcyB0byBydW4gYXMgcm9vdCwgc2luY2UgaXQgYmluZHMgcHJpdmlsZWdlZCBwb3J0cy4gSXQgd2lsbCBkcm9wIHJvb3QgcHJpdmlsZWdlcyBhZnRlciBzdGFydC11cC4gRG5zbWFzcQorbG9ncyBwcm9ibGVtcyB1c2luZyB0aGUgc3lzbG9nIGZhY2lsaXR5IGFzIGEgZGFlbW9uLiBJdCBsb2dzIGRlYnVnZ2luZworaW5mb3JtYXRpb24gdG8gbG9jYWwwCis8UD4KKzxIMj5Db25maWd1cmF0aW9uLjwvSDI+CitDb25maWd1cmF0aW9uIGZvciBkbnNtYXNxIGlzIHByZXR0eSBzaW1wbGUgaW4gYWxtb3N0IGFsbCBjYXNlcy4gVGhlCitwcm9ncmFtIGhhcyBjb2xsZWN0ZWQgYSBmYWlyIGZldyBvcHRpb25zIGFzIGl0IGhhcyBkZXZlbG9wZWQgYnV0IG1vc3Qgb2YgdGhlbQorYXJlIG5vdCBuZWVkZWQgbW9zdCBvZiB0aGUgdGltZS4gQSBtYWNoaW5lIHdoaWNoIGFscmVhZHkgaGFzIGEgRE5TCitjb25maWd1cmF0aW9uIChpZSBvbmUgb3IgbW9yZSBleHRlcm5hbCBuYW1lc2VydmVycyBpbiA8VFQ+L2V0Yy9yZXNvbHYuY29uZjwvVFQ+CithbmQgYW55IGxvY2FsIGhvc3RzIGluIDxUVD4vZXRjL2hvc3RzPC9UVD4pIGNhbiBiZSB0dXJuZWQgaW50byBhIG5hbWVzZXJ2ZXIKK3NpbXBseSBieSBydW5uaW5nIGRuc21hc3EsIHdpdGggbm8gb3B0aW9ucyBvciBjb25maWd1cmF0aW9uIGF0CithbGwuIFNldCB0aGUgSVAgYWRkcmVzcyBvZiB0aGUgbWFjaGluZSBydW5uaW5nIGRuc21hc3EgYXMgdGhlIEROUworc2VydmVyIGluIGFsbCB0aGUgb3RoZXIgbWFjaGluZXMgb24geW91ciBuZXR3b3JrLCBhbmQgeW91J3JlIGRvbmUuCis8UD4KK1dpdGggYSBmZXcgb3B0aW9uIGZsYWdzLCBpdCBpcyBwb3NzaWJsZSB0byBtYWtlIGRuc21hc3EgZG8gbW9yZSBjbGV2ZXIKK3RyaWNrcy4gT3B0aW9ucyBmb3IgZG5zbWFzcSBjYW4gYmUgc2V0IGVpdGhlciBvbiB0aGUgY29tbWFuZCBsaW5lCit3aGVuIHN0YXJ0aW5nIGRuc21hc3EsIG9yIGluIGl0cyBjb25maWd1cmF0aW9uIGZpbGUsIDxUVD4vZXRjL2Ruc21hc3EuY29uZjwvVFQ+LgorCis8aDI+TWFraW5nIHRoZSBuYW1lc2VydmVyIG1hY2hpbmUgdXNlIGRuc21hc3EuPC9oMj4KK0luIHRoZSBzaW1wbGUgY29uZmlndXJhdGlvbiBkZXNjcmliZWQgYWJvdmUsIHByb2Nlc3NlcyBsb2NhbCB0byB0aGUKK21hY2hpbmUgd2lsbCBub3QgdXNlIGRuc21hc3EsIHNpbmNlIHRoZXkgZ2V0IHRoZWlyIGluZm9ybWF0aW9uIGFib3V0Cit3aGljaCBuYW1lc2VydmVycyB0byB1c2UgZnJvbSAvZXRjL3Jlc29sdi5jb25mLCB3aGljaCBpcyBzZXQgdG8gdGhlCit1cHN0cmVhbSBuYW1lc2VydmVycy4gVG8gZml4IHRoaXMsIHNpbXBseSByZXBsYWNlIHRoZSBuYW1lc2VydmVyIGluCis8VFQ+L2V0Yy9yZXNvbHYuY29uZjwvVFQ+IHdpdGggdGhlIGxvY2FsIGFkZHJlc3MgMTI3LjAuMC4xIGFuZCBnaXZlIHRoZQorYWRkcmVzcyhlcykgb2YgdGhlIHVwc3RyZWFtIG5hbWVzZXJ2ZXIocykgdG8gZG5zbWFzcSBkaXJlY3RseS4gWW91IGNhbgorZG8gdGhpcyB1c2luZyBlaXRoZXIgdGhlIDxUVD5zZXJ2ZXI8L1RUPiBvcHRpb24sIG9yIGJ5IHB1dHRpbmcgdGhlbSBpbnRvCithbm90aGVyIGZpbGUsIGFuZCB0ZWxsaW5nICBkbnNtYXNxIGFib3V0IGl0cyBsb2NhdGlvbiB3aXRoIAordGhlIDxUVD5yZXNvbHYtZmlsZTwvVFQ+IG9wdGlvbi4gCisKKzxoMj5BdXRvbWF0aWMgbmFtZXNlcnZlciBjb25maWd1cmF0aW9uLjwvaDI+CitUaGUgdHdvIHByb3RvY29scyBtb3N0IHVzZWQgZm9yIGF1dG9tYXRpYyBJUCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24KKyhQUFAgYW5kIERIQ1ApIGNhbiBkZXRlcm1pbmUgdGhlIElQIGFkZHJlc3NlcyBmb3IgbmFtZXNlcnZlcnMgYXV0b21hdGljYWxseS4KK1RoZSBkYWVtb25zIGNhbiBiZSBtYWRlIHRvIHdyaXRlIG91dCBhIGZpbGUgaW4gdGhlIHJlc29sdi5jb25mIGZvcm1hdCB3aXRoIHRoZQorbmFtZXNlcnZlcnMgaW4gd2hpY2ggaXMgcGVyZmVjdCBmb3IgZG5zbWFzcSB0byB1c2UuIFdoZW4gdGhlCituYW1lc2VydmVycyBjaGFuZ2UsIGZvciBpbnN0YW5jZSBvbiBkaWFsbGluZyBpbnRvIGEgbmV3IElTUCB1c2luZyBQUFAsCitkbnNtYXNxIHdpbGwgYXV0b21hdGljYWxseSByZS1yZWFkIHRoaXMgZmlsZSBhbmQgYmVnaW4gdXNpbmcgdGhlIG5ldworbmFtZXNlcnZlcihzKSBjb21wbGV0ZWx5IHRyYW5zcGFyZW50bHkuCisKKzxoMz5BdXRvbWF0aWMgRE5TIHNlcnZlciBjb25maWd1cmF0aW9uIHdpdGggUFBQLjwvaDM+CitMYXRlciB2ZXJzaW9ucyBvZiBwcHBkIGhhdmUgYW4gb3B0aW9uICJ1c2VwZWVyZG5zIiB3aGljaCBpbnN0cnVjdHMgaXQgdG8gd3JpdGUgYSBmaWxlIGNvbnRhaW5pbmcKK3RoZSBhZGRyZXNzKGVzKSBvZiB0aGUgRE5TIHNldmVycyBpbiA8VFQ+L2V0Yy9wcHAvcmVzb2x2LmNvbmY8L1RUPi4gQ29uZmlndXJlIGRuc21hc3EKK2FzIGFib3ZlIHdpdGggIm5hbWVzZXJ2ZXIgMTI3LjAuMC4xIiBpbiA8VFQ+L2V0Yy9yZXNvbHYuY29uZjwvVFQ+IGFuZCBydW4gZG5zbWFzcSAKK3dpdGggdG8gb3B0aW9uIDxUVD5yZXNvbHYtZmlsZT0vZXRjL3BwcC9yZXNvbHYuY29uZjwvVFQ+LgorPFA+CitPbiBSZWRoYXQgKGF0IGxlYXN0IHZlcnNpb25zIDcuMSwgNy4yIGFuZCA3LjMpIHlvdSBjYW4gc2V0IHBwcGQKK29wdGlvbnMgYnkgYWRkaW5nICJQUFBPUFRJT05TPXVzZXBlZXJkbnMiIHRvCis8VFQ+L2V0Yy9zeXNjb25maWcvbmV0d29yay1zY3JpcHRzL2lmY2ZnLWlwcHAwPC9UVD4uICBJbiB0aGUgc2FtZSBmaWxlLCBtYWtlIHN1cmUKK3RoYXQgIlBFRVJETlM9bm8iIHRvIHN0b3AgUmVkSGF0J3MgbmV0d29yayBpbml0c2NyaXB0cyBmcm9tIGNvcHlpbmcKKzxUVD4vZXRjL3BwcC9yZXNvbHYuY29uZjwvVFQ+IGludG8gPFRUPi9ldGMvcmVzb2x2LmNvbmY8L1RUPi48QlI+CisKK09uIFN1U0UgKGF0IGxlYXN0IHZlcnNpb24gOC4xLCBhbmQgOC4yKSB5b3Ugc2hvdWxkIHVzZSBZYVNUIHRvIGFjdGl2YXRlCis8VFQ+W3hdIE1vZGlmeSBETlMgd2hlbiBjb25uZWN0ZWQ8L1RUPiB0aGVuIHN0b3AgU3VTRXMgbmV0d29yayBpbml0c2NyaXB0cyAKK2Zyb20gY29weWluZyA8VFQ+L2V0Yy9wcHAvcmVzb2x2LmNvbmY8L1RUPiBpbnRvIDxUVD4vZXRjL3Jlc29sdi5jb25mPC9UVD4gCitieSBtb2RpZnlpbmcgTU9ESUZZX1JFU09MVl9DT05GX0RZTkFNSUNBTExZPSJubyIgaW4gPFRUPi9ldGMvc3lzY29uZmlnL25ldHdvcmsvY29uZmlnPC9UVD4uCisgCisKKzxoMz5BdXRvbWF0aWMgRE5TIHNlcnZlciBjb25maWd1cmF0aW9uIHdpdGggREhDUC48L2gzPgorWW91IG5lZWQgdG8gZ2V0IHlvdXIgREhDUCBjbGllbnQgdG8gd3JpdGUgdGhlIGFkZHJlc3NlKHMpIG9mIHRoZSBETlMKK3NlcnZlcnMgdG8gYSBmaWxlIG90aGVyIHRoYW4gPFRUPi9ldGMvcmVzb2x2LmNvbmY8L1RUPi4gRm9yIGRoY3BjZCwgdGhlCis8VFQ+ZGhjcGNkLmV4ZTwvVFQ+IHNjcmlwdCBnZXRzIHJ1biB3aXRoIHRoZSBhZGRyZXNzZXMgb2YgdGhlIG5hbWVzZXJ2ZXIocykgaW4KK3RoZSBzaGVsbCB2YXJpYWJsZSA8VFQ+JEROUzwvVFQ+LiBUaGUgZm9sbG93aW5nIGJpdCBvZiBzaGVsbCBzY3JpcHQKK3VzZXMgdGhhdCB0byB3cml0ZSBhIGZpbGUgc3VpdGFibGUgZm9yIGRuc21hc3EuIAorPFBSRT4KKworZWNobyAtbiA+fC9ldGMvZGhjcGMvcmVzb2x2LmNvbmYKK2Ruc3NlcnZzPSR7RE5TLy8sLyB9Citmb3Igc2VydiBpbiAkZG5zc2VydnM7IGRvCisgICAgZWNobyAibmFtZXNlcnZlciAkc2VydiIgPj4vZXRjL2RoY3BjL3Jlc29sdi5jb25mCitkb25lCisKKzwvUFJFPgorIAorUmVtZW1iZXIgdG8gZ2l2ZSBkaGNwY2QgdGhlIDxUVD4tUjwvVFQ+IGZsYWcgdG8gc3RvcCBpdCBvdmVyd3JpdGluZyAKKzxUVD4vZXRjL3Jlc29sdi5jb25mPC9UVD4uCisKKzxQPgorRm9yIG90aGVyIERIQ1AgY2xpZW50cyBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QuCisKKzxoMz4gREhDUCBhbmQgUFBQLjwvaDM+CitPbiBhIGxhcHRvcCB3aGljaCBtYXkgcG90ZW50aWFsbHkgY29ubmVjdCB2aWEgYSBtb2RlbSBhbmQgUFBQIG9yCitldGhlcm5ldCBhbmQgREhDUCBpdCBpcyBwb3NzaWJsZSB0byBjb21iaW5lIGJvdGggb2YgdGhlIGFib3ZlCitjb25maWd1cmF0aW9ucy4gUnVubmluZyBkbnNtYXNxIHdpdGggdGhlIGZsYWdzCis8VFQ+cmVzb2x2LWZpbGU9L2V0Yy9wcHAvcmVzb2x2LmNvbmYgcmVzb2x2LWZpbGU9L2V0Yy9kaGNwYy9yZXNvbHYuY29uZjwvVFQ+ICAKK21ha2VzIGl0IHBvbGwgPEI+Ym90aDwvQj4gZmlsZXMgYW5kIHVzZSB3aGljaGV2ZXIgd2FzIHVwZGF0ZWQKK2xhc3QuIFRoZSByZXN1bHQgaXMgYXV0b21hdGljIHN3aXRjaGluZyBiZXR3ZWVuIEROUyBzZXJ2ZXJzLgorPC9IMz4KKworPEgyPiBJbnRlZ3JhdGlvbiB3aXRoIERIQ1AuPC9IMj4KK0Ruc21hc3EgcmVhZHMgPFRUPi9ldGMvaG9zdHM8L1RUPiBzbyB0aGF0IHRoZSBuYW1lcyBvZiBsb2NhbCBtYWNoaW5lcyBhcmUKK2F2YWlsYWJsZSBpbiBETlMuIFRoaXMgaXMgZmluZSB3aGVuIHlvdSBnaXZlIGFsbCB5b3VyIGxvY2FsIG1hY2hpbmVzCitzdGF0aWMgSVAgYWRkcmVzc2VzIHdoaWNoIGNhbiBnbyBpbiA8VFQ+L2V0Yy9ob3N0czwvVFQ+LCBidXQgaXQgZG9lc24ndCB3b3JrIAord2hlbiBsb2NhbCBtYWNoaW5lcyBhcmUgY29uZmlndXJlZCB2aWEgREhDUCwgc2luY2UgdGhlIElQIGFkZHJlc3MKK2FsbG9jYXRlZCB0byBtYWNoaW5lIGlzIG5vdCBmaXhlZC4gRG5zbWFzcSBjb21lcyB3aXRoIGFuIGludGVncmF0ZWQKK0RIQ1AgZGFlbW9uIHRvIHNvbHZlIHRoaXMgcHJvYmxlbS4KKzxQPgorVGhlIGRuc21hc3EgREhDUCBkYWVtb24gYWxsb2NhdGVzIGFkZHJlc3NlcyB0byBob3N0cyBvbiB0aGUgbmV0d29yayBhbmQgdHJpZXMKK3RvIGRldGVybWluZSB0aGVpciBuYW1lcy4gSWYgaXQgc3VjY2VlZHMgaXQgYWRkIHRoZSBuYW1lIGFuZCBhZGRyZXNzCitwYWlyIHRvIHRoZSBETlMuIFRoZXJlIGFyZSBiYXNpY2FsbHkgdHdvIHdheXMgdG8gYXNzb2NpYXRlIGEgbmFtZSB3aXRoCithIERIQ1AtY29uZmlndXJlZCBtYWNoaW5lOyBlaXRoZXIgdGhlIG1hY2hpbmUga25vd3MgaXRzIG5hbWUgd2hpY2ggaXQKK2dldHMgYSBESENQIGxlYXNlLCBvciBkbnNtYXNxIGdpdmVzIGl0IGEgbmFtZSwgYmFzZWQgb24gdGhlIE1BQworYWRkcmVzcyBvZiBpdHMgZXRoZXJuZXQgY2FyZC4gRm9yIHRoZSBmb3JtZXIgdG8gd29yaywgYSBtYWNoaW5lIG5lZWRzIHRvIGtub3cgaXRzIG5hbWUgd2hlbiBpdAorcmVxdWVzdHMgYSBESENQIGxlYXNlLiBGb3IgZGhjcGNkLCB0aGUgLWggb3B0aW9uIHNwZWNpZmllcyB0aGlzLiBUaGUKK25hbWVzIG1heSBiZSBhbnl0aGluZyBhcyBmYXIgYXMgREhDUCBpcyBjb25jZXJuZWQsIGJ1dCBkbnNtYXNxIGFkZHMKK3NvbWUgbGltaXRhdGlvbnMuIEJ5IGRlZmF1bHQgdGhlIG5hbWVzIG11c3Qgbm8gaGF2ZSBhIGRvbWFpbiBwYXJ0LCBpZQordGhleSBtdXN0IGp1c3QgYmUgYSBhbHBoYW51bWVyaWMgbmFtZSwgd2l0aG91dCBhbnkgZG90cy4gIFRoaXMgaXMgYQorc2VjdXJpdHkgZmVhdHVyZSB0byBzdG9wIGEgbWFjaGluZSBvbiB5b3VyIG5ldHdvcmsgdGVsbGluZyBESENQIHRoYXQKK2l0cyBuYW1lIGlzICJ3d3cubWljcm9zb2Z0LmNvbSIgYW5kIHRoZXJlYnkgZ3JhYmJpbmcgdHJhZmZpYyB3aGljaAorc2hvdWxkbid0IGdvIHRvIGl0LiBBIGRvbWFpbiBwYXJ0IGlzIG9ubHkgYWxsb3dlZCBieSBkbnNtYXNxIGluIERIQ1AgbWFjaGluZSBuYW1lcworaWYgdGhlIDxUVD5kb21haW4tc3VmZml4PC9UVD4gb3B0aW9uIGlzIHNldCwgdGhlIGRvbWFpbiBwYXJ0IG11c3QgbWF0Y2ggdGhlCitzdWZmaXguCis8UD4KK0FzIGFuIGFzaWRlLCBtYWtlIHN1cmUgbm90IHRvIHRlbGwgREhDUCB0byBzZXQgdGhlIGhvc3RuYW1lIHdoZW4gaXQKK29idGFpbnMgYSBsZWFzZSAoaW4gZGhjcGNkIHRoYXQncyB0aGUgLUggZmxhZy4pCitUaGlzIGlzIG5vdCByZWxpYWJsZSBzaW5jZSB0aGUgREhDUCBzZXJ2ZXIgZ2V0cyB0aGUKK2hvc3RuYW1lIGZyb20gRE5TIHdoaWNoIGluIHRoaXMgY2FzZSBpcyBkbnNtYXNxLiBUaGVyZSBpcyBhIHJhY2UKK2NvbmRpdGlvbiBiZWNhdXNlIHRoZSBob3N0J3MgbmFtZSBpbiB0aGUgRE5TIG1heSBjaGFuZ2UgYXMgYQorcmVzdWx0IG9mIGl0IGdldHRpbmcgYSBESENQIGxlYXNlLCBidXQgdGhpcyBkb2VzIG5vdCBwcm9wYWdhdGUgYmVmb3JlCit0aGUgbmFtZSBpcyBsb29rZWQgdXAuIFRoZSBuZXQgZWZmZWN0IG1heSBiZSB0aGF0IHRoZSBob3N0IGJlbGlldmVzIGl0CitpcyBjYWxsZWQgc29tZXRoaW5nIGRpZmZlcmVudCB0byBpdHMgbmFtZSBpbiB0aGUgRE5TLiBUbyBiZSBzYWZlLCBzZXQKK3RoZSBob3N0bmFtZSBvbiBhIG1hY2hpbmUgbG9jYWxseSwgYW5kIHBhc3MgdGhlIHNhbWUgbmFtZSB0byBESENQIHdoZW4KK3JlcXVlc3RpbmcgYSBsZWFzZS4KKzxQPgorPEgyPlNldHRpbmcgdXAgYSBtYWlsaHViLjwvSDI+CitJZiB5b3UgZ2VuZXJhdGUgbWFpbCBvbiB0aGUgbWFjaGluZXMgYXR0YWNoZWQgdG8geW91ciBwcml2YXRlIG5ldHdvcmssIHlvdSBtYXkKKyBiZSBpbnRlcmVzdGVkIGluIHRoZSBNWCByZWNvcmQgZmVhdHVyZSBvZiBkbnNtYXNxLiBUaGlzIGFsbG93cyB5b3UgdG8gaGF2ZSBhbGwKKyB0aGUgbWFjaGluZXMgb24geW91ciBuZXR3b3JrIHVzZSB5b3VyIGZpcmV3YWxsIG9yIGFub3RoZXIgbWFjaGluZSBhcyBhICJzbWFydGhvc3QiIGFuZCAKK2RlbGl2ZXIgbWFpbCB0byBpdC4gVGhlIGRldGFpbHMgb2YgaG93IHRvIHNldCB0aGlzIHVwIGFyZSBoaWdobHkgZGVwZW5kZW50IG9uCit5b3VyIG1haWxlciwgc3lzdGVtIGFuZCBkaXN0cmlidXRpb24uIFRoZSBvbmx5IHRoaW5nIHRoYXQncyByZWxldmFudCB0byBkbnNtYXNxIGlzIHRoYXQgdGhlIG1haWxlciAKK25lZWRzIHRvIGJlIGFibGUgdG8gaW50ZXJyb2dhdGUgdGhlIEROUyBhbmQgZmluZCBhbiBNWCByZWNvcmQgZm9yIHlvdXIgbWFpbGh1Yi4KKzxQPgorQnkgZ2l2aW5nIGRuc21hc3EgdGhlIDxUVD5teC1ob3N0PC9UVD4gb3B0aW9uCit5b3UgaW5zdHJ1Y3QgZG5zbWFzcSB0byBzZXJ2ZSBhbiBNWCByZWNvcmQgZm9yIHRoZSBzcGVjaWZpZWQgYWRkcmVzcy4gCitCeSBkZWZhdWx0IHRoZSBNWCByZWNvcmQgCitwb2ludHMgdG8gdGhlIG1hY2hpbmUgb24gd2hpY2ggZG5zbWFzcSBpcyBydW5uaW5nLCBzbyBtYWlsIGRlbGl2ZXJlZCB0byB0aGF0CituYW1lIHdpbGwgZ2V0IHNlbnQgdG8gdGhlIG1haWxlciBvbiB5b3VyIGZpcmV3YWxsIG1hY2hpbmUuIFlvdSBjYW4KK2hhdmUgdGhlIE1YIHJlY29yZCBwb2ludCB0byBhbm90aGVyIG1hY2hpbmUgYnkgdXNpbmcgdGhlIDxUVD5teC10YXJnZXQ8L1RUPgorb3B0aW9uLgorPFA+CitJbiBzb21lIGNhc2VzIGl0J3MgdXNlZnVsIGZvciBhbGwgbG9jYWwgbWFjaGluZXMgdG8gc2VlIGFuIE1YIHJlY29yZAorcG9pbnRpbmcgYXQgdGhlbXNlbHZlczogdGhpcyBhbGxvd3MgbWFpbGVycyB3aGljaCBpbnNpc3Qgb24gYW4gTVggcmVjb3JkIGFuZAorZG9uJ3QgZmFsbCBiYWNrIHRvIEEgcmVjb3JkcyB0byBkZWxpdmVyIG1haWwgd2l0aGluIHRoZQorbWFjaGluZS4gVGhlc2UgTVggcmVjb3JkcyBhcmUgZW5hYmxlZCB1c2luZyB0aGUgPFRUPnNlbGZteDwvVFQ+IG9wdGlvbi4KKworPEgyPlVzaW5nIHNwZWNpYWwgc2VydmVycy48L0gyPgorRG5zbWFzcSBoYXMgdGhlIGFiaWxpdHkgdG8gZGlyZWN0IEROUyBxdWVyaWVzIGZvciBjZXJ0YWluIGRvbWFpbnMgdG8KK3NwZWNpZmljIHVwc3RyZWFtIG5hbWVzZXJ2ZXJzLiBUaGlzIGZlYXR1cmUgd2FzIGFkZGVkIGZvciB1c2Ugd2l0aAorVlBOcyBidXQgaXQgaXMgZnVsbHkgZ2VuZXJhbC4gVGhlIHNjZW5hcmlvIGlzIHRoaXM6IHlvdSBoYXZlIGEKK3N0YW5kYXJkIGludGVybmV0IGNvbm5lY3Rpb24gdmlhIGFuIElTUCwgYW5kIGRuc21hc3EgaXMgY29uZmlndXJlZCB0bworZm9yd2FyZCBxdWVyaWVzIHRvIHRoZSBJU1AncyBuYW1lc2VydmVycywgdGhlbiB5b3UgbWFrZSBhIFZQTgorY29ubmVjdGlvbiBpbnRvIHlvdXIgY29tcGFuaWVzIG5ldHdvcmssIGdpdmluZyBhY2Nlc3MgdG8gaG9zdHMgaW5zaWRlCit0aGUgY29tcGFueSBmaXJld2FsbC4gWW91IGhhdmUgYWNjZXNzLCBidXQgc2luY2UgbWFueSBvZiB0aGUgaW50ZXJuYWwgaG9zdHMKK2FyZW4ndCB2aXNpYmxlIG9uIHRoZSBwdWJsaWMgaW50ZXJuZXQsIHlvdXIgY29tcGFueSBkb2Vzbid0IHB1Ymxpc2ggCit0aGVtIHRvIHRoZSBwdWJsaWMgRE5TIGFuZCB5b3UgY2FuJ3QgZ2V0IHRoZWlyIElQIGFkZHJlc3MgZnJvbSB0aGUgSVNQCituYW1lc2VydmVycy4gVGhlIHNvbHV0aW9uIGlzIHRvIHVzZSB0aGUgY29tcGFuaWVzIG5hbWVzZXJ2ZXIgZm9yCitwcml2YXRlIGRvbWFpbnMgd2l0aGluIHRoZSBjb21wYW55LCBhbmQgZG5zbWFzcSBhbGxvd3MgdGhpcy4gQXNzdW1pbmcKK3RoYXQgaW50ZXJuYWwgY29tcGFueSBtYWNoaW5lcyBhcmUgYWxsIGluIHRoZSBkb21haW4gaW50ZXJuYWwubXljby5jb20KK2FuZCB0aGUgY29tcGFuaWVzIG5hbWVzZXJ2ZXIgaXMgYXQgMTkyLjE2OC4xMC4xIHRoZW4gdGhlIG9wdGlvbgorPFRUPnNlcnZlcj0vaW50ZXJuYWwubXljby5jb20vMTkyLjE2OC4xMC4xPC9UVD4gd2lsbCBkaXJlY3QgYWxsCitxdWVyaWVzIGluIHRoZSBpbnRlcm5hbCBkb21haW4gdG8gdGhlIGNvcnJlY3QgbmFtZXNlcnZlci4gWW91IGNhbgorc3BlY2lmeSBtb3JlIHRoYW4gb25lIGRvbWFpbiBpbiBlYWNoIHNlcnZlciBvcHRpb24uIElmIHRoZXJlIGlzCittb3JlIHRoYW4gb25lIG5hbWVzZXJ2ZXIganVzdCBpbmNsdWRlIGFzIG1hbnkKKzxUVD5zZXJ2ZXI8L1RUPiBvcHRpb25zIGFzIGlzIG5lZWRlZCB0byBzcGVjaWZ5IHRoZW0gYWxsLiAgCisKKzxIMj5Mb2NhbCBkb21haW5zLjwvSDI+CitTb21ldGltZXMgcGVvcGxlIGhhdmUgbG9jYWwgZG9tYWlucyB3aGljaCB0aGV5IGRvIG5vdCB3YW50IGZvcndhcmRlZAordG8gdXBzdHJlYW0gc2VydmVycy4gVGhpcyBpcyBhY2NvbW9kYXRlZCBieSB1c2luZyBzZXJ2ZXIgb3B0aW9ucword2l0aG91dCB0aGUgc2VydmVyIElQIGFkZHJlc3MuIFRvIG1ha2UgdGhpbmdzIGNsZWFyZXIgPFRUPmxvY2FsPC9UVD4KK2lzIGEgc3lub255bSBmb3IgPFRUPnNlcnZlcjwvVFQ+LiBGb3IgZXhhbXBsZSB0aGUgb3B0aW9uCis8VFQ+bG9jYWw9L2xvY2FsbmV0LzwvVFQ+IGVuc3VyZXMgdGhhdCBhbnkgZG9tYWluIG5hbWUgcXVlcnkgd2hpY2ggZW5kcyBpbgorPFRUPi5sb2NhbG5ldDwvVFQ+IHdpbGwgYmUgYW5zd2VyZWQgaWYgcG9zc2libGUgZnJvbQorPFRUPi9ldGMvaG9zdHM8L1RUPiBvciBESENQLCBidXQgbmV2ZXIgc2VudCB0byBhbiB1cHN0cmVhbSBzZXJ2ZXIuCisKKzxIMj5EZWZlYXRpbmcgd2lsZGNhcmRzIGluIHRvcCBsZXZlbCBkb21haW5zLjwvSDI+CitJbiBTZXB0ZW1iZXIgMjAwMyBWZXJpc2lnbiBpbnN0YWxsZWQgYSB3aWxkY2FyZCByZWNvcmQgaW4gdGhlIC5jb20gYW5kCisubmV0IHRvcCBsZXZlbCBkb21haW5zLiBUaGUgZWZmZWN0IG9mIHRoaXMgaXMgdGhhdCBxdWVyaWVzIGZvcgordW5yZWdpc3RlcmVkIC5jb20gYW5kIC5uZXQgbmFtZXMgbm93IHJldHVybiB0aGUgYWRkcmVzcyBvZiBWZXJpc2lnbidzCitzaXRlZmluZGVyIHNlcnZpY2UsIHJhdGhlciB0aGFuIGEgIm5vIHN1Y2ggZG9tYWluIiByZXNwb25zZS4gVG8KK3Jlc3RvcmUgdGhlIGNvcnJlY3QgYmVoYXZpb3VyLCB5b3UgY2FuIHRlbGwgZG5zbWFzcSB0aGUgYWRkcmVzcyBvZiB0aGUKK3NpdGVmaW5kZXIgaG9zdCBhbmQgaGF2ZSBpdCBzdWJzdGl0dXRlIGFuIE5YRE9NQUlOIHJlcGx5IHdoZW4gaXQgc2VlcwordGhhdCBhZGRyZXNzLiBUaGUgc2l0ZWZpbmRlciBhZGRyZXNzIGlzIGN1cnJlbnRseSAgNjQuOTQuMTEwLjExLCBzbworZ2l2aW5nIHRoZSBvcHRpb24gPFRUPmJvZ3VzLW54ZG9tYWluPTY0Ljk0LjExMC4xMTwvVFQ+IHdpbGwgZW5hYmxlCit0aGlzIGZhY2lsaXR5IGZvciBWZXJpc2lnbi4gSWYgb3RoZXIgVExEcyBkbyB0aGF0IHNhbWUgdGhpbmcgeW91IGNhbgorYWRkIHRoZSBjb3JyZWN0IGFkZHJlc3NlcyBmb3IgdGhlbSB0b28uIFNlZSB0aGUgZG5zbWFzcSBGQVEgZm9yIG1vcmUKK2RldGFpbHMgb24gdGhlIDxUVD5ib2d1cy1ueGRvbWFpbjwvVFQ+IG9wdGlvbi4KKyAKKzxIMj5PdGhlciBjb25maWd1cmF0aW9uIGRldGFpbHMuPC9IMj4KK0J5IGRlZmF1bHQgZG5zbWFzcSBvZmZlcnMgRE5TIHNlcnZpY2Ugb24gYWxsIHRoZSBjb25maWd1cmVkIGludGVyZmFjZXMKK29mIGEgaG9zdC4gSXQncyBsaWtlbHkgdGhhdCB5b3UgZG9uJ3QgKGZvciBpbnN0YW5jZSkgd2FudCB0byBvZmZlciBhCitETlMgc2VydmljZSB0byB0aGUgd29ybGQgdmlhIGFuIGludGVyZmFjZSBjb25uZWN0ZWQgdG8gQURTTCBvcgorY2FibGUtbW9kZW0gc28gZG5zbWFzcSBhbGxvd3MgeW91IHRvIHNwZWNpZnkgd2hpY2ggaW50ZXJmYWNlcyBpdCB3aWxsCitsaXN0ZW4gb24uIFVzZSBlaXRoZXIgdGhlIDxUVD5pbnRlcmZhY2U8L1RUPiBvciA8VFQ+YWRkcmVzczwvVFQ+IG9wdGlvbnMgdG8gZG8gdGhpcy4KKzxQPgorVGhlIDxUVD5maWx0ZXJ3aW4yazwvVFQ+IG9wdGlvbiBtYWtlcyBkbnNtYXNxIGlnbm9yZSBjZXJ0YWluIEROUyByZXF1ZXN0cyB3aGljaAorYXJlIG1hZGUgYnkgV2luZG93cyBib3hlbiBldmVyeSBmZXcgbWludXRlcy4gVGhlIHJlcXVlc3RzIGdlbmVyYWxseQorZG9uJ3QgZ2V0IHNlbnNpYmxlIGFuc3dlcnMgaW4gdGhlIGdsb2JhbCBETlMgYW5kIGNhdXNlIHRyb3VibGUgYnkKK3RyaWdnZXJpbmcgZGlhbC1vbi1kZW1hbmQgaW50ZXJuZXQgbGlua3MuCis8UD4KK1NlbmRpbmcgU0lHSFVQIHRvIHRoZSBkbnNtYXNxIHByb2Nlc3Mgd2lsbCBjYXVzZSBpdCB0byBlbXB0eSBpdHMgY2FjaGUgYW5kIAordGhlbiByZS1sb2FkIDxUVD4vZXRjL2hvc3RzPC9UVD4gYW5kIDxUVD4vZXRjL3Jlc29sdi5jb25mPC9UVD4uCis8UD4gU2VuZGluZyBTSUdVU1IxIChraWxsYWxsIC0xMCBkbnNtYXNxKSB0byB0aGUgZG5zbWFzcSBwcm9jZXNzIHdpbGwKK2NhdXNlIHRvIHdyaXRlIGNhY2hlIHVzYWdlIHN0YXRpc3RpY3NzIHRvIHRoZSBsb2csIHR5cGljYWxseQorPFRUPi92YXIvbG9nL3N5c2xvZzwvVFQ+IG9yIDxUVD4vdmFyL2xvZy9tZXNzYWdlczwvVFQ+LgorPFA+IFRoZSA8VFQ+bG9nLXF1ZXJpZXM8L1RUPiBvcHRpb24gdGVsbHMgZG5zbWFzcSB0byB2ZXJib3NlbHkgbG9nIHRoZSBxdWVyaWVzCitpdCBpcyBoYW5kbGluZyBhbmQgY2F1c2VzIFNJR1VTUjEgdG8gdHJpZ2dlciBhIGNvbXBsZXRlIGR1bXAgb2YgdGhlCitjb250ZW50cyBvZiB0aGUgY2FjaGUgdG8gdGhlIHN5c2xvZy4KKworPFA+Rm9yIGEgY29tcGxldGUgbGlzdGluZyBvZiBvcHRpb25zIHBsZWFzZSB0YWtlIGEgbG9vayBhdCB0aGUgbWFucGFnZQorZG5zbWFzcSg4KS4KZGlmZiAtLWdpdCBhL3NyYy9hdXRoLmMgYi9zcmMvYXV0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMjdmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYXV0aC5jCkBAIC0wLDAgKzEsODE0IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE0IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworI2lmZGVmIEhBVkVfQVVUSAorCitzdGF0aWMgc3RydWN0IGFkZHJsaXN0ICpmaW5kX3N1Ym5ldChzdHJ1Y3QgYXV0aF96b25lICp6b25lLCBpbnQgZmxhZywgc3RydWN0IGFsbF9hZGRyICphZGRyX3UpCit7CisgIHN0cnVjdCBhZGRybGlzdCAqc3VibmV0OworCisgIGZvciAoc3VibmV0ID0gem9uZS0+c3VibmV0OyBzdWJuZXQ7IHN1Ym5ldCA9IHN1Ym5ldC0+bmV4dCkKKyAgICB7CisgICAgICBpZiAoIShzdWJuZXQtPmZsYWdzICYgQUREUkxJU1RfSVBWNikpCisJeworCSAgc3RydWN0IGluX2FkZHIgbmV0bWFzaywgYWRkciA9IGFkZHJfdS0+YWRkci5hZGRyNDsKKworCSAgaWYgKCEoZmxhZyAmIEZfSVBWNCkpCisJICAgIGNvbnRpbnVlOworCSAgCisJICBuZXRtYXNrLnNfYWRkciA9IGh0b25sKH4oaW5fYWRkcl90KTAgPDwgKDMyIC0gc3VibmV0LT5wcmVmaXhsZW4pKTsKKwkgIAorCSAgaWYgIChpc19zYW1lX25ldChhZGRyLCBzdWJuZXQtPmFkZHIuYWRkci5hZGRyNCwgbmV0bWFzaykpCisJICAgIHJldHVybiBzdWJuZXQ7CisJfQorI2lmZGVmIEhBVkVfSVBWNgorICAgICAgZWxzZSBpZiAoaXNfc2FtZV9uZXQ2KCYoYWRkcl91LT5hZGRyLmFkZHI2KSwgJnN1Ym5ldC0+YWRkci5hZGRyLmFkZHI2LCBzdWJuZXQtPnByZWZpeGxlbikpCisJcmV0dXJuIHN1Ym5ldDsKKyNlbmRpZgorCisgICAgfQorICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBmaWx0ZXJfem9uZShzdHJ1Y3QgYXV0aF96b25lICp6b25lLCBpbnQgZmxhZywgc3RydWN0IGFsbF9hZGRyICphZGRyX3UpCit7CisgIC8qIE5vIHpvbmVzIHNwZWNpZmllZCwgbm8gZmlsdGVyICovCisgIGlmICghem9uZS0+c3VibmV0KQorICAgIHJldHVybiAxOworICAKKyAgcmV0dXJuIGZpbmRfc3VibmV0KHpvbmUsIGZsYWcsIGFkZHJfdSkgIT0gTlVMTDsKK30KKworaW50IGluX3pvbmUoc3RydWN0IGF1dGhfem9uZSAqem9uZSwgY2hhciAqbmFtZSwgY2hhciAqKmN1dCkKK3sKKyAgc2l6ZV90IG5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisgIHNpemVfdCBkb21haW5sZW4gPSBzdHJsZW4oem9uZS0+ZG9tYWluKTsKKworICBpZiAoY3V0KQorICAgICpjdXQgPSBOVUxMOworICAKKyAgaWYgKG5hbWVsZW4gPj0gZG9tYWlubGVuICYmIAorICAgICAgaG9zdG5hbWVfaXNlcXVhbCh6b25lLT5kb21haW4sICZuYW1lW25hbWVsZW4gLSBkb21haW5sZW5dKSkKKyAgICB7CisgICAgICAKKyAgICAgIGlmIChuYW1lbGVuID09IGRvbWFpbmxlbikKKwlyZXR1cm4gMTsKKyAgICAgIAorICAgICAgaWYgKG5hbWVbbmFtZWxlbiAtIGRvbWFpbmxlbiAtIDFdID09ICcuJykKKwl7CisJICBpZiAoY3V0KQorCSAgICAqY3V0ID0gJm5hbWVbbmFtZWxlbiAtIGRvbWFpbmxlbiAtIDFdOyAKKwkgIHJldHVybiAxOworCX0KKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKworc2l6ZV90IGFuc3dlcl9hdXRoKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIGNoYXIgKmxpbWl0LCBzaXplX3QgcWxlbiwgdGltZV90IG5vdywgdW5pb24gbXlzb2NrYWRkciAqcGVlcl9hZGRyLCBpbnQgbG9jYWxfcXVlcnkpIAoreworICBjaGFyICpuYW1lID0gZGFlbW9uLT5uYW1lYnVmZjsKKyAgdW5zaWduZWQgY2hhciAqcCwgKmFuc3A7CisgIGludCBxdHlwZSwgcWNsYXNzOworICBpbnQgbmFtZW9mZnNldCwgYXhmcm9mZnNldCA9IDA7CisgIGludCBxLCBhbnNjb3VudCA9IDAsIGF1dGhjb3VudCA9IDA7CisgIHN0cnVjdCBjcmVjICpjcmVjcDsKKyAgaW50ICBhdXRoID0gIWxvY2FsX3F1ZXJ5LCB0cnVuYyA9IDAsIG54ZG9tYWluID0gMSwgc29hID0gMCwgbnMgPSAwLCBheGZyID0gMDsKKyAgc3RydWN0IGF1dGhfem9uZSAqem9uZSA9IE5VTEw7CisgIHN0cnVjdCBhZGRybGlzdCAqc3VibmV0ID0gTlVMTDsKKyAgY2hhciAqY3V0OworICBzdHJ1Y3QgbXhfc3J2X3JlY29yZCAqcmVjLCAqbW92ZSwgKip1cDsKKyAgc3RydWN0IHR4dF9yZWNvcmQgKnR4dDsKKyAgc3RydWN0IGludGVyZmFjZV9uYW1lICppbnRyOworICBzdHJ1Y3QgbmFwdHIgKm5hOworICBzdHJ1Y3QgYWxsX2FkZHIgYWRkcjsKKyAgc3RydWN0IGNuYW1lICphOworICAKKyAgaWYgKG50b2hzKGhlYWRlci0+cWRjb3VudCkgPT0gMCB8fCBPUENPREUoaGVhZGVyKSAhPSBRVUVSWSApCisgICAgcmV0dXJuIDA7CisKKyAgLyogZGV0ZXJtaW5lIGVuZCBvZiBxdWVzdGlvbiBzZWN0aW9uICh3ZSBwdXQgYW5zd2VycyB0aGVyZSkgKi8KKyAgaWYgKCEoYW5zcCA9IHNraXBfcXVlc3Rpb25zKGhlYWRlciwgcWxlbikpKQorICAgIHJldHVybiAwOyAvKiBiYWQgcGFja2V0ICovCisgIAorICAvKiBub3cgcHJvY2VzcyBlYWNoIHF1ZXN0aW9uLCBhbnN3ZXJzIGdvIGluIFJScyBhZnRlciB0aGUgcXVlc3Rpb24gKi8KKyAgcCA9ICh1bnNpZ25lZCBjaGFyICopKGhlYWRlcisxKTsKKworICBmb3IgKHEgPSBudG9ocyhoZWFkZXItPnFkY291bnQpOyBxICE9IDA7IHEtLSkKKyAgICB7CisgICAgICB1bnNpZ25lZCBzaG9ydCBmbGFnID0gMDsKKyAgICAgIGludCBmb3VuZCA9IDA7CisgIAorICAgICAgLyogc2F2ZSBwb2ludGVyIHRvIG5hbWUgZm9yIGNvcHlpbmcgaW50byBhbnN3ZXJzICovCisgICAgICBuYW1lb2Zmc2V0ID0gcCAtICh1bnNpZ25lZCBjaGFyICopaGVhZGVyOworCisgICAgICAvKiBub3cgZXh0cmFjdCBuYW1lIGFzIC4tY29uY2F0ZW5hdGVkIHN0cmluZyBpbnRvIG5hbWUgKi8KKyAgICAgIGlmICghZXh0cmFjdF9uYW1lKGhlYWRlciwgcWxlbiwgJnAsIG5hbWUsIDEsIDQpKQorCXJldHVybiAwOyAvKiBiYWQgcGFja2V0ICovCisgCisgICAgICBHRVRTSE9SVChxdHlwZSwgcCk7IAorICAgICAgR0VUU0hPUlQocWNsYXNzLCBwKTsKKyAgICAgIAorICAgICAgaWYgKHFjbGFzcyAhPSBDX0lOKQorCXsKKwkgIGF1dGggPSAwOworCSAgY29udGludWU7CisJfQorCisgICAgICBpZiAocXR5cGUgPT0gVF9QVFIpCisJeworCSAgaWYgKCEoZmxhZyA9IGluX2FycGFfbmFtZV8yX2FkZHIobmFtZSwgJmFkZHIpKSkKKwkgICAgY29udGludWU7CisKKwkgIGlmICghbG9jYWxfcXVlcnkpCisJICAgIHsKKwkgICAgICBmb3IgKHpvbmUgPSBkYWVtb24tPmF1dGhfem9uZXM7IHpvbmU7IHpvbmUgPSB6b25lLT5uZXh0KQorCQlpZiAoKHN1Ym5ldCA9IGZpbmRfc3VibmV0KHpvbmUsIGZsYWcsICZhZGRyKSkpCisJCSAgYnJlYWs7CisJICAgICAgCisJICAgICAgaWYgKCF6b25lKQorCQl7CisJCSAgYXV0aCA9IDA7CisJCSAgY29udGludWU7CisJCX0KKwkgICAgfQorCisJICBpbnRyID0gTlVMTDsKKworCSAgaWYgKGZsYWcgPT0gRl9JUFY0KQorCSAgICBmb3IgKGludHIgPSBkYWVtb24tPmludF9uYW1lczsgaW50cjsgaW50ciA9IGludHItPm5leHQpCisJICAgICAgeworCQlzdHJ1Y3QgYWRkcmxpc3QgKmFkZHJsaXN0OworCQkKKwkJZm9yIChhZGRybGlzdCA9IGludHItPmFkZHI7IGFkZHJsaXN0OyBhZGRybGlzdCA9IGFkZHJsaXN0LT5uZXh0KQorCQkgIGlmICghKGFkZHJsaXN0LT5mbGFncyAmIEFERFJMSVNUX0lQVjYpICYmIGFkZHIuYWRkci5hZGRyNC5zX2FkZHIgPT0gYWRkcmxpc3QtPmFkZHIuYWRkci5hZGRyNC5zX2FkZHIpCisJCSAgICBicmVhazsKKwkJCisJCWlmIChhZGRybGlzdCkKKwkJICBicmVhazsKKwkJZWxzZQorCQkgIHdoaWxlIChpbnRyLT5uZXh0ICYmIHN0cmNtcChpbnRyLT5pbnRyLCBpbnRyLT5uZXh0LT5pbnRyKSA9PSAwKQorCQkgICAgaW50ciA9IGludHItPm5leHQ7CisJICAgICAgfQorI2lmZGVmIEhBVkVfSVBWNgorCSAgZWxzZSBpZiAoZmxhZyA9PSBGX0lQVjYpCisJICAgIGZvciAoaW50ciA9IGRhZW1vbi0+aW50X25hbWVzOyBpbnRyOyBpbnRyID0gaW50ci0+bmV4dCkKKwkgICAgICB7CisJCXN0cnVjdCBhZGRybGlzdCAqYWRkcmxpc3Q7CisJCQorCQlmb3IgKGFkZHJsaXN0ID0gaW50ci0+YWRkcjsgYWRkcmxpc3Q7IGFkZHJsaXN0ID0gYWRkcmxpc3QtPm5leHQpCisJCSAgaWYgKChhZGRybGlzdC0+ZmxhZ3MgJiBBRERSTElTVF9JUFY2KSAmJiBJTjZfQVJFX0FERFJfRVFVQUwoJmFkZHIuYWRkci5hZGRyNiwgJmFkZHJsaXN0LT5hZGRyLmFkZHIuYWRkcjYpKQorCQkgICAgYnJlYWs7CisJCQorCQlpZiAoYWRkcmxpc3QpCisJCSAgYnJlYWs7CisJCWVsc2UKKwkJICB3aGlsZSAoaW50ci0+bmV4dCAmJiBzdHJjbXAoaW50ci0+aW50ciwgaW50ci0+bmV4dC0+aW50cikgPT0gMCkKKwkJICAgIGludHIgPSBpbnRyLT5uZXh0OworCSAgICAgIH0KKyNlbmRpZgorCSAgCisJICBpZiAoaW50cikKKwkgICAgeworCSAgICAgIGlmIChpbl96b25lKHpvbmUsIGludHItPm5hbWUsIE5VTEwpKQorCQl7CQorCQkgIGZvdW5kID0gMTsKKwkJICBsb2dfcXVlcnkoZmxhZyB8IEZfUkVWRVJTRSB8IEZfQ09ORklHLCBpbnRyLT5uYW1lLCAmYWRkciwgTlVMTCk7CisJCSAgaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBuYW1lb2Zmc2V0LCAmYW5zcCwgCisJCQkJCSAgZGFlbW9uLT5hdXRoX3R0bCwgTlVMTCwKKwkJCQkJICBUX1BUUiwgQ19JTiwgImQiLCBpbnRyLT5uYW1lKSkKKwkJICAgIGFuc2NvdW50Kys7CisJCX0KKwkgICAgfQorCSAgCisJICBpZiAoKGNyZWNwID0gY2FjaGVfZmluZF9ieV9hZGRyKE5VTEwsICZhZGRyLCBub3csIGZsYWcpKSkKKwkgICAgZG8geyAKKwkgICAgICBzdHJjcHkobmFtZSwgY2FjaGVfZ2V0X25hbWUoY3JlY3ApKTsKKwkgICAgICAKKwkgICAgICBpZiAoY3JlY3AtPmZsYWdzICYgRl9ESENQICYmICFvcHRpb25fYm9vbChPUFRfREhDUF9GUUROKSkKKwkJeworCQkgIGNoYXIgKnAgPSBzdHJjaHIobmFtZSwgJy4nKTsKKwkJICBpZiAocCkKKwkJICAgICpwID0gMDsgLyogbXVzdCBiZSBiYXJlIG5hbWUgKi8KKwkJICAKKwkJICAvKiBhZGQgIGV4dGVybmFsIGRvbWFpbiAqLworCQkgIHN0cmNhdChuYW1lLCAiLiIpOworCQkgIHN0cmNhdChuYW1lLCB6b25lLT5kb21haW4pOworCQkgIGxvZ19xdWVyeShmbGFnIHwgRl9ESENQIHwgRl9SRVZFUlNFLCBuYW1lLCAmYWRkciwgcmVjb3JkX3NvdXJjZShjcmVjcC0+dWlkKSk7CisJCSAgZm91bmQgPSAxOworCQkgIGlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIAorCQkJCQkgIGRhZW1vbi0+YXV0aF90dGwsIE5VTEwsCisJCQkJCSAgVF9QVFIsIENfSU4sICJkIiwgbmFtZSkpCisJCSAgICBhbnNjb3VudCsrOworCQl9CisJICAgICAgZWxzZSBpZiAoY3JlY3AtPmZsYWdzICYgKEZfREhDUCB8IEZfSE9TVFMpICYmIGluX3pvbmUoem9uZSwgbmFtZSwgTlVMTCkpCisJCXsKKwkJICBsb2dfcXVlcnkoY3JlY3AtPmZsYWdzICYgfkZfRk9SV0FSRCwgbmFtZSwgJmFkZHIsIHJlY29yZF9zb3VyY2UoY3JlY3AtPnVpZCkpOworCQkgIGZvdW5kID0gMTsKKwkJICBpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIG5hbWVvZmZzZXQsICZhbnNwLCAKKwkJCQkJICBkYWVtb24tPmF1dGhfdHRsLCBOVUxMLAorCQkJCQkgIFRfUFRSLCBDX0lOLCAiZCIsIG5hbWUpKQorCQkgICAgYW5zY291bnQrKzsKKwkJfQorCSAgICAgIGVsc2UKKwkJY29udGludWU7CisJCSAgICAKKwkgICAgfSB3aGlsZSAoKGNyZWNwID0gY2FjaGVfZmluZF9ieV9hZGRyKGNyZWNwLCAmYWRkciwgbm93LCBmbGFnKSkpOworCisJICBpZiAoZm91bmQpCisJICAgIG54ZG9tYWluID0gMDsKKwkgIGVsc2UKKwkgICAgbG9nX3F1ZXJ5KGZsYWcgfCBGX05FRyB8IEZfTlhET01BSU4gfCBGX1JFVkVSU0UgfCAoYXV0aCA/IEZfQVVUSCA6IDApLCBOVUxMLCAmYWRkciwgTlVMTCk7CisKKwkgIGNvbnRpbnVlOworCX0KKyAgICAgIAorICAgIGNuYW1lX3Jlc3RhcnQ6CisgICAgICBmb3IgKHpvbmUgPSBkYWVtb24tPmF1dGhfem9uZXM7IHpvbmU7IHpvbmUgPSB6b25lLT5uZXh0KQorCWlmIChpbl96b25lKHpvbmUsIG5hbWUsICZjdXQpKQorCSAgYnJlYWs7CisgICAgICAKKyAgICAgIGlmICghem9uZSkKKwl7CisJICBhdXRoID0gMDsKKwkgIGNvbnRpbnVlOworCX0KKworICAgICAgZm9yIChyZWMgPSBkYWVtb24tPm14bmFtZXM7IHJlYzsgcmVjID0gcmVjLT5uZXh0KQorCWlmICghcmVjLT5pc3NydiAmJiBob3N0bmFtZV9pc2VxdWFsKG5hbWUsIHJlYy0+bmFtZSkpCisJICB7CisJICAgIG54ZG9tYWluID0gMDsKKwkgICAgICAgICAKKwkgICAgaWYgKHF0eXBlID09IFRfTVgpCisJICAgICAgeworCQlmb3VuZCA9IDE7CisJCWxvZ19xdWVyeShGX0NPTkZJRyB8IEZfUlJOQU1FLCBuYW1lLCBOVUxMLCAiPE1YPiIpOyAKKwkJaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBuYW1lb2Zmc2V0LCAmYW5zcCwgZGFlbW9uLT5hdXRoX3R0bCwKKwkJCQkJTlVMTCwgVF9NWCwgQ19JTiwgInNkIiwgcmVjLT53ZWlnaHQsIHJlYy0+dGFyZ2V0KSkKKwkJICBhbnNjb3VudCsrOworCSAgICAgIH0KKwkgIH0KKyAgICAgIAorICAgICAgZm9yIChtb3ZlID0gTlVMTCwgdXAgPSAmZGFlbW9uLT5teG5hbWVzLCByZWMgPSBkYWVtb24tPm14bmFtZXM7IHJlYzsgcmVjID0gcmVjLT5uZXh0KQorCWlmIChyZWMtPmlzc3J2ICYmIGhvc3RuYW1lX2lzZXF1YWwobmFtZSwgcmVjLT5uYW1lKSkKKwkgIHsKKwkgICAgbnhkb21haW4gPSAwOworCSAgICAKKwkgICAgaWYgKHF0eXBlID09IFRfU1JWKQorCSAgICAgIHsKKwkJZm91bmQgPSAxOworCQlsb2dfcXVlcnkoRl9DT05GSUcgfCBGX1JSTkFNRSwgbmFtZSwgTlVMTCwgIjxTUlY+Iik7IAorCQlpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIG5hbWVvZmZzZXQsICZhbnNwLCBkYWVtb24tPmF1dGhfdHRsLAorCQkJCQlOVUxMLCBUX1NSViwgQ19JTiwgInNzc2QiLCAKKwkJCQkJcmVjLT5wcmlvcml0eSwgcmVjLT53ZWlnaHQsIHJlYy0+c3J2cG9ydCwgcmVjLT50YXJnZXQpKQorCisJCSAgYW5zY291bnQrKzsKKwkgICAgICB9IAorCSAgICAKKwkgICAgLyogdW5saW5rIGZpcnN0IFNSViByZWNvcmQgZm91bmQgKi8KKwkgICAgaWYgKCFtb3ZlKQorCSAgICAgIHsKKwkJbW92ZSA9IHJlYzsKKwkJKnVwID0gcmVjLT5uZXh0OworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHVwID0gJnJlYy0+bmV4dDsgICAgICAKKwkgIH0KKwllbHNlCisJICB1cCA9ICZyZWMtPm5leHQ7CisJICAKKyAgICAgIC8qIHB1dCBmaXJzdCBTUlYgcmVjb3JkIGJhY2sgYXQgdGhlIGVuZC4gKi8KKyAgICAgIGlmIChtb3ZlKQorCXsKKwkgICp1cCA9IG1vdmU7CisJICBtb3ZlLT5uZXh0ID0gTlVMTDsKKwl9CisKKyAgICAgIGZvciAodHh0ID0gZGFlbW9uLT5ycjsgdHh0OyB0eHQgPSB0eHQtPm5leHQpCisJaWYgKGhvc3RuYW1lX2lzZXF1YWwobmFtZSwgdHh0LT5uYW1lKSkKKwkgIHsKKwkgICAgbnhkb21haW4gPSAwOworCSAgICBpZiAodHh0LT5jbGFzcyA9PSBxdHlwZSkKKwkgICAgICB7CisJCWZvdW5kID0gMTsKKwkJbG9nX3F1ZXJ5KEZfQ09ORklHIHwgRl9SUk5BTUUsIG5hbWUsIE5VTEwsICI8UlI+Iik7IAorCQlpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIG5hbWVvZmZzZXQsICZhbnNwLCBkYWVtb24tPmF1dGhfdHRsLAorCQkJCQlOVUxMLCB0eHQtPmNsYXNzLCBDX0lOLCAidCIsIHR4dC0+bGVuLCB0eHQtPnR4dCkpCisJCSAgYW5zY291bnQrKzsKKwkgICAgICB9CisJICB9CisgICAgICAKKyAgICAgIGZvciAodHh0ID0gZGFlbW9uLT50eHQ7IHR4dDsgdHh0ID0gdHh0LT5uZXh0KQorCWlmICh0eHQtPmNsYXNzID09IENfSU4gJiYgaG9zdG5hbWVfaXNlcXVhbChuYW1lLCB0eHQtPm5hbWUpKQorCSAgeworCSAgICBueGRvbWFpbiA9IDA7CisJICAgIGlmIChxdHlwZSA9PSBUX1RYVCkKKwkgICAgICB7CisJCWZvdW5kID0gMTsKKwkJbG9nX3F1ZXJ5KEZfQ09ORklHIHwgRl9SUk5BTUUsIG5hbWUsIE5VTEwsICI8VFhUPiIpOyAKKwkJaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBuYW1lb2Zmc2V0LCAmYW5zcCwgZGFlbW9uLT5hdXRoX3R0bCwKKwkJCQkJTlVMTCwgVF9UWFQsIENfSU4sICJ0IiwgdHh0LT5sZW4sIHR4dC0+dHh0KSkKKwkJICBhbnNjb3VudCsrOworCSAgICAgIH0KKwkgIH0KKworICAgICAgIGZvciAobmEgPSBkYWVtb24tPm5hcHRyOyBuYTsgbmEgPSBuYS0+bmV4dCkKKwkgaWYgKGhvc3RuYW1lX2lzZXF1YWwobmFtZSwgbmEtPm5hbWUpKQorCSAgIHsKKwkgICAgIG54ZG9tYWluID0gMDsKKwkgICAgIGlmIChxdHlwZSA9PSBUX05BUFRSKQorCSAgICAgICB7CisJCSBmb3VuZCA9IDE7CisJCSBsb2dfcXVlcnkoRl9DT05GSUcgfCBGX1JSTkFNRSwgbmFtZSwgTlVMTCwgIjxOQVBUUj4iKTsKKwkJIGlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIGRhZW1vbi0+YXV0aF90dGwsIAorCQkJCQkgTlVMTCwgVF9OQVBUUiwgQ19JTiwgInNzenp6ZCIsIAorCQkJCQkgbmEtPm9yZGVyLCBuYS0+cHJlZiwgbmEtPmZsYWdzLCBuYS0+c2VydmljZXMsIG5hLT5yZWdleHAsIG5hLT5yZXBsYWNlKSkKKwkJCSAgYW5zY291bnQrKzsKKwkgICAgICAgfQorCSAgIH0KKyAgICAKKyAgICAgICBpZiAocXR5cGUgPT0gVF9BKQorCSBmbGFnID0gRl9JUFY0OworICAgICAgIAorI2lmZGVmIEhBVkVfSVBWNgorICAgICAgIGlmIChxdHlwZSA9PSBUX0FBQUEpCisJIGZsYWcgPSBGX0lQVjY7CisjZW5kaWYKKyAgICAgICAKKyAgICAgICBmb3IgKGludHIgPSBkYWVtb24tPmludF9uYW1lczsgaW50cjsgaW50ciA9IGludHItPm5leHQpCisJIGlmIChob3N0bmFtZV9pc2VxdWFsKG5hbWUsIGludHItPm5hbWUpKQorCSAgIHsKKwkgICAgIHN0cnVjdCBhZGRybGlzdCAqYWRkcmxpc3Q7CisJICAgICAKKwkgICAgIG54ZG9tYWluID0gMDsKKwkgICAgIAorCSAgICAgaWYgKGZsYWcpCisJICAgICAgIGZvciAoYWRkcmxpc3QgPSBpbnRyLT5hZGRyOyBhZGRybGlzdDsgYWRkcmxpc3QgPSBhZGRybGlzdC0+bmV4dCkgIAorCQkgaWYgKCgoYWRkcmxpc3QtPmZsYWdzICYgQUREUkxJU1RfSVBWNikgID8gVF9BQUFBIDogVF9BKSA9PSBxdHlwZSAmJgorCQkgICAgIChsb2NhbF9xdWVyeSB8fCBmaWx0ZXJfem9uZSh6b25lLCBmbGFnLCAmYWRkcmxpc3QtPmFkZHIpKSkKKwkJICAgeworI2lmZGVmIEhBVkVfSVBWNgorCQkgICAgIGlmIChhZGRybGlzdC0+ZmxhZ3MgJiBBRERSTElTVF9SRVZPTkxZKQorCQkgICAgICAgY29udGludWU7CisjZW5kaWYKKwkJICAgICBmb3VuZCA9IDE7CisJCSAgICAgbG9nX3F1ZXJ5KEZfRk9SV0FSRCB8IEZfQ09ORklHIHwgZmxhZywgbmFtZSwgJmFkZHJsaXN0LT5hZGRyLCBOVUxMKTsKKwkJICAgICBpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIG5hbWVvZmZzZXQsICZhbnNwLCAKKwkJCQkJICAgICBkYWVtb24tPmF1dGhfdHRsLCBOVUxMLCBxdHlwZSwgQ19JTiwgCisJCQkJCSAgICAgcXR5cGUgPT0gVF9BID8gIjQiIDogIjYiLCAmYWRkcmxpc3QtPmFkZHIpKQorCQkgICAgICAgYW5zY291bnQrKzsKKwkJICAgfQorCSAgICAgfQorICAgICAgIAorICAgICAgIGZvciAoYSA9IGRhZW1vbi0+Y25hbWVzOyBhOyBhID0gYS0+bmV4dCkKKwkgaWYgKGhvc3RuYW1lX2lzZXF1YWwobmFtZSwgYS0+YWxpYXMpICkKKwkgICB7CisJICAgICBsb2dfcXVlcnkoRl9DT05GSUcgfCBGX0NOQU1FLCBuYW1lLCBOVUxMLCBOVUxMKTsKKwkgICAgIHN0cmNweShuYW1lLCBhLT50YXJnZXQpOworCSAgICAgaWYgKCFzdHJjaHIobmFtZSwgJy4nKSkKKwkgICAgICAgeworCQkgc3RyY2F0KG5hbWUsICIuIik7CisJCSBzdHJjYXQobmFtZSwgem9uZS0+ZG9tYWluKTsKKwkgICAgICAgfQorCSAgICAgZm91bmQgPSAxOworCSAgICAgaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBuYW1lb2Zmc2V0LCAmYW5zcCwgCisJCQkJICAgICBkYWVtb24tPmF1dGhfdHRsLCAmbmFtZW9mZnNldCwKKwkJCQkgICAgIFRfQ05BTUUsIENfSU4sICJkIiwgbmFtZSkpCisJICAgICAgIGFuc2NvdW50Kys7CisJICAgICAKKwkgICAgIGdvdG8gY25hbWVfcmVzdGFydDsKKwkgICB9CisKKyAgICAgIGlmICghY3V0KQorCXsKKwkgIG54ZG9tYWluID0gMDsKKwkgIAorCSAgaWYgKHF0eXBlID09IFRfU09BKQorCSAgICB7CisJICAgICAgYXV0aCA9IHNvYSA9IDE7IC8qIGluaGliaXRzIGF1dGggc2VjdGlvbiAqLworCSAgICAgIGZvdW5kID0gMTsKKwkgICAgICBsb2dfcXVlcnkoRl9SUk5BTUUgfCBGX0FVVEgsIHpvbmUtPmRvbWFpbiwgTlVMTCwgIjxTT0E+Iik7CisJICAgIH0KKyAgICAgIAkgIGVsc2UgaWYgKHF0eXBlID09IFRfQVhGUikKKwkgICAgeworCSAgICAgIHN0cnVjdCBpbmFtZSAqcGVlcnM7CisJICAgICAgCisJICAgICAgaWYgKHBlZXJfYWRkci0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQpCisJCXBlZXJfYWRkci0+aW4uc2luX3BvcnQgPSAwOworI2lmZGVmIEhBVkVfSVBWNgorCSAgICAgIGVsc2UKKwkJcGVlcl9hZGRyLT5pbjYuc2luNl9wb3J0ID0gMDsgCisjZW5kaWYKKwkgICAgICAKKwkgICAgICBmb3IgKHBlZXJzID0gZGFlbW9uLT5hdXRoX3BlZXJzOyBwZWVyczsgcGVlcnMgPSBwZWVycy0+bmV4dCkKKwkJaWYgKHNvY2thZGRyX2lzZXF1YWwocGVlcl9hZGRyLCAmcGVlcnMtPmFkZHIpKQorCQkgIGJyZWFrOworCSAgICAgIAorCSAgICAgIC8qIFJlZnVzZSBhbGwgQVhGUiB1bmxlc3MgLS1hdXRoLXNlYy1zZXJ2ZXJzIGlzIHNldCAqLworCSAgICAgIGlmICgoIXBlZXJzICYmIGRhZW1vbi0+YXV0aF9wZWVycykgfHwgIWRhZW1vbi0+c2Vjb25kYXJ5X2ZvcndhcmRfc2VydmVyKQorCQl7CisJCSAgaWYgKHBlZXJfYWRkci0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQpCisJCSAgICBpbmV0X250b3AoQUZfSU5FVCwgJnBlZXJfYWRkci0+aW4uc2luX2FkZHIsIGRhZW1vbi0+YWRkcmJ1ZmYsIEFERFJTVFJMRU4pOworI2lmZGVmIEhBVkVfSVBWNgorCQkgIGVsc2UKKwkJICAgIGluZXRfbnRvcChBRl9JTkVUNiwgJnBlZXJfYWRkci0+aW42LnNpbjZfYWRkciwgZGFlbW9uLT5hZGRyYnVmZiwgQUREUlNUUkxFTik7IAorI2VuZGlmCisJCSAgCisJCSAgbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJpZ25vcmluZyB6b25lIHRyYW5zZmVyIHJlcXVlc3QgZnJvbSAlcyIpLCBkYWVtb24tPmFkZHJidWZmKTsKKwkJICByZXR1cm4gMDsKKwkJfQorCSAgICAgICAJICAgICAgCisJICAgICAgYXV0aCA9IDE7CisJICAgICAgc29hID0gMTsgLyogaW5oaWJpdHMgYXV0aCBzZWN0aW9uICovCisJICAgICAgbnMgPSAxOyAvKiBlbnN1cmUgd2UgaW5jbHVkZSBOUyByZWNvcmRzISAqLworCSAgICAgIGF4ZnIgPSAxOworCSAgICAgIGZvdW5kID0gMTsKKwkgICAgICBheGZyb2Zmc2V0ID0gbmFtZW9mZnNldDsKKwkgICAgICBsb2dfcXVlcnkoRl9SUk5BTUUgfCBGX0FVVEgsIHpvbmUtPmRvbWFpbiwgTlVMTCwgIjxBWEZSPiIpOworCSAgICB9CisgICAgICAJICBlbHNlIGlmIChxdHlwZSA9PSBUX05TKQorCSAgICB7CisJICAgICAgYXV0aCA9IDE7CisJICAgICAgbnMgPSAxOyAvKiBpbmhpYml0cyBhdXRoIHNlY3Rpb24gKi8KKwkgICAgICBmb3VuZCA9IDE7CisJICAgICAgbG9nX3F1ZXJ5KEZfUlJOQU1FIHwgRl9BVVRILCB6b25lLT5kb21haW4sIE5VTEwsICI8TlM+Iik7IAorCSAgICB9CisJfQorICAgICAgCisgICAgICBpZiAoIW9wdGlvbl9ib29sKE9QVF9ESENQX0ZRRE4pICYmIGN1dCkKKwl7CSAgCisJICAqY3V0ID0gMDsgLyogcmVtb3ZlIGRvbWFpbiBwYXJ0ICovCisJICAKKwkgIGlmICghc3RyY2hyKG5hbWUsICcuJykgJiYgKGNyZWNwID0gY2FjaGVfZmluZF9ieV9uYW1lKE5VTEwsIG5hbWUsIG5vdywgRl9JUFY0IHwgRl9JUFY2KSkpCisJICAgIHsKKwkgICAgICBpZiAoY3JlY3AtPmZsYWdzICYgRl9ESENQKQorCQlkbworCQkgIHsgCisJCSAgICBueGRvbWFpbiA9IDA7CisJCSAgICBpZiAoKGNyZWNwLT5mbGFncyAmIGZsYWcpICYmIAorCQkJKGxvY2FsX3F1ZXJ5IHx8IGZpbHRlcl96b25lKHpvbmUsIGZsYWcsICYoY3JlY3AtPmFkZHIuYWRkcikpKSkKKwkJICAgICAgeworCQkJKmN1dCA9ICcuJzsgLyogcmVzdG9yZSBkb21haW4gcGFydCAqLworCQkJbG9nX3F1ZXJ5KGNyZWNwLT5mbGFncywgbmFtZSwgJmNyZWNwLT5hZGRyLmFkZHIsIHJlY29yZF9zb3VyY2UoY3JlY3AtPnVpZCkpOworCQkJKmN1dCAgPSAwOyAvKiByZW1vdmUgZG9tYWluIHBhcnQgKi8KKwkJCWZvdW5kID0gMTsKKwkJCWlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIAorCQkJCQkJZGFlbW9uLT5hdXRoX3R0bCwgTlVMTCwgcXR5cGUsIENfSU4sIAorCQkJCQkJcXR5cGUgPT0gVF9BID8gIjQiIDogIjYiLCAmY3JlY3AtPmFkZHIpKQorCQkJICBhbnNjb3VudCsrOworCQkgICAgICB9CisJCSAgfSB3aGlsZSAoKGNyZWNwID0gY2FjaGVfZmluZF9ieV9uYW1lKGNyZWNwLCBuYW1lLCBub3csICBGX0lQVjQgfCBGX0lQVjYpKSk7CisJICAgIH0KKyAgICAgICAJICAKKwkgICpjdXQgPSAnLic7IC8qIHJlc3RvcmUgZG9tYWluIHBhcnQgKi8JICAgIAorCX0KKyAgICAgIAorICAgICAgaWYgKChjcmVjcCA9IGNhY2hlX2ZpbmRfYnlfbmFtZShOVUxMLCBuYW1lLCBub3csIEZfSVBWNCB8IEZfSVBWNikpKQorCXsKKwkgIGlmICgoY3JlY3AtPmZsYWdzICYgRl9IT1NUUykgfHwgKCgoY3JlY3AtPmZsYWdzICYgRl9ESENQKSAmJiBvcHRpb25fYm9vbChPUFRfREhDUF9GUUROKSkpKQorCSAgICBkbworCSAgICAgIHsgCisJCSBueGRvbWFpbiA9IDA7CisJCSBpZiAoKGNyZWNwLT5mbGFncyAmIGZsYWcpICYmIChsb2NhbF9xdWVyeSB8fCBmaWx0ZXJfem9uZSh6b25lLCBmbGFnLCAmKGNyZWNwLT5hZGRyLmFkZHIpKSkpCisJCSAgIHsKKwkJICAgICBsb2dfcXVlcnkoY3JlY3AtPmZsYWdzLCBuYW1lLCAmY3JlY3AtPmFkZHIuYWRkciwgcmVjb3JkX3NvdXJjZShjcmVjcC0+dWlkKSk7CisJCSAgICAgZm91bmQgPSAxOworCQkgICAgIGlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIAorCQkJCQkgICAgIGRhZW1vbi0+YXV0aF90dGwsIE5VTEwsIHF0eXBlLCBDX0lOLCAKKwkJCQkJICAgICBxdHlwZSA9PSBUX0EgPyAiNCIgOiAiNiIsICZjcmVjcC0+YWRkcikpCisJCSAgICAgICBhbnNjb3VudCsrOworCQkgICB9CisJICAgICAgfSB3aGlsZSAoKGNyZWNwID0gY2FjaGVfZmluZF9ieV9uYW1lKGNyZWNwLCBuYW1lLCBub3csIEZfSVBWNCB8IEZfSVBWNikpKTsKKwl9CisgICAgICAKKyAgICAgIGlmICghZm91bmQpCisJbG9nX3F1ZXJ5KGZsYWcgfCBGX05FRyB8IChueGRvbWFpbiA/IEZfTlhET01BSU4gOiAwKSB8IEZfRk9SV0FSRCB8IEZfQVVUSCwgbmFtZSwgTlVMTCwgTlVMTCk7CisgICAgICAKKyAgICB9CisgIAorICAvKiBBZGQgYXV0aCBzZWN0aW9uICovCisgIGlmIChhdXRoICYmIHpvbmUpCisgICAgeworICAgICAgY2hhciAqYXV0aG5hbWU7CisgICAgICBpbnQgbmV3b2Zmc2V0LCBvZmZzZXQgPSAwOworCisgICAgICBpZiAoIXN1Ym5ldCkKKwlhdXRobmFtZSA9IHpvbmUtPmRvbWFpbjsKKyAgICAgIGVsc2UKKwl7CisJICAvKiBoYW5kbGUgTlMgYW5kIFNPQSBmb3IgUFRSIHJlY29yZHMgKi8KKwkgIAorCSAgYXV0aG5hbWUgPSBuYW1lOworCisJICBpZiAoIShzdWJuZXQtPmZsYWdzICYgQUREUkxJU1RfSVBWNikpCisJICAgIHsKKwkgICAgICBpbl9hZGRyX3QgYSA9IG50b2hsKHN1Ym5ldC0+YWRkci5hZGRyLmFkZHI0LnNfYWRkcikgPj4gODsKKwkgICAgICBjaGFyICpwID0gbmFtZTsKKwkgICAgICAKKwkgICAgICBpZiAoc3VibmV0LT5wcmVmaXhsZW4gPj0gMjQpCisJCXAgKz0gc3ByaW50ZihwLCAiJWQuIiwgYSAmIDB4ZmYpOworCSAgICAgIGEgPSBhID4+IDg7CisJICAgICAgaWYgKHN1Ym5ldC0+cHJlZml4bGVuID49IDE2ICkKKwkJcCArPSBzcHJpbnRmKHAsICIlZC4iLCBhICYgMHhmZik7CisJICAgICAgYSA9IGEgPj4gODsKKwkgICAgICBwICs9IHNwcmludGYocCwgIiVkLmluLWFkZHIuYXJwYSIsIGEgJiAweGZmKTsKKwkgICAgICAKKwkgICAgfQorI2lmZGVmIEhBVkVfSVBWNgorCSAgZWxzZQorCSAgICB7CisJICAgICAgY2hhciAqcCA9IG5hbWU7CisJICAgICAgaW50IGk7CisJICAgICAgCisJICAgICAgZm9yIChpID0gc3VibmV0LT5wcmVmaXhsZW4tMTsgaSA+PSAwOyBpIC09IDQpCisJCXsgCisJCSAgaW50IGRpZyA9ICgodW5zaWduZWQgY2hhciAqKSZzdWJuZXQtPmFkZHIuYWRkci5hZGRyNilbaT4+M107CisJCSAgcCArPSBzcHJpbnRmKHAsICIlLjF4LiIsIChpPj4yKSAmIDEgPyBkaWcgJiAxNSA6IGRpZyA+PiA0KTsKKwkJfQorCSAgICAgIHAgKz0gc3ByaW50ZihwLCAiaXA2LmFycGEiKTsKKwkgICAgICAKKwkgICAgfQorI2VuZGlmCisJfQorICAgICAgCisgICAgICAvKiBoYW5kbGUgTlMgYW5kIFNPQSBpbiBhdXRoIHNlY3Rpb24gb3IgZm9yIGV4cGxpY2l0IHF1ZXJpZXMgKi8KKyAgICAgICBuZXdvZmZzZXQgPSBhbnNwIC0gKHVuc2lnbmVkIGNoYXIgKiloZWFkZXI7CisgICAgICAgaWYgKCgoYW5zY291bnQgPT0gMCAmJiAhbnMpIHx8IHNvYSkgJiYKKwkgIGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCAwLCAmYW5zcCwgCisJCQkgICAgICBkYWVtb24tPmF1dGhfdHRsLCBOVUxMLCBUX1NPQSwgQ19JTiwgImRkbGxsbGwiLAorCQkJICAgICAgYXV0aG5hbWUsIGRhZW1vbi0+YXV0aHNlcnZlciwgIGRhZW1vbi0+aG9zdG1hc3RlciwKKwkJCSAgICAgIGRhZW1vbi0+c29hX3NuLCBkYWVtb24tPnNvYV9yZWZyZXNoLCAKKwkJCSAgICAgIGRhZW1vbi0+c29hX3JldHJ5LCBkYWVtb24tPnNvYV9leHBpcnksIAorCQkJICAgICAgZGFlbW9uLT5hdXRoX3R0bCkpCisJeworCSAgb2Zmc2V0ID0gbmV3b2Zmc2V0OworCSAgaWYgKHNvYSkKKwkgICAgYW5zY291bnQrKzsKKwkgIGVsc2UKKwkgICAgYXV0aGNvdW50Kys7CisJfQorICAgICAgCisgICAgICBpZiAoYW5zY291bnQgIT0gMCB8fCBucykKKwl7CisJICBzdHJ1Y3QgbmFtZV9saXN0ICpzZWNvbmRhcnk7CisJICAKKwkgIG5ld29mZnNldCA9IGFuc3AgLSAodW5zaWduZWQgY2hhciAqKWhlYWRlcjsKKwkgIGlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgLW9mZnNldCwgJmFuc3AsIAorCQkJCSAgZGFlbW9uLT5hdXRoX3R0bCwgTlVMTCwgVF9OUywgQ19JTiwgImQiLCBvZmZzZXQgPT0gMCA/IGF1dGhuYW1lIDogTlVMTCwgZGFlbW9uLT5hdXRoc2VydmVyKSkKKwkgICAgeworCSAgICAgIGlmIChvZmZzZXQgPT0gMCkgCisJCW9mZnNldCA9IG5ld29mZnNldDsKKwkgICAgICBpZiAobnMpIAorCQlhbnNjb3VudCsrOworCSAgICAgIGVsc2UKKwkJYXV0aGNvdW50Kys7CisJICAgIH0KKworCSAgaWYgKCFzdWJuZXQpCisJICAgIGZvciAoc2Vjb25kYXJ5ID0gZGFlbW9uLT5zZWNvbmRhcnlfZm9yd2FyZF9zZXJ2ZXI7IHNlY29uZGFyeTsgc2Vjb25kYXJ5ID0gc2Vjb25kYXJ5LT5uZXh0KQorCSAgICAgIGlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgb2Zmc2V0LCAmYW5zcCwgCisJCQkJICAgICAgZGFlbW9uLT5hdXRoX3R0bCwgTlVMTCwgVF9OUywgQ19JTiwgImQiLCBzZWNvbmRhcnktPm5hbWUpKQorCQl7CisJCSAgaWYgKG5zKSAKKwkJICAgIGFuc2NvdW50Kys7CisJCSAgZWxzZQorCQkgICAgYXV0aGNvdW50Kys7CisJCX0KKwl9CisgICAgICAKKyAgICAgIGlmIChheGZyKQorCXsKKwkgIGZvciAocmVjID0gZGFlbW9uLT5teG5hbWVzOyByZWM7IHJlYyA9IHJlYy0+bmV4dCkKKwkgICAgaWYgKGluX3pvbmUoem9uZSwgcmVjLT5uYW1lLCAmY3V0KSkKKwkgICAgICB7CisJCWlmIChjdXQpCisJCSAgICpjdXQgPSAwOworCisJCWlmIChyZWMtPmlzc3J2KQorCQkgIHsKKwkJICAgIGlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgLWF4ZnJvZmZzZXQsICZhbnNwLCBkYWVtb24tPmF1dGhfdHRsLAorCQkJCQkgICAgTlVMTCwgVF9TUlYsIENfSU4sICJzc3NkIiwgY3V0ID8gcmVjLT5uYW1lIDogTlVMTCwKKwkJCQkJICAgIHJlYy0+cHJpb3JpdHksIHJlYy0+d2VpZ2h0LCByZWMtPnNydnBvcnQsIHJlYy0+dGFyZ2V0KSkKKwkJICAgICAgCisJCSAgICAgIGFuc2NvdW50Kys7CisJCSAgfQorCQllbHNlCisJCSAgeworCQkgICAgaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCAtYXhmcm9mZnNldCwgJmFuc3AsIGRhZW1vbi0+YXV0aF90dGwsCisJCQkJCSAgICBOVUxMLCBUX01YLCBDX0lOLCAic2QiLCBjdXQgPyByZWMtPm5hbWUgOiBOVUxMLCByZWMtPndlaWdodCwgcmVjLT50YXJnZXQpKQorCQkgICAgICBhbnNjb3VudCsrOworCQkgIH0KKwkJCisJCS8qIHJlc3RvcmUgY29uZmlnIGRhdGEgKi8KKwkJaWYgKGN1dCkKKwkJICAqY3V0ID0gJy4nOworCSAgICAgIH0KKwkgICAgICAKKwkgIGZvciAodHh0ID0gZGFlbW9uLT5ycjsgdHh0OyB0eHQgPSB0eHQtPm5leHQpCisJICAgIGlmIChpbl96b25lKHpvbmUsIHR4dC0+bmFtZSwgJmN1dCkpCisJICAgICAgeworCQlpZiAoY3V0KQorCQkgICpjdXQgPSAwOworCQkKKwkJaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCAtYXhmcm9mZnNldCwgJmFuc3AsIGRhZW1vbi0+YXV0aF90dGwsCisJCQkJCU5VTEwsIHR4dC0+Y2xhc3MsIENfSU4sICJ0IiwgIGN1dCA/IHR4dC0+bmFtZSA6IE5VTEwsIHR4dC0+bGVuLCB0eHQtPnR4dCkpCisJCSAgYW5zY291bnQrKzsKKwkJCisJCS8qIHJlc3RvcmUgY29uZmlnIGRhdGEgKi8KKwkJaWYgKGN1dCkKKwkJICAqY3V0ID0gJy4nOworCSAgICAgIH0KKwkgIAorCSAgZm9yICh0eHQgPSBkYWVtb24tPnR4dDsgdHh0OyB0eHQgPSB0eHQtPm5leHQpCisJICAgIGlmICh0eHQtPmNsYXNzID09IENfSU4gJiYgaW5fem9uZSh6b25lLCB0eHQtPm5hbWUsICZjdXQpKQorCSAgICAgIHsKKwkJaWYgKGN1dCkKKwkJICAqY3V0ID0gMDsKKwkJCisJCWlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgLWF4ZnJvZmZzZXQsICZhbnNwLCBkYWVtb24tPmF1dGhfdHRsLAorCQkJCQlOVUxMLCBUX1RYVCwgQ19JTiwgInQiLCBjdXQgPyB0eHQtPm5hbWUgOiBOVUxMLCB0eHQtPmxlbiwgdHh0LT50eHQpKQorCQkgIGFuc2NvdW50Kys7CisJCQorCQkvKiByZXN0b3JlIGNvbmZpZyBkYXRhICovCisJCWlmIChjdXQpCisJCSAgKmN1dCA9ICcuJzsKKwkgICAgICB9CisJICAKKwkgIGZvciAobmEgPSBkYWVtb24tPm5hcHRyOyBuYTsgbmEgPSBuYS0+bmV4dCkKKwkgICAgaWYgKGluX3pvbmUoem9uZSwgbmEtPm5hbWUsICZjdXQpKQorCSAgICAgIHsKKwkJaWYgKGN1dCkKKwkJICAqY3V0ID0gMDsKKwkJCisJCWlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgLWF4ZnJvZmZzZXQsICZhbnNwLCBkYWVtb24tPmF1dGhfdHRsLCAKKwkJCQkJTlVMTCwgVF9OQVBUUiwgQ19JTiwgInNzenp6ZCIsIGN1dCA/IG5hLT5uYW1lIDogTlVMTCwKKwkJCQkJbmEtPm9yZGVyLCBuYS0+cHJlZiwgbmEtPmZsYWdzLCBuYS0+c2VydmljZXMsIG5hLT5yZWdleHAsIG5hLT5yZXBsYWNlKSkKKwkJICBhbnNjb3VudCsrOworCQkKKwkJLyogcmVzdG9yZSBjb25maWcgZGF0YSAqLworCQlpZiAoY3V0KQorCQkgICpjdXQgPSAnLic7IAorCSAgICAgIH0KKwkgIAorCSAgZm9yIChpbnRyID0gZGFlbW9uLT5pbnRfbmFtZXM7IGludHI7IGludHIgPSBpbnRyLT5uZXh0KQorCSAgICBpZiAoaW5fem9uZSh6b25lLCBpbnRyLT5uYW1lLCAmY3V0KSkKKwkgICAgICB7CisJCXN0cnVjdCBhZGRybGlzdCAqYWRkcmxpc3Q7CisJCQorCQlpZiAoY3V0KQorCQkgICpjdXQgPSAwOworCQkKKwkJZm9yIChhZGRybGlzdCA9IGludHItPmFkZHI7IGFkZHJsaXN0OyBhZGRybGlzdCA9IGFkZHJsaXN0LT5uZXh0KSAKKwkJICBpZiAoIShhZGRybGlzdC0+ZmxhZ3MgJiBBRERSTElTVF9JUFY2KSAmJgorCQkgICAgICAobG9jYWxfcXVlcnkgfHwgZmlsdGVyX3pvbmUoem9uZSwgRl9JUFY0LCAmYWRkcmxpc3QtPmFkZHIpKSAmJiAKKwkJICAgICAgYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIC1heGZyb2Zmc2V0LCAmYW5zcCwgCisJCQkJCSAgZGFlbW9uLT5hdXRoX3R0bCwgTlVMTCwgVF9BLCBDX0lOLCAiNCIsIGN1dCA/IGludHItPm5hbWUgOiBOVUxMLCAmYWRkcmxpc3QtPmFkZHIpKQorCQkgICAgYW5zY291bnQrKzsKKwkJCisjaWZkZWYgSEFWRV9JUFY2CisJCWZvciAoYWRkcmxpc3QgPSBpbnRyLT5hZGRyOyBhZGRybGlzdDsgYWRkcmxpc3QgPSBhZGRybGlzdC0+bmV4dCkgCisJCSAgaWYgKChhZGRybGlzdC0+ZmxhZ3MgJiBBRERSTElTVF9JUFY2KSAmJiAKKwkJICAgICAgKGxvY2FsX3F1ZXJ5IHx8IGZpbHRlcl96b25lKHpvbmUsIEZfSVBWNiwgJmFkZHJsaXN0LT5hZGRyKSkgJiYKKwkJICAgICAgYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIC1heGZyb2Zmc2V0LCAmYW5zcCwgCisJCQkJCSAgZGFlbW9uLT5hdXRoX3R0bCwgTlVMTCwgVF9BQUFBLCBDX0lOLCAiNiIsIGN1dCA/IGludHItPm5hbWUgOiBOVUxMLCAmYWRkcmxpc3QtPmFkZHIpKQorCQkgICAgYW5zY291bnQrKzsKKyNlbmRpZgkJICAgIAorCQkKKwkJLyogcmVzdG9yZSBjb25maWcgZGF0YSAqLworCQlpZiAoY3V0KQorCQkgICpjdXQgPSAnLic7IAorCSAgICAgIH0KKyAgICAgICAgICAgICAKKwkgIGZvciAoYSA9IGRhZW1vbi0+Y25hbWVzOyBhOyBhID0gYS0+bmV4dCkKKwkgICAgaWYgKGluX3pvbmUoem9uZSwgYS0+YWxpYXMsICZjdXQpKQorCSAgICAgIHsKKwkJc3RyY3B5KG5hbWUsIGEtPnRhcmdldCk7CisJCWlmICghc3RyY2hyKG5hbWUsICcuJykpCisJCSAgeworCQkgICAgc3RyY2F0KG5hbWUsICIuIik7CisJCSAgICBzdHJjYXQobmFtZSwgem9uZS0+ZG9tYWluKTsKKwkJICB9CisJCQorCQlpZiAoY3V0KQorCQkgICpjdXQgPSAwOworCQkKKwkJaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCAtYXhmcm9mZnNldCwgJmFuc3AsIAorCQkJCQlkYWVtb24tPmF1dGhfdHRsLCBOVUxMLAorCQkJCQlUX0NOQU1FLCBDX0lOLCAiZCIsICBjdXQgPyBhLT5hbGlhcyA6IE5VTEwsIG5hbWUpKQorCQkgIGFuc2NvdW50Kys7CisJICAgICAgfQorCQorCSAgY2FjaGVfZW51bWVyYXRlKDEpOworCSAgd2hpbGUgKChjcmVjcCA9IGNhY2hlX2VudW1lcmF0ZSgwKSkpCisJICAgIHsKKwkgICAgICBpZiAoKGNyZWNwLT5mbGFncyAmIChGX0lQVjQgfCBGX0lQVjYpKSAmJgorCQkgICEoY3JlY3AtPmZsYWdzICYgKEZfTkVHIHwgRl9OWERPTUFJTikpICYmCisJCSAgKGNyZWNwLT5mbGFncyAmIEZfRk9SV0FSRCkpCisJCXsKKwkJICBpZiAoKGNyZWNwLT5mbGFncyAmIEZfREhDUCkgJiYgIW9wdGlvbl9ib29sKE9QVF9ESENQX0ZRRE4pKQorCQkgICAgeworCQkgICAgICBjaGFyICpjYWNoZV9uYW1lID0gY2FjaGVfZ2V0X25hbWUoY3JlY3ApOworCQkgICAgICBpZiAoIXN0cmNocihjYWNoZV9uYW1lLCAnLicpICYmIAorCQkJICAobG9jYWxfcXVlcnkgfHwgZmlsdGVyX3pvbmUoem9uZSwgKGNyZWNwLT5mbGFncyAmIChGX0lQVjYgfCBGX0lQVjQpKSwgJihjcmVjcC0+YWRkci5hZGRyKSkpKQorCQkJeworCQkJICBxdHlwZSA9IFRfQTsKKyNpZmRlZiBIQVZFX0lQVjYKKwkJCSAgaWYgKGNyZWNwLT5mbGFncyAmIEZfSVBWNikKKwkJCSAgICBxdHlwZSA9IFRfQUFBQTsKKyNlbmRpZgorCQkJICBpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIC1heGZyb2Zmc2V0LCAmYW5zcCwgCisJCQkJCQkgIGRhZW1vbi0+YXV0aF90dGwsIE5VTEwsIHF0eXBlLCBDX0lOLCAKKwkJCQkJCSAgKGNyZWNwLT5mbGFncyAmIEZfSVBWNCkgPyAiNCIgOiAiNiIsIGNhY2hlX25hbWUsICZjcmVjcC0+YWRkcikpCisJCQkgICAgYW5zY291bnQrKzsKKwkJCX0KKwkJICAgIH0KKwkJICAKKwkJICBpZiAoKGNyZWNwLT5mbGFncyAmIEZfSE9TVFMpIHx8ICgoKGNyZWNwLT5mbGFncyAmIEZfREhDUCkgJiYgb3B0aW9uX2Jvb2woT1BUX0RIQ1BfRlFETikpKSkKKwkJICAgIHsKKwkJICAgICAgc3RyY3B5KG5hbWUsIGNhY2hlX2dldF9uYW1lKGNyZWNwKSk7CisJCSAgICAgIGlmIChpbl96b25lKHpvbmUsIG5hbWUsICZjdXQpICYmIAorCQkJICAobG9jYWxfcXVlcnkgfHwgZmlsdGVyX3pvbmUoem9uZSwgKGNyZWNwLT5mbGFncyAmIChGX0lQVjYgfCBGX0lQVjQpKSwgJihjcmVjcC0+YWRkci5hZGRyKSkpKQorCQkJeworCQkJICBxdHlwZSA9IFRfQTsKKyNpZmRlZiBIQVZFX0lQVjYKKwkJCSAgaWYgKGNyZWNwLT5mbGFncyAmIEZfSVBWNikKKwkJCSAgICBxdHlwZSA9IFRfQUFBQTsKKyNlbmRpZgorCQkJICAgaWYgKGN1dCkKKwkJCSAgICAgKmN1dCA9IDA7CisKKwkJCSAgIGlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgLWF4ZnJvZmZzZXQsICZhbnNwLCAKKwkJCQkJCSAgIGRhZW1vbi0+YXV0aF90dGwsIE5VTEwsIHF0eXBlLCBDX0lOLCAKKwkJCQkJCSAgIChjcmVjcC0+ZmxhZ3MgJiBGX0lQVjQpID8gIjQiIDogIjYiLCBjdXQgPyBuYW1lIDogTlVMTCwgJmNyZWNwLT5hZGRyKSkKKwkJCSAgICAgYW5zY291bnQrKzsKKwkJCX0KKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgCisJICAvKiByZXBlYXQgU09BIGFzIGxhc3QgcmVjb3JkICovCisJICBpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIGF4ZnJvZmZzZXQsICZhbnNwLCAKKwkJCQkgIGRhZW1vbi0+YXV0aF90dGwsIE5VTEwsIFRfU09BLCBDX0lOLCAiZGRsbGxsbCIsCisJCQkJICBkYWVtb24tPmF1dGhzZXJ2ZXIsICBkYWVtb24tPmhvc3RtYXN0ZXIsCisJCQkJICBkYWVtb24tPnNvYV9zbiwgZGFlbW9uLT5zb2FfcmVmcmVzaCwgCisJCQkJICBkYWVtb24tPnNvYV9yZXRyeSwgZGFlbW9uLT5zb2FfZXhwaXJ5LCAKKwkJCQkgIGRhZW1vbi0+YXV0aF90dGwpKQorCSAgICBhbnNjb3VudCsrOworCSAgCisJfQorICAgICAgCisgICAgfQorICAKKyAgLyogZG9uZSBhbGwgcXVlc3Rpb25zLCBzZXQgdXAgaGVhZGVyIGFuZCByZXR1cm4gbGVuZ3RoIG9mIHJlc3VsdCAqLworICAvKiBjbGVhciBhdXRob3JpdGF0aXZlIGFuZCB0cnVuY2F0ZWQgZmxhZ3MsIHNldCBRUiBmbGFnICovCisgIGhlYWRlci0+aGIzID0gKGhlYWRlci0+aGIzICYgfihIQjNfQUEgfCBIQjNfVEMpKSB8IEhCM19RUjsKKworICBpZiAobG9jYWxfcXVlcnkpCisgICAgeworICAgICAgLyogc2V0IFJBIGZsYWcgKi8KKyAgICAgIGhlYWRlci0+aGI0IHw9IEhCNF9SQTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBjbGVhciBSQSBmbGFnICovCisgICAgICBoZWFkZXItPmhiNCAmPSB+SEI0X1JBOworICAgIH0KKworICAvKiBhdXRob3JpdGl2ZSAqLworICBpZiAoYXV0aCkKKyAgICBoZWFkZXItPmhiMyB8PSBIQjNfQUE7CisgIAorICAvKiB0cnVuY2F0aW9uICovCisgIGlmICh0cnVuYykKKyAgICBoZWFkZXItPmhiMyB8PSBIQjNfVEM7CisgIAorICBpZiAoKGF1dGggfHwgbG9jYWxfcXVlcnkpICYmIG54ZG9tYWluKQorICAgIFNFVF9SQ09ERShoZWFkZXIsIE5YRE9NQUlOKTsKKyAgZWxzZQorICAgIFNFVF9SQ09ERShoZWFkZXIsIE5PRVJST1IpOyAvKiBubyBlcnJvciAqLworICBoZWFkZXItPmFuY291bnQgPSBodG9ucyhhbnNjb3VudCk7CisgIGhlYWRlci0+bnNjb3VudCA9IGh0b25zKGF1dGhjb3VudCk7CisgIGhlYWRlci0+YXJjb3VudCA9IGh0b25zKDApOworICByZXR1cm4gYW5zcCAtICh1bnNpZ25lZCBjaGFyICopaGVhZGVyOworfQorICAKKyNlbmRpZiAgCisgIAorCisKZGlmZiAtLWdpdCBhL3NyYy9ibG9ja2RhdGEuYyBiL3NyYy9ibG9ja2RhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTcwYTc5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jsb2NrZGF0YS5jCkBAIC0wLDAgKzEsMTUxIEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE0IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworI2lmZGVmIEhBVkVfRE5TU0VDCisKK3N0YXRpYyBzdHJ1Y3QgYmxvY2tkYXRhICprZXlibG9ja19mcmVlOworc3RhdGljIHVuc2lnbmVkIGludCBibG9ja2RhdGFfY291bnQsIGJsb2NrZGF0YV9od20sIGJsb2NrZGF0YV9hbGxvY2VkOworCitzdGF0aWMgdm9pZCBibG9ja2RhdGFfZXhwYW5kKGludCBuKQoreworICBzdHJ1Y3QgYmxvY2tkYXRhICpuZXcgPSB3aGluZV9tYWxsb2MobiAqIHNpemVvZihzdHJ1Y3QgYmxvY2tkYXRhKSk7CisgIAorICBpZiAobiA+IDAgJiYgbmV3KQorICAgIHsKKyAgICAgIGludCBpOworICAgICAgCisgICAgICBuZXdbbi0xXS5uZXh0ID0ga2V5YmxvY2tfZnJlZTsKKyAgICAgIGtleWJsb2NrX2ZyZWUgPSBuZXc7CisKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBuIC0gMTsgaSsrKQorCW5ld1tpXS5uZXh0ID0gJm5ld1tpKzFdOworCisgICAgICBibG9ja2RhdGFfYWxsb2NlZCArPSBuOworICAgIH0KK30KKworLyogUHJlYWxsb2NhdGUgc29tZSBibG9ja3MsIHByb3BvcnRpb25hbCB0byBjYWNoZXNpemUsIHRvIHJlZHVjZSBoZWFwIGZyYWdtZW50YXRpb24uICovCit2b2lkIGJsb2NrZGF0YV9pbml0KHZvaWQpCit7CisgIGtleWJsb2NrX2ZyZWUgPSBOVUxMOworICBibG9ja2RhdGFfYWxsb2NlZCA9IDA7CisgIGJsb2NrZGF0YV9jb3VudCA9IDA7CisgIGJsb2NrZGF0YV9od20gPSAwOworCisgIC8qIE5vdGUgdGhhdCBkYWVtb24tPmNhY2hlc2l6ZSBpcyBlbmZvcmNlZCB0byBoYXZlIG5vbi16ZXJvIHNpemUgaWYgT1BUX0ROU1NFQ19WQUxJRCBpcyBzZXQgKi8gIAorICBpZiAob3B0aW9uX2Jvb2woT1BUX0ROU1NFQ19WQUxJRCkpCisgICAgYmxvY2tkYXRhX2V4cGFuZCgoZGFlbW9uLT5jYWNoZXNpemUgKiAxMDApIC8gc2l6ZW9mKHN0cnVjdCBibG9ja2RhdGEpKTsKK30KKwordm9pZCBibG9ja2RhdGFfcmVwb3J0KHZvaWQpCit7CisgIGlmIChvcHRpb25fYm9vbChPUFRfRE5TU0VDX1ZBTElEKSkKKyAgICBteV9zeXNsb2coTE9HX0lORk8sIF8oIkROU1NFQyBtZW1vcnkgaW4gdXNlICV1LCBtYXggJXUsIGFsbG9jYXRlZCAldSIpLCAKKwkgICAgICBibG9ja2RhdGFfY291bnQgKiBzaXplb2Yoc3RydWN0IGJsb2NrZGF0YSksICAKKwkgICAgICBibG9ja2RhdGFfaHdtICogc2l6ZW9mKHN0cnVjdCBibG9ja2RhdGEpLCAgCisJICAgICAgYmxvY2tkYXRhX2FsbG9jZWQgKiBzaXplb2Yoc3RydWN0IGJsb2NrZGF0YSkpOworfSAKKworc3RydWN0IGJsb2NrZGF0YSAqYmxvY2tkYXRhX2FsbG9jKGNoYXIgKmRhdGEsIHNpemVfdCBsZW4pCit7CisgIHN0cnVjdCBibG9ja2RhdGEgKmJsb2NrLCAqcmV0ID0gTlVMTDsKKyAgc3RydWN0IGJsb2NrZGF0YSAqKnByZXYgPSAmcmV0OworICBzaXplX3QgYmxlbjsKKworICB3aGlsZSAobGVuID4gMCkKKyAgICB7CisgICAgICBpZiAoIWtleWJsb2NrX2ZyZWUpCisJYmxvY2tkYXRhX2V4cGFuZCg1MCk7CisgICAgICAKKyAgICAgIGlmIChrZXlibG9ja19mcmVlKQorCXsKKwkgIGJsb2NrID0ga2V5YmxvY2tfZnJlZTsKKwkgIGtleWJsb2NrX2ZyZWUgPSBibG9jay0+bmV4dDsKKwkgIGJsb2NrZGF0YV9jb3VudCsrOyAKKwl9CisgICAgICBlbHNlCisJeworCSAgLyogZmFpbGVkIHRvIGFsbG9jLCBmcmVlIHBhcnRpYWwgY2hhaW4gKi8KKwkgIGJsb2NrZGF0YV9mcmVlKHJldCk7CisJICByZXR1cm4gTlVMTDsKKwl9CisgICAgICAgCisgICAgICBpZiAoYmxvY2tkYXRhX2h3bSA8IGJsb2NrZGF0YV9jb3VudCkKKwlibG9ja2RhdGFfaHdtID0gYmxvY2tkYXRhX2NvdW50OyAKKyAgICAgIAorICAgICAgYmxlbiA9IGxlbiA+IEtFWUJMT0NLX0xFTiA/IEtFWUJMT0NLX0xFTiA6IGxlbjsKKyAgICAgIG1lbWNweShibG9jay0+a2V5LCBkYXRhLCBibGVuKTsKKyAgICAgIGRhdGEgKz0gYmxlbjsKKyAgICAgIGxlbiAtPSBibGVuOworICAgICAgKnByZXYgPSBibG9jazsKKyAgICAgIHByZXYgPSAmYmxvY2stPm5leHQ7CisgICAgICBibG9jay0+bmV4dCA9IE5VTEw7CisgICAgfQorICAKKyAgcmV0dXJuIHJldDsKK30KKwordm9pZCBibG9ja2RhdGFfZnJlZShzdHJ1Y3QgYmxvY2tkYXRhICpibG9ja3MpCit7CisgIHN0cnVjdCBibG9ja2RhdGEgKnRtcDsKKyAgCisgIGlmIChibG9ja3MpCisgICAgeworICAgICAgZm9yICh0bXAgPSBibG9ja3M7IHRtcC0+bmV4dDsgdG1wID0gdG1wLT5uZXh0KQorCWJsb2NrZGF0YV9jb3VudC0tOworICAgICAgdG1wLT5uZXh0ID0ga2V5YmxvY2tfZnJlZTsKKyAgICAgIGtleWJsb2NrX2ZyZWUgPSBibG9ja3M7IAorICAgICAgYmxvY2tkYXRhX2NvdW50LS07CisgICAgfQorfQorCisvKiBpZiBkYXRhID09IE5VTEwsIHJldHVybiBwb2ludGVyIHRvIHN0YXRpYyBibG9jayBvZiBzdWZmaWNpZW50IHNpemUgKi8KK3ZvaWQgKmJsb2NrZGF0YV9yZXRyaWV2ZShzdHJ1Y3QgYmxvY2tkYXRhICpibG9jaywgc2l6ZV90IGxlbiwgdm9pZCAqZGF0YSkKK3sKKyAgc2l6ZV90IGJsZW47CisgIHN0cnVjdCAgYmxvY2tkYXRhICpiOworICB2b2lkICpuZXcsICpkOworICAKKyAgc3RhdGljIHVuc2lnbmVkIGludCBidWZmX2xlbiA9IDA7CisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyICpidWZmID0gTlVMTDsKKyAgIAorICBpZiAoIWRhdGEpCisgICAgeworICAgICAgaWYgKGxlbiA+IGJ1ZmZfbGVuKQorCXsKKwkgIGlmICghKG5ldyA9IHdoaW5lX21hbGxvYyhsZW4pKSkKKwkgICAgcmV0dXJuIE5VTEw7CisJICBpZiAoYnVmZikKKwkgICAgZnJlZShidWZmKTsKKwkgIGJ1ZmYgPSBuZXc7CisJfQorICAgICAgZGF0YSA9IGJ1ZmY7CisgICAgfQorICAKKyAgZm9yIChkID0gZGF0YSwgYiA9IGJsb2NrOyBsZW4gPiAwICYmIGI7ICBiID0gYi0+bmV4dCkKKyAgICB7CisgICAgICBibGVuID0gbGVuID4gS0VZQkxPQ0tfTEVOID8gS0VZQkxPQ0tfTEVOIDogbGVuOworICAgICAgbWVtY3B5KGQsIGItPmtleSwgYmxlbik7CisgICAgICBkICs9IGJsZW47CisgICAgICBsZW4gLT0gYmxlbjsKKyAgICB9CisKKyAgcmV0dXJuIGRhdGE7Cit9CisgCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9icGYuYyBiL3NyYy9icGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDE2YjFjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JwZi5jCkBAIC0wLDAgKzEsNDQ4IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE0IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworI2lmIGRlZmluZWQoSEFWRV9CU0RfTkVUV09SSykgfHwgZGVmaW5lZChIQVZFX1NPTEFSSVNfTkVUV09SSykKKyNpbmNsdWRlIDxpZmFkZHJzLmg+CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8bmV0L2lmLmg+CisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisjaW5jbHVkZSA8bmV0L2lmX2RsLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pZl9ldGhlci5oPgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisjICBpbmNsdWRlIDxuZXQvaWZfdmFyLmg+IAorI2VuZGlmCisjaW5jbHVkZSA8bmV0aW5ldC9pbl92YXIuaD4KKyNpZmRlZiBIQVZFX0lQVjYKKyMgIGluY2x1ZGUgPG5ldGluZXQ2L2luNl92YXIuaD4KKyNlbmRpZgorCisjaWZuZGVmIFNBX1NJWkUKKyNkZWZpbmUgU0FfU0laRShzYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCAgKCEoc2EpIHx8ICgoc3RydWN0IHNvY2thZGRyICopKHNhKSktPnNhX2xlbiA9PSAwKSA/ICAgICAgXAorICAgICAgICBzaXplb2YobG9uZykgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgMSArICggKCgoc3RydWN0IHNvY2thZGRyICopKHNhKSktPnNhX2xlbiAtIDEpIHwgKHNpemVvZihsb25nKSAtIDEpICkgKQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0JTRF9ORVRXT1JLCitzdGF0aWMgaW50IGRlbF9mYW1pbHkgPSAwOworc3RhdGljIHN0cnVjdCBhbGxfYWRkciBkZWxfYWRkcjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX0JTRF9ORVRXT1JLKSAmJiAhZGVmaW5lZChfX0FQUExFX18pCisKK2ludCBhcnBfZW51bWVyYXRlKHZvaWQgKnBhcm0sIGludCAoKmNhbGxiYWNrKSgpKQoreworICBpbnQgbWliWzZdOworICBzaXplX3QgbmVlZGVkOworICBjaGFyICpuZXh0OworICBzdHJ1Y3QgcnRfbXNnaGRyICpydG07CisgIHN0cnVjdCBzb2NrYWRkcl9pbmFycCAqc2luMjsKKyAgc3RydWN0IHNvY2thZGRyX2RsICpzZGw7CisgIHN0cnVjdCBpb3ZlYyBidWZmOworICBpbnQgcmM7CisKKyAgYnVmZi5pb3ZfYmFzZSA9IE5VTEw7CisgIGJ1ZmYuaW92X2xlbiA9IDA7CisKKyAgbWliWzBdID0gQ1RMX05FVDsKKyAgbWliWzFdID0gUEZfUk9VVEU7CisgIG1pYlsyXSA9IDA7CisgIG1pYlszXSA9IEFGX0lORVQ7CisgIG1pYls0XSA9IE5FVF9SVF9GTEFHUzsKKyNpZmRlZiBSVEZfTExJTkZPCisgIG1pYls1XSA9IFJURl9MTElORk87CisjZWxzZQorICBtaWJbNV0gPSAwOworI2VuZGlmCQorICBpZiAoc3lzY3RsKG1pYiwgNiwgTlVMTCwgJm5lZWRlZCwgTlVMTCwgMCkgPT0gLTEgfHwgbmVlZGVkID09IDApCisgICAgcmV0dXJuIDA7CisKKyAgd2hpbGUgKDEpIAorICAgIHsKKyAgICAgIGlmICghZXhwYW5kX2J1ZigmYnVmZiwgbmVlZGVkKSkKKwlyZXR1cm4gMDsKKyAgICAgIGlmICgocmMgPSBzeXNjdGwobWliLCA2LCBidWZmLmlvdl9iYXNlLCAmbmVlZGVkLCBOVUxMLCAwKSkgPT0gMCB8fAorCSAgZXJybm8gIT0gRU5PTUVNKQorCWJyZWFrOworICAgICAgbmVlZGVkICs9IG5lZWRlZCAvIDg7CisgICAgfQorICBpZiAocmMgPT0gLTEpCisgICAgcmV0dXJuIDA7CisgIAorICBmb3IgKG5leHQgPSBidWZmLmlvdl9iYXNlIDsgbmV4dCA8IChjaGFyICopYnVmZi5pb3ZfYmFzZSArIG5lZWRlZDsgbmV4dCArPSBydG0tPnJ0bV9tc2dsZW4pCisgICAgeworICAgICAgcnRtID0gKHN0cnVjdCBydF9tc2doZHIgKiluZXh0OworICAgICAgc2luMiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW5hcnAgKikocnRtICsgMSk7CisgICAgICBzZGwgPSAoc3RydWN0IHNvY2thZGRyX2RsICopKChjaGFyICopc2luMiArIFNBX1NJWkUoc2luMikpOworICAgICAgaWYgKCEoKmNhbGxiYWNrKShBRl9JTkVULCAmc2luMi0+c2luX2FkZHIsIExMQUREUihzZGwpLCBzZGwtPnNkbF9hbGVuLCBwYXJtKSkKKwlyZXR1cm4gMDsKKyAgICB9CisKKyAgcmV0dXJuIDE7Cit9CisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0JTRF9ORVRXT1JLKSAmJiAhZGVmaW5lZChfX0FQUExFX18pICovCisKKworaW50IGlmYWNlX2VudW1lcmF0ZShpbnQgZmFtaWx5LCB2b2lkICpwYXJtLCBpbnQgKCpjYWxsYmFjaykoKSkKK3sKKyAgc3RydWN0IGlmYWRkcnMgKmhlYWQsICphZGRyczsKKyAgaW50IGVycnNhdiwgZmQgPSAtMSwgcmV0ID0gMDsKKworICBpZiAoZmFtaWx5ID09IEFGX1VOU1BFQykKKyNpZiBkZWZpbmVkKEhBVkVfQlNEX05FVFdPUkspICYmICFkZWZpbmVkKF9fQVBQTEVfXykKKyAgICByZXR1cm4gIGFycF9lbnVtZXJhdGUocGFybSwgY2FsbGJhY2spOworI2Vsc2UKKyAgcmV0dXJuIDA7IC8qIG5lZWQgY29kZSBmb3IgU29sYXJpcyBhbmQgTWFjT1MqLworI2VuZGlmCisKKyAgLyogQUZfTElOSyBkb2Vzbid0IGV4aXN0IGluIExpbnV4LCBzbyB3ZSBjYW4ndCB1c2UgaXQgaW4gb3VyIEFQSSAqLworICBpZiAoZmFtaWx5ID09IEFGX0xPQ0FMKQorICAgIGZhbWlseSA9IEFGX0xJTks7CisKKyAgaWYgKGdldGlmYWRkcnMoJmhlYWQpID09IC0xKQorICAgIHJldHVybiAwOworCisjaWYgZGVmaW5lZChIQVZFX0JTRF9ORVRXT1JLKSAmJiBkZWZpbmVkKEhBVkVfSVBWNikKKyAgaWYgKGZhbWlseSA9PSBBRl9JTkVUNikKKyAgICBmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7CisjZW5kaWYKKyAgCisgIGZvciAoYWRkcnMgPSBoZWFkOyBhZGRyczsgYWRkcnMgPSBhZGRycy0+aWZhX25leHQpCisgICAgeworICAgICAgaWYgKGFkZHJzLT5pZmFfYWRkci0+c2FfZmFtaWx5ID09IGZhbWlseSkKKwl7CisJICBpbnQgaWZhY2VfaW5kZXggPSBpZl9uYW1ldG9pbmRleChhZGRycy0+aWZhX25hbWUpOworCisJICBpZiAoaWZhY2VfaW5kZXggPT0gMCB8fCAhYWRkcnMtPmlmYV9hZGRyIHx8IAorCSAgICAgICghYWRkcnMtPmlmYV9uZXRtYXNrICYmIGZhbWlseSAhPSBBRl9MSU5LKSkKKwkgICAgY29udGludWU7CisKKwkgIGlmIChmYW1pbHkgPT0gQUZfSU5FVCkKKwkgICAgeworCSAgICAgIHN0cnVjdCBpbl9hZGRyIGFkZHIsIG5ldG1hc2ssIGJyb2FkY2FzdDsKKwkgICAgICBhZGRyID0gKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgYWRkcnMtPmlmYV9hZGRyKS0+c2luX2FkZHI7CisjaWZkZWYgSEFWRV9CU0RfTkVUV09SSworCSAgICAgIGlmIChkZWxfZmFtaWx5ID09IEFGX0lORVQgJiYgZGVsX2FkZHIuYWRkci5hZGRyNC5zX2FkZHIgPT0gYWRkci5zX2FkZHIpCisJCWNvbnRpbnVlOworI2VuZGlmCisJICAgICAgbmV0bWFzayA9ICgoc3RydWN0IHNvY2thZGRyX2luICopIGFkZHJzLT5pZmFfbmV0bWFzayktPnNpbl9hZGRyOworCSAgICAgIGlmIChhZGRycy0+aWZhX2Jyb2FkYWRkcikKKwkJYnJvYWRjYXN0ID0gKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgYWRkcnMtPmlmYV9icm9hZGFkZHIpLT5zaW5fYWRkcjsgCisJICAgICAgZWxzZSAKKwkJYnJvYWRjYXN0LnNfYWRkciA9IDA7CSAgICAgIAorCSAgICAgIGlmICghKCgqY2FsbGJhY2spKGFkZHIsIGlmYWNlX2luZGV4LCBOVUxMLCBuZXRtYXNrLCBicm9hZGNhc3QsIHBhcm0pKSkKKwkJZ290byBlcnI7CisJICAgIH0KKyNpZmRlZiBIQVZFX0lQVjYKKwkgIGVsc2UgaWYgKGZhbWlseSA9PSBBRl9JTkVUNikKKwkgICAgeworCSAgICAgIHN0cnVjdCBpbjZfYWRkciAqYWRkciA9ICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgYWRkcnMtPmlmYV9hZGRyKS0+c2luNl9hZGRyOworCSAgICAgIHVuc2lnbmVkIGNoYXIgKm5ldG1hc2sgPSAodW5zaWduZWQgY2hhciAqKSAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGFkZHJzLT5pZmFfbmV0bWFzayktPnNpbjZfYWRkcjsKKwkgICAgICBpbnQgc2NvcGVfaWQgPSAoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgYWRkcnMtPmlmYV9hZGRyKS0+c2luNl9zY29wZV9pZDsKKwkgICAgICBpbnQgaSwgaiwgcHJlZml4ID0gMDsKKwkgICAgICB1MzIgdmFsaWQgPSAweGZmZmZmZmZmLCBwcmVmZXJyZWQgPSAweGZmZmZmZmZmOworCSAgICAgIGludCBmbGFncyA9IDA7CisjaWZkZWYgSEFWRV9CU0RfTkVUV09SSworCSAgICAgIGlmIChkZWxfZmFtaWx5ID09IEFGX0lORVQ2ICYmIElONl9BUkVfQUREUl9FUVVBTCgmZGVsX2FkZHIuYWRkci5hZGRyNiwgYWRkcikpCisJCWNvbnRpbnVlOworI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX0JTRF9ORVRXT1JLKSAmJiAhZGVmaW5lZChfX0FQUExFX18pCisJICAgICAgc3RydWN0IGluNl9pZnJlcSBpZnI2OworCisJICAgICAgbWVtc2V0KCZpZnI2LCAwLCBzaXplb2YoaWZyNikpOworCSAgICAgIHN0cm5jcHkoaWZyNi5pZnJfbmFtZSwgYWRkcnMtPmlmYV9uYW1lLCBzaXplb2YoaWZyNi5pZnJfbmFtZSkpOworCSAgICAgIAorCSAgICAgIGlmcjYuaWZyX2FkZHIgPSAqKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGFkZHJzLT5pZmFfYWRkcik7CisJICAgICAgaWYgKGZkICE9IC0xICYmIGlvY3RsKGZkLCBTSU9DR0lGQUZMQUdfSU42LCAmaWZyNikgIT0gLTEpCisJCXsKKwkJICBpZiAoaWZyNi5pZnJfaWZydS5pZnJ1X2ZsYWdzNiAmIElONl9JRkZfVEVOVEFUSVZFKQorCQkgICAgZmxhZ3MgfD0gSUZBQ0VfVEVOVEFUSVZFOworCQkgIAorCQkgIGlmIChpZnI2Lmlmcl9pZnJ1LmlmcnVfZmxhZ3M2ICYgSU42X0lGRl9ERVBSRUNBVEVEKQorCQkgICAgZmxhZ3MgfD0gSUZBQ0VfREVQUkVDQVRFRDsKKworI2lmZGVmIElONl9JRkZfVEVNUE9SQVJZCisJCSAgaWYgKCEoaWZyNi5pZnJfaWZydS5pZnJ1X2ZsYWdzNiAmIChJTjZfSUZGX0FVVE9DT05GIHwgSU42X0lGRl9URU1QT1JBUlkpKSkKKwkJICAgIGZsYWdzIHw9IElGQUNFX1BFUk1BTkVOVDsKKyNlbmRpZgorCisjaWZkZWYgSU42X0lGRl9QUklWQUNZCisJCSAgaWYgKCEoaWZyNi5pZnJfaWZydS5pZnJ1X2ZsYWdzNiAmIChJTjZfSUZGX0FVVE9DT05GIHwgSU42X0lGRl9QUklWQUNZKSkpCisJCSAgICBmbGFncyB8PSBJRkFDRV9QRVJNQU5FTlQ7CisjZW5kaWYKKwkJfQorCSAgICAgIAorCSAgICAgIGlmcjYuaWZyX2FkZHIgPSAqKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGFkZHJzLT5pZmFfYWRkcik7CisJICAgICAgaWYgKGZkICE9IC0xICYmIGlvY3RsKGZkLCBTSU9DR0lGQUxJRkVUSU1FX0lONiwgJmlmcjYpICE9IC0xKQorCQl7CisJCSAgdmFsaWQgPSBpZnI2Lmlmcl9pZnJ1LmlmcnVfbGlmZXRpbWUuaWE2dF92bHRpbWU7CisJCSAgcHJlZmVycmVkID0gaWZyNi5pZnJfaWZydS5pZnJ1X2xpZmV0aW1lLmlhNnRfcGx0aW1lOworCQl9CisjZW5kaWYKKwkgICAgICAJICAgICAgCisJICAgICAgZm9yIChpID0gMDsgaSA8IElONkFERFJTWjsgaSsrLCBwcmVmaXggKz0gOCkgCisgICAgICAgICAgICAgICAgaWYgKG5ldG1hc2tbaV0gIT0gMHhmZikKKwkJICBicmVhazsKKwkgICAgICAKKwkgICAgICBpZiAoaSAhPSBJTjZBRERSU1ogJiYgbmV0bWFza1tpXSkgCisgICAgICAgICAgICAgICAgZm9yIChqID0gNzsgaiA+IDA7IGotLSwgcHJlZml4KyspIAorCQkgIGlmICgobmV0bWFza1tpXSAmICgxIDw8IGopKSA9PSAwKQorCQkgICAgYnJlYWs7CisJICAgICAgCisJICAgICAgLyogdm9vZG9vIHRvIGNsZWFyIGludGVyZmFjZSBmaWVsZCBpbiBhZGRyZXNzICovCisJICAgICAgaWYgKCFvcHRpb25fYm9vbChPUFRfTk9XSUxEKSAmJiBJTjZfSVNfQUREUl9MSU5LTE9DQUwoYWRkcikpCisJCXsKKwkJICBhZGRyLT5zNl9hZGRyWzJdID0gMDsKKwkJICBhZGRyLT5zNl9hZGRyWzNdID0gMDsKKwkJfSAKKwkgICAgIAorCSAgICAgIGlmICghKCgqY2FsbGJhY2spKGFkZHIsIHByZWZpeCwgc2NvcGVfaWQsIGlmYWNlX2luZGV4LCBmbGFncywKKwkJCQkoaW50KSBwcmVmZXJyZWQsIChpbnQpdmFsaWQsIHBhcm0pKSkKKwkJZ290byBlcnI7CSAgICAgIAorCSAgICB9CisjZW5kaWYgLyogSEFWRV9JUFY2ICovCisKKyNpZmRlZiBIQVZFX0RIQ1A2ICAgICAgCisJICBlbHNlIGlmIChmYW1pbHkgPT0gQUZfTElOSykKKwkgICAgeyAKKwkgICAgICAvKiBBc3N1bWUgZXRoZXJuZXQgYWdhaW4gaGVyZSAqLworCSAgICAgIHN0cnVjdCBzb2NrYWRkcl9kbCAqc2RsID0gKHN0cnVjdCBzb2NrYWRkcl9kbCAqKSBhZGRycy0+aWZhX2FkZHI7CisJICAgICAgaWYgKHNkbC0+c2RsX2FsZW4gIT0gMCAmJiAKKwkJICAhKCgqY2FsbGJhY2spKGlmYWNlX2luZGV4LCBBUlBIUkRfRVRIRVIsIExMQUREUihzZGwpLCBzZGwtPnNkbF9hbGVuLCBwYXJtKSkpCisJCWdvdG8gZXJyOworCSAgICB9CisjZW5kaWYgCisJfQorICAgIH0KKyAgCisgIHJldCA9IDE7CisKKyBlcnI6CisgIGVycnNhdiA9IGVycm5vOworICBmcmVlaWZhZGRycyhoZWFkKTsgCisgIGlmIChmZCAhPSAtMSkKKyAgICBjbG9zZShmZCk7CisgIGVycm5vID0gZXJyc2F2OworCisgIHJldHVybiByZXQ7Cit9CisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0JTRF9ORVRXT1JLKSB8fCBkZWZpbmVkKEhBVkVfU09MQVJJU19ORVRXT1JLKSAqLworCisKKyNpZiBkZWZpbmVkKEhBVkVfQlNEX05FVFdPUkspICYmIGRlZmluZWQoSEFWRV9ESENQKQorI2luY2x1ZGUgPG5ldC9icGYuaD4KKwordm9pZCBpbml0X2JwZih2b2lkKQoreworICBpbnQgaSA9IDA7CisKKyAgd2hpbGUgKDEpIAorICAgIHsKKyAgICAgIHNwcmludGYoZGFlbW9uLT5kaGNwX2J1ZmYsICIvZGV2L2JwZiVkIiwgaSsrKTsKKyAgICAgIGlmICgoZGFlbW9uLT5kaGNwX3Jhd19mZCA9IG9wZW4oZGFlbW9uLT5kaGNwX2J1ZmYsIE9fUkRXUiwgMCkpICE9IC0xKQorCXJldHVybjsKKworICAgICAgaWYgKGVycm5vICE9IEVCVVNZKQorCWRpZShfKCJjYW5ub3QgY3JlYXRlIERIQ1AgQlBGIHNvY2tldDogJXMiKSwgTlVMTCwgRUNfQkFETkVUKTsKKyAgICB9CSAgICAgCit9CisKK3ZvaWQgc2VuZF92aWFfYnBmKHN0cnVjdCBkaGNwX3BhY2tldCAqbWVzcywgc2l6ZV90IGxlbiwKKwkJICBzdHJ1Y3QgaW5fYWRkciBpZmFjZV9hZGRyLCBzdHJ1Y3QgaWZyZXEgKmlmcikKK3sKKyAgIC8qIEhhaXJ5IHN0dWZmLCBwYWNrZXQgZWl0aGVyIGhhcyB0byBnbyB0byB0aGUKKyAgICAgIG5ldCBicm9hZGNhc3Qgb3IgdGhlIGRlc3RpbmF0aW9uIGNhbid0IHJlcGx5IHRvIEFSUCB5ZXQsCisgICAgICBidXQgd2UgZG8ga25vdyB0aGUgcGh5c2ljYWwgYWRkcmVzcy4gCisgICAgICBCdWlsZCB0aGUgcGFja2V0IGJ5IHN0ZWFtLCBhbmQgc2VuZCBkaXJlY3RseSwgYnlwYXNzaW5nCisgICAgICB0aGUga2VybmVsIElQIHN0YWNrICovCisgIAorICBzdHJ1Y3QgZXRoZXJfaGVhZGVyIGV0aGVyOyAKKyAgc3RydWN0IGlwIGlwOworICBzdHJ1Y3QgdWRwaGRyIHsKKyAgICB1MTYgdWhfc3BvcnQ7ICAgICAgICAgICAgICAgLyogc291cmNlIHBvcnQgKi8KKyAgICB1MTYgdWhfZHBvcnQ7ICAgICAgICAgICAgICAgLyogZGVzdGluYXRpb24gcG9ydCAqLworICAgIHUxNiB1aF91bGVuOyAgICAgICAgICAgICAgICAvKiB1ZHAgbGVuZ3RoICovCisgICAgdTE2IHVoX3N1bTsgICAgICAgICAgICAgICAgIC8qIHVkcCBjaGVja3N1bSAqLworICB9IHVkcDsKKyAgCisgIHUzMiBpLCBzdW07CisgIHN0cnVjdCBpb3ZlYyBpb3ZbNF07CisKKyAgLyogT25seSBrbm93IGhvdyB0byBkbyBldGhlcm5ldCBvbiAqQlNEICovCisgIGlmIChtZXNzLT5odHlwZSAhPSBBUlBIUkRfRVRIRVIgfHwgbWVzcy0+aGxlbiAhPSBFVEhFUl9BRERSX0xFTikKKyAgICB7CisgICAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19XQVJOSU5HLCBfKCJESENQIHJlcXVlc3QgZm9yIHVuc3VwcG9ydGVkIGhhcmR3YXJlIHR5cGUgKCVkKSByZWNlaXZlZCBvbiAlcyIpLCAKKwkJbWVzcy0+aHR5cGUsIGlmci0+aWZyX25hbWUpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgIAorICBpZnItPmlmcl9hZGRyLnNhX2ZhbWlseSA9IEFGX0xJTks7CisgIGlmIChpb2N0bChkYWVtb24tPmRoY3BmZCwgU0lPQ0dJRkFERFIsIGlmcikgPCAwKQorICAgIHJldHVybjsKKyAgCisgIG1lbWNweShldGhlci5ldGhlcl9zaG9zdCwgTExBRERSKChzdHJ1Y3Qgc29ja2FkZHJfZGwgKikmaWZyLT5pZnJfYWRkciksIEVUSEVSX0FERFJfTEVOKTsKKyAgZXRoZXIuZXRoZXJfdHlwZSA9IGh0b25zKEVUSEVSVFlQRV9JUCk7CisgIAorICBpZiAobnRvaHMobWVzcy0+ZmxhZ3MpICYgMHg4MDAwKQorICAgIHsKKyAgICAgIG1lbXNldChldGhlci5ldGhlcl9kaG9zdCwgMjU1LCAgRVRIRVJfQUREUl9MRU4pOworICAgICAgaXAuaXBfZHN0LnNfYWRkciA9IElOQUREUl9CUk9BRENBU1Q7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbWVtY3B5KGV0aGVyLmV0aGVyX2Rob3N0LCBtZXNzLT5jaGFkZHIsIEVUSEVSX0FERFJfTEVOKTsgCisgICAgICBpcC5pcF9kc3Quc19hZGRyID0gbWVzcy0+eWlhZGRyLnNfYWRkcjsKKyAgICB9CisgIAorICBpcC5pcF9wID0gSVBQUk9UT19VRFA7CisgIGlwLmlwX3NyYy5zX2FkZHIgPSBpZmFjZV9hZGRyLnNfYWRkcjsKKyAgaXAuaXBfbGVuID0gaHRvbnMoc2l6ZW9mKHN0cnVjdCBpcCkgKyAKKwkJICAgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArCisJCSAgICBsZW4pIDsKKyAgaXAuaXBfaGwgPSBzaXplb2Yoc3RydWN0IGlwKSAvIDQ7CisgIGlwLmlwX3YgPSBJUFZFUlNJT047CisgIGlwLmlwX3RvcyA9IDA7CisgIGlwLmlwX2lkID0gaHRvbnMoMCk7CisgIGlwLmlwX29mZiA9IGh0b25zKDB4NDAwMCk7IC8qIGRvbid0IGZyYWdtZW50ICovCisgIGlwLmlwX3R0bCA9IElQREVGVFRMOworICBpcC5pcF9zdW0gPSAwOworICBmb3IgKHN1bSA9IDAsIGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBpcCkgLyAyOyBpKyspCisgICAgc3VtICs9ICgodTE2ICopJmlwKVtpXTsKKyAgd2hpbGUgKHN1bT4+MTYpCisgICAgc3VtID0gKHN1bSAmIDB4ZmZmZikgKyAoc3VtID4+IDE2KTsgIAorICBpcC5pcF9zdW0gPSAoc3VtID09IDB4ZmZmZikgPyBzdW0gOiB+c3VtOworICAKKyAgdWRwLnVoX3Nwb3J0ID0gaHRvbnMoZGFlbW9uLT5kaGNwX3NlcnZlcl9wb3J0KTsKKyAgdWRwLnVoX2Rwb3J0ID0gaHRvbnMoZGFlbW9uLT5kaGNwX2NsaWVudF9wb3J0KTsKKyAgaWYgKGxlbiAmIDEpCisgICAgKChjaGFyICopbWVzcylbbGVuXSA9IDA7IC8qIGZvciBjaGVja3N1bSwgaW4gY2FzZSBsZW5ndGggaXMgb2RkLiAqLworICB1ZHAudWhfc3VtID0gMDsKKyAgdWRwLnVoX3VsZW4gPSBzdW0gPSBodG9ucyhzaXplb2Yoc3RydWN0IHVkcGhkcikgKyBsZW4pOworICBzdW0gKz0gaHRvbnMoSVBQUk9UT19VRFApOworICBzdW0gKz0gaXAuaXBfc3JjLnNfYWRkciAmIDB4ZmZmZjsKKyAgc3VtICs9IChpcC5pcF9zcmMuc19hZGRyID4+IDE2KSAmIDB4ZmZmZjsKKyAgc3VtICs9IGlwLmlwX2RzdC5zX2FkZHIgJiAweGZmZmY7CisgIHN1bSArPSAoaXAuaXBfZHN0LnNfYWRkciA+PiAxNikgJiAweGZmZmY7CisgIGZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHVkcGhkcikvMjsgaSsrKQorICAgIHN1bSArPSAoKHUxNiAqKSZ1ZHApW2ldOworICBmb3IgKGkgPSAwOyBpIDwgKGxlbiArIDEpIC8gMjsgaSsrKQorICAgIHN1bSArPSAoKHUxNiAqKW1lc3MpW2ldOworICB3aGlsZSAoc3VtPj4xNikKKyAgICBzdW0gPSAoc3VtICYgMHhmZmZmKSArIChzdW0gPj4gMTYpOworICB1ZHAudWhfc3VtID0gKHN1bSA9PSAweGZmZmYpID8gc3VtIDogfnN1bTsKKyAgCisgIGlvY3RsKGRhZW1vbi0+ZGhjcF9yYXdfZmQsIEJJT0NTRVRJRiwgaWZyKTsKKyAgCisgIGlvdlswXS5pb3ZfYmFzZSA9ICZldGhlcjsKKyAgaW92WzBdLmlvdl9sZW4gPSBzaXplb2YoZXRoZXIpOworICBpb3ZbMV0uaW92X2Jhc2UgPSAmaXA7CisgIGlvdlsxXS5pb3ZfbGVuID0gc2l6ZW9mKGlwKTsKKyAgaW92WzJdLmlvdl9iYXNlID0gJnVkcDsKKyAgaW92WzJdLmlvdl9sZW4gPSBzaXplb2YodWRwKTsKKyAgaW92WzNdLmlvdl9iYXNlID0gbWVzczsKKyAgaW92WzNdLmlvdl9sZW4gPSBsZW47CisKKyAgd2hpbGUgKHdyaXRldihkYWVtb24tPmRoY3BfcmF3X2ZkLCBpb3YsIDQpID09IC0xICYmIHJldHJ5X3NlbmQoKSk7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfQlNEX05FVFdPUkspICYmIGRlZmluZWQoSEFWRV9ESENQKSAqLworIAorCisjaWZkZWYgSEFWRV9CU0RfTkVUV09SSworCit2b2lkIHJvdXRlX2luaXQodm9pZCkKK3sKKyAgLyogQUZfVU5TUEVDOiBhbGwgYWRkciBmYW1pbGllcyAqLworICBkYWVtb24tPnJvdXRlZmQgPSBzb2NrZXQoUEZfUk9VVEUsIFNPQ0tfUkFXLCBBRl9VTlNQRUMpOworICAKKyAgaWYgKGRhZW1vbi0+cm91dGVmZCA9PSAtMSB8fCAhZml4X2ZkKGRhZW1vbi0+cm91dGVmZCkpCisgICAgZGllKF8oImNhbm5vdCBjcmVhdGUgUEZfUk9VVEUgc29ja2V0OiAlcyIpLCBOVUxMLCBFQ19CQURORVQpOworfQorCit2b2lkIHJvdXRlX3NvY2sodm9pZCkKK3sKKyAgc3RydWN0IGlmX21zZ2hkciAqbXNnOworICBpbnQgcmMgPSByZWN2KGRhZW1vbi0+cm91dGVmZCwgZGFlbW9uLT5wYWNrZXQsIGRhZW1vbi0+cGFja2V0X2J1ZmZfc3osIDApOworCisgIGlmIChyYyA8IDQpCisgICAgcmV0dXJuOworCisgIG1zZyA9IChzdHJ1Y3QgaWZfbXNnaGRyICopZGFlbW9uLT5wYWNrZXQ7CisgIAorICBpZiAocmMgPCBtc2ctPmlmbV9tc2dsZW4pCisgICAgcmV0dXJuOworCisgICBpZiAobXNnLT5pZm1fdmVyc2lvbiAhPSBSVE1fVkVSU0lPTikKKyAgICAgeworICAgICAgIHN0YXRpYyBpbnQgd2FybmVkID0gMDsKKyAgICAgICBpZiAoIXdhcm5lZCkKKwkgeworCSAgIG15X3N5c2xvZyhMT0dfV0FSTklORywgXygiVW5rbm93biBwcm90b2NvbCB2ZXJzaW9uIGZyb20gcm91dGUgc29ja2V0IikpOworCSAgIHdhcm5lZCA9IDE7CisJIH0KKyAgICAgfQorICAgZWxzZSBpZiAobXNnLT5pZm1fdHlwZSA9PSBSVE1fTkVXQUREUikKKyAgICAgeworICAgICAgIGRlbF9mYW1pbHkgPSAwOworICAgICAgIHF1ZXVlX2V2ZW50KEVWRU5UX05FV0FERFIpOworICAgICB9CisgICBlbHNlIGlmIChtc2ctPmlmbV90eXBlID09IFJUTV9ERUxBRERSKQorICAgICB7CisgICAgICAgLyogVGhlcmUncyBhIHJhY2UgaW4gdGhlIGtlcm5lbCwgc3VjaCB0aGF0IGlmIHdlIHJ1biBpZmFjZV9lbnVtZXJhdGUoKSBpbW1lZGlhdGVseQorCSAgd2UgZ2V0IGEgREVMQUREUiBldmVudCwgdGhlIGRlbGV0ZWQgYWRkcmVzcyBzdGlsbCBhcHBlYXJzLiBIZXJlIHdlIHN0b3JlIHRoZSBkZWxldGVkIGFkZHJlc3MKKwkgIGluIGEgc3RhdGljIHZhcmlhYmxlLCBhbmQgb21pdCBpdCBmcm9tIHRoZSBzZXQgcmV0dXJuZWQgYnkgaWZhY2VfZW51bWVyYXRlKCkgKi8KKyAgICAgICBpbnQgbWFzayA9ICgoc3RydWN0IGlmYV9tc2doZHIgKiltc2cpLT5pZmFtX2FkZHJzOworICAgICAgIGludCBtYXNrdmVjW10gPSB7IFJUQV9EU1QsIFJUQV9HQVRFV0FZLCBSVEFfTkVUTUFTSywgUlRBX0dFTk1BU0ssCisJCQkgUlRBX0lGUCwgUlRBX0lGQSwgUlRBX0FVVEhPUiwgUlRBX0JSRCB9OworICAgICAgIGludCBvZjsKKyAgICAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICAgICAKKyAgICAgICBmb3IgKGkgPSAwLCAgb2YgPSBzaXplb2Yoc3RydWN0IGlmYV9tc2doZHIpOyBvZiA8IHJjICYmIGkgPCBzaXplb2YobWFza3ZlYykvc2l6ZW9mKG1hc2t2ZWNbMF0pOyBpKyspIAorCSBpZiAobWFzayAmIG1hc2t2ZWNbaV0pIAorCSAgIHsKKwkgICAgIHN0cnVjdCBzb2NrYWRkciAqc2EgPSAoc3RydWN0IHNvY2thZGRyICopKChjaGFyICopbXNnICsgb2YpOworCSAgICAgc2l6ZV90IGRpZmYgPSAoc2EtPnNhX2xlbiAhPSAwKSA/IHNhLT5zYV9sZW4gOiBzaXplb2YobG9uZyk7CisJICAgICAKKwkgICAgIGlmIChtYXNrdmVjW2ldID09IFJUQV9JRkEpCisJICAgICAgIHsKKwkJIGRlbF9mYW1pbHkgPSBzYS0+c2FfZmFtaWx5OworCQkgaWYgKGRlbF9mYW1pbHkgPT0gQUZfSU5FVCkKKwkJICAgZGVsX2FkZHIuYWRkci5hZGRyNCA9ICgoc3RydWN0IHNvY2thZGRyX2luICopc2EpLT5zaW5fYWRkcjsKKyNpZmRlZiBIQVZFX0lQVjYKKwkJIGVsc2UgaWYgKGRlbF9mYW1pbHkgPT0gQUZfSU5FVDYpCisJCSAgIGRlbF9hZGRyLmFkZHIuYWRkcjYgPSAoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYSktPnNpbjZfYWRkcjsKKyNlbmRpZgorCQkgZWxzZQorCQkgICBkZWxfZmFtaWx5ID0gMDsKKwkgICAgICAgfQorCSAgICAgCisJICAgICBvZiArPSBkaWZmOworCSAgICAgLyogcm91bmQgdXAgYXMgbmVlZGVkICovCisJICAgICBpZiAoZGlmZiAmIChzaXplb2YobG9uZykgLSAxKSkgCisJICAgICAgIG9mICs9IHNpemVvZihsb25nKSAtIChkaWZmICYgKHNpemVvZihsb25nKSAtIDEpKTsKKwkgICB9CisgICAgICAgCisgICAgICAgcXVldWVfZXZlbnQoRVZFTlRfTkVXQUREUik7CisgICAgIH0KK30KKworI2VuZGlmIC8qIEhBVkVfQlNEX05FVFdPUksgKi8KKworCmRpZmYgLS1naXQgYS9zcmMvY2FjaGUuYyBiL3NyYy9jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NWJlMDcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY2FjaGUuYwpAQCAtMCwwICsxLDE2NTUgQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMTQgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAiZG5zbWFzcS5oIgorCitzdGF0aWMgc3RydWN0IGNyZWMgKmNhY2hlX2hlYWQgPSBOVUxMLCAqY2FjaGVfdGFpbCA9IE5VTEwsICoqaGFzaF90YWJsZSA9IE5VTEw7CisjaWZkZWYgSEFWRV9ESENQCitzdGF0aWMgc3RydWN0IGNyZWMgKmRoY3Bfc3BhcmUgPSBOVUxMOworI2VuZGlmCitzdGF0aWMgc3RydWN0IGNyZWMgKm5ld19jaGFpbiA9IE5VTEw7CitzdGF0aWMgaW50IGNhY2hlX2luc2VydGVkID0gMCwgY2FjaGVfbGl2ZV9mcmVlZCA9IDAsIGluc2VydF9lcnJvcjsKK3N0YXRpYyB1bmlvbiBiaWduYW1lICpiaWdfZnJlZSA9IE5VTEw7CitzdGF0aWMgaW50IGJpZ25hbWVzX2xlZnQsIGhhc2hfc2l6ZTsKKworLyogdHlwZS0+c3RyaW5nIG1hcHBpbmc6IHRoaXMgaXMgYWxzbyB1c2VkIGJ5IHRoZSBuYW1lLWhhc2ggZnVuY3Rpb24gYXMgYSBtaXhpbmcgdGFibGUuICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgdW5zaWduZWQgaW50IHR5cGU7CisgIGNvbnN0IGNoYXIgKiBjb25zdCBuYW1lOworfSB0eXBlc3RyW10gPSB7CisgIHsgMSwgICAiQSIgfSwKKyAgeyAyLCAgICJOUyIgfSwKKyAgeyA1LCAgICJDTkFNRSIgfSwKKyAgeyA2LCAgICJTT0EiIH0sCisgIHsgMTAsICAiTlVMTCIgfSwKKyAgeyAxMSwgICJXS1MiIH0sCisgIHsgMTIsICAiUFRSIiB9LAorICB7IDEzLCAgIkhJTkZPIiB9LAkKKyAgeyAxNSwgICJNWCIgfSwKKyAgeyAxNiwgICJUWFQiIH0sCisgIHsgMjIsICAiTlNBUCIgfSwKKyAgeyAyMywgICJOU0FQX1BUUiIgfSwKKyAgeyAyNCwgICJTSUciIH0sCisgIHsgMjUsICAiS0VZIiB9LAorICB7IDI4LCAgIkFBQUEiIH0sCisgIHsgMzMsICAiU1JWIiB9LAorICB7IDM1LCAgIk5BUFRSIiB9LAorICB7IDM2LCAgIktYIiB9LAorICB7IDM3LCAgIkNFUlQiIH0sCisgIHsgMzgsICAiQTYiIH0sCisgIHsgMzksICAiRE5BTUUiIH0sCisgIHsgNDEsICAiT1BUIiB9LAorICB7IDQzLCAgIkRTIiB9LAorICB7IDQ2LCAgIlJSU0lHIiB9LAorICB7IDQ3LCAgIk5TRUMiIH0sCisgIHsgNDgsICAiRE5TS0VZIiB9LAorICB7IDUwLCAgIk5TRUMzIiB9LAorICB7IDI0OSwgIlRLRVkiIH0sCisgIHsgMjUwLCAiVFNJRyIgfSwKKyAgeyAyNTEsICJJWEZSIiB9LAorICB7IDI1MiwgIkFYRlIiIH0sCisgIHsgMjUzLCAiTUFJTEIiIH0sCisgIHsgMjU0LCAiTUFJTEEiIH0sCisgIHsgMjU1LCAiQU5ZIiB9Cit9OworCitzdGF0aWMgdm9pZCBjYWNoZV9mcmVlKHN0cnVjdCBjcmVjICpjcmVjcCk7CitzdGF0aWMgdm9pZCBjYWNoZV91bmxpbmsoc3RydWN0IGNyZWMgKmNyZWNwKTsKK3N0YXRpYyB2b2lkIGNhY2hlX2xpbmsoc3RydWN0IGNyZWMgKmNyZWNwKTsKK3N0YXRpYyB2b2lkIHJlaGFzaChpbnQgc2l6ZSk7CitzdGF0aWMgdm9pZCBjYWNoZV9oYXNoKHN0cnVjdCBjcmVjICpjcmVjcCk7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbmV4dF91aWQodm9pZCkKK3sKKyAgc3RhdGljIHVuc2lnbmVkIGludCB1aWQgPSAwOworCisgIHVpZCsrOworICAKKyAgLyogdWlkID09IDAgdXNlZCB0byBpbmRpY2F0ZSBDTkFNRSB0byBpbnRlcmZhY2UgbmFtZS4gKi8KKyAgaWYgKHVpZCA9PSBTUkNfSU5URVJGQUNFKQorICAgIHVpZCsrOworICAKKyAgcmV0dXJuIHVpZDsKK30KKwordm9pZCBjYWNoZV9pbml0KHZvaWQpCit7CisgIHN0cnVjdCBjcmVjICpjcmVjcDsKKyAgaW50IGk7CisgCisgIGJpZ25hbWVzX2xlZnQgPSBkYWVtb24tPmNhY2hlc2l6ZS8xMDsKKyAgCisgIGlmIChkYWVtb24tPmNhY2hlc2l6ZSA+IDApCisgICAgeworICAgICAgY3JlY3AgPSBzYWZlX21hbGxvYyhkYWVtb24tPmNhY2hlc2l6ZSpzaXplb2Yoc3RydWN0IGNyZWMpKTsKKyAgICAgIAorICAgICAgZm9yIChpPTA7IGkgPCBkYWVtb24tPmNhY2hlc2l6ZTsgaSsrLCBjcmVjcCsrKQorCXsKKwkgIGNhY2hlX2xpbmsoY3JlY3ApOworCSAgY3JlY3AtPmZsYWdzID0gMDsKKwkgIGNyZWNwLT51aWQgPSBuZXh0X3VpZCgpOworCX0KKyAgICB9CisgIAorICAvKiBjcmVhdGUgaW5pdGlhbCBoYXNoIHRhYmxlKi8KKyAgcmVoYXNoKGRhZW1vbi0+Y2FjaGVzaXplKTsKK30KKworLyogSW4gbW9zdCBjYXNlcywgd2UgY3JlYXRlIHRoZSBoYXNoIHRhYmxlIG9uY2UgaGVyZSBieSBjYWxsaW5nIHRoaXMgd2l0aCAoaGFzaF90YWJsZSA9PSBOVUxMKQorICAgYnV0IGlmIHRoZSBob3N0cyBmaWxlKHMpIGFyZSBiaWcgKHNvbWUgcGVvcGxlIGhhdmUgNTAwMDAgYWQtYmxvY2sgZW50cmllcyksIHRoZSB0YWJsZQorICAgd2lsbCBiZSBtdWNoIHRvbyBzbWFsbCwgc28gdGhlIGhvc3RzIHJlYWRpbmcgY29kZSBjYWxscyByZWhhc2ggZXZlcnkgMTAwMCBhZGRyZXNzZXMsIHRvCisgICBleHBhbmQgdGhlIHRhYmxlLiAqLworc3RhdGljIHZvaWQgcmVoYXNoKGludCBzaXplKQoreworICBzdHJ1Y3QgY3JlYyAqKm5ldywgKipvbGQsICpwLCAqdG1wOworICBpbnQgaSwgbmV3X3NpemUsIG9sZF9zaXplOworCisgIC8qIGhhc2hfc2l6ZSBpcyBhIHBvd2VyIG9mIHR3by4gKi8KKyAgZm9yIChuZXdfc2l6ZSA9IDY0OyBuZXdfc2l6ZSA8IHNpemUvMTA7IG5ld19zaXplID0gbmV3X3NpemUgPDwgMSk7CisgIAorICAvKiBtdXN0IHN1Y2NlZWQgaW4gZ2V0dGluZyBmaXJzdCBpbnN0YW5jZSwgZmFpbHVyZSBsYXRlciBpcyBub24tZmF0YWwgKi8KKyAgaWYgKCFoYXNoX3RhYmxlKQorICAgIG5ldyA9IHNhZmVfbWFsbG9jKG5ld19zaXplICogc2l6ZW9mKHN0cnVjdCBjcmVjICopKTsKKyAgZWxzZSBpZiAobmV3X3NpemUgPD0gaGFzaF9zaXplIHx8ICEobmV3ID0gd2hpbmVfbWFsbG9jKG5ld19zaXplICogc2l6ZW9mKHN0cnVjdCBjcmVjICopKSkpCisgICAgcmV0dXJuOworCisgIGZvcihpID0gMDsgaSA8IG5ld19zaXplOyBpKyspCisgICAgbmV3W2ldID0gTlVMTDsKKworICBvbGQgPSBoYXNoX3RhYmxlOworICBvbGRfc2l6ZSA9IGhhc2hfc2l6ZTsKKyAgaGFzaF90YWJsZSA9IG5ldzsKKyAgaGFzaF9zaXplID0gbmV3X3NpemU7CisgIAorICBpZiAob2xkKQorICAgIHsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBvbGRfc2l6ZTsgaSsrKQorCWZvciAocCA9IG9sZFtpXTsgcCA7IHAgPSB0bXApCisJICB7CisJICAgIHRtcCA9IHAtPmhhc2hfbmV4dDsKKwkgICAgY2FjaGVfaGFzaChwKTsKKwkgIH0KKyAgICAgIGZyZWUob2xkKTsKKyAgICB9Cit9CisgIAorc3RhdGljIHN0cnVjdCBjcmVjICoqaGFzaF9idWNrZXQoY2hhciAqbmFtZSkKK3sKKyAgdW5zaWduZWQgaW50IGMsIHZhbCA9IDAxNzQ2NTsgLyogQmFya2VyIGNvZGUgLSBtaW5pbXVtIHNlbGYtY29ycmVsYXRpb24gaW4gY3ljbGljIHNoaWZ0ICovCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1peF90YWIgPSAoY29uc3QgdW5zaWduZWQgY2hhciopdHlwZXN0cjsgCisKKyAgd2hpbGUoKGMgPSAodW5zaWduZWQgY2hhcikgKm5hbWUrKykpCisgICAgeworICAgICAgLyogZG9uJ3QgdXNlIHRvbG93ZXIgYW5kIGZyaWVuZHMgaGVyZSAtIHRoZXkgbWF5IGJlIG1lc3NlZCB1cCBieSBMT0NBTEUgKi8KKyAgICAgIGlmIChjID49ICdBJyAmJiBjIDw9ICdaJykKKwljICs9ICdhJyAtICdBJzsKKyAgICAgIHZhbCA9ICgodmFsIDw8IDcpIHwgKHZhbCA+PiAoMzIgLSA3KSkpICsgKG1peF90YWJbKHZhbCArIGMpICYgMHgzRl0gXiBjKTsKKyAgICB9IAorICAKKyAgLyogaGFzaF9zaXplIGlzIGEgcG93ZXIgb2YgdHdvICovCisgIHJldHVybiBoYXNoX3RhYmxlICsgKCh2YWwgXiAodmFsID4+IDE2KSkgJiAoaGFzaF9zaXplIC0gMSkpOworfQorCitzdGF0aWMgdm9pZCBjYWNoZV9oYXNoKHN0cnVjdCBjcmVjICpjcmVjcCkKK3sKKyAgLyogbWFpbnRhaW4gYW4gaW52YXJpYW50IHRoYXQgYWxsIGVudHJpZXMgd2l0aCBGX1JFVkVSU0Ugc2V0CisgICAgIGFyZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGhhc2gtY2hhaW4gIGFuZCBhbGwgbm9uLXJldmVyc2UKKyAgICAgaW1tb3J0YWwgZW50cmllcyBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgaGFzaC1jaGFpbi4KKyAgICAgVGhpcyBhbGxvd3MgcmV2ZXJzZSBzZWFyY2hlcyBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uIHRvIGJlIG9wdGltaXNlZCAqLworCisgIHN0cnVjdCBjcmVjICoqdXAgPSBoYXNoX2J1Y2tldChjYWNoZV9nZXRfbmFtZShjcmVjcCkpOworCisgIGlmICghKGNyZWNwLT5mbGFncyAmIEZfUkVWRVJTRSkpCisgICAgeworICAgICAgd2hpbGUgKCp1cCAmJiAoKCp1cCktPmZsYWdzICYgRl9SRVZFUlNFKSkKKwl1cCA9ICYoKCp1cCktPmhhc2hfbmV4dCk7IAorICAgICAgCisgICAgICBpZiAoY3JlY3AtPmZsYWdzICYgRl9JTU1PUlRBTCkKKwl3aGlsZSAoKnVwICYmICEoKCp1cCktPmZsYWdzICYgRl9JTU1PUlRBTCkpCisJICB1cCA9ICYoKCp1cCktPmhhc2hfbmV4dCk7CisgICAgfQorICBjcmVjcC0+aGFzaF9uZXh0ID0gKnVwOworICAqdXAgPSBjcmVjcDsKK30KKworI2lmZGVmIEhBVkVfRE5TU0VDCitzdGF0aWMgdm9pZCBjYWNoZV9ibG9ja2RhdGFfZnJlZShzdHJ1Y3QgY3JlYyAqY3JlY3ApCit7CisgIGlmIChjcmVjcC0+ZmxhZ3MgJiBGX0ROU0tFWSkKKyAgICB7CisgICAgICBpZiAoY3JlY3AtPmZsYWdzICYgRl9EUykKKwlibG9ja2RhdGFfZnJlZShjcmVjcC0+YWRkci5zaWcua2V5ZGF0YSk7CisgICAgICBlbHNlCisJYmxvY2tkYXRhX2ZyZWUoY3JlY3AtPmFkZHIua2V5LmtleWRhdGEpOworICAgIH0KKyAgZWxzZSBpZiAoKGNyZWNwLT5mbGFncyAmIEZfRFMpICYmICEoY3JlY3AtPmZsYWdzICYgRl9ORUcpKQorICAgIGJsb2NrZGF0YV9mcmVlKGNyZWNwLT5hZGRyLmRzLmtleWRhdGEpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGNhY2hlX2ZyZWUoc3RydWN0IGNyZWMgKmNyZWNwKQoreworICBjcmVjcC0+ZmxhZ3MgJj0gfkZfRk9SV0FSRDsKKyAgY3JlY3AtPmZsYWdzICY9IH5GX1JFVkVSU0U7CisgIGNyZWNwLT51aWQgPSBuZXh0X3VpZCgpOyAvKiBpbnZhbGlkYXRlIENOQU1FUyBwb2ludGluZyB0byB0aGlzLiAqLworCisgIGlmIChjYWNoZV90YWlsKQorICAgIGNhY2hlX3RhaWwtPm5leHQgPSBjcmVjcDsKKyAgZWxzZQorICAgIGNhY2hlX2hlYWQgPSBjcmVjcDsKKyAgY3JlY3AtPnByZXYgPSBjYWNoZV90YWlsOworICBjcmVjcC0+bmV4dCA9IE5VTEw7CisgIGNhY2hlX3RhaWwgPSBjcmVjcDsKKyAgCisgIC8qIHJldHJpZXZlIGJpZyBuYW1lIGZvciBmdXJ0aGVyIHVzZS4gKi8KKyAgaWYgKGNyZWNwLT5mbGFncyAmIEZfQklHTkFNRSkKKyAgICB7CisgICAgICBjcmVjcC0+bmFtZS5ibmFtZS0+bmV4dCA9IGJpZ19mcmVlOworICAgICAgYmlnX2ZyZWUgPSBjcmVjcC0+bmFtZS5ibmFtZTsKKyAgICAgIGNyZWNwLT5mbGFncyAmPSB+Rl9CSUdOQU1FOworICAgIH0KKworI2lmZGVmIEhBVkVfRE5TU0VDCisgIGNhY2hlX2Jsb2NrZGF0YV9mcmVlKGNyZWNwKTsKKyNlbmRpZgorfSAgICAKKworLyogaW5zZXJ0IGEgbmV3IGNhY2hlIGVudHJ5IGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0ICh5b3VuZ2VzdCBlbnRyeSkgKi8KK3N0YXRpYyB2b2lkIGNhY2hlX2xpbmsoc3RydWN0IGNyZWMgKmNyZWNwKQoreworICBpZiAoY2FjaGVfaGVhZCkgLyogY2hlY2sgbmVlZGVkIGZvciBpbml0IGNvZGUgKi8KKyAgICBjYWNoZV9oZWFkLT5wcmV2ID0gY3JlY3A7CisgIGNyZWNwLT5uZXh0ID0gY2FjaGVfaGVhZDsKKyAgY3JlY3AtPnByZXYgPSBOVUxMOworICBjYWNoZV9oZWFkID0gY3JlY3A7CisgIGlmICghY2FjaGVfdGFpbCkKKyAgICBjYWNoZV90YWlsID0gY3JlY3A7Cit9CisKKy8qIHJlbW92ZSBhbiBhcmJpdHJhcnkgY2FjaGUgZW50cnkgZm9yIHByb21vdGlvbiAqLyAKK3N0YXRpYyB2b2lkIGNhY2hlX3VubGluayAoc3RydWN0IGNyZWMgKmNyZWNwKQoreworICBpZiAoY3JlY3AtPnByZXYpCisgICAgY3JlY3AtPnByZXYtPm5leHQgPSBjcmVjcC0+bmV4dDsKKyAgZWxzZQorICAgIGNhY2hlX2hlYWQgPSBjcmVjcC0+bmV4dDsKKworICBpZiAoY3JlY3AtPm5leHQpCisgICAgY3JlY3AtPm5leHQtPnByZXYgPSBjcmVjcC0+cHJldjsKKyAgZWxzZQorICAgIGNhY2hlX3RhaWwgPSBjcmVjcC0+cHJldjsKK30KKworY2hhciAqY2FjaGVfZ2V0X25hbWUoc3RydWN0IGNyZWMgKmNyZWNwKQoreworICBpZiAoY3JlY3AtPmZsYWdzICYgRl9CSUdOQU1FKQorICAgIHJldHVybiBjcmVjcC0+bmFtZS5ibmFtZS0+bmFtZTsKKyAgZWxzZSBpZiAoY3JlY3AtPmZsYWdzICYgRl9OQU1FUCkgCisgICAgcmV0dXJuIGNyZWNwLT5uYW1lLm5hbWVwOworICAKKyAgcmV0dXJuIGNyZWNwLT5uYW1lLnNuYW1lOworfQorCitjaGFyICpjYWNoZV9nZXRfY25hbWVfdGFyZ2V0KHN0cnVjdCBjcmVjICpjcmVjcCkKK3sKKyAgaWYgKGNyZWNwLT5hZGRyLmNuYW1lLnVpZCAhPSBTUkNfSU5URVJGQUNFKQorICAgIHJldHVybiBjYWNoZV9nZXRfbmFtZShjcmVjcC0+YWRkci5jbmFtZS50YXJnZXQuY2FjaGUpOworCisgIHJldHVybiBjcmVjcC0+YWRkci5jbmFtZS50YXJnZXQuaW50X25hbWUtPm5hbWU7Cit9CisKKworCitzdHJ1Y3QgY3JlYyAqY2FjaGVfZW51bWVyYXRlKGludCBpbml0KQoreworICBzdGF0aWMgaW50IGJ1Y2tldDsKKyAgc3RhdGljIHN0cnVjdCBjcmVjICpjYWNoZTsKKworICBpZiAoaW5pdCkKKyAgICB7CisgICAgICBidWNrZXQgPSAwOworICAgICAgY2FjaGUgPSBOVUxMOworICAgIH0KKyAgZWxzZSBpZiAoY2FjaGUgJiYgY2FjaGUtPmhhc2hfbmV4dCkKKyAgICBjYWNoZSA9IGNhY2hlLT5oYXNoX25leHQ7CisgIGVsc2UKKyAgICB7CisgICAgICAgY2FjaGUgPSBOVUxMOyAKKyAgICAgICB3aGlsZSAoYnVja2V0IDwgaGFzaF9zaXplKQorCSBpZiAoKGNhY2hlID0gaGFzaF90YWJsZVtidWNrZXQrK10pKQorCSAgIGJyZWFrOworICAgIH0KKyAgCisgIHJldHVybiBjYWNoZTsKK30KKworc3RhdGljIGludCBpc19vdXRkYXRlZF9jbmFtZV9wb2ludGVyKHN0cnVjdCBjcmVjICpjcmVjcCkKK3sKKyAgaWYgKCEoY3JlY3AtPmZsYWdzICYgRl9DTkFNRSkgfHwgY3JlY3AtPmFkZHIuY25hbWUudWlkID09IFNSQ19JTlRFUkZBQ0UpCisgICAgcmV0dXJuIDA7CisgIAorICAvKiBOQi4gcmVjb3JkIG1heSBiZSByZXVzZWQgYXMgRFMgb3IgRE5TS0VZLCB3aGVyZSB1aWQgaXMgCisgICAgIG92ZXJsb2FkZWQgZm9yIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCAqLworICBpZiAoY3JlY3AtPmFkZHIuY25hbWUudGFyZ2V0LmNhY2hlICYmIAorICAgICAgKGNyZWNwLT5hZGRyLmNuYW1lLnRhcmdldC5jYWNoZS0+ZmxhZ3MgJiAoRl9JUFY0IHwgRl9JUFY2IHwgRl9DTkFNRSkpICYmCisgICAgICBjcmVjcC0+YWRkci5jbmFtZS51aWQgPT0gY3JlY3AtPmFkZHIuY25hbWUudGFyZ2V0LmNhY2hlLT51aWQpCisgICAgcmV0dXJuIDA7CisgIAorICByZXR1cm4gMTsKK30KKworc3RhdGljIGludCBpc19leHBpcmVkKHRpbWVfdCBub3csIHN0cnVjdCBjcmVjICpjcmVjcCkKK3sKKyAgaWYgKGNyZWNwLT5mbGFncyAmIEZfSU1NT1JUQUwpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKGRpZmZ0aW1lKG5vdywgY3JlY3AtPnR0ZCkgPCAwKQorICAgIHJldHVybiAwOworICAKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3JlYyAqY2FjaGVfc2Nhbl9mcmVlKGNoYXIgKm5hbWUsIHN0cnVjdCBhbGxfYWRkciAqYWRkciwgdGltZV90IG5vdywgdW5zaWduZWQgc2hvcnQgZmxhZ3MpCit7CisgIC8qIFNjYW4gYW5kIHJlbW92ZSBvbGQgZW50cmllcy4KKyAgICAgSWYgKGZsYWdzICYgRl9GT1JXQVJEKSB0aGVuIHJlbW92ZSBhbnkgZm9yd2FyZCBlbnRyaWVzIGZvciBuYW1lIGFuZCBhbnkgZXhwaXJlZAorICAgICBlbnRyaWVzIGJ1dCBvbmx5IGluIHRoZSBzYW1lIGhhc2ggYnVja2V0IGFzIG5hbWUuCisgICAgIElmIChmbGFncyAmIEZfUkVWRVJTRSkgdGhlbiByZW1vdmUgYW55IHJldmVyc2UgZW50cmllcyBmb3IgYWRkciBhbmQgYW55IGV4cGlyZWQKKyAgICAgZW50cmllcyBpbiB0aGUgd2hvbGUgY2FjaGUuCisgICAgIElmIChmbGFncyA9PSAwKSByZW1vdmUgYW55IGV4cGlyZWQgZW50cmllcyBpbiB0aGUgd2hvbGUgY2FjaGUuIAorCisgICAgIEluIHRoZSBmbGFncyAmIEZfRk9SV0FSRCBjYXNlLCB0aGUgcmV0dXJuIGNvZGUgaXMgdmFsaWQsIGFuZCByZXR1cm5zIGEgbm9uLU5VTEwgcG9pbnRlcgorICAgICB0byBhIGNhY2hlIGVudHJ5IGlmIHRoZSBuYW1lIGV4aXN0cyBpbiB0aGUgY2FjaGUgYXMgYSBIT1NUUyBvciBESENQIGVudHJ5ICh0aGVzZSBhcmUgbmV2ZXIgZGVsZXRlZCkKKworICAgICBXZSB0YWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IGhhc2ggY2hhaW5zIGhhdmUgc3R1ZmYgaW4gdGhlIG9yZGVyIDxyZXZlcnNlPiw8b3RoZXI+LDxpbW1vcnRhbD4KKyAgICAgc28gdGhhdCB3aGVuIHdlIGhpdCBhbiBlbnRyeSB3aGljaCBpc24ndCByZXZlcnNlIGFuZCBpcyBpbW1vcnRhbCwgd2UncmUgZG9uZS4gKi8KKyAKKyAgc3RydWN0IGNyZWMgKmNyZWNwLCAqKnVwOworICAKKyAgaWYgKGZsYWdzICYgRl9GT1JXQVJEKQorICAgIHsKKyAgICAgIGZvciAodXAgPSBoYXNoX2J1Y2tldChuYW1lKSwgY3JlY3AgPSAqdXA7IGNyZWNwOyBjcmVjcCA9IGNyZWNwLT5oYXNoX25leHQpCisJeworCSAgaWYgKGlzX2V4cGlyZWQobm93LCBjcmVjcCkgfHwgaXNfb3V0ZGF0ZWRfY25hbWVfcG9pbnRlcihjcmVjcCkpCisJICAgIHsgCisJICAgICAgKnVwID0gY3JlY3AtPmhhc2hfbmV4dDsKKwkgICAgICBpZiAoIShjcmVjcC0+ZmxhZ3MgJiAoRl9IT1NUUyB8IEZfREhDUCB8IEZfQ09ORklHKSkpCisJCXsKKwkJICBjYWNoZV91bmxpbmsoY3JlY3ApOworCQkgIGNhY2hlX2ZyZWUoY3JlY3ApOworCQl9CisJICAgICAgY29udGludWU7CisJICAgIH0gCisJCisJICBpZiAoKGNyZWNwLT5mbGFncyAmIEZfRk9SV0FSRCkgJiYgaG9zdG5hbWVfaXNlcXVhbChjYWNoZV9nZXRfbmFtZShjcmVjcCksIG5hbWUpKQorCSAgICB7CisJICAgICAgLyogRG9uJ3QgZGVsZXRlIEROU1NFQyBpbiBmYXZvdXIgb2YgYSBDTkFNRSwgdGhleSBjYW4gY28tZXhpc3QgKi8KKwkgICAgICBpZiAoKGZsYWdzICYgY3JlY3AtPmZsYWdzICYgKEZfSVBWNCB8IEZfSVBWNikpIHx8IAorCQkgICgoKGNyZWNwLT5mbGFncyB8IGZsYWdzKSAmIEZfQ05BTUUpICYmICEoY3JlY3AtPmZsYWdzICYgKEZfRE5TS0VZIHwgRl9EUykpKSkKKwkJeworCQkgIGlmIChjcmVjcC0+ZmxhZ3MgJiAoRl9IT1NUUyB8IEZfREhDUCB8IEZfQ09ORklHKSkKKwkJICAgIHJldHVybiBjcmVjcDsKKwkJICAqdXAgPSBjcmVjcC0+aGFzaF9uZXh0OworCQkgIGNhY2hlX3VubGluayhjcmVjcCk7CisJCSAgY2FjaGVfZnJlZShjcmVjcCk7CisJCSAgY29udGludWU7CisJCX0KKwkgICAgICAKKyNpZmRlZiBIQVZFX0ROU1NFQworCSAgICAgIC8qIERlbGV0aW9uIGhhcyB0byBiZSBjbGFzcy1zZW5zaXRpdmUgZm9yIERTLCBETlNLRVksIFJSU0lHLCBhbHNvIAorCQkgdHlwZS1jb3ZlcmVkIHNlbnNpdGl2ZSBmb3IgIFJSU0lHICovCisJICAgICAgaWYgKChmbGFncyAmIChGX0ROU0tFWSB8IEZfRFMpKSAmJgorCQkgIChmbGFncyAmIChGX0ROU0tFWSB8IEZfRFMpKSA9PSAoY3JlY3AtPmZsYWdzICYgKEZfRE5TS0VZIHwgRl9EUykpICYmCisJCSAgY3JlY3AtPnVpZCA9PSBhZGRyLT5hZGRyLmRuc3NlYy5jbGFzcyAmJgorCQkgICghKChmbGFncyAmIChGX0RTIHwgRl9ETlNLRVkpKSA9PSAoRl9EUyB8IEZfRE5TS0VZKSkgfHwgCisJCSAgIGNyZWNwLT5hZGRyLnNpZy50eXBlX2NvdmVyZWQgPT0gYWRkci0+YWRkci5kbnNzZWMudHlwZSkpCisJCXsKKwkJICBpZiAoY3JlY3AtPmZsYWdzICYgRl9DT05GSUcpCisJCSAgICByZXR1cm4gY3JlY3A7CisJCSAgKnVwID0gY3JlY3AtPmhhc2hfbmV4dDsKKwkJICBjYWNoZV91bmxpbmsoY3JlY3ApOworCQkgIGNhY2hlX2ZyZWUoY3JlY3ApOworCQkgIGNvbnRpbnVlOworCQl9CisjZW5kaWYKKwkgICAgfQorCSAgdXAgPSAmY3JlY3AtPmhhc2hfbmV4dDsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaW50IGk7CisjaWZkZWYgSEFWRV9JUFY2CisgICAgICBpbnQgYWRkcmxlbiA9IChmbGFncyAmIEZfSVBWNikgPyBJTjZBRERSU1ogOiBJTkFERFJTWjsKKyNlbHNlCisgICAgICBpbnQgYWRkcmxlbiA9IElOQUREUlNaOworI2VuZGlmIAorICAgICAgZm9yIChpID0gMDsgaSA8IGhhc2hfc2l6ZTsgaSsrKQorCWZvciAoY3JlY3AgPSBoYXNoX3RhYmxlW2ldLCB1cCA9ICZoYXNoX3RhYmxlW2ldOyAKKwkgICAgIGNyZWNwICYmICgoY3JlY3AtPmZsYWdzICYgRl9SRVZFUlNFKSB8fCAhKGNyZWNwLT5mbGFncyAmIEZfSU1NT1JUQUwpKTsKKwkgICAgIGNyZWNwID0gY3JlY3AtPmhhc2hfbmV4dCkKKwkgIGlmIChpc19leHBpcmVkKG5vdywgY3JlY3ApKQorCSAgICB7CisJICAgICAgKnVwID0gY3JlY3AtPmhhc2hfbmV4dDsKKwkgICAgICBpZiAoIShjcmVjcC0+ZmxhZ3MgJiAoRl9IT1NUUyB8IEZfREhDUCB8IEZfQ09ORklHKSkpCisJCXsgCisJCSAgY2FjaGVfdW5saW5rKGNyZWNwKTsKKwkJICBjYWNoZV9mcmVlKGNyZWNwKTsKKwkJfQorCSAgICB9CisJICBlbHNlIGlmICghKGNyZWNwLT5mbGFncyAmIChGX0hPU1RTIHwgRl9ESENQIHwgRl9DT05GSUcpKSAmJgorCQkgICAoZmxhZ3MgJiBjcmVjcC0+ZmxhZ3MgJiBGX1JFVkVSU0UpICYmIAorCQkgICAoZmxhZ3MgJiBjcmVjcC0+ZmxhZ3MgJiAoRl9JUFY0IHwgRl9JUFY2KSkgJiYKKwkJICAgbWVtY21wKCZjcmVjcC0+YWRkci5hZGRyLCBhZGRyLCBhZGRybGVuKSA9PSAwKQorCSAgICB7CisJICAgICAgKnVwID0gY3JlY3AtPmhhc2hfbmV4dDsKKwkgICAgICBjYWNoZV91bmxpbmsoY3JlY3ApOworCSAgICAgIGNhY2hlX2ZyZWUoY3JlY3ApOworCSAgICB9CisJICBlbHNlCisJICAgIHVwID0gJmNyZWNwLT5oYXNoX25leHQ7CisgICAgfQorICAKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIE5vdGU6IFRoZSBub3JtYWwgY2FsbGluZyBzZXF1ZW5jZSBpcworICAgY2FjaGVfc3RhcnRfaW5zZXJ0CisgICBjYWNoZV9pbnNlcnQgKiBuCisgICBjYWNoZV9lbmRfaW5zZXJ0CisKKyAgIGJ1dCBhbiBhYm9ydCBjYW4gY2F1c2UgdGhlIGNhY2hlX2VuZF9pbnNlcnQgdG8gYmUgbWlzc2VkIAorICAgaW4gd2hpY2ggY2FuIHRoZSBuZXh0IGNhY2hlX3N0YXJ0X2luc2VydCBjbGVhbnMgdGhpbmdzIHVwLiAqLworCit2b2lkIGNhY2hlX3N0YXJ0X2luc2VydCh2b2lkKQoreworICAvKiBGcmVlIGFueSBlbnRyaWVzIHdoaWNoIGRpZG4ndCBnZXQgY29tbWl0dGVkIGR1cmluZyB0aGUgbGFzdAorICAgICBpbnNlcnQgZHVlIHRvIGVycm9yLgorICAqLworICB3aGlsZSAobmV3X2NoYWluKQorICAgIHsKKyAgICAgIHN0cnVjdCBjcmVjICp0bXAgPSBuZXdfY2hhaW4tPm5leHQ7CisgICAgICBjYWNoZV9mcmVlKG5ld19jaGFpbik7CisgICAgICBuZXdfY2hhaW4gPSB0bXA7CisgICAgfQorICBuZXdfY2hhaW4gPSBOVUxMOworICBpbnNlcnRfZXJyb3IgPSAwOworfQorIAorc3RydWN0IGNyZWMgKmNhY2hlX2luc2VydChjaGFyICpuYW1lLCBzdHJ1Y3QgYWxsX2FkZHIgKmFkZHIsIAorCQkJICB0aW1lX3Qgbm93LCAgdW5zaWduZWQgbG9uZyB0dGwsIHVuc2lnbmVkIHNob3J0IGZsYWdzKQoreworICBzdHJ1Y3QgY3JlYyAqbmV3OworICB1bmlvbiBiaWduYW1lICpiaWdfbmFtZSA9IE5VTEw7CisgIGludCBmcmVlZF9hbGwgPSBmbGFncyAmIEZfUkVWRVJTRTsKKyAgaW50IGZyZWVfYXZhaWwgPSAwOworCisgIC8qIERvbid0IGxvZyBETlNTRUMgcmVjb3JkcyBoZXJlLCBkb25lIGVsc2V3aGVyZSAqLworICBpZiAoZmxhZ3MgJiAoRl9JUFY0IHwgRl9JUFY2IHwgRl9DTkFNRSkpCisgICAgeworICAgICAgbG9nX3F1ZXJ5KGZsYWdzIHwgRl9VUFNUUkVBTSwgbmFtZSwgYWRkciwgTlVMTCk7CisgICAgICAvKiBEb24ndCBtZXNzIHdpdGggVFRMIGZvciBETlNTRUMgcmVjb3Jkcy4gKi8KKyAgICAgIGlmIChkYWVtb24tPm1heF9jYWNoZV90dGwgIT0gMCAmJiBkYWVtb24tPm1heF9jYWNoZV90dGwgPCB0dGwpCisJdHRsID0gZGFlbW9uLT5tYXhfY2FjaGVfdHRsOworICAgICAgaWYgKGRhZW1vbi0+bWluX2NhY2hlX3R0bCAhPSAwICYmIGRhZW1vbi0+bWluX2NhY2hlX3R0bCA+IHR0bCkKKwl0dGwgPSBkYWVtb24tPm1pbl9jYWNoZV90dGw7CisgICAgfQorCisgIC8qIGlmIHByZXZpb3VzIGluc2VydGlvbiBmYWlsZWQgZ2l2ZSB1cCBub3cuICovCisgIGlmIChpbnNlcnRfZXJyb3IpCisgICAgcmV0dXJuIE5VTEw7CisgIAorICAvKiBGaXJzdCByZW1vdmUgYW55IGV4cGlyZWQgZW50cmllcyBhbmQgZW50cmllcyBmb3IgdGhlIG5hbWUvYWRkcmVzcyB3ZQorICAgICBhcmUgY3VycmVudGx5IGluc2VydGluZy4gKi8KKyAgaWYgKChuZXcgPSBjYWNoZV9zY2FuX2ZyZWUobmFtZSwgYWRkciwgbm93LCBmbGFncykpKQorICAgIHsKKyAgICAgIC8qIFdlJ3JlIHRyeWluZyB0byBpbnNlcnQgYSByZWNvcmQgb3ZlciBvbmUgZnJvbSAKKwkgL2V0Yy9ob3N0cyBvciBESENQLCBvciBvdGhlciBjb25maWcuIElmIHRoZSAKKwkgZXhpc3RpbmcgcmVjb3JkIGlzIGZvciBhbiBBIG9yIEFBQUEgYW5kCisJIHRoZSByZWNvcmQgd2UncmUgdHJ5aW5nIHRvIGluc2VydCBpcyB0aGUgc2FtZSwgCisJIGp1c3QgZHJvcCB0aGUgaW5zZXJ0LCBidXQgZG9uJ3QgZXJyb3IgdGhlIHdob2xlIHByb2Nlc3MuICovCisgICAgICBpZiAoKGZsYWdzICYgKEZfSVBWNCB8IEZfSVBWNikpICYmIChmbGFncyAmIEZfRk9SV0FSRCkpCisJeworCSAgaWYgKChmbGFncyAmIEZfSVBWNCkgJiYgKG5ldy0+ZmxhZ3MgJiBGX0lQVjQpICYmCisJICAgICAgbmV3LT5hZGRyLmFkZHIuYWRkci5hZGRyNC5zX2FkZHIgPT0gYWRkci0+YWRkci5hZGRyNC5zX2FkZHIpCisJICAgIHJldHVybiBuZXc7CisjaWZkZWYgSEFWRV9JUFY2CisJICBlbHNlIGlmICgoZmxhZ3MgJiBGX0lQVjYpICYmIChuZXctPmZsYWdzICYgRl9JUFY2KSAmJgorCQkgICBJTjZfQVJFX0FERFJfRVFVQUwoJm5ldy0+YWRkci5hZGRyLmFkZHIuYWRkcjYsICZhZGRyLT5hZGRyLmFkZHI2KSkKKwkgICAgcmV0dXJuIG5ldzsKKyNlbmRpZgorCX0KKyAgICAgIAorICAgICAgaW5zZXJ0X2Vycm9yID0gMTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgCisgIC8qIE5vdyBnZXQgYSBjYWNoZSBlbnRyeSBmcm9tIHRoZSBlbmQgb2YgdGhlIExSVSBsaXN0ICovCisgIHdoaWxlICgxKSB7CisgICAgaWYgKCEobmV3ID0gY2FjaGVfdGFpbCkpIC8qIG5vIGVudHJpZXMgbGVmdCAtIGNhY2hlIGlzIHRvbyBzbWFsbCwgYmFpbCAqLworICAgICAgeworCWluc2VydF9lcnJvciA9IDE7CisJcmV0dXJuIE5VTEw7CisgICAgICB9CisgICAgCisgICAgLyogRW5kIG9mIExSVSBsaXN0IGlzIHN0aWxsIGluIHVzZTogaWYgd2UgZGlkbid0IHNjYW4gYWxsIHRoZSBoYXNoCisgICAgICAgY2hhaW5zIGZvciBleHBpcmVkIGVudHJpZXMgZG8gdGhhdCBub3cuIElmIHdlIGFscmVhZHkgdHJpZWQgdGhhdAorICAgICAgIHRoZW4gaXQncyB0aW1lIHRvIHN0YXJ0IHNwaWxsaW5nIHRoaW5ncy4gKi8KKyAgICAKKyAgICBpZiAobmV3LT5mbGFncyAmIChGX0ZPUldBUkQgfCBGX1JFVkVSU0UpKQorICAgICAgeyAKKwkvKiBJZiBmcmVlX2F2YWlsIHNldCwgd2UgYmVsaWV2ZSB0aGF0IGFuIGVudHJ5IGhhcyBiZWVuIGZyZWVkLgorCSAgIEJ1Z3MgaGF2ZSBiZWVuIGtub3duIHRvIG1ha2UgdGhpcyBub3QgdHJ1ZSwgcmVzdWx0aW5nIGluCisJICAgYSB0aWdodCBsb29wIGhlcmUuIElmIHRoYXQgaGFwcGVucywgYWJhbmRvbiB0aGUKKwkgICBpbnNlcnQuIE9uY2UgaW4gdGhpcyBzdGF0ZSwgYWxsIGluc2VydHMgd2lsbCBwcm9iYWJseSBmYWlsLiAqLworCWlmIChmcmVlX2F2YWlsKQorCSAgeworCSAgICBzdGF0aWMgaW50IHdhcm5lZCA9IDA7CisJICAgIGlmICghd2FybmVkKQorCSAgICAgIHsKKwkJbXlfc3lzbG9nKExPR19FUlIsIF8oIkludGVybmFsIGVycm9yIGluIGNhY2hlLiIpKTsKKwkJd2FybmVkID0gMTsKKwkgICAgICB9CisJICAgIGluc2VydF9lcnJvciA9IDE7CisJICAgIHJldHVybiBOVUxMOworCSAgfQorCQkKKwlpZiAoZnJlZWRfYWxsKQorCSAgeworCSAgICBzdHJ1Y3QgYWxsX2FkZHIgZnJlZV9hZGRyID0gbmV3LT5hZGRyLmFkZHI7OworCisjaWZkZWYgSEFWRV9ETlNTRUMKKwkgICAgLyogRm9yIEROU1NFQyByZWNvcmRzLCBhZGRyIGhvbGRzIGNsYXNzIGFuZCB0eXBlX2NvdmVyZWQgZm9yIFJSU0lHICovCisJICAgIGlmIChuZXctPmZsYWdzICYgKEZfRFMgfCBGX0ROU0tFWSkpCisJICAgICAgeworCQlmcmVlX2FkZHIuYWRkci5kbnNzZWMuY2xhc3MgPSBuZXctPnVpZDsKKwkJaWYgKChuZXctPmZsYWdzICYgKEZfRFMgfCBGX0ROU0tFWSkpID09IChGX0RTIHwgRl9ETlNLRVkpKQorCQkgIGZyZWVfYWRkci5hZGRyLmRuc3NlYy50eXBlID0gbmV3LT5hZGRyLnNpZy50eXBlX2NvdmVyZWQ7CisJICAgICAgfQorI2VuZGlmCisJICAgIAorCSAgICBmcmVlX2F2YWlsID0gMTsgLyogTXVzdCBiZSBmcmVlIHNwYWNlIG5vdy4gKi8KKwkgICAgY2FjaGVfc2Nhbl9mcmVlKGNhY2hlX2dldF9uYW1lKG5ldyksICZmcmVlX2FkZHIsIG5vdywgbmV3LT5mbGFncyk7CisJICAgIGNhY2hlX2xpdmVfZnJlZWQrKzsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIGNhY2hlX3NjYW5fZnJlZShOVUxMLCBOVUxMLCBub3csIDApOworCSAgICBmcmVlZF9hbGwgPSAxOworCSAgfQorCWNvbnRpbnVlOworICAgICAgfQorIAorICAgIC8qIENoZWNrIGlmIHdlIG5lZWQgdG8gYW5kIGNhbiBhbGxvY2F0ZSBleHRyYSBtZW1vcnkgZm9yIGEgbG9uZyBuYW1lLgorICAgICAgIElmIHRoYXQgZmFpbHMsIGdpdmUgdXAgbm93LCBhbHdheXMgc3VjY2VlZCBmb3IgRE5TU0VDIHJlY29yZHMuICovCisgICAgaWYgKG5hbWUgJiYgKHN0cmxlbihuYW1lKSA+IFNNQUxMRE5BTUUtMSkpCisgICAgICB7CisJaWYgKGJpZ19mcmVlKQorCSAgeyAKKwkgICAgYmlnX25hbWUgPSBiaWdfZnJlZTsKKwkgICAgYmlnX2ZyZWUgPSBiaWdfZnJlZS0+bmV4dDsKKwkgIH0KKwllbHNlIGlmICgoYmlnbmFtZXNfbGVmdCA9PSAwICYmICEoZmxhZ3MgJiAoRl9EUyB8IEZfRE5TS0VZKSkpIHx8CisJCSAhKGJpZ19uYW1lID0gKHVuaW9uIGJpZ25hbWUgKil3aGluZV9tYWxsb2Moc2l6ZW9mKHVuaW9uIGJpZ25hbWUpKSkpCisJICB7CisJICAgIGluc2VydF9lcnJvciA9IDE7CisJICAgIHJldHVybiBOVUxMOworCSAgfQorCWVsc2UgaWYgKGJpZ25hbWVzX2xlZnQgIT0gMCkKKwkgIGJpZ25hbWVzX2xlZnQtLTsKKwkKKyAgICAgIH0KKworICAgIC8qIEdvdCB0aGUgcmVzdDogZmluYWxseSBncmFiIGVudHJ5LiAqLworICAgIGNhY2hlX3VubGluayhuZXcpOworICAgIGJyZWFrOworICB9CisgIAorICBuZXctPmZsYWdzID0gZmxhZ3M7CisgIGlmIChiaWdfbmFtZSkKKyAgICB7CisgICAgICBuZXctPm5hbWUuYm5hbWUgPSBiaWdfbmFtZTsKKyAgICAgIG5ldy0+ZmxhZ3MgfD0gRl9CSUdOQU1FOworICAgIH0KKworICBpZiAobmFtZSkKKyAgICBzdHJjcHkoY2FjaGVfZ2V0X25hbWUobmV3KSwgbmFtZSk7CisgIGVsc2UKKyAgICAqY2FjaGVfZ2V0X25hbWUobmV3KSA9IDA7CisKKyAgaWYgKGFkZHIpCisgICAgeworI2lmZGVmIEhBVkVfRE5TU0VDCisgICAgICBpZiAoZmxhZ3MgJiAoRl9EUyB8IEZfRE5TS0VZKSkKKwluZXctPnVpZCA9IGFkZHItPmFkZHIuZG5zc2VjLmNsYXNzOworICAgICAgZWxzZQorI2VuZGlmCisJbmV3LT5hZGRyLmFkZHIgPSAqYWRkcjsJCisgICAgfQorCisgIG5ldy0+dHRkID0gbm93ICsgKHRpbWVfdCl0dGw7CisgIG5ldy0+bmV4dCA9IG5ld19jaGFpbjsKKyAgbmV3X2NoYWluID0gbmV3OworCisgIHJldHVybiBuZXc7Cit9CisKKy8qIGFmdGVyIGVuZCBvZiBpbnNlcnRpb24sIGNvbW1pdCB0aGUgbmV3IGVudHJpZXMgKi8KK3ZvaWQgY2FjaGVfZW5kX2luc2VydCh2b2lkKQoreworICBpZiAoaW5zZXJ0X2Vycm9yKQorICAgIHJldHVybjsKKyAgCisgIHdoaWxlIChuZXdfY2hhaW4pCisgICAgeyAKKyAgICAgIHN0cnVjdCBjcmVjICp0bXAgPSBuZXdfY2hhaW4tPm5leHQ7CisgICAgICAvKiBkcm9wIENOQU1FcyB3aGljaCBkaWRuJ3QgZmluZCBhIHRhcmdldC4gKi8KKyAgICAgIGlmIChpc19vdXRkYXRlZF9jbmFtZV9wb2ludGVyKG5ld19jaGFpbikpCisJY2FjaGVfZnJlZShuZXdfY2hhaW4pOworICAgICAgZWxzZQorCXsKKwkgIGNhY2hlX2hhc2gobmV3X2NoYWluKTsKKwkgIGNhY2hlX2xpbmsobmV3X2NoYWluKTsKKwkgIGNhY2hlX2luc2VydGVkKys7CisJfQorICAgICAgbmV3X2NoYWluID0gdG1wOworICAgIH0KKyAgbmV3X2NoYWluID0gTlVMTDsKK30KKworc3RydWN0IGNyZWMgKmNhY2hlX2ZpbmRfYnlfbmFtZShzdHJ1Y3QgY3JlYyAqY3JlY3AsIGNoYXIgKm5hbWUsIHRpbWVfdCBub3csIHVuc2lnbmVkIGludCBwcm90KQoreworICBzdHJ1Y3QgY3JlYyAqYW5zOworICBpbnQgbm9fcnIgPSBwcm90ICYgRl9OT19SUjsKKworICBwcm90ICY9IH5GX05PX1JSOworICAKKyAgaWYgKGNyZWNwKSAvKiBpdGVyYXRpbmcgKi8KKyAgICBhbnMgPSBjcmVjcC0+bmV4dDsKKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIGZpcnN0IHNlYXJjaCwgbG9vayBmb3IgcmVsZXZhbnQgZW50cmllcyBhbmQgcHVzaCB0byB0b3Agb2YgbGlzdAorCSBhbHNvIGZyZWUgYW55dGhpbmcgd2hpY2ggaGFzIGV4cGlyZWQgKi8KKyAgICAgIHN0cnVjdCBjcmVjICpuZXh0LCAqKnVwLCAqKmluc2VydCA9IE5VTEwsICoqY2hhaW5wID0gJmFuczsKKyAgICAgIHVuc2lnbmVkIHNob3J0IGluc19mbGFncyA9IDA7CisgICAgICAKKyAgICAgIGZvciAodXAgPSBoYXNoX2J1Y2tldChuYW1lKSwgY3JlY3AgPSAqdXA7IGNyZWNwOyBjcmVjcCA9IG5leHQpCisJeworCSAgbmV4dCA9IGNyZWNwLT5oYXNoX25leHQ7CisJICAKKwkgIGlmICghaXNfZXhwaXJlZChub3csIGNyZWNwKSAmJiAhaXNfb3V0ZGF0ZWRfY25hbWVfcG9pbnRlcihjcmVjcCkpCisJICAgIHsKKwkgICAgICBpZiAoKGNyZWNwLT5mbGFncyAmIEZfRk9SV0FSRCkgJiYgCisjaWZkZWYgSEFWRV9ETlNTRUMKKwkJICAoKChjcmVjcC0+ZmxhZ3MgJiAoRl9ETlNLRVkgfCBGX0RTKSkgPT0gKHByb3QgJiAoRl9ETlNLRVkgfCBGX0RTKSkpIHx8IChwcm90ICYgRl9OU0lHTUFUQ0gpKSAmJgorI2VuZGlmCisJCSAgKGNyZWNwLT5mbGFncyAmIHByb3QpICYmCisJCSAgaG9zdG5hbWVfaXNlcXVhbChjYWNoZV9nZXRfbmFtZShjcmVjcCksIG5hbWUpKQorCQl7CisJCSAgaWYgKGNyZWNwLT5mbGFncyAmIChGX0hPU1RTIHwgRl9ESENQIHwgRl9DT05GSUcpKQorCQkgICAgeworCQkgICAgICAqY2hhaW5wID0gY3JlY3A7CisJCSAgICAgIGNoYWlucCA9ICZjcmVjcC0+bmV4dDsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGNhY2hlX3VubGluayhjcmVjcCk7CisJCSAgICAgIGNhY2hlX2xpbmsoY3JlY3ApOworCQkgICAgfQorCSAgICAgIAkgICAgICAKKwkJICAvKiBNb3ZlIGFsbCBidXQgdGhlIGZpcnN0IGVudHJ5IHVwIHRoZSBoYXNoIGNoYWluCisJCSAgICAgdGhpcyBpbXBsZW1lbnRzIHJvdW5kLXJvYmluLiAKKwkJICAgICBNYWtlIHN1cmUgdGhhdCByZS1vcmRlcmluZyBkb2Vzbid0IGJyZWFrIHRoZSBoYXNoLWNoYWluCisJCSAgICAgb3JkZXIgaW52YXJpYW50cy4gCisJCSAgKi8KKwkJICBpZiAoaW5zZXJ0ICYmIChjcmVjcC0+ZmxhZ3MgJiAoRl9SRVZFUlNFIHwgRl9JTU1PUlRBTCkpID09IGluc19mbGFncykKKwkJICAgIHsKKwkJICAgICAgKnVwID0gY3JlY3AtPmhhc2hfbmV4dDsKKwkJICAgICAgY3JlY3AtPmhhc2hfbmV4dCA9ICppbnNlcnQ7CisJCSAgICAgICppbnNlcnQgPSBjcmVjcDsKKwkJICAgICAgaW5zZXJ0ID0gJmNyZWNwLT5oYXNoX25leHQ7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBpZiAoIWluc2VydCAmJiAhbm9fcnIpCisJCQl7CisJCQkgIGluc2VydCA9IHVwOworCQkJICBpbnNfZmxhZ3MgPSBjcmVjcC0+ZmxhZ3MgJiAoRl9SRVZFUlNFIHwgRl9JTU1PUlRBTCk7CisJCQl9CisJCSAgICAgIHVwID0gJmNyZWNwLT5oYXNoX25leHQ7IAorCQkgICAgfQorCQl9CisJICAgICAgZWxzZQorCQkvKiBjYXNlIDogbm90IGV4cGlyZWQsIGluY29ycmVjdCBlbnRyeS4gKi8KKwkJdXAgPSAmY3JlY3AtPmhhc2hfbmV4dDsgCisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8qIGV4cGlyZWQgZW50cnksIGZyZWUgaXQgKi8KKwkgICAgICAqdXAgPSBjcmVjcC0+aGFzaF9uZXh0OworCSAgICAgIGlmICghKGNyZWNwLT5mbGFncyAmIChGX0hPU1RTIHwgRl9ESENQIHwgRl9DT05GSUcpKSkKKwkJeyAKKwkJICBjYWNoZV91bmxpbmsoY3JlY3ApOworCQkgIGNhY2hlX2ZyZWUoY3JlY3ApOworCQl9CisJICAgIH0KKwl9CisJICAKKyAgICAgICpjaGFpbnAgPSBjYWNoZV9oZWFkOworICAgIH0KKworICBpZiAoYW5zICYmIAorICAgICAgKGFucy0+ZmxhZ3MgJiBGX0ZPUldBUkQpICYmCisjaWZkZWYgSEFWRV9ETlNTRUMKKyAgICAgICgoKGFucy0+ZmxhZ3MgJiAoRl9ETlNLRVkgfCBGX0RTKSkgPT0gKHByb3QgJiAoRl9ETlNLRVkgfCBGX0RTKSkpIHx8IChwcm90ICYgRl9OU0lHTUFUQ0gpKSAmJgorI2VuZGlmCisgICAgICAoYW5zLT5mbGFncyAmIHByb3QpICYmICAgICAKKyAgICAgIGhvc3RuYW1lX2lzZXF1YWwoY2FjaGVfZ2V0X25hbWUoYW5zKSwgbmFtZSkpCisgICAgcmV0dXJuIGFuczsKKyAgCisgIHJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgY3JlYyAqY2FjaGVfZmluZF9ieV9hZGRyKHN0cnVjdCBjcmVjICpjcmVjcCwgc3RydWN0IGFsbF9hZGRyICphZGRyLCAKKwkJCQl0aW1lX3Qgbm93LCB1bnNpZ25lZCBpbnQgcHJvdCkKK3sKKyAgc3RydWN0IGNyZWMgKmFuczsKKyNpZmRlZiBIQVZFX0lQVjYKKyAgaW50IGFkZHJsZW4gPSAocHJvdCA9PSBGX0lQVjYpID8gSU42QUREUlNaIDogSU5BRERSU1o7CisjZWxzZQorICBpbnQgYWRkcmxlbiA9IElOQUREUlNaOworI2VuZGlmCisgIAorICBpZiAoY3JlY3ApIC8qIGl0ZXJhdGluZyAqLworICAgIGFucyA9IGNyZWNwLT5uZXh0OworICBlbHNlCisgICAgeyAgCisgICAgICAvKiBmaXJzdCBzZWFyY2gsIGxvb2sgZm9yIHJlbGV2YW50IGVudHJpZXMgYW5kIHB1c2ggdG8gdG9wIG9mIGxpc3QKKwkgYWxzbyBmcmVlIGFueXRoaW5nIHdoaWNoIGhhcyBleHBpcmVkLiBBbGwgdGhlIHJldmVyc2UgZW50cmllcyBhcmUgYXQgdGhlCisJIHN0YXJ0IG9mIHRoZSBoYXNoIGNoYWluLCBzbyB3ZSBjYW4gZ2l2ZSB1cCB3aGVuIHdlIGZpbmQgdGhlIGZpcnN0IAorCSBub24tUkVWRVJTRSBvbmUuICAqLworICAgICAgIGludCBpOworICAgICAgIHN0cnVjdCBjcmVjICoqdXAsICoqY2hhaW5wID0gJmFuczsKKyAgICAgICAKKyAgICAgICBmb3IgKGk9MDsgaTxoYXNoX3NpemU7IGkrKykKKwkgZm9yIChjcmVjcCA9IGhhc2hfdGFibGVbaV0sIHVwID0gJmhhc2hfdGFibGVbaV07IAorCSAgICAgIGNyZWNwICYmIChjcmVjcC0+ZmxhZ3MgJiBGX1JFVkVSU0UpOworCSAgICAgIGNyZWNwID0gY3JlY3AtPmhhc2hfbmV4dCkKKwkgICBpZiAoIWlzX2V4cGlyZWQobm93LCBjcmVjcCkpCisJICAgICB7ICAgICAgCisJICAgICAgIGlmICgoY3JlY3AtPmZsYWdzICYgcHJvdCkgJiYKKwkJICAgbWVtY21wKCZjcmVjcC0+YWRkci5hZGRyLCBhZGRyLCBhZGRybGVuKSA9PSAwKQorCQkgewkgICAgCisJCSAgIGlmIChjcmVjcC0+ZmxhZ3MgJiAoRl9IT1NUUyB8IEZfREhDUCB8IEZfQ09ORklHKSkKKwkJICAgICB7CisJCSAgICAgICAqY2hhaW5wID0gY3JlY3A7CisJCSAgICAgICBjaGFpbnAgPSAmY3JlY3AtPm5leHQ7CisJCSAgICAgfQorCQkgICBlbHNlCisJCSAgICAgeworCQkgICAgICAgY2FjaGVfdW5saW5rKGNyZWNwKTsKKwkJICAgICAgIGNhY2hlX2xpbmsoY3JlY3ApOworCQkgICAgIH0KKwkJIH0KKwkgICAgICAgdXAgPSAmY3JlY3AtPmhhc2hfbmV4dDsKKwkgICAgIH0KKwkgICBlbHNlCisJICAgICB7CisJICAgICAgICp1cCA9IGNyZWNwLT5oYXNoX25leHQ7CisJICAgICAgIGlmICghKGNyZWNwLT5mbGFncyAmIChGX0hPU1RTIHwgRl9ESENQIHwgRl9DT05GSUcpKSkKKwkJIHsKKwkJICAgY2FjaGVfdW5saW5rKGNyZWNwKTsKKwkJICAgY2FjaGVfZnJlZShjcmVjcCk7CisJCSB9CisJICAgICB9CisgICAgICAgCisgICAgICAgKmNoYWlucCA9IGNhY2hlX2hlYWQ7CisgICAgfQorICAKKyAgaWYgKGFucyAmJiAKKyAgICAgIChhbnMtPmZsYWdzICYgRl9SRVZFUlNFKSAmJgorICAgICAgKGFucy0+ZmxhZ3MgJiBwcm90KSAmJgorICAgICAgbWVtY21wKCZhbnMtPmFkZHIuYWRkciwgYWRkciwgYWRkcmxlbikgPT0gMCkKKyAgICByZXR1cm4gYW5zOworICAKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9ob3N0c19jbmFtZShzdHJ1Y3QgY3JlYyAqdGFyZ2V0KQoreworICBzdHJ1Y3QgY3JlYyAqY3JlYzsKKyAgc3RydWN0IGNuYW1lICphOworICAKKyAgZm9yIChhID0gZGFlbW9uLT5jbmFtZXM7IGE7IGEgPSBhLT5uZXh0KQorICAgIGlmIChob3N0bmFtZV9pc2VxdWFsKGNhY2hlX2dldF9uYW1lKHRhcmdldCksIGEtPnRhcmdldCkgJiYKKwkoY3JlYyA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IGNyZWMpKSkpCisgICAgICB7CisJY3JlYy0+ZmxhZ3MgPSBGX0ZPUldBUkQgfCBGX0lNTU9SVEFMIHwgRl9OQU1FUCB8IEZfQ09ORklHIHwgRl9DTkFNRTsKKwljcmVjLT5uYW1lLm5hbWVwID0gYS0+YWxpYXM7CisJY3JlYy0+YWRkci5jbmFtZS50YXJnZXQuY2FjaGUgPSB0YXJnZXQ7CisJY3JlYy0+YWRkci5jbmFtZS51aWQgPSB0YXJnZXQtPnVpZDsKKwljcmVjLT51aWQgPSBuZXh0X3VpZCgpOworCWNhY2hlX2hhc2goY3JlYyk7CisJYWRkX2hvc3RzX2NuYW1lKGNyZWMpOyAvKiBoYW5kbGUgY2hhaW5zICovCisgICAgICB9Cit9CisgIAorc3RhdGljIHZvaWQgYWRkX2hvc3RzX2VudHJ5KHN0cnVjdCBjcmVjICpjYWNoZSwgc3RydWN0IGFsbF9hZGRyICphZGRyLCBpbnQgYWRkcmxlbiwgCisJCQkgICAgdW5zaWduZWQgaW50IGluZGV4LCBzdHJ1Y3QgY3JlYyAqKnJoYXNoLCBpbnQgaGFzaHN6KQoreworICBzdHJ1Y3QgY3JlYyAqbG9va3VwID0gY2FjaGVfZmluZF9ieV9uYW1lKE5VTEwsIGNhY2hlX2dldF9uYW1lKGNhY2hlKSwgMCwgY2FjaGUtPmZsYWdzICYgKEZfSVBWNCB8IEZfSVBWNikpOworICBpbnQgaSwgbmFtZWV4aXN0cyA9IDA7CisgIHVuc2lnbmVkIGludCBqOyAKKworICAvKiBSZW1vdmUgZHVwbGljYXRlcyBpbiBob3N0cyBmaWxlcy4gKi8KKyAgaWYgKGxvb2t1cCAmJiAobG9va3VwLT5mbGFncyAmIEZfSE9TVFMpKQorICAgIHsKKyAgICAgIG5hbWVleGlzdHMgPSAxOworICAgICAgaWYgKG1lbWNtcCgmbG9va3VwLT5hZGRyLmFkZHIsIGFkZHIsIGFkZHJsZW4pID09IDApCisJeworCSAgZnJlZShjYWNoZSk7CisJICByZXR1cm47CisJfQorICAgIH0KKyAgCisgIC8qIEVuc3VyZSB0aGVyZSBpcyBvbmx5IG9uZSBhZGRyZXNzIC0+IG5hbWUgbWFwcGluZyAoZmlyc3Qgb25lIHRydW1wcykgCisgICAgIFdlIGRvIHRoaXMgYnkgc3RlYW0gaGVyZSwgVGhlIGVudHJpZXMgYXJlIGtlcHQgaW4gaGFzaCBjaGFpbnMsIGxpbmtlZAorICAgICBieSAtPm5leHQgKHdoaWNoIGlzIHVudXNlZCBhdCB0aGlzIHBvaW50KSBoZWxkIGluIGhhc2ggYnVja2V0cyBpbgorICAgICB0aGUgYXJyYXkgcmhhc2gsIGhhc2hlZCBvbiBhZGRyZXNzLiBOb3RlIHRoYXQgcmhhc2ggYW5kIHRoZSB2YWx1ZXMKKyAgICAgaW4gLT5uZXh0IGFyZSBvbmx5IHZhbGlkICB3aGlsc3QgcmVhZGluZyBob3N0cyBmaWxlczogdGhlIGJ1Y2tldHMgYXJlCisgICAgIHRoZW4gZnJlZWQsIGFuZCB0aGUgLT5uZXh0IHBvaW50ZXIgdXNlZCBmb3Igb3RoZXIgdGhpbmdzLiAKKworICAgICBPbmx5IGluc2VydCBlYWNoIHVuaXF1ZSBhZGRyZXNzIG9uY2UgaW50byB0aGlzIGhhc2hpbmcgc3RydWN0dXJlLgorCisgICAgIFRoaXMgY29tcGxleGl0eSBhdm9pZHMgTyhuXjIpIGRpdmVyZ2VudCBDUFUgdXNlIHdoaWxzdCByZWFkaW5nCisgICAgIGxhcmdlICgxMDAwMCBlbnRyeSkgaG9zdHMgZmlsZXMuICovCisgIAorICAvKiBoYXNoIGFkZHJlc3MgKi8KKyAgZm9yIChqID0gMCwgaSA9IDA7IGkgPCBhZGRybGVuOyBpKyspCisgICAgaiA9IChqKjIgKygodW5zaWduZWQgY2hhciAqKWFkZHIpW2ldKSAlIGhhc2hzejsKKyAgCisgIGZvciAobG9va3VwID0gcmhhc2hbal07IGxvb2t1cDsgbG9va3VwID0gbG9va3VwLT5uZXh0KQorICAgIGlmICgobG9va3VwLT5mbGFncyAmIGNhY2hlLT5mbGFncyAmIChGX0lQVjQgfCBGX0lQVjYpKSAmJgorCW1lbWNtcCgmbG9va3VwLT5hZGRyLmFkZHIsIGFkZHIsIGFkZHJsZW4pID09IDApCisgICAgICB7CisJY2FjaGUtPmZsYWdzICY9IH5GX1JFVkVSU0U7CisJYnJlYWs7CisgICAgICB9CisgIAorICAvKiBtYWludGFpbiBhZGRyZXNzIGhhc2ggY2hhaW4sIGluc2VydCBuZXcgdW5pcXVlIGFkZHJlc3MgKi8KKyAgaWYgKCFsb29rdXApCisgICAgeworICAgICAgY2FjaGUtPm5leHQgPSByaGFzaFtqXTsKKyAgICAgIHJoYXNoW2pdID0gY2FjaGU7CisgICAgfQorICAKKyAgY2FjaGUtPnVpZCA9IGluZGV4OworICBtZW1jcHkoJmNhY2hlLT5hZGRyLmFkZHIsIGFkZHIsIGFkZHJsZW4pOyAgCisgIGNhY2hlX2hhc2goY2FjaGUpOworICAKKyAgLyogZG9uJ3QgbmVlZCB0byBkbyBhbGlhcyBzdHVmZiBmb3Igc2Vjb25kIGFuZCBzdWJzZXF1ZW50IGFkZHJlc3Nlcy4gKi8KKyAgaWYgKCFuYW1lZXhpc3RzKQorICAgIGFkZF9ob3N0c19jbmFtZShjYWNoZSk7Cit9CisKK3N0YXRpYyBpbnQgZWF0c3BhY2UoRklMRSAqZikKK3sKKyAgaW50IGMsIG5sID0gMDsKKworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBpZiAoKGMgPSBnZXRjKGYpKSA9PSAnIycpCisJd2hpbGUgKGMgIT0gJ1xuJyAmJiBjICE9IEVPRikKKwkgIGMgPSBnZXRjKGYpOworICAgICAgCisgICAgICBpZiAoYyA9PSBFT0YpCisJcmV0dXJuIDE7CisKKyAgICAgIGlmICghaXNzcGFjZShjKSkKKwl7CisJICB1bmdldGMoYywgZik7CisJICByZXR1cm4gbmw7CisJfQorCisgICAgICBpZiAoYyA9PSAnXG4nKQorCW5sID0gMTsKKyAgICB9Cit9CisJIAorc3RhdGljIGludCBnZXR0b2soRklMRSAqZiwgY2hhciAqdG9rZW4pCit7CisgIGludCBjLCBjb3VudCA9IDA7CisgCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGlmICgoYyA9IGdldGMoZikpID09IEVPRikKKwlyZXR1cm4gKGNvdW50ID09IDApID8gRU9GIDogMTsKKworICAgICAgaWYgKGlzc3BhY2UoYykgfHwgYyA9PSAnIycpCisJeworCSAgdW5nZXRjKGMsIGYpOworCSAgcmV0dXJuIGVhdHNwYWNlKGYpOworCX0KKyAgICAgIAorICAgICAgaWYgKGNvdW50IDwgKE1BWEROQU1FIC0gMSkpCisJeworCSAgdG9rZW5bY291bnQrK10gPSBjOworCSAgdG9rZW5bY291bnRdID0gMDsKKwl9CisgICAgfQorfQorCitzdGF0aWMgaW50IHJlYWRfaG9zdHNmaWxlKGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBpbnQgaW5kZXgsIGludCBjYWNoZV9zaXplLCBzdHJ1Y3QgY3JlYyAqKnJoYXNoLCBpbnQgaGFzaHN6KQoreyAgCisgIEZJTEUgKmYgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKKyAgY2hhciAqdG9rZW4gPSBkYWVtb24tPm5hbWVidWZmLCAqZG9tYWluX3N1ZmZpeCA9IE5VTEw7CisgIGludCBhZGRyX2NvdW50ID0gMCwgbmFtZV9jb3VudCA9IGNhY2hlX3NpemUsIGxpbmVubyA9IDA7CisgIHVuc2lnbmVkIHNob3J0IGZsYWdzID0gMDsKKyAgc3RydWN0IGFsbF9hZGRyIGFkZHI7CisgIGludCBhdG5sLCBhZGRybGVuID0gMDsKKworICBpZiAoIWYpCisgICAgeworICAgICAgbXlfc3lzbG9nKExPR19FUlIsIF8oImZhaWxlZCB0byBsb2FkIG5hbWVzIGZyb20gJXM6ICVzIiksIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAKKyAgZWF0c3BhY2UoZik7CisgIAorICB3aGlsZSAoKGF0bmwgPSBnZXR0b2soZiwgdG9rZW4pKSAhPSBFT0YpCisgICAgeworICAgICAgbGluZW5vKys7CisgICAgICAKKyAgICAgIGlmIChpbmV0X3B0b24oQUZfSU5FVCwgdG9rZW4sICZhZGRyKSA+IDApCisJeworCSAgZmxhZ3MgPSBGX0hPU1RTIHwgRl9JTU1PUlRBTCB8IEZfRk9SV0FSRCB8IEZfUkVWRVJTRSB8IEZfSVBWNDsKKwkgIGFkZHJsZW4gPSBJTkFERFJTWjsKKwkgIGRvbWFpbl9zdWZmaXggPSBnZXRfZG9tYWluKGFkZHIuYWRkci5hZGRyNCk7CisJfQorI2lmZGVmIEhBVkVfSVBWNgorICAgICAgZWxzZSBpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCB0b2tlbiwgJmFkZHIpID4gMCkKKwl7CisJICBmbGFncyA9IEZfSE9TVFMgfCBGX0lNTU9SVEFMIHwgRl9GT1JXQVJEIHwgRl9SRVZFUlNFIHwgRl9JUFY2OworCSAgYWRkcmxlbiA9IElONkFERFJTWjsKKwkgIGRvbWFpbl9zdWZmaXggPSBnZXRfZG9tYWluNigmYWRkci5hZGRyLmFkZHI2KTsKKwl9CisjZW5kaWYKKyAgICAgIGVsc2UKKwl7CisJICBteV9zeXNsb2coTE9HX0VSUiwgXygiYmFkIGFkZHJlc3MgYXQgJXMgbGluZSAlZCIpLCBmaWxlbmFtZSwgbGluZW5vKTsgCisJICB3aGlsZSAoYXRubCA9PSAwKQorCSAgICBhdG5sID0gZ2V0dG9rKGYsIHRva2VuKTsKKwkgIGNvbnRpbnVlOworCX0KKyAgICAgIAorICAgICAgYWRkcl9jb3VudCsrOworICAgICAgCisgICAgICAvKiByZWhhc2ggZXZlcnkgMTAwMCBuYW1lcy4gKi8KKyAgICAgIGlmICgobmFtZV9jb3VudCAtIGNhY2hlX3NpemUpID4gMTAwMCkKKwl7CisJICByZWhhc2gobmFtZV9jb3VudCk7CisJICBjYWNoZV9zaXplID0gbmFtZV9jb3VudDsKKwl9IAorICAgICAgCisgICAgICB3aGlsZSAoYXRubCA9PSAwKQorCXsKKwkgIHN0cnVjdCBjcmVjICpjYWNoZTsKKwkgIGludCBmcWRuLCBub21lbTsKKwkgIGNoYXIgKmNhbm9uOworCSAgCisJICBpZiAoKGF0bmwgPSBnZXR0b2soZiwgdG9rZW4pKSA9PSBFT0YpCisJICAgIGJyZWFrOworCisJICBmcWRuID0gISFzdHJjaHIodG9rZW4sICcuJyk7CisKKwkgIGlmICgoY2Fub24gPSBjYW5vbmljYWxpc2UodG9rZW4sICZub21lbSkpKQorCSAgICB7CisJICAgICAgLyogSWYgc2V0LCBhZGQgYSB2ZXJzaW9uIG9mIHRoZSBuYW1lIHdpdGggYSBkZWZhdWx0IGRvbWFpbiBhcHBlbmRlZCAqLworCSAgICAgIGlmIChvcHRpb25fYm9vbChPUFRfRVhQQU5EKSAmJiBkb21haW5fc3VmZml4ICYmICFmcWRuICYmIAorCQkgIChjYWNoZSA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IGNyZWMpICsgCisJCQkJCXN0cmxlbihjYW5vbikrMitzdHJsZW4oZG9tYWluX3N1ZmZpeCktU01BTExETkFNRSkpKQorCQl7CisJCSAgc3RyY3B5KGNhY2hlLT5uYW1lLnNuYW1lLCBjYW5vbik7CisJCSAgc3RyY2F0KGNhY2hlLT5uYW1lLnNuYW1lLCAiLiIpOworCQkgIHN0cmNhdChjYWNoZS0+bmFtZS5zbmFtZSwgZG9tYWluX3N1ZmZpeCk7CisJCSAgY2FjaGUtPmZsYWdzID0gZmxhZ3M7CisJCSAgYWRkX2hvc3RzX2VudHJ5KGNhY2hlLCAmYWRkciwgYWRkcmxlbiwgaW5kZXgsIHJoYXNoLCBoYXNoc3opOworCQkgIG5hbWVfY291bnQrKzsKKwkJfQorCSAgICAgIGlmICgoY2FjaGUgPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBjcmVjKSArIHN0cmxlbihjYW5vbikrMS1TTUFMTEROQU1FKSkpCisJCXsKKwkJICBzdHJjcHkoY2FjaGUtPm5hbWUuc25hbWUsIGNhbm9uKTsKKwkJICBjYWNoZS0+ZmxhZ3MgPSBmbGFnczsKKwkJICBhZGRfaG9zdHNfZW50cnkoY2FjaGUsICZhZGRyLCBhZGRybGVuLCBpbmRleCwgcmhhc2gsIGhhc2hzeik7CisJCSAgbmFtZV9jb3VudCsrOworCQl9CisJICAgICAgZnJlZShjYW5vbik7CisJICAgICAgCisJICAgIH0KKwkgIGVsc2UgaWYgKCFub21lbSkKKwkgICAgbXlfc3lzbG9nKExPR19FUlIsIF8oImJhZCBuYW1lIGF0ICVzIGxpbmUgJWQiKSwgZmlsZW5hbWUsIGxpbmVubyk7IAorCX0KKyAgICB9IAorCisgIGZjbG9zZShmKTsKKyAgcmVoYXNoKG5hbWVfY291bnQpOworICAKKyAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCJyZWFkICVzIC0gJWQgYWRkcmVzc2VzIiksIGZpbGVuYW1lLCBhZGRyX2NvdW50KTsKKyAgCisgIHJldHVybiBuYW1lX2NvdW50OworfQorCSAgICAKK3ZvaWQgY2FjaGVfcmVsb2FkKHZvaWQpCit7CisgIHN0cnVjdCBjcmVjICpjYWNoZSwgKip1cCwgKnRtcDsKKyAgaW50IHJldmhhc2hzeiwgaSwgdG90YWxfc2l6ZSA9IGRhZW1vbi0+Y2FjaGVzaXplOworICBzdHJ1Y3QgaG9zdHNmaWxlICphaDsKKyAgc3RydWN0IGhvc3RfcmVjb3JkICpocjsKKyAgc3RydWN0IG5hbWVfbGlzdCAqbmw7CisgIHN0cnVjdCBjbmFtZSAqYTsKKyAgc3RydWN0IGludGVyZmFjZV9uYW1lICppbnRyOworI2lmZGVmIEhBVkVfRE5TU0VDCisgIHN0cnVjdCBkc19jb25maWcgKmRzOworI2VuZGlmCisKKyAgY2FjaGVfaW5zZXJ0ZWQgPSBjYWNoZV9saXZlX2ZyZWVkID0gMDsKKyAgCisgIGZvciAoaT0wOyBpPGhhc2hfc2l6ZTsgaSsrKQorICAgIGZvciAoY2FjaGUgPSBoYXNoX3RhYmxlW2ldLCB1cCA9ICZoYXNoX3RhYmxlW2ldOyBjYWNoZTsgY2FjaGUgPSB0bXApCisgICAgICB7CisjaWZkZWYgSEFWRV9ETlNTRUMKKwljYWNoZV9ibG9ja2RhdGFfZnJlZShjYWNoZSk7CisjZW5kaWYKKwl0bXAgPSBjYWNoZS0+aGFzaF9uZXh0OworCWlmIChjYWNoZS0+ZmxhZ3MgJiAoRl9IT1NUUyB8IEZfQ09ORklHKSkKKwkgIHsKKwkgICAgKnVwID0gY2FjaGUtPmhhc2hfbmV4dDsKKwkgICAgZnJlZShjYWNoZSk7CisJICB9CisJZWxzZSBpZiAoIShjYWNoZS0+ZmxhZ3MgJiBGX0RIQ1ApKQorCSAgeworCSAgICAqdXAgPSBjYWNoZS0+aGFzaF9uZXh0OworCSAgICBpZiAoY2FjaGUtPmZsYWdzICYgRl9CSUdOQU1FKQorCSAgICAgIHsKKwkJY2FjaGUtPm5hbWUuYm5hbWUtPm5leHQgPSBiaWdfZnJlZTsKKwkJYmlnX2ZyZWUgPSBjYWNoZS0+bmFtZS5ibmFtZTsKKwkgICAgICB9CisJICAgIGNhY2hlLT5mbGFncyA9IDA7CisJICB9CisJZWxzZQorCSAgdXAgPSAmY2FjaGUtPmhhc2hfbmV4dDsKKyAgICAgIH0KKyAgCisgIC8qIEFkZCBDTkFNRXMgdG8gaW50ZXJmYWNlX25hbWVzIHRvIHRoZSBjYWNoZSAqLworICBmb3IgKGEgPSBkYWVtb24tPmNuYW1lczsgYTsgYSA9IGEtPm5leHQpCisgICAgZm9yIChpbnRyID0gZGFlbW9uLT5pbnRfbmFtZXM7IGludHI7IGludHIgPSBpbnRyLT5uZXh0KQorICAgICAgaWYgKGhvc3RuYW1lX2lzZXF1YWwoYS0+dGFyZ2V0LCBpbnRyLT5uYW1lKSAmJgorCSAgKChjYWNoZSA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IGNyZWMpKSkpKQorCXsKKwkgIGNhY2hlLT5mbGFncyA9IEZfRk9SV0FSRCB8IEZfTkFNRVAgfCBGX0NOQU1FIHwgRl9JTU1PUlRBTCB8IEZfQ09ORklHOworCSAgY2FjaGUtPm5hbWUubmFtZXAgPSBhLT5hbGlhczsKKwkgIGNhY2hlLT5hZGRyLmNuYW1lLnRhcmdldC5pbnRfbmFtZSA9IGludHI7CisJICBjYWNoZS0+YWRkci5jbmFtZS51aWQgPSBTUkNfSU5URVJGQUNFOworCSAgY2FjaGUtPnVpZCA9IG5leHRfdWlkKCk7CisJICBjYWNoZV9oYXNoKGNhY2hlKTsKKwkgIGFkZF9ob3N0c19jbmFtZShjYWNoZSk7IC8qIGhhbmRsZSBjaGFpbnMgKi8KKwl9CisKKyNpZmRlZiBIQVZFX0ROU1NFQworICBmb3IgKGRzID0gZGFlbW9uLT5kczsgZHM7IGRzID0gZHMtPm5leHQpCisgICAgaWYgKChjYWNoZSA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IGNyZWMpKSkgJiYKKwkoY2FjaGUtPmFkZHIuZHMua2V5ZGF0YSA9IGJsb2NrZGF0YV9hbGxvYyhkcy0+ZGlnZXN0LCBkcy0+ZGlnZXN0bGVuKSkpCisgICAgICB7CisJY2FjaGUtPmZsYWdzID0gRl9GT1JXQVJEIHwgRl9JTU1PUlRBTCB8IEZfRFMgfCBGX0NPTkZJRyB8IEZfTkFNRVA7CisJY2FjaGUtPm5hbWUubmFtZXAgPSBkcy0+bmFtZTsKKwljYWNoZS0+YWRkci5kcy5rZXlsZW4gPSBkcy0+ZGlnZXN0bGVuOworCWNhY2hlLT5hZGRyLmRzLmFsZ28gPSBkcy0+YWxnbzsKKwljYWNoZS0+YWRkci5kcy5rZXl0YWcgPSBkcy0+a2V5dGFnOworCWNhY2hlLT5hZGRyLmRzLmRpZ2VzdCA9IGRzLT5kaWdlc3RfdHlwZTsKKwljYWNoZS0+dWlkID0gZHMtPmNsYXNzOworCWNhY2hlX2hhc2goY2FjaGUpOworICAgICAgfQorI2VuZGlmCisgIAorICAvKiBib3Jyb3cgdGhlIHBhY2tldCBidWZmZXIgZm9yIGEgdGVtcG9yYXJ5IGJ5LWFkZHJlc3MgaGFzaCAqLworICBtZW1zZXQoZGFlbW9uLT5wYWNrZXQsIDAsIGRhZW1vbi0+cGFja2V0X2J1ZmZfc3opOworICByZXZoYXNoc3ogPSBkYWVtb24tPnBhY2tldF9idWZmX3N6IC8gc2l6ZW9mKHN0cnVjdCBjcmVjICopOworICAvKiB3ZSBvdmVyd3JvdGUgdGhlIGJ1ZmZlci4uLiAqLworICBkYWVtb24tPnNydl9zYXZlID0gTlVMTDsKKworICAvKiBEbyBob3N0X3JlY29yZHMgaW4gY29uZmlnLiAqLworICBmb3IgKGhyID0gZGFlbW9uLT5ob3N0X3JlY29yZHM7IGhyOyBociA9IGhyLT5uZXh0KQorICAgIGZvciAobmwgPSBoci0+bmFtZXM7IG5sOyBubCA9IG5sLT5uZXh0KQorICAgICAgeworCWlmIChoci0+YWRkci5zX2FkZHIgIT0gMCAmJgorCSAgICAoY2FjaGUgPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBjcmVjKSkpKQorCSAgeworCSAgICBjYWNoZS0+bmFtZS5uYW1lcCA9IG5sLT5uYW1lOworCSAgICBjYWNoZS0+ZmxhZ3MgPSBGX0hPU1RTIHwgRl9JTU1PUlRBTCB8IEZfRk9SV0FSRCB8IEZfUkVWRVJTRSB8IEZfSVBWNCB8IEZfTkFNRVAgfCBGX0NPTkZJRzsKKwkgICAgYWRkX2hvc3RzX2VudHJ5KGNhY2hlLCAoc3RydWN0IGFsbF9hZGRyICopJmhyLT5hZGRyLCBJTkFERFJTWiwgU1JDX0NPTkZJRywgKHN0cnVjdCBjcmVjICoqKWRhZW1vbi0+cGFja2V0LCByZXZoYXNoc3opOworCSAgfQorI2lmZGVmIEhBVkVfSVBWNgorCWlmICghSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJmhyLT5hZGRyNikgJiYKKwkgICAgKGNhY2hlID0gd2hpbmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgY3JlYykpKSkKKwkgIHsKKwkgICAgY2FjaGUtPm5hbWUubmFtZXAgPSBubC0+bmFtZTsKKwkgICAgY2FjaGUtPmZsYWdzID0gRl9IT1NUUyB8IEZfSU1NT1JUQUwgfCBGX0ZPUldBUkQgfCBGX1JFVkVSU0UgfCBGX0lQVjYgfCBGX05BTUVQIHwgRl9DT05GSUc7CisJICAgIGFkZF9ob3N0c19lbnRyeShjYWNoZSwgKHN0cnVjdCBhbGxfYWRkciAqKSZoci0+YWRkcjYsIElONkFERFJTWiwgU1JDX0NPTkZJRywgKHN0cnVjdCBjcmVjICoqKWRhZW1vbi0+cGFja2V0LCByZXZoYXNoc3opOworCSAgfQorI2VuZGlmCisgICAgICB9CisJCisgIGlmIChvcHRpb25fYm9vbChPUFRfTk9fSE9TVFMpICYmICFkYWVtb24tPmFkZG5faG9zdHMpCisgICAgeworICAgICAgaWYgKGRhZW1vbi0+Y2FjaGVzaXplID4gMCkKKwlteV9zeXNsb2coTE9HX0lORk8sIF8oImNsZWFyZWQgY2FjaGUiKSk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIAorICBpZiAoIW9wdGlvbl9ib29sKE9QVF9OT19IT1NUUykpCisgICAgdG90YWxfc2l6ZSA9IHJlYWRfaG9zdHNmaWxlKEhPU1RTRklMRSwgU1JDX0hPU1RTLCB0b3RhbF9zaXplLCAoc3RydWN0IGNyZWMgKiopZGFlbW9uLT5wYWNrZXQsIHJldmhhc2hzeik7CisgIAkgICAKKyAgZGFlbW9uLT5hZGRuX2hvc3RzID0gZXhwYW5kX2ZpbGVsaXN0KGRhZW1vbi0+YWRkbl9ob3N0cyk7CisgIGZvciAoYWggPSBkYWVtb24tPmFkZG5faG9zdHM7IGFoOyBhaCA9IGFoLT5uZXh0KQorICAgIGlmICghKGFoLT5mbGFncyAmIEFIX0lOQUNUSVZFKSkKKyAgICAgIHRvdGFsX3NpemUgPSByZWFkX2hvc3RzZmlsZShhaC0+Zm5hbWUsIGFoLT5pbmRleCwgdG90YWxfc2l6ZSwgKHN0cnVjdCBjcmVjICoqKWRhZW1vbi0+cGFja2V0LCByZXZoYXNoc3opOworfSAKKworI2lmZGVmIEhBVkVfREhDUAorc3RydWN0IGluX2FkZHIgYV9yZWNvcmRfZnJvbV9ob3N0cyhjaGFyICpuYW1lLCB0aW1lX3Qgbm93KQoreworICBzdHJ1Y3QgY3JlYyAqY3JlY3AgPSBOVUxMOworICBzdHJ1Y3QgaW5fYWRkciByZXQ7CisgIAorICB3aGlsZSAoKGNyZWNwID0gY2FjaGVfZmluZF9ieV9uYW1lKGNyZWNwLCBuYW1lLCBub3csIEZfSVBWNCkpKQorICAgIGlmIChjcmVjcC0+ZmxhZ3MgJiBGX0hPU1RTKQorICAgICAgcmV0dXJuICooc3RydWN0IGluX2FkZHIgKikmY3JlY3AtPmFkZHI7CisKKyAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfV0FSTklORywgXygiTm8gSVB2NCBhZGRyZXNzIGZvdW5kIGZvciAlcyIpLCBuYW1lKTsKKyAgCisgIHJldC5zX2FkZHIgPSAwOworICByZXR1cm4gcmV0OworfQorCit2b2lkIGNhY2hlX3VuaGFzaF9kaGNwKHZvaWQpCit7CisgIHN0cnVjdCBjcmVjICpjYWNoZSwgKip1cDsKKyAgaW50IGk7CisKKyAgZm9yIChpPTA7IGk8aGFzaF9zaXplOyBpKyspCisgICAgZm9yIChjYWNoZSA9IGhhc2hfdGFibGVbaV0sIHVwID0gJmhhc2hfdGFibGVbaV07IGNhY2hlOyBjYWNoZSA9IGNhY2hlLT5oYXNoX25leHQpCisgICAgICBpZiAoY2FjaGUtPmZsYWdzICYgRl9ESENQKQorCXsKKwkgICp1cCA9IGNhY2hlLT5oYXNoX25leHQ7CisJICBjYWNoZS0+bmV4dCA9IGRoY3Bfc3BhcmU7CisJICBkaGNwX3NwYXJlID0gY2FjaGU7CisJfQorICAgICAgZWxzZQorCXVwID0gJmNhY2hlLT5oYXNoX25leHQ7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9kaGNwX2NuYW1lKHN0cnVjdCBjcmVjICp0YXJnZXQsIHRpbWVfdCB0dGQpCit7CisgIHN0cnVjdCBjcmVjICphbGlhc2M7CisgIHN0cnVjdCBjbmFtZSAqYTsKKyAgCisgIGZvciAoYSA9IGRhZW1vbi0+Y25hbWVzOyBhOyBhID0gYS0+bmV4dCkKKyAgICBpZiAoaG9zdG5hbWVfaXNlcXVhbChjYWNoZV9nZXRfbmFtZSh0YXJnZXQpLCBhLT50YXJnZXQpKQorICAgICAgeworCWlmICgoYWxpYXNjID0gZGhjcF9zcGFyZSkpCisJICBkaGNwX3NwYXJlID0gZGhjcF9zcGFyZS0+bmV4dDsKKwllbHNlIC8qIG5lZWQgbmV3IG9uZSAqLworCSAgYWxpYXNjID0gd2hpbmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgY3JlYykpOworCQorCWlmIChhbGlhc2MpCisJICB7CisJICAgIGFsaWFzYy0+ZmxhZ3MgPSBGX0ZPUldBUkQgfCBGX05BTUVQIHwgRl9ESENQIHwgRl9DTkFNRSB8IEZfQ09ORklHOworCSAgICBpZiAodHRkID09IDApCisJICAgICAgYWxpYXNjLT5mbGFncyB8PSBGX0lNTU9SVEFMOworCSAgICBlbHNlCisJICAgICAgYWxpYXNjLT50dGQgPSB0dGQ7CisJICAgIGFsaWFzYy0+bmFtZS5uYW1lcCA9IGEtPmFsaWFzOworCSAgICBhbGlhc2MtPmFkZHIuY25hbWUudGFyZ2V0LmNhY2hlID0gdGFyZ2V0OworCSAgICBhbGlhc2MtPmFkZHIuY25hbWUudWlkID0gdGFyZ2V0LT51aWQ7CisJICAgIGFsaWFzYy0+dWlkID0gbmV4dF91aWQoKTsKKwkgICAgY2FjaGVfaGFzaChhbGlhc2MpOworCSAgICBhZGRfZGhjcF9jbmFtZShhbGlhc2MsIHR0ZCk7CisJICB9CisgICAgICB9Cit9CisKK3ZvaWQgY2FjaGVfYWRkX2RoY3BfZW50cnkoY2hhciAqaG9zdF9uYW1lLCBpbnQgcHJvdCwKKwkJCSAgc3RydWN0IGFsbF9hZGRyICpob3N0X2FkZHJlc3MsIHRpbWVfdCB0dGQpIAoreworICBzdHJ1Y3QgY3JlYyAqY3JlYyA9IE5VTEwsICpmYWlsX2NyZWMgPSBOVUxMOworICB1bnNpZ25lZCBzaG9ydCBmbGFncyA9IEZfSVBWNDsKKyAgaW50IGluX2hvc3RzID0gMDsKKyAgc2l6ZV90IGFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IGluX2FkZHIpOworCisjaWZkZWYgSEFWRV9JUFY2CisgIGlmIChwcm90ID09IEFGX0lORVQ2KQorICAgIHsKKyAgICAgIGZsYWdzID0gRl9JUFY2OworICAgICAgYWRkcmxlbiA9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpOworICAgIH0KKyNlbmRpZgorICAKKyAgaW5ldF9udG9wKHByb3QsIGhvc3RfYWRkcmVzcywgZGFlbW9uLT5hZGRyYnVmZiwgQUREUlNUUkxFTik7CisgIAorICB3aGlsZSAoKGNyZWMgPSBjYWNoZV9maW5kX2J5X25hbWUoY3JlYywgaG9zdF9uYW1lLCAwLCBmbGFncyB8IEZfQ05BTUUpKSkKKyAgICB7CisgICAgICAvKiBjaGVjayBhbGwgYWRkcmVzc2VzIGFzc29jaWF0ZWQgd2l0aCBuYW1lICovCisgICAgICBpZiAoY3JlYy0+ZmxhZ3MgJiAoRl9IT1NUUyB8IEZfQ09ORklHKSkKKwl7CisJICBpZiAoY3JlYy0+ZmxhZ3MgJiBGX0NOQU1FKQorCSAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19XQVJOSU5HLCAKKwkJICAgICAgXygiJXMgaXMgYSBDTkFNRSwgbm90IGdpdmluZyBpdCB0byB0aGUgREhDUCBsZWFzZSBvZiAlcyIpLAorCQkgICAgICBob3N0X25hbWUsIGRhZW1vbi0+YWRkcmJ1ZmYpOworCSAgZWxzZSBpZiAobWVtY21wKCZjcmVjLT5hZGRyLmFkZHIsIGhvc3RfYWRkcmVzcywgYWRkcmxlbikgPT0gMCkKKwkgICAgaW5faG9zdHMgPSAxOworCSAgZWxzZQorCSAgICBmYWlsX2NyZWMgPSBjcmVjOworCX0KKyAgICAgIGVsc2UgaWYgKCEoY3JlYy0+ZmxhZ3MgJiBGX0RIQ1ApKQorCXsKKwkgIGNhY2hlX3NjYW5fZnJlZShob3N0X25hbWUsIE5VTEwsIDAsIGNyZWMtPmZsYWdzICYgKGZsYWdzIHwgRl9DTkFNRSB8IEZfRk9SV0FSRCkpOworCSAgLyogc2Nhbl9mcmVlIGRlbGV0ZXMgYWxsIGFkZHJlc3NlcyBhc3NvY2lhdGVkIHdpdGggbmFtZSAqLworCSAgYnJlYWs7CisJfQorICAgIH0KKyAgCisgIC8qIGlmIGluIGhvc3RzLCBkb24ndCBuZWVkIERIQ1AgcmVjb3JkICovCisgIGlmIChpbl9ob3N0cykKKyAgICByZXR1cm47CisgIAorICAvKiBOYW1lIGluIGhvc3RzLCBhZGRyZXNzIGRvZXNuJ3QgbWF0Y2ggKi8KKyAgaWYgKGZhaWxfY3JlYykKKyAgICB7CisgICAgICBpbmV0X250b3AocHJvdCwgJmZhaWxfY3JlYy0+YWRkci5hZGRyLCBkYWVtb24tPm5hbWVidWZmLCBNQVhETkFNRSk7CisgICAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19XQVJOSU5HLCAKKwkJXygibm90IGdpdmluZyBuYW1lICVzIHRvIHRoZSBESENQIGxlYXNlIG9mICVzIGJlY2F1c2UgIgorCQkgICJ0aGUgbmFtZSBleGlzdHMgaW4gJXMgd2l0aCBhZGRyZXNzICVzIiksIAorCQlob3N0X25hbWUsIGRhZW1vbi0+YWRkcmJ1ZmYsCisJCXJlY29yZF9zb3VyY2UoZmFpbF9jcmVjLT51aWQpLCBkYWVtb24tPm5hbWVidWZmKTsKKyAgICAgIHJldHVybjsKKyAgICB9CSAgCisgIAorICBpZiAoKGNyZWMgPSBjYWNoZV9maW5kX2J5X2FkZHIoTlVMTCwgKHN0cnVjdCBhbGxfYWRkciAqKWhvc3RfYWRkcmVzcywgMCwgZmxhZ3MpKSkKKyAgICB7CisgICAgICBpZiAoY3JlYy0+ZmxhZ3MgJiBGX05FRykKKwl7CisJICBmbGFncyB8PSBGX1JFVkVSU0U7CisJICBjYWNoZV9zY2FuX2ZyZWUoTlVMTCwgKHN0cnVjdCBhbGxfYWRkciAqKWhvc3RfYWRkcmVzcywgMCwgZmxhZ3MpOworCX0KKyAgICB9CisgIGVsc2UKKyAgICBmbGFncyB8PSBGX1JFVkVSU0U7CisgIAorICBpZiAoKGNyZWMgPSBkaGNwX3NwYXJlKSkKKyAgICBkaGNwX3NwYXJlID0gZGhjcF9zcGFyZS0+bmV4dDsKKyAgZWxzZSAvKiBuZWVkIG5ldyBvbmUgKi8KKyAgICBjcmVjID0gd2hpbmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgY3JlYykpOworICAKKyAgaWYgKGNyZWMpIC8qIG1hbGxvYyBtYXkgZmFpbCAqLworICAgIHsKKyAgICAgIGNyZWMtPmZsYWdzID0gZmxhZ3MgfCBGX05BTUVQIHwgRl9ESENQIHwgRl9GT1JXQVJEOworICAgICAgaWYgKHR0ZCA9PSAwKQorCWNyZWMtPmZsYWdzIHw9IEZfSU1NT1JUQUw7CisgICAgICBlbHNlCisJY3JlYy0+dHRkID0gdHRkOworICAgICAgY3JlYy0+YWRkci5hZGRyID0gKmhvc3RfYWRkcmVzczsKKyAgICAgIGNyZWMtPm5hbWUubmFtZXAgPSBob3N0X25hbWU7CisgICAgICBjcmVjLT51aWQgPSBuZXh0X3VpZCgpOworICAgICAgY2FjaGVfaGFzaChjcmVjKTsKKworICAgICAgYWRkX2RoY3BfY25hbWUoY3JlYywgdHRkKTsKKyAgICB9Cit9CisjZW5kaWYKKworaW50IGNhY2hlX21ha2Vfc3RhdChzdHJ1Y3QgdHh0X3JlY29yZCAqdCkKK3sgCisgIHN0YXRpYyBjaGFyICpidWZmID0gTlVMTDsKKyAgc3RhdGljIGludCBidWZmbGVuID0gNjA7CisgIGludCBsZW47CisgIHN0cnVjdCBzZXJ2ZXIgKnNlcnYsICpzZXJ2MTsKKyAgY2hhciAqcDsKKworICBpZiAoIWJ1ZmYgJiYgIShidWZmID0gd2hpbmVfbWFsbG9jKDYwKSkpCisgICAgcmV0dXJuIDA7CisKKyAgcCA9IGJ1ZmY7CisgIAorICBzd2l0Y2ggKHQtPnN0YXQpCisgICAgeworICAgIGNhc2UgVFhUX1NUQVRfQ0FDSEVTSVpFOgorICAgICAgc3ByaW50ZihidWZmKzEsICIlZCIsIGRhZW1vbi0+Y2FjaGVzaXplKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBUWFRfU1RBVF9JTlNFUlRTOgorICAgICAgc3ByaW50ZihidWZmKzEsICIlZCIsIGNhY2hlX2luc2VydGVkKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBUWFRfU1RBVF9FVklDVElPTlM6CisgICAgICBzcHJpbnRmKGJ1ZmYrMSwgIiVkIiwgY2FjaGVfbGl2ZV9mcmVlZCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgVFhUX1NUQVRfTUlTU0VTOgorICAgICAgc3ByaW50ZihidWZmKzEsICIldSIsIGRhZW1vbi0+cXVlcmllc19mb3J3YXJkZWQpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFRYVF9TVEFUX0hJVFM6CisgICAgICBzcHJpbnRmKGJ1ZmYrMSwgIiV1IiwgZGFlbW9uLT5sb2NhbF9hbnN3ZXIpOworICAgICAgYnJlYWs7CisKKyNpZmRlZiBIQVZFX0FVVEgKKyAgICBjYXNlIFRYVF9TVEFUX0FVVEg6CisgICAgICBzcHJpbnRmKGJ1ZmYrMSwgIiV1IiwgZGFlbW9uLT5hdXRoX2Fuc3dlcik7CisgICAgICBicmVhazsKKyNlbmRpZgorCisgICAgY2FzZSBUWFRfU1RBVF9TRVJWRVJTOgorICAgICAgLyogc3VtIGNvdW50cyBmcm9tIGRpZmZlcmVudCByZWNvcmRzIGZvciBzYW1lIHNlcnZlciAqLworICAgICAgZm9yIChzZXJ2ID0gZGFlbW9uLT5zZXJ2ZXJzOyBzZXJ2OyBzZXJ2ID0gc2Vydi0+bmV4dCkKKwlzZXJ2LT5mbGFncyAmPSB+U0VSVl9DT1VOVEVEOworICAgICAgCisgICAgICBmb3IgKHNlcnYgPSBkYWVtb24tPnNlcnZlcnM7IHNlcnY7IHNlcnYgPSBzZXJ2LT5uZXh0KQorCWlmICghKHNlcnYtPmZsYWdzICYgCisJICAgICAgKFNFUlZfTk9fQUREUiB8IFNFUlZfTElURVJBTF9BRERSRVNTIHwgU0VSVl9DT1VOVEVEIHwgU0VSVl9VU0VfUkVTT0xWIHwgU0VSVl9OT19SRUJJTkQpKSkKKwkgIHsKKwkgICAgY2hhciAqbmV3LCAqbGVucDsKKwkgICAgaW50IHBvcnQsIG5ld2xlbiwgYnl0ZXNfYXZhaWwsIGJ5dGVzX25lZWRlZDsKKwkgICAgdW5zaWduZWQgaW50IHF1ZXJpZXMgPSAwLCBmYWlsZWRfcXVlcmllcyA9IDA7CisJICAgIGZvciAoc2VydjEgPSBzZXJ2OyBzZXJ2MTsgc2VydjEgPSBzZXJ2MS0+bmV4dCkKKwkgICAgICBpZiAoIShzZXJ2MS0+ZmxhZ3MgJiAKKwkJICAgIChTRVJWX05PX0FERFIgfCBTRVJWX0xJVEVSQUxfQUREUkVTUyB8IFNFUlZfQ09VTlRFRCB8IFNFUlZfVVNFX1JFU09MViB8IFNFUlZfTk9fUkVCSU5EKSkgJiYgCisJCSAgc29ja2FkZHJfaXNlcXVhbCgmc2Vydi0+YWRkciwgJnNlcnYxLT5hZGRyKSkKKwkJeworCQkgIHNlcnYxLT5mbGFncyB8PSBTRVJWX0NPVU5URUQ7CisJCSAgcXVlcmllcyArPSBzZXJ2MS0+cXVlcmllczsKKwkJICBmYWlsZWRfcXVlcmllcyArPSBzZXJ2MS0+ZmFpbGVkX3F1ZXJpZXM7CisJCX0KKwkgICAgcG9ydCA9IHByZXR0eXByaW50X2FkZHIoJnNlcnYtPmFkZHIsIGRhZW1vbi0+YWRkcmJ1ZmYpOworCSAgICBsZW5wID0gcCsrOyAvKiBsZW5ndGggKi8KKwkgICAgYnl0ZXNfYXZhaWwgPSAocCAtIGJ1ZmYpICsgYnVmZmxlbjsKKwkgICAgYnl0ZXNfbmVlZGVkID0gc25wcmludGYocCwgYnl0ZXNfYXZhaWwsICIlcyMlZCAldSAldSIsIGRhZW1vbi0+YWRkcmJ1ZmYsIHBvcnQsIHF1ZXJpZXMsIGZhaWxlZF9xdWVyaWVzKTsKKwkgICAgaWYgKGJ5dGVzX25lZWRlZCA+PSBieXRlc19hdmFpbCkKKwkgICAgICB7CisJCS8qIGV4cGFuZCBidWZmZXIgaWYgbmVjZXNzYXJ5ICovCisJCW5ld2xlbiA9IGJ5dGVzX25lZWRlZCArIDEgKyBidWZmbGVuIC0gYnl0ZXNfYXZhaWw7CisJCWlmICghKG5ldyA9IHdoaW5lX21hbGxvYyhuZXdsZW4pKSkKKwkJICByZXR1cm4gMDsKKwkJbWVtY3B5KG5ldywgYnVmZiwgYnVmZmxlbik7CisJCWZyZWUoYnVmZik7CisJCXAgPSBuZXcgKyAocCAtIGJ1ZmYpOworCQlsZW5wID0gcCAtIDE7CisJCWJ1ZmYgPSBuZXc7CisJCWJ1ZmZsZW4gPSBuZXdsZW47CisJCWJ5dGVzX2F2YWlsID0gKHAgLSBidWZmKSArIGJ1ZmZsZW47CisJCWJ5dGVzX25lZWRlZCA9IHNucHJpbnRmKHAsIGJ5dGVzX2F2YWlsLCAiJXMjJWQgJXUgJXUiLCBkYWVtb24tPmFkZHJidWZmLCBwb3J0LCBxdWVyaWVzLCBmYWlsZWRfcXVlcmllcyk7CisJICAgICAgfQorCSAgICAqbGVucCA9IGJ5dGVzX25lZWRlZDsKKwkgICAgcCArPSBieXRlc19uZWVkZWQ7CisJICB9CisgICAgICB0LT50eHQgPSAodW5zaWduZWQgY2hhciAqKWJ1ZmY7CisgICAgICB0LT5sZW4gPSBwIC0gYnVmZjsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgCisgIGxlbiA9IHN0cmxlbihidWZmKzEpOworICB0LT50eHQgPSAodW5zaWduZWQgY2hhciAqKWJ1ZmY7CisgIHQtPmxlbiA9IGxlbiArIDE7CisgICpidWZmID0gbGVuOworICByZXR1cm4gMTsKK30KKwordm9pZCBkdW1wX2NhY2hlKHRpbWVfdCBub3cpCit7CisgIHN0cnVjdCBzZXJ2ZXIgKnNlcnYsICpzZXJ2MTsKKyAgY2hhciAqdCA9ICIiOworCisgIG15X3N5c2xvZyhMT0dfSU5GTywgXygidGltZSAlbHUiKSwgKHVuc2lnbmVkIGxvbmcpbm93KTsKKyAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCJjYWNoZSBzaXplICVkLCAlZC8lZCBjYWNoZSBpbnNlcnRpb25zIHJlLXVzZWQgdW5leHBpcmVkIGNhY2hlIGVudHJpZXMuIiksIAorCSAgICBkYWVtb24tPmNhY2hlc2l6ZSwgY2FjaGVfbGl2ZV9mcmVlZCwgY2FjaGVfaW5zZXJ0ZWQpOworICBteV9zeXNsb2coTE9HX0lORk8sIF8oInF1ZXJpZXMgZm9yd2FyZGVkICV1LCBxdWVyaWVzIGFuc3dlcmVkIGxvY2FsbHkgJXUiKSwgCisJICAgIGRhZW1vbi0+cXVlcmllc19mb3J3YXJkZWQsIGRhZW1vbi0+bG9jYWxfYW5zd2VyKTsKKyNpZmRlZiBIQVZFX0FVVEgKKyAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCJxdWVyaWVzIGZvciBhdXRob3JpdGF0aXZlIHpvbmVzICV1IiksIGRhZW1vbi0+YXV0aF9hbnN3ZXIpOworI2VuZGlmCisjaWZkZWYgSEFWRV9ETlNTRUMKKyAgYmxvY2tkYXRhX3JlcG9ydCgpOworI2VuZGlmCisKKyAgLyogc3VtIGNvdW50cyBmcm9tIGRpZmZlcmVudCByZWNvcmRzIGZvciBzYW1lIHNlcnZlciAqLworICBmb3IgKHNlcnYgPSBkYWVtb24tPnNlcnZlcnM7IHNlcnY7IHNlcnYgPSBzZXJ2LT5uZXh0KQorICAgIHNlcnYtPmZsYWdzICY9IH5TRVJWX0NPVU5URUQ7CisgIAorICBmb3IgKHNlcnYgPSBkYWVtb24tPnNlcnZlcnM7IHNlcnY7IHNlcnYgPSBzZXJ2LT5uZXh0KQorICAgIGlmICghKHNlcnYtPmZsYWdzICYgCisJICAoU0VSVl9OT19BRERSIHwgU0VSVl9MSVRFUkFMX0FERFJFU1MgfCBTRVJWX0NPVU5URUQgfCBTRVJWX1VTRV9SRVNPTFYgfCBTRVJWX05PX1JFQklORCkpKQorICAgICAgeworCWludCBwb3J0OworCXVuc2lnbmVkIGludCBxdWVyaWVzID0gMCwgZmFpbGVkX3F1ZXJpZXMgPSAwOworCWZvciAoc2VydjEgPSBzZXJ2OyBzZXJ2MTsgc2VydjEgPSBzZXJ2MS0+bmV4dCkKKwkgIGlmICghKHNlcnYxLT5mbGFncyAmIAorCQkoU0VSVl9OT19BRERSIHwgU0VSVl9MSVRFUkFMX0FERFJFU1MgfCBTRVJWX0NPVU5URUQgfCBTRVJWX1VTRV9SRVNPTFYgfCBTRVJWX05PX1JFQklORCkpICYmIAorCSAgICAgIHNvY2thZGRyX2lzZXF1YWwoJnNlcnYtPmFkZHIsICZzZXJ2MS0+YWRkcikpCisJICAgIHsKKwkgICAgICBzZXJ2MS0+ZmxhZ3MgfD0gU0VSVl9DT1VOVEVEOworCSAgICAgIHF1ZXJpZXMgKz0gc2VydjEtPnF1ZXJpZXM7CisJICAgICAgZmFpbGVkX3F1ZXJpZXMgKz0gc2VydjEtPmZhaWxlZF9xdWVyaWVzOworCSAgICB9CisJcG9ydCA9IHByZXR0eXByaW50X2FkZHIoJnNlcnYtPmFkZHIsIGRhZW1vbi0+YWRkcmJ1ZmYpOworCW15X3N5c2xvZyhMT0dfSU5GTywgXygic2VydmVyICVzIyVkOiBxdWVyaWVzIHNlbnQgJXUsIHJldHJpZWQgb3IgZmFpbGVkICV1IiksIGRhZW1vbi0+YWRkcmJ1ZmYsIHBvcnQsIHF1ZXJpZXMsIGZhaWxlZF9xdWVyaWVzKTsKKyAgICAgIH0KKyAgCisgIGlmIChvcHRpb25fYm9vbChPUFRfREVCVUcpIHx8IG9wdGlvbl9ib29sKE9QVF9MT0cpKQorICAgIHsKKyAgICAgIHN0cnVjdCBjcmVjICpjYWNoZSA7CisgICAgICBpbnQgaTsKKyAgICAgIG15X3N5c2xvZyhMT0dfSU5GTywgIkhvc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdzICAgICAgRXhwaXJlcyIpOworICAgIAorICAgICAgZm9yIChpPTA7IGk8aGFzaF9zaXplOyBpKyspCisJZm9yIChjYWNoZSA9IGhhc2hfdGFibGVbaV07IGNhY2hlOyBjYWNoZSA9IGNhY2hlLT5oYXNoX25leHQpCisJICB7CisJICAgIGNoYXIgKmEgPSBkYWVtb24tPmFkZHJidWZmLCAqcCA9IGRhZW1vbi0+bmFtZWJ1ZmYsICpuID0gY2FjaGVfZ2V0X25hbWUoY2FjaGUpOworCSAgICAqYSA9IDA7CisJICAgIGlmIChzdHJsZW4obikgPT0gMCAmJiAhKGNhY2hlLT5mbGFncyAmIEZfUkVWRVJTRSkpCisJICAgICAgbiA9ICI8Um9vdD4iOworCSAgICBwICs9IHNwcmludGYocCwgIiUtMzAuMzBzICIsIG4pOworCSAgICBpZiAoKGNhY2hlLT5mbGFncyAmIEZfQ05BTUUpICYmICFpc19vdXRkYXRlZF9jbmFtZV9wb2ludGVyKGNhY2hlKSkKKwkgICAgICBhID0gY2FjaGVfZ2V0X2NuYW1lX3RhcmdldChjYWNoZSk7CisjaWZkZWYgSEFWRV9ETlNTRUMKKwkgICAgZWxzZSBpZiAoY2FjaGUtPmZsYWdzICYgRl9EUykKKwkgICAgICB7CisJCWlmIChjYWNoZS0+ZmxhZ3MgJiBGX0ROU0tFWSkKKwkJICAvKiBSUlNJRyAqLworCQkgIHNwcmludGYoYSwgIiU1dSAlM3UgJXMiLCBjYWNoZS0+YWRkci5zaWcua2V5dGFnLAorCQkJICBjYWNoZS0+YWRkci5zaWcuYWxnbywgcXVlcnlzdHIoIiIsIGNhY2hlLT5hZGRyLnNpZy50eXBlX2NvdmVyZWQpKTsKKwkJZWxzZSBpZiAoIShjYWNoZS0+ZmxhZ3MgJiBGX05FRykpCisJCSAgc3ByaW50ZihhLCAiJTV1ICUzdSAlM3UiLCBjYWNoZS0+YWRkci5kcy5rZXl0YWcsCisJCQkgIGNhY2hlLT5hZGRyLmRzLmFsZ28sIGNhY2hlLT5hZGRyLmRzLmRpZ2VzdCk7CisJICAgICAgfQorCSAgICBlbHNlIGlmIChjYWNoZS0+ZmxhZ3MgJiBGX0ROU0tFWSkKKwkgICAgICBzcHJpbnRmKGEsICIlNXUgJTN1ICUzdSIsIGNhY2hlLT5hZGRyLmtleS5rZXl0YWcsCisJCSAgICAgIGNhY2hlLT5hZGRyLmtleS5hbGdvLCBjYWNoZS0+YWRkci5rZXkuZmxhZ3MpOworI2VuZGlmCisJICAgIGVsc2UgaWYgKCEoY2FjaGUtPmZsYWdzICYgRl9ORUcpIHx8ICEoY2FjaGUtPmZsYWdzICYgRl9GT1JXQVJEKSkKKwkgICAgICB7IAorCQlhID0gZGFlbW9uLT5hZGRyYnVmZjsKKwkJaWYgKGNhY2hlLT5mbGFncyAmIEZfSVBWNCkKKwkJICBpbmV0X250b3AoQUZfSU5FVCwgJmNhY2hlLT5hZGRyLmFkZHIsIGEsIEFERFJTVFJMRU4pOworI2lmZGVmIEhBVkVfSVBWNgorCQllbHNlIGlmIChjYWNoZS0+ZmxhZ3MgJiBGX0lQVjYpCisJCSAgaW5ldF9udG9wKEFGX0lORVQ2LCAmY2FjaGUtPmFkZHIuYWRkciwgYSwgQUREUlNUUkxFTik7CisjZW5kaWYKKwkgICAgICB9CisKKwkgICAgaWYgKGNhY2hlLT5mbGFncyAmIEZfSVBWNCkKKwkgICAgICB0ID0gIjQiOworCSAgICBlbHNlIGlmIChjYWNoZS0+ZmxhZ3MgJiBGX0lQVjYpCisJICAgICAgdCA9ICI2IjsKKwkgICAgZWxzZSBpZiAoY2FjaGUtPmZsYWdzICYgRl9DTkFNRSkKKwkgICAgICB0ID0gIkMiOworI2lmZGVmIEhBVkVfRE5TU0VDCisJICAgIGVsc2UgaWYgKChjYWNoZS0+ZmxhZ3MgJiAoRl9EUyB8IEZfRE5TS0VZKSkgPT0gKEZfRFMgfCBGX0ROU0tFWSkpCisJICAgICAgdCA9ICJHIjsgLyogRE5TS0VZIGFuZCBEUyBzZXQgLT4gUlJJU0cgKi8KKwkgICAgZWxzZSBpZiAoY2FjaGUtPmZsYWdzICYgRl9EUykKKwkgICAgICB0ID0gIlMiOworCSAgICBlbHNlIGlmIChjYWNoZS0+ZmxhZ3MgJiBGX0ROU0tFWSkKKwkgICAgICB0ID0gIksiOworI2VuZGlmCisJICAgIHAgKz0gc3ByaW50ZihwLCAiJS00MC40MHMgJXMlcyVzJXMlcyVzJXMlcyVzICAiLCBhLCB0LAorCQkJIGNhY2hlLT5mbGFncyAmIEZfRk9SV0FSRCA/ICJGIiA6ICIgIiwKKwkJCSBjYWNoZS0+ZmxhZ3MgJiBGX1JFVkVSU0UgPyAiUiIgOiAiICIsCisJCQkgY2FjaGUtPmZsYWdzICYgRl9JTU1PUlRBTCA/ICJJIiA6ICIgIiwKKwkJCSBjYWNoZS0+ZmxhZ3MgJiBGX0RIQ1AgPyAiRCIgOiAiICIsCisJCQkgY2FjaGUtPmZsYWdzICYgRl9ORUcgPyAiTiIgOiAiICIsCisJCQkgY2FjaGUtPmZsYWdzICYgRl9OWERPTUFJTiA/ICJYIiA6ICIgIiwKKwkJCSBjYWNoZS0+ZmxhZ3MgJiBGX0hPU1RTID8gIkgiIDogIiAiLAorCQkJIGNhY2hlLT5mbGFncyAmIEZfRE5TU0VDT0sgPyAiViIgOiAiICIpOworI2lmZGVmIEhBVkVfQlJPS0VOX1JUQworCSAgICBwICs9IHNwcmludGYocCwgIiVsdSIsIGNhY2hlLT5mbGFncyAmIEZfSU1NT1JUQUwgPyAwOiAodW5zaWduZWQgbG9uZykoY2FjaGUtPnR0ZCAtIG5vdykpOworI2Vsc2UKKwkgICAgcCArPSBzcHJpbnRmKHAsICIlcyIsIGNhY2hlLT5mbGFncyAmIEZfSU1NT1JUQUwgPyAiXG4iIDogY3RpbWUoJihjYWNoZS0+dHRkKSkpOworCSAgICAvKiBjdGltZSBpbmNsdWRlcyB0cmFpbGluZyBcbiAtIGVhdCBpdCAqLworCSAgICAqKHAtMSkgPSAwOworI2VuZGlmCisJICAgIG15X3N5c2xvZyhMT0dfSU5GTywgZGFlbW9uLT5uYW1lYnVmZik7CisJICB9CisgICAgfQorfQorCitjaGFyICpyZWNvcmRfc291cmNlKHVuc2lnbmVkIGludCBpbmRleCkKK3sKKyAgc3RydWN0IGhvc3RzZmlsZSAqYWg7CisKKyAgaWYgKGluZGV4ID09IFNSQ19DT05GSUcpCisgICAgcmV0dXJuICJjb25maWciOworICBlbHNlIGlmIChpbmRleCA9PSBTUkNfSE9TVFMpCisgICAgcmV0dXJuIEhPU1RTRklMRTsKKworICBmb3IgKGFoID0gZGFlbW9uLT5hZGRuX2hvc3RzOyBhaDsgYWggPSBhaC0+bmV4dCkKKyAgICBpZiAoYWgtPmluZGV4ID09IGluZGV4KQorICAgICAgcmV0dXJuIGFoLT5mbmFtZTsKKyAgCisgIHJldHVybiAiPHVua25vd24+IjsKK30KKworY2hhciAqcXVlcnlzdHIoY2hhciAqZGVzYywgdW5zaWduZWQgc2hvcnQgdHlwZSkKK3sKKyAgdW5zaWduZWQgaW50IGk7CisgIGludCBsZW4gPSAxMDsgLyogc3RybGVuKCJ0eXBlPXh4eHh4IikgKi8KKyAgY29uc3QgY2hhciAqdHlwZXMgPSBOVUxMOworICBzdGF0aWMgY2hhciAqYnVmZiA9IE5VTEw7CisgIHN0YXRpYyBpbnQgYnVmZmxlbiA9IDA7CisKKyAgZm9yIChpID0gMDsgaSA8IChzaXplb2YodHlwZXN0cikvc2l6ZW9mKHR5cGVzdHJbMF0pKTsgaSsrKQorICAgIGlmICh0eXBlc3RyW2ldLnR5cGUgPT0gdHlwZSkKKyAgICAgIHsKKwl0eXBlcyA9IHR5cGVzdHJbaV0ubmFtZTsKKwlsZW4gPSBzdHJsZW4odHlwZXMpOworCWJyZWFrOworICAgICAgfQorCisgIGxlbiArPSAzOyAvKiBicmFjZXMsIHRlcm1pbmF0b3IgKi8KKyAgbGVuICs9IHN0cmxlbihkZXNjKTsKKworICBpZiAoIWJ1ZmYgfHwgYnVmZmxlbiA8IGxlbikKKyAgICB7CisgICAgICBpZiAoYnVmZikKKwlmcmVlKGJ1ZmYpOworICAgICAgZWxzZSBpZiAobGVuIDwgMjApCisJbGVuID0gMjA7CisgICAgICAKKyAgICAgIGJ1ZmYgPSB3aGluZV9tYWxsb2MobGVuKTsKKyAgICAgIGJ1ZmZsZW4gPSBsZW47CisgICAgfQorCisgIGlmIChidWZmKQorICAgIHsKKyAgICAgIGlmICh0eXBlcykKKwlzcHJpbnRmKGJ1ZmYsICIlc1slc10iLCBkZXNjLCB0eXBlcyk7CisgICAgICBlbHNlCisJc3ByaW50ZihidWZmLCAiJXNbdHlwZT0lZF0iLCBkZXNjLCB0eXBlKTsKKyAgICB9CisKKyAgcmV0dXJuIGJ1ZmYgPyBidWZmIDogIiI7Cit9CisKK3ZvaWQgbG9nX3F1ZXJ5KHVuc2lnbmVkIGludCBmbGFncywgY2hhciAqbmFtZSwgc3RydWN0IGFsbF9hZGRyICphZGRyLCBjaGFyICphcmcpCit7CisgIGNoYXIgKnNvdXJjZSwgKmRlc3QgPSBkYWVtb24tPmFkZHJidWZmOworICBjaGFyICp2ZXJiID0gImlzIjsKKyAgCisgIGlmICghb3B0aW9uX2Jvb2woT1BUX0xPRykpCisgICAgcmV0dXJuOworCisgIGlmIChhZGRyKQorICAgIHsKKyAgICAgIGlmIChmbGFncyAmIEZfS0VZVEFHKQorCXNwcmludGYoZGFlbW9uLT5hZGRyYnVmZiwgYXJnLCBhZGRyLT5hZGRyLmtleXRhZyk7CisgICAgICBlbHNlCisJeworI2lmZGVmIEhBVkVfSVBWNgorCSAgaW5ldF9udG9wKGZsYWdzICYgRl9JUFY0ID8gQUZfSU5FVCA6IEFGX0lORVQ2LAorCQkgICAgYWRkciwgZGFlbW9uLT5hZGRyYnVmZiwgQUREUlNUUkxFTik7CisjZWxzZQorCSAgc3RybmNweShkYWVtb24tPmFkZHJidWZmLCBpbmV0X250b2EoYWRkci0+YWRkci5hZGRyNCksIEFERFJTVFJMRU4pOyAgCisjZW5kaWYKKwl9CisgICAgfQorICBlbHNlCisgICAgZGVzdCA9IGFyZzsKKworICBpZiAoZmxhZ3MgJiBGX1JFVkVSU0UpCisgICAgeworICAgICAgZGVzdCA9IG5hbWU7CisgICAgICBuYW1lID0gZGFlbW9uLT5hZGRyYnVmZjsKKyAgICB9CisgIAorICBpZiAoZmxhZ3MgJiBGX05FRykKKyAgICB7CisgICAgICBpZiAoZmxhZ3MgJiBGX05YRE9NQUlOKQorCWRlc3QgPSAiTlhET01BSU4iOworICAgICAgZWxzZQorCXsgICAgICAKKwkgIGlmIChmbGFncyAmIEZfSVBWNCkKKwkgICAgZGVzdCA9ICJOT0RBVEEtSVB2NCI7CisJICBlbHNlIGlmIChmbGFncyAmIEZfSVBWNikKKwkgICAgZGVzdCA9ICJOT0RBVEEtSVB2NiI7CisJICBlbHNlCisJICAgIGRlc3QgPSAiTk9EQVRBIjsKKwl9CisgICAgfQorICBlbHNlIGlmIChmbGFncyAmIEZfQ05BTUUpCisgICAgZGVzdCA9ICI8Q05BTUU+IjsKKyAgZWxzZSBpZiAoZmxhZ3MgJiBGX1JSTkFNRSkKKyAgICBkZXN0ID0gYXJnOworICAgIAorICBpZiAoZmxhZ3MgJiBGX0NPTkZJRykKKyAgICBzb3VyY2UgPSAiY29uZmlnIjsKKyAgZWxzZSBpZiAoZmxhZ3MgJiBGX0RIQ1ApCisgICAgc291cmNlID0gIkRIQ1AiOworICBlbHNlIGlmIChmbGFncyAmIEZfSE9TVFMpCisgICAgc291cmNlID0gYXJnOworICBlbHNlIGlmIChmbGFncyAmIEZfVVBTVFJFQU0pCisgICAgc291cmNlID0gInJlcGx5IjsKKyAgZWxzZSBpZiAoZmxhZ3MgJiBGX1NFQ1NUQVQpCisgICAgc291cmNlID0gInZhbGlkYXRpb24iOworICBlbHNlIGlmIChmbGFncyAmIEZfQVVUSCkKKyAgICBzb3VyY2UgPSAiYXV0aCI7CisgIGVsc2UgaWYgKGZsYWdzICYgRl9TRVJWRVIpCisgICAgeworICAgICAgc291cmNlID0gImZvcndhcmRlZCI7CisgICAgICB2ZXJiID0gInRvIjsKKyAgICB9CisgIGVsc2UgaWYgKGZsYWdzICYgRl9RVUVSWSkKKyAgICB7CisgICAgICBzb3VyY2UgPSBhcmc7CisgICAgICB2ZXJiID0gImZyb20iOworICAgIH0KKyAgZWxzZSBpZiAoZmxhZ3MgJiBGX0ROU1NFQykKKyAgICB7CisgICAgICBzb3VyY2UgPSBhcmc7CisgICAgICB2ZXJiID0gInRvIjsKKyAgICB9CisgIGVsc2UgaWYgKGZsYWdzICYgRl9JUFNFVCkKKyAgICB7CisgICAgICBzb3VyY2UgPSAiaXBzZXQgYWRkIjsKKyAgICAgIGRlc3QgPSBuYW1lOworICAgICAgbmFtZSA9IGFyZzsKKyAgICAgIHZlcmIgPSBkYWVtb24tPmFkZHJidWZmOworICAgIH0KKyAgZWxzZQorICAgIHNvdXJjZSA9ICJjYWNoZWQiOworICAKKyAgaWYgKHN0cmxlbihuYW1lKSA9PSAwKQorICAgIG5hbWUgPSAiLiI7CisKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9FWFRSQUxPRykpCisgICAgeworICAgICAgcHJldHR5cHJpbnRfYWRkcihkYWVtb24tPmxvZ19zb3VyY2VfYWRkciwgZGFlbW9uLT5hZGRyYnVmZjIpOworICAgICAgaWYgKGZsYWdzICYgRl9OT0VYVFJBKQorCW15X3N5c2xvZyhMT0dfSU5GTywgIiogJXMgJXMgJXMgJXMgJXMiLCBkYWVtb24tPmFkZHJidWZmMiwgc291cmNlLCBuYW1lLCB2ZXJiLCBkZXN0KTsKKyAgICAgIGVsc2UKKwlteV9zeXNsb2coTE9HX0lORk8sICIldSAlcyAlcyAlcyAlcyAlcyIsIGRhZW1vbi0+bG9nX2Rpc3BsYXlfaWQsIGRhZW1vbi0+YWRkcmJ1ZmYyLCBzb3VyY2UsIG5hbWUsIHZlcmIsIGRlc3QpOworICAgIH0KKyAgZWxzZQorICAgIG15X3N5c2xvZyhMT0dfSU5GTywgIiVzICVzICVzICVzIiwgc291cmNlLCBuYW1lLCB2ZXJiLCBkZXN0KTsKK30KKworIApkaWZmIC0tZ2l0IGEvc3JjL2NvbmZpZy5oIGIvc3JjL2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkY2EyMzEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29uZmlnLmgKQEAgLTAsMCArMSw0MzcgQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMTQgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjZGVmaW5lIEZUQUJTSVogMTUwIC8qIG1heCBudW1iZXIgb2Ygb3V0c3RhbmRpbmcgcmVxdWVzdHMgKGRlZmF1bHQpICovCisjZGVmaW5lIE1BWF9QUk9DUyAyMCAvKiBtYXggbm8gY2hpbGRyZW4gZm9yIFRDUCByZXF1ZXN0cyAqLworI2RlZmluZSBDSElMRF9MSUZFVElNRSAxNTAgLyogc2VjcyAndGlsbCB0ZXJtaW5hdGVkIChSRkMxMDM1IHN1Z2dlc3RzID4gMTIwcykgKi8KKyNkZWZpbmUgVENQX01BWF9RVUVSSUVTIDEwMCAvKiBNYXhpbXVtIG51bWJlciBvZiBxdWVyaWVzIHBlciBpbmNvbWluZyBUQ1AgY29ubmVjdGlvbiAqLworI2RlZmluZSBFRE5TX1BLVFNaIDQwOTYgLyogZGVmYXVsdCBtYXggRUROUy4wIFVEUCBwYWNrZXQgZnJvbSBSRkM1NjI1ICovCisjZGVmaW5lIEtFWUJMT0NLX0xFTiA0MCAvKiBjaG9vc2UgdG8gbWluaW5pc2UgZnJhZ21lbnRhdGlvbiB3aGVuIHN0b3JpbmcgRE5TU0VDIGtleXMgKi8KKyNkZWZpbmUgRE5TU0VDX1dPUksgNTAgLyogTWF4IG51bWJlciBvZiBxdWVyaWVzIHRvIHZhbGlkYXRlIG9uZSBxdWVzdGlvbiAqLworI2RlZmluZSBUSU1FT1VUIDEwIC8qIGRyb3AgVURQIHF1ZXJpZXMgYWZ0ZXIgVElNRU9VVCBzZWNvbmRzICovCisjZGVmaW5lIEZPUldBUkRfVEVTVCA1MCAvKiB0cnkgYWxsIHNlcnZlcnMgZXZlcnkgNTAgcXVlcmllcyAqLworI2RlZmluZSBGT1JXQVJEX1RJTUUgMjAgLyogb3IgMjAgc2Vjb25kcyAqLworI2RlZmluZSBSQU5ET01fU09DS1MgNjQgLyogbWF4IHNpbXVsdGFuZW91cyByYW5kb20gcG9ydHMgKi8KKyNkZWZpbmUgTEVBU0VfUkVUUlkgNjAgLyogb24gZXJyb3IsIHJldHJ5IHdyaXRpbmcgbGVhc2VmaWxlIGFmdGVyIExFQVNFX1JFVFJZIHNlY29uZHMgKi8KKyNkZWZpbmUgQ0FDSEVTSVogMTUwIC8qIGRlZmF1bHQgY2FjaGUgc2l6ZSAqLworI2RlZmluZSBUVExfRkxPT1JfTElNSVQgMzYwMCAvKiBkb24ndCBhbGxvdyAtLW1pbi1jYWNoZS10dGwgdG8gcmFpc2UgVFRMIGFib3ZlIHRoaXMgdW5kZXIgYW55IGNpcmN1bXN0YW5jZXMgKi8KKyNkZWZpbmUgTUFYTEVBU0VTIDEwMDAgLyogbWF4aW11bSBudW1iZXIgb2YgREhDUCBsZWFzZXMgKi8KKyNkZWZpbmUgUElOR19XQUlUIDMgLyogd2FpdCBmb3IgcGluZyBhZGRyZXNzLWluLXVzZSB0ZXN0ICovCisjZGVmaW5lIFBJTkdfQ0FDSEVfVElNRSAzMCAvKiBQaW5nIHRlc3QgYXNzdW1lZCB0byBiZSB2YWxpZCB0aGlzIGxvbmcuICovCisjZGVmaW5lIERFQ0xJTkVfQkFDS09GRiA2MDAgLyogZGlzYWJsZSBERUNMSU5FZCBzdGF0aWMgYWRkcmVzc2VzIGZvciB0aGlzIGxvbmcgKi8KKyNkZWZpbmUgREhDUF9QQUNLRVRfTUFYIDE2Mzg0IC8qIGhhcmQgbGltaXQgb24gREhDUCBwYWNrZXQgc2l6ZSAqLworI2RlZmluZSBTTUFMTEROQU1FIDUwIC8qIG1vc3QgZG9tYWluIG5hbWVzIGFyZSBzbWFsbGVyIHRoYW4gdGhpcyAqLworI2RlZmluZSBDTkFNRV9DSEFJTiAxMCAvKiBjaGFpbnMgbG9uZ2VyIHRoYW4gdGhpcyBhdHIgZHJvcHBlZCBmb3IgbG9vcCBwcm90ZWN0aW9uICovCisjZGVmaW5lIEhPU1RTRklMRSAiL2V0Yy9ob3N0cyIKKyNkZWZpbmUgRVRIRVJTRklMRSAiL2V0Yy9ldGhlcnMiCisjZGVmaW5lIERFRkxFQVNFIDM2MDAgLyogZGVmYXVsdCBsZWFzZSB0aW1lLCAxIGhvdXIgKi8KKyNkZWZpbmUgQ0hVU0VSICJub2JvZHkiCisjZGVmaW5lIENIR1JQICJkaXAiCisjZGVmaW5lIFRGVFBfTUFYX0NPTk5FQ1RJT05TIDUwIC8qIG1heCBzaW11bHRhbmVvdXMgY29ubmVjdGlvbnMgKi8KKyNkZWZpbmUgTE9HX01BWCA1IC8qIGxvZy1xdWV1ZSBsZW5ndGggKi8KKyNkZWZpbmUgUkFOREZJTEUgIi9kZXYvdXJhbmRvbSIKKyNkZWZpbmUgRE5TTUFTUV9TRVJWSUNFICJ1ay5vcmcudGhla2VsbGV5cy5kbnNtYXNxIiAvKiBEZWZhdWx0IC0gbWF5IGJlIG92ZXJyaWRkZW4gYnkgY29uZmlnICovCisjZGVmaW5lIEROU01BU1FfUEFUSCAiL3VrL29yZy90aGVrZWxsZXlzL2Ruc21hc3EiCisjZGVmaW5lIEFVVEhfVFRMIDYwMCAvKiBkZWZhdWx0IFRUTCBmb3IgYXV0aCBETlMgKi8KKyNkZWZpbmUgU09BX1JFRlJFU0ggMTIwMCAvKiBTT0EgcmVmcmVzaCBkZWZhdWx0ICovCisjZGVmaW5lIFNPQV9SRVRSWSAxODAgLyogU09BIHJldHJ5IGRlZmF1bHQgKi8KKyNkZWZpbmUgU09BX0VYUElSWSAxMjA5NjAwIC8qIFNPQSBleHBpcnkgZGVmYXVsdCAqLworI2RlZmluZSBMT09QX1RFU1RfRE9NQUlOICJ0ZXN0IiAvKiBkb21haW4gZm9yIGxvb3AgdGVzdGluZywgInRlc3QiIGlzIHJlc2VydmVkIGJ5IFJGQyAyNjA2IGFuZCB3b24ndCB0aGVyZWZvcmUgY2xhc2ggKi8KKyNkZWZpbmUgTE9PUF9URVNUX1RZUEUgVF9UWFQKKyAKKy8qIGNvbXBpbGUtdGltZSBvcHRpb25zOiB1bmNvbW1lbnQgYmVsb3cgdG8gZW5hYmxlIG9yIGRvIGVnLgorICAgbWFrZSBDT1BUUz0tREhBVkVfQlJPS0VOX1JUQworCitIQVZFX0JST0tFTl9SVEMKKyAgIGRlZmluZSB0aGlzIG9uIGVtYmVkZGVkIHN5c3RlbXMgd2hpY2ggZG9uJ3QgaGF2ZSBhbiBSVEMKKyAgIHdoaWNoIGtlZXBzIHRpbWUgb3ZlciByZWJvb3RzLiBDYXVzZXMgZG5zbWFzcSB0byB1c2UgdXB0aW1lCisgICBmb3IgdGltaW5nLCBhbmQga2VlcCBsZWFzZSBsZW5ndGhzIHJhdGhlciB0aGFuIGV4cGlyeSB0aW1lcworICAgaW4gaXRzIGxlYXNlcyBmaWxlLiBUaGlzIGFsc28gbWFrZSBkbnNtYXNxICJmbGFzaCBkaXNrIGZyaWVuZGx5Ii4KKyAgIE5vcm1hbGx5LCBkbnNtYXNxIHRyaWVzIHZlcnkgaGFyZCB0byBrZWVwIHRoZSBvbi1kaXNrIGxlYXNlcyBmaWxlCisgICB1cC10by1kYXRlOiByZXdyaXRpbmcgaXQgYWZ0ZXIgZXZlcnkgcmVuZXdhbC4gIFdoZW4gSEFWRV9CUk9LRU5fUlRDIAorICAgaXMgaW4gZWZmZWN0LCB0aGUgbGVhc2UgZmlsZSBpcyBvbmx5IHdyaXR0ZW4gd2hlbiBhIG5ldyBsZWFzZSBpcyAKKyAgIGNyZWF0ZWQsIG9yIGFuIG9sZCBvbmUgZGVzdHJveWVkLiAoQmVjYXVzZSB0aG9zZSBhcmUgdGhlIG9ubHkgdGltZXMgCisgICBpdCBjaGFuZ2VzLikgVGhpcyB2YXN0bHkgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIGZpbGUgd3JpdGVzLCBhbmQgbWFrZXMKKyAgIGl0IHZpYWJsZSB0byBrZWVwIHRoZSBsZWFzZSBmaWxlIG9uIGEgZmxhc2ggZmlsZXN5c3RlbS4KKyAgIE5PVEU6IHdoZW4gZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMsIGJlIHN1cmUgdG8gZGVsZXRlIGFueSBvbGQKKyAgIGxlYXNlcyBmaWxlLCBvdGhlcndpc2UgZG5zbWFzcSBtYXkgZ2V0IHZlcnkgY29uZnVzZWQuCisKK0hBVkVfVEZUUAorICAgZGVmaW5lIHRoaXMgdG8gZ2V0IGRuc21hc3EncyBidWlsdC1pbiBURlRQIHNlcnZlci4KKworSEFWRV9ESENQCisgICBkZWZpbmUgdGhpcyB0byBnZXQgZG5zbWFzcSdzIERIQ1B2NCBzZXJ2ZXIuCisKK0hBVkVfREhDUDYKKyAgIGRlZmluZSB0aGlzIHRvIGdldCBkbnNtYXNxJ3MgREhDUHY2IHNlcnZlci4gKGltcGxpZXMgSEFWRV9ESENQKS4KKworSEFWRV9TQ1JJUFQKKyAgIGRlZmluZSB0aGlzIHRvIGdldCB0aGUgYWJpbGl0eSB0byBjYWxsIHNjcmlwdHMgb24gbGVhc2UtY2hhbmdlLgorCitIQVZFX0xVQVNDUklQVAorICAgZGVmaW5lIHRoaXMgdG8gZ2V0IHRoZSBhYmlsaXR5IHRvIGNhbGwgTHVhIHNjcmlwdCBvbiBsZWFzZS1jaGFuZ2UuIChpbXBsaWVzIEhBVkVfU0NSSVBUKSAKKworSEFWRV9EQlVTCisgICBkZWZpbmUgdGhpcyBpZiB5b3Ugd2FudCB0byBsaW5rIGFnYWluc3QgbGliZGJ1cywgYW5kIGhhdmUgZG5zbWFzcQorICAgc3VwcG9ydCBzb21lIG1ldGhvZHMgdG8gYWxsb3cgKHJlKWNvbmZpZ3VyYXRpb24gb2YgdGhlIHVwc3RyZWFtIEROUyAKKyAgIHNlcnZlcnMgdmlhIERCdXMuCisKK0hBVkVfSUROCisgICBkZWZpbmUgdGhpcyBpZiB5b3Ugd2FudCBpbnRlcm5hdGlvbmFsIGRvbWFpbiBuYW1lIHN1cHBvcnQuCisgICBOT1RFOiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIElETiBzdXBwb3J0IGlzIGF1dG9tYXRpY2FsbHkgCisgICAgICAgICBpbmNsdWRlZCB3aGVuIGludGVybmF0aW9uYWxpc2F0aW9uIHN1cHBvcnQgaXMgYnVpbHQsIHVzaW5nIHRoZSAKKwkgKi1pMThuIG1ha2VmaWxlIHRhcmdldHMsIGV2ZW4gaWYgSEFWRV9JRE4gaXMgbm90IGV4cGxpY2l0bHkgc2V0LgorCitIQVZFX0NPTk5UUkFDSworICAgZGVmaW5lIHRoaXMgdG8gaW5jbHVkZSBjb2RlIHdoaWNoIHByb3BvZ2F0ZXMgY29ubnRyYWNrIG1hcmtzIGZyb20KKyAgIGluY29taW5nIEROUyBxdWVyaWVzIHRvIHRoZSBjb3JyZXNwb25kaW5nIHVwc3RyZWFtIHF1ZXJpZXMuIFRoaXMgYWRkcworICAgYSBidWlsZC1kZXBlbmRlbmN5IG9uIGxpYm5ldGZpbHRlcl9jb25udHJhY2ssIGJ1dCB0aGUgcmVzdWx0aW5nIGJpbmFyeSB3aWxsCisgICBzdGlsbCBydW4gaGFwcGlseSBvbiBhIGtlcm5lbCB3aXRob3V0IGNvbm50cmFjayBzdXBwb3J0LgorCitIQVZFX0lQU0VUCisgICAgZGVmaW5lIHRoaXMgdG8gaW5jbHVkZSB0aGUgYWJpbGl0eSB0byBzZWxlY3RpdmVseSBhZGQgcmVzb2x2ZWQgaXAgYWRkcmVzc2VzCisgICAgdG8gZ2l2ZW4gaXBzZXRzLgorCitIQVZFX0FVVEgKKyAgIGRlZmluZSB0aGlzIHRvIGluY2x1ZGUgdGhlIGZhY2lsaXR5IHRvIGFjdCBhcyBhbiBhdXRob3JpdGF0aXZlIEROUworICAgc2VydmVyIGZvciBvbmUgb3IgbW9yZSB6b25lcy4KKworSEFWRV9ETlNTRUMKKyAgIGluY2x1ZGUgRE5TU0VDIHZhbGlkYXRvci4KKworSEFWRV9MT09QCisgICBpbmNsdWRlIGZ1bmN0aW9uYWxpdHkgdG8gcHJvYmUgZm9yIGFuZCByZW1vdmUgRE5TIGZvcndhcmRpbmcgbG9vcHMuCisKKworTk9fSVBWNgorTk9fVEZUUAorTk9fREhDUAorTk9fREhDUDYKK05PX1NDUklQVAorTk9fTEFSR0VGSUxFCitOT19BVVRICisgICB0aGVzZSBhcmUgYXZpbGFibGUgdG8gZXhwbGljdGx5IGRpc2FibGUgY29tcGlsZSB0aW1lIG9wdGlvbnMgd2hpY2ggd291bGQgCisgICBvdGhlcndpc2UgYmUgZW5hYmxlZCBhdXRvbWF0aWNhbGx5IChIQVZFX0lQVjYsID4yR2IgZmlsZSBzaXplcykgb3IgCisgICB3aGljaCBhcmUgZW5hYmxlZCAgYnkgZGVmYXVsdCBpbiB0aGUgZGlzdHJpYnV0ZWQgc291cmNlIHRyZWUuIEJ1aWxkaW5nIGRuc21hc3EKKyAgIHdpdGggc29tZXRoaW5nIGxpa2UgIm1ha2UgQ09QVFM9LUROT19TQ1JJUFQiIHdpbGwgZG8gdGhlIHRyaWNrLgorCitOT19ORVRUTEVfRUNDCisgICBEb24ndCBpbmNsdWRlIHRoZSBFQ0RTQSBjeXBoZXIgaW4gRE5TU0VDIHZhbGlkYXRpb24uIE5lZWRlZCBmb3Igb2xkZXIgTmV0dGxlIHZlcnNpb25zLgorTk9fR01QCisgICBEb24ndCB1c2UgYW5kIGxpbmsgYWdhaW5zdCBsaWJnbXAsIFVzZWZ1bCBpZiBuZXR0bGUgaXMgYnVpbHQgd2l0aCAtLWVuYWJsZS1taW5pLWdtcC4KKworTEVBU0VGSUxFCitDT05GRklMRQorUkVTT0xWRklMRQorICAgdGhlIGRlZmF1bHQgbG9jYXRpb25zIG9mIHRoZXNlIGZpbGVzIGFyZSBkZXRlcm1pbmVkIGJlbG93LCBidXQgbWF5IGJlIG92ZXJyaWRkZW4gCisgICBpbiBhIGJ1aWxkIGNvbW1hbmQgbGluZSB1c2luZyBDT1BUUy4KKworKi8KKworLyogRGVmaW5pbmcgdGhpcyBidWlsZHMgYSBiaW5hcnkgd2hpY2ggaGFuZGxlcyB0aW1lIGRpZmZlcmVudGx5IGFuZCB3b3JrcyBiZXR0ZXIgb24gYSBzeXN0ZW0gd2l0aG91dCBhIAorICAgc3RhYmxlIFJUQyAoaXQgdXNlcyB1cHRpbWUsIG5vdCBlcG9jaCB0aW1lKSBhbmQgd3JpdGVzIHRoZSBESENQIGxlYXNlcyBmaWxlIGxlc3Mgb2Z0ZW4gdG8gYXZvaWQgZmxhc2ggd2Vhci4gCisqLworCisvKiAjZGVmaW5lIEhBVkVfQlJPS0VOX1JUQyAqLworCisvKiBUaGUgZGVmYXVsdCBzZXQgb2Ygb3B0aW9ucyB0byBidWlsZC4gQnVpbHQgd2l0aCB0aGVzZSBvcHRpb25zLCBkbnNtYXNxCisgICBoYXMgbm8gbGlicmFyeSBkZXBlbmRlbmNpZXMgb3RoZXIgdGhhbiBsaWJjICovCisKKyNkZWZpbmUgSEFWRV9ESENQCisjZGVmaW5lIEhBVkVfREhDUDYgCisjZGVmaW5lIEhBVkVfVEZUUAorI2RlZmluZSBIQVZFX1NDUklQVAorI2RlZmluZSBIQVZFX0FVVEgKKyNkZWZpbmUgSEFWRV9JUFNFVCAKKyNkZWZpbmUgSEFWRV9MT09QCisKKy8qIEJ1aWxkIG9wdGlvbnMgd2hpY2ggcmVxdWlyZSBleHRlcm5hbCBsaWJyYXJpZXMuCisgICAKKyAgIERlZmluaW5nIEhBVkVfPG9wdD5fU1RBVElDIGFzIF93ZWxsXyBhcyBIQVZFXzxvcHQ+IHdpbGwgbGluayB0aGUgbGlicmFyeSBzdGF0aWNhbGx5LgorCisgICBZb3UgY2FuIHVzZSAibWFrZSBDT1BUUz0tREhBVkVfPG9wdD4iIGluc3RlYWQgb2YgZWRpdGluZyB0aGVzZS4KKyovCisKKy8qICNkZWZpbmUgSEFWRV9MVUFTQ1JJUFQgKi8KKy8qICNkZWZpbmUgSEFWRV9EQlVTICovCisvKiAjZGVmaW5lIEhBVkVfSUROICovCisvKiAjZGVmaW5lIEhBVkVfQ09OTlRSQUNLICovCisvKiAjZGVmaW5lIEhBVkVfRE5TU0VDICovCisKKworLyogRGVmYXVsdCBsb2NhdGlvbnMgZm9yIGltcG9ydGFudCBzeXN0ZW0gZmlsZXMuICovCisKKyNpZm5kZWYgTEVBU0VGSUxFCisjICAgaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZCAoX19PcGVuQlNEX18pIHx8IGRlZmluZWQoX19EcmFnb25GbHlfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKQorIyAgICAgIGRlZmluZSBMRUFTRUZJTEUgIi92YXIvZGIvZG5zbWFzcS5sZWFzZXMiCisjICAgZWxpZiBkZWZpbmVkKF9fc3VuX18pIHx8IGRlZmluZWQgKF9fc3VuKQorIyAgICAgIGRlZmluZSBMRUFTRUZJTEUgIi92YXIvY2FjaGUvZG5zbWFzcS5sZWFzZXMiCisjICAgZWxpZiBkZWZpbmVkKF9fQU5EUk9JRF9fKQorIyAgICAgIGRlZmluZSBMRUFTRUZJTEUgIi9kYXRhL21pc2MvZGhjcC9kbnNtYXNxLmxlYXNlcyIKKyMgICBlbHNlCisjICAgICAgZGVmaW5lIExFQVNFRklMRSAiL3Zhci9saWIvbWlzYy9kbnNtYXNxLmxlYXNlcyIKKyMgICBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgQ09ORkZJTEUKKyMgICBpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorIyAgICAgIGRlZmluZSBDT05GRklMRSAiL3Vzci9sb2NhbC9ldGMvZG5zbWFzcS5jb25mIgorIyAgIGVsc2UKKyMgICAgICBkZWZpbmUgQ09ORkZJTEUgIi9ldGMvZG5zbWFzcS5jb25mIgorIyAgIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBSRVNPTFZGSUxFCisjICAgaWYgZGVmaW5lZChfX3VDbGludXhfXykKKyMgICAgICBkZWZpbmUgUkVTT0xWRklMRSAiL2V0Yy9jb25maWcvcmVzb2x2LmNvbmYiCisjICAgZWxzZQorIyAgICAgIGRlZmluZSBSRVNPTFZGSUxFICIvZXRjL3Jlc29sdi5jb25mIgorIyAgIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBSVU5GSUxFCisjICAgaWYgZGVmaW5lZChfX0FORFJPSURfXykKKyMgICAgICBkZWZpbmUgUlVORklMRSAiL2RhdGEvZG5zbWFzcS5waWQiCisjICAgIGVsc2UKKyMgICAgICBkZWZpbmUgUlVORklMRSAiL3Zhci9ydW4vZG5zbWFzcS5waWQiCisjICAgIGVuZGlmCisjZW5kaWYKKworLyogcGxhdGZvcm0gZGVwZW5kZW50IG9wdGlvbnM6IHRoZXNlIGFyZSBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkgYmVsb3cKKworSEFWRV9MSU5VWF9ORVRXT1JLCitIQVZFX0JTRF9ORVRXT1JLCitIQVZFX1NPTEFSSVNfTkVUV09SSworICAgZGVmaW5lIGV4YWN0bHkgb25lIG9mIHRoZXNlIHRvIGFsdGVyIGludGVyYWN0aW9uIHdpdGgga2VybmVsIG5ldHdvcmtpbmcuCisKK0hBVkVfR0VUT1BUX0xPTkcKKyAgIGRlZmluZWQgd2hlbiBHTlUtc3R5bGUgZ2V0b3B0X2xvbmcgYXZhaWxhYmxlLiAKKworSEFWRV9TT0NLQUREUl9TQV9MRU4KKyAgIGRlZmluZWQgaWYgc3RydWN0IHNvY2thZGRyIGhhcyBzYV9sZW4gZmllbGQgKCpCU0QpIAorKi8KKworLyogTXVzdCBwcmVjZWVkIF9fbGludXhfXyBzaW5jZSB1Q2xpbnV4IGRlZmluZXMgX19saW51eF9fIHRvby4gKi8KKyNpZiBkZWZpbmVkKF9fdUNsaW51eF9fKQorI2RlZmluZSBIQVZFX0xJTlVYX05FVFdPUksKKyNkZWZpbmUgSEFWRV9HRVRPUFRfTE9ORworI3VuZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisvKiBOZXZlciB1c2UgZm9yaygpIG9uIHVDbGludXguIE5vdGUgdGhhdCB0aGlzIGlzIHN1YnRseSBkaWZmZXJlbnQgZnJvbSB0aGUKKyAgIC0ta2VlcC1pbi1mb3JlZ3JvdW5kIG9wdGlvbiwgc2luY2UgaXQgYWxzbyAgc3VwcHJlc3NlcyBmb3JraW5nIG5ldyAKKyAgIHByb2Nlc3NlcyBmb3IgVENQIGNvbm5lY3Rpb25zIGFuZCBkaXNhYmxlcyB0aGUgY2FsbC1hLXNjcmlwdCBvbiBsZWFzZWNoYW5nZQorICAgc3lzdGVtLiBJdCdzIGludGVuZGVkIGZvciB1c2Ugb24gTU1VLWxlc3Mga2VybmVscy4gKi8KKyNkZWZpbmUgTk9fRk9SSworCisjZWxpZiBkZWZpbmVkKF9fVUNMSUJDX18pCisjZGVmaW5lIEhBVkVfTElOVVhfTkVUV09SSworI2lmIGRlZmluZWQoX19VQ0xJQkNfSEFTX0dOVV9HRVRPUFRfXykgfHwgXAorICAgKChfX1VDTElCQ19NQUpPUl9fPT0wKSAmJiAoX19VQ0xJQkNfTUlOT1JfXz09OSkgJiYgKF9fVUNMSUJDX1NVQkxFVkVMX188MjEpKQorIyAgICBkZWZpbmUgSEFWRV9HRVRPUFRfTE9ORworI2VuZGlmCisjdW5kZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKyNpZiAhZGVmaW5lZChfX0FSQ0hfSEFTX01NVV9fKSAmJiAhZGVmaW5lZChfX1VDTElCQ19IQVNfTU1VX18pCisjICBkZWZpbmUgTk9fRk9SSworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VDTElCQ19IQVNfSVBWNl9fKQorIyAgaWZuZGVmIElQVjZfVjZPTkxZCisjICAgIGRlZmluZSBJUFY2X1Y2T05MWSAyNgorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBUaGlzIGlzIGZvciBnbGliYyAyLnggKi8KKyNlbGlmIGRlZmluZWQoX19saW51eF9fKQorI2RlZmluZSBIQVZFX0xJTlVYX05FVFdPUksKKyNkZWZpbmUgSEFWRV9HRVRPUFRfTE9ORworI3VuZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisKKyNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IFwKKyAgICAgIGRlZmluZWQoX19PcGVuQlNEX18pIHx8IFwKKyAgICAgIGRlZmluZWQoX19EcmFnb25GbHlfXykgfHwgXAorICAgICAgZGVmaW5lZChfX0ZyZWVCU0Rfa2VybmVsX18pCisjZGVmaW5lIEhBVkVfQlNEX05FVFdPUksKKy8qIExhdGVyIHZlcmlvbnMgb2YgRnJlZUJTRCBoYXZlIGdldG9wdF9sb25nKCkgKi8KKyNpZiBkZWZpbmVkKG9wdGlvbmFsX2FyZ3VtZW50KSAmJiBkZWZpbmVkKHJlcXVpcmVkX2FyZ3VtZW50KQorIyAgIGRlZmluZSBIQVZFX0dFVE9QVF9MT05HCisjZW5kaWYKKyNkZWZpbmUgSEFWRV9TT0NLQUREUl9TQV9MRU4KKworI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCisjZGVmaW5lIEhBVkVfQlNEX05FVFdPUksKKyNkZWZpbmUgSEFWRV9HRVRPUFRfTE9ORworI2RlZmluZSBIQVZFX1NPQ0tBRERSX1NBX0xFTgorLyogRGVmaW5lIGJlZm9yZSBzeXMvc29ja2V0LmggaXMgaW5jbHVkZWQgc28gd2UgZ2V0IHNvY2tsZW5fdCAqLworI2RlZmluZSBfQlNEX1NPQ0tMRU5fVF8KKy8qIFNlbGVjdCB0aGUgUkZDXzM1NDIgdmVyc2lvbiBvZiB0aGUgSVB2NiBzb2NrZXQgQVBJLiAKKyAgIERlZmluZSBiZWZvcmUgbmV0aW5ldDYvaW42LmggaXMgaW5jbHVkZWQuICovCisjZGVmaW5lIF9fQVBQTEVfVVNFX1JGQ18zNTQyIAorI2RlZmluZSBOT19JUFNFVAorCisjZWxpZiBkZWZpbmVkKF9fTmV0QlNEX18pCisjZGVmaW5lIEhBVkVfQlNEX05FVFdPUksKKyNkZWZpbmUgSEFWRV9HRVRPUFRfTE9ORworI2RlZmluZSBIQVZFX1NPQ0tBRERSX1NBX0xFTgorCisjZWxpZiBkZWZpbmVkKF9fc3VuKSB8fCBkZWZpbmVkKF9fc3VuX18pCisjZGVmaW5lIEhBVkVfU09MQVJJU19ORVRXT1JLCisjZGVmaW5lIEhBVkVfR0VUT1BUX0xPTkcKKyN1bmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorI2RlZmluZSBFVEhFUl9BRERSX0xFTiA2IAorIAorI2VuZGlmCisKKy8qIERlY2lkZSBpZiB3ZSdyZSBnb2luZyB0byBzdXBwb3J0IElQdjYgKi8KKy8qIFdlIGFzc3VtZSB0aGF0IHN5c3RlbXMgd2hpY2ggZG9uJ3QgaGF2ZSBJUHY2CisgICBoZWFkZXJzIGRvbid0IGhhdmUgbnRvcCBhbmQgcHRvbiBlaXRoZXIgKi8KKworI2lmIGRlZmluZWQoSU5FVDZfQUREUlNUUkxFTikgJiYgZGVmaW5lZChJUFY2X1Y2T05MWSkKKyMgIGRlZmluZSBIQVZFX0lQVjYKKyMgIGRlZmluZSBBRERSU1RSTEVOIElORVQ2X0FERFJTVFJMRU4KKyNlbHNlCisjICBpZiAhZGVmaW5lZChJTkVUX0FERFJTVFJMRU4pCisjICAgICAgZGVmaW5lIElORVRfQUREUlNUUkxFTiAxNiAvKiA0KjMgKyAzIGRvdHMgKyBOVUxMICovCisjICBlbmRpZgorIyAgdW5kZWYgSEFWRV9JUFY2CisjICBkZWZpbmUgQUREUlNUUkxFTiBJTkVUX0FERFJTVFJMRU4KKyNlbmRpZgorCisKKy8qIHJ1bGVzIHRvIGltcGxlbWVudCBjb21waWxlLXRpbWUgb3B0aW9uIGRlcGVuZGVuY2llcyBhbmQgCisgICB0aGUgTk9fWFhYIGZsYWdzICovCisKKyNpZmRlZiBOT19JUFY2CisjdW5kZWYgSEFWRV9JUFY2CisjZW5kaWYKKworI2lmZGVmIE5PX1RGVFAKKyN1bmRlZiBIQVZFX1RGVFAKKyNlbmRpZgorCisjaWZkZWYgTk9fREhDUAorI3VuZGVmIEhBVkVfREhDUAorI3VuZGVmIEhBVkVfREhDUDYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChOT19ESENQNikgfHwgIWRlZmluZWQoSEFWRV9JUFY2KQorI3VuZGVmIEhBVkVfREhDUDYKKyNlbmRpZgorCisvKiBESENQNiBuZWVkcyBESENQIHRvbyAqLworI2lmZGVmIEhBVkVfREhDUDYKKyNkZWZpbmUgSEFWRV9ESENQCisjZW5kaWYKKworI2lmIGRlZmluZWQoTk9fU0NSSVBUKSB8fCAhZGVmaW5lZChIQVZFX0RIQ1ApIHx8IGRlZmluZWQoTk9fRk9SSykKKyN1bmRlZiBIQVZFX1NDUklQVAorI3VuZGVmIEhBVkVfTFVBU0NSSVBUCisjZW5kaWYKKworLyogTXVzdCBIQVZFX1NDUklQVCB0byBIQVZFX0xVQVNDUklQVCAqLworI2lmZGVmIEhBVkVfTFVBU0NSSVBUCisjZGVmaW5lIEhBVkVfU0NSSVBUCisjZW5kaWYKKworI2lmZGVmIE5PX0FVVEgKKyN1bmRlZiBIQVZFX0FVVEgKKyNlbmRpZgorCisjaWYgZGVmaW5lZChOT19JUFNFVCkKKyN1bmRlZiBIQVZFX0lQU0VUCisjZW5kaWYKKworI2lmZGVmIE5PX0xPT1AKKyN1bmRlZiBIQVZFX0xPT1AKKyNlbmRpZgorCisvKiBEZWZpbmUgYSBzdHJpbmcgaW5kaWNhdGluZyB3aGljaCBvcHRpb25zIGFyZSBpbiB1c2UuCisgICBETlNNQVNRUF9DT01QSUxFX09QVFMgaXMgb25seSBkZWZpbmVkIGluIGRuc21hc3EuYyAqLworCisjaWZkZWYgRE5TTUFTUV9DT01QSUxFX09QVFMKKworc3RhdGljIGNoYXIgKmNvbXBpbGVfb3B0cyA9IAorI2lmbmRlZiBIQVZFX0lQVjYKKyJuby0iCisjZW5kaWYKKyJJUHY2ICIKKyNpZm5kZWYgSEFWRV9HRVRPUFRfTE9ORworIm5vLSIKKyNlbmRpZgorIkdOVS1nZXRvcHQgIgorI2lmZGVmIEhBVkVfQlJPS0VOX1JUQworIm5vLVJUQyAiCisjZW5kaWYKKyNpZmRlZiBOT19GT1JLCisibm8tTU1VICIKKyNlbmRpZgorI2lmbmRlZiBIQVZFX0RCVVMKKyJuby0iCisjZW5kaWYKKyJEQnVzICIKKyNpZm5kZWYgTE9DQUxFRElSCisibm8tIgorI2VuZGlmCisiaTE4biAiCisjaWYgIWRlZmluZWQoTE9DQUxFRElSKSAmJiAhZGVmaW5lZChIQVZFX0lETikKKyJuby0iCisjZW5kaWYgCisiSUROICIKKyNpZm5kZWYgSEFWRV9ESENQCisibm8tIgorI2VuZGlmCisiREhDUCAiCisjaWYgZGVmaW5lZChIQVZFX0RIQ1ApCisjICBpZiAhZGVmaW5lZCAoSEFWRV9ESENQNikKKyAgICAgIm5vLSIKKyMgIGVuZGlmICAKKyAgICAgIkRIQ1B2NiAiCisjICBpZiAhZGVmaW5lZChIQVZFX1NDUklQVCkKKyAgICAgIm5vLXNjcmlwdHMgIgorIyAgZWxzZQorIyAgICBpZiAhZGVmaW5lZChIQVZFX0xVQVNDUklQVCkKKyAgICAgICAibm8tIgorIyAgICBlbmRpZgorICAgICAiTHVhICIKKyMgIGVuZGlmCisjZW5kaWYKKyNpZm5kZWYgSEFWRV9URlRQCisibm8tIgorI2VuZGlmCisiVEZUUCAiCisjaWZuZGVmIEhBVkVfQ09OTlRSQUNLCisibm8tIgorI2VuZGlmCisiY29ubnRyYWNrICIKKyNpZm5kZWYgSEFWRV9JUFNFVAorIm5vLSIKKyNlbmRpZgorImlwc2V0ICIKKyNpZm5kZWYgSEFWRV9BVVRICisibm8tIgorI2VuZGlmCisiYXV0aCAiCisjaWZuZGVmIEhBVkVfRE5TU0VDCisibm8tIgorI2VuZGlmCisiRE5TU0VDICIKKyNpZm5kZWYgSEFWRV9MT09QCisibm8tIgorI2VuZGlmCisibG9vcC1kZXRlY3QiOworCisKKyNlbmRpZgorCisKKwpkaWZmIC0tZ2l0IGEvc3JjL2Nvbm50cmFjay5jIGIvc3JjL2Nvbm50cmFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNTEzM2EKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY29ubnRyYWNrLmMKQEAgLTAsMCArMSw5MCBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxNCBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisKKyNpZmRlZiBIQVZFX0NPTk5UUkFDSworCisjaW5jbHVkZSA8bGlibmV0ZmlsdGVyX2Nvbm50cmFjay9saWJuZXRmaWx0ZXJfY29ubnRyYWNrLmg+CisKK3N0YXRpYyBpbnQgZ290aXQgPSAwOyAvKiB5dWNrICovCisKK3N0YXRpYyBpbnQgY2FsbGJhY2soZW51bSBuZl9jb25udHJhY2tfbXNnX3R5cGUgdHlwZSwgc3RydWN0IG5mX2Nvbm50cmFjayAqY3QsIHZvaWQgKmRhdGEpOworCitpbnQgZ2V0X2luY29taW5nX21hcmsodW5pb24gbXlzb2NrYWRkciAqcGVlcl9hZGRyLCBzdHJ1Y3QgYWxsX2FkZHIgKmxvY2FsX2FkZHIsIGludCBpc3RjcCwgdW5zaWduZWQgaW50ICptYXJrcCkKK3sKKyAgc3RydWN0IG5mX2Nvbm50cmFjayAqY3Q7CisgIHN0cnVjdCBuZmN0X2hhbmRsZSAqaDsKKyAgCisgIGdvdGl0ID0gMDsKKyAgCisgIGlmICgoY3QgPSBuZmN0X25ldygpKSkgCisgICAgeworICAgICAgbmZjdF9zZXRfYXR0cl91OChjdCwgQVRUUl9MNFBST1RPLCBpc3RjcCA/IElQUFJPVE9fVENQIDogSVBQUk9UT19VRFApOworICAgICAgbmZjdF9zZXRfYXR0cl91MTYoY3QsIEFUVFJfUE9SVF9EU1QsIGh0b25zKGRhZW1vbi0+cG9ydCkpOworICAgICAgCisjaWZkZWYgSEFWRV9JUFY2CisgICAgICBpZiAocGVlcl9hZGRyLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpCisJeworCSAgbmZjdF9zZXRfYXR0cl91OChjdCwgQVRUUl9MM1BST1RPLCBBRl9JTkVUNik7CisJICBuZmN0X3NldF9hdHRyKGN0LCBBVFRSX0lQVjZfU1JDLCBwZWVyX2FkZHItPmluNi5zaW42X2FkZHIuczZfYWRkcik7CisJICBuZmN0X3NldF9hdHRyX3UxNihjdCwgQVRUUl9QT1JUX1NSQywgcGVlcl9hZGRyLT5pbjYuc2luNl9wb3J0KTsKKwkgIG5mY3Rfc2V0X2F0dHIoY3QsIEFUVFJfSVBWNl9EU1QsIGxvY2FsX2FkZHItPmFkZHIuYWRkcjYuczZfYWRkcik7CisJfQorICAgICAgZWxzZQorI2VuZGlmCisJeworCSAgbmZjdF9zZXRfYXR0cl91OChjdCwgQVRUUl9MM1BST1RPLCBBRl9JTkVUKTsKKwkgIG5mY3Rfc2V0X2F0dHJfdTMyKGN0LCBBVFRSX0lQVjRfU1JDLCBwZWVyX2FkZHItPmluLnNpbl9hZGRyLnNfYWRkcik7CisJICBuZmN0X3NldF9hdHRyX3UxNihjdCwgQVRUUl9QT1JUX1NSQywgcGVlcl9hZGRyLT5pbi5zaW5fcG9ydCk7CisJICBuZmN0X3NldF9hdHRyX3UzMihjdCwgQVRUUl9JUFY0X0RTVCwgbG9jYWxfYWRkci0+YWRkci5hZGRyNC5zX2FkZHIpOworCX0KKyAgICAgIAorICAgICAgCisgICAgICBpZiAoKGggPSBuZmN0X29wZW4oQ09OTlRSQUNLLCAwKSkpIAorCXsKKwkgIG5mY3RfY2FsbGJhY2tfcmVnaXN0ZXIoaCwgTkZDVF9UX0FMTCwgY2FsbGJhY2ssICh2b2lkICopbWFya3ApOyAgCisJICBpZiAobmZjdF9xdWVyeShoLCBORkNUX1FfR0VULCBjdCkgPT0gLTEpCisJICAgIHsKKwkgICAgICBzdGF0aWMgaW50IHdhcm5lZCA9IDA7CisJICAgICAgaWYgKCF3YXJuZWQpCisJCXsKKwkJICBteV9zeXNsb2coTE9HX0VSUiwgXygiQ29ubnRyYWNrIGNvbm5lY3Rpb24gbWFyayByZXRyaWV2YWwgZmFpbGVkOiAlcyIpLCBzdHJlcnJvcihlcnJubykpOworCQkgIHdhcm5lZCA9IDE7CisJCX0KKwkgICAgfQorCSAgbmZjdF9jbG9zZShoKTsgIAorCX0KKyAgICAgIG5mY3RfZGVzdHJveShjdCk7CisgICAgfQorCisgIHJldHVybiBnb3RpdDsKK30KKworc3RhdGljIGludCBjYWxsYmFjayhlbnVtIG5mX2Nvbm50cmFja19tc2dfdHlwZSB0eXBlLCBzdHJ1Y3QgbmZfY29ubnRyYWNrICpjdCwgdm9pZCAqZGF0YSkKK3sKKyAgdW5zaWduZWQgaW50ICpyZXQgPSAodW5zaWduZWQgaW50ICopZGF0YTsKKyAgKnJldCA9IG5mY3RfZ2V0X2F0dHJfdTMyKGN0LCBBVFRSX01BUkspOworICAodm9pZCl0eXBlOyAvKiBlbGltaW5hdGUgd2FybmluZyAqLworICBnb3RpdCA9IDE7CisKKyAgcmV0dXJuIE5GQ1RfQ0JfQ09OVElOVUU7Cit9CisKKyNlbmRpZgorICAKKworCmRpZmYgLS1naXQgYS9zcmMvZGJ1cy5jIGIvc3JjL2RidXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmE5NGRjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2RidXMuYwpAQCAtMCwwICsxLDY3MCBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxNCBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisKKyNpZmRlZiBIQVZFX0RCVVMKKworI2luY2x1ZGUgPGRidXMvZGJ1cy5oPgorCitjb25zdCBjaGFyKiBpbnRyb3NwZWN0aW9uX3htbF90ZW1wbGF0ZSA9CisiPCFET0NUWVBFIG5vZGUgUFVCTElDIFwiLS8vZnJlZWRlc2t0b3AvL0RURCBELUJVUyBPYmplY3QgSW50cm9zcGVjdGlvbiAxLjAvL0VOXCJcbiIKKyJcImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3N0YW5kYXJkcy9kYnVzLzEuMC9pbnRyb3NwZWN0LmR0ZFwiPlxuIgorIjxub2RlIG5hbWU9XCIiIEROU01BU1FfUEFUSCAiXCI+XG4iCisiICA8aW50ZXJmYWNlIG5hbWU9XCJvcmcuZnJlZWRlc2t0b3AuREJ1cy5JbnRyb3NwZWN0YWJsZVwiPlxuIgorIiAgICA8bWV0aG9kIG5hbWU9XCJJbnRyb3NwZWN0XCI+XG4iCisiICAgICAgPGFyZyBuYW1lPVwiZGF0YVwiIGRpcmVjdGlvbj1cIm91dFwiIHR5cGU9XCJzXCIvPlxuIgorIiAgICA8L21ldGhvZD5cbiIKKyIgIDwvaW50ZXJmYWNlPlxuIgorIiAgPGludGVyZmFjZSBuYW1lPVwiJXNcIj5cbiIKKyIgICAgPG1ldGhvZCBuYW1lPVwiQ2xlYXJDYWNoZVwiPlxuIgorIiAgICA8L21ldGhvZD5cbiIKKyIgICAgPG1ldGhvZCBuYW1lPVwiR2V0VmVyc2lvblwiPlxuIgorIiAgICAgIDxhcmcgbmFtZT1cInZlcnNpb25cIiBkaXJlY3Rpb249XCJvdXRcIiB0eXBlPVwic1wiLz5cbiIKKyIgICAgPC9tZXRob2Q+XG4iCisjaWZkZWYgSEFWRV9MT09QCisiICAgIDxtZXRob2QgbmFtZT1cIkdldExvb3BTZXJ2ZXJzXCI+XG4iCisiICAgICAgPGFyZyBuYW1lPVwic2VydmVyXCIgZGlyZWN0aW9uPVwib3V0XCIgdHlwZT1cImFzXCIvPlxuIgorIiAgICA8L21ldGhvZD5cbiIKKyNlbmRpZgorIiAgICA8bWV0aG9kIG5hbWU9XCJTZXRTZXJ2ZXJzXCI+XG4iCisiICAgICAgPGFyZyBuYW1lPVwic2VydmVyc1wiIGRpcmVjdGlvbj1cImluXCIgdHlwZT1cImF2XCIvPlxuIgorIiAgICA8L21ldGhvZD5cbiIKKyIgICAgPG1ldGhvZCBuYW1lPVwiU2V0RG9tYWluU2VydmVyc1wiPlxuIgorIiAgICAgIDxhcmcgbmFtZT1cInNlcnZlcnNcIiBkaXJlY3Rpb249XCJpblwiIHR5cGU9XCJhc1wiLz5cbiIKKyIgICAgPC9tZXRob2Q+XG4iCisiICAgIDxtZXRob2QgbmFtZT1cIlNldFNlcnZlcnNFeFwiPlxuIgorIiAgICAgIDxhcmcgbmFtZT1cInNlcnZlcnNcIiBkaXJlY3Rpb249XCJpblwiIHR5cGU9XCJhYXNcIi8+XG4iCisiICAgIDwvbWV0aG9kPlxuIgorIiAgICA8bWV0aG9kIG5hbWU9XCJTZXRGaWx0ZXJXaW4yS09wdGlvblwiPlxuIgorIiAgICAgIDxhcmcgbmFtZT1cImZpbHRlcndpbjJrXCIgZGlyZWN0aW9uPVwiaW5cIiB0eXBlPVwiYlwiLz5cbiIKKyIgICAgPC9tZXRob2Q+XG4iCisiICAgIDxtZXRob2QgbmFtZT1cIlNldEJvZ3VzUHJpdk9wdGlvblwiPlxuIgorIiAgICAgIDxhcmcgbmFtZT1cImJvZ3VzcHJpdlwiIGRpcmVjdGlvbj1cImluXCIgdHlwZT1cImJcIi8+XG4iCisiICAgIDwvbWV0aG9kPlxuIgorIiAgICA8c2lnbmFsIG5hbWU9XCJEaGNwTGVhc2VBZGRlZFwiPlxuIgorIiAgICAgIDxhcmcgbmFtZT1cImlwYWRkclwiIHR5cGU9XCJzXCIvPlxuIgorIiAgICAgIDxhcmcgbmFtZT1cImh3YWRkclwiIHR5cGU9XCJzXCIvPlxuIgorIiAgICAgIDxhcmcgbmFtZT1cImhvc3RuYW1lXCIgdHlwZT1cInNcIi8+XG4iCisiICAgIDwvc2lnbmFsPlxuIgorIiAgICA8c2lnbmFsIG5hbWU9XCJEaGNwTGVhc2VEZWxldGVkXCI+XG4iCisiICAgICAgPGFyZyBuYW1lPVwiaXBhZGRyXCIgdHlwZT1cInNcIi8+XG4iCisiICAgICAgPGFyZyBuYW1lPVwiaHdhZGRyXCIgdHlwZT1cInNcIi8+XG4iCisiICAgICAgPGFyZyBuYW1lPVwiaG9zdG5hbWVcIiB0eXBlPVwic1wiLz5cbiIKKyIgICAgPC9zaWduYWw+XG4iCisiICAgIDxzaWduYWwgbmFtZT1cIkRoY3BMZWFzZVVwZGF0ZWRcIj5cbiIKKyIgICAgICA8YXJnIG5hbWU9XCJpcGFkZHJcIiB0eXBlPVwic1wiLz5cbiIKKyIgICAgICA8YXJnIG5hbWU9XCJod2FkZHJcIiB0eXBlPVwic1wiLz5cbiIKKyIgICAgICA8YXJnIG5hbWU9XCJob3N0bmFtZVwiIHR5cGU9XCJzXCIvPlxuIgorIiAgICA8L3NpZ25hbD5cbiIKKyIgIDwvaW50ZXJmYWNlPlxuIgorIjwvbm9kZT5cbiI7CisKK3N0YXRpYyBjaGFyICppbnRyb3NwZWN0aW9uX3htbCA9IE5VTEw7CisKK3N0cnVjdCB3YXRjaCB7CisgIERCdXNXYXRjaCAqd2F0Y2g7ICAgICAgCisgIHN0cnVjdCB3YXRjaCAqbmV4dDsKK307CisKKworc3RhdGljIGRidXNfYm9vbF90IGFkZF93YXRjaChEQnVzV2F0Y2ggKndhdGNoLCB2b2lkICpkYXRhKQoreworICBzdHJ1Y3Qgd2F0Y2ggKnc7CisKKyAgZm9yICh3ID0gZGFlbW9uLT53YXRjaGVzOyB3OyB3ID0gdy0+bmV4dCkKKyAgICBpZiAody0+d2F0Y2ggPT0gd2F0Y2gpCisgICAgICByZXR1cm4gVFJVRTsKKworICBpZiAoISh3ID0gd2hpbmVfbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd2F0Y2gpKSkpCisgICAgcmV0dXJuIEZBTFNFOworCisgIHctPndhdGNoID0gd2F0Y2g7CisgIHctPm5leHQgPSBkYWVtb24tPndhdGNoZXM7CisgIGRhZW1vbi0+d2F0Y2hlcyA9IHc7CisKKyAgdyA9IGRhdGE7IC8qIG5vIHdhcm5pbmcgKi8KKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV93YXRjaChEQnVzV2F0Y2ggKndhdGNoLCB2b2lkICpkYXRhKQoreworICBzdHJ1Y3Qgd2F0Y2ggKip1cCwgKncsICp0bXA7ICAKKyAgCisgIGZvciAodXAgPSAmKGRhZW1vbi0+d2F0Y2hlcyksIHcgPSBkYWVtb24tPndhdGNoZXM7IHc7IHcgPSB0bXApCisgICAgeworICAgICAgdG1wID0gdy0+bmV4dDsKKyAgICAgIGlmICh3LT53YXRjaCA9PSB3YXRjaCkKKwl7CisJICAqdXAgPSB0bXA7CisJICBmcmVlKHcpOworCX0KKyAgICAgIGVsc2UKKwl1cCA9ICYody0+bmV4dCk7CisgICAgfQorCisgIHcgPSBkYXRhOyAvKiBubyB3YXJuaW5nICovCit9CisKK3N0YXRpYyB2b2lkIGRidXNfcmVhZF9zZXJ2ZXJzKERCdXNNZXNzYWdlICptZXNzYWdlKQoreworICBEQnVzTWVzc2FnZUl0ZXIgaXRlcjsKKyAgdW5pb24gIG15c29ja2FkZHIgYWRkciwgc291cmNlX2FkZHI7CisgIGNoYXIgKmRvbWFpbjsKKyAgCisgIGRidXNfbWVzc2FnZV9pdGVyX2luaXQobWVzc2FnZSwgJml0ZXIpOworCisgIG1hcmtfc2VydmVycyhTRVJWX0ZST01fREJVUyk7CisgIAorICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBpbnQgc2tpcCA9IDA7CisKKyAgICAgIGlmIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJml0ZXIpID09IERCVVNfVFlQRV9VSU5UMzIpCisJeworCSAgdTMyIGE7CisJICAKKwkgIGRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYygmaXRlciwgJmEpOworCSAgZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCAoJml0ZXIpOworCSAgCisjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKwkgIHNvdXJjZV9hZGRyLmluLnNpbl9sZW4gPSBhZGRyLmluLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCSAgYWRkci5pbi5zaW5fYWRkci5zX2FkZHIgPSBudG9obChhKTsKKwkgIHNvdXJjZV9hZGRyLmluLnNpbl9mYW1pbHkgPSBhZGRyLmluLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCSAgYWRkci5pbi5zaW5fcG9ydCA9IGh0b25zKE5BTUVTRVJWRVJfUE9SVCk7CisJICBzb3VyY2VfYWRkci5pbi5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOworCSAgc291cmNlX2FkZHIuaW4uc2luX3BvcnQgPSBodG9ucyhkYWVtb24tPnF1ZXJ5X3BvcnQpOworCX0KKyAgICAgIGVsc2UgaWYgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmaXRlcikgPT0gREJVU19UWVBFX0JZVEUpCisJeworCSAgdW5zaWduZWQgY2hhciBwW3NpemVvZihzdHJ1Y3QgaW42X2FkZHIpXTsKKwkgIHVuc2lnbmVkIGludCBpOworCisJICBza2lwID0gMTsKKworCSAgZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7IGkrKykKKwkgICAgeworCSAgICAgIGRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYygmaXRlciwgJnBbaV0pOworCSAgICAgIGRidXNfbWVzc2FnZV9pdGVyX25leHQgKCZpdGVyKTsKKwkgICAgICBpZiAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZpdGVyKSAhPSBEQlVTX1RZUEVfQllURSkKKwkJeworCQkgIGkrKzsKKwkJICBicmVhazsKKwkJfQorCSAgICB9CisKKyNpZm5kZWYgSEFWRV9JUFY2CisJICBteV9zeXNsb2coTE9HX1dBUk5JTkcsIF8oImF0dGVtcHQgdG8gc2V0IGFuIElQdjYgc2VydmVyIGFkZHJlc3MgdmlhIERCdXMgLSBubyBJUHY2IHN1cHBvcnQiKSk7CisjZWxzZQorCSAgaWYgKGkgPT0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpCisJICAgIHsKKwkgICAgICBtZW1jcHkoJmFkZHIuaW42LnNpbjZfYWRkciwgcCwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgICAgICAgICAgICAgIHNvdXJjZV9hZGRyLmluNi5zaW42X2xlbiA9IGFkZHIuaW42LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisgICAgICAgICAgICAgIHNvdXJjZV9hZGRyLmluNi5zaW42X2ZhbWlseSA9IGFkZHIuaW42LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgICAgICAgICAgIGFkZHIuaW42LnNpbjZfcG9ydCA9IGh0b25zKE5BTUVTRVJWRVJfUE9SVCk7CisgICAgICAgICAgICAgIHNvdXJjZV9hZGRyLmluNi5zaW42X2Zsb3dpbmZvID0gYWRkci5pbjYuc2luNl9mbG93aW5mbyA9IDA7CisJICAgICAgc291cmNlX2FkZHIuaW42LnNpbjZfc2NvcGVfaWQgPSBhZGRyLmluNi5zaW42X3Njb3BlX2lkID0gMDsKKyAgICAgICAgICAgICAgc291cmNlX2FkZHIuaW42LnNpbjZfYWRkciA9IGluNmFkZHJfYW55OworICAgICAgICAgICAgICBzb3VyY2VfYWRkci5pbjYuc2luNl9wb3J0ID0gaHRvbnMoZGFlbW9uLT5xdWVyeV9wb3J0KTsKKwkgICAgICBza2lwID0gMDsKKwkgICAgfQorI2VuZGlmCisJfQorICAgICAgZWxzZQorCS8qIEF0IHRoZSBlbmQgKi8KKwlicmVhazsKKyAgICAgIAorICAgICAgLyogcHJvY2VzcyBlYWNoIGRvbWFpbiAqLworICAgICAgZG8geworCWlmIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJml0ZXIpID09IERCVVNfVFlQRV9TVFJJTkcpCisJICB7CisJICAgIGRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYygmaXRlciwgJmRvbWFpbik7CisJICAgIGRidXNfbWVzc2FnZV9pdGVyX25leHQgKCZpdGVyKTsKKwkgIH0KKwllbHNlCisJICBkb21haW4gPSBOVUxMOworCQorCWlmICghc2tpcCkKKwkgIGFkZF91cGRhdGVfc2VydmVyKFNFUlZfRlJPTV9EQlVTLCAmYWRkciwgJnNvdXJjZV9hZGRyLCBOVUxMLCBkb21haW4pOworICAgICAKKyAgICAgIH0gd2hpbGUgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmaXRlcikgPT0gREJVU19UWVBFX1NUUklORyk7IAorICAgIH0KKyAgIAorICAvKiB1bmxpbmsgYW5kIGZyZWUgYW55dGhpbmcgc3RpbGwgbWFya2VkLiAqLworICBjbGVhbnVwX3NlcnZlcnMoKTsKK30KKworI2lmZGVmIEhBVkVfTE9PUAorc3RhdGljIERCdXNNZXNzYWdlICpkYnVzX3JlcGx5X3NlcnZlcl9sb29wKERCdXNNZXNzYWdlICptZXNzYWdlKQoreworICBEQnVzTWVzc2FnZUl0ZXIgYXJncywgYXJnc19pdGVyOworICBzdHJ1Y3Qgc2VydmVyICpzZXJ2OworICBEQnVzTWVzc2FnZSAqcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1cm4obWVzc2FnZSk7CisgICAKKyAgZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdF9hcHBlbmQgKHJlcGx5LCAmYXJncyk7CisgIGRidXNfbWVzc2FnZV9pdGVyX29wZW5fY29udGFpbmVyICgmYXJncywgREJVU19UWVBFX0FSUkFZLERCVVNfVFlQRV9TVFJJTkdfQVNfU1RSSU5HLCAmYXJnc19pdGVyKTsKKworICBmb3IgKHNlcnYgPSBkYWVtb24tPnNlcnZlcnM7IHNlcnY7IHNlcnYgPSBzZXJ2LT5uZXh0KQorICAgIGlmIChzZXJ2LT5mbGFncyAmIFNFUlZfTE9PUCkKKyAgICAgIHsKKwlwcmV0dHlwcmludF9hZGRyKCZzZXJ2LT5hZGRyLCBkYWVtb24tPmFkZHJidWZmKTsKKwlkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMgKCZhcmdzX2l0ZXIsIERCVVNfVFlQRV9TVFJJTkcsICZkYWVtb24tPmFkZHJidWZmKTsKKyAgICAgIH0KKyAgCisgIGRidXNfbWVzc2FnZV9pdGVyX2Nsb3NlX2NvbnRhaW5lciAoJmFyZ3MsICZhcmdzX2l0ZXIpOworCisgIHJldHVybiByZXBseTsKK30KKyNlbmRpZgorCitzdGF0aWMgREJ1c01lc3NhZ2UqIGRidXNfcmVhZF9zZXJ2ZXJzX2V4KERCdXNNZXNzYWdlICptZXNzYWdlLCBpbnQgc3RyaW5ncykKK3sKKyAgREJ1c01lc3NhZ2VJdGVyIGl0ZXIsIGFycmF5X2l0ZXIsIHN0cmluZ19pdGVyOworICBEQnVzTWVzc2FnZSAqZXJyb3IgPSBOVUxMOworICBjb25zdCBjaGFyICphZGRyX2VycjsKKyAgY2hhciAqZHVwID0gTlVMTDsKKyAgCisgIGlmICghZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdChtZXNzYWdlLCAmaXRlcikpCisgICAgeworICAgICAgcmV0dXJuIGRidXNfbWVzc2FnZV9uZXdfZXJyb3IobWVzc2FnZSwgREJVU19FUlJPUl9JTlZBTElEX0FSR1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGluaXRpYWxpemUgZGJ1cyBtZXNzYWdlIGl0ZXIiKTsKKyAgICB9CisKKyAgLyogY2hlY2sgdGhhdCB0aGUgbWVzc2FnZSBjb250YWlucyBhbiBhcnJheSBvZiBhcnJheXMgKi8KKyAgaWYgKChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJml0ZXIpICE9IERCVVNfVFlQRV9BUlJBWSkgfHwKKyAgICAgIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfZWxlbWVudF90eXBlKCZpdGVyKSAhPSAoc3RyaW5ncyA/IERCVVNfVFlQRV9TVFJJTkcgOiBEQlVTX1RZUEVfQVJSQVkpKSkKKyAgICB7CisgICAgICByZXR1cm4gZGJ1c19tZXNzYWdlX25ld19lcnJvcihtZXNzYWdlLCBEQlVTX0VSUk9SX0lOVkFMSURfQVJHUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3MgPyAiRXhwZWN0ZWQgYXJyYXkgb2Ygc3RyaW5nIiA6ICJFeHBlY3RlZCBhcnJheSBvZiBzdHJpbmcgYXJyYXlzIik7CisgICAgIH0KKyAKKyAgbWFya19zZXJ2ZXJzKFNFUlZfRlJPTV9EQlVTKTsKKworICAvKiBhcnJheV9pdGVyIHBvaW50cyB0byBlYWNoICJhcyIgZWxlbWVudCBpbiB0aGUgb3V0ZXIgYXJyYXkgKi8KKyAgZGJ1c19tZXNzYWdlX2l0ZXJfcmVjdXJzZSgmaXRlciwgJmFycmF5X2l0ZXIpOworICB3aGlsZSAoZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZhcnJheV9pdGVyKSAhPSBEQlVTX1RZUEVfSU5WQUxJRCkKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpzdHIgPSBOVUxMOworICAgICAgdW5pb24gIG15c29ja2FkZHIgYWRkciwgc291cmNlX2FkZHI7CisgICAgICBpbnQgZmxhZ3MgPSAwOworICAgICAgY2hhciBpbnRlcmZhY2VbSUZfTkFNRVNJWkVdOworICAgICAgY2hhciAqc3RyX2FkZHIsICpzdHJfZG9tYWluID0gTlVMTDsKKworICAgICAgaWYgKHN0cmluZ3MpCisJeworCSAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZhcnJheV9pdGVyLCAmc3RyKTsKKwkgIGlmICghc3RyIHx8ICFzdHJsZW4gKHN0cikpCisJICAgIHsKKwkgICAgICBlcnJvciA9IGRidXNfbWVzc2FnZV9uZXdfZXJyb3IobWVzc2FnZSwgREJVU19FUlJPUl9JTlZBTElEX0FSR1MsCisJCQkJCSAgICAgIkVtcHR5IHN0cmluZyIpOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICAKKwkgIC8qIGR1cCB0aGUgc3RyaW5nIGJlY2F1c2UgaXQgZ2V0cyBtb2RpZmllZCBkdXJpbmcgcGFyc2luZyAqLworCSAgaWYgKGR1cCkKKwkgICAgZnJlZShkdXApOworCSAgaWYgKCEoZHVwID0gc3RyX2RvbWFpbiA9IHdoaW5lX21hbGxvYyhzdHJsZW4oc3RyKSsxKSkpCisJICAgIGJyZWFrOworCSAgCisJICBzdHJjcHkoc3RyX2RvbWFpbiwgc3RyKTsKKworCSAgLyogcG9pbnQgdG8gYWRkcmVzcyBwYXJ0IG9mIG9sZCBzdHJpbmcgZm9yIGVycm9yIG1lc3NhZ2UgKi8KKwkgIGlmICgoc3RyX2FkZHIgPSBzdHJyY2hyKHN0ciwgJy8nKSkpCisJICAgIHN0ciA9IHN0cl9hZGRyKzE7CisJICAKKwkgIGlmICgoc3RyX2FkZHIgPSBzdHJyY2hyKHN0cl9kb21haW4sICcvJykpKQorCSAgICB7CisJICAgICAgaWYgKCpzdHJfZG9tYWluICE9ICcvJyB8fCBzdHJfYWRkciA9PSBzdHJfZG9tYWluKQorCQl7CisJCSAgZXJyb3IgPSBkYnVzX21lc3NhZ2VfbmV3X2Vycm9yX3ByaW50ZihtZXNzYWdlLAorCQkJCQkJCURCVVNfRVJST1JfSU5WQUxJRF9BUkdTLAorCQkJCQkJCSJObyBkb21haW4gdGVybWluYXRvciAnJXMnIiwKKwkJCQkJCQlzdHIpOworCQkgIGJyZWFrOworCQl9CisJICAgICAgKnN0cl9hZGRyKysgPSAwOworCSAgICAgIHN0cl9kb21haW4rKzsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgc3RyX2FkZHIgPSBzdHJfZG9tYWluOworCSAgICAgIHN0cl9kb21haW4gPSBOVUxMOworCSAgICB9CisKKwkgIAorCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBjaGVjayB0aGUgdHlwZXMgb2YgdGhlIHN0cnVjdCBhbmQgaXRzIGVsZW1lbnRzICovCisJICBpZiAoKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmYXJyYXlfaXRlcikgIT0gREJVU19UWVBFX0FSUkFZKSB8fAorCSAgICAgIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfZWxlbWVudF90eXBlKCZhcnJheV9pdGVyKSAhPSBEQlVTX1RZUEVfU1RSSU5HKSkKKwkgICAgeworCSAgICAgIGVycm9yID0gZGJ1c19tZXNzYWdlX25ld19lcnJvcihtZXNzYWdlLCBEQlVTX0VSUk9SX0lOVkFMSURfQVJHUywKKwkJCQkJICAgICAiRXhwZWN0ZWQgaW5uZXIgYXJyYXkgb2Ygc3RyaW5ncyIpOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICAKKwkgIC8qIHN0cmluZ19pdGVyIHBvaW50cyB0byBlYWNoICJzIiBlbGVtZW50IGluIHRoZSBpbm5lciBhcnJheSAqLworCSAgZGJ1c19tZXNzYWdlX2l0ZXJfcmVjdXJzZSgmYXJyYXlfaXRlciwgJnN0cmluZ19pdGVyKTsKKwkgIGlmIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJnN0cmluZ19pdGVyKSAhPSBEQlVTX1RZUEVfU1RSSU5HKQorCSAgICB7CisJICAgICAgLyogbm8gSVAgYWRkcmVzcyBnaXZlbiAqLworCSAgICAgIGVycm9yID0gZGJ1c19tZXNzYWdlX25ld19lcnJvcihtZXNzYWdlLCBEQlVTX0VSUk9SX0lOVkFMSURfQVJHUywKKwkJCQkJICAgICAiRXhwZWN0ZWQgSVAgYWRkcmVzcyIpOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICAKKwkgIGRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYygmc3RyaW5nX2l0ZXIsICZzdHIpOworCSAgaWYgKCFzdHIgfHwgIXN0cmxlbiAoc3RyKSkKKwkgICAgeworCSAgICAgIGVycm9yID0gZGJ1c19tZXNzYWdlX25ld19lcnJvcihtZXNzYWdlLCBEQlVTX0VSUk9SX0lOVkFMSURfQVJHUywKKwkJCQkJICAgICAiRW1wdHkgSVAgYWRkcmVzcyIpOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICAKKwkgIC8qIGR1cCB0aGUgc3RyaW5nIGJlY2F1c2UgaXQgZ2V0cyBtb2RpZmllZCBkdXJpbmcgcGFyc2luZyAqLworCSAgaWYgKGR1cCkKKwkgICAgZnJlZShkdXApOworCSAgaWYgKCEoZHVwID0gc3RyX2FkZHIgPSB3aGluZV9tYWxsb2Moc3RybGVuKHN0cikrMSkpKQorCSAgICBicmVhazsKKwkgIAorCSAgc3RyY3B5KHN0cl9hZGRyLCBzdHIpOworCX0KKworICAgICAgbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworICAgICAgbWVtc2V0KCZzb3VyY2VfYWRkciwgMCwgc2l6ZW9mKHNvdXJjZV9hZGRyKSk7CisgICAgICBtZW1zZXQoJmludGVyZmFjZSwgMCwgc2l6ZW9mKGludGVyZmFjZSkpOworCisgICAgICAvKiBwYXJzZSB0aGUgSVAgYWRkcmVzcyAqLworICAgICAgaWYgKChhZGRyX2VyciA9IHBhcnNlX3NlcnZlcihzdHJfYWRkciwgJmFkZHIsICZzb3VyY2VfYWRkciwgKGNoYXIgKikgJmludGVyZmFjZSwgJmZsYWdzKSkpCisJeworICAgICAgICAgIGVycm9yID0gZGJ1c19tZXNzYWdlX25ld19lcnJvcl9wcmludGYobWVzc2FnZSwgREJVU19FUlJPUl9JTlZBTElEX0FSR1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBJUCBhZGRyZXNzICclcyc6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgYWRkcl9lcnIpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAKKyAgICAgIC8qIDAuMC4wLjAgZm9yIHNlcnZlciBhZGRyZXNzID09IE5VTEwsIGZvciBEYnVzICovCisgICAgICBpZiAoYWRkci5pbi5zaW5fZmFtaWx5ID09IEFGX0lORVQgJiYKKyAgICAgICAgICBhZGRyLmluLnNpbl9hZGRyLnNfYWRkciA9PSAwKQorICAgICAgICBmbGFncyB8PSBTRVJWX05PX0FERFI7CisgICAgICAKKyAgICAgIGlmIChzdHJpbmdzKQorCXsKKwkgIGNoYXIgKnA7CisJICAKKwkgIGRvIHsKKwkgICAgaWYgKHN0cl9kb21haW4pCisJICAgICAgeworCQlpZiAoKHAgPSBzdHJjaHIoc3RyX2RvbWFpbiwgJy8nKSkpCisJCSAgKnArKyA9IDA7CisJICAgICAgfQorCSAgICBlbHNlIAorCSAgICAgIHAgPSBOVUxMOworCSAgICAKKwkgICAgYWRkX3VwZGF0ZV9zZXJ2ZXIoZmxhZ3MgfCBTRVJWX0ZST01fREJVUywgJmFkZHIsICZzb3VyY2VfYWRkciwgaW50ZXJmYWNlLCBzdHJfZG9tYWluKTsKKwkgIH0gd2hpbGUgKChzdHJfZG9tYWluID0gcCkpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBqdW1wIHBhc3QgdGhlIGFkZHJlc3MgdG8gdGhlIGRvbWFpbiBsaXN0IChpZiBhbnkpICovCisJICBkYnVzX21lc3NhZ2VfaXRlcl9uZXh0ICgmc3RyaW5nX2l0ZXIpOworCSAgCisJICAvKiBwYXJzZSBkb21haW5zIGFuZCBhZGQgZWFjaCBzZXJ2ZXIvZG9tYWluIHBhaXIgdG8gdGhlIGxpc3QgKi8KKwkgIGRvIHsKKwkgICAgc3RyID0gTlVMTDsKKwkgICAgaWYgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmc3RyaW5nX2l0ZXIpID09IERCVVNfVFlQRV9TVFJJTkcpCisJICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZzdHJpbmdfaXRlciwgJnN0cik7CisJICAgIGRidXNfbWVzc2FnZV9pdGVyX25leHQgKCZzdHJpbmdfaXRlcik7CisJICAgIAorCSAgICBhZGRfdXBkYXRlX3NlcnZlcihmbGFncyB8IFNFUlZfRlJPTV9EQlVTLCAmYWRkciwgJnNvdXJjZV9hZGRyLCBpbnRlcmZhY2UsIHN0cik7CisJICB9IHdoaWxlIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJnN0cmluZ19pdGVyKSA9PSBEQlVTX1RZUEVfU1RSSU5HKTsKKwl9CisJIAorICAgICAgLyoganVtcCB0byBuZXh0IGVsZW1lbnQgaW4gb3V0ZXIgYXJyYXkgKi8KKyAgICAgIGRidXNfbWVzc2FnZV9pdGVyX25leHQoJmFycmF5X2l0ZXIpOworICAgIH0KKworICBjbGVhbnVwX3NlcnZlcnMoKTsKKworICBpZiAoZHVwKQorICAgIGZyZWUoZHVwKTsKKworICByZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBEQnVzTWVzc2FnZSAqZGJ1c19zZXRfYm9vbChEQnVzTWVzc2FnZSAqbWVzc2FnZSwgaW50IGZsYWcsIGNoYXIgKm5hbWUpCit7CisgIERCdXNNZXNzYWdlSXRlciBpdGVyOworICBkYnVzX2Jvb2xfdCBlbmFibGVkOworCisgIGlmICghZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdChtZXNzYWdlLCAmaXRlcikgfHwgZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2FyZ190eXBlKCZpdGVyKSAhPSBEQlVTX1RZUEVfQk9PTEVBTikKKyAgICByZXR1cm4gZGJ1c19tZXNzYWdlX25ld19lcnJvcihtZXNzYWdlLCBEQlVTX0VSUk9SX0lOVkFMSURfQVJHUywgIkV4cGVjdGVkIGJvb2xlYW4gYXJndW1lbnQiKTsKKyAgCisgIGRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYygmaXRlciwgJmVuYWJsZWQpOworCisgIGlmIChlbmFibGVkKQorICAgIHsgCisgICAgICBteV9zeXNsb2coTE9HX0lORk8sICJFbmFibGluZyAtLSVzIG9wdGlvbiBmcm9tIEQtQnVzIiwgbmFtZSk7CisgICAgICBzZXRfb3B0aW9uX2Jvb2woZmxhZyk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbXlfc3lzbG9nKExPR19JTkZPLCAiRGlzYWJsaW5nIC0tJXMgb3B0aW9uIGZyb20gRC1CdXMiLCBuYW1lKTsKKyAgICAgIHJlc2V0X29wdGlvbl9ib29sKGZsYWcpOworICAgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworREJ1c0hhbmRsZXJSZXN1bHQgbWVzc2FnZV9oYW5kbGVyKERCdXNDb25uZWN0aW9uICpjb25uZWN0aW9uLCAKKwkJCQkgIERCdXNNZXNzYWdlICptZXNzYWdlLCAKKwkJCQkgIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgY2hhciAqbWV0aG9kID0gKGNoYXIgKilkYnVzX21lc3NhZ2VfZ2V0X21lbWJlcihtZXNzYWdlKTsKKyAgREJ1c01lc3NhZ2UgKnJlcGx5ID0gTlVMTDsKKyAgaW50IGNsZWFyX2NhY2hlID0gMCwgbmV3X3NlcnZlcnMgPSAwOworICAgIAorICBpZiAoZGJ1c19tZXNzYWdlX2lzX21ldGhvZF9jYWxsKG1lc3NhZ2UsIERCVVNfSU5URVJGQUNFX0lOVFJPU1BFQ1RBQkxFLCAiSW50cm9zcGVjdCIpKQorICAgIHsKKyAgICAgIC8qIHN0cmluZyBsZW5ndGg6ICIlcyIgcHJvdmlkZXMgc3BhY2UgZm9yIHRlcm1pbmF0aW9uIHplcm8gKi8KKyAgICAgIGlmICghaW50cm9zcGVjdGlvbl94bWwgJiYgCisJICAoaW50cm9zcGVjdGlvbl94bWwgPSB3aGluZV9tYWxsb2Moc3RybGVuKGludHJvc3BlY3Rpb25feG1sX3RlbXBsYXRlKSArIHN0cmxlbihkYWVtb24tPmRidXNfbmFtZSkpKSkKKwlzcHJpbnRmKGludHJvc3BlY3Rpb25feG1sLCBpbnRyb3NwZWN0aW9uX3htbF90ZW1wbGF0ZSwgZGFlbW9uLT5kYnVzX25hbWUpOworICAgIAorICAgICAgaWYgKGludHJvc3BlY3Rpb25feG1sKQorCXsKKwkgIHJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuKG1lc3NhZ2UpOworCSAgZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzKHJlcGx5LCBEQlVTX1RZUEVfU1RSSU5HLCAmaW50cm9zcGVjdGlvbl94bWwsIERCVVNfVFlQRV9JTlZBTElEKTsKKwl9CisgICAgfQorICBlbHNlIGlmIChzdHJjbXAobWV0aG9kLCAiR2V0VmVyc2lvbiIpID09IDApCisgICAgeworICAgICAgY2hhciAqdiA9IFZFUlNJT047CisgICAgICByZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX3JldHVybihtZXNzYWdlKTsKKyAgICAgIAorICAgICAgZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzKHJlcGx5LCBEQlVTX1RZUEVfU1RSSU5HLCAmdiwgREJVU19UWVBFX0lOVkFMSUQpOworICAgIH0KKyNpZmRlZiBIQVZFX0xPT1AKKyAgZWxzZSBpZiAoc3RyY21wKG1ldGhvZCwgIkdldExvb3BTZXJ2ZXJzIikgPT0gMCkKKyAgICB7CisgICAgICByZXBseSA9IGRidXNfcmVwbHlfc2VydmVyX2xvb3AobWVzc2FnZSk7CisgICAgfQorI2VuZGlmCisgIGVsc2UgaWYgKHN0cmNtcChtZXRob2QsICJTZXRTZXJ2ZXJzIikgPT0gMCkKKyAgICB7CisgICAgICBkYnVzX3JlYWRfc2VydmVycyhtZXNzYWdlKTsKKyAgICAgIG5ld19zZXJ2ZXJzID0gMTsKKyAgICB9CisgIGVsc2UgaWYgKHN0cmNtcChtZXRob2QsICJTZXRTZXJ2ZXJzRXgiKSA9PSAwKQorICAgIHsKKyAgICAgIHJlcGx5ID0gZGJ1c19yZWFkX3NlcnZlcnNfZXgobWVzc2FnZSwgMCk7CisgICAgICBuZXdfc2VydmVycyA9IDE7CisgICAgfQorICBlbHNlIGlmIChzdHJjbXAobWV0aG9kLCAiU2V0RG9tYWluU2VydmVycyIpID09IDApCisgICAgeworICAgICAgcmVwbHkgPSBkYnVzX3JlYWRfc2VydmVyc19leChtZXNzYWdlLCAxKTsKKyAgICAgIG5ld19zZXJ2ZXJzID0gMTsKKyAgICB9CisgIGVsc2UgaWYgKHN0cmNtcChtZXRob2QsICJTZXRGaWx0ZXJXaW4yS09wdGlvbiIpID09IDApCisgICAgeworICAgICAgcmVwbHkgPSBkYnVzX3NldF9ib29sKG1lc3NhZ2UsIE9QVF9GSUxURVIsICJmaWx0ZXJ3aW4yayIpOworICAgIH0KKyAgZWxzZSBpZiAoc3RyY21wKG1ldGhvZCwgIlNldEJvZ3VzUHJpdk9wdGlvbiIpID09IDApCisgICAgeworICAgICAgcmVwbHkgPSBkYnVzX3NldF9ib29sKG1lc3NhZ2UsIE9QVF9CT0dVU1BSSVYsICJib2d1cy1wcml2Iik7CisgICAgfQorICBlbHNlIGlmIChzdHJjbXAobWV0aG9kLCAiQ2xlYXJDYWNoZSIpID09IDApCisgICAgY2xlYXJfY2FjaGUgPSAxOworICBlbHNlCisgICAgcmV0dXJuIChEQlVTX0hBTkRMRVJfUkVTVUxUX05PVF9ZRVRfSEFORExFRCk7CisgICAKKyAgaWYgKG5ld19zZXJ2ZXJzKQorICAgIHsKKyAgICAgIG15X3N5c2xvZyhMT0dfSU5GTywgXygic2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzIGZyb20gREJ1cyIpKTsKKyAgICAgIGNoZWNrX3NlcnZlcnMoKTsKKyAgICAgIGlmIChvcHRpb25fYm9vbChPUFRfUkVMT0FEKSkKKwljbGVhcl9jYWNoZSA9IDE7CisgICAgfQorCisgIGlmIChjbGVhcl9jYWNoZSkKKyAgICBjbGVhcl9jYWNoZV9hbmRfcmVsb2FkKGRuc21hc3FfdGltZSgpKTsKKyAgCisgIG1ldGhvZCA9IHVzZXJfZGF0YTsgLyogbm8gd2FybmluZyAqLworCisgIC8qIElmIG5vIHJlcGx5IG9yIG5vIGVycm9yLCByZXR1cm4gbm90aGluZyAqLworICBpZiAoIXJlcGx5KQorICAgIHJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuKG1lc3NhZ2UpOworCisgIGlmIChyZXBseSkKKyAgICB7CisgICAgICBkYnVzX2Nvbm5lY3Rpb25fc2VuZCAoY29ubmVjdGlvbiwgcmVwbHksIE5VTEwpOworICAgICAgZGJ1c19tZXNzYWdlX3VucmVmIChyZXBseSk7CisgICAgfQorCisgIHJldHVybiAoREJVU19IQU5ETEVSX1JFU1VMVF9IQU5ETEVEKTsKK30KKyAKKworLyogcmV0dXJucyBOVUxMIG9yIGVycm9yIG1lc3NhZ2UsIG1heSBmYWlsIHNpbGVudGx5IGlmIGRidXMgZGFlbW9uIG5vdCB5ZXQgdXAuICovCitjaGFyICpkYnVzX2luaXQodm9pZCkKK3sKKyAgREJ1c0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24gPSBOVUxMOworICBEQnVzT2JqZWN0UGF0aFZUYWJsZSBkbnNtYXNxX3Z0YWJsZSA9IHtOVUxMLCAmbWVzc2FnZV9oYW5kbGVyLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH07CisgIERCdXNFcnJvciBkYnVzX2Vycm9yOworICBEQnVzTWVzc2FnZSAqbWVzc2FnZTsKKworICBkYnVzX2Vycm9yX2luaXQgKCZkYnVzX2Vycm9yKTsKKyAgaWYgKCEoY29ubmVjdGlvbiA9IGRidXNfYnVzX2dldCAoREJVU19CVVNfU1lTVEVNLCAmZGJ1c19lcnJvcikpKQorICAgIHJldHVybiBOVUxMOworICAgIAorICBkYnVzX2Nvbm5lY3Rpb25fc2V0X2V4aXRfb25fZGlzY29ubmVjdChjb25uZWN0aW9uLCBGQUxTRSk7CisgIGRidXNfY29ubmVjdGlvbl9zZXRfd2F0Y2hfZnVuY3Rpb25zKGNvbm5lY3Rpb24sIGFkZF93YXRjaCwgcmVtb3ZlX3dhdGNoLCAKKwkJCQkgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgZGJ1c19lcnJvcl9pbml0ICgmZGJ1c19lcnJvcik7CisgIGRidXNfYnVzX3JlcXVlc3RfbmFtZSAoY29ubmVjdGlvbiwgZGFlbW9uLT5kYnVzX25hbWUsIDAsICZkYnVzX2Vycm9yKTsKKyAgaWYgKGRidXNfZXJyb3JfaXNfc2V0ICgmZGJ1c19lcnJvcikpCisgICAgcmV0dXJuIChjaGFyICopZGJ1c19lcnJvci5tZXNzYWdlOworICAKKyAgaWYgKCFkYnVzX2Nvbm5lY3Rpb25fcmVnaXN0ZXJfb2JqZWN0X3BhdGgoY29ubmVjdGlvbiwgIEROU01BU1FfUEFUSCwgCisJCQkJCSAgICAmZG5zbWFzcV92dGFibGUsIE5VTEwpKQorICAgIHJldHVybiBfKCJjb3VsZCBub3QgcmVnaXN0ZXIgYSBEQnVzIG1lc3NhZ2UgaGFuZGxlciIpOworICAKKyAgZGFlbW9uLT5kYnVzID0gY29ubmVjdGlvbjsgCisgIAorICBpZiAoKG1lc3NhZ2UgPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbChETlNNQVNRX1BBVEgsIGRhZW1vbi0+ZGJ1c19uYW1lLCAiVXAiKSkpCisgICAgeworICAgICAgZGJ1c19jb25uZWN0aW9uX3NlbmQoY29ubmVjdGlvbiwgbWVzc2FnZSwgTlVMTCk7CisgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7CisgICAgfQorCisgIHJldHVybiBOVUxMOworfQorIAorCit2b2lkIHNldF9kYnVzX2xpc3RlbmVycyhpbnQgKm1heGZkcCwKKwkJCWZkX3NldCAqcnNldCwgZmRfc2V0ICp3c2V0LCBmZF9zZXQgKmVzZXQpCit7CisgIHN0cnVjdCB3YXRjaCAqdzsKKyAgCisgIGZvciAodyA9IGRhZW1vbi0+d2F0Y2hlczsgdzsgdyA9IHctPm5leHQpCisgICAgaWYgKGRidXNfd2F0Y2hfZ2V0X2VuYWJsZWQody0+d2F0Y2gpKQorICAgICAgeworCXVuc2lnbmVkIGludCBmbGFncyA9IGRidXNfd2F0Y2hfZ2V0X2ZsYWdzKHctPndhdGNoKTsKKwlpbnQgZmQgPSBkYnVzX3dhdGNoX2dldF91bml4X2ZkKHctPndhdGNoKTsKKwkKKwlidW1wX21heGZkKGZkLCBtYXhmZHApOworCQorCWlmIChmbGFncyAmIERCVVNfV0FUQ0hfUkVBREFCTEUpCisJICBGRF9TRVQoZmQsIHJzZXQpOworCQorCWlmIChmbGFncyAmIERCVVNfV0FUQ0hfV1JJVEFCTEUpCisJICBGRF9TRVQoZmQsIHdzZXQpOworCQorCUZEX1NFVChmZCwgZXNldCk7CisgICAgICB9Cit9CisKK3ZvaWQgY2hlY2tfZGJ1c19saXN0ZW5lcnMoZmRfc2V0ICpyc2V0LCBmZF9zZXQgKndzZXQsIGZkX3NldCAqZXNldCkKK3sKKyAgREJ1c0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb24gPSAoREJ1c0Nvbm5lY3Rpb24gKilkYWVtb24tPmRidXM7CisgIHN0cnVjdCB3YXRjaCAqdzsKKworICBmb3IgKHcgPSBkYWVtb24tPndhdGNoZXM7IHc7IHcgPSB3LT5uZXh0KQorICAgIGlmIChkYnVzX3dhdGNoX2dldF9lbmFibGVkKHctPndhdGNoKSkKKyAgICAgIHsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOworCWludCBmZCA9IGRidXNfd2F0Y2hfZ2V0X3VuaXhfZmQody0+d2F0Y2gpOworCQorCWlmIChGRF9JU1NFVChmZCwgcnNldCkpCisJICBmbGFncyB8PSBEQlVTX1dBVENIX1JFQURBQkxFOworCQorCWlmIChGRF9JU1NFVChmZCwgd3NldCkpCisJICBmbGFncyB8PSBEQlVTX1dBVENIX1dSSVRBQkxFOworCQorCWlmIChGRF9JU1NFVChmZCwgZXNldCkpCisJICBmbGFncyB8PSBEQlVTX1dBVENIX0VSUk9SOworCisJaWYgKGZsYWdzICE9IDApCisJICBkYnVzX3dhdGNoX2hhbmRsZSh3LT53YXRjaCwgZmxhZ3MpOworICAgICAgfQorCisgIGlmIChjb25uZWN0aW9uKQorICAgIHsKKyAgICAgIGRidXNfY29ubmVjdGlvbl9yZWYgKGNvbm5lY3Rpb24pOworICAgICAgd2hpbGUgKGRidXNfY29ubmVjdGlvbl9kaXNwYXRjaCAoY29ubmVjdGlvbikgPT0gREJVU19ESVNQQVRDSF9EQVRBX1JFTUFJTlMpOworICAgICAgZGJ1c19jb25uZWN0aW9uX3VucmVmIChjb25uZWN0aW9uKTsKKyAgICB9Cit9CisKKyNpZmRlZiBIQVZFX0RIQ1AKK3ZvaWQgZW1pdF9kYnVzX3NpZ25hbChpbnQgYWN0aW9uLCBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UsIGNoYXIgKmhvc3RuYW1lKQoreworICBEQnVzQ29ubmVjdGlvbiAqY29ubmVjdGlvbiA9IChEQnVzQ29ubmVjdGlvbiAqKWRhZW1vbi0+ZGJ1czsKKyAgREJ1c01lc3NhZ2UqIG1lc3NhZ2UgPSBOVUxMOworICBEQnVzTWVzc2FnZUl0ZXIgYXJnczsKKyAgY2hhciAqYWN0aW9uX3N0ciwgKm1hYyA9IGRhZW1vbi0+bmFtZWJ1ZmY7CisgIHVuc2lnbmVkIGNoYXIgKnA7CisgIGludCBpOworCisgIGlmICghY29ubmVjdGlvbikKKyAgICByZXR1cm47CisgIAorICBpZiAoIWhvc3RuYW1lKQorICAgIGhvc3RuYW1lID0gIiI7CisgIAorI2lmZGVmIEhBVkVfREhDUDYKKyAgIGlmIChsZWFzZS0+ZmxhZ3MgJiAoTEVBU0VfVEEgfCBMRUFTRV9OQSkpCisgICAgIHsKKyAgICAgICBwcmludF9tYWMobWFjLCBsZWFzZS0+Y2xpZCwgbGVhc2UtPmNsaWRfbGVuKTsKKyAgICAgICBpbmV0X250b3AoQUZfSU5FVDYsICZsZWFzZS0+YWRkcjYsIGRhZW1vbi0+YWRkcmJ1ZmYsIEFERFJTVFJMRU4pOworICAgICB9CisgICBlbHNlCisjZW5kaWYKKyAgICAgeworICAgICAgIHAgPSBleHRlbmRlZF9od2FkZHIobGVhc2UtPmh3YWRkcl90eXBlLCBsZWFzZS0+aHdhZGRyX2xlbiwKKwkJCSAgIGxlYXNlLT5od2FkZHIsIGxlYXNlLT5jbGlkX2xlbiwgbGVhc2UtPmNsaWQsICZpKTsKKyAgICAgICBwcmludF9tYWMobWFjLCBwLCBpKTsKKyAgICAgICBpbmV0X250b3AoQUZfSU5FVCwgJmxlYXNlLT5hZGRyLCBkYWVtb24tPmFkZHJidWZmLCBBRERSU1RSTEVOKTsKKyAgICAgfQorCisgIGlmIChhY3Rpb24gPT0gQUNUSU9OX0RFTCkKKyAgICBhY3Rpb25fc3RyID0gIkRoY3BMZWFzZURlbGV0ZWQiOworICBlbHNlIGlmIChhY3Rpb24gPT0gQUNUSU9OX0FERCkKKyAgICBhY3Rpb25fc3RyID0gIkRoY3BMZWFzZUFkZGVkIjsKKyAgZWxzZSBpZiAoYWN0aW9uID09IEFDVElPTl9PTEQpCisgICAgYWN0aW9uX3N0ciA9ICJEaGNwTGVhc2VVcGRhdGVkIjsKKyAgZWxzZQorICAgIHJldHVybjsKKworICBpZiAoIShtZXNzYWdlID0gZGJ1c19tZXNzYWdlX25ld19zaWduYWwoRE5TTUFTUV9QQVRILCBkYWVtb24tPmRidXNfbmFtZSwgYWN0aW9uX3N0cikpKQorICAgIHJldHVybjsKKyAgCisgIGRidXNfbWVzc2FnZV9pdGVyX2luaXRfYXBwZW5kKG1lc3NhZ2UsICZhcmdzKTsKKyAgCisgIGlmIChkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMoJmFyZ3MsIERCVVNfVFlQRV9TVFJJTkcsICZkYWVtb24tPmFkZHJidWZmKSAmJgorICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljKCZhcmdzLCBEQlVTX1RZUEVfU1RSSU5HLCAmbWFjKSAmJgorICAgICAgZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljKCZhcmdzLCBEQlVTX1RZUEVfU1RSSU5HLCAmaG9zdG5hbWUpKQorICAgIGRidXNfY29ubmVjdGlvbl9zZW5kKGNvbm5lY3Rpb24sIG1lc3NhZ2UsIE5VTEwpOworICAKKyAgZGJ1c19tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2RoY3AtY29tbW9uLmMgYi9zcmMvZGhjcC1jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDEzYWM4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2RoY3AtY29tbW9uLmMKQEAgLTAsMCArMSw5MDUgQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMTQgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAiZG5zbWFzcS5oIgorCisjaWZkZWYgSEFWRV9ESENQCisKK3ZvaWQgZGhjcF9jb21tb25faW5pdCh2b2lkKQoreworICAgIC8qIFRoZXNlIGVhY2ggaG9sZCBhIERIQ1Agb3B0aW9uIG1heCBzaXplIDI1NQorICAgICAgIGFuZCBnZXQgYSB0ZXJtaW5hdGluZyB6ZXJvIGFkZGVkICovCisgIGRhZW1vbi0+ZGhjcF9idWZmID0gc2FmZV9tYWxsb2MoMjU2KTsKKyAgZGFlbW9uLT5kaGNwX2J1ZmYyID0gc2FmZV9tYWxsb2MoMjU2KTsgCisgIGRhZW1vbi0+ZGhjcF9idWZmMyA9IHNhZmVfbWFsbG9jKDI1Nik7CisgIAorICAvKiBkaGNwX3BhY2tldCBpcyB1c2VkIGJ5IHY0IGFuZCB2Niwgb3V0cGFja2V0IG9ubHkgYnkgdjYgCisgICAgIHNpemVvZihzdHJ1Y3QgZGhjcF9wYWNrZXQpIGlzIGFzIGdvb2QgYW4gaW5pdGlhbCBzaXplIGFzIGFueSwKKyAgICAgZXZlbiBmb3IgdjYgKi8KKyAgZXhwYW5kX2J1ZigmZGFlbW9uLT5kaGNwX3BhY2tldCwgc2l6ZW9mKHN0cnVjdCBkaGNwX3BhY2tldCkpOworI2lmZGVmIEhBVkVfREhDUDYKKyAgaWYgKGRhZW1vbi0+ZGhjcDYpCisgICAgZXhwYW5kX2J1ZigmZGFlbW9uLT5vdXRwYWNrZXQsIHNpemVvZihzdHJ1Y3QgZGhjcF9wYWNrZXQpKTsKKyNlbmRpZgorfQorCitzc2l6ZV90IHJlY3ZfZGhjcF9wYWNrZXQoaW50IGZkLCBzdHJ1Y3QgbXNnaGRyICptc2cpCit7ICAKKyAgc3NpemVfdCBzejsKKyAKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgbXNnLT5tc2dfZmxhZ3MgPSAwOworICAgICAgd2hpbGUgKChzeiA9IHJlY3Ztc2coZmQsIG1zZywgTVNHX1BFRUsgfCBNU0dfVFJVTkMpKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisgICAgICAKKyAgICAgIGlmIChzeiA9PSAtMSkKKwlyZXR1cm4gLTE7CisgICAgICAKKyAgICAgIGlmICghKG1zZy0+bXNnX2ZsYWdzICYgTVNHX1RSVU5DKSkKKwlicmVhazsKKworICAgICAgLyogVmVyeSBuZXcgTGludXgga2VybmVscyByZXR1cm4gdGhlIGFjdHVhbCBzaXplIG5lZWRlZCwgCisJIG9sZGVyIG9uZXMgYWx3YXlzIHJldHVybiB0cnVuY2F0ZWQgc2l6ZSAqLworICAgICAgaWYgKChzaXplX3Qpc3ogPT0gbXNnLT5tc2dfaW92LT5pb3ZfbGVuKQorCXsKKwkgIGlmICghZXhwYW5kX2J1Zihtc2ctPm1zZ19pb3YsIHN6ICsgMTAwKSkKKwkgICAgcmV0dXJuIC0xOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBleHBhbmRfYnVmKG1zZy0+bXNnX2lvdiwgc3opOworCSAgYnJlYWs7CisJfQorICAgIH0KKyAgCisgIHdoaWxlICgoc3ogPSByZWN2bXNnKGZkLCBtc2csIDApKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisgIAorICByZXR1cm4gKG1zZy0+bXNnX2ZsYWdzICYgTVNHX1RSVU5DKSA/IC0xIDogc3o7Cit9CisKK3N0cnVjdCBkaGNwX25ldGlkICpydW5fdGFnX2lmKHN0cnVjdCBkaGNwX25ldGlkICp0YWdzKQoreworICBzdHJ1Y3QgdGFnX2lmICpleHByczsKKyAgc3RydWN0IGRoY3BfbmV0aWRfbGlzdCAqbGlzdDsKKworICBmb3IgKGV4cHJzID0gZGFlbW9uLT50YWdfaWY7IGV4cHJzOyBleHBycyA9IGV4cHJzLT5uZXh0KQorICAgIGlmIChtYXRjaF9uZXRpZChleHBycy0+dGFnLCB0YWdzLCAxKSkKKyAgICAgIGZvciAobGlzdCA9IGV4cHJzLT5zZXQ7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KQorCXsKKwkgIGxpc3QtPmxpc3QtPm5leHQgPSB0YWdzOworCSAgdGFncyA9IGxpc3QtPmxpc3Q7CisJfQorCisgIHJldHVybiB0YWdzOworfQorCisKK3N0cnVjdCBkaGNwX25ldGlkICpvcHRpb25fZmlsdGVyKHN0cnVjdCBkaGNwX25ldGlkICp0YWdzLCBzdHJ1Y3QgZGhjcF9uZXRpZCAqY29udGV4dF90YWdzLCBzdHJ1Y3QgZGhjcF9vcHQgKm9wdHMpCit7CisgIHN0cnVjdCBkaGNwX25ldGlkICp0YWdpZiA9IHJ1bl90YWdfaWYodGFncyk7CisgIHN0cnVjdCBkaGNwX29wdCAqb3B0OworICBzdHJ1Y3QgZGhjcF9vcHQgKnRtcDsgIAorCisgIC8qIGZsYWcgb3B0aW9ucyB3aGljaCBhcmUgdmFsaWQgd2l0aCB0aGUgY3VycmVudCB0YWcgc2V0IChzYW5zIGNvbnRleHQgdGFncykgKi8KKyAgZm9yIChvcHQgPSBvcHRzOyBvcHQ7IG9wdCA9IG9wdC0+bmV4dCkKKyAgICB7CisgICAgICBvcHQtPmZsYWdzICY9IH5ESE9QVF9UQUdPSzsKKyAgICAgIGlmICghKG9wdC0+ZmxhZ3MgJiAoREhPUFRfRU5DQVBTVUxBVEUgfCBESE9QVF9WRU5ET1IgfCBESE9QVF9SRkMzOTI1KSkgJiYKKwkgIG1hdGNoX25ldGlkKG9wdC0+bmV0aWQsIHRhZ2lmLCAwKSkKKwlvcHQtPmZsYWdzIHw9IERIT1BUX1RBR09LOworICAgIH0KKworICAvKiBub3cgZmxhZyBvcHRpb25zIHdoaWNoIGFyZSB2YWxpZCwgaW5jbHVkaW5nIHRoZSBjb250ZXh0IHRhZ3MsCisgICAgIG90aGVyd2lzZSB2YWxpZCBvcHRpb25zIGFyZSBpbmhpYml0ZWQgaWYgd2UgZm91bmQgYSBoaWdoZXIgcHJpb3JpdHkgb25lIGFib3ZlICovCisgIGlmIChjb250ZXh0X3RhZ3MpCisgICAgeworICAgICAgc3RydWN0IGRoY3BfbmV0aWQgKmxhc3RfdGFnOworCisgICAgICBmb3IgKGxhc3RfdGFnID0gY29udGV4dF90YWdzOyBsYXN0X3RhZy0+bmV4dDsgbGFzdF90YWcgPSBsYXN0X3RhZy0+bmV4dCk7CisgICAgICBsYXN0X3RhZy0+bmV4dCA9IHRhZ3M7CisgICAgICB0YWdpZiA9IHJ1bl90YWdfaWYoY29udGV4dF90YWdzKTsKKyAgICAgIAorICAgICAgLyogcmVzZXQgc3R1ZmYgd2l0aCB0YWc6ITx0YWc+IHdoaWNoIG5vdyBtYXRjaGVzLiAqLworICAgICAgZm9yIChvcHQgPSBvcHRzOyBvcHQ7IG9wdCA9IG9wdC0+bmV4dCkKKwlpZiAoIShvcHQtPmZsYWdzICYgKERIT1BUX0VOQ0FQU1VMQVRFIHwgREhPUFRfVkVORE9SIHwgREhPUFRfUkZDMzkyNSkpICYmCisJICAgIChvcHQtPmZsYWdzICYgREhPUFRfVEFHT0spICYmCisJICAgICFtYXRjaF9uZXRpZChvcHQtPm5ldGlkLCB0YWdpZiwgMCkpCisJICBvcHQtPmZsYWdzICY9IH5ESE9QVF9UQUdPSzsKKworICAgICAgZm9yIChvcHQgPSBvcHRzOyBvcHQ7IG9wdCA9IG9wdC0+bmV4dCkKKwlpZiAoIShvcHQtPmZsYWdzICYgKERIT1BUX0VOQ0FQU1VMQVRFIHwgREhPUFRfVkVORE9SIHwgREhPUFRfUkZDMzkyNSB8IERIT1BUX1RBR09LKSkgJiYKKwkgICAgbWF0Y2hfbmV0aWQob3B0LT5uZXRpZCwgdGFnaWYsIDApKQorCSAgeworCSAgICBzdHJ1Y3QgZGhjcF9vcHQgKnRtcDsgIAorCSAgICBmb3IgKHRtcCA9IG9wdHM7IHRtcDsgdG1wID0gdG1wLT5uZXh0KSAKKwkgICAgICBpZiAodG1wLT5vcHQgPT0gb3B0LT5vcHQgJiYgb3B0LT5uZXRpZCAmJiAodG1wLT5mbGFncyAmIERIT1BUX1RBR09LKSkKKwkJYnJlYWs7CisJICAgIGlmICghdG1wKQorCSAgICAgIG9wdC0+ZmxhZ3MgfD0gREhPUFRfVEFHT0s7CisJICB9ICAgICAgCisgICAgfQorICAKKyAgLyogbm93IGZsYWcgdW50YWdnZWQgb3B0aW9ucyB3aGljaCBhcmUgbm90IG92ZXJyaWRkZW4gYnkgdGFnZ2VkIG9uZXMgKi8KKyAgZm9yIChvcHQgPSBvcHRzOyBvcHQ7IG9wdCA9IG9wdC0+bmV4dCkKKyAgICBpZiAoIShvcHQtPmZsYWdzICYgKERIT1BUX0VOQ0FQU1VMQVRFIHwgREhPUFRfVkVORE9SIHwgREhPUFRfUkZDMzkyNSB8IERIT1BUX1RBR09LKSkgJiYgIW9wdC0+bmV0aWQpCisgICAgICB7CisJZm9yICh0bXAgPSBvcHRzOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkgCisJICBpZiAodG1wLT5vcHQgPT0gb3B0LT5vcHQgJiYgKHRtcC0+ZmxhZ3MgJiBESE9QVF9UQUdPSykpCisJICAgIGJyZWFrOworCWlmICghdG1wKQorCSAgb3B0LT5mbGFncyB8PSBESE9QVF9UQUdPSzsKKwllbHNlIGlmICghdG1wLT5uZXRpZCkKKwkgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX1dBUk5JTkcsIF8oIklnbm9yaW5nIGR1cGxpY2F0ZSBkaGNwLW9wdGlvbiAlZCIpLCB0bXAtPm9wdCk7IAorICAgICAgfQorCisgIC8qIEZpbmFsbHksIGVsaW1pbmF0ZSBkdXBsaWNhdGUgb3B0aW9ucyBsYXRlciBpbiB0aGUgY2hhaW4sIGFuZCB0aGVyZWZvcmUgZWFybGllciBpbiB0aGUgY29uZmlnIGZpbGUuICovCisgIGZvciAob3B0ID0gb3B0czsgb3B0OyBvcHQgPSBvcHQtPm5leHQpCisgICAgaWYgKG9wdC0+ZmxhZ3MgJiBESE9QVF9UQUdPSykKKyAgICAgIGZvciAodG1wID0gb3B0LT5uZXh0OyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkgCisJaWYgKHRtcC0+b3B0ID09IG9wdC0+b3B0KQorCSAgdG1wLT5mbGFncyAmPSB+REhPUFRfVEFHT0s7CisgIAorICByZXR1cm4gdGFnaWY7Cit9CisJCisvKiBJcyBldmVyeSBtZW1iZXIgb2YgY2hlY2sgbWF0Y2hlZCBieSBhIG1lbWJlciBvZiBwb29sPyAKKyAgIElmIHRhZ25vdG5lZWRlZCwgdW50YWdnZWQgaXMgT0sgKi8KK2ludCBtYXRjaF9uZXRpZChzdHJ1Y3QgZGhjcF9uZXRpZCAqY2hlY2ssIHN0cnVjdCBkaGNwX25ldGlkICpwb29sLCBpbnQgdGFnbm90bmVlZGVkKQoreworICBzdHJ1Y3QgZGhjcF9uZXRpZCAqdG1wMTsKKyAgCisgIGlmICghY2hlY2sgJiYgIXRhZ25vdG5lZWRlZCkKKyAgICByZXR1cm4gMDsKKworICBmb3IgKDsgY2hlY2s7IGNoZWNrID0gY2hlY2stPm5leHQpCisgICAgeworICAgICAgLyogJyMnIGZvciBub3QgaXMgZm9yIGJhY2t3YXJkcyBjb21wYXQuICovCisgICAgICBpZiAoY2hlY2stPm5ldFswXSAhPSAnIScgJiYgY2hlY2stPm5ldFswXSAhPSAnIycpCisJeworCSAgZm9yICh0bXAxID0gcG9vbDsgdG1wMTsgdG1wMSA9IHRtcDEtPm5leHQpCisJICAgIGlmIChzdHJjbXAoY2hlY2stPm5ldCwgdG1wMS0+bmV0KSA9PSAwKQorCSAgICAgIGJyZWFrOworCSAgaWYgKCF0bXAxKQorCSAgICByZXR1cm4gMDsKKwl9CisgICAgICBlbHNlCisJZm9yICh0bXAxID0gcG9vbDsgdG1wMTsgdG1wMSA9IHRtcDEtPm5leHQpCisJICBpZiAoc3RyY21wKChjaGVjay0+bmV0KSsxLCB0bXAxLT5uZXQpID09IDApCisJICAgIHJldHVybiAwOworICAgIH0KKyAgcmV0dXJuIDE7Cit9CisKKy8qIHJldHVybiBkb21haW4gb3IgTlVMTCBpZiBub25lLiAqLworY2hhciAqc3RyaXBfaG9zdG5hbWUoY2hhciAqaG9zdG5hbWUpCit7CisgIGNoYXIgKmRvdCA9IHN0cmNocihob3N0bmFtZSwgJy4nKTsKKyAKKyAgaWYgKCFkb3QpCisgICAgcmV0dXJuIE5VTEw7CisgIAorICAqZG90ID0gMDsgLyogdHJ1bmNhdGUgKi8KKyAgaWYgKHN0cmxlbihkb3QrMSkgIT0gMCkKKyAgICByZXR1cm4gZG90KzE7CisgIAorICByZXR1cm4gTlVMTDsKK30KKwordm9pZCBsb2dfdGFncyhzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV0aWQsIHUzMiB4aWQpCit7CisgIGlmIChuZXRpZCAmJiBvcHRpb25fYm9vbChPUFRfTE9HX09QVFMpKQorICAgIHsKKyAgICAgIGNoYXIgKnMgPSBkYWVtb24tPm5hbWVidWZmOworICAgICAgZm9yICgqcyA9IDA7IG5ldGlkOyBuZXRpZCA9IG5ldGlkLT5uZXh0KQorCXsKKwkgIC8qIGtpbGwgZHVwZXMuICovCisJICBzdHJ1Y3QgZGhjcF9uZXRpZCAqbjsKKwkgIAorCSAgZm9yIChuID0gbmV0aWQtPm5leHQ7IG47IG4gPSBuLT5uZXh0KQorCSAgICBpZiAoc3RyY21wKG5ldGlkLT5uZXQsIG4tPm5ldCkgPT0gMCkKKwkgICAgICBicmVhazsKKwkgIAorCSAgaWYgKCFuKQorCSAgICB7CisJICAgICAgc3RybmNhdCAocywgbmV0aWQtPm5ldCwgKE1BWEROQU1FLTEpIC0gc3RybGVuKHMpKTsKKwkgICAgICBpZiAobmV0aWQtPm5leHQpCisJCXN0cm5jYXQgKHMsICIsICIsIChNQVhETkFNRS0xKSAtIHN0cmxlbihzKSk7CisJICAgIH0KKwl9CisgICAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCIldSB0YWdzOiAlcyIpLCB4aWQsIHMpOworICAgIH0gCit9ICAgCisgIAoraW50IG1hdGNoX2J5dGVzKHN0cnVjdCBkaGNwX29wdCAqbywgdW5zaWduZWQgY2hhciAqcCwgaW50IGxlbikKK3sKKyAgaW50IGk7CisgIAorICBpZiAoby0+bGVuID4gbGVuKQorICAgIHJldHVybiAwOworICAKKyAgaWYgKG8tPmxlbiA9PSAwKQorICAgIHJldHVybiAxOworICAgICAKKyAgaWYgKG8tPmZsYWdzICYgREhPUFRfSEVYKQorICAgIHsgCisgICAgICBpZiAobWVtY21wX21hc2tlZChvLT52YWwsIHAsIG8tPmxlbiwgby0+dS53aWxkY2FyZF9tYXNrKSkKKwlyZXR1cm4gMTsKKyAgICB9CisgIGVsc2UgCisgICAgZm9yIChpID0gMDsgaSA8PSAobGVuIC0gby0+bGVuKTsgKSAKKyAgICAgIHsKKwlpZiAobWVtY21wKG8tPnZhbCwgcCArIGksIG8tPmxlbikgPT0gMCkKKwkgIHJldHVybiAxOworCSAgICAKKwlpZiAoby0+ZmxhZ3MgJiBESE9QVF9TVFJJTkcpCisJICBpKys7CisJZWxzZQorCSAgaSArPSBvLT5sZW47CisgICAgICB9CisgIAorICByZXR1cm4gMDsKK30KKworaW50IGNvbmZpZ19oYXNfbWFjKHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBjaGFyICpod2FkZHIsIGludCBsZW4sIGludCB0eXBlKQoreworICBzdHJ1Y3QgaHdhZGRyX2NvbmZpZyAqY29uZl9hZGRyOworICAKKyAgZm9yIChjb25mX2FkZHIgPSBjb25maWctPmh3YWRkcjsgY29uZl9hZGRyOyBjb25mX2FkZHIgPSBjb25mX2FkZHItPm5leHQpCisgICAgaWYgKGNvbmZfYWRkci0+d2lsZGNhcmRfbWFzayA9PSAwICYmCisJY29uZl9hZGRyLT5od2FkZHJfbGVuID09IGxlbiAmJgorCShjb25mX2FkZHItPmh3YWRkcl90eXBlID09IHR5cGUgfHwgY29uZl9hZGRyLT5od2FkZHJfdHlwZSA9PSAwKSAmJgorCW1lbWNtcChjb25mX2FkZHItPmh3YWRkciwgaHdhZGRyLCBsZW4pID09IDApCisgICAgICByZXR1cm4gMTsKKyAgCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlzX2NvbmZpZ19pbl9jb250ZXh0KHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlnKQoreworICBpZiAoIWNvbnRleHQpIC8qIGNhbGxlZCB2aWEgZmluZF9jb25maWcoKSBmcm9tIGxlYXNlX3VwZGF0ZV9mcm9tX2NvbmZpZ3MoKSAqLworICAgIHJldHVybiAxOyAKKworICBpZiAoIShjb25maWctPmZsYWdzICYgKENPTkZJR19BRERSIHwgQ09ORklHX0FERFI2KSkpCisgICAgcmV0dXJuIDE7CisgIAorI2lmZGVmIEhBVkVfREhDUDYKKyAgaWYgKChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfVjYpICYmIChjb25maWctPmZsYWdzICYgQ09ORklHX1dJTERDQVJEKSkKKyAgICByZXR1cm4gMTsKKyNlbmRpZgorCisgIGZvciAoOyBjb250ZXh0OyBjb250ZXh0ID0gY29udGV4dC0+Y3VycmVudCkKKyNpZmRlZiBIQVZFX0RIQ1A2CisgICAgaWYgKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9WNikgCisgICAgICB7CisJaWYgKChjb25maWctPmZsYWdzICYgQ09ORklHX0FERFI2KSAmJiBpc19zYW1lX25ldDYoJmNvbmZpZy0+YWRkcjYsICZjb250ZXh0LT5zdGFydDYsIGNvbnRleHQtPnByZWZpeCkpCisJICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICBlbHNlIAorI2VuZGlmCisgICAgICBpZiAoKGNvbmZpZy0+ZmxhZ3MgJiBDT05GSUdfQUREUikgJiYgaXNfc2FtZV9uZXQoY29uZmlnLT5hZGRyLCBjb250ZXh0LT5zdGFydCwgY29udGV4dC0+bmV0bWFzaykpCisJcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBkaGNwX2NvbmZpZyAqZmluZF9jb25maWcoc3RydWN0IGRoY3BfY29uZmlnICpjb25maWdzLAorCQkJCXN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsCisJCQkJdW5zaWduZWQgY2hhciAqY2xpZCwgaW50IGNsaWRfbGVuLAorCQkJCXVuc2lnbmVkIGNoYXIgKmh3YWRkciwgaW50IGh3X2xlbiwgCisJCQkJaW50IGh3X3R5cGUsIGNoYXIgKmhvc3RuYW1lKQoreworICBpbnQgY291bnQsIG5ldzsKKyAgc3RydWN0IGRoY3BfY29uZmlnICpjb25maWcsICpjYW5kaWRhdGU7IAorICBzdHJ1Y3QgaHdhZGRyX2NvbmZpZyAqY29uZl9hZGRyOworCisgIGlmIChjbGlkKQorICAgIGZvciAoY29uZmlnID0gY29uZmlnczsgY29uZmlnOyBjb25maWcgPSBjb25maWctPm5leHQpCisgICAgICBpZiAoY29uZmlnLT5mbGFncyAmIENPTkZJR19DTElEKQorCXsKKwkgIGlmIChjb25maWctPmNsaWRfbGVuID09IGNsaWRfbGVuICYmIAorCSAgICAgIG1lbWNtcChjb25maWctPmNsaWQsIGNsaWQsIGNsaWRfbGVuKSA9PSAwICYmCisJICAgICAgaXNfY29uZmlnX2luX2NvbnRleHQoY29udGV4dCwgY29uZmlnKSkKKwkgICAgcmV0dXJuIGNvbmZpZzsKKwkgIAorCSAgLyogZGhjcGNkIHByZWZpeGVzIEFTQ0lJIGNsaWVudCBJRHMgYnkgemVybyB3aGljaCBpcyB3cm9uZywgYnV0IHdlIHRyeSBhbmQKKwkgICAgIGNvcGUgd2l0aCB0aGF0IGhlcmUuIFRoaXMgaXMgSVB2NCBvbmx5LiBjb250ZXh0PT1OVUxMIGltcGxpZXMgSVB2NCwgCisJICAgICBzZWUgbGVhc2VfdXBkYXRlX2Zyb21fY29uZmlncygpICovCisJICBpZiAoKCFjb250ZXh0IHx8ICEoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX1Y2KSkgJiYgKmNsaWQgPT0gMCAmJiBjb25maWctPmNsaWRfbGVuID09IGNsaWRfbGVuLTEgICYmCisJICAgICAgbWVtY21wKGNvbmZpZy0+Y2xpZCwgY2xpZCsxLCBjbGlkX2xlbi0xKSA9PSAwICYmCisJICAgICAgaXNfY29uZmlnX2luX2NvbnRleHQoY29udGV4dCwgY29uZmlnKSkKKwkgICAgcmV0dXJuIGNvbmZpZzsKKwl9CisgIAorCisgIGlmIChod2FkZHIpCisgICAgZm9yIChjb25maWcgPSBjb25maWdzOyBjb25maWc7IGNvbmZpZyA9IGNvbmZpZy0+bmV4dCkKKyAgICAgIGlmIChjb25maWdfaGFzX21hYyhjb25maWcsIGh3YWRkciwgaHdfbGVuLCBod190eXBlKSAmJgorCSAgaXNfY29uZmlnX2luX2NvbnRleHQoY29udGV4dCwgY29uZmlnKSkKKwlyZXR1cm4gY29uZmlnOworICAKKyAgaWYgKGhvc3RuYW1lICYmIGNvbnRleHQpCisgICAgZm9yIChjb25maWcgPSBjb25maWdzOyBjb25maWc7IGNvbmZpZyA9IGNvbmZpZy0+bmV4dCkKKyAgICAgIGlmICgoY29uZmlnLT5mbGFncyAmIENPTkZJR19OQU1FKSAmJiAKKwkgIGhvc3RuYW1lX2lzZXF1YWwoY29uZmlnLT5ob3N0bmFtZSwgaG9zdG5hbWUpICYmCisJICBpc19jb25maWdfaW5fY29udGV4dChjb250ZXh0LCBjb25maWcpKQorCXJldHVybiBjb25maWc7CisKKyAgCisgIGlmICghaHdhZGRyKQorICAgIHJldHVybiBOVUxMOworCisgIC8qIHVzZSBtYXRjaCB3aXRoIGZld2VzdCB3aWxkY2FyZCBvY3RldHMgKi8KKyAgZm9yIChjYW5kaWRhdGUgPSBOVUxMLCBjb3VudCA9IDAsIGNvbmZpZyA9IGNvbmZpZ3M7IGNvbmZpZzsgY29uZmlnID0gY29uZmlnLT5uZXh0KQorICAgIGlmIChpc19jb25maWdfaW5fY29udGV4dChjb250ZXh0LCBjb25maWcpKQorICAgICAgZm9yIChjb25mX2FkZHIgPSBjb25maWctPmh3YWRkcjsgY29uZl9hZGRyOyBjb25mX2FkZHIgPSBjb25mX2FkZHItPm5leHQpCisJaWYgKGNvbmZfYWRkci0+d2lsZGNhcmRfbWFzayAhPSAwICYmCisJICAgIGNvbmZfYWRkci0+aHdhZGRyX2xlbiA9PSBod19sZW4gJiYJCisJICAgIChjb25mX2FkZHItPmh3YWRkcl90eXBlID09IGh3X3R5cGUgfHwgY29uZl9hZGRyLT5od2FkZHJfdHlwZSA9PSAwKSAmJgorCSAgICAobmV3ID0gbWVtY21wX21hc2tlZChjb25mX2FkZHItPmh3YWRkciwgaHdhZGRyLCBod19sZW4sIGNvbmZfYWRkci0+d2lsZGNhcmRfbWFzaykpID4gY291bnQpCisJICB7CisJICAgICAgY291bnQgPSBuZXc7CisJICAgICAgY2FuZGlkYXRlID0gY29uZmlnOworCSAgfQorICAKKyAgcmV0dXJuIGNhbmRpZGF0ZTsKK30KKwordm9pZCBkaGNwX3VwZGF0ZV9jb25maWdzKHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlncykKK3sKKyAgLyogU29tZSBwZW9wbGUgbGlrZSB0byBrZWVwIGFsbCBzdGF0aWMgSVAgYWRkcmVzc2VzIGluIC9ldGMvaG9zdHMuCisgICAgIFRoaXMgZ29lcyB0aHJvdWdoIC9ldGMvaG9zdHMgYW5kIHNldHMgc3RhdGljIGFkZHJlc3NlcyBmb3IgYW55IERIQ1AgY29uZmlnCisgICAgIHJlY29yZHMgd2hpY2ggZG9uJ3QgaGF2ZSBhbiBhZGRyZXNzIGFuZCB3aG9zZSBuYW1lIG1hdGNoZXMuIAorICAgICBXZSB0YWtlIGNhcmUgdG8gbWFpbnRhaW4gdGhlIGludmFyaWFudCB0aGF0IGFueSBJUCBhZGRyZXNzIGNhbiBhcHBlYXIKKyAgICAgaW4gYXQgbW9zdCBvbmUgZGhjcC1ob3N0LiBTaW5jZSAvZXRjL2hvc3RzIGNhbiBiZSByZS1yZWFkIGJ5IFNJR0hVUCwgCisgICAgIHJlc3RvcmUgdGhlIHN0YXR1cy1xdW8gYW50ZSBmaXJzdC4gKi8KKyAgCisgIHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlnLCAqY29uZl90bXA7CisgIHN0cnVjdCBjcmVjICpjcmVjOworICBpbnQgcHJvdCA9IEFGX0lORVQ7CisKKyAgZm9yIChjb25maWcgPSBjb25maWdzOyBjb25maWc7IGNvbmZpZyA9IGNvbmZpZy0+bmV4dCkKKyAgICBpZiAoY29uZmlnLT5mbGFncyAmIENPTkZJR19BRERSX0hPU1RTKQorICAgICAgY29uZmlnLT5mbGFncyAmPSB+KENPTkZJR19BRERSIHwgQ09ORklHX0FERFI2IHwgQ09ORklHX0FERFJfSE9TVFMpOworCisjaWZkZWYgSEFWRV9ESENQNiAKKyBhZ2FpbjogIAorI2VuZGlmCisKKyAgaWYgKGRhZW1vbi0+cG9ydCAhPSAwKQorICAgIGZvciAoY29uZmlnID0gY29uZmlnczsgY29uZmlnOyBjb25maWcgPSBjb25maWctPm5leHQpCisgICAgICB7CisJaW50IGNvbmZsYWdzID0gQ09ORklHX0FERFI7CisJaW50IGNhY2hlZmxhZ3MgPSBGX0lQVjQ7CisKKyNpZmRlZiBIQVZFX0RIQ1A2CisJaWYgKHByb3QgPT0gQUZfSU5FVDYpCisJICB7CisJICAgIGNvbmZsYWdzID0gQ09ORklHX0FERFI2OworCSAgICBjYWNoZWZsYWdzID0gRl9JUFY2OworCSAgfQorI2VuZGlmCisJaWYgKCEoY29uZmlnLT5mbGFncyAmIGNvbmZsYWdzKSAmJgorCSAgICAoY29uZmlnLT5mbGFncyAmIENPTkZJR19OQU1FKSAmJiAKKwkgICAgKGNyZWMgPSBjYWNoZV9maW5kX2J5X25hbWUoTlVMTCwgY29uZmlnLT5ob3N0bmFtZSwgMCwgY2FjaGVmbGFncykpICYmCisJICAgIChjcmVjLT5mbGFncyAmIEZfSE9TVFMpKQorCSAgeworCSAgICBpZiAoY2FjaGVfZmluZF9ieV9uYW1lKGNyZWMsIGNvbmZpZy0+aG9zdG5hbWUsIDAsIGNhY2hlZmxhZ3MpKQorCSAgICAgIHsKKwkJLyogdXNlIHByaW1hcnkgKGZpcnN0KSBhZGRyZXNzICovCisJCXdoaWxlIChjcmVjICYmICEoY3JlYy0+ZmxhZ3MgJiBGX1JFVkVSU0UpKQorCQkgIGNyZWMgPSBjYWNoZV9maW5kX2J5X25hbWUoY3JlYywgY29uZmlnLT5ob3N0bmFtZSwgMCwgY2FjaGVmbGFncyk7CisJCWlmICghY3JlYykKKwkJICBjb250aW51ZTsgLyogc2hvdWxkIGJlIG5ldmVyICovCisJCWluZXRfbnRvcChwcm90LCAmY3JlYy0+YWRkci5hZGRyLCBkYWVtb24tPmFkZHJidWZmLCBBRERSU1RSTEVOKTsKKwkJbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfV0FSTklORywgXygiJXMgaGFzIG1vcmUgdGhhbiBvbmUgYWRkcmVzcyBpbiBob3N0c2ZpbGUsIHVzaW5nICVzIGZvciBESENQIiksIAorCQkJICBjb25maWctPmhvc3RuYW1lLCBkYWVtb24tPmFkZHJidWZmKTsKKwkgICAgICB9CisJICAgIAorCSAgICBpZiAocHJvdCA9PSBBRl9JTkVUICYmIAorCQkoIShjb25mX3RtcCA9IGNvbmZpZ19maW5kX2J5X2FkZHJlc3MoY29uZmlncywgY3JlYy0+YWRkci5hZGRyLmFkZHIuYWRkcjQpKSB8fCBjb25mX3RtcCA9PSBjb25maWcpKQorCSAgICAgIHsKKwkJY29uZmlnLT5hZGRyID0gY3JlYy0+YWRkci5hZGRyLmFkZHIuYWRkcjQ7CisJCWNvbmZpZy0+ZmxhZ3MgfD0gQ09ORklHX0FERFIgfCBDT05GSUdfQUREUl9IT1NUUzsKKwkJY29udGludWU7CisJICAgICAgfQorCisjaWZkZWYgSEFWRV9ESENQNgorCSAgICBpZiAocHJvdCA9PSBBRl9JTkVUNiAmJiAKKwkJKCEoY29uZl90bXAgPSBjb25maWdfZmluZF9ieV9hZGRyZXNzNihjb25maWdzLCAmY3JlYy0+YWRkci5hZGRyLmFkZHIuYWRkcjYsIDEyOCwgMCkpIHx8IGNvbmZfdG1wID09IGNvbmZpZykpCisJICAgICAgeworCQltZW1jcHkoJmNvbmZpZy0+YWRkcjYsICZjcmVjLT5hZGRyLmFkZHIuYWRkci5hZGRyNiwgSU42QUREUlNaKTsKKwkJY29uZmlnLT5mbGFncyB8PSBDT05GSUdfQUREUjYgfCBDT05GSUdfQUREUl9IT1NUUzsKKwkJY29udGludWU7CisJICAgICAgfQorI2VuZGlmCisKKwkgICAgaW5ldF9udG9wKHByb3QsICZjcmVjLT5hZGRyLmFkZHIsIGRhZW1vbi0+YWRkcmJ1ZmYsIEFERFJTVFJMRU4pOworCSAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19XQVJOSU5HLCBfKCJkdXBsaWNhdGUgSVAgYWRkcmVzcyAlcyAoJXMpIGluIGRoY3AtY29uZmlnIGRpcmVjdGl2ZSIpLCAKKwkJICAgICAgZGFlbW9uLT5hZGRyYnVmZiwgY29uZmlnLT5ob3N0bmFtZSk7CisJICAgIAorCSAgICAKKwkgIH0KKyAgICAgIH0KKworI2lmZGVmIEhBVkVfREhDUDYKKyAgaWYgKHByb3QgPT0gQUZfSU5FVCkKKyAgICB7CisgICAgICBwcm90ID0gQUZfSU5FVDY7CisgICAgICBnb3RvIGFnYWluOworICAgIH0KKyNlbmRpZgorCit9CisKKyNpZmRlZiBIQVZFX0xJTlVYX05FVFdPUksgCitjaGFyICp3aGljaGRldmljZSh2b2lkKQoreworICAvKiBJZiB3ZSBhcmUgZG9pbmcgREhDUCBvbiBleGFjdGx5IG9uZSBpbnRlcmZhY2UsIGFuZCBydW5uaW5nIGxpbnV4LCBkbyBTT19CSU5EVE9ERVZJQ0UKKyAgICAgdG8gdGhhdCBkZXZpY2UuIFRoaXMgaXMgZm9yIHRoZSB1c2UgY2FzZSBvZiAgKGVnKSBPcGVuU3RhY2ssIHdoaWNoIHJ1bnMgYSBuZXcKKyAgICAgZG5zbWFzcSBpbnN0YW5jZSBmb3IgZWFjaCBWTEFOIGludGVyZmFjZSBpdCBjcmVhdGVzLiBXaXRob3V0IHRoZSBCSU5EVE9ERVZJQ0UsIAorICAgICBpbmRpdmlkdWFsIHByb2Nlc3NlcyBkb24ndCBhbHdheXMgc2VlIHRoZSBwYWNrZXRzIHRoZXkgc2hvdWxkLgorICAgICBTT19CSU5EVE9ERVZJQ0UgaXMgb25seSBhdmFpbGFibGUgTGludXguIAorCisgICAgIE5vdGUgdGhhdCBpZiB3aWxkY2FyZHMgYXJlIHVzZWQgaW4gLS1pbnRlcmZhY2UsIG9yIC0taW50ZXJmYWNlIGlzIG5vdCB1c2VkIGF0IGFsbCwKKyAgICAgb3IgYSBjb25maWd1cmVkIGludGVyZmFjZSBkb2Vzbid0IHlldCBleGlzdCwgdGhlbiBtb3JlIGludGVyZmFjZXMgbWF5IGFycml2ZSBsYXRlciwgCisgICAgIHNvIHdlIGNhbid0IHNhZmVseSBhc3NlcnQgdGhlcmUgaXMgb25seSBvbmUgaW50ZXJmYWNlIGFuZCBwcm9jZWVkLgorKi8KKyAgCisgIHN0cnVjdCBpcmVjICppZmFjZSwgKmZvdW5kOworICBzdHJ1Y3QgaW5hbWUgKmlmX3RtcDsKKyAgCisgIGlmICghZGFlbW9uLT5pZl9uYW1lcykKKyAgICByZXR1cm4gTlVMTDsKKyAgCisgIGZvciAoaWZfdG1wID0gZGFlbW9uLT5pZl9uYW1lczsgaWZfdG1wOyBpZl90bXAgPSBpZl90bXAtPm5leHQpCisgICAgaWYgKGlmX3RtcC0+bmFtZSAmJiAoIWlmX3RtcC0+dXNlZCB8fCBzdHJjaHIoaWZfdG1wLT5uYW1lLCAnKicpKSkKKyAgICAgIHJldHVybiBOVUxMOworCisgIGZvciAoZm91bmQgPSBOVUxMLCBpZmFjZSA9IGRhZW1vbi0+aW50ZXJmYWNlczsgaWZhY2U7IGlmYWNlID0gaWZhY2UtPm5leHQpCisgICAgaWYgKGlmYWNlLT5kaGNwX29rKQorICAgICAgeworCWlmICghZm91bmQpCisJICBmb3VuZCA9IGlmYWNlOworCWVsc2UgaWYgKHN0cmNtcChmb3VuZC0+bmFtZSwgaWZhY2UtPm5hbWUpICE9IDApIAorCSAgcmV0dXJuIE5VTEw7IC8qIG1vcmUgdGhhbiBvbmUuICovCisgICAgICB9CisKKyAgaWYgKGZvdW5kKQorICAgIHJldHVybiBmb3VuZC0+bmFtZTsKKworICByZXR1cm4gTlVMTDsKK30KKyAKK3ZvaWQgIGJpbmR0b2RldmljZShjaGFyICpkZXZpY2UsIGludCBmZCkKK3sKKyAgc3RydWN0IGlmcmVxIGlmcjsKKyAgCisgIHN0cmNweShpZnIuaWZyX25hbWUsIGRldmljZSk7CisgIC8qIG9ubHkgYWxsb3dlZCBieSByb290LiAqLworICBpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fQklORFRPREVWSUNFLCAodm9pZCAqKSZpZnIsIHNpemVvZihpZnIpKSA9PSAtMSAmJgorICAgICAgZXJybm8gIT0gRVBFUk0pCisgICAgZGllKF8oImZhaWxlZCB0byBzZXQgU09fQklORFRPREVWSUNFIG9uIERIQ1Agc29ja2V0OiAlcyIpLCBOVUxMLCBFQ19CQURORVQpOworfQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0dGFiX3QgeworICBjaGFyICpuYW1lOworICB1MTYgdmFsLCBzaXplOworfSBvcHR0YWJbXSA9IHsKKyAgeyAibmV0bWFzayIsIDEsIE9UX0FERFJfTElTVCB9LAorICB7ICJ0aW1lLW9mZnNldCIsIDIsIDQgfSwKKyAgeyAicm91dGVyIiwgMywgT1RfQUREUl9MSVNUICB9LAorICB7ICJkbnMtc2VydmVyIiwgNiwgT1RfQUREUl9MSVNUIH0sCisgIHsgImxvZy1zZXJ2ZXIiLCA3LCBPVF9BRERSX0xJU1QgfSwKKyAgeyAibHByLXNlcnZlciIsIDksIE9UX0FERFJfTElTVCB9LAorICB7ICJob3N0bmFtZSIsIDEyLCBPVF9JTlRFUk5BTCB8IE9UX05BTUUgfSwKKyAgeyAiYm9vdC1maWxlLXNpemUiLCAxMywgMiB8IE9UX0RFQyB9LAorICB7ICJkb21haW4tbmFtZSIsIDE1LCBPVF9OQU1FIH0sCisgIHsgInN3YXAtc2VydmVyIiwgMTYsIE9UX0FERFJfTElTVCB9LAorICB7ICJyb290LXBhdGgiLCAxNywgT1RfTkFNRSB9LAorICB7ICJleHRlbnNpb24tcGF0aCIsIDE4LCBPVF9OQU1FIH0sCisgIHsgImlwLWZvcndhcmQtZW5hYmxlIiwgMTksIDEgfSwKKyAgeyAibm9uLWxvY2FsLXNvdXJjZS1yb3V0aW5nIiwgMjAsIDEgfSwKKyAgeyAicG9saWN5LWZpbHRlciIsIDIxLCBPVF9BRERSX0xJU1QgfSwKKyAgeyAibWF4LWRhdGFncmFtLXJlYXNzZW1ibHkiLCAyMiwgMiB8IE9UX0RFQyB9LAorICB7ICJkZWZhdWx0LXR0bCIsIDIzLCAxIHwgT1RfREVDIH0sCisgIHsgIm10dSIsIDI2LCAyIHwgT1RfREVDIH0sCisgIHsgImFsbC1zdWJuZXRzLWxvY2FsIiwgMjcsIDEgfSwKKyAgeyAiYnJvYWRjYXN0IiwgMjgsIE9UX0lOVEVSTkFMIHwgT1RfQUREUl9MSVNUIH0sCisgIHsgInJvdXRlci1kaXNjb3ZlcnkiLCAzMSwgMSB9LAorICB7ICJyb3V0ZXItc29saWNpdGF0aW9uIiwgMzIsIE9UX0FERFJfTElTVCB9LAorICB7ICJzdGF0aWMtcm91dGUiLCAzMywgT1RfQUREUl9MSVNUIH0sCisgIHsgInRyYWlsZXItZW5jYXBzdWxhdGlvbiIsIDM0LCAxIH0sCisgIHsgImFycC10aW1lb3V0IiwgMzUsIDQgfCBPVF9ERUMgfSwKKyAgeyAiZXRoZXJuZXQtZW5jYXAiLCAzNiwgMSB9LAorICB7ICJ0Y3AtdHRsIiwgMzcsIDEgfSwKKyAgeyAidGNwLWtlZXBhbGl2ZSIsIDM4LCA0IHwgT1RfREVDIH0sCisgIHsgIm5pcy1kb21haW4iLCA0MCwgT1RfTkFNRSB9LAorICB7ICJuaXMtc2VydmVyIiwgNDEsIE9UX0FERFJfTElTVCB9LAorICB7ICJudHAtc2VydmVyIiwgNDIsIE9UX0FERFJfTElTVCB9LAorICB7ICJ2ZW5kb3ItZW5jYXAiLCA0MywgT1RfSU5URVJOQUwgfSwKKyAgeyAibmV0Ymlvcy1ucyIsIDQ0LCBPVF9BRERSX0xJU1QgfSwKKyAgeyAibmV0Ymlvcy1kZCIsIDQ1LCBPVF9BRERSX0xJU1QgfSwKKyAgeyAibmV0Ymlvcy1ub2RldHlwZSIsIDQ2LCAxIH0sCisgIHsgIm5ldGJpb3Mtc2NvcGUiLCA0NywgMCB9LAorICB7ICJ4LXdpbmRvd3MtZnMiLCA0OCwgT1RfQUREUl9MSVNUIH0sCisgIHsgIngtd2luZG93cy1kbSIsIDQ5LCBPVF9BRERSX0xJU1QgfSwKKyAgeyAicmVxdWVzdGVkLWFkZHJlc3MiLCA1MCwgT1RfSU5URVJOQUwgfCBPVF9BRERSX0xJU1QgfSwKKyAgeyAibGVhc2UtdGltZSIsIDUxLCBPVF9JTlRFUk5BTCB8IE9UX1RJTUUgfSwKKyAgeyAib3B0aW9uLW92ZXJsb2FkIiwgNTIsIE9UX0lOVEVSTkFMIH0sCisgIHsgIm1lc3NhZ2UtdHlwZSIsIDUzLCBPVF9JTlRFUk5BTCB8IE9UX0RFQyB9LAorICB7ICJzZXJ2ZXItaWRlbnRpZmllciIsIDU0LCBPVF9JTlRFUk5BTCB8IE9UX0FERFJfTElTVCB9LAorICB7ICJwYXJhbWV0ZXItcmVxdWVzdCIsIDU1LCBPVF9JTlRFUk5BTCB9LAorICB7ICJtZXNzYWdlIiwgNTYsIE9UX0lOVEVSTkFMIH0sCisgIHsgIm1heC1tZXNzYWdlLXNpemUiLCA1NywgT1RfSU5URVJOQUwgfSwKKyAgeyAiVDEiLCA1OCwgT1RfSU5URVJOQUwgfCBPVF9USU1FfSwKKyAgeyAiVDIiLCA1OSwgT1RfSU5URVJOQUwgfCBPVF9USU1FfSwKKyAgeyAidmVuZG9yLWNsYXNzIiwgNjAsIDAgfSwKKyAgeyAiY2xpZW50LWlkIiwgNjEsIE9UX0lOVEVSTkFMIH0sCisgIHsgIm5pcystZG9tYWluIiwgNjQsIE9UX05BTUUgfSwKKyAgeyAibmlzKy1zZXJ2ZXIiLCA2NSwgT1RfQUREUl9MSVNUIH0sCisgIHsgInRmdHAtc2VydmVyIiwgNjYsIE9UX05BTUUgfSwKKyAgeyAiYm9vdGZpbGUtbmFtZSIsIDY3LCBPVF9OQU1FIH0sCisgIHsgIm1vYmlsZS1pcC1ob21lIiwgNjgsIE9UX0FERFJfTElTVCB9LCAKKyAgeyAic210cC1zZXJ2ZXIiLCA2OSwgT1RfQUREUl9MSVNUIH0sIAorICB7ICJwb3AzLXNlcnZlciIsIDcwLCBPVF9BRERSX0xJU1QgfSwgCisgIHsgIm5udHAtc2VydmVyIiwgNzEsIE9UX0FERFJfTElTVCB9LCAKKyAgeyAiaXJjLXNlcnZlciIsIDc0LCBPVF9BRERSX0xJU1QgfSwgCisgIHsgInVzZXItY2xhc3MiLCA3NywgMCB9LAorICB7ICJGUUROIiwgODEsIE9UX0lOVEVSTkFMIH0sCisgIHsgImFnZW50LWlkIiwgODIsIE9UX0lOVEVSTkFMIH0sCisgIHsgImNsaWVudC1hcmNoIiwgOTMsIDIgfCBPVF9ERUMgfSwKKyAgeyAiY2xpZW50LWludGVyZmFjZS1pZCIsIDk0LCAwIH0sCisgIHsgImNsaWVudC1tYWNoaW5lLWlkIiwgOTcsIDAgfSwKKyAgeyAic3VibmV0LXNlbGVjdCIsIDExOCwgT1RfSU5URVJOQUwgfSwKKyAgeyAiZG9tYWluLXNlYXJjaCIsIDExOSwgT1RfUkZDMTAzNV9OQU1FIH0sCisgIHsgInNpcC1zZXJ2ZXIiLCAxMjAsIDAgfSwKKyAgeyAiY2xhc3NsZXNzLXN0YXRpYy1yb3V0ZSIsIDEyMSwgMCB9LAorICB7ICJ2ZW5kb3ItaWQtZW5jYXAiLCAxMjUsIDAgfSwKKyAgeyAic2VydmVyLWlwLWFkZHJlc3MiLCAyNTUsIE9UX0FERFJfTElTVCB9LCAvKiBzcGVjaWFsLCBpbnRlcm5hbCBvbmx5LCBzZXRzIHNpYWRkciAqLworICB7IE5VTEwsIDAsIDAgfQorfTsKKworI2lmZGVmIEhBVkVfREhDUDYKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0dGFiX3Qgb3B0dGFiNltdID0geworICB7ICJjbGllbnQtaWQiLCAxLCBPVF9JTlRFUk5BTCB9LAorICB7ICJzZXJ2ZXItaWQiLCAyLCBPVF9JTlRFUk5BTCB9LAorICB7ICJpYS1uYSIsIDMsIE9UX0lOVEVSTkFMIH0sCisgIHsgImlhLXRhIiwgNCwgT1RfSU5URVJOQUwgfSwKKyAgeyAiaWFhZGRyIiwgNSwgT1RfSU5URVJOQUwgfSwKKyAgeyAib3JvIiwgNiwgT1RfSU5URVJOQUwgfSwKKyAgeyAicHJlZmVyZW5jZSIsIDcsIE9UX0lOVEVSTkFMIHwgT1RfREVDIH0sCisgIHsgInVuaWNhc3QiLCAxMiwgT1RfSU5URVJOQUwgfSwKKyAgeyAic3RhdHVzIiwgMTMsIE9UX0lOVEVSTkFMIH0sCisgIHsgInJhcGlkLWNvbW1pdCIsIDE0LCBPVF9JTlRFUk5BTCB9LAorICB7ICJ1c2VyLWNsYXNzIiwgMTUsIE9UX0lOVEVSTkFMIHwgT1RfQ1NUUklORyB9LAorICB7ICJ2ZW5kb3ItY2xhc3MiLCAxNiwgT1RfSU5URVJOQUwgfCBPVF9DU1RSSU5HIH0sCisgIHsgInZlbmRvci1vcHRzIiwgMTcsIE9UX0lOVEVSTkFMIH0sCisgIHsgInNpcC1zZXJ2ZXItZG9tYWluIiwgMjEsICBPVF9SRkMxMDM1X05BTUUgfSwKKyAgeyAic2lwLXNlcnZlciIsIDIyLCBPVF9BRERSX0xJU1QgfSwKKyAgeyAiZG5zLXNlcnZlciIsIDIzLCBPVF9BRERSX0xJU1QgfSwKKyAgeyAiZG9tYWluLXNlYXJjaCIsIDI0LCBPVF9SRkMxMDM1X05BTUUgfSwKKyAgeyAibmlzLXNlcnZlciIsIDI3LCBPVF9BRERSX0xJU1QgfSwKKyAgeyAibmlzKy1zZXJ2ZXIiLCAyOCwgT1RfQUREUl9MSVNUIH0sCisgIHsgIm5pcy1kb21haW4iLCAyOSwgIE9UX1JGQzEwMzVfTkFNRSB9LAorICB7ICJuaXMrLWRvbWFpbiIsIDMwLCBPVF9SRkMxMDM1X05BTUUgfSwKKyAgeyAic250cC1zZXJ2ZXIiLCAzMSwgIE9UX0FERFJfTElTVCB9LAorICB7ICJpbmZvcm1hdGlvbi1yZWZyZXNoLXRpbWUiLCAzMiwgT1RfVElNRSB9LAorICB7ICJGUUROIiwgMzksIE9UX0lOVEVSTkFMIHwgT1RfUkZDMTAzNV9OQU1FIH0sCisgIHsgIm50cC1zZXJ2ZXIiLCA1NiwgIE9UX0FERFJfTElTVCB9LAorICB7ICJib290ZmlsZS11cmwiLCA1OSwgT1RfTkFNRSB9LAorICB7ICJib290ZmlsZS1wYXJhbSIsIDYwLCBPVF9DU1RSSU5HIH0sCisgIHsgTlVMTCwgMCwgMCB9Cit9OworI2VuZGlmCisKKworCit2b2lkIGRpc3BsYXlfb3B0cyh2b2lkKQoreworICBpbnQgaTsKKyAgCisgIHByaW50ZihfKCJLbm93biBESENQIG9wdGlvbnM6XG4iKSk7CisgIAorICBmb3IgKGkgPSAwOyBvcHR0YWJbaV0ubmFtZTsgaSsrKQorICAgIGlmICghKG9wdHRhYltpXS5zaXplICYgT1RfSU5URVJOQUwpKQorICAgICAgcHJpbnRmKCIlM2QgJXNcbiIsIG9wdHRhYltpXS52YWwsIG9wdHRhYltpXS5uYW1lKTsKK30KKworI2lmZGVmIEhBVkVfREhDUDYKK3ZvaWQgZGlzcGxheV9vcHRzNih2b2lkKQoreworICBpbnQgaTsKKyAgcHJpbnRmKF8oIktub3duIERIQ1B2NiBvcHRpb25zOlxuIikpOworICAKKyAgZm9yIChpID0gMDsgb3B0dGFiNltpXS5uYW1lOyBpKyspCisgICAgaWYgKCEob3B0dGFiNltpXS5zaXplICYgT1RfSU5URVJOQUwpKQorICAgICAgcHJpbnRmKCIlM2QgJXNcbiIsIG9wdHRhYjZbaV0udmFsLCBvcHR0YWI2W2ldLm5hbWUpOworfQorI2VuZGlmCisKK2ludCBsb29rdXBfZGhjcF9vcHQoaW50IHByb3QsIGNoYXIgKm5hbWUpCit7CisgIGNvbnN0IHN0cnVjdCBvcHR0YWJfdCAqdDsKKyAgaW50IGk7CisKKyAgKHZvaWQpcHJvdDsKKworI2lmZGVmIEhBVkVfREhDUDYKKyAgaWYgKHByb3QgPT0gQUZfSU5FVDYpCisgICAgdCA9IG9wdHRhYjY7CisgIGVsc2UKKyNlbmRpZgorICAgIHQgPSBvcHR0YWI7CisKKyAgZm9yIChpID0gMDsgdFtpXS5uYW1lOyBpKyspCisgICAgaWYgKHN0cmNhc2VjbXAodFtpXS5uYW1lLCBuYW1lKSA9PSAwKQorICAgICAgcmV0dXJuIHRbaV0udmFsOworICAKKyAgcmV0dXJuIC0xOworfQorCitpbnQgbG9va3VwX2RoY3BfbGVuKGludCBwcm90LCBpbnQgdmFsKQoreworICBjb25zdCBzdHJ1Y3Qgb3B0dGFiX3QgKnQ7CisgIGludCBpOworCisgICh2b2lkKXByb3Q7CisKKyNpZmRlZiBIQVZFX0RIQ1A2CisgIGlmIChwcm90ID09IEFGX0lORVQ2KQorICAgIHQgPSBvcHR0YWI2OworICBlbHNlCisjZW5kaWYKKyAgICB0ID0gb3B0dGFiOworCisgIGZvciAoaSA9IDA7IHRbaV0ubmFtZTsgaSsrKQorICAgIGlmICh2YWwgPT0gdFtpXS52YWwpCisgICAgICByZXR1cm4gdFtpXS5zaXplICYgfk9UX0RFQzsKKworICAgcmV0dXJuIDA7Cit9CisKK2NoYXIgKm9wdGlvbl9zdHJpbmcoaW50IHByb3QsIHVuc2lnbmVkIGludCBvcHQsIHVuc2lnbmVkIGNoYXIgKnZhbCwgaW50IG9wdF9sZW4sIGNoYXIgKmJ1ZiwgaW50IGJ1Zl9sZW4pCit7CisgIGludCBvLCBpLCBqLCBub2RlY29kZSA9IDA7CisgIGNvbnN0IHN0cnVjdCBvcHR0YWJfdCAqb3QgPSBvcHR0YWI7CisKKyNpZmRlZiBIQVZFX0RIQ1A2CisgIGlmIChwcm90ID09IEFGX0lORVQ2KQorICAgIG90ID0gb3B0dGFiNjsKKyNlbmRpZgorCisgIGZvciAobyA9IDA7IG90W29dLm5hbWU7IG8rKykKKyAgICBpZiAob3Rbb10udmFsID09IG9wdCkKKyAgICAgIHsKKwlpZiAoYnVmKQorCSAgeworCSAgICBtZW1zZXQoYnVmLCAwLCBidWZfbGVuKTsKKwkgICAgCisJICAgIGlmIChvdFtvXS5zaXplICYgT1RfQUREUl9MSVNUKSAKKwkgICAgICB7CisJCXN0cnVjdCBhbGxfYWRkciBhZGRyOworCQlpbnQgYWRkcl9sZW4gPSBJTkFERFJTWjsKKworI2lmZGVmIEhBVkVfREhDUDYKKwkJaWYgKHByb3QgPT0gQUZfSU5FVDYpCisJCSAgYWRkcl9sZW4gPSBJTjZBRERSU1o7CisjZW5kaWYKKwkJZm9yIChidWZbMF09IDAsIGkgPSAwOyBpIDw9IG9wdF9sZW4gLSBhZGRyX2xlbjsgaSArPSBhZGRyX2xlbikgCisJCSAgeworCQkgICAgaWYgKGkgIT0gMCkKKwkJICAgICAgc3RybmNhdChidWYsICIsICIsIGJ1Zl9sZW4gLSBzdHJsZW4oYnVmKSk7CisJCSAgICAvKiBhbGlnbiAqLworCQkgICAgbWVtY3B5KCZhZGRyLCAmdmFsW2ldLCBhZGRyX2xlbik7IAorCQkgICAgaW5ldF9udG9wKHByb3QsICZ2YWxbaV0sIGRhZW1vbi0+YWRkcmJ1ZmYsIEFERFJTVFJMRU4pOworCQkgICAgc3RybmNhdChidWYsIGRhZW1vbi0+YWRkcmJ1ZmYsIGJ1Zl9sZW4gLSBzdHJsZW4oYnVmKSk7CisJCSAgfQorCSAgICAgIH0KKwkgICAgZWxzZSBpZiAob3Rbb10uc2l6ZSAmIE9UX05BTUUpCisJCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgb3B0X2xlbiAmJiBqIDwgYnVmX2xlbiA7IGkrKykKKwkJICB7CisJCSAgICBjaGFyIGMgPSB2YWxbaV07CisJCSAgICBpZiAoaXNwcmludCgoaW50KWMpKQorCQkgICAgICBidWZbaisrXSA9IGM7CisJCSAgfQorI2lmZGVmIEhBVkVfREhDUDYKKwkgICAgLyogV2UgZG9uJ3QgaGFuZGxlIGNvbXByZXNzZWQgcmZjMTAzNSBuYW1lcywgc28gbm8gZ29vZCBpbiBJUHY0IGxhbmQgKi8KKwkgICAgZWxzZSBpZiAoKG90W29dLnNpemUgJiBPVF9SRkMxMDM1X05BTUUpICYmIHByb3QgPT0gQUZfSU5FVDYpCisJICAgICAgeworCQlpID0gMCwgaiA9IDA7CisJCXdoaWxlIChpIDwgb3B0X2xlbiAmJiB2YWxbaV0gIT0gMCkKKwkJICB7CisJCSAgICBpbnQgaywgbCA9IGkgKyB2YWxbaV0gKyAxOworCQkgICAgZm9yIChrID0gaSArIDE7IGsgPCBvcHRfbGVuICYmIGsgPCBsICYmIGogPCBidWZfbGVuIDsgaysrKQorCQkgICAgIHsKKwkJICAgICAgIGNoYXIgYyA9IHZhbFtrXTsKKwkJICAgICAgIGlmIChpc3ByaW50KChpbnQpYykpCisJCQkgYnVmW2orK10gPSBjOworCQkgICAgIH0KKwkJICAgIGkgPSBsOworCQkgICAgaWYgKHZhbFtpXSAhPSAwICYmIGogPCBidWZfbGVuKQorCQkgICAgICBidWZbaisrXSA9ICcuJzsKKwkJICB9CisJICAgICAgfQorCSAgICBlbHNlIGlmICgob3Rbb10uc2l6ZSAmIE9UX0NTVFJJTkcpKQorCSAgICAgIHsKKwkJaW50IGssIGxlbjsKKwkJdW5zaWduZWQgY2hhciAqcDsKKworCQlpID0gMCwgaiA9IDA7CisJCXdoaWxlICgxKQorCQkgIHsKKwkJICAgIHAgPSAmdmFsW2ldOworCQkgICAgR0VUU0hPUlQobGVuLCBwKTsKKwkJICAgIGZvciAoayA9IDA7IGsgPCBsZW4gJiYgaiA8IGJ1Zl9sZW47IGsrKykKKwkJICAgICAgeworCQkgICAgICAgY2hhciBjID0gKnArKzsKKwkJICAgICAgIGlmIChpc3ByaW50KChpbnQpYykpCisJCQkgYnVmW2orK10gPSBjOworCQkgICAgIH0KKwkJICAgIGkgKz0gbGVuICsyOworCQkgICAgaWYgKGkgPj0gb3B0X2xlbikKKwkJICAgICAgYnJlYWs7CisKKwkJICAgIGlmIChqIDwgYnVmX2xlbikKKwkJICAgICAgYnVmW2orK10gPSAnLCc7CisJCSAgfQorCSAgICAgIH0JICAgICAgCisjZW5kaWYKKwkgICAgZWxzZSBpZiAoKG90W29dLnNpemUgJiAoT1RfREVDIHwgT1RfVElNRSkpICYmIG9wdF9sZW4gIT0gMCkKKwkgICAgICB7CisJCXVuc2lnbmVkIGludCBkZWMgPSAwOworCQkKKwkJZm9yIChpID0gMDsgaSA8IG9wdF9sZW47IGkrKykKKwkJICBkZWMgPSAoZGVjIDw8IDgpIHwgdmFsW2ldOyAKKworCQlpZiAob3Rbb10uc2l6ZSAmIE9UX1RJTUUpCisJCSAgcHJldHR5cHJpbnRfdGltZShidWYsIGRlYyk7CisJCWVsc2UKKwkJICBzcHJpbnRmKGJ1ZiwgIiV1IiwgZGVjKTsKKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICBub2RlY29kZSA9IDE7CisJICB9CisJYnJlYWs7CisgICAgICB9CisKKyAgaWYgKG9wdF9sZW4gIT0gMCAmJiBidWYgJiYgKCFvdFtvXS5uYW1lIHx8IG5vZGVjb2RlKSkKKyAgICB7CisgICAgICBpbnQgdHJ1bmMgID0gMDsKKyAgICAgIGlmIChvcHRfbGVuID4gMTQpCisJeworCSAgdHJ1bmMgPSAxOworCSAgb3B0X2xlbiA9IDE0OworCX0KKyAgICAgIHByaW50X21hYyhidWYsIHZhbCwgb3B0X2xlbik7CisgICAgICBpZiAodHJ1bmMpCisJc3RybmNhdChidWYsICIuLi4iLCBidWZfbGVuIC0gc3RybGVuKGJ1ZikpOworICAgIAorCisgICAgfQorCisgIHJldHVybiBvdFtvXS5uYW1lID8gb3Rbb10ubmFtZSA6ICIiOworCit9CisKK3ZvaWQgbG9nX2NvbnRleHQoaW50IGZhbWlseSwgc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCkKK3sKKyAgLyogQ2Fubm90IHVzZSBkaGNwX2J1ZmYqIGZvciBSQSBjb250ZXh0cyAqLworCisgIHZvaWQgKnN0YXJ0ID0gJmNvbnRleHQtPnN0YXJ0OworICB2b2lkICplbmQgPSAmY29udGV4dC0+ZW5kOworICBjaGFyICp0ZW1wbGF0ZSA9ICIiLCAqcCA9IGRhZW1vbi0+bmFtZWJ1ZmY7CisgIAorICAqcCA9IDA7CisgICAgCisjaWZkZWYgSEFWRV9ESENQNgorICBpZiAoZmFtaWx5ID09IEFGX0lORVQ2KQorICAgIHsKKyAgICAgIHN0cnVjdCBpbjZfYWRkciBzdWJuZXQgPSBjb250ZXh0LT5zdGFydDY7CisgICAgICBpZiAoIShjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfVEVNUExBVEUpKQorCXNldGFkZHI2cGFydCgmc3VibmV0LCAwKTsKKyAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgJnN1Ym5ldCwgZGFlbW9uLT5hZGRyYnVmZiwgQUREUlNUUkxFTik7IAorICAgICAgc3RhcnQgPSAmY29udGV4dC0+c3RhcnQ2OworICAgICAgZW5kID0gJmNvbnRleHQtPmVuZDY7CisgICAgfQorI2VuZGlmCisKKyAgaWYgKGZhbWlseSAhPSBBRl9JTkVUICYmIChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfREVQUkVDQVRFKSkKKyAgICBzdHJjcHkoZGFlbW9uLT5uYW1lYnVmZiwgXygiLCBwcmVmaXggZGVwcmVjYXRlZCIpKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIHAgKz0gc3ByaW50ZihwLCBfKCIsIGxlYXNlIHRpbWUgIikpOworICAgICAgcHJldHR5cHJpbnRfdGltZShwLCBjb250ZXh0LT5sZWFzZV90aW1lKTsKKyAgICAgIHAgKz0gc3RybGVuKHApOworICAgIH0JCisKKyNpZmRlZiBIQVZFX0RIQ1A2CisgIGlmIChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfQ09OU1RSVUNURUQpCisgICAgeworICAgICAgY2hhciBpZnJuX25hbWVbSUZOQU1TSVpdOworICAgICAgCisgICAgICB0ZW1wbGF0ZSA9IHA7CisgICAgICBwICs9IHNwcmludGYocCwgIiwgIik7CisgICAgICAKKyAgICAgIGlmIChpbmRleHRvbmFtZShkYWVtb24tPmljbXA2ZmQsIGNvbnRleHQtPmlmX2luZGV4LCBpZnJuX25hbWUpKQorCXNwcmludGYocCwgIiVzIGZvciAlcyIsIChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfT0xEKSA/ICJvbGQgcHJlZml4IiA6ICJjb25zdHJ1Y3RlZCIsIGlmcm5fbmFtZSk7CisgICAgfQorICBlbHNlIGlmIChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfVEVNUExBVEUgJiYgIShjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfUkFfU1RBVEVMRVNTKSkKKyAgICB7CisgICAgICB0ZW1wbGF0ZSA9IHA7CisgICAgICBwICs9IHNwcmludGYocCwgIiwgIik7CisgICAgICAKKyAgICAgIHNwcmludGYocCwgInRlbXBsYXRlIGZvciAlcyIsIGNvbnRleHQtPnRlbXBsYXRlX2ludGVyZmFjZSk7ICAKKyAgICB9CisjZW5kaWYKKyAgICAgCisgIGlmICghKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9PTEQpICYmCisgICAgICAoKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9ESENQKSB8fCBmYW1pbHkgPT0gQUZfSU5FVCkpIAorICAgIHsKKyNpZmRlZiBIQVZFX0RIQ1A2CisgICAgICBpZiAoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX1JBX1NUQVRFTEVTUykKKwl7CisJICBpZiAoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX1RFTVBMQVRFKQorCSAgICBzdHJuY3B5KGRhZW1vbi0+ZGhjcF9idWZmLCBjb250ZXh0LT50ZW1wbGF0ZV9pbnRlcmZhY2UsIDI1Nik7CisJICBlbHNlCisJICAgIHN0cmNweShkYWVtb24tPmRoY3BfYnVmZiwgZGFlbW9uLT5hZGRyYnVmZik7CisJfQorICAgICAgZWxzZSAKKyNlbmRpZgorCWluZXRfbnRvcChmYW1pbHksIHN0YXJ0LCBkYWVtb24tPmRoY3BfYnVmZiwgMjU2KTsKKyAgICAgIGluZXRfbnRvcChmYW1pbHksIGVuZCwgZGFlbW9uLT5kaGNwX2J1ZmYzLCAyNTYpOworICAgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgCisJCShjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfUkFfU1RBVEVMRVNTKSA/IAorCQlfKCIlcyBzdGF0ZWxlc3Mgb24gJXMlLjBzJS4wcyVzIikgOgorCQkoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX1NUQVRJQykgPyAKKwkJXygiJXMsIHN0YXRpYyBsZWFzZXMgb25seSBvbiAlLjBzJXMlcyUuMHMiKSA6CisJCShjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfUFJPWFkpID8KKwkJXygiJXMsIHByb3h5IG9uIHN1Ym5ldCAlLjBzJXMlLjBzJS4wcyIpIDoKKwkJXygiJXMsIElQIHJhbmdlICVzIC0tICVzJXMlLjBzIiksCisJCShmYW1pbHkgIT0gQUZfSU5FVCkgPyAiREhDUHY2IiA6ICJESENQIiwKKwkJZGFlbW9uLT5kaGNwX2J1ZmYsIGRhZW1vbi0+ZGhjcF9idWZmMywgZGFlbW9uLT5uYW1lYnVmZiwgdGVtcGxhdGUpOworICAgIH0KKyAgCisjaWZkZWYgSEFWRV9ESENQNgorICBpZiAoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX1RFTVBMQVRFKQorICAgIHsKKyAgICAgIHN0cmNweShkYWVtb24tPmFkZHJidWZmLCBjb250ZXh0LT50ZW1wbGF0ZV9pbnRlcmZhY2UpOworICAgICAgdGVtcGxhdGUgPSAiIjsKKyAgICB9CisKKyAgaWYgKChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfUkFfTkFNRSkgJiYgIShjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfT0xEKSkKKyAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCJESENQdjQtZGVyaXZlZCBJUHY2IG5hbWVzIG9uICVzJXMiKSwgZGFlbW9uLT5hZGRyYnVmZiwgdGVtcGxhdGUpOworICAKKyAgaWYgKChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfUkEpIHx8IChvcHRpb25fYm9vbChPUFRfUkEpICYmIChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfREhDUCkgJiYgZmFtaWx5ID09IEFGX0lORVQ2KSkgCisgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgXygicm91dGVyIGFkdmVydGlzZW1lbnQgb24gJXMlcyIpLCBkYWVtb24tPmFkZHJidWZmLCB0ZW1wbGF0ZSk7CisjZW5kaWYKKworfQorCit2b2lkIGxvZ19yZWxheShpbnQgZmFtaWx5LCBzdHJ1Y3QgZGhjcF9yZWxheSAqcmVsYXkpCit7CisgIGluZXRfbnRvcChmYW1pbHksICZyZWxheS0+bG9jYWwsIGRhZW1vbi0+YWRkcmJ1ZmYsIEFERFJTVFJMRU4pOworICBpbmV0X250b3AoZmFtaWx5LCAmcmVsYXktPnNlcnZlciwgZGFlbW9uLT5uYW1lYnVmZiwgQUREUlNUUkxFTik7IAorCisgIGlmIChyZWxheS0+aW50ZXJmYWNlKQorICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sIF8oIkRIQ1AgcmVsYXkgZnJvbSAlcyB0byAlcyB2aWEgJXMiKSwgZGFlbW9uLT5hZGRyYnVmZiwgZGFlbW9uLT5uYW1lYnVmZiwgcmVsYXktPmludGVyZmFjZSk7CisgIGVsc2UKKyAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCJESENQIHJlbGF5IGZyb20gJXMgdG8gJXMiKSwgZGFlbW9uLT5hZGRyYnVmZiwgZGFlbW9uLT5uYW1lYnVmZik7Cit9CisgICAKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2RoY3AtcHJvdG9jb2wuaCBiL3NyYy9kaGNwLXByb3RvY29sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMwOTYxNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9kaGNwLXByb3RvY29sLmgKQEAgLTAsMCArMSw5NiBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxNCBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisjZGVmaW5lIERIQ1BfU0VSVkVSX1BPUlQgNjcKKyNkZWZpbmUgREhDUF9DTElFTlRfUE9SVCA2OAorI2RlZmluZSBESENQX1NFUlZFUl9BTFRQT1JUIDEwNjcKKyNkZWZpbmUgREhDUF9DTElFTlRfQUxUUE9SVCAxMDY4CisjZGVmaW5lIFBYRV9QT1JUIDQwMTEKKworI2RlZmluZSBCT09UUkVRVUVTVCAgICAgICAgICAgICAgMQorI2RlZmluZSBCT09UUkVQTFkgICAgICAgICAgICAgICAgMgorI2RlZmluZSBESENQX0NPT0tJRSAgICAgICAgICAgICAgMHg2MzgyNTM2MworCisvKiBUaGUgTGludXggaW4ta2VybmVsIERIQ1AgY2xpZW50IHNpbGVudGx5IGlnbm9yZXMgYW55IHBhY2tldCAKKyAgIHNtYWxsZXIgdGhhbiB0aGlzLiBTaWdoLi4uLi4uLi4uLi4gICAqLworI2RlZmluZSBNSU5fUEFDS0VUU1ogICAgICAgICAgICAgMzAwCisKKyNkZWZpbmUgT1BUSU9OX1BBRCAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgT1BUSU9OX05FVE1BU0sgICAgICAgICAgIDEKKyNkZWZpbmUgT1BUSU9OX1JPVVRFUiAgICAgICAgICAgIDMKKyNkZWZpbmUgT1BUSU9OX0ROU1NFUlZFUiAgICAgICAgIDYKKyNkZWZpbmUgT1BUSU9OX0hPU1ROQU1FICAgICAgICAgIDEyCisjZGVmaW5lIE9QVElPTl9ET01BSU5OQU1FICAgICAgICAxNQorI2RlZmluZSBPUFRJT05fQlJPQURDQVNUICAgICAgICAgMjgKKyNkZWZpbmUgT1BUSU9OX1ZFTkRPUl9DTEFTU19PUFQgIDQzCisjZGVmaW5lIE9QVElPTl9SRVFVRVNURURfSVAgICAgICA1MCAKKyNkZWZpbmUgT1BUSU9OX0xFQVNFX1RJTUUgICAgICAgIDUxCisjZGVmaW5lIE9QVElPTl9PVkVSTE9BRCAgICAgICAgICA1MgorI2RlZmluZSBPUFRJT05fTUVTU0FHRV9UWVBFICAgICAgNTMKKyNkZWZpbmUgT1BUSU9OX1NFUlZFUl9JREVOVElGSUVSIDU0CisjZGVmaW5lIE9QVElPTl9SRVFVRVNURURfT1BUSU9OUyA1NQorI2RlZmluZSBPUFRJT05fTUVTU0FHRSAgICAgICAgICAgNTYKKyNkZWZpbmUgT1BUSU9OX01BWE1FU1NBR0UgICAgICAgIDU3CisjZGVmaW5lIE9QVElPTl9UMSAgICAgICAgICAgICAgICA1OAorI2RlZmluZSBPUFRJT05fVDIgICAgICAgICAgICAgICAgNTkKKyNkZWZpbmUgT1BUSU9OX1ZFTkRPUl9JRCAgICAgICAgIDYwCisjZGVmaW5lIE9QVElPTl9DTElFTlRfSUQgICAgICAgICA2MQorI2RlZmluZSBPUFRJT05fU05BTUUgICAgICAgICAgICAgNjYKKyNkZWZpbmUgT1BUSU9OX0ZJTEVOQU1FICAgICAgICAgIDY3CisjZGVmaW5lIE9QVElPTl9VU0VSX0NMQVNTICAgICAgICA3NworI2RlZmluZSBPUFRJT05fQ0xJRU5UX0ZRRE4gICAgICAgODEKKyNkZWZpbmUgT1BUSU9OX0FHRU5UX0lEICAgICAgICAgIDgyCisjZGVmaW5lIE9QVElPTl9BUkNIICAgICAgICAgICAgICA5MworI2RlZmluZSBPUFRJT05fUFhFX1VVSUQgICAgICAgICAgOTcKKyNkZWZpbmUgT1BUSU9OX1NVQk5FVF9TRUxFQ1QgICAgIDExOAorI2RlZmluZSBPUFRJT05fRE9NQUlOX1NFQVJDSCAgICAgMTE5CisjZGVmaW5lIE9QVElPTl9TSVBfU0VSVkVSICAgICAgICAxMjAKKyNkZWZpbmUgT1BUSU9OX1ZFTkRPUl9JREVOVCAgICAgIDEyNAorI2RlZmluZSBPUFRJT05fVkVORE9SX0lERU5UX09QVCAgMTI1CisjZGVmaW5lIE9QVElPTl9FTkQgICAgICAgICAgICAgICAyNTUKKworI2RlZmluZSBTVUJPUFRfQ0lSQ1VJVF9JRCAgICAgICAgMQorI2RlZmluZSBTVUJPUFRfUkVNT1RFX0lEICAgICAgICAgMgorI2RlZmluZSBTVUJPUFRfU1VCTkVUX1NFTEVDVCAgICAgNSAgICAgLyogUkZDIDM1MjcgKi8KKyNkZWZpbmUgU1VCT1BUX1NVQlNDUl9JRCAgICAgICAgIDYgICAgIC8qIFJGQyAzMzkzICovCisjZGVmaW5lIFNVQk9QVF9TRVJWRVJfT1IgICAgICAgICAxMSAgICAvKiBSRkMgNTEwNyAqLworCisjZGVmaW5lIFNVQk9QVF9QWEVfQk9PVF9JVEVNICAgICA3MSAgICAvKiBQWEUgc3RhbmRhcmQgKi8KKyNkZWZpbmUgU1VCT1BUX1BYRV9ESVNDT1ZFUlkgICAgIDYKKyNkZWZpbmUgU1VCT1BUX1BYRV9TRVJWRVJTICAgICAgIDgKKyNkZWZpbmUgU1VCT1BUX1BYRV9NRU5VICAgICAgICAgIDkKKyNkZWZpbmUgU1VCT1BUX1BYRV9NRU5VX1BST01QVCAgIDEwCisKKyNkZWZpbmUgREhDUERJU0NPVkVSICAgICAgICAgICAgIDEKKyNkZWZpbmUgREhDUE9GRkVSICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgREhDUFJFUVVFU1QgICAgICAgICAgICAgIDMKKyNkZWZpbmUgREhDUERFQ0xJTkUgICAgICAgICAgICAgIDQKKyNkZWZpbmUgREhDUEFDSyAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgREhDUE5BSyAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgREhDUFJFTEVBU0UgICAgICAgICAgICAgIDcKKyNkZWZpbmUgREhDUElORk9STSAgICAgICAgICAgICAgIDgKKworI2RlZmluZSBCUkRCQU5EX0ZPUlVNX0lBTkEgICAgICAgMzU2MSAvKiBCcm9hZGJhbmQgZm9ydW0gSUFOQSBlbnRlcnByaXNlICovCisKKyNkZWZpbmUgREhDUF9DSEFERFJfTUFYIDE2CisKK3N0cnVjdCBkaGNwX3BhY2tldCB7CisgIHU4IG9wLCBodHlwZSwgaGxlbiwgaG9wczsKKyAgdTMyIHhpZDsKKyAgdTE2IHNlY3MsIGZsYWdzOworICBzdHJ1Y3QgaW5fYWRkciBjaWFkZHIsIHlpYWRkciwgc2lhZGRyLCBnaWFkZHI7CisgIHU4IGNoYWRkcltESENQX0NIQUREUl9NQVhdLCBzbmFtZVs2NF0sIGZpbGVbMTI4XTsKKyAgdTggb3B0aW9uc1szMTJdOworfTsKZGlmZiAtLWdpdCBhL3NyYy9kaGNwLmMgYi9zcmMvZGhjcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhY2YyYzQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZGhjcC5jCkBAIC0wLDAgKzEsMTAyNCBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxNCBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisKKyNpZmRlZiBIQVZFX0RIQ1AKKworc3RydWN0IGlmYWNlX3BhcmFtIHsKKyAgc3RydWN0IGRoY3BfY29udGV4dCAqY3VycmVudDsKKyAgc3RydWN0IGRoY3BfcmVsYXkgKnJlbGF5OworICBzdHJ1Y3QgaW5fYWRkciByZWxheV9sb2NhbDsKKyAgaW50IGluZDsKK307CisKK3N0cnVjdCBtYXRjaF9wYXJhbSB7CisgIGludCBpbmQsIG1hdGNoZWQ7CisgIHN0cnVjdCBpbl9hZGRyIG5ldG1hc2ssIGJyb2FkY2FzdCwgYWRkcjsKK307CisKK3N0YXRpYyBpbnQgY29tcGxldGVfY29udGV4dChzdHJ1Y3QgaW5fYWRkciBsb2NhbCwgaW50IGlmX2luZGV4LCBjaGFyICpsYWJlbCwKKwkJCSAgICBzdHJ1Y3QgaW5fYWRkciBuZXRtYXNrLCBzdHJ1Y3QgaW5fYWRkciBicm9hZGNhc3QsIHZvaWQgKnZwYXJhbSk7CitzdGF0aWMgaW50IGNoZWNrX2xpc3Rlbl9hZGRycyhzdHJ1Y3QgaW5fYWRkciBsb2NhbCwgaW50IGlmX2luZGV4LCBjaGFyICpsYWJlbCwKKwkJCSAgICAgIHN0cnVjdCBpbl9hZGRyIG5ldG1hc2ssIHN0cnVjdCBpbl9hZGRyIGJyb2FkY2FzdCwgdm9pZCAqdnBhcmFtKTsKK3N0YXRpYyBpbnQgcmVsYXlfdXBzdHJlYW00KHN0cnVjdCBkaGNwX3JlbGF5ICpyZWxheSwgc3RydWN0IGRoY3BfcGFja2V0ICptZXNzLCBzaXplX3Qgc3osIGludCBpZmFjZV9pbmRleCk7CitzdGF0aWMgc3RydWN0IGRoY3BfcmVsYXkgKnJlbGF5X3JlcGx5NChzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIGNoYXIgKmFycml2YWxfaW50ZXJmYWNlKTsKKworc3RhdGljIGludCBtYWtlX2ZkKGludCBwb3J0KQoreworICBpbnQgZmQgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApOworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2FkZHI7CisgIGludCBvbmVvcHQgPSAxOworI2lmIGRlZmluZWQoSVBfTVRVX0RJU0NPVkVSKSAmJiBkZWZpbmVkKElQX1BNVFVESVNDX0RPTlQpCisgIGludCBtdHUgPSBJUF9QTVRVRElTQ19ET05UOworI2VuZGlmCisjaWYgZGVmaW5lZChJUF9UT1MpICYmIGRlZmluZWQoSVBUT1NfQ0xBU1NfQ1M2KQorICBpbnQgdG9zID0gSVBUT1NfQ0xBU1NfQ1M2OworI2VuZGlmCisKKyAgaWYgKGZkID09IC0xKQorICAgIGRpZSAoXygiY2Fubm90IGNyZWF0ZSBESENQIHNvY2tldDogJXMiKSwgTlVMTCwgRUNfQkFETkVUKTsKKyAgCisgIGlmICghZml4X2ZkKGZkKSB8fAorI2lmIGRlZmluZWQoSVBfTVRVX0RJU0NPVkVSKSAmJiBkZWZpbmVkKElQX1BNVFVESVNDX0RPTlQpCisgICAgICBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQLCBJUF9NVFVfRElTQ09WRVIsICZtdHUsIHNpemVvZihtdHUpKSA9PSAtMSB8fAorI2VuZGlmCisjaWYgZGVmaW5lZChJUF9UT1MpICYmIGRlZmluZWQoSVBUT1NfQ0xBU1NfQ1M2KQorICAgICAgc2V0c29ja29wdChmZCwgSVBQUk9UT19JUCwgSVBfVE9TLCAmdG9zLCBzaXplb2YodG9zKSkgPT0gLTEgfHwKKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9MSU5VWF9ORVRXT1JLKQorICAgICAgc2V0c29ja29wdChmZCwgSVBQUk9UT19JUCwgSVBfUEtUSU5GTywgJm9uZW9wdCwgc2l6ZW9mKG9uZW9wdCkpID09IC0xIHx8CisjZWxzZQorICAgICAgc2V0c29ja29wdChmZCwgSVBQUk9UT19JUCwgSVBfUkVDVklGLCAmb25lb3B0LCBzaXplb2Yob25lb3B0KSkgPT0gLTEgfHwKKyNlbmRpZgorICAgICAgc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fQlJPQURDQVNULCAmb25lb3B0LCBzaXplb2Yob25lb3B0KSkgPT0gLTEpICAKKyAgICBkaWUoXygiZmFpbGVkIHRvIHNldCBvcHRpb25zIG9uIERIQ1Agc29ja2V0OiAlcyIpLCBOVUxMLCBFQ19CQURORVQpOworICAKKyAgLyogV2hlbiBiaW5kLWludGVyZmFjZXMgaXMgc2V0LCB0aGVyZSBtaWdodCBiZSBtb3JlIHRoYW4gb25lIGRubXNhc3EKKyAgICAgaW5zdGFuY2UgYmluZGluZyBwb3J0IDY3LiBUaGF0J3MgT0sgaWYgdGhleSBzZXJ2ZSBkaWZmZXJlbnQgbmV0d29ya3MuCisgICAgIE5lZWQgdG8gc2V0IFJFVVNFQUREUnxSRVVTRVBPUlQgdG8gbWFrZSB0aGlzIHBvc2libGUuCisgICAgIEhhbmRsZSB0aGUgY2FzZSB0aGF0IFJFVVNFUE9SVCBpcyBkZWZpbmVkLCBidXQgdGhlIGtlcm5lbCBkb2Vzbid0IAorICAgICBzdXBwb3J0IGl0LiBUaGlzIGhhbmRsZXMgdGhlIGludHJvZHVjdGlvbiBvZiBSRVVTRVBPUlQgb24gTGludXguICovCisgIGlmIChvcHRpb25fYm9vbChPUFRfTk9XSUxEKSB8fCBvcHRpb25fYm9vbChPUFRfQ0xFVkVSQklORCkpCisgICAgeworICAgICAgaW50IHJjID0gMDsKKworI2lmZGVmIFNPX1JFVVNFUE9SVAorICAgICAgaWYgKChyYyA9IHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFUE9SVCwgJm9uZW9wdCwgc2l6ZW9mKG9uZW9wdCkpKSA9PSAtMSAmJiAKKwkgIGVycm5vID09IEVOT1BST1RPT1BUKQorCXJjID0gMDsKKyNlbmRpZgorICAgICAgCisgICAgICBpZiAocmMgIT0gLTEpCisJcmMgPSBzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsICZvbmVvcHQsIHNpemVvZihvbmVvcHQpKTsKKyAgICAgIAorICAgICAgaWYgKHJjID09IC0xKQorCWRpZShfKCJmYWlsZWQgdG8gc2V0IFNPX1JFVVNFe0FERFJ8UE9SVH0gb24gREhDUCBzb2NrZXQ6ICVzIiksIE5VTEwsIEVDX0JBRE5FVCk7CisgICAgfQorICAKKyAgbWVtc2V0KCZzYWRkciwgMCwgc2l6ZW9mKHNhZGRyKSk7CisgIHNhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICBzYWRkci5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworICBzYWRkci5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgIHNhZGRyLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCisgIGlmIChiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkpCisgICAgZGllKF8oImZhaWxlZCB0byBiaW5kIERIQ1Agc2VydmVyIHNvY2tldDogJXMiKSwgTlVMTCwgRUNfQkFETkVUKTsKKworICByZXR1cm4gZmQ7Cit9CisKK3ZvaWQgZGhjcF9pbml0KHZvaWQpCit7CisjaWYgZGVmaW5lZChIQVZFX0JTRF9ORVRXT1JLKQorICBpbnQgb25lb3B0ID0gMTsKKyNlbmRpZgorCisgIGRhZW1vbi0+ZGhjcGZkID0gbWFrZV9mZChkYWVtb24tPmRoY3Bfc2VydmVyX3BvcnQpOworICBpZiAoZGFlbW9uLT5lbmFibGVfcHhlKQorICAgIGRhZW1vbi0+cHhlZmQgPSBtYWtlX2ZkKFBYRV9QT1JUKTsKKyAgZWxzZQorICAgIGRhZW1vbi0+cHhlZmQgPSAtMTsKKworI2lmIGRlZmluZWQoSEFWRV9CU0RfTkVUV09SSykKKyAgLyogV2hlbiB3ZSdyZSBub3QgdXNpbmcgY2FwYWJpbGl0aWVzLCB3ZSBuZWVkIHRvIGRvIHRoaXMgaGVyZSBiZWZvcmUKKyAgICAgd2UgZHJvcCByb290LiBBbHNvLCBzZXQgYnVmZmVyIHNpemUgc21hbGwsIHRvIGF2b2lkIHdhc3RpbmcKKyAgICAga2VybmVsIGJ1ZmZlcnMgKi8KKyAgCisgIGlmIChvcHRpb25fYm9vbChPUFRfTk9fUElORykpCisgICAgZGFlbW9uLT5kaGNwX2ljbXBfZmQgPSAtMTsKKyAgZWxzZSBpZiAoKGRhZW1vbi0+ZGhjcF9pY21wX2ZkID0gbWFrZV9pY21wX3NvY2soKSkgPT0gLTEgfHwKKwkgICBzZXRzb2Nrb3B0KGRhZW1vbi0+ZGhjcF9pY21wX2ZkLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsICZvbmVvcHQsIHNpemVvZihvbmVvcHQpKSA9PSAtMSApCisgICAgZGllKF8oImNhbm5vdCBjcmVhdGUgSUNNUCByYXcgc29ja2V0OiAlcy4iKSwgTlVMTCwgRUNfQkFETkVUKTsKKyAgCisgIC8qIE1ha2UgQlBGIHJhdyBzZW5kIHNvY2tldCAqLworICBpbml0X2JwZigpOworI2VuZGlmICAKK30KKwordm9pZCBkaGNwX3BhY2tldCh0aW1lX3Qgbm93LCBpbnQgcHhlX2ZkKQoreworICBpbnQgZmQgPSBweGVfZmQgPyBkYWVtb24tPnB4ZWZkIDogZGFlbW9uLT5kaGNwZmQ7CisgIHN0cnVjdCBkaGNwX3BhY2tldCAqbWVzczsKKyAgc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dDsKKyAgc3RydWN0IGRoY3BfcmVsYXkgKnJlbGF5OworICBpbnQgaXNfcmVsYXlfcmVwbHkgPSAwOworICBzdHJ1Y3QgaW5hbWUgKnRtcDsKKyAgc3RydWN0IGlmcmVxIGlmcjsKKyAgc3RydWN0IG1zZ2hkciBtc2c7CisgIHN0cnVjdCBzb2NrYWRkcl9pbiBkZXN0OworICBzdHJ1Y3QgY21zZ2hkciAqY21wdHI7CisgIHN0cnVjdCBpb3ZlYyBpb3Y7CisgIHNzaXplX3Qgc3o7IAorICBpbnQgaWZhY2VfaW5kZXggPSAwLCB1bmljYXN0X2Rlc3QgPSAwLCBpc19pbmZvcm0gPSAwOworICBzdHJ1Y3QgaW5fYWRkciBpZmFjZV9hZGRyOworICBzdHJ1Y3QgaWZhY2VfcGFyYW0gcGFybTsKKyNpZmRlZiBIQVZFX0xJTlVYX05FVFdPUksKKyAgc3RydWN0IGFycHJlcSBhcnBfcmVxOworI2VuZGlmCisgIAorICB1bmlvbiB7CisgICAgc3RydWN0IGNtc2doZHIgYWxpZ247IC8qIHRoaXMgZW5zdXJlcyBhbGlnbm1lbnQgKi8KKyNpZiBkZWZpbmVkKEhBVkVfTElOVVhfTkVUV09SSykKKyAgICBjaGFyIGNvbnRyb2xbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IGluX3BrdGluZm8pKV07CisjZWxpZiBkZWZpbmVkKEhBVkVfU09MQVJJU19ORVRXT1JLKQorICAgIGNoYXIgY29udHJvbFtDTVNHX1NQQUNFKHNpemVvZih1bnNpZ25lZCBpbnQpKV07CisjZWxpZiBkZWZpbmVkKEhBVkVfQlNEX05FVFdPUkspIAorICAgIGNoYXIgY29udHJvbFtDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfZGwpKV07CisjZW5kaWYKKyAgfSBjb250cm9sX3U7CisgIHN0cnVjdCBkaGNwX2JyaWRnZSAqYnJpZGdlLCAqYWxpYXM7CisKKyAgbXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNvbnRyb2xfdSk7CisgIG1zZy5tc2dfY29udHJvbCA9IGNvbnRyb2xfdS5jb250cm9sOworICBtc2cubXNnX25hbWUgPSAmZGVzdDsKKyAgbXNnLm1zZ19uYW1lbGVuID0gc2l6ZW9mKGRlc3QpOworICBtc2cubXNnX2lvdiA9ICZkYWVtb24tPmRoY3BfcGFja2V0OworICBtc2cubXNnX2lvdmxlbiA9IDE7CisgIAorICBpZiAoKHN6ID0gcmVjdl9kaGNwX3BhY2tldChmZCwgJm1zZykpID09IC0xIHx8IAorICAgICAgKHN6IDwgKHNzaXplX3QpKHNpemVvZigqbWVzcykgLSBzaXplb2YobWVzcy0+b3B0aW9ucykpKSkgCisgICAgcmV0dXJuOworICAgIAorICAjaWYgZGVmaW5lZCAoSEFWRV9MSU5VWF9ORVRXT1JLKQorICBpZiAobXNnLm1zZ19jb250cm9sbGVuID49IHNpemVvZihzdHJ1Y3QgY21zZ2hkcikpCisgICAgZm9yIChjbXB0ciA9IENNU0dfRklSU1RIRFIoJm1zZyk7IGNtcHRyOyBjbXB0ciA9IENNU0dfTlhUSERSKCZtc2csIGNtcHRyKSkKKyAgICAgIGlmIChjbXB0ci0+Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQICYmIGNtcHRyLT5jbXNnX3R5cGUgPT0gSVBfUEtUSU5GTykKKwl7CisJICB1bmlvbiB7CisJICAgIHVuc2lnbmVkIGNoYXIgKmM7CisJICAgIHN0cnVjdCBpbl9wa3RpbmZvICpwOworCSAgfSBwOworCSAgcC5jID0gQ01TR19EQVRBKGNtcHRyKTsKKwkgIGlmYWNlX2luZGV4ID0gcC5wLT5pcGlfaWZpbmRleDsKKwkgIGlmIChwLnAtPmlwaV9hZGRyLnNfYWRkciAhPSBJTkFERFJfQlJPQURDQVNUKQorCSAgICB1bmljYXN0X2Rlc3QgPSAxOworCX0KKworI2VsaWYgZGVmaW5lZChIQVZFX0JTRF9ORVRXT1JLKSAKKyAgaWYgKG1zZy5tc2dfY29udHJvbGxlbiA+PSBzaXplb2Yoc3RydWN0IGNtc2doZHIpKQorICAgIGZvciAoY21wdHIgPSBDTVNHX0ZJUlNUSERSKCZtc2cpOyBjbXB0cjsgY21wdHIgPSBDTVNHX05YVEhEUigmbXNnLCBjbXB0cikpCisgICAgICBpZiAoY21wdHItPmNtc2dfbGV2ZWwgPT0gSVBQUk9UT19JUCAmJiBjbXB0ci0+Y21zZ190eXBlID09IElQX1JFQ1ZJRikKKyAgICAgICAgeworCSAgdW5pb24geworICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYzsKKyAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9kbCAqczsKKyAgICAgICAgICB9IHA7CisJICBwLmMgPSBDTVNHX0RBVEEoY21wdHIpOworCSAgaWZhY2VfaW5kZXggPSBwLnMtPnNkbF9pbmRleDsKKwl9CisgIAorI2VsaWYgZGVmaW5lZChIQVZFX1NPTEFSSVNfTkVUV09SSykgCisgIGlmIChtc2cubXNnX2NvbnRyb2xsZW4gPj0gc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSkKKyAgICBmb3IgKGNtcHRyID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY21wdHI7IGNtcHRyID0gQ01TR19OWFRIRFIoJm1zZywgY21wdHIpKQorICAgICAgaWYgKGNtcHRyLT5jbXNnX2xldmVsID09IElQUFJPVE9fSVAgJiYgY21wdHItPmNtc2dfdHlwZSA9PSBJUF9SRUNWSUYpCisJeworCSAgdW5pb24geworCSAgICB1bnNpZ25lZCBjaGFyICpjOworCSAgICB1bnNpZ25lZCBpbnQgKmk7CisJICB9IHA7CisJICBwLmMgPSBDTVNHX0RBVEEoY21wdHIpOworCSAgaWZhY2VfaW5kZXggPSAqKHAuaSk7CisJfQorI2VuZGlmCisJCisgIGlmICghaW5kZXh0b25hbWUoZGFlbW9uLT5kaGNwZmQsIGlmYWNlX2luZGV4LCBpZnIuaWZyX25hbWUpKQorICAgIHJldHVybjsKKworI2lmZGVmIEhBVkVfTElOVVhfTkVUV09SSworICAvKiBBUlAgZmlkZGxpbmcgdXNlcyBvcmlnaW5hbCBpbnRlcmZhY2UgZXZlbiBpZiB3ZSBwcmV0ZW5kIHRvIHVzZSBhIGRpZmZlcmVudCBvbmUuICovCisgIHN0cm5jcHkoYXJwX3JlcS5hcnBfZGV2LCBpZnIuaWZyX25hbWUsIDE2KTsKKyNlbmRpZiAKKworICAgLyogT25lIGZvcm0gb2YgYnJpZGdpbmcgb24gQlNEIGhhcyB0aGUgcHJvcGVydHkgdGhhdCBwYWNrZXRzCisgICAgICBjYW4gYmUgcmVjaWV2ZWQgb24gYnJpZGdlIGludGVyZmFjZXMgd2hpY2ggZG8gbm90IGhhdmUgYW4gSVAgYWRkcmVzcy4KKyAgICAgIFdlIGFsbG93IHRoZXNlIHRvIGJlIHRyZWF0ZWQgYXMgYWxpYXNlcyBvZiBhbm90aGVyIGludGVyZmFjZSB3aGljaCBkb2VzIGhhdmUKKyAgICAgIGFuIElQIGFkZHJlc3Mgd2l0aCAtLWRoY3AtYnJpZGdlPWludGVyZmFjZSxhbGlhcyxhbGlhcyAqLworICBmb3IgKGJyaWRnZSA9IGRhZW1vbi0+YnJpZGdlczsgYnJpZGdlOyBicmlkZ2UgPSBicmlkZ2UtPm5leHQpCisgICAgeworICAgICAgZm9yIChhbGlhcyA9IGJyaWRnZS0+YWxpYXM7IGFsaWFzOyBhbGlhcyA9IGFsaWFzLT5uZXh0KQorCWlmICh3aWxkY2FyZF9tYXRjaG4oYWxpYXMtPmlmYWNlLCBpZnIuaWZyX25hbWUsIElGX05BTUVTSVpFKSkKKwkgIHsKKwkgICAgaWYgKCEoaWZhY2VfaW5kZXggPSBpZl9uYW1ldG9pbmRleChicmlkZ2UtPmlmYWNlKSkpCisJICAgICAgeworCQlteV9zeXNsb2coTE9HX1dBUk5JTkcsIF8oInVua25vd24gaW50ZXJmYWNlICVzIGluIGJyaWRnZS1pbnRlcmZhY2UiKSwgaWZyLmlmcl9uYW1lKTsKKwkJcmV0dXJuOworCSAgICAgIH0KKwkgICAgZWxzZSAKKwkgICAgICB7CisJCXN0cm5jcHkoaWZyLmlmcl9uYW1lLCAgYnJpZGdlLT5pZmFjZSwgSUZfTkFNRVNJWkUpOworCQlicmVhazsKKwkgICAgICB9CisJICB9CisgICAgICAKKyAgICAgIGlmIChhbGlhcykKKwlicmVhazsKKyAgICB9CisKKyNpZmRlZiBNU0dfQkNBU1QKKyAgLyogT3BlbkJTRCB0ZWxscyB1cyB3aGVuIGEgcGFja2V0IHdhcyBicm9hZGNhc3QgKi8KKyAgaWYgKCEobXNnLm1zZ19mbGFncyAmIE1TR19CQ0FTVCkpCisgICAgdW5pY2FzdF9kZXN0ID0gMTsKKyNlbmRpZgorICAKKyAgaWYgKChyZWxheSA9IHJlbGF5X3JlcGx5NCgoc3RydWN0IGRoY3BfcGFja2V0ICopZGFlbW9uLT5kaGNwX3BhY2tldC5pb3ZfYmFzZSwgaWZyLmlmcl9uYW1lKSkpCisgICAgeworICAgICAgLyogUmVwbHkgZnJvbSBzZXJ2ZXIsIHVzaW5nIHVzIGFzIHJlbGF5LiAqLworICAgICAgaWZhY2VfaW5kZXggPSByZWxheS0+aWZhY2VfaW5kZXg7CisgICAgICBpZiAoIWluZGV4dG9uYW1lKGRhZW1vbi0+ZGhjcGZkLCBpZmFjZV9pbmRleCwgaWZyLmlmcl9uYW1lKSkKKwlyZXR1cm47CisgICAgICBpc19yZWxheV9yZXBseSA9IDE7IAorICAgICAgaW92Lmlvdl9sZW4gPSBzejsKKyNpZmRlZiBIQVZFX0xJTlVYX05FVFdPUksKKyAgICAgIHN0cm5jcHkoYXJwX3JlcS5hcnBfZGV2LCBpZnIuaWZyX25hbWUsIDE2KTsKKyNlbmRpZiAKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZnIuaWZyX2FkZHIuc2FfZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgIGlmIChpb2N0bChkYWVtb24tPmRoY3BmZCwgU0lPQ0dJRkFERFIsICZpZnIpICE9IC0xICkKKwlpZmFjZV9hZGRyID0gKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJmlmci5pZnJfYWRkciktPnNpbl9hZGRyOworICAgICAgZWxzZQorCXsKKwkgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX1dBUk5JTkcsIF8oIkRIQ1AgcGFja2V0IHJlY2VpdmVkIG9uICVzIHdoaWNoIGhhcyBubyBhZGRyZXNzIiksIGlmci5pZnJfbmFtZSk7CisJICByZXR1cm47CisJfQorICAgICAgCisgICAgICBmb3IgKHRtcCA9IGRhZW1vbi0+ZGhjcF9leGNlcHQ7IHRtcDsgdG1wID0gdG1wLT5uZXh0KQorCWlmICh0bXAtPm5hbWUgJiYgd2lsZGNhcmRfbWF0Y2godG1wLT5uYW1lLCBpZnIuaWZyX25hbWUpKQorCSAgcmV0dXJuOworICAgICAgCisgICAgICAvKiB1bmxpbmtlZCBjb250ZXh0cy9yZWxheXMgYXJlIG1hcmtlZCBieSBjb250ZXh0LT5jdXJyZW50ID09IGNvbnRleHQgKi8KKyAgICAgIGZvciAoY29udGV4dCA9IGRhZW1vbi0+ZGhjcDsgY29udGV4dDsgY29udGV4dCA9IGNvbnRleHQtPm5leHQpCisJY29udGV4dC0+Y3VycmVudCA9IGNvbnRleHQ7CisgICAgICAKKyAgICAgIGZvciAocmVsYXkgPSBkYWVtb24tPnJlbGF5NDsgcmVsYXk7IHJlbGF5ID0gcmVsYXktPm5leHQpCisJcmVsYXktPmN1cnJlbnQgPSByZWxheTsKKyAgICAgIAorICAgICAgcGFybS5jdXJyZW50ID0gTlVMTDsKKyAgICAgIHBhcm0ucmVsYXkgPSBOVUxMOworICAgICAgcGFybS5yZWxheV9sb2NhbC5zX2FkZHIgPSAwOworICAgICAgcGFybS5pbmQgPSBpZmFjZV9pbmRleDsKKyAgICAgIAorICAgICAgaWYgKCFpZmFjZV9jaGVjayhBRl9JTkVULCAoc3RydWN0IGFsbF9hZGRyICopJmlmYWNlX2FkZHIsIGlmci5pZnJfbmFtZSwgTlVMTCkpCisJeworCSAgLyogSWYgd2UgZmFpbGVkIHRvIG1hdGNoIHRoZSBwcmltYXJ5IGFkZHJlc3Mgb2YgdGhlIGludGVyZmFjZSwgc2VlIGlmIHdlJ3ZlIGdvdCBhIC0tbGlzdGVuLWFkZHJlc3MKKwkgICAgIGZvciBhIHNlY29uZGFyeSAqLworCSAgc3RydWN0IG1hdGNoX3BhcmFtIG1hdGNoOworCSAgCisJICBtYXRjaC5tYXRjaGVkID0gMDsKKwkgIG1hdGNoLmluZCA9IGlmYWNlX2luZGV4OworCSAgCisJICBpZiAoIWRhZW1vbi0+aWZfYWRkcnMgfHwKKwkgICAgICAhaWZhY2VfZW51bWVyYXRlKEFGX0lORVQsICZtYXRjaCwgY2hlY2tfbGlzdGVuX2FkZHJzKSB8fAorCSAgICAgICFtYXRjaC5tYXRjaGVkKQorCSAgICByZXR1cm47CisJICAKKwkgIGlmYWNlX2FkZHIgPSBtYXRjaC5hZGRyOworCSAgLyogbWFrZSBzdXJlIHNlY29uZGFyeSBhZGRyZXNzIGdldHMgcHJpb3JpdHkgaW4gY2FzZQorCSAgICAgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBhZGRyZXNzIG9uIHRoZSBpbnRlcmZhY2UgaW4gdGhlIHNhbWUgc3VibmV0ICovCisJICBjb21wbGV0ZV9jb250ZXh0KG1hdGNoLmFkZHIsIGlmYWNlX2luZGV4LCBOVUxMLCBtYXRjaC5uZXRtYXNrLCBtYXRjaC5icm9hZGNhc3QsICZwYXJtKTsKKwl9ICAgIAorICAgICAgCisgICAgICBpZiAoIWlmYWNlX2VudW1lcmF0ZShBRl9JTkVULCAmcGFybSwgY29tcGxldGVfY29udGV4dCkpCisJcmV0dXJuOworCisgICAgICAvKiBXZSdyZSByZWxheWluZyB0aGlzIHJlcXVlc3QgKi8KKyAgICAgIGlmICAocGFybS5yZWxheV9sb2NhbC5zX2FkZHIgIT0gMCAmJgorCSAgIHJlbGF5X3Vwc3RyZWFtNChwYXJtLnJlbGF5LCAoc3RydWN0IGRoY3BfcGFja2V0ICopZGFlbW9uLT5kaGNwX3BhY2tldC5pb3ZfYmFzZSwgKHNpemVfdClzeiwgaWZhY2VfaW5kZXgpKQorCXJldHVybjsKKworICAgICAgLyogTWF5IGhhdmUgY29uZmlndXJlZCByZWxheSwgYnV0IG5vdCBESENQIHNlcnZlciAqLworICAgICAgaWYgKCFkYWVtb24tPmRoY3ApCisJcmV0dXJuOworCisgICAgICBsZWFzZV9wcnVuZShOVUxMLCBub3cpOyAvKiBsb3NlIGFueSBleHBpcmVkIGxlYXNlcyAqLworICAgICAgaW92Lmlvdl9sZW4gPSBkaGNwX3JlcGx5KHBhcm0uY3VycmVudCwgaWZyLmlmcl9uYW1lLCBpZmFjZV9pbmRleCwgKHNpemVfdClzeiwgCisJCQkgICAgICAgbm93LCB1bmljYXN0X2Rlc3QsICZpc19pbmZvcm0sIHB4ZV9mZCwgaWZhY2VfYWRkcik7CisgICAgICBsZWFzZV91cGRhdGVfZmlsZShub3cpOworICAgICAgbGVhc2VfdXBkYXRlX2RucygwKTsKKyAgICAgIAorICAgICAgaWYgKGlvdi5pb3ZfbGVuID09IDApCisJcmV0dXJuOworICAgIH0KKyAgCisgIG1zZy5tc2dfbmFtZSA9ICZkZXN0OworICBtc2cubXNnX25hbWVsZW4gPSBzaXplb2YoZGVzdCk7CisgIG1zZy5tc2dfY29udHJvbCA9IE5VTEw7CisgIG1zZy5tc2dfY29udHJvbGxlbiA9IDA7CisgIG1zZy5tc2dfaW92ID0gJmlvdjsKKyAgaW92Lmlvdl9iYXNlID0gZGFlbW9uLT5kaGNwX3BhY2tldC5pb3ZfYmFzZTsKKyAgCisgIC8qIHBhY2tldCBidWZmZXIgbWF5IGhhdmUgbW92ZWQgKi8KKyAgbWVzcyA9IChzdHJ1Y3QgZGhjcF9wYWNrZXQgKilkYWVtb24tPmRoY3BfcGFja2V0Lmlvdl9iYXNlOworICAKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorICBkZXN0LnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorICAKKyAgaWYgKHB4ZV9mZCkKKyAgICB7IAorICAgICAgaWYgKG1lc3MtPmNpYWRkci5zX2FkZHIgIT0gMCkKKwlkZXN0LnNpbl9hZGRyID0gbWVzcy0+Y2lhZGRyOworICAgIH0KKyAgZWxzZSBpZiAobWVzcy0+Z2lhZGRyLnNfYWRkciAmJiAhaXNfcmVsYXlfcmVwbHkpCisgICAgeworICAgICAgLyogU2VuZCB0byBCT09UUCByZWxheSAgKi8KKyAgICAgIGRlc3Quc2luX3BvcnQgPSBodG9ucyhkYWVtb24tPmRoY3Bfc2VydmVyX3BvcnQpOworICAgICAgZGVzdC5zaW5fYWRkciA9IG1lc3MtPmdpYWRkcjsgCisgICAgfQorICBlbHNlIGlmIChtZXNzLT5jaWFkZHIuc19hZGRyKQorICAgIHsKKyAgICAgIC8qIElmIHRoZSBjbGllbnQncyBpZGVhIG9mIGl0cyBvd24gYWRkcmVzcyB0YWxseXMgd2l0aAorCSB0aGUgc291cmNlIGFkZHJlc3MgaW4gdGhlIHJlcXVlc3QgcGFja2V0LCB3ZSBiZWxpZXZlIHRoZQorCSBzb3VyY2UgcG9ydCB0b28sIGFuZCBzZW5kIGJhY2sgdG8gdGhhdC4gIElmIHdlJ3JlIHJlcGx5aW5nIAorCSB0byBhIERIQ1BJTkZPUk0sIHRydXN0IHRoZSBzb3VyY2UgYWRkcmVzcyBhbHdheXMuICovCisgICAgICBpZiAoKCFpc19pbmZvcm0gJiYgZGVzdC5zaW5fYWRkci5zX2FkZHIgIT0gbWVzcy0+Y2lhZGRyLnNfYWRkcikgfHwKKwkgIGRlc3Quc2luX3BvcnQgPT0gMCB8fCBkZXN0LnNpbl9hZGRyLnNfYWRkciA9PSAwIHx8IGlzX3JlbGF5X3JlcGx5KQorCXsKKwkgIGRlc3Quc2luX3BvcnQgPSBodG9ucyhkYWVtb24tPmRoY3BfY2xpZW50X3BvcnQpOyAKKwkgIGRlc3Quc2luX2FkZHIgPSBtZXNzLT5jaWFkZHI7CisJfQorICAgIH0gCisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX05FVFdPUkspCisgIGVsc2UgaWYgKChudG9ocyhtZXNzLT5mbGFncykgJiAweDgwMDApIHx8IG1lc3MtPmhsZW4gPT0gMCB8fAorCSAgIG1lc3MtPmhsZW4gPiBzaXplb2YoaWZyLmlmcl9hZGRyLnNhX2RhdGEpIHx8IG1lc3MtPmh0eXBlID09IDApCisgICAgeworICAgICAgLyogYnJvYWRjYXN0IHRvIDI1NS4yNTUuMjU1LjI1NSAob3IgbWFjIGFkZHJlc3MgaW52YWxpZCkgKi8KKyAgICAgIHN0cnVjdCBpbl9wa3RpbmZvICpwa3Q7CisgICAgICBtc2cubXNnX2NvbnRyb2wgPSBjb250cm9sX3UuY29udHJvbDsKKyAgICAgIG1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjb250cm9sX3UpOworICAgICAgY21wdHIgPSBDTVNHX0ZJUlNUSERSKCZtc2cpOworICAgICAgcGt0ID0gKHN0cnVjdCBpbl9wa3RpbmZvICopQ01TR19EQVRBKGNtcHRyKTsKKyAgICAgIHBrdC0+aXBpX2lmaW5kZXggPSBpZmFjZV9pbmRleDsKKyAgICAgIHBrdC0+aXBpX3NwZWNfZHN0LnNfYWRkciA9IDA7CisgICAgICBtc2cubXNnX2NvbnRyb2xsZW4gPSBjbXB0ci0+Y21zZ19sZW4gPSBDTVNHX0xFTihzaXplb2Yoc3RydWN0IGluX3BrdGluZm8pKTsKKyAgICAgIGNtcHRyLT5jbXNnX2xldmVsID0gSVBQUk9UT19JUDsKKyAgICAgIGNtcHRyLT5jbXNnX3R5cGUgPSBJUF9QS1RJTkZPOyAgCisgICAgICBkZXN0LnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9CUk9BRENBU1Q7CisgICAgICBkZXN0LnNpbl9wb3J0ID0gaHRvbnMoZGFlbW9uLT5kaGNwX2NsaWVudF9wb3J0KTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiB1bmljYXN0IHRvIHVuY29uZmlndXJlZCBjbGllbnQuIEluamVjdCBtYWMgYWRkcmVzcyBkaXJlY3QgaW50byBBUlAgY2FjaGUuIAorCSBzdHJ1Y3Qgc29ja2FkZHIgbGltaXRzIHNpemUgdG8gMTQgYnl0ZXMuICovCisgICAgICBkZXN0LnNpbl9hZGRyID0gbWVzcy0+eWlhZGRyOworICAgICAgZGVzdC5zaW5fcG9ydCA9IGh0b25zKGRhZW1vbi0+ZGhjcF9jbGllbnRfcG9ydCk7CisgICAgICBtZW1jcHkoJmFycF9yZXEuYXJwX3BhLCAmZGVzdCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworICAgICAgYXJwX3JlcS5hcnBfaGEuc2FfZmFtaWx5ID0gbWVzcy0+aHR5cGU7CisgICAgICBtZW1jcHkoYXJwX3JlcS5hcnBfaGEuc2FfZGF0YSwgbWVzcy0+Y2hhZGRyLCBtZXNzLT5obGVuKTsKKyAgICAgIC8qIGludGVyZmFjZSBuYW1lIGFscmVhZHkgY29waWVkIGluICovCisgICAgICBhcnBfcmVxLmFycF9mbGFncyA9IEFURl9DT007CisgICAgICBpZiAoaW9jdGwoZGFlbW9uLT5kaGNwZmQsIFNJT0NTQVJQLCAmYXJwX3JlcSkgPT0gLTEpCisJbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfRVJSLCBfKCJBUlAtY2FjaGUgaW5qZWN0aW9uIGZhaWxlZDogJXMiKSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICB9CisjZWxpZiBkZWZpbmVkKEhBVkVfU09MQVJJU19ORVRXT1JLKQorICBlbHNlIGlmICgobnRvaHMobWVzcy0+ZmxhZ3MpICYgMHg4MDAwKSB8fCBtZXNzLT5obGVuICE9IEVUSEVSX0FERFJfTEVOIHx8IG1lc3MtPmh0eXBlICE9IEFSUEhSRF9FVEhFUikKKyAgICB7CisgICAgICAvKiBicm9hZGNhc3QgdG8gMjU1LjI1NS4yNTUuMjU1IChvciBtYWMgYWRkcmVzcyBpbnZhbGlkKSAqLworICAgICAgZGVzdC5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQlJPQURDQVNUOworICAgICAgZGVzdC5zaW5fcG9ydCA9IGh0b25zKGRhZW1vbi0+ZGhjcF9jbGllbnRfcG9ydCk7CisgICAgICAvKiBub3RlIHRoYXQgd2UgZG9uJ3Qgc3BlY2lmeSB0aGUgaW50ZXJmYWNlIGhlcmU6IHRoYXQncyBkb25lIGJ5IHRoZQorCSBJUF9CT1VORF9JRiBzb2Nrb3B0IGxvd2VyIGRvd24uICovCisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogdW5pY2FzdCB0byB1bmNvbmZpZ3VyZWQgY2xpZW50LiBJbmplY3QgbWFjIGFkZHJlc3MgZGlyZWN0IGludG8gQVJQIGNhY2hlLiAKKwkgTm90ZSB0aGF0IHRoaXMgb25seSB3b3JrcyBmb3IgZXRoZXJuZXQgb24gc29sYXJpcywgYmVjYXVzZSB3ZSB1c2UgU0lPQ1NBUlAKKwkgYW5kIG5vdCBTSU9DU1hBUlAsIHdoaWNoIHdvdWxkIGJlIHBlcmZlY3QsIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgRU5YSU8gCisJIG15c3RlcmlvdXNseS4gQmFoLiBGYWxsIGJhY2sgdG8gYnJvYWRjYXN0IGZvciBvdGhlciBuZXQgdHlwZXMuICovCisgICAgICBzdHJ1Y3QgYXJwcmVxIHJlcTsKKyAgICAgIGRlc3Quc2luX2FkZHIgPSBtZXNzLT55aWFkZHI7CisgICAgICBkZXN0LnNpbl9wb3J0ID0gaHRvbnMoZGFlbW9uLT5kaGNwX2NsaWVudF9wb3J0KTsKKyAgICAgICooKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZyZXEuYXJwX3BhKSA9IGRlc3Q7CisgICAgICByZXEuYXJwX2hhLnNhX2ZhbWlseSA9IEFGX1VOU1BFQzsKKyAgICAgIG1lbWNweShyZXEuYXJwX2hhLnNhX2RhdGEsIG1lc3MtPmNoYWRkciwgbWVzcy0+aGxlbik7CisgICAgICByZXEuYXJwX2ZsYWdzID0gQVRGX0NPTTsKKyAgICAgIGlvY3RsKGRhZW1vbi0+ZGhjcGZkLCBTSU9DU0FSUCwgJnJlcSk7CisgICAgfQorI2VsaWYgZGVmaW5lZChIQVZFX0JTRF9ORVRXT1JLKQorICBlbHNlIAorICAgIHsKKyAgICAgIHNlbmRfdmlhX2JwZihtZXNzLCBpb3YuaW92X2xlbiwgaWZhY2VfYWRkciwgJmlmcik7CisgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAKKyNpZmRlZiBIQVZFX1NPTEFSSVNfTkVUV09SSworICBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQLCBJUF9CT1VORF9JRiwgJmlmYWNlX2luZGV4LCBzaXplb2YoaWZhY2VfaW5kZXgpKTsKKyNlbmRpZgorICAKKyAgd2hpbGUoc2VuZG1zZyhmZCwgJm1zZywgMCkgPT0gLTEgJiYgcmV0cnlfc2VuZCgpKTsKK30KKyAKKy8qIGNoZWNrIGFnYWluc3Qgc2Vjb25kYXJ5IGludGVyZmFjZSBhZGRyZXNzZXMgKi8KK3N0YXRpYyBpbnQgY2hlY2tfbGlzdGVuX2FkZHJzKHN0cnVjdCBpbl9hZGRyIGxvY2FsLCBpbnQgaWZfaW5kZXgsIGNoYXIgKmxhYmVsLAorCQkJICAgICAgc3RydWN0IGluX2FkZHIgbmV0bWFzaywgc3RydWN0IGluX2FkZHIgYnJvYWRjYXN0LCB2b2lkICp2cGFyYW0pCit7CisgIHN0cnVjdCBtYXRjaF9wYXJhbSAqcGFyYW0gPSB2cGFyYW07CisgIHN0cnVjdCBpbmFtZSAqdG1wOworCisgICh2b2lkKSBsYWJlbDsKKworICBpZiAoaWZfaW5kZXggPT0gcGFyYW0tPmluZCkKKyAgICB7CisgICAgICBmb3IgKHRtcCA9IGRhZW1vbi0+aWZfYWRkcnM7IHRtcDsgdG1wID0gdG1wLT5uZXh0KQorCWlmICggdG1wLT5hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUICYmCisJICAgICB0bXAtPmFkZHIuaW4uc2luX2FkZHIuc19hZGRyID09IGxvY2FsLnNfYWRkcikKKwkgIHsKKwkgICAgcGFyYW0tPm1hdGNoZWQgPSAxOworCSAgICBwYXJhbS0+YWRkciA9IGxvY2FsOworCSAgICBwYXJhbS0+bmV0bWFzayA9IG5ldG1hc2s7CisJICAgIHBhcmFtLT5icm9hZGNhc3QgPSBicm9hZGNhc3Q7CisJICAgIGJyZWFrOworCSAgfQorICAgIH0KKyAgCisgIHJldHVybiAxOworfQorCisvKiBUaGlzIGlzIGEgY29tcGxleCByb3V0aW5lOiBpdCBnZXRzIGNhbGxlZCB3aXRoIGVhY2ggKGFkZHJlc3MsbmV0bWFzayxicm9hZGNhc3QpIHRyaXBsZSAKKyAgIG9mIGVhY2ggaW50ZXJmYWNlIChhbmQgYW55IHJlbGF5IGFkZHJlc3MpIGFuZCBkb2VzIHRoZSAgZm9sbG93aW5nIHRoaW5nczoKKworICAgMSkgRGlzY2FyZHMgc3R1ZmYgZm9yIGludGVyZmFjZXMgb3RoZXIgdGhhbiB0aGUgb25lIG9uIHdoaWNoIGEgREhDUCBwYWNrZXQganVzdCBhcnJpdmVkLgorICAgMikgRmlsbHMgaW4gYW55IG5ldG1hc2sgYW5kIGJyb2FkY2FzdCBhZGRyZXNzZXMgd2hpY2ggaGF2ZSBub3QgYmVlbiBleHBsaWNpdGx5IGNvbmZpZ3VyZWQuCisgICAzKSBGaWxscyBpbiBsb2NhbCAodGhpcyBob3N0KSBhbmQgcm91dGVyICh0aGlzIGhvc3Qgb3IgcmVsYXkpIGFkZHJlc3Nlcy4KKyAgIDQpIExpbmtzIGNvbnRleHRzIHdoaWNoIGFyZSB2YWxpZCBmb3IgaG9zdHMgZGlyZWN0bHkgY29ubmVjdGVkIHRvIHRoZSBhcnJpdmFsIGludGVyZmFjZSBvbiAtPmN1cnJlbnQuCisKKyAgIE5vdGUgdGhhdCB0aGUgY3VycmVudCBjaGFpbiBtYXkgYmUgc3VwZXJjZWRlZCBsYXRlciBmb3IgY29uZmlndXJlZCBob3N0cyBvciB0aG9zZSBjb21pbmcgdmlhIGdhdGV3YXlzLiAqLworCitzdGF0aWMgaW50IGNvbXBsZXRlX2NvbnRleHQoc3RydWN0IGluX2FkZHIgbG9jYWwsIGludCBpZl9pbmRleCwgY2hhciAqbGFiZWwsCisJCQkgICAgc3RydWN0IGluX2FkZHIgbmV0bWFzaywgc3RydWN0IGluX2FkZHIgYnJvYWRjYXN0LCB2b2lkICp2cGFyYW0pCit7CisgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQ7CisgIHN0cnVjdCBkaGNwX3JlbGF5ICpyZWxheTsKKyAgc3RydWN0IGlmYWNlX3BhcmFtICpwYXJhbSA9IHZwYXJhbTsKKworICAodm9pZClsYWJlbDsKKyAgCisgIGZvciAoY29udGV4dCA9IGRhZW1vbi0+ZGhjcDsgY29udGV4dDsgY29udGV4dCA9IGNvbnRleHQtPm5leHQpCisgICAgeworICAgICAgaWYgKCEoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX05FVE1BU0spICYmCisJICAoaXNfc2FtZV9uZXQobG9jYWwsIGNvbnRleHQtPnN0YXJ0LCBuZXRtYXNrKSB8fAorCSAgIGlzX3NhbWVfbmV0KGxvY2FsLCBjb250ZXh0LT5lbmQsIG5ldG1hc2spKSkKKyAgICAgIHsgCisJaWYgKGNvbnRleHQtPm5ldG1hc2suc19hZGRyICE9IG5ldG1hc2suc19hZGRyICYmCisJICAgICEoaXNfc2FtZV9uZXQobG9jYWwsIGNvbnRleHQtPnN0YXJ0LCBuZXRtYXNrKSAmJgorCSAgICAgIGlzX3NhbWVfbmV0KGxvY2FsLCBjb250ZXh0LT5lbmQsIG5ldG1hc2spKSkKKwkgIHsKKwkgICAgc3RyY3B5KGRhZW1vbi0+ZGhjcF9idWZmLCBpbmV0X250b2EoY29udGV4dC0+c3RhcnQpKTsKKwkgICAgc3RyY3B5KGRhZW1vbi0+ZGhjcF9idWZmMiwgaW5ldF9udG9hKGNvbnRleHQtPmVuZCkpOworCSAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19XQVJOSU5HLCBfKCJESENQIHJhbmdlICVzIC0tICVzIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggbmV0bWFzayAlcyIpLAorCQkgICAgICBkYWVtb24tPmRoY3BfYnVmZiwgZGFlbW9uLT5kaGNwX2J1ZmYyLCBpbmV0X250b2EobmV0bWFzaykpOworCSAgfQkKKyAJY29udGV4dC0+bmV0bWFzayA9IG5ldG1hc2s7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmIChjb250ZXh0LT5uZXRtYXNrLnNfYWRkciAhPSAwICYmCisJICBpc19zYW1lX25ldChsb2NhbCwgY29udGV4dC0+c3RhcnQsIGNvbnRleHQtPm5ldG1hc2spICYmCisJICBpc19zYW1lX25ldChsb2NhbCwgY29udGV4dC0+ZW5kLCBjb250ZXh0LT5uZXRtYXNrKSkKKwl7CisJICAvKiBsaW5rIGl0IG9udG8gdGhlIGN1cnJlbnQgY2hhaW4gaWYgd2UndmUgbm90IHNlZW4gaXQgYmVmb3JlICovCisJICBpZiAoaWZfaW5kZXggPT0gcGFyYW0tPmluZCAmJiBjb250ZXh0LT5jdXJyZW50ID09IGNvbnRleHQpCisJICAgIHsKKwkgICAgICBjb250ZXh0LT5yb3V0ZXIgPSBsb2NhbDsKKwkgICAgICBjb250ZXh0LT5sb2NhbCA9IGxvY2FsOworCSAgICAgIGNvbnRleHQtPmN1cnJlbnQgPSBwYXJhbS0+Y3VycmVudDsKKwkgICAgICBwYXJhbS0+Y3VycmVudCA9IGNvbnRleHQ7CisJICAgIH0KKwkgIAorCSAgaWYgKCEoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX0JSRENBU1QpKQorCSAgICB7CisJICAgICAgaWYgKGlzX3NhbWVfbmV0KGJyb2FkY2FzdCwgY29udGV4dC0+c3RhcnQsIGNvbnRleHQtPm5ldG1hc2spKQorCQljb250ZXh0LT5icm9hZGNhc3QgPSBicm9hZGNhc3Q7CisJICAgICAgZWxzZSAKKwkJY29udGV4dC0+YnJvYWRjYXN0LnNfYWRkciAgPSBjb250ZXh0LT5zdGFydC5zX2FkZHIgfCB+Y29udGV4dC0+bmV0bWFzay5zX2FkZHI7CisJICAgIH0KKwl9CQkKKyAgICB9CisKKyAgZm9yIChyZWxheSA9IGRhZW1vbi0+cmVsYXk0OyByZWxheTsgcmVsYXkgPSByZWxheS0+bmV4dCkKKyAgICBpZiAoaWZfaW5kZXggPT0gcGFyYW0tPmluZCAmJiByZWxheS0+bG9jYWwuYWRkci5hZGRyNC5zX2FkZHIgPT0gbG9jYWwuc19hZGRyICYmIHJlbGF5LT5jdXJyZW50ID09IHJlbGF5ICYmCisJKHBhcmFtLT5yZWxheV9sb2NhbC5zX2FkZHIgPT0gMCB8fCBwYXJhbS0+cmVsYXlfbG9jYWwuc19hZGRyID09IGxvY2FsLnNfYWRkcikpCisgICAgICB7CisJcmVsYXktPmN1cnJlbnQgPSBwYXJhbS0+cmVsYXk7CisJcGFyYW0tPnJlbGF5ID0gcmVsYXk7CisJcGFyYW0tPnJlbGF5X2xvY2FsID0gbG9jYWw7CQorICAgICAgfQorCisgIHJldHVybiAxOworfQorCSAgCitzdHJ1Y3QgZGhjcF9jb250ZXh0ICphZGRyZXNzX2F2YWlsYWJsZShzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCAKKwkJCQkgICAgICAgc3RydWN0IGluX2FkZHIgdGFkZHIsCisJCQkJICAgICAgIHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZHMpCit7CisgIC8qIENoZWNrIGlzIGFuIGFkZHJlc3MgaXMgT0sgZm9yIHRoaXMgbmV0d29yaywgY2hlY2sgYWxsCisgICAgIHBvc3NpYmxlIHJhbmdlcy4gTWFrZSBzdXJlIHRoYXQgdGhlIGFkZHJlc3MgaXNuJ3QgaW4gdXNlCisgICAgIGJ5IHRoZSBzZXJ2ZXIgaXRzZWxmLiAqLworICAKKyAgdW5zaWduZWQgaW50IHN0YXJ0LCBlbmQsIGFkZHIgPSBudG9obCh0YWRkci5zX2FkZHIpOworICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICp0bXA7CisKKyAgZm9yICh0bXAgPSBjb250ZXh0OyB0bXA7IHRtcCA9IHRtcC0+Y3VycmVudCkKKyAgICBpZiAodGFkZHIuc19hZGRyID09IGNvbnRleHQtPnJvdXRlci5zX2FkZHIpCisgICAgICByZXR1cm4gTlVMTDsKKyAgCisgIGZvciAodG1wID0gY29udGV4dDsgdG1wOyB0bXAgPSB0bXAtPmN1cnJlbnQpCisgICAgeworICAgICAgc3RhcnQgPSBudG9obCh0bXAtPnN0YXJ0LnNfYWRkcik7CisgICAgICBlbmQgPSBudG9obCh0bXAtPmVuZC5zX2FkZHIpOworCisgICAgICBpZiAoISh0bXAtPmZsYWdzICYgKENPTlRFWFRfU1RBVElDIHwgQ09OVEVYVF9QUk9YWSkpICYmCisJICBhZGRyID49IHN0YXJ0ICYmCisJICBhZGRyIDw9IGVuZCAmJgorCSAgbWF0Y2hfbmV0aWQodG1wLT5maWx0ZXIsIG5ldGlkcywgMSkpCisJcmV0dXJuIHRtcDsKKyAgICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBkaGNwX2NvbnRleHQgKm5hcnJvd19jb250ZXh0KHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIAorCQkJCSAgICBzdHJ1Y3QgaW5fYWRkciB0YWRkciwKKwkJCQkgICAgc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkcykKK3sKKyAgLyogV2Ugc3RhcnQgb2Ygd2l0aCBhIHNldCBvZiBwb3NzaWJsZSBjb250ZXh0cywgYWxsIG9uIHRoZSBjdXJyZW50IHBoeXNpY2FsIGludGVyZmFjZS4KKyAgICAgVGhlc2UgYXJlIGNoYWluZWQgb24gLT5jdXJyZW50LgorICAgICBIZXJlIHdlIGhhdmUgYW4gYWRkcmVzcywgYW5kIHJldHVybiB0aGUgYWN0dWFsIGNvbnRleHQgY29ycmVwb25kaW5nIHRvIHRoYXQKKyAgICAgYWRkcmVzcy4gTm90ZSB0aGF0IG5vbmUgbWF5IGZpdCwgaWYgdGhlIGFkZHJlc3MgY2FtZSBhIGRoY3AtaG9zdCBhbmQgaXMgb3V0c2lkZQorICAgICBhbnkgZGhjcC1yYW5nZS4gSW4gdGhhdCBjYXNlIHdlIHJldHVybiBhIHN0YXRpYyByYW5nZSBpZiBwb3NzaWJsZSwgb3IgZmFpbGluZyB0aGF0LAorICAgICBhbnkgY29udGV4dCBvbiB0aGUgY29ycmVjdCBzdWJuZXQuIChJZiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUsIHRoaXMgaXMgYSBkb2RneSAKKyAgICAgY29uZmlndXJhdGlvbjogbWF5YmUgdGhlcmUgc2hvdWxkIGJlIGEgd2FybmluZy4pICovCisgIAorICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICp0bXA7CisKKyAgaWYgKCEodG1wID0gYWRkcmVzc19hdmFpbGFibGUoY29udGV4dCwgdGFkZHIsIG5ldGlkcykpKQorICAgIHsKKyAgICAgIGZvciAodG1wID0gY29udGV4dDsgdG1wOyB0bXAgPSB0bXAtPmN1cnJlbnQpCisJaWYgKG1hdGNoX25ldGlkKHRtcC0+ZmlsdGVyLCBuZXRpZHMsIDEpICYmCisJICAgIGlzX3NhbWVfbmV0KHRhZGRyLCB0bXAtPnN0YXJ0LCB0bXAtPm5ldG1hc2spICYmIAorCSAgICAodG1wLT5mbGFncyAmIENPTlRFWFRfU1RBVElDKSkKKwkgIGJyZWFrOworICAgICAgCisgICAgICBpZiAoIXRtcCkKKwlmb3IgKHRtcCA9IGNvbnRleHQ7IHRtcDsgdG1wID0gdG1wLT5jdXJyZW50KQorCSAgaWYgKG1hdGNoX25ldGlkKHRtcC0+ZmlsdGVyLCBuZXRpZHMsIDEpICYmCisJICAgICAgaXNfc2FtZV9uZXQodGFkZHIsIHRtcC0+c3RhcnQsIHRtcC0+bmV0bWFzaykgJiYKKwkgICAgICAhKHRtcC0+ZmxhZ3MgJiBDT05URVhUX1BST1hZKSkKKwkgICAgYnJlYWs7CisgICAgfQorICAKKyAgLyogT25seSBvbmUgY29udGV4dCBhbGxvd2VkIG5vdyAqLworICBpZiAodG1wKQorICAgIHRtcC0+Y3VycmVudCA9IE5VTEw7CisgIAorICByZXR1cm4gdG1wOworfQorCitzdHJ1Y3QgZGhjcF9jb25maWcgKmNvbmZpZ19maW5kX2J5X2FkZHJlc3Moc3RydWN0IGRoY3BfY29uZmlnICpjb25maWdzLCBzdHJ1Y3QgaW5fYWRkciBhZGRyKQoreworICBzdHJ1Y3QgZGhjcF9jb25maWcgKmNvbmZpZzsKKyAgCisgIGZvciAoY29uZmlnID0gY29uZmlnczsgY29uZmlnOyBjb25maWcgPSBjb25maWctPm5leHQpCisgICAgaWYgKChjb25maWctPmZsYWdzICYgQ09ORklHX0FERFIpICYmIGNvbmZpZy0+YWRkci5zX2FkZHIgPT0gYWRkci5zX2FkZHIpCisgICAgICByZXR1cm4gY29uZmlnOworCisgIHJldHVybiBOVUxMOworfQorCitpbnQgYWRkcmVzc19hbGxvY2F0ZShzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LAorCQkgICAgIHN0cnVjdCBpbl9hZGRyICphZGRycCwgdW5zaWduZWQgY2hhciAqaHdhZGRyLCBpbnQgaHdfbGVuLCAKKwkJICAgICBzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV0aWRzLCB0aW1lX3Qgbm93KSAgIAoreworICAvKiBGaW5kIGEgZnJlZSBhZGRyZXNzOiBleGNsdWRlIGFueXRoaW5nIGluIHVzZSBhbmQgYW55dGhpbmcgYWxsb2NhdGVkIHRvCisgICAgIGEgcGFydGljdWxhciBod2FkZHIvY2xpZW50aWQvaG9zdG5hbWUgaW4gb3VyIGNvbmZpZ3VyYXRpb24uCisgICAgIFRyeSB0byByZXR1cm4gZnJvbSBjb250ZXh0cyB3aGljaCBtYXRjaCBuZXRpZHMgZmlyc3QuICovCisKKyAgc3RydWN0IGluX2FkZHIgc3RhcnQsIGFkZHI7CisgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmMsICpkOworICBpbnQgaSwgcGFzczsKKyAgdW5zaWduZWQgaW50IGo7IAorCisgIC8qIGhhc2ggaHdhZGRyOiB1c2UgdGhlIFNEQk0gaGFzaGluZyBhbGdvcml0aG0uICBTZWVtcyB0byBnaXZlIGdvb2QKKyAgICAgZGlzcGVyc2FsIGV2ZW4gd2l0aCBzaW1pbGFybHktdmFsdWVkICJzdHJpbmdzIi4gKi8gCisgIGZvciAoaiA9IDAsIGkgPSAwOyBpIDwgaHdfbGVuOyBpKyspCisgICAgaiArPSBod2FkZHJbaV0gKyAoaiA8PCA2KSArIChqIDw8IDE2KSAtIGo7CisgIAorICBmb3IgKHBhc3MgPSAwOyBwYXNzIDw9IDE7IHBhc3MrKykKKyAgICBmb3IgKGMgPSBjb250ZXh0OyBjOyBjID0gYy0+Y3VycmVudCkKKyAgICAgIGlmIChjLT5mbGFncyAmIChDT05URVhUX1NUQVRJQyB8IENPTlRFWFRfUFJPWFkpKQorCWNvbnRpbnVlOworICAgICAgZWxzZSBpZiAoIW1hdGNoX25ldGlkKGMtPmZpbHRlciwgbmV0aWRzLCBwYXNzKSkKKwljb250aW51ZTsKKyAgICAgIGVsc2UKKwl7CisJICBpZiAob3B0aW9uX2Jvb2woT1BUX0NPTlNFQ19BRERSKSkKKwkgICAgLyogc2VlZCBpcyBsYXJnZXN0IGV4dGFudCBsZWFzZSBhZGRyIGluIHRoaXMgY29udGV4dCAqLworCSAgICBzdGFydCA9IGxlYXNlX2ZpbmRfbWF4X2FkZHIoYyk7CisJICBlbHNlCisJICAgIC8qIHBpY2sgYSBzZWVkIGJhc2VkIG9uIGh3YWRkciAqLworCSAgICBzdGFydC5zX2FkZHIgPSBodG9ubChudG9obChjLT5zdGFydC5zX2FkZHIpICsgCisJCQkJICgoaiArIGMtPmFkZHJfZXBvY2gpICUgKDEgKyBudG9obChjLT5lbmQuc19hZGRyKSAtIG50b2hsKGMtPnN0YXJ0LnNfYWRkcikpKSk7CisKKwkgIC8qIGl0ZXJhdGUgdW50aWwgd2UgZmluZCBhIGZyZWUgYWRkcmVzcy4gKi8KKwkgIGFkZHIgPSBzdGFydDsKKwkgIAorCSAgZG8geworCSAgICAvKiBlbGltaW5hdGUgYWRkcmVzc2VzIGluIHVzZSBieSB0aGUgc2VydmVyLiAqLworCSAgICBmb3IgKGQgPSBjb250ZXh0OyBkOyBkID0gZC0+Y3VycmVudCkKKwkgICAgICBpZiAoYWRkci5zX2FkZHIgPT0gZC0+cm91dGVyLnNfYWRkcikKKwkJYnJlYWs7CisKKwkgICAgLyogQWRkcmVzc2VzIHdoaWNoIGVuZCBpbiAuMjU1IGFuZCAuMCBhcmUgYnJva2VuIGluIFdpbmRvd3MgZXZlbiB3aGVuIHVzaW5nIAorCSAgICAgICBzdXBlcm5ldHRpbmcuIGllIGRoY3AtcmFuZ2U9MTkyLjE2OC4wLjEsMTkyLjE2OC4xLjI1NCwyNTUsMjU1LDI1NC4wCisJICAgICAgIHRoZW4gMTkyLjE2OC4wLjI1NSBpcyBhIHZhbGlkIElQIGFkZHJlc3MsIGJ1dCBub3QgZm9yIFdpbmRvd3MgYXMgaXQncworCSAgICAgICBpbiB0aGUgY2xhc3MgQyByYW5nZS4gU2VlICBLQjI4MTU3OS4gV2UgdGhlcmVmb3JlIGRvbid0IGFsbG9jYXRlIHRoZXNlIAorCSAgICAgICBhZGRyZXNzZXMgdG8gYXZvaWQgaGFyZC10by1kaWFnbm9zZSBwcm9ibGVtcy4gVGhhbmtzIEJpbGwuICovCSAgICAKKwkgICAgaWYgKCFkICYmCisJCSFsZWFzZV9maW5kX2J5X2FkZHIoYWRkcikgJiYgCisJCSFjb25maWdfZmluZF9ieV9hZGRyZXNzKGRhZW1vbi0+ZGhjcF9jb25mLCBhZGRyKSAmJgorCQkoIUlOX0NMQVNTQyhudG9obChhZGRyLnNfYWRkcikpIHx8IAorCQkgKChudG9obChhZGRyLnNfYWRkcikgJiAweGZmKSAhPSAweGZmICYmICgobnRvaGwoYWRkci5zX2FkZHIpICYgMHhmZikgIT0gMHgwKSkpKQorCSAgICAgIHsKKwkJc3RydWN0IHBpbmdfcmVzdWx0ICpyLCAqdmljdGltID0gTlVMTDsKKwkJaW50IGNvdW50LCBtYXggPSAoaW50KSgwLjYgKiAoKChmbG9hdClQSU5HX0NBQ0hFX1RJTUUpLworCQkJCQkgICAgICAoKGZsb2F0KVBJTkdfV0FJVCkpKTsKKwkJCisJCSphZGRycCA9IGFkZHI7CisKKwkJLyogY2hlY2sgaWYgd2UgZmFpbGVkIHRvIHBpbmcgYWRkciBzb21ldGltZSBpbiB0aGUgbGFzdAorCQkgICBQSU5HX0NBQ0hFX1RJTUUgc2Vjb25kcy4gSWYgc28sIGFzc3VtZSB0aGUgc2FtZSBzaXR1YXRpb24gc3RpbGwgZXhpc3RzLgorCQkgICBUaGlzIGF2b2lkcyBwcm9ibGVtcyB3aGVuIGEgc3R1cGlkIGNsaWVudCBiYW5ncworCQkgICBvbiB1cyByZXBlYXRlZGx5LiBBcyBhIGZpbmFsIGNoZWNrLCBpZiB3ZSBkaWQgbW9yZQorCQkgICB0aGFuIDYwJSBvZiB0aGUgcG9zc2libGUgcGluZyBjaGVja3MgaW4gdGhlIGxhc3QgCisJCSAgIFBJTkdfQ0FDSEVfVElNRSwgd2UgYXJlIGluIGhpZ2gtbG9hZCBtb2RlLCBzbyBkb24ndCBkbyBhbnkgbW9yZS4gKi8KKwkJZm9yIChjb3VudCA9IDAsIHIgPSBkYWVtb24tPnBpbmdfcmVzdWx0czsgcjsgciA9IHItPm5leHQpCisJCSAgaWYgKGRpZmZ0aW1lKG5vdywgci0+dGltZSkgPiAgKGZsb2F0KVBJTkdfQ0FDSEVfVElNRSkKKwkJICAgIHZpY3RpbSA9IHI7IC8qIG9sZCByZWNvcmQgKi8KKwkJICBlbHNlIAorCQkgICAgeworCQkgICAgICBjb3VudCsrOworCQkgICAgICBpZiAoci0+YWRkci5zX2FkZHIgPT0gYWRkci5zX2FkZHIpCisJCQl7CisJCQkgIC8qIGNvbnNlYy1pcCBtb2RlOiB3ZSBvZmZlcmVkIHRoaXMgYWRkcmVzcyBmb3IgYW5vdGhlciBjbGllbnQKKwkJCSAgICAgKGRpZmZlcmVudCBoYXNoKSByZWNlbnRseSwgZG9uJ3Qgb2ZmZXIgaXQgdG8gdGhpcyBvbmUuICovCisJCQkgIGlmIChvcHRpb25fYm9vbChPUFRfQ09OU0VDX0FERFIpICYmIHItPmhhc2ggIT0gaikKKwkJCSAgICBicmVhazsKKwkJCSAgCisJCQkgIHJldHVybiAxOworCQkJfQorCQkgICAgfQorCisJCWlmICghcikgCisJCSAgeworCQkgICAgaWYgKChjb3VudCA8IG1heCkgJiYgIW9wdGlvbl9ib29sKE9QVF9OT19QSU5HKSAmJiBpY21wX3BpbmcoYWRkcikpCisJCSAgICAgIHsKKwkJCS8qIGFkZHJlc3MgaW4gdXNlOiBwZXJ0dXJiIGFkZHJlc3Mgc2VsZWN0aW9uIHNvIHRoYXQgd2UgYXJlCisJCQkgICBsZXNzIGxpa2VseSB0byB0cnkgdGhpcyBhZGRyZXNzIGFnYWluLiAqLworCQkJaWYgKCFvcHRpb25fYm9vbChPUFRfQ09OU0VDX0FERFIpKQorCQkJICBjLT5hZGRyX2Vwb2NoKys7CisJCSAgICAgIH0KKwkJICAgIGVsc2UKKwkJICAgICAgeworCQkJLyogYXQgdGhpcyBwb2ludCB2aWN0aW0gbWF5IGhvbGQgYW4gZXhwaXJlZCByZWNvcmQgKi8KKwkJCWlmICghdmljdGltKQorCQkJICB7CisJCQkgICAgaWYgKCh2aWN0aW0gPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBwaW5nX3Jlc3VsdCkpKSkKKwkJCSAgICAgIHsKKwkJCQl2aWN0aW0tPm5leHQgPSBkYWVtb24tPnBpbmdfcmVzdWx0czsKKwkJCQlkYWVtb24tPnBpbmdfcmVzdWx0cyA9IHZpY3RpbTsKKwkJCSAgICAgIH0KKwkJCSAgfQorCQkJCisJCQkvKiByZWNvcmQgdGhhdCB0aGlzIGFkZHJlc3MgaXMgT0sgZm9yIDMwcyAKKwkJCSAgIHdpdGhvdXQgbW9yZSBwaW5nIGNoZWNrcyAqLworCQkJaWYgKHZpY3RpbSkKKwkJCSAgeworCQkJICAgIHZpY3RpbS0+YWRkciA9IGFkZHI7CisJCQkgICAgdmljdGltLT50aW1lID0gbm93OworCQkJICAgIHZpY3RpbS0+aGFzaCA9IGo7CisJCQkgIH0KKwkJCXJldHVybiAxOworCQkgICAgICB9CisJCSAgfQorCSAgICAgIH0KKworCSAgICBhZGRyLnNfYWRkciA9IGh0b25sKG50b2hsKGFkZHIuc19hZGRyKSArIDEpOworCSAgICAKKwkgICAgaWYgKGFkZHIuc19hZGRyID09IGh0b25sKG50b2hsKGMtPmVuZC5zX2FkZHIpICsgMSkpCisJICAgICAgYWRkciA9IGMtPnN0YXJ0OworCSAgICAKKwkgIH0gd2hpbGUgKGFkZHIuc19hZGRyICE9IHN0YXJ0LnNfYWRkcik7CisJfQorCisgIHJldHVybiAwOworfQorCit2b2lkIGRoY3BfcmVhZF9ldGhlcnModm9pZCkKK3sKKyAgRklMRSAqZiA9IGZvcGVuKEVUSEVSU0ZJTEUsICJyIik7CisgIHVuc2lnbmVkIGludCBmbGFnczsKKyAgY2hhciAqYnVmZiA9IGRhZW1vbi0+bmFtZWJ1ZmY7CisgIGNoYXIgKmlwLCAqY3A7CisgIHN0cnVjdCBpbl9hZGRyIGFkZHI7CisgIHVuc2lnbmVkIGNoYXIgaHdhZGRyW0VUSEVSX0FERFJfTEVOXTsKKyAgc3RydWN0IGRoY3BfY29uZmlnICoqdXAsICp0bXA7CisgIHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlnOworICBpbnQgY291bnQgPSAwLCBsaW5lbm8gPSAwOworCisgIGFkZHIuc19hZGRyID0gMDsgLyogZWxpbWluYXRlIHdhcm5pbmcgKi8KKyAgCisgIGlmICghZikKKyAgICB7CisgICAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19FUlIsIF8oImZhaWxlZCB0byByZWFkICVzOiAlcyIpLCBFVEhFUlNGSUxFLCBzdHJlcnJvcihlcnJubykpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAvKiBUaGlzIGNhbiBiZSBjYWxsZWQgYWdhaW4gb24gU0lHSFVQLCBzbyByZW1vdmUgZW50cmllcyBjcmVhdGVkIGxhc3QgdGltZSByb3VuZC4gKi8KKyAgZm9yICh1cCA9ICZkYWVtb24tPmRoY3BfY29uZiwgY29uZmlnID0gZGFlbW9uLT5kaGNwX2NvbmY7IGNvbmZpZzsgY29uZmlnID0gdG1wKQorICAgIHsKKyAgICAgIHRtcCA9IGNvbmZpZy0+bmV4dDsKKyAgICAgIGlmIChjb25maWctPmZsYWdzICYgQ09ORklHX0ZST01fRVRIRVJTKQorCXsKKwkgICp1cCA9IHRtcDsKKwkgIC8qIGNhbm5vdCBoYXZlIGEgY2xpZCAqLworCSAgaWYgKGNvbmZpZy0+ZmxhZ3MgJiBDT05GSUdfTkFNRSkKKwkgICAgZnJlZShjb25maWctPmhvc3RuYW1lKTsKKwkgIGZyZWUoY29uZmlnLT5od2FkZHIpOworCSAgZnJlZShjb25maWcpOworCX0KKyAgICAgIGVsc2UKKwl1cCA9ICZjb25maWctPm5leHQ7CisgICAgfQorCisgIHdoaWxlIChmZ2V0cyhidWZmLCBNQVhETkFNRSwgZikpCisgICAgeworICAgICAgY2hhciAqaG9zdCA9IE5VTEw7CisgICAgICAKKyAgICAgIGxpbmVubysrOworICAgICAgCisgICAgICB3aGlsZSAoc3RybGVuKGJ1ZmYpID4gMCAmJiBpc3NwYWNlKChpbnQpYnVmZltzdHJsZW4oYnVmZiktMV0pKQorCWJ1ZmZbc3RybGVuKGJ1ZmYpLTFdID0gMDsKKyAgICAgIAorICAgICAgaWYgKCgqYnVmZiA9PSAnIycpIHx8ICgqYnVmZiA9PSAnKycpIHx8ICgqYnVmZiA9PSAwKSkKKwljb250aW51ZTsKKyAgICAgIAorICAgICAgZm9yIChpcCA9IGJ1ZmY7ICppcCAmJiAhaXNzcGFjZSgoaW50KSppcCk7IGlwKyspOworICAgICAgZm9yKDsgKmlwICYmIGlzc3BhY2UoKGludCkqaXApOyBpcCsrKQorCSppcCA9IDA7CisgICAgICBpZiAoISppcCB8fCBwYXJzZV9oZXgoYnVmZiwgaHdhZGRyLCBFVEhFUl9BRERSX0xFTiwgTlVMTCwgTlVMTCkgIT0gRVRIRVJfQUREUl9MRU4pCisJeworCSAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfRVJSLCBfKCJiYWQgbGluZSBhdCAlcyBsaW5lICVkIiksIEVUSEVSU0ZJTEUsIGxpbmVubyk7IAorCSAgY29udGludWU7CisJfQorICAgICAgCisgICAgICAvKiBjaGVjayBmb3IgbmFtZSBvciBkb3R0ZWQtcXVhZCAqLworICAgICAgZm9yIChjcCA9IGlwOyAqY3A7IGNwKyspCisJaWYgKCEoKmNwID09ICcuJyB8fCAoKmNwID49JzAnICYmICpjcCA8PSAnOScpKSkKKwkgIGJyZWFrOworICAgICAgCisgICAgICBpZiAoISpjcCkKKwl7CisJICBpZiAoKGFkZHIuc19hZGRyID0gaW5ldF9hZGRyKGlwKSkgPT0gKGluX2FkZHJfdCktMSkKKwkgICAgeworCSAgICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0VSUiwgXygiYmFkIGFkZHJlc3MgYXQgJXMgbGluZSAlZCIpLCBFVEhFUlNGSUxFLCBsaW5lbm8pOyAKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCisJICBmbGFncyA9IENPTkZJR19BRERSOworCSAgCisJICBmb3IgKGNvbmZpZyA9IGRhZW1vbi0+ZGhjcF9jb25mOyBjb25maWc7IGNvbmZpZyA9IGNvbmZpZy0+bmV4dCkKKwkgICAgaWYgKChjb25maWctPmZsYWdzICYgQ09ORklHX0FERFIpICYmIGNvbmZpZy0+YWRkci5zX2FkZHIgPT0gYWRkci5zX2FkZHIpCisJICAgICAgYnJlYWs7CisJfQorICAgICAgZWxzZSAKKwl7CisJICBpbnQgbm9tZW07CisJICBpZiAoIShob3N0ID0gY2Fub25pY2FsaXNlKGlwLCAmbm9tZW0pKSB8fCAhbGVnYWxfaG9zdG5hbWUoaG9zdCkpCisJICAgIHsKKwkgICAgICBpZiAoIW5vbWVtKQorCQlteV9zeXNsb2coTVNfREhDUCB8IExPR19FUlIsIF8oImJhZCBuYW1lIGF0ICVzIGxpbmUgJWQiKSwgRVRIRVJTRklMRSwgbGluZW5vKTsgCisJICAgICAgZnJlZShob3N0KTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCSAgICAgIAorCSAgZmxhZ3MgPSBDT05GSUdfTkFNRTsKKworCSAgZm9yIChjb25maWcgPSBkYWVtb24tPmRoY3BfY29uZjsgY29uZmlnOyBjb25maWcgPSBjb25maWctPm5leHQpCisJICAgIGlmICgoY29uZmlnLT5mbGFncyAmIENPTkZJR19OQU1FKSAmJiBob3N0bmFtZV9pc2VxdWFsKGNvbmZpZy0+aG9zdG5hbWUsIGhvc3QpKQorCSAgICAgIGJyZWFrOworCX0KKworICAgICAgaWYgKGNvbmZpZyAmJiAoY29uZmlnLT5mbGFncyAmIENPTkZJR19GUk9NX0VUSEVSUykpCisJeworCSAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfRVJSLCBfKCJpZ25vcmluZyAlcyBsaW5lICVkLCBkdXBsaWNhdGUgbmFtZSBvciBJUCBhZGRyZXNzIiksIEVUSEVSU0ZJTEUsIGxpbmVubyk7IAorCSAgY29udGludWU7CisJfQorCQorICAgICAgaWYgKCFjb25maWcpCisJeyAKKwkgIGZvciAoY29uZmlnID0gZGFlbW9uLT5kaGNwX2NvbmY7IGNvbmZpZzsgY29uZmlnID0gY29uZmlnLT5uZXh0KQorCSAgICB7CisJICAgICAgc3RydWN0IGh3YWRkcl9jb25maWcgKmNvbmZfYWRkciA9IGNvbmZpZy0+aHdhZGRyOworCSAgICAgIGlmIChjb25mX2FkZHIgJiYgCisJCSAgY29uZl9hZGRyLT5uZXh0ID09IE5VTEwgJiYgCisJCSAgY29uZl9hZGRyLT53aWxkY2FyZF9tYXNrID09IDAgJiYKKwkJICBjb25mX2FkZHItPmh3YWRkcl9sZW4gPT0gRVRIRVJfQUREUl9MRU4gJiYKKwkJICAoY29uZl9hZGRyLT5od2FkZHJfdHlwZSA9PSBBUlBIUkRfRVRIRVIgfHwgY29uZl9hZGRyLT5od2FkZHJfdHlwZSA9PSAwKSAmJgorCQkgIG1lbWNtcChjb25mX2FkZHItPmh3YWRkciwgaHdhZGRyLCBFVEhFUl9BRERSX0xFTikgPT0gMCkKKwkJYnJlYWs7CisJICAgIH0KKwkgIAorCSAgaWYgKCFjb25maWcpCisJICAgIHsKKwkgICAgICBpZiAoIShjb25maWcgPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaGNwX2NvbmZpZykpKSkKKwkJY29udGludWU7CisJICAgICAgY29uZmlnLT5mbGFncyA9IENPTkZJR19GUk9NX0VUSEVSUzsKKwkgICAgICBjb25maWctPmh3YWRkciA9IE5VTEw7CisJICAgICAgY29uZmlnLT5kb21haW4gPSBOVUxMOworCSAgICAgIGNvbmZpZy0+bmV0aWQgPSBOVUxMOworCSAgICAgIGNvbmZpZy0+bmV4dCA9IGRhZW1vbi0+ZGhjcF9jb25mOworCSAgICAgIGRhZW1vbi0+ZGhjcF9jb25mID0gY29uZmlnOworCSAgICB9CisJICAKKwkgIGNvbmZpZy0+ZmxhZ3MgfD0gZmxhZ3M7CisJICAKKwkgIGlmIChmbGFncyAmIENPTkZJR19OQU1FKQorCSAgICB7CisJICAgICAgY29uZmlnLT5ob3N0bmFtZSA9IGhvc3Q7CisJICAgICAgaG9zdCA9IE5VTEw7CisJICAgIH0KKwkgIAorCSAgaWYgKGZsYWdzICYgQ09ORklHX0FERFIpCisJICAgIGNvbmZpZy0+YWRkciA9IGFkZHI7CisJfQorICAgICAgCisgICAgICBjb25maWctPmZsYWdzIHw9IENPTkZJR19OT0NMSUQ7CisgICAgICBpZiAoIWNvbmZpZy0+aHdhZGRyKQorCWNvbmZpZy0+aHdhZGRyID0gd2hpbmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgaHdhZGRyX2NvbmZpZykpOworICAgICAgaWYgKGNvbmZpZy0+aHdhZGRyKQorCXsKKwkgIG1lbWNweShjb25maWctPmh3YWRkci0+aHdhZGRyLCBod2FkZHIsIEVUSEVSX0FERFJfTEVOKTsKKwkgIGNvbmZpZy0+aHdhZGRyLT5od2FkZHJfbGVuID0gRVRIRVJfQUREUl9MRU47CisJICBjb25maWctPmh3YWRkci0+aHdhZGRyX3R5cGUgPSBBUlBIUkRfRVRIRVI7CisJICBjb25maWctPmh3YWRkci0+d2lsZGNhcmRfbWFzayA9IDA7CisJICBjb25maWctPmh3YWRkci0+bmV4dCA9IE5VTEw7CisJfQorICAgICAgY291bnQrKzsKKyAgICAgIAorICAgICAgZnJlZShob3N0KTsKKworICAgIH0KKyAgCisgIGZjbG9zZShmKTsKKworICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCJyZWFkICVzIC0gJWQgYWRkcmVzc2VzIiksIEVUSEVSU0ZJTEUsIGNvdW50KTsKK30KKworCisvKiBJZiB3ZSd2ZSBub3QgZm91bmQgYSBob3N0bmFtZSBhbnkgb3RoZXIgd2F5LCB0cnkgYW5kIHNlZSBpZiB0aGVyZSdzIG9uZSBpbiAvZXRjL2hvc3RzCisgICBmb3IgdGhpcyBhZGRyZXNzLiBJZiBpdCBoYXMgYSBkb21haW4gcGFydCwgdGhhdCBtdXN0IG1hdGNoIHRoZSBzZXQgZG9tYWluIGFuZAorICAgaXQgZ2V0cyBzdHJpcHBlZC4gVGhlIHNldCBvZiBsZWdhbCBkb21haW4gbmFtZXMgaXMgYmlnZ2VyIHRoYW4gdGhlIHNldCBvZiBsZWdhbCBob3N0bmFtZXMKKyAgIHNvIGNoZWNrIGhlcmUgdGhhdCB0aGUgZG9tYWluIG5hbWUgaXMgbGVnYWwgYXMgYSBob3N0bmFtZS4gCisgICBOT1RFOiB3ZSdyZSBvbmx5IGFsbG93ZWQgdG8gb3ZlcndyaXRlIGRhZW1vbi0+ZGhjcF9idWZmIGlmIHdlIHN1Y2NlZWQuICovCitjaGFyICpob3N0X2Zyb21fZG5zKHN0cnVjdCBpbl9hZGRyIGFkZHIpCit7CisgIHN0cnVjdCBjcmVjICpsb29rdXA7CisKKyAgaWYgKGRhZW1vbi0+cG9ydCA9PSAwKQorICAgIHJldHVybiBOVUxMOyAvKiBETlMgZGlzYWJsZWQuICovCisgIAorICBsb29rdXAgPSBjYWNoZV9maW5kX2J5X2FkZHIoTlVMTCwgKHN0cnVjdCBhbGxfYWRkciAqKSZhZGRyLCAwLCBGX0lQVjQpOworCisgIGlmIChsb29rdXAgJiYgKGxvb2t1cC0+ZmxhZ3MgJiBGX0hPU1RTKSkKKyAgICB7CisgICAgICBjaGFyICpkb3QsICpob3N0bmFtZSA9IGNhY2hlX2dldF9uYW1lKGxvb2t1cCk7CisgICAgICBkb3QgPSBzdHJjaHIoaG9zdG5hbWUsICcuJyk7CisgICAgICAKKyAgICAgIGlmIChkb3QgJiYgc3RybGVuKGRvdCsxKSAhPSAwKQorCXsKKwkgIGNoYXIgKmQyID0gZ2V0X2RvbWFpbihhZGRyKTsKKwkgIGlmICghZDIgfHwgIWhvc3RuYW1lX2lzZXF1YWwoZG90KzEsIGQyKSkKKwkgICAgcmV0dXJuIE5VTEw7IC8qIHdyb25nIGRvbWFpbiAqLworCX0KKworICAgICAgaWYgKCFsZWdhbF9ob3N0bmFtZShob3N0bmFtZSkpCisJcmV0dXJuIE5VTEw7CisgICAgICAKKyAgICAgIHN0cm5jcHkoZGFlbW9uLT5kaGNwX2J1ZmYsIGhvc3RuYW1lLCAyNTYpOworICAgICAgZGFlbW9uLT5kaGNwX2J1ZmZbMjU1XSA9IDA7CisgICAgICBzdHJpcF9ob3N0bmFtZShkYWVtb24tPmRoY3BfYnVmZik7CisKKyAgICAgIHJldHVybiBkYWVtb24tPmRoY3BfYnVmZjsKKyAgICB9CisgIAorICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCAgcmVsYXlfdXBzdHJlYW00KHN0cnVjdCBkaGNwX3JlbGF5ICpyZWxheSwgc3RydWN0IGRoY3BfcGFja2V0ICptZXNzLCBzaXplX3Qgc3osIGludCBpZmFjZV9pbmRleCkKK3sKKyAgLyogLT5sb2NhbCBpcyBzYW1lIHZhbHVlIGZvciBhbGwgcmVsYXlzIG9uIC0+Y3VycmVudCBjaGFpbiAqLworICBzdHJ1Y3QgYWxsX2FkZHIgZnJvbTsKKyAgCisgIGlmIChtZXNzLT5vcCAhPSBCT09UUkVRVUVTVCkKKyAgICByZXR1cm4gMDsKKworICAvKiBzb3VyY2UgYWRkcmVzcyA9PSByZWxheSBhZGRyZXNzICovCisgIGZyb20uYWRkci5hZGRyNCA9IHJlbGF5LT5sb2NhbC5hZGRyLmFkZHI0OworICAKKyAgLyogYWxyZWFkeSBnYXRld2F5ZWQgPyAqLworICBpZiAobWVzcy0+Z2lhZGRyLnNfYWRkcikKKyAgICB7CisgICAgICAvKiBpZiBzbyBjaGVjayBpZiBieSB1cywgdG8gc3RvbXAgb24gbG9vcHMuICovCisgICAgICBpZiAobWVzcy0+Z2lhZGRyLnNfYWRkciA9PSByZWxheS0+bG9jYWwuYWRkci5hZGRyNC5zX2FkZHIpCisJcmV0dXJuIDE7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogcGx1ZyBpbiBvdXIgYWRkcmVzcyAqLworICAgICAgbWVzcy0+Z2lhZGRyLnNfYWRkciA9IHJlbGF5LT5sb2NhbC5hZGRyLmFkZHI0LnNfYWRkcjsKKyAgICB9CisKKyAgaWYgKChtZXNzLT5ob3BzKyspID4gMjApCisgICAgcmV0dXJuIDE7CisKKyAgZm9yICg7IHJlbGF5OyByZWxheSA9IHJlbGF5LT5jdXJyZW50KQorICAgIHsKKyAgICAgIHVuaW9uIG15c29ja2FkZHIgdG87CisgICAgICAKKyAgICAgIHRvLnNhLnNhX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICB0by5pbi5zaW5fYWRkciA9IHJlbGF5LT5zZXJ2ZXIuYWRkci5hZGRyNDsKKyAgICAgIHRvLmluLnNpbl9wb3J0ID0gaHRvbnMoZGFlbW9uLT5kaGNwX3NlcnZlcl9wb3J0KTsKKyAgICAgIAorICAgICAgc2VuZF9mcm9tKGRhZW1vbi0+ZGhjcGZkLCAwLCAoY2hhciAqKW1lc3MsIHN6LCAmdG8sICZmcm9tLCAwKTsKKyAgICAgIAorICAgICAgaWYgKG9wdGlvbl9ib29sKE9QVF9MT0dfT1BUUykpCisJeworCSAgaW5ldF9udG9wKEFGX0lORVQsICZyZWxheS0+bG9jYWwsIGRhZW1vbi0+YWRkcmJ1ZmYsIEFERFJTVFJMRU4pOworCSAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgXygiREhDUCByZWxheSAlcyAtPiAlcyIpLCBkYWVtb24tPmFkZHJidWZmLCBpbmV0X250b2EocmVsYXktPnNlcnZlci5hZGRyLmFkZHI0KSk7CisJfQorICAgICAgCisgICAgICAvKiBTYXZlIHRoaXMgZm9yIHJlcGxpZXMgKi8KKyAgICAgIHJlbGF5LT5pZmFjZV9pbmRleCA9IGlmYWNlX2luZGV4OworICAgIH0KKyAgCisgIHJldHVybiAxOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgZGhjcF9yZWxheSAqcmVsYXlfcmVwbHk0KHN0cnVjdCBkaGNwX3BhY2tldCAqbWVzcywgY2hhciAqYXJyaXZhbF9pbnRlcmZhY2UpCit7CisgIHN0cnVjdCBkaGNwX3JlbGF5ICpyZWxheTsKKworICBpZiAobWVzcy0+Z2lhZGRyLnNfYWRkciA9PSAwIHx8IG1lc3MtPm9wICE9IEJPT1RSRVBMWSkKKyAgICByZXR1cm4gTlVMTDsKKworICBmb3IgKHJlbGF5ID0gZGFlbW9uLT5yZWxheTQ7IHJlbGF5OyByZWxheSA9IHJlbGF5LT5uZXh0KQorICAgIHsKKyAgICAgIGlmIChtZXNzLT5naWFkZHIuc19hZGRyID09IHJlbGF5LT5sb2NhbC5hZGRyLmFkZHI0LnNfYWRkcikKKwl7CisJICBpZiAoIXJlbGF5LT5pbnRlcmZhY2UgfHwgd2lsZGNhcmRfbWF0Y2gocmVsYXktPmludGVyZmFjZSwgYXJyaXZhbF9pbnRlcmZhY2UpKQorCSAgICByZXR1cm4gcmVsYXktPmlmYWNlX2luZGV4ICE9IDAgPyByZWxheSA6IE5VTEw7CisJfQorICAgIH0KKyAgCisgIHJldHVybiBOVUxMOwkgCit9ICAgICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvZGhjcDYtcHJvdG9jb2wuaCBiL3NyYy9kaGNwNi1wcm90b2NvbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MjdkYzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZGhjcDYtcHJvdG9jb2wuaApAQCAtMCwwICsxLDc1IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE0IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2RlZmluZSBESENQVjZfU0VSVkVSX1BPUlQgNTQ3CisjZGVmaW5lIERIQ1BWNl9DTElFTlRfUE9SVCA1NDYKKworI2RlZmluZSBBTExfU0VSVkVSUyAgICAgICAgICAgICAgICAgICJGRjA1OjoxOjMiCisjZGVmaW5lIEFMTF9SRUxBWV9BR0VOVFNfQU5EX1NFUlZFUlMgIkZGMDI6OjE6MiIKKworI2RlZmluZSBESENQNlNPTElDSVQgICAgICAxCisjZGVmaW5lIERIQ1A2QURWRVJUSVNFICAgIDIKKyNkZWZpbmUgREhDUDZSRVFVRVNUICAgICAgMworI2RlZmluZSBESENQNkNPTkZJUk0gICAgICA0CisjZGVmaW5lIERIQ1A2UkVORVcgICAgICAgIDUKKyNkZWZpbmUgREhDUDZSRUJJTkQgICAgICAgNgorI2RlZmluZSBESENQNlJFUExZICAgICAgICA3CisjZGVmaW5lIERIQ1A2UkVMRUFTRSAgICAgIDgKKyNkZWZpbmUgREhDUDZERUNMSU5FICAgICAgOQorI2RlZmluZSBESENQNlJFQ09ORklHVVJFICAxMAorI2RlZmluZSBESENQNklSRVEgICAgICAgICAxMQorI2RlZmluZSBESENQNlJFTEFZRk9SVyAgICAxMgorI2RlZmluZSBESENQNlJFTEFZUkVQTCAgICAxMworCisjZGVmaW5lIE9QVElPTjZfQ0xJRU5UX0lEICAgICAgIDEKKyNkZWZpbmUgT1BUSU9ONl9TRVJWRVJfSUQgICAgICAgMgorI2RlZmluZSBPUFRJT042X0lBX05BICAgICAgICAgICAzCisjZGVmaW5lIE9QVElPTjZfSUFfVEEgICAgICAgICAgIDQKKyNkZWZpbmUgT1BUSU9ONl9JQUFERFIgICAgICAgICAgNQorI2RlZmluZSBPUFRJT042X09STyAgICAgICAgICAgICA2CisjZGVmaW5lIE9QVElPTjZfUFJFRkVSRU5DRSAgICAgIDcKKyNkZWZpbmUgT1BUSU9ONl9FTEFQU0VEX1RJTUUgICAgOAorI2RlZmluZSBPUFRJT042X1JFTEFZX01TRyAgICAgICA5CisjZGVmaW5lIE9QVElPTjZfQVVUSCAgICAgICAgICAgIDExCisjZGVmaW5lIE9QVElPTjZfVU5JQ0FTVCAgICAgICAgIDEyCisjZGVmaW5lIE9QVElPTjZfU1RBVFVTX0NPREUgICAgIDEzCisjZGVmaW5lIE9QVElPTjZfUkFQSURfQ09NTUlUICAgIDE0CisjZGVmaW5lIE9QVElPTjZfVVNFUl9DTEFTUyAgICAgIDE1CisjZGVmaW5lIE9QVElPTjZfVkVORE9SX0NMQVNTICAgIDE2CisjZGVmaW5lIE9QVElPTjZfVkVORE9SX09QVFMgICAgIDE3CisjZGVmaW5lIE9QVElPTjZfSU5URVJGQUNFX0lEICAgIDE4CisjZGVmaW5lIE9QVElPTjZfUkVDT05GSUdVUkVfTVNHIDE5CisjZGVmaW5lIE9QVElPTjZfUkVDT05GX0FDQ0VQVCAgIDIwCisjZGVmaW5lIE9QVElPTjZfRE5TX1NFUlZFUiAgICAgIDIzCisjZGVmaW5lIE9QVElPTjZfRE9NQUlOX1NFQVJDSCAgIDI0CisjZGVmaW5lIE9QVElPTjZfUkVGUkVTSF9USU1FICAgIDMyCisjZGVmaW5lIE9QVElPTjZfUkVNT1RFX0lEICAgICAgIDM3CisjZGVmaW5lIE9QVElPTjZfU1VCU0NSSUJFUl9JRCAgIDM4CisjZGVmaW5lIE9QVElPTjZfRlFETiAgICAgICAgICAgIDM5CisjZGVmaW5lIE9QVElPTjZfQ0xJRU5UX01BQyAgICAgIDc5CisKKy8qIHJlcGxhY2UgdGhpcyB3aXRoIHRoZSByZWFsIG51bWJlciB3aGVuIGFsbG9jYXRlZC4KKyAgIGRlZmluaW5nIHRoaXMgYWxzbyBlbmFibGVzIHRoZSByZWxldmFudCBjb2RlLiAqLyAKKy8qICNkZWZpbmUgT1BUSU9ONl9QUkVGSVhfQ0xBU1MgICAgOTkgKi8KKworCisjZGVmaW5lIERIQ1A2U1VDQ0VTUyAgICAgMAorI2RlZmluZSBESENQNlVOU1BFQyAgICAgIDEKKyNkZWZpbmUgREhDUDZOT0FERFJTICAgICAyCisjZGVmaW5lIERIQ1A2Tk9CSU5ESU5HICAgMworI2RlZmluZSBESENQNk5PVE9OTElOSyAgIDQKKyNkZWZpbmUgREhDUDZVU0VNVUxUSSAgICA1CisKZGlmZiAtLWdpdCBhL3NyYy9kaGNwNi5jIGIvc3JjL2RoY3A2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM0OGZkZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9kaGNwNi5jCkBAIC0wLDAgKzEsNzc4IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE0IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworI2lmZGVmIEhBVkVfREhDUDYKKworI2luY2x1ZGUgPG5ldGluZXQvaWNtcDYuaD4KKworc3RydWN0IGlmYWNlX3BhcmFtIHsKKyAgc3RydWN0IGRoY3BfY29udGV4dCAqY3VycmVudDsKKyAgc3RydWN0IGRoY3BfcmVsYXkgKnJlbGF5OworICBzdHJ1Y3QgaW42X2FkZHIgZmFsbGJhY2ssIHJlbGF5X2xvY2FsLCBsbF9hZGRyLCB1bGFfYWRkcjsKKyAgaW50IGluZCwgYWRkcl9tYXRjaDsKK307CisKK3N0cnVjdCBtYWNfcGFyYW0geworICBzdHJ1Y3QgaW42X2FkZHIgKnRhcmdldDsKKyAgdW5zaWduZWQgY2hhciAqbWFjOworICB1bnNpZ25lZCBpbnQgbWFjbGVuOworfTsKKworCitzdGF0aWMgaW50IGNvbXBsZXRlX2NvbnRleHQ2KHN0cnVjdCBpbjZfYWRkciAqbG9jYWwsICBpbnQgcHJlZml4LAorCQkJICAgICBpbnQgc2NvcGUsIGludCBpZl9pbmRleCwgaW50IGZsYWdzLCAKKwkJCSAgICAgdW5zaWduZWQgaW50IHByZWZlcnJlZCwgdW5zaWduZWQgaW50IHZhbGlkLCB2b2lkICp2cGFyYW0pOworc3RhdGljIGludCBmaW5kX21hYyhpbnQgZmFtaWx5LCBjaGFyICphZGRycCwgY2hhciAqbWFjLCBzaXplX3QgbWFjbGVuLCB2b2lkICpwYXJtdik7CitzdGF0aWMgaW50IG1ha2VfZHVpZDEoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgdHlwZSwgY2hhciAqbWFjLCBzaXplX3QgbWFjbGVuLCB2b2lkICpwYXJtKTsgCisKK3ZvaWQgZGhjcDZfaW5pdCh2b2lkKQoreworICBpbnQgZmQ7CisgIHN0cnVjdCBzb2NrYWRkcl9pbjYgc2FkZHI7CisjaWYgZGVmaW5lZChJUFY2X1RDTEFTUykgJiYgZGVmaW5lZChJUFRPU19DTEFTU19DUzYpCisgIGludCBjbGFzcyA9IElQVE9TX0NMQVNTX0NTNjsKKyNlbmRpZgorICBpbnQgb25lb3B0ID0gMTsKKworICBpZiAoKGZkID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCkpID09IC0xIHx8CisjaWYgZGVmaW5lZChJUFY2X1RDTEFTUykgJiYgZGVmaW5lZChJUFRPU19DTEFTU19DUzYpCisgICAgICBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQVjYsIElQVjZfVENMQVNTLCAmY2xhc3MsIHNpemVvZihjbGFzcykpID09IC0xIHx8CisjZW5kaWYKKyAgICAgIHNldHNvY2tvcHQoZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9WNk9OTFksICZvbmVvcHQsIHNpemVvZihvbmVvcHQpKSA9PSAtMSB8fAorICAgICAgIWZpeF9mZChmZCkgfHwKKyAgICAgICFzZXRfaXB2NnBrdGluZm8oZmQpKQorICAgIGRpZSAoXygiY2Fubm90IGNyZWF0ZSBESENQdjYgc29ja2V0OiAlcyIpLCBOVUxMLCBFQ19CQURORVQpOworICAKKyAvKiBXaGVuIGJpbmQtaW50ZXJmYWNlcyBpcyBzZXQsIHRoZXJlIG1pZ2h0IGJlIG1vcmUgdGhhbiBvbmUgZG5tc2FzcQorICAgICBpbnN0YW5jZSBiaW5kaW5nIHBvcnQgNTQ3LiBUaGF0J3MgT0sgaWYgdGhleSBzZXJ2ZSBkaWZmZXJlbnQgbmV0d29ya3MuCisgICAgIE5lZWQgdG8gc2V0IFJFVVNFQUREUnxSRVVTRVBPUlQgdG8gbWFrZSB0aGlzIHBvc2libGUuCisgICAgIEhhbmRsZSB0aGUgY2FzZSB0aGF0IFJFVVNFUE9SVCBpcyBkZWZpbmVkLCBidXQgdGhlIGtlcm5lbCBkb2Vzbid0IAorICAgICBzdXBwb3J0IGl0LiBUaGlzIGhhbmRsZXMgdGhlIGludHJvZHVjdGlvbiBvZiBSRVVTRVBPUlQgb24gTGludXguICovCisgIGlmIChvcHRpb25fYm9vbChPUFRfTk9XSUxEKSB8fCBvcHRpb25fYm9vbChPUFRfQ0xFVkVSQklORCkpCisgICAgeworICAgICAgaW50IHJjID0gMDsKKworI2lmZGVmIFNPX1JFVVNFUE9SVAorICAgICAgaWYgKChyYyA9IHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFUE9SVCwgJm9uZW9wdCwgc2l6ZW9mKG9uZW9wdCkpKSA9PSAtMSAmJgorCSAgZXJybm8gPT0gRU5PUFJPVE9PUFQpCisJcmMgPSAwOworI2VuZGlmCisgICAgICAKKyAgICAgIGlmIChyYyAhPSAtMSkKKwlyYyA9IHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgJm9uZW9wdCwgc2l6ZW9mKG9uZW9wdCkpOworICAgICAgCisgICAgICBpZiAocmMgPT0gLTEpCisJZGllKF8oImZhaWxlZCB0byBzZXQgU09fUkVVU0V7QUREUnxQT1JUfSBvbiBESENQdjYgc29ja2V0OiAlcyIpLCBOVUxMLCBFQ19CQURORVQpOworICAgIH0KKyAgCisgIG1lbXNldCgmc2FkZHIsIDAsIHNpemVvZihzYWRkcikpOworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgIHNhZGRyLnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisgIHNhZGRyLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgIHNhZGRyLnNpbjZfYWRkciA9IGluNmFkZHJfYW55OworICBzYWRkci5zaW42X3BvcnQgPSBodG9ucyhESENQVjZfU0VSVkVSX1BPUlQpOworICAKKyAgaWYgKGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2FkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkpCisgICAgZGllKF8oImZhaWxlZCB0byBiaW5kIERIQ1B2NiBzZXJ2ZXIgc29ja2V0OiAlcyIpLCBOVUxMLCBFQ19CQURORVQpOworICAKKyAgZGFlbW9uLT5kaGNwNmZkID0gZmQ7Cit9CisKK3ZvaWQgZGhjcDZfcGFja2V0KHRpbWVfdCBub3cpCit7CisgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQ7CisgIHN0cnVjdCBkaGNwX3JlbGF5ICpyZWxheTsKKyAgc3RydWN0IGlmYWNlX3BhcmFtIHBhcm07CisgIHN0cnVjdCBjbXNnaGRyICpjbXB0cjsKKyAgc3RydWN0IG1zZ2hkciBtc2c7CisgIGludCBpZl9pbmRleCA9IDA7CisgIHVuaW9uIHsKKyAgICBzdHJ1Y3QgY21zZ2hkciBhbGlnbjsgLyogdGhpcyBlbnN1cmVzIGFsaWdubWVudCAqLworICAgIGNoYXIgY29udHJvbDZbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IGluNl9wa3RpbmZvKSldOworICB9IGNvbnRyb2xfdTsKKyAgc3RydWN0IHNvY2thZGRyX2luNiBmcm9tOworICBzc2l6ZV90IHN6OyAKKyAgc3RydWN0IGlmcmVxIGlmcjsKKyAgc3RydWN0IGluYW1lICp0bXA7CisgIHVuc2lnbmVkIHNob3J0IHBvcnQ7CisgIHN0cnVjdCBpbjZfYWRkciBkc3RfYWRkcjsKKworICBtZW1zZXQoJmRzdF9hZGRyLCAwLCBzaXplb2YoZHN0X2FkZHIpKTsKKworICBtc2cubXNnX2NvbnRyb2wgPSBjb250cm9sX3UuY29udHJvbDY7CisgIG1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjb250cm9sX3UpOworICBtc2cubXNnX2ZsYWdzID0gMDsKKyAgbXNnLm1zZ19uYW1lID0gJmZyb207CisgIG1zZy5tc2dfbmFtZWxlbiA9IHNpemVvZihmcm9tKTsKKyAgbXNnLm1zZ19pb3YgPSAgJmRhZW1vbi0+ZGhjcF9wYWNrZXQ7CisgIG1zZy5tc2dfaW92bGVuID0gMTsKKyAgCisgIGlmICgoc3ogPSByZWN2X2RoY3BfcGFja2V0KGRhZW1vbi0+ZGhjcDZmZCwgJm1zZykpID09IC0xKQorICAgIHJldHVybjsKKyAgCisgIGZvciAoY21wdHIgPSBDTVNHX0ZJUlNUSERSKCZtc2cpOyBjbXB0cjsgY21wdHIgPSBDTVNHX05YVEhEUigmbXNnLCBjbXB0cikpCisgICAgaWYgKGNtcHRyLT5jbXNnX2xldmVsID09IElQUFJPVE9fSVBWNiAmJiBjbXB0ci0+Y21zZ190eXBlID09IGRhZW1vbi0+djZwa3RpbmZvKQorICAgICAgeworCXVuaW9uIHsKKwkgIHVuc2lnbmVkIGNoYXIgKmM7CisJICBzdHJ1Y3QgaW42X3BrdGluZm8gKnA7CisJfSBwOworCXAuYyA9IENNU0dfREFUQShjbXB0cik7CisgICAgICAgIAorCWlmX2luZGV4ID0gcC5wLT5pcGk2X2lmaW5kZXg7CisJZHN0X2FkZHIgPSBwLnAtPmlwaTZfYWRkcjsKKyAgICAgIH0KKworICBpZiAoIWluZGV4dG9uYW1lKGRhZW1vbi0+ZGhjcDZmZCwgaWZfaW5kZXgsIGlmci5pZnJfbmFtZSkpCisgICAgcmV0dXJuOworCisgIGlmICgocG9ydCA9IHJlbGF5X3JlcGx5NigmZnJvbSwgc3osIGlmci5pZnJfbmFtZSkpID09IDApCisgICAgeworICAgICAgZm9yICh0bXAgPSBkYWVtb24tPmlmX2V4Y2VwdDsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCisJaWYgKHRtcC0+bmFtZSAmJiB3aWxkY2FyZF9tYXRjaCh0bXAtPm5hbWUsIGlmci5pZnJfbmFtZSkpCisJICByZXR1cm47CisgICAgICAKKyAgICAgIGZvciAodG1wID0gZGFlbW9uLT5kaGNwX2V4Y2VwdDsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCisJaWYgKHRtcC0+bmFtZSAmJiB3aWxkY2FyZF9tYXRjaCh0bXAtPm5hbWUsIGlmci5pZnJfbmFtZSkpCisJICByZXR1cm47CisgICAgICAKKyAgICAgIHBhcm0uY3VycmVudCA9IE5VTEw7CisgICAgICBwYXJtLnJlbGF5ID0gTlVMTDsKKyAgICAgIG1lbXNldCgmcGFybS5yZWxheV9sb2NhbCwgMCwgSU42QUREUlNaKTsKKyAgICAgIHBhcm0uaW5kID0gaWZfaW5kZXg7CisgICAgICBwYXJtLmFkZHJfbWF0Y2ggPSAwOworICAgICAgbWVtc2V0KCZwYXJtLmZhbGxiYWNrLCAwLCBJTjZBRERSU1opOworICAgICAgbWVtc2V0KCZwYXJtLmxsX2FkZHIsIDAsIElONkFERFJTWik7CisgICAgICBtZW1zZXQoJnBhcm0udWxhX2FkZHIsIDAsIElONkFERFJTWik7CisgICAgICAKKyAgICAgIGZvciAoY29udGV4dCA9IGRhZW1vbi0+ZGhjcDY7IGNvbnRleHQ7IGNvbnRleHQgPSBjb250ZXh0LT5uZXh0KQorCWlmIChJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmY29udGV4dC0+c3RhcnQ2KSAmJiBjb250ZXh0LT5wcmVmaXggPT0gMCkKKwkgIHsKKwkgICAgLyogd2lsZGNhcmQgY29udGV4dCBmb3IgREhDUC1zdGF0ZWxlc3Mgb25seSAqLworCSAgICBwYXJtLmN1cnJlbnQgPSBjb250ZXh0OworCSAgICBjb250ZXh0LT5jdXJyZW50ID0gTlVMTDsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIC8qIHVubGlua2VkIGNvbnRleHRzIGFyZSBtYXJrZWQgYnkgY29udGV4dC0+Y3VycmVudCA9PSBjb250ZXh0ICovCisJICAgIGNvbnRleHQtPmN1cnJlbnQgPSBjb250ZXh0OworCSAgICBtZW1zZXQoJmNvbnRleHQtPmxvY2FsNiwgMCwgSU42QUREUlNaKTsKKwkgIH0KKworICAgICAgZm9yIChyZWxheSA9IGRhZW1vbi0+cmVsYXk2OyByZWxheTsgcmVsYXkgPSByZWxheS0+bmV4dCkKKwlyZWxheS0+Y3VycmVudCA9IHJlbGF5OworICAgICAgCisgICAgICBpZiAoIWlmYWNlX2VudW1lcmF0ZShBRl9JTkVUNiwgJnBhcm0sIGNvbXBsZXRlX2NvbnRleHQ2KSkKKwlyZXR1cm47CisKKyAgICAgIGlmIChkYWVtb24tPmlmX25hbWVzIHx8IGRhZW1vbi0+aWZfYWRkcnMpCisJeworCSAgCisJICBmb3IgKHRtcCA9IGRhZW1vbi0+aWZfbmFtZXM7IHRtcDsgdG1wID0gdG1wLT5uZXh0KQorCSAgICBpZiAodG1wLT5uYW1lICYmIHdpbGRjYXJkX21hdGNoKHRtcC0+bmFtZSwgaWZyLmlmcl9uYW1lKSkKKwkgICAgICBicmVhazsKKwkgIAorCSAgaWYgKCF0bXAgJiYgIXBhcm0uYWRkcl9tYXRjaCkKKwkgICAgcmV0dXJuOworCX0KKyAgICAgIAorICAgICAgaWYgKHBhcm0ucmVsYXkpCisJeworCSAgLyogSWdub3JlIHJlcXVlc3RzIHNlbnQgdG8gdGhlIEFMTF9TRVJWRVJTIG11bHRpY2FzdCBhZGRyZXNzIGZvciByZWxheSB3aGVuCisJICAgICB3ZSdyZSBsaXN0ZW5pbmcgdGhlcmUgZm9yIERIQ1B2NiBzZXJ2ZXIgcmVhc29ucy4gKi8KKwkgIHN0cnVjdCBpbjZfYWRkciBhbGxfc2VydmVyczsKKwkgIAorCSAgaW5ldF9wdG9uKEFGX0lORVQ2LCBBTExfU0VSVkVSUywgJmFsbF9zZXJ2ZXJzKTsKKwkgIAorCSAgaWYgKCFJTjZfQVJFX0FERFJfRVFVQUwoJmRzdF9hZGRyLCAmYWxsX3NlcnZlcnMpKQorCSAgICByZWxheV91cHN0cmVhbTYocGFybS5yZWxheSwgc3osICZmcm9tLnNpbjZfYWRkciwgZnJvbS5zaW42X3Njb3BlX2lkKTsKKwkgIHJldHVybjsKKwl9CisgICAgICAKKyAgICAgIC8qIE1heSBoYXZlIGNvbmZpZ3VyZWQgcmVsYXksIGJ1dCBub3QgREhDUCBzZXJ2ZXIgKi8KKyAgICAgIGlmICghZGFlbW9uLT5kb2luZ19kaGNwNikKKwlyZXR1cm47CisgICAgICAKKyAgICAgIGxlYXNlX3BydW5lKE5VTEwsIG5vdyk7IC8qIGxvc2UgYW55IGV4cGlyZWQgbGVhc2VzICovCisgICAgICAKKyAgICAgIHBvcnQgPSBkaGNwNl9yZXBseShwYXJtLmN1cnJlbnQsIGlmX2luZGV4LCBpZnIuaWZyX25hbWUsICZwYXJtLmZhbGxiYWNrLCAKKwkJCSAmcGFybS5sbF9hZGRyLCAmcGFybS51bGFfYWRkciwgc3osICZmcm9tLnNpbjZfYWRkciwgbm93KTsKKyAgICAgIAorICAgICAgbGVhc2VfdXBkYXRlX2ZpbGUobm93KTsKKyAgICAgIGxlYXNlX3VwZGF0ZV9kbnMoMCk7CisgICAgfQorCQkJICAKKyAgLyogVGhlIHBvcnQgaW4gdGhlIHNvdXJjZSBhZGRyZXNzIG9mIHRoZSBvcmlnaW5hbCByZXF1ZXN0IHNob3VsZAorICAgICBiZSBjb3JyZWN0LCBidXQgYXQgbGVhc3Qgb25jZSBjbGllbnQgc2VuZHMgZnJvbSB0aGUgc2VydmVyIHBvcnQsCisgICAgIHNvIHdlIGV4cGxpY2l0bHkgc2VuZCB0byB0aGUgY2xpZW50IHBvcnQgdG8gYSBjbGllbnQsIGFuZCB0aGUKKyAgICAgc2VydmVyIHBvcnQgdG8gYSByZWxheS4gKi8KKyAgaWYgKHBvcnQgIT0gMCkKKyAgICB7CisgICAgICBmcm9tLnNpbjZfcG9ydCA9IGh0b25zKHBvcnQpOworICAgICAgd2hpbGUgKHNlbmR0byhkYWVtb24tPmRoY3A2ZmQsIGRhZW1vbi0+b3V0cGFja2V0Lmlvdl9iYXNlLCBzYXZlX2NvdW50ZXIoMCksIAorCQkgICAgMCwgKHN0cnVjdCBzb2NrYWRkciAqKSZmcm9tLCBzaXplb2YoZnJvbSkpID09IC0xICYmCisJICAgcmV0cnlfc2VuZCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgZ2V0X2NsaWVudF9tYWMoc3RydWN0IGluNl9hZGRyICpjbGllbnQsIGludCBpZmFjZSwgdW5zaWduZWQgY2hhciAqbWFjLCB1bnNpZ25lZCBpbnQgKm1hY2xlbnAsIHVuc2lnbmVkIGludCAqbWFjdHlwZXApCit7CisgIC8qIFJlY2lldmluZyBhIHBhY2tldCBmcm9tIGEgaG9zdCBkb2VzIG5vdCBwb3B1bGF0ZSB0aGUgbmVpZ2hib3VyCisgICAgIGNhY2hlLCBzbyB3ZSBzZW5kIGEgbmVpZ2hib3VyIGRpc2NvdmVyeSByZXF1ZXN0IGlmIHdlIGNhbid0IAorICAgICBmaW5kIHRoZSBzZW5kZXIuIFJlcGVhdCBhIGZldyB0aW1lcyBpbiBjYXNlIG9mIHBhY2tldCBsb3NzLiAqLworICAKKyAgc3RydWN0IG5laWdoX3BhY2tldCBuZWlnaDsKKyAgc3RydWN0IHNvY2thZGRyX2luNiBhZGRyOworICBzdHJ1Y3QgbWFjX3BhcmFtIG1hY19wYXJhbTsKKyAgaW50IGk7CisKKyAgbmVpZ2gudHlwZSA9IE5EX05FSUdIQk9SX1NPTElDSVQ7CisgIG5laWdoLmNvZGUgPSAwOworICBuZWlnaC5yZXNlcnZlZCA9IDA7CisgIG5laWdoLnRhcmdldCA9ICpjbGllbnQ7CisgIAorICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKyAgYWRkci5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorICBhZGRyLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgIGFkZHIuc2luNl9wb3J0ID0gaHRvbnMoSVBQUk9UT19JQ01QVjYpOworICBhZGRyLnNpbjZfYWRkciA9ICpjbGllbnQ7CisgIGFkZHIuc2luNl9zY29wZV9pZCA9IGlmYWNlOworICAKKyAgbWFjX3BhcmFtLnRhcmdldCA9IGNsaWVudDsKKyAgbWFjX3BhcmFtLm1hY2xlbiA9IDA7CisgIG1hY19wYXJhbS5tYWMgPSBtYWM7CisgIAorICBmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQorICAgIHsKKyAgICAgIHN0cnVjdCB0aW1lc3BlYyB0czsKKyAgICAgIAorICAgICAgaWZhY2VfZW51bWVyYXRlKEFGX1VOU1BFQywgJm1hY19wYXJhbSwgZmluZF9tYWMpOworICAgICAgCisgICAgICBpZiAobWFjX3BhcmFtLm1hY2xlbiAhPSAwKQorCWJyZWFrOworICAgICAgCisgICAgICBzZW5kdG8oZGFlbW9uLT5pY21wNmZkLCAmbmVpZ2gsIHNpemVvZihuZWlnaCksIDAsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgc2l6ZW9mKGFkZHIpKTsKKyAgICAgIAorICAgICAgdHMudHZfc2VjID0gMDsKKyAgICAgIHRzLnR2X25zZWMgPSAxMDAwMDAwMDA7IC8qIDEwMG1zICovCisgICAgICBuYW5vc2xlZXAoJnRzLCBOVUxMKTsKKyAgICB9CisKKyAgKm1hY2xlbnAgPSBtYWNfcGFyYW0ubWFjbGVuOworICAqbWFjdHlwZXAgPSBBUlBIUkRfRVRIRVI7Cit9CisgICAgCitzdGF0aWMgaW50IGZpbmRfbWFjKGludCBmYW1pbHksIGNoYXIgKmFkZHJwLCBjaGFyICptYWMsIHNpemVfdCBtYWNsZW4sIHZvaWQgKnBhcm12KQoreworICBzdHJ1Y3QgbWFjX3BhcmFtICpwYXJtID0gcGFybXY7CisgIAorICBpZiAoZmFtaWx5ID09IEFGX0lORVQ2ICYmIElONl9BUkVfQUREUl9FUVVBTChwYXJtLT50YXJnZXQsIChzdHJ1Y3QgaW42X2FkZHIgKilhZGRycCkpCisgICAgeworICAgICAgaWYgKG1hY2xlbiA8PSBESENQX0NIQUREUl9NQVgpCisJeworCSAgcGFybS0+bWFjbGVuID0gbWFjbGVuOworCSAgbWVtY3B5KHBhcm0tPm1hYywgbWFjLCBtYWNsZW4pOworCX0KKyAgICAgIAorICAgICAgcmV0dXJuIDA7IC8qIGZvdW5kLCBhYm9ydCAqLworICAgIH0KKyAgCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNvbXBsZXRlX2NvbnRleHQ2KHN0cnVjdCBpbjZfYWRkciAqbG9jYWwsICBpbnQgcHJlZml4LAorCQkJICAgICBpbnQgc2NvcGUsIGludCBpZl9pbmRleCwgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgcHJlZmVycmVkLCAKKwkJCSAgICAgdW5zaWduZWQgaW50IHZhbGlkLCB2b2lkICp2cGFyYW0pCit7CisgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQ7CisgIHN0cnVjdCBkaGNwX3JlbGF5ICpyZWxheTsKKyAgc3RydWN0IGlmYWNlX3BhcmFtICpwYXJhbSA9IHZwYXJhbTsKKyAgc3RydWN0IGluYW1lICp0bXA7CisgCisgICh2b2lkKXNjb3BlOyAvKiB3YXJuaW5nICovCisgIAorICBpZiAoaWZfaW5kZXggPT0gcGFyYW0tPmluZCkKKyAgICB7CisgICAgICBpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKGxvY2FsKSkKKwlwYXJhbS0+bGxfYWRkciA9ICpsb2NhbDsKKyAgICAgIGVsc2UgaWYgKElONl9JU19BRERSX1VMQShsb2NhbCkpCisJcGFyYW0tPnVsYV9hZGRyID0gKmxvY2FsOworCisgICAgICBpZiAoIUlONl9JU19BRERSX0xPT1BCQUNLKGxvY2FsKSAmJgorCSAgIUlONl9JU19BRERSX0xJTktMT0NBTChsb2NhbCkgJiYKKwkgICFJTjZfSVNfQUREUl9NVUxUSUNBU1QobG9jYWwpKQorCXsKKwkgIC8qIGlmIHdlIGhhdmUgLS1saXN0ZW4tYWRkcmVzcyBjb25maWcsIHNlZSBpZiB0aGUgCisJICAgICBhcnJpdmFsIGludGVyZmFjZSBoYXMgYSBtYXRjaGluZyBhZGRyZXNzLiAqLworCSAgZm9yICh0bXAgPSBkYWVtb24tPmlmX2FkZHJzOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKKwkgICAgaWYgKHRtcC0+YWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYgJiYKKwkJSU42X0FSRV9BRERSX0VRVUFMKCZ0bXAtPmFkZHIuaW42LnNpbjZfYWRkciwgbG9jYWwpKQorCSAgICAgIHBhcmFtLT5hZGRyX21hdGNoID0gMTsKKwkgIAorCSAgLyogRGV0ZXJtaW5lIGEgZ2xvYmFsbHkgYWRkcmVzcyBvbiB0aGUgYXJyaXZhbCBpbnRlcmZhY2UsIGV2ZW4KKwkgICAgIGlmIHdlIGhhdmUgbm8gbWF0Y2hpbmcgZGhjcC1jb250ZXh0LCBiZWNhdXNlIHdlJ3JlIG9ubHkKKwkgICAgIGFsbG9jYXRpbmcgb24gcmVtb3RlIHN1Ym5ldHMgdmlhIHJlbGF5cy4gVGhpcworCSAgICAgaXMgdXNlZCBhcyBhIGRlZmF1bHQgZm9yIHRoZSBETlMgc2VydmVyIG9wdGlvbi4gKi8KKwkgIHBhcmFtLT5mYWxsYmFjayA9ICpsb2NhbDsKKwkgIAorCSAgZm9yIChjb250ZXh0ID0gZGFlbW9uLT5kaGNwNjsgY29udGV4dDsgY29udGV4dCA9IGNvbnRleHQtPm5leHQpCisJICAgIHsKKwkgICAgICBpZiAoKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9ESENQKSAmJgorCQkgICEoY29udGV4dC0+ZmxhZ3MgJiAoQ09OVEVYVF9URU1QTEFURSB8IENPTlRFWFRfT0xEKSkgJiYKKwkJICBwcmVmaXggPD0gY29udGV4dC0+cHJlZml4ICYmCisJCSAgaXNfc2FtZV9uZXQ2KGxvY2FsLCAmY29udGV4dC0+c3RhcnQ2LCBjb250ZXh0LT5wcmVmaXgpICYmCisJCSAgaXNfc2FtZV9uZXQ2KGxvY2FsLCAmY29udGV4dC0+ZW5kNiwgY29udGV4dC0+cHJlZml4KSkKKwkJeworCQkgIAorCQkgIAorCQkgIC8qIGxpbmsgaXQgb250byB0aGUgY3VycmVudCBjaGFpbiBpZiB3ZSd2ZSBub3Qgc2VlbiBpdCBiZWZvcmUgKi8KKwkJICBpZiAoY29udGV4dC0+Y3VycmVudCA9PSBjb250ZXh0KQorCQkgICAgeworCQkgICAgICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICp0bXAsICoqdXA7CisJCSAgICAgIAorCQkgICAgICAvKiB1c2UgaW50ZXJmYWNlIHZhbHVlcyBvbmx5IGZvciBjb250cnVjdGVkIGNvbnRleHRzICovCisJCSAgICAgIGlmICghKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9DT05TVFJVQ1RFRCkpCisJCQlwcmVmZXJyZWQgPSB2YWxpZCA9IDB4ZmZmZmZmZmY7CisJCSAgICAgIGVsc2UgaWYgKGZsYWdzICYgSUZBQ0VfREVQUkVDQVRFRCkKKwkJCXByZWZlcnJlZCA9IDA7CisJCSAgICAgIAorCQkgICAgICBpZiAoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX0RFUFJFQ0FURSkKKwkJCXByZWZlcnJlZCA9IDA7CisJCSAgICAgIAorCQkgICAgICAvKiBvcmRlciBjaGFpbiwgbG9uZ2VzdCBwcmVmZXJyZWQgdGltZSBmaXJzdCAqLworCQkgICAgICBmb3IgKHVwID0gJnBhcmFtLT5jdXJyZW50LCB0bXAgPSBwYXJhbS0+Y3VycmVudDsgdG1wOyB0bXAgPSB0bXAtPmN1cnJlbnQpCisJCQlpZiAodG1wLT5wcmVmZXJyZWQgPD0gcHJlZmVycmVkKQorCQkJICBicmVhazsKKwkJCWVsc2UKKwkJCSAgdXAgPSAmdG1wLT5jdXJyZW50OworCQkgICAgICAKKwkJICAgICAgY29udGV4dC0+Y3VycmVudCA9ICp1cDsKKwkJICAgICAgKnVwID0gY29udGV4dDsKKwkJICAgICAgY29udGV4dC0+bG9jYWw2ID0gKmxvY2FsOworCQkgICAgICBjb250ZXh0LT5wcmVmZXJyZWQgPSBwcmVmZXJyZWQ7CisJCSAgICAgIGNvbnRleHQtPnZhbGlkID0gdmFsaWQ7CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKworICAgICAgZm9yIChyZWxheSA9IGRhZW1vbi0+cmVsYXk2OyByZWxheTsgcmVsYXkgPSByZWxheS0+bmV4dCkKKwlpZiAoSU42X0FSRV9BRERSX0VRVUFMKGxvY2FsLCAmcmVsYXktPmxvY2FsLmFkZHIuYWRkcjYpICYmIHJlbGF5LT5jdXJyZW50ID09IHJlbGF5ICYmCisJICAgIChJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmcGFyYW0tPnJlbGF5X2xvY2FsKSB8fCBJTjZfQVJFX0FERFJfRVFVQUwobG9jYWwsICZwYXJhbS0+cmVsYXlfbG9jYWwpKSkKKwkgIHsKKwkgICAgcmVsYXktPmN1cnJlbnQgPSBwYXJhbS0+cmVsYXk7CisJICAgIHBhcmFtLT5yZWxheSA9IHJlbGF5OworCSAgICBwYXJhbS0+cmVsYXlfbG9jYWwgPSAqbG9jYWw7CisJICB9CisgICAgICAKKyAgICB9ICAgICAgICAgIAorIAorIHJldHVybiAxOworfQorCitzdHJ1Y3QgZGhjcF9jb25maWcgKmNvbmZpZ19maW5kX2J5X2FkZHJlc3M2KHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlncywgc3RydWN0IGluNl9hZGRyICpuZXQsIGludCBwcmVmaXgsIHU2NCBhZGRyKQoreworICBzdHJ1Y3QgZGhjcF9jb25maWcgKmNvbmZpZzsKKyAgCisgIGZvciAoY29uZmlnID0gY29uZmlnczsgY29uZmlnOyBjb25maWcgPSBjb25maWctPm5leHQpCisgICAgaWYgKChjb25maWctPmZsYWdzICYgQ09ORklHX0FERFI2KSAmJgorCWlzX3NhbWVfbmV0NigmY29uZmlnLT5hZGRyNiwgbmV0LCBwcmVmaXgpICYmCisJKHByZWZpeCA9PSAxMjggfHwgYWRkcjZwYXJ0KCZjb25maWctPmFkZHI2KSA9PSBhZGRyKSkKKyAgICAgIHJldHVybiBjb25maWc7CisgIAorICByZXR1cm4gTlVMTDsKK30KKworc3RydWN0IGRoY3BfY29udGV4dCAqYWRkcmVzczZfYWxsb2NhdGUoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwgIHVuc2lnbmVkIGNoYXIgKmNsaWQsIGludCBjbGlkX2xlbiwgaW50IHRlbXBfYWRkciwKKwkJCQkgICAgICAgaW50IGlhaWQsIGludCBzZXJpYWwsIHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZHMsIGludCBwbGFpbl9yYW5nZSwgc3RydWN0IGluNl9hZGRyICphbnMpICAgCit7CisgIC8qIEZpbmQgYSBmcmVlIGFkZHJlc3M6IGV4Y2x1ZGUgYW55dGhpbmcgaW4gdXNlIGFuZCBhbnl0aGluZyBhbGxvY2F0ZWQgdG8KKyAgICAgYSBwYXJ0aWN1bGFyIGh3YWRkci9jbGllbnRpZC9ob3N0bmFtZSBpbiBvdXIgY29uZmlndXJhdGlvbi4KKyAgICAgVHJ5IHRvIHJldHVybiBmcm9tIGNvbnRleHRzIHdoaWNoIG1hdGNoIG5ldGlkcyBmaXJzdC4gCisgICAgIAorICAgICBOb3RlIHRoYXQgd2UgYXNzdW1lIHRoZSBhZGRyZXNzIHByZWZpeCBsZW5ndGhzIGFyZSA2NCBvciBncmVhdGVyLCBzbyB3ZSBjYW4KKyAgICAgZ2V0IGJ5IHdpdGggNjQgYml0IGFyaXRobWV0aWMuCisqLworCisgIHU2NCBzdGFydCwgYWRkcjsKKyAgc3RydWN0IGRoY3BfY29udGV4dCAqYywgKmQ7CisgIGludCBpLCBwYXNzOworICB1NjQgajsgCisKKyAgLyogaGFzaCBod2FkZHI6IHVzZSB0aGUgU0RCTSBoYXNoaW5nIGFsZ29yaXRobS4gIFRoaXMgd29ya3MKKyAgICAgZm9yIE1BQyBhZGRyZXNzZXMsIGxldCdzIHNlZSBob3cgaXQgbWFuYWdlcyB3aXRoIGNsaWVudC1pZHMhIAorICAgICBGb3IgdGVtcG9yYXJ5IGFkZHJlc3Nlcywgd2UgZ2VuZXJhdGUgYSBuZXcgcmFuZG9tIG9uZSBlYWNoIHRpbWUuICovCisgIGlmICh0ZW1wX2FkZHIpCisgICAgaiA9IHJhbmQ2NCgpOworICBlbHNlCisgICAgZm9yIChqID0gaWFpZCwgaSA9IDA7IGkgPCBjbGlkX2xlbjsgaSsrKQorICAgICAgaiArPSBjbGlkW2ldICsgKGogPDwgNikgKyAoaiA8PCAxNikgLSBqOworICAKKyAgZm9yIChwYXNzID0gMDsgcGFzcyA8PSBwbGFpbl9yYW5nZSA/IDEgOiAwOyBwYXNzKyspCisgICAgZm9yIChjID0gY29udGV4dDsgYzsgYyA9IGMtPmN1cnJlbnQpCisgICAgICBpZiAoYy0+ZmxhZ3MgJiAoQ09OVEVYVF9ERVBSRUNBVEUgfCBDT05URVhUX1NUQVRJQyB8IENPTlRFWFRfUkFfU1RBVEVMRVNTIHwgQ09OVEVYVF9VU0VEKSkKKwljb250aW51ZTsKKyAgICAgIGVsc2UgaWYgKCFtYXRjaF9uZXRpZChjLT5maWx0ZXIsIG5ldGlkcywgcGFzcykpCisJY29udGludWU7CisgICAgICBlbHNlCisJeyAKKwkgIGlmICghdGVtcF9hZGRyICYmIG9wdGlvbl9ib29sKE9QVF9DT05TRUNfQUREUikpCisJICAgIC8qIHNlZWQgaXMgbGFyZ2VzdCBleHRhbnQgbGVhc2UgYWRkciBpbiB0aGlzIGNvbnRleHQgKi8KKwkgICAgc3RhcnQgPSBsZWFzZV9maW5kX21heF9hZGRyNihjKSArIHNlcmlhbDsKKwkgIGVsc2UKKwkgICAgc3RhcnQgPSBhZGRyNnBhcnQoJmMtPnN0YXJ0NikgKyAoKGogKyBjLT5hZGRyX2Vwb2NoKSAlICgxICsgYWRkcjZwYXJ0KCZjLT5lbmQ2KSAtIGFkZHI2cGFydCgmYy0+c3RhcnQ2KSkpOworCisJICAvKiBpdGVyYXRlIHVudGlsIHdlIGZpbmQgYSBmcmVlIGFkZHJlc3MuICovCisJICBhZGRyID0gc3RhcnQ7CisJICAKKwkgIGRvIHsKKwkgICAgLyogZWxpbWluYXRlIGFkZHJlc3NlcyBpbiB1c2UgYnkgdGhlIHNlcnZlci4gKi8KKwkgICAgZm9yIChkID0gY29udGV4dDsgZDsgZCA9IGQtPmN1cnJlbnQpCisJICAgICAgaWYgKGFkZHIgPT0gYWRkcjZwYXJ0KCZkLT5sb2NhbDYpKQorCQlicmVhazsKKworCSAgICBpZiAoIWQgJiYKKwkJIWxlYXNlNl9maW5kX2J5X2FkZHIoJmMtPnN0YXJ0NiwgYy0+cHJlZml4LCBhZGRyKSAmJiAKKwkJIWNvbmZpZ19maW5kX2J5X2FkZHJlc3M2KGRhZW1vbi0+ZGhjcF9jb25mLCAmYy0+c3RhcnQ2LCBjLT5wcmVmaXgsIGFkZHIpKQorCSAgICAgIHsKKwkJKmFucyA9IGMtPnN0YXJ0NjsKKwkJc2V0YWRkcjZwYXJ0IChhbnMsIGFkZHIpOworCQlyZXR1cm4gYzsKKwkgICAgICB9CisJCisJICAgIGFkZHIrKzsKKwkgICAgCisJICAgIGlmIChhZGRyICA9PSBhZGRyNnBhcnQoJmMtPmVuZDYpICsgMSkKKwkgICAgICBhZGRyID0gYWRkcjZwYXJ0KCZjLT5zdGFydDYpOworCSAgICAKKwkgIH0gd2hpbGUgKGFkZHIgIT0gc3RhcnQpOworCX0KKwkgICAKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIGNhbiBkeW5hbWljYWxseSBhbGxvY2F0ZSBhZGRyICovCitzdHJ1Y3QgZGhjcF9jb250ZXh0ICphZGRyZXNzNl9hdmFpbGFibGUoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwgCisJCQkJCXN0cnVjdCBpbjZfYWRkciAqdGFkZHIsCisJCQkJCXN0cnVjdCBkaGNwX25ldGlkICpuZXRpZHMsCisJCQkJCWludCBwbGFpbl9yYW5nZSkKK3sKKyAgdTY0IHN0YXJ0LCBlbmQsIGFkZHIgPSBhZGRyNnBhcnQodGFkZHIpOworICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICp0bXA7CisgCisgIGZvciAodG1wID0gY29udGV4dDsgdG1wOyB0bXAgPSB0bXAtPmN1cnJlbnQpCisgICAgeworICAgICAgc3RhcnQgPSBhZGRyNnBhcnQoJnRtcC0+c3RhcnQ2KTsKKyAgICAgIGVuZCA9IGFkZHI2cGFydCgmdG1wLT5lbmQ2KTsKKworICAgICAgaWYgKCEodG1wLT5mbGFncyAmIChDT05URVhUX1NUQVRJQyB8IENPTlRFWFRfUkFfU1RBVEVMRVNTKSkgJiYKKyAgICAgICAgICBpc19zYW1lX25ldDYoJnRtcC0+c3RhcnQ2LCB0YWRkciwgdG1wLT5wcmVmaXgpICYmCisJICBpc19zYW1lX25ldDYoJnRtcC0+ZW5kNiwgdGFkZHIsIHRtcC0+cHJlZml4KSAmJgorCSAgYWRkciA+PSBzdGFydCAmJgorICAgICAgICAgIGFkZHIgPD0gZW5kICYmCisgICAgICAgICAgbWF0Y2hfbmV0aWQodG1wLT5maWx0ZXIsIG5ldGlkcywgcGxhaW5fcmFuZ2UpKQorICAgICAgICByZXR1cm4gdG1wOworICAgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworLyogYWRkcmVzcyBPSyBpZiBjb25maWd1cmVkICovCitzdHJ1Y3QgZGhjcF9jb250ZXh0ICphZGRyZXNzNl92YWxpZChzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCAKKwkJCQkgICAgc3RydWN0IGluNl9hZGRyICp0YWRkciwKKwkJCQkgICAgc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkcywKKwkJCQkgICAgaW50IHBsYWluX3JhbmdlKQoreworICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICp0bXA7CisgCisgIGZvciAodG1wID0gY29udGV4dDsgdG1wOyB0bXAgPSB0bXAtPmN1cnJlbnQpCisgICAgaWYgKGlzX3NhbWVfbmV0NigmdG1wLT5zdGFydDYsIHRhZGRyLCB0bXAtPnByZWZpeCkgJiYKKwltYXRjaF9uZXRpZCh0bXAtPmZpbHRlciwgbmV0aWRzLCBwbGFpbl9yYW5nZSkpCisgICAgICByZXR1cm4gdG1wOworCisgIHJldHVybiBOVUxMOworfQorCitpbnQgY29uZmlnX3ZhbGlkKHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlnLCBzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCit7CisgIGlmICghY29uZmlnIHx8ICEoY29uZmlnLT5mbGFncyAmIENPTkZJR19BRERSNikpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKChjb25maWctPmZsYWdzICYgQ09ORklHX1dJTERDQVJEKSAmJiBjb250ZXh0LT5wcmVmaXggPT0gNjQpCisgICAgeworICAgICAgKmFkZHIgPSBjb250ZXh0LT5zdGFydDY7CisgICAgICBzZXRhZGRyNnBhcnQoYWRkciwgYWRkcjZwYXJ0KCZjb25maWctPmFkZHI2KSk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIAorICBpZiAoaXNfc2FtZV9uZXQ2KCZjb250ZXh0LT5zdGFydDYsICZjb25maWctPmFkZHI2LCBjb250ZXh0LT5wcmVmaXgpKQorICAgIHsKKyAgICAgICphZGRyID0gY29uZmlnLT5hZGRyNjsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgCisgIHJldHVybiAwOworfQorCit2b2lkIG1ha2VfZHVpZCh0aW1lX3Qgbm93KQoreworICAodm9pZClub3c7CisKKyAgaWYgKGRhZW1vbi0+ZHVpZF9jb25maWcpCisgICAgeworICAgICAgdW5zaWduZWQgY2hhciAqcDsKKyAgICAgIAorICAgICAgZGFlbW9uLT5kdWlkID0gcCA9IHNhZmVfbWFsbG9jKGRhZW1vbi0+ZHVpZF9jb25maWdfbGVuICsgNik7CisgICAgICBkYWVtb24tPmR1aWRfbGVuID0gZGFlbW9uLT5kdWlkX2NvbmZpZ19sZW4gKyA2OworICAgICAgUFVUU0hPUlQoMiwgcCk7IC8qIERVSURfRU4gKi8KKyAgICAgIFBVVExPTkcoZGFlbW9uLT5kdWlkX2VudGVycHJpc2UsIHApOworICAgICAgbWVtY3B5KHAsIGRhZW1vbi0+ZHVpZF9jb25maWcsIGRhZW1vbi0+ZHVpZF9jb25maWdfbGVuKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB0aW1lX3QgbmV3bm93ID0gMDsKKyAgICAgIAorICAgICAgLyogSWYgd2UgaGF2ZSBubyBwZXJzaXN0ZW50IGxlYXNlIGRhdGFiYXNlLCBvciBhIG5vbi1zdGFibGUgUlRDLCB1c2UgRFVJRF9MTCAobmV3bm93ID09IDApICovCisjaWZuZGVmIEhBVkVfQlJPS0VOX1JUQworICAgICAgLyogcmViYXNlIGVwb2NoIHRvIDEvMS8yMDAwICovCisgICAgICBpZiAoIW9wdGlvbl9ib29sKE9QVF9MRUFTRV9STykgfHwgZGFlbW9uLT5sZWFzZV9jaGFuZ2VfY29tbWFuZCkKKwluZXdub3cgPSBub3cgLSA5NDY2ODQ4MDA7CisjZW5kaWYgICAgICAKKyAgICAgIAorICAgICAgaWZhY2VfZW51bWVyYXRlKEFGX0xPQ0FMLCAmbmV3bm93LCBtYWtlX2R1aWQxKTsKKyAgICAgIAorICAgICAgaWYoIWRhZW1vbi0+ZHVpZCkKKwlkaWUoIkNhbm5vdCBjcmVhdGUgREhDUHY2IHNlcnZlciBEVUlEOiAlcyIsIE5VTEwsIEVDX01JU0MpOworICAgIH0KK30KKworc3RhdGljIGludCBtYWtlX2R1aWQxKGludCBpbmRleCwgdW5zaWduZWQgaW50IHR5cGUsIGNoYXIgKm1hYywgc2l6ZV90IG1hY2xlbiwgdm9pZCAqcGFybSkKK3sKKyAgLyogY3JlYXRlIERVSUQgYXMgc3BlY2lmaWVkIGluIFJGQzMzMTUuIFdlIHVzZSB0aGUgTUFDIG9mIHRoZQorICAgICBmaXJzdCBpbnRlcmZhY2Ugd2UgZmluZCB0aGF0IGlzbid0IGxvb3BiYWNrIG9yIFAtdG8tUCBhbmQKKyAgICAgaGFzIGFkZHJlc3MtdHlwZSA8IDI1Ni4gQWRkcmVzcyB0eXBlcyBhYm92ZSAyNTYgYXJlIHRoaW5ncyBsaWtlIAorICAgICB0dW5uZWxzIHdoaWNoIGRvbid0IGhhdmUgdXNhYmxlIE1BQyBhZGRyZXNzZXMuICovCisgIAorICB1bnNpZ25lZCBjaGFyICpwOworICAodm9pZClpbmRleDsKKyAgKHZvaWQpcGFybTsKKyAgdGltZV90IG5ld25vdyA9ICooKHRpbWVfdCAqKXBhcm0pOworICAKKyAgaWYgKHR5cGUgPj0gMjU2KQorICAgIHJldHVybiAxOworCisgIGlmIChuZXdub3cgPT0gMCkKKyAgICB7CisgICAgICBkYWVtb24tPmR1aWQgPSBwID0gc2FmZV9tYWxsb2MobWFjbGVuICsgNCk7CisgICAgICBkYWVtb24tPmR1aWRfbGVuID0gbWFjbGVuICsgNDsKKyAgICAgIFBVVFNIT1JUKDMsIHApOyAvKiBEVUlEX0xMICovCisgICAgICBQVVRTSE9SVCh0eXBlLCBwKTsgLyogYWRkcmVzcyB0eXBlICovCisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZGFlbW9uLT5kdWlkID0gcCA9IHNhZmVfbWFsbG9jKG1hY2xlbiArIDgpOworICAgICAgZGFlbW9uLT5kdWlkX2xlbiA9IG1hY2xlbiArIDg7CisgICAgICBQVVRTSE9SVCgxLCBwKTsgLyogRFVJRF9MTFQgKi8KKyAgICAgIFBVVFNIT1JUKHR5cGUsIHApOyAvKiBhZGRyZXNzIHR5cGUgKi8KKyAgICAgIFBVVExPTkcoKigodGltZV90ICopcGFybSksIHApOyAvKiB0aW1lICovCisgICAgfQorICAKKyAgbWVtY3B5KHAsIG1hYywgbWFjbGVuKTsKKworICByZXR1cm4gMDsKK30KKworc3RydWN0IGNwYXJhbSB7CisgIHRpbWVfdCBub3c7CisgIGludCBuZXdvbmUsIG5ld25hbWU7Cit9OworCitzdGF0aWMgaW50IGNvbnN0cnVjdF93b3JrZXIoc3RydWN0IGluNl9hZGRyICpsb2NhbCwgaW50IHByZWZpeCwgCisJCQkgICAgaW50IHNjb3BlLCBpbnQgaWZfaW5kZXgsIGludCBmbGFncywgCisJCQkgICAgaW50IHByZWZlcnJlZCwgaW50IHZhbGlkLCB2b2lkICp2cGFyYW0pCit7CisgIGNoYXIgaWZybl9uYW1lW0lGTkFNU0laXTsKKyAgc3RydWN0IGluNl9hZGRyIHN0YXJ0NiwgZW5kNjsKKyAgc3RydWN0IGRoY3BfY29udGV4dCAqdGVtcGxhdGUsICpjb250ZXh0OworCisgICh2b2lkKXNjb3BlOworICAodm9pZClmbGFnczsKKyAgKHZvaWQpdmFsaWQ7CisgICh2b2lkKXByZWZlcnJlZDsKKworICBzdHJ1Y3QgY3BhcmFtICpwYXJhbSA9IHZwYXJhbTsKKworICBpZiAoSU42X0lTX0FERFJfTE9PUEJBQ0sobG9jYWwpIHx8CisgICAgICBJTjZfSVNfQUREUl9MSU5LTE9DQUwobG9jYWwpIHx8CisgICAgICBJTjZfSVNfQUREUl9NVUxUSUNBU1QobG9jYWwpKQorICAgIHJldHVybiAxOworCisgIGlmICghKGZsYWdzICYgSUZBQ0VfUEVSTUFORU5UKSkKKyAgICByZXR1cm4gMTsKKworICBpZiAoZmxhZ3MgJiBJRkFDRV9ERVBSRUNBVEVEKQorICAgIHJldHVybiAxOworCisgIGlmICghaW5kZXh0b25hbWUoZGFlbW9uLT5pY21wNmZkLCBpZl9pbmRleCwgaWZybl9uYW1lKSkKKyAgICByZXR1cm4gMDsKKyAgCisgIGZvciAodGVtcGxhdGUgPSBkYWVtb24tPmRoY3A2OyB0ZW1wbGF0ZTsgdGVtcGxhdGUgPSB0ZW1wbGF0ZS0+bmV4dCkKKyAgICBpZiAoISh0ZW1wbGF0ZS0+ZmxhZ3MgJiBDT05URVhUX1RFTVBMQVRFKSkKKyAgICAgIHsKKwkvKiBub24tdGVtcGxhdGUgZW50cmllcywganVzdCBmaWxsIGluIGludGVyZmFjZSBhbmQgbG9jYWwgYWRkcmVzc2VzICovCisJaWYgKHByZWZpeCA8PSB0ZW1wbGF0ZS0+cHJlZml4ICYmCisJICAgIGlzX3NhbWVfbmV0Nihsb2NhbCwgJnRlbXBsYXRlLT5zdGFydDYsIHRlbXBsYXRlLT5wcmVmaXgpICYmCisJICAgIGlzX3NhbWVfbmV0Nihsb2NhbCwgJnRlbXBsYXRlLT5lbmQ2LCB0ZW1wbGF0ZS0+cHJlZml4KSkKKwkgIHsKKwkgICAgdGVtcGxhdGUtPmlmX2luZGV4ID0gaWZfaW5kZXg7CisJICAgIHRlbXBsYXRlLT5sb2NhbDYgPSAqbG9jYWw7CisJICB9CisJCisgICAgICB9CisgICAgZWxzZSBpZiAod2lsZGNhcmRfbWF0Y2godGVtcGxhdGUtPnRlbXBsYXRlX2ludGVyZmFjZSwgaWZybl9uYW1lKSAmJgorCSAgICAgdGVtcGxhdGUtPnByZWZpeCA+PSBwcmVmaXgpCisgICAgICB7CisJc3RhcnQ2ID0gKmxvY2FsOworCXNldGFkZHI2cGFydCgmc3RhcnQ2LCBhZGRyNnBhcnQoJnRlbXBsYXRlLT5zdGFydDYpKTsKKwllbmQ2ID0gKmxvY2FsOworCXNldGFkZHI2cGFydCgmZW5kNiwgYWRkcjZwYXJ0KCZ0ZW1wbGF0ZS0+ZW5kNikpOworCQorCWZvciAoY29udGV4dCA9IGRhZW1vbi0+ZGhjcDY7IGNvbnRleHQ7IGNvbnRleHQgPSBjb250ZXh0LT5uZXh0KQorCSAgaWYgKChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfQ09OU1RSVUNURUQpICYmCisJICAgICAgSU42X0FSRV9BRERSX0VRVUFMKCZzdGFydDYsICZjb250ZXh0LT5zdGFydDYpICYmCisJICAgICAgSU42X0FSRV9BRERSX0VRVUFMKCZlbmQ2LCAmY29udGV4dC0+ZW5kNikpCisJICAgIHsKKwkgICAgICBpbnQgZmxhZ3MgPSBjb250ZXh0LT5mbGFnczsKKwkgICAgICBjb250ZXh0LT5mbGFncyAmPSB+KENPTlRFWFRfR0MgfCBDT05URVhUX09MRCk7CisJICAgICAgaWYgKGZsYWdzICYgQ09OVEVYVF9PTEQpCisJCXsKKwkJICAvKiBhZGRyZXNzIHdlbnQsIG5vdyBpdCdzIGJhY2sgKi8KKwkJICBsb2dfY29udGV4dChBRl9JTkVUNiwgY29udGV4dCk7IAorCQkgIC8qIGZhc3QgUkFzIGZvciBhIHdoaWxlICovCisJCSAgcmFfc3RhcnRfdW5zb2xpY3RlZChwYXJhbS0+bm93LCBjb250ZXh0KTsKKwkJICBwYXJhbS0+bmV3b25lID0gMTsgCisJCSAgLyogQWRkIGFkZHJlc3MgdG8gbmFtZSBhZ2FpbiAqLworCQkgIGlmIChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfUkFfTkFNRSkKKwkJICAgIHBhcmFtLT5uZXduYW1lID0gMTsKKwkJfQorCSAgICAgIGJyZWFrOworCSAgICB9CisJCisJaWYgKCFjb250ZXh0ICYmIChjb250ZXh0ID0gd2hpbmVfbWFsbG9jKHNpemVvZiAoc3RydWN0IGRoY3BfY29udGV4dCkpKSkKKwkgIHsKKwkgICAgKmNvbnRleHQgPSAqdGVtcGxhdGU7CisJICAgIGNvbnRleHQtPnN0YXJ0NiA9IHN0YXJ0NjsKKwkgICAgY29udGV4dC0+ZW5kNiA9IGVuZDY7CisJICAgIGNvbnRleHQtPmZsYWdzICY9IH5DT05URVhUX1RFTVBMQVRFOworCSAgICBjb250ZXh0LT5mbGFncyB8PSBDT05URVhUX0NPTlNUUlVDVEVEOworCSAgICBjb250ZXh0LT5pZl9pbmRleCA9IGlmX2luZGV4OworCSAgICBjb250ZXh0LT5sb2NhbDYgPSAqbG9jYWw7CisJICAgIGNvbnRleHQtPnNhdmVkX3ZhbGlkID0gMDsKKwkgICAgCisJICAgIGNvbnRleHQtPm5leHQgPSBkYWVtb24tPmRoY3A2OworCSAgICBkYWVtb24tPmRoY3A2ID0gY29udGV4dDsKKworCSAgICByYV9zdGFydF91bnNvbGljdGVkKHBhcmFtLT5ub3csIGNvbnRleHQpOworCSAgICAvKiB3ZSBjcmVhdGVkIGEgbmV3IG9uZSwgbmVlZCB0byBjYWxsCisJICAgICAgIGxlYXNlX3VwZGF0ZV9maWxlIHRvIGdldCBwZXJpb2RpYyBmdW5jdGlvbnMgY2FsbGVkICovCisJICAgIHBhcmFtLT5uZXdvbmUgPSAxOyAKKworCSAgICAvKiBXaWxsIG5lZWQgdG8gYWRkIG5ldyBwdXRhdGl2ZSBTTEFBQyBhZGRyZXNzZXMgdG8gZXhpc3RpbmcgbGVhc2VzICovCisJICAgIGlmIChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfUkFfTkFNRSkKKwkgICAgICBwYXJhbS0+bmV3bmFtZSA9IDE7CisJICAgIAorCSAgICBsb2dfY29udGV4dChBRl9JTkVUNiwgY29udGV4dCk7CisJICB9IAorICAgICAgfQorICAKKyAgcmV0dXJuIDE7Cit9CisKK3ZvaWQgZGhjcF9jb25zdHJ1Y3RfY29udGV4dHModGltZV90IG5vdykKK3sgCisgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsICp0bXAsICoqdXA7CisgIHN0cnVjdCBjcGFyYW0gcGFyYW07CisgIHBhcmFtLm5ld29uZSA9IDA7CisgIHBhcmFtLm5ld25hbWUgPSAwOworICBwYXJhbS5ub3cgPSBub3c7CisKKyAgZm9yIChjb250ZXh0ID0gZGFlbW9uLT5kaGNwNjsgY29udGV4dDsgY29udGV4dCA9IGNvbnRleHQtPm5leHQpCisgICAgaWYgKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9DT05TVFJVQ1RFRCkKKyAgICAgIGNvbnRleHQtPmZsYWdzIHw9IENPTlRFWFRfR0M7CisgICAKKyAgaWZhY2VfZW51bWVyYXRlKEFGX0lORVQ2LCAmcGFyYW0sIGNvbnN0cnVjdF93b3JrZXIpOworCisgIGZvciAodXAgPSAmZGFlbW9uLT5kaGNwNiwgY29udGV4dCA9IGRhZW1vbi0+ZGhjcDY7IGNvbnRleHQ7IGNvbnRleHQgPSB0bXApCisgICAgeworICAgICAgCisgICAgICB0bXAgPSBjb250ZXh0LT5uZXh0OyAKKyAgICAgCisgICAgICBpZiAoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX0dDICYmICEoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX09MRCkpCisJeworCSAgaWYgKChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfUkEpIHx8IG9wdGlvbl9ib29sKE9QVF9SQSkpCisJICAgIHsKKwkgICAgICAvKiBwcmV2aW91c2x5IGNvbnN0cnVjdGVkIGNvbnRleHQgaGFzIGdvbmUuIGFkdmVydGlzZSBpdCdzIGRlbWlzZSAqLworCSAgICAgIGNvbnRleHQtPmZsYWdzIHw9IENPTlRFWFRfT0xEOworCSAgICAgIGNvbnRleHQtPmFkZHJlc3NfbG9zdF90aW1lID0gbm93OworCSAgICAgIC8qIEFwcGx5IHNhbWUgY2VpbGluZyBvZiBjb25maWd1cmVkIGxlYXNlIHRpbWUgYXMgaW4gcmFkdi5jICovCisJICAgICAgaWYgKGNvbnRleHQtPnNhdmVkX3ZhbGlkID4gY29udGV4dC0+bGVhc2VfdGltZSkKKwkJY29udGV4dC0+c2F2ZWRfdmFsaWQgPSBjb250ZXh0LT5sZWFzZV90aW1lOworCSAgICAgIC8qIG1heGltdW0gdGltZSBpcyAyIGhvdXJzLCBmcm9tIFJGQyAqLworCSAgICAgIGlmIChjb250ZXh0LT5zYXZlZF92YWxpZCA+IDcyMDApIC8qIDIgaG91cnMgKi8KKwkJY29udGV4dC0+c2F2ZWRfdmFsaWQgPSA3MjAwOworCSAgICAgIHJhX3N0YXJ0X3Vuc29saWN0ZWQobm93LCBjb250ZXh0KTsKKwkgICAgICBwYXJhbS5uZXdvbmUgPSAxOyAvKiBpbmNsdWRlIGRlbGV0aW9uICovIAorCSAgICAgIAorCSAgICAgIGlmIChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfUkFfTkFNRSkKKwkJcGFyYW0ubmV3bmFtZSA9IDE7IAorCQkJICAgICAgCisJICAgICAgbG9nX2NvbnRleHQoQUZfSU5FVDYsIGNvbnRleHQpOworCSAgICAgIAorCSAgICAgIHVwID0gJmNvbnRleHQtPm5leHQ7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8qIHdlIHdlcmUgbmV2ZXIgZG9pbmcgUkEgZm9yIHRoaXMsIHNvIGZyZWUgbm93ICovCisJICAgICAgKnVwID0gY29udGV4dC0+bmV4dDsKKwkgICAgICBmcmVlKGNvbnRleHQpOworCSAgICB9CisJfQorICAgICAgZWxzZQorCSB1cCA9ICZjb250ZXh0LT5uZXh0OworICAgIH0KKyAgCisgIGlmIChwYXJhbS5uZXdvbmUpCisgICAgeworICAgICAgaWYgKGRhZW1vbi0+ZGhjcCB8fCBkYWVtb24tPmRvaW5nX2RoY3A2KQorCXsKKwkgIGlmIChwYXJhbS5uZXduYW1lKQorCSAgICBsZWFzZV91cGRhdGVfc2xhYWMobm93KTsKKwkgIGxlYXNlX3VwZGF0ZV9maWxlKG5vdyk7CisJfQorICAgICAgZWxzZSAKKwkvKiBOb3QgZG9pbmcgREhDUCwgc28gbm8gbGVhc2Ugc3lzdGVtLCBtYW5hZ2UgYWxhcm1zIGZvciByYSBvbmx5ICovCisJc2VuZF9hbGFybShwZXJpb2RpY19yYShub3cpLCBub3cpOworICAgIH0KK30KKworI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvc3JjL2Rucy1wcm90b2NvbC5oIGIvc3JjL2Rucy1wcm90b2NvbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhY2VkM2MKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZG5zLXByb3RvY29sLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMTQgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjZGVmaW5lIE5BTUVTRVJWRVJfUE9SVCA1MworI2RlZmluZSBURlRQX1BPUlQgICAgICAgNjkKKworI2RlZmluZSBJTjZBRERSU1ogICAgICAgMTYKKyNkZWZpbmUgSU5BRERSU1ogICAgICAgIDQKKworI2RlZmluZSBQQUNLRVRTWgk1MTIJCS8qIG1heGltdW0gcGFja2V0IHNpemUgKi8KKyNkZWZpbmUgTUFYRE5BTUUJMTAyNQkJLyogbWF4aW11bSBwcmVzZW50YXRpb24gZG9tYWluIG5hbWUgKi8KKyNkZWZpbmUgUlJGSVhFRFNaCTEwCQkvKiAjL2J5dGVzIG9mIGZpeGVkIGRhdGEgaW4gciByZWNvcmQgKi8KKyNkZWZpbmUgTUFYTEFCRUwgICAgICAgIDYzICAgICAgICAgICAgICAvKiBtYXhpbXVtIGxlbmd0aCBvZiBkb21haW4gbGFiZWwgKi8KKworI2RlZmluZSBOT0VSUk9SCQkwCQkvKiBubyBlcnJvciAqLworI2RlZmluZSBGT1JNRVJSCQkxCQkvKiBmb3JtYXQgZXJyb3IgKi8KKyNkZWZpbmUgU0VSVkZBSUwJMgkJLyogc2VydmVyIGZhaWx1cmUgKi8KKyNkZWZpbmUgTlhET01BSU4JMwkJLyogbm9uIGV4aXN0ZW50IGRvbWFpbiAqLworI2RlZmluZSBOT1RJTVAJCTQJCS8qIG5vdCBpbXBsZW1lbnRlZCAqLworI2RlZmluZSBSRUZVU0VECQk1CQkvKiBxdWVyeSByZWZ1c2VkICovCisKKyNkZWZpbmUgUVVFUlkgICAgICAgICAgIDAgICAgICAgICAgICAgICAvKiBvcGNvZGUgKi8KKworI2RlZmluZSBDX0lOICAgICAgICAgICAgMSAgICAgICAgICAgICAgIC8qIHRoZSBhcnBhIGludGVybmV0ICovCisjZGVmaW5lIENfQ0hBT1MgICAgICAgICAzICAgICAgICAgICAgICAgLyogZm9yIGNoYW9zIG5ldCAoTUlUKSAqLworI2RlZmluZSBDX0hFU0lPRCAgICAgICAgNCAgICAgICAgICAgICAgIC8qIGhlc2lvZCAqLworI2RlZmluZSBDX0FOWSAgICAgICAgICAgMjU1ICAgICAgICAgICAgIC8qIHdpbGRjYXJkIG1hdGNoICovCisKKyNkZWZpbmUgVF9BCQkxCisjZGVmaW5lIFRfTlMgICAgICAgICAgICAyCisjZGVmaW5lIFRfTUQgICAgICAgICAgICAzCisjZGVmaW5lIFRfTUYgICAgICAgICAgICA0ICAgICAgICAgICAgIAorI2RlZmluZSBUX0NOQU1FCQk1CisjZGVmaW5lIFRfU09BCQk2CisjZGVmaW5lIFRfTUIgICAgICAgICAgICA3CisjZGVmaW5lIFRfTUcgICAgICAgICAgICA4CisjZGVmaW5lIFRfTVIgICAgICAgICAgICA5CisjZGVmaW5lIFRfUFRSCQkxMgorI2RlZmluZSBUX01JTkZPICAgICAgICAgMTQKKyNkZWZpbmUgVF9NWAkJMTUKKyNkZWZpbmUgVF9UWFQJCTE2CisjZGVmaW5lIFRfUlAgICAgICAgICAgICAxNworI2RlZmluZSBUX0FGU0RCICAgICAgICAgMTgKKyNkZWZpbmUgVF9SVCAgICAgICAgICAgIDIxCisjZGVmaW5lIFRfU0lHCQkyNAorI2RlZmluZSBUX1BYICAgICAgICAgICAgMjYKKyNkZWZpbmUgVF9BQUFBCQkyOAorI2RlZmluZSBUX05YVCAgICAgICAgICAgMzAKKyNkZWZpbmUgVF9TUlYJCTMzCisjZGVmaW5lIFRfTkFQVFIJCTM1CisjZGVmaW5lIFRfS1ggICAgICAgICAgICAzNgorI2RlZmluZSBUX0ROQU1FICAgICAgICAgMzkKKyNkZWZpbmUgVF9PUFQJCTQxCisjZGVmaW5lIFRfRFMgICAgICAgICAgICA0MworI2RlZmluZSBUX1JSU0lHICAgICAgICAgNDYKKyNkZWZpbmUgVF9OU0VDICAgICAgICAgIDQ3CisjZGVmaW5lIFRfRE5TS0VZICAgICAgICA0OAorI2RlZmluZSBUX05TRUMzICAgICAgICAgNTAKKyNkZWZpbmUJVF9US0VZCQkyNDkJCQorI2RlZmluZQlUX1RTSUcJCTI1MAorI2RlZmluZSBUX0FYRlIgICAgICAgICAgMjUyCisjZGVmaW5lIFRfTUFJTEIJCTI1MwkKKyNkZWZpbmUgVF9BTlkJCTI1NQorCisjZGVmaW5lIEVETlMwX09QVElPTl9NQUMgICAgICAgICAgICA2NTAwMSAvKiBkeW5kbnMub3JnIHRlbXBvcmFyeSBhc3NpZ25tZW50ICovCisjZGVmaW5lIEVETlMwX09QVElPTl9DTElFTlRfU1VCTkVUICA4ICAgICAvKiBJQU5BICovCisKK3N0cnVjdCBkbnNfaGVhZGVyIHsKKyAgdTE2IGlkOworICB1OCAgaGIzLGhiNDsKKyAgdTE2IHFkY291bnQsYW5jb3VudCxuc2NvdW50LGFyY291bnQ7Cit9OworCisjZGVmaW5lIEhCM19RUiAgICAgICAweDgwCisjZGVmaW5lIEhCM19PUENPREUgICAweDc4CisjZGVmaW5lIEhCM19BQSAgICAgICAweDA0CisjZGVmaW5lIEhCM19UQyAgICAgICAweDAyCisjZGVmaW5lIEhCM19SRCAgICAgICAweDAxCisKKyNkZWZpbmUgSEI0X1JBICAgICAgIDB4ODAKKyNkZWZpbmUgSEI0X0FEICAgICAgIDB4MjAKKyNkZWZpbmUgSEI0X0NEICAgICAgIDB4MTAKKyNkZWZpbmUgSEI0X1JDT0RFICAgIDB4MGYKKworI2RlZmluZSBPUENPREUoeCkgICAgICAgICAgKCgoeCktPmhiMyAmIEhCM19PUENPREUpID4+IDMpCisjZGVmaW5lIFNFVF9PUENPREUoeCwgY29kZSkgKHgpLT5oYjMgPSAoKHgpLT5oYjMgJiB+SEIzX09QQ09ERSkgfCBjb2RlCisKKyNkZWZpbmUgUkNPREUoeCkgICAgICAgICAgICgoeCktPmhiNCAmIEhCNF9SQ09ERSkKKyNkZWZpbmUgU0VUX1JDT0RFKHgsIGNvZGUpICh4KS0+aGI0ID0gKCh4KS0+aGI0ICYgfkhCNF9SQ09ERSkgfCBjb2RlCisgIAorI2RlZmluZSBHRVRTSE9SVChzLCBjcCkgeyBcCisJdW5zaWduZWQgY2hhciAqdF9jcCA9ICh1bnNpZ25lZCBjaGFyICopKGNwKTsgXAorCShzKSA9ICgodTE2KXRfY3BbMF0gPDwgOCkgXAorCSAgICB8ICgodTE2KXRfY3BbMV0pIFwKKwkgICAgOyBcCisJKGNwKSArPSAyOyBcCit9CisKKyNkZWZpbmUgR0VUTE9ORyhsLCBjcCkgeyBcCisJdW5zaWduZWQgY2hhciAqdF9jcCA9ICh1bnNpZ25lZCBjaGFyICopKGNwKTsgXAorCShsKSA9ICgodTMyKXRfY3BbMF0gPDwgMjQpIFwKKwkgICAgfCAoKHUzMil0X2NwWzFdIDw8IDE2KSBcCisJICAgIHwgKCh1MzIpdF9jcFsyXSA8PCA4KSBcCisJICAgIHwgKCh1MzIpdF9jcFszXSkgXAorCSAgICA7IFwKKwkoY3ApICs9IDQ7IFwKK30KKworI2RlZmluZSBQVVRTSE9SVChzLCBjcCkgeyBcCisJdTE2IHRfcyA9ICh1MTYpKHMpOyBcCisJdW5zaWduZWQgY2hhciAqdF9jcCA9ICh1bnNpZ25lZCBjaGFyICopKGNwKTsgXAorCSp0X2NwKysgPSB0X3MgPj4gODsgXAorCSp0X2NwICAgPSB0X3M7IFwKKwkoY3ApICs9IDI7IFwKK30KKworI2RlZmluZSBQVVRMT05HKGwsIGNwKSB7IFwKKwl1MzIgdF9sID0gKHUzMikobCk7IFwKKwl1bnNpZ25lZCBjaGFyICp0X2NwID0gKHVuc2lnbmVkIGNoYXIgKikoY3ApOyBcCisJKnRfY3ArKyA9IHRfbCA+PiAyNDsgXAorCSp0X2NwKysgPSB0X2wgPj4gMTY7IFwKKwkqdF9jcCsrID0gdF9sID4+IDg7IFwKKwkqdF9jcCAgID0gdF9sOyBcCisJKGNwKSArPSA0OyBcCit9CisKKyNkZWZpbmUgQ0hFQ0tfTEVOKGhlYWRlciwgcHAsIHBsZW4sIGxlbikgXAorICAgICgoc2l6ZV90KSgocHApIC0gKHVuc2lnbmVkIGNoYXIgKikoaGVhZGVyKSArIChsZW4pKSA8PSAocGxlbikpCisKKyNkZWZpbmUgQUREX1JETEVOKGhlYWRlciwgcHAsIHBsZW4sIGxlbikgXAorICAoIUNIRUNLX0xFTihoZWFkZXIsIHBwLCBwbGVuLCBsZW4pID8gMCA6ICgoKHBwKSArPSAobGVuKSksIDEpKQpkaWZmIC0tZ2l0IGEvc3JjL2Ruc21hc3EuYyBiL3NyYy9kbnNtYXNxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBjMDU4OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9kbnNtYXNxLmMKQEAgLTAsMCArMSwxNzk3IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE0IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworLyogRGVjbGFyZSBzdGF0aWMgY2hhciAqY29tcGlsZXJfb3B0cyAgaW4gY29uZmlnLmggKi8KKyNkZWZpbmUgRE5TTUFTUV9DT01QSUxFX09QVFMKKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworc3RydWN0IGRhZW1vbiAqZGFlbW9uOworCitzdGF0aWMgdm9sYXRpbGUgcGlkX3QgcGlkID0gMDsKK3N0YXRpYyB2b2xhdGlsZSBpbnQgcGlwZXdyaXRlOworCitzdGF0aWMgaW50IHNldF9kbnNfbGlzdGVuZXJzKHRpbWVfdCBub3csIGZkX3NldCAqc2V0LCBpbnQgKm1heGZkcCk7CitzdGF0aWMgdm9pZCBjaGVja19kbnNfbGlzdGVuZXJzKGZkX3NldCAqc2V0LCB0aW1lX3Qgbm93KTsKK3N0YXRpYyB2b2lkIHNpZ19oYW5kbGVyKGludCBzaWcpOworc3RhdGljIHZvaWQgYXN5bmNfZXZlbnQoaW50IHBpcGUsIHRpbWVfdCBub3cpOworc3RhdGljIHZvaWQgZmF0YWxfZXZlbnQoc3RydWN0IGV2ZW50X2Rlc2MgKmV2LCBjaGFyICptc2cpOworc3RhdGljIGludCByZWFkX2V2ZW50KGludCBmZCwgc3RydWN0IGV2ZW50X2Rlc2MgKmV2cCwgY2hhciAqKm1zZyk7CitzdGF0aWMgdm9pZCBwb2xsX3Jlc29sdihpbnQgZm9yY2UsIGludCBkb19yZWxvYWQsIHRpbWVfdCBub3cpOworCitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQgYmluZF9mYWxsYmFjayA9IDA7CisgIHRpbWVfdCBub3c7CisgIHN0cnVjdCBzaWdhY3Rpb24gc2lnYWN0OworICBzdHJ1Y3QgaW5hbWUgKmlmX3RtcDsKKyAgaW50IHBpcGVyZWFkLCBwaXBlZmRbMl0sIGVycl9waXBlWzJdOworICBzdHJ1Y3QgcGFzc3dkICplbnRfcHcgPSBOVUxMOworI2lmIGRlZmluZWQoSEFWRV9TQ1JJUFQpCisgIHVpZF90IHNjcmlwdF91aWQgPSAwOworICBnaWRfdCBzY3JpcHRfZ2lkID0gMDsKKyNlbmRpZgorICBzdHJ1Y3QgZ3JvdXAgKmdwID0gTlVMTDsKKyAgbG9uZyBpLCBtYXhfZmQgPSBzeXNjb25mKF9TQ19PUEVOX01BWCk7CisgIGNoYXIgKmJhZHVzZXIgPSBOVUxMOworICBpbnQgbG9nX2VycjsKKyNpZiBkZWZpbmVkKEhBVkVfTElOVVhfTkVUV09SSykKKyAgY2FwX3VzZXJfaGVhZGVyX3QgaGRyID0gTlVMTDsKKyAgY2FwX3VzZXJfZGF0YV90IGRhdGEgPSBOVUxMOworICBjaGFyICpib3VuZF9kZXZpY2UgPSBOVUxMOworICBpbnQgZGlkX2JpbmQgPSAwOworI2VuZGlmIAorI2lmIGRlZmluZWQoSEFWRV9ESENQKSB8fCBkZWZpbmVkKEhBVkVfREhDUDYpCisgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQ7CisgIHN0cnVjdCBkaGNwX3JlbGF5ICpyZWxheTsKKyNlbmRpZgorCisjaWZkZWYgTE9DQUxFRElSCisgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKyAgYmluZHRleHRkb21haW4oImRuc21hc3EiLCBMT0NBTEVESVIpOyAKKyAgdGV4dGRvbWFpbigiZG5zbWFzcSIpOworI2VuZGlmCisKKyAgc2lnYWN0LnNhX2hhbmRsZXIgPSBzaWdfaGFuZGxlcjsKKyAgc2lnYWN0LnNhX2ZsYWdzID0gMDsKKyAgc2lnZW1wdHlzZXQoJnNpZ2FjdC5zYV9tYXNrKTsKKyAgc2lnYWN0aW9uKFNJR1VTUjEsICZzaWdhY3QsIE5VTEwpOworICBzaWdhY3Rpb24oU0lHVVNSMiwgJnNpZ2FjdCwgTlVMTCk7CisgIHNpZ2FjdGlvbihTSUdIVVAsICZzaWdhY3QsIE5VTEwpOworICBzaWdhY3Rpb24oU0lHVEVSTSwgJnNpZ2FjdCwgTlVMTCk7CisgIHNpZ2FjdGlvbihTSUdBTFJNLCAmc2lnYWN0LCBOVUxMKTsKKyAgc2lnYWN0aW9uKFNJR0NITEQsICZzaWdhY3QsIE5VTEwpOworCisgIC8qIGlnbm9yZSBTSUdQSVBFICovCisgIHNpZ2FjdC5zYV9oYW5kbGVyID0gU0lHX0lHTjsKKyAgc2lnYWN0aW9uKFNJR1BJUEUsICZzaWdhY3QsIE5VTEwpOworCisgIHVtYXNrKDAyMik7IC8qIGtub3duIHVtYXNrLCBjcmVhdGUgbGVhc2VzIGFuZCBwaWQgZmlsZXMgYXMgMDY0NCAqLworIAorICByYW5kX2luaXQoKTsgLyogTXVzdCBwcmVjZWRlIHJlYWRfb3B0cygpICovCisgIAorICByZWFkX29wdHMoYXJnYywgYXJndiwgY29tcGlsZV9vcHRzKTsKKyAKKyAgaWYgKGRhZW1vbi0+ZWRuc19wa3RzeiA8IFBBQ0tFVFNaKQorICAgIGRhZW1vbi0+ZWRuc19wa3RzeiA9IFBBQ0tFVFNaOworCisgIGRhZW1vbi0+cGFja2V0X2J1ZmZfc3ogPSBkYWVtb24tPmVkbnNfcGt0c3ogPiBETlNNQVNRX1BBQ0tFVFNaID8gCisgICAgZGFlbW9uLT5lZG5zX3BrdHN6IDogRE5TTUFTUV9QQUNLRVRTWjsKKyAgZGFlbW9uLT5wYWNrZXQgPSBzYWZlX21hbGxvYyhkYWVtb24tPnBhY2tldF9idWZmX3N6KTsKKyAgCisgIGRhZW1vbi0+YWRkcmJ1ZmYgPSBzYWZlX21hbGxvYyhBRERSU1RSTEVOKTsKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9FWFRSQUxPRykpCisgICAgZGFlbW9uLT5hZGRyYnVmZjIgPSBzYWZlX21hbGxvYyhBRERSU1RSTEVOKTsKKyAgCisjaWZkZWYgSEFWRV9ETlNTRUMKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9ETlNTRUNfVkFMSUQpKQorICAgIHsKKyAgICAgIGRhZW1vbi0+a2V5bmFtZSA9IHNhZmVfbWFsbG9jKE1BWEROQU1FKTsKKyAgICAgIGRhZW1vbi0+d29ya3NwYWNlbmFtZSA9IHNhZmVfbWFsbG9jKE1BWEROQU1FKTsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEhBVkVfREhDUAorICBpZiAoIWRhZW1vbi0+bGVhc2VfZmlsZSkKKyAgICB7CisgICAgICBpZiAoZGFlbW9uLT5kaGNwIHx8IGRhZW1vbi0+ZGhjcDYpCisJZGFlbW9uLT5sZWFzZV9maWxlID0gTEVBU0VGSUxFOworICAgIH0KKyNlbmRpZgorICAKKyAgLyogQ2xvc2UgYW55IGZpbGUgZGVzY3JpcHRvcnMgd2UgaW5oZXJpdGVkIGFwYXJ0IGZyb20gc3Rke2lufG91dHxlcnJ9IAorICAgICAKKyAgICAgRW5zdXJlIHRoYXQgYXQgbGVhc3Qgc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIChmZCAwLCAxLCAyKSBleGlzdCwKKyAgICAgb3RoZXJ3aXNlIGZpbGUgZGVzY3JpcHRvcnMgd2UgY3JlYXRlIGNhbiBlbmQgdXAgYmVpbmcgMCwgMSwgb3IgMiAKKyAgICAgYW5kIHRoZW4gZ2V0IGFjY2lkZW50YWxseSBjbG9zZWQgbGF0ZXIgd2hlbiB3ZSBtYWtlIDAsIDEsIGFuZCAyIAorICAgICBvcGVuIHRvIC9kZXYvbnVsbC4gTm9ybWFsbHkgd2UnbGwgYmUgc3RhcnRlZCB3aXRoIDAsIDEgYW5kIDIgb3BlbiwgCisgICAgIGJ1dCBpdCdzIG5vdCBndWFyYW50ZWVkLiBCeSBvcGVuaW5nIC9kZXYvbnVsbCB0aHJlZSB0aW1lcywgd2UgCisgICAgIGVuc3VyZSB0aGF0IHdlJ3JlIG5vdCB1c2luZyB0aG9zZSBmZHMgZm9yIHJlYWwgc3R1ZmYuICovCisgIGZvciAoaSA9IDA7IGkgPCBtYXhfZmQ7IGkrKykKKyAgICBpZiAoaSAhPSBTVERPVVRfRklMRU5PICYmIGkgIT0gU1RERVJSX0ZJTEVOTyAmJiBpICE9IFNURElOX0ZJTEVOTykKKyAgICAgIGNsb3NlKGkpOworICAgIGVsc2UKKyAgICAgIG9wZW4oIi9kZXYvbnVsbCIsIE9fUkRXUik7IAorCisjaWZuZGVmIEhBVkVfTElOVVhfTkVUV09SSworIyAgaWYgIShkZWZpbmVkKElQX1JFQ1ZEU1RBRERSKSAmJiBkZWZpbmVkKElQX1JFQ1ZJRikgJiYgZGVmaW5lZChJUF9TRU5EU1JDQUREUikpCisgIGlmICghb3B0aW9uX2Jvb2woT1BUX05PV0lMRCkpCisgICAgeworICAgICAgYmluZF9mYWxsYmFjayA9IDE7CisgICAgICBzZXRfb3B0aW9uX2Jvb2woT1BUX05PV0lMRCk7CisgICAgfQorIyAgZW5kaWYKKyAgCisgIC8qIC0tIGJpbmQtZHluYW1pYyBub3Qgc3VwcG9ydGVkIG9uICFMaW51eCwgZmFsbCBiYWNrIHRvIC0tYmluZC1pbnRlcmZhY2VzICovCisgIGlmIChvcHRpb25fYm9vbChPUFRfQ0xFVkVSQklORCkpCisgICAgeworICAgICAgYmluZF9mYWxsYmFjayA9IDE7CisgICAgICBzZXRfb3B0aW9uX2Jvb2woT1BUX05PV0lMRCk7CisgICAgICByZXNldF9vcHRpb25fYm9vbChPUFRfQ0xFVkVSQklORCk7CisgICAgfQorI2VuZGlmCisgIAorICBpZiAob3B0aW9uX2Jvb2woT1BUX0ROU1NFQ19WQUxJRCkpCisgICAgeworI2lmZGVmIEhBVkVfRE5TU0VDCisgICAgICBpZiAoIWRhZW1vbi0+ZHMpCisJZGllKF8oIk5vIHRydXN0IGFuY2hvcnMgcHJvdmlkZWQgZm9yIEROU1NFQyIpLCBOVUxMLCBFQ19CQURDT05GKTsKKyAgICAgIAorICAgICAgaWYgKGRhZW1vbi0+Y2FjaGVzaXplIDwgQ0FDSEVTSVopCisJZGllKF8oIkNhbm5vdCByZWR1Y2UgY2FjaGUgc2l6ZSBmcm9tIGRlZmF1bHQgd2hlbiBETlNTRUMgZW5hYmxlZCIpLCBOVUxMLCBFQ19CQURDT05GKTsKKyNlbHNlIAorICAgICAgZGllKF8oIkROU1NFQyBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9ETlNTRUMgaW4gc3JjL2NvbmZpZy5oIiksIE5VTEwsIEVDX0JBRENPTkYpOworI2VuZGlmCisgICAgfQorCisjaWZuZGVmIEhBVkVfVEZUUAorICBpZiAob3B0aW9uX2Jvb2woT1BUX1RGVFApKQorICAgIGRpZShfKCJURlRQIHNlcnZlciBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9URlRQIGluIHNyYy9jb25maWcuaCIpLCBOVUxMLCBFQ19CQURDT05GKTsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9DT05OVFJBQ0sKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9DT05OVFJBQ0spICYmIChkYWVtb24tPnF1ZXJ5X3BvcnQgIT0gMCB8fCBkYWVtb24tPm9zcG9ydCkpCisgICAgZGllIChfKCJDYW5ub3QgdXNlIC0tY29ubnRyYWNrIEFORCAtLXF1ZXJ5LXBvcnQiKSwgTlVMTCwgRUNfQkFEQ09ORik7IAorI2Vsc2UKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9DT05OVFJBQ0spKQorICAgIGRpZShfKCJDb25udHJhY2sgc3VwcG9ydCBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9DT05OVFJBQ0sgaW4gc3JjL2NvbmZpZy5oIiksIE5VTEwsIEVDX0JBRENPTkYpOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NPTEFSSVNfTkVUV09SSworICBpZiAoZGFlbW9uLT5tYXhfbG9ncyAhPSAwKQorICAgIGRpZShfKCJhc3ljaHJvbm91cyBsb2dnaW5nIGlzIG5vdCBhdmFpbGFibGUgdW5kZXIgU29sYXJpcyIpLCBOVUxMLCBFQ19CQURDT05GKTsKKyNlbmRpZgorICAKKyNpZmRlZiBfX0FORFJPSURfXworICBpZiAoZGFlbW9uLT5tYXhfbG9ncyAhPSAwKQorICAgIGRpZShfKCJhc3ljaHJvbm91cyBsb2dnaW5nIGlzIG5vdCBhdmFpbGFibGUgdW5kZXIgQW5kcm9pZCIpLCBOVUxMLCBFQ19CQURDT05GKTsKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfQVVUSAorICBpZiAoZGFlbW9uLT5hdXRoc2VydmVyKQorICAgIGRpZShfKCJhdXRob3JpdGF0aXZlIEROUyBub3QgYXZhaWxhYmxlOiBzZXQgSEFWRV9BVVRIIGluIHNyYy9jb25maWcuaCIpLCBOVUxMLCBFQ19CQURDT05GKTsKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfTE9PUAorICBpZiAob3B0aW9uX2Jvb2woT1BUX0xPT1BfREVURUNUKSkKKyAgICBkaWUoXygiTG9vcCBkZXRlY3Rpb24gbm90IGF2YWlsYWJsZTogc2V0IEhBVkVfTE9PUCBpbiBzcmMvY29uZmlnLmgiKSwgTlVMTCwgRUNfQkFEQ09ORik7CisjZW5kaWYKKyAgCisgIG5vdyA9IGRuc21hc3FfdGltZSgpOworCisgIC8qIENyZWF0ZSBhIHNlcmlhbCBhdCBzdGFydHVwIGlmIG5vdCBjb25maWd1cmVkLiAqLworICBpZiAoZGFlbW9uLT5hdXRoaW50ZXJmYWNlICYmIGRhZW1vbi0+c29hX3NuID09IDApCisjaWZkZWYgSEFWRV9CUk9LRU5fUlRDCisgICAgZGllKF8oInpvbmUgc2VyaWFsIG11c3QgYmUgY29uZmlndXJlZCBpbiAtLWF1dGgtc29hIiksIE5VTEwsIEVDX0JBRENPTkYpOworI2Vsc2UKKyAgZGFlbW9uLT5zb2Ffc24gPSBub3c7CisjZW5kaWYKKyAgCisjaWZkZWYgSEFWRV9ESENQNgorICBpZiAoZGFlbW9uLT5kaGNwNikKKyAgICB7CisgICAgICBkYWVtb24tPmRvaW5nX3JhID0gb3B0aW9uX2Jvb2woT1BUX1JBKTsKKyAgICAgIAorICAgICAgZm9yIChjb250ZXh0ID0gZGFlbW9uLT5kaGNwNjsgY29udGV4dDsgY29udGV4dCA9IGNvbnRleHQtPm5leHQpCisJeworCSAgaWYgKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9ESENQKQorCSAgICBkYWVtb24tPmRvaW5nX2RoY3A2ID0gMTsKKwkgIGlmIChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfUkEpCisJICAgIGRhZW1vbi0+ZG9pbmdfcmEgPSAxOworI2lmICFkZWZpbmVkKEhBVkVfTElOVVhfTkVUV09SSykgJiYgIWRlZmluZWQoSEFWRV9CU0RfTkVUV09SSykKKwkgIGlmIChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfVEVNUExBVEUpCisJICAgIGRpZSAoXygiZGhjcC1yYW5nZSBjb25zdHJ1Y3RvciBub3QgYXZhaWxhYmxlIG9uIHRoaXMgcGxhdGZvcm0iKSwgTlVMTCwgRUNfQkFEQ09ORik7CisjZW5kaWYgCisJfQorICAgIH0KKyNlbmRpZgorICAKKyNpZmRlZiBIQVZFX0RIQ1AKKyAgLyogTm90ZSB0aGF0IG9yZGVyIG1hdHRlcnMgaGVyZSwgd2UgbXVzdCBjYWxsIGxlYXNlX2luaXQgYmVmb3JlCisgICAgIGNyZWF0aW5nIGFueSBmaWxlIGRlc2NyaXB0b3JzIHdoaWNoIHNob3VsZG4ndCBiZSBsZWFrZWQKKyAgICAgdG8gdGhlIGxlYXNlLXNjcmlwdCBpbml0IHByb2Nlc3MuIFdlIG5lZWQgdG8gY2FsbCBjb21tb25faW5pdAorICAgICBiZWZvcmUgbGVhc2VfaW5pdCB0byBhbGxvY2F0ZSBidWZmZXJzIGl0IHVzZXMuKi8KKyAgaWYgKGRhZW1vbi0+ZGhjcCB8fCBkYWVtb24tPmRvaW5nX2RoY3A2IHx8IGRhZW1vbi0+cmVsYXk0IHx8IGRhZW1vbi0+cmVsYXk2KQorICAgIHsKKyAgICAgIGRoY3BfY29tbW9uX2luaXQoKTsKKyAgICAgIGlmIChkYWVtb24tPmRoY3AgfHwgZGFlbW9uLT5kb2luZ19kaGNwNikKKwlsZWFzZV9pbml0KG5vdyk7CisgICAgfQorICAKKyAgaWYgKGRhZW1vbi0+ZGhjcCB8fCBkYWVtb24tPnJlbGF5NCkKKyAgICBkaGNwX2luaXQoKTsKKyAgCisjICBpZmRlZiBIQVZFX0RIQ1A2CisgIGlmIChkYWVtb24tPmRvaW5nX3JhIHx8IGRhZW1vbi0+ZG9pbmdfZGhjcDYgfHwgZGFlbW9uLT5yZWxheTYpCisgICAgcmFfaW5pdChub3cpOworICAKKyAgaWYgKGRhZW1vbi0+ZG9pbmdfZGhjcDYgfHwgZGFlbW9uLT5yZWxheTYpCisgICAgZGhjcDZfaW5pdCgpOworIyAgZW5kaWYKKworI2VuZGlmCisKKyNpZmRlZiBIQVZFX0lQU0VUCisgIGlmIChkYWVtb24tPmlwc2V0cykKKyAgICBpcHNldF9pbml0KCk7CisjZW5kaWYKKworI2lmICBkZWZpbmVkKEhBVkVfTElOVVhfTkVUV09SSykKKyAgbmV0bGlua19pbml0KCk7CisjZWxpZiBkZWZpbmVkKEhBVkVfQlNEX05FVFdPUkspCisgIHJvdXRlX2luaXQoKTsKKyNlbmRpZgorCisgIGlmIChvcHRpb25fYm9vbChPUFRfTk9XSUxEKSAmJiBvcHRpb25fYm9vbChPUFRfQ0xFVkVSQklORCkpCisgICAgZGllKF8oImNhbm5vdCBzZXQgLS1iaW5kLWludGVyZmFjZXMgYW5kIC0tYmluZC1keW5hbWljIiksIE5VTEwsIEVDX0JBRENPTkYpOworICAKKyAgaWYgKCFlbnVtZXJhdGVfaW50ZXJmYWNlcygxKSB8fCAhZW51bWVyYXRlX2ludGVyZmFjZXMoMCkpCisgICAgZGllKF8oImZhaWxlZCB0byBmaW5kIGxpc3Qgb2YgaW50ZXJmYWNlczogJXMiKSwgTlVMTCwgRUNfTUlTQyk7CisgIAorICBpZiAob3B0aW9uX2Jvb2woT1BUX05PV0lMRCkgfHwgb3B0aW9uX2Jvb2woT1BUX0NMRVZFUkJJTkQpKSAKKyAgICB7CisgICAgICBjcmVhdGVfYm91bmRfbGlzdGVuZXJzKDEpOworICAgICAgCisgICAgICBpZiAoIW9wdGlvbl9ib29sKE9QVF9DTEVWRVJCSU5EKSkKKwlmb3IgKGlmX3RtcCA9IGRhZW1vbi0+aWZfbmFtZXM7IGlmX3RtcDsgaWZfdG1wID0gaWZfdG1wLT5uZXh0KQorCSAgaWYgKGlmX3RtcC0+bmFtZSAmJiAhaWZfdG1wLT51c2VkKQorCSAgICBkaWUoXygidW5rbm93biBpbnRlcmZhY2UgJXMiKSwgaWZfdG1wLT5uYW1lLCBFQ19CQURORVQpOworCisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX05FVFdPUkspICYmIGRlZmluZWQoSEFWRV9ESENQKQorICAgICAgLyogYWZ0ZXIgZW51bWVyYXRlX2ludGVyZmFjZXMoKSAgKi8KKyAgICAgIGJvdW5kX2RldmljZSA9IHdoaWNoZGV2aWNlKCk7CisgICAgICAKKyAgICAgIGlmIChkYWVtb24tPmRoY3ApCisJeworCSAgaWYgKCFkYWVtb24tPnJlbGF5NCAmJiBib3VuZF9kZXZpY2UpCisJICAgIHsKKwkgICAgICBiaW5kdG9kZXZpY2UoYm91bmRfZGV2aWNlLCBkYWVtb24tPmRoY3BmZCk7CisJICAgICAgZGlkX2JpbmQgPSAxOworCSAgICB9CisJICBpZiAoZGFlbW9uLT5lbmFibGVfcHhlICYmIGJvdW5kX2RldmljZSkKKwkgICAgeworCSAgICAgIGJpbmR0b2RldmljZShib3VuZF9kZXZpY2UsIGRhZW1vbi0+cHhlZmQpOworCSAgICAgIGRpZF9iaW5kID0gMTsKKwkgICAgfQorCX0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX05FVFdPUkspICYmIGRlZmluZWQoSEFWRV9ESENQNikKKyAgICAgIGlmIChkYWVtb24tPmRvaW5nX2RoY3A2ICYmICFkYWVtb24tPnJlbGF5NiAmJiBib3VuZF9kZXZpY2UpCisJeworCSAgYmluZHRvZGV2aWNlKGJvdW5kX2RldmljZSwgZGFlbW9uLT5kaGNwNmZkKTsKKwkgIGRpZF9iaW5kID0gMTsKKwl9CisjZW5kaWYKKyAgICB9CisgIGVsc2UgCisgICAgY3JlYXRlX3dpbGRjYXJkX2xpc3RlbmVycygpOworIAorI2lmZGVmIEhBVkVfREhDUDYKKyAgLyogYWZ0ZXIgZW51bWVyYXRlX2ludGVyZmFjZXMoKSAqLworICBpZiAoZGFlbW9uLT5kb2luZ19kaGNwNiB8fCBkYWVtb24tPnJlbGF5NiB8fCBkYWVtb24tPmRvaW5nX3JhKQorICAgIGpvaW5fbXVsdGljYXN0KDEpOworCisgIC8qIEFmdGVyIG5ldGxpbmtfaW5pdCgpIGFuZCBiZWZvcmUgY3JlYXRlX2hlbHBlcigpICovCisgIGxlYXNlX21ha2VfZHVpZChub3cpOworI2VuZGlmCisgIAorICBpZiAoZGFlbW9uLT5wb3J0ICE9IDApCisgICAgeworICAgICAgY2FjaGVfaW5pdCgpOworCisjaWZkZWYgSEFWRV9ETlNTRUMKKyAgICAgIGJsb2NrZGF0YV9pbml0KCk7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfTElOVVhfTkVUV09SSworICAgICAgaWYgKCFvcHRpb25fYm9vbChPUFRfTk9fUE9MTCkpCisJaW5vdGlmeV9kbnNtYXNxX2luaXQoKTsKKyNlbmRpZgorICAgIH0KKyAgICAKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9EQlVTKSkKKyNpZmRlZiBIQVZFX0RCVVMKKyAgICB7CisgICAgICBjaGFyICplcnI7CisgICAgICBkYWVtb24tPmRidXMgPSBOVUxMOworICAgICAgZGFlbW9uLT53YXRjaGVzID0gTlVMTDsKKyAgICAgIGlmICgoZXJyID0gZGJ1c19pbml0KCkpKQorCWRpZShfKCJEQnVzIGVycm9yOiAlcyIpLCBlcnIsIEVDX01JU0MpOworICAgIH0KKyNlbHNlCisgIGRpZShfKCJEQnVzIG5vdCBhdmFpbGFibGU6IHNldCBIQVZFX0RCVVMgaW4gc3JjL2NvbmZpZy5oIiksIE5VTEwsIEVDX0JBRENPTkYpOworI2VuZGlmCisgIAorICBpZiAoZGFlbW9uLT5wb3J0ICE9IDApCisgICAgcHJlX2FsbG9jYXRlX3NmZHMoKTsKKworI2lmIGRlZmluZWQoSEFWRV9TQ1JJUFQpCisgIC8qIE5vdGUgZ2V0cHduYW0gcmV0dXJucyBzdGF0aWMgc3RvcmFnZSAqLworICBpZiAoKGRhZW1vbi0+ZGhjcCB8fCBkYWVtb24tPmRoY3A2KSAmJiAKKyAgICAgIGRhZW1vbi0+c2NyaXB0dXNlciAmJiAKKyAgICAgIChkYWVtb24tPmxlYXNlX2NoYW5nZV9jb21tYW5kIHx8IGRhZW1vbi0+bHVhc2NyaXB0KSkKKyAgICB7CisgICAgICBpZiAoKGVudF9wdyA9IGdldHB3bmFtKGRhZW1vbi0+c2NyaXB0dXNlcikpKQorCXsKKwkgIHNjcmlwdF91aWQgPSBlbnRfcHctPnB3X3VpZDsKKwkgIHNjcmlwdF9naWQgPSBlbnRfcHctPnB3X2dpZDsKKwkgfQorICAgICAgZWxzZQorCWJhZHVzZXIgPSBkYWVtb24tPnNjcmlwdHVzZXI7CisgICAgfQorI2VuZGlmCisgIAorICBpZiAoZGFlbW9uLT51c2VybmFtZSAmJiAhKGVudF9wdyA9IGdldHB3bmFtKGRhZW1vbi0+dXNlcm5hbWUpKSkKKyAgICBiYWR1c2VyID0gZGFlbW9uLT51c2VybmFtZTsKKyAgZWxzZSBpZiAoZGFlbW9uLT5ncm91cG5hbWUgJiYgIShncCA9IGdldGdybmFtKGRhZW1vbi0+Z3JvdXBuYW1lKSkpCisgICAgYmFkdXNlciA9IGRhZW1vbi0+Z3JvdXBuYW1lOworCisgIGlmIChiYWR1c2VyKQorICAgIGRpZShfKCJ1bmtub3duIHVzZXIgb3IgZ3JvdXA6ICVzIiksIGJhZHVzZXIsIEVDX0JBRENPTkYpOworICAgCisgIC8qIGltcGxlbWVudCBncm91cCBkZWZhdWx0cywgImRpcCIgaWYgYXZhaWxhYmxlLCBvciBncm91cCBhc3NvY2lhdGVkIHdpdGggdWlkICovCisgIGlmICghZGFlbW9uLT5ncm91cF9zZXQgJiYgIWdwKQorICAgIHsKKyAgICAgIGlmICghKGdwID0gZ2V0Z3JuYW0oQ0hHUlApKSAmJiBlbnRfcHcpCisJZ3AgPSBnZXRncmdpZChlbnRfcHctPnB3X2dpZCk7CisgICAgICAKKyAgICAgIC8qIGZvciBlcnJvciBtZXNzYWdlICovCisgICAgICBpZiAoZ3ApCisJZGFlbW9uLT5ncm91cG5hbWUgPSBncC0+Z3JfbmFtZTsgCisgICAgfQorCisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX05FVFdPUkspCisgIC8qIGRldGVybWluZSBjYXBhYmlsaXR5IEFQSSB2ZXJzaW9uIGhlcmUsIHdoaWxlIHdlIGNhbiBzdGlsbAorICAgICBjYWxsIHNhZmVfbWFsbG9jICovCisgIGlmIChlbnRfcHcgJiYgZW50X3B3LT5wd191aWQgIT0gMCkKKyAgICB7CisgICAgICBpbnQgY2Fwc2l6ZSA9IDE7IC8qIGZvciBoZWFkZXIgdmVyc2lvbiAxICovCisgICAgICBoZHIgPSBzYWZlX21hbGxvYyhzaXplb2YoKmhkcikpOworCisgICAgICAvKiBmaW5kIHZlcnNpb24gc3VwcG9ydGVkIGJ5IGtlcm5lbCAqLworICAgICAgbWVtc2V0KGhkciwgMCwgc2l6ZW9mKCpoZHIpKTsKKyAgICAgIGNhcGdldChoZHIsIE5VTEwpOworICAgICAgCisgICAgICBpZiAoaGRyLT52ZXJzaW9uICE9IExJTlVYX0NBUEFCSUxJVFlfVkVSU0lPTl8xKQorCXsKKwkgIC8qIGlmIHVua25vd24gdmVyc2lvbiwgdXNlIGxhcmdlc3Qgc3VwcG9ydGVkIHZlcnNpb24gKDMpICovCisJICBpZiAoaGRyLT52ZXJzaW9uICE9IExJTlVYX0NBUEFCSUxJVFlfVkVSU0lPTl8yKQorCSAgICBoZHItPnZlcnNpb24gPSBMSU5VWF9DQVBBQklMSVRZX1ZFUlNJT05fMzsKKwkgIGNhcHNpemUgPSAyOworCX0KKyAgICAgIAorICAgICAgZGF0YSA9IHNhZmVfbWFsbG9jKHNpemVvZigqZGF0YSkgKiBjYXBzaXplKTsKKyAgICAgIG1lbXNldChkYXRhLCAwLCBzaXplb2YoKmRhdGEpICogY2Fwc2l6ZSk7CisgICAgfQorI2VuZGlmCisKKyAgLyogVXNlIGEgcGlwZSB0byBjYXJyeSBzaWduYWxzIGFuZCBvdGhlciBldmVudHMgYmFjayB0byB0aGUgZXZlbnQgbG9vcCAKKyAgICAgaW4gYSByYWNlLWZyZWUgbWFubmVyIGFuZCBhbm90aGVyIHRvIGNhcnJ5IGVycm9ycyB0byBkYWVtb24taW52b2tpbmcgcHJvY2VzcyAqLworICBzYWZlX3BpcGUocGlwZWZkLCAxKTsKKyAgCisgIHBpcGVyZWFkID0gcGlwZWZkWzBdOworICBwaXBld3JpdGUgPSBwaXBlZmRbMV07CisgIC8qIHByaW1lIHRoZSBwaXBlIHRvIGxvYWQgc3R1ZmYgZmlyc3QgdGltZS4gKi8KKyAgc2VuZF9ldmVudChwaXBld3JpdGUsIEVWRU5UX0lOSVQsIDAsIE5VTEwpOyAKKworICBlcnJfcGlwZVsxXSA9IC0xOworICAKKyAgaWYgKCFvcHRpb25fYm9vbChPUFRfREVCVUcpKSAgIAorICAgIHsKKyAgICAgIC8qIFRoZSBmb2xsb3dpbmcgY29kZSAiZGFlbW9uaXplcyIgdGhlIHByb2Nlc3MuIAorCSBTZWUgU3RldmVucyBzZWN0aW9uIDEyLjQgKi8KKyAgICAgIAorICAgICAgaWYgKGNoZGlyKCIvIikgIT0gMCkKKwlkaWUoXygiY2Fubm90IGNoZGlyIHRvIGZpbGVzeXN0ZW0gcm9vdDogJXMiKSwgTlVMTCwgRUNfTUlTQyk7IAorCisjaWZuZGVmIE5PX0ZPUksgICAgICAKKyAgICAgIGlmICghb3B0aW9uX2Jvb2woT1BUX05PX0ZPUkspKQorCXsKKwkgIHBpZF90IHBpZDsKKwkgIAorCSAgLyogcGlwZSB0byBjYXJyeSBlcnJvcnMgYmFjayB0byBvcmlnaW5hbCBwcm9jZXNzLgorCSAgICAgV2hlbiBzdGFydHVwIGlzIGNvbXBsZXRlIHdlIGNsb3NlIHRoaXMgYW5kIHRoZSBwcm9jZXNzIHRlcm1pbmF0ZXMuICovCisJICBzYWZlX3BpcGUoZXJyX3BpcGUsIDApOworCSAgCisJICBpZiAoKHBpZCA9IGZvcmsoKSkgPT0gLTEpCisJICAgIC8qIGZkID09IC0xIHNpbmNlIHdlJ3ZlIG5vdCBmb3JrZWQsIG5ldmVyIHJldHVybnMuICovCisJICAgIHNlbmRfZXZlbnQoLTEsIEVWRU5UX0ZPUktfRVJSLCBlcnJubywgTlVMTCk7CisJICAgCisJICBpZiAocGlkICE9IDApCisJICAgIHsKKwkgICAgICBzdHJ1Y3QgZXZlbnRfZGVzYyBldjsKKwkgICAgICBjaGFyICptc2c7CisKKwkgICAgICAvKiBjbG9zZSBvdXIgY29weSBvZiB3cml0ZS1lbmQgKi8KKwkgICAgICBjbG9zZShlcnJfcGlwZVsxXSk7CisJICAgICAgCisJICAgICAgLyogY2hlY2sgZm9yIGVycm9ycyBhZnRlciB0aGUgZm9yayAqLworCSAgICAgIGlmIChyZWFkX2V2ZW50KGVycl9waXBlWzBdLCAmZXYsICZtc2cpKQorCQlmYXRhbF9ldmVudCgmZXYsIG1zZyk7CisJICAgICAgCisJICAgICAgX2V4aXQoRUNfR09PRCk7CisJICAgIH0gCisJICAKKwkgIGNsb3NlKGVycl9waXBlWzBdKTsKKworCSAgLyogTk8gY2FsbHMgdG8gZGllKCkgZnJvbSBoZXJlIG9uLiAqLworCSAgCisJICBzZXRzaWQoKTsKKwkgCisJICBpZiAoKHBpZCA9IGZvcmsoKSkgPT0gLTEpCisJICAgIHNlbmRfZXZlbnQoZXJyX3BpcGVbMV0sIEVWRU5UX0ZPUktfRVJSLCBlcnJubywgTlVMTCk7CisJIAorCSAgaWYgKHBpZCAhPSAwKQorCSAgICBfZXhpdCgwKTsKKwl9CisjZW5kaWYKKyAgICAgICAgICAgIAorICAgICAgLyogd3JpdGUgcGlkZmlsZSBfYWZ0ZXJfIGZvcmtpbmcgISAqLworICAgICAgaWYgKGRhZW1vbi0+cnVuZmlsZSkKKwl7CisJICBpbnQgZmQsIGVyciA9IDA7CisKKwkgIHNwcmludGYoZGFlbW9uLT5uYW1lYnVmZiwgIiVkXG4iLCAoaW50KSBnZXRwaWQoKSk7CisKKwkgIC8qIEV4cGxhbmF0aW9uOiBTb21lIGluc3RhbGxhdGlvbnMgb2YgZG5zbWFzcSAoZWcgRGViaWFuL1VidW50dSkgbG9jYXRlIHRoZSBwaWQtZmlsZQorCSAgICAgaW4gYSBkaXJlY3Rvcnkgd2hpY2ggaXMgd3JpdGFibGUgYnkgdGhlIG5vbi1wcml2aWxlZ2VkIHVzZXIgdGhhdCBkbnNtYXNxIHJ1bnMgYXMuIFRoaXMKKwkgICAgIGFsbG93cyB0aGUgZGFlbW9uIHRvIGRlbGV0ZSB0aGUgZmlsZSBhcyBwYXJ0IG9mIGl0cyBzaHV0ZG93bi4gVGhpcyBpcyBhIHNlY3VyaXR5IGhvbGUgdG8gdGhlIAorCSAgICAgZXh0ZW50IHRoYXQgYW4gYXR0YWNrZXIgcnVubmluZyBhcyB0aGUgdW5wcml2aWxlZ2VkICB1c2VyIGNvdWxkIHJlcGxhY2UgdGhlIHBpZGZpbGUgd2l0aCBhIAorCSAgICAgc3ltbGluaywgYW5kIGhhdmUgdGhlIHRhcmdldCBvZiB0aGF0IHN5bWxpbmsgb3ZlcndyaXR0ZW4gYXMgcm9vdCBuZXh0IHRpbWUgZG5zbWFzcSBzdGFydHMuIAorCisJICAgICBUaGUgZm9sb3dpbmcgY29kZSBmaXJzdCBkZWxldGVzIGFueSBleGlzdGluZyBmaWxlLCBhbmQgdGhlbiBvcGVucyBpdCB3aXRoIHRoZSBPX0VYQ0wgZmxhZywKKwkgICAgIGVuc3VyaW5nIHRoYXQgdGhlIG9wZW4oKSBmYWlscyBzaG91bGQgdGhlcmUgYmUgYW55IGV4aXN0aW5nIGZpbGUgKGJlY2F1c2UgdGhlIHVubGluaygpIGZhaWxlZCwgCisJICAgICBvciBhbiBhdHRhY2tlciBleHBsb2l0ZWQgdGhlIHJhY2UgYmV0d2VlbiB1bmxpbmsoKSBhbmQgb3BlbigpKS4gVGhpcyBlbnN1cmVzIHRoYXQgbm8gc3ltbGluaworCSAgICAgYXR0YWNrIGNhbiBzdWNjZWVkLiAKKworCSAgICAgQW55IGNvbXByb21pc2Ugb2YgdGhlIG5vbi1wcml2aWxlZ2VkIHVzZXIgc3RpbGwgdGhlb3JldGljYWxseSBhbGxvd3MgdGhlIHBpZC1maWxlIHRvIGJlCisJICAgICByZXBsYWNlZCB3aGlsc3QgZG5zbWFzcSBpcyBydW5uaW5nLiBUaGUgd29yc3QgdGhhdCBjb3VsZCBhbGxvdyBpcyB0aGF0IHRoZSB1c3VhbCAKKwkgICAgICJzaHV0ZG93biBkbnNtYXNxIiBzaGVsbCBjb21tYW5kIGNvdWxkIGJlIHRyaWNrZWQgaW50byBzdG9wcGluZyBhbnkgb3RoZXIgcHJvY2Vzcy4KKworCSAgICAgTm90ZSB0aGF0IGlmIGRuc21hc3EgaXMgc3RhcnRlZCBhcyBub24tcm9vdCAoZWcgZm9yIHRlc3RpbmcpIGl0IHNpbGVudGx5IGlnbm9yZXMgCisJICAgICBmYWlsdXJlIHRvIHdyaXRlIHRoZSBwaWQtZmlsZS4KKwkgICovCisKKwkgIHVubGluayhkYWVtb24tPnJ1bmZpbGUpOyAKKwkgIAorCSAgaWYgKChmZCA9IG9wZW4oZGFlbW9uLT5ydW5maWxlLCBPX1dST05MWXxPX0NSRUFUfE9fVFJVTkN8T19FWENMLCBTX0lXVVNSfFNfSVJVU1J8U19JUkdSUHxTX0lST1RIKSkgPT0gLTEpCisJICAgIHsKKwkgICAgICAvKiBvbmx5IGNvbXBsYWluIGlmIHN0YXJ0ZWQgYXMgcm9vdCAqLworCSAgICAgIGlmIChnZXR1aWQoKSA9PSAwKQorCQllcnIgPSAxOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBpZiAoIXJlYWRfd3JpdGUoZmQsICh1bnNpZ25lZCBjaGFyICopZGFlbW9uLT5uYW1lYnVmZiwgc3RybGVuKGRhZW1vbi0+bmFtZWJ1ZmYpLCAwKSkKKwkJZXJyID0gMTsKKwkgICAgICAKKwkgICAgICB3aGlsZSAoIWVyciAmJiBjbG9zZShmZCkgPT0gLTEpCisJCWlmICghcmV0cnlfc2VuZCgpKQorCQkgIGVyciA9IDE7CisJICAgIH0KKworCSAgaWYgKGVycikKKwkgICAgeworCSAgICAgIHNlbmRfZXZlbnQoZXJyX3BpcGVbMV0sIEVWRU5UX1BJREZJTEUsIGVycm5vLCBkYWVtb24tPnJ1bmZpbGUpOworCSAgICAgIF9leGl0KDApOworCSAgICB9CisJfQorICAgIH0KKyAgCisgICBsb2dfZXJyID0gbG9nX3N0YXJ0KGVudF9wdywgZXJyX3BpcGVbMV0pOworCisgICBpZiAoIW9wdGlvbl9ib29sKE9QVF9ERUJVRykpIAorICAgICB7ICAgICAgIAorICAgICAgIC8qIG9wZW4gIHN0ZG91dCBldGMgdG8gL2Rldi9udWxsICovCisgICAgICAgaW50IG51bGxmZCA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fUkRXUik7CisgICAgICAgZHVwMihudWxsZmQsIFNURE9VVF9GSUxFTk8pOworICAgICAgIGR1cDIobnVsbGZkLCBTVERFUlJfRklMRU5PKTsKKyAgICAgICBkdXAyKG51bGxmZCwgU1RESU5fRklMRU5PKTsKKyAgICAgICBjbG9zZShudWxsZmQpOworICAgICB9CisgICAKKyAgIC8qIGlmIHdlIGFyZSB0byBydW4gc2NyaXB0cywgd2UgbmVlZCB0byBmb3JrIGEgaGVscGVyIGJlZm9yZSBkcm9wcGluZyByb290LiAqLworICBkYWVtb24tPmhlbHBlcmZkID0gLTE7CisjaWZkZWYgSEFWRV9TQ1JJUFQgCisgIGlmICgoZGFlbW9uLT5kaGNwIHx8IGRhZW1vbi0+ZGhjcDYpICYmIChkYWVtb24tPmxlYXNlX2NoYW5nZV9jb21tYW5kIHx8IGRhZW1vbi0+bHVhc2NyaXB0KSkKKyAgICBkYWVtb24tPmhlbHBlcmZkID0gY3JlYXRlX2hlbHBlcihwaXBld3JpdGUsIGVycl9waXBlWzFdLCBzY3JpcHRfdWlkLCBzY3JpcHRfZ2lkLCBtYXhfZmQpOworI2VuZGlmCisKKyAgaWYgKCFvcHRpb25fYm9vbChPUFRfREVCVUcpICYmIGdldHVpZCgpID09IDApICAgCisgICAgeworICAgICAgaW50IGJhZF9jYXBhYmlsaXRpZXMgPSAwOworICAgICAgZ2lkX3QgZHVtbXk7CisgICAgICAKKyAgICAgIC8qIHJlbW92ZSBhbGwgc3VwcGxpbWVudGFyeSBncm91cHMgKi8KKyAgICAgIGlmIChncCAmJiAKKwkgIChzZXRncm91cHMoMCwgJmR1bW15KSA9PSAtMSB8fAorCSAgIHNldGdpZChncC0+Z3JfZ2lkKSA9PSAtMSkpCisJeworCSAgc2VuZF9ldmVudChlcnJfcGlwZVsxXSwgRVZFTlRfR1JPVVBfRVJSLCBlcnJubywgZGFlbW9uLT5ncm91cG5hbWUpOworCSAgX2V4aXQoMCk7CisJfQorICAKKyAgICAgIGlmIChlbnRfcHcgJiYgZW50X3B3LT5wd191aWQgIT0gMCkKKwl7ICAgICAKKyNpZiBkZWZpbmVkKEhBVkVfTElOVVhfTkVUV09SSykJICAKKwkgIC8qIE9uIGxpbnV4LCB3ZSBrZWVwIENBUF9ORVRBRE1JTiAoZm9yIEFSUC1pbmplY3Rpb24pIGFuZAorCSAgICAgQ0FQX05FVF9SQVcgKGZvciBpY21wKSBpZiB3ZSdyZSBkb2luZyBkaGNwLiBJZiB3ZSBoYXZlIHlldCB0byBiaW5kIAorCSAgICAgcG9ydHMgYmVjYXVzZSBvZiBEQUQsIG9yIHdlJ3JlIGRvaW5nIGl0IGR5bmFtaWNhbGx5LAorCSAgICAgd2UgbmVlZCBDQVBfTkVUX0JJTkRfU0VSVklDRSB0b28uICovCisJICBpZiAoaXNfZGFkX2xpc3RlbmVycygpIHx8IG9wdGlvbl9ib29sKE9QVF9DTEVWRVJCSU5EKSkKKwkgICAgZGF0YS0+ZWZmZWN0aXZlID0gZGF0YS0+cGVybWl0dGVkID0gZGF0YS0+aW5oZXJpdGFibGUgPQorCSAgICAgICgxIDw8IENBUF9ORVRfQURNSU4pIHwgKDEgPDwgQ0FQX05FVF9SQVcpIHwgCisJICAgICAgKDEgPDwgQ0FQX1NFVFVJRCkgfCAoMSA8PCBDQVBfTkVUX0JJTkRfU0VSVklDRSk7CisJICBlbHNlCisJICAgIGRhdGEtPmVmZmVjdGl2ZSA9IGRhdGEtPnBlcm1pdHRlZCA9IGRhdGEtPmluaGVyaXRhYmxlID0KKwkgICAgICAoMSA8PCBDQVBfTkVUX0FETUlOKSB8ICgxIDw8IENBUF9ORVRfUkFXKSB8ICgxIDw8IENBUF9TRVRVSUQpOworCSAgCisJICAvKiBUZWxsIGtlcm5lbCB0byBub3QgY2xlYXIgY2FwYWJpbGl0aWVzIHdoZW4gZHJvcHBpbmcgcm9vdCAqLworCSAgaWYgKGNhcHNldChoZHIsIGRhdGEpID09IC0xIHx8IHByY3RsKFBSX1NFVF9LRUVQQ0FQUywgMSwgMCwgMCwgMCkgPT0gLTEpCisJICAgIGJhZF9jYXBhYmlsaXRpZXMgPSBlcnJubzsKKwkJCSAgCisjZWxpZiBkZWZpbmVkKEhBVkVfU09MQVJJU19ORVRXT1JLKQorCSAgLyogaHR0cDovL2RldmVsb3BlcnMuc3VuLmNvbS9zb2xhcmlzL2FydGljbGVzL3Byb2dyYW1fcHJpdmlsZWdlcy5odG1sICovCisJICBwcml2X3NldF90ICpwcml2X3NldDsKKwkgIAorCSAgaWYgKCEocHJpdl9zZXQgPSBwcml2X3N0cl90b19zZXQoImJhc2ljIiwgIiwiLCBOVUxMKSkgfHwKKwkgICAgICBwcml2X2FkZHNldChwcml2X3NldCwgUFJJVl9ORVRfSUNNUEFDQ0VTUykgPT0gLTEgfHwKKwkgICAgICBwcml2X2FkZHNldChwcml2X3NldCwgUFJJVl9TWVNfTkVUX0NPTkZJRykgPT0gLTEpCisJICAgIGJhZF9jYXBhYmlsaXRpZXMgPSBlcnJubzsKKworCSAgaWYgKHByaXZfc2V0ICYmIGJhZF9jYXBhYmlsaXRpZXMgPT0gMCkKKwkgICAgeworCSAgICAgIHByaXZfaW52ZXJzZShwcml2X3NldCk7CisJICAKKwkgICAgICBpZiAoc2V0cHByaXYoUFJJVl9PRkYsIFBSSVZfTElNSVQsIHByaXZfc2V0KSA9PSAtMSkKKwkJYmFkX2NhcGFiaWxpdGllcyA9IGVycm5vOworCSAgICB9CisKKwkgIGlmIChwcml2X3NldCkKKwkgICAgcHJpdl9mcmVlc2V0KHByaXZfc2V0KTsKKworI2VuZGlmICAgIAorCisJICBpZiAoYmFkX2NhcGFiaWxpdGllcyAhPSAwKQorCSAgICB7CisJICAgICAgc2VuZF9ldmVudChlcnJfcGlwZVsxXSwgRVZFTlRfQ0FQX0VSUiwgYmFkX2NhcGFiaWxpdGllcywgTlVMTCk7CisJICAgICAgX2V4aXQoMCk7CisJICAgIH0KKwkgIAorCSAgLyogZmluYWxseSBkcm9wIHJvb3QgKi8KKwkgIGlmIChzZXR1aWQoZW50X3B3LT5wd191aWQpID09IC0xKQorCSAgICB7CisJICAgICAgc2VuZF9ldmVudChlcnJfcGlwZVsxXSwgRVZFTlRfVVNFUl9FUlIsIGVycm5vLCBkYWVtb24tPnVzZXJuYW1lKTsKKwkgICAgICBfZXhpdCgwKTsKKwkgICAgfSAgICAgCisKKyNpZmRlZiBIQVZFX0xJTlVYX05FVFdPUksKKwkgIGlmIChpc19kYWRfbGlzdGVuZXJzKCkgfHwgb3B0aW9uX2Jvb2woT1BUX0NMRVZFUkJJTkQpKQorCSAgIGRhdGEtPmVmZmVjdGl2ZSA9IGRhdGEtPnBlcm1pdHRlZCA9CisJICAgICAoMSA8PCBDQVBfTkVUX0FETUlOKSB8ICgxIDw8IENBUF9ORVRfUkFXKSB8ICgxIDw8IENBUF9ORVRfQklORF9TRVJWSUNFKTsKKwkgZWxzZQorCSAgIGRhdGEtPmVmZmVjdGl2ZSA9IGRhdGEtPnBlcm1pdHRlZCA9IAorCSAgICAgKDEgPDwgQ0FQX05FVF9BRE1JTikgfCAoMSA8PCBDQVBfTkVUX1JBVyk7CisJICBkYXRhLT5pbmhlcml0YWJsZSA9IDA7CisJICAKKwkgIC8qIGxvc2UgdGhlIHNldHVpZCBhbmQgc2V0Z2lkIGNhcGJpbGl0aWVzICovCisJICBpZiAoY2Fwc2V0KGhkciwgZGF0YSkgPT0gLTEpCisJICAgIHsKKwkgICAgICBzZW5kX2V2ZW50KGVycl9waXBlWzFdLCBFVkVOVF9DQVBfRVJSLCBlcnJubywgTlVMTCk7CisJICAgICAgX2V4aXQoMCk7CisJICAgIH0KKyNlbmRpZgorCSAgCisJfQorICAgIH0KKyAgCisjaWZkZWYgSEFWRV9MSU5VWF9ORVRXT1JLCisgIGlmIChvcHRpb25fYm9vbChPUFRfREVCVUcpKSAKKyAgICBwcmN0bChQUl9TRVRfRFVNUEFCTEUsIDEsIDAsIDAsIDApOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1RGVFAKKyAgICAgIGlmIChvcHRpb25fYm9vbChPUFRfVEZUUCkpCisgICAgeworICAgICAgRElSICpkaXI7CisgICAgICBzdHJ1Y3QgdGZ0cF9wcmVmaXggKnA7CisgICAgICAKKyAgICAgIGlmIChkYWVtb24tPnRmdHBfcHJlZml4KQorCXsKKwkgIGlmICghKChkaXIgPSBvcGVuZGlyKGRhZW1vbi0+dGZ0cF9wcmVmaXgpKSkpCisJICAgIHsKKwkgICAgICBzZW5kX2V2ZW50KGVycl9waXBlWzFdLCBFVkVOVF9URlRQX0VSUiwgZXJybm8sIGRhZW1vbi0+dGZ0cF9wcmVmaXgpOworCSAgICAgIF9leGl0KDApOworCSAgICB9CisJICBjbG9zZWRpcihkaXIpOworCX0KKworICAgICAgZm9yIChwID0gZGFlbW9uLT5pZl9wcmVmaXg7IHA7IHAgPSBwLT5uZXh0KQorCXsKKwkgIGlmICghKChkaXIgPSBvcGVuZGlyKHAtPnByZWZpeCkpKSkKKwkgICB7CisJICAgICBzZW5kX2V2ZW50KGVycl9waXBlWzFdLCBFVkVOVF9URlRQX0VSUiwgZXJybm8sIHAtPnByZWZpeCk7CisJICAgICBfZXhpdCgwKTsKKwkgICB9IAorCSAgY2xvc2VkaXIoZGlyKTsKKwl9CisgICAgfQorI2VuZGlmCisKKyAgaWYgKGRhZW1vbi0+cG9ydCA9PSAwKQorICAgIG15X3N5c2xvZyhMT0dfSU5GTywgXygic3RhcnRlZCwgdmVyc2lvbiAlcyBETlMgZGlzYWJsZWQiKSwgVkVSU0lPTik7CisgIGVsc2UgaWYgKGRhZW1vbi0+Y2FjaGVzaXplICE9IDApCisgICAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCJzdGFydGVkLCB2ZXJzaW9uICVzIGNhY2hlc2l6ZSAlZCIpLCBWRVJTSU9OLCBkYWVtb24tPmNhY2hlc2l6ZSk7CisgIGVsc2UKKyAgICBteV9zeXNsb2coTE9HX0lORk8sIF8oInN0YXJ0ZWQsIHZlcnNpb24gJXMgY2FjaGUgZGlzYWJsZWQiKSwgVkVSU0lPTik7CisgIAorICBteV9zeXNsb2coTE9HX0lORk8sIF8oImNvbXBpbGUgdGltZSBvcHRpb25zOiAlcyIpLCBjb21waWxlX29wdHMpOworICAKKyNpZmRlZiBIQVZFX0RCVVMKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9EQlVTKSkKKyAgICB7CisgICAgICBpZiAoZGFlbW9uLT5kYnVzKQorCW15X3N5c2xvZyhMT0dfSU5GTywgXygiREJ1cyBzdXBwb3J0IGVuYWJsZWQ6IGNvbm5lY3RlZCB0byBzeXN0ZW0gYnVzIikpOworICAgICAgZWxzZQorCW15X3N5c2xvZyhMT0dfSU5GTywgXygiREJ1cyBzdXBwb3J0IGVuYWJsZWQ6IGJ1cyBjb25uZWN0aW9uIHBlbmRpbmciKSk7CisgICAgfQorI2VuZGlmCisKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9MT0NBTF9TRVJWSUNFKSkKKyAgICBteV9zeXNsb2coTE9HX0lORk8sIF8oIkROUyBzZXJ2aWNlIGxpbWl0ZWQgdG8gbG9jYWwgc3VibmV0cyIpKTsKKyAgCisjaWZkZWYgSEFWRV9ETlNTRUMKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9ETlNTRUNfVkFMSUQpKQorICAgIHsKKyAgICAgIG15X3N5c2xvZyhMT0dfSU5GTywgXygiRE5TU0VDIHZhbGlkYXRpb24gZW5hYmxlZCIpKTsKKyAgICAgIGlmIChvcHRpb25fYm9vbChPUFRfRE5TU0VDX1RJTUUpKQorCW15X3N5c2xvZyhMT0dfSU5GTywgXygiRE5TU0VDIHNpZ25hdHVyZSB0aW1lc3RhbXBzIG5vdCBjaGVja2VkIHVudGlsIGZpcnN0IGNhY2hlIHJlbG9hZCIpKTsKKyAgICB9CisjZW5kaWYKKworICBpZiAobG9nX2VyciAhPSAwKQorICAgIG15X3N5c2xvZyhMT0dfV0FSTklORywgXygid2FybmluZzogZmFpbGVkIHRvIGNoYW5nZSBvd25lciBvZiAlczogJXMiKSwgCisJICAgICAgZGFlbW9uLT5sb2dfZmlsZSwgc3RyZXJyb3IobG9nX2VycikpOworICAKKyAgaWYgKGJpbmRfZmFsbGJhY2spCisgICAgbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJzZXR0aW5nIC0tYmluZC1pbnRlcmZhY2VzIG9wdGlvbiBiZWNhdXNlIG9mIE9TIGxpbWl0YXRpb25zIikpOworCisgIGlmIChvcHRpb25fYm9vbChPUFRfTk9XSUxEKSkKKyAgICB3YXJuX2JvdW5kX2xpc3RlbmVycygpOworCisgIHdhcm5faW50X25hbWVzKCk7CisgIAorICBpZiAoIW9wdGlvbl9ib29sKE9QVF9OT1dJTEQpKSAKKyAgICBmb3IgKGlmX3RtcCA9IGRhZW1vbi0+aWZfbmFtZXM7IGlmX3RtcDsgaWZfdG1wID0gaWZfdG1wLT5uZXh0KQorICAgICAgaWYgKGlmX3RtcC0+bmFtZSAmJiAhaWZfdG1wLT51c2VkKQorCW15X3N5c2xvZyhMT0dfV0FSTklORywgXygid2FybmluZzogaW50ZXJmYWNlICVzIGRvZXMgbm90IGN1cnJlbnRseSBleGlzdCIpLCBpZl90bXAtPm5hbWUpOworICAgCisgIGlmIChkYWVtb24tPnBvcnQgIT0gMCAmJiBvcHRpb25fYm9vbChPUFRfTk9fUkVTT0xWKSkKKyAgICB7CisgICAgICBpZiAoZGFlbW9uLT5yZXNvbHZfZmlsZXMgJiYgIWRhZW1vbi0+cmVzb2x2X2ZpbGVzLT5pc19kZWZhdWx0KQorCW15X3N5c2xvZyhMT0dfV0FSTklORywgXygid2FybmluZzogaWdub3JpbmcgcmVzb2x2LWZpbGUgZmxhZyBiZWNhdXNlIG5vLXJlc29sdiBpcyBzZXQiKSk7CisgICAgICBkYWVtb24tPnJlc29sdl9maWxlcyA9IE5VTEw7CisgICAgICBpZiAoIWRhZW1vbi0+c2VydmVycykKKwlteV9zeXNsb2coTE9HX1dBUk5JTkcsIF8oIndhcm5pbmc6IG5vIHVwc3RyZWFtIHNlcnZlcnMgY29uZmlndXJlZCIpKTsKKyAgICB9IAorCisgIGlmIChkYWVtb24tPm1heF9sb2dzICE9IDApCisgICAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCJhc3luY2hyb25vdXMgbG9nZ2luZyBlbmFibGVkLCBxdWV1ZSBsaW1pdCBpcyAlZCBtZXNzYWdlcyIpLCBkYWVtb24tPm1heF9sb2dzKTsKKyAgCisKKyNpZmRlZiBIQVZFX0RIQ1AKKyAgZm9yIChjb250ZXh0ID0gZGFlbW9uLT5kaGNwOyBjb250ZXh0OyBjb250ZXh0ID0gY29udGV4dC0+bmV4dCkKKyAgICBsb2dfY29udGV4dChBRl9JTkVULCBjb250ZXh0KTsKKworICBmb3IgKHJlbGF5ID0gZGFlbW9uLT5yZWxheTQ7IHJlbGF5OyByZWxheSA9IHJlbGF5LT5uZXh0KQorICAgIGxvZ19yZWxheShBRl9JTkVULCByZWxheSk7CisKKyMgIGlmZGVmIEhBVkVfREhDUDYKKyAgZm9yIChjb250ZXh0ID0gZGFlbW9uLT5kaGNwNjsgY29udGV4dDsgY29udGV4dCA9IGNvbnRleHQtPm5leHQpCisgICAgbG9nX2NvbnRleHQoQUZfSU5FVDYsIGNvbnRleHQpOworCisgIGZvciAocmVsYXkgPSBkYWVtb24tPnJlbGF5NjsgcmVsYXk7IHJlbGF5ID0gcmVsYXktPm5leHQpCisgICAgbG9nX3JlbGF5KEFGX0lORVQ2LCByZWxheSk7CisgIAorICBpZiAoZGFlbW9uLT5kb2luZ19kaGNwNiB8fCBkYWVtb24tPmRvaW5nX3JhKQorICAgIGRoY3BfY29uc3RydWN0X2NvbnRleHRzKG5vdyk7CisgIAorICBpZiAob3B0aW9uX2Jvb2woT1BUX1JBKSkKKyAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCJJUHY2IHJvdXRlciBhZHZlcnRpc2VtZW50IGVuYWJsZWQiKSk7CisjICBlbmRpZgorCisjICBpZmRlZiBIQVZFX0xJTlVYX05FVFdPUksKKyAgaWYgKGRpZF9iaW5kKQorICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sIF8oIkRIQ1AsIHNvY2tldHMgYm91bmQgZXhjbHVzaXZlbHkgdG8gaW50ZXJmYWNlICVzIiksIGJvdW5kX2RldmljZSk7CisjICBlbmRpZgorCisgIC8qIGFmdGVyIGRoY3BfY29udHJ1Y3RfY29udGV4dHMgKi8KKyAgaWYgKGRhZW1vbi0+ZGhjcCB8fCBkYWVtb24tPmRvaW5nX2RoY3A2KQorICAgIGxlYXNlX2ZpbmRfaW50ZXJmYWNlcyhub3cpOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1RGVFAKKwlpZiAob3B0aW9uX2Jvb2woT1BUX1RGVFApKQorICAgIHsKKyNpZmRlZiBGRF9TRVRTSVpFCisgICAgICBpZiAoRkRfU0VUU0laRSA8ICh1bnNpZ25lZCltYXhfZmQpCisJbWF4X2ZkID0gRkRfU0VUU0laRTsKKyNlbmRpZgorCisgICAgICBteV9zeXNsb2coTVNfVEZUUCB8IExPR19JTkZPLCAiVEZUUCAlcyVzICVzIiwgCisJCWRhZW1vbi0+dGZ0cF9wcmVmaXggPyBfKCJyb290IGlzICIpIDogXygiZW5hYmxlZCIpLAorCQlkYWVtb24tPnRmdHBfcHJlZml4ID8gZGFlbW9uLT50ZnRwX3ByZWZpeDogIiIsCisJCW9wdGlvbl9ib29sKE9QVF9URlRQX1NFQ1VSRSkgPyBfKCJzZWN1cmUgbW9kZSIpIDogIiIpOworICAgICAgCisgICAgICAvKiBUaGlzIGlzIGEgZ3Vlc3MsIGl0IGFzc3VtZXMgdGhhdCBmb3Igc21hbGwgbGltaXRzLCAKKwkgZGlzam9pbnQgZmlsZXMgbWlnaHQgYmUgc2VydmVkLCBidXQgZm9yIGxhcmdlIGxpbWl0cywgCisJIGEgc2luZ2xlIGZpbGUgd2lsbCBiZSBzZW50IHRvIG1heSBjbGllbnRzICh0aGUgZmlsZSBvbmx5IG5lZWRzCisJIG9uZSBmZCkuICovCisKKyAgICAgIG1heF9mZCAtPSAzMDsgLyogdXNlIG90aGVyIHRoYW4gVEZUUCAqLworICAgICAgCisgICAgICBpZiAobWF4X2ZkIDwgMCkKKwltYXhfZmQgPSA1OworICAgICAgZWxzZSBpZiAobWF4X2ZkIDwgMTAwKQorCW1heF9mZCA9IG1heF9mZC8yOworICAgICAgZWxzZQorCW1heF9mZCA9IG1heF9mZCAtIDIwOworICAgICAgCisgICAgICAvKiBpZiB3ZSBoYXZlIHRvIHVzZSBhIGxpbWl0ZWQgcmFuZ2Ugb2YgcG9ydHMsIAorCSB0aGF0IHdpbGwgbGltaXQgdGhlIG51bWJlciBvZiB0cmFuc2ZlcnMgKi8KKyAgICAgIGlmIChkYWVtb24tPnN0YXJ0X3RmdHBfcG9ydCAhPSAwICYmCisJICBkYWVtb24tPmVuZF90ZnRwX3BvcnQgLSBkYWVtb24tPnN0YXJ0X3RmdHBfcG9ydCArIDEgPCBtYXhfZmQpCisJbWF4X2ZkID0gZGFlbW9uLT5lbmRfdGZ0cF9wb3J0IC0gZGFlbW9uLT5zdGFydF90ZnRwX3BvcnQgKyAxOworCisgICAgICBpZiAoZGFlbW9uLT50ZnRwX21heCA+IG1heF9mZCkKKwl7CisJICBkYWVtb24tPnRmdHBfbWF4ID0gbWF4X2ZkOworCSAgbXlfc3lzbG9nKE1TX1RGVFAgfCBMT0dfV0FSTklORywgCisJCSAgICBfKCJyZXN0cmljdGluZyBtYXhpbXVtIHNpbXVsdGFuZW91cyBURlRQIHRyYW5zZmVycyB0byAlZCIpLCAKKwkJICAgIGRhZW1vbi0+dGZ0cF9tYXgpOworCX0KKyAgICB9CisjZW5kaWYKKworICAvKiBmaW5pc2hlZCBzdGFydC11cCAtIHJlbGVhc2Ugb3JpZ2luYWwgcHJvY2VzcyAqLworICBpZiAoZXJyX3BpcGVbMV0gIT0gLTEpCisgICAgY2xvc2UoZXJyX3BpcGVbMV0pOworICAKKyAgaWYgKGRhZW1vbi0+cG9ydCAhPSAwKQorICAgIGNoZWNrX3NlcnZlcnMoKTsKKyAgCisgIHBpZCA9IGdldHBpZCgpOworICAKKyNpZmRlZiBIQVZFX0xJTlVYX05FVFdPUksKKyAgLyogVXNpbmcgaW5vdGlmeSwgaGF2ZSB0byBzZWxlY3QgYSByZXNvbHYgZmlsZSBhdCBzdGFydHVwICovCisgIHBvbGxfcmVzb2x2KDEsIDAsIG5vdyk7CisjZW5kaWYKKyAgCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGludCBtYXhmZCA9IC0xOworICAgICAgc3RydWN0IHRpbWV2YWwgdCwgKnRwID0gTlVMTDsKKyAgICAgIGZkX3NldCByc2V0LCB3c2V0LCBlc2V0OworICAgICAgCisgICAgICBGRF9aRVJPKCZyc2V0KTsKKyAgICAgIEZEX1pFUk8oJndzZXQpOworICAgICAgRkRfWkVSTygmZXNldCk7CisgICAgICAKKyAgICAgIC8qIGlmIHdlIGFyZSBvdXQgb2YgcmVzb3VyY2VzLCBmaW5kIGhvdyBsb25nIHdlIGhhdmUgdG8gd2FpdAorCSBmb3Igc29tZSB0byBjb21lIGZyZWUsIHdlJ2xsIGxvb3AgYXJvdW5kIHRoZW4gYW5kIHJlc3RhcnQKKwkgbGlzdGVuaW5nIGZvciBxdWVyaWVzICovCisgICAgICBpZiAoKHQudHZfc2VjID0gc2V0X2Ruc19saXN0ZW5lcnMobm93LCAmcnNldCwgJm1heGZkKSkgIT0gMCkKKwl7CisJICB0LnR2X3VzZWMgPSAwOworCSAgdHAgPSAmdDsKKwl9CisKKyAgICAgIC8qIFdoaWxzdCBwb2xsaW5nIGZvciB0aGUgZGJ1cywgb3IgZG9pbmcgYSB0ZnRwIHRyYW5zZmVyLCB3YWtlIGV2ZXJ5IHF1YXJ0ZXIgc2Vjb25kICovCisgICAgICBpZiAoZGFlbW9uLT50ZnRwX3RyYW5zIHx8CisJICAob3B0aW9uX2Jvb2woT1BUX0RCVVMpICYmICFkYWVtb24tPmRidXMpKQorCXsKKwkgIHQudHZfc2VjID0gMDsKKwkgIHQudHZfdXNlYyA9IDI1MDAwMDsKKwkgIHRwID0gJnQ7CisJfQorICAgICAgLyogV2FrZSBldmVyeSBzZWNvbmQgd2hpbHN0IHdhaXRpbmcgZm9yIERBRCB0byBjb21wbGV0ZSAqLworICAgICAgZWxzZSBpZiAoaXNfZGFkX2xpc3RlbmVycygpKQorCXsKKwkgIHQudHZfc2VjID0gMTsKKwkgIHQudHZfdXNlYyA9IDA7CisJICB0cCA9ICZ0OworCX0KKworI2lmZGVmIEhBVkVfREJVUworICAgICAgc2V0X2RidXNfbGlzdGVuZXJzKCZtYXhmZCwgJnJzZXQsICZ3c2V0LCAmZXNldCk7CisjZW5kaWYJCisgIAorI2lmZGVmIEhBVkVfREhDUAorICAgICAgaWYgKGRhZW1vbi0+ZGhjcCB8fCBkYWVtb24tPnJlbGF5NCkKKwl7CisJICBGRF9TRVQoZGFlbW9uLT5kaGNwZmQsICZyc2V0KTsKKwkgIGJ1bXBfbWF4ZmQoZGFlbW9uLT5kaGNwZmQsICZtYXhmZCk7CisJICBpZiAoZGFlbW9uLT5weGVmZCAhPSAtMSkKKwkgICAgeworCSAgICAgIEZEX1NFVChkYWVtb24tPnB4ZWZkLCAmcnNldCk7CisJICAgICAgYnVtcF9tYXhmZChkYWVtb24tPnB4ZWZkLCAmbWF4ZmQpOworCSAgICB9CisJfQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0RIQ1A2CisgICAgICBpZiAoZGFlbW9uLT5kb2luZ19kaGNwNiB8fCBkYWVtb24tPnJlbGF5NikKKwl7CisJICBGRF9TRVQoZGFlbW9uLT5kaGNwNmZkLCAmcnNldCk7CisJICBidW1wX21heGZkKGRhZW1vbi0+ZGhjcDZmZCwgJm1heGZkKTsKKwl9CisKKyAgICAgIGlmIChkYWVtb24tPmRvaW5nX3JhKQorCXsKKwkgIEZEX1NFVChkYWVtb24tPmljbXA2ZmQsICZyc2V0KTsKKwkgIGJ1bXBfbWF4ZmQoZGFlbW9uLT5pY21wNmZkLCAmbWF4ZmQpOyAKKwl9CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9MSU5VWF9ORVRXT1JLKQorICAgICAgRkRfU0VUKGRhZW1vbi0+bmV0bGlua2ZkLCAmcnNldCk7CisgICAgICBidW1wX21heGZkKGRhZW1vbi0+bmV0bGlua2ZkLCAmbWF4ZmQpOworICAgICAgaWYgKGRhZW1vbi0+cG9ydCAhPSAwICYmICFvcHRpb25fYm9vbChPUFRfTk9fUE9MTCkpCisJeworCSAgRkRfU0VUKGRhZW1vbi0+aW5vdGlmeWZkLCAmcnNldCk7CisJICBidW1wX21heGZkKGRhZW1vbi0+aW5vdGlmeWZkLCAmbWF4ZmQpOworCX0KKyNlbGlmIGRlZmluZWQoSEFWRV9CU0RfTkVUV09SSykKKyAgICAgIEZEX1NFVChkYWVtb24tPnJvdXRlZmQsICZyc2V0KTsKKyAgICAgIGJ1bXBfbWF4ZmQoZGFlbW9uLT5yb3V0ZWZkLCAmbWF4ZmQpOworI2VuZGlmCisgICAgICAKKyAgICAgIEZEX1NFVChwaXBlcmVhZCwgJnJzZXQpOworICAgICAgYnVtcF9tYXhmZChwaXBlcmVhZCwgJm1heGZkKTsKKworI2lmZGVmIEhBVkVfREhDUAorIyAgaWZkZWYgSEFWRV9TQ1JJUFQKKyAgICAgIHdoaWxlIChoZWxwZXJfYnVmX2VtcHR5KCkgJiYgZG9fc2NyaXB0X3J1bihub3cpKTsKKworIyAgICBpZmRlZiBIQVZFX1RGVFAKKyAgICAgIHdoaWxlIChoZWxwZXJfYnVmX2VtcHR5KCkgJiYgZG9fdGZ0cF9zY3JpcHRfcnVuKCkpOworIyAgICBlbmRpZgorCisgICAgICBpZiAoIWhlbHBlcl9idWZfZW1wdHkoKSkKKwl7CisJICBGRF9TRVQoZGFlbW9uLT5oZWxwZXJmZCwgJndzZXQpOworCSAgYnVtcF9tYXhmZChkYWVtb24tPmhlbHBlcmZkLCAmbWF4ZmQpOworCX0KKyMgIGVsc2UKKyAgICAgIC8qIG5lZWQgdGhpcyBmb3Igb3RoZXIgc2lkZS1lZmZlY3RzICovCisgICAgICB3aGlsZSAoZG9fc2NyaXB0X3J1bihub3cpKTsKKworIyAgICBpZmRlZiBIQVZFX1RGVFAgCisgICAgICB3aGlsZSAoZG9fdGZ0cF9zY3JpcHRfcnVuKCkpOworIyAgICBlbmRpZgorCisjICBlbmRpZgorI2VuZGlmCisgICAKKyAgICAgIC8qIG11c3QgZG8gdGhpcyBqdXN0IGJlZm9yZSBzZWxlY3QoKSwgd2hlbiB3ZSBrbm93IG5vCisJIG1vcmUgY2FsbHMgdG8gbXlfc3lzbG9nKCkgY2FuIG9jY3VyICovCisgICAgICBzZXRfbG9nX3dyaXRlcigmd3NldCwgJm1heGZkKTsKKyAgICAgIAorICAgICAgaWYgKHNlbGVjdChtYXhmZCsxLCAmcnNldCwgJndzZXQsICZlc2V0LCB0cCkgPCAwKQorCXsKKwkgIC8qIG90aGVyd2lzZSB1bmRlZmluZWQgYWZ0ZXIgZXJyb3IgKi8KKwkgIEZEX1pFUk8oJnJzZXQpOyBGRF9aRVJPKCZ3c2V0KTsgRkRfWkVSTygmZXNldCk7CisJfQorCisgICAgICBub3cgPSBkbnNtYXNxX3RpbWUoKTsKKworICAgICAgY2hlY2tfbG9nX3dyaXRlcigmd3NldCk7CisKKyAgICAgIC8qIHByaW1lLiAqLworICAgICAgZW51bWVyYXRlX2ludGVyZmFjZXMoMSk7CisKKyAgICAgIC8qIENoZWNrIHRoZSBpbnRlcmZhY2VzIHRvIHNlZSBpZiBhbnkgaGF2ZSBleGl0ZWQgREFEIHN0YXRlCisJIGFuZCBpZiBzbywgYmluZCB0aGUgYWRkcmVzcy4gKi8KKyAgICAgIGlmIChpc19kYWRfbGlzdGVuZXJzKCkpCisJeworCSAgZW51bWVyYXRlX2ludGVyZmFjZXMoMCk7CisJICAvKiBOQiwgaXNfZGFkX2xpc3RlbmVycygpID09IDEgLS0+IHdlJ3JlIGJpbmRpbmcgaW50ZXJmYWNlcyAqLworCSAgY3JlYXRlX2JvdW5kX2xpc3RlbmVycygwKTsKKwkgIHdhcm5fYm91bmRfbGlzdGVuZXJzKCk7CisJfQorCisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX05FVFdPUkspCisgICAgICBpZiAoRkRfSVNTRVQoZGFlbW9uLT5uZXRsaW5rZmQsICZyc2V0KSkKKwluZXRsaW5rX211bHRpY2FzdCgpOworI2VsaWYgZGVmaW5lZChIQVZFX0JTRF9ORVRXT1JLKQorICAgICAgaWYgKEZEX0lTU0VUKGRhZW1vbi0+cm91dGVmZCwgJnJzZXQpKQorCXJvdXRlX3NvY2soKTsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9MSU5VWF9ORVRXT1JLCisgICAgICBpZiAoZGFlbW9uLT5wb3J0ICE9IDAgJiYgIW9wdGlvbl9ib29sKE9QVF9OT19QT0xMKSAmJiBGRF9JU1NFVChkYWVtb24tPmlub3RpZnlmZCwgJnJzZXQpICYmIGlub3RpZnlfY2hlY2soKSkKKwlwb2xsX3Jlc29sdigxLCAxLCBub3cpOyAJICAKKyNlbHNlCisgICAgICAvKiBDaGVjayBmb3IgY2hhbmdlcyB0byByZXNvbHYgZmlsZXMgb25jZSBwZXIgc2Vjb25kIG1heC4gKi8KKyAgICAgIC8qIERvbid0IGdvIHNpbGVudCBmb3IgbG9uZyBwZXJpb2RzIGlmIHRoZSBjbG9jayBnb2VzIGJhY2t3YXJkcy4gKi8KKyAgICAgIGlmIChkYWVtb24tPmxhc3RfcmVzb2x2ID09IDAgfHwgCisJICBkaWZmdGltZShub3csIGRhZW1vbi0+bGFzdF9yZXNvbHYpID4gMS4wIHx8IAorCSAgZGlmZnRpbWUobm93LCBkYWVtb24tPmxhc3RfcmVzb2x2KSA8IC0xLjApCisJeworCSAgLyogcG9sbF9yZXNvbHYgZG9lc24ndCBuZWVkIHRvIHJlbG9hZCBmaXJzdCB0aW1lIHRocm91Z2gsIHNpbmNlIAorCSAgICAgdGhhdCdzIHF1ZXVlZCBhbnl3YXkuICovCisKKwkgIHBvbGxfcmVzb2x2KDAsIGRhZW1vbi0+bGFzdF9yZXNvbHYgIT0gMCwgbm93KTsgCSAgCisJICBkYWVtb24tPmxhc3RfcmVzb2x2ID0gbm93OworCX0KKyNlbmRpZgorCisgICAgICBpZiAoRkRfSVNTRVQocGlwZXJlYWQsICZyc2V0KSkKKwlhc3luY19ldmVudChwaXBlcmVhZCwgbm93KTsKKyAgICAgIAorI2lmZGVmIEhBVkVfREJVUworICAgICAgLyogaWYgd2UgZGlkbid0IGNyZWF0ZSBhIERCdXMgY29ubmVjdGlvbiwgcmV0cnkgbm93LiAqLyAKKyAgICAgaWYgKG9wdGlvbl9ib29sKE9QVF9EQlVTKSAmJiAhZGFlbW9uLT5kYnVzKQorCXsKKwkgIGNoYXIgKmVycjsKKwkgIGlmICgoZXJyID0gZGJ1c19pbml0KCkpKQorCSAgICBteV9zeXNsb2coTE9HX1dBUk5JTkcsIF8oIkRCdXMgZXJyb3I6ICVzIiksIGVycik7CisJICBpZiAoZGFlbW9uLT5kYnVzKQorCSAgICBteV9zeXNsb2coTE9HX0lORk8sIF8oImNvbm5lY3RlZCB0byBzeXN0ZW0gREJ1cyIpKTsKKwl9CisgICAgICBjaGVja19kYnVzX2xpc3RlbmVycygmcnNldCwgJndzZXQsICZlc2V0KTsKKyNlbmRpZgorICAgICAgCisgICAgICBjaGVja19kbnNfbGlzdGVuZXJzKCZyc2V0LCBub3cpOworCisjaWZkZWYgSEFWRV9URlRQCisgICAgICBjaGVja190ZnRwX2xpc3RlbmVycygmcnNldCwgbm93KTsKKyNlbmRpZiAgICAgIAorCisjaWZkZWYgSEFWRV9ESENQCisgICAgICBpZiAoZGFlbW9uLT5kaGNwIHx8IGRhZW1vbi0+cmVsYXk0KQorCXsKKwkgIGlmIChGRF9JU1NFVChkYWVtb24tPmRoY3BmZCwgJnJzZXQpKQorCSAgICBkaGNwX3BhY2tldChub3csIDApOworCSAgaWYgKGRhZW1vbi0+cHhlZmQgIT0gLTEgJiYgRkRfSVNTRVQoZGFlbW9uLT5weGVmZCwgJnJzZXQpKQorCSAgICBkaGNwX3BhY2tldChub3csIDEpOworCX0KKworI2lmZGVmIEhBVkVfREhDUDYKKyAgICAgIGlmICgoZGFlbW9uLT5kb2luZ19kaGNwNiB8fCBkYWVtb24tPnJlbGF5NikgJiYgRkRfSVNTRVQoZGFlbW9uLT5kaGNwNmZkLCAmcnNldCkpCisJZGhjcDZfcGFja2V0KG5vdyk7CisKKyAgICAgIGlmIChkYWVtb24tPmRvaW5nX3JhICYmIEZEX0lTU0VUKGRhZW1vbi0+aWNtcDZmZCwgJnJzZXQpKQorCWljbXA2X3BhY2tldChub3cpOworI2VuZGlmCisKKyMgIGlmZGVmIEhBVkVfU0NSSVBUCisgICAgICBpZiAoZGFlbW9uLT5oZWxwZXJmZCAhPSAtMSAmJiBGRF9JU1NFVChkYWVtb24tPmhlbHBlcmZkLCAmd3NldCkpCisJaGVscGVyX3dyaXRlKCk7CisjICBlbmRpZgorI2VuZGlmCisKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHNpZ19oYW5kbGVyKGludCBzaWcpCit7CisgIGlmIChwaWQgPT0gMCkKKyAgICB7CisgICAgICAvKiBpZ25vcmUgYW55dGhpbmcgb3RoZXIgdGhhbiBURVJNIGR1cmluZyBzdGFydHVwCisJIGFuZCBpbiBoZWxwZXIgcHJvYy4gKGhlbHBlciBpZ25vcmUgVEVSTSB0b28pICovCisgICAgICBpZiAoc2lnID09IFNJR1RFUk0pCisJZXhpdChFQ19NSVNDKTsKKyAgICB9CisgIGVsc2UgaWYgKHBpZCAhPSBnZXRwaWQoKSkKKyAgICB7CisgICAgICAvKiBhbGFybSBpcyB1c2VkIHRvIGtpbGwgVENQIGNoaWxkcmVuIGFmdGVyIGEgZml4ZWQgdGltZS4gKi8KKyAgICAgIGlmIChzaWcgPT0gU0lHQUxSTSkKKwlfZXhpdCgwKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBtYXN0ZXIgcHJvY2VzcyAqLworICAgICAgaW50IGV2ZW50LCBlcnJzYXZlID0gZXJybm87CisgICAgICAKKyAgICAgIGlmIChzaWcgPT0gU0lHSFVQKQorCWV2ZW50ID0gRVZFTlRfUkVMT0FEOworICAgICAgZWxzZSBpZiAoc2lnID09IFNJR0NITEQpCisJZXZlbnQgPSBFVkVOVF9DSElMRDsKKyAgICAgIGVsc2UgaWYgKHNpZyA9PSBTSUdBTFJNKQorCWV2ZW50ID0gRVZFTlRfQUxBUk07CisgICAgICBlbHNlIGlmIChzaWcgPT0gU0lHVEVSTSkKKwlldmVudCA9IEVWRU5UX1RFUk07CisgICAgICBlbHNlIGlmIChzaWcgPT0gU0lHVVNSMSkKKwlldmVudCA9IEVWRU5UX0RVTVA7CisgICAgICBlbHNlIGlmIChzaWcgPT0gU0lHVVNSMikKKwlldmVudCA9IEVWRU5UX1JFT1BFTjsKKyAgICAgIGVsc2UKKwlyZXR1cm47CisKKyAgICAgIHNlbmRfZXZlbnQocGlwZXdyaXRlLCBldmVudCwgMCwgTlVMTCk7IAorICAgICAgZXJybm8gPSBlcnJzYXZlOworICAgIH0KK30KKworLyogbm93ID09IDAgLT4gcXVldWUgaW1tZWRpYXRlIGNhbGxiYWNrICovCit2b2lkIHNlbmRfYWxhcm0odGltZV90IGV2ZW50LCB0aW1lX3Qgbm93KQoreworICBpZiAobm93ID09IDAgfHwgZXZlbnQgIT0gMCkKKyAgICB7CisgICAgICAvKiBhbGFybSgwKSBvciBhbGFybSgtdmUpIGRvZXNuJ3QgZG8gd2hhdCB3ZSB3YW50Li4uLiAqLworICAgICAgaWYgKChub3cgPT0gMCB8fCBkaWZmdGltZShldmVudCwgbm93KSA8PSAwLjApKQorCXNlbmRfZXZlbnQocGlwZXdyaXRlLCBFVkVOVF9BTEFSTSwgMCwgTlVMTCk7CisgICAgICBlbHNlIAorCWFsYXJtKCh1bnNpZ25lZClkaWZmdGltZShldmVudCwgbm93KSk7IAorICAgIH0KK30KKwordm9pZCBxdWV1ZV9ldmVudChpbnQgZXZlbnQpCit7CisgIHNlbmRfZXZlbnQocGlwZXdyaXRlLCBldmVudCwgMCwgTlVMTCk7Cit9CisKK3ZvaWQgc2VuZF9ldmVudChpbnQgZmQsIGludCBldmVudCwgaW50IGRhdGEsIGNoYXIgKm1zZykKK3sKKyAgc3RydWN0IGV2ZW50X2Rlc2MgZXY7CisgIHN0cnVjdCBpb3ZlYyBpb3ZbMl07CisKKyAgZXYuZXZlbnQgPSBldmVudDsKKyAgZXYuZGF0YSA9IGRhdGE7CisgIGV2Lm1zZ19zeiA9IG1zZyA/IHN0cmxlbihtc2cpIDogMDsKKyAgCisgIGlvdlswXS5pb3ZfYmFzZSA9ICZldjsKKyAgaW92WzBdLmlvdl9sZW4gPSBzaXplb2YoZXYpOworICBpb3ZbMV0uaW92X2Jhc2UgPSBtc2c7CisgIGlvdlsxXS5pb3ZfbGVuID0gZXYubXNnX3N6OworICAKKyAgLyogZXJyb3IgcGlwZSwgZGVidWcgbW9kZS4gKi8KKyAgaWYgKGZkID09IC0xKQorICAgIGZhdGFsX2V2ZW50KCZldiwgbXNnKTsKKyAgZWxzZQorICAgIC8qIHBpcGUgaXMgbm9uLWJsb2NraW5nIGFuZCBzdHJ1Y3QgZXZlbnRfZGVzYyBpcyBzbWFsbGVyIHRoYW4KKyAgICAgICBQSVBFX0JVRiwgc28gdGhpcyBlaXRoZXIgZmFpbHMgb3Igd3JpdGVzIGV2ZXJ5dGhpbmcgKi8KKyAgICB3aGlsZSAod3JpdGV2KGZkLCBpb3YsIG1zZyA/IDIgOiAxKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7Cit9CisKKy8qIE5PVEU6IHRoZSBtZW1vcnkgdXNlZCB0byByZXR1cm4gbXNnIGlzIGxlYWtlZDogdXNlIG1zZ3MgaW4gZXZlbnRzIG9ubHkKKyAgIHRvIGRlc2NyaWJlIGZhdGFsIGVycm9ycy4gKi8KK3N0YXRpYyBpbnQgcmVhZF9ldmVudChpbnQgZmQsIHN0cnVjdCBldmVudF9kZXNjICpldnAsIGNoYXIgKiptc2cpCit7CisgIGNoYXIgKmJ1ZjsKKworICBpZiAoIXJlYWRfd3JpdGUoZmQsICh1bnNpZ25lZCBjaGFyICopZXZwLCBzaXplb2Yoc3RydWN0IGV2ZW50X2Rlc2MpLCAxKSkKKyAgICByZXR1cm4gMDsKKyAgCisgICptc2cgPSBOVUxMOworICAKKyAgaWYgKGV2cC0+bXNnX3N6ICE9IDAgJiYgCisgICAgICAoYnVmID0gbWFsbG9jKGV2cC0+bXNnX3N6ICsgMSkpICYmCisgICAgICByZWFkX3dyaXRlKGZkLCAodW5zaWduZWQgY2hhciAqKWJ1ZiwgZXZwLT5tc2dfc3osIDEpKQorICAgIHsKKyAgICAgIGJ1ZltldnAtPm1zZ19zel0gPSAwOworICAgICAgKm1zZyA9IGJ1ZjsKKyAgICB9CisKKyAgcmV0dXJuIDE7Cit9CisgICAgCitzdGF0aWMgdm9pZCBmYXRhbF9ldmVudChzdHJ1Y3QgZXZlbnRfZGVzYyAqZXYsIGNoYXIgKm1zZykKK3sKKyAgZXJybm8gPSBldi0+ZGF0YTsKKyAgCisgIHN3aXRjaCAoZXYtPmV2ZW50KQorICAgIHsKKyAgICBjYXNlIEVWRU5UX0RJRToKKyAgICAgIGV4aXQoMCk7CisKKyAgICBjYXNlIEVWRU5UX0ZPUktfRVJSOgorICAgICAgZGllKF8oImNhbm5vdCBmb3JrIGludG8gYmFja2dyb3VuZDogJXMiKSwgTlVMTCwgRUNfTUlTQyk7CisgIAorICAgIGNhc2UgRVZFTlRfUElQRV9FUlI6CisgICAgICBkaWUoXygiZmFpbGVkIHRvIGNyZWF0ZSBoZWxwZXI6ICVzIiksIE5VTEwsIEVDX01JU0MpOworICAKKyAgICBjYXNlIEVWRU5UX0NBUF9FUlI6CisgICAgICBkaWUoXygic2V0dGluZyBjYXBhYmlsaXRpZXMgZmFpbGVkOiAlcyIpLCBOVUxMLCBFQ19NSVNDKTsKKworICAgIGNhc2UgRVZFTlRfVVNFUl9FUlI6CisgICAgICBkaWUoXygiZmFpbGVkIHRvIGNoYW5nZSB1c2VyLWlkIHRvICVzOiAlcyIpLCBtc2csIEVDX01JU0MpOworCisgICAgY2FzZSBFVkVOVF9HUk9VUF9FUlI6CisgICAgICBkaWUoXygiZmFpbGVkIHRvIGNoYW5nZSBncm91cC1pZCB0byAlczogJXMiKSwgbXNnLCBFQ19NSVNDKTsKKyAgICAgIAorICAgIGNhc2UgRVZFTlRfUElERklMRToKKyAgICAgIGRpZShfKCJmYWlsZWQgdG8gb3BlbiBwaWRmaWxlICVzOiAlcyIpLCBtc2csIEVDX0ZJTEUpOworCisgICAgY2FzZSBFVkVOVF9MT0dfRVJSOgorICAgICAgZGllKF8oImNhbm5vdCBvcGVuIGxvZyAlczogJXMiKSwgbXNnLCBFQ19GSUxFKTsKKyAgICAKKyAgICBjYXNlIEVWRU5UX0xVQV9FUlI6CisgICAgICBkaWUoXygiZmFpbGVkIHRvIGxvYWQgTHVhIHNjcmlwdDogJXMiKSwgbXNnLCBFQ19NSVNDKTsKKworICAgIGNhc2UgRVZFTlRfVEZUUF9FUlI6CisgICAgICBkaWUoXygiVEZUUCBkaXJlY3RvcnkgJXMgaW5hY2Nlc3NpYmxlOiAlcyIpLCBtc2csIEVDX0ZJTEUpOworICAgIH0KK30JCisgICAgICAKK3N0YXRpYyB2b2lkIGFzeW5jX2V2ZW50KGludCBwaXBlLCB0aW1lX3Qgbm93KQoreworICBwaWRfdCBwOworICBzdHJ1Y3QgZXZlbnRfZGVzYyBldjsKKyAgaW50IGksIGNoZWNrID0gMDsKKyAgY2hhciAqbXNnOworICAKKyAgLyogTk9URTogdGhlIG1lbW9yeSB1c2VkIHRvIHJldHVybiBtc2cgaXMgbGVha2VkOiB1c2UgbXNncyBpbiBldmVudHMgb25seQorICAgICB0byBkZXNjcmliZSBmYXRhbCBlcnJvcnMuICovCisgIAorICBpZiAocmVhZF9ldmVudChwaXBlLCAmZXYsICZtc2cpKQorICAgIHN3aXRjaCAoZXYuZXZlbnQpCisgICAgICB7CisgICAgICBjYXNlIEVWRU5UX1JFTE9BRDoKKyNpZmRlZiBIQVZFX0ROU1NFQworCWlmIChvcHRpb25fYm9vbChPUFRfRE5TU0VDX1ZBTElEKSAmJiBvcHRpb25fYm9vbChPUFRfRE5TU0VDX1RJTUUpKQorCSAgeworCSAgICBteV9zeXNsb2coTE9HX0lORk8sIF8oIm5vdyBjaGVja2luZyBETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMiKSk7CisJICAgIHJlc2V0X29wdGlvbl9ib29sKE9QVF9ETlNTRUNfVElNRSk7CisJICB9IAorI2VuZGlmCisJLyogZmFsbCB0aHJvdWdoICovCisJCisgICAgICBjYXNlIEVWRU5UX0lOSVQ6CisJY2xlYXJfY2FjaGVfYW5kX3JlbG9hZChub3cpOworCQorCWlmIChkYWVtb24tPnBvcnQgIT0gMCkKKwkgIHsKKwkgICAgaWYgKGRhZW1vbi0+cmVzb2x2X2ZpbGVzICYmIG9wdGlvbl9ib29sKE9QVF9OT19QT0xMKSkKKwkgICAgICB7CisJCXJlbG9hZF9zZXJ2ZXJzKGRhZW1vbi0+cmVzb2x2X2ZpbGVzLT5uYW1lKTsKKwkJY2hlY2sgPSAxOworCSAgICAgIH0KKworCSAgICBpZiAoZGFlbW9uLT5zZXJ2ZXJzX2ZpbGUpCisJICAgICAgeworCQlyZWFkX3NlcnZlcnNfZmlsZSgpOworCQljaGVjayA9IDE7CisJICAgICAgfQorCisJICAgIGlmIChjaGVjaykKKwkgICAgICBjaGVja19zZXJ2ZXJzKCk7CisJICB9CisKKyNpZmRlZiBIQVZFX0RIQ1AKKwlyZXJ1bl9zY3JpcHRzKCk7CisjZW5kaWYKKwlicmVhazsKKwkKKyAgICAgIGNhc2UgRVZFTlRfRFVNUDoKKwlpZiAoZGFlbW9uLT5wb3J0ICE9IDApCisJICBkdW1wX2NhY2hlKG5vdyk7CisJYnJlYWs7CisJCisgICAgICBjYXNlIEVWRU5UX0FMQVJNOgorI2lmZGVmIEhBVkVfREhDUAorCWlmIChkYWVtb24tPmRoY3AgfHwgZGFlbW9uLT5kb2luZ19kaGNwNikKKwkgIHsKKwkgICAgbGVhc2VfcHJ1bmUoTlVMTCwgbm93KTsKKwkgICAgbGVhc2VfdXBkYXRlX2ZpbGUobm93KTsKKwkgIH0KKyNpZmRlZiBIQVZFX0RIQ1A2CisJZWxzZSBpZiAoZGFlbW9uLT5kb2luZ19yYSkKKwkgIC8qIE5vdCBkb2luZyBESENQLCBzbyBubyBsZWFzZSBzeXN0ZW0sIG1hbmFnZSBhbGFybXMgZm9yIHJhIG9ubHkgKi8KKwkgICAgc2VuZF9hbGFybShwZXJpb2RpY19yYShub3cpLCBub3cpOworI2VuZGlmCisjZW5kaWYKKwlicmVhazsKKwkJCisgICAgICBjYXNlIEVWRU5UX0NISUxEOgorCS8qIFNlZSBTdGV2ZW5zIDUuMTAgKi8KKwl3aGlsZSAoKHAgPSB3YWl0cGlkKC0xLCBOVUxMLCBXTk9IQU5HKSkgIT0gMCkKKwkgIGlmIChwID09IC0xKQorCSAgICB7CisJICAgICAgaWYgKGVycm5vICE9IEVJTlRSKQorCQlicmVhazsKKwkgICAgfSAgICAgIAorCSAgZWxzZSAKKwkgICAgZm9yIChpID0gMCA7IGkgPCBNQVhfUFJPQ1M7IGkrKykKKwkgICAgICBpZiAoZGFlbW9uLT50Y3BfcGlkc1tpXSA9PSBwKQorCQlkYWVtb24tPnRjcF9waWRzW2ldID0gMDsKKwlicmVhazsKKwkKKyAgICAgIGNhc2UgRVZFTlRfS0lMTEVEOgorCW15X3N5c2xvZyhMT0dfV0FSTklORywgXygic2NyaXB0IHByb2Nlc3Mga2lsbGVkIGJ5IHNpZ25hbCAlZCIpLCBldi5kYXRhKTsKKwlicmVhazsKKworICAgICAgY2FzZSBFVkVOVF9FWElURUQ6CisJbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJzY3JpcHQgcHJvY2VzcyBleGl0ZWQgd2l0aCBzdGF0dXMgJWQiKSwgZXYuZGF0YSk7CisJYnJlYWs7CisKKyAgICAgIGNhc2UgRVZFTlRfRVhFQ19FUlI6CisJbXlfc3lzbG9nKExPR19FUlIsIF8oImZhaWxlZCB0byBleGVjdXRlICVzOiAlcyIpLCAKKwkJICBkYWVtb24tPmxlYXNlX2NoYW5nZV9jb21tYW5kLCBzdHJlcnJvcihldi5kYXRhKSk7CisJYnJlYWs7CisKKwkvKiBuZWNlc3NhcnkgZm9yIGZhdGFsIGVycm9ycyBpbiBoZWxwZXIgKi8KKyAgICAgIGNhc2UgRVZFTlRfVVNFUl9FUlI6CisgICAgICBjYXNlIEVWRU5UX0RJRToKKyAgICAgIGNhc2UgRVZFTlRfTFVBX0VSUjoKKwlmYXRhbF9ldmVudCgmZXYsIG1zZyk7CisJYnJlYWs7CisKKyAgICAgIGNhc2UgRVZFTlRfUkVPUEVOOgorCS8qIE5vdGU6IHRoaXMgbWF5IGxlYXZlIFRDUC1oYW5kbGluZyBwcm9jZXNzZXMgd2l0aCB0aGUgb2xkIGZpbGUgc3RpbGwgb3Blbi4KKwkgICBTaW5jZSBhbnkgc3VjaCBwcm9jZXNzIHdpbGwgZGllIGluIENISUxEX0xJRkVUSU1FIG9yIHByb2JhYmx5IG11Y2ggc29vbmVyLAorCSAgIHdlIGxlYXZlIHRoZW0gbG9nZ2luZyB0byB0aGUgb2xkIGZpbGUuICovCisJaWYgKGRhZW1vbi0+bG9nX2ZpbGUgIT0gTlVMTCkKKwkgIGxvZ19yZW9wZW4oZGFlbW9uLT5sb2dfZmlsZSk7CisJYnJlYWs7CisKKyAgICAgIGNhc2UgRVZFTlRfTkVXQUREUjoKKwluZXdhZGRyZXNzKG5vdyk7CisJYnJlYWs7CisKKyAgICAgIGNhc2UgRVZFTlRfTkVXUk9VVEU6CisJcmVzZW5kX3F1ZXJ5KCk7CisJLyogRm9yY2UgcmUtcmVhZGluZyByZXNvbHYgZmlsZSByaWdodCBub3csIGZvciBsdWNrLiAqLworCXBvbGxfcmVzb2x2KDAsIDEsIG5vdyk7CisJYnJlYWs7CisKKyAgICAgIGNhc2UgRVZFTlRfVEVSTToKKwkvKiBLbm9jayBhbGwgb3VyIGNoaWxkcmVuIG9uIHRoZSBoZWFkLiAqLworCWZvciAoaSA9IDA7IGkgPCBNQVhfUFJPQ1M7IGkrKykKKwkgIGlmIChkYWVtb24tPnRjcF9waWRzW2ldICE9IDApCisJICAgIGtpbGwoZGFlbW9uLT50Y3BfcGlkc1tpXSwgU0lHQUxSTSk7CisJCisjaWYgZGVmaW5lZChIQVZFX1NDUklQVCkKKwkvKiBoYW5kbGUgcGVuZGluZyBsZWFzZSB0cmFuc2l0aW9ucyAqLworCWlmIChkYWVtb24tPmhlbHBlcmZkICE9IC0xKQorCSAgeworCSAgICAvKiBibG9jayBpbiB3cml0ZXMgdW50aWwgYWxsIGRvbmUgKi8KKwkgICAgaWYgKChpID0gZmNudGwoZGFlbW9uLT5oZWxwZXJmZCwgRl9HRVRGTCkpICE9IC0xKQorCSAgICAgIGZjbnRsKGRhZW1vbi0+aGVscGVyZmQsIEZfU0VURkwsIGkgJiB+T19OT05CTE9DSyk7IAorCSAgICBkbyB7CisJICAgICAgaGVscGVyX3dyaXRlKCk7CisJICAgIH0gd2hpbGUgKCFoZWxwZXJfYnVmX2VtcHR5KCkgfHwgZG9fc2NyaXB0X3J1bihub3cpKTsKKwkgICAgY2xvc2UoZGFlbW9uLT5oZWxwZXJmZCk7CisJICB9CisjZW5kaWYKKwkKKwlpZiAoZGFlbW9uLT5sZWFzZV9zdHJlYW0pCisJICBmY2xvc2UoZGFlbW9uLT5sZWFzZV9zdHJlYW0pOworCisJaWYgKGRhZW1vbi0+cnVuZmlsZSkKKwkgIHVubGluayhkYWVtb24tPnJ1bmZpbGUpOworCQorCW15X3N5c2xvZyhMT0dfSU5GTywgXygiZXhpdGluZyBvbiByZWNlaXB0IG9mIFNJR1RFUk0iKSk7CisJZmx1c2hfbG9nKCk7CisJZXhpdChFQ19HT09EKTsKKyAgICAgIH0KK30KKworc3RhdGljIHZvaWQgcG9sbF9yZXNvbHYoaW50IGZvcmNlLCBpbnQgZG9fcmVsb2FkLCB0aW1lX3Qgbm93KQoreworICBzdHJ1Y3QgcmVzb2x2YyAqcmVzLCAqbGF0ZXN0OworICBzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworICB0aW1lX3QgbGFzdF9jaGFuZ2UgPSAwOworICAvKiBUaGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBwb3NzaWJsZSBmaWxlLiAKKyAgICAgR28gdGhyb3VnaCBhbmQgZmluZCB0aGUgb25lIHdoaWNoIGNoYW5nZWQgX2xhc3RfLgorICAgICBXYXJuIG9mIGFueSB3aGljaCBjYW4ndCBiZSByZWFkLiAqLworCisgIGlmIChkYWVtb24tPnBvcnQgPT0gMCB8fCBvcHRpb25fYm9vbChPUFRfTk9fUE9MTCkpCisgICAgcmV0dXJuOworICAKKyAgZm9yIChsYXRlc3QgPSBOVUxMLCByZXMgPSBkYWVtb24tPnJlc29sdl9maWxlczsgcmVzOyByZXMgPSByZXMtPm5leHQpCisgICAgaWYgKHN0YXQocmVzLT5uYW1lLCAmc3RhdGJ1ZikgPT0gLTEpCisgICAgICB7CisJaWYgKGZvcmNlKQorCSAgeworCSAgICByZXMtPm10aW1lID0gMDsgCisJICAgIGNvbnRpbnVlOworCSAgfQorCisJaWYgKCFyZXMtPmxvZ2dlZCkKKwkgIG15X3N5c2xvZyhMT0dfV0FSTklORywgXygiZmFpbGVkIHRvIGFjY2VzcyAlczogJXMiKSwgcmVzLT5uYW1lLCBzdHJlcnJvcihlcnJubykpOworCXJlcy0+bG9nZ2VkID0gMTsKKwkKKwlpZiAocmVzLT5tdGltZSAhPSAwKQorCSAgeyAKKwkgICAgLyogZXhpc3RpbmcgZmlsZSBldmFwb3JhdGVkLCBmb3JjZSBzZWxlY3Rpb24gb2YgdGhlIGxhdGVzdAorCSAgICAgICBmaWxlIGV2ZW4gaWYgaXRzIG10aW1lIGhhc24ndCBjaGFuZ2VkIHNpbmNlIHdlIGxhc3QgbG9va2VkICovCisJICAgIHBvbGxfcmVzb2x2KDEsIGRvX3JlbG9hZCwgbm93KTsKKwkgICAgcmV0dXJuOworCSAgfQorICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKwlyZXMtPmxvZ2dlZCA9IDA7CisJaWYgKGZvcmNlIHx8IChzdGF0YnVmLnN0X210aW1lICE9IHJlcy0+bXRpbWUpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHJlcy0+bXRpbWUgPSBzdGF0YnVmLnN0X210aW1lOworCSAgICBpZiAoZGlmZnRpbWUoc3RhdGJ1Zi5zdF9tdGltZSwgbGFzdF9jaGFuZ2UpID4gMC4wKQorCSAgICAgIHsKKwkJbGFzdF9jaGFuZ2UgPSBzdGF0YnVmLnN0X210aW1lOworCQlsYXRlc3QgPSByZXM7CisJICAgICAgfQorCSAgfQorICAgICAgfQorICAKKyAgaWYgKGxhdGVzdCkKKyAgICB7CisgICAgICBzdGF0aWMgaW50IHdhcm5lZCA9IDA7CisgICAgICBpZiAocmVsb2FkX3NlcnZlcnMobGF0ZXN0LT5uYW1lKSkKKwl7CisJICBteV9zeXNsb2coTE9HX0lORk8sIF8oInJlYWRpbmcgJXMiKSwgbGF0ZXN0LT5uYW1lKTsKKwkgIHdhcm5lZCA9IDA7CisJICBjaGVja19zZXJ2ZXJzKCk7CisJICBpZiAob3B0aW9uX2Jvb2woT1BUX1JFTE9BRCkgJiYgZG9fcmVsb2FkKQorCSAgICBjbGVhcl9jYWNoZV9hbmRfcmVsb2FkKG5vdyk7CisJfQorICAgICAgZWxzZSAKKwl7CisJICBsYXRlc3QtPm10aW1lID0gMDsKKwkgIGlmICghd2FybmVkKQorCSAgICB7CisJICAgICAgbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJubyBzZXJ2ZXJzIGZvdW5kIGluICVzLCB3aWxsIHJldHJ5IiksIGxhdGVzdC0+bmFtZSk7CisJICAgICAgd2FybmVkID0gMTsKKwkgICAgfQorCX0KKyAgICB9Cit9ICAgICAgIAorCit2b2lkIGNsZWFyX2NhY2hlX2FuZF9yZWxvYWQodGltZV90IG5vdykKK3sKKyAgKHZvaWQpbm93OworCisgIGlmIChkYWVtb24tPnBvcnQgIT0gMCkKKyAgICBjYWNoZV9yZWxvYWQoKTsKKyAgCisjaWZkZWYgSEFWRV9ESENQCisgIGlmIChkYWVtb24tPmRoY3AgfHwgZGFlbW9uLT5kb2luZ19kaGNwNikKKyAgICB7CisgICAgICBpZiAob3B0aW9uX2Jvb2woT1BUX0VUSEVSUykpCisJZGhjcF9yZWFkX2V0aGVycygpOworICAgICAgcmVyZWFkX2RoY3AoKTsKKyAgICAgIGRoY3BfdXBkYXRlX2NvbmZpZ3MoZGFlbW9uLT5kaGNwX2NvbmYpOworICAgICAgbGVhc2VfdXBkYXRlX2Zyb21fY29uZmlncygpOyAKKyAgICAgIGxlYXNlX3VwZGF0ZV9maWxlKG5vdyk7IAorICAgICAgbGVhc2VfdXBkYXRlX2RucygxKTsKKyAgICB9CisjaWZkZWYgSEFWRV9ESENQNgorICBlbHNlIGlmIChkYWVtb24tPmRvaW5nX3JhKQorICAgIC8qIE5vdCBkb2luZyBESENQLCBzbyBubyBsZWFzZSBzeXN0ZW0sIG1hbmFnZSAKKyAgICAgICBhbGFybXMgZm9yIHJhIG9ubHkgKi8KKyAgICBzZW5kX2FsYXJtKHBlcmlvZGljX3JhKG5vdyksIG5vdyk7CisjZW5kaWYKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IHNldF9kbnNfbGlzdGVuZXJzKHRpbWVfdCBub3csIGZkX3NldCAqc2V0LCBpbnQgKm1heGZkcCkKK3sKKyAgc3RydWN0IHNlcnZlcmZkICpzZXJ2ZXJmZHA7CisgIHN0cnVjdCBsaXN0ZW5lciAqbGlzdGVuZXI7CisgIGludCB3YWl0ID0gMCwgaTsKKyAgCisjaWZkZWYgSEFWRV9URlRQCisgIGludCAgdGZ0cCA9IDA7CisgIHN0cnVjdCB0ZnRwX3RyYW5zZmVyICp0cmFuc2ZlcjsKKyAgZm9yICh0cmFuc2ZlciA9IGRhZW1vbi0+dGZ0cF90cmFuczsgdHJhbnNmZXI7IHRyYW5zZmVyID0gdHJhbnNmZXItPm5leHQpCisgICAgeworICAgICAgdGZ0cCsrOworICAgICAgRkRfU0VUKHRyYW5zZmVyLT5zb2NrZmQsIHNldCk7CisgICAgICBidW1wX21heGZkKHRyYW5zZmVyLT5zb2NrZmQsIG1heGZkcCk7CisgICAgfQorI2VuZGlmCisgIAorICAvKiB3aWxsIHdlIGJlIGFibGUgdG8gZ2V0IG1lbW9yeT8gKi8KKyAgaWYgKGRhZW1vbi0+cG9ydCAhPSAwKQorICAgIGdldF9uZXdfZnJlYyhub3csICZ3YWl0LCAwKTsKKyAgCisgIGZvciAoc2VydmVyZmRwID0gZGFlbW9uLT5zZmRzOyBzZXJ2ZXJmZHA7IHNlcnZlcmZkcCA9IHNlcnZlcmZkcC0+bmV4dCkKKyAgICB7CisgICAgICBGRF9TRVQoc2VydmVyZmRwLT5mZCwgc2V0KTsKKyAgICAgIGJ1bXBfbWF4ZmQoc2VydmVyZmRwLT5mZCwgbWF4ZmRwKTsKKyAgICB9CisKKyAgaWYgKGRhZW1vbi0+cG9ydCAhPSAwICYmICFkYWVtb24tPm9zcG9ydCkKKyAgICBmb3IgKGkgPSAwOyBpIDwgUkFORE9NX1NPQ0tTOyBpKyspCisgICAgICBpZiAoZGFlbW9uLT5yYW5kb21zb2Nrc1tpXS5yZWZjb3VudCAhPSAwKQorCXsKKwkgIEZEX1NFVChkYWVtb24tPnJhbmRvbXNvY2tzW2ldLmZkLCBzZXQpOworCSAgYnVtcF9tYXhmZChkYWVtb24tPnJhbmRvbXNvY2tzW2ldLmZkLCBtYXhmZHApOworCX0KKyAgCisgIGZvciAobGlzdGVuZXIgPSBkYWVtb24tPmxpc3RlbmVyczsgbGlzdGVuZXI7IGxpc3RlbmVyID0gbGlzdGVuZXItPm5leHQpCisgICAgeworICAgICAgLyogb25seSBsaXN0ZW4gZm9yIHF1ZXJpZXMgaWYgd2UgaGF2ZSByZXNvdXJjZXMgKi8KKyAgICAgIGlmIChsaXN0ZW5lci0+ZmQgIT0gLTEgJiYgd2FpdCA9PSAwKQorCXsKKwkgIEZEX1NFVChsaXN0ZW5lci0+ZmQsIHNldCk7CisJICBidW1wX21heGZkKGxpc3RlbmVyLT5mZCwgbWF4ZmRwKTsKKwl9CisKKyAgICAgIC8qIGRlYXRoIG9mIGEgY2hpbGQgZ29lcyB0aHJvdWdoIHRoZSBzZWxlY3QgbG9vcCwgc28KKwkgd2UgZG9uJ3QgbmVlZCB0byBleHBsaWNpdGx5IGFycmFuZ2UgdG8gd2FrZSB1cCBoZXJlICovCisgICAgICBpZiAgKGxpc3RlbmVyLT50Y3BmZCAhPSAtMSkKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1BST0NTOyBpKyspCisJICBpZiAoZGFlbW9uLT50Y3BfcGlkc1tpXSA9PSAwKQorCSAgICB7CisJICAgICAgRkRfU0VUKGxpc3RlbmVyLT50Y3BmZCwgc2V0KTsKKwkgICAgICBidW1wX21heGZkKGxpc3RlbmVyLT50Y3BmZCwgbWF4ZmRwKTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCisjaWZkZWYgSEFWRV9URlRQCisgICAgICBpZiAodGZ0cCA8PSBkYWVtb24tPnRmdHBfbWF4ICYmIGxpc3RlbmVyLT50ZnRwZmQgIT0gLTEpCisJeworCSAgRkRfU0VUKGxpc3RlbmVyLT50ZnRwZmQsIHNldCk7CisJICBidW1wX21heGZkKGxpc3RlbmVyLT50ZnRwZmQsIG1heGZkcCk7CisJfQorI2VuZGlmCisKKyAgICB9CisgIAorICByZXR1cm4gd2FpdDsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfZG5zX2xpc3RlbmVycyhmZF9zZXQgKnNldCwgdGltZV90IG5vdykKK3sKKyAgc3RydWN0IHNlcnZlcmZkICpzZXJ2ZXJmZHA7CisgIHN0cnVjdCBsaXN0ZW5lciAqbGlzdGVuZXI7CisgIGludCBpOworCisgIGZvciAoc2VydmVyZmRwID0gZGFlbW9uLT5zZmRzOyBzZXJ2ZXJmZHA7IHNlcnZlcmZkcCA9IHNlcnZlcmZkcC0+bmV4dCkKKyAgICBpZiAoRkRfSVNTRVQoc2VydmVyZmRwLT5mZCwgc2V0KSkKKyAgICAgIHJlcGx5X3F1ZXJ5KHNlcnZlcmZkcC0+ZmQsIHNlcnZlcmZkcC0+c291cmNlX2FkZHIuc2Euc2FfZmFtaWx5LCBub3cpOworICAKKyAgaWYgKGRhZW1vbi0+cG9ydCAhPSAwICYmICFkYWVtb24tPm9zcG9ydCkKKyAgICBmb3IgKGkgPSAwOyBpIDwgUkFORE9NX1NPQ0tTOyBpKyspCisgICAgICBpZiAoZGFlbW9uLT5yYW5kb21zb2Nrc1tpXS5yZWZjb3VudCAhPSAwICYmIAorCSAgRkRfSVNTRVQoZGFlbW9uLT5yYW5kb21zb2Nrc1tpXS5mZCwgc2V0KSkKKwlyZXBseV9xdWVyeShkYWVtb24tPnJhbmRvbXNvY2tzW2ldLmZkLCBkYWVtb24tPnJhbmRvbXNvY2tzW2ldLmZhbWlseSwgbm93KTsKKyAgCisgIGZvciAobGlzdGVuZXIgPSBkYWVtb24tPmxpc3RlbmVyczsgbGlzdGVuZXI7IGxpc3RlbmVyID0gbGlzdGVuZXItPm5leHQpCisgICAgeworICAgICAgaWYgKGxpc3RlbmVyLT5mZCAhPSAtMSAmJiBGRF9JU1NFVChsaXN0ZW5lci0+ZmQsIHNldCkpCisJcmVjZWl2ZV9xdWVyeShsaXN0ZW5lciwgbm93KTsgCisgICAgICAKKyNpZmRlZiBIQVZFX1RGVFAgICAgIAorICAgICAgaWYgKGxpc3RlbmVyLT50ZnRwZmQgIT0gLTEgJiYgRkRfSVNTRVQobGlzdGVuZXItPnRmdHBmZCwgc2V0KSkKKwl0ZnRwX3JlcXVlc3QobGlzdGVuZXIsIG5vdyk7CisjZW5kaWYKKworICAgICAgaWYgKGxpc3RlbmVyLT50Y3BmZCAhPSAtMSAmJiBGRF9JU1NFVChsaXN0ZW5lci0+dGNwZmQsIHNldCkpCisJeworCSAgaW50IGNvbmZkLCBjbGllbnRfb2sgPSAxOworCSAgc3RydWN0IGlyZWMgKmlmYWNlID0gTlVMTDsKKwkgIHBpZF90IHA7CisJICB1bmlvbiBteXNvY2thZGRyIHRjcF9hZGRyOworCSAgc29ja2xlbl90IHRjcF9sZW4gPSBzaXplb2YodW5pb24gbXlzb2NrYWRkcik7CisKKwkgIHdoaWxlICgoY29uZmQgPSBhY2NlcHQobGlzdGVuZXItPnRjcGZkLCBOVUxMLCBOVUxMKSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworCSAgCisJICBpZiAoY29uZmQgPT0gLTEpCisJICAgIGNvbnRpbnVlOworCSAgCisJICBpZiAoZ2V0c29ja25hbWUoY29uZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmdGNwX2FkZHIsICZ0Y3BfbGVuKSA9PSAtMSkKKwkgICAgeworCSAgICAgIGNsb3NlKGNvbmZkKTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCSAgCisJICAvKiBNYWtlIHN1cmUgdGhhdCB0aGUgaW50ZXJmYWNlIGxpc3QgaXMgdXAtdG8tZGF0ZS4KKwkgICAgIAorCSAgICAgV2UgZG8gdGhpcyBoZXJlIGFzIHdlIG1heSBuZWVkIHRoZSByZXN1bHRzIGJlbG93LCBhbmQKKwkgICAgIHRoZSBETlMgY29kZSBuZWVkcyB0aGVtIGZvciAtLWludGVyZmFjZS1uYW1lIHN0dWZmLgorCisJICAgICBNdWx0aXBsZSBjYWxscyB0byBlbnVtZXJhdGVfaW50ZXJmYWNlcygpIHBlciBzZWxlY3QgbG9vcCBhcmUKKwkgICAgIGluaGliaXRlZCwgc28gY2FsbHMgdG8gaXQgaW4gdGhlIGNoaWxkIHByb2Nlc3MgKHdoaWNoIGRvZXNuJ3Qgc2VsZWN0KCkpCisJICAgICBoYXZlIG5vIGVmZmVjdC4gVGhpcyBhdm9pZHMgdHdvIHByb2Nlc3NlcyByZWFkaW5nIGZyb20gdGhlIHNhbWUKKwkgICAgIG5ldGxpbmsgZmQgYW5kIHNjcmV3aW5nIHRoZSBwb29jaCBlbnRpcmVseS4KKwkgICovCisgCisJICBlbnVtZXJhdGVfaW50ZXJmYWNlcygwKTsKKwkgIAorCSAgaWYgKG9wdGlvbl9ib29sKE9QVF9OT1dJTEQpKQorCSAgICBpZmFjZSA9IGxpc3RlbmVyLT5pZmFjZTsgLyogTWF5IGJlIE5VTEwgKi8KKwkgIGVsc2UgCisJICAgIHsKKwkgICAgICBpbnQgaWZfaW5kZXg7CisJICAgICAgY2hhciBpbnRyX25hbWVbSUZfTkFNRVNJWkVdOworCSAgICAgIAorCSAgICAgIC8qIGlmIHdlIGNhbiBmaW5kIHRoZSBhcnJpdmFsIGludGVyZmFjZSwgY2hlY2sgaXQncyBvbmUgdGhhdCdzIGFsbG93ZWQgKi8KKwkgICAgICBpZiAoKGlmX2luZGV4ID0gdGNwX2ludGVyZmFjZShjb25mZCwgdGNwX2FkZHIuc2Euc2FfZmFtaWx5KSkgIT0gMCAmJgorCQkgIGluZGV4dG9uYW1lKGxpc3RlbmVyLT50Y3BmZCwgaWZfaW5kZXgsIGludHJfbmFtZSkpCisJCXsKKwkJICBzdHJ1Y3QgYWxsX2FkZHIgYWRkcjsKKwkJICBhZGRyLmFkZHIuYWRkcjQgPSB0Y3BfYWRkci5pbi5zaW5fYWRkcjsKKyNpZmRlZiBIQVZFX0lQVjYKKwkJICBpZiAodGNwX2FkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KQorCQkgICAgYWRkci5hZGRyLmFkZHI2ID0gdGNwX2FkZHIuaW42LnNpbjZfYWRkcjsKKyNlbmRpZgorCQkgIAorCQkgIGZvciAoaWZhY2UgPSBkYWVtb24tPmludGVyZmFjZXM7IGlmYWNlOyBpZmFjZSA9IGlmYWNlLT5uZXh0KQorCQkgICAgaWYgKGlmYWNlLT5pbmRleCA9PSBpZl9pbmRleCkKKwkJICAgICAgYnJlYWs7CisJCSAgCisJCSAgaWYgKCFpZmFjZSAmJiAhbG9vcGJhY2tfZXhjZXB0aW9uKGxpc3RlbmVyLT50Y3BmZCwgdGNwX2FkZHIuc2Euc2FfZmFtaWx5LCAmYWRkciwgaW50cl9uYW1lKSkKKwkJICAgIGNsaWVudF9vayA9IDA7CisJCX0KKwkgICAgICAKKwkgICAgICBpZiAob3B0aW9uX2Jvb2woT1BUX0NMRVZFUkJJTkQpKQorCQlpZmFjZSA9IGxpc3RlbmVyLT5pZmFjZTsgLyogTWF5IGJlIE5VTEwgKi8KKwkgICAgICBlbHNlCisJCXsKKwkJICAvKiBDaGVjayBmb3IgYWxsb3dlZCBpbnRlcmZhY2VzIHdoZW4gYmluZGluZyB0aGUgd2lsZGNhcmQgYWRkcmVzczoKKwkJICAgICB3ZSBkbyB0aGlzIGJ5IGxvb2tpbmcgZm9yIGFuIGludGVyZmFjZSB3aXRoIHRoZSBzYW1lIGFkZHJlc3MgYXMgCisJCSAgICAgdGhlIGxvY2FsIGFkZHJlc3Mgb2YgdGhlIFRDUCBjb25uZWN0aW9uLCB0aGVuIGxvb2tpbmcgdG8gc2VlIGlmIHRoYXQncworCQkgICAgIGFuIGFsbG93ZWQgaW50ZXJmYWNlLiBBcyBhIHNpZGUgZWZmZWN0LCB3ZSBnZXQgdGhlIG5ldG1hc2sgb2YgdGhlCisJCSAgICAgaW50ZXJmYWNlIHRvbywgZm9yIGxvY2FsaXNhdGlvbi4gKi8KKwkJICAKKwkJICBmb3IgKGlmYWNlID0gZGFlbW9uLT5pbnRlcmZhY2VzOyBpZmFjZTsgaWZhY2UgPSBpZmFjZS0+bmV4dCkKKwkJICAgIGlmIChzb2NrYWRkcl9pc2VxdWFsKCZpZmFjZS0+YWRkciwgJnRjcF9hZGRyKSkKKwkJICAgICAgYnJlYWs7CisJCSAgCisJCSAgaWYgKCFpZmFjZSkKKwkJICAgIGNsaWVudF9vayA9IDA7CisJCX0KKwkgICAgfQorCSAgCisJICBpZiAoIWNsaWVudF9vaykKKwkgICAgeworCSAgICAgIHNodXRkb3duKGNvbmZkLCBTSFVUX1JEV1IpOworCSAgICAgIGNsb3NlKGNvbmZkKTsKKwkgICAgfQorI2lmbmRlZiBOT19GT1JLCisJICBlbHNlIGlmICghb3B0aW9uX2Jvb2woT1BUX0RFQlVHKSAmJiAocCA9IGZvcmsoKSkgIT0gMCkKKwkgICAgeworCSAgICAgIGlmIChwICE9IC0xKQorCQl7CisJCSAgaW50IGk7CisJCSAgZm9yIChpID0gMDsgaSA8IE1BWF9QUk9DUzsgaSsrKQorCQkgICAgaWYgKGRhZW1vbi0+dGNwX3BpZHNbaV0gPT0gMCkKKwkJICAgICAgeworCQkJZGFlbW9uLT50Y3BfcGlkc1tpXSA9IHA7CisJCQlicmVhazsKKwkJICAgICAgfQorCQl9CisJICAgICAgY2xvc2UoY29uZmQpOworCisJICAgICAgLyogVGhlIGNoaWxkIGNhbiB1c2UgdXAgdG8gVENQX01BWF9RVUVSSUVTIGlkcywgc28gc2tpcCB0aGF0IG1hbnkuICovCisJICAgICAgZGFlbW9uLT5sb2dfaWQgKz0gVENQX01BWF9RVUVSSUVTOworCSAgICB9CisjZW5kaWYKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmY7CisJICAgICAgc3RydWN0IHNlcnZlciAqczsgCisJICAgICAgaW50IGZsYWdzOworCSAgICAgIHN0cnVjdCBpbl9hZGRyIG5ldG1hc2s7CisJICAgICAgaW50IGF1dGhfZG5zOworCisJICAgICAgaWYgKGlmYWNlKQorCQl7CisJCSAgbmV0bWFzayA9IGlmYWNlLT5uZXRtYXNrOworCQkgIGF1dGhfZG5zID0gaWZhY2UtPmRuc19hdXRoOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgbmV0bWFzay5zX2FkZHIgPSAwOworCQkgIGF1dGhfZG5zID0gMDsKKwkJfQorCisjaWZuZGVmIE5PX0ZPUksKKwkgICAgICAvKiBBcnJhbmdlIGZvciBTSUdBTEFSTSBhZnRlciBDSElMRF9MSUZFVElNRSBzZWNvbmRzIHRvCisJCSB0ZXJtaW5hdGUgdGhlIHByb2Nlc3MuICovCisJICAgICAgaWYgKCFvcHRpb25fYm9vbChPUFRfREVCVUcpKQorCQlhbGFybShDSElMRF9MSUZFVElNRSk7CisjZW5kaWYKKworCSAgICAgIC8qIHN0YXJ0IHdpdGggbm8gdXBzdHJlYW0gY29ubmVjdGlvbnMuICovCisJICAgICAgZm9yIChzID0gZGFlbW9uLT5zZXJ2ZXJzOyBzOyBzID0gcy0+bmV4dCkKKwkJIHMtPnRjcGZkID0gLTE7IAorCSAgICAgIAorCSAgICAgIC8qIFRoZSBjb25uZWN0ZWQgc29ja2V0IGluaGVyaXRzIG5vbi1ibG9ja2luZworCQkgYXR0cmlidXRlIGZyb20gdGhlIGxpc3RlbmluZyBzb2NrZXQuIAorCQkgUmVzZXQgdGhhdCBoZXJlLiAqLworCSAgICAgIGlmICgoZmxhZ3MgPSBmY250bChjb25mZCwgRl9HRVRGTCwgMCkpICE9IC0xKQorCQlmY250bChjb25mZCwgRl9TRVRGTCwgZmxhZ3MgJiB+T19OT05CTE9DSyk7CisJICAgICAgCisJICAgICAgYnVmZiA9IHRjcF9yZXF1ZXN0KGNvbmZkLCBub3csICZ0Y3BfYWRkciwgbmV0bWFzaywgYXV0aF9kbnMpOworCSAgICAgICAKKwkgICAgICBzaHV0ZG93bihjb25mZCwgU0hVVF9SRFdSKTsKKwkgICAgICBjbG9zZShjb25mZCk7CisJICAgICAgCisJICAgICAgaWYgKGJ1ZmYpCisJCWZyZWUoYnVmZik7CisJICAgICAgCisJICAgICAgZm9yIChzID0gZGFlbW9uLT5zZXJ2ZXJzOyBzOyBzID0gcy0+bmV4dCkKKwkJaWYgKHMtPnRjcGZkICE9IC0xKQorCQkgIHsKKwkJICAgIHNodXRkb3duKHMtPnRjcGZkLCBTSFVUX1JEV1IpOworCQkgICAgY2xvc2Uocy0+dGNwZmQpOworCQkgIH0KKyNpZm5kZWYgTk9fRk9SSwkJICAgCisJICAgICAgaWYgKCFvcHRpb25fYm9vbChPUFRfREVCVUcpKQorCQl7CisJCSAgZmx1c2hfbG9nKCk7CisJCSAgX2V4aXQoMCk7CisJCX0KKyNlbmRpZgorCSAgICB9CisJfQorICAgIH0KK30KKworI2lmZGVmIEhBVkVfREhDUAoraW50IG1ha2VfaWNtcF9zb2NrKHZvaWQpCit7CisgIGludCBmZDsKKyAgaW50IHplcm9vcHQgPSAwOworCisgIGlmICgoZmQgPSBzb2NrZXQgKEFGX0lORVQsIFNPQ0tfUkFXLCBJUFBST1RPX0lDTVApKSAhPSAtMSkKKyAgICB7CisgICAgICBpZiAoIWZpeF9mZChmZCkgfHwKKwkgIHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX0RPTlRST1VURSwgJnplcm9vcHQsIHNpemVvZih6ZXJvb3B0KSkgPT0gLTEpCisJeworCSAgY2xvc2UoZmQpOworCSAgZmQgPSAtMTsKKwl9CisgICAgfQorCisgIHJldHVybiBmZDsKK30KKworaW50IGljbXBfcGluZyhzdHJ1Y3QgaW5fYWRkciBhZGRyKQoreworICAvKiBUcnkgYW5kIGdldCBhbiBJQ01QIGVjaG8gZnJvbSBhIG1hY2hpbmUuICovCisKKyAgLyogTm90ZSB0aGF0IHdoaWxzdCBpbiB0aGUgdGhyZWUgc2Vjb25kIHdhaXQsIHdlIGNoZWNrIGZvciAKKyAgICAgKGFuZCBzZXJ2aWNlKSBldmVudHMgb24gdGhlIEROUyBhbmQgVEZUUCAgc29ja2V0cywgKHNvIGRvaW5nIHRoYXQKKyAgICAgYmV0dGVyIG5vdCB1c2UgYW55IHJlc291cmNlcyBvdXIgY2FsbGVyIGhhcyBpbiB1c2UuLi4pCisgICAgIGJ1dCB3ZSByZW1haW4gZGVhZiB0byBzaWduYWxzIG9yIGZ1cnRoZXIgREhDUCBwYWNrZXRzLiAqLworCisgIGludCBmZDsKKyAgc3RydWN0IHNvY2thZGRyX2luIHNhZGRyOworICBzdHJ1Y3QgeyAKKyAgICBzdHJ1Y3QgaXAgaXA7CisgICAgc3RydWN0IGljbXAgaWNtcDsKKyAgfSBwYWNrZXQ7CisgIHVuc2lnbmVkIHNob3J0IGlkID0gcmFuZDE2KCk7CisgIHVuc2lnbmVkIGludCBpLCBqOworICBpbnQgZ290cmVwbHkgPSAwOworICB0aW1lX3Qgc3RhcnQsIG5vdzsKKworI2lmIGRlZmluZWQoSEFWRV9MSU5VWF9ORVRXT1JLKSB8fCBkZWZpbmVkIChIQVZFX1NPTEFSSVNfTkVUV09SSykKKyAgaWYgKChmZCA9IG1ha2VfaWNtcF9zb2NrKCkpID09IC0xKQorICAgIHJldHVybiAwOworI2Vsc2UKKyAgaW50IG9wdCA9IDIwMDA7CisgIGZkID0gZGFlbW9uLT5kaGNwX2ljbXBfZmQ7CisgIHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgJm9wdCwgc2l6ZW9mKG9wdCkpOworI2VuZGlmCisKKyAgc2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgIHNhZGRyLnNpbl9wb3J0ID0gMDsKKyAgc2FkZHIuc2luX2FkZHIgPSBhZGRyOworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgIHNhZGRyLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorICAKKyAgbWVtc2V0KCZwYWNrZXQuaWNtcCwgMCwgc2l6ZW9mKHBhY2tldC5pY21wKSk7CisgIHBhY2tldC5pY21wLmljbXBfdHlwZSA9IElDTVBfRUNITzsKKyAgcGFja2V0LmljbXAuaWNtcF9pZCA9IGlkOworICBmb3IgKGogPSAwLCBpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgaWNtcCkgLyAyOyBpKyspCisgICAgaiArPSAoKHUxNiAqKSZwYWNrZXQuaWNtcClbaV07CisgIHdoaWxlIChqPj4xNikKKyAgICBqID0gKGogJiAweGZmZmYpICsgKGogPj4gMTYpOyAgCisgIHBhY2tldC5pY21wLmljbXBfY2tzdW0gPSAoaiA9PSAweGZmZmYpID8gaiA6IH5qOworICAKKyAgd2hpbGUgKHNlbmR0byhmZCwgKGNoYXIgKikmcGFja2V0LmljbXAsIHNpemVvZihzdHJ1Y3QgaWNtcCksIDAsIAorCQkoc3RydWN0IHNvY2thZGRyICopJnNhZGRyLCBzaXplb2Yoc2FkZHIpKSA9PSAtMSAmJgorCSByZXRyeV9zZW5kKCkpOworICAKKyAgZm9yIChub3cgPSBzdGFydCA9IGRuc21hc3FfdGltZSgpOyAKKyAgICAgICBkaWZmdGltZShub3csIHN0YXJ0KSA8IChmbG9hdClQSU5HX1dBSVQ7KQorICAgIHsKKyAgICAgIHN0cnVjdCB0aW1ldmFsIHR2OworICAgICAgZmRfc2V0IHJzZXQsIHdzZXQ7CisgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gZmFkZHI7CisgICAgICBpbnQgbWF4ZmQgPSBmZDsgCisgICAgICBzb2NrbGVuX3QgbGVuID0gc2l6ZW9mKGZhZGRyKTsKKyAgICAgIAorICAgICAgdHYudHZfdXNlYyA9IDI1MDAwMDsKKyAgICAgIHR2LnR2X3NlYyA9IDA7IAorICAgICAgCisgICAgICBGRF9aRVJPKCZyc2V0KTsKKyAgICAgIEZEX1pFUk8oJndzZXQpOworICAgICAgRkRfU0VUKGZkLCAmcnNldCk7CisgICAgICBzZXRfZG5zX2xpc3RlbmVycyhub3csICZyc2V0LCAmbWF4ZmQpOworICAgICAgc2V0X2xvZ193cml0ZXIoJndzZXQsICZtYXhmZCk7CisgICAgICAKKyNpZmRlZiBIQVZFX0RIQ1A2CisgICAgICBpZiAoZGFlbW9uLT5kb2luZ19yYSkKKwl7CisJICBGRF9TRVQoZGFlbW9uLT5pY21wNmZkLCAmcnNldCk7CisJICBidW1wX21heGZkKGRhZW1vbi0+aWNtcDZmZCwgJm1heGZkKTsgCisJfQorI2VuZGlmCisgICAgICAKKyAgICAgIGlmIChzZWxlY3QobWF4ZmQrMSwgJnJzZXQsICZ3c2V0LCBOVUxMLCAmdHYpIDwgMCkKKwl7CisJICBGRF9aRVJPKCZyc2V0KTsKKwkgIEZEX1pFUk8oJndzZXQpOworCX0KKworICAgICAgbm93ID0gZG5zbWFzcV90aW1lKCk7CisKKyAgICAgIGNoZWNrX2xvZ193cml0ZXIoJndzZXQpOworICAgICAgY2hlY2tfZG5zX2xpc3RlbmVycygmcnNldCwgbm93KTsKKworI2lmZGVmIEhBVkVfREhDUDYKKyAgICAgIGlmIChkYWVtb24tPmRvaW5nX3JhICYmIEZEX0lTU0VUKGRhZW1vbi0+aWNtcDZmZCwgJnJzZXQpKQorCWljbXA2X3BhY2tldChub3cpOworI2VuZGlmCisgICAgICAKKyNpZmRlZiBIQVZFX1RGVFAKKyAgICAgIGNoZWNrX3RmdHBfbGlzdGVuZXJzKCZyc2V0LCBub3cpOworI2VuZGlmCisKKyAgICAgIGlmIChGRF9JU1NFVChmZCwgJnJzZXQpICYmCisJICByZWN2ZnJvbShmZCwgJnBhY2tldCwgc2l6ZW9mKHBhY2tldCksIDAsCisJCSAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmZmFkZHIsICZsZW4pID09IHNpemVvZihwYWNrZXQpICYmCisJICBzYWRkci5zaW5fYWRkci5zX2FkZHIgPT0gZmFkZHIuc2luX2FkZHIuc19hZGRyICYmCisJICBwYWNrZXQuaWNtcC5pY21wX3R5cGUgPT0gSUNNUF9FQ0hPUkVQTFkgJiYKKwkgIHBhY2tldC5pY21wLmljbXBfc2VxID09IDAgJiYKKwkgIHBhY2tldC5pY21wLmljbXBfaWQgPT0gaWQpCisJeworCSAgZ290cmVwbHkgPSAxOworCSAgYnJlYWs7CisJfQorICAgIH0KKyAgCisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX05FVFdPUkspIHx8IGRlZmluZWQoSEFWRV9TT0xBUklTX05FVFdPUkspCisgIGNsb3NlKGZkKTsKKyNlbHNlCisgIG9wdCA9IDE7CisgIHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgJm9wdCwgc2l6ZW9mKG9wdCkpOworI2VuZGlmCisKKyAgcmV0dXJuIGdvdHJlcGx5OworfQorI2VuZGlmCisKKyAKZGlmZiAtLWdpdCBhL3NyYy9kbnNtYXNxLmggYi9zcmMvZG5zbWFzcS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4Mjc1ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvZG5zbWFzcS5oCkBAIC0wLDAgKzEsMTQ5MCBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxNCBTaW1vbiBLZWxsZXkKKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjZGVmaW5lIENPUFlSSUdIVCAiQ29weXJpZ2h0IChjKSAyMDAwLTIwMTQgU2ltb24gS2VsbGV5IiAKKworI2lmbmRlZiBOT19MQVJHRUZJTEUKKy8qIEVuc3VyZSB3ZSBjYW4gdXNlIGZpbGVzID4yR0IgKGxvZyBmaWxlcyBtYXkgZ3JvdyB0aGlzIGJpZykgKi8KKyMgIGRlZmluZSBfTEFSR0VGSUxFX1NPVVJDRSAxCisjICBkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjQKKyNlbmRpZgorCisvKiBHZXQgbGludXggQyBsaWJyYXJ5IHZlcnNpb25zIGFuZCBkZWZpbmUgX0dOVV9TT1VSQ0UgZm9yIGtGcmVlQlNELiAqLworI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykKKyMgIGlmbmRlZiBfX0FORFJPSURfXworIyAgICAgIGRlZmluZSBfR05VX1NPVVJDRQorIyAgZW5kaWYKKyMgIGluY2x1ZGUgPGZlYXR1cmVzLmg+IAorI2VuZGlmCisKKy8qIE5lZWQgdGhlc2UgZGVmaW5lZCBlYXJseSAqLworI2lmIGRlZmluZWQoX19zdW4pIHx8IGRlZmluZWQoX19zdW5fXykKKyMgIGRlZmluZSBfWFBHNF8yCisjICBkZWZpbmUgX19FWFRFTlNJT05TX18KKyNlbmRpZgorCisvKiBnZXQgdGhlc2UgYmVmb3JlIGNvbmZpZy5oICBmb3IgSVB2NiBzdHVmZi4uLiAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPiAKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKKyNpZmRlZiBfX0FQUExFX18KKy8qIERlZmluZSBiZWZvcmUgbmV0aW5ldC9pbi5oIHRvIHNlbGVjdCBBUEkuIE9TWCBMaW9uIG9ud2FyZHMuICovCisjICBkZWZpbmUgX19BUFBMRV9VU0VfUkZDXzM1NDIKKyNlbmRpZgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKworLyogQWxzbyBuZWVkZWQgYmVmb3JlIGNvbmZpZy5oLiAqLworI2luY2x1ZGUgPGdldG9wdC5oPgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiaXA2YWRkci5oIgorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHUxNjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHUzMjsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHU2NDsKKworI2RlZmluZSBjb3VudG9mKHgpICAgICAgKGxvbmcpKHNpemVvZih4KSAvIHNpemVvZih4WzBdKSkKKyNkZWZpbmUgTUlOKGEsYikgICAgICAgICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCisKKyNpbmNsdWRlICJkbnMtcHJvdG9jb2wuaCIKKyNpbmNsdWRlICJkaGNwLXByb3RvY29sLmgiCisjaWZkZWYgSEFWRV9ESENQNgorI2luY2x1ZGUgImRoY3A2LXByb3RvY29sLmgiCisjaW5jbHVkZSAicmFkdi1wcm90b2NvbC5oIgorI2VuZGlmCisKKyNkZWZpbmUgZ2V0dGV4dF9ub29wKFMpIChTKQorI2lmbmRlZiBMT0NBTEVESVIKKyMgIGRlZmluZSBfKFMpIChTKQorI2Vsc2UKKyMgIGluY2x1ZGUgPGxpYmludGwuaD4KKyMgIGluY2x1ZGUgPGxvY2FsZS5oPiAgIAorIyAgZGVmaW5lIF8oUykgZ2V0dGV4dChTKQorI2VuZGlmCisKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2lmIGRlZmluZWQoSEFWRV9TT0xBUklTX05FVFdPUkspCisjICBpbmNsdWRlIDxzeXMvc29ja2lvLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy91bi5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2lmIGRlZmluZWQoSEFWRV9TT0xBUklTX05FVFdPUkspICYmICFkZWZpbmVkKGlmcl9tdHUpCisvKiBTb21lIHNvbGFyaXMgbmV0L2lmLi9oIG9taXQgdGhpcy4gKi8KKyMgIGRlZmluZSBpZnJfbXR1ICBpZnJfaWZydS5pZnJ1X21ldHJpYworI2VuZGlmCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8cHdkLmg+CisjaW5jbHVkZSA8Z3JwLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaWYgZGVmaW5lZChfX09wZW5CU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fc3VuX18pIHx8IGRlZmluZWQgKF9fc3VuKSB8fCBkZWZpbmVkIChfX0FORFJPSURfXykKKyMgIGluY2x1ZGUgPG5ldGluZXQvaWZfZXRoZXIuaD4KKyNlbHNlCisjICBpbmNsdWRlIDxuZXQvZXRoZXJuZXQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPG5ldC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luX3N5c3RtLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaXBfaWNtcC5oPgorI2luY2x1ZGUgPHN5cy91aW8uaD4KKyNpbmNsdWRlIDxzeXNsb2cuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpZm5kZWYgSEFWRV9MSU5VWF9ORVRXT1JLCisjICBpbmNsdWRlIDxuZXQvaWZfZGwuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX05FVFdPUkspCisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgorLyogVGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEgdW5pdmVyc2FsbHktYXZhaWxhYmxlIAorICAgdXNlcnBhY2UgaGVhZGVyIGZvciB0aGVzZS4gKi8KK2V4dGVybiBpbnQgY2Fwc2V0KGNhcF91c2VyX2hlYWRlcl90IGhlYWRlciwgY2FwX3VzZXJfZGF0YV90IGRhdGEpOworZXh0ZXJuIGludCBjYXBnZXQoY2FwX3VzZXJfaGVhZGVyX3QgaGVhZGVyLCBjYXBfdXNlcl9kYXRhX3QgZGF0YSk7CisjZGVmaW5lIExJTlVYX0NBUEFCSUxJVFlfVkVSU0lPTl8xICAweDE5OTgwMzMwCisjZGVmaW5lIExJTlVYX0NBUEFCSUxJVFlfVkVSU0lPTl8yICAweDIwMDcxMDI2CisjZGVmaW5lIExJTlVYX0NBUEFCSUxJVFlfVkVSU0lPTl8zICAweDIwMDgwNTIyCisKKyNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9TT0xBUklTX05FVFdPUkspCisjaW5jbHVkZSA8cHJpdi5oPgorI2VuZGlmCisKKy8qIGRhZW1vbiBpcyBmdW5jdGlvbiBpbiB0aGUgQyBsaWJyYXJ5Li4uLiAqLworI2RlZmluZSBkYWVtb24gZG5zbWFzcV9kYWVtb24KKworLyogQXN5bmMgZXZlbnQgcXVldWUgKi8KK3N0cnVjdCBldmVudF9kZXNjIHsKKyAgaW50IGV2ZW50LCBkYXRhLCBtc2dfc3o7Cit9OworCisjZGVmaW5lIEVWRU5UX1JFTE9BRCAgICAxCisjZGVmaW5lIEVWRU5UX0RVTVAgICAgICAyCisjZGVmaW5lIEVWRU5UX0FMQVJNICAgICAzCisjZGVmaW5lIEVWRU5UX1RFUk0gICAgICA0CisjZGVmaW5lIEVWRU5UX0NISUxEICAgICA1CisjZGVmaW5lIEVWRU5UX1JFT1BFTiAgICA2CisjZGVmaW5lIEVWRU5UX0VYSVRFRCAgICA3CisjZGVmaW5lIEVWRU5UX0tJTExFRCAgICA4CisjZGVmaW5lIEVWRU5UX0VYRUNfRVJSICA5CisjZGVmaW5lIEVWRU5UX1BJUEVfRVJSICAxMAorI2RlZmluZSBFVkVOVF9VU0VSX0VSUiAgMTEKKyNkZWZpbmUgRVZFTlRfQ0FQX0VSUiAgIDEyCisjZGVmaW5lIEVWRU5UX1BJREZJTEUgICAxMworI2RlZmluZSBFVkVOVF9IVVNFUl9FUlIgMTQKKyNkZWZpbmUgRVZFTlRfR1JPVVBfRVJSIDE1CisjZGVmaW5lIEVWRU5UX0RJRSAgICAgICAxNgorI2RlZmluZSBFVkVOVF9MT0dfRVJSICAgMTcKKyNkZWZpbmUgRVZFTlRfRk9SS19FUlIgIDE4CisjZGVmaW5lIEVWRU5UX0xVQV9FUlIgICAxOQorI2RlZmluZSBFVkVOVF9URlRQX0VSUiAgMjAKKyNkZWZpbmUgRVZFTlRfSU5JVCAgICAgIDIxCisjZGVmaW5lIEVWRU5UX05FV0FERFIgICAyMgorI2RlZmluZSBFVkVOVF9ORVdST1VURSAgMjMKKworLyogRXhpdCBjb2Rlcy4gKi8KKyNkZWZpbmUgRUNfR09PRCAgICAgICAgMAorI2RlZmluZSBFQ19CQURDT05GICAgICAxCisjZGVmaW5lIEVDX0JBRE5FVCAgICAgIDIKKyNkZWZpbmUgRUNfRklMRSAgICAgICAgMworI2RlZmluZSBFQ19OT01FTSAgICAgICA0CisjZGVmaW5lIEVDX01JU0MgICAgICAgIDUKKyNkZWZpbmUgRUNfSU5JVF9PRkZTRVQgMTAKKworLyogTWluIGJ1ZmZlciBzaXplOiB3ZSBjaGVjayBhZnRlciBhZGRpbmcgZWFjaCByZWNvcmQsIHNvIHRoZXJlIG11c3QgYmUgCisgICBtZW1vcnkgZm9yIHRoZSBsYXJnZXN0IHBhY2tldCwgYW5kIHRoZSBsYXJnZXN0IHJlY29yZCBzbyB0aGUKKyAgIG1pbiBmb3IgRE5TIGlzIFBBQ0tFVFNaK01BWEROQU1FK1JSRklYRURTWiB3aGljaCBpcyA8IDEwMDAuCisgICBUaGlzIG1pZ2h0IGJlIGluY3JlYXNlZCBpcyBFRE5TIHBhY2tldCBzaXplIGlmIGdyZWF0ZXIgdGhhbiB0aGUgbWluaW11bS4KKyovCisjZGVmaW5lIEROU01BU1FfUEFDS0VUU1ogUEFDS0VUU1orTUFYRE5BTUUrUlJGSVhFRFNaCisKKy8qIFRydXN0IHRoZSBjb21waWxlciBkZWFkLWNvZGUgZWxpbWluYXRvci4uLi4gKi8KKyNkZWZpbmUgb3B0aW9uX2Jvb2woeCkgKCgoeCkgPCAzMikgPyBkYWVtb24tPm9wdGlvbnMgJiAoMXUgPDwgKHgpKSA6IGRhZW1vbi0+b3B0aW9uczIgJiAoMXUgPDwgKCh4KSAtIDMyKSkpCisKKyNkZWZpbmUgT1BUX0JPR1VTUFJJViAgICAgIDAKKyNkZWZpbmUgT1BUX0ZJTFRFUiAgICAgICAgIDEKKyNkZWZpbmUgT1BUX0xPRyAgICAgICAgICAgIDIKKyNkZWZpbmUgT1BUX1NFTEZNWCAgICAgICAgIDMKKyNkZWZpbmUgT1BUX05PX0hPU1RTICAgICAgIDQKKyNkZWZpbmUgT1BUX05PX1BPTEwgICAgICAgIDUKKyNkZWZpbmUgT1BUX0RFQlVHICAgICAgICAgIDYKKyNkZWZpbmUgT1BUX09SREVSICAgICAgICAgIDcKKyNkZWZpbmUgT1BUX05PX1JFU09MViAgICAgIDgKKyNkZWZpbmUgT1BUX0VYUEFORCAgICAgICAgIDkKKyNkZWZpbmUgT1BUX0xPQ0FMTVggICAgICAgIDEwCisjZGVmaW5lIE9QVF9OT19ORUcgICAgICAgICAxMQorI2RlZmluZSBPUFRfTk9ET1RTX0xPQ0FMICAgMTIKKyNkZWZpbmUgT1BUX05PV0lMRCAgICAgICAgIDEzCisjZGVmaW5lIE9QVF9FVEhFUlMgICAgICAgICAxNAorI2RlZmluZSBPUFRfUkVTT0xWX0RPTUFJTiAgMTUKKyNkZWZpbmUgT1BUX05PX0ZPUksgICAgICAgIDE2CisjZGVmaW5lIE9QVF9BVVRIT1JJVEFUSVZFICAxNworI2RlZmluZSBPUFRfTE9DQUxJU0UgICAgICAgMTgKKyNkZWZpbmUgT1BUX0RCVVMgICAgICAgICAgIDE5CisjZGVmaW5lIE9QVF9ESENQX0ZRRE4gICAgICAyMAorI2RlZmluZSBPUFRfTk9fUElORyAgICAgICAgMjEKKyNkZWZpbmUgT1BUX0xFQVNFX1JPICAgICAgIDIyCisjZGVmaW5lIE9QVF9BTExfU0VSVkVSUyAgICAyMworI2RlZmluZSBPUFRfUkVMT0FEICAgICAgICAgMjQKKyNkZWZpbmUgT1BUX0xPQ0FMX1JFQklORCAgIDI1ICAKKyNkZWZpbmUgT1BUX1RGVFBfU0VDVVJFICAgIDI2CisjZGVmaW5lIE9QVF9URlRQX05PQkxPQ0sgICAyNworI2RlZmluZSBPUFRfTE9HX09QVFMgICAgICAgMjgKKyNkZWZpbmUgT1BUX1RGVFBfQVBSRUYgICAgIDI5CisjZGVmaW5lIE9QVF9OT19PVkVSUklERSAgICAzMAorI2RlZmluZSBPUFRfTk9fUkVCSU5EICAgICAgMzEKKyNkZWZpbmUgT1BUX0FERF9NQUMgICAgICAgIDMyCisjZGVmaW5lIE9QVF9ETlNTRUNfUFJPWFkgICAzMworI2RlZmluZSBPUFRfQ09OU0VDX0FERFIgICAgMzQKKyNkZWZpbmUgT1BUX0NPTk5UUkFDSyAgICAgIDM1CisjZGVmaW5lIE9QVF9GUUROX1VQREFURSAgICAzNgorI2RlZmluZSBPUFRfUkEgICAgICAgICAgICAgMzcKKyNkZWZpbmUgT1BUX1RGVFBfTEMgICAgICAgIDM4CisjZGVmaW5lIE9QVF9DTEVWRVJCSU5EICAgICAzOQorI2RlZmluZSBPUFRfVEZUUCAgICAgICAgICAgNDAKKyNkZWZpbmUgT1BUX0NMSUVOVF9TVUJORVQgIDQxCisjZGVmaW5lIE9QVF9RVUlFVF9ESENQICAgICA0MgorI2RlZmluZSBPUFRfUVVJRVRfREhDUDYgICAgNDMKKyNkZWZpbmUgT1BUX1FVSUVUX1JBCSAgIDQ0CisjZGVmaW5lIE9QVF9ETlNTRUNfVkFMSUQgICA0NQorI2RlZmluZSBPUFRfRE5TU0VDX1RJTUUgICAgNDYKKyNkZWZpbmUgT1BUX0ROU1NFQ19ERUJVRyAgIDQ3CisjZGVmaW5lIE9QVF9ETlNTRUNfTk9fU0lHTiA0OCAKKyNkZWZpbmUgT1BUX0xPQ0FMX1NFUlZJQ0UgIDQ5CisjZGVmaW5lIE9QVF9MT09QX0RFVEVDVCAgICA1MAorI2RlZmluZSBPUFRfRVhUUkFMT0cgICAgICAgNTEKKyNkZWZpbmUgT1BUX0xBU1QgICAgICAgICAgIDUyCisKKy8qIGV4dHJhIGZsYWdzIGZvciBteV9zeXNsb2csIHdlIHVzZSBhIGNvdXBsZSBvZiBmYWNpbGl0aWVzIHNpbmNlIHRoZXkgYXJlIGtub3duIAorICAgbm90IHRvIG9jY3VweSB0aGUgc2FtZSBiaXRzIGFzIHByaW9yaXRpZXMsIG5vIG1hdHRlciBob3cgc3lzbG9nLmggaXMgc2V0IHVwLiAqLworI2RlZmluZSBNU19URlRQIExPR19VU0VSCisjZGVmaW5lIE1TX0RIQ1AgTE9HX0RBRU1PTiAKKworc3RydWN0IGFsbF9hZGRyIHsKKyAgdW5pb24geworICAgIHN0cnVjdCBpbl9hZGRyIGFkZHI0OworI2lmZGVmIEhBVkVfSVBWNgorICAgIHN0cnVjdCBpbjZfYWRkciBhZGRyNjsKKyNlbmRpZgorICAgIC8qIGZvciBsb2dfcXVlcnkgKi8KKyAgICB1bnNpZ25lZCBpbnQga2V5dGFnOworICAgIC8qIGZvciBjYWNoZV9pbnNlcnQgaWYgUlJTSUcsIEROU0tFWSwgRFMgKi8KKyAgICBzdHJ1Y3QgeworICAgICAgdW5zaWduZWQgc2hvcnQgY2xhc3MsIHR5cGU7CisgICAgfSBkbnNzZWM7ICAgICAgCisgIH0gYWRkcjsKK307CisKK3N0cnVjdCBib2d1c19hZGRyIHsKKyAgc3RydWN0IGluX2FkZHIgYWRkcjsKKyAgc3RydWN0IGJvZ3VzX2FkZHIgKm5leHQ7Cit9OworCisvKiBkbnMgZG9jdG9yIHBhcmFtICovCitzdHJ1Y3QgZG9jdG9yIHsKKyAgc3RydWN0IGluX2FkZHIgaW4sIGVuZCwgb3V0LCBtYXNrOworICBzdHJ1Y3QgZG9jdG9yICpuZXh0OworfTsKKworc3RydWN0IG14X3Nydl9yZWNvcmQgeworICBjaGFyICpuYW1lLCAqdGFyZ2V0OworICBpbnQgaXNzcnYsIHNydnBvcnQsIHByaW9yaXR5LCB3ZWlnaHQ7CisgIHVuc2lnbmVkIGludCBvZmZzZXQ7CisgIHN0cnVjdCBteF9zcnZfcmVjb3JkICpuZXh0OworfTsKKworc3RydWN0IG5hcHRyIHsKKyAgY2hhciAqbmFtZSwgKnJlcGxhY2UsICpyZWdleHAsICpzZXJ2aWNlcywgKmZsYWdzOworICB1bnNpZ25lZCBpbnQgb3JkZXIsIHByZWY7CisgIHN0cnVjdCBuYXB0ciAqbmV4dDsKK307CisKKyNkZWZpbmUgVFhUX1NUQVRfQ0FDSEVTSVpFICAgICAxCisjZGVmaW5lIFRYVF9TVEFUX0lOU0VSVFMgICAgICAgMgorI2RlZmluZSBUWFRfU1RBVF9FVklDVElPTlMgICAgIDMKKyNkZWZpbmUgVFhUX1NUQVRfTUlTU0VTICAgICAgICA0CisjZGVmaW5lIFRYVF9TVEFUX0hJVFMgICAgICAgICAgNQorI2RlZmluZSBUWFRfU1RBVF9BVVRIICAgICAgICAgIDYKKyNkZWZpbmUgVFhUX1NUQVRfU0VSVkVSUyAgICAgICA3CisKK3N0cnVjdCB0eHRfcmVjb3JkIHsKKyAgY2hhciAqbmFtZTsKKyAgdW5zaWduZWQgY2hhciAqdHh0OworICB1bnNpZ25lZCBzaG9ydCBjbGFzcywgbGVuOworICBpbnQgc3RhdDsKKyAgc3RydWN0IHR4dF9yZWNvcmQgKm5leHQ7Cit9OworCitzdHJ1Y3QgcHRyX3JlY29yZCB7CisgIGNoYXIgKm5hbWUsICpwdHI7CisgIHN0cnVjdCBwdHJfcmVjb3JkICpuZXh0OworfTsKKworc3RydWN0IGNuYW1lIHsKKyAgY2hhciAqYWxpYXMsICp0YXJnZXQ7CisgIHN0cnVjdCBjbmFtZSAqbmV4dDsKK307IAorCitzdHJ1Y3QgZHNfY29uZmlnIHsKKyAgY2hhciAqbmFtZSwgKmRpZ2VzdDsKKyAgaW50IGRpZ2VzdGxlbiwgY2xhc3MsIGFsZ28sIGtleXRhZywgZGlnZXN0X3R5cGU7CisgIHN0cnVjdCBkc19jb25maWcgKm5leHQ7Cit9OworCisjZGVmaW5lIEFERFJMSVNUX0xJVEVSQUwgMQorI2RlZmluZSBBRERSTElTVF9JUFY2ICAgIDIKKyNkZWZpbmUgQUREUkxJU1RfUkVWT05MWSA0CisKK3N0cnVjdCBhZGRybGlzdCB7CisgIHN0cnVjdCBhbGxfYWRkciBhZGRyOworICBpbnQgZmxhZ3MsIHByZWZpeGxlbjsgCisgIHN0cnVjdCBhZGRybGlzdCAqbmV4dDsKK307CisKKyNkZWZpbmUgQVVUSDYgICAgIDEKKyNkZWZpbmUgQVVUSDQgICAgIDIKKworc3RydWN0IGF1dGhfem9uZSB7CisgIGNoYXIgKmRvbWFpbjsKKyAgc3RydWN0IGF1dGhfbmFtZV9saXN0IHsKKyAgICBjaGFyICpuYW1lOworICAgIGludCBmbGFnczsKKyAgICBzdHJ1Y3QgYXV0aF9uYW1lX2xpc3QgKm5leHQ7CisgIH0gKmludGVyZmFjZV9uYW1lczsKKyAgc3RydWN0IGFkZHJsaXN0ICpzdWJuZXQ7CisgIHN0cnVjdCBhdXRoX3pvbmUgKm5leHQ7Cit9OworCisKK3N0cnVjdCBob3N0X3JlY29yZCB7CisgIHN0cnVjdCBuYW1lX2xpc3QgeworICAgIGNoYXIgKm5hbWU7CisgICAgc3RydWN0IG5hbWVfbGlzdCAqbmV4dDsKKyAgfSAqbmFtZXM7CisgIHN0cnVjdCBpbl9hZGRyIGFkZHI7CisjaWZkZWYgSEFWRV9JUFY2CisgIHN0cnVjdCBpbjZfYWRkciBhZGRyNjsKKyNlbmRpZgorICBzdHJ1Y3QgaG9zdF9yZWNvcmQgKm5leHQ7Cit9OworCitzdHJ1Y3QgaW50ZXJmYWNlX25hbWUgeworICBjaGFyICpuYW1lOyAvKiBkb21haW4gbmFtZSAqLworICBjaGFyICppbnRyOyAvKiBpbnRlcmZhY2UgbmFtZSAqLworICBpbnQgZmFtaWx5OyAvKiBBRl9JTkVULCBBRl9JTkVUNiBvciB6ZXJvIGZvciBib3RoICovCisgIHN0cnVjdCBhZGRybGlzdCAqYWRkcjsKKyAgc3RydWN0IGludGVyZmFjZV9uYW1lICpuZXh0OworfTsKKwordW5pb24gYmlnbmFtZSB7CisgIGNoYXIgbmFtZVtNQVhETkFNRV07CisgIHVuaW9uIGJpZ25hbWUgKm5leHQ7IC8qIGZyZWVsaXN0ICovCit9OworCitzdHJ1Y3QgYmxvY2tkYXRhIHsKKyAgc3RydWN0IGJsb2NrZGF0YSAqbmV4dDsKKyAgdW5zaWduZWQgY2hhciBrZXlbS0VZQkxPQ0tfTEVOXTsKK307CisKK3N0cnVjdCBjcmVjIHsgCisgIHN0cnVjdCBjcmVjICpuZXh0LCAqcHJldiwgKmhhc2hfbmV4dDsKKyAgLyogdW5pb24gaXMgMTYgYnl0ZXMgd2hlbiBkb2luZyBJUHY2LCA4IGJ5dGVzIG9uIDMyIGJpdCBtYWNoaW5lcyB3aXRob3V0IElQdjYgKi8KKyAgdW5pb24geworICAgIHN0cnVjdCBhbGxfYWRkciBhZGRyOworICAgIHN0cnVjdCB7CisgICAgICB1bmlvbiB7CisJc3RydWN0IGNyZWMgKmNhY2hlOworCXN0cnVjdCBpbnRlcmZhY2VfbmFtZSAqaW50X25hbWU7CisgICAgICB9IHRhcmdldDsKKyAgICAgIHVuc2lnbmVkIGludCB1aWQ7IC8qIDAgaWYgdW5pb24gaXMgaW50ZXJmYWNlLW5hbWUgKi8KKyAgICB9IGNuYW1lOworICAgIHN0cnVjdCB7CisgICAgICBzdHJ1Y3QgYmxvY2tkYXRhICprZXlkYXRhOworICAgICAgdW5zaWduZWQgc2hvcnQga2V5bGVuLCBmbGFncywga2V5dGFnOworICAgICAgdW5zaWduZWQgY2hhciBhbGdvOworICAgIH0ga2V5OyAKKyAgICBzdHJ1Y3QgeworICAgICAgc3RydWN0IGJsb2NrZGF0YSAqa2V5ZGF0YTsKKyAgICAgIHVuc2lnbmVkIHNob3J0IGtleWxlbiwga2V5dGFnOworICAgICAgdW5zaWduZWQgY2hhciBhbGdvOworICAgICAgdW5zaWduZWQgY2hhciBkaWdlc3Q7IAorICAgIH0gZHM7IAorICAgIHN0cnVjdCB7CisgICAgICBzdHJ1Y3QgYmxvY2tkYXRhICprZXlkYXRhOworICAgICAgdW5zaWduZWQgc2hvcnQga2V5bGVuLCB0eXBlX2NvdmVyZWQsIGtleXRhZzsKKyAgICAgIGNoYXIgYWxnbzsKKyAgICB9IHNpZzsKKyAgfSBhZGRyOworICB0aW1lX3QgdHRkOyAvKiB0aW1lIHRvIGRpZSAqLworICAvKiB1c2VkIGFzIGNsYXNzIGlmIEROU0tFWS9EUy9SUlNJRywgaW5kZXggdG8gc291cmNlIGZvciBGX0hPU1RTICovCisgIHVuc2lnbmVkIGludCB1aWQ7IAorICB1bnNpZ25lZCBzaG9ydCBmbGFnczsKKyAgdW5pb24geworICAgIGNoYXIgc25hbWVbU01BTExETkFNRV07CisgICAgdW5pb24gYmlnbmFtZSAqYm5hbWU7CisgICAgY2hhciAqbmFtZXA7CisgIH0gbmFtZTsKK307CisKKyNkZWZpbmUgRl9JTU1PUlRBTCAgKDF1PDwwKQorI2RlZmluZSBGX05BTUVQICAgICAoMXU8PDEpCisjZGVmaW5lIEZfUkVWRVJTRSAgICgxdTw8MikKKyNkZWZpbmUgRl9GT1JXQVJEICAgKDF1PDwzKQorI2RlZmluZSBGX0RIQ1AgICAgICAoMXU8PDQpCisjZGVmaW5lIEZfTkVHICAgICAgICgxdTw8NSkgICAgICAgCisjZGVmaW5lIEZfSE9TVFMgICAgICgxdTw8NikKKyNkZWZpbmUgRl9JUFY0ICAgICAgKDF1PDw3KQorI2RlZmluZSBGX0lQVjYgICAgICAoMXU8PDgpCisjZGVmaW5lIEZfQklHTkFNRSAgICgxdTw8OSkKKyNkZWZpbmUgRl9OWERPTUFJTiAgKDF1PDwxMCkKKyNkZWZpbmUgRl9DTkFNRSAgICAgKDF1PDwxMSkKKyNkZWZpbmUgRl9ETlNLRVkgICAgKDF1PDwxMikKKyNkZWZpbmUgRl9DT05GSUcgICAgKDF1PDwxMykKKyNkZWZpbmUgRl9EUyAgICAgICAgKDF1PDwxNCkKKyNkZWZpbmUgRl9ETlNTRUNPSyAgKDF1PDwxNSkKKworLyogYmVsb3cgaGVyZSBhcmUgb25seSB2YWxpZCBhcyBhcmdzIHRvIGxvZ19xdWVyeTogY2FjaGUKKyAgIGVudHJpZXMgYXJlIGxpbWl0ZWQgdG8gMTYgYml0cyAqLworI2RlZmluZSBGX1VQU1RSRUFNICAoMXU8PDE2KQorI2RlZmluZSBGX1JSTkFNRSAgICAoMXU8PDE3KQorI2RlZmluZSBGX1NFUlZFUiAgICAoMXU8PDE4KQorI2RlZmluZSBGX1FVRVJZICAgICAoMXU8PDE5KQorI2RlZmluZSBGX05PRVJSICAgICAoMXU8PDIwKQorI2RlZmluZSBGX0FVVEggICAgICAoMXU8PDIxKQorI2RlZmluZSBGX0ROU1NFQyAgICAoMXU8PDIyKQorI2RlZmluZSBGX0tFWVRBRyAgICAoMXU8PDIzKQorI2RlZmluZSBGX1NFQ1NUQVQgICAoMXU8PDI0KQorI2RlZmluZSBGX05PX1JSICAgICAoMXU8PDI1KQorI2RlZmluZSBGX0lQU0VUICAgICAoMXU8PDI2KQorI2RlZmluZSBGX05TSUdNQVRDSCAoMXU8PDI3KQorI2RlZmluZSBGX05PRVhUUkEgICAoMXU8PDI4KQorCisvKiBWYWx1ZXMgb2YgdWlkIGluIGNyZWNzIHdpdGggRl9DT05GSUcgYml0IHNldC4gKi8KKyNkZWZpbmUgU1JDX0lOVEVSRkFDRSAwCisjZGVmaW5lIFNSQ19DT05GSUcgICAgMQorI2RlZmluZSBTUkNfSE9TVFMgICAgIDIKKyNkZWZpbmUgU1JDX0FIICAgICAgICAzCisKKworLyogc3RydWN0IHNvY2thZGRyIGlzIG5vdCBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbnkgYWRkcmVzcywKKyAgIGFuZCBzcGVjaWZpY2FsbHkgbm90IGJpZyBlbm91Z2ggdG8gaG9sZCBhbiBJUHY2IGFkZHJlc3MuCisgICBCbGVjaC4gUm9sbCBvdXIgb3duLiAqLwordW5pb24gbXlzb2NrYWRkciB7CisgIHN0cnVjdCBzb2NrYWRkciBzYTsKKyAgc3RydWN0IHNvY2thZGRyX2luIGluOworI2lmIGRlZmluZWQoSEFWRV9JUFY2KQorICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGluNjsKKyNlbmRpZgorfTsKKworLyogYml0cyBpbiBmbGFnIHBhcmFtIHRvIElQdjYgY2FsbGJhY2tzIGZyb20gaWZhY2VfZW51bWVyYXRlKCkgKi8KKyNkZWZpbmUgSUZBQ0VfVEVOVEFUSVZFICAgMQorI2RlZmluZSBJRkFDRV9ERVBSRUNBVEVEICAyCisjZGVmaW5lIElGQUNFX1BFUk1BTkVOVCAgIDQKKworCisjZGVmaW5lIFNFUlZfRlJPTV9SRVNPTFYgICAgICAgMSAgLyogMSBmb3Igc2VydmVycyBmcm9tIHJlc29sdiwgMCBmb3IgY29tbWFuZCBsaW5lLiAqLworI2RlZmluZSBTRVJWX05PX0FERFIgICAgICAgICAgIDIgIC8qIG5vIHNlcnZlciwgdGhpcyBkb21haW4gaXMgbG9jYWwgb25seSAqLworI2RlZmluZSBTRVJWX0xJVEVSQUxfQUREUkVTUyAgIDQgIC8qIGFkZHIgaXMgdGhlIGFuc3dlciwgbm90IHRoZSBzZXJ2ZXIgKi8gCisjZGVmaW5lIFNFUlZfSEFTX0RPTUFJTiAgICAgICAgOCAgLyogc2VydmVyIGZvciBvbmUgZG9tYWluIG9ubHkgKi8KKyNkZWZpbmUgU0VSVl9IQVNfU09VUkNFICAgICAgIDE2ICAvKiBzb3VyY2UgYWRkcmVzcyBkZWZpbmVkICovCisjZGVmaW5lIFNFUlZfRk9SX05PRE9UUyAgICAgICAzMiAgLyogc2VydmVyIGZvciBuYW1lcyB3aXRoIG5vIGRvbWFpbiBwYXJ0IG9ubHkgKi8KKyNkZWZpbmUgU0VSVl9XQVJORURfUkVDVVJTSVZFIDY0ICAvKiBhdm9pZCB3YXJuaW5nIHNwYW0gKi8KKyNkZWZpbmUgU0VSVl9GUk9NX0RCVVMgICAgICAgMTI4ICAvKiAxIGlmIHNvdXJjZSBpcyBEQnVzICovCisjZGVmaW5lIFNFUlZfTUFSSyAgICAgICAgICAgIDI1NiAgLyogZm9yIG1hcmstYW5kLWRlbGV0ZSAqLworI2RlZmluZSBTRVJWX1RZUEUgICAgKFNFUlZfSEFTX0RPTUFJTiB8IFNFUlZfRk9SX05PRE9UUykKKyNkZWZpbmUgU0VSVl9DT1VOVEVEICAgICAgICAgNTEyICAvKiB3b3Jrc3BhY2UgZm9yIGxvZyBjb2RlICovCisjZGVmaW5lIFNFUlZfVVNFX1JFU09MViAgICAgMTAyNCAgLyogZm9yd2FyZCB0aGlzIGRvbWFpbiBpbiB0aGUgbm9ybWFsIHdheSAqLworI2RlZmluZSBTRVJWX05PX1JFQklORCAgICAgIDIwNDggIC8qIGluaGliaXQgZG5zLXJlYmluZCBwcm90ZWN0aW9uICovCisjZGVmaW5lIFNFUlZfRlJPTV9GSUxFICAgICAgNDA5NiAgLyogcmVhZCBmcm9tIC0tc2VydmVycy1maWxlICovCisjZGVmaW5lIFNFUlZfTE9PUCAgICAgICAgICAgODE5MiAgLyogc2VydmVyIGNhdXNlcyBmb3J3YXJkaW5nIGxvb3AgKi8KKworc3RydWN0IHNlcnZlcmZkIHsKKyAgaW50IGZkOworICB1bmlvbiBteXNvY2thZGRyIHNvdXJjZV9hZGRyOworICBjaGFyIGludGVyZmFjZVtJRl9OQU1FU0laRSsxXTsKKyAgc3RydWN0IHNlcnZlcmZkICpuZXh0OworfTsKKworc3RydWN0IHJhbmRmZCB7CisgIGludCBmZDsKKyAgdW5zaWduZWQgc2hvcnQgcmVmY291bnQsIGZhbWlseTsKK307CisgIAorc3RydWN0IHNlcnZlciB7CisgIHVuaW9uIG15c29ja2FkZHIgYWRkciwgc291cmNlX2FkZHI7CisgIGNoYXIgaW50ZXJmYWNlW0lGX05BTUVTSVpFKzFdOworICBzdHJ1Y3Qgc2VydmVyZmQgKnNmZDsgCisgIGNoYXIgKmRvbWFpbjsgLyogc2V0IGlmIHRoaXMgc2VydmVyIG9ubHkgaGFuZGxlcyBhIGRvbWFpbi4gKi8gCisgIGludCBmbGFncywgdGNwZmQ7CisgIHVuc2lnbmVkIGludCBxdWVyaWVzLCBmYWlsZWRfcXVlcmllczsKKyNpZmRlZiBIQVZFX0xPT1AKKyAgdTMyIHVpZDsKKyNlbmRpZgorICBzdHJ1Y3Qgc2VydmVyICpuZXh0OyAKK307CisKK3N0cnVjdCBpcHNldHMgeworICBjaGFyICoqc2V0czsKKyAgY2hhciAqZG9tYWluOworICBzdHJ1Y3QgaXBzZXRzICpuZXh0OworfTsKKworc3RydWN0IGlyZWMgeworICB1bmlvbiBteXNvY2thZGRyIGFkZHI7CisgIHN0cnVjdCBpbl9hZGRyIG5ldG1hc2s7IC8qIG9ubHkgdmFsaWQgZm9yIElQdjQgKi8KKyAgaW50IHRmdHBfb2ssIGRoY3Bfb2ssIG10dSwgZG9uZSwgd2FybmVkLCBkYWQsIGRuc19hdXRoLCBpbmRleCwgbXVsdGljYXN0X2RvbmUsIGZvdW5kOworICBjaGFyICpuYW1lOyAKKyAgc3RydWN0IGlyZWMgKm5leHQ7Cit9OworCitzdHJ1Y3QgbGlzdGVuZXIgeworICBpbnQgZmQsIHRjcGZkLCB0ZnRwZmQsIGZhbWlseTsKKyAgc3RydWN0IGlyZWMgKmlmYWNlOyAvKiBvbmx5IHNvbWV0aW1lcyB2YWxpZCBmb3Igbm9uLXdpbGRjYXJkICovCisgIHN0cnVjdCBsaXN0ZW5lciAqbmV4dDsKK307CisKKy8qIGludGVyZmFjZSBhbmQgYWRkcmVzcyBwYXJtcyBmcm9tIGNvbW1hbmQgbGluZS4gKi8KK3N0cnVjdCBpbmFtZSB7CisgIGNoYXIgKm5hbWU7CisgIHVuaW9uIG15c29ja2FkZHIgYWRkcjsKKyAgaW50IHVzZWQ7CisgIHN0cnVjdCBpbmFtZSAqbmV4dDsKK307CisKKy8qIHJlc29sdi1maWxlIHBhcm1zIGZyb20gY29tbWFuZC1saW5lICovCitzdHJ1Y3QgcmVzb2x2YyB7CisgIHN0cnVjdCByZXNvbHZjICpuZXh0OworICBpbnQgaXNfZGVmYXVsdCwgbG9nZ2VkOworICB0aW1lX3QgbXRpbWU7CisgIGNoYXIgKm5hbWU7CisjaWZkZWYgSEFWRV9MSU5VWF9ORVRXT1JLCisgIGludCB3ZDsgLyogaW5vdGlmeSB3YXRjaCBkZXNjcmlwdG9yICovCisgIGNoYXIgKmZpbGU7IC8qIHBvaW50ZXIgdG8gZmlsZSBwYXJ0IGlmIHBhdGggKi8KKyNlbmRpZgorfTsKKworLyogYWRuLWhvc3RzIHBhcm1zIGZyb20gY29tbWFuZC1saW5lIChhbHNvIGRoY3AtaG9zdHNmaWxlIGFuZCBkaGNwLW9wdHNmaWxlICovCisjZGVmaW5lIEFIX0RJUiAgICAgIDEKKyNkZWZpbmUgQUhfSU5BQ1RJVkUgMgorc3RydWN0IGhvc3RzZmlsZSB7CisgIHN0cnVjdCBob3N0c2ZpbGUgKm5leHQ7CisgIGludCBmbGFnczsKKyAgY2hhciAqZm5hbWU7CisgIHVuc2lnbmVkIGludCBpbmRleDsgLyogbWF0Y2hlcyB0byBjYWNoZSBlbnRyaWVzIGZvciBsb2dnaW5nICovCit9OworCisKKy8qIEROU1NFQyBzdGF0dXMgdmFsdWVzLiAqLworI2RlZmluZSBTVEFUX1NFQ1VSRSAgICAgICAgICAgICAxCisjZGVmaW5lIFNUQVRfSU5TRUNVUkUgICAgICAgICAgIDIKKyNkZWZpbmUgU1RBVF9CT0dVUyAgICAgICAgICAgICAgMworI2RlZmluZSBTVEFUX05FRURfRFMgICAgICAgICAgICA0CisjZGVmaW5lIFNUQVRfTkVFRF9LRVkgICAgICAgICAgIDUKKyNkZWZpbmUgU1RBVF9UUlVOQ0FURUQgICAgICAgICAgNgorI2RlZmluZSBTVEFUX1NFQ1VSRV9XSUxEQ0FSRCAgICA3CisjZGVmaW5lIFNUQVRfTk9fU0lHICAgICAgICAgICAgIDgKKyNkZWZpbmUgU1RBVF9OT19EUyAgICAgICAgICAgICAgOQorI2RlZmluZSBTVEFUX05PX05TICAgICAgICAgICAgIDEwCisjZGVmaW5lIFNUQVRfTkVFRF9EU19ORUcgICAgICAgMTEKKyNkZWZpbmUgU1RBVF9DSEFTRV9DTkFNRSAgICAgICAxMgorCisjZGVmaW5lIEZSRUNfTk9SRUJJTkQgICAgICAgICAgIDEKKyNkZWZpbmUgRlJFQ19DSEVDS0lOR19ESVNBQkxFRCAgMgorI2RlZmluZSBGUkVDX0hBU19TVUJORVQgICAgICAgICA0CisjZGVmaW5lIEZSRUNfRE5TS0VZX1FVRVJZICAgICAgIDgKKyNkZWZpbmUgRlJFQ19EU19RVUVSWSAgICAgICAgICAxNgorI2RlZmluZSBGUkVDX0FEX1FVRVNUSU9OICAgICAgIDMyCisjZGVmaW5lIEZSRUNfRE9fUVVFU1RJT04gICAgICAgNjQKKyNkZWZpbmUgRlJFQ19BRERFRF9QSEVBREVSICAgIDEyOAorI2RlZmluZSBGUkVDX0NIRUNLX05PU0lHTiAgICAgMjU2CisKKyNpZmRlZiBIQVZFX0ROU1NFQworI2RlZmluZSBIQVNIX1NJWkUgMjAgLyogU0hBLTEgZGlnZXN0IHNpemUgKi8KKyNlbHNlCisjZGVmaW5lIEhBU0hfU0laRSBzaXplb2YoaW50KQorI2VuZGlmCisKK3N0cnVjdCBmcmVjIHsKKyAgdW5pb24gbXlzb2NrYWRkciBzb3VyY2U7CisgIHN0cnVjdCBhbGxfYWRkciBkZXN0OworICBzdHJ1Y3Qgc2VydmVyICpzZW50dG87IC8qIE5VTEwgbWVhbnMgZnJlZSAqLworICBzdHJ1Y3QgcmFuZGZkICpyZmQ0OworI2lmZGVmIEhBVkVfSVBWNgorICBzdHJ1Y3QgcmFuZGZkICpyZmQ2OworI2VuZGlmCisgIHVuc2lnbmVkIGludCBpZmFjZTsKKyAgdW5zaWduZWQgc2hvcnQgb3JpZ19pZCwgbmV3X2lkOworICBpbnQgbG9nX2lkLCBmZCwgZm9yd2FyZGFsbCwgZmxhZ3M7CisgIHRpbWVfdCB0aW1lOworICB1bnNpZ25lZCBjaGFyICpoYXNoW0hBU0hfU0laRV07CisjaWZkZWYgSEFWRV9ETlNTRUMgCisgIGludCBjbGFzcywgd29ya19jb3VudGVyOworICBzdHJ1Y3QgYmxvY2tkYXRhICpzdGFzaDsgLyogU2F2ZWQgcmVwbHksIHdoaWxzdCB3ZSB2YWxpZGF0ZSAqLworICBzdHJ1Y3QgYmxvY2tkYXRhICpvcmlnX2RvbWFpbjsgLyogZG9tYWluIG9mIG9yaWdpbmFsIHF1ZXJ5LCB3aGlsc3QKKwkJCQkgICAgd2UncmUgc2VlaW5nIGlzIGlmIGluIHVuc2lnbmVkIGRvbWFpbiAqLworICBzaXplX3Qgc3Rhc2hfbGVuLCBuYW1lX3N0YXJ0LCBuYW1lX2xlbjsKKyAgc3RydWN0IGZyZWMgKmRlcGVuZGVudDsgLyogUXVlcnkgYXdhaXRpbmcgaW50ZXJuYWxseS1nZW5lcmF0ZWQgRE5TS0VZIG9yIERTIHF1ZXJ5ICovCisgIHN0cnVjdCBmcmVjICpibG9ja2luZ19xdWVyeTsgLyogUXVlcnkgd2hpY2ggaXMgYmxvY2tpbmcgdXMuICovCisjZW5kaWYKKyAgc3RydWN0IGZyZWMgKm5leHQ7Cit9OworCisvKiBmbGFncyBpbiB0b3Agb2YgbGVuZ3RoIGZpZWxkIGZvciBESENQLW9wdGlvbiB0YWJsZXMgKi8KKyNkZWZpbmUgT1RfQUREUl9MSVNUICAgIDB4ODAwMAorI2RlZmluZSBPVF9SRkMxMDM1X05BTUUgMHg0MDAwCisjZGVmaW5lIE9UX0lOVEVSTkFMICAgICAweDIwMDAKKyNkZWZpbmUgT1RfTkFNRSAgICAgICAgIDB4MTAwMAorI2RlZmluZSBPVF9DU1RSSU5HICAgICAgMHgwODAwCisjZGVmaW5lIE9UX0RFQyAgICAgICAgICAweDA0MDAgCisjZGVmaW5lIE9UX1RJTUUgICAgICAgICAweDAyMDAKKworLyogYWN0aW9ucyBpbiB0aGUgZGFlbW9uLT5oZWxwZXIgUlBDICovCisjZGVmaW5lIEFDVElPTl9ERUwgICAgICAgICAgIDEKKyNkZWZpbmUgQUNUSU9OX09MRF9IT1NUTkFNRSAgMgorI2RlZmluZSBBQ1RJT05fT0xEICAgICAgICAgICAzCisjZGVmaW5lIEFDVElPTl9BREQgICAgICAgICAgIDQKKyNkZWZpbmUgQUNUSU9OX1RGVFAgICAgICAgICAgNQorCisjZGVmaW5lIExFQVNFX05FVyAgICAgICAgICAgIDEgIC8qIG5ld2x5IGNyZWF0ZWQgKi8KKyNkZWZpbmUgTEVBU0VfQ0hBTkdFRCAgICAgICAgMiAgLyogbW9kaWZpZWQgKi8KKyNkZWZpbmUgTEVBU0VfQVVYX0NIQU5HRUQgICAgNCAgLyogQ0xJRCBvciBleHBpcnkgY2hhbmdlZCAqLworI2RlZmluZSBMRUFTRV9BVVRIX05BTUUgICAgICA4ICAvKiBob3N0bmFtZSBjYW1lIGZyb20gY29uZmlnLCBub3QgZnJvbSBjbGllbnQgKi8KKyNkZWZpbmUgTEVBU0VfVVNFRCAgICAgICAgICAxNiAgLyogdXNlZCB0aGlzIERIQ1B2NiB0cmFuc2FjdGlvbiAqLworI2RlZmluZSBMRUFTRV9OQSAgICAgICAgICAgIDMyICAvKiBJUHY2IG5vLXRlbXBvcmFyeSBsZWFzZSAqLworI2RlZmluZSBMRUFTRV9UQSAgICAgICAgICAgIDY0ICAvKiBJUHY2IHRlbXBvcmFyeSBsZWFzZSAqLworI2RlZmluZSBMRUFTRV9IQVZFX0hXQUREUiAgMTI4ICAvKiBIYXZlIHNldCBod2FkZHJlc3MgKi8KKworc3RydWN0IGRoY3BfbGVhc2UgeworICBpbnQgY2xpZF9sZW47ICAgICAgICAgIC8qIGxlbmd0aCBvZiBjbGllbnQgaWRlbnRpZmllciAqLworICB1bnNpZ25lZCBjaGFyICpjbGlkOyAgIC8qIGNsaWVudGlkICovCisgIGNoYXIgKmhvc3RuYW1lLCAqZnFkbjsgLyogbmFtZSBmcm9tIGNsaWVudC1ob3N0bmFtZSBvcHRpb24gb3IgY29uZmlnICovCisgIGNoYXIgKm9sZF9ob3N0bmFtZTsgICAgLyogaG9zdG5hbWUgYmVmb3JlIGl0IG1vdmVkIHRvIGFub3RoZXIgbGVhc2UgKi8KKyAgaW50IGZsYWdzOworICB0aW1lX3QgZXhwaXJlczsgICAgICAgIC8qIGxlYXNlIGV4cGlyeSAqLworI2lmZGVmIEhBVkVfQlJPS0VOX1JUQworICB1bnNpZ25lZCBpbnQgbGVuZ3RoOworI2VuZGlmCisgIGludCBod2FkZHJfbGVuLCBod2FkZHJfdHlwZTsKKyAgdW5zaWduZWQgY2hhciBod2FkZHJbREhDUF9DSEFERFJfTUFYXTsgCisgIHN0cnVjdCBpbl9hZGRyIGFkZHIsIG92ZXJyaWRlLCBnaWFkZHI7CisgIHVuc2lnbmVkIGNoYXIgKmV4dHJhZGF0YTsKKyAgdW5zaWduZWQgaW50IGV4dHJhZGF0YV9sZW4sIGV4dHJhZGF0YV9zaXplOworICBpbnQgbGFzdF9pbnRlcmZhY2U7CisgIGludCBuZXdfaW50ZXJmYWNlOyAgICAgLyogc2F2ZSBwb3NzaWJsZSBvcmlnaW5hdGVkIGludGVyZmFjZSAqLworICBpbnQgbmV3X3ByZWZpeGxlbjsgICAgIC8qIGFuZCBpdHMgcHJlZml4IGxlbmd0aCAqLworI2lmZGVmIEhBVkVfREhDUDYKKyAgc3RydWN0IGluNl9hZGRyIGFkZHI2OworICBpbnQgaWFpZDsKKyAgc3RydWN0IHNsYWFjX2FkZHJlc3MgeworICAgIHN0cnVjdCBpbjZfYWRkciBhZGRyOworICAgIHRpbWVfdCBwaW5nX3RpbWU7CisgICAgaW50IGJhY2tvZmY7IC8qIHplcm8gLT4gY29uZmlybWVkICovCisgICAgc3RydWN0IHNsYWFjX2FkZHJlc3MgKm5leHQ7CisgIH0gKnNsYWFjX2FkZHJlc3M7CisgIGludCB2ZW5kb3JjbGFzc19jb3VudDsKKyNlbmRpZgorICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbmV4dDsKK307CisKK3N0cnVjdCBkaGNwX25ldGlkIHsKKyAgY2hhciAqbmV0OworICBzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV4dDsKK307CisKK3N0cnVjdCBkaGNwX25ldGlkX2xpc3QgeworICBzdHJ1Y3QgZGhjcF9uZXRpZCAqbGlzdDsKKyAgc3RydWN0IGRoY3BfbmV0aWRfbGlzdCAqbmV4dDsKK307CisKK3N0cnVjdCB0YWdfaWYgeworICBzdHJ1Y3QgZGhjcF9uZXRpZF9saXN0ICpzZXQ7CisgIHN0cnVjdCBkaGNwX25ldGlkICp0YWc7CisgIHN0cnVjdCB0YWdfaWYgKm5leHQ7Cit9OworCitzdHJ1Y3QgaHdhZGRyX2NvbmZpZyB7CisgIGludCBod2FkZHJfbGVuLCBod2FkZHJfdHlwZTsKKyAgdW5zaWduZWQgY2hhciBod2FkZHJbREhDUF9DSEFERFJfTUFYXTsKKyAgdW5zaWduZWQgaW50IHdpbGRjYXJkX21hc2s7CisgIHN0cnVjdCBod2FkZHJfY29uZmlnICpuZXh0OworfTsKKworc3RydWN0IGRoY3BfY29uZmlnIHsKKyAgdW5zaWduZWQgaW50IGZsYWdzOworICBpbnQgY2xpZF9sZW47ICAgICAgICAgIC8qIGxlbmd0aCBvZiBjbGllbnQgaWRlbnRpZmllciAqLworICB1bnNpZ25lZCBjaGFyICpjbGlkOyAgIC8qIGNsaWVudGlkICovCisgIGNoYXIgKmhvc3RuYW1lLCAqZG9tYWluOworICBzdHJ1Y3QgZGhjcF9uZXRpZF9saXN0ICpuZXRpZDsKKyNpZmRlZiBIQVZFX0RIQ1A2CisgIHN0cnVjdCBpbjZfYWRkciBhZGRyNjsKKyNlbmRpZgorICBzdHJ1Y3QgaW5fYWRkciBhZGRyOworICB0aW1lX3QgZGVjbGluZV90aW1lOworICB1bnNpZ25lZCBpbnQgbGVhc2VfdGltZTsKKyAgc3RydWN0IGh3YWRkcl9jb25maWcgKmh3YWRkcjsKKyAgc3RydWN0IGRoY3BfY29uZmlnICpuZXh0OworfTsKKworI2RlZmluZSBoYXZlX2NvbmZpZyhjb25maWcsIG1hc2spICgoY29uZmlnKSAmJiAoKGNvbmZpZyktPmZsYWdzICYgKG1hc2spKSkgCisKKyNkZWZpbmUgQ09ORklHX0RJU0FCTEUgICAgICAgICAgIDEKKyNkZWZpbmUgQ09ORklHX0NMSUQgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ09ORklHX1RJTUUgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ09ORklHX05BTUUgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ09ORklHX0FERFIgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQ09ORklHX05PQ0xJRCAgICAgICAgICAxMjgKKyNkZWZpbmUgQ09ORklHX0ZST01fRVRIRVJTICAgICAyNTYgICAgLyogZW50cnkgY3JlYXRlZCBieSAvZXRjL2V0aGVycyAqLworI2RlZmluZSBDT05GSUdfQUREUl9IT1NUUyAgICAgIDUxMiAgICAvKiBhZGRyZXNzIGFkZGVkIGJ5IGZyb20gL2V0Yy9ob3N0cyAqLworI2RlZmluZSBDT05GSUdfREVDTElORUQgICAgICAgMTAyNCAgICAvKiBhZGRyZXNzIGRlY2xpbmVkIGJ5IGNsaWVudCAqLworI2RlZmluZSBDT05GSUdfQkFOSyAgICAgICAgICAgMjA0OCAgICAvKiBmcm9tIGRoY3AgaG9zdHMgZmlsZSAqLworI2RlZmluZSBDT05GSUdfQUREUjYgICAgICAgICAgNDA5NgorI2RlZmluZSBDT05GSUdfV0lMRENBUkQgICAgICAgODE5MgorCitzdHJ1Y3QgZGhjcF9vcHQgeworICBpbnQgb3B0LCBsZW4sIGZsYWdzOworICB1bmlvbiB7CisgICAgaW50IGVuY2FwOworICAgIHVuc2lnbmVkIGludCB3aWxkY2FyZF9tYXNrOworICAgIHVuc2lnbmVkIGNoYXIgKnZlbmRvcl9jbGFzczsKKyAgfSB1OworICB1bnNpZ25lZCBjaGFyICp2YWw7CisgIHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZDsKKyAgc3RydWN0IGRoY3Bfb3B0ICpuZXh0OworfTsKKworI2RlZmluZSBESE9QVF9BRERSICAgICAgICAgICAgICAgMQorI2RlZmluZSBESE9QVF9TVFJJTkcgICAgICAgICAgICAgMgorI2RlZmluZSBESE9QVF9FTkNBUFNVTEFURSAgICAgICAgNAorI2RlZmluZSBESE9QVF9FTkNBUF9NQVRDSCAgICAgICAgOAorI2RlZmluZSBESE9QVF9GT1JDRSAgICAgICAgICAgICAxNgorI2RlZmluZSBESE9QVF9CQU5LICAgICAgICAgICAgICAzMgorI2RlZmluZSBESE9QVF9FTkNBUF9ET05FICAgICAgICA2NAorI2RlZmluZSBESE9QVF9NQVRDSCAgICAgICAgICAgIDEyOAorI2RlZmluZSBESE9QVF9WRU5ET1IgICAgICAgICAgIDI1NgorI2RlZmluZSBESE9QVF9IRVggICAgICAgICAgICAgIDUxMgorI2RlZmluZSBESE9QVF9WRU5ET1JfTUFUQ0ggICAgMTAyNAorI2RlZmluZSBESE9QVF9SRkMzOTI1ICAgICAgICAgMjA0OAorI2RlZmluZSBESE9QVF9UQUdPSyAgICAgICAgICAgNDA5NgorI2RlZmluZSBESE9QVF9BRERSNiAgICAgICAgICAgODE5MgorCitzdHJ1Y3QgZGhjcF9ib290IHsKKyAgY2hhciAqZmlsZSwgKnNuYW1lLCAqdGZ0cF9zbmFtZTsKKyAgc3RydWN0IGluX2FkZHIgbmV4dF9zZXJ2ZXI7CisgIHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZDsKKyAgc3RydWN0IGRoY3BfYm9vdCAqbmV4dDsKK307CisKK3N0cnVjdCBweGVfc2VydmljZSB7CisgIHVuc2lnbmVkIHNob3J0IENTQSwgdHlwZTsgCisgIGNoYXIgKm1lbnUsICpiYXNlbmFtZSwgKnNuYW1lOworICBzdHJ1Y3QgaW5fYWRkciBzZXJ2ZXI7CisgIHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZDsKKyAgc3RydWN0IHB4ZV9zZXJ2aWNlICpuZXh0OworfTsKKworI2RlZmluZSBNQVRDSF9WRU5ET1IgICAgIDEKKyNkZWZpbmUgTUFUQ0hfVVNFUiAgICAgICAyCisjZGVmaW5lIE1BVENIX0NJUkNVSVQgICAgMworI2RlZmluZSBNQVRDSF9SRU1PVEUgICAgIDQKKyNkZWZpbmUgTUFUQ0hfU1VCU0NSSUJFUiA1CisKKy8qIHZlbmRvcmNsYXNzLCB1c2VyY2xhc3MsIHJlbW90ZS1pZCBvciBjaWN1aXQtaWQgKi8KK3N0cnVjdCBkaGNwX3ZlbmRvciB7CisgIGludCBsZW4sIG1hdGNoX3R5cGU7CisgIHVuc2lnbmVkIGludCBlbnRlcnByaXNlOworICBjaGFyICpkYXRhOworICBzdHJ1Y3QgZGhjcF9uZXRpZCBuZXRpZDsKKyAgc3RydWN0IGRoY3BfdmVuZG9yICpuZXh0OworfTsKKworc3RydWN0IGRoY3BfbWFjIHsKKyAgdW5zaWduZWQgaW50IG1hc2s7CisgIGludCBod2FkZHJfbGVuLCBod2FkZHJfdHlwZTsKKyAgdW5zaWduZWQgY2hhciBod2FkZHJbREhDUF9DSEFERFJfTUFYXTsKKyAgc3RydWN0IGRoY3BfbmV0aWQgbmV0aWQ7CisgIHN0cnVjdCBkaGNwX21hYyAqbmV4dDsKK307CisKK3N0cnVjdCBkaGNwX2JyaWRnZSB7CisgIGNoYXIgaWZhY2VbSUZfTkFNRVNJWkVdOworICBzdHJ1Y3QgZGhjcF9icmlkZ2UgKmFsaWFzLCAqbmV4dDsKK307CisKK3N0cnVjdCBjb25kX2RvbWFpbiB7CisgIGNoYXIgKmRvbWFpbiwgKnByZWZpeDsKKyAgc3RydWN0IGluX2FkZHIgc3RhcnQsIGVuZDsKKyNpZmRlZiBIQVZFX0lQVjYKKyAgc3RydWN0IGluNl9hZGRyIHN0YXJ0NiwgZW5kNjsKKyNlbmRpZgorICBpbnQgaXM2OworICBzdHJ1Y3QgY29uZF9kb21haW4gKm5leHQ7Cit9OyAKKworI2lmZGVmIE9QVElPTjZfUFJFRklYX0NMQVNTIAorc3RydWN0IHByZWZpeF9jbGFzcyB7CisgIGludCBjbGFzczsKKyAgc3RydWN0IGRoY3BfbmV0aWQgdGFnOworICBzdHJ1Y3QgcHJlZml4X2NsYXNzICpuZXh0OworfTsKKyNlbmRpZgorCitzdHJ1Y3QgcmFfaW50ZXJmYWNlIHsKKyAgY2hhciAqbmFtZTsKKyAgaW50IGludGVydmFsLCBsaWZldGltZSwgcHJpbzsKKyAgc3RydWN0IHJhX2ludGVyZmFjZSAqbmV4dDsKK307CisKK3N0cnVjdCBkaGNwX2NvbnRleHQgeworICB1bnNpZ25lZCBpbnQgbGVhc2VfdGltZSwgYWRkcl9lcG9jaDsKKyAgc3RydWN0IGluX2FkZHIgbmV0bWFzaywgYnJvYWRjYXN0OworICBzdHJ1Y3QgaW5fYWRkciBsb2NhbCwgcm91dGVyOworICBzdHJ1Y3QgaW5fYWRkciBzdGFydCwgZW5kOyAvKiByYW5nZSBvZiBhdmFpbGFibGUgYWRkcmVzc2VzICovCisjaWZkZWYgSEFWRV9ESENQNgorICBzdHJ1Y3QgaW42X2FkZHIgc3RhcnQ2LCBlbmQ2OyAvKiByYW5nZSBvZiBhdmFpbGFibGUgYWRkcmVzc2VzICovCisgIHN0cnVjdCBpbjZfYWRkciBsb2NhbDY7CisgIGludCBwcmVmaXgsIGlmX2luZGV4OworICB1bnNpZ25lZCBpbnQgdmFsaWQsIHByZWZlcnJlZCwgc2F2ZWRfdmFsaWQ7CisgIHRpbWVfdCByYV90aW1lLCByYV9zaG9ydF9wZXJpb2Rfc3RhcnQsIGFkZHJlc3NfbG9zdF90aW1lOworICBjaGFyICp0ZW1wbGF0ZV9pbnRlcmZhY2U7CisjZW5kaWYKKyAgaW50IGZsYWdzOworICBzdHJ1Y3QgZGhjcF9uZXRpZCBuZXRpZCwgKmZpbHRlcjsKKyAgc3RydWN0IGRoY3BfY29udGV4dCAqbmV4dCwgKmN1cnJlbnQ7Cit9OworCisjZGVmaW5lIENPTlRFWFRfU1RBVElDICAgICAgICAgKDF1PDwwKQorI2RlZmluZSBDT05URVhUX05FVE1BU0sgICAgICAgICgxdTw8MSkKKyNkZWZpbmUgQ09OVEVYVF9CUkRDQVNUICAgICAgICAoMXU8PDIpCisjZGVmaW5lIENPTlRFWFRfUFJPWFkgICAgICAgICAgKDF1PDwzKQorI2RlZmluZSBDT05URVhUX1JBX1JPVVRFUiAgICAgICgxdTw8NCkKKyNkZWZpbmUgQ09OVEVYVF9SQV9ET05FICAgICAgICAoMXU8PDUpCisjZGVmaW5lIENPTlRFWFRfUkFfTkFNRSAgICAgICAgKDF1PDw2KQorI2RlZmluZSBDT05URVhUX1JBX1NUQVRFTEVTUyAgICgxdTw8NykKKyNkZWZpbmUgQ09OVEVYVF9ESENQICAgICAgICAgICAoMXU8PDgpCisjZGVmaW5lIENPTlRFWFRfREVQUkVDQVRFICAgICAgKDF1PDw5KQorI2RlZmluZSBDT05URVhUX1RFTVBMQVRFICAgICAgICgxdTw8MTApICAgIC8qIGNyZWF0ZSBjb250ZXh0cyB1c2luZyBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgQ09OVEVYVF9DT05TVFJVQ1RFRCAgICAoMXU8PDExKQorI2RlZmluZSBDT05URVhUX0dDICAgICAgICAgICAgICgxdTw8MTIpCisjZGVmaW5lIENPTlRFWFRfUkEgICAgICAgICAgICAgKDF1PDwxMykKKyNkZWZpbmUgQ09OVEVYVF9DT05GX1VTRUQgICAgICAoMXU8PDE0KQorI2RlZmluZSBDT05URVhUX1VTRUQgICAgICAgICAgICgxdTw8MTUpCisjZGVmaW5lIENPTlRFWFRfT0xEICAgICAgICAgICAgKDF1PDwxNikKKyNkZWZpbmUgQ09OVEVYVF9WNiAgICAgICAgICAgICAoMXU8PDE3KQorCitzdHJ1Y3QgcGluZ19yZXN1bHQgeworICBzdHJ1Y3QgaW5fYWRkciBhZGRyOworICB0aW1lX3QgdGltZTsKKyAgdW5zaWduZWQgaW50IGhhc2g7CisgIHN0cnVjdCBwaW5nX3Jlc3VsdCAqbmV4dDsKK307CisKK3N0cnVjdCB0ZnRwX2ZpbGUgeworICBpbnQgcmVmY291bnQsIGZkOworICBvZmZfdCBzaXplOworICBkZXZfdCBkZXY7CisgIGlub190IGlub2RlOworICBjaGFyIGZpbGVuYW1lW107Cit9OworCitzdHJ1Y3QgdGZ0cF90cmFuc2ZlciB7CisgIGludCBzb2NrZmQ7CisgIHRpbWVfdCB0aW1lb3V0OworICBpbnQgYmFja29mZjsKKyAgdW5zaWduZWQgaW50IGJsb2NrLCBibG9ja3NpemUsIGV4cGFuc2lvbjsKKyAgb2ZmX3Qgb2Zmc2V0OworICB1bmlvbiBteXNvY2thZGRyIHBlZXI7CisgIGNoYXIgb3B0X2Jsb2Nrc2l6ZSwgb3B0X3RyYW5zaXplLCBuZXRhc2NpaSwgY2FycnlsZjsKKyAgc3RydWN0IHRmdHBfZmlsZSAqZmlsZTsKKyAgc3RydWN0IHRmdHBfdHJhbnNmZXIgKm5leHQ7Cit9OworCitzdHJ1Y3QgYWRkcl9saXN0IHsKKyAgc3RydWN0IGluX2FkZHIgYWRkcjsKKyAgc3RydWN0IGFkZHJfbGlzdCAqbmV4dDsKK307CisKK3N0cnVjdCB0ZnRwX3ByZWZpeCB7CisgIGNoYXIgKmludGVyZmFjZTsKKyAgY2hhciAqcHJlZml4OworICBzdHJ1Y3QgdGZ0cF9wcmVmaXggKm5leHQ7Cit9OworCitzdHJ1Y3QgZGhjcF9yZWxheSB7CisgIHN0cnVjdCBhbGxfYWRkciBsb2NhbCwgc2VydmVyOworICBjaGFyICppbnRlcmZhY2U7IC8qIEFsbG93YWJsZSBpbnRlcmZhY2UgZm9yIHJlcGxpZXMgZnJvbSBzZXJ2ZXIsIGFuZCBkZXN0IGZvciBJUHY2IG11bHRpY2FzdCAqLworICBpbnQgaWZhY2VfaW5kZXg7IC8qIHdvcmtpbmcgLSBpbnRlcmZhY2UgaW4gd2hpY2ggcmVxdWVzdHMgYXJyaXZlZCwgZm9yIHJldHVybiAqLworICBzdHJ1Y3QgZGhjcF9yZWxheSAqY3VycmVudCwgKm5leHQ7Cit9OworCitleHRlcm4gc3RydWN0IGRhZW1vbiB7CisgIC8qIGRhdGFzdHVjdHVyZXMgcmVwcmVzZW50aW5nIHRoZSBjb21tYW5kLWxpbmUgYW5kIAorICAgICBjb25maWcgZmlsZSBhcmd1bWVudHMuIEFsbCBzZXQgKGluY2x1ZGluZyBkZWZhdWx0cykKKyAgICAgaW4gb3B0aW9uLmMgKi8KKworICB1bnNpZ25lZCBpbnQgb3B0aW9ucywgb3B0aW9uczI7CisgIHN0cnVjdCByZXNvbHZjIGRlZmF1bHRfcmVzb2x2LCAqcmVzb2x2X2ZpbGVzOworICB0aW1lX3QgbGFzdF9yZXNvbHY7CisgIGNoYXIgKnNlcnZlcnNfZmlsZTsKKyAgc3RydWN0IG14X3Nydl9yZWNvcmQgKm14bmFtZXM7CisgIHN0cnVjdCBuYXB0ciAqbmFwdHI7CisgIHN0cnVjdCB0eHRfcmVjb3JkICp0eHQsICpycjsKKyAgc3RydWN0IHB0cl9yZWNvcmQgKnB0cjsKKyAgc3RydWN0IGhvc3RfcmVjb3JkICpob3N0X3JlY29yZHMsICpob3N0X3JlY29yZHNfdGFpbDsKKyAgc3RydWN0IGNuYW1lICpjbmFtZXM7CisgIHN0cnVjdCBhdXRoX3pvbmUgKmF1dGhfem9uZXM7CisgIHN0cnVjdCBpbnRlcmZhY2VfbmFtZSAqaW50X25hbWVzOworICBjaGFyICpteHRhcmdldDsKKyAgaW50IGFkZHI0X25ldG1hc2s7CisgIGludCBhZGRyNl9uZXRtYXNrOworICBjaGFyICpsZWFzZV9maWxlOyAKKyAgY2hhciAqdXNlcm5hbWUsICpncm91cG5hbWUsICpzY3JpcHR1c2VyOworICBjaGFyICpsdWFzY3JpcHQ7CisgIGNoYXIgKmF1dGhzZXJ2ZXIsICpob3N0bWFzdGVyOworICBzdHJ1Y3QgaW5hbWUgKmF1dGhpbnRlcmZhY2U7CisgIHN0cnVjdCBuYW1lX2xpc3QgKnNlY29uZGFyeV9mb3J3YXJkX3NlcnZlcjsKKyAgaW50IGdyb3VwX3NldCwgb3Nwb3J0OworICBjaGFyICpkb21haW5fc3VmZml4OworICBzdHJ1Y3QgY29uZF9kb21haW4gKmNvbmRfZG9tYWluLCAqc3ludGhfZG9tYWluczsKKyAgY2hhciAqcnVuZmlsZTsgCisgIGNoYXIgKmxlYXNlX2NoYW5nZV9jb21tYW5kOworICBzdHJ1Y3QgaW5hbWUgKmlmX25hbWVzLCAqaWZfYWRkcnMsICppZl9leGNlcHQsICpkaGNwX2V4Y2VwdCwgKmF1dGhfcGVlcnMsICp0ZnRwX2ludGVyZmFjZXM7CisgIHN0cnVjdCBib2d1c19hZGRyICpib2d1c19hZGRyLCAqaWdub3JlX2FkZHI7CisgIHN0cnVjdCBzZXJ2ZXIgKnNlcnZlcnM7CisgIHN0cnVjdCBpcHNldHMgKmlwc2V0czsKKyAgaW50IGxvZ19mYWM7IC8qIGxvZyBmYWNpbGl0eSAqLworICBjaGFyICpsb2dfZmlsZTsgLyogb3B0aW9uYWwgbG9nIGZpbGUgKi8KKyAgaW50IG1heF9sb2dzOyAgLyogcXVldWUgbGltaXQgKi8KKyAgaW50IGNhY2hlc2l6ZSwgZnRhYnNpemU7CisgIGludCBwb3J0LCBxdWVyeV9wb3J0LCBtaW5fcG9ydDsKKyAgdW5zaWduZWQgbG9uZyBsb2NhbF90dGwsIG5lZ190dGwsIG1heF90dGwsIG1pbl9jYWNoZV90dGwsIG1heF9jYWNoZV90dGwsIGF1dGhfdHRsOworICBzdHJ1Y3QgaG9zdHNmaWxlICphZGRuX2hvc3RzOworICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICpkaGNwLCAqZGhjcDY7CisgIHN0cnVjdCByYV9pbnRlcmZhY2UgKnJhX2ludGVyZmFjZXM7CisgIHN0cnVjdCBkaGNwX2NvbmZpZyAqZGhjcF9jb25mOworICBzdHJ1Y3QgZGhjcF9vcHQgKmRoY3Bfb3B0cywgKmRoY3BfbWF0Y2gsICpkaGNwX29wdHM2LCAqZGhjcF9tYXRjaDY7CisgIHN0cnVjdCBkaGNwX3ZlbmRvciAqZGhjcF92ZW5kb3JzOworICBzdHJ1Y3QgZGhjcF9tYWMgKmRoY3BfbWFjczsKKyAgc3RydWN0IGRoY3BfYm9vdCAqYm9vdF9jb25maWc7CisgIHN0cnVjdCBweGVfc2VydmljZSAqcHhlX3NlcnZpY2VzOworICBzdHJ1Y3QgdGFnX2lmICp0YWdfaWY7IAorICBzdHJ1Y3QgYWRkcl9saXN0ICpvdmVycmlkZV9yZWxheXM7CisgIHN0cnVjdCBkaGNwX3JlbGF5ICpyZWxheTQsICpyZWxheTY7CisgIGludCBvdmVycmlkZTsKKyAgaW50IGVuYWJsZV9weGU7CisgIGludCBkb2luZ19yYSwgZG9pbmdfZGhjcDY7CisgIHN0cnVjdCBkaGNwX25ldGlkX2xpc3QgKmRoY3BfaWdub3JlLCAqZGhjcF9pZ25vcmVfbmFtZXMsICpkaGNwX2dlbl9uYW1lczsgCisgIHN0cnVjdCBkaGNwX25ldGlkX2xpc3QgKmZvcmNlX2Jyb2FkY2FzdCwgKmJvb3RwX2R5bmFtaWM7CisgIHN0cnVjdCBob3N0c2ZpbGUgKmRoY3BfaG9zdHNfZmlsZSwgKmRoY3Bfb3B0c19maWxlOworICBpbnQgZGhjcF9tYXgsIHRmdHBfbWF4OworICBpbnQgZGhjcF9zZXJ2ZXJfcG9ydCwgZGhjcF9jbGllbnRfcG9ydDsKKyAgaW50IHN0YXJ0X3RmdHBfcG9ydCwgZW5kX3RmdHBfcG9ydDsgCisgIHVuc2lnbmVkIGludCBtaW5fbGVhc2V0aW1lOworICBzdHJ1Y3QgZG9jdG9yICpkb2N0b3JzOworICB1bnNpZ25lZCBzaG9ydCBlZG5zX3BrdHN6OworICBjaGFyICp0ZnRwX3ByZWZpeDsgCisgIHN0cnVjdCB0ZnRwX3ByZWZpeCAqaWZfcHJlZml4OyAvKiBwZXItaW50ZXJmYWNlIFRGVFAgcHJlZml4ZXMgKi8KKyAgdW5zaWduZWQgaW50IGR1aWRfZW50ZXJwcmlzZSwgZHVpZF9jb25maWdfbGVuOworICB1bnNpZ25lZCBjaGFyICpkdWlkX2NvbmZpZzsKKyAgY2hhciAqZGJ1c19uYW1lOworICB1bnNpZ25lZCBsb25nIHNvYV9zbiwgc29hX3JlZnJlc2gsIHNvYV9yZXRyeSwgc29hX2V4cGlyeTsKKyNpZmRlZiBPUFRJT042X1BSRUZJWF9DTEFTUyAKKyAgc3RydWN0IHByZWZpeF9jbGFzcyAqcHJlZml4X2NsYXNzZXM7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0ROU1NFQworICBzdHJ1Y3QgZHNfY29uZmlnICpkczsKKyNlbmRpZgorCisgIC8qIGdsb2JhbGx5IHVzZWQgc3R1ZmYgZm9yIEROUyAqLworICBjaGFyICpwYWNrZXQ7IC8qIHBhY2tldCBidWZmZXIgKi8KKyAgaW50IHBhY2tldF9idWZmX3N6OyAvKiBzaXplIG9mIGFib3ZlICovCisgIGNoYXIgKm5hbWVidWZmOyAvKiBNQVhETkFNRSBzaXplIGJ1ZmZlciAqLworI2lmZGVmIEhBVkVfRE5TU0VDCisgIGNoYXIgKmtleW5hbWU7IC8qIE1BWEROQU1FIHNpemUgYnVmZmVyICovCisgIGNoYXIgKndvcmtzcGFjZW5hbWU7IC8qIGRpdHRvICovCisjZW5kaWYKKyAgdW5zaWduZWQgaW50IGxvY2FsX2Fuc3dlciwgcXVlcmllc19mb3J3YXJkZWQsIGF1dGhfYW5zd2VyOworICBzdHJ1Y3QgZnJlYyAqZnJlY19saXN0OworICBzdHJ1Y3Qgc2VydmVyZmQgKnNmZHM7CisgIHN0cnVjdCBpcmVjICppbnRlcmZhY2VzOworICBzdHJ1Y3QgbGlzdGVuZXIgKmxpc3RlbmVyczsKKyAgc3RydWN0IHNlcnZlciAqbGFzdF9zZXJ2ZXI7CisgIHRpbWVfdCBmb3J3YXJkdGltZTsKKyAgaW50IGZvcndhcmRjb3VudDsKKyAgc3RydWN0IHNlcnZlciAqc3J2X3NhdmU7IC8qIFVzZWQgZm9yIHJlc2VuZCBvbiBEb0QgKi8KKyAgc2l6ZV90IHBhY2tldF9sZW47ICAgICAgIC8qICAgICAgIiAgICAgICAgIiAgICAgICAgKi8KKyAgc3RydWN0IHJhbmRmZCAqcmZkX3NhdmU7IC8qICAgICAgIiAgICAgICAgIiAgICAgICAgKi8KKyAgcGlkX3QgdGNwX3BpZHNbTUFYX1BST0NTXTsKKyAgc3RydWN0IHJhbmRmZCByYW5kb21zb2Nrc1tSQU5ET01fU09DS1NdOworICBpbnQgdjZwa3RpbmZvOyAKKyAgc3RydWN0IGFkZHJsaXN0ICppbnRlcmZhY2VfYWRkcnM7IC8qIGxpc3Qgb2YgYWxsIGFkZHJlc3Nlcy9wcmVmaXggbGVuZ3RocyBhc3NvY2lhdGVkIHdpdGggYWxsIGxvY2FsIGludGVyZmFjZXMgKi8KKyAgaW50IGxvZ19pZCwgbG9nX2Rpc3BsYXlfaWQ7IC8qIGlkcyBvZiB0cmFuc2FjdGlvbnMgZm9yIGxvZ2dpbmcgKi8KKyAgdW5pb24gbXlzb2NrYWRkciAqbG9nX3NvdXJjZV9hZGRyOworCisgIC8qIERIQ1Agc3RhdGUgKi8KKyAgaW50IGRoY3BmZCwgaGVscGVyZmQsIHB4ZWZkOyAKKyNpZiBkZWZpbmVkKEhBVkVfTElOVVhfTkVUV09SSykKKyAgaW50IG5ldGxpbmtmZCwgaW5vdGlmeWZkOworI2VsaWYgZGVmaW5lZChIQVZFX0JTRF9ORVRXT1JLKQorICBpbnQgZGhjcF9yYXdfZmQsIGRoY3BfaWNtcF9mZCwgcm91dGVmZDsKKyNlbmRpZgorICBzdHJ1Y3QgaW92ZWMgZGhjcF9wYWNrZXQ7CisgIGNoYXIgKmRoY3BfYnVmZiwgKmRoY3BfYnVmZjIsICpkaGNwX2J1ZmYzOworICBzdHJ1Y3QgcGluZ19yZXN1bHQgKnBpbmdfcmVzdWx0czsKKyAgRklMRSAqbGVhc2Vfc3RyZWFtOworICBzdHJ1Y3QgZGhjcF9icmlkZ2UgKmJyaWRnZXM7CisjaWZkZWYgSEFWRV9ESENQNgorICBpbnQgZHVpZF9sZW47CisgIHVuc2lnbmVkIGNoYXIgKmR1aWQ7CisgIHN0cnVjdCBpb3ZlYyBvdXRwYWNrZXQ7CisgIGludCBkaGNwNmZkLCBpY21wNmZkOworI2VuZGlmCisgIC8qIERCdXMgc3R1ZmYgKi8KKyAgLyogdm9pZCAqIGhlcmUgdG8gYXZvaWQgZGVwZW5kaW5nIG9uIGRidXMgaGVhZGVycyBvdXRzaWRlIGRidXMuYyAqLworICB2b2lkICpkYnVzOworI2lmZGVmIEhBVkVfREJVUworICBzdHJ1Y3Qgd2F0Y2ggKndhdGNoZXM7CisjZW5kaWYKKworICAvKiBURlRQIHN0dWZmICovCisgIHN0cnVjdCB0ZnRwX3RyYW5zZmVyICp0ZnRwX3RyYW5zLCAqdGZ0cF9kb25lX3RyYW5zOworCisgIC8qIHV0aWxpdHkgc3RyaW5nIGJ1ZmZlciwgaG9sZCBtYXggc2l6ZWQgSVAgYWRkcmVzcyBhcyBzdHJpbmcgKi8KKyAgY2hhciAqYWRkcmJ1ZmY7CisgIGNoYXIgKmFkZHJidWZmMjsgLyogb25seSBhbGxvY2F0ZWQgd2hlbiBPUFRfRVhUUkFMT0cgKi8KKworfSAqZGFlbW9uOworCisvKiBjYWNoZS5jICovCit2b2lkIGNhY2hlX2luaXQodm9pZCk7Cit2b2lkIGxvZ19xdWVyeSh1bnNpZ25lZCBpbnQgZmxhZ3MsIGNoYXIgKm5hbWUsIHN0cnVjdCBhbGxfYWRkciAqYWRkciwgY2hhciAqYXJnKTsgCitjaGFyICpyZWNvcmRfc291cmNlKHVuc2lnbmVkIGludCBpbmRleCk7CitjaGFyICpxdWVyeXN0cihjaGFyICpkZXNjLCB1bnNpZ25lZCBzaG9ydCB0eXBlKTsKK3N0cnVjdCBjcmVjICpjYWNoZV9maW5kX2J5X2FkZHIoc3RydWN0IGNyZWMgKmNyZWNwLAorCQkJCXN0cnVjdCBhbGxfYWRkciAqYWRkciwgdGltZV90IG5vdywgCisJCQkJdW5zaWduZWQgaW50IHByb3QpOworc3RydWN0IGNyZWMgKmNhY2hlX2ZpbmRfYnlfbmFtZShzdHJ1Y3QgY3JlYyAqY3JlY3AsIAorCQkJCWNoYXIgKm5hbWUsIHRpbWVfdCBub3csIHVuc2lnbmVkIGludCBwcm90KTsKK3ZvaWQgY2FjaGVfZW5kX2luc2VydCh2b2lkKTsKK3ZvaWQgY2FjaGVfc3RhcnRfaW5zZXJ0KHZvaWQpOworc3RydWN0IGNyZWMgKmNhY2hlX2luc2VydChjaGFyICpuYW1lLCBzdHJ1Y3QgYWxsX2FkZHIgKmFkZHIsCisJCQkgIHRpbWVfdCBub3csIHVuc2lnbmVkIGxvbmcgdHRsLCB1bnNpZ25lZCBzaG9ydCBmbGFncyk7Cit2b2lkIGNhY2hlX3JlbG9hZCh2b2lkKTsKK3ZvaWQgY2FjaGVfYWRkX2RoY3BfZW50cnkoY2hhciAqaG9zdF9uYW1lLCBpbnQgcHJvdCwgc3RydWN0IGFsbF9hZGRyICpob3N0X2FkZHJlc3MsIHRpbWVfdCB0dGQpOworc3RydWN0IGluX2FkZHIgYV9yZWNvcmRfZnJvbV9ob3N0cyhjaGFyICpuYW1lLCB0aW1lX3Qgbm93KTsKK3ZvaWQgY2FjaGVfdW5oYXNoX2RoY3Aodm9pZCk7Cit2b2lkIGR1bXBfY2FjaGUodGltZV90IG5vdyk7CitpbnQgY2FjaGVfbWFrZV9zdGF0KHN0cnVjdCB0eHRfcmVjb3JkICp0KTsKK2NoYXIgKmNhY2hlX2dldF9uYW1lKHN0cnVjdCBjcmVjICpjcmVjcCk7CitjaGFyICpjYWNoZV9nZXRfY25hbWVfdGFyZ2V0KHN0cnVjdCBjcmVjICpjcmVjcCk7CitzdHJ1Y3QgY3JlYyAqY2FjaGVfZW51bWVyYXRlKGludCBpbml0KTsKKworLyogYmxvY2tkYXRhLmMgKi8KKyNpZmRlZiBIQVZFX0ROU1NFQwordm9pZCBibG9ja2RhdGFfaW5pdCh2b2lkKTsKK3ZvaWQgYmxvY2tkYXRhX3JlcG9ydCh2b2lkKTsKK3N0cnVjdCBibG9ja2RhdGEgKmJsb2NrZGF0YV9hbGxvYyhjaGFyICpkYXRhLCBzaXplX3QgbGVuKTsKK3ZvaWQgKmJsb2NrZGF0YV9yZXRyaWV2ZShzdHJ1Y3QgYmxvY2tkYXRhICpibG9jaywgc2l6ZV90IGxlbiwgdm9pZCAqZGF0YSk7Cit2b2lkIGJsb2NrZGF0YV9mcmVlKHN0cnVjdCBibG9ja2RhdGEgKmJsb2Nrcyk7CisjZW5kaWYKKworLyogZG9tYWluLmMgKi8KK2NoYXIgKmdldF9kb21haW4oc3RydWN0IGluX2FkZHIgYWRkcik7CisjaWZkZWYgSEFWRV9JUFY2CitjaGFyICpnZXRfZG9tYWluNihzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOworI2VuZGlmCitpbnQgaXNfbmFtZV9zeW50aGV0aWMoaW50IGZsYWdzLCBjaGFyICpuYW1lLCBzdHJ1Y3QgYWxsX2FkZHIgKmFkZHIpOworaW50IGlzX3Jldl9zeW50aChpbnQgZmxhZywgc3RydWN0IGFsbF9hZGRyICphZGRyLCBjaGFyICpuYW1lKTsKKworLyogcmZjMTAzNS5jICovCitpbnQgZXh0cmFjdF9uYW1lKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuLCB1bnNpZ25lZCBjaGFyICoqcHAsIAorICAgICAgICAgICAgICAgICBjaGFyICpuYW1lLCBpbnQgaXNFeHRyYWN0LCBpbnQgZXh0cmFieXRlcyk7Cit1bnNpZ25lZCBjaGFyICpza2lwX25hbWUodW5zaWduZWQgY2hhciAqYW5zcCwgc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIGludCBleHRyYWJ5dGVzKTsKK3Vuc2lnbmVkIGNoYXIgKnNraXBfcXVlc3Rpb25zKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuKTsKK3Vuc2lnbmVkIGNoYXIgKnNraXBfc2VjdGlvbih1bnNpZ25lZCBjaGFyICphbnNwLCBpbnQgY291bnQsIHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuKTsKK3Vuc2lnbmVkIGludCBleHRyYWN0X3JlcXVlc3Qoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHFsZW4sIAorCQkJICAgICAgIGNoYXIgKm5hbWUsIHVuc2lnbmVkIHNob3J0ICp0eXBlcCk7CitzaXplX3Qgc2V0dXBfcmVwbHkoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90ICBxbGVuLAorCQkgICBzdHJ1Y3QgYWxsX2FkZHIgKmFkZHJwLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCSAgIHVuc2lnbmVkIGxvbmcgbG9jYWxfdHRsKTsKK2ludCBleHRyYWN0X2FkZHJlc3NlcyhzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcWxlbiwgY2hhciAqbmFtZWJ1ZmYsIAorCQkgICAgICB0aW1lX3Qgbm93LCBjaGFyICoqaXBzZXRzLCBpbnQgaXNfc2lnbiwgaW50IGNoZWNrcmViaW5kLAorCQkgICAgICBpbnQgbm9fY2FjaGUsIGludCBzZWN1cmUsIGludCAqZG9jdG9yZWQpOworc2l6ZV90IGFuc3dlcl9yZXF1ZXN0KHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIGNoYXIgKmxpbWl0LCBzaXplX3QgcWxlbiwgIAorCQkgICAgICBzdHJ1Y3QgaW5fYWRkciBsb2NhbF9hZGRyLCBzdHJ1Y3QgaW5fYWRkciBsb2NhbF9uZXRtYXNrLCAKKwkJICAgICAgdGltZV90IG5vdywgaW50ICphZF9yZXFkLCBpbnQgKmRvX2JpdCk7CitpbnQgY2hlY2tfZm9yX2JvZ3VzX3dpbGRjYXJkKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBxbGVuLCBjaGFyICpuYW1lLCAKKwkJCSAgICAgc3RydWN0IGJvZ3VzX2FkZHIgKmFkZHIsIHRpbWVfdCBub3cpOworaW50IGNoZWNrX2Zvcl9pZ25vcmVkX2FkZHJlc3Moc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHFsZW4sIHN0cnVjdCBib2d1c19hZGRyICpiYWRkcik7Cit1bnNpZ25lZCBjaGFyICpmaW5kX3BzZXVkb2hlYWRlcihzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwKKwkJCQkgc2l6ZV90ICpsZW4sIHVuc2lnbmVkIGNoYXIgKipwLCBpbnQgKmlzX3NpZ24pOworaW50IGNoZWNrX2Zvcl9sb2NhbF9kb21haW4oY2hhciAqbmFtZSwgdGltZV90IG5vdyk7Cit1bnNpZ25lZCBpbnQgcXVlc3Rpb25zX2NyYyhzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgY2hhciAqYnVmZik7CitzaXplX3QgcmVzaXplX3BhY2tldChzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgCisJCSAgdW5zaWduZWQgY2hhciAqcGhlYWRlciwgc2l6ZV90IGhsZW4pOworc2l6ZV90IGFkZF9tYWMoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIGNoYXIgKmxpbWl0LCB1bmlvbiBteXNvY2thZGRyICpsMyk7CitzaXplX3QgYWRkX3NvdXJjZV9hZGRyKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuLCBjaGFyICpsaW1pdCwgdW5pb24gbXlzb2NrYWRkciAqc291cmNlKTsKKyNpZmRlZiBIQVZFX0ROU1NFQworc2l6ZV90IGFkZF9kb19iaXQoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIGNoYXIgKmxpbWl0KTsKKyNlbmRpZgoraW50IGNoZWNrX3NvdXJjZShzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgdW5zaWduZWQgY2hhciAqcHNldWRvaGVhZGVyLCB1bmlvbiBteXNvY2thZGRyICpwZWVyKTsKK2ludCBhZGRfcmVzb3VyY2VfcmVjb3JkKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIGNoYXIgKmxpbWl0LCBpbnQgKnRydW5jcCwKKwkJCWludCBuYW1lb2Zmc2V0LCB1bnNpZ25lZCBjaGFyICoqcHAsIHVuc2lnbmVkIGxvbmcgdHRsLCAKKwkJCWludCAqb2Zmc2V0LCB1bnNpZ25lZCBzaG9ydCB0eXBlLCB1bnNpZ25lZCBzaG9ydCBjbGFzcywgY2hhciAqZm9ybWF0LCAuLi4pOwordW5zaWduZWQgY2hhciAqc2tpcF9xdWVzdGlvbnMoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4pOworaW50IGV4dHJhY3RfbmFtZShzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgdW5zaWduZWQgY2hhciAqKnBwLCAKKwkJIGNoYXIgKm5hbWUsIGludCBpc0V4dHJhY3QsIGludCBleHRyYWJ5dGVzKTsKK2ludCBpbl9hcnBhX25hbWVfMl9hZGRyKGNoYXIgKm5hbWVpbiwgc3RydWN0IGFsbF9hZGRyICphZGRycCk7CitpbnQgcHJpdmF0ZV9uZXQoc3RydWN0IGluX2FkZHIgYWRkciwgaW50IGJhbl9sb2NhbGhvc3QpOworCisvKiBhdXRoLmMgKi8KKyNpZmRlZiBIQVZFX0FVVEgKK3NpemVfdCBhbnN3ZXJfYXV0aChzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBjaGFyICpsaW1pdCwgc2l6ZV90IHFsZW4sIAorCQkgICB0aW1lX3Qgbm93LCB1bmlvbiBteXNvY2thZGRyICpwZWVyX2FkZHIsIGludCBsb2NhbF9xdWVyeSk7CitpbnQgaW5fem9uZShzdHJ1Y3QgYXV0aF96b25lICp6b25lLCBjaGFyICpuYW1lLCBjaGFyICoqY3V0KTsKKyNlbmRpZgorCisvKiBkbnNzZWMuYyAqLworc2l6ZV90IGRuc3NlY19nZW5lcmF0ZV9xdWVyeShzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBjaGFyICplbmQsIGNoYXIgKm5hbWUsIGludCBjbGFzcywgaW50IHR5cGUsIHVuaW9uIG15c29ja2FkZHIgKmFkZHIpOworaW50IGRuc3NlY192YWxpZGF0ZV9ieV9kcyh0aW1lX3Qgbm93LCBzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgbiwgY2hhciAqbmFtZSwgY2hhciAqa2V5bmFtZSwgaW50IGNsYXNzKTsKK2ludCBkbnNzZWNfdmFsaWRhdGVfZHModGltZV90IG5vdywgc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIGNoYXIgKm5hbWUsIGNoYXIgKmtleW5hbWUsIGludCBjbGFzcyk7CitpbnQgZG5zc2VjX3ZhbGlkYXRlX3JlcGx5KHRpbWVfdCBub3csIHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuLCBjaGFyICpuYW1lLCBjaGFyICprZXluYW1lLCBpbnQgKmNsYXNzLCBpbnQgKm5lZ2Fuc3dlciwgaW50ICpub25zKTsKK2ludCBkbnNzZWNfY2hhc2VfY25hbWUodGltZV90IG5vdywgc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIGNoYXIgKm5hbWUsIGNoYXIgKmtleW5hbWUpOworaW50IGRuc2tleV9rZXl0YWcoaW50IGFsZywgaW50IGZsYWdzLCB1bnNpZ25lZCBjaGFyICpyZGF0YSwgaW50IHJkbGVuKTsKK3NpemVfdCBmaWx0ZXJfcnJzaWdzKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuKTsKK3Vuc2lnbmVkIGNoYXIqIGhhc2hfcXVlc3Rpb25zKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuLCBjaGFyICpuYW1lKTsKKworLyogdXRpbC5jICovCit2b2lkIHJhbmRfaW5pdCh2b2lkKTsKK3Vuc2lnbmVkIHNob3J0IHJhbmQxNih2b2lkKTsKK3UzMiByYW5kMzIodm9pZCk7Cit1NjQgcmFuZDY0KHZvaWQpOworaW50IGxlZ2FsX2hvc3RuYW1lKGNoYXIgKmMpOworY2hhciAqY2Fub25pY2FsaXNlKGNoYXIgKnMsIGludCAqbm9tZW0pOwordW5zaWduZWQgY2hhciAqZG9fcmZjMTAzNV9uYW1lKHVuc2lnbmVkIGNoYXIgKnAsIGNoYXIgKnN2YWwpOwordm9pZCAqc2FmZV9tYWxsb2Moc2l6ZV90IHNpemUpOwordm9pZCBzYWZlX3BpcGUoaW50ICpmZCwgaW50IHJlYWRfbm9ibG9jayk7Cit2b2lkICp3aGluZV9tYWxsb2Moc2l6ZV90IHNpemUpOworaW50IHNhX2xlbih1bmlvbiBteXNvY2thZGRyICphZGRyKTsKK2ludCBzb2NrYWRkcl9pc2VxdWFsKHVuaW9uIG15c29ja2FkZHIgKnMxLCB1bmlvbiBteXNvY2thZGRyICpzMik7CitpbnQgaG9zdG5hbWVfaXNlcXVhbChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKTsKK3RpbWVfdCBkbnNtYXNxX3RpbWUodm9pZCk7CitpbnQgbmV0bWFza19sZW5ndGgoc3RydWN0IGluX2FkZHIgbWFzayk7CitpbnQgaXNfc2FtZV9uZXQoc3RydWN0IGluX2FkZHIgYSwgc3RydWN0IGluX2FkZHIgYiwgc3RydWN0IGluX2FkZHIgbWFzayk7CisjaWZkZWYgSEFWRV9JUFY2CitpbnQgaXNfc2FtZV9uZXQ2KHN0cnVjdCBpbjZfYWRkciAqYSwgc3RydWN0IGluNl9hZGRyICpiLCBpbnQgcHJlZml4bGVuKTsKK3U2NCBhZGRyNnBhcnQoc3RydWN0IGluNl9hZGRyICphZGRyKTsKK3ZvaWQgc2V0YWRkcjZwYXJ0KHN0cnVjdCBpbjZfYWRkciAqYWRkciwgdTY0IGhvc3QpOworI2VuZGlmCitpbnQgcmV0cnlfc2VuZCh2b2lkKTsKK3ZvaWQgcHJldHR5cHJpbnRfdGltZShjaGFyICpidWYsIHVuc2lnbmVkIGludCB0KTsKK2ludCBwcmV0dHlwcmludF9hZGRyKHVuaW9uIG15c29ja2FkZHIgKmFkZHIsIGNoYXIgKmJ1Zik7CitpbnQgcGFyc2VfaGV4KGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsIGludCBtYXhsZW4sIAorCSAgICAgIHVuc2lnbmVkIGludCAqd2lsZGNhcmRfbWFzaywgaW50ICptYWNfdHlwZSk7CitpbnQgbWVtY21wX21hc2tlZCh1bnNpZ25lZCBjaGFyICphLCB1bnNpZ25lZCBjaGFyICpiLCBpbnQgbGVuLCAKKwkJICB1bnNpZ25lZCBpbnQgbWFzayk7CitpbnQgZXhwYW5kX2J1ZihzdHJ1Y3QgaW92ZWMgKmlvdiwgc2l6ZV90IHNpemUpOworY2hhciAqcHJpbnRfbWFjKGNoYXIgKmJ1ZmYsIHVuc2lnbmVkIGNoYXIgKm1hYywgaW50IGxlbik7Cit2b2lkIGJ1bXBfbWF4ZmQoaW50IGZkLCBpbnQgKm1heCk7CitpbnQgcmVhZF93cml0ZShpbnQgZmQsIHVuc2lnbmVkIGNoYXIgKnBhY2tldCwgaW50IHNpemUsIGludCBydyk7CisKK2ludCB3aWxkY2FyZF9tYXRjaChjb25zdCBjaGFyKiB3aWxkY2FyZCwgY29uc3QgY2hhciogbWF0Y2gpOworaW50IHdpbGRjYXJkX21hdGNobihjb25zdCBjaGFyKiB3aWxkY2FyZCwgY29uc3QgY2hhciogbWF0Y2gsIGludCBudW0pOworCisvKiBsb2cuYyAqLwordm9pZCBkaWUoY2hhciAqbWVzc2FnZSwgY2hhciAqYXJnMSwgaW50IGV4aXRfY29kZSk7CitpbnQgbG9nX3N0YXJ0KHN0cnVjdCBwYXNzd2QgKmVudF9wdywgaW50IGVycmZkKTsKK2ludCBsb2dfcmVvcGVuKGNoYXIgKmxvZ19maWxlKTsKK3ZvaWQgbXlfc3lzbG9nKGludCBwcmlvcml0eSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwordm9pZCBzZXRfbG9nX3dyaXRlcihmZF9zZXQgKnNldCwgaW50ICptYXhmZHApOwordm9pZCBjaGVja19sb2dfd3JpdGVyKGZkX3NldCAqc2V0KTsKK3ZvaWQgZmx1c2hfbG9nKHZvaWQpOworCisvKiBvcHRpb24uYyAqLwordm9pZCByZWFkX29wdHMgKGludCBhcmdjLCBjaGFyICoqYXJndiwgY2hhciAqY29tcGlsZV9vcHRzKTsKK2NoYXIgKm9wdGlvbl9zdHJpbmcoaW50IHByb3QsIHVuc2lnbmVkIGludCBvcHQsIHVuc2lnbmVkIGNoYXIgKnZhbCwgCisJCSAgICBpbnQgb3B0X2xlbiwgY2hhciAqYnVmLCBpbnQgYnVmX2xlbik7Cit2b2lkIHJlcmVhZF9kaGNwKHZvaWQpOwordm9pZCByZWFkX3NlcnZlcnNfZmlsZSh2b2lkKTsKK3ZvaWQgc2V0X29wdGlvbl9ib29sKHVuc2lnbmVkIGludCBvcHQpOwordm9pZCByZXNldF9vcHRpb25fYm9vbCh1bnNpZ25lZCBpbnQgb3B0KTsKK3N0cnVjdCBob3N0c2ZpbGUgKmV4cGFuZF9maWxlbGlzdChzdHJ1Y3QgaG9zdHNmaWxlICpsaXN0KTsKK2NoYXIgKnBhcnNlX3NlcnZlcihjaGFyICphcmcsIHVuaW9uIG15c29ja2FkZHIgKmFkZHIsIAorCQkgICB1bmlvbiBteXNvY2thZGRyICpzb3VyY2VfYWRkciwgY2hhciAqaW50ZXJmYWNlLCBpbnQgKmZsYWdzKTsKKworLyogZm9yd2FyZC5jICovCit2b2lkIHJlcGx5X3F1ZXJ5KGludCBmZCwgaW50IGZhbWlseSwgdGltZV90IG5vdyk7Cit2b2lkIHJlY2VpdmVfcXVlcnkoc3RydWN0IGxpc3RlbmVyICpsaXN0ZW4sIHRpbWVfdCBub3cpOwordW5zaWduZWQgY2hhciAqdGNwX3JlcXVlc3QoaW50IGNvbmZkLCB0aW1lX3Qgbm93LAorCQkJICAgdW5pb24gbXlzb2NrYWRkciAqbG9jYWxfYWRkciwgc3RydWN0IGluX2FkZHIgbmV0bWFzaywgaW50IGF1dGhfZG5zKTsKK3ZvaWQgc2VydmVyX2dvbmUoc3RydWN0IHNlcnZlciAqc2VydmVyKTsKK3N0cnVjdCBmcmVjICpnZXRfbmV3X2ZyZWModGltZV90IG5vdywgaW50ICp3YWl0LCBpbnQgZm9yY2UpOworaW50IHNlbmRfZnJvbShpbnQgZmQsIGludCBub3dpbGQsIGNoYXIgKnBhY2tldCwgc2l6ZV90IGxlbiwgCisJICAgICAgIHVuaW9uIG15c29ja2FkZHIgKnRvLCBzdHJ1Y3QgYWxsX2FkZHIgKnNvdXJjZSwKKwkgICAgICAgdW5zaWduZWQgaW50IGlmYWNlKTsKK3ZvaWQgcmVzZW5kX3F1ZXJ5KCk7CitzdHJ1Y3QgcmFuZGZkICphbGxvY2F0ZV9yZmQoaW50IGZhbWlseSk7Cit2b2lkIGZyZWVfcmZkKHN0cnVjdCByYW5kZmQgKnJmZCk7CisKKy8qIG5ldHdvcmsuYyAqLworaW50IGluZGV4dG9uYW1lKGludCBmZCwgaW50IGluZGV4LCBjaGFyICpuYW1lKTsKK2ludCBsb2NhbF9iaW5kKGludCBmZCwgdW5pb24gbXlzb2NrYWRkciAqYWRkciwgY2hhciAqaW50bmFtZSwgaW50IGlzX3RjcCk7CitpbnQgcmFuZG9tX3NvY2soaW50IGZhbWlseSk7Cit2b2lkIHByZV9hbGxvY2F0ZV9zZmRzKHZvaWQpOworaW50IHJlbG9hZF9zZXJ2ZXJzKGNoYXIgKmZuYW1lKTsKK3ZvaWQgbWFya19zZXJ2ZXJzKGludCBmbGFnKTsKK3ZvaWQgY2xlYW51cF9zZXJ2ZXJzKHZvaWQpOwordm9pZCBhZGRfdXBkYXRlX3NlcnZlcihpbnQgZmxhZ3MsCisJCSAgICAgICB1bmlvbiBteXNvY2thZGRyICphZGRyLAorCQkgICAgICAgdW5pb24gbXlzb2NrYWRkciAqc291cmNlX2FkZHIsCisJCSAgICAgICBjb25zdCBjaGFyICppbnRlcmZhY2UsCisJCSAgICAgICBjb25zdCBjaGFyICpkb21haW4pOwordm9pZCBjaGVja19zZXJ2ZXJzKHZvaWQpOworaW50IGVudW1lcmF0ZV9pbnRlcmZhY2VzKGludCByZXNldCk7Cit2b2lkIGNyZWF0ZV93aWxkY2FyZF9saXN0ZW5lcnModm9pZCk7Cit2b2lkIGNyZWF0ZV9ib3VuZF9saXN0ZW5lcnMoaW50IGRpZSk7Cit2b2lkIHdhcm5fYm91bmRfbGlzdGVuZXJzKHZvaWQpOwordm9pZCB3YXJuX2ludF9uYW1lcyh2b2lkKTsKK2ludCBpc19kYWRfbGlzdGVuZXJzKHZvaWQpOworaW50IGlmYWNlX2NoZWNrKGludCBmYW1pbHksIHN0cnVjdCBhbGxfYWRkciAqYWRkciwgY2hhciAqbmFtZSwgaW50ICphdXRoX2Rucyk7CitpbnQgbG9vcGJhY2tfZXhjZXB0aW9uKGludCBmZCwgaW50IGZhbWlseSwgc3RydWN0IGFsbF9hZGRyICphZGRyLCBjaGFyICpuYW1lKTsKK2ludCBsYWJlbF9leGNlcHRpb24oaW50IGluZGV4LCBpbnQgZmFtaWx5LCBzdHJ1Y3QgYWxsX2FkZHIgKmFkZHIpOworaW50IGZpeF9mZChpbnQgZmQpOworaW50IHRjcF9pbnRlcmZhY2UoaW50IGZkLCBpbnQgYWYpOworI2lmZGVmIEhBVkVfSVBWNgoraW50IHNldF9pcHY2cGt0aW5mbyhpbnQgZmQpOworI2VuZGlmCisjaWZkZWYgSEFWRV9ESENQNgordm9pZCBqb2luX211bHRpY2FzdChpbnQgZGllbm93KTsKKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9MSU5VWF9ORVRXT1JLKSB8fCBkZWZpbmVkKEhBVkVfQlNEX05FVFdPUkspCit2b2lkIG5ld2FkZHJlc3ModGltZV90IG5vdyk7CisjZW5kaWYKKworCisvKiBkaGNwLmMgKi8KKyNpZmRlZiBIQVZFX0RIQ1AKK3ZvaWQgZGhjcF9pbml0KHZvaWQpOwordm9pZCBkaGNwX3BhY2tldCh0aW1lX3Qgbm93LCBpbnQgcHhlX2ZkKTsKK3N0cnVjdCBkaGNwX2NvbnRleHQgKmFkZHJlc3NfYXZhaWxhYmxlKHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIAorCQkJCSAgICAgICBzdHJ1Y3QgaW5fYWRkciBhZGRyLAorCQkJCSAgICAgICBzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV0aWRzKTsKK3N0cnVjdCBkaGNwX2NvbnRleHQgKm5hcnJvd19jb250ZXh0KHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIAorCQkJCSAgICBzdHJ1Y3QgaW5fYWRkciB0YWRkciwKKwkJCQkgICAgc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkcyk7CitpbnQgYWRkcmVzc19hbGxvY2F0ZShzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LAorCQkgICAgIHN0cnVjdCBpbl9hZGRyICphZGRycCwgdW5zaWduZWQgY2hhciAqaHdhZGRyLCBpbnQgaHdfbGVuLAorCQkgICAgIHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZHMsIHRpbWVfdCBub3cpOwordm9pZCBkaGNwX3JlYWRfZXRoZXJzKHZvaWQpOworc3RydWN0IGRoY3BfY29uZmlnICpjb25maWdfZmluZF9ieV9hZGRyZXNzKHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlncywgc3RydWN0IGluX2FkZHIgYWRkcik7CitjaGFyICpob3N0X2Zyb21fZG5zKHN0cnVjdCBpbl9hZGRyIGFkZHIpOworI2VuZGlmCisKKy8qIGxlYXNlLmMgKi8KKyNpZmRlZiBIQVZFX0RIQ1AKK3ZvaWQgbGVhc2VfdXBkYXRlX2ZpbGUodGltZV90IG5vdyk7Cit2b2lkIGxlYXNlX3VwZGF0ZV9kbnMoaW50IGZvcmNlKTsKK3ZvaWQgbGVhc2VfaW5pdCh0aW1lX3Qgbm93KTsKK3N0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTRfYWxsb2NhdGUoc3RydWN0IGluX2FkZHIgYWRkcik7CisjaWZkZWYgSEFWRV9ESENQNgorc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlNl9hbGxvY2F0ZShzdHJ1Y3QgaW42X2FkZHIgKmFkZHJwLCBpbnQgbGVhc2VfdHlwZSk7CitzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U2X2ZpbmQodW5zaWduZWQgY2hhciAqY2xpZCwgaW50IGNsaWRfbGVuLCAKKwkJCSAgICAgICBpbnQgbGVhc2VfdHlwZSwgaW50IGlhaWQsIHN0cnVjdCBpbjZfYWRkciAqYWRkcik7Cit2b2lkIGxlYXNlNl9yZXNldCh2b2lkKTsKK3N0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTZfZmluZF9ieV9jbGllbnQoc3RydWN0IGRoY3BfbGVhc2UgKmZpcnN0LCBpbnQgbGVhc2VfdHlwZSwgdW5zaWduZWQgY2hhciAqY2xpZCwgaW50IGNsaWRfbGVuLCBpbnQgaWFpZCk7CitzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U2X2ZpbmRfYnlfYWRkcihzdHJ1Y3QgaW42X2FkZHIgKm5ldCwgaW50IHByZWZpeCwgdTY0IGFkZHIpOwordTY0IGxlYXNlX2ZpbmRfbWF4X2FkZHI2KHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQpOwordm9pZCBsZWFzZV9waW5nX3JlcGx5KHN0cnVjdCBpbjZfYWRkciAqc2VuZGVyLCB1bnNpZ25lZCBjaGFyICpwYWNrZXQsIGNoYXIgKmludGVyZmFjZSk7Cit2b2lkIGxlYXNlX3VwZGF0ZV9zbGFhYyh0aW1lX3Qgbm93KTsKK3ZvaWQgbGVhc2Vfc2V0X2lhaWQoc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlLCBpbnQgaWFpZCk7Cit2b2lkIGxlYXNlX21ha2VfZHVpZCh0aW1lX3Qgbm93KTsKKyNlbmRpZgordm9pZCBsZWFzZV9zZXRfaHdhZGRyKHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZSwgdW5zaWduZWQgY2hhciAqaHdhZGRyLAorCQkgICAgICB1bnNpZ25lZCBjaGFyICpjbGlkLCBpbnQgaHdfbGVuLCBpbnQgaHdfdHlwZSwgaW50IGNsaWRfbGVuLCB0aW1lX3Qgbm93LCBpbnQgZm9yY2UpOwordm9pZCBsZWFzZV9zZXRfaG9zdG5hbWUoc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlLCBjaGFyICpuYW1lLCBpbnQgYXV0aCwgY2hhciAqZG9tYWluLCBjaGFyICpjb25maWdfZG9tYWluKTsKK3ZvaWQgbGVhc2Vfc2V0X2V4cGlyZXMoc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlLCB1bnNpZ25lZCBpbnQgbGVuLCB0aW1lX3Qgbm93KTsKK3ZvaWQgbGVhc2Vfc2V0X2ludGVyZmFjZShzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UsIGludCBpbnRlcmZhY2UsIHRpbWVfdCBub3cpOworc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlX2ZpbmRfYnlfY2xpZW50KHVuc2lnbmVkIGNoYXIgKmh3YWRkciwgaW50IGh3X2xlbiwgaW50IGh3X3R5cGUsICAKKwkJCQkJdW5zaWduZWQgY2hhciAqY2xpZCwgaW50IGNsaWRfbGVuKTsKK3N0cnVjdCBkaGNwX2xlYXNlICpsZWFzZV9maW5kX2J5X2FkZHIoc3RydWN0IGluX2FkZHIgYWRkcik7CitzdHJ1Y3QgaW5fYWRkciBsZWFzZV9maW5kX21heF9hZGRyKHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQpOwordm9pZCBsZWFzZV9wcnVuZShzdHJ1Y3QgZGhjcF9sZWFzZSAqdGFyZ2V0LCB0aW1lX3Qgbm93KTsKK3ZvaWQgbGVhc2VfdXBkYXRlX2Zyb21fY29uZmlncyh2b2lkKTsKK2ludCBkb19zY3JpcHRfcnVuKHRpbWVfdCBub3cpOwordm9pZCByZXJ1bl9zY3JpcHRzKHZvaWQpOwordm9pZCBsZWFzZV9maW5kX2ludGVyZmFjZXModGltZV90IG5vdyk7CisjaWZkZWYgSEFWRV9TQ1JJUFQKK3ZvaWQgbGVhc2VfYWRkX2V4dHJhZGF0YShzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIAorCQkJIHVuc2lnbmVkIGludCBsZW4sIGludCBkZWxpbSk7CisjZW5kaWYKKyNlbmRpZgorCisvKiByZmMyMTMxLmMgKi8KKyNpZmRlZiBIQVZFX0RIQ1AKK3NpemVfdCBkaGNwX3JlcGx5KHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIGNoYXIgKmlmYWNlX25hbWUsIGludCBpbnRfaW5kZXgsCisJCSAgc2l6ZV90IHN6LCB0aW1lX3Qgbm93LCBpbnQgdW5pY2FzdF9kZXN0LCBpbnQgKmlzX2luZm9ybSwgaW50IHB4ZV9mZCwgc3RydWN0IGluX2FkZHIgZmFsbGJhY2spOwordW5zaWduZWQgY2hhciAqZXh0ZW5kZWRfaHdhZGRyKGludCBod3R5cGUsIGludCBod2xlbiwgdW5zaWduZWQgY2hhciAqaHdhZGRyLCAKKwkJCSAgICAgICBpbnQgY2xpZF9sZW4sIHVuc2lnbmVkIGNoYXIgKmNsaWQsIGludCAqbGVuX291dCk7CisjZW5kaWYKKworLyogZG5zbWFzcS5jICovCisjaWZkZWYgSEFWRV9ESENQCitpbnQgbWFrZV9pY21wX3NvY2sodm9pZCk7CitpbnQgaWNtcF9waW5nKHN0cnVjdCBpbl9hZGRyIGFkZHIpOworI2VuZGlmCit2b2lkIHF1ZXVlX2V2ZW50KGludCBldmVudCk7Cit2b2lkIHNlbmRfYWxhcm0odGltZV90IGV2ZW50LCB0aW1lX3Qgbm93KTsKK3ZvaWQgc2VuZF9ldmVudChpbnQgZmQsIGludCBldmVudCwgaW50IGRhdGEsIGNoYXIgKm1zZyk7Cit2b2lkIGNsZWFyX2NhY2hlX2FuZF9yZWxvYWQodGltZV90IG5vdyk7CisKKy8qIG5ldGxpbmsuYyAqLworI2lmZGVmIEhBVkVfTElOVVhfTkVUV09SSwordm9pZCBuZXRsaW5rX2luaXQodm9pZCk7Cit2b2lkIG5ldGxpbmtfbXVsdGljYXN0KHZvaWQpOworI2VuZGlmCisKKy8qIGJwZi5jICovCisjaWZkZWYgSEFWRV9CU0RfTkVUV09SSwordm9pZCBpbml0X2JwZih2b2lkKTsKK3ZvaWQgc2VuZF92aWFfYnBmKHN0cnVjdCBkaGNwX3BhY2tldCAqbWVzcywgc2l6ZV90IGxlbiwKKwkJICBzdHJ1Y3QgaW5fYWRkciBpZmFjZV9hZGRyLCBzdHJ1Y3QgaWZyZXEgKmlmcik7Cit2b2lkIHJvdXRlX2luaXQodm9pZCk7Cit2b2lkIHJvdXRlX3NvY2sodm9pZCk7CisjZW5kaWYKKworLyogYnBmLmMgb3IgbmV0bGluay5jICovCitpbnQgaWZhY2VfZW51bWVyYXRlKGludCBmYW1pbHksIHZvaWQgKnBhcm0sIGludCAoY2FsbGJhY2spKCkpOworCisvKiBkYnVzLmMgKi8KKyNpZmRlZiBIQVZFX0RCVVMKK2NoYXIgKmRidXNfaW5pdCh2b2lkKTsKK3ZvaWQgY2hlY2tfZGJ1c19saXN0ZW5lcnMoZmRfc2V0ICpyc2V0LCBmZF9zZXQgKndzZXQsIGZkX3NldCAqZXNldCk7Cit2b2lkIHNldF9kYnVzX2xpc3RlbmVycyhpbnQgKm1heGZkcCwgZmRfc2V0ICpyc2V0LCBmZF9zZXQgKndzZXQsIGZkX3NldCAqZXNldCk7CisjICBpZmRlZiBIQVZFX0RIQ1AKK3ZvaWQgZW1pdF9kYnVzX3NpZ25hbChpbnQgYWN0aW9uLCBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UsIGNoYXIgKmhvc3RuYW1lKTsKKyMgIGVuZGlmCisjZW5kaWYKKworLyogaXBzZXQuYyAqLworI2lmZGVmIEhBVkVfSVBTRVQKK3ZvaWQgaXBzZXRfaW5pdCh2b2lkKTsKK2ludCBhZGRfdG9faXBzZXQoY29uc3QgY2hhciAqc2V0bmFtZSwgY29uc3Qgc3RydWN0IGFsbF9hZGRyICppcGFkZHIsIGludCBmbGFncywgaW50IHJlbW92ZSk7CisjZW5kaWYKKworLyogaGVscGVyLmMgKi8KKyNpZiBkZWZpbmVkKEhBVkVfU0NSSVBUKQoraW50IGNyZWF0ZV9oZWxwZXIoaW50IGV2ZW50X2ZkLCBpbnQgZXJyX2ZkLCB1aWRfdCB1aWQsIGdpZF90IGdpZCwgbG9uZyBtYXhfZmQpOwordm9pZCBoZWxwZXJfd3JpdGUodm9pZCk7Cit2b2lkIHF1ZXVlX3NjcmlwdChpbnQgYWN0aW9uLCBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UsIAorCQkgIGNoYXIgKmhvc3RuYW1lLCB0aW1lX3Qgbm93KTsKKyNpZmRlZiBIQVZFX1RGVFAKK3ZvaWQgcXVldWVfdGZ0cChvZmZfdCBmaWxlX2xlbiwgY2hhciAqZmlsZW5hbWUsIHVuaW9uIG15c29ja2FkZHIgKnBlZXIpOworI2VuZGlmCitpbnQgaGVscGVyX2J1Zl9lbXB0eSh2b2lkKTsKKyNlbmRpZgorCisvKiB0ZnRwLmMgKi8KKyNpZmRlZiBIQVZFX1RGVFAKK3ZvaWQgdGZ0cF9yZXF1ZXN0KHN0cnVjdCBsaXN0ZW5lciAqbGlzdGVuLCB0aW1lX3Qgbm93KTsKK3ZvaWQgY2hlY2tfdGZ0cF9saXN0ZW5lcnMoZmRfc2V0ICpyc2V0LCB0aW1lX3Qgbm93KTsKK2ludCBkb190ZnRwX3NjcmlwdF9ydW4odm9pZCk7CisjZW5kaWYKKworLyogY29ubnRyYWNrLmMgKi8KKyNpZmRlZiBIQVZFX0NPTk5UUkFDSworaW50IGdldF9pbmNvbWluZ19tYXJrKHVuaW9uIG15c29ja2FkZHIgKnBlZXJfYWRkciwgc3RydWN0IGFsbF9hZGRyICpsb2NhbF9hZGRyLAorCQkgICAgICBpbnQgaXN0Y3AsIHVuc2lnbmVkIGludCAqbWFya3ApOworI2VuZGlmCisKKy8qIGRoY3A2LmMgKi8KKyNpZmRlZiBIQVZFX0RIQ1A2Cit2b2lkIGRoY3A2X2luaXQodm9pZCk7Cit2b2lkIGRoY3A2X3BhY2tldCh0aW1lX3Qgbm93KTsKK3N0cnVjdCBkaGNwX2NvbnRleHQgKmFkZHJlc3M2X2FsbG9jYXRlKHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsICB1bnNpZ25lZCBjaGFyICpjbGlkLCBpbnQgY2xpZF9sZW4sIGludCB0ZW1wX2FkZHIsCisJCQkJICAgICAgIGludCBpYWlkLCBpbnQgc2VyaWFsLCBzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV0aWRzLCBpbnQgcGxhaW5fcmFuZ2UsIHN0cnVjdCBpbjZfYWRkciAqYW5zKTsKK2ludCBjb25maWdfdmFsaWQoc3RydWN0IGRoY3BfY29uZmlnICpjb25maWcsIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIHN0cnVjdCBpbjZfYWRkciAqYWRkcik7CitzdHJ1Y3QgZGhjcF9jb250ZXh0ICphZGRyZXNzNl9hdmFpbGFibGUoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwgCisJCQkJCXN0cnVjdCBpbjZfYWRkciAqdGFkZHIsCisJCQkJCXN0cnVjdCBkaGNwX25ldGlkICpuZXRpZHMsCisJCQkJCWludCBwbGFpbl9yYW5nZSk7CitzdHJ1Y3QgZGhjcF9jb250ZXh0ICphZGRyZXNzNl92YWxpZChzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCAKKwkJCQkgICAgc3RydWN0IGluNl9hZGRyICp0YWRkciwKKwkJCQkgICAgc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkcywKKwkJCQkgICAgaW50IHBsYWluX3JhbmdlKTsKK3N0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlnX2ZpbmRfYnlfYWRkcmVzczYoc3RydWN0IGRoY3BfY29uZmlnICpjb25maWdzLCBzdHJ1Y3QgaW42X2FkZHIgKm5ldCwgCisJCQkJCSAgICBpbnQgcHJlZml4LCB1NjQgYWRkcik7Cit2b2lkIG1ha2VfZHVpZCh0aW1lX3Qgbm93KTsKK3ZvaWQgZGhjcF9jb25zdHJ1Y3RfY29udGV4dHModGltZV90IG5vdyk7Cit2b2lkIGdldF9jbGllbnRfbWFjKHN0cnVjdCBpbjZfYWRkciAqY2xpZW50LCBpbnQgaWZhY2UsIHVuc2lnbmVkIGNoYXIgKm1hYywgCisJCSAgICB1bnNpZ25lZCBpbnQgKm1hY2xlbnAsIHVuc2lnbmVkIGludCAqbWFjdHlwZXApOworI2VuZGlmCisgIAorLyogcmZjMzMxNS5jICovCisjaWZkZWYgSEFWRV9ESENQNgordW5zaWduZWQgc2hvcnQgZGhjcDZfcmVwbHkoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwgaW50IGludGVyZmFjZSwgY2hhciAqaWZhY2VfbmFtZSwgIAorCQkJICAgc3RydWN0IGluNl9hZGRyICpmYWxsYmFjaywgc3RydWN0IGluNl9hZGRyICpsbF9hZGRyLCBzdHJ1Y3QgaW42X2FkZHIgKnVsYV9hZGRyLAorCQkJICAgc2l6ZV90IHN6LCBzdHJ1Y3QgaW42X2FkZHIgKmNsaWVudF9hZGRyLCB0aW1lX3Qgbm93KTsKK3ZvaWQgcmVsYXlfdXBzdHJlYW02KHN0cnVjdCBkaGNwX3JlbGF5ICpyZWxheSwgc3NpemVfdCBzeiwgc3RydWN0IGluNl9hZGRyICpwZWVyX2FkZHJlc3MsIHUzMiBzY29wZV9pZCk7CisKK3Vuc2lnbmVkIHNob3J0IHJlbGF5X3JlcGx5Niggc3RydWN0IHNvY2thZGRyX2luNiAqcGVlciwgc3NpemVfdCBzeiwgY2hhciAqYXJyaXZhbF9pbnRlcmZhY2UpOworI2VuZGlmCisKKy8qIGRoY3AtY29tbW9uLmMgKi8KKyNpZmRlZiBIQVZFX0RIQ1AKK3ZvaWQgZGhjcF9jb21tb25faW5pdCh2b2lkKTsKK3NzaXplX3QgcmVjdl9kaGNwX3BhY2tldChpbnQgZmQsIHN0cnVjdCBtc2doZHIgKm1zZyk7CitzdHJ1Y3QgZGhjcF9uZXRpZCAqcnVuX3RhZ19pZihzdHJ1Y3QgZGhjcF9uZXRpZCAqaW5wdXQpOworc3RydWN0IGRoY3BfbmV0aWQgKm9wdGlvbl9maWx0ZXIoc3RydWN0IGRoY3BfbmV0aWQgKnRhZ3MsIHN0cnVjdCBkaGNwX25ldGlkICpjb250ZXh0X3RhZ3MsCisJCQkJIHN0cnVjdCBkaGNwX29wdCAqb3B0cyk7CitpbnQgbWF0Y2hfbmV0aWQoc3RydWN0IGRoY3BfbmV0aWQgKmNoZWNrLCBzdHJ1Y3QgZGhjcF9uZXRpZCAqcG9vbCwgaW50IG5lZ29ubHkpOworY2hhciAqc3RyaXBfaG9zdG5hbWUoY2hhciAqaG9zdG5hbWUpOwordm9pZCBsb2dfdGFncyhzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV0aWQsIHUzMiB4aWQpOworaW50IG1hdGNoX2J5dGVzKHN0cnVjdCBkaGNwX29wdCAqbywgdW5zaWduZWQgY2hhciAqcCwgaW50IGxlbik7Cit2b2lkIGRoY3BfdXBkYXRlX2NvbmZpZ3Moc3RydWN0IGRoY3BfY29uZmlnICpjb25maWdzKTsKK3ZvaWQgZGlzcGxheV9vcHRzKHZvaWQpOworaW50IGxvb2t1cF9kaGNwX29wdChpbnQgcHJvdCwgY2hhciAqbmFtZSk7CitpbnQgbG9va3VwX2RoY3BfbGVuKGludCBwcm90LCBpbnQgdmFsKTsKK2NoYXIgKm9wdGlvbl9zdHJpbmcoaW50IHByb3QsIHVuc2lnbmVkIGludCBvcHQsIHVuc2lnbmVkIGNoYXIgKnZhbCwgCisJCSAgICBpbnQgb3B0X2xlbiwgY2hhciAqYnVmLCBpbnQgYnVmX2xlbik7CitzdHJ1Y3QgZGhjcF9jb25maWcgKmZpbmRfY29uZmlnKHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlncywKKwkJCQlzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LAorCQkJCXVuc2lnbmVkIGNoYXIgKmNsaWQsIGludCBjbGlkX2xlbiwKKwkJCQl1bnNpZ25lZCBjaGFyICpod2FkZHIsIGludCBod19sZW4sIAorCQkJCWludCBod190eXBlLCBjaGFyICpob3N0bmFtZSk7CitpbnQgY29uZmlnX2hhc19tYWMoc3RydWN0IGRoY3BfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGNoYXIgKmh3YWRkciwgaW50IGxlbiwgaW50IHR5cGUpOworI2lmZGVmIEhBVkVfTElOVVhfTkVUV09SSworY2hhciAqd2hpY2hkZXZpY2Uodm9pZCk7Cit2b2lkIGJpbmR0b2RldmljZShjaGFyICpkZXZpY2UsIGludCBmZCk7CisjZW5kaWYKKyMgIGlmZGVmIEhBVkVfREhDUDYKK3ZvaWQgZGlzcGxheV9vcHRzNih2b2lkKTsKKyMgIGVuZGlmCit2b2lkIGxvZ19jb250ZXh0KGludCBmYW1pbHksIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQpOwordm9pZCBsb2dfcmVsYXkoaW50IGZhbWlseSwgc3RydWN0IGRoY3BfcmVsYXkgKnJlbGF5KTsKKyNlbmRpZgorCisvKiBvdXRwYWNrZXQuYyAqLworI2lmZGVmIEhBVkVfREhDUDYKK3ZvaWQgZW5kX29wdDYoaW50IGNvbnRhaW5lcik7CitpbnQgc2F2ZV9jb3VudGVyKGludCBuZXd2YWwpOwordm9pZCAqZXhwYW5kKHNpemVfdCBoZWFkcm9vbSk7CitpbnQgbmV3X29wdDYoaW50IG9wdCk7Cit2b2lkICpwdXRfb3B0Nih2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKK3ZvaWQgcHV0X29wdDZfbG9uZyh1bnNpZ25lZCBpbnQgdmFsKTsKK3ZvaWQgcHV0X29wdDZfc2hvcnQodW5zaWduZWQgaW50IHZhbCk7Cit2b2lkIHB1dF9vcHQ2X2NoYXIodW5zaWduZWQgaW50IHZhbCk7Cit2b2lkIHB1dF9vcHQ2X3N0cmluZyhjaGFyICpzKTsKKyNlbmRpZgorCisvKiByYWR2LmMgKi8KKyNpZmRlZiBIQVZFX0RIQ1A2Cit2b2lkIHJhX2luaXQodGltZV90IG5vdyk7Cit2b2lkIGljbXA2X3BhY2tldCh0aW1lX3Qgbm93KTsKK3RpbWVfdCBwZXJpb2RpY19yYSh0aW1lX3Qgbm93KTsKK3ZvaWQgcmFfc3RhcnRfdW5zb2xpY3RlZCh0aW1lX3Qgbm93LCBzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0KTsKKyNlbmRpZgorCisvKiBzbGFhYy5jICovIAorI2lmZGVmIEhBVkVfREhDUDYKK3ZvaWQgc2xhYWNfYWRkX2FkZHJzKHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZSwgdGltZV90IG5vdywgaW50IGZvcmNlKTsKK3RpbWVfdCBwZXJpb2RpY19zbGFhYyh0aW1lX3Qgbm93LCBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2VzKTsKK3ZvaWQgc2xhYWNfcGluZ19yZXBseShzdHJ1Y3QgaW42X2FkZHIgKnNlbmRlciwgdW5zaWduZWQgY2hhciAqcGFja2V0LCBjaGFyICppbnRlcmZhY2UsIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZXMpOworI2VuZGlmCisKKy8qIGxvb3AuYyAqLworI2lmZGVmIEhBVkVfTE9PUAordm9pZCBsb29wX3NlbmRfcHJvYmVzKCk7CitpbnQgZGV0ZWN0X2xvb3AoY2hhciAqcXVlcnksIGludCB0eXBlKTsKKyNlbmRpZgorCisvKiBpbm90aWZ5LmMgKi8KKyNpZmRlZiBIQVZFX0xJTlVYX05FVFdPUksKK3ZvaWQgaW5vdGlmeV9kbnNtYXNxX2luaXQoKTsKK2ludCBpbm90aWZ5X2NoZWNrKHZvaWQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvZG5zc2VjLmMgYi9zcmMvZG5zc2VjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZiM2RjYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9kbnNzZWMuYwpAQCAtMCwwICsxLDIzNTQgQEAKKy8qIGRuc3NlYy5jIGlzIENvcHlyaWdodCAoYykgMjAxMiBHaW92YW5uaSBCYWpvIDxyYXNreUBkZXZlbGVyLmNvbT4KKyAgICAgICAgICAgYW5kIENvcHlyaWdodCAoYykgMjAxMi0yMDE0IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworI2lmZGVmIEhBVkVfRE5TU0VDCisKKyNpbmNsdWRlIDxuZXR0bGUvcnNhLmg+CisjaW5jbHVkZSA8bmV0dGxlL2RzYS5oPgorI2lmbmRlZiBOT19ORVRUTEVfRUNDCisjICBpbmNsdWRlIDxuZXR0bGUvZWNkc2EuaD4KKyMgIGluY2x1ZGUgPG5ldHRsZS9lY2MtY3VydmUuaD4KKyNlbmRpZgorI2luY2x1ZGUgPG5ldHRsZS9uZXR0bGUtbWV0YS5oPgorI2luY2x1ZGUgPG5ldHRsZS9iaWdudW0uaD4KKworLyogTmV0dGxlLTMuMCBtb3ZlZCB0byBhIG5ldyBBUEkgZm9yIERTQS4gV2UgdXNlIGEgbmFtZSB0aGF0J3MgZGVmaW5lZCBpbiB0aGUgbmV3IEFQSQorICAgdG8gZGV0ZWN0IE5ldHRsZS0zLCBhbmQgaW52b2tlIHRoZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBtb2RlLiAqLworI2lmZGVmIGRzYV9wYXJhbXNfaW5pdAorI2luY2x1ZGUgPG5ldHRsZS9kc2EtY29tcGF0Lmg+CisjZW5kaWYKKworCisjZGVmaW5lIFNFUklBTF9VTkRFRiAgLTEwMAorI2RlZmluZSBTRVJJQUxfRVEgICAgICAgIDAKKyNkZWZpbmUgU0VSSUFMX0xUICAgICAgIC0xCisjZGVmaW5lIFNFUklBTF9HVCAgICAgICAgMQorCisvKiBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2RzLXJyLXR5cGVzL2RzLXJyLXR5cGVzLnhodG1sICovCitzdGF0aWMgY2hhciAqZHNfZGlnZXN0X25hbWUoaW50IGRpZ2VzdCkKK3sKKyAgc3dpdGNoIChkaWdlc3QpCisgICAgeworICAgIGNhc2UgMTogcmV0dXJuICJzaGExIjsKKyAgICBjYXNlIDI6IHJldHVybiAic2hhMjU2IjsKKyAgICBjYXNlIDM6IHJldHVybiAiZ29zdGhhc2g5NCI7CisgICAgY2FzZSA0OiByZXR1cm4gInNoYTM4NCI7CisgICAgZGVmYXVsdDogcmV0dXJuIE5VTEw7CisgICAgfQorfQorIAorLyogaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9kbnMtc2VjLWFsZy1udW1iZXJzL2Rucy1zZWMtYWxnLW51bWJlcnMueGh0bWwgKi8KK3N0YXRpYyBjaGFyICphbGdvX2RpZ2VzdF9uYW1lKGludCBhbGdvKQoreworICBzd2l0Y2ggKGFsZ28pCisgICAgeworICAgIGNhc2UgMTogcmV0dXJuICJtZDUiOworICAgIGNhc2UgMzogcmV0dXJuICJzaGExIjsKKyAgICBjYXNlIDU6IHJldHVybiAic2hhMSI7CisgICAgY2FzZSA2OiByZXR1cm4gInNoYTEiOworICAgIGNhc2UgNzogcmV0dXJuICJzaGExIjsKKyAgICBjYXNlIDg6IHJldHVybiAic2hhMjU2IjsKKyAgICBjYXNlIDEwOiByZXR1cm4gInNoYTUxMiI7CisgICAgY2FzZSAxMjogcmV0dXJuICJnb3N0aGFzaDk0IjsKKyAgICBjYXNlIDEzOiByZXR1cm4gInNoYTI1NiI7CisgICAgY2FzZSAxNDogcmV0dXJuICJzaGEzODQiOworICAgIGRlZmF1bHQ6IHJldHVybiBOVUxMOworICAgIH0KK30KKyAgICAgIAorLyogRmluZCBwb2ludGVyIHRvIGNvcnJlY3QgaGFzaCBmdW5jdGlvbiBpbiBuZXR0bGUgbGlicmFyeSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXR0bGVfaGFzaCAqaGFzaF9maW5kKGNoYXIgKm5hbWUpCit7CisgIGludCBpOworICAKKyAgaWYgKCFuYW1lKQorICAgIHJldHVybiBOVUxMOworICAKKyAgZm9yIChpID0gMDsgbmV0dGxlX2hhc2hlc1tpXTsgaSsrKQorICAgIHsKKyAgICAgIGlmIChzdHJjbXAobmV0dGxlX2hhc2hlc1tpXS0+bmFtZSwgbmFtZSkgPT0gMCkKKwlyZXR1cm4gbmV0dGxlX2hhc2hlc1tpXTsKKyAgICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIGV4cGFuZCBjdHggYW5kIGRpZ2VzdCBtZW1vcnkgYWxsb2NhdGlvbnMgaWYgbmVjZXNzYXJ5IGFuZCBpbml0IGhhc2ggZnVuY3Rpb24gKi8KK3N0YXRpYyBpbnQgaGFzaF9pbml0KGNvbnN0IHN0cnVjdCBuZXR0bGVfaGFzaCAqaGFzaCwgdm9pZCAqKmN0eHAsIHVuc2lnbmVkIGNoYXIgKipkaWdlc3RwKQoreworICBzdGF0aWMgdm9pZCAqY3R4ID0gTlVMTDsKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCA9IE5VTEw7CisgIHN0YXRpYyB1bnNpZ25lZCBpbnQgY3R4X3N6ID0gMDsKKyAgc3RhdGljIHVuc2lnbmVkIGludCBkaWdlc3Rfc3ogPSAwOworCisgIHZvaWQgKm5ldzsKKworICBpZiAoY3R4X3N6IDwgaGFzaC0+Y29udGV4dF9zaXplKQorICAgIHsKKyAgICAgIGlmICghKG5ldyA9IHdoaW5lX21hbGxvYyhoYXNoLT5jb250ZXh0X3NpemUpKSkKKwlyZXR1cm4gMDsKKyAgICAgIGlmIChjdHgpCisJZnJlZShjdHgpOworICAgICAgY3R4ID0gbmV3OworICAgICAgY3R4X3N6ID0gaGFzaC0+Y29udGV4dF9zaXplOworICAgIH0KKyAgCisgIGlmIChkaWdlc3Rfc3ogPCBoYXNoLT5kaWdlc3Rfc2l6ZSkKKyAgICB7CisgICAgICBpZiAoIShuZXcgPSB3aGluZV9tYWxsb2MoaGFzaC0+ZGlnZXN0X3NpemUpKSkKKwlyZXR1cm4gMDsKKyAgICAgIGlmIChkaWdlc3QpCisJZnJlZShkaWdlc3QpOworICAgICAgZGlnZXN0ID0gbmV3OworICAgICAgZGlnZXN0X3N6ID0gaGFzaC0+ZGlnZXN0X3NpemU7CisgICAgfQorCisgICpjdHhwID0gY3R4OworICAqZGlnZXN0cCA9IGRpZ2VzdDsKKworICBoYXNoLT5pbml0KGN0eCk7CisKKyAgcmV0dXJuIDE7Cit9CisgIAorc3RhdGljIGludCBkbnNtYXNxX3JzYV92ZXJpZnkoc3RydWN0IGJsb2NrZGF0YSAqa2V5X2RhdGEsIHVuc2lnbmVkIGludCBrZXlfbGVuLCB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCBzaWdfbGVuLAorCQkJICAgICAgdW5zaWduZWQgY2hhciAqZGlnZXN0LCBpbnQgYWxnbykKK3sKKyAgdW5zaWduZWQgY2hhciAqcDsKKyAgc2l6ZV90IGV4cF9sZW47CisgIAorICBzdGF0aWMgc3RydWN0IHJzYV9wdWJsaWNfa2V5ICprZXkgPSBOVUxMOworICBzdGF0aWMgbXB6X3Qgc2lnX21wejsKKyAgCisgIGlmIChrZXkgPT0gTlVMTCkKKyAgICB7CisgICAgICBpZiAoIShrZXkgPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCByc2FfcHVibGljX2tleSkpKSkKKwlyZXR1cm4gMDsKKyAgICAgIAorICAgICAgbmV0dGxlX3JzYV9wdWJsaWNfa2V5X2luaXQoa2V5KTsKKyAgICAgIG1wel9pbml0KHNpZ19tcHopOworICAgIH0KKyAgCisgIGlmICgoa2V5X2xlbiA8IDMpIHx8ICEocCA9IGJsb2NrZGF0YV9yZXRyaWV2ZShrZXlfZGF0YSwga2V5X2xlbiwgTlVMTCkpKQorICAgIHJldHVybiAwOworICAKKyAga2V5X2xlbi0tOworICBpZiAoKGV4cF9sZW4gPSAqcCsrKSA9PSAwKQorICAgIHsKKyAgICAgIEdFVFNIT1JUKGV4cF9sZW4sIHApOworICAgICAga2V5X2xlbiAtPSAyOworICAgIH0KKyAgCisgIGlmIChleHBfbGVuID49IGtleV9sZW4pCisgICAgcmV0dXJuIDA7CisgIAorICBrZXktPnNpemUgPSAga2V5X2xlbiAtIGV4cF9sZW47CisgIG1wel9pbXBvcnQoa2V5LT5lLCBleHBfbGVuLCAxLCAxLCAwLCAwLCBwKTsKKyAgbXB6X2ltcG9ydChrZXktPm4sIGtleS0+c2l6ZSwgMSwgMSwgMCwgMCwgcCArIGV4cF9sZW4pOworCisgIG1wel9pbXBvcnQoc2lnX21weiwgc2lnX2xlbiwgMSwgMSwgMCwgMCwgc2lnKTsKKyAgCisgIHN3aXRjaCAoYWxnbykKKyAgICB7CisgICAgY2FzZSAxOgorICAgICAgcmV0dXJuIG5ldHRsZV9yc2FfbWQ1X3ZlcmlmeV9kaWdlc3Qoa2V5LCBkaWdlc3QsIHNpZ19tcHopOworICAgIGNhc2UgNTogY2FzZSA3OgorICAgICAgcmV0dXJuIG5ldHRsZV9yc2Ffc2hhMV92ZXJpZnlfZGlnZXN0KGtleSwgZGlnZXN0LCBzaWdfbXB6KTsKKyAgICBjYXNlIDg6CisgICAgICByZXR1cm4gbmV0dGxlX3JzYV9zaGEyNTZfdmVyaWZ5X2RpZ2VzdChrZXksIGRpZ2VzdCwgc2lnX21weik7CisgICAgY2FzZSAxMDoKKyAgICAgIHJldHVybiBuZXR0bGVfcnNhX3NoYTUxMl92ZXJpZnlfZGlnZXN0KGtleSwgZGlnZXN0LCBzaWdfbXB6KTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9ICAKKworc3RhdGljIGludCBkbnNtYXNxX2RzYV92ZXJpZnkoc3RydWN0IGJsb2NrZGF0YSAqa2V5X2RhdGEsIHVuc2lnbmVkIGludCBrZXlfbGVuLCB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCBzaWdfbGVuLAorCQkJICAgICAgdW5zaWduZWQgY2hhciAqZGlnZXN0LCBpbnQgYWxnbykKK3sKKyAgdW5zaWduZWQgY2hhciAqcDsKKyAgdW5zaWduZWQgaW50IHQ7CisgIAorICBzdGF0aWMgc3RydWN0IGRzYV9wdWJsaWNfa2V5ICprZXkgPSBOVUxMOworICBzdGF0aWMgc3RydWN0IGRzYV9zaWduYXR1cmUgKnNpZ19zdHJ1Y3Q7CisgIAorICBpZiAoa2V5ID09IE5VTEwpCisgICAgeworICAgICAgaWYgKCEoc2lnX3N0cnVjdCA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IGRzYV9zaWduYXR1cmUpKSkgfHwgCisJICAhKGtleSA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IGRzYV9wdWJsaWNfa2V5KSkpKSAKKwlyZXR1cm4gMDsKKyAgICAgIAorICAgICAgbmV0dGxlX2RzYV9wdWJsaWNfa2V5X2luaXQoa2V5KTsKKyAgICAgIG5ldHRsZV9kc2Ffc2lnbmF0dXJlX2luaXQoc2lnX3N0cnVjdCk7CisgICAgfQorICAKKyAgaWYgKChzaWdfbGVuIDwgNDEpIHx8ICEocCA9IGJsb2NrZGF0YV9yZXRyaWV2ZShrZXlfZGF0YSwga2V5X2xlbiwgTlVMTCkpKQorICAgIHJldHVybiAwOworICAKKyAgdCA9ICpwKys7CisgIAorICBpZiAoa2V5X2xlbiA8ICgyMTMgKyAodCAqIDI0KSkpCisgICAgcmV0dXJuIDA7CisgIAorICBtcHpfaW1wb3J0KGtleS0+cSwgMjAsIDEsIDEsIDAsIDAsIHApOyBwICs9IDIwOworICBtcHpfaW1wb3J0KGtleS0+cCwgNjQgKyAodCo4KSwgMSwgMSwgMCwgMCwgcCk7IHAgKz0gNjQgKyAodCo4KTsKKyAgbXB6X2ltcG9ydChrZXktPmcsIDY0ICsgKHQqOCksIDEsIDEsIDAsIDAsIHApOyBwICs9IDY0ICsgKHQqOCk7CisgIG1wel9pbXBvcnQoa2V5LT55LCA2NCArICh0KjgpLCAxLCAxLCAwLCAwLCBwKTsgcCArPSA2NCArICh0KjgpOworICAKKyAgbXB6X2ltcG9ydChzaWdfc3RydWN0LT5yLCAyMCwgMSwgMSwgMCwgMCwgc2lnKzEpOworICBtcHpfaW1wb3J0KHNpZ19zdHJ1Y3QtPnMsIDIwLCAxLCAxLCAwLCAwLCBzaWcrMjEpOworICAKKyAgKHZvaWQpYWxnbzsKKyAgCisgIHJldHVybiBuZXR0bGVfZHNhX3NoYTFfdmVyaWZ5X2RpZ2VzdChrZXksIGRpZ2VzdCwgc2lnX3N0cnVjdCk7Cit9IAorIAorI2lmbmRlZiBOT19ORVRUTEVfRUNDCitzdGF0aWMgaW50IGRuc21hc3FfZWNkc2FfdmVyaWZ5KHN0cnVjdCBibG9ja2RhdGEgKmtleV9kYXRhLCB1bnNpZ25lZCBpbnQga2V5X2xlbiwgCisJCQkJdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3Qgc2lnX2xlbiwKKwkJCQl1bnNpZ25lZCBjaGFyICpkaWdlc3QsIHNpemVfdCBkaWdlc3RfbGVuLCBpbnQgYWxnbykKK3sKKyAgdW5zaWduZWQgY2hhciAqcDsKKyAgdW5zaWduZWQgaW50IHQ7CisgIHN0cnVjdCBlY2NfcG9pbnQgKmtleTsKKworICBzdGF0aWMgc3RydWN0IGVjY19wb2ludCAqa2V5XzI1NiA9IE5VTEwsICprZXlfMzg0ID0gTlVMTDsKKyAgc3RhdGljIG1wel90IHgsIHk7CisgIHN0YXRpYyBzdHJ1Y3QgZHNhX3NpZ25hdHVyZSAqc2lnX3N0cnVjdDsKKyAgCisgIGlmICghc2lnX3N0cnVjdCkKKyAgICB7CisgICAgICBpZiAoIShzaWdfc3RydWN0ID0gd2hpbmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZHNhX3NpZ25hdHVyZSkpKSkKKwlyZXR1cm4gMDsKKyAgICAgIAorICAgICAgbmV0dGxlX2RzYV9zaWduYXR1cmVfaW5pdChzaWdfc3RydWN0KTsKKyAgICAgIG1wel9pbml0KHgpOworICAgICAgbXB6X2luaXQoeSk7CisgICAgfQorICAKKyAgc3dpdGNoIChhbGdvKQorICAgIHsKKyAgICBjYXNlIDEzOgorICAgICAgaWYgKCFrZXlfMjU2KQorCXsKKwkgIGlmICghKGtleV8yNTYgPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBlY2NfcG9pbnQpKSkpCisJICAgIHJldHVybiAwOworCSAgCisJICBuZXR0bGVfZWNjX3BvaW50X2luaXQoa2V5XzI1NiwgJm5ldHRsZV9zZWNwXzI1NnIxKTsKKwl9CisgICAgICAKKyAgICAgIGtleSA9IGtleV8yNTY7CisgICAgICB0ID0gMzI7CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGNhc2UgMTQ6CisgICAgICBpZiAoIWtleV8zODQpCisJeworCSAgaWYgKCEoa2V5XzM4NCA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IGVjY19wb2ludCkpKSkKKwkgICAgcmV0dXJuIDA7CisJICAKKwkgIG5ldHRsZV9lY2NfcG9pbnRfaW5pdChrZXlfMzg0LCAmbmV0dGxlX3NlY3BfMzg0cjEpOworCX0KKyAgICAgIAorICAgICAga2V5ID0ga2V5XzM4NDsKKyAgICAgIHQgPSA0ODsKKyAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIDA7CisgICAgfQorICAKKyAgaWYgKHNpZ19sZW4gIT0gMip0IHx8IGtleV9sZW4gIT0gMip0IHx8CisgICAgICAocCA9IGJsb2NrZGF0YV9yZXRyaWV2ZShrZXlfZGF0YSwga2V5X2xlbiwgTlVMTCkpKQorICAgIHJldHVybiAwOworICAKKyAgbXB6X2ltcG9ydCh4LCB0ICwgMSwgMSwgMCwgMCwgcCk7CisgIG1wel9pbXBvcnQoeSwgdCAsIDEsIDEsIDAsIDAsIHAgKyB0KTsKKworICBpZiAoIWVjY19wb2ludF9zZXQoa2V5LCB4LCB5KSkKKyAgICByZXR1cm4gMDsKKyAgCisgIG1wel9pbXBvcnQoc2lnX3N0cnVjdC0+ciwgdCwgMSwgMSwgMCwgMCwgc2lnKTsKKyAgbXB6X2ltcG9ydChzaWdfc3RydWN0LT5zLCB0LCAxLCAxLCAwLCAwLCBzaWcgKyB0KTsKKyAgCisgIHJldHVybiBuZXR0bGVfZWNkc2FfdmVyaWZ5KGtleSwgZGlnZXN0X2xlbiwgZGlnZXN0LCBzaWdfc3RydWN0KTsKK30gCisjZW5kaWYgCisKK3N0YXRpYyBpbnQgdmVyaWZ5KHN0cnVjdCBibG9ja2RhdGEgKmtleV9kYXRhLCB1bnNpZ25lZCBpbnQga2V5X2xlbiwgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3Qgc2lnX2xlbiwKKwkJICB1bnNpZ25lZCBjaGFyICpkaWdlc3QsIHNpemVfdCBkaWdlc3RfbGVuLCBpbnQgYWxnbykKK3sKKyAgKHZvaWQpZGlnZXN0X2xlbjsKKworICBzd2l0Y2ggKGFsZ28pCisgICAgeworICAgIGNhc2UgMTogY2FzZSA1OiBjYXNlIDc6IGNhc2UgODogY2FzZSAxMDoKKyAgICAgIHJldHVybiBkbnNtYXNxX3JzYV92ZXJpZnkoa2V5X2RhdGEsIGtleV9sZW4sIHNpZywgc2lnX2xlbiwgZGlnZXN0LCBhbGdvKTsKKyAgICAgIAorICAgIGNhc2UgMzogY2FzZSA2OiAKKyAgICAgIHJldHVybiBkbnNtYXNxX2RzYV92ZXJpZnkoa2V5X2RhdGEsIGtleV9sZW4sIHNpZywgc2lnX2xlbiwgZGlnZXN0LCBhbGdvKTsKKyAKKyNpZm5kZWYgTk9fTkVUVExFX0VDQyAgIAorICAgIGNhc2UgMTM6IGNhc2UgMTQ6CisgICAgICByZXR1cm4gZG5zbWFzcV9lY2RzYV92ZXJpZnkoa2V5X2RhdGEsIGtleV9sZW4sIHNpZywgc2lnX2xlbiwgZGlnZXN0LCBkaWdlc3RfbGVuLCBhbGdvKTsKKyNlbmRpZgorICAgIH0KKyAgCisgIHJldHVybiAwOworfQorCisvKiBDb252ZXJ0IGZyb20gcHJlc2VudGF0aW9uIGZvcm1hdCB0byB3aXJlIGZvcm1hdCwgaW4gcGxhY2UuCisgICBBbHNvIG1hcCBVQyAtPiBMQy4KKyAgIE5vdGUgdGhhdCB1c2luZyBleHRyYWN0X25hbWUgdG8gZ2V0IHByZXNlbnRhdGlvbiBmb3JtYXQKKyAgIHRoZW4gY2FsbGluZyB0b193aXJlKCkgcmVtb3ZlcyBjb21wcmVzc2lvbiBhbmQgbWFwcyBjYXNlLAorICAgdGh1cyBnZW5lcmF0aW5nIG5hbWVzIGluIGNhbm9uaWNhbCBmb3JtLgorICAgQ2FsbGluZyB0b193aXJlIGZvbGxvd2VkIGJ5IGZyb21fd2lyZSBpcyBhbG1vc3QgYW4gaWRlbnRpdHksCisgICBleGNlcHQgdGhhdCB0aGUgVUMgcmVtYWlucyBtYXBwZWQgdG8gTEMuIAorKi8KK3N0YXRpYyBpbnQgdG9fd2lyZShjaGFyICpuYW1lKQoreworICB1bnNpZ25lZCBjaGFyICpsLCAqcCwgdGVybTsKKyAgaW50IGxlbjsKKworICBmb3IgKGwgPSAodW5zaWduZWQgY2hhciopbmFtZTsgKmwgIT0gMDsgbCA9IHApCisgICAgeworICAgICAgZm9yIChwID0gbDsgKnAgIT0gJy4nICYmICpwICE9IDA7IHArKykKKwlpZiAoKnAgPj0gJ0EnICYmICpwIDw9ICdaJykKKwkgICpwID0gKnAgLSAnQScgKyAnYSc7CisgICAgICAKKyAgICAgIHRlcm0gPSAqcDsKKyAgICAgIAorICAgICAgaWYgKChsZW4gPSBwIC0gbCkgIT0gMCkKKwltZW1tb3ZlKGwrMSwgbCwgbGVuKTsKKyAgICAgICpsID0gbGVuOworICAgICAgCisgICAgICBwKys7CisgICAgICAKKyAgICAgIGlmICh0ZXJtID09IDApCisJKnAgPSAwOworICAgIH0KKyAgCisgIHJldHVybiBsICsgMSAtICh1bnNpZ25lZCBjaGFyICopbmFtZTsKK30KKworLyogTm90ZTogbm8gY29tcHJlc3Npb24gIGFsbG93ZWQgaW4gaW5wdXQuICovCitzdGF0aWMgdm9pZCBmcm9tX3dpcmUoY2hhciAqbmFtZSkKK3sKKyAgdW5zaWduZWQgY2hhciAqbDsKKyAgaW50IGxlbjsKKworICBmb3IgKGwgPSAodW5zaWduZWQgY2hhciAqKW5hbWU7ICpsICE9IDA7IGwgKz0gbGVuKzEpCisgICAgeworICAgICAgbGVuID0gKmw7CisgICAgICBtZW1tb3ZlKGwsIGwrMSwgbGVuKTsKKyAgICAgIGxbbGVuXSA9ICcuJzsKKyAgICB9CisKKyAgaWYgKChjaGFyICopbCAhPSBuYW1lKQorICAgICoobC0xKSA9IDA7Cit9CisKKy8qIElucHV0IGluIHByZXNlbnRhdGlvbiBmb3JtYXQgKi8KK3N0YXRpYyBpbnQgY291bnRfbGFiZWxzKGNoYXIgKm5hbWUpCit7CisgIGludCBpOworCisgIGlmICgqbmFtZSA9PSAwKQorICAgIHJldHVybiAwOworCisgIGZvciAoaSA9IDA7ICpuYW1lOyBuYW1lKyspCisgICAgaWYgKCpuYW1lID09ICcuJykKKyAgICAgIGkrKzsKKworICByZXR1cm4gaSsxOworfQorCisvKiBJbXBsZW1lbnQgUkZDMTk4MiB3cmFwcGVkIGNvbXBhcmUgZm9yIDMyLWJpdCBudW1iZXJzICovCitzdGF0aWMgaW50IHNlcmlhbF9jb21wYXJlXzMyKHVuc2lnbmVkIGxvbmcgczEsIHVuc2lnbmVkIGxvbmcgczIpCit7CisgIGlmIChzMSA9PSBzMikKKyAgICByZXR1cm4gU0VSSUFMX0VROworCisgIGlmICgoczEgPCBzMiAmJiAoczIgLSBzMSkgPCAoMVVMPDwzMSkpIHx8CisgICAgICAoczEgPiBzMiAmJiAoczEgLSBzMikgPiAoMVVMPDwzMSkpKQorICAgIHJldHVybiBTRVJJQUxfTFQ7CisgIGlmICgoczEgPCBzMiAmJiAoczIgLSBzMSkgPiAoMVVMPDwzMSkpIHx8CisgICAgICAoczEgPiBzMiAmJiAoczEgLSBzMikgPCAoMVVMPDwzMSkpKQorICAgIHJldHVybiBTRVJJQUxfR1Q7CisgIHJldHVybiBTRVJJQUxfVU5ERUY7Cit9CisKKy8qIENoZWNrIHdoZXRoZXIgdG9kYXkvbm93IGlzIGJldHdlZW4gZGF0ZV9zdGFydCBhbmQgZGF0ZV9lbmQgKi8KK3N0YXRpYyBpbnQgY2hlY2tfZGF0ZV9yYW5nZSh1bnNpZ25lZCBsb25nIGRhdGVfc3RhcnQsIHVuc2lnbmVkIGxvbmcgZGF0ZV9lbmQpCit7CisgIHVuc2lnbmVkIGxvbmcgY3VydGltZTsKKworICAvKiBDaGVja2luZyB0aW1lc3RhbXBzIG1heSBiZSB0ZW1wb3JhcmlseSBkaXNhYmxlZCAqLworICBpZiAob3B0aW9uX2Jvb2woT1BUX0ROU1NFQ19USU1FKSkKKyAgICByZXR1cm4gMTsKKyAgCisgIGN1cnRpbWUgPSB0aW1lKDApOworICAKKyAgLyogV2UgbXVzdCBleHBsaWNpdGx5IGNoZWNrIGFnYWluc3Qgd2FudGVkIHZhbHVlcywgYmVjYXVzZSBvZiBTRVJJQUxfVU5ERUYgKi8KKyAgcmV0dXJuIHNlcmlhbF9jb21wYXJlXzMyKGN1cnRpbWUsIGRhdGVfc3RhcnQpID09IFNFUklBTF9HVAorICAgICYmIHNlcmlhbF9jb21wYXJlXzMyKGN1cnRpbWUsIGRhdGVfZW5kKSA9PSBTRVJJQUxfTFQ7Cit9CisKK3N0YXRpYyB1MTYgKmdldF9kZXNjKGludCB0eXBlKQoreworICAvKiBMaXN0IG9mIFJSdHlwZXMgd2hpY2ggaW5jbHVkZSBkb21haW5zIGluIHRoZSBkYXRhLgorICAgICAwIC0+IGRvbWFpbgorICAgICBpbnRlZ2VyIC0+IG5vIG9mIHBsYWluIGJ5dGVzCisgICAgIC0xIC0+IGVuZAorCisgICAgIHplcm8gaXMgbm90IGEgdmFsaWQgUlJ0eXBlLCBzbyB0aGUgZmluYWwgZW50cnkgaXMgcmV0dXJuZWQgZm9yCisgICAgIGFueXRoaW5nIHdoaWNoIG5lZWRzIG5vIG1hbmdsaW5nLgorICAqLworICAKKyAgc3RhdGljIHUxNiBycl9kZXNjW10gPSAKKyAgICB7IAorICAgICAgVF9OUywgMCwgLTEsIAorICAgICAgVF9NRCwgMCwgLTEsCisgICAgICBUX01GLCAwLCAtMSwKKyAgICAgIFRfQ05BTUUsIDAsIC0xLAorICAgICAgVF9TT0EsIDAsIDAsIC0xLAorICAgICAgVF9NQiwgMCwgLTEsCisgICAgICBUX01HLCAwLCAtMSwKKyAgICAgIFRfTVIsIDAsIC0xLAorICAgICAgVF9QVFIsIDAsIC0xLAorICAgICAgVF9NSU5GTywgMCwgMCwgLTEsCisgICAgICBUX01YLCAyLCAwLCAtMSwKKyAgICAgIFRfUlAsIDAsIDAsIC0xLAorICAgICAgVF9BRlNEQiwgMiwgMCwgLTEsCisgICAgICBUX1JULCAyLCAwLCAtMSwKKyAgICAgIFRfU0lHLCAxOCwgMCwgLTEsCisgICAgICBUX1BYLCAyLCAwLCAwLCAtMSwKKyAgICAgIFRfTlhULCAwLCAtMSwKKyAgICAgIFRfS1gsIDIsIDAsIC0xLAorICAgICAgVF9TUlYsIDYsIDAsIC0xLAorICAgICAgVF9ETkFNRSwgMCwgLTEsCisgICAgICAwLCAtMSAvKiB3aWxkY2FyZC9jYXRjaGFsbCAqLworICAgIH07IAorICAKKyAgdTE2ICpwID0gcnJfZGVzYzsKKyAgCisgIHdoaWxlICgqcCAhPSB0eXBlICYmICpwICE9IDApCisgICAgd2hpbGUgKCpwKysgIT0gKHUxNiktMSk7CisKKyAgcmV0dXJuIHArMTsKK30KKworLyogUmV0dXJuIGJ5dGVzIG9mIGNhbm9uaWNhbGlzZWQgcmRhdGEsIHdoZW4gdGhlIHJldHVybiB2YWx1ZSBpcyB6ZXJvLCB0aGUgcmVtYWluaW5nIAorICAgZGF0YSwgcG9pbnRlZCB0byBieSAqcCwgc2hvdWxkIGJlIHVzZWQgcmF3LiAqLworc3RhdGljIGludCBnZXRfcmRhdGEoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIHVuc2lnbmVkIGNoYXIgKmVuZCwgY2hhciAqYnVmZiwgaW50IGJ1ZmZsZW4sCisJCSAgICAgdW5zaWduZWQgY2hhciAqKnAsIHUxNiAqKmRlc2MpCit7CisgIGludCBkID0gKipkZXNjOworICAKKyAgLyogTm8gbW9yZSBkYXRhIG5lZWRzIG1hbmdsaW5nICovCisgIGlmIChkID09ICh1MTYpLTEpCisgICAgeworICAgICAgLyogSWYgdGhlcmUncyBtb3JlIGRhdGEgdGhhbiB3ZSBoYXZlIHNwYWNlIGZvciwganVzdCByZXR1cm4gd2hhdCBmaXRzLAorCSB3ZSdsbCBnZXQgY2FsbGVkIGFnYWluIGZvciBtb3JlIGNodW5rcyAqLworICAgICAgaWYgKGVuZCAtICpwID4gYnVmZmxlbikKKwl7CisJICBtZW1jcHkoYnVmZiwgKnAsIGJ1ZmZsZW4pOworCSAgKnAgKz0gYnVmZmxlbjsKKwkgIHJldHVybiBidWZmbGVuOworCX0KKyAgICAgIAorICAgICAgcmV0dXJuIDA7CisgICAgfQorIAorICAoKmRlc2MpKys7CisgIAorICBpZiAoZCA9PSAwICYmIGV4dHJhY3RfbmFtZShoZWFkZXIsIHBsZW4sIHAsIGJ1ZmYsIDEsIDApKQorICAgIC8qIGRvbWFpbi1uYW1lLCBjYW5vbmljYWxpc2UgKi8KKyAgICByZXR1cm4gdG9fd2lyZShidWZmKTsKKyAgZWxzZQorICAgIHsgCisgICAgICAvKiBwbGFpbiBkYXRhIHByZWNlZGluZyBhIGRvbWFpbi1uYW1lLCBkb24ndCBydW4gb2ZmIHRoZSBlbmQgb2YgdGhlIGRhdGEgKi8KKyAgICAgIGlmICgoZW5kIC0gKnApIDwgZCkKKwlkID0gZW5kIC0gKnA7CisgICAgICAKKyAgICAgIGlmIChkICE9IDApCisJeworCSAgbWVtY3B5KGJ1ZmYsICpwLCBkKTsKKwkgICpwICs9IGQ7CisJfQorICAgICAgCisgICAgICByZXR1cm4gZDsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgZXhwYW5kX3dvcmtzcGFjZSh1bnNpZ25lZCBjaGFyICoqKndrc3BjLCBpbnQgKnN6LCBpbnQgbmV3KQoreworICB1bnNpZ25lZCBjaGFyICoqcDsKKyAgaW50IG5ld19zeiA9ICpzejsKKyAgCisgIGlmIChuZXdfc3ogPiBuZXcpCisgICAgcmV0dXJuIDE7CisKKyAgaWYgKG5ldyA+PSAxMDApCisgICAgcmV0dXJuIDA7CisKKyAgbmV3X3N6ICs9IDU7CisgIAorICBpZiAoIShwID0gd2hpbmVfbWFsbG9jKChuZXdfc3opICogc2l6ZW9mKHVuc2lnbmVkIGNoYXIgKiopKSkpCisgICAgcmV0dXJuIDA7ICAKKyAgCisgIGlmICgqd2tzcGMpCisgICAgeworICAgICAgbWVtY3B5KHAsICp3a3NwYywgKnN6ICogc2l6ZW9mKHVuc2lnbmVkIGNoYXIgKiopKTsKKyAgICAgIGZyZWUoKndrc3BjKTsKKyAgICB9CisgIAorICAqd2tzcGMgPSBwOworICAqc3ogPSBuZXdfc3o7CisKKyAgcmV0dXJuIDE7Cit9CisKKy8qIEJ1YmJsZSBzb3J0IHRoZSBSUnNldCBpbnRvIHRoZSBjYW5vbmljYWwgb3JkZXIuIAorICAgTm90ZSB0aGF0IHRoZSBieXRlLXN0cmVhbXMgZnJvbSB0d28gUlJzIG1heSBnZXQgdW5zeW5jZWQ6IGNvbnNpZGVyIAorICAgUlJzIHdoaWNoIGhhdmUgdHdvIGRvbWFpbi1uYW1lcyBhdCB0aGUgc3RhcnQgYW5kIHRoZW4gb3RoZXIgZGF0YS4KKyAgIFRoZSBkb21haW4tbmFtZXMgbWF5IGhhdmUgZGlmZmVyZW50IGxlbmd0aHMgaW4gZWFjaCBSUiwgYnV0IHNvcnQgZXF1YWwKKworICAgLS0tLS0tLS0tLS0tCisgICB8YWJjZGV8ZmdoaXwKKyAgIC0tLS0tLS0tLS0tLQorICAgfGFiY2R8ZWZnaGl8CisgICAtLS0tLS0tLS0tLS0KKworICAgbGVhdmluZyB0aGUgZm9sbG93aW5nIGJ5dGVzIGFzIGRlY2lkaW5nIHRoZSBvcmRlci4gSGVuY2UgdGhlIG5hc3R5IGxlZnQxIGFuZCBsZWZ0MiB2YXJpYWJsZXMuCisqLworCitzdGF0aWMgdm9pZCBzb3J0X3Jyc2V0KHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuLCB1MTYgKnJyX2Rlc2MsIGludCBycnNldGlkeCwgCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICoqcnJzZXQsIGNoYXIgKmJ1ZmYxLCBjaGFyICpidWZmMikKK3sKKyAgaW50IHN3YXAsIHF1aXQsIGk7CisgIAorICBkbworICAgIHsKKyAgICAgIGZvciAoc3dhcCA9IDAsIGkgPSAwOyBpIDwgcnJzZXRpZHgtMTsgaSsrKQorCXsKKwkgIGludCByZGxlbjEsIHJkbGVuMiwgbGVmdDEsIGxlZnQyLCBsZW4xLCBsZW4yLCBsZW4sIHJjOworCSAgdTE2ICpkcDEsICpkcDI7CisJICB1bnNpZ25lZCBjaGFyICplbmQxLCAqZW5kMjsKKwkgIC8qIE5vdGUgdGhhdCB0aGVzZSBoYXZlIGJlZW4gZGV0ZXJtaW5lZCB0byBiZSBPSyBwcmV2aW91c2x5LAorCSAgICAgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgTlVMTCByZXR1cm4gaGVyZS4gKi8KKwkgIHVuc2lnbmVkIGNoYXIgKnAxID0gc2tpcF9uYW1lKHJyc2V0W2ldLCBoZWFkZXIsIHBsZW4sIDEwKTsKKwkgIHVuc2lnbmVkIGNoYXIgKnAyID0gc2tpcF9uYW1lKHJyc2V0W2krMV0sIGhlYWRlciwgcGxlbiwgMTApOworCSAgCisJICBwMSArPSA4OyAvKiBza2lwIGNsYXNzLCB0eXBlLCB0dGwgKi8KKwkgIEdFVFNIT1JUKHJkbGVuMSwgcDEpOworCSAgZW5kMSA9IHAxICsgcmRsZW4xOworCSAgCisJICBwMiArPSA4OyAvKiBza2lwIGNsYXNzLCB0eXBlLCB0dGwgKi8KKwkgIEdFVFNIT1JUKHJkbGVuMiwgcDIpOworCSAgZW5kMiA9IHAyICsgcmRsZW4yOyAKKwkgIAorCSAgZHAxID0gZHAyID0gcnJfZGVzYzsKKwkgIAorCSAgZm9yIChxdWl0ID0gMCwgbGVmdDEgPSAwLCBsZWZ0MiA9IDAsIGxlbjEgPSAwLCBsZW4yID0gMDsgIXF1aXQ7KQorCSAgICB7CisJICAgICAgaWYgKGxlZnQxICE9IDApCisJCW1lbW1vdmUoYnVmZjEsIGJ1ZmYxICsgbGVuMSAtIGxlZnQxLCBsZWZ0MSk7CisJICAgICAgCisJICAgICAgaWYgKChsZW4xID0gZ2V0X3JkYXRhKGhlYWRlciwgcGxlbiwgZW5kMSwgYnVmZjEgKyBsZWZ0MSwgTUFYRE5BTUUgLSBsZWZ0MSwgJnAxLCAmZHAxKSkgPT0gMCkKKwkJeworCQkgIHF1aXQgPSAxOworCQkgIGxlbjEgPSBlbmQxIC0gcDE7CisJCSAgbWVtY3B5KGJ1ZmYxICsgbGVmdDEsIHAxLCBsZW4xKTsKKwkJfQorCSAgICAgIGxlbjEgKz0gbGVmdDE7CisJICAgICAgCisJICAgICAgaWYgKGxlZnQyICE9IDApCisJCW1lbW1vdmUoYnVmZjIsIGJ1ZmYyICsgbGVuMiAtIGxlZnQyLCBsZWZ0Mik7CisJICAgICAgCisJICAgICAgaWYgKChsZW4yID0gZ2V0X3JkYXRhKGhlYWRlciwgcGxlbiwgZW5kMiwgYnVmZjIgKyBsZWZ0MiwgTUFYRE5BTUUgLSBsZWZ0MiwgJnAyLCAmZHAyKSkgPT0gMCkKKwkJeworCQkgIHF1aXQgPSAxOworCQkgIGxlbjIgPSBlbmQyIC0gcDI7CisJCSAgbWVtY3B5KGJ1ZmYyICsgbGVmdDIsIHAyLCBsZW4yKTsKKwkJfQorCSAgICAgIGxlbjIgKz0gbGVmdDI7CisJICAgICAgIAorCSAgICAgIGlmIChsZW4xID4gbGVuMikKKwkJbGVmdDEgPSBsZW4xIC0gbGVuMiwgbGVmdDIgPSAwLCBsZW4gPSBsZW4yOworCSAgICAgIGVsc2UKKwkJbGVmdDIgPSBsZW4yIC0gbGVuMSwgbGVmdDEgPSAwLCBsZW4gPSBsZW4xOworCSAgICAgIAorCSAgICAgIHJjID0gKGxlbiA9PSAwKSA/IDAgOiBtZW1jbXAoYnVmZjEsIGJ1ZmYyLCBsZW4pOworCSAgICAgIAorCSAgICAgIGlmIChyYyA+IDAgfHwgKHJjID09IDAgJiYgcXVpdCAmJiBsZW4xID4gbGVuMikpCisJCXsKKwkJICB1bnNpZ25lZCBjaGFyICp0bXAgPSBycnNldFtpKzFdOworCQkgIHJyc2V0W2krMV0gPSBycnNldFtpXTsKKwkJICBycnNldFtpXSA9IHRtcDsKKwkJICBzd2FwID0gcXVpdCA9IDE7CisJCX0KKwkgICAgICBlbHNlIGlmIChyYyA8IDApCisJCXF1aXQgPSAxOworCSAgICB9CisJfQorICAgIH0gd2hpbGUgKHN3YXApOworfQorCisvKiBWYWxpZGF0ZSBhIHNpbmdsZSBSUnNldCAoY2xhc3MsIHR5cGUsIG5hbWUpIGluIHRoZSBzdXBwbGllZCBETlMgcmVwbHkgCisgICBSZXR1cm4gY29kZToKKyAgIFNUQVRfU0VDVVJFICAgaWYgaXQgdmFsaWRhdGVzLgorICAgU1RBVF9TRUNVUkVfV0lMRENBUkQgaWYgaXQgdmFsaWRhdGVzIGFuZCBpcyB0aGUgcmVzdWx0IG9mIHdpbGRjYXJkIGV4cGFuc2lvbi4KKyAgIChJbiB0aGlzIGNhc2UgKndpbGRjYXJkX291dCBwb2ludHMgdG8gdGhlICJib2R5IiBvZiB0aGUgd2lsZGNhcmQgd2l0aGluIG5hbWUuKSAKKyAgIFNUQVRfTk9fU0lHIG5vIFJSc2lncyBmb3VuZC4KKyAgIFNUQVRfSU5TRUNVUkUgUlJzZXQgZW1wdHkuCisgICBTVEFUX0JPR1VTICAgIHNpZ25hdHVyZSBpcyB3cm9uZywgYmFkIHBhY2tldC4KKyAgIFNUQVRfTkVFRF9LRVkgbmVlZCBETlNLRVkgdG8gY29tcGxldGUgdmFsaWRhdGlvbiAobmFtZSBpcyByZXR1cm5lZCBpbiBrZXluYW1lKQorCisgICBpZiBrZXkgaXMgbm9uLU5VTEwsIHVzZSB0aGF0IGtleSwgd2hpY2ggaGFzIHRoZSBhbGdvIGFuZCB0YWcgZ2l2ZW4gaW4gdGhlIHBhcmFtcyBvZiB0aG9zZSBuYW1lcywKKyAgIG90aGVyd2lzZSBmaW5kIHRoZSBrZXkgaW4gdGhlIGNhY2hlLgorCisgICBuYW1lIGlzIHVuY2hhbmdlZCBvbiBleGl0LiBrZXluYW1lIGlzIHVzZWQgYXMgd29ya3NwYWNlIGFuZCB0cmFzaGVkLgorKi8KK3N0YXRpYyBpbnQgdmFsaWRhdGVfcnJzZXQodGltZV90IG5vdywgc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIGludCBjbGFzcywgaW50IHR5cGUsIAorCQkJICBjaGFyICpuYW1lLCBjaGFyICprZXluYW1lLCBjaGFyICoqd2lsZGNhcmRfb3V0LCBzdHJ1Y3QgYmxvY2tkYXRhICprZXksIGludCBrZXlsZW4sIGludCBhbGdvX2luLCBpbnQga2V5dGFnX2luKQoreworICBzdGF0aWMgdW5zaWduZWQgY2hhciAqKnJyc2V0ID0gTlVMTCwgKipzaWdzID0gTlVMTDsKKyAgc3RhdGljIGludCBycnNldF9zeiA9IDAsIHNpZ19zeiA9IDA7CisgIAorICB1bnNpZ25lZCBjaGFyICpwOworICBpbnQgcnJzZXRpZHgsIHNpZ2lkeCwgcmVzLCByZGxlbiwgaiwgbmFtZV9sYWJlbHM7CisgIHN0cnVjdCBjcmVjICpjcmVjcCA9IE5VTEw7CisgIGludCB0eXBlX2NvdmVyZWQsIGFsZ28sIGxhYmVscywgb3JpZ190dGwsIHNpZ19leHBpcmF0aW9uLCBzaWdfaW5jZXB0aW9uLCBrZXlfdGFnOworICB1MTYgKnJyX2Rlc2MgPSBnZXRfZGVzYyh0eXBlKTsKKyAKKyAgaWYgKHdpbGRjYXJkX291dCkKKyAgICAqd2lsZGNhcmRfb3V0ID0gTlVMTDsKKyAgCisgIGlmICghKHAgPSBza2lwX3F1ZXN0aW9ucyhoZWFkZXIsIHBsZW4pKSkKKyAgICByZXR1cm4gU1RBVF9CT0dVUzsKKyAgCisgIG5hbWVfbGFiZWxzID0gY291bnRfbGFiZWxzKG5hbWUpOyAvKiBGb3IgNDAzNSA1LjMuMiBjaGVjayAqLworCisgIC8qIGxvb2sgZm9yIFJSU0lHcyBmb3IgdGhpcyBSUnNldCBhbmQgZ2V0IHBvaW50ZXJzIHRvIGVhY2ggUlIgaW4gdGhlIHNldC4gKi8KKyAgZm9yIChycnNldGlkeCA9IDAsIHNpZ2lkeCA9IDAsIGogPSBudG9ocyhoZWFkZXItPmFuY291bnQpICsgbnRvaHMoaGVhZGVyLT5uc2NvdW50KTsgCisgICAgICAgaiAhPSAwOyBqLS0pIAorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKnBzdGFydCwgKnBkYXRhOworICAgICAgaW50IHN0eXBlLCBzY2xhc3M7CisKKyAgICAgIHBzdGFydCA9IHA7CisgICAgICAKKyAgICAgIGlmICghKHJlcyA9IGV4dHJhY3RfbmFtZShoZWFkZXIsIHBsZW4sICZwLCBuYW1lLCAwLCAxMCkpKQorCXJldHVybiBTVEFUX0JPR1VTOyAvKiBiYWQgcGFja2V0ICovCisgICAgICAKKyAgICAgIEdFVFNIT1JUKHN0eXBlLCBwKTsKKyAgICAgIEdFVFNIT1JUKHNjbGFzcywgcCk7CisgICAgICBwICs9IDQ7IC8qIFRUTCAqLworICAgICAgCisgICAgICBwZGF0YSA9IHA7CisKKyAgICAgIEdFVFNIT1JUKHJkbGVuLCBwKTsKKyAgICAgIAorICAgICAgaWYgKCFDSEVDS19MRU4oaGVhZGVyLCBwLCBwbGVuLCByZGxlbikpCisJcmV0dXJuIFNUQVRfQk9HVVM7IAorICAgICAgCisgICAgICBpZiAocmVzID09IDEgJiYgc2NsYXNzID09IGNsYXNzKQorCXsKKwkgIGlmIChzdHlwZSA9PSB0eXBlKQorCSAgICB7CisJICAgICAgaWYgKCFleHBhbmRfd29ya3NwYWNlKCZycnNldCwgJnJyc2V0X3N6LCBycnNldGlkeCkpCisJCXJldHVybiBTVEFUX0JPR1VTOyAKKwkgICAgICAKKwkgICAgICBycnNldFtycnNldGlkeCsrXSA9IHBzdGFydDsKKwkgICAgfQorCSAgCisJICBpZiAoc3R5cGUgPT0gVF9SUlNJRykKKwkgICAgeworCSAgICAgIGlmIChyZGxlbiA8IDE4KQorCQlyZXR1cm4gU1RBVF9CT0dVUzsgLyogYmFkIHBhY2tldCAqLyAKKwkgICAgICAKKwkgICAgICBHRVRTSE9SVCh0eXBlX2NvdmVyZWQsIHApOworCSAgICAgIAorCSAgICAgIGlmICh0eXBlX2NvdmVyZWQgPT0gdHlwZSkKKwkJeworCQkgIGlmICghZXhwYW5kX3dvcmtzcGFjZSgmc2lncywgJnNpZ19zeiwgc2lnaWR4KSkKKwkJICAgIHJldHVybiBTVEFUX0JPR1VTOyAKKwkJICAKKwkJICBzaWdzW3NpZ2lkeCsrXSA9IHBkYXRhOworCQl9IAorCSAgICAgIAorCSAgICAgIHAgPSBwZGF0YSArIDI7IC8qIHJlc3RvcmUgZm9yIEFERF9SRExFTiAqLworCSAgICB9CisJfQorICAgICAgCisgICAgICBpZiAoIUFERF9SRExFTihoZWFkZXIsIHAsIHBsZW4sIHJkbGVuKSkKKwlyZXR1cm4gU1RBVF9CT0dVUzsKKyAgICB9CisgIAorICAvKiBSUnNldCBlbXB0eSAqLworICBpZiAocnJzZXRpZHggPT0gMCkKKyAgICByZXR1cm4gU1RBVF9JTlNFQ1VSRTsgCisKKyAgLyogbm8gUlJTSUdzICovCisgIGlmIChzaWdpZHggPT0gMCkKKyAgICByZXR1cm4gU1RBVF9OT19TSUc7IAorICAKKyAgLyogU29ydCBSUnNldCByZWNvcmRzIGludG8gY2Fub25pY2FsIG9yZGVyLiAKKyAgICAgTm90ZSB0aGF0IGF0IHRoaXMgcG9pbnQga2V5bmFtZSBhbmQgZGFlbW9uLT53b3Jrc3BhY2VuYW1lIGJ1ZmZzIGFyZQorICAgICB1bnVzZWQsIGFuZCB1c2VkIGFzIHdvcmtzcGFjZSBieSB0aGUgc29ydC4gKi8KKyAgc29ydF9ycnNldChoZWFkZXIsIHBsZW4sIHJyX2Rlc2MsIHJyc2V0aWR4LCBycnNldCwgZGFlbW9uLT53b3Jrc3BhY2VuYW1lLCBrZXluYW1lKTsKKyAgICAgICAgIAorICAvKiBOb3cgdHJ5IGFsbCB0aGUgc2lncyB0byB0cnkgYW5kIGZpbmQgb25lIHdoaWNoIHZhbGlkYXRlcyAqLworICBmb3IgKGogPSAwOyBqIDxzaWdpZHg7IGorKykKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyICpwc2F2LCAqc2lnLCAqZGlnZXN0OworICAgICAgaW50IGksIHdpcmVfbGVuLCBzaWdfbGVuOworICAgICAgY29uc3Qgc3RydWN0IG5ldHRsZV9oYXNoICpoYXNoOworICAgICAgdm9pZCAqY3R4OworICAgICAgY2hhciAqbmFtZV9zdGFydDsKKyAgICAgIHUzMiBuc2lndHRsOworICAgICAgCisgICAgICBwID0gc2lnc1tqXTsKKyAgICAgIEdFVFNIT1JUKHJkbGVuLCBwKTsgLyogcmRsZW4gPj0gMTggY2hlY2tlZCBwcmV2aW91c2x5ICovCisgICAgICBwc2F2ID0gcDsKKyAgICAgIAorICAgICAgcCArPSAyOyAvKiB0eXBlX2NvdmVyZWQgLSBhbHJlYWR5IGNoZWNrZWQgKi8KKyAgICAgIGFsZ28gPSAqcCsrOworICAgICAgbGFiZWxzID0gKnArKzsKKyAgICAgIEdFVExPTkcob3JpZ190dGwsIHApOworICAgICAgR0VUTE9ORyhzaWdfZXhwaXJhdGlvbiwgcCk7CisgICAgICBHRVRMT05HKHNpZ19pbmNlcHRpb24sIHApOworICAgICAgR0VUU0hPUlQoa2V5X3RhZywgcCk7CisgICAgICAKKyAgICAgIGlmICghZXh0cmFjdF9uYW1lKGhlYWRlciwgcGxlbiwgJnAsIGtleW5hbWUsIDEsIDApKQorCXJldHVybiBTVEFUX0JPR1VTOworCisgICAgICAvKiBSRkMgNDAzNSA1LjMuMSBzYXlzIHRoYXQgdGhlIFNpZ25lcidzIE5hbWUgZmllbGQgTVVTVCBlcXVhbAorCSB0aGUgbmFtZSBvZiB0aGUgem9uZSBjb250YWluaW5nIHRoZSBSUnNldC4gV2UgY2FuJ3QgdGVsbCB0aGF0CisJIGZvciBjZXJ0YWluLCBidXQgd2UgY2FuIGNoZWNrIHRoYXQgIHRoZSBSUnNldCBuYW1lIGlzIGVxdWFsIHRvCisJIG9yIGVuY2xvc2VzIHRoZSBzaWduZXJzIG5hbWUsIHdoaWNoIHNob3VsZCBiZSBlbm91Z2ggdG8gc3RvcCAKKwkgYW4gYXR0YWNrZXIgdXNpbmcgc2lnbmF0dXJlcyBtYWRlIHdpdGggdGhlIGtleSBvZiBhbiB1bnJlbGF0ZWQgCisJIHpvbmUgaGUgY29udHJvbHMuIE5vdGUgdGhhdCB0aGUgcm9vdCBrZXkgaXMgYWx3YXlzIGFsbG93ZWQuICovCisgICAgICBpZiAoKmtleW5hbWUgIT0gMCkKKwl7CisJICBpbnQgZmFpbGVkID0gMDsKKwkgIAorCSAgZm9yIChuYW1lX3N0YXJ0ID0gbmFtZTsgIWhvc3RuYW1lX2lzZXF1YWwobmFtZV9zdGFydCwga2V5bmFtZSk7ICkKKwkgICAgaWYgKChuYW1lX3N0YXJ0ID0gc3RyY2hyKG5hbWVfc3RhcnQsICcuJykpKQorCSAgICAgIG5hbWVfc3RhcnQrKzsgLyogY2hvcCBhIGxhYmVsIG9mZiBhbmQgdHJ5IGFnYWluICovCisJICAgIGVsc2UKKwkgICAgICB7CisJCWZhaWxlZCA9IDE7CisJCWJyZWFrOworCSAgICAgIH0KKworCSAgLyogQmFkIHNpZywgdHJ5IGFub3RoZXIgKi8KKwkgIGlmIChmYWlsZWQpCisJICAgIGNvbnRpbnVlOworCX0KKyAgICAgIAorICAgICAgLyogT3RoZXIgNS4zLjEgY2hlY2tzICovCisgICAgICBpZiAoIWNoZWNrX2RhdGVfcmFuZ2Uoc2lnX2luY2VwdGlvbiwgc2lnX2V4cGlyYXRpb24pIHx8CisJICBsYWJlbHMgPiBuYW1lX2xhYmVscyB8fAorCSAgIShoYXNoID0gaGFzaF9maW5kKGFsZ29fZGlnZXN0X25hbWUoYWxnbykpKSB8fAorCSAgIWhhc2hfaW5pdChoYXNoLCAmY3R4LCAmZGlnZXN0KSkKKwljb250aW51ZTsKKwkKKyAgICAgIC8qIE9LLCB3ZSBoYXZlIHRoZSBzaWduYXR1cmUgcmVjb3JkLCBzZWUgaWYgdGhlIHJlbGV2YW50IEROU0tFWSBpcyBpbiB0aGUgY2FjaGUuICovCisgICAgICBpZiAoIWtleSAmJiAhKGNyZWNwID0gY2FjaGVfZmluZF9ieV9uYW1lKE5VTEwsIGtleW5hbWUsIG5vdywgRl9ETlNLRVkpKSkKKwlyZXR1cm4gU1RBVF9ORUVEX0tFWTsKKyAgICAgIAorICAgICAgc2lnID0gcDsKKyAgICAgIHNpZ19sZW4gPSByZGxlbiAtIChwIC0gcHNhdik7CisgICAgICAgICAgICAgIAorICAgICAgbnNpZ3R0bCA9IGh0b25sKG9yaWdfdHRsKTsKKyAgICAgIAorICAgICAgaGFzaC0+dXBkYXRlKGN0eCwgMTgsIHBzYXYpOworICAgICAgd2lyZV9sZW4gPSB0b193aXJlKGtleW5hbWUpOworICAgICAgaGFzaC0+dXBkYXRlKGN0eCwgKHVuc2lnbmVkIGludCl3aXJlX2xlbiwgKHVuc2lnbmVkIGNoYXIqKWtleW5hbWUpOworICAgICAgZnJvbV93aXJlKGtleW5hbWUpOworICAgICAgCisgICAgICBmb3IgKGkgPSAwOyBpIDwgcnJzZXRpZHg7ICsraSkKKwl7CisJICBpbnQgc2VnOworCSAgdW5zaWduZWQgY2hhciAqZW5kLCAqY3A7CisJICB1MTYgbGVuLCAqZHA7CisJICAKKwkgIHAgPSBycnNldFtpXTsKKwkgIGlmICghZXh0cmFjdF9uYW1lKGhlYWRlciwgcGxlbiwgJnAsIG5hbWUsIDEsIDEwKSkgCisJICAgIHJldHVybiBTVEFUX0JPR1VTOworCisJICBuYW1lX3N0YXJ0ID0gbmFtZTsKKwkgIAorCSAgLyogaWYgbW9yZSBsYWJlbHMgdGhhbiBpbiBSUnNpZyBuYW1lLCBoYXNoICouPG5vIGxhYmVscyBpbiBycnNpZyBsYWJlbHMgZmllbGQ+ICA0MDM1IDUuMy4yICovCisJICBpZiAobGFiZWxzIDwgbmFtZV9sYWJlbHMpCisJICAgIHsKKwkgICAgICBpbnQgazsKKwkgICAgICBmb3IgKGsgPSBuYW1lX2xhYmVscyAtIGxhYmVsczsgayAhPSAwOyBrLS0pCisJCXsKKwkJICB3aGlsZSAoKm5hbWVfc3RhcnQgIT0gJy4nICYmICpuYW1lX3N0YXJ0ICE9IDApCisJCSAgICBuYW1lX3N0YXJ0Kys7CisJCSAgaWYgKGsgIT0gMSAmJiAqbmFtZV9zdGFydCA9PSAnLicpCisJCSAgICBuYW1lX3N0YXJ0Kys7CisJCX0KKwkgICAgICAKKwkgICAgICBpZiAod2lsZGNhcmRfb3V0KQorCQkqd2lsZGNhcmRfb3V0ID0gbmFtZV9zdGFydCsxOworCisJICAgICAgbmFtZV9zdGFydC0tOworCSAgICAgICpuYW1lX3N0YXJ0ID0gJyonOworCSAgICB9CisJICAKKwkgIHdpcmVfbGVuID0gdG9fd2lyZShuYW1lX3N0YXJ0KTsKKwkgIGhhc2gtPnVwZGF0ZShjdHgsICh1bnNpZ25lZCBpbnQpd2lyZV9sZW4sICh1bnNpZ25lZCBjaGFyICopbmFtZV9zdGFydCk7CisJICBoYXNoLT51cGRhdGUoY3R4LCA0LCBwKTsgLyogY2xhc3MgYW5kIHR5cGUgKi8KKwkgIGhhc2gtPnVwZGF0ZShjdHgsIDQsICh1bnNpZ25lZCBjaGFyICopJm5zaWd0dGwpOworCSAgCisJICBwICs9IDg7IC8qIHNraXAgY2xhc3MsIHR5cGUsIHR0bCAqLworCSAgR0VUU0hPUlQocmRsZW4sIHApOworCSAgaWYgKCFDSEVDS19MRU4oaGVhZGVyLCBwLCBwbGVuLCByZGxlbikpCisJICAgIHJldHVybiBTVEFUX0JPR1VTOyAKKwkgIAorCSAgZW5kID0gcCArIHJkbGVuOworCSAgCisJICAvKiBjYW5vbmljYWxpc2UgcmRhdGEgYW5kIGNhbGN1bGF0ZSBsZW5ndGggb2Ygc2FtZSwgdXNlIG5hbWUgYnVmZmVyIGFzIHdvcmtzcGFjZSAqLworCSAgY3AgPSBwOworCSAgZHAgPSBycl9kZXNjOworCSAgZm9yIChsZW4gPSAwOyAoc2VnID0gZ2V0X3JkYXRhKGhlYWRlciwgcGxlbiwgZW5kLCBuYW1lLCBNQVhETkFNRSwgJmNwLCAmZHApKSAhPSAwOyBsZW4gKz0gc2VnKTsKKwkgIGxlbiArPSBlbmQgLSBjcDsKKwkgIGxlbiA9IGh0b25zKGxlbik7CisJICBoYXNoLT51cGRhdGUoY3R4LCAyLCAodW5zaWduZWQgY2hhciAqKSZsZW4pOyAKKwkgIAorCSAgLyogTm93IGNhbm9uaWNhbGlzZSBhZ2FpbiBhbmQgZGlnZXN0LiAqLworCSAgY3AgPSBwOworCSAgZHAgPSBycl9kZXNjOworCSAgd2hpbGUgKChzZWcgPSBnZXRfcmRhdGEoaGVhZGVyLCBwbGVuLCBlbmQsIG5hbWUsIE1BWEROQU1FLCAmY3AsICZkcCkpKQorCSAgICBoYXNoLT51cGRhdGUoY3R4LCBzZWcsICh1bnNpZ25lZCBjaGFyICopbmFtZSk7CisJICBpZiAoY3AgIT0gZW5kKQorCSAgICBoYXNoLT51cGRhdGUoY3R4LCBlbmQgLSBjcCwgY3ApOworCX0KKyAgICAgCisgICAgICBoYXNoLT5kaWdlc3QoY3R4LCBoYXNoLT5kaWdlc3Rfc2l6ZSwgZGlnZXN0KTsKKyAgICAgIAorICAgICAgLyogbmFtZWJ1ZmYgdXNlZCBmb3Igd29ya3NwYWNlIGFib3ZlLCByZXN0b3JlIHRvIGxlYXZlIHVuY2hhbmdlZCBvbiBleGl0ICovCisgICAgICBwID0gKHVuc2lnbmVkIGNoYXIqKShycnNldFswXSk7CisgICAgICBleHRyYWN0X25hbWUoaGVhZGVyLCBwbGVuLCAmcCwgbmFtZSwgMSwgMCk7CisKKyAgICAgIGlmIChrZXkpCisJeworCSAgaWYgKGFsZ29faW4gPT0gYWxnbyAmJiBrZXl0YWdfaW4gPT0ga2V5X3RhZyAmJgorCSAgICAgIHZlcmlmeShrZXksIGtleWxlbiwgc2lnLCBzaWdfbGVuLCBkaWdlc3QsIGhhc2gtPmRpZ2VzdF9zaXplLCBhbGdvKSkKKwkgICAgcmV0dXJuIFNUQVRfU0VDVVJFOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBpdGVyYXRlIHRocm91Z2ggYWxsIHBvc3NpYmxlIGtleXMgNDAzNSA1LjMuMSAqLworCSAgZm9yICg7IGNyZWNwOyBjcmVjcCA9IGNhY2hlX2ZpbmRfYnlfbmFtZShjcmVjcCwga2V5bmFtZSwgbm93LCBGX0ROU0tFWSkpCisJICAgIGlmIChjcmVjcC0+YWRkci5rZXkuYWxnbyA9PSBhbGdvICYmIAorCQljcmVjcC0+YWRkci5rZXkua2V5dGFnID09IGtleV90YWcgJiYKKwkJY3JlY3AtPnVpZCA9PSAodW5zaWduZWQgaW50KWNsYXNzICYmCisJCXZlcmlmeShjcmVjcC0+YWRkci5rZXkua2V5ZGF0YSwgY3JlY3AtPmFkZHIua2V5LmtleWxlbiwgc2lnLCBzaWdfbGVuLCBkaWdlc3QsIGhhc2gtPmRpZ2VzdF9zaXplLCBhbGdvKSkKKwkgICAgICByZXR1cm4gKGxhYmVscyA8IG5hbWVfbGFiZWxzKSA/IFNUQVRfU0VDVVJFX1dJTERDQVJEIDogU1RBVF9TRUNVUkU7CisJfQorICAgIH0KKworICByZXR1cm4gU1RBVF9CT0dVUzsKK30KKyAKKy8qIFRoZSBETlMgcGFja2V0IGlzIGV4cGVjdGVkIHRvIGNvbnRhaW4gdGhlIGFuc3dlciB0byBhIEROU0tFWSBxdWVyeS4KKyAgIFB1dCBhbGwgRE5TS0VZcyBpbiB0aGUgYW5zd2VyIHdoaWNoIGFyZSB2YWxpZCBpbnRvIHRoZSBjYWNoZS4KKyAgIHJldHVybiBjb2RlczoKKyAgICAgICAgIFNUQVRfU0VDVVJFICAgQXQgbGVhc3Qgb25lIHZhbGlkIEROU0tFWSBmb3VuZCBhbmQgaW4gY2FjaGUuCisJIFNUQVRfQk9HVVMgICAgTm8gRE5TS0VZcyBmb3VuZCwgd2hpY2ggIGNhbiBiZSB2YWxpZGF0ZWQgd2l0aCBEUywKKwkgICAgICAgICAgICAgICBvciBzZWxmLXNpZ24gZm9yIEROU0tFWSBSUnNldCBpcyBub3QgdmFsaWQsIGJhZCBwYWNrZXQuCisJIFNUQVRfTkVFRF9EUyAgRFMgcmVjb3JkcyB0byB2YWxpZGF0ZSBhIGtleSBub3QgZm91bmQsIG5hbWUgaW4ga2V5bmFtZSAKKyovCitpbnQgZG5zc2VjX3ZhbGlkYXRlX2J5X2RzKHRpbWVfdCBub3csIHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuLCBjaGFyICpuYW1lLCBjaGFyICprZXluYW1lLCBpbnQgY2xhc3MpCit7CisgIHVuc2lnbmVkIGNoYXIgKnBzYXZlLCAqcCA9ICh1bnNpZ25lZCBjaGFyICopKGhlYWRlcisxKTsKKyAgc3RydWN0IGNyZWMgKmNyZWNwLCAqcmVjcDE7CisgIGludCByYywgaiwgcXR5cGUsIHFjbGFzcywgdHRsLCByZGxlbiwgZmxhZ3MsIGFsZ28sIHZhbGlkLCBrZXl0YWcsIHR5cGVfY292ZXJlZDsKKyAgc3RydWN0IGJsb2NrZGF0YSAqa2V5OworICBzdHJ1Y3QgYWxsX2FkZHIgYTsKKworICBpZiAobnRvaHMoaGVhZGVyLT5xZGNvdW50KSAhPSAxIHx8CisgICAgICAhZXh0cmFjdF9uYW1lKGhlYWRlciwgcGxlbiwgJnAsIG5hbWUsIDEsIDQpKQorICAgIHJldHVybiBTVEFUX0JPR1VTOworCisgIEdFVFNIT1JUKHF0eXBlLCBwKTsKKyAgR0VUU0hPUlQocWNsYXNzLCBwKTsKKyAgCisgIGlmIChxdHlwZSAhPSBUX0ROU0tFWSB8fCBxY2xhc3MgIT0gY2xhc3MgfHwgbnRvaHMoaGVhZGVyLT5hbmNvdW50KSA9PSAwKQorICAgIHJldHVybiBTVEFUX0JPR1VTOworCisgIC8qIFNlZSBpZiB3ZSBoYXZlIGNhY2hlZCBhIERTIHJlY29yZCB3aGljaCB2YWxpZGF0ZXMgdGhpcyBrZXkgKi8KKyAgaWYgKCEoY3JlY3AgPSBjYWNoZV9maW5kX2J5X25hbWUoTlVMTCwgbmFtZSwgbm93LCBGX0RTKSkpCisgICAgeworICAgICAgc3RyY3B5KGtleW5hbWUsIG5hbWUpOworICAgICAgcmV0dXJuIFNUQVRfTkVFRF9EUzsKKyAgICB9CisgIAorICAvKiBJZiB3ZSd2ZSBjYWNoZWQgdGhhdCBEUyBwcm92YWJseSBkb2Vzbid0IGV4aXN0LCByZXN1bHQgbXVzdCBiZSBJTlNFQ1VSRSAqLworICBpZiAoY3JlY3AtPmZsYWdzICYgRl9ORUcpCisgICAgcmV0dXJuIFNUQVRfSU5TRUNVUkU7CisgIAorICAvKiBOT1RFLCB3ZSBuZWVkIHRvIGZpbmQgT05FIEROU0tFWSB3aGljaCBtYXRjaGVzIHRoZSBEUyAqLworICBmb3IgKHZhbGlkID0gMCwgaiA9IG50b2hzKGhlYWRlci0+YW5jb3VudCk7IGogIT0gMCAmJiAhdmFsaWQ7IGotLSkgCisgICAgeworICAgICAgLyogRW5zdXJlIHdlIGhhdmUgdHlwZSwgY2xhc3MgIFRUTCBhbmQgbGVuZ3RoICovCisgICAgICBpZiAoIShyYyA9IGV4dHJhY3RfbmFtZShoZWFkZXIsIHBsZW4sICZwLCBuYW1lLCAwLCAxMCkpKQorCXJldHVybiBTVEFUX0JPR1VTOyAvKiBiYWQgcGFja2V0ICovCisgIAorICAgICAgR0VUU0hPUlQocXR5cGUsIHApOyAKKyAgICAgIEdFVFNIT1JUKHFjbGFzcywgcCk7CisgICAgICBHRVRMT05HKHR0bCwgcCk7CisgICAgICBHRVRTSE9SVChyZGxlbiwgcCk7CisgCisgICAgICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIHAsIHBsZW4sIHJkbGVuKSB8fCByZGxlbiA8IDQpCisJcmV0dXJuIFNUQVRfQk9HVVM7IC8qIGJhZCBwYWNrZXQgKi8KKyAgICAgIAorICAgICAgaWYgKHFjbGFzcyAhPSBjbGFzcyB8fCBxdHlwZSAhPSBUX0ROU0tFWSB8fCByYyA9PSAyKQorCXsKKwkgIHAgKz0gcmRsZW47CisJICBjb250aW51ZTsKKwl9CisgICAgICAgICAgICAKKyAgICAgIHBzYXZlID0gcDsKKyAgICAgIAorICAgICAgR0VUU0hPUlQoZmxhZ3MsIHApOworICAgICAgaWYgKCpwKysgIT0gMykKKwlyZXR1cm4gU1RBVF9CT0dVUzsKKyAgICAgIGFsZ28gPSAqcCsrOworICAgICAga2V5dGFnID0gZG5za2V5X2tleXRhZyhhbGdvLCBmbGFncywgcCwgcmRsZW4gLSA0KTsKKyAgICAgIGtleSA9IE5VTEw7CisgICAgICAKKyAgICAgIC8qIGtleSBtdXN0IGhhdmUgem9uZSBrZXkgZmxhZyBzZXQgKi8KKyAgICAgIGlmIChmbGFncyAmIDB4MTAwKQorCWtleSA9IGJsb2NrZGF0YV9hbGxvYygoY2hhciopcCwgcmRsZW4gLSA0KTsKKyAgICAgIAorICAgICAgcCA9IHBzYXZlOworICAgICAgCisgICAgICBpZiAoIUFERF9SRExFTihoZWFkZXIsIHAsIHBsZW4sIHJkbGVuKSkKKwl7CisJICBpZiAoa2V5KQorCSAgICBibG9ja2RhdGFfZnJlZShrZXkpOworCSAgcmV0dXJuIFNUQVRfQk9HVVM7IC8qIGJhZCBwYWNrZXQgKi8KKwl9CisKKyAgICAgIC8qIE5vIHpvbmUga2V5IGZsYWcgb3IgbWFsbG9jIGZhaWx1cmUgKi8KKyAgICAgIGlmICgha2V5KQorCWNvbnRpbnVlOworICAgICAgCisgICAgICBmb3IgKHJlY3AxID0gY3JlY3A7IHJlY3AxOyByZWNwMSA9IGNhY2hlX2ZpbmRfYnlfbmFtZShyZWNwMSwgbmFtZSwgbm93LCBGX0RTKSkKKwl7CisJICB2b2lkICpjdHg7CisJICB1bnNpZ25lZCBjaGFyICpkaWdlc3QsICpkc19kaWdlc3Q7CisJICBjb25zdCBzdHJ1Y3QgbmV0dGxlX2hhc2ggKmhhc2g7CisJICAKKwkgIGlmIChyZWNwMS0+YWRkci5kcy5hbGdvID09IGFsZ28gJiYgCisJICAgICAgcmVjcDEtPmFkZHIuZHMua2V5dGFnID09IGtleXRhZyAmJgorCSAgICAgIHJlY3AxLT51aWQgPT0gKHVuc2lnbmVkIGludCljbGFzcyAmJgorCSAgICAgIChoYXNoID0gaGFzaF9maW5kKGRzX2RpZ2VzdF9uYW1lKHJlY3AxLT5hZGRyLmRzLmRpZ2VzdCkpKSAmJgorCSAgICAgIGhhc2hfaW5pdChoYXNoLCAmY3R4LCAmZGlnZXN0KSkKKwkgICAgCisJICAgIHsKKwkgICAgICBpbnQgd2lyZV9sZW4gPSB0b193aXJlKG5hbWUpOworCSAgICAgIAorCSAgICAgIC8qIE5vdGUgdGhhdCBkaWdlc3QgbWF5IGJlIGRpZmZlcmVudCBiZXR3ZWVuIERTcywgc28gCisJCSB3ZSBjYW4ndCBtb3ZlIHRoaXMgb3V0c2lkZSB0aGUgbG9vcC4gKi8KKwkgICAgICBoYXNoLT51cGRhdGUoY3R4LCAodW5zaWduZWQgaW50KXdpcmVfbGVuLCAodW5zaWduZWQgY2hhciAqKW5hbWUpOworCSAgICAgIGhhc2gtPnVwZGF0ZShjdHgsICh1bnNpZ25lZCBpbnQpcmRsZW4sIHBzYXZlKTsKKwkgICAgICBoYXNoLT5kaWdlc3QoY3R4LCBoYXNoLT5kaWdlc3Rfc2l6ZSwgZGlnZXN0KTsKKwkgICAgICAKKwkgICAgICBmcm9tX3dpcmUobmFtZSk7CisJICAgICAgCisJICAgICAgaWYgKHJlY3AxLT5hZGRyLmRzLmtleWxlbiA9PSAoaW50KWhhc2gtPmRpZ2VzdF9zaXplICYmCisJCSAgKGRzX2RpZ2VzdCA9IGJsb2NrZGF0YV9yZXRyaWV2ZShyZWNwMS0+YWRkci5rZXkua2V5ZGF0YSwgcmVjcDEtPmFkZHIuZHMua2V5bGVuLCBOVUxMKSkgJiYKKwkJICBtZW1jbXAoZHNfZGlnZXN0LCBkaWdlc3QsIHJlY3AxLT5hZGRyLmRzLmtleWxlbikgPT0gMCAmJgorCQkgIHZhbGlkYXRlX3Jyc2V0KG5vdywgaGVhZGVyLCBwbGVuLCBjbGFzcywgVF9ETlNLRVksIG5hbWUsIGtleW5hbWUsIE5VTEwsIGtleSwgcmRsZW4gLSA0LCBhbGdvLCBrZXl0YWcpID09IFNUQVRfU0VDVVJFKQorCQl7CisJCSAgdmFsaWQgPSAxOworCQkgIGJyZWFrOworCQl9CisJICAgIH0KKwl9CisgICAgICBibG9ja2RhdGFfZnJlZShrZXkpOworICAgIH0KKworICBpZiAodmFsaWQpCisgICAgeworICAgICAgLyogRE5TS0VZIFJSc2V0IGRldGVybWluZWQgdG8gYmUgT0ssIG5vdyBjYWNoZSBpdCBhbmQgdGhlIFJSc2lncyB0aGF0IHNpZ24gaXQuICovCisgICAgICBjYWNoZV9zdGFydF9pbnNlcnQoKTsKKyAgICAgIAorICAgICAgcCA9IHNraXBfcXVlc3Rpb25zKGhlYWRlciwgcGxlbik7CisKKyAgICAgIGZvciAoaiA9IG50b2hzKGhlYWRlci0+YW5jb3VudCk7IGogIT0gMDsgai0tKSAKKwl7CisJICAvKiBFbnN1cmUgd2UgaGF2ZSB0eXBlLCBjbGFzcyAgVFRMIGFuZCBsZW5ndGggKi8KKwkgIGlmICghKHJjID0gZXh0cmFjdF9uYW1lKGhlYWRlciwgcGxlbiwgJnAsIG5hbWUsIDAsIDEwKSkpCisJICAgIHJldHVybiBTVEFUX0lOU0VDVVJFOyAvKiBiYWQgcGFja2V0ICovCisJICAKKwkgIEdFVFNIT1JUKHF0eXBlLCBwKTsgCisJICBHRVRTSE9SVChxY2xhc3MsIHApOworCSAgR0VUTE9ORyh0dGwsIHApOworCSAgR0VUU0hPUlQocmRsZW4sIHApOworCSAgICAKKwkgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgcCwgcGxlbiwgcmRsZW4pKQorCSAgICByZXR1cm4gU1RBVF9CT0dVUzsgLyogYmFkIHBhY2tldCAqLworCSAgCisJICBpZiAocWNsYXNzID09IGNsYXNzICYmIHJjID09IDEpCisJICAgIHsKKwkgICAgICBwc2F2ZSA9IHA7CisJICAgICAgCisJICAgICAgaWYgKHF0eXBlID09IFRfRE5TS0VZKQorCQl7CisJCSAgaWYgKHJkbGVuIDwgNCkKKwkJICAgIHJldHVybiBTVEFUX0JPR1VTOyAvKiBiYWQgcGFja2V0ICovCisJCSAgCisJCSAgR0VUU0hPUlQoZmxhZ3MsIHApOworCQkgIGlmICgqcCsrICE9IDMpCisJCSAgICByZXR1cm4gU1RBVF9CT0dVUzsKKwkJICBhbGdvID0gKnArKzsKKwkJICBrZXl0YWcgPSBkbnNrZXlfa2V5dGFnKGFsZ28sIGZsYWdzLCBwLCByZGxlbiAtIDQpOworCQkgIAorCQkgIC8qIENhY2hlIG5lZWRzIHRvIGtub3duIGNsYXNzIGZvciBETlNTRUMgc3R1ZmYgKi8KKwkJICBhLmFkZHIuZG5zc2VjLmNsYXNzID0gY2xhc3M7CisJCSAgCisJCSAgaWYgKChrZXkgPSBibG9ja2RhdGFfYWxsb2MoKGNoYXIqKXAsIHJkbGVuIC0gNCkpKQorCQkgICAgeworCQkgICAgICBpZiAoIShyZWNwMSA9IGNhY2hlX2luc2VydChuYW1lLCAmYSwgbm93LCB0dGwsIEZfRk9SV0FSRCB8IEZfRE5TS0VZIHwgRl9ETlNTRUNPSykpKQorCQkJYmxvY2tkYXRhX2ZyZWUoa2V5KTsKKwkJICAgICAgZWxzZQorCQkJeworCQkJICBhLmFkZHIua2V5dGFnID0ga2V5dGFnOworCQkJICBsb2dfcXVlcnkoRl9OT0VYVFJBIHwgRl9LRVlUQUcgfCBGX1VQU1RSRUFNLCBuYW1lLCAmYSwgIkROU0tFWSBrZXl0YWcgJXUiKTsKKwkJCSAgCisJCQkgIHJlY3AxLT5hZGRyLmtleS5rZXlsZW4gPSByZGxlbiAtIDQ7CisJCQkgIHJlY3AxLT5hZGRyLmtleS5rZXlkYXRhID0ga2V5OworCQkJICByZWNwMS0+YWRkci5rZXkuYWxnbyA9IGFsZ287CisJCQkgIHJlY3AxLT5hZGRyLmtleS5rZXl0YWcgPSBrZXl0YWc7CisJCQkgIHJlY3AxLT5hZGRyLmtleS5mbGFncyA9IGZsYWdzOworCQkJfQorCQkgICAgfQorCQl9CisJICAgICAgZWxzZSBpZiAocXR5cGUgPT0gVF9SUlNJRykKKwkJeworCQkgIC8qIFJSU0lHLCBjYWNoZSBpZiBjb3ZlcnMgRE5TS0VZIFJSc2V0ICovCisJCSAgaWYgKHJkbGVuIDwgMTgpCisJCSAgICByZXR1cm4gU1RBVF9CT0dVUzsgLyogYmFkIHBhY2tldCAqLworCQkgIAorCQkgIEdFVFNIT1JUKHR5cGVfY292ZXJlZCwgcCk7CisJCSAgCisJCSAgaWYgKHR5cGVfY292ZXJlZCA9PSBUX0ROU0tFWSkKKwkJICAgIHsKKwkJICAgICAgYS5hZGRyLmRuc3NlYy5jbGFzcyA9IGNsYXNzOworCQkgICAgICBhLmFkZHIuZG5zc2VjLnR5cGUgPSB0eXBlX2NvdmVyZWQ7CisJCSAgICAgIAorCQkgICAgICBhbGdvID0gKnArKzsKKwkJICAgICAgcCArPSAxMzsgLyogbGFiZWxzLCBvcmlnX3R0bCwgZXhwaXJhdGlvbiwgaW5jZXB0aW9uICovCisJCSAgICAgIEdFVFNIT1JUKGtleXRhZywgcCk7CQorCQkgICAgICBpZiAoKGtleSA9IGJsb2NrZGF0YV9hbGxvYygoY2hhciopcHNhdmUsIHJkbGVuKSkpCisJCQl7CisJCQkgIGlmICghKGNyZWNwID0gY2FjaGVfaW5zZXJ0KG5hbWUsICZhLCBub3csIHR0bCwgIEZfRk9SV0FSRCB8IEZfRE5TS0VZIHwgRl9EUykpKQorCQkJICAgIGJsb2NrZGF0YV9mcmVlKGtleSk7CisJCQkgIGVsc2UKKwkJCSAgICB7CisJCQkgICAgICBjcmVjcC0+YWRkci5zaWcua2V5ZGF0YSA9IGtleTsKKwkJCSAgICAgIGNyZWNwLT5hZGRyLnNpZy5rZXlsZW4gPSByZGxlbjsKKwkJCSAgICAgIGNyZWNwLT5hZGRyLnNpZy5rZXl0YWcgPSBrZXl0YWc7CisJCQkgICAgICBjcmVjcC0+YWRkci5zaWcudHlwZV9jb3ZlcmVkID0gdHlwZV9jb3ZlcmVkOworCQkJICAgICAgY3JlY3AtPmFkZHIuc2lnLmFsZ28gPSBhbGdvOworCQkJICAgIH0KKwkJCX0KKwkJICAgIH0KKwkJfQorCSAgICAgIAorCSAgICAgIHAgPSBwc2F2ZTsKKwkgICAgfQorCisJICBpZiAoIUFERF9SRExFTihoZWFkZXIsIHAsIHBsZW4sIHJkbGVuKSkKKwkgICAgcmV0dXJuIFNUQVRfQk9HVVM7IC8qIGJhZCBwYWNrZXQgKi8KKwl9CisgICAgICAKKyAgICAgIC8qIGNvbW1pdCBjYWNoZSBpbnNlcnQuICovCisgICAgICBjYWNoZV9lbmRfaW5zZXJ0KCk7CisgICAgICByZXR1cm4gU1RBVF9TRUNVUkU7CisgICAgfQorCisgIGxvZ19xdWVyeShGX05PRVhUUkEgfCBGX1VQU1RSRUFNLCBuYW1lLCBOVUxMLCAiQk9HVVMgRE5TS0VZIik7CisgIHJldHVybiBTVEFUX0JPR1VTOworfQorCisvKiBUaGUgRE5TIHBhY2tldCBpcyBleHBlY3RlZCB0byBjb250YWluIHRoZSBhbnN3ZXIgdG8gYSBEUyBxdWVyeQorICAgUHV0IGFsbCBEU3MgaW4gdGhlIGFuc3dlciB3aGljaCBhcmUgdmFsaWQgaW50byB0aGUgY2FjaGUuCisgICByZXR1cm4gY29kZXM6CisgICBTVEFUX1NFQ1VSRSAgICAgIEF0IGxlYXN0IG9uZSB2YWxpZCBEUyBmb3VuZCBhbmQgaW4gY2FjaGUuCisgICBTVEFUX05PX0RTICAgICAgIEl0J3MgcHJvdmVkIHRoZXJlJ3Mgbm8gRFMgaGVyZS4KKyAgIFNUQVRfTk9fTlMgICAgICAgSXQncyBwcm92ZWQgdGhlcmUncyBubyBEUyBfb3JfIE5TIGhlcmUuCisgICBTVEFUX0JPR1VTICAgICAgIG5vIERTIGluIHJlcGx5IG9yIG5vdCBzaWduZWQsIGZhaWxzIHZhbGlkYXRpb24sIGJhZCBwYWNrZXQuCisgICBTVEFUX05FRURfRE5TS0VZIEROU0tFWSByZWNvcmRzIHRvIHZhbGlkYXRlIGEgRFMgbm90IGZvdW5kLCBuYW1lIGluIGtleW5hbWUKKyovCisKK2ludCBkbnNzZWNfdmFsaWRhdGVfZHModGltZV90IG5vdywgc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIGNoYXIgKm5hbWUsIGNoYXIgKmtleW5hbWUsIGludCBjbGFzcykKK3sKKyAgdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopKGhlYWRlcisxKTsKKyAgaW50IHF0eXBlLCBxY2xhc3MsIHZhbCwgaSwgbmVnYW5zd2VyLCBub25zOworCisgIGlmIChudG9ocyhoZWFkZXItPnFkY291bnQpICE9IDEgfHwKKyAgICAgICEocCA9IHNraXBfbmFtZShwLCBoZWFkZXIsIHBsZW4sIDQpKSkKKyAgICByZXR1cm4gU1RBVF9CT0dVUzsKKyAgCisgIEdFVFNIT1JUKHF0eXBlLCBwKTsKKyAgR0VUU0hPUlQocWNsYXNzLCBwKTsKKworICBpZiAocXR5cGUgIT0gVF9EUyB8fCBxY2xhc3MgIT0gY2xhc3MpCisgICAgdmFsID0gU1RBVF9CT0dVUzsKKyAgZWxzZQorICAgIHZhbCA9IGRuc3NlY192YWxpZGF0ZV9yZXBseShub3csIGhlYWRlciwgcGxlbiwgbmFtZSwga2V5bmFtZSwgTlVMTCwgJm5lZ2Fuc3dlciwgJm5vbnMpOworICAvKiBOb3RlIGRuc3NlY192YWxpZGF0ZV9yZXBseSgpIHdpbGwgaGF2ZSBjYWNoZWQgcG9zaXRpdmUgYW5zd2VycyAqLworICAKKyAgaWYgKHZhbCA9PSBTVEFUX05PX1NJRyB8fCB2YWwgPT0gU1RBVF9JTlNFQ1VSRSkKKyAgICB2YWwgPSBTVEFUX0JPR1VTOworICAKKyAgcCA9ICh1bnNpZ25lZCBjaGFyICopKGhlYWRlcisxKTsKKyAgZXh0cmFjdF9uYW1lKGhlYWRlciwgcGxlbiwgJnAsIG5hbWUsIDEsIDQpOworICBwICs9IDQ7IC8qIHF0eXBlLCBxY2xhc3MgKi8KKyAgCisgIGlmICghKHAgPSBza2lwX3NlY3Rpb24ocCwgbnRvaHMoaGVhZGVyLT5hbmNvdW50KSwgaGVhZGVyLCBwbGVuKSkpCisgICAgdmFsID0gU1RBVF9CT0dVUzsKKyAgCisgIGlmICh2YWwgPT0gU1RBVF9CT0dVUykKKyAgICB7CisgICAgICBsb2dfcXVlcnkoRl9OT0VYVFJBIHwgRl9VUFNUUkVBTSwgbmFtZSwgTlVMTCwgIkJPR1VTIERTIik7CisgICAgICByZXR1cm4gU1RBVF9CT0dVUzsKKyAgICB9CisKKyAgLyogQnkgaGVyZSwgdGhlIGFuc3dlciBpcyBwcm92ZWQgc2VjdXJlLCBhbmQgYSBwb3NpdGl2ZSBhbnN3ZXIgaGFzIGJlZW4gY2FjaGVkLiAqLworICBpZiAodmFsID09IFNUQVRfU0VDVVJFICYmIG5lZ2Fuc3dlcikKKyAgICB7CisgICAgICBpbnQgcmRsZW4sIGZsYWdzID0gRl9GT1JXQVJEIHwgRl9EUyB8IEZfTkVHIHwgRl9ETlNTRUNPSzsKKyAgICAgIHVuc2lnbmVkIGxvbmcgdHRsLCBtaW50dGwgPSBVTE9OR19NQVg7CisgICAgICBzdHJ1Y3QgYWxsX2FkZHIgYTsKKworICAgICAgaWYgKFJDT0RFKGhlYWRlcikgPT0gTlhET01BSU4pCisJZmxhZ3MgfD0gRl9OWERPTUFJTjsKKyAgICAgIAorICAgICAgLyogV2Ugb25seSBjYWNoZSB2YWxpZGF0ZWQgRFMgcmVjb3JkcywgRE5TU0VDT0sgZmxhZyBoaWphY2tlZCAKKwkgdG8gc3RvcmUgcHJlc2VuY2UvYWJzZW5jZSBvZiBOUy4gKi8KKyAgICAgIGlmIChub25zKQorCWZsYWdzICY9IH5GX0ROU1NFQ09LOworICAgICAgCisgICAgICBmb3IgKGkgPSBudG9ocyhoZWFkZXItPm5zY291bnQpOyBpICE9IDA7IGktLSkKKwl7CisJICBpZiAoIShwID0gc2tpcF9uYW1lKHAsIGhlYWRlciwgcGxlbiwgMCkpKQorCSAgICByZXR1cm4gU1RBVF9CT0dVUzsKKwkgIAorCSAgR0VUU0hPUlQocXR5cGUsIHApOyAKKwkgIEdFVFNIT1JUKHFjbGFzcywgcCk7CisJICBHRVRMT05HKHR0bCwgcCk7CisJICBHRVRTSE9SVChyZGxlbiwgcCk7CisKKwkgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgcCwgcGxlbiwgcmRsZW4pKQorCSAgICByZXR1cm4gU1RBVF9CT0dVUzsgLyogYmFkIHBhY2tldCAqLworCSAgICAKKwkgIGlmIChxY2xhc3MgIT0gY2xhc3MgfHwgcXR5cGUgIT0gVF9TT0EpCisJICAgIHsKKwkgICAgICBwICs9IHJkbGVuOworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisgICAgICAgICAgIAorCSAgaWYgKHR0bCA8IG1pbnR0bCkKKwkgICAgbWludHRsID0gdHRsOworCSAgCisJICAvKiBNTkFNRSAqLworCSAgaWYgKCEocCA9IHNraXBfbmFtZShwLCBoZWFkZXIsIHBsZW4sIDApKSkKKwkgICAgcmV0dXJuIFNUQVRfQk9HVVM7CisJICAvKiBSTkFNRSAqLworCSAgaWYgKCEocCA9IHNraXBfbmFtZShwLCBoZWFkZXIsIHBsZW4sIDIwKSkpCisJICAgIHJldHVybiBTVEFUX0JPR1VTOworCSAgcCArPSAxNjsgLyogU0VSSUFMIFJFRlJFU0ggUkVUUlkgRVhQSVJFICovCisJICAKKwkgIEdFVExPTkcodHRsLCBwKTsgLyogbWluVFRMICovCisJICBpZiAodHRsIDwgbWludHRsKQorCSAgICBtaW50dGwgPSB0dGw7CisJICAKKwkgIGJyZWFrOworCX0KKyAgICAgIAorICAgICAgaWYgKGkgIT0gMCkKKwl7CisJICBjYWNoZV9zdGFydF9pbnNlcnQoKTsKKwkgIAorCSAgYS5hZGRyLmRuc3NlYy5jbGFzcyA9IGNsYXNzOworCSAgY2FjaGVfaW5zZXJ0KG5hbWUsICZhLCBub3csIHR0bCwgZmxhZ3MpOworCSAgCisJICBjYWNoZV9lbmRfaW5zZXJ0KCk7ICAKKwkgIAorCSAgbG9nX3F1ZXJ5KEZfTk9FWFRSQSB8IEZfVVBTVFJFQU0sIG5hbWUsIE5VTEwsIG5vbnMgPyAibm8gZGVsZWdhdGlvbiIgOiAibm8gRFMiKTsKKwl9CisKKyAgICAgIHJldHVybiBub25zID8gU1RBVF9OT19OUyA6IFNUQVRfTk9fRFM7IAorICAgIH0KKworICByZXR1cm4gdmFsOworfQorCisvKiA0MDM0IDYuMSAqLworc3RhdGljIGludCBob3N0bmFtZV9jbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikKK3sKKyAgY2hhciAqc2EsICplYSwgKmNhLCAqc2IsICplYiwgKmNiOworICB1bnNpZ25lZCBjaGFyIGFjLCBiYzsKKyAgCisgIHNhID0gZWEgPSAoY2hhciAqKWEgKyBzdHJsZW4oYSk7CisgIHNiID0gZWIgPSAoY2hhciAqKWIgKyBzdHJsZW4oYik7CisgCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIHdoaWxlIChzYSAhPSBhICYmICooc2EtMSkgIT0gJy4nKQorCXNhLS07CisgICAgICAKKyAgICAgIHdoaWxlIChzYiAhPSBiICYmICooc2ItMSkgIT0gJy4nKQorCXNiLS07CisKKyAgICAgIGNhID0gc2E7CisgICAgICBjYiA9IHNiOworCisgICAgICB3aGlsZSAoMSkgCisJeworCSAgaWYgKGNhID09IGVhKQorCSAgICB7CisJICAgICAgaWYgKGNiID09IGViKQorCQlicmVhazsKKwkgICAgICAKKwkgICAgICByZXR1cm4gLTE7CisJICAgIH0KKwkgIAorCSAgaWYgKGNiID09IGViKQorCSAgICByZXR1cm4gMTsKKwkgIAorCSAgYWMgPSAodW5zaWduZWQgY2hhcikgKmNhKys7CisJICBiYyA9ICh1bnNpZ25lZCBjaGFyKSAqY2IrKzsKKwkgIAorCSAgaWYgKGFjID49ICdBJyAmJiBhYyA8PSAnWicpCisJICAgIGFjICs9ICdhJyAtICdBJzsKKwkgIGlmIChiYyA+PSAnQScgJiYgYmMgPD0gJ1onKQorCSAgICBiYyArPSAnYScgLSAnQSc7CisJICAKKwkgIGlmIChhYyA8IGJjKQorCSAgICByZXR1cm4gLTE7CisJICBlbHNlIGlmIChhYyAhPSBiYykKKwkgICAgcmV0dXJuIDE7CisJfQorCisgICAgIAorICAgICAgaWYgKHNhID09IGEpCisJeworCSAgaWYgKHNiID09IGIpCisJICAgIHJldHVybiAwOworCSAgCisJICByZXR1cm4gLTE7CisJfQorICAgICAgCisgICAgICBpZiAoc2IgPT0gYikKKwlyZXR1cm4gMTsKKyAgICAgIAorICAgICAgZWEgPSBzYS0tOworICAgICAgZWIgPSBzYi0tOworICAgIH0KK30KKworLyogRmluZCBhbGwgdGhlIE5TRUMgb3IgTlNFQzMgcmVjb3JkcyBpbiBhIHJlcGx5LgorICAgcmV0dXJuIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHRoZW0uICovCitzdGF0aWMgaW50IGZpbmRfbnNlY19yZWNvcmRzKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuLCB1bnNpZ25lZCBjaGFyICoqKm5zZWNzZXRwLCBpbnQgKm5zZWNzZXRsLCBpbnQgY2xhc3NfcmVxZCkKK3sKKyAgc3RhdGljIHVuc2lnbmVkIGNoYXIgKipuc2Vjc2V0ID0gTlVMTDsKKyAgc3RhdGljIGludCBuc2Vjc2V0X3N6ID0gMDsKKyAgCisgIGludCB0eXBlX2ZvdW5kID0gMDsKKyAgdW5zaWduZWQgY2hhciAqcCA9IHNraXBfcXVlc3Rpb25zKGhlYWRlciwgcGxlbik7CisgIGludCB0eXBlLCBjbGFzcywgcmRsZW4sIGksIG5zZWNzX2ZvdW5kOworCisgIC8qIE1vdmUgdG8gTlMgc2VjdGlvbiAqLworICBpZiAoIXAgfHwgIShwID0gc2tpcF9zZWN0aW9uKHAsIG50b2hzKGhlYWRlci0+YW5jb3VudCksIGhlYWRlciwgcGxlbikpKQorICAgIHJldHVybiAwOworICAKKyAgZm9yIChuc2Vjc19mb3VuZCA9IDAsIGkgPSBudG9ocyhoZWFkZXItPm5zY291bnQpOyBpICE9IDA7IGktLSkKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyICpwc3RhcnQgPSBwOworICAgICAgCisgICAgICBpZiAoIShwID0gc2tpcF9uYW1lKHAsIGhlYWRlciwgcGxlbiwgMTApKSkKKwlyZXR1cm4gMDsKKyAgICAgIAorICAgICAgR0VUU0hPUlQodHlwZSwgcCk7IAorICAgICAgR0VUU0hPUlQoY2xhc3MsIHApOworICAgICAgcCArPSA0OyAvKiBUVEwgKi8KKyAgICAgIEdFVFNIT1JUKHJkbGVuLCBwKTsKKworICAgICAgaWYgKGNsYXNzID09IGNsYXNzX3JlcWQgJiYgKHR5cGUgPT0gVF9OU0VDIHx8IHR5cGUgPT0gVF9OU0VDMykpCisJeworCSAgLyogTm8gbWl4ZWQgTlNFQ2luZyAncm91bmQgaGVyZSwgdGhhbmt5b3V2ZXJ5bXVjaCAqLworCSAgaWYgKHR5cGVfZm91bmQgPT0gVF9OU0VDICYmIHR5cGUgPT0gVF9OU0VDMykKKwkgICAgcmV0dXJuIDA7CisJICBpZiAodHlwZV9mb3VuZCA9PSBUX05TRUMzICYmIHR5cGUgPT0gVF9OU0VDKQorCSAgICByZXR1cm4gMDsKKworCSAgdHlwZV9mb3VuZCA9IHR5cGU7CisKKwkgIGlmICghZXhwYW5kX3dvcmtzcGFjZSgmbnNlY3NldCwgJm5zZWNzZXRfc3osIG5zZWNzX2ZvdW5kKSkKKwkgICAgcmV0dXJuIDA7IAorCSAgCisJICBuc2Vjc2V0W25zZWNzX2ZvdW5kKytdID0gcHN0YXJ0OworCX0KKyAgICAgIAorICAgICAgaWYgKCFBRERfUkRMRU4oaGVhZGVyLCBwLCBwbGVuLCByZGxlbikpCisJcmV0dXJuIDA7CisgICAgfQorICAKKyAgKm5zZWNzZXRwID0gbnNlY3NldDsKKyAgKm5zZWNzZXRsID0gbnNlY3NfZm91bmQ7CisgIAorICByZXR1cm4gdHlwZV9mb3VuZDsKK30KKworc3RhdGljIGludCBwcm92ZV9ub25fZXhpc3RlbmNlX25zZWMoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIHVuc2lnbmVkIGNoYXIgKipuc2VjcywgaW50IG5zZWNfY291bnQsCisJCQkJICAgIGNoYXIgKndvcmtzcGFjZTEsIGNoYXIgKndvcmtzcGFjZTIsIGNoYXIgKm5hbWUsIGludCB0eXBlLCBpbnQgKm5vbnMpCit7CisgIGludCBpLCByYywgcmRsZW47CisgIHVuc2lnbmVkIGNoYXIgKnAsICpwc2F2ZTsKKyAgaW50IG9mZnNldCA9ICh0eXBlICYgMHhmZikgPj4gMzsKKyAgaW50IG1hc2sgPSAweDgwID4+ICh0eXBlICYgMHgwNyk7CisKKyAgaWYgKG5vbnMpCisgICAgKm5vbnMgPSAwOworICAKKyAgLyogRmluZCBOU0VDIHJlY29yZCB0aGF0IHByb3ZlcyBuYW1lIGRvZXNuJ3QgZXhpc3QgKi8KKyAgZm9yIChpID0gMDsgaSA8IG5zZWNfY291bnQ7IGkrKykKKyAgICB7CisgICAgICBwID0gbnNlY3NbaV07CisgICAgICBpZiAoIWV4dHJhY3RfbmFtZShoZWFkZXIsIHBsZW4sICZwLCB3b3Jrc3BhY2UxLCAxLCAxMCkpCisJcmV0dXJuIFNUQVRfQk9HVVM7CisgICAgICBwICs9IDg7IC8qIGNsYXNzLCB0eXBlLCBUVEwgKi8KKyAgICAgIEdFVFNIT1JUKHJkbGVuLCBwKTsKKyAgICAgIHBzYXZlID0gcDsKKyAgICAgIGlmICghZXh0cmFjdF9uYW1lKGhlYWRlciwgcGxlbiwgJnAsIHdvcmtzcGFjZTIsIDEsIDEwKSkKKwlyZXR1cm4gU1RBVF9CT0dVUzsKKyAgICAgIAorICAgICAgcmMgPSBob3N0bmFtZV9jbXAod29ya3NwYWNlMSwgbmFtZSk7CisgICAgICAKKyAgICAgIGlmIChyYyA9PSAwKQorCXsKKwkgIC8qIDQwMzUgcGFyYSA1LjQuIExhc3Qgc2VudGVuY2UgKi8KKwkgIGlmICh0eXBlID09IFRfTlNFQyB8fCB0eXBlID09IFRfUlJTSUcpCisJICAgIHJldHVybiBTVEFUX1NFQ1VSRTsKKworCSAgLyogTlNFQyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIFJSIHdlJ3JlIHRlc3RpbmcsIGNoZWNrCisJICAgICB0aGF0IHRoZSB0eXBlIGluIHF1ZXN0aW9uIGRvZXNuJ3QgYXBwZWFyIGluIHRoZSB0eXBlIG1hcCAqLworCSAgcmRsZW4gLT0gcCAtIHBzYXZlOworCSAgLyogcmRsZW4gaXMgbm93IGxlbmd0aCBvZiB0eXBlIG1hcCwgYW5kIHAgcG9pbnRzIHRvIGl0ICovCisJICAKKwkgIC8qIElmIHdlIGNhbiBwcm92ZSB0aGF0IHRoZXJlJ3Mgbm8gTlMgcmVjb3JkLCByZXR1cm4gdGhhdCBpbmZvcm1hdGlvbi4gKi8KKwkgIGlmIChub25zICYmIHJkbGVuID49IDIgJiYgcFswXSA9PSAwICYmIChwWzJdICYgKDB4ODAgPj4gVF9OUykpID09IDApCisJICAgICpub25zID0gMTsKKwkgIAorCSAgd2hpbGUgKHJkbGVuID49IDIpCisJICAgIHsKKwkgICAgICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIHAsIHBsZW4sIHJkbGVuKSkKKwkJcmV0dXJuIFNUQVRfQk9HVVM7CisJICAgICAgCisJICAgICAgaWYgKHBbMF0gPT0gdHlwZSA+PiA4KQorCQl7CisJCSAgLyogRG9lcyB0aGUgTlNFQyBzYXkgb3VyIHR5cGUgZXhpc3RzPyAqLworCQkgIGlmIChvZmZzZXQgPCBwWzFdICYmIChwW29mZnNldCsyXSAmIG1hc2spICE9IDApCisJCSAgICByZXR1cm4gU1RBVF9CT0dVUzsKKwkJICAKKwkJICBicmVhazsgLyogZmluc2hlZCBjaGVja2luZyAqLworCQl9CisJICAgICAgCisJICAgICAgcmRsZW4gLT0gcFsxXTsKKwkgICAgICBwICs9ICBwWzFdOworCSAgICB9CisJICAKKwkgIHJldHVybiBTVEFUX1NFQ1VSRTsKKwl9CisgICAgICBlbHNlIGlmIChyYyA9PSAtMSkKKwl7CisJICAvKiBOb3JtYWwgY2FzZSwgbmFtZSBmYWxscyBiZXR3ZWVuIE5TRUMgbmFtZSBhbmQgbmV4dCBkb21haW4gbmFtZSwKKwkgICAgIHdyYXAgYXJvdW5kIGNhc2UsIG5hbWUgZmFsbHMgYmV0d2VlbiBOU0VDIG5hbWUgKHJjID09IC0xKSBhbmQgZW5kICovCisJICBpZiAoaG9zdG5hbWVfY21wKHdvcmtzcGFjZTIsIG5hbWUpID09IDEgfHwgaG9zdG5hbWVfY21wKHdvcmtzcGFjZTEsIHdvcmtzcGFjZTIpID09IDEpCisJICAgIHJldHVybiBTVEFUX1NFQ1VSRTsKKwl9CisgICAgICBlbHNlIAorCXsKKwkgIC8qIHdyYXAgYXJvdW5kIGNhc2UsIG5hbWUgZmFsbHMgYmV0d2VlbiBzdGFydCBhbmQgbmV4dCBkb21haW4gbmFtZSAqLworCSAgaWYgKGhvc3RuYW1lX2NtcCh3b3Jrc3BhY2UxLCB3b3Jrc3BhY2UyKSA9PSAxICYmIGhvc3RuYW1lX2NtcCh3b3Jrc3BhY2UyLCBuYW1lKSA9PSAxKQorCSAgICByZXR1cm4gU1RBVF9TRUNVUkU7CisJfQorICAgIH0KKyAgCisgIHJldHVybiBTVEFUX0JPR1VTOworfQorCisvKiByZXR1cm4gZGlnZXN0IGxlbmd0aCwgb3IgemVybyBvbiBlcnJvciAqLworc3RhdGljIGludCBoYXNoX25hbWUoY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKipvdXQsIHN0cnVjdCBuZXR0bGVfaGFzaCBjb25zdCAqaGFzaCwgCisJCSAgICAgdW5zaWduZWQgY2hhciAqc2FsdCwgaW50IHNhbHRfbGVuLCBpbnQgaXRlcmF0aW9ucykKK3sKKyAgdm9pZCAqY3R4OworICB1bnNpZ25lZCBjaGFyICpkaWdlc3Q7CisgIGludCBpOworCisgIGlmICghaGFzaF9pbml0KGhhc2gsICZjdHgsICZkaWdlc3QpKQorICAgIHJldHVybiAwOworIAorICBoYXNoLT51cGRhdGUoY3R4LCB0b193aXJlKGluKSwgKHVuc2lnbmVkIGNoYXIgKilpbik7CisgIGhhc2gtPnVwZGF0ZShjdHgsIHNhbHRfbGVuLCBzYWx0KTsKKyAgaGFzaC0+ZGlnZXN0KGN0eCwgaGFzaC0+ZGlnZXN0X3NpemUsIGRpZ2VzdCk7CisKKyAgZm9yKGkgPSAwOyBpIDwgaXRlcmF0aW9uczsgaSsrKQorICAgIHsKKyAgICAgIGhhc2gtPnVwZGF0ZShjdHgsIGhhc2gtPmRpZ2VzdF9zaXplLCBkaWdlc3QpOworICAgICAgaGFzaC0+dXBkYXRlKGN0eCwgc2FsdF9sZW4sIHNhbHQpOworICAgICAgaGFzaC0+ZGlnZXN0KGN0eCwgaGFzaC0+ZGlnZXN0X3NpemUsIGRpZ2VzdCk7CisgICAgfQorICAgCisgIGZyb21fd2lyZShpbik7CisKKyAgKm91dCA9IGRpZ2VzdDsKKyAgcmV0dXJuIGhhc2gtPmRpZ2VzdF9zaXplOworfQorCisvKiBEZWNvZGUgYmFzZTMyIHRvIGZpcnN0ICIuIiBvciBlbmQgb2Ygc3RyaW5nICovCitzdGF0aWMgaW50IGJhc2UzMl9kZWNvZGUoY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCkKK3sKKyAgaW50IG9jLCBvbiwgYywgbWFzaywgaTsKKyAgdW5zaWduZWQgY2hhciAqcCA9IG91dDsKKyAKKyAgZm9yIChjID0gKmluLCBvYyA9IDAsIG9uID0gMDsgYyAhPSAwICYmIGMgIT0gJy4nOyBjID0gKisraW4pIAorICAgIHsKKyAgICAgIGlmIChjID49ICcwJyAmJiBjIDw9ICc5JykKKwljIC09ICcwJzsKKyAgICAgIGVsc2UgaWYgKGMgPj0gJ2EnICYmIGMgPD0gJ3YnKQorCWMgLT0gJ2EnLCBjICs9IDEwOworICAgICAgZWxzZSBpZiAoYyA+PSAnQScgJiYgYyA8PSAnVicpCisJYyAtPSAnQScsIGMgKz0gMTA7CisgICAgICBlbHNlCisJcmV0dXJuIDA7CisgICAgICAKKyAgICAgIGZvciAobWFzayA9IDB4MTAsIGkgPSAwOyBpIDwgNTsgaSsrKQorICAgICAgICB7CisJICBpZiAoYyAmIG1hc2spCisJICAgIG9jIHw9IDE7CisJICBtYXNrID0gbWFzayA+PiAxOworCSAgaWYgKCgoKytvbikgJiA3KSA9PSAwKQorCSAgICAqcCsrID0gb2M7CisJICBvYyA9IG9jIDw8IDE7CisJfQorICAgIH0KKyAgCisgIGlmICgob24gJiA3KSAhPSAwKQorICAgIHJldHVybiAwOworCisgIHJldHVybiBwIC0gb3V0OworfQorCitzdGF0aWMgaW50IGNoZWNrX25zZWMzX2NvdmVyYWdlKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuLCBpbnQgZGlnZXN0X2xlbiwgdW5zaWduZWQgY2hhciAqZGlnZXN0LCBpbnQgdHlwZSwKKwkJCQljaGFyICp3b3Jrc3BhY2UxLCBjaGFyICp3b3Jrc3BhY2UyLCB1bnNpZ25lZCBjaGFyICoqbnNlY3MsIGludCBuc2VjX2NvdW50LCBpbnQgKm5vbnMpCit7CisgIGludCBpLCBoYXNoX2xlbiwgc2FsdF9sZW4sIGJhc2UzMl9sZW4sIHJkbGVuOworICB1bnNpZ25lZCBjaGFyICpwLCAqcHNhdmU7CisKKyAgZm9yIChpID0gMDsgaSA8IG5zZWNfY291bnQ7IGkrKykKKyAgICBpZiAoKHAgPSBuc2Vjc1tpXSkpCisgICAgICB7CisgICAgICAgCWlmICghZXh0cmFjdF9uYW1lKGhlYWRlciwgcGxlbiwgJnAsIHdvcmtzcGFjZTEsIDEsIDApIHx8CisJICAgICEoYmFzZTMyX2xlbiA9IGJhc2UzMl9kZWNvZGUod29ya3NwYWNlMSwgKHVuc2lnbmVkIGNoYXIgKil3b3Jrc3BhY2UyKSkpCisJICByZXR1cm4gMDsKKwkKKwlwICs9IDg7IC8qIGNsYXNzLCB0eXBlLCBUVEwgKi8KKwlHRVRTSE9SVChyZGxlbiwgcCk7CisJcHNhdmUgPSBwOworCXAgKz0gNDsgLyogYWxnbywgZmxhZ3MsIGl0ZXJhdGlvbnMgKi8KKwlzYWx0X2xlbiA9ICpwKys7IC8qIHNhbHRfbGVuICovCisJcCArPSBzYWx0X2xlbjsgLyogc2FsdCAqLworCWhhc2hfbGVuID0gKnArKzsgLyogcCBub3cgcG9pbnRzIHRvIG5leHQgaGFzaGVkIG5hbWUgKi8KKwkKKwlpZiAoIUNIRUNLX0xFTihoZWFkZXIsIHAsIHBsZW4sIGhhc2hfbGVuKSkKKwkgIHJldHVybiAwOworCQorCWlmIChkaWdlc3RfbGVuID09IGJhc2UzMl9sZW4gJiYgaGFzaF9sZW4gPT0gYmFzZTMyX2xlbikKKwkgIHsKKwkgICAgaW50IHJjID0gbWVtY21wKHdvcmtzcGFjZTIsIGRpZ2VzdCwgZGlnZXN0X2xlbik7CisKKwkgICAgaWYgKHJjID09IDApCisJICAgICAgeworCQkvKiBXZSBmb3VuZCBhbiBOU0VDMyB3aG9zZSBoYXNoZWQgbmFtZSBleGFjdGx5IG1hdGNoZXMgdGhlIHF1ZXJ5LCBzbworCQkgICB3ZSBqdXN0IG5lZWQgdG8gY2hlY2sgdGhlIHR5cGUgbWFwLiBwIHBvaW50cyB0byB0aGUgUlIgZGF0YSBmb3IgdGhlIHJlY29yZC4gKi8KKwkJCisJCWludCBvZmZzZXQgPSAodHlwZSAmIDB4ZmYpID4+IDM7CisJCWludCBtYXNrID0gMHg4MCA+PiAodHlwZSAmIDB4MDcpOworCQkKKwkJcCArPSBoYXNoX2xlbjsgLyogc2tpcCBuZXh0LWRvbWFpbiBoYXNoICovCisJCXJkbGVuIC09IHAgLSBwc2F2ZTsKKworCQlpZiAoIUNIRUNLX0xFTihoZWFkZXIsIHAsIHBsZW4sIHJkbGVuKSkKKwkJICByZXR1cm4gMDsKKwkJCisJCS8qIElmIHdlIGNhbiBwcm92ZSB0aGF0IHRoZXJlJ3Mgbm8gTlMgcmVjb3JkLCByZXR1cm4gdGhhdCBpbmZvcm1hdGlvbi4gKi8KKwkJaWYgKG5vbnMgJiYgcmRsZW4gPj0gMiAmJiBwWzBdID09IDAgJiYgKHBbMl0gJiAoMHg4MCA+PiBUX05TKSkgPT0gMCkKKwkJICAqbm9ucyA9IDE7CisJCQorCQl3aGlsZSAocmRsZW4gPj0gMikKKwkJICB7CisJCSAgICBpZiAocFswXSA9PSB0eXBlID4+IDgpCisJCSAgICAgIHsKKwkJCS8qIERvZXMgdGhlIE5TRUMzIHNheSBvdXIgdHlwZSBleGlzdHM/ICovCisJCQlpZiAob2Zmc2V0IDwgcFsxXSAmJiAocFtvZmZzZXQrMl0gJiBtYXNrKSAhPSAwKQorCQkJICByZXR1cm4gU1RBVF9CT0dVUzsKKwkJCQorCQkJYnJlYWs7IC8qIGZpbnNoZWQgY2hlY2tpbmcgKi8KKwkJICAgICAgfQorCQkgICAgCisJCSAgICByZGxlbiAtPSBwWzFdOworCQkgICAgcCArPSAgcFsxXTsKKwkJICB9CisKKwkJcmV0dXJuIDE7CisJICAgICAgfQorCSAgICBlbHNlIGlmIChyYyA8PSAwKQorCSAgICAgIHsKKwkJLyogTm9ybWFsIGNhc2UsIGhhc2ggZmFsbHMgYmV0d2VlbiBOU0VDMyBuYW1lLWhhc2ggYW5kIG5leHQgZG9tYWluIG5hbWUtaGFzaCwKKwkJICAgd3JhcCBhcm91bmQgY2FzZSwgbmFtZS1oYXNoIGZhbGxzIGJldHdlZW4gTlNFQzMgbmFtZS1oYXNoIGFuZCBlbmQgKi8KKwkJaWYgKG1lbWNtcChwLCBkaWdlc3QsIGRpZ2VzdF9sZW4pID4gMCB8fCBtZW1jbXAod29ya3NwYWNlMiwgcCwgZGlnZXN0X2xlbikgPiAwKQorCQkgIHJldHVybiAxOworCSAgICAgIH0KKwkgICAgZWxzZSAKKwkgICAgICB7CisJCS8qIHdyYXAgYXJvdW5kIGNhc2UsIG5hbWUgZmFsbHMgYmV0d2VlbiBzdGFydCBhbmQgbmV4dCBkb21haW4gbmFtZSAqLworCQlpZiAobWVtY21wKHdvcmtzcGFjZTIsIHAsIGRpZ2VzdF9sZW4pID4gMCAmJiBtZW1jbXAocCwgZGlnZXN0LCBkaWdlc3RfbGVuKSA+IDApCisJCSAgcmV0dXJuIDE7CisJICAgICAgfQorCSAgfQorICAgICAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm92ZV9ub25fZXhpc3RlbmNlX25zZWMzKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuLCB1bnNpZ25lZCBjaGFyICoqbnNlY3MsIGludCBuc2VjX2NvdW50LAorCQkJCSAgICAgY2hhciAqd29ya3NwYWNlMSwgY2hhciAqd29ya3NwYWNlMiwgY2hhciAqbmFtZSwgaW50IHR5cGUsIGNoYXIgKndpbGRuYW1lLCBpbnQgKm5vbnMpCit7CisgIHVuc2lnbmVkIGNoYXIgKnNhbHQsICpwLCAqZGlnZXN0OworICBpbnQgZGlnZXN0X2xlbiwgaSwgaXRlcmF0aW9ucywgc2FsdF9sZW4sIGJhc2UzMl9sZW4sIGFsZ28gPSAwOworICBzdHJ1Y3QgbmV0dGxlX2hhc2ggY29uc3QgKmhhc2g7CisgIGNoYXIgKmNsb3Nlc3RfZW5jbG9zZXIsICpuZXh0X2Nsb3Nlc3QsICp3aWxkY2FyZDsKKyAgCisgIGlmIChub25zKQorICAgICpub25zID0gMDsKKyAgCisgIC8qIExvb2sgdGhvdWdoIHRoZSBOU0VDMyByZWNvcmRzIHRvIGZpbmQgdGhlIGZpcnN0IG9uZSB3aXRoIAorICAgICBhbiBhbGdvcml0aG0gd2Ugc3VwcG9ydCAoY3VycmVudGx5IG9ubHkgYWxnbyA9PSAxKS4KKworICAgICBUYWtlIHRoZSBhbGdvLCBpdGVyYXRpb25zLCBhbmQgc2FsdCBvZiB0aGF0IHJlY29yZAorICAgICBhcyB0aGUgb25lcyB3ZSdyZSBnb2luZyB0byB1c2UsIGFuZCBwcnVuZSBhbnkgCisgICAgIHRoYXQgZG9uJ3QgbWF0Y2guICovCisgIAorICBmb3IgKGkgPSAwOyBpIDwgbnNlY19jb3VudDsgaSsrKQorICAgIHsKKyAgICAgIGlmICghKHAgPSBza2lwX25hbWUobnNlY3NbaV0sIGhlYWRlciwgcGxlbiwgMTUpKSkKKwlyZXR1cm4gU1RBVF9CT0dVUzsgLyogYmFkIHBhY2tldCAqLworICAgICAgCisgICAgICBwICs9IDEwOyAvKiB0eXBlLCBjbGFzcywgVFRMLCByZGxlbiAqLworICAgICAgYWxnbyA9ICpwKys7CisgICAgICAKKyAgICAgIGlmIChhbGdvID09IDEpCisJYnJlYWs7IC8qIGtub3duIGFsZ28gKi8KKyAgICB9CisKKyAgLyogTm8gdXNhYmxlIE5TRUMzcyAqLworICBpZiAoaSA9PSBuc2VjX2NvdW50KQorICAgIHJldHVybiBTVEFUX0JPR1VTOworCisgIHArKzsgLyogZmxhZ3MgKi8KKyAgR0VUU0hPUlQgKGl0ZXJhdGlvbnMsIHApOworICBzYWx0X2xlbiA9ICpwKys7CisgIHNhbHQgPSBwOworICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIHNhbHQsIHBsZW4sIHNhbHRfbGVuKSkKKyAgICByZXR1cm4gU1RBVF9CT0dVUzsgLyogYmFkIHBhY2tldCAqLworICAgIAorICAvKiBOb3cgcHJ1bmUgc28gd2Ugb25seSBoYXZlIE5TRUMzIHJlY29yZHMgd2l0aCBzYW1lIGl0ZXJhdGlvbnMsIHNhbHQgYW5kIGFsZ28gKi8KKyAgZm9yIChpID0gMDsgaSA8IG5zZWNfY291bnQ7IGkrKykKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyICpuc2VjM3AgPSBuc2Vjc1tpXTsKKyAgICAgIGludCB0aGlzX2l0ZXI7CisKKyAgICAgIG5zZWNzW2ldID0gTlVMTDsgLyogU3BlY3VsYXRpdmUsIHdpbGwgYmUgcmVzdG9yZWQgaWYgT0suICovCisgICAgICAKKyAgICAgIGlmICghKHAgPSBza2lwX25hbWUobnNlYzNwLCBoZWFkZXIsIHBsZW4sIDE1KSkpCisJcmV0dXJuIFNUQVRfQk9HVVM7IC8qIGJhZCBwYWNrZXQgKi8KKyAgICAgIAorICAgICAgcCArPSAxMDsgLyogdHlwZSwgY2xhc3MsIFRUTCwgcmRsZW4gKi8KKyAgICAgIAorICAgICAgaWYgKCpwKysgIT0gYWxnbykKKwljb250aW51ZTsKKyAKKyAgICAgIHArKzsgLyogZmxhZ3MgKi8KKyAgICAgIAorICAgICAgR0VUU0hPUlQodGhpc19pdGVyLCBwKTsKKyAgICAgIGlmICh0aGlzX2l0ZXIgIT0gaXRlcmF0aW9ucykKKwljb250aW51ZTsKKworICAgICAgaWYgKHNhbHRfbGVuICE9ICpwKyspCisJY29udGludWU7CisgICAgICAKKyAgICAgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgcCwgcGxlbiwgc2FsdF9sZW4pKQorCXJldHVybiBTVEFUX0JPR1VTOyAvKiBiYWQgcGFja2V0ICovCisKKyAgICAgIGlmIChtZW1jbXAocCwgc2FsdCwgc2FsdF9sZW4pICE9IDApCisJY29udGludWU7CisKKyAgICAgIC8qIEFsbCBtYXRjaCwgcHV0IHRoZSBwb2ludGVyIGJhY2sgKi8KKyAgICAgIG5zZWNzW2ldID0gbnNlYzNwOworICAgIH0KKworICAvKiBBbGdvIGlzIGNoZWNrZWQgYXMgMSBhYm92ZSAqLworICBpZiAoIShoYXNoID0gaGFzaF9maW5kKCJzaGExIikpKQorICAgIHJldHVybiBTVEFUX0JPR1VTOworCisgIGlmICgoZGlnZXN0X2xlbiA9IGhhc2hfbmFtZShuYW1lLCAmZGlnZXN0LCBoYXNoLCBzYWx0LCBzYWx0X2xlbiwgaXRlcmF0aW9ucykpID09IDApCisgICAgcmV0dXJuIFNUQVRfQk9HVVM7CisgIAorICBpZiAoY2hlY2tfbnNlYzNfY292ZXJhZ2UoaGVhZGVyLCBwbGVuLCBkaWdlc3RfbGVuLCBkaWdlc3QsIHR5cGUsIHdvcmtzcGFjZTEsIHdvcmtzcGFjZTIsIG5zZWNzLCBuc2VjX2NvdW50LCBub25zKSkKKyAgICByZXR1cm4gU1RBVF9TRUNVUkU7CisKKyAgLyogQ2FuJ3QgZmluZCBhbiBOU0VDMyB3aGljaCBjb3ZlcnMgdGhlIG5hbWUgZGlyZWN0bHksIHdlIG5lZWQgdGhlICJjbG9zZXN0IGVuY2xvc2VyIE5TRUMzIiAKKyAgICAgb3IgYW4gYW5zd2VyIGluZmVycmVkIGZyb20gYSB3aWxkY2FyZCByZWNvcmQuICovCisgIGNsb3Nlc3RfZW5jbG9zZXIgPSBuYW1lOworICBuZXh0X2Nsb3Nlc3QgPSBOVUxMOworCisgIGRvCisgICAgeworICAgICAgaWYgKCpjbG9zZXN0X2VuY2xvc2VyID09ICcuJykKKwljbG9zZXN0X2VuY2xvc2VyKys7CisKKyAgICAgIGlmICh3aWxkbmFtZSAmJiBob3N0bmFtZV9pc2VxdWFsKGNsb3Nlc3RfZW5jbG9zZXIsIHdpbGRuYW1lKSkKKwlicmVhazsKKworICAgICAgaWYgKChkaWdlc3RfbGVuID0gaGFzaF9uYW1lKGNsb3Nlc3RfZW5jbG9zZXIsICZkaWdlc3QsIGhhc2gsIHNhbHQsIHNhbHRfbGVuLCBpdGVyYXRpb25zKSkgPT0gMCkKKwlyZXR1cm4gU1RBVF9CT0dVUzsKKyAgICAgIAorICAgICAgZm9yIChpID0gMDsgaSA8IG5zZWNfY291bnQ7IGkrKykKKwlpZiAoKHAgPSBuc2Vjc1tpXSkpCisJICB7CisJICAgIGlmICghZXh0cmFjdF9uYW1lKGhlYWRlciwgcGxlbiwgJnAsIHdvcmtzcGFjZTEsIDEsIDApIHx8CisJCSEoYmFzZTMyX2xlbiA9IGJhc2UzMl9kZWNvZGUod29ya3NwYWNlMSwgKHVuc2lnbmVkIGNoYXIgKil3b3Jrc3BhY2UyKSkpCisJICAgICAgcmV0dXJuIFNUQVRfQk9HVVM7CisJICAKKwkgICAgaWYgKGRpZ2VzdF9sZW4gPT0gYmFzZTMyX2xlbiAmJgorCQltZW1jbXAoZGlnZXN0LCB3b3Jrc3BhY2UyLCBkaWdlc3RfbGVuKSA9PSAwKQorCSAgICAgIGJyZWFrOyAvKiBHb3RpdCAqLworCSAgfQorICAgICAgCisgICAgICBpZiAoaSAhPSBuc2VjX2NvdW50KQorCWJyZWFrOworICAgICAgCisgICAgICBuZXh0X2Nsb3Nlc3QgPSBjbG9zZXN0X2VuY2xvc2VyOworICAgIH0KKyAgd2hpbGUgKChjbG9zZXN0X2VuY2xvc2VyID0gc3RyY2hyKGNsb3Nlc3RfZW5jbG9zZXIsICcuJykpKTsKKyAgCisgIGlmICghY2xvc2VzdF9lbmNsb3NlcikKKyAgICByZXR1cm4gU1RBVF9CT0dVUzsKKyAgCisgIC8qIExvb2sgZm9yIE5TRUMzIHRoYXQgcHJvdmVzIHRoZSBub24tZXhpc3RlbmNlIG9mIHRoZSBuZXh0LWNsb3Nlc3QgZW5jbG9zZXIgKi8KKyAgaWYgKChkaWdlc3RfbGVuID0gaGFzaF9uYW1lKG5leHRfY2xvc2VzdCwgJmRpZ2VzdCwgaGFzaCwgc2FsdCwgc2FsdF9sZW4sIGl0ZXJhdGlvbnMpKSA9PSAwKQorICAgIHJldHVybiBTVEFUX0JPR1VTOworCisgIGlmICghY2hlY2tfbnNlYzNfY292ZXJhZ2UoaGVhZGVyLCBwbGVuLCBkaWdlc3RfbGVuLCBkaWdlc3QsIHR5cGUsIHdvcmtzcGFjZTEsIHdvcmtzcGFjZTIsIG5zZWNzLCBuc2VjX2NvdW50LCBOVUxMKSkKKyAgICByZXR1cm4gU1RBVF9CT0dVUzsKKyAgCisgIC8qIEZpbmFsbHksIGNoZWNrIHRoYXQgdGhlcmUncyBubyBzZWF0IG9mIHdpbGRjYXJkIHN5bnRoZXNpcyAqLworICBpZiAoIXdpbGRuYW1lKQorICAgIHsKKyAgICAgIGlmICghKHdpbGRjYXJkID0gc3RyY2hyKG5leHRfY2xvc2VzdCwgJy4nKSkgfHwgd2lsZGNhcmQgPT0gbmV4dF9jbG9zZXN0KQorCXJldHVybiBTVEFUX0JPR1VTOworICAgICAgCisgICAgICB3aWxkY2FyZC0tOworICAgICAgKndpbGRjYXJkID0gJyonOworICAgICAgCisgICAgICBpZiAoKGRpZ2VzdF9sZW4gPSBoYXNoX25hbWUod2lsZGNhcmQsICZkaWdlc3QsIGhhc2gsIHNhbHQsIHNhbHRfbGVuLCBpdGVyYXRpb25zKSkgPT0gMCkKKwlyZXR1cm4gU1RBVF9CT0dVUzsKKyAgICAgIAorICAgICAgaWYgKCFjaGVja19uc2VjM19jb3ZlcmFnZShoZWFkZXIsIHBsZW4sIGRpZ2VzdF9sZW4sIGRpZ2VzdCwgdHlwZSwgd29ya3NwYWNlMSwgd29ya3NwYWNlMiwgbnNlY3MsIG5zZWNfY291bnQsIE5VTEwpKQorCXJldHVybiBTVEFUX0JPR1VTOworICAgIH0KKyAgCisgIHJldHVybiBTVEFUX1NFQ1VSRTsKK30KKyAgICAKKy8qIFZhbGlkYXRlIGFsbCB0aGUgUlJzZXRzIGluIHRoZSBhbnN3ZXIgYW5kIGF1dGhvcml0eSBzZWN0aW9ucyBvZiB0aGUgcmVwbHkgKDQwMzU6My4yLjMpICovCisvKiBSZXR1cm5zIGFyZSB0aGUgc2FtZSBhcyB2YWxpZGF0ZV9ycnNldCwgcGx1cyB0aGUgY2xhc3MgaWYgdGhlIG1pc3Npbmcga2V5IGlzIGluICpjbGFzcyAqLworaW50IGRuc3NlY192YWxpZGF0ZV9yZXBseSh0aW1lX3Qgbm93LCBzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgY2hhciAqbmFtZSwgY2hhciAqa2V5bmFtZSwgCisJCQkgIGludCAqY2xhc3MsIGludCAqbmVnYW5zd2VyLCBpbnQgKm5vbnMpCit7CisgIHVuc2lnbmVkIGNoYXIgKmFuc19zdGFydCwgKnFuYW1lLCAqcDEsICpwMiwgKipuc2VjczsKKyAgaW50IHR5cGUxLCBjbGFzczEsIHJkbGVuMSwgdHlwZTIsIGNsYXNzMiwgcmRsZW4yLCBxY2xhc3MsIHF0eXBlOworICBpbnQgaSwgaiwgcmMsIG5zZWNfY291bnQsIGNuYW1lX2NvdW50ID0gQ05BTUVfQ0hBSU47CisgIGludCBuc2VjX3R5cGUgPSAwLCBoYXZlX2Fuc3dlciA9IDA7CisKKyAgaWYgKG5lZ2Fuc3dlcikKKyAgICAqbmVnYW5zd2VyID0gMDsKKyAgCisgIGlmIChSQ09ERShoZWFkZXIpID09IFNFUlZGQUlMIHx8IG50b2hzKGhlYWRlci0+cWRjb3VudCkgIT0gMSkKKyAgICByZXR1cm4gU1RBVF9CT0dVUzsKKyAgCisgIGlmIChSQ09ERShoZWFkZXIpICE9IE5YRE9NQUlOICYmIFJDT0RFKGhlYWRlcikgIT0gTk9FUlJPUikKKyAgICByZXR1cm4gU1RBVF9JTlNFQ1VSRTsKKworICBxbmFtZSA9IHAxID0gKHVuc2lnbmVkIGNoYXIgKikoaGVhZGVyKzEpOworICAKKyAgaWYgKCFleHRyYWN0X25hbWUoaGVhZGVyLCBwbGVuLCAmcDEsIG5hbWUsIDEsIDQpKQorICAgIHJldHVybiBTVEFUX0JPR1VTOworCisgIEdFVFNIT1JUKHF0eXBlLCBwMSk7CisgIEdFVFNIT1JUKHFjbGFzcywgcDEpOworICBhbnNfc3RhcnQgPSBwMTsKKworICBpZiAocXR5cGUgPT0gVF9BTlkpCisgICAgaGF2ZV9hbnN3ZXIgPSAxOworIAorICAvKiBDYW4ndCB2YWxpZGF0ZSBhbiBSUklTRyBxdWVyeSAqLworICBpZiAocXR5cGUgPT0gVF9SUlNJRykKKyAgICByZXR1cm4gU1RBVF9JTlNFQ1VSRTsKKyAKKyBjbmFtZV9sb29wOgorICBmb3IgKGogPSBudG9ocyhoZWFkZXItPmFuY291bnQpOyBqICE9IDA7IGotLSkgCisgICAgeworICAgICAgLyogbGVhdmUgcG9pbnRlciB0byBtaXNzaW5nIG5hbWUgaW4gcW5hbWUgKi8KKyAgICAgICAgICAgCisgICAgICBpZiAoIShyYyA9IGV4dHJhY3RfbmFtZShoZWFkZXIsIHBsZW4sICZwMSwgbmFtZSwgMCwgMTApKSkKKwlyZXR1cm4gU1RBVF9CT0dVUzsgLyogYmFkIHBhY2tldCAqLworICAgICAgCisgICAgICBHRVRTSE9SVCh0eXBlMiwgcDEpOyAKKyAgICAgIEdFVFNIT1JUKGNsYXNzMiwgcDEpOworICAgICAgcDEgKz0gNDsgLyogVFRMICovCisgICAgICBHRVRTSE9SVChyZGxlbjIsIHAxKTsKKworICAgICAgaWYgKHJjID09IDEgJiYgcWNsYXNzID09IGNsYXNzMikKKwl7CisJICAvKiBEbyB3ZSBoYXZlIGFuIGFuc3dlciBmb3IgdGhlIHF1ZXN0aW9uPyAqLworCSAgaWYgKHR5cGUyID09IHF0eXBlKQorCSAgICB7CisJICAgICAgaGF2ZV9hbnN3ZXIgPSAxOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICBlbHNlIGlmICh0eXBlMiA9PSBUX0NOQU1FKQorCSAgICB7CisJICAgICAgcW5hbWUgPSBwMTsKKwkgICAgICAKKwkgICAgICAvKiBsb29wZWQgQ05BTUVTICovCisJICAgICAgaWYgKCFjbmFtZV9jb3VudC0tIHx8ICFleHRyYWN0X25hbWUoaGVhZGVyLCBwbGVuLCAmcDEsIG5hbWUsIDEsIDApKQorCQlyZXR1cm4gU1RBVF9CT0dVUzsKKwkgICAgICAgCisJICAgICAgcDEgPSBhbnNfc3RhcnQ7CisJICAgICAgZ290byBjbmFtZV9sb29wOworCSAgICB9CisJfSAKKworICAgICAgaWYgKCFBRERfUkRMRU4oaGVhZGVyLCBwMSwgcGxlbiwgcmRsZW4yKSkKKwlyZXR1cm4gU1RBVF9CT0dVUzsKKyAgICB9CisgICAKKyAgaWYgKG5lZ2Fuc3dlciAmJiAhaGF2ZV9hbnN3ZXIpCisgICAgKm5lZ2Fuc3dlciA9IDE7CisKKyAgLyogTm8gZGF0YSwgdGhlcmVmb3JlIG5vIHNpZ3MgKi8KKyAgaWYgKG50b2hzKGhlYWRlci0+YW5jb3VudCkgKyBudG9ocyhoZWFkZXItPm5zY291bnQpID09IDApCisgICAgcmV0dXJuIFNUQVRfTk9fU0lHOworICAKKyAgZm9yIChwMSA9IGFuc19zdGFydCwgaSA9IDA7IGkgPCBudG9ocyhoZWFkZXItPmFuY291bnQpICsgbnRvaHMoaGVhZGVyLT5uc2NvdW50KTsgaSsrKQorICAgIHsKKyAgICAgIGlmICghZXh0cmFjdF9uYW1lKGhlYWRlciwgcGxlbiwgJnAxLCBuYW1lLCAxLCAxMCkpCisJcmV0dXJuIFNUQVRfQk9HVVM7IC8qIGJhZCBwYWNrZXQgKi8KKyAgICAgIAorICAgICAgR0VUU0hPUlQodHlwZTEsIHAxKTsKKyAgICAgIEdFVFNIT1JUKGNsYXNzMSwgcDEpOworICAgICAgcDEgKz0gNDsgLyogVFRMICovCisgICAgICBHRVRTSE9SVChyZGxlbjEsIHAxKTsKKyAgICAgIAorICAgICAgLyogRG9uJ3QgdHJ5IGFuZCB2YWxpZGF0ZSBSUlNJR3MhICovCisgICAgICBpZiAodHlwZTEgIT0gVF9SUlNJRykKKwl7CisJICAvKiBDaGVjayBpZiB3ZSd2ZSBkb25lIHRoaXMgUlJzZXQgYWxyZWFkeSAqLworCSAgZm9yIChwMiA9IGFuc19zdGFydCwgaiA9IDA7IGogPCBpOyBqKyspCisJICAgIHsKKwkgICAgICBpZiAoIShyYyA9IGV4dHJhY3RfbmFtZShoZWFkZXIsIHBsZW4sICZwMiwgbmFtZSwgMCwgMTApKSkKKwkJcmV0dXJuIFNUQVRfQk9HVVM7IC8qIGJhZCBwYWNrZXQgKi8KKwkgICAgICAKKwkgICAgICBHRVRTSE9SVCh0eXBlMiwgcDIpOworCSAgICAgIEdFVFNIT1JUKGNsYXNzMiwgcDIpOworCSAgICAgIHAyICs9IDQ7IC8qIFRUTCAqLworCSAgICAgIEdFVFNIT1JUKHJkbGVuMiwgcDIpOworCSAgICAgIAorCSAgICAgIGlmICh0eXBlMiA9PSB0eXBlMSAmJiBjbGFzczIgPT0gY2xhc3MxICYmIHJjID09IDEpCisJCWJyZWFrOyAvKiBEb25lIGl0IGJlZm9yZTogbmFtZSwgdHlwZSwgY2xhc3MgYWxsIG1hdGNoLiAqLworCSAgICAgIAorCSAgICAgIGlmICghQUREX1JETEVOKGhlYWRlciwgcDIsIHBsZW4sIHJkbGVuMikpCisJCXJldHVybiBTVEFUX0JPR1VTOworCSAgICB9CisJICAKKwkgIC8qIE5vdCBkb25lLCB2YWxpZGF0ZSBub3cgKi8KKwkgIGlmIChqID09IGkpCisJICAgIHsKKwkgICAgICBpbnQgdHRsLCBrZXl0YWcsIGFsZ28sIGRpZ2VzdCwgdHlwZV9jb3ZlcmVkOworCSAgICAgIHVuc2lnbmVkIGNoYXIgKnBzYXZlOworCSAgICAgIHN0cnVjdCBhbGxfYWRkciBhOworCSAgICAgIHN0cnVjdCBibG9ja2RhdGEgKmtleTsKKwkgICAgICBzdHJ1Y3QgY3JlYyAqY3JlY3A7CisJICAgICAgY2hhciAqd2lsZG5hbWU7CisKKwkgICAgICByYyA9IHZhbGlkYXRlX3Jyc2V0KG5vdywgaGVhZGVyLCBwbGVuLCBjbGFzczEsIHR5cGUxLCBuYW1lLCBrZXluYW1lLCAmd2lsZG5hbWUsIE5VTEwsIDAsIDAsIDApOworCSAgICAgIAorCSAgICAgIGlmIChyYyA9PSBTVEFUX1NFQ1VSRV9XSUxEQ0FSRCkKKwkJeworCQkgIC8qIEFuIGF0dGFja2VyIHJlcGxheSBhIHdpbGRjYXJkIGFuc3dlciB3aXRoIGEgZGlmZmVyZW50CisJCSAgICAgYW5zd2VyIGFuZCBvdmVybGF5IGEgZ2VudWluZSBSUi4gVG8gcHJvdmUgdGhpcworCQkgICAgIGhhc24ndCBoYXBwZW5lZCwgdGhlIGFuc3dlciBtdXN0IHByb3ZlIHRoYXQKKwkJICAgICB0aGUgZ2VubnVpbmUgcmVjb3JkIGRvZXNuJ3QgZXhpc3QuIENoZWNrIHRoYXQgaGVyZS4gKi8KKwkJICBpZiAoIW5zZWNfdHlwZSAmJiAhKG5zZWNfdHlwZSA9IGZpbmRfbnNlY19yZWNvcmRzKGhlYWRlciwgcGxlbiwgJm5zZWNzLCAmbnNlY19jb3VudCwgY2xhc3MxKSkpCisJCSAgICByZXR1cm4gU1RBVF9CT0dVUzsgLyogTm8gTlNFQ3Mgb3IgYmFkIHBhY2tldCAqLworCQkgIAorCQkgIGlmIChuc2VjX3R5cGUgPT0gVF9OU0VDKQorCQkgICAgcmMgPSBwcm92ZV9ub25fZXhpc3RlbmNlX25zZWMoaGVhZGVyLCBwbGVuLCBuc2VjcywgbnNlY19jb3VudCwgZGFlbW9uLT53b3Jrc3BhY2VuYW1lLCBrZXluYW1lLCBuYW1lLCB0eXBlMSwgTlVMTCk7CisJCSAgZWxzZQorCQkgICAgcmMgPSBwcm92ZV9ub25fZXhpc3RlbmNlX25zZWMzKGhlYWRlciwgcGxlbiwgbnNlY3MsIG5zZWNfY291bnQsIGRhZW1vbi0+d29ya3NwYWNlbmFtZSwgCisJCQkJCQkgICBrZXluYW1lLCBuYW1lLCB0eXBlMSwgd2lsZG5hbWUsIE5VTEwpOworCQkgIAorCQkgIGlmIChyYyAhPSBTVEFUX1NFQ1VSRSkKKwkJICAgIHJldHVybiByYzsKKwkJfSAKKwkgICAgICBlbHNlIGlmIChyYyAhPSBTVEFUX1NFQ1VSRSkKKwkJeworCQkgIGlmIChjbGFzcykKKwkJICAgICpjbGFzcyA9IGNsYXNzMTsgLyogQ2xhc3MgZm9yIERTIG9yIEROU0tFWSAqLworCQkgIHJldHVybiByYzsKKwkJfQorCSAgICAgIAorCSAgICAgIC8qIENhY2hlIFJSc2lncyBpbiBhbnN3ZXIgc2VjdGlvbiwgYW5kIGlmIHdlIGp1c3QgdmFsaWRhdGVkIGEgRFMgUlJzZXQsIGNhY2hlIGl0ICovCisJICAgICAgY2FjaGVfc3RhcnRfaW5zZXJ0KCk7CisJICAgICAgCisJICAgICAgZm9yIChwMiA9IGFuc19zdGFydCwgaiA9IDA7IGogPCBudG9ocyhoZWFkZXItPmFuY291bnQpOyBqKyspCisJCXsKKwkJICBpZiAoIShyYyA9IGV4dHJhY3RfbmFtZShoZWFkZXIsIHBsZW4sICZwMiwgbmFtZSwgMCwgMTApKSkKKwkJICAgIHJldHVybiBTVEFUX0JPR1VTOyAvKiBiYWQgcGFja2V0ICovCisJCSAgICAgIAorCQkgIEdFVFNIT1JUKHR5cGUyLCBwMik7CisJCSAgR0VUU0hPUlQoY2xhc3MyLCBwMik7CisJCSAgR0VUTE9ORyh0dGwsIHAyKTsKKwkJICBHRVRTSE9SVChyZGxlbjIsIHAyKTsKKwkJICAgICAgIAorCQkgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgcDIsIHBsZW4sIHJkbGVuMikpCisJCSAgICByZXR1cm4gU1RBVF9CT0dVUzsgLyogYmFkIHBhY2tldCAqLworCQkgIAorCQkgIGlmIChjbGFzczIgPT0gY2xhc3MxICYmIHJjID09IDEpCisJCSAgICB7IAorCQkgICAgICBwc2F2ZSA9IHAyOworCisJCSAgICAgIGlmICh0eXBlMSA9PSBUX0RTICYmIHR5cGUyID09IFRfRFMpCisJCQl7CisJCQkgIGlmIChyZGxlbjIgPCA0KQorCQkJICAgIHJldHVybiBTVEFUX0JPR1VTOyAvKiBiYWQgcGFja2V0ICovCisJCQkgIAorCQkJICBHRVRTSE9SVChrZXl0YWcsIHAyKTsKKwkJCSAgYWxnbyA9ICpwMisrOworCQkJICBkaWdlc3QgPSAqcDIrKzsKKwkJCSAgCisJCQkgIC8qIENhY2hlIG5lZWRzIHRvIGtub3duIGNsYXNzIGZvciBETlNTRUMgc3R1ZmYgKi8KKwkJCSAgYS5hZGRyLmRuc3NlYy5jbGFzcyA9IGNsYXNzMjsKKwkJCSAgCisJCQkgIGlmICgoa2V5ID0gYmxvY2tkYXRhX2FsbG9jKChjaGFyKilwMiwgcmRsZW4yIC0gNCkpKQorCQkJICAgIHsKKwkJCSAgICAgIGlmICghKGNyZWNwID0gY2FjaGVfaW5zZXJ0KG5hbWUsICZhLCBub3csIHR0bCwgRl9GT1JXQVJEIHwgRl9EUyB8IEZfRE5TU0VDT0spKSkKKwkJCQlibG9ja2RhdGFfZnJlZShrZXkpOworCQkJICAgICAgZWxzZQorCQkJCXsKKwkJCQkgIGEuYWRkci5rZXl0YWcgPSBrZXl0YWc7CisJCQkJICBsb2dfcXVlcnkoRl9OT0VYVFJBIHwgRl9LRVlUQUcgfCBGX1VQU1RSRUFNLCBuYW1lLCAmYSwgIkRTIGtleXRhZyAldSIpOworCQkJCSAgY3JlY3AtPmFkZHIuZHMuZGlnZXN0ID0gZGlnZXN0OworCQkJCSAgY3JlY3AtPmFkZHIuZHMua2V5ZGF0YSA9IGtleTsKKwkJCQkgIGNyZWNwLT5hZGRyLmRzLmFsZ28gPSBhbGdvOworCQkJCSAgY3JlY3AtPmFkZHIuZHMua2V5dGFnID0ga2V5dGFnOworCQkJCSAgY3JlY3AtPmFkZHIuZHMua2V5bGVuID0gcmRsZW4yIC0gNDsgCisJCQkJfSAKKwkJCSAgICB9CisJCQl9CisJCSAgICAgIGVsc2UgaWYgKHR5cGUyID09IFRfUlJTSUcpCisJCQl7CisJCQkgIGlmIChyZGxlbjIgPCAxOCkKKwkJCSAgICByZXR1cm4gU1RBVF9CT0dVUzsgLyogYmFkIHBhY2tldCAqLworCQkJICAKKwkJCSAgR0VUU0hPUlQodHlwZV9jb3ZlcmVkLCBwMik7CisKKwkJCSAgaWYgKHR5cGVfY292ZXJlZCA9PSB0eXBlMSAmJiAKKwkJCSAgICAgICh0eXBlX2NvdmVyZWQgPT0gVF9BIHx8IHR5cGVfY292ZXJlZCA9PSBUX0FBQUEgfHwKKwkJCSAgICAgICB0eXBlX2NvdmVyZWQgPT0gVF9DTkFNRSB8fCB0eXBlX2NvdmVyZWQgPT0gVF9EUyB8fCAKKwkJCSAgICAgICB0eXBlX2NvdmVyZWQgPT0gVF9ETlNLRVkgfHwgdHlwZV9jb3ZlcmVkID09IFRfUFRSKSkgCisJCQkgICAgeworCQkJICAgICAgYS5hZGRyLmRuc3NlYy50eXBlID0gdHlwZV9jb3ZlcmVkOworCQkJICAgICAgYS5hZGRyLmRuc3NlYy5jbGFzcyA9IGNsYXNzMTsKKwkJCSAgICAgIAorCQkJICAgICAgYWxnbyA9ICpwMisrOworCQkJICAgICAgcDIgKz0gMTM7IC8qIGxhYmVscywgb3JpZ190dGwsIGV4cGlyYXRpb24sIGluY2VwdGlvbiAqLworCQkJICAgICAgR0VUU0hPUlQoa2V5dGFnLCBwMik7CisJCQkgICAgICAKKwkJCSAgICAgIGlmICgoa2V5ID0gYmxvY2tkYXRhX2FsbG9jKChjaGFyKilwc2F2ZSwgcmRsZW4yKSkpCisJCQkJeworCQkJCSAgaWYgKCEoY3JlY3AgPSBjYWNoZV9pbnNlcnQobmFtZSwgJmEsIG5vdywgdHRsLCAgRl9GT1JXQVJEIHwgRl9ETlNLRVkgfCBGX0RTKSkpCisJCQkJICAgIGJsb2NrZGF0YV9mcmVlKGtleSk7CisJCQkJICBlbHNlCisJCQkJICAgIHsKKwkJCQkgICAgICBjcmVjcC0+YWRkci5zaWcua2V5ZGF0YSA9IGtleTsKKwkJCQkgICAgICBjcmVjcC0+YWRkci5zaWcua2V5bGVuID0gcmRsZW4yOworCQkJCSAgICAgIGNyZWNwLT5hZGRyLnNpZy5rZXl0YWcgPSBrZXl0YWc7CisJCQkJICAgICAgY3JlY3AtPmFkZHIuc2lnLnR5cGVfY292ZXJlZCA9IHR5cGVfY292ZXJlZDsKKwkJCQkgICAgICBjcmVjcC0+YWRkci5zaWcuYWxnbyA9IGFsZ287CisJCQkJICAgIH0KKwkJCQl9CisJCQkgICAgfQorCQkJfQorCQkgICAgICAKKwkJICAgICAgcDIgPSBwc2F2ZTsKKwkJICAgIH0KKwkJICAKKwkJICBpZiAoIUFERF9SRExFTihoZWFkZXIsIHAyLCBwbGVuLCByZGxlbjIpKQorCQkgICAgcmV0dXJuIFNUQVRfQk9HVVM7IC8qIGJhZCBwYWNrZXQgKi8KKwkJfQorCQkgIAorCSAgICAgIGNhY2hlX2VuZF9pbnNlcnQoKTsKKwkgICAgfQorCX0KKworICAgICAgaWYgKCFBRERfUkRMRU4oaGVhZGVyLCBwMSwgcGxlbiwgcmRsZW4xKSkKKwlyZXR1cm4gU1RBVF9CT0dVUzsKKyAgICB9CisKKyAgLyogT0ssIGFsbCB0aGUgUlJzZXRzIHZhbGlkYXRlLCBub3cgc2VlIGlmIHdlIGhhdmUgYSBOT0RBVEEgb3IgTlhET01BSU4gcmVwbHkgKi8KKyAgaWYgKGhhdmVfYW5zd2VyKQorICAgIHJldHVybiBTVEFUX1NFQ1VSRTsKKyAgICAgCisgIC8qIE5YRE9NQUlOIG9yIE5PREFUQSByZXBseSwgcHJvdmUgdGhhdCAobmFtZSwgY2xhc3MxLCB0eXBlMSkgY2FuJ3QgZXhpc3QgKi8KKyAgLyogRmlyc3QgbWFyc2hhbGwgdGhlIE5TRUMgcmVjb3JkcywgaWYgd2UndmUgbm90IGRvbmUgaXQgcHJldmlvdXNseSAqLworICBpZiAoIW5zZWNfdHlwZSAmJiAhKG5zZWNfdHlwZSA9IGZpbmRfbnNlY19yZWNvcmRzKGhlYWRlciwgcGxlbiwgJm5zZWNzLCAmbnNlY19jb3VudCwgcWNsYXNzKSkpCisgICAgcmV0dXJuIFNUQVRfQk9HVVM7IC8qIE5vIE5TRUNzICovCisgICAKKyAgLyogR2V0IG5hbWUgb2YgbWlzc2luZyBhbnN3ZXIgKi8KKyAgaWYgKCFleHRyYWN0X25hbWUoaGVhZGVyLCBwbGVuLCAmcW5hbWUsIG5hbWUsIDEsIDApKQorICAgIHJldHVybiBTVEFUX0JPR1VTOworICAKKyAgaWYgKG5zZWNfdHlwZSA9PSBUX05TRUMpCisgICAgcmV0dXJuIHByb3ZlX25vbl9leGlzdGVuY2VfbnNlYyhoZWFkZXIsIHBsZW4sIG5zZWNzLCBuc2VjX2NvdW50LCBkYWVtb24tPndvcmtzcGFjZW5hbWUsIGtleW5hbWUsIG5hbWUsIHF0eXBlLCBub25zKTsKKyAgZWxzZQorICAgIHJldHVybiBwcm92ZV9ub25fZXhpc3RlbmNlX25zZWMzKGhlYWRlciwgcGxlbiwgbnNlY3MsIG5zZWNfY291bnQsIGRhZW1vbi0+d29ya3NwYWNlbmFtZSwga2V5bmFtZSwgbmFtZSwgcXR5cGUsIE5VTEwsIG5vbnMpOworfQorCisvKiBDaGFzZSB0aGUgQ05BTUUgY2hhaW4gaW4gdGhlIHBhY2tldCB1bnRpbCB0aGUgZmlyc3QgcmVjb3JkIHdoaWNoIF9kb2Vzbid0IHZhbGlkYXRlLgorICAgTmVlZGVkIGZvciBwcm92aW5nIGFuc3dlciBpbiB1bnNpZ25lZCBzcGFjZS4KKyAgIFJldHVybiBTVEFUX05FRURfKiAKKyAgICAgICAgICBTVEFUX0JPR1VTIC0gZXJyb3IKKyAgICAgICAgICBTVEFUX0lOU0VDVVJFIC0gbmFtZSBvZiBmaXJzdCBub24tc2VjdXJlIHJlY29yZCBpbiBuYW1lIAorKi8KK2ludCBkbnNzZWNfY2hhc2VfY25hbWUodGltZV90IG5vdywgc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIGNoYXIgKm5hbWUsIGNoYXIgKmtleW5hbWUpCit7CisgIHVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKShoZWFkZXIrMSk7CisgIGludCB0eXBlLCBjbGFzcywgcWNsYXNzLCByZGxlbiwgaiwgcmM7CisgIGludCBjbmFtZV9jb3VudCA9IENOQU1FX0NIQUlOOworCisgIC8qIEdldCBxdWVzdGlvbiAqLworICBpZiAoIWV4dHJhY3RfbmFtZShoZWFkZXIsIHBsZW4sICZwLCBuYW1lLCAxLCA0KSkKKyAgICByZXR1cm4gU1RBVF9CT0dVUzsKKyAgCisgIHAgKz0yOyAvKiB0eXBlICovCisgIEdFVFNIT1JUKHFjbGFzcywgcCk7CisKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgZm9yIChqID0gbnRvaHMoaGVhZGVyLT5hbmNvdW50KTsgaiAhPSAwOyBqLS0pIAorCXsKKwkgIGlmICghKHJjID0gZXh0cmFjdF9uYW1lKGhlYWRlciwgcGxlbiwgJnAsIG5hbWUsIDAsIDEwKSkpCisJICAgIHJldHVybiBTVEFUX0JPR1VTOyAvKiBiYWQgcGFja2V0ICovCisJICAKKwkgIEdFVFNIT1JUKHR5cGUsIHApOyAKKwkgIEdFVFNIT1JUKGNsYXNzLCBwKTsKKwkgIHAgKz0gNDsgLyogVFRMICovCisJICBHRVRTSE9SVChyZGxlbiwgcCk7CisKKwkgIC8qIE5vdCB0YXJnZXQsIGxvb3AgKi8KKwkgIGlmIChyYyA9PSAyIHx8IHFjbGFzcyAhPSBjbGFzcykKKwkgICAgeworCSAgICAgIGlmICghQUREX1JETEVOKGhlYWRlciwgcCwgcGxlbiwgcmRsZW4pKQorCQlyZXR1cm4gU1RBVF9CT0dVUzsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCSAgCisJICAvKiBHb3QgdG8gZW5kIG9mIENOQU1FIGNoYWluLiAqLworCSAgaWYgKHR5cGUgIT0gVF9DTkFNRSkKKwkgICAgcmV0dXJuIFNUQVRfSU5TRUNVUkU7CisJICAKKwkgIC8qIHZhbGlkYXRlIENOQU1FIGNoYWluLCByZXR1cm4gaWYgaW5zZWN1cmUgb3IgbmVlZCBtb3JlIGRhdGEgKi8KKwkgIHJjID0gdmFsaWRhdGVfcnJzZXQobm93LCBoZWFkZXIsIHBsZW4sIGNsYXNzLCB0eXBlLCBuYW1lLCBrZXluYW1lLCBOVUxMLCBOVUxMLCAwLCAwLCAwKTsKKwkgIGlmIChyYyAhPSBTVEFUX1NFQ1VSRSkKKwkgICAgeworCSAgICAgIGlmIChyYyA9PSBTVEFUX05PX1NJRykKKwkJcmMgPSBTVEFUX0lOU0VDVVJFOworCSAgICAgIHJldHVybiByYzsKKwkgICAgfQorCisJICAvKiBMb29wIGRvd24gQ05BTUUgY2hhaW4vICovCisJICBpZiAoIWNuYW1lX2NvdW50LS0gfHwgCisJICAgICAgIWV4dHJhY3RfbmFtZShoZWFkZXIsIHBsZW4sICZwLCBuYW1lLCAxLCAwKSB8fAorCSAgICAgICEocCA9IHNraXBfcXVlc3Rpb25zKGhlYWRlciwgcGxlbikpKQorCSAgICByZXR1cm4gU1RBVF9CT0dVUzsKKwkgIAorCSAgYnJlYWs7CisJfQorCisgICAgICAvKiBFbmQgb2YgQ05BTUUgY2hhaW4gKi8KKyAgICAgIHJldHVybiBTVEFUX0lOU0VDVVJFOwkKKyAgICB9Cit9CisKKworLyogQ29tcHV0ZSBrZXl0YWcgKGNoZWNrc3VtIHRvIHF1aWNrbHkgaW5kZXggYSBrZXkpLiBTZWUgUkZDNDAzNCAqLworaW50IGRuc2tleV9rZXl0YWcoaW50IGFsZywgaW50IGZsYWdzLCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4pCit7CisgIGlmIChhbGcgPT0gMSkKKyAgICB7CisgICAgICAvKiBBbGdvcml0aG0gMSAoUlNBTUQ1KSBoYXMgYSBkaWZmZXJlbnQgKG9sZGVyKSBrZXl0YWcgY2FsY3VsYXRpb24gYWxnb3JpdGhtLgorICAgICAgICAgU2VlIFJGQzQwMzQsIEFwcGVuZGl4IEIuMSAqLworICAgICAgcmV0dXJuIGtleVtrZXlsZW4tNF0gKiAyNTYgKyBrZXlba2V5bGVuLTNdOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgYWMgPSBmbGFncyArIDB4MzAwICsgYWxnOworICAgICAgaW50IGk7CisKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlsZW47ICsraSkKKyAgICAgICAgYWMgKz0gKGkgJiAxKSA/IGtleVtpXSA6IGtleVtpXSA8PCA4OworCisgICAgICBhYyArPSAoYWMgPj4gMTYpICYgMHhmZmZmOworICAgICAgcmV0dXJuIGFjICYgMHhmZmZmOworICAgIH0KK30KKworc2l6ZV90IGRuc3NlY19nZW5lcmF0ZV9xdWVyeShzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBjaGFyICplbmQsIGNoYXIgKm5hbWUsIGludCBjbGFzcywgaW50IHR5cGUsIHVuaW9uIG15c29ja2FkZHIgKmFkZHIpCit7CisgIHVuc2lnbmVkIGNoYXIgKnA7CisgIGNoYXIgKnR5cGVzID0gcXVlcnlzdHIoImRuc3NlYy1xdWVyeSIsIHR5cGUpOworCisgIGlmIChhZGRyLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgCisgICAgbG9nX3F1ZXJ5KEZfTk9FWFRSQSB8IEZfRE5TU0VDIHwgRl9JUFY0LCBuYW1lLCAoc3RydWN0IGFsbF9hZGRyICopJmFkZHItPmluLnNpbl9hZGRyLCB0eXBlcyk7CisjaWZkZWYgSEFWRV9JUFY2CisgIGVsc2UKKyAgICBsb2dfcXVlcnkoRl9OT0VYVFJBIHwgRl9ETlNTRUMgfCBGX0lQVjYsIG5hbWUsIChzdHJ1Y3QgYWxsX2FkZHIgKikmYWRkci0+aW42LnNpbjZfYWRkciwgdHlwZXMpOworI2VuZGlmCisgIAorICBoZWFkZXItPnFkY291bnQgPSBodG9ucygxKTsKKyAgaGVhZGVyLT5hbmNvdW50ID0gaHRvbnMoMCk7CisgIGhlYWRlci0+bnNjb3VudCA9IGh0b25zKDApOworICBoZWFkZXItPmFyY291bnQgPSBodG9ucygwKTsKKworICBoZWFkZXItPmhiMyA9IEhCM19SRDsgCisgIFNFVF9PUENPREUoaGVhZGVyLCBRVUVSWSk7CisgIC8qIEZvciBkZWJ1Z2dpbmcsIHNldCBDaGVja2luZyBEaXNhYmxlZCwgb3RoZXJ3aXNlLCBoYXZlIHRoZSB1cHN0cmVhbSBjaGVjayB0b28sCisgICAgIHRoaXMgYWxsb3dzIGl0IHRvIHNlbGVjdCBhdXRoIHNlcnZlcnMgd2hlbiBvbmUgaXMgcmV0dXJuaW5nIGJhZCBkYXRhLiAqLworICBoZWFkZXItPmhiNCA9IG9wdGlvbl9ib29sKE9QVF9ETlNTRUNfREVCVUcpID8gSEI0X0NEIDogMDsKKworICAvKiBJRCBmaWxsZWQgaW4gbGF0ZXIgKi8KKworICBwID0gKHVuc2lnbmVkIGNoYXIgKikoaGVhZGVyKzEpOworCQorICBwID0gZG9fcmZjMTAzNV9uYW1lKHAsIG5hbWUpOworICAqcCsrID0gMDsKKyAgUFVUU0hPUlQodHlwZSwgcCk7CisgIFBVVFNIT1JUKGNsYXNzLCBwKTsKKworICByZXR1cm4gYWRkX2RvX2JpdChoZWFkZXIsIHAgLSAodW5zaWduZWQgY2hhciAqKWhlYWRlciwgZW5kKTsKK30KKworLyogR28gdGhyb3VnaCBhIGRvbWFpbiBuYW1lLCBmaW5kICJwb2ludGVycyIgYW5kIGZpeCB0aGVtIHVwIGJhc2VkIG9uIGhvdyBtYW55IGJ5dGVzCisgICB3ZSd2ZSBjaG9wcGVkIG91dCBvZiB0aGUgcGFja2V0LCBvciBjaGVjayB0aGV5IGRvbid0IHBvaW50IGludG8gYW4gZWxpZGVkIHBhcnQuICAqLworc3RhdGljIGludCBjaGVja19uYW1lKHVuc2lnbmVkIGNoYXIgKipuYW1lcCwgc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIGludCBmaXh1cCwgdW5zaWduZWQgY2hhciAqKnJycywgaW50IHJyX2NvdW50KQoreworICB1bnNpZ25lZCBjaGFyICphbnNwID0gKm5hbWVwOworCisgIHdoaWxlKDEpCisgICAgeworICAgICAgdW5zaWduZWQgaW50IGxhYmVsX3R5cGU7CisgICAgICAKKyAgICAgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgYW5zcCwgcGxlbiwgMSkpCisJcmV0dXJuIDA7CisgICAgICAKKyAgICAgIGxhYmVsX3R5cGUgPSAoKmFuc3ApICYgMHhjMDsKKworICAgICAgaWYgKGxhYmVsX3R5cGUgPT0gMHhjMCkKKwl7CisJICAvKiBwb2ludGVyIGZvciBjb21wcmVzc2lvbi4gKi8KKwkgIHVuc2lnbmVkIGludCBvZmZzZXQ7CisJICBpbnQgaTsKKwkgIHVuc2lnbmVkIGNoYXIgKnA7CisJICAKKwkgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgYW5zcCwgcGxlbiwgMikpCisJICAgIHJldHVybiAwOworCisJICBvZmZzZXQgPSAoKCphbnNwKyspICYgMHgzZikgPDwgODsKKwkgIG9mZnNldCB8PSAqYW5zcCsrOworCisJICBwID0gb2Zmc2V0ICsgKHVuc2lnbmVkIGNoYXIgKiloZWFkZXI7CisJICAKKwkgIGZvciAoaSA9IDA7IGkgPCBycl9jb3VudDsgaSsrKQorCSAgICBpZiAocCA8IHJyc1tpXSkKKwkgICAgICBicmVhazsKKwkgICAgZWxzZQorCSAgICAgIGlmIChpICYgMSkKKwkJb2Zmc2V0IC09IHJyc1tpXSAtIHJyc1tpLTFdOworCisJICAvKiBkb2VzIHRoZSBwb2ludGVyIGVuZCB1cCBpbiBhbiBlbGlkZWQgUlI/ICovCisJICBpZiAoaSAmIDEpCisJICAgIHJldHVybiAwOworCisJICAvKiBObywgc2NhbGUgdGhlIHBvaW50ZXIgKi8KKwkgIGlmIChmaXh1cCkKKwkgICAgeworCSAgICAgIGFuc3AgLT0gMjsKKwkgICAgICAqYW5zcCsrID0gKG9mZnNldCA+PiA4KSB8IDB4YzA7CisJICAgICAgKmFuc3ArKyA9IG9mZnNldCAmIDB4ZmY7CisJICAgIH0KKwkgIGJyZWFrOworCX0KKyAgICAgIGVsc2UgaWYgKGxhYmVsX3R5cGUgPT0gMHg4MCkKKwlyZXR1cm4gMDsgLyogcmVzZXJ2ZWQgKi8KKyAgICAgIGVsc2UgaWYgKGxhYmVsX3R5cGUgPT0gMHg0MCkKKwl7CisJICAvKiBFeHRlbmRlZCBsYWJlbCB0eXBlICovCisJICB1bnNpZ25lZCBpbnQgY291bnQ7CisJICAKKwkgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgYW5zcCwgcGxlbiwgMikpCisJICAgIHJldHVybiAwOworCSAgCisJICBpZiAoKCgqYW5zcCsrKSAmIDB4M2YpICE9IDEpCisJICAgIHJldHVybiAwOyAvKiB3ZSBvbmx5IHVuZGVyc3RhbmQgYml0c3RyaW5ncyAqLworCSAgCisJICBjb3VudCA9ICooYW5zcCsrKTsgLyogQml0cyBpbiBiaXRzdHJpbmcgKi8KKwkgIAorCSAgaWYgKGNvdW50ID09IDApIC8qIGNvdW50ID09IDAgbWVhbnMgMjU2IGJpdHMgKi8KKwkgICAgYW5zcCArPSAzMjsKKwkgIGVsc2UKKwkgICAgYW5zcCArPSAoKGNvdW50LTEpPj4zKSsxOworCX0KKyAgICAgIGVsc2UKKwl7IC8qIGxhYmVsIHR5cGUgPT0gMCBCb3R0b20gc2l4IGJpdHMgaXMgbGVuZ3RoICovCisJICB1bnNpZ25lZCBpbnQgbGVuID0gKCphbnNwKyspICYgMHgzZjsKKwkgIAorCSAgaWYgKCFBRERfUkRMRU4oaGVhZGVyLCBhbnNwLCBwbGVuLCBsZW4pKQorCSAgICByZXR1cm4gMDsKKworCSAgaWYgKGxlbiA9PSAwKQorCSAgICBicmVhazsgLyogemVybyBsZW5ndGggbGFiZWwgbWFya3MgdGhlIGVuZC4gKi8KKwl9CisgICAgfQorCisgICpuYW1lcCA9IGFuc3A7CisKKyAgcmV0dXJuIDE7Cit9CisKKy8qIEdvIHRocm91Z2ggUlJzIGFuZCBjaGVjayBvciBmaXh1cCB0aGUgZG9tYWluIG5hbWVzIGNvbnRhaW5lZCB3aXRoaW4gKi8KK3N0YXRpYyBpbnQgY2hlY2tfcnJzKHVuc2lnbmVkIGNoYXIgKnAsIHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuLCBpbnQgZml4dXAsIHVuc2lnbmVkIGNoYXIgKipycnMsIGludCBycl9jb3VudCkKK3sKKyAgaW50IGksIHR5cGUsIGNsYXNzLCByZGxlbjsKKyAgdW5zaWduZWQgY2hhciAqcHA7CisgIAorICBmb3IgKGkgPSAwOyBpIDwgbnRvaHMoaGVhZGVyLT5hbmNvdW50KSArIG50b2hzKGhlYWRlci0+bnNjb3VudCkgKyBudG9ocyhoZWFkZXItPmFyY291bnQpOyBpKyspCisgICAgeworICAgICAgcHAgPSBwOworCisgICAgICBpZiAoIShwID0gc2tpcF9uYW1lKHAsIGhlYWRlciwgcGxlbiwgMTApKSkKKwlyZXR1cm4gMDsKKyAgICAgIAorICAgICAgR0VUU0hPUlQodHlwZSwgcCk7IAorICAgICAgR0VUU0hPUlQoY2xhc3MsIHApOworICAgICAgcCArPSA0OyAvKiBUVEwgKi8KKyAgICAgIEdFVFNIT1JUKHJkbGVuLCBwKTsKKworICAgICAgaWYgKHR5cGUgIT0gVF9OU0VDICYmIHR5cGUgIT0gVF9OU0VDMyAmJiB0eXBlICE9IFRfUlJTSUcpCisJeworCSAgLyogZml4dXAgbmFtZSBvZiBSUiAqLworCSAgaWYgKCFjaGVja19uYW1lKCZwcCwgaGVhZGVyLCBwbGVuLCBmaXh1cCwgcnJzLCBycl9jb3VudCkpCisJICAgIHJldHVybiAwOworCSAgCisJICBpZiAoY2xhc3MgPT0gQ19JTikKKwkgICAgeworCSAgICAgIHUxNiAqZDsKKyAKKwkgICAgICBmb3IgKHBwID0gcCwgZCA9IGdldF9kZXNjKHR5cGUpOyAqZCAhPSAodTE2KS0xOyBkKyspCisJCXsKKwkJICBpZiAoKmQgIT0gMCkKKwkJICAgIHBwICs9ICpkOworCQkgIGVsc2UgaWYgKCFjaGVja19uYW1lKCZwcCwgaGVhZGVyLCBwbGVuLCBmaXh1cCwgcnJzLCBycl9jb3VudCkpCisJCSAgICByZXR1cm4gMDsKKwkJfQorCSAgICB9CisJfQorICAgICAgCisgICAgICBpZiAoIUFERF9SRExFTihoZWFkZXIsIHAsIHBsZW4sIHJkbGVuKSkKKwlyZXR1cm4gMDsKKyAgICB9CisgIAorICByZXR1cm4gMTsKK30KKwkKKworc2l6ZV90IGZpbHRlcl9ycnNpZ3Moc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4pCit7CisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyICoqcnJzOworICBzdGF0aWMgaW50IHJyX3N6ID0gMDsKKyAgCisgIHVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKShoZWFkZXIrMSk7CisgIGludCBpLCByZGxlbiwgcXR5cGUsIHFjbGFzcywgcnJfZm91bmQsIGNob3BfYW4sIGNob3BfbnMsIGNob3BfYXI7CisKKyAgaWYgKG50b2hzKGhlYWRlci0+cWRjb3VudCkgIT0gMSB8fAorICAgICAgIShwID0gc2tpcF9uYW1lKHAsIGhlYWRlciwgcGxlbiwgNCkpKQorICAgIHJldHVybiBwbGVuOworICAKKyAgR0VUU0hPUlQocXR5cGUsIHApOworICBHRVRTSE9SVChxY2xhc3MsIHApOworCisgIC8qIEZpcnN0IHBhc3MsIGZpbmQgcG9pbnRlcnMgdG8gc3RhcnQgYW5kIGVuZCBvZiBhbGwgdGhlIHJlY29yZHMgd2Ugd2lzaCB0byBlbGlkZToKKyAgICAgcmVjb3JkcyBhZGRlZCBmb3IgRE5TU0VDLCB1bmxlc3MgZXhwbGljaXR5IHF1ZXJpZWQgZm9yICovCisgIGZvciAocnJfZm91bmQgPSAwLCBjaG9wX25zID0gMCwgY2hvcF9hbiA9IDAsIGNob3BfYXIgPSAwLCBpID0gMDsgCisgICAgICAgaSA8IG50b2hzKGhlYWRlci0+YW5jb3VudCkgKyBudG9ocyhoZWFkZXItPm5zY291bnQpICsgbnRvaHMoaGVhZGVyLT5hcmNvdW50KTsKKyAgICAgICBpKyspCisgICAgeworICAgICAgdW5zaWduZWQgY2hhciAqcHN0YXJ0ID0gcDsKKyAgICAgIGludCB0eXBlLCBjbGFzczsKKworICAgICAgaWYgKCEocCA9IHNraXBfbmFtZShwLCBoZWFkZXIsIHBsZW4sIDEwKSkpCisJcmV0dXJuIHBsZW47CisgICAgICAKKyAgICAgIEdFVFNIT1JUKHR5cGUsIHApOyAKKyAgICAgIEdFVFNIT1JUKGNsYXNzLCBwKTsKKyAgICAgIHAgKz0gNDsgLyogVFRMICovCisgICAgICBHRVRTSE9SVChyZGxlbiwgcCk7CisgICAgICAKKyAgICAgIGlmICgodHlwZSA9PSBUX05TRUMgfHwgdHlwZSA9PSBUX05TRUMzIHx8IHR5cGUgPT0gVF9SUlNJRykgJiYgCisJICAodHlwZSAhPSBxdHlwZSB8fCBjbGFzcyAhPSBxY2xhc3MpKQorCXsKKwkgIGlmICghZXhwYW5kX3dvcmtzcGFjZSgmcnJzLCAmcnJfc3osIHJyX2ZvdW5kICsgMSkpCisJICAgIHJldHVybiBwbGVuOyAKKwkgIAorCSAgcnJzW3JyX2ZvdW5kKytdID0gcHN0YXJ0OworCisJICBpZiAoIUFERF9SRExFTihoZWFkZXIsIHAsIHBsZW4sIHJkbGVuKSkKKwkgICAgcmV0dXJuIHBsZW47CisJICAKKwkgIHJyc1tycl9mb3VuZCsrXSA9IHA7CisJICAKKwkgIGlmIChpIDwgbnRvaHMoaGVhZGVyLT5hbmNvdW50KSkKKwkgICAgY2hvcF9hbisrOworCSAgZWxzZSBpZiAoaSA8IChudG9ocyhoZWFkZXItPm5zY291bnQpICsgbnRvaHMoaGVhZGVyLT5hbmNvdW50KSkpCisJICAgIGNob3BfbnMrKzsKKwkgIGVsc2UKKwkgICAgY2hvcF9hcisrOworCX0KKyAgICAgIGVsc2UgaWYgKCFBRERfUkRMRU4oaGVhZGVyLCBwLCBwbGVuLCByZGxlbikpCisJcmV0dXJuIHBsZW47CisgICAgfQorICAKKyAgLyogTm90aGluZyB0byBkby4gKi8KKyAgaWYgKHJyX2ZvdW5kID09IDApCisgICAgcmV0dXJuIHBsZW47CisKKyAgLyogU2Vjb25kIHBhc3MsIGxvb2sgZm9yIHBvaW50ZXJzIGluIG5hbWVzIGluIHRoZSByZWNvcmRzIHdlJ3JlIGtlZXBpbmcgYW5kIG1ha2Ugc3VyZSB0aGV5IGRvbid0CisgICAgIHBvaW50IHRvIHJlY29yZHMgd2UncmUgZ29pbmcgdG8gZWxpZGUuIFRoaXMgaXMgdGhlb3JldGljYWxseSBwb3NzaWJsZSwgYnV0IHVubGlrZWx5LiBJZgorICAgICBpdCBoYXBwZW5zLCB3ZSBnaXZlIHVwIGFuZCBsZWF2ZSB0aGUgYW5zd2VyIHVuY2hhbmdlZC4gKi8KKyAgcCA9ICh1bnNpZ25lZCBjaGFyICopKGhlYWRlcisxKTsKKyAgCisgIC8qIHF1ZXN0aW9uIGZpcnN0ICovCisgIGlmICghY2hlY2tfbmFtZSgmcCwgaGVhZGVyLCBwbGVuLCAwLCBycnMsIHJyX2ZvdW5kKSkKKyAgICByZXR1cm4gcGxlbjsKKyAgcCArPSA0OyAvKiBxY2xhc3MsIHF0eXBlICovCisgIAorICAvKiBOb3cgYW5zd2VycyBhbmQgTlMgKi8KKyAgaWYgKCFjaGVja19ycnMocCwgaGVhZGVyLCBwbGVuLCAwLCBycnMsIHJyX2ZvdW5kKSkKKyAgICByZXR1cm4gcGxlbjsKKyAgCisgIC8qIFRoaXJkIHBhc3MsIGVsaWRlIHJlY29yZHMgKi8KKyAgZm9yIChwID0gcnJzWzBdLCBpID0gMTsgaSA8IHJyX2ZvdW5kOyBpICs9IDIpCisgICAgeworICAgICAgdW5zaWduZWQgY2hhciAqc3RhcnQgPSBycnNbaV07CisgICAgICB1bnNpZ25lZCBjaGFyICplbmQgPSAoaSAhPSBycl9mb3VuZCAtIDEpID8gcnJzW2krMV0gOiAoKHVuc2lnbmVkIGNoYXIgKikoaGVhZGVyKzEpKSArIHBsZW47CisgICAgICAKKyAgICAgIG1lbW1vdmUocCwgc3RhcnQsIGVuZC1zdGFydCk7CisgICAgICBwICs9IGVuZC1zdGFydDsKKyAgICB9CisgICAgIAorICBwbGVuID0gcCAtICh1bnNpZ25lZCBjaGFyICopaGVhZGVyOworICBoZWFkZXItPmFuY291bnQgPSBodG9ucyhudG9ocyhoZWFkZXItPmFuY291bnQpIC0gY2hvcF9hbik7CisgIGhlYWRlci0+bnNjb3VudCA9IGh0b25zKG50b2hzKGhlYWRlci0+bnNjb3VudCkgLSBjaG9wX25zKTsKKyAgaGVhZGVyLT5hcmNvdW50ID0gaHRvbnMobnRvaHMoaGVhZGVyLT5hcmNvdW50KSAtIGNob3BfYXIpOworCisgIC8qIEZvdXJ0aCBwYXNzLCBmaXggdXAgcG9pbnRlcnMgaW4gdGhlIHJlbWFpbmluZyByZWNvcmRzICovCisgIHAgPSAodW5zaWduZWQgY2hhciAqKShoZWFkZXIrMSk7CisgIAorICBjaGVja19uYW1lKCZwLCBoZWFkZXIsIHBsZW4sIDEsIHJycywgcnJfZm91bmQpOworICBwICs9IDQ7IC8qIHFjbGFzcywgcXR5cGUgKi8KKyAgCisgIGNoZWNrX3JycyhwLCBoZWFkZXIsIHBsZW4sIDEsIHJycywgcnJfZm91bmQpOworICAKKyAgcmV0dXJuIHBsZW47Cit9CisKK3Vuc2lnbmVkIGNoYXIqIGhhc2hfcXVlc3Rpb25zKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuLCBjaGFyICpuYW1lKQoreworICBpbnQgcTsKKyAgdW5zaWduZWQgaW50IGxlbjsKKyAgdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopKGhlYWRlcisxKTsKKyAgY29uc3Qgc3RydWN0IG5ldHRsZV9oYXNoICpoYXNoOworICB2b2lkICpjdHg7CisgIHVuc2lnbmVkIGNoYXIgKmRpZ2VzdDsKKyAgCisgIGlmICghKGhhc2ggPSBoYXNoX2ZpbmQoInNoYTEiKSkgfHwgIWhhc2hfaW5pdChoYXNoLCAmY3R4LCAmZGlnZXN0KSkKKyAgICByZXR1cm4gTlVMTDsKKyAgCisgIGZvciAocSA9IG50b2hzKGhlYWRlci0+cWRjb3VudCk7IHEgIT0gMDsgcS0tKSAKKyAgICB7CisgICAgICBpZiAoIWV4dHJhY3RfbmFtZShoZWFkZXIsIHBsZW4sICZwLCBuYW1lLCAxLCA0KSkKKwlicmVhazsgLyogYmFkIHBhY2tldCAqLworICAgICAgCisgICAgICBsZW4gPSB0b193aXJlKG5hbWUpOworICAgICAgaGFzaC0+dXBkYXRlKGN0eCwgbGVuLCAodW5zaWduZWQgY2hhciAqKW5hbWUpOworICAgICAgLyogQ1JDIHRoZSBjbGFzcyBhbmQgdHlwZSBhcyB3ZWxsICovCisgICAgICBoYXNoLT51cGRhdGUoY3R4LCA0LCBwKTsKKworICAgICAgcCArPSA0OworICAgICAgaWYgKCFDSEVDS19MRU4oaGVhZGVyLCBwLCBwbGVuLCAwKSkKKwlicmVhazsgLyogYmFkIHBhY2tldCAqLworICAgIH0KKyAgCisgIGhhc2gtPmRpZ2VzdChjdHgsIGhhc2gtPmRpZ2VzdF9zaXplLCBkaWdlc3QpOworICByZXR1cm4gZGlnZXN0OworfQorCisjZW5kaWYgLyogSEFWRV9ETlNTRUMgKi8KZGlmZiAtLWdpdCBhL3NyYy9kb21haW4uYyBiL3NyYy9kb21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGQ1ZTRmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2RvbWFpbi5jCkBAIC0wLDAgKzEsMjMyIEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE0IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworCitzdGF0aWMgc3RydWN0IGNvbmRfZG9tYWluICpzZWFyY2hfZG9tYWluKHN0cnVjdCBpbl9hZGRyIGFkZHIsIHN0cnVjdCBjb25kX2RvbWFpbiAqYyk7CisjaWZkZWYgSEFWRV9JUFY2CitzdGF0aWMgc3RydWN0IGNvbmRfZG9tYWluICpzZWFyY2hfZG9tYWluNihzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIHN0cnVjdCBjb25kX2RvbWFpbiAqYyk7CisjZW5kaWYKKworCitpbnQgaXNfbmFtZV9zeW50aGV0aWMoaW50IGZsYWdzLCBjaGFyICpuYW1lLCBzdHJ1Y3QgYWxsX2FkZHIgKmFkZHIpCit7CisgIGNoYXIgKnA7CisgIHN0cnVjdCBjb25kX2RvbWFpbiAqYyA9IE5VTEw7CisgIGludCBwcm90ID0gQUZfSU5FVDsKKworI2lmZGVmIEhBVkVfSVBWNgorICBpZiAoZmxhZ3MgJiBGX0lQVjYpCisgICAgcHJvdCA9IEFGX0lORVQ2OworI2VuZGlmCisKKyAgZm9yIChjID0gZGFlbW9uLT5zeW50aF9kb21haW5zOyBjOyBjID0gYy0+bmV4dCkKKyAgICB7CisgICAgICBpbnQgZm91bmQgPSAwOworICAgICAgY2hhciAqdGFpbCwgKnByZWY7CisgICAgICAKKyAgICAgIGZvciAodGFpbCA9IG5hbWUsIHByZWYgPSBjLT5wcmVmaXg7ICp0YWlsICE9IDAgJiYgcHJlZiAmJiAqcHJlZiAhPSAwOyB0YWlsKyssIHByZWYrKykKKwl7CisJICB1bnNpZ25lZCBpbnQgYzEgPSAodW5zaWduZWQgY2hhcikgKnByZWY7CisJICB1bnNpZ25lZCBpbnQgYzIgPSAodW5zaWduZWQgY2hhcikgKnRhaWw7CisJICAKKwkgIGlmIChjMSA+PSAnQScgJiYgYzEgPD0gJ1onKQorCSAgICBjMSArPSAnYScgLSAnQSc7CisJICBpZiAoYzIgPj0gJ0EnICYmIGMyIDw9ICdaJykKKwkgICAgYzIgKz0gJ2EnIC0gJ0EnOworCSAgCisJICBpZiAoYzEgIT0gYzIpCisJICAgIGJyZWFrOworCX0KKyAgICAgIAorICAgICAgaWYgKHByZWYgJiYgKnByZWYgIT0gMCkKKwljb250aW51ZTsgLyogcHJlZml4IG1hdGNoIGZhaWwgKi8KKyAgICAgIAorICAgICAgLyogTkIsIG11c3Qgbm90IGFsdGVyIG5hbWUgaWYgd2UgcmV0dXJuIHplcm8gKi8KKyAgICAgIGZvciAocCA9IHRhaWw7ICpwOyBwKyspCisJeworCSAgY2hhciBjID0gKnA7CisJICAKKwkgIGlmICgoYyA+PScwJyAmJiBjIDw9ICc5JykgfHwgYyA9PSAnLScpCisJICAgIGNvbnRpbnVlOworCSAgCisjaWZkZWYgSEFWRV9JUFY2CisJICBpZiAocHJvdCA9PSBBRl9JTkVUNiAmJiAoKGMgPj0nQScgJiYgYyA8PSAnRicpIHx8IChjID49J2EnICYmIGMgPD0gJ2YnKSkpIAorCSAgICBjb250aW51ZTsKKyNlbmRpZgorCSAgCisJICBicmVhazsKKwl9CisgICAgICAKKyAgICAgIGlmICgqcCAhPSAnLicpCisJY29udGludWU7CisgICAgICAKKyAgICAgICpwID0gMDsJCisgICAgICAKKyAgICAgIC8qIHN3YXAgLiBvciA6IGZvciAtICovCisgICAgICBmb3IgKHAgPSB0YWlsOyAqcDsgcCsrKQorCWlmICgqcCA9PSAnLScpCisJICB7CisJICAgIGlmIChwcm90ID09IEFGX0lORVQpCisJICAgICAgKnAgPSAnLic7CisjaWZkZWYgSEFWRV9JUFY2CisJICAgIGVsc2UKKwkgICAgICAqcCA9ICc6JzsKKyNlbmRpZgorCSAgfQorICAgICAgCisgICAgICBpZiAoaG9zdG5hbWVfaXNlcXVhbChjLT5kb21haW4sIHArMSkgJiYgaW5ldF9wdG9uKHByb3QsIHRhaWwsIGFkZHIpKQorCXsKKwkgIGlmIChwcm90ID09IEFGX0lORVQpCisJICAgIHsKKwkgICAgICBpZiAoIWMtPmlzNiAmJgorCQkgIG50b2hsKGFkZHItPmFkZHIuYWRkcjQuc19hZGRyKSA+PSBudG9obChjLT5zdGFydC5zX2FkZHIpICYmCisJCSAgbnRvaGwoYWRkci0+YWRkci5hZGRyNC5zX2FkZHIpIDw9IG50b2hsKGMtPmVuZC5zX2FkZHIpKQorCQlmb3VuZCA9IDE7CisJICAgIH0KKyNpZmRlZiBIQVZFX0lQVjYKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHU2NCBhZGRycGFydCA9IGFkZHI2cGFydCgmYWRkci0+YWRkci5hZGRyNik7CisJICAgICAgCisJICAgICAgaWYgKGMtPmlzNiAmJgorCQkgIGlzX3NhbWVfbmV0NigmYWRkci0+YWRkci5hZGRyNiwgJmMtPnN0YXJ0NiwgNjQpICYmCisJCSAgYWRkcnBhcnQgPj0gYWRkcjZwYXJ0KCZjLT5zdGFydDYpICYmCisJCSAgYWRkcnBhcnQgPD0gYWRkcjZwYXJ0KCZjLT5lbmQ2KSkKKwkJZm91bmQgPSAxOworCSAgICB9CisjZW5kaWYKKwl9CisgICAgICAKKyAgICAgIC8qIHJlc3RvcmUgbmFtZSAqLworICAgICAgZm9yIChwID0gdGFpbDsgKnA7IHArKykKKwlpZiAoKnAgPT0gJy4nIHx8ICpwID09ICc6JykKKwkgICpwID0gJy0nOworICAgICAgCisgICAgICAqcCA9ICcuJzsKKworICAgICAgaWYgKGZvdW5kKQorCXJldHVybiAxOworICAgIH0KKyAgCisgIHJldHVybiAwOworfQorCisKK2ludCBpc19yZXZfc3ludGgoaW50IGZsYWcsIHN0cnVjdCBhbGxfYWRkciAqYWRkciwgY2hhciAqbmFtZSkKK3sKKyAgIHN0cnVjdCBjb25kX2RvbWFpbiAqYzsKKworICAgaWYgKGZsYWcgJiBGX0lQVjQgJiYgKGMgPSBzZWFyY2hfZG9tYWluKGFkZHItPmFkZHIuYWRkcjQsIGRhZW1vbi0+c3ludGhfZG9tYWlucykpKSAKKyAgICAgeworICAgICAgIGNoYXIgKnA7CisgICAgICAgCisgICAgICAgKm5hbWUgPSAwOworICAgICAgIGlmIChjLT5wcmVmaXgpCisJIHN0cm5jcHkobmFtZSwgYy0+cHJlZml4LCBNQVhETkFNRSAtIEFERFJTVFJMRU4pOworICAgICAgIAorICAgICAgIGluZXRfbnRvcChBRl9JTkVULCAmYWRkci0+YWRkci5hZGRyNCwgbmFtZSArIHN0cmxlbihuYW1lKSwgQUREUlNUUkxFTik7CisgICAgICAgZm9yIChwID0gbmFtZTsgKnA7IHArKykKKwkgaWYgKCpwID09ICcuJykKKwkgICAqcCA9ICctJzsKKworICAgICAgIHN0cm5jYXQobmFtZSwgIi4iLCBNQVhETkFNRSk7CisgICAgICAgc3RybmNhdChuYW1lLCBjLT5kb21haW4sIE1BWEROQU1FKTsKKworICAgICAgIHJldHVybiAxOworICAgICB9CisKKyNpZmRlZiBIQVZFX0lQVjYKKyAgIGlmIChmbGFnICYgRl9JUFY2ICYmIChjID0gc2VhcmNoX2RvbWFpbjYoJmFkZHItPmFkZHIuYWRkcjYsIGRhZW1vbi0+c3ludGhfZG9tYWlucykpKSAKKyAgICAgeworICAgICAgIGNoYXIgKnA7CisgICAgICAgCisgICAgICAgKm5hbWUgPSAwOworICAgICAgIGlmIChjLT5wcmVmaXgpCisJIHN0cm5jcHkobmFtZSwgYy0+cHJlZml4LCBNQVhETkFNRSAtIEFERFJTVFJMRU4pOworICAgICAgIAorICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgJmFkZHItPmFkZHIuYWRkcjYsIG5hbWUgKyBzdHJsZW4obmFtZSksIEFERFJTVFJMRU4pOworCisgICAgICAgLyogSVB2NiBwcmVzZW50YXRpb24gYWRkcmVzcyBjYW4gc3RhcnQgd2l0aCAiOiIsIGJ1dCB2YWxpZCBkb21haW4gbmFtZXMKKwkgIGNhbm5vdCBzdGFydCB3aXRoICItIiBzbyBwcmVwZW5kIGEgemVybyBpbiB0aGF0IGNhc2UuICovCisgICAgICAgaWYgKCFjLT5wcmVmaXggJiYgKm5hbWUgPT0gJzonKQorCSB7CisJICAgKm5hbWUgPSAnMCc7CisJICAgaW5ldF9udG9wKEFGX0lORVQ2LCAmYWRkci0+YWRkci5hZGRyNiwgbmFtZSsxLCBBRERSU1RSTEVOKTsKKwkgfQorCisgICAgICAgZm9yIChwID0gbmFtZTsgKnA7IHArKykKKwkgaWYgKCpwID09ICc6JykKKwkgICAqcCA9ICctJzsKKworICAgICAgIHN0cm5jYXQobmFtZSwgIi4iLCBNQVhETkFNRSk7CisgICAgICAgc3RybmNhdChuYW1lLCBjLT5kb21haW4sIE1BWEROQU1FKTsKKyAgICAgICAKKyAgICAgICByZXR1cm4gMTsKKyAgICAgfQorI2VuZGlmCisgICAKKyAgIHJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgY29uZF9kb21haW4gKnNlYXJjaF9kb21haW4oc3RydWN0IGluX2FkZHIgYWRkciwgc3RydWN0IGNvbmRfZG9tYWluICpjKQoreworICBmb3IgKDsgYzsgYyA9IGMtPm5leHQpCisgICAgaWYgKCFjLT5pczYgJiYKKwludG9obChhZGRyLnNfYWRkcikgPj0gbnRvaGwoYy0+c3RhcnQuc19hZGRyKSAmJgorICAgICAgICBudG9obChhZGRyLnNfYWRkcikgPD0gbnRvaGwoYy0+ZW5kLnNfYWRkcikpCisgICAgICByZXR1cm4gYzsKKworICByZXR1cm4gTlVMTDsKK30KKworY2hhciAqZ2V0X2RvbWFpbihzdHJ1Y3QgaW5fYWRkciBhZGRyKQoreworICBzdHJ1Y3QgY29uZF9kb21haW4gKmM7CisKKyAgaWYgKChjID0gc2VhcmNoX2RvbWFpbihhZGRyLCBkYWVtb24tPmNvbmRfZG9tYWluKSkpCisgICAgcmV0dXJuIGMtPmRvbWFpbjsKKworICByZXR1cm4gZGFlbW9uLT5kb21haW5fc3VmZml4OworfSAKKworI2lmZGVmIEhBVkVfSVBWNgorc3RhdGljIHN0cnVjdCBjb25kX2RvbWFpbiAqc2VhcmNoX2RvbWFpbjYoc3RydWN0IGluNl9hZGRyICphZGRyLCBzdHJ1Y3QgY29uZF9kb21haW4gKmMpCit7CisgIHU2NCBhZGRycGFydCA9IGFkZHI2cGFydChhZGRyKTsKKyAgCisgIGZvciAoOyBjOyBjID0gYy0+bmV4dCkKKyAgICBpZiAoYy0+aXM2ICYmCisJaXNfc2FtZV9uZXQ2KGFkZHIsICZjLT5zdGFydDYsIDY0KSAmJgorCWFkZHJwYXJ0ID49IGFkZHI2cGFydCgmYy0+c3RhcnQ2KSAmJgorICAgICAgICBhZGRycGFydCA8PSBhZGRyNnBhcnQoJmMtPmVuZDYpKQorICAgICAgcmV0dXJuIGM7CisgIAorICByZXR1cm4gTlVMTDsKK30KKworY2hhciAqZ2V0X2RvbWFpbjYoc3RydWN0IGluNl9hZGRyICphZGRyKQoreworICBzdHJ1Y3QgY29uZF9kb21haW4gKmM7CisKKyAgaWYgKGFkZHIgJiYgKGMgPSBzZWFyY2hfZG9tYWluNihhZGRyLCBkYWVtb24tPmNvbmRfZG9tYWluKSkpCisgICAgcmV0dXJuIGMtPmRvbWFpbjsKKworICByZXR1cm4gZGFlbW9uLT5kb21haW5fc3VmZml4OworfSAKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2ZvcndhcmQuYyBiL3NyYy9mb3J3YXJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEzYTY0YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9mb3J3YXJkLmMKQEAgLTAsMCArMSwyMjY3IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE0IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworc3RhdGljIHN0cnVjdCBmcmVjICpsb29rdXBfZnJlYyh1bnNpZ25lZCBzaG9ydCBpZCwgdm9pZCAqaGFzaCk7CitzdGF0aWMgc3RydWN0IGZyZWMgKmxvb2t1cF9mcmVjX2J5X3NlbmRlcih1bnNpZ25lZCBzaG9ydCBpZCwKKwkJCQkJICB1bmlvbiBteXNvY2thZGRyICphZGRyLAorCQkJCQkgIHZvaWQgKmhhc2gpOworc3RhdGljIHVuc2lnbmVkIHNob3J0IGdldF9pZCh2b2lkKTsKK3N0YXRpYyB2b2lkIGZyZWVfZnJlYyhzdHJ1Y3QgZnJlYyAqZik7CisKKyNpZmRlZiBIQVZFX0ROU1NFQworc3RhdGljIGludCB0Y3Bfa2V5X3JlY3Vyc2UodGltZV90IG5vdywgaW50IHN0YXR1cywgc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IG4sIAorCQkJICAgaW50IGNsYXNzLCBjaGFyICpuYW1lLCBjaGFyICprZXluYW1lLCBzdHJ1Y3Qgc2VydmVyICpzZXJ2ZXIsIGludCAqa2V5Y291bnQpOworc3RhdGljIGludCBkb19jaGVja19zaWduKHN0cnVjdCBmcmVjICpmb3J3YXJkLCBpbnQgc3RhdHVzLCB0aW1lX3Qgbm93LCBjaGFyICpuYW1lLCBjaGFyICprZXluYW1lKTsKK3N0YXRpYyBpbnQgc2VuZF9jaGVja19zaWduKHN0cnVjdCBmcmVjICpmb3J3YXJkLCB0aW1lX3Qgbm93LCBzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgCisJCQkgICBjaGFyICpuYW1lLCBjaGFyICprZXluYW1lKTsKKyNlbmRpZgorCisKKy8qIFNlbmQgYSBVRFAgcGFja2V0IHdpdGggaXRzIHNvdXJjZSBhZGRyZXNzIHNldCBhcyAic291cmNlIiAKKyAgIHVubGVzcyBub3dpbGQgaXMgdHJ1ZSwgd2hlbiB3ZSBqdXN0IHNlbmQgaXQgd2l0aCB0aGUga2VybmVsIGRlZmF1bHQgKi8KK2ludCBzZW5kX2Zyb20oaW50IGZkLCBpbnQgbm93aWxkLCBjaGFyICpwYWNrZXQsIHNpemVfdCBsZW4sIAorCSAgICAgIHVuaW9uIG15c29ja2FkZHIgKnRvLCBzdHJ1Y3QgYWxsX2FkZHIgKnNvdXJjZSwKKwkgICAgICB1bnNpZ25lZCBpbnQgaWZhY2UpCit7CisgIHN0cnVjdCBtc2doZHIgbXNnOworICBzdHJ1Y3QgaW92ZWMgaW92WzFdOyAKKyAgdW5pb24geworICAgIHN0cnVjdCBjbXNnaGRyIGFsaWduOyAvKiB0aGlzIGVuc3VyZXMgYWxpZ25tZW50ICovCisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX05FVFdPUkspCisgICAgY2hhciBjb250cm9sW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpbl9wa3RpbmZvKSldOworI2VsaWYgZGVmaW5lZChJUF9TRU5EU1JDQUREUikKKyAgICBjaGFyIGNvbnRyb2xbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IGluX2FkZHIpKV07CisjZW5kaWYKKyNpZmRlZiBIQVZFX0lQVjYKKyAgICBjaGFyIGNvbnRyb2w2W0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpbjZfcGt0aW5mbykpXTsKKyNlbmRpZgorICB9IGNvbnRyb2xfdTsKKyAgCisgIGlvdlswXS5pb3ZfYmFzZSA9IHBhY2tldDsKKyAgaW92WzBdLmlvdl9sZW4gPSBsZW47CisKKyAgbXNnLm1zZ19jb250cm9sID0gTlVMTDsKKyAgbXNnLm1zZ19jb250cm9sbGVuID0gMDsKKyAgbXNnLm1zZ19mbGFncyA9IDA7CisgIG1zZy5tc2dfbmFtZSA9IHRvOworICBtc2cubXNnX25hbWVsZW4gPSBzYV9sZW4odG8pOworICBtc2cubXNnX2lvdiA9IGlvdjsKKyAgbXNnLm1zZ19pb3ZsZW4gPSAxOworICAKKyAgaWYgKCFub3dpbGQpCisgICAgeworICAgICAgc3RydWN0IGNtc2doZHIgKmNtcHRyOworICAgICAgbXNnLm1zZ19jb250cm9sID0gJmNvbnRyb2xfdTsKKyAgICAgIG1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjb250cm9sX3UpOworICAgICAgY21wdHIgPSBDTVNHX0ZJUlNUSERSKCZtc2cpOworCisgICAgICBpZiAodG8tPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorCXsKKyNpZiBkZWZpbmVkKEhBVkVfTElOVVhfTkVUV09SSykKKwkgIHN0cnVjdCBpbl9wa3RpbmZvIHA7CisJICBwLmlwaV9pZmluZGV4ID0gMDsKKwkgIHAuaXBpX3NwZWNfZHN0ID0gc291cmNlLT5hZGRyLmFkZHI0OworCSAgbWVtY3B5KENNU0dfREFUQShjbXB0ciksICZwLCBzaXplb2YocCkpOworCSAgbXNnLm1zZ19jb250cm9sbGVuID0gY21wdHItPmNtc2dfbGVuID0gQ01TR19MRU4oc2l6ZW9mKHN0cnVjdCBpbl9wa3RpbmZvKSk7CisJICBjbXB0ci0+Y21zZ19sZXZlbCA9IElQUFJPVE9fSVA7CisJICBjbXB0ci0+Y21zZ190eXBlID0gSVBfUEtUSU5GTzsKKyNlbGlmIGRlZmluZWQoSVBfU0VORFNSQ0FERFIpCisJICBtZW1jcHkoQ01TR19EQVRBKGNtcHRyKSwgJihzb3VyY2UtPmFkZHIuYWRkcjQpLCBzaXplb2Yoc291cmNlLT5hZGRyLmFkZHI0KSk7CisJICBtc2cubXNnX2NvbnRyb2xsZW4gPSBjbXB0ci0+Y21zZ19sZW4gPSBDTVNHX0xFTihzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKKwkgIGNtcHRyLT5jbXNnX2xldmVsID0gSVBQUk9UT19JUDsKKwkgIGNtcHRyLT5jbXNnX3R5cGUgPSBJUF9TRU5EU1JDQUREUjsKKyNlbmRpZgorCX0KKyAgICAgIGVsc2UKKyNpZmRlZiBIQVZFX0lQVjYKKwl7CisJICBzdHJ1Y3QgaW42X3BrdGluZm8gcDsKKwkgIHAuaXBpNl9pZmluZGV4ID0gaWZhY2U7IC8qIE5lZWQgaWZhY2UgZm9yIElQdjYgdG8gaGFuZGxlIGxpbmstbG9jYWwgYWRkcnMgKi8KKwkgIHAuaXBpNl9hZGRyID0gc291cmNlLT5hZGRyLmFkZHI2OworCSAgbWVtY3B5KENNU0dfREFUQShjbXB0ciksICZwLCBzaXplb2YocCkpOworCSAgbXNnLm1zZ19jb250cm9sbGVuID0gY21wdHItPmNtc2dfbGVuID0gQ01TR19MRU4oc2l6ZW9mKHN0cnVjdCBpbjZfcGt0aW5mbykpOworCSAgY21wdHItPmNtc2dfdHlwZSA9IGRhZW1vbi0+djZwa3RpbmZvOworCSAgY21wdHItPmNtc2dfbGV2ZWwgPSBJUFBST1RPX0lQVjY7CisJfQorI2Vsc2UKKyAgICAgICh2b2lkKWlmYWNlOyAvKiBlbGltaW5hdGUgd2FybmluZyAqLworI2VuZGlmCisgICAgfQorICAKKyAgd2hpbGUgKHNlbmRtc2coZmQsICZtc2csIDApID09IC0xKQorICAgIHsKKyAgICAgIGlmIChyZXRyeV9zZW5kKCkpCisJY29udGludWU7CisgICAgICAKKyAgICAgIC8qIElmIGludGVyZmFjZSBpcyBzdGlsbCBpbiBEQUQsIEVJTlZBTCByZXN1bHRzIC0gaWdub3JlIHRoYXQuICovCisgICAgICBpZiAoZXJybm8gPT0gRUlOVkFMKQorCWJyZWFrOworICAgICAgCisgICAgICBteV9zeXNsb2coTE9HX0VSUiwgXygiZmFpbGVkIHRvIHNlbmQgcGFja2V0OiAlcyIpLCBzdHJlcnJvcihlcnJubykpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAKKyAgcmV0dXJuIDE7Cit9CisgICAgICAgICAgCitzdGF0aWMgdW5zaWduZWQgaW50IHNlYXJjaF9zZXJ2ZXJzKHRpbWVfdCBub3csIHN0cnVjdCBhbGxfYWRkciAqKmFkZHJwcCwgCisJCQkJICAgICB1bnNpZ25lZCBpbnQgcXR5cGUsIGNoYXIgKnFkb21haW4sIGludCAqdHlwZSwgY2hhciAqKmRvbWFpbiwgaW50ICpub3JlYmluZCkKKwkJCSAgICAgIAoreworICAvKiBJZiB0aGUgcXVlcnkgZW5kcyBpbiB0aGUgZG9tYWluIGluIG9uZSBvZiBvdXIgc2VydmVycywgc2V0CisgICAgIGRvbWFpbiB0byBwb2ludCB0byB0aGF0IG5hbWUuIFdlIGZpbmQgdGhlIGxhcmdlc3QgbWF0Y2ggdG8gYWxsb3cgYm90aAorICAgICBkb21haW4ub3JnIGFuZCBzdWIuZG9tYWluLm9yZyB0byBleGlzdC4gKi8KKyAgCisgIHVuc2lnbmVkIGludCBuYW1lbGVuID0gc3RybGVuKHFkb21haW4pOworICB1bnNpZ25lZCBpbnQgbWF0Y2hsZW4gPSAwOworICBzdHJ1Y3Qgc2VydmVyICpzZXJ2OworICB1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOworICAKKyAgZm9yIChzZXJ2ID0gZGFlbW9uLT5zZXJ2ZXJzOyBzZXJ2OyBzZXJ2PXNlcnYtPm5leHQpCisgICAgLyogZG9tYWluIG1hdGNoZXMgdGFrZSBwcmlvcml0eSBvdmVyIE5PRE9UUyBtYXRjaGVzICovCisgICAgaWYgKChzZXJ2LT5mbGFncyAmIFNFUlZfRk9SX05PRE9UUykgJiYgKnR5cGUgIT0gU0VSVl9IQVNfRE9NQUlOICYmICFzdHJjaHIocWRvbWFpbiwgJy4nKSAmJiBuYW1lbGVuICE9IDApCisgICAgICB7CisJdW5zaWduZWQgaW50IHNmbGFnID0gc2Vydi0+YWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCA/IEZfSVBWNCA6IEZfSVBWNjsgCisJKnR5cGUgPSBTRVJWX0ZPUl9OT0RPVFM7CisJaWYgKHNlcnYtPmZsYWdzICYgU0VSVl9OT19BRERSKQorCSAgZmxhZ3MgPSBGX05YRE9NQUlOOworCWVsc2UgaWYgKHNlcnYtPmZsYWdzICYgU0VSVl9MSVRFUkFMX0FERFJFU1MpIAorCSAgeyAKKwkgICAgaWYgKHNmbGFnICYgcXR5cGUpCisJICAgICAgeworCQlmbGFncyA9IHNmbGFnOworCQlpZiAoc2Vydi0+YWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgCisJCSAgKmFkZHJwcCA9IChzdHJ1Y3QgYWxsX2FkZHIgKikmc2Vydi0+YWRkci5pbi5zaW5fYWRkcjsKKyNpZmRlZiBIQVZFX0lQVjYKKwkJZWxzZQorCQkgICphZGRycHAgPSAoc3RydWN0IGFsbF9hZGRyICopJnNlcnYtPmFkZHIuaW42LnNpbjZfYWRkcjsKKyNlbmRpZiAKKwkgICAgICB9CisJICAgIGVsc2UgaWYgKCFmbGFncyB8fCAoZmxhZ3MgJiBGX05YRE9NQUlOKSkKKwkgICAgICBmbGFncyA9IEZfTk9FUlI7CisJICB9IAorICAgICAgfQorICAgIGVsc2UgaWYgKHNlcnYtPmZsYWdzICYgU0VSVl9IQVNfRE9NQUlOKQorICAgICAgeworCXVuc2lnbmVkIGludCBkb21haW5sZW4gPSBzdHJsZW4oc2Vydi0+ZG9tYWluKTsKKwljaGFyICptYXRjaHN0YXJ0ID0gcWRvbWFpbiArIG5hbWVsZW4gLSBkb21haW5sZW47CisJaWYgKG5hbWVsZW4gPj0gZG9tYWlubGVuICYmCisJICAgIGhvc3RuYW1lX2lzZXF1YWwobWF0Y2hzdGFydCwgc2Vydi0+ZG9tYWluKSAmJgorCSAgICAoZG9tYWlubGVuID09IDAgfHwgbmFtZWxlbiA9PSBkb21haW5sZW4gfHwgKihtYXRjaHN0YXJ0LTEpID09ICcuJyApKQorCSAgeworCSAgICBpZiAoc2Vydi0+ZmxhZ3MgJiBTRVJWX05PX1JFQklORCkJCisJICAgICAgKm5vcmViaW5kID0gMTsKKwkgICAgZWxzZQorCSAgICAgIHsKKwkJdW5zaWduZWQgaW50IHNmbGFnID0gc2Vydi0+YWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCA/IEZfSVBWNCA6IEZfSVBWNjsKKwkJLyogaW1wbGVtZW50IHByaW9yaXR5IHJ1bGVzIGZvciAtLWFkZHJlc3MgYW5kIC0tc2VydmVyIGZvciBzYW1lIGRvbWFpbi4KKwkJICAgLS1hZGRyZXNzIHdpbnMgaWYgdGhlIGFkZHJlc3MgaXMgZm9yIHRoZSBjb3JyZWN0IEFGCisJCSAgIC0tc2VydmVyIHdpbnMgb3RoZXJ3aXNlLiAqLworCQlpZiAoZG9tYWlubGVuICE9IDAgJiYgZG9tYWlubGVuID09IG1hdGNobGVuKQorCQkgIHsKKwkJICAgIGlmICgoc2Vydi0+ZmxhZ3MgJiBTRVJWX0xJVEVSQUxfQUREUkVTUykpCisJCSAgICAgIHsKKwkJCWlmICghKHNmbGFnICYgcXR5cGUpICYmIGZsYWdzID09IDApCisJCQkgIGNvbnRpbnVlOworCQkgICAgICB9CisJCSAgICBlbHNlCisJCSAgICAgIHsKKwkJCWlmIChmbGFncyAmIChGX0lQVjQgfCBGX0lQVjYpKQorCQkJICBjb250aW51ZTsKKwkJICAgICAgfQorCQkgIH0KKwkJCisJCWlmIChkb21haW5sZW4gPj0gbWF0Y2hsZW4pCisJCSAgeworCQkgICAgKnR5cGUgPSBzZXJ2LT5mbGFncyAmIChTRVJWX0hBU19ET01BSU4gfCBTRVJWX1VTRV9SRVNPTFYgfCBTRVJWX05PX1JFQklORCk7CisJCSAgICAqZG9tYWluID0gc2Vydi0+ZG9tYWluOworCQkgICAgbWF0Y2hsZW4gPSBkb21haW5sZW47CisJCSAgICBpZiAoc2Vydi0+ZmxhZ3MgJiBTRVJWX05PX0FERFIpCisJCSAgICAgIGZsYWdzID0gRl9OWERPTUFJTjsKKwkJICAgIGVsc2UgaWYgKHNlcnYtPmZsYWdzICYgU0VSVl9MSVRFUkFMX0FERFJFU1MpCisJCSAgICAgIHsKKwkJCWlmIChzZmxhZyAmIHF0eXBlKQorCQkJICB7CisJCQkgICAgZmxhZ3MgPSBzZmxhZzsKKwkJCSAgICBpZiAoc2Vydi0+YWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgCisJCQkgICAgICAqYWRkcnBwID0gKHN0cnVjdCBhbGxfYWRkciAqKSZzZXJ2LT5hZGRyLmluLnNpbl9hZGRyOworI2lmZGVmIEhBVkVfSVBWNgorCQkJICAgIGVsc2UKKwkJCSAgICAgICphZGRycHAgPSAoc3RydWN0IGFsbF9hZGRyICopJnNlcnYtPmFkZHIuaW42LnNpbjZfYWRkcjsKKyNlbmRpZgorCQkJICB9CisJCQllbHNlIGlmICghZmxhZ3MgfHwgKGZsYWdzICYgRl9OWERPTUFJTikpCisJCQkgIGZsYWdzID0gRl9OT0VSUjsKKwkJICAgICAgfQorCQkgICAgZWxzZQorCQkgICAgICBmbGFncyA9IDA7CisJCSAgfSAKKwkgICAgICB9CisJICB9CisgICAgICB9CisgIAorICBpZiAoZmxhZ3MgPT0gMCAmJiAhKHF0eXBlICYgRl9RVUVSWSkgJiYgCisgICAgICBvcHRpb25fYm9vbChPUFRfTk9ET1RTX0xPQ0FMKSAmJiAhc3RyY2hyKHFkb21haW4sICcuJykgJiYgbmFtZWxlbiAhPSAwKQorICAgIC8qIGRvbid0IGZvcndhcmQgQSBvciBBQUFBIHF1ZXJpZXMgZm9yIHNpbXBsZSBuYW1lcywgZXhjZXB0IHRoZSBlbXB0eSBuYW1lICovCisgICAgZmxhZ3MgPSBGX05PRVJSOworICAKKyAgaWYgKGZsYWdzID09IEZfTlhET01BSU4gJiYgY2hlY2tfZm9yX2xvY2FsX2RvbWFpbihxZG9tYWluLCBub3cpKQorICAgIGZsYWdzID0gRl9OT0VSUjsKKworICBpZiAoZmxhZ3MpCisgICAgeworICAgICAgaW50IGxvZ2ZsYWdzID0gMDsKKyAgICAgIAorICAgICAgaWYgKGZsYWdzID09IEZfTlhET01BSU4gfHwgZmxhZ3MgPT0gRl9OT0VSUikKKwlsb2dmbGFncyA9IEZfTkVHIHwgcXR5cGU7CisgIAorICAgICAgbG9nX3F1ZXJ5KGxvZ2ZsYWdzIHwgZmxhZ3MgfCBGX0NPTkZJRyB8IEZfRk9SV0FSRCwgcWRvbWFpbiwgKmFkZHJwcCwgTlVMTCk7CisgICAgfQorICBlbHNlIGlmICgoKnR5cGUpICYgU0VSVl9VU0VfUkVTT0xWKQorICAgIHsKKyAgICAgICp0eXBlID0gMDsgLyogdXNlIG5vcm1hbCBzZXJ2ZXJzIGZvciB0aGlzIGRvbWFpbiAqLworICAgICAgKmRvbWFpbiA9IE5VTEw7CisgICAgfQorICByZXR1cm4gIGZsYWdzOworfQorCitzdGF0aWMgaW50IGZvcndhcmRfcXVlcnkoaW50IHVkcGZkLCB1bmlvbiBteXNvY2thZGRyICp1ZHBhZGRyLAorCQkJIHN0cnVjdCBhbGxfYWRkciAqZHN0X2FkZHIsIHVuc2lnbmVkIGludCBkc3RfaWZhY2UsCisJCQkgc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIHRpbWVfdCBub3csIAorCQkJIHN0cnVjdCBmcmVjICpmb3J3YXJkLCBpbnQgYWRfcmVxZCwgaW50IGRvX2JpdCkKK3sKKyAgY2hhciAqZG9tYWluID0gTlVMTDsKKyAgaW50IHR5cGUgPSAwLCBub3JlYmluZCA9IDA7CisgIHN0cnVjdCBhbGxfYWRkciAqYWRkcnAgPSBOVUxMOworICB1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOworICBzdHJ1Y3Qgc2VydmVyICpzdGFydCA9IE5VTEw7CisjaWZkZWYgSEFWRV9ETlNTRUMKKyAgdm9pZCAqaGFzaCA9IGhhc2hfcXVlc3Rpb25zKGhlYWRlciwgcGxlbiwgZGFlbW9uLT5uYW1lYnVmZik7CisjZWxzZQorICB1bnNpZ25lZCBpbnQgY3JjID0gcXVlc3Rpb25zX2NyYyhoZWFkZXIsIHBsZW4sIGRhZW1vbi0+bmFtZWJ1ZmYpOworICB2b2lkICpoYXNoID0gJmNyYzsKKyNlbmRpZgorIHVuc2lnbmVkIGludCBnb3RuYW1lID0gZXh0cmFjdF9yZXF1ZXN0KGhlYWRlciwgcGxlbiwgZGFlbW9uLT5uYW1lYnVmZiwgTlVMTCk7CisKKyAodm9pZClkb19iaXQ7CisKKyAgLyogbWF5IGJlIG5vIHNlcnZlcnMgYXZhaWxhYmxlLiAqLworICBpZiAoIWRhZW1vbi0+c2VydmVycykKKyAgICBmb3J3YXJkID0gTlVMTDsKKyAgZWxzZSBpZiAoZm9yd2FyZCB8fCAoaGFzaCAmJiAoZm9yd2FyZCA9IGxvb2t1cF9mcmVjX2J5X3NlbmRlcihudG9ocyhoZWFkZXItPmlkKSwgdWRwYWRkciwgaGFzaCkpKSkKKyAgICB7CisjaWZkZWYgSEFWRV9ETlNTRUMKKyAgICAgIC8qIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGFuc3dlciB0byB0aGlzIHF1ZXJ5LCBidXQgd2UncmUgYXdhaXRpbmcga2V5cyBmb3IgdmFsaWRhdGlvbiwKKwkgdGhlcmUncyBubyBwb2ludCByZXRyeWluZyB0aGUgcXVlcnksIHJldHJ5IHRoZSBrZXkgcXVlcnkgaW5zdGVhZC4uLi4uLiAqLworICAgICAgaWYgKGZvcndhcmQtPmJsb2NraW5nX3F1ZXJ5KQorCXsKKwkgIGludCBmZDsKKworCSAgd2hpbGUgKGZvcndhcmQtPmJsb2NraW5nX3F1ZXJ5KQorCSAgICBmb3J3YXJkID0gZm9yd2FyZC0+YmxvY2tpbmdfcXVlcnk7CisJICAKKwkgIGJsb2NrZGF0YV9yZXRyaWV2ZShmb3J3YXJkLT5zdGFzaCwgZm9yd2FyZC0+c3Rhc2hfbGVuLCAodm9pZCAqKWhlYWRlcik7CisJICBwbGVuID0gZm9yd2FyZC0+c3Rhc2hfbGVuOworCSAgCisJICBpZiAoZm9yd2FyZC0+c2VudHRvLT5hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSAKKwkgICAgbG9nX3F1ZXJ5KEZfTk9FWFRSQSB8IEZfRE5TU0VDIHwgRl9JUFY0LCAicmV0cnkiLCAoc3RydWN0IGFsbF9hZGRyICopJmZvcndhcmQtPnNlbnR0by0+YWRkci5pbi5zaW5fYWRkciwgImRuc3NlYyIpOworI2lmZGVmIEhBVkVfSVBWNgorCSAgZWxzZQorCSAgICBsb2dfcXVlcnkoRl9OT0VYVFJBIHwgRl9ETlNTRUMgfCBGX0lQVjYsICJyZXRyeSIsIChzdHJ1Y3QgYWxsX2FkZHIgKikmZm9yd2FyZC0+c2VudHRvLT5hZGRyLmluNi5zaW42X2FkZHIsICJkbnNzZWMiKTsKKyNlbmRpZgorICAKKwkgIGlmIChmb3J3YXJkLT5zZW50dG8tPnNmZCkKKwkgICAgZmQgPSBmb3J3YXJkLT5zZW50dG8tPnNmZC0+ZmQ7CisJICBlbHNlCisJICAgIHsKKyNpZmRlZiBIQVZFX0lQVjYKKwkgICAgICBpZiAoZm9yd2FyZC0+c2VudHRvLT5hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKKwkJZmQgPSBmb3J3YXJkLT5yZmQ2LT5mZDsKKwkgICAgICBlbHNlCisjZW5kaWYKKwkJZmQgPSBmb3J3YXJkLT5yZmQ0LT5mZDsKKwkgICAgfQorCSAgCisJICB3aGlsZSAoc2VuZHRvKGZkLCAoY2hhciAqKWhlYWRlciwgcGxlbiwgMCwKKwkJCSZmb3J3YXJkLT5zZW50dG8tPmFkZHIuc2EsCisJCQlzYV9sZW4oJmZvcndhcmQtPnNlbnR0by0+YWRkcikpID09IC0xICYmIHJldHJ5X3NlbmQoKSk7CisJICAKKwkgIHJldHVybiAxOworCX0KKyNlbmRpZgorCisgICAgICAvKiByZXRyeSBvbiBleGlzdGluZyBxdWVyeSwgc2VuZCB0byBhbGwgYXZhaWxhYmxlIHNlcnZlcnMgICovCisgICAgICBkb21haW4gPSBmb3J3YXJkLT5zZW50dG8tPmRvbWFpbjsKKyAgICAgIGZvcndhcmQtPnNlbnR0by0+ZmFpbGVkX3F1ZXJpZXMrKzsKKyAgICAgIGlmICghb3B0aW9uX2Jvb2woT1BUX09SREVSKSkKKwl7CisJICBmb3J3YXJkLT5mb3J3YXJkYWxsID0gMTsKKwkgIGRhZW1vbi0+bGFzdF9zZXJ2ZXIgPSBOVUxMOworCX0KKyAgICAgIHR5cGUgPSBmb3J3YXJkLT5zZW50dG8tPmZsYWdzICYgU0VSVl9UWVBFOworICAgICAgaWYgKCEoc3RhcnQgPSBmb3J3YXJkLT5zZW50dG8tPm5leHQpKQorCXN0YXJ0ID0gZGFlbW9uLT5zZXJ2ZXJzOyAvKiBhdCBlbmQgb2YgbGlzdCwgcmVjeWNsZSAqLworICAgICAgaGVhZGVyLT5pZCA9IGh0b25zKGZvcndhcmQtPm5ld19pZCk7CisgICAgfQorICBlbHNlIAorICAgIHsKKyAgICAgIGlmIChnb3RuYW1lKQorCWZsYWdzID0gc2VhcmNoX3NlcnZlcnMobm93LCAmYWRkcnAsIGdvdG5hbWUsIGRhZW1vbi0+bmFtZWJ1ZmYsICZ0eXBlLCAmZG9tYWluLCAmbm9yZWJpbmQpOworICAgICAgCisgICAgICBpZiAoIWZsYWdzICYmICEoZm9yd2FyZCA9IGdldF9uZXdfZnJlYyhub3csIE5VTEwsIDApKSkKKwkvKiB0YWJsZSBmdWxsIC0gc2VydmVyIGZhaWx1cmUuICovCisJZmxhZ3MgPSBGX05FRzsKKyAgICAgIAorICAgICAgaWYgKGZvcndhcmQpCisJeworCSAgZm9yd2FyZC0+c291cmNlID0gKnVkcGFkZHI7CisJICBmb3J3YXJkLT5kZXN0ID0gKmRzdF9hZGRyOworCSAgZm9yd2FyZC0+aWZhY2UgPSBkc3RfaWZhY2U7CisJICBmb3J3YXJkLT5vcmlnX2lkID0gbnRvaHMoaGVhZGVyLT5pZCk7CisJICBmb3J3YXJkLT5uZXdfaWQgPSBnZXRfaWQoKTsKKwkgIGZvcndhcmQtPmZkID0gdWRwZmQ7CisJICBtZW1jcHkoZm9yd2FyZC0+aGFzaCwgaGFzaCwgSEFTSF9TSVpFKTsKKwkgIGZvcndhcmQtPmZvcndhcmRhbGwgPSAwOworCSAgZm9yd2FyZC0+ZmxhZ3MgPSAwOworCSAgaWYgKG5vcmViaW5kKQorCSAgICBmb3J3YXJkLT5mbGFncyB8PSBGUkVDX05PUkVCSU5EOworCSAgaWYgKGhlYWRlci0+aGI0ICYgSEI0X0NEKQorCSAgICBmb3J3YXJkLT5mbGFncyB8PSBGUkVDX0NIRUNLSU5HX0RJU0FCTEVEOworCSAgaWYgKGFkX3JlcWQpCisJICAgIGZvcndhcmQtPmZsYWdzIHw9IEZSRUNfQURfUVVFU1RJT047CisjaWZkZWYgSEFWRV9ETlNTRUMKKwkgIGZvcndhcmQtPndvcmtfY291bnRlciA9IEROU1NFQ19XT1JLOworCSAgaWYgKGRvX2JpdCkKKwkgICAgZm9yd2FyZC0+ZmxhZ3MgfD0gRlJFQ19ET19RVUVTVElPTjsKKyNlbmRpZgorCSAgCisJICBoZWFkZXItPmlkID0gaHRvbnMoZm9yd2FyZC0+bmV3X2lkKTsKKwkgIAorCSAgLyogSW4gc3RyaWN0X29yZGVyIG1vZGUsIGFsd2F5cyB0cnkgc2VydmVycyBpbiB0aGUgb3JkZXIgCisJICAgICBzcGVjaWZpZWQgaW4gcmVzb2x2LmNvbmYsIGlmIGEgZG9tYWluIGlzIGdpdmVuIAorCSAgICAgYWx3YXlzIHRyeSBhbGwgdGhlIGF2YWlsYWJsZSBzZXJ2ZXJzLAorCSAgICAgb3RoZXJ3aXNlLCB1c2UgdGhlIG9uZSBsYXN0IGtub3duIHRvIHdvcmsuICovCisJICAKKwkgIGlmICh0eXBlID09IDApCisJICAgIHsKKwkgICAgICBpZiAob3B0aW9uX2Jvb2woT1BUX09SREVSKSkKKwkJc3RhcnQgPSBkYWVtb24tPnNlcnZlcnM7CisJICAgICAgZWxzZSBpZiAoIShzdGFydCA9IGRhZW1vbi0+bGFzdF9zZXJ2ZXIpIHx8CisJCSAgICAgICBkYWVtb24tPmZvcndhcmRjb3VudCsrID4gRk9SV0FSRF9URVNUIHx8CisJCSAgICAgICBkaWZmdGltZShub3csIGRhZW1vbi0+Zm9yd2FyZHRpbWUpID4gRk9SV0FSRF9USU1FKQorCQl7CisJCSAgc3RhcnQgPSBkYWVtb24tPnNlcnZlcnM7CisJCSAgZm9yd2FyZC0+Zm9yd2FyZGFsbCA9IDE7CisJCSAgZGFlbW9uLT5mb3J3YXJkY291bnQgPSAwOworCQkgIGRhZW1vbi0+Zm9yd2FyZHRpbWUgPSBub3c7CisJCX0KKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgc3RhcnQgPSBkYWVtb24tPnNlcnZlcnM7CisJICAgICAgaWYgKCFvcHRpb25fYm9vbChPUFRfT1JERVIpKQorCQlmb3J3YXJkLT5mb3J3YXJkYWxsID0gMTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgLyogY2hlY2sgZm9yIHNlbmQgZXJyb3JzIGhlcmUgKG5vIHJvdXRlIHRvIGhvc3QpIAorICAgICBpZiB3ZSBmYWlsIHRvIHNlbmQgdG8gYWxsIG5hbWVzZXJ2ZXJzLCBzZW5kIGJhY2sgYW4gZXJyb3IKKyAgICAgcGFja2V0IHN0cmFpZ2h0IGF3YXkgKGhlbHBzIG1vZGVtIHVzZXJzIHdoZW4gb2ZmbGluZSkgICovCisgIAorICBpZiAoIWZsYWdzICYmIGZvcndhcmQpCisgICAgeworICAgICAgc3RydWN0IHNlcnZlciAqZmlyc3RzZW50dG8gPSBzdGFydDsKKyAgICAgIGludCBmb3J3YXJkZWQgPSAwOworICAgICAgCisgICAgICAvKiBJZiBhIHF1ZXJ5IGlzIHJldHJpZWQsIHVzZSB0aGUgbG9nX2lkIGZvciB0aGUgcmV0cnkgd2hlbiBsb2dnaW5nIHRoZSBhbnN3ZXIuICovCisgICAgICBmb3J3YXJkLT5sb2dfaWQgPSBkYWVtb24tPmxvZ19pZDsKKyAgICAgIAorICAgICAgaWYgKG9wdGlvbl9ib29sKE9QVF9BRERfTUFDKSkKKwlwbGVuID0gYWRkX21hYyhoZWFkZXIsIHBsZW4sICgoY2hhciAqKSBoZWFkZXIpICsgZGFlbW9uLT5wYWNrZXRfYnVmZl9zeiwgJmZvcndhcmQtPnNvdXJjZSk7CisgICAgICAKKyAgICAgIGlmIChvcHRpb25fYm9vbChPUFRfQ0xJRU5UX1NVQk5FVCkpCisJeworCSAgc2l6ZV90IG5ldyA9IGFkZF9zb3VyY2VfYWRkcihoZWFkZXIsIHBsZW4sICgoY2hhciAqKSBoZWFkZXIpICsgZGFlbW9uLT5wYWNrZXRfYnVmZl9zeiwgJmZvcndhcmQtPnNvdXJjZSk7IAorCSAgaWYgKG5ldyAhPSBwbGVuKQorCSAgICB7CisJICAgICAgcGxlbiA9IG5ldzsKKwkgICAgICBmb3J3YXJkLT5mbGFncyB8PSBGUkVDX0hBU19TVUJORVQ7CisJICAgIH0KKwl9CisKKyNpZmRlZiBIQVZFX0ROU1NFQworICAgICAgaWYgKG9wdGlvbl9ib29sKE9QVF9ETlNTRUNfVkFMSUQpKQorCXsKKwkgIHNpemVfdCBuZXdfcGxlbiA9IGFkZF9kb19iaXQoaGVhZGVyLCBwbGVuLCAoKGNoYXIgKikgaGVhZGVyKSArIGRhZW1vbi0+cGFja2V0X2J1ZmZfc3opOworCSAKKwkgIC8qIEZvciBkZWJ1Z2dpbmcsIHNldCBDaGVja2luZyBEaXNhYmxlZCwgb3RoZXJ3aXNlLCBoYXZlIHRoZSB1cHN0cmVhbSBjaGVjayB0b28sCisJICAgICB0aGlzIGFsbG93cyBpdCB0byBzZWxlY3QgYXV0aCBzZXJ2ZXJzIHdoZW4gb25lIGlzIHJldHVybmluZyBiYWQgZGF0YS4gKi8KKwkgIGlmIChvcHRpb25fYm9vbChPUFRfRE5TU0VDX0RFQlVHKSkKKwkgICAgaGVhZGVyLT5oYjQgfD0gSEI0X0NEOworCisJICBpZiAobmV3X3BsZW4gIT0gcGxlbikKKwkgICAgZm9yd2FyZC0+ZmxhZ3MgfD0gRlJFQ19BRERFRF9QSEVBREVSOworCisJICBwbGVuID0gbmV3X3BsZW47CisJfQorI2VuZGlmCisKKyAgICAgIHdoaWxlICgxKQorCXsgCisJICAvKiBvbmx5IHNlbmQgdG8gc2VydmVycyBkZWFsaW5nIHdpdGggb3VyIGRvbWFpbi4KKwkgICAgIGRvbWFpbiBtYXkgYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSBzZXJ2ZXItPmRvbWFpbiAKKwkgICAgIG11c3QgYmUgTlVMTCBhbHNvLiAqLworCSAgCisJICBpZiAodHlwZSA9PSAoc3RhcnQtPmZsYWdzICYgU0VSVl9UWVBFKSAmJgorCSAgICAgICh0eXBlICE9IFNFUlZfSEFTX0RPTUFJTiB8fCBob3N0bmFtZV9pc2VxdWFsKGRvbWFpbiwgc3RhcnQtPmRvbWFpbikpICYmCisJICAgICAgIShzdGFydC0+ZmxhZ3MgJiAoU0VSVl9MSVRFUkFMX0FERFJFU1MgfCBTRVJWX0xPT1ApKSkKKwkgICAgeworCSAgICAgIGludCBmZDsKKworCSAgICAgIC8qIGZpbmQgc2VydmVyIHNvY2tldCB0byB1c2UsIG1heSBuZWVkIHRvIGdldCByYW5kb20gb25lLiAqLworCSAgICAgIGlmIChzdGFydC0+c2ZkKQorCQlmZCA9IHN0YXJ0LT5zZmQtPmZkOworCSAgICAgIGVsc2UgCisJCXsKKyNpZmRlZiBIQVZFX0lQVjYKKwkJICBpZiAoc3RhcnQtPmFkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KQorCQkgICAgeworCQkgICAgICBpZiAoIWZvcndhcmQtPnJmZDYgJiYKKwkJCSAgIShmb3J3YXJkLT5yZmQ2ID0gYWxsb2NhdGVfcmZkKEFGX0lORVQ2KSkpCisJCQlicmVhazsKKwkJICAgICAgZGFlbW9uLT5yZmRfc2F2ZSA9IGZvcndhcmQtPnJmZDY7CisJCSAgICAgIGZkID0gZm9yd2FyZC0+cmZkNi0+ZmQ7CisJCSAgICB9CisJCSAgZWxzZQorI2VuZGlmCisJCSAgICB7CisJCSAgICAgIGlmICghZm9yd2FyZC0+cmZkNCAmJgorCQkJICAhKGZvcndhcmQtPnJmZDQgPSBhbGxvY2F0ZV9yZmQoQUZfSU5FVCkpKQorCQkJYnJlYWs7CisJCSAgICAgIGRhZW1vbi0+cmZkX3NhdmUgPSBmb3J3YXJkLT5yZmQ0OworCQkgICAgICBmZCA9IGZvcndhcmQtPnJmZDQtPmZkOworCQkgICAgfQorCisjaWZkZWYgSEFWRV9DT05OVFJBQ0sKKwkJICAvKiBDb3B5IGNvbm5lY3Rpb24gbWFyayBvZiBpbmNvbWluZyBxdWVyeSB0byBvdXRnb2luZyBjb25uZWN0aW9uLiAqLworCQkgIGlmIChvcHRpb25fYm9vbChPUFRfQ09OTlRSQUNLKSkKKwkJICAgIHsKKwkJICAgICAgdW5zaWduZWQgaW50IG1hcms7CisJCSAgICAgIGlmIChnZXRfaW5jb21pbmdfbWFyaygmZm9yd2FyZC0+c291cmNlLCAmZm9yd2FyZC0+ZGVzdCwgMCwgJm1hcmspKQorCQkJc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fTUFSSywgJm1hcmssIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKKwkJICAgIH0KKyNlbmRpZgorCQl9CisJICAgICAgCisJICAgICAgaWYgKHNlbmR0byhmZCwgKGNoYXIgKiloZWFkZXIsIHBsZW4sIDAsCisJCQkgJnN0YXJ0LT5hZGRyLnNhLAorCQkJIHNhX2xlbigmc3RhcnQtPmFkZHIpKSA9PSAtMSkKKwkJeworCQkgIGlmIChyZXRyeV9zZW5kKCkpCisJCSAgICBjb250aW51ZTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIC8qIEtlZXAgaW5mbyBpbiBjYXNlIHdlIHdhbnQgdG8gcmUtc2VuZCB0aGlzIHBhY2tldCAqLworCQkgIGRhZW1vbi0+c3J2X3NhdmUgPSBzdGFydDsKKwkJICBkYWVtb24tPnBhY2tldF9sZW4gPSBwbGVuOworCQkgIAorCQkgIGlmICghZ290bmFtZSkKKwkJICAgIHN0cmNweShkYWVtb24tPm5hbWVidWZmLCAicXVlcnkiKTsKKwkJICBpZiAoc3RhcnQtPmFkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpCisJCSAgICBsb2dfcXVlcnkoRl9TRVJWRVIgfCBGX0lQVjQgfCBGX0ZPUldBUkQsIGRhZW1vbi0+bmFtZWJ1ZmYsIAorCQkJICAgICAgKHN0cnVjdCBhbGxfYWRkciAqKSZzdGFydC0+YWRkci5pbi5zaW5fYWRkciwgTlVMTCk7IAorI2lmZGVmIEhBVkVfSVBWNgorCQkgIGVsc2UKKwkJICAgIGxvZ19xdWVyeShGX1NFUlZFUiB8IEZfSVBWNiB8IEZfRk9SV0FSRCwgZGFlbW9uLT5uYW1lYnVmZiwgCisJCQkgICAgICAoc3RydWN0IGFsbF9hZGRyICopJnN0YXJ0LT5hZGRyLmluNi5zaW42X2FkZHIsIE5VTEwpOworI2VuZGlmIAorCQkgIHN0YXJ0LT5xdWVyaWVzKys7CisJCSAgZm9yd2FyZGVkID0gMTsKKwkJICBmb3J3YXJkLT5zZW50dG8gPSBzdGFydDsKKwkJICBpZiAoIWZvcndhcmQtPmZvcndhcmRhbGwpIAorCQkgICAgYnJlYWs7CisJCSAgZm9yd2FyZC0+Zm9yd2FyZGFsbCsrOworCQl9CisJICAgIH0gCisJICAKKwkgIGlmICghKHN0YXJ0ID0gc3RhcnQtPm5leHQpKQorIAkgICAgc3RhcnQgPSBkYWVtb24tPnNlcnZlcnM7CisJICAKKwkgIGlmIChzdGFydCA9PSBmaXJzdHNlbnR0bykKKwkgICAgYnJlYWs7CisJfQorICAgICAgCisgICAgICBpZiAoZm9yd2FyZGVkKQorCXJldHVybiAxOworICAgICAgCisgICAgICAvKiBjb3VsZCBub3Qgc2VuZCBvbiwgcHJlcGFyZSB0byByZXR1cm4gKi8gCisgICAgICBoZWFkZXItPmlkID0gaHRvbnMoZm9yd2FyZC0+b3JpZ19pZCk7CisgICAgICBmcmVlX2ZyZWMoZm9yd2FyZCk7IC8qIGNhbmNlbCAqLworICAgIH0JICAKKyAgCisgIC8qIGNvdWxkIG5vdCBzZW5kIG9uLCByZXR1cm4gZW1wdHkgYW5zd2VyIG9yIGFkZHJlc3MgaWYga25vd24gZm9yIHdob2xlIGRvbWFpbiAqLworICBpZiAodWRwZmQgIT0gLTEpCisgICAgeworICAgICAgcGxlbiA9IHNldHVwX3JlcGx5KGhlYWRlciwgcGxlbiwgYWRkcnAsIGZsYWdzLCBkYWVtb24tPmxvY2FsX3R0bCk7CisgICAgICBzZW5kX2Zyb20odWRwZmQsIG9wdGlvbl9ib29sKE9QVF9OT1dJTEQpIHx8IG9wdGlvbl9ib29sKE9QVF9DTEVWRVJCSU5EKSwgKGNoYXIgKiloZWFkZXIsIHBsZW4sIHVkcGFkZHIsIGRzdF9hZGRyLCBkc3RfaWZhY2UpOworICAgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHNpemVfdCBwcm9jZXNzX3JlcGx5KHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHRpbWVfdCBub3csIHN0cnVjdCBzZXJ2ZXIgKnNlcnZlciwgc2l6ZV90IG4sIGludCBjaGVja19yZWJpbmQsIAorCQkJICAgIGludCBub19jYWNoZSwgaW50IGNhY2hlX3NlY3VyZSwgaW50IGFkX3JlcWQsIGludCBkb19iaXQsIGludCBhZGRlZF9waGVhZGVyLCBpbnQgY2hlY2tfc3VibmV0LCB1bmlvbiBteXNvY2thZGRyICpxdWVyeV9zb3VyY2UpCit7CisgIHVuc2lnbmVkIGNoYXIgKnBoZWFkZXIsICpzaXplcDsKKyAgY2hhciAqKnNldHMgPSAwOworICBpbnQgbXVuZ2VkID0gMCwgaXNfc2lnbjsKKyAgc2l6ZV90IHBsZW47IAorCisgICh2b2lkKWFkX3JlcWQ7CisgICh2b2lkKSBkb19iaXQ7CisKKyNpZmRlZiBIQVZFX0lQU0VUCisgIGlmIChkYWVtb24tPmlwc2V0cyAmJiBleHRyYWN0X3JlcXVlc3QoaGVhZGVyLCBuLCBkYWVtb24tPm5hbWVidWZmLCBOVUxMKSkKKyAgICB7CisgICAgICAvKiBTaW1pbGFyIGFsZ29yaXRobSB0byBzZWFyY2hfc2VydmVycy4gKi8KKyAgICAgIHN0cnVjdCBpcHNldHMgKmlwc2V0X3BvczsKKyAgICAgIHVuc2lnbmVkIGludCBuYW1lbGVuID0gc3RybGVuKGRhZW1vbi0+bmFtZWJ1ZmYpOworICAgICAgdW5zaWduZWQgaW50IG1hdGNobGVuID0gMDsKKyAgICAgIGZvciAoaXBzZXRfcG9zID0gZGFlbW9uLT5pcHNldHM7IGlwc2V0X3BvczsgaXBzZXRfcG9zID0gaXBzZXRfcG9zLT5uZXh0KSAKKwl7CisJICB1bnNpZ25lZCBpbnQgZG9tYWlubGVuID0gc3RybGVuKGlwc2V0X3Bvcy0+ZG9tYWluKTsKKwkgIGNoYXIgKm1hdGNoc3RhcnQgPSBkYWVtb24tPm5hbWVidWZmICsgbmFtZWxlbiAtIGRvbWFpbmxlbjsKKwkgIGlmIChuYW1lbGVuID49IGRvbWFpbmxlbiAmJiBob3N0bmFtZV9pc2VxdWFsKG1hdGNoc3RhcnQsIGlwc2V0X3Bvcy0+ZG9tYWluKSAmJgorCSAgICAgIChkb21haW5sZW4gPT0gMCB8fCBuYW1lbGVuID09IGRvbWFpbmxlbiB8fCAqKG1hdGNoc3RhcnQgLSAxKSA9PSAnLicgKSAmJgorCSAgICAgIGRvbWFpbmxlbiA+PSBtYXRjaGxlbikgCisJICAgIHsKKwkgICAgICBtYXRjaGxlbiA9IGRvbWFpbmxlbjsKKwkgICAgICBzZXRzID0gaXBzZXRfcG9zLT5zZXRzOworCSAgICB9CisJfQorICAgIH0KKyNlbmRpZgorICAKKyAgLyogSWYgdXBzdHJlYW0gaXMgYWR2ZXJ0aXNpbmcgYSBsYXJnZXIgVURQIHBhY2tldCBzaXplCisgICAgIHRoYW4gd2UgYWxsb3csIHRyaW0gaXQgc28gdGhhdCB3ZSBkb24ndCBnZXQgb3ZlcmxhcmdlCisgICAgIHJlcXVlc3RzIGZvciB0aGUgY2xpZW50LiBXZSBjYW4ndCBkbyB0aGlzIGZvciBzaWduZWQgcGFja2V0cy4gKi8KKworICBpZiAoKHBoZWFkZXIgPSBmaW5kX3BzZXVkb2hlYWRlcihoZWFkZXIsIG4sICZwbGVuLCAmc2l6ZXAsICZpc19zaWduKSkpCisgICAgeworICAgICAgdW5zaWduZWQgc2hvcnQgdWRwc3o7CisgICAgICB1bnNpZ25lZCBjaGFyICpwc2F2ZSA9IHNpemVwOworICAgICAgCisgICAgICBHRVRTSE9SVCh1ZHBzeiwgc2l6ZXApOworCisgICAgICBpZiAoIWlzX3NpZ24gJiYgdWRwc3ogPiBkYWVtb24tPmVkbnNfcGt0c3opCisJUFVUU0hPUlQoZGFlbW9uLT5lZG5zX3BrdHN6LCBwc2F2ZSk7CisgICAgICAKKyAgICAgIGlmIChjaGVja19zdWJuZXQgJiYgIWNoZWNrX3NvdXJjZShoZWFkZXIsIHBsZW4sIHBoZWFkZXIsIHF1ZXJ5X3NvdXJjZSkpCisJeworCSAgbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJkaXNjYXJkaW5nIEROUyByZXBseTogc3VibmV0IG9wdGlvbiBtaXNtYXRjaCIpKTsKKwkgIHJldHVybiAwOworCX0KKyAgICAgIAorICAgICAgaWYgKGFkZGVkX3BoZWFkZXIpCisJeworCSAgcGhlYWRlciA9IDA7IAorCSAgaGVhZGVyLT5hcmNvdW50ID0gaHRvbnMoMCk7CisJfQorICAgIH0KKyAgCisgIC8qIFJGQyA0MDM1IHNlY3QgNC42IHBhcmEgMyAqLworICBpZiAoIWlzX3NpZ24gJiYgIW9wdGlvbl9ib29sKE9QVF9ETlNTRUNfUFJPWFkpKQorICAgICBoZWFkZXItPmhiNCAmPSB+SEI0X0FEOworICAKKyAgaWYgKE9QQ09ERShoZWFkZXIpICE9IFFVRVJZIHx8IChSQ09ERShoZWFkZXIpICE9IE5PRVJST1IgJiYgUkNPREUoaGVhZGVyKSAhPSBOWERPTUFJTikpCisgICAgcmV0dXJuIHJlc2l6ZV9wYWNrZXQoaGVhZGVyLCBuLCBwaGVhZGVyLCBwbGVuKTsKKyAgCisgIC8qIENvbXBsYWluIGxvdWRseSBpZiB0aGUgdXBzdHJlYW0gc2VydmVyIGlzIG5vbi1yZWN1cnNpdmUuICovCisgIGlmICghKGhlYWRlci0+aGI0ICYgSEI0X1JBKSAmJiBSQ09ERShoZWFkZXIpID09IE5PRVJST1IgJiYgbnRvaHMoaGVhZGVyLT5hbmNvdW50KSA9PSAwICYmCisgICAgICBzZXJ2ZXIgJiYgIShzZXJ2ZXItPmZsYWdzICYgU0VSVl9XQVJORURfUkVDVVJTSVZFKSkKKyAgICB7CisgICAgICBwcmV0dHlwcmludF9hZGRyKCZzZXJ2ZXItPmFkZHIsIGRhZW1vbi0+bmFtZWJ1ZmYpOworICAgICAgbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJuYW1lc2VydmVyICVzIHJlZnVzZWQgdG8gZG8gYSByZWN1cnNpdmUgcXVlcnkiKSwgZGFlbW9uLT5uYW1lYnVmZik7CisgICAgICBpZiAoIW9wdGlvbl9ib29sKE9QVF9MT0cpKQorCXNlcnZlci0+ZmxhZ3MgfD0gU0VSVl9XQVJORURfUkVDVVJTSVZFOworICAgIH0gIAorCisgIGlmIChkYWVtb24tPmJvZ3VzX2FkZHIgJiYgUkNPREUoaGVhZGVyKSAhPSBOWERPTUFJTiAmJgorICAgICAgY2hlY2tfZm9yX2JvZ3VzX3dpbGRjYXJkKGhlYWRlciwgbiwgZGFlbW9uLT5uYW1lYnVmZiwgZGFlbW9uLT5ib2d1c19hZGRyLCBub3cpKQorICAgIHsKKyAgICAgIG11bmdlZCA9IDE7CisgICAgICBTRVRfUkNPREUoaGVhZGVyLCBOWERPTUFJTik7CisgICAgICBoZWFkZXItPmhiMyAmPSB+SEIzX0FBOworICAgICAgY2FjaGVfc2VjdXJlID0gMDsKKyAgICB9CisgIGVsc2UgCisgICAgeworICAgICAgaW50IGRvY3RvcmVkID0gMDsKKyAgICAgIAorICAgICAgaWYgKFJDT0RFKGhlYWRlcikgPT0gTlhET01BSU4gJiYgCisJICBleHRyYWN0X3JlcXVlc3QoaGVhZGVyLCBuLCBkYWVtb24tPm5hbWVidWZmLCBOVUxMKSAmJgorCSAgY2hlY2tfZm9yX2xvY2FsX2RvbWFpbihkYWVtb24tPm5hbWVidWZmLCBub3cpKQorCXsKKwkgIC8qIGlmIHdlIGZvcndhcmRlZCBhIHF1ZXJ5IGZvciBhIGxvY2FsbHkga25vd24gbmFtZSAoYmVjYXVzZSBpdCB3YXMgZm9yIAorCSAgICAgYW4gdW5rbm93biB0eXBlKSBhbmQgdGhlIGFuc3dlciBpcyBOWERPTUFJTiwgY29udmVydCB0aGF0IHRvIE5PREFUQSwKKwkgICAgIHNpbmNlIHdlIGtub3cgdGhhdCB0aGUgZG9tYWluIGV4aXN0cywgZXZlbiBpZiB1cHN0cmVhbSBkb2Vzbid0ICovCisJICBtdW5nZWQgPSAxOworCSAgaGVhZGVyLT5oYjMgfD0gSEIzX0FBOworCSAgU0VUX1JDT0RFKGhlYWRlciwgTk9FUlJPUik7CisJICBjYWNoZV9zZWN1cmUgPSAwOworCX0KKyAgICAgIAorICAgICAgaWYgKGV4dHJhY3RfYWRkcmVzc2VzKGhlYWRlciwgbiwgZGFlbW9uLT5uYW1lYnVmZiwgbm93LCBzZXRzLCBpc19zaWduLCBjaGVja19yZWJpbmQsIG5vX2NhY2hlLCBjYWNoZV9zZWN1cmUsICZkb2N0b3JlZCkpCisJeworCSAgbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJwb3NzaWJsZSBETlMtcmViaW5kIGF0dGFjayBkZXRlY3RlZDogJXMiKSwgZGFlbW9uLT5uYW1lYnVmZik7CisJICBtdW5nZWQgPSAxOworCSAgY2FjaGVfc2VjdXJlID0gMDsKKwl9CisKKyAgICAgIGlmIChkb2N0b3JlZCkKKwljYWNoZV9zZWN1cmUgPSAwOworICAgIH0KKyAgCisjaWZkZWYgSEFWRV9ETlNTRUMKKyAgaWYgKG5vX2NhY2hlICYmICEoaGVhZGVyLT5oYjQgJiBIQjRfQ0QpKSAKKyAgICB7CisgICAgICBpZiAoIW9wdGlvbl9ib29sKE9QVF9ETlNTRUNfREVCVUcpKQorCXsKKwkgIC8qIEJvZ3VzIHJlcGx5LCB0dXJuIGludG8gU0VSVkZBSUwgKi8KKwkgIFNFVF9SQ09ERShoZWFkZXIsIFNFUlZGQUlMKTsKKwkgIG11bmdlZCA9IDE7CisJfQorICAgIH0KKworICBpZiAob3B0aW9uX2Jvb2woT1BUX0ROU1NFQ19WQUxJRCkpCisgICAgaGVhZGVyLT5oYjQgJj0gfkhCNF9BRDsKKyAgCisgIGlmICghKGhlYWRlci0+aGI0ICYgSEI0X0NEKSAmJiBhZF9yZXFkICYmIGNhY2hlX3NlY3VyZSkKKyAgICBoZWFkZXItPmhiNCB8PSBIQjRfQUQ7CisKKyAgLyogSWYgdGhlIHJlcXVlc3RvciBkaWRuJ3Qgc2V0IHRoZSBETyBiaXQsIGRvbid0IHJldHVybiBETlNTRUMgaW5mby4gKi8KKyAgaWYgKCFkb19iaXQpCisgICAgbiA9IGZpbHRlcl9ycnNpZ3MoaGVhZGVyLCBuKTsKKyNlbmRpZgorCisgIC8qIGRvIHRoaXMgYWZ0ZXIgZXh0cmFjdF9hZGRyZXNzZXMuIEVuc3VyZSBOT0RBVEEgcmVwbHkgYW5kIHJlbW92ZQorICAgICBuYW1lc2VydmVyIGluZm8uICovCisgIAorICBpZiAobXVuZ2VkKQorICAgIHsKKyAgICAgIGhlYWRlci0+YW5jb3VudCA9IGh0b25zKDApOworICAgICAgaGVhZGVyLT5uc2NvdW50ID0gaHRvbnMoMCk7CisgICAgICBoZWFkZXItPmFyY291bnQgPSBodG9ucygwKTsKKyAgICB9CisgIAorICAvKiB0aGUgYm9ndXMtbnhkb21haW4gc3R1ZmYsIGRvY3RvciBhbmQgTlhET01BSU4tPk5PREFUQSBtdW5naW5nIGNhbiBhbGwgZWxpZGUKKyAgICAgc2VjdGlvbnMgb2YgdGhlIHBhY2tldC4gRmluZCB0aGUgbmV3IGxlbmd0aCBoZXJlIGFuZCBwdXQgYmFjayBwc2V1ZG9oZWFkZXIKKyAgICAgaWYgaXQgd2FzIHJlbW92ZWQuICovCisgIHJldHVybiByZXNpemVfcGFja2V0KGhlYWRlciwgbiwgcGhlYWRlciwgcGxlbik7Cit9CisKKy8qIHNldHMgbmV3IGxhc3Rfc2VydmVyICovCit2b2lkIHJlcGx5X3F1ZXJ5KGludCBmZCwgaW50IGZhbWlseSwgdGltZV90IG5vdykKK3sKKyAgLyogcGFja2V0IGZyb20gcGVlciBzZXJ2ZXIsIGV4dHJhY3QgZGF0YSBmb3IgY2FjaGUsIGFuZCBzZW5kIHRvCisgICAgIG9yaWdpbmFsIHJlcXVlc3RlciAqLworICBzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyOworICB1bmlvbiBteXNvY2thZGRyIHNlcnZlcmFkZHI7CisgIHN0cnVjdCBmcmVjICpmb3J3YXJkOworICBzb2NrbGVuX3QgYWRkcmxlbiA9IHNpemVvZihzZXJ2ZXJhZGRyKTsKKyAgc3NpemVfdCBuID0gcmVjdmZyb20oZmQsIGRhZW1vbi0+cGFja2V0LCBkYWVtb24tPnBhY2tldF9idWZmX3N6LCAwLCAmc2VydmVyYWRkci5zYSwgJmFkZHJsZW4pOworICBzaXplX3Qgbm47CisgIHN0cnVjdCBzZXJ2ZXIgKnNlcnZlcjsKKyAgdm9pZCAqaGFzaDsKKyNpZm5kZWYgSEFWRV9ETlNTRUMKKyAgdW5zaWduZWQgaW50IGNyYzsKKyNlbmRpZgorCisgIC8qIHBhY2tldCBidWZmZXIgb3ZlcndyaXR0ZW4gKi8KKyAgZGFlbW9uLT5zcnZfc2F2ZSA9IE5VTEw7CisgIAorICAvKiBEZXRlcm1pbmUgdGhlIGFkZHJlc3Mgb2YgdGhlIHNlcnZlciByZXBseWluZyAgc28gdGhhdCB3ZSBjYW4gbWFyayB0aGF0IGFzIGdvb2QgKi8KKyAgc2VydmVyYWRkci5zYS5zYV9mYW1pbHkgPSBmYW1pbHk7CisjaWZkZWYgSEFWRV9JUFY2CisgIGlmIChzZXJ2ZXJhZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKKyAgICBzZXJ2ZXJhZGRyLmluNi5zaW42X2Zsb3dpbmZvID0gMDsKKyNlbmRpZgorICAKKyAgaGVhZGVyID0gKHN0cnVjdCBkbnNfaGVhZGVyICopZGFlbW9uLT5wYWNrZXQ7CisgIAorICBpZiAobiA8IChpbnQpc2l6ZW9mKHN0cnVjdCBkbnNfaGVhZGVyKSB8fCAhKGhlYWRlci0+aGIzICYgSEIzX1FSKSkKKyAgICByZXR1cm47CisgIAorICAvKiBzcG9vZiBjaGVjazogYW5zd2VyIG11c3QgY29tZSBmcm9tIGtub3duIHNlcnZlciwgKi8KKyAgZm9yIChzZXJ2ZXIgPSBkYWVtb24tPnNlcnZlcnM7IHNlcnZlcjsgc2VydmVyID0gc2VydmVyLT5uZXh0KQorICAgIGlmICghKHNlcnZlci0+ZmxhZ3MgJiAoU0VSVl9MSVRFUkFMX0FERFJFU1MgfCBTRVJWX05PX0FERFIpKSAmJgorCXNvY2thZGRyX2lzZXF1YWwoJnNlcnZlci0+YWRkciwgJnNlcnZlcmFkZHIpKQorICAgICAgYnJlYWs7CisgIAorICBpZiAoIXNlcnZlcikKKyAgICByZXR1cm47CisgIAorI2lmZGVmIEhBVkVfRE5TU0VDCisgIGhhc2ggPSBoYXNoX3F1ZXN0aW9ucyhoZWFkZXIsIG4sIGRhZW1vbi0+bmFtZWJ1ZmYpOworI2Vsc2UKKyAgaGFzaCA9ICZjcmM7CisgIGNyYyA9IHF1ZXN0aW9uc19jcmMoaGVhZGVyLCBuLCBkYWVtb24tPm5hbWVidWZmKTsKKyNlbmRpZgorICAKKyAgaWYgKCEoZm9yd2FyZCA9IGxvb2t1cF9mcmVjKG50b2hzKGhlYWRlci0+aWQpLCBoYXNoKSkpCisgICAgcmV0dXJuOworICAKKyAgLyogbG9nX3F1ZXJ5IGdldHMgY2FsbGVkIGluZGlyZWN0bHkgYWxsIG92ZXIgdGhlIHBsYWNlLCBzbyAKKyAgICAgcGFzcyB0aGVzZSBpbiBnbG9iYWwgdmFyaWFibGVzIC0gc29ycnkuICovCisgIGRhZW1vbi0+bG9nX2Rpc3BsYXlfaWQgPSBmb3J3YXJkLT5sb2dfaWQ7CisgIGRhZW1vbi0+bG9nX3NvdXJjZV9hZGRyID0gJmZvcndhcmQtPnNvdXJjZTsKKyAgCisgIGlmIChkYWVtb24tPmlnbm9yZV9hZGRyICYmIFJDT0RFKGhlYWRlcikgPT0gTk9FUlJPUiAmJgorICAgICAgY2hlY2tfZm9yX2lnbm9yZWRfYWRkcmVzcyhoZWFkZXIsIG4sIGRhZW1vbi0+aWdub3JlX2FkZHIpKQorICAgIHJldHVybjsKKworICBpZiAoKFJDT0RFKGhlYWRlcikgPT0gU0VSVkZBSUwgfHwgUkNPREUoaGVhZGVyKSA9PSBSRUZVU0VEKSAmJgorICAgICAgIW9wdGlvbl9ib29sKE9QVF9PUkRFUikgJiYKKyAgICAgIGZvcndhcmQtPmZvcndhcmRhbGwgPT0gMCkKKyAgICAvKiBmb3IgYnJva2VuIHNlcnZlcnMsIGF0dGVtcHQgdG8gc2VuZCB0byBhbm90aGVyIG9uZS4gKi8KKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyICpwaGVhZGVyOworICAgICAgc2l6ZV90IHBsZW47CisgICAgICBpbnQgaXNfc2lnbjsKKyAgICAgIAorICAgICAgLyogcmVjcmVhdGUgcXVlcnkgZnJvbSByZXBseSAqLworICAgICAgcGhlYWRlciA9IGZpbmRfcHNldWRvaGVhZGVyKGhlYWRlciwgKHNpemVfdCluLCAmcGxlbiwgTlVMTCwgJmlzX3NpZ24pOworICAgICAgaWYgKCFpc19zaWduKQorCXsKKwkgIGhlYWRlci0+YW5jb3VudCA9IGh0b25zKDApOworCSAgaGVhZGVyLT5uc2NvdW50ID0gaHRvbnMoMCk7CisJICBoZWFkZXItPmFyY291bnQgPSBodG9ucygwKTsKKwkgIGlmICgobm4gPSByZXNpemVfcGFja2V0KGhlYWRlciwgKHNpemVfdCluLCBwaGVhZGVyLCBwbGVuKSkpCisJICAgIHsKKwkgICAgICBoZWFkZXItPmhiMyAmPSB+KEhCM19RUiB8IEhCM19UQyk7CisJICAgICAgZm9yd2FyZF9xdWVyeSgtMSwgTlVMTCwgTlVMTCwgMCwgaGVhZGVyLCBubiwgbm93LCBmb3J3YXJkLCAwLCAwKTsKKwkgICAgICByZXR1cm47CisJICAgIH0KKwl9CisgICAgfSAgIAorICAgCisgIHNlcnZlciA9IGZvcndhcmQtPnNlbnR0bzsKKyAgCisgIGlmICgoZm9yd2FyZC0+c2VudHRvLT5mbGFncyAmIFNFUlZfVFlQRSkgPT0gMCkKKyAgICB7CisgICAgICBpZiAoUkNPREUoaGVhZGVyKSA9PSBSRUZVU0VEKQorCXNlcnZlciA9IE5VTEw7CisgICAgICBlbHNlCisJeworCSAgc3RydWN0IHNlcnZlciAqbGFzdF9zZXJ2ZXI7CisJICAKKwkgIC8qIGZpbmQgZ29vZCBzZXJ2ZXIgYnkgYWRkcmVzcyBpZiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGFzc3VtZSB0aGUgbGFzdCBvbmUgd2Ugc2VudCB0byAqLyAKKwkgIGZvciAobGFzdF9zZXJ2ZXIgPSBkYWVtb24tPnNlcnZlcnM7IGxhc3Rfc2VydmVyOyBsYXN0X3NlcnZlciA9IGxhc3Rfc2VydmVyLT5uZXh0KQorCSAgICBpZiAoIShsYXN0X3NlcnZlci0+ZmxhZ3MgJiAoU0VSVl9MSVRFUkFMX0FERFJFU1MgfCBTRVJWX0hBU19ET01BSU4gfCBTRVJWX0ZPUl9OT0RPVFMgfCBTRVJWX05PX0FERFIpKSAmJgorCQlzb2NrYWRkcl9pc2VxdWFsKCZsYXN0X3NlcnZlci0+YWRkciwgJnNlcnZlcmFkZHIpKQorCSAgICAgIHsKKwkJc2VydmVyID0gbGFzdF9zZXJ2ZXI7CisJCWJyZWFrOworCSAgICAgIH0KKwl9IAorICAgICAgaWYgKCFvcHRpb25fYm9vbChPUFRfQUxMX1NFUlZFUlMpKQorCWRhZW1vbi0+bGFzdF9zZXJ2ZXIgPSBzZXJ2ZXI7CisgICAgfQorCisgIC8qIElmIHRoZSBhbnN3ZXIgaXMgYW4gZXJyb3IsIGtlZXAgdGhlIGZvcndhcmQgcmVjb3JkIGluIHBsYWNlIGluIGNhc2UKKyAgICAgd2UgZ2V0IGEgZ29vZCByZXBseSBmcm9tIGFub3RoZXIgc2VydmVyLiBLaWxsIGl0IHdoZW4gd2UndmUKKyAgICAgaGFkIHJlcGxpZXMgZnJvbSBhbGwgdG8gYXZvaWQgZmlsbGluZyB0aGUgZm9yd2FyZGluZyB0YWJsZSB3aGVuCisgICAgIGV2ZXJ5dGhpbmcgaXMgYnJva2VuICovCisgIGlmIChmb3J3YXJkLT5mb3J3YXJkYWxsID09IDAgfHwgLS1mb3J3YXJkLT5mb3J3YXJkYWxsID09IDEgfHwgUkNPREUoaGVhZGVyKSAhPSBTRVJWRkFJTCkKKyAgICB7CisgICAgICBpbnQgY2hlY2tfcmViaW5kID0gMCwgbm9fY2FjaGVfZG5zc2VjID0gMCwgY2FjaGVfc2VjdXJlID0gMDsKKworICAgICAgaWYgKG9wdGlvbl9ib29sKE9QVF9OT19SRUJJTkQpKQorCWNoZWNrX3JlYmluZCA9ICEoZm9yd2FyZC0+ZmxhZ3MgJiBGUkVDX05PUkVCSU5EKTsKKyAgICAgIAorICAgICAgLyogICBEb24ndCBjYWNoZSByZXBsaWVzIHdoZXJlIEROU1NFQyB2YWxpZGF0aW9uIHdhcyB0dXJuZWQgb2ZmLCBlaXRoZXIKKwkgICB0aGUgdXBzdHJlYW0gc2VydmVyIHRvbGQgdXMgc28sIG9yIHRoZSBvcmlnaW5hbCBxdWVyeSBzcGVjaWZpZWQgaXQuICAqLworICAgICAgaWYgKChoZWFkZXItPmhiNCAmIEhCNF9DRCkgfHwgKGZvcndhcmQtPmZsYWdzICYgRlJFQ19DSEVDS0lOR19ESVNBQkxFRCkpCisJbm9fY2FjaGVfZG5zc2VjID0gMTsKKyAgICAgIAorI2lmZGVmIEhBVkVfRE5TU0VDCisgICAgICBpZiAoc2VydmVyICYmIG9wdGlvbl9ib29sKE9QVF9ETlNTRUNfVkFMSUQpICYmICEoZm9yd2FyZC0+ZmxhZ3MgJiBGUkVDX0NIRUNLSU5HX0RJU0FCTEVEKSkKKwl7CisJICBpbnQgc3RhdHVzOworCisJICAvKiBXZSd2ZSBoYWQgYSByZXBseSBhbHJlYWR5LCB3aGljaCB3ZSdyZSB2YWxpZGF0aW5nLiBJZ25vcmUgdGhpcyBkdXBsaWNhdGUgKi8KKwkgIGlmIChmb3J3YXJkLT5ibG9ja2luZ19xdWVyeSkKKwkgICAgcmV0dXJuOworCisJICBpZiAoaGVhZGVyLT5oYjMgJiBIQjNfVEMpCisJICAgIHsKKwkgICAgICAvKiBUcnVuY2F0ZWQgYW5zd2VyIGNhbid0IGJlIHZhbGlkYXRlZC4KKwkJIElmIHRoaXMgaXMgYW4gYW5zd2VyIHRvIGEgRE5TU0VDLWdlbmVyYXRlZCBxdWVyeSwgd2Ugc3RpbGwKKwkJIG5lZWQgdG8gZ2V0IHRoZSBjbGllbnQgdG8gcmV0cnkgb3ZlciBUQ1AsIHNvIHJldHVybgorCQkgYW4gYW5zd2VyIHdpdGggdGhlIFRDIGJpdCBzZXQsIGV2ZW4gaWYgdGhlIGFjdHVhbCBhbnN3ZXIgZml0cy4KKwkgICAgICAqLworCSAgICAgIHN0YXR1cyA9IFNUQVRfVFJVTkNBVEVEOworCSAgICB9CisJICBlbHNlIGlmIChmb3J3YXJkLT5mbGFncyAmIEZSRUNfRE5TS0VZX1FVRVJZKQorCSAgICBzdGF0dXMgPSBkbnNzZWNfdmFsaWRhdGVfYnlfZHMobm93LCBoZWFkZXIsIG4sIGRhZW1vbi0+bmFtZWJ1ZmYsIGRhZW1vbi0+a2V5bmFtZSwgZm9yd2FyZC0+Y2xhc3MpOworCSAgZWxzZSBpZiAoZm9yd2FyZC0+ZmxhZ3MgJiBGUkVDX0RTX1FVRVJZKQorCSAgICB7CisJICAgICAgc3RhdHVzID0gZG5zc2VjX3ZhbGlkYXRlX2RzKG5vdywgaGVhZGVyLCBuLCBkYWVtb24tPm5hbWVidWZmLCBkYWVtb24tPmtleW5hbWUsIGZvcndhcmQtPmNsYXNzKTsKKwkgICAgICBpZiAoc3RhdHVzID09IFNUQVRfTk9fRFMgfHwgc3RhdHVzID09IFNUQVRfTk9fTlMpCisJCXN0YXR1cyA9IFNUQVRfQk9HVVM7CisJICAgIH0KKwkgIGVsc2UgaWYgKGZvcndhcmQtPmZsYWdzICYgRlJFQ19DSEVDS19OT1NJR04pCisJICAgIHsKKwkgICAgICBzdGF0dXMgPSBkbnNzZWNfdmFsaWRhdGVfZHMobm93LCBoZWFkZXIsIG4sIGRhZW1vbi0+bmFtZWJ1ZmYsIGRhZW1vbi0+a2V5bmFtZSwgZm9yd2FyZC0+Y2xhc3MpOworCSAgICAgIGlmIChzdGF0dXMgIT0gU1RBVF9ORUVEX0tFWSkKKwkJc3RhdHVzID0gZG9fY2hlY2tfc2lnbihmb3J3YXJkLCBzdGF0dXMsIG5vdywgZGFlbW9uLT5uYW1lYnVmZiwgZGFlbW9uLT5rZXluYW1lKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgc3RhdHVzID0gZG5zc2VjX3ZhbGlkYXRlX3JlcGx5KG5vdywgaGVhZGVyLCBuLCBkYWVtb24tPm5hbWVidWZmLCBkYWVtb24tPmtleW5hbWUsICZmb3J3YXJkLT5jbGFzcywgTlVMTCwgTlVMTCk7CisJICAgICAgaWYgKHN0YXR1cyA9PSBTVEFUX05PX1NJRykKKwkJeworCQkgIGlmIChvcHRpb25fYm9vbChPUFRfRE5TU0VDX05PX1NJR04pKQorCQkgICAgc3RhdHVzID0gc2VuZF9jaGVja19zaWduKGZvcndhcmQsIG5vdywgaGVhZGVyLCBuLCBkYWVtb24tPm5hbWVidWZmLCBkYWVtb24tPmtleW5hbWUpOworCQkgIGVsc2UKKwkJICAgIHN0YXR1cyA9IFNUQVRfSU5TRUNVUkU7CisJCX0KKwkgICAgfQorCSAgLyogQ2FuJ3QgdmFsaWRhdGUsIGFzIHdlJ3JlIG1pc3Npbmcga2V5IGRhdGEuIFB1dCB0aGlzCisJICAgICBhbnN3ZXIgYXNpZGUsIHdoaWxzdCB3ZSBnZXQgdGhhdC4gKi8gICAgIAorCSAgaWYgKHN0YXR1cyA9PSBTVEFUX05FRURfRFMgfHwgc3RhdHVzID09IFNUQVRfTkVFRF9EU19ORUcgfHwgc3RhdHVzID09IFNUQVRfTkVFRF9LRVkpCisJICAgIHsKKwkgICAgICBzdHJ1Y3QgZnJlYyAqbmV3LCAqb3JpZzsKKwkgICAgICAKKwkgICAgICAvKiBGcmVlIGFueSBzYXZlZCBxdWVyeSAqLworCSAgICAgIGlmIChmb3J3YXJkLT5zdGFzaCkKKwkJYmxvY2tkYXRhX2ZyZWUoZm9yd2FyZC0+c3Rhc2gpOworCSAgICAgIAorCSAgICAgIC8qIE5vdyBzYXZlIHJlcGx5IHBlbmRpbmcgcmVjZWlwdCBvZiBrZXkgZGF0YSAqLworCSAgICAgIGlmICghKGZvcndhcmQtPnN0YXNoID0gYmxvY2tkYXRhX2FsbG9jKChjaGFyICopaGVhZGVyLCBuKSkpCisJCXJldHVybjsKKwkgICAgICBmb3J3YXJkLT5zdGFzaF9sZW4gPSBuOworCSAgICAgIAorCSAgICBhbm90aGVya2V5OgkgICAgICAKKwkgICAgICAvKiBGaW5kIHRoZSBvcmlnaW5hbCBxdWVyeSB0aGF0IHN0YXJ0ZWQgaXQgYWxsLi4uLiAqLworCSAgICAgIGZvciAob3JpZyA9IGZvcndhcmQ7IG9yaWctPmRlcGVuZGVudDsgb3JpZyA9IG9yaWctPmRlcGVuZGVudCk7CisKKwkgICAgICBpZiAoLS1vcmlnLT53b3JrX2NvdW50ZXIgPT0gMCB8fCAhKG5ldyA9IGdldF9uZXdfZnJlYyhub3csIE5VTEwsIDEpKSkKKwkJc3RhdHVzID0gU1RBVF9JTlNFQ1VSRTsKKwkgICAgICBlbHNlCisJCXsKKwkJICBpbnQgZmQ7CisJCSAgc3RydWN0IGZyZWMgKm5leHQgPSBuZXctPm5leHQ7CisJCSAgKm5ldyA9ICpmb3J3YXJkOyAvKiBjb3B5IGV2ZXJ5dGhpbmcsIHRoZW4gb3ZlcndyaXRlICovCisJCSAgbmV3LT5uZXh0ID0gbmV4dDsKKwkJICBuZXctPmJsb2NraW5nX3F1ZXJ5ID0gTlVMTDsKKwkJICBuZXctPnNlbnR0byA9IHNlcnZlcjsKKwkJICBuZXctPnJmZDQgPSBOVUxMOworCQkgIG5ldy0+b3JpZ19kb21haW4gPSBOVUxMOworI2lmZGVmIEhBVkVfSVBWNgorCQkgIG5ldy0+cmZkNiA9IE5VTEw7CisjZW5kaWYKKwkJICBuZXctPmZsYWdzICY9IH4oRlJFQ19ETlNLRVlfUVVFUlkgfCBGUkVDX0RTX1FVRVJZIHwgRlJFQ19DSEVDS19OT1NJR04pOworCQkgIAorCQkgIG5ldy0+ZGVwZW5kZW50ID0gZm9yd2FyZDsgLyogdG8gZmluZCBxdWVyeSBhd2FpdGluZyBuZXcgb25lLiAqLworCQkgIGZvcndhcmQtPmJsb2NraW5nX3F1ZXJ5ID0gbmV3OyAvKiBmb3IgZ2FyYmFnZSBjbGVhbmluZyAqLworCQkgIC8qIHZhbGlkYXRlIHJvdXRpbmVzIGxlYXZlIG5hbWUgb2YgcmVxdWlyZWQgcmVjb3JkIGluIGRhZW1vbi0+a2V5bmFtZSAqLworCQkgIGlmIChzdGF0dXMgPT0gU1RBVF9ORUVEX0tFWSkKKwkJICAgIHsKKwkJICAgICAgbmV3LT5mbGFncyB8PSBGUkVDX0ROU0tFWV9RVUVSWTsgCisJCSAgICAgIG5uID0gZG5zc2VjX2dlbmVyYXRlX3F1ZXJ5KGhlYWRlciwgKChjaGFyICopIGhlYWRlcikgKyBkYWVtb24tPnBhY2tldF9idWZmX3N6LAorCQkJCQkJIGRhZW1vbi0+a2V5bmFtZSwgZm9yd2FyZC0+Y2xhc3MsIFRfRE5TS0VZLCAmc2VydmVyLT5hZGRyKTsKKwkJICAgIH0KKwkJICBlbHNlIAorCQkgICAgeworCQkgICAgICBpZiAoc3RhdHVzID09IFNUQVRfTkVFRF9EU19ORUcpCisJCQluZXctPmZsYWdzIHw9IEZSRUNfQ0hFQ0tfTk9TSUdOOworCQkgICAgICBlbHNlCisJCQluZXctPmZsYWdzIHw9IEZSRUNfRFNfUVVFUlk7CisJCSAgICAgIG5uID0gZG5zc2VjX2dlbmVyYXRlX3F1ZXJ5KGhlYWRlciwoKGNoYXIgKikgaGVhZGVyKSArIGRhZW1vbi0+cGFja2V0X2J1ZmZfc3osCisJCQkJCQkgZGFlbW9uLT5rZXluYW1lLCBmb3J3YXJkLT5jbGFzcywgVF9EUywgJnNlcnZlci0+YWRkcik7CisJCSAgICB9CisJCSAgaWYgKChoYXNoID0gaGFzaF9xdWVzdGlvbnMoaGVhZGVyLCBubiwgZGFlbW9uLT5uYW1lYnVmZikpKQorCQkgICAgbWVtY3B5KG5ldy0+aGFzaCwgaGFzaCwgSEFTSF9TSVpFKTsKKwkJICBuZXctPm5ld19pZCA9IGdldF9pZCgpOworCQkgIGhlYWRlci0+aWQgPSBodG9ucyhuZXctPm5ld19pZCk7CisJCSAgLyogU2F2ZSBxdWVyeSBmb3IgcmV0cmFuc21pc3Npb24gKi8KKwkJICBpZiAoIShuZXctPnN0YXNoID0gYmxvY2tkYXRhX2FsbG9jKChjaGFyICopaGVhZGVyLCBubikpKQorCQkgICAgcmV0dXJuOworCQkgICAgICAKKwkJICBuZXctPnN0YXNoX2xlbiA9IG5uOworCQkgIAorCQkgIC8qIERvbid0IHJlc2VuZCB0aGlzLiAqLworCQkgIGRhZW1vbi0+c3J2X3NhdmUgPSBOVUxMOworCQkgIAorCQkgIGlmIChzZXJ2ZXItPnNmZCkKKwkJICAgIGZkID0gc2VydmVyLT5zZmQtPmZkOworCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgZmQgPSAtMTsKKyNpZmRlZiBIQVZFX0lQVjYKKwkJICAgICAgaWYgKHNlcnZlci0+YWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpCisJCQl7CisJCQkgIGlmIChuZXctPnJmZDYgfHwgKG5ldy0+cmZkNiA9IGFsbG9jYXRlX3JmZChBRl9JTkVUNikpKQorCQkJICAgIGZkID0gbmV3LT5yZmQ2LT5mZDsKKwkJCX0KKwkJICAgICAgZWxzZQorI2VuZGlmCisJCQl7CisJCQkgIGlmIChuZXctPnJmZDQgfHwgKG5ldy0+cmZkNCA9IGFsbG9jYXRlX3JmZChBRl9JTkVUKSkpCisJCQkgICAgZmQgPSBuZXctPnJmZDQtPmZkOworCQkJfQorCQkgICAgfQorCQkgIAorCQkgIGlmIChmZCAhPSAtMSkKKwkJICAgIHsKKwkJICAgICAgd2hpbGUgKHNlbmR0byhmZCwgKGNoYXIgKiloZWFkZXIsIG5uLCAwLCAmc2VydmVyLT5hZGRyLnNhLCBzYV9sZW4oJnNlcnZlci0+YWRkcikpID09IC0xICYmIHJldHJ5X3NlbmQoKSk7IAorCQkgICAgICBzZXJ2ZXItPnF1ZXJpZXMrKzsKKwkJICAgIH0KKwkJICAKKwkJICByZXR1cm47CisJCX0KKwkgICAgfQorCSAgCisJICAvKiBPaywgd2UgcmVhY2hlZCBmYXIgZW5vdWdoIHVwIHRoZSBjaGFpbi1vZi10cnVzdCB0aGF0IHdlIGNhbiB2YWxpZGF0ZSBzb21ldGhpbmcuCisJICAgICBOb3cgd2luZCBiYWNrIGRvd24sIHB1bGxpbmcgYmFjayBhbnN3ZXJzIHdoaWNoIHdvdWxkbid0IHByZXZpb3VzbHkgdmFsaWRhdGUKKwkgICAgIGFuZCB2YWxpZGF0ZSB0aGVtIHdpdGggdGhlIG5ldyBkYXRhLiBOb3RlIHRoYXQgaWYgYW4gYW5zd2VyIG5lZWRzIG11bHRpcGxlCisJICAgICBrZXlzIHRvIHZhbGlkYXRlLCB3ZSBtYXkgZmluZCBhbm90aGVyIGtleSBpcyBuZWVkZWQsIGluIHdoaWNoIGNhc2Ugd2Ugc2V0IG9mZgorCSAgICAgZG93biBhbm90aGVyIGJyYW5jaCBvZiB0aGUgdHJlZS4gT25jZSB3ZSBnZXQgdG8gdGhlIG9yaWdpbmFsIGFuc3dlciAKKwkgICAgIChGUkVDX0ROU1NFQ19RVUVSWSBub3Qgc2V0KSBhbmQgaXQgdmFsaWRhdGVzLCByZXR1cm4gaXQgdG8gdGhlIG9yaWdpbmFsIHJlcXVlc3Rvci4gKi8KKwkgIHdoaWxlIChmb3J3YXJkLT5kZXBlbmRlbnQpCisJICAgIHsKKwkgICAgICBzdHJ1Y3QgZnJlYyAqcHJldiA9IGZvcndhcmQtPmRlcGVuZGVudDsKKwkgICAgICBmcmVlX2ZyZWMoZm9yd2FyZCk7CisJICAgICAgZm9yd2FyZCA9IHByZXY7CisJICAgICAgZm9yd2FyZC0+YmxvY2tpbmdfcXVlcnkgPSBOVUxMOyAvKiBhbHJlYWR5IGdvbmUgKi8KKwkgICAgICBibG9ja2RhdGFfcmV0cmlldmUoZm9yd2FyZC0+c3Rhc2gsIGZvcndhcmQtPnN0YXNoX2xlbiwgKHZvaWQgKiloZWFkZXIpOworCSAgICAgIG4gPSBmb3J3YXJkLT5zdGFzaF9sZW47CisJICAgICAgCisJICAgICAgaWYgKHN0YXR1cyA9PSBTVEFUX1NFQ1VSRSkKKwkJeworCQkgIGlmIChmb3J3YXJkLT5mbGFncyAmIEZSRUNfRE5TS0VZX1FVRVJZKQorCQkgICAgc3RhdHVzID0gZG5zc2VjX3ZhbGlkYXRlX2J5X2RzKG5vdywgaGVhZGVyLCBuLCBkYWVtb24tPm5hbWVidWZmLCBkYWVtb24tPmtleW5hbWUsIGZvcndhcmQtPmNsYXNzKTsKKwkJICBlbHNlIGlmIChmb3J3YXJkLT5mbGFncyAmIEZSRUNfRFNfUVVFUlkpCisJCSAgICB7CisJCSAgICAgIHN0YXR1cyA9IGRuc3NlY192YWxpZGF0ZV9kcyhub3csIGhlYWRlciwgbiwgZGFlbW9uLT5uYW1lYnVmZiwgZGFlbW9uLT5rZXluYW1lLCBmb3J3YXJkLT5jbGFzcyk7CisJCSAgICAgIGlmIChzdGF0dXMgPT0gU1RBVF9OT19EUyB8fCBzdGF0dXMgPT0gU1RBVF9OT19OUykKKwkJCXN0YXR1cyA9IFNUQVRfQk9HVVM7CisJCSAgICB9CisJCSAgZWxzZSBpZiAoZm9yd2FyZC0+ZmxhZ3MgJiBGUkVDX0NIRUNLX05PU0lHTikKKwkJICAgIHsKKwkJICAgICAgc3RhdHVzID0gZG5zc2VjX3ZhbGlkYXRlX2RzKG5vdywgaGVhZGVyLCBuLCBkYWVtb24tPm5hbWVidWZmLCBkYWVtb24tPmtleW5hbWUsIGZvcndhcmQtPmNsYXNzKTsKKwkJICAgICAgaWYgKHN0YXR1cyAhPSBTVEFUX05FRURfS0VZKQorCQkJc3RhdHVzID0gZG9fY2hlY2tfc2lnbihmb3J3YXJkLCBzdGF0dXMsIG5vdywgZGFlbW9uLT5uYW1lYnVmZiwgZGFlbW9uLT5rZXluYW1lKTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIHN0YXR1cyA9IGRuc3NlY192YWxpZGF0ZV9yZXBseShub3csIGhlYWRlciwgbiwgZGFlbW9uLT5uYW1lYnVmZiwgZGFlbW9uLT5rZXluYW1lLCAmZm9yd2FyZC0+Y2xhc3MsIE5VTEwsIE5VTEwpOwkKKwkJICAgICAgaWYgKHN0YXR1cyA9PSBTVEFUX05PX1NJRykKKwkJCXsKKwkJCSAgaWYgKG9wdGlvbl9ib29sKE9QVF9ETlNTRUNfTk9fU0lHTikpCisJCQkgICAgc3RhdHVzID0gc2VuZF9jaGVja19zaWduKGZvcndhcmQsIG5vdywgaGVhZGVyLCBuLCBkYWVtb24tPm5hbWVidWZmLCBkYWVtb24tPmtleW5hbWUpOworCQkJICBlbHNlCisJCQkgICAgc3RhdHVzID0gU1RBVF9JTlNFQ1VSRTsKKwkJCX0KKwkJICAgIH0KKwkgICAgICAgCisJCSAgaWYgKHN0YXR1cyA9PSBTVEFUX05FRURfRFMgfHwgc3RhdHVzID09IFNUQVRfTkVFRF9EU19ORUcgfHwgc3RhdHVzID09IFNUQVRfTkVFRF9LRVkpCisJCSAgICBnb3RvIGFub3RoZXJrZXk7CisJCX0KKwkgICAgfQorCSAgCisJICBpZiAoc3RhdHVzID09IFNUQVRfVFJVTkNBVEVEKQorCSAgICBoZWFkZXItPmhiMyB8PSBIQjNfVEM7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBjaGFyICpyZXN1bHQ7CisJICAgICAgCisJICAgICAgaWYgKGZvcndhcmQtPndvcmtfY291bnRlciA9PSAwKQorCQlyZXN1bHQgPSAiQUJBTkRPTkVEIjsKKwkgICAgICBlbHNlCisJCXJlc3VsdCA9IChzdGF0dXMgPT0gU1RBVF9TRUNVUkUgPyAiU0VDVVJFIiA6IChzdGF0dXMgPT0gU1RBVF9JTlNFQ1VSRSA/ICJJTlNFQ1VSRSIgOiAiQk9HVVMiKSk7CisJICAgICAgCisJICAgICAgbG9nX3F1ZXJ5KEZfS0VZVEFHIHwgRl9TRUNTVEFULCAicmVzdWx0IiwgTlVMTCwgcmVzdWx0KTsKKwkgICAgfQorCSAgCisJICBub19jYWNoZV9kbnNzZWMgPSAwOworCSAgCisJICBpZiAoc3RhdHVzID09IFNUQVRfU0VDVVJFKQorCSAgICBjYWNoZV9zZWN1cmUgPSAxOworCSAgZWxzZSBpZiAoc3RhdHVzID09IFNUQVRfQk9HVVMpCisJICAgIG5vX2NhY2hlX2Ruc3NlYyA9IDE7CisJfQorI2VuZGlmICAgICAKKyAgICAgIAorICAgICAgLyogcmVzdG9yZSBDRCBiaXQgdG8gdGhlIHZhbHVlIGluIHRoZSBxdWVyeSAqLworICAgICAgaWYgKGZvcndhcmQtPmZsYWdzICYgRlJFQ19DSEVDS0lOR19ESVNBQkxFRCkKKwloZWFkZXItPmhiNCB8PSBIQjRfQ0Q7CisgICAgICBlbHNlCisJaGVhZGVyLT5oYjQgJj0gfkhCNF9DRDsKKyAgICAgIAorICAgICAgaWYgKChubiA9IHByb2Nlc3NfcmVwbHkoaGVhZGVyLCBub3csIHNlcnZlciwgKHNpemVfdCluLCBjaGVja19yZWJpbmQsIG5vX2NhY2hlX2Ruc3NlYywgY2FjaGVfc2VjdXJlLAorCQkJICAgICAgZm9yd2FyZC0+ZmxhZ3MgJiBGUkVDX0FEX1FVRVNUSU9OLCBmb3J3YXJkLT5mbGFncyAmIEZSRUNfRE9fUVVFU1RJT04sIAorCQkJICAgICAgZm9yd2FyZC0+ZmxhZ3MgJiBGUkVDX0FEREVEX1BIRUFERVIsIGZvcndhcmQtPmZsYWdzICYgRlJFQ19IQVNfU1VCTkVULCAmZm9yd2FyZC0+c291cmNlKSkpCisJeworCSAgaGVhZGVyLT5pZCA9IGh0b25zKGZvcndhcmQtPm9yaWdfaWQpOworCSAgaGVhZGVyLT5oYjQgfD0gSEI0X1JBOyAvKiByZWN1cnNpb24gaWYgYXZhaWxhYmxlICovCisJICBzZW5kX2Zyb20oZm9yd2FyZC0+ZmQsIG9wdGlvbl9ib29sKE9QVF9OT1dJTEQpIHx8IG9wdGlvbl9ib29sIChPUFRfQ0xFVkVSQklORCksIGRhZW1vbi0+cGFja2V0LCBubiwgCisJCSAgICAmZm9yd2FyZC0+c291cmNlLCAmZm9yd2FyZC0+ZGVzdCwgZm9yd2FyZC0+aWZhY2UpOworCX0KKyAgICAgIGZyZWVfZnJlYyhmb3J3YXJkKTsgLyogY2FuY2VsICovCisgICAgfQorfQorCisKK3ZvaWQgcmVjZWl2ZV9xdWVyeShzdHJ1Y3QgbGlzdGVuZXIgKmxpc3RlbiwgdGltZV90IG5vdykKK3sKKyAgc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciA9IChzdHJ1Y3QgZG5zX2hlYWRlciAqKWRhZW1vbi0+cGFja2V0OworICB1bmlvbiBteXNvY2thZGRyIHNvdXJjZV9hZGRyOworICB1bnNpZ25lZCBzaG9ydCB0eXBlOworICBzdHJ1Y3QgYWxsX2FkZHIgZHN0X2FkZHI7CisgIHN0cnVjdCBpbl9hZGRyIG5ldG1hc2ssIGRzdF9hZGRyXzQ7CisgIHNpemVfdCBtOworICBzc2l6ZV90IG47CisgIGludCBpZl9pbmRleCA9IDAsIGF1dGhfZG5zID0gMDsKKyNpZmRlZiBIQVZFX0FVVEgKKyAgaW50IGxvY2FsX2F1dGggPSAwOworI2VuZGlmCisgIHN0cnVjdCBpb3ZlYyBpb3ZbMV07CisgIHN0cnVjdCBtc2doZHIgbXNnOworICBzdHJ1Y3QgY21zZ2hkciAqY21wdHI7CisgIHVuaW9uIHsKKyAgICBzdHJ1Y3QgY21zZ2hkciBhbGlnbjsgLyogdGhpcyBlbnN1cmVzIGFsaWdubWVudCAqLworI2lmZGVmIEhBVkVfSVBWNgorICAgIGNoYXIgY29udHJvbDZbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IGluNl9wa3RpbmZvKSldOworI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX05FVFdPUkspCisgICAgY2hhciBjb250cm9sW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpbl9wa3RpbmZvKSldOworI2VsaWYgZGVmaW5lZChJUF9SRUNWRFNUQUREUikgJiYgZGVmaW5lZChIQVZFX1NPTEFSSVNfTkVUV09SSykKKyAgICBjaGFyIGNvbnRyb2xbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IGluX2FkZHIpKSArCisJCSBDTVNHX1NQQUNFKHNpemVvZih1bnNpZ25lZCBpbnQpKV07CisjZWxpZiBkZWZpbmVkKElQX1JFQ1ZEU1RBRERSKQorICAgIGNoYXIgY29udHJvbFtDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpICsKKwkJIENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9kbCkpXTsKKyNlbmRpZgorICB9IGNvbnRyb2xfdTsKKyNpZmRlZiBIQVZFX0lQVjYKKyAgIC8qIENhbiBhbHdheXMgZ2V0IHJlY3ZkIGludGVyZmFjZSBmb3IgSVB2NiAqLworICBpbnQgY2hlY2tfZHN0ID0gIW9wdGlvbl9ib29sKE9QVF9OT1dJTEQpIHx8IGxpc3Rlbi0+ZmFtaWx5ID09IEFGX0lORVQ2OworI2Vsc2UKKyAgaW50IGNoZWNrX2RzdCA9ICFvcHRpb25fYm9vbChPUFRfTk9XSUxEKTsKKyNlbmRpZgorCisgIC8qIHBhY2tldCBidWZmZXIgb3ZlcndyaXR0ZW4gKi8KKyAgZGFlbW9uLT5zcnZfc2F2ZSA9IE5VTEw7CisgIAorICBkc3RfYWRkcl80LnNfYWRkciA9IGRzdF9hZGRyLmFkZHIuYWRkcjQuc19hZGRyID0gMDsKKyAgbmV0bWFzay5zX2FkZHIgPSAwOworICAKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9OT1dJTEQpICYmIGxpc3Rlbi0+aWZhY2UpCisgICAgeworICAgICAgYXV0aF9kbnMgPSBsaXN0ZW4tPmlmYWNlLT5kbnNfYXV0aDsKKyAgICAgCisgICAgICBpZiAobGlzdGVuLT5mYW1pbHkgPT0gQUZfSU5FVCkKKwl7CisJICBkc3RfYWRkcl80ID0gZHN0X2FkZHIuYWRkci5hZGRyNCA9IGxpc3Rlbi0+aWZhY2UtPmFkZHIuaW4uc2luX2FkZHI7CisJICBuZXRtYXNrID0gbGlzdGVuLT5pZmFjZS0+bmV0bWFzazsKKwl9CisgICAgfQorICAKKyAgaW92WzBdLmlvdl9iYXNlID0gZGFlbW9uLT5wYWNrZXQ7CisgIGlvdlswXS5pb3ZfbGVuID0gZGFlbW9uLT5lZG5zX3BrdHN6OworICAgIAorICBtc2cubXNnX2NvbnRyb2wgPSBjb250cm9sX3UuY29udHJvbDsKKyAgbXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNvbnRyb2xfdSk7CisgIG1zZy5tc2dfZmxhZ3MgPSAwOworICBtc2cubXNnX25hbWUgPSAmc291cmNlX2FkZHI7CisgIG1zZy5tc2dfbmFtZWxlbiA9IHNpemVvZihzb3VyY2VfYWRkcik7CisgIG1zZy5tc2dfaW92ID0gaW92OworICBtc2cubXNnX2lvdmxlbiA9IDE7CisgIAorICBpZiAoKG4gPSByZWN2bXNnKGxpc3Rlbi0+ZmQsICZtc2csIDApKSA9PSAtMSkKKyAgICByZXR1cm47CisgIAorICBpZiAobiA8IChpbnQpc2l6ZW9mKHN0cnVjdCBkbnNfaGVhZGVyKSB8fCAKKyAgICAgIChtc2cubXNnX2ZsYWdzICYgTVNHX1RSVU5DKSB8fAorICAgICAgKGhlYWRlci0+aGIzICYgSEIzX1FSKSkKKyAgICByZXR1cm47CisgIAorICBzb3VyY2VfYWRkci5zYS5zYV9mYW1pbHkgPSBsaXN0ZW4tPmZhbWlseTsKKyAgCisgIGlmIChsaXN0ZW4tPmZhbWlseSA9PSBBRl9JTkVUKQorICAgIHsKKyAgICAgICAvKiBTb3VyY2UtcG9ydCA9PSAwIGlzIGFuIGVycm9yLCB3ZSBjYW4ndCBzZW5kIGJhY2sgdG8gdGhhdC4gCisJICBodHRwOi8vd3d3LmlldGYub3JnL21haWwtYXJjaGl2ZS93ZWIvZG5zb3AvY3VycmVudC9tc2cxMTQ0MS5odG1sICovCisgICAgICBpZiAoc291cmNlX2FkZHIuaW4uc2luX3BvcnQgPT0gMCkKKwlyZXR1cm47CisgICAgfQorI2lmZGVmIEhBVkVfSVBWNgorICBlbHNlCisgICAgeworICAgICAgLyogU291cmNlLXBvcnQgPT0gMCBpcyBhbiBlcnJvciwgd2UgY2FuJ3Qgc2VuZCBiYWNrIHRvIHRoYXQuICovCisgICAgICBpZiAoc291cmNlX2FkZHIuaW42LnNpbjZfcG9ydCA9PSAwKQorCXJldHVybjsKKyAgICAgIHNvdXJjZV9hZGRyLmluNi5zaW42X2Zsb3dpbmZvID0gMDsKKyAgICB9CisjZW5kaWYKKyAgCisgIC8qIFdlIGNhbiBiZSBjb25maWd1cmVkIHRvIG9ubHkgYWNjZXB0IHF1ZXJpZXMgZnJvbSBhdC1tb3N0LW9uZS1ob3AtYXdheSBhZGRyZXNzZXMuICovCisgIGlmIChvcHRpb25fYm9vbChPUFRfTE9DQUxfU0VSVklDRSkpCisgICAgeworICAgICAgc3RydWN0IGFkZHJsaXN0ICphZGRyOworI2lmZGVmIEhBVkVfSVBWNgorICAgICAgaWYgKGxpc3Rlbi0+ZmFtaWx5ID09IEFGX0lORVQ2KSAKKwl7CisJICBmb3IgKGFkZHIgPSBkYWVtb24tPmludGVyZmFjZV9hZGRyczsgYWRkcjsgYWRkciA9IGFkZHItPm5leHQpCisJICAgIGlmICgoYWRkci0+ZmxhZ3MgJiBBRERSTElTVF9JUFY2KSAmJgorCQlpc19zYW1lX25ldDYoJmFkZHItPmFkZHIuYWRkci5hZGRyNiwgJnNvdXJjZV9hZGRyLmluNi5zaW42X2FkZHIsIGFkZHItPnByZWZpeGxlbikpCisJICAgICAgYnJlYWs7CisJfQorICAgICAgZWxzZQorI2VuZGlmCisJeworCSAgc3RydWN0IGluX2FkZHIgbmV0bWFzazsKKwkgIGZvciAoYWRkciA9IGRhZW1vbi0+aW50ZXJmYWNlX2FkZHJzOyBhZGRyOyBhZGRyID0gYWRkci0+bmV4dCkKKwkgICAgeworCSAgICAgIG5ldG1hc2suc19hZGRyID0gaHRvbmwofihpbl9hZGRyX3QpMCA8PCAoMzIgLSBhZGRyLT5wcmVmaXhsZW4pKTsKKwkgICAgICBpZiAoIShhZGRyLT5mbGFncyAmIEFERFJMSVNUX0lQVjYpICYmCisJCSAgaXNfc2FtZV9uZXQoYWRkci0+YWRkci5hZGRyLmFkZHI0LCBzb3VyY2VfYWRkci5pbi5zaW5fYWRkciwgbmV0bWFzaykpCisJCWJyZWFrOworCSAgICB9CisJfQorICAgICAgaWYgKCFhZGRyKQorCXsKKwkgIHN0YXRpYyBpbnQgd2FybmVkID0gMDsKKwkgIGlmICghd2FybmVkKQorCSAgICB7CisJICAgICAgbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJJZ25vcmluZyBxdWVyeSBmcm9tIG5vbi1sb2NhbCBuZXR3b3JrIikpOworCSAgICAgIHdhcm5lZCA9IDE7CisJICAgIH0KKwkgIHJldHVybjsKKwl9CisgICAgfQorCQkKKyAgaWYgKGNoZWNrX2RzdCkKKyAgICB7CisgICAgICBzdHJ1Y3QgaWZyZXEgaWZyOworCisgICAgICBpZiAobXNnLm1zZ19jb250cm9sbGVuIDwgc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSkKKwlyZXR1cm47CisKKyNpZiBkZWZpbmVkKEhBVkVfTElOVVhfTkVUV09SSykKKyAgICAgIGlmIChsaXN0ZW4tPmZhbWlseSA9PSBBRl9JTkVUKQorCWZvciAoY21wdHIgPSBDTVNHX0ZJUlNUSERSKCZtc2cpOyBjbXB0cjsgY21wdHIgPSBDTVNHX05YVEhEUigmbXNnLCBjbXB0cikpCisJICBpZiAoY21wdHItPmNtc2dfbGV2ZWwgPT0gSVBQUk9UT19JUCAmJiBjbXB0ci0+Y21zZ190eXBlID09IElQX1BLVElORk8pCisJICAgIHsKKwkgICAgICB1bmlvbiB7CisJCXVuc2lnbmVkIGNoYXIgKmM7CisJCXN0cnVjdCBpbl9wa3RpbmZvICpwOworCSAgICAgIH0gcDsKKwkgICAgICBwLmMgPSBDTVNHX0RBVEEoY21wdHIpOworCSAgICAgIGRzdF9hZGRyXzQgPSBkc3RfYWRkci5hZGRyLmFkZHI0ID0gcC5wLT5pcGlfc3BlY19kc3Q7CisJICAgICAgaWZfaW5kZXggPSBwLnAtPmlwaV9pZmluZGV4OworCSAgICB9CisjZWxpZiBkZWZpbmVkKElQX1JFQ1ZEU1RBRERSKSAmJiBkZWZpbmVkKElQX1JFQ1ZJRikKKyAgICAgIGlmIChsaXN0ZW4tPmZhbWlseSA9PSBBRl9JTkVUKQorCXsKKwkgIGZvciAoY21wdHIgPSBDTVNHX0ZJUlNUSERSKCZtc2cpOyBjbXB0cjsgY21wdHIgPSBDTVNHX05YVEhEUigmbXNnLCBjbXB0cikpCisJICAgIHsKKwkgICAgICB1bmlvbiB7CisJCXVuc2lnbmVkIGNoYXIgKmM7CisJCXVuc2lnbmVkIGludCAqaTsKKwkJc3RydWN0IGluX2FkZHIgKmE7CisjaWZuZGVmIEhBVkVfU09MQVJJU19ORVRXT1JLCisJCXN0cnVjdCBzb2NrYWRkcl9kbCAqczsKKyNlbmRpZgorCSAgICAgIH0gcDsKKwkgICAgICAgcC5jID0gQ01TR19EQVRBKGNtcHRyKTsKKwkgICAgICAgaWYgKGNtcHRyLT5jbXNnX2xldmVsID09IElQUFJPVE9fSVAgJiYgY21wdHItPmNtc2dfdHlwZSA9PSBJUF9SRUNWRFNUQUREUikKKwkJIGRzdF9hZGRyXzQgPSBkc3RfYWRkci5hZGRyLmFkZHI0ID0gKihwLmEpOworCSAgICAgICBlbHNlIGlmIChjbXB0ci0+Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQICYmIGNtcHRyLT5jbXNnX3R5cGUgPT0gSVBfUkVDVklGKQorI2lmZGVmIEhBVkVfU09MQVJJU19ORVRXT1JLCisJCSBpZl9pbmRleCA9ICoocC5pKTsKKyNlbHNlCisgIAkgICAgICAgICBpZl9pbmRleCA9IHAucy0+c2RsX2luZGV4OworI2VuZGlmCisJICAgIH0KKwl9CisjZW5kaWYKKyAgICAgIAorI2lmZGVmIEhBVkVfSVBWNgorICAgICAgaWYgKGxpc3Rlbi0+ZmFtaWx5ID09IEFGX0lORVQ2KQorCXsKKwkgIGZvciAoY21wdHIgPSBDTVNHX0ZJUlNUSERSKCZtc2cpOyBjbXB0cjsgY21wdHIgPSBDTVNHX05YVEhEUigmbXNnLCBjbXB0cikpCisJICAgIGlmIChjbXB0ci0+Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQVjYgJiYgY21wdHItPmNtc2dfdHlwZSA9PSBkYWVtb24tPnY2cGt0aW5mbykKKwkgICAgICB7CisJCXVuaW9uIHsKKwkJICB1bnNpZ25lZCBjaGFyICpjOworCQkgIHN0cnVjdCBpbjZfcGt0aW5mbyAqcDsKKwkJfSBwOworCQlwLmMgPSBDTVNHX0RBVEEoY21wdHIpOworCQkgIAorCQlkc3RfYWRkci5hZGRyLmFkZHI2ID0gcC5wLT5pcGk2X2FkZHI7CisJCWlmX2luZGV4ID0gcC5wLT5pcGk2X2lmaW5kZXg7CisJICAgICAgfQorCX0KKyNlbmRpZgorICAgICAgCisgICAgICAvKiBlbmZvcmNlIGF2YWlsYWJsZSBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiAqLworICAgICAgCisgICAgICBpZiAoIWluZGV4dG9uYW1lKGxpc3Rlbi0+ZmQsIGlmX2luZGV4LCBpZnIuaWZyX25hbWUpKQorCXJldHVybjsKKyAgICAgIAorICAgICAgaWYgKCFpZmFjZV9jaGVjayhsaXN0ZW4tPmZhbWlseSwgJmRzdF9hZGRyLCBpZnIuaWZyX25hbWUsICZhdXRoX2RucykpCisJeworCSAgIGlmICghb3B0aW9uX2Jvb2woT1BUX0NMRVZFUkJJTkQpKQorCSAgICAgZW51bWVyYXRlX2ludGVyZmFjZXMoMCk7IAorCSAgIGlmICghbG9vcGJhY2tfZXhjZXB0aW9uKGxpc3Rlbi0+ZmQsIGxpc3Rlbi0+ZmFtaWx5LCAmZHN0X2FkZHIsIGlmci5pZnJfbmFtZSkgJiYKKwkgICAgICAgIWxhYmVsX2V4Y2VwdGlvbihpZl9pbmRleCwgbGlzdGVuLT5mYW1pbHksICZkc3RfYWRkcikpCisJICAgICByZXR1cm47CisJfQorCisgICAgICBpZiAobGlzdGVuLT5mYW1pbHkgPT0gQUZfSU5FVCAmJiBvcHRpb25fYm9vbChPUFRfTE9DQUxJU0UpKQorCXsKKwkgIHN0cnVjdCBpcmVjICppZmFjZTsKKwkgIAorCSAgLyogZ2V0IHRoZSBuZXRtYXNrIG9mIHRoZSBpbnRlcmZhY2Ugd2hjaCBoYXMgdGhlIGFkZHJlc3Mgd2Ugd2VyZSBzZW50IHRvLgorCSAgICAgVGhpcyBpcyBubyBuZWNjZXNzYXJpbHkgdGhlIGludGVyZmFjZSB3ZSBhcnJpdmVkIG9uLiAqLworCSAgCisJICBmb3IgKGlmYWNlID0gZGFlbW9uLT5pbnRlcmZhY2VzOyBpZmFjZTsgaWZhY2UgPSBpZmFjZS0+bmV4dCkKKwkgICAgaWYgKGlmYWNlLT5hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUICYmCisJCWlmYWNlLT5hZGRyLmluLnNpbl9hZGRyLnNfYWRkciA9PSBkc3RfYWRkcl80LnNfYWRkcikKKwkgICAgICBicmVhazsKKwkgIAorCSAgLyogaW50ZXJmYWNlIG1heSBiZSBuZXcgKi8KKwkgIGlmICghaWZhY2UgJiYgIW9wdGlvbl9ib29sKE9QVF9DTEVWRVJCSU5EKSkKKwkgICAgZW51bWVyYXRlX2ludGVyZmFjZXMoMCk7IAorCSAgCisJICBmb3IgKGlmYWNlID0gZGFlbW9uLT5pbnRlcmZhY2VzOyBpZmFjZTsgaWZhY2UgPSBpZmFjZS0+bmV4dCkKKwkgICAgaWYgKGlmYWNlLT5hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUICYmCisJCWlmYWNlLT5hZGRyLmluLnNpbl9hZGRyLnNfYWRkciA9PSBkc3RfYWRkcl80LnNfYWRkcikKKwkgICAgICBicmVhazsKKwkgIAorCSAgLyogSWYgd2UgZmFpbGVkLCBhYmFuZG9uIGxvY2FsaXNhdGlvbiAqLworCSAgaWYgKGlmYWNlKQorCSAgICBuZXRtYXNrID0gaWZhY2UtPm5ldG1hc2s7CisJICBlbHNlCisJICAgIGRzdF9hZGRyXzQuc19hZGRyID0gMDsKKwl9CisgICAgfQorICAgCisgIC8qIGxvZ19xdWVyeSBnZXRzIGNhbGxlZCBpbmRpcmVjdGx5IGFsbCBvdmVyIHRoZSBwbGFjZSwgc28gCisgICAgIHBhc3MgdGhlc2UgaW4gZ2xvYmFsIHZhcmlhYmxlcyAtIHNvcnJ5LiAqLworICBkYWVtb24tPmxvZ19kaXNwbGF5X2lkID0gKytkYWVtb24tPmxvZ19pZDsKKyAgZGFlbW9uLT5sb2dfc291cmNlX2FkZHIgPSAmc291cmNlX2FkZHI7CisgIAorICBpZiAoZXh0cmFjdF9yZXF1ZXN0KGhlYWRlciwgKHNpemVfdCluLCBkYWVtb24tPm5hbWVidWZmLCAmdHlwZSkpCisgICAgeworI2lmZGVmIEhBVkVfQVVUSAorICAgICAgc3RydWN0IGF1dGhfem9uZSAqem9uZTsKKyNlbmRpZgorICAgICAgY2hhciAqdHlwZXMgPSBxdWVyeXN0cihhdXRoX2RucyA/ICJhdXRoIiA6ICJxdWVyeSIsIHR5cGUpOworICAgICAgCisgICAgICBpZiAobGlzdGVuLT5mYW1pbHkgPT0gQUZfSU5FVCkgCisJbG9nX3F1ZXJ5KEZfUVVFUlkgfCBGX0lQVjQgfCBGX0ZPUldBUkQsIGRhZW1vbi0+bmFtZWJ1ZmYsIAorCQkgIChzdHJ1Y3QgYWxsX2FkZHIgKikmc291cmNlX2FkZHIuaW4uc2luX2FkZHIsIHR5cGVzKTsKKyNpZmRlZiBIQVZFX0lQVjYKKyAgICAgIGVsc2UKKwlsb2dfcXVlcnkoRl9RVUVSWSB8IEZfSVBWNiB8IEZfRk9SV0FSRCwgZGFlbW9uLT5uYW1lYnVmZiwgCisJCSAgKHN0cnVjdCBhbGxfYWRkciAqKSZzb3VyY2VfYWRkci5pbjYuc2luNl9hZGRyLCB0eXBlcyk7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfQVVUSAorICAgICAgLyogZmluZCBxdWVyaWVzIGZvciB6b25lcyB3ZSdyZSBhdXRob3JpdGF0aXZlIGZvciwgYW5kIGFuc3dlciB0aGVtIGRpcmVjdGx5ICovCisgICAgICBpZiAoIWF1dGhfZG5zKQorCWZvciAoem9uZSA9IGRhZW1vbi0+YXV0aF96b25lczsgem9uZTsgem9uZSA9IHpvbmUtPm5leHQpCisJICBpZiAoaW5fem9uZSh6b25lLCBkYWVtb24tPm5hbWVidWZmLCBOVUxMKSkKKwkgICAgeworCSAgICAgIGF1dGhfZG5zID0gMTsKKwkgICAgICBsb2NhbF9hdXRoID0gMTsKKwkgICAgICBicmVhazsKKwkgICAgfQorI2VuZGlmCisgICAgICAKKyNpZmRlZiBIQVZFX0xPT1AKKyAgICAgIC8qIENoZWNrIGZvciBmb3J3YXJkaW5nIGxvb3AgKi8KKyAgICAgIGlmIChkZXRlY3RfbG9vcChkYWVtb24tPm5hbWVidWZmLCB0eXBlKSkKKwlyZXR1cm47CisjZW5kaWYKKyAgICB9CisgIAorI2lmZGVmIEhBVkVfQVVUSAorICBpZiAoYXV0aF9kbnMpCisgICAgeworICAgICAgbSA9IGFuc3dlcl9hdXRoKGhlYWRlciwgKChjaGFyICopIGhlYWRlcikgKyBkYWVtb24tPnBhY2tldF9idWZmX3N6LCAoc2l6ZV90KW4sIG5vdywgJnNvdXJjZV9hZGRyLCBsb2NhbF9hdXRoKTsKKyAgICAgIGlmIChtID49IDEpCisJeworCSAgc2VuZF9mcm9tKGxpc3Rlbi0+ZmQsIG9wdGlvbl9ib29sKE9QVF9OT1dJTEQpIHx8IG9wdGlvbl9ib29sKE9QVF9DTEVWRVJCSU5EKSwKKwkJICAgIChjaGFyICopaGVhZGVyLCBtLCAmc291cmNlX2FkZHIsICZkc3RfYWRkciwgaWZfaW5kZXgpOworCSAgZGFlbW9uLT5hdXRoX2Fuc3dlcisrOworCX0KKyAgICB9CisgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgIGludCBhZF9yZXFkLCBkb19iaXQ7CisgICAgICBtID0gYW5zd2VyX3JlcXVlc3QoaGVhZGVyLCAoKGNoYXIgKikgaGVhZGVyKSArIGRhZW1vbi0+cGFja2V0X2J1ZmZfc3osIChzaXplX3QpbiwgCisJCQkgZHN0X2FkZHJfNCwgbmV0bWFzaywgbm93LCAmYWRfcmVxZCwgJmRvX2JpdCk7CisgICAgICAKKyAgICAgIGlmIChtID49IDEpCisJeworCSAgc2VuZF9mcm9tKGxpc3Rlbi0+ZmQsIG9wdGlvbl9ib29sKE9QVF9OT1dJTEQpIHx8IG9wdGlvbl9ib29sKE9QVF9DTEVWRVJCSU5EKSwKKwkJICAgIChjaGFyICopaGVhZGVyLCBtLCAmc291cmNlX2FkZHIsICZkc3RfYWRkciwgaWZfaW5kZXgpOworCSAgZGFlbW9uLT5sb2NhbF9hbnN3ZXIrKzsKKwl9CisgICAgICBlbHNlIGlmIChmb3J3YXJkX3F1ZXJ5KGxpc3Rlbi0+ZmQsICZzb3VyY2VfYWRkciwgJmRzdF9hZGRyLCBpZl9pbmRleCwKKwkJCSAgICAgaGVhZGVyLCAoc2l6ZV90KW4sIG5vdywgTlVMTCwgYWRfcmVxZCwgZG9fYml0KSkKKwlkYWVtb24tPnF1ZXJpZXNfZm9yd2FyZGVkKys7CisgICAgICBlbHNlCisJZGFlbW9uLT5sb2NhbF9hbnN3ZXIrKzsKKyAgICB9Cit9CisKKyNpZmRlZiBIQVZFX0ROU1NFQworCisvKiBVRFA6IHdlJ3ZlIGdvdCBhbiB1bnNpZ25lZCBhbnN3ZXIsIHJldHVybiBTVEFUX0lOU0VDVVJFIGlmIHdlIGNhbiBwcm92ZSB0aGVyZSdzIG5vIERTCisgICBhbmQgdGhlcmVmb3JlIHRoZSBhbnN3ZXIgc2hvdWxkbid0IGJlIHNpZ25lZCwgb3IgU1RBVF9CT0dVUyBpZiBpdCBzaG91bGQgYmUsIG9yIAorICAgU1RBVF9ORUVEX0RTX05FRyBhbmQga2V5bmFtZSBpZiB3ZSBuZWVkIHRvIGRvIHRoZSBxdWVyeS4gKi8KK3N0YXRpYyBpbnQgc2VuZF9jaGVja19zaWduKHN0cnVjdCBmcmVjICpmb3J3YXJkLCB0aW1lX3Qgbm93LCBzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgCisJCQkgICBjaGFyICpuYW1lLCBjaGFyICprZXluYW1lKQoreworICBpbnQgc3RhdHVzID0gZG5zc2VjX2NoYXNlX2NuYW1lKG5vdywgaGVhZGVyLCBwbGVuLCBuYW1lLCBrZXluYW1lKTsKKyAgCisgIGlmIChzdGF0dXMgIT0gU1RBVF9JTlNFQ1VSRSkKKyAgICByZXR1cm4gc3RhdHVzOworCisgIC8qIFN0b3JlIHRoZSBkb21haW4gd2UncmUgdHJ5aW5nIHRvIGNoZWNrLiAqLworICBmb3J3YXJkLT5uYW1lX3N0YXJ0ID0gc3RybGVuKG5hbWUpOworICBmb3J3YXJkLT5uYW1lX2xlbiA9IGZvcndhcmQtPm5hbWVfc3RhcnQgKyAxOworICBpZiAoIShmb3J3YXJkLT5vcmlnX2RvbWFpbiA9IGJsb2NrZGF0YV9hbGxvYyhuYW1lLCBmb3J3YXJkLT5uYW1lX2xlbikpKQorICAgIHJldHVybiBTVEFUX0JPR1VTOworICAKKyAgcmV0dXJuIGRvX2NoZWNrX3NpZ24oZm9yd2FyZCwgMCwgbm93LCBuYW1lLCBrZXluYW1lKTsKK30KKyAKKy8qIFdlIGVpdGhlciBoYXZlIGEgYSByZXBseSAoaGVhZGVyIG5vbi1OVUxMLCBvciB3ZSBuZWVkIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgaW4gdGhlIGNhY2hlICovIAorc3RhdGljIGludCBkb19jaGVja19zaWduKHN0cnVjdCBmcmVjICpmb3J3YXJkLCBpbnQgc3RhdHVzLCB0aW1lX3Qgbm93LCBjaGFyICpuYW1lLCBjaGFyICprZXluYW1lKQoreworICAvKiBnZXQgZG9tYWluIHdlJ3JlIGNoZWNraW5nIGJhY2sgZnJvbSBibG9ja2RhdGEgc3RvcmUsIGl0J3Mgc3RvcmVkIG9uIHRoZSBvcmlnaW5hbCBxdWVyeS4gKi8KKyAgd2hpbGUgKGZvcndhcmQtPmRlcGVuZGVudCkKKyAgICBmb3J3YXJkID0gZm9yd2FyZC0+ZGVwZW5kZW50OworCisgIGJsb2NrZGF0YV9yZXRyaWV2ZShmb3J3YXJkLT5vcmlnX2RvbWFpbiwgZm9yd2FyZC0+bmFtZV9sZW4sIG5hbWUpOworICAKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgY2hhciAqcDsgCisKKyAgICAgIGlmIChzdGF0dXMgPT0gMCkKKwl7CisJICBzdHJ1Y3QgY3JlYyAqY3JlY3A7CisKKwkgIC8qIEhhdmVuJ3QgcmVjZWl2ZWQgYW5zd2VyLCBzZWUgaWYgaW4gY2FjaGUgKi8KKwkgIGlmICghKGNyZWNwID0gY2FjaGVfZmluZF9ieV9uYW1lKE5VTEwsICZuYW1lW2ZvcndhcmQtPm5hbWVfc3RhcnRdLCBub3csIEZfRFMpKSkKKwkgICAgeworCSAgICAgIC8qIHB1dCBuYW1lIG9mIERTIHJlY29yZCB3ZSdyZSBtaXNzaW5nIGludG8ga2V5bmFtZSAqLworCSAgICAgIHN0cmNweShrZXluYW1lLCAmbmFtZVtmb3J3YXJkLT5uYW1lX3N0YXJ0XSk7CisJICAgICAgLyogYW5kIHdhaXQgZm9yIHJlcGx5IHRvIGFycml2ZSAqLworCSAgICAgIHJldHVybiBTVEFUX05FRURfRFNfTkVHOworCSAgICB9CisKKwkgIC8qIEZfRE5TU0VDT0sgbWlzdXNlZCBpbiBEUyBjYWNoZSByZWNvcmRzIHRvIG5vbi1leGlzdGFuY2Ugb2YgTlMgcmVjb3JkICovIAorCSAgaWYgKCEoY3JlY3AtPmZsYWdzICYgRl9ORUcpKQorCSAgICBzdGF0dXMgPSBTVEFUX1NFQ1VSRTsKKwkgIGVsc2UgaWYgKGNyZWNwLT5mbGFncyAmIEZfRE5TU0VDT0spCisJICAgIHN0YXR1cyA9IFNUQVRfTk9fRFM7CisJICBlbHNlCisJICAgIHN0YXR1cyA9IFNUQVRfTk9fTlM7CisJfQorICAgICAgCisgICAgICAvKiBIYXZlIGVudGVyZWQgbm9uLXNpZ25lZCBwYXJ0IG9mIEROUyB0cmVlLiAqLyAKKyAgICAgIGlmIChzdGF0dXMgPT0gU1RBVF9OT19EUykKKwlyZXR1cm4gU1RBVF9JTlNFQ1VSRTsKKworICAgICAgaWYgKHN0YXR1cyA9PSBTVEFUX0JPR1VTKQorCXJldHVybiBTVEFUX0JPR1VTOworCisgICAgICAvKiBUaGVyZSdzIGEgcHJvdmVuIERTIHJlY29yZCwgb3Igd2UncmUgd2l0aGluIGEgem9uZSwgd2hlcmUgdGhlcmUgZG9lc24ndCBuZWVkCisJIHRvIGJlIGEgRFMgcmVjb3JkLiBBZGQgYSBuYW1lIGFuZCB0cnkgYWdhaW4uIAorCSBJZiB3ZSd2ZSBhbHJlYWR5IHRyaWVkIHRoZSB3aG9sZSBuYW1lLCB0aGVuIGZhaWwgKi8KKworICAgICAgaWYgKGZvcndhcmQtPm5hbWVfc3RhcnQgPT0gMCkKKwlyZXR1cm4gU1RBVF9CT0dVUzsKKyAgICAgIAorICAgICAgZm9yIChwID0gJm5hbWVbZm9yd2FyZC0+bmFtZV9zdGFydC0yXTsgKCpwICE9ICcuJykgJiYgKHAgIT0gbmFtZSk7IHAtLSk7CisgICAgICAKKyAgICAgIGlmIChwICE9IG5hbWUpCisJcCsrOworICAgICAgCisgICAgICBmb3J3YXJkLT5uYW1lX3N0YXJ0ID0gcCAtIG5hbWU7CisgICAgICBzdGF0dXMgPSAwOyAvKiBmb3JjZSB0byBjYWNoZSB3aGVuIHdlIGl0ZXJhdGUuICovCisgICAgfQorfQorCisvKiBNb3ZlIHRvd2FyZCB0aGUgcm9vdCwgdW50aWwgd2UgZmluZCBhIHNpZ25lZCBub24tZXhpc3RhbmNlIG9mIGEgRFMsIGluIHdoaWNoIGNhc2UKKyAgIGFuIHVuc2lnbmVkIGFuc3dlciBpcyBPSywgb3Igd2UgZmluZCBhIHNpZ25lZCBEUywgaW4gd2hpY2ggY2FzZSB0aGVyZSBzaG91bGQgYmUgCisgICBhIHNpZ25hdHVyZSwgYW5kIHRoZSBhbnN3ZXIgaXMgQk9HVVMgKi8KK3N0YXRpYyBpbnQgIHRjcF9jaGVja19mb3JfdW5zaWduZWRfem9uZSh0aW1lX3Qgbm93LCBzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgaW50IGNsYXNzLCBjaGFyICpuYW1lLCAKKwkJCQkJY2hhciAqa2V5bmFtZSwgc3RydWN0IHNlcnZlciAqc2VydmVyLCBpbnQgKmtleWNvdW50KQoreworICBzaXplX3QgbTsKKyAgdW5zaWduZWQgY2hhciAqcGFja2V0LCAqcGF5bG9hZDsKKyAgdTE2ICpsZW5ndGg7CisgIGludCBzdGF0dXMsIG5hbWVfbGVuOworICBzdHJ1Y3QgYmxvY2tkYXRhICpibG9jazsKKworICBjaGFyICpuYW1lX3N0YXJ0OworCisgIC8qIEdldCBmaXJzdCBpbnNlY3VyZSBlbnRyeSBpbiBDTkFNRSBjaGFpbiAqLworICBzdGF0dXMgPSB0Y3Bfa2V5X3JlY3Vyc2Uobm93LCBTVEFUX0NIQVNFX0NOQU1FLCBoZWFkZXIsIHBsZW4sIGNsYXNzLCBuYW1lLCBrZXluYW1lLCBzZXJ2ZXIsIGtleWNvdW50KTsKKyAgaWYgKHN0YXR1cyA9PSBTVEFUX0JPR1VTKQorICAgIHJldHVybiBTVEFUX0JPR1VTOworICAKKyAgaWYgKCEocGFja2V0ID0gd2hpbmVfbWFsbG9jKDY1NTM2ICsgTUFYRE5BTUUgKyBSUkZJWEVEU1ogKyBzaXplb2YodTE2KSkpKQorICAgIHJldHVybiBTVEFUX0JPR1VTOworICAKKyAgcGF5bG9hZCA9ICZwYWNrZXRbMl07CisgIGhlYWRlciA9IChzdHJ1Y3QgZG5zX2hlYWRlciAqKXBheWxvYWQ7CisgIGxlbmd0aCA9ICh1MTYgKilwYWNrZXQ7CisKKyAgLyogU3Rhc2ggdGhlIG5hbWUgYXdheSwgc2luY2UgdGhlIGJ1ZmZlciB3aWxsIGJlIHRyYXNoZWQgd2hlbiB3ZSByZWN1cnNlICovCisgIG5hbWVfbGVuID0gc3RybGVuKG5hbWUpICsgMTsKKyAgbmFtZV9zdGFydCA9IG5hbWUgKyBuYW1lX2xlbiAtIDE7CisgIAorICBpZiAoIShibG9jayA9IGJsb2NrZGF0YV9hbGxvYyhuYW1lLCBuYW1lX2xlbikpKQorICAgIHsKKyAgICAgIGZyZWUocGFja2V0KTsKKyAgICAgIHJldHVybiBTVEFUX0JPR1VTOworICAgIH0KKworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyIGMxLCBjMjsKKyAgICAgIHN0cnVjdCBjcmVjICpjcmVjcDsKKworICAgICAgaWYgKC0tKCprZXljb3VudCkgPT0gMCkKKwl7CisJICBmcmVlKHBhY2tldCk7CisJICBibG9ja2RhdGFfZnJlZShibG9jayk7CisJICByZXR1cm4gU1RBVF9CT0dVUzsgICAgCisJfQorICAgICAgCisgICAgICB3aGlsZSAoKGNyZWNwID0gY2FjaGVfZmluZF9ieV9uYW1lKE5VTEwsIG5hbWVfc3RhcnQsIG5vdywgRl9EUykpKQorCXsgICAgICAKKwkgIGlmICgoY3JlY3AtPmZsYWdzICYgRl9ORUcpICYmIChjcmVjcC0+ZmxhZ3MgJiBGX0ROU1NFQ09LKSkKKwkgICAgeworCSAgICAgIC8qIEZvdW5kIGEgc2VjdXJlIGRlbmlhbCBvZiBEUyAtIGRlbGVnYXRpb24gaXMgaW5kZWVkIGluc2VjdXJlICovCisJICAgICAgZnJlZShwYWNrZXQpOworCSAgICAgIGJsb2NrZGF0YV9mcmVlKGJsb2NrKTsKKwkgICAgICByZXR1cm4gU1RBVF9JTlNFQ1VSRTsKKwkgICAgfQorICAgICAgCisJICAvKiBIZXJlLCBlaXRoZXIgdGhlcmUncyBhIHNlY3VyZSBEUywgb3Igbm8gTlMgYW5kIG5vIERTLCBhbmQgdGhlcmVmb3JlIG5vIGRlbGVnYXRpb24uCisJICAgICBBZGQgYW5vdGhlciBsYWJlbCBhbmQgY29udGludWUuICovCisgCisJICBpZiAobmFtZV9zdGFydCA9PSBuYW1lKQorCSAgICB7CisJICAgICAgZnJlZShwYWNrZXQpOworCSAgICAgIGJsb2NrZGF0YV9mcmVlKGJsb2NrKTsKKwkgICAgICByZXR1cm4gU1RBVF9CT0dVUzsgLyogcnVuIG91dCBvZiBsYWJlbHMgKi8KKwkgICAgfQorCSAgCisJICBuYW1lX3N0YXJ0IC09IDI7CisJICB3aGlsZSAoKm5hbWVfc3RhcnQgIT0gJy4nICYmIG5hbWVfc3RhcnQgIT0gbmFtZSkgCisJICAgIG5hbWVfc3RhcnQtLTsKKwkgIGlmIChuYW1lX3N0YXJ0ICE9IG5hbWUpCisJICAgIG5hbWVfc3RhcnQrKzsKKwl9CisgICAgICAKKyAgICAgIC8qIENhbid0IGZpbmQgaXQgaW4gdGhlIGNhY2hlLCBoYXZlIHRvIHNlbmQgYSBxdWVyeSAqLworCisgICAgICBtID0gZG5zc2VjX2dlbmVyYXRlX3F1ZXJ5KGhlYWRlciwgKChjaGFyICopIGhlYWRlcikgKyA2NTUzNiwgbmFtZV9zdGFydCwgY2xhc3MsIFRfRFMsICZzZXJ2ZXItPmFkZHIpOworICAgICAgCisgICAgICAqbGVuZ3RoID0gaHRvbnMobSk7CisgICAgICAKKyAgICAgIGlmIChyZWFkX3dyaXRlKHNlcnZlci0+dGNwZmQsIHBhY2tldCwgbSArIHNpemVvZih1MTYpLCAwKSAmJgorCSAgcmVhZF93cml0ZShzZXJ2ZXItPnRjcGZkLCAmYzEsIDEsIDEpICYmCisJICByZWFkX3dyaXRlKHNlcnZlci0+dGNwZmQsICZjMiwgMSwgMSkgJiYKKwkgIHJlYWRfd3JpdGUoc2VydmVyLT50Y3BmZCwgcGF5bG9hZCwgKGMxIDw8IDgpIHwgYzIsIDEpKQorCXsKKwkgIG0gPSAoYzEgPDwgOCkgfCBjMjsKKwkgIAorCSAgLyogTm90ZSB0aGlzIHRyYXNoZXMgYWxsIHRocmVlIG5hbWUgd29ya3NwYWNlcyAqLworCSAgc3RhdHVzID0gdGNwX2tleV9yZWN1cnNlKG5vdywgU1RBVF9ORUVEX0RTX05FRywgaGVhZGVyLCBtLCBjbGFzcywgbmFtZSwga2V5bmFtZSwgc2VydmVyLCBrZXljb3VudCk7CisJICAKKwkgIGlmIChzdGF0dXMgPT0gU1RBVF9OT19EUykKKwkgICAgeworCSAgICAgIC8qIEZvdW5kIGEgc2VjdXJlIGRlbmlhbCBvZiBEUyAtIGRlbGVnYXRpb24gaXMgaW5kZWVkIGluc2VjdXJlICovCisJICAgICAgZnJlZShwYWNrZXQpOworCSAgICAgIGJsb2NrZGF0YV9mcmVlKGJsb2NrKTsKKwkgICAgICByZXR1cm4gU1RBVF9JTlNFQ1VSRTsKKwkgICAgfQorCSAgCisJICBpZiAoc3RhdHVzID09IFNUQVRfQk9HVVMpCisJICAgIHsKKwkgICAgICBmcmVlKHBhY2tldCk7CisJICAgICAgYmxvY2tkYXRhX2ZyZWUoYmxvY2spOworCSAgICAgIHJldHVybiBTVEFUX0JPR1VTOworCSAgICB9CisJICAKKwkgIC8qIEhlcmUsIGVpdGhlciB0aGVyZSdzIGEgc2VjdXJlIERTLCBvciBubyBOUyBhbmQgbm8gRFMsIGFuZCB0aGVyZWZvcmUgbm8gZGVsZWdhdGlvbi4KKwkgICAgIEFkZCBhbm90aGVyIGxhYmVsIGFuZCBjb250aW51ZS4gKi8KKwkgIAorCSAgLyogR2V0IG5hbWUgd2UncmUgY2hlY2tpbmcgYmFjay4gKi8KKwkgIGJsb2NrZGF0YV9yZXRyaWV2ZShibG9jaywgbmFtZV9sZW4sIG5hbWUpOworCSAgCisJICBpZiAobmFtZV9zdGFydCA9PSBuYW1lKQorCSAgICB7CisJICAgICAgZnJlZShwYWNrZXQpOworCSAgICAgIGJsb2NrZGF0YV9mcmVlKGJsb2NrKTsKKwkgICAgICByZXR1cm4gU1RBVF9CT0dVUzsgLyogcnVuIG91dCBvZiBsYWJlbHMgKi8KKwkgICAgfQorCSAgCisJICBuYW1lX3N0YXJ0IC09IDI7CisJICB3aGlsZSAoKm5hbWVfc3RhcnQgIT0gJy4nICYmIG5hbWVfc3RhcnQgIT0gbmFtZSkgCisJICAgIG5hbWVfc3RhcnQtLTsKKwkgIGlmIChuYW1lX3N0YXJ0ICE9IG5hbWUpCisJICAgIG5hbWVfc3RhcnQrKzsKKwl9CisgICAgICBlbHNlCisJeworCSAgLyogSU8gZmFpbHVyZSAqLworCSAgZnJlZShwYWNrZXQpOworCSAgYmxvY2tkYXRhX2ZyZWUoYmxvY2spOworCSAgcmV0dXJuIFNUQVRfQk9HVVM7IC8qIHJ1biBvdXQgb2YgbGFiZWxzICovCisJfQorICAgIH0KK30KKworc3RhdGljIGludCB0Y3Bfa2V5X3JlY3Vyc2UodGltZV90IG5vdywgaW50IHN0YXR1cywgc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IG4sIAorCQkJICAgaW50IGNsYXNzLCBjaGFyICpuYW1lLCBjaGFyICprZXluYW1lLCBzdHJ1Y3Qgc2VydmVyICpzZXJ2ZXIsIGludCAqa2V5Y291bnQpCit7CisgIC8qIFJlY3Vyc2UgdXAgdGhlIGtleSBoZWlyYXJjaHkgKi8KKyAgaW50IG5ld19zdGF0dXM7CisKKyAgLyogbGltaXQgdGhlIGFtb3VudCBvZiB3b3JrIHdlIGRvLCB0byBhdm9pZCBjeWNsaW5nIGZvcmV2ZXIgb24gbG9vcHMgaW4gdGhlIEROUyAqLworICBpZiAoLS0oKmtleWNvdW50KSA9PSAwKQorICAgIHJldHVybiBTVEFUX0lOU0VDVVJFOworICAKKyAgaWYgKHN0YXR1cyA9PSBTVEFUX05FRURfS0VZKQorICAgIG5ld19zdGF0dXMgPSBkbnNzZWNfdmFsaWRhdGVfYnlfZHMobm93LCBoZWFkZXIsIG4sIG5hbWUsIGtleW5hbWUsIGNsYXNzKTsKKyAgZWxzZSBpZiAoc3RhdHVzID09IFNUQVRfTkVFRF9EUyB8fCBzdGF0dXMgPT0gU1RBVF9ORUVEX0RTX05FRykKKyAgICB7CisgICAgICBuZXdfc3RhdHVzID0gZG5zc2VjX3ZhbGlkYXRlX2RzKG5vdywgaGVhZGVyLCBuLCBuYW1lLCBrZXluYW1lLCBjbGFzcyk7CisgICAgICBpZiAoc3RhdHVzID09IFNUQVRfTkVFRF9EUyAmJiAobmV3X3N0YXR1cyA9PSBTVEFUX05PX0RTIHx8IG5ld19zdGF0dXMgPT0gU1RBVF9OT19OUykpCisJbmV3X3N0YXR1cyA9IFNUQVRfQk9HVVM7CisgICAgfQorICBlbHNlIGlmIChzdGF0dXMgPT0gU1RBVF9DSEFTRV9DTkFNRSkKKyAgICBuZXdfc3RhdHVzID0gZG5zc2VjX2NoYXNlX2NuYW1lKG5vdywgaGVhZGVyLCBuLCBuYW1lLCBrZXluYW1lKTsKKyAgZWxzZSAKKyAgICB7CisgICAgICBuZXdfc3RhdHVzID0gZG5zc2VjX3ZhbGlkYXRlX3JlcGx5KG5vdywgaGVhZGVyLCBuLCBuYW1lLCBrZXluYW1lLCAmY2xhc3MsIE5VTEwsIE5VTEwpOworICAgICAgCisgICAgICBpZiAobmV3X3N0YXR1cyA9PSBTVEFUX05PX1NJRykKKwl7CisJICBpZiAob3B0aW9uX2Jvb2woT1BUX0ROU1NFQ19OT19TSUdOKSkKKwkgICAgbmV3X3N0YXR1cyA9IHRjcF9jaGVja19mb3JfdW5zaWduZWRfem9uZShub3csIGhlYWRlciwgbiwgY2xhc3MsIG5hbWUsIGtleW5hbWUsIHNlcnZlciwga2V5Y291bnQpOworCSAgZWxzZQorCSAgICBuZXdfc3RhdHVzID0gU1RBVF9JTlNFQ1VSRTsKKwl9CisgICAgfQorCisgIC8qIENhbid0IHZhbGlkYXRlIGJlY2F1c2Ugd2UgbmVlZCBhIGtleS9EUyB3aG9zZSBuYW1lIG5vdyBpbiBrZXluYW1lLgorICAgICBNYWtlIHF1ZXJ5IGZvciBzYW1lLCBhbmQgcmVjdXJzZSB0byB2YWxpZGF0ZSAqLworICBpZiAobmV3X3N0YXR1cyA9PSBTVEFUX05FRURfRFMgfHwgbmV3X3N0YXR1cyA9PSBTVEFUX05FRURfS0VZKQorICAgIHsKKyAgICAgIHNpemVfdCBtOyAKKyAgICAgIHVuc2lnbmVkIGNoYXIgKnBhY2tldCA9IHdoaW5lX21hbGxvYyg2NTUzNiArIE1BWEROQU1FICsgUlJGSVhFRFNaICsgc2l6ZW9mKHUxNikpOworICAgICAgdW5zaWduZWQgY2hhciAqcGF5bG9hZCA9ICZwYWNrZXRbMl07CisgICAgICBzdHJ1Y3QgZG5zX2hlYWRlciAqbmV3X2hlYWRlciA9IChzdHJ1Y3QgZG5zX2hlYWRlciAqKXBheWxvYWQ7CisgICAgICB1MTYgKmxlbmd0aCA9ICh1MTYgKilwYWNrZXQ7CisgICAgICB1bnNpZ25lZCBjaGFyIGMxLCBjMjsKKyAgICAgICAKKyAgICAgIGlmICghcGFja2V0KQorCXJldHVybiBTVEFUX0lOU0VDVVJFOworCisgICAgYW5vdGhlcl90Y3Bfa2V5OgorICAgICAgbSA9IGRuc3NlY19nZW5lcmF0ZV9xdWVyeShuZXdfaGVhZGVyLCAoKGNoYXIgKikgbmV3X2hlYWRlcikgKyA2NTUzNiwga2V5bmFtZSwgY2xhc3MsIAorCQkJCW5ld19zdGF0dXMgPT0gU1RBVF9ORUVEX0tFWSA/IFRfRE5TS0VZIDogVF9EUywgJnNlcnZlci0+YWRkcik7CisgICAgICAKKyAgICAgICpsZW5ndGggPSBodG9ucyhtKTsKKyAgICAgIAorICAgICAgaWYgKCFyZWFkX3dyaXRlKHNlcnZlci0+dGNwZmQsIHBhY2tldCwgbSArIHNpemVvZih1MTYpLCAwKSB8fAorCSAgIXJlYWRfd3JpdGUoc2VydmVyLT50Y3BmZCwgJmMxLCAxLCAxKSB8fAorCSAgIXJlYWRfd3JpdGUoc2VydmVyLT50Y3BmZCwgJmMyLCAxLCAxKSB8fAorCSAgIXJlYWRfd3JpdGUoc2VydmVyLT50Y3BmZCwgcGF5bG9hZCwgKGMxIDw8IDgpIHwgYzIsIDEpKQorCW5ld19zdGF0dXMgPSBTVEFUX0lOU0VDVVJFOworICAgICAgZWxzZQorCXsKKwkgIG0gPSAoYzEgPDwgOCkgfCBjMjsKKwkgIAorCSAgbmV3X3N0YXR1cyA9IHRjcF9rZXlfcmVjdXJzZShub3csIG5ld19zdGF0dXMsIG5ld19oZWFkZXIsIG0sIGNsYXNzLCBuYW1lLCBrZXluYW1lLCBzZXJ2ZXIsIGtleWNvdW50KTsKKwkgIAorCSAgaWYgKG5ld19zdGF0dXMgPT0gU1RBVF9TRUNVUkUpCisJICAgIHsKKwkgICAgICAvKiBSZWFjaGVkIGEgdmFsaWRhdGVkIHJlY29yZCwgbm93IHRyeSBhZ2FpbiBhdCB0aGlzIGxldmVsLgorCQkgTm90ZSB0aGF0IHdlIG1heSBnZXQgQU5PVEhFUiBORUVEXyogaWYgYW4gYW5zd2VyIG5lZWRzIG1vcmUgdGhhbiBvbmUga2V5LgorCQkgSWYgc28sIGdvIHJvdW5kIGFnYWluLiAqLworCSAgICAgIAorCSAgICAgIGlmIChzdGF0dXMgPT0gU1RBVF9ORUVEX0tFWSkKKwkJbmV3X3N0YXR1cyA9IGRuc3NlY192YWxpZGF0ZV9ieV9kcyhub3csIGhlYWRlciwgbiwgbmFtZSwga2V5bmFtZSwgY2xhc3MpOworCSAgICAgIGVsc2UgaWYgKHN0YXR1cyA9PSBTVEFUX05FRURfRFMgfHwgc3RhdHVzID09IFNUQVRfTkVFRF9EU19ORUcpCisJCXsKKwkJICBuZXdfc3RhdHVzID0gZG5zc2VjX3ZhbGlkYXRlX2RzKG5vdywgaGVhZGVyLCBuLCBuYW1lLCBrZXluYW1lLCBjbGFzcyk7CisJCSAgaWYgKHN0YXR1cyA9PSBTVEFUX05FRURfRFMgICYmIChuZXdfc3RhdHVzID09IFNUQVRfTk9fRFMgfHwgbmV3X3N0YXR1cyA9PSBTVEFUX05PX05TKSkKKwkJICAgIG5ld19zdGF0dXMgPSBTVEFUX0JPR1VTOyAvKiBWYWxpZGF0ZWQgbm8gRFMgKi8KKwkJfQorCSAgICAgIGVsc2UgaWYgKHN0YXR1cyA9PSBTVEFUX0NIQVNFX0NOQU1FKQorCQluZXdfc3RhdHVzID0gZG5zc2VjX2NoYXNlX2NuYW1lKG5vdywgaGVhZGVyLCBuLCBuYW1lLCBrZXluYW1lKTsKKwkgICAgICBlbHNlIAorCQl7CisJCSAgbmV3X3N0YXR1cyA9IGRuc3NlY192YWxpZGF0ZV9yZXBseShub3csIGhlYWRlciwgbiwgbmFtZSwga2V5bmFtZSwgJmNsYXNzLCBOVUxMLCBOVUxMKTsKKwkJICAKKwkJICBpZiAobmV3X3N0YXR1cyA9PSBTVEFUX05PX1NJRykKKwkJICAgIHsKKwkJICAgICAgaWYgKG9wdGlvbl9ib29sKE9QVF9ETlNTRUNfTk9fU0lHTikpCisJCQluZXdfc3RhdHVzID0gdGNwX2NoZWNrX2Zvcl91bnNpZ25lZF96b25lKG5vdywgaGVhZGVyLCBuLCBjbGFzcywgbmFtZSwga2V5bmFtZSwgc2VydmVyLCBrZXljb3VudCk7CisJCSAgICAgIGVsc2UKKwkJCW5ld19zdGF0dXMgPSBTVEFUX0lOU0VDVVJFOworCQkgICAgfQorCQl9CisJICAgICAgCisJICAgICAgaWYgKG5ld19zdGF0dXMgPT0gU1RBVF9ORUVEX0RTIHx8IG5ld19zdGF0dXMgPT0gU1RBVF9ORUVEX0tFWSkKKwkJZ290byBhbm90aGVyX3RjcF9rZXk7CisJICAgIH0KKwl9CisKKyAgICAgIGZyZWUocGFja2V0KTsKKyAgICB9CisgIHJldHVybiBuZXdfc3RhdHVzOworfQorI2VuZGlmCisKKworLyogVGhlIGRhZW1vbiBmb3JrcyBiZWZvcmUgY2FsbGluZyB0aGlzOiBpdCBzaG91bGQgZGVhbCB3aXRoIG9uZSBjb25uZWN0aW9uLAorICAgYmxvY2tpbmcgYXMgbmVjY2Vzc2FyeSwgYW5kIHRoZW4gcmV0dXJuLiBOb3RlLCBuZWVkIHRvIGJlIGEgYml0IGNhcmVmdWwKKyAgIGFib3V0IHJlc291cmNlcyBmb3IgZGVidWcgbW9kZSwgd2hlbiB0aGUgZm9yayBpcyBzdXBwcmVzc2VkOiB0aGF0J3MKKyAgIGRvbmUgYnkgdGhlIGNhbGxlci4gKi8KK3Vuc2lnbmVkIGNoYXIgKnRjcF9yZXF1ZXN0KGludCBjb25mZCwgdGltZV90IG5vdywKKwkJCSAgIHVuaW9uIG15c29ja2FkZHIgKmxvY2FsX2FkZHIsIHN0cnVjdCBpbl9hZGRyIG5ldG1hc2ssIGludCBhdXRoX2RucykKK3sKKyAgc2l6ZV90IHNpemUgPSAwOworICBpbnQgbm9yZWJpbmQgPSAwOworI2lmZGVmIEhBVkVfQVVUSAorICBpbnQgbG9jYWxfYXV0aCA9IDA7CisjZW5kaWYKKyAgaW50IGNoZWNraW5nX2Rpc2FibGVkLCBhZF9xdWVzdGlvbiwgZG9fYml0LCBhZGRlZF9waGVhZGVyID0gMDsKKyAgaW50IGNoZWNrX3N1Ym5ldCwgbm9fY2FjaGVfZG5zc2VjID0gMCwgY2FjaGVfc2VjdXJlID0gMDsKKyAgc2l6ZV90IG07CisgIHVuc2lnbmVkIHNob3J0IHF0eXBlOworICB1bnNpZ25lZCBpbnQgZ290bmFtZTsKKyAgdW5zaWduZWQgY2hhciBjMSwgYzI7CisgIC8qIE1heCBUQ1AgcGFja2V0ICsgc2xvcCArIHNpemUgKi8KKyAgdW5zaWduZWQgY2hhciAqcGFja2V0ID0gd2hpbmVfbWFsbG9jKDY1NTM2ICsgTUFYRE5BTUUgKyBSUkZJWEVEU1ogKyBzaXplb2YodTE2KSk7CisgIHVuc2lnbmVkIGNoYXIgKnBheWxvYWQgPSAmcGFja2V0WzJdOworICAvKiBsYXJnZXN0IGZpZWxkIGluIGhlYWRlciBpcyAxNi1iaXRzLCBzbyB0aGlzIGlzIHN0aWxsIHN1ZmZpY2llbnRseSBhbGlnbmVkICovCisgIHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIgPSAoc3RydWN0IGRuc19oZWFkZXIgKilwYXlsb2FkOworICB1MTYgKmxlbmd0aCA9ICh1MTYgKilwYWNrZXQ7CisgIHN0cnVjdCBzZXJ2ZXIgKmxhc3Rfc2VydmVyOworICBzdHJ1Y3QgaW5fYWRkciBkc3RfYWRkcl80OworICB1bmlvbiBteXNvY2thZGRyIHBlZXJfYWRkcjsKKyAgc29ja2xlbl90IHBlZXJfbGVuID0gc2l6ZW9mKHVuaW9uIG15c29ja2FkZHIpOworICBpbnQgcXVlcnlfY291bnQgPSAwOworCisgIGlmIChnZXRwZWVybmFtZShjb25mZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZwZWVyX2FkZHIsICZwZWVyX2xlbikgPT0gLTEpCisgICAgcmV0dXJuIHBhY2tldDsKKyAgCisgIC8qIFdlIGNhbiBiZSBjb25maWd1cmVkIHRvIG9ubHkgYWNjZXB0IHF1ZXJpZXMgZnJvbSBhdC1tb3N0LW9uZS1ob3AtYXdheSBhZGRyZXNzZXMuICovCisgIGlmIChvcHRpb25fYm9vbChPUFRfTE9DQUxfU0VSVklDRSkpCisgICAgeworICAgICAgc3RydWN0IGFkZHJsaXN0ICphZGRyOworI2lmZGVmIEhBVkVfSVBWNgorICAgICAgaWYgKHBlZXJfYWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIAorCXsKKwkgIGZvciAoYWRkciA9IGRhZW1vbi0+aW50ZXJmYWNlX2FkZHJzOyBhZGRyOyBhZGRyID0gYWRkci0+bmV4dCkKKwkgICAgaWYgKChhZGRyLT5mbGFncyAmIEFERFJMSVNUX0lQVjYpICYmCisJCWlzX3NhbWVfbmV0NigmYWRkci0+YWRkci5hZGRyLmFkZHI2LCAmcGVlcl9hZGRyLmluNi5zaW42X2FkZHIsIGFkZHItPnByZWZpeGxlbikpCisJICAgICAgYnJlYWs7CisJfQorICAgICAgZWxzZQorI2VuZGlmCisJeworCSAgc3RydWN0IGluX2FkZHIgbmV0bWFzazsKKwkgIGZvciAoYWRkciA9IGRhZW1vbi0+aW50ZXJmYWNlX2FkZHJzOyBhZGRyOyBhZGRyID0gYWRkci0+bmV4dCkKKwkgICAgeworCSAgICAgIG5ldG1hc2suc19hZGRyID0gaHRvbmwofihpbl9hZGRyX3QpMCA8PCAoMzIgLSBhZGRyLT5wcmVmaXhsZW4pKTsKKwkgICAgICBpZiAoIShhZGRyLT5mbGFncyAmIEFERFJMSVNUX0lQVjYpICYmIAorCQkgIGlzX3NhbWVfbmV0KGFkZHItPmFkZHIuYWRkci5hZGRyNCwgcGVlcl9hZGRyLmluLnNpbl9hZGRyLCBuZXRtYXNrKSkKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgICBpZiAoIWFkZHIpCisJeworCSAgbXlfc3lzbG9nKExPR19XQVJOSU5HLCBfKCJJZ25vcmluZyBxdWVyeSBmcm9tIG5vbi1sb2NhbCBuZXR3b3JrIikpOworCSAgcmV0dXJuIHBhY2tldDsKKwl9CisgICAgfQorCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGlmIChxdWVyeV9jb3VudCA9PSBUQ1BfTUFYX1FVRVJJRVMgfHwKKwkgICFwYWNrZXQgfHwKKwkgICFyZWFkX3dyaXRlKGNvbmZkLCAmYzEsIDEsIDEpIHx8ICFyZWFkX3dyaXRlKGNvbmZkLCAmYzIsIDEsIDEpIHx8CisJICAhKHNpemUgPSBjMSA8PCA4IHwgYzIpIHx8CisJICAhcmVhZF93cml0ZShjb25mZCwgcGF5bG9hZCwgc2l6ZSwgMSkpCisgICAgICAgCXJldHVybiBwYWNrZXQ7IAorICAKKyAgICAgIGlmIChzaXplIDwgKGludClzaXplb2Yoc3RydWN0IGRuc19oZWFkZXIpKQorCWNvbnRpbnVlOworICAgICAgCisgICAgICBxdWVyeV9jb3VudCsrOworCisgICAgICAvKiBsb2dfcXVlcnkgZ2V0cyBjYWxsZWQgaW5kaXJlY3RseSBhbGwgb3ZlciB0aGUgcGxhY2UsIHNvIAorCSBwYXNzIHRoZXNlIGluIGdsb2JhbCB2YXJpYWJsZXMgLSBzb3JyeS4gKi8KKyAgICAgIGRhZW1vbi0+bG9nX2Rpc3BsYXlfaWQgPSArK2RhZW1vbi0+bG9nX2lkOworICAgICAgZGFlbW9uLT5sb2dfc291cmNlX2FkZHIgPSAmcGVlcl9hZGRyOworICAgICAgCisgICAgICBjaGVja19zdWJuZXQgPSAwOworCisgICAgICAvKiBzYXZlIHN0YXRlIG9mICJjZCIgZmxhZyBpbiBxdWVyeSAqLworICAgICAgaWYgKChjaGVja2luZ19kaXNhYmxlZCA9IGhlYWRlci0+aGI0ICYgSEI0X0NEKSkKKwlub19jYWNoZV9kbnNzZWMgPSAxOworICAgICAgIAorICAgICAgaWYgKChnb3RuYW1lID0gZXh0cmFjdF9yZXF1ZXN0KGhlYWRlciwgKHVuc2lnbmVkIGludClzaXplLCBkYWVtb24tPm5hbWVidWZmLCAmcXR5cGUpKSkKKwl7CisjaWZkZWYgSEFWRV9BVVRICisJICBzdHJ1Y3QgYXV0aF96b25lICp6b25lOworI2VuZGlmCisJICBjaGFyICp0eXBlcyA9IHF1ZXJ5c3RyKGF1dGhfZG5zID8gImF1dGgiIDogInF1ZXJ5IiwgcXR5cGUpOworCSAgCisJICBpZiAocGVlcl9hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSAKKwkgICAgbG9nX3F1ZXJ5KEZfUVVFUlkgfCBGX0lQVjQgfCBGX0ZPUldBUkQsIGRhZW1vbi0+bmFtZWJ1ZmYsIAorCQkgICAgICAoc3RydWN0IGFsbF9hZGRyICopJnBlZXJfYWRkci5pbi5zaW5fYWRkciwgdHlwZXMpOworI2lmZGVmIEhBVkVfSVBWNgorCSAgZWxzZQorCSAgICBsb2dfcXVlcnkoRl9RVUVSWSB8IEZfSVBWNiB8IEZfRk9SV0FSRCwgZGFlbW9uLT5uYW1lYnVmZiwgCisJCSAgICAgIChzdHJ1Y3QgYWxsX2FkZHIgKikmcGVlcl9hZGRyLmluNi5zaW42X2FkZHIsIHR5cGVzKTsKKyNlbmRpZgorCSAgCisjaWZkZWYgSEFWRV9BVVRICisJICAvKiBmaW5kIHF1ZXJpZXMgZm9yIHpvbmVzIHdlJ3JlIGF1dGhvcml0YXRpdmUgZm9yLCBhbmQgYW5zd2VyIHRoZW0gZGlyZWN0bHkgKi8KKwkgIGlmICghYXV0aF9kbnMpCisJICAgIGZvciAoem9uZSA9IGRhZW1vbi0+YXV0aF96b25lczsgem9uZTsgem9uZSA9IHpvbmUtPm5leHQpCisJICAgICAgaWYgKGluX3pvbmUoem9uZSwgZGFlbW9uLT5uYW1lYnVmZiwgTlVMTCkpCisJCXsKKwkJICBhdXRoX2RucyA9IDE7CisJCSAgbG9jYWxfYXV0aCA9IDE7CisJCSAgYnJlYWs7CisJCX0KKyNlbmRpZgorCX0KKyAgICAgIAorICAgICAgaWYgKGxvY2FsX2FkZHItPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorCWRzdF9hZGRyXzQgPSBsb2NhbF9hZGRyLT5pbi5zaW5fYWRkcjsKKyAgICAgIGVsc2UKKwlkc3RfYWRkcl80LnNfYWRkciA9IDA7CisgICAgICAKKyNpZmRlZiBIQVZFX0FVVEgKKyAgICAgIGlmIChhdXRoX2RucykKKwltID0gYW5zd2VyX2F1dGgoaGVhZGVyLCAoKGNoYXIgKikgaGVhZGVyKSArIDY1NTM2LCAoc2l6ZV90KXNpemUsIG5vdywgJnBlZXJfYWRkciwgbG9jYWxfYXV0aCk7CisgICAgICBlbHNlCisjZW5kaWYKKwl7CisJICAvKiBtID4gMCBpZiBhbnN3ZXJlZCBmcm9tIGNhY2hlICovCisJICBtID0gYW5zd2VyX3JlcXVlc3QoaGVhZGVyLCAoKGNoYXIgKikgaGVhZGVyKSArIDY1NTM2LCAoc2l6ZV90KXNpemUsIAorCQkJICAgICBkc3RfYWRkcl80LCBuZXRtYXNrLCBub3csICZhZF9xdWVzdGlvbiwgJmRvX2JpdCk7CisJICAKKwkgIC8qIERvIHRoaXMgYnkgc3RlYW0gbm93IHdlJ3JlIG5vdCBpbiB0aGUgc2VsZWN0KCkgbG9vcCAqLworCSAgY2hlY2tfbG9nX3dyaXRlcihOVUxMKTsgCisJICAKKwkgIGlmIChtID09IDApCisJICAgIHsKKwkgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOworCSAgICAgIHN0cnVjdCBhbGxfYWRkciAqYWRkcnAgPSBOVUxMOworCSAgICAgIGludCB0eXBlID0gMDsKKwkgICAgICBjaGFyICpkb21haW4gPSBOVUxMOworCSAgICAgIAorCSAgICAgIGlmIChvcHRpb25fYm9vbChPUFRfQUREX01BQykpCisJCXNpemUgPSBhZGRfbWFjKGhlYWRlciwgc2l6ZSwgKChjaGFyICopIGhlYWRlcikgKyA2NTUzNiwgJnBlZXJfYWRkcik7CisJICAgICAgCQorCSAgICAgIGlmIChvcHRpb25fYm9vbChPUFRfQ0xJRU5UX1NVQk5FVCkpCisJCXsKKwkJICBzaXplX3QgbmV3ID0gYWRkX3NvdXJjZV9hZGRyKGhlYWRlciwgc2l6ZSwgKChjaGFyICopIGhlYWRlcikgKyA2NTUzNiwgJnBlZXJfYWRkcik7CisJCSAgaWYgKHNpemUgIT0gbmV3KQorCQkgICAgeworCQkgICAgICBzaXplID0gbmV3OworCQkgICAgICBjaGVja19zdWJuZXQgPSAxOworCQkgICAgfQorCQl9CisKKwkgICAgICBpZiAoZ290bmFtZSkKKwkJZmxhZ3MgPSBzZWFyY2hfc2VydmVycyhub3csICZhZGRycCwgZ290bmFtZSwgZGFlbW9uLT5uYW1lYnVmZiwgJnR5cGUsICZkb21haW4sICZub3JlYmluZCk7CisJICAgICAgCisJICAgICAgaWYgKHR5cGUgIT0gMCAgfHwgb3B0aW9uX2Jvb2woT1BUX09SREVSKSB8fCAhZGFlbW9uLT5sYXN0X3NlcnZlcikKKwkJbGFzdF9zZXJ2ZXIgPSBkYWVtb24tPnNlcnZlcnM7CisJICAgICAgZWxzZQorCQlsYXN0X3NlcnZlciA9IGRhZW1vbi0+bGFzdF9zZXJ2ZXI7CisJICAgICAgCisJICAgICAgaWYgKCFmbGFncyAmJiBsYXN0X3NlcnZlcikKKwkJeworCQkgIHN0cnVjdCBzZXJ2ZXIgKmZpcnN0c2VuZHRvID0gTlVMTDsKKyNpZmRlZiBIQVZFX0ROU1NFQworCQkgIHVuc2lnbmVkIGNoYXIgKm5ld2hhc2gsIGhhc2hbSEFTSF9TSVpFXTsKKwkJICBpZiAoKG5ld2hhc2ggPSBoYXNoX3F1ZXN0aW9ucyhoZWFkZXIsICh1bnNpZ25lZCBpbnQpc2l6ZSwgZGFlbW9uLT5uYW1lYnVmZikpKQorCQkgICAgbWVtY3B5KGhhc2gsIG5ld2hhc2gsIEhBU0hfU0laRSk7CisJCSAgZWxzZQorCQkgICAgbWVtc2V0KGhhc2gsIDAsIEhBU0hfU0laRSk7CisjZWxzZQorCQkgIHVuc2lnbmVkIGludCBjcmMgPSBxdWVzdGlvbnNfY3JjKGhlYWRlciwgKHVuc2lnbmVkIGludClzaXplLCBkYWVtb24tPm5hbWVidWZmKTsKKyNlbmRpZgkJICAKKwkJICAvKiBMb29wIHJvdW5kIGF2YWlsYWJsZSBzZXJ2ZXJzIHVudGlsIHdlIHN1Y2NlZWQgaW4gY29ubmVjdGluZyB0byBvbmUuCisJCSAgICAgTm90ZSB0aGF0IHRoaXMgY29kZSBzdWJ0bGV5IGVuc3VyZXMgdGhhdCBjb25zZWN1dGl2ZSBxdWVyaWVzIG9uIHRoaXMgY29ubmVjdGlvbgorCQkgICAgIHdoaWNoIGNhbiBnbyB0byB0aGUgc2FtZSBzZXJ2ZXIsIGRvIHNvLiAqLworCQkgIHdoaWxlICgxKSAKKwkJICAgIHsKKwkJICAgICAgaWYgKCFmaXJzdHNlbmR0bykKKwkJCWZpcnN0c2VuZHRvID0gbGFzdF9zZXJ2ZXI7CisJCSAgICAgIGVsc2UKKwkJCXsKKwkJCSAgaWYgKCEobGFzdF9zZXJ2ZXIgPSBsYXN0X3NlcnZlci0+bmV4dCkpCisJCQkgICAgbGFzdF9zZXJ2ZXIgPSBkYWVtb24tPnNlcnZlcnM7CisJCQkgIAorCQkJICBpZiAobGFzdF9zZXJ2ZXIgPT0gZmlyc3RzZW5kdG8pCisJCQkgICAgYnJlYWs7CisJCQl9CisJCSAgICAgIAorCQkgICAgICAvKiBzZXJ2ZXIgZm9yIHdyb25nIGRvbWFpbiAqLworCQkgICAgICBpZiAodHlwZSAhPSAobGFzdF9zZXJ2ZXItPmZsYWdzICYgU0VSVl9UWVBFKSB8fAorCQkJICAodHlwZSA9PSBTRVJWX0hBU19ET01BSU4gJiYgIWhvc3RuYW1lX2lzZXF1YWwoZG9tYWluLCBsYXN0X3NlcnZlci0+ZG9tYWluKSkgfHwKKwkJCSAgKGxhc3Rfc2VydmVyLT5mbGFncyAmIChTRVJWX0xJVEVSQUxfQUREUkVTUyB8IFNFUlZfTE9PUCkpKQorCQkJY29udGludWU7CisJCSAgICAgIAorCQkgICAgICBpZiAobGFzdF9zZXJ2ZXItPnRjcGZkID09IC0xKQorCQkJeworCQkJICBpZiAoKGxhc3Rfc2VydmVyLT50Y3BmZCA9IHNvY2tldChsYXN0X3NlcnZlci0+YWRkci5zYS5zYV9mYW1pbHksIFNPQ0tfU1RSRUFNLCAwKSkgPT0gLTEpCisJCQkgICAgY29udGludWU7CisJCQkgIAorI2lmZGVmIEhBVkVfQ09OTlRSQUNLCisJCQkgIC8qIENvcHkgY29ubmVjdGlvbiBtYXJrIG9mIGluY29taW5nIHF1ZXJ5IHRvIG91dGdvaW5nIGNvbm5lY3Rpb24uICovCisJCQkgIGlmIChvcHRpb25fYm9vbChPUFRfQ09OTlRSQUNLKSkKKwkJCSAgICB7CisJCQkgICAgICB1bnNpZ25lZCBpbnQgbWFyazsKKwkJCSAgICAgIHN0cnVjdCBhbGxfYWRkciBsb2NhbDsKKyNpZmRlZiBIQVZFX0lQVjYJCSAgICAgIAorCQkJICAgICAgaWYgKGxvY2FsX2FkZHItPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKKwkJCQlsb2NhbC5hZGRyLmFkZHI2ID0gbG9jYWxfYWRkci0+aW42LnNpbjZfYWRkcjsKKwkJCSAgICAgIGVsc2UKKyNlbmRpZgorCQkJCWxvY2FsLmFkZHIuYWRkcjQgPSBsb2NhbF9hZGRyLT5pbi5zaW5fYWRkcjsKKwkJCSAgICAgIAorCQkJICAgICAgaWYgKGdldF9pbmNvbWluZ19tYXJrKCZwZWVyX2FkZHIsICZsb2NhbCwgMSwgJm1hcmspKQorCQkJCXNldHNvY2tvcHQobGFzdF9zZXJ2ZXItPnRjcGZkLCBTT0xfU09DS0VULCBTT19NQVJLLCAmbWFyaywgc2l6ZW9mKHVuc2lnbmVkIGludCkpOworCQkJICAgIH0KKyNlbmRpZgkKKwkJICAgICAgCisJCQkgIGlmICgoIWxvY2FsX2JpbmQobGFzdF9zZXJ2ZXItPnRjcGZkLCAgJmxhc3Rfc2VydmVyLT5zb3VyY2VfYWRkciwgbGFzdF9zZXJ2ZXItPmludGVyZmFjZSwgMSkgfHwKKwkJCSAgICAgICBjb25uZWN0KGxhc3Rfc2VydmVyLT50Y3BmZCwgJmxhc3Rfc2VydmVyLT5hZGRyLnNhLCBzYV9sZW4oJmxhc3Rfc2VydmVyLT5hZGRyKSkgPT0gLTEpKQorCQkJICAgIHsKKwkJCSAgICAgIGNsb3NlKGxhc3Rfc2VydmVyLT50Y3BmZCk7CisJCQkgICAgICBsYXN0X3NlcnZlci0+dGNwZmQgPSAtMTsKKwkJCSAgICAgIGNvbnRpbnVlOworCQkJICAgIH0KKwkJCSAgCisjaWZkZWYgSEFWRV9ETlNTRUMKKwkJCSAgaWYgKG9wdGlvbl9ib29sKE9QVF9ETlNTRUNfVkFMSUQpKQorCQkJICAgIHsKKwkJCSAgICAgIHNpemVfdCBuZXdfc2l6ZSA9IGFkZF9kb19iaXQoaGVhZGVyLCBzaXplLCAoKGNoYXIgKikgaGVhZGVyKSArIDY1NTM2KTsKKwkJCSAgICAgIAorCQkJICAgICAgLyogRm9yIGRlYnVnZ2luZywgc2V0IENoZWNraW5nIERpc2FibGVkLCBvdGhlcndpc2UsIGhhdmUgdGhlIHVwc3RyZWFtIGNoZWNrIHRvbywKKwkJCQkgdGhpcyBhbGxvd3MgaXQgdG8gc2VsZWN0IGF1dGggc2VydmVycyB3aGVuIG9uZSBpcyByZXR1cm5pbmcgYmFkIGRhdGEuICovCisJCQkgICAgICBpZiAob3B0aW9uX2Jvb2woT1BUX0ROU1NFQ19ERUJVRykpCisJCQkJaGVhZGVyLT5oYjQgfD0gSEI0X0NEOworCQkJICAgICAgCisJCQkgICAgICBpZiAoc2l6ZSAhPSBuZXdfc2l6ZSkKKwkJCQlhZGRlZF9waGVhZGVyID0gMTsKKwkJCSAgICAgIAorCQkJICAgICAgc2l6ZSA9IG5ld19zaXplOworCQkJICAgIH0KKyNlbmRpZgorCQkJfQorCQkgICAgICAKKwkJICAgICAgKmxlbmd0aCA9IGh0b25zKHNpemUpOworCisJCSAgICAgIC8qIGdldCBxdWVyeSBuYW1lIGFnYWluIGZvciBsb2dnaW5nIC0gbWF5IGhhdmUgYmVlbiBvdmVyd3JpdHRlbiAqLworCQkgICAgICBpZiAoIShnb3RuYW1lID0gZXh0cmFjdF9yZXF1ZXN0KGhlYWRlciwgKHVuc2lnbmVkIGludClzaXplLCBkYWVtb24tPm5hbWVidWZmLCAmcXR5cGUpKSkKKwkJCXN0cmNweShkYWVtb24tPm5hbWVidWZmLCAicXVlcnkiKTsKKwkJICAgICAgCisJCSAgICAgIGlmICghcmVhZF93cml0ZShsYXN0X3NlcnZlci0+dGNwZmQsIHBhY2tldCwgc2l6ZSArIHNpemVvZih1MTYpLCAwKSB8fAorCQkJICAhcmVhZF93cml0ZShsYXN0X3NlcnZlci0+dGNwZmQsICZjMSwgMSwgMSkgfHwKKwkJCSAgIXJlYWRfd3JpdGUobGFzdF9zZXJ2ZXItPnRjcGZkLCAmYzIsIDEsIDEpIHx8CisJCQkgICFyZWFkX3dyaXRlKGxhc3Rfc2VydmVyLT50Y3BmZCwgcGF5bG9hZCwgKGMxIDw8IDgpIHwgYzIsIDEpKQorCQkJeworCQkJICBjbG9zZShsYXN0X3NlcnZlci0+dGNwZmQpOworCQkJICBsYXN0X3NlcnZlci0+dGNwZmQgPSAtMTsKKwkJCSAgY29udGludWU7CisJCQl9IAorCQkgICAgICAKKwkJICAgICAgbSA9IChjMSA8PCA4KSB8IGMyOworCQkgICAgICAKKwkJICAgICAgaWYgKGxhc3Rfc2VydmVyLT5hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorCQkJbG9nX3F1ZXJ5KEZfU0VSVkVSIHwgRl9JUFY0IHwgRl9GT1JXQVJELCBkYWVtb24tPm5hbWVidWZmLCAKKwkJCQkgIChzdHJ1Y3QgYWxsX2FkZHIgKikmbGFzdF9zZXJ2ZXItPmFkZHIuaW4uc2luX2FkZHIsIE5VTEwpOyAKKyNpZmRlZiBIQVZFX0lQVjYKKwkJICAgICAgZWxzZQorCQkJbG9nX3F1ZXJ5KEZfU0VSVkVSIHwgRl9JUFY2IHwgRl9GT1JXQVJELCBkYWVtb24tPm5hbWVidWZmLCAKKwkJCQkgIChzdHJ1Y3QgYWxsX2FkZHIgKikmbGFzdF9zZXJ2ZXItPmFkZHIuaW42LnNpbjZfYWRkciwgTlVMTCk7CisjZW5kaWYgCisKKyNpZmRlZiBIQVZFX0ROU1NFQworCQkgICAgICBpZiAob3B0aW9uX2Jvb2woT1BUX0ROU1NFQ19WQUxJRCkgJiYgIWNoZWNraW5nX2Rpc2FibGVkKQorCQkJeworCQkJICBpbnQga2V5Y291bnQgPSBETlNTRUNfV09SSzsgLyogTGltaXQgdG8gbnVtYmVyIG9mIEROU1NFQyBxdWVzdGlvbnMsIHRvIGNhdGNoIGxvb3BzIGFuZCBhdm9pZCBmaWxsaW5nIGNhY2hlLiAqLworCQkJICBpbnQgc3RhdHVzID0gdGNwX2tleV9yZWN1cnNlKG5vdywgU1RBVF9UUlVOQ0FURUQsIGhlYWRlciwgbSwgMCwgZGFlbW9uLT5uYW1lYnVmZiwgZGFlbW9uLT5rZXluYW1lLCBsYXN0X3NlcnZlciwgJmtleWNvdW50KTsKKwkJCSAgY2hhciAqcmVzdWx0OworCisJCQkgIGlmIChrZXljb3VudCA9PSAwKQorCQkJICAgIHJlc3VsdCA9ICJBQkFORE9ORUQiOworCQkJICBlbHNlCisJCQkgICAgcmVzdWx0ID0gKHN0YXR1cyA9PSBTVEFUX1NFQ1VSRSA/ICJTRUNVUkUiIDogKHN0YXR1cyA9PSBTVEFUX0lOU0VDVVJFID8gIklOU0VDVVJFIiA6ICJCT0dVUyIpKTsKKwkJCSAgCisJCQkgIGxvZ19xdWVyeShGX0tFWVRBRyB8IEZfU0VDU1RBVCwgInJlc3VsdCIsIE5VTEwsIHJlc3VsdCk7CisJCQkgIAorCQkJICBpZiAoc3RhdHVzID09IFNUQVRfQk9HVVMpCisJCQkgICAgbm9fY2FjaGVfZG5zc2VjID0gMTsKKwkJCSAgCisJCQkgIGlmIChzdGF0dXMgPT0gU1RBVF9TRUNVUkUpCisJCQkgICAgY2FjaGVfc2VjdXJlID0gMTsKKwkJCX0KKyNlbmRpZgorCisJCSAgICAgIC8qIHJlc3RvcmUgQ0QgYml0IHRvIHRoZSB2YWx1ZSBpbiB0aGUgcXVlcnkgKi8KKwkJICAgICAgaWYgKGNoZWNraW5nX2Rpc2FibGVkKQorCQkJaGVhZGVyLT5oYjQgfD0gSEI0X0NEOworCQkgICAgICBlbHNlCisJCQloZWFkZXItPmhiNCAmPSB+SEI0X0NEOworCQkgICAgICAKKwkJICAgICAgLyogVGhlcmUncyBubyBwb2ludCBpbiB1cGRhdGluZyB0aGUgY2FjaGUsIHNpbmNlIHRoaXMgcHJvY2VzcyB3aWxsIGV4aXQgYW5kCisJCQkgbG9zZSB0aGUgaW5mb3JtYXRpb24gYWZ0ZXIgYSBmZXcgcXVlcmllcy4gV2UgbWFrZSB0aGlzIGNhbGwgZm9yIHRoZSBhbGlhcyBhbmQgCisJCQkgYm9ndXMtbnhkb21haW4gc2lkZS1lZmZlY3RzLiAqLworCQkgICAgICAvKiBJZiB0aGUgY3JjIG9mIHRoZSBxdWVzdGlvbiBzZWN0aW9uIGRvZXNuJ3QgbWF0Y2ggdGhlIGNyYyB3ZSBzZW50LCB0aGVuCisJCQkgc29tZW9uZSBtaWdodCBiZSBhdHRlbXB0aW5nIHRvIGluc2VydCBib2d1cyB2YWx1ZXMgaW50byB0aGUgY2FjaGUgYnkgCisJCQkgc2VuZGluZyByZXBsaWVzIGNvbnRhaW5pbmcgcXVlc3Rpb25zIGFuZCBib2d1cyBhbnN3ZXJzLiAqLworI2lmZGVmIEhBVkVfRE5TU0VDCisJCSAgICAgIG5ld2hhc2ggPSBoYXNoX3F1ZXN0aW9ucyhoZWFkZXIsICh1bnNpZ25lZCBpbnQpbSwgZGFlbW9uLT5uYW1lYnVmZik7CisJCSAgICAgIGlmICghbmV3aGFzaCB8fCBtZW1jbXAoaGFzaCwgbmV3aGFzaCwgSEFTSF9TSVpFKSAhPSAwKQorCQkJeyAKKwkJCSAgbSA9IDA7CisJCQkgIGJyZWFrOworCQkJfQorI2Vsc2UJCQkgIAorCQkgICAgICBpZiAoY3JjICE9IHF1ZXN0aW9uc19jcmMoaGVhZGVyLCAodW5zaWduZWQgaW50KW0sIGRhZW1vbi0+bmFtZWJ1ZmYpKQorCQkJeworCQkJICBtID0gMDsKKwkJCSAgYnJlYWs7CisJCQl9CisjZW5kaWYKKworCQkgICAgICBtID0gcHJvY2Vzc19yZXBseShoZWFkZXIsIG5vdywgbGFzdF9zZXJ2ZXIsICh1bnNpZ25lZCBpbnQpbSwgCisJCQkJCW9wdGlvbl9ib29sKE9QVF9OT19SRUJJTkQpICYmICFub3JlYmluZCwgbm9fY2FjaGVfZG5zc2VjLAorCQkJCQljYWNoZV9zZWN1cmUsIGFkX3F1ZXN0aW9uLCBkb19iaXQsIGFkZGVkX3BoZWFkZXIsIGNoZWNrX3N1Ym5ldCwgJnBlZXJfYWRkcik7IAorCQkgICAgICAKKwkJICAgICAgYnJlYWs7CisJCSAgICB9CisJCX0KKwkKKwkgICAgICAvKiBJbiBjYXNlIG9mIGxvY2FsIGFuc3dlciBvciBubyBjb25uZWN0aW9ucyBtYWRlLiAqLworCSAgICAgIGlmIChtID09IDApCisJCW0gPSBzZXR1cF9yZXBseShoZWFkZXIsICh1bnNpZ25lZCBpbnQpc2l6ZSwgYWRkcnAsIGZsYWdzLCBkYWVtb24tPmxvY2FsX3R0bCk7CisJICAgIH0KKwl9CisJICAKKyAgICAgIGNoZWNrX2xvZ193cml0ZXIoTlVMTCk7CisgICAgICAKKyAgICAgICpsZW5ndGggPSBodG9ucyhtKTsKKyAgICAgICAgICAgCisgICAgICBpZiAobSA9PSAwIHx8ICFyZWFkX3dyaXRlKGNvbmZkLCBwYWNrZXQsIG0gKyBzaXplb2YodTE2KSwgMCkpCisJcmV0dXJuIHBhY2tldDsKKyAgICB9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZnJlYyAqYWxsb2NhdGVfZnJlYyh0aW1lX3Qgbm93KQoreworICBzdHJ1Y3QgZnJlYyAqZjsKKyAgCisgIGlmICgoZiA9IChzdHJ1Y3QgZnJlYyAqKXdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IGZyZWMpKSkpCisgICAgeworICAgICAgZi0+bmV4dCA9IGRhZW1vbi0+ZnJlY19saXN0OworICAgICAgZi0+dGltZSA9IG5vdzsKKyAgICAgIGYtPnNlbnR0byA9IE5VTEw7CisgICAgICBmLT5yZmQ0ID0gTlVMTDsKKyAgICAgIGYtPmZsYWdzID0gMDsKKyNpZmRlZiBIQVZFX0lQVjYKKyAgICAgIGYtPnJmZDYgPSBOVUxMOworI2VuZGlmCisjaWZkZWYgSEFWRV9ETlNTRUMKKyAgICAgIGYtPmRlcGVuZGVudCA9IE5VTEw7CisgICAgICBmLT5ibG9ja2luZ19xdWVyeSA9IE5VTEw7CisgICAgICBmLT5zdGFzaCA9IE5VTEw7CisgICAgICBmLT5vcmlnX2RvbWFpbiA9IE5VTEw7CisjZW5kaWYKKyAgICAgIGRhZW1vbi0+ZnJlY19saXN0ID0gZjsKKyAgICB9CisKKyAgcmV0dXJuIGY7Cit9CisKK3N0cnVjdCByYW5kZmQgKmFsbG9jYXRlX3JmZChpbnQgZmFtaWx5KQoreworICBzdGF0aWMgaW50IGZpbmdlciA9IDA7CisgIGludCBpOworCisgIC8qIGxpbWl0IHRoZSBudW1iZXIgb2Ygc29ja2V0cyB3ZSBoYXZlIG9wZW4gdG8gYXZvaWQgc3RhcnZhdGlvbiBvZiAKKyAgICAgKGVnKSBURlRQLiBPbmNlIHdlIGhhdmUgYSByZWFzb25hYmxlIG51bWJlciwgcmFuZG9tbmVzcyBzaG91bGQgYmUgT0sgKi8KKworICBmb3IgKGkgPSAwOyBpIDwgUkFORE9NX1NPQ0tTOyBpKyspCisgICAgaWYgKGRhZW1vbi0+cmFuZG9tc29ja3NbaV0ucmVmY291bnQgPT0gMCkKKyAgICAgIHsKKwlpZiAoKGRhZW1vbi0+cmFuZG9tc29ja3NbaV0uZmQgPSByYW5kb21fc29jayhmYW1pbHkpKSA9PSAtMSkKKwkgIGJyZWFrOworICAgICAgCisJZGFlbW9uLT5yYW5kb21zb2Nrc1tpXS5yZWZjb3VudCA9IDE7CisJZGFlbW9uLT5yYW5kb21zb2Nrc1tpXS5mYW1pbHkgPSBmYW1pbHk7CisJcmV0dXJuICZkYWVtb24tPnJhbmRvbXNvY2tzW2ldOworICAgICAgfQorCisgIC8qIE5vIGZyZWUgb25lcyBvciBjYW5ub3QgZ2V0IG5ldyBzb2NrZXQsIGdyYWIgYW4gZXhpc3Rpbmcgb25lICovCisgIGZvciAoaSA9IDA7IGkgPCBSQU5ET01fU09DS1M7IGkrKykKKyAgICB7CisgICAgICBpbnQgaiA9IChpK2ZpbmdlcikgJSBSQU5ET01fU09DS1M7CisgICAgICBpZiAoZGFlbW9uLT5yYW5kb21zb2Nrc1tqXS5yZWZjb3VudCAhPSAwICYmCisJICBkYWVtb24tPnJhbmRvbXNvY2tzW2pdLmZhbWlseSA9PSBmYW1pbHkgJiYgCisJICBkYWVtb24tPnJhbmRvbXNvY2tzW2pdLnJlZmNvdW50ICE9IDB4ZmZmZikKKwl7CisJICBmaW5nZXIgPSBqOworCSAgZGFlbW9uLT5yYW5kb21zb2Nrc1tqXS5yZWZjb3VudCsrOworCSAgcmV0dXJuICZkYWVtb24tPnJhbmRvbXNvY2tzW2pdOworCX0KKyAgICB9CisKKyAgcmV0dXJuIE5VTEw7IC8qIGRvb20gKi8KK30KKwordm9pZCBmcmVlX3JmZChzdHJ1Y3QgcmFuZGZkICpyZmQpCit7CisgIGlmIChyZmQgJiYgLS0ocmZkLT5yZWZjb3VudCkgPT0gMCkKKyAgICBjbG9zZShyZmQtPmZkKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9mcmVjKHN0cnVjdCBmcmVjICpmKQoreworICBmcmVlX3JmZChmLT5yZmQ0KTsKKyAgZi0+cmZkNCA9IE5VTEw7CisgIGYtPnNlbnR0byA9IE5VTEw7CisgIGYtPmZsYWdzID0gMDsKKyAgCisjaWZkZWYgSEFWRV9JUFY2CisgIGZyZWVfcmZkKGYtPnJmZDYpOworICBmLT5yZmQ2ID0gTlVMTDsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9ETlNTRUMKKyAgaWYgKGYtPnN0YXNoKQorICAgIHsKKyAgICAgIGJsb2NrZGF0YV9mcmVlKGYtPnN0YXNoKTsKKyAgICAgIGYtPnN0YXNoID0gTlVMTDsKKyAgICB9CisKKyAgaWYgKGYtPm9yaWdfZG9tYWluKQorICAgIHsKKyAgICAgIGJsb2NrZGF0YV9mcmVlKGYtPm9yaWdfZG9tYWluKTsKKyAgICAgIGYtPm9yaWdfZG9tYWluID0gTlVMTDsKKyAgICB9CisKKyAgLyogQW55dGhpbmcgd2UncmUgd2FpdGluZyBvbiBpcyBwb2ludGxlc3Mgbm93LCB0b28gKi8KKyAgaWYgKGYtPmJsb2NraW5nX3F1ZXJ5KQorICAgIGZyZWVfZnJlYyhmLT5ibG9ja2luZ19xdWVyeSk7CisgIGYtPmJsb2NraW5nX3F1ZXJ5ID0gTlVMTDsKKyAgZi0+ZGVwZW5kZW50ID0gTlVMTDsKKyNlbmRpZgorfQorCisvKiBpZiB3YWl0PT1OVUxMIHJldHVybiBhIGZyZWUgb3Igb2xkZXIgdGhhbiBUSU1FT1VUIHJlY29yZC4KKyAgIGVsc2UgcmV0dXJuICp3YWl0IHplcm8gaWYgb25lIGF2YWlsYWJsZSwgb3IgKndhaXQgaXMgZGVsYXkgdG8KKyAgIHdoZW4gdGhlIG9sZGVzdCBpbi11c2UgcmVjb3JkIHdpbGwgZXhwaXJlLiBJbXBvc2UgYW4gYWJzb2x1dGUKKyAgIGxpbWl0IG9mIDQqVElNRU9VVCBiZWZvcmUgd2Ugd2lwZSB0aGluZ3MgKGZvciByYW5kb20gc29ja2V0cykuCisgICBJZiBmb3JjZSBpcyBzZXQsIGFsd2F5cyByZXR1cm4gYSByZXN1bHQsIGV2ZW4gaWYgd2UgaGF2ZQorICAgdG8gYWxsb2NhdGUgYWJvdmUgdGhlIGxpbWl0LiAqLworc3RydWN0IGZyZWMgKmdldF9uZXdfZnJlYyh0aW1lX3Qgbm93LCBpbnQgKndhaXQsIGludCBmb3JjZSkKK3sKKyAgc3RydWN0IGZyZWMgKmYsICpvbGRlc3QsICp0YXJnZXQ7CisgIGludCBjb3VudDsKKyAgCisgIGlmICh3YWl0KQorICAgICp3YWl0ID0gMDsKKworICBmb3IgKGYgPSBkYWVtb24tPmZyZWNfbGlzdCwgb2xkZXN0ID0gTlVMTCwgdGFyZ2V0ID0gIE5VTEwsIGNvdW50ID0gMDsgZjsgZiA9IGYtPm5leHQsIGNvdW50KyspCisgICAgaWYgKCFmLT5zZW50dG8pCisgICAgICB0YXJnZXQgPSBmOworICAgIGVsc2UgCisgICAgICB7CisJaWYgKGRpZmZ0aW1lKG5vdywgZi0+dGltZSkgPj0gNCpUSU1FT1VUKQorCSAgeworCSAgICBmcmVlX2ZyZWMoZik7CisJICAgIHRhcmdldCA9IGY7CisJICB9CisJCisJaWYgKCFvbGRlc3QgfHwgZGlmZnRpbWUoZi0+dGltZSwgb2xkZXN0LT50aW1lKSA8PSAwKQorCSAgb2xkZXN0ID0gZjsKKyAgICAgIH0KKworICBpZiAodGFyZ2V0KQorICAgIHsKKyAgICAgIHRhcmdldC0+dGltZSA9IG5vdzsKKyAgICAgIHJldHVybiB0YXJnZXQ7CisgICAgfQorICAKKyAgLyogY2FuJ3QgZmluZCBlbXB0eSBvbmUsIHVzZSBvbGRlc3QgaWYgdGhlcmUgaXMgb25lCisgICAgIGFuZCBpdCdzIG9sZGVyIHRoYW4gdGltZW91dCAqLworICBpZiAob2xkZXN0ICYmICgoaW50KWRpZmZ0aW1lKG5vdywgb2xkZXN0LT50aW1lKSkgPj0gVElNRU9VVCkKKyAgICB7IAorICAgICAgLyoga2VlcCBzdHVmZiBmb3IgdHdpY2UgdGltZW91dCBpZiB3ZSBjYW4gYnkgYWxsb2NhdGluZyBhIG5ldworCSByZWNvcmQgaW5zdGVhZCAqLworICAgICAgaWYgKGRpZmZ0aW1lKG5vdywgb2xkZXN0LT50aW1lKSA8IDIqVElNRU9VVCAmJiAKKwkgIGNvdW50IDw9IGRhZW1vbi0+ZnRhYnNpemUgJiYKKwkgIChmID0gYWxsb2NhdGVfZnJlYyhub3cpKSkKKwlyZXR1cm4gZjsKKworICAgICAgaWYgKCF3YWl0KQorCXsKKwkgIGZyZWVfZnJlYyhvbGRlc3QpOworCSAgb2xkZXN0LT50aW1lID0gbm93OworCX0KKyAgICAgIHJldHVybiBvbGRlc3Q7CisgICAgfQorICAKKyAgLyogbm9uZSBhdmFpbGFibGUsIGNhbGN1bGF0ZSB0aW1lICd0aWxsIG9sZGVzdCByZWNvcmQgZXhwaXJlcyAqLworICBpZiAoIWZvcmNlICYmIGNvdW50ID4gZGFlbW9uLT5mdGFic2l6ZSkKKyAgICB7CisgICAgICBzdGF0aWMgdGltZV90IGxhc3RfbG9nID0gMDsKKyAgICAgIAorICAgICAgaWYgKG9sZGVzdCAmJiB3YWl0KQorCSp3YWl0ID0gb2xkZXN0LT50aW1lICsgKHRpbWVfdClUSU1FT1VUIC0gbm93OworICAgICAgCisgICAgICBpZiAoKGludClkaWZmdGltZShub3csIGxhc3RfbG9nKSA+IDUpCisJeworCSAgbGFzdF9sb2cgPSBub3c7CisJICBteV9zeXNsb2coTE9HX1dBUk5JTkcsIF8oIk1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgRE5TIHF1ZXJpZXMgcmVhY2hlZCAobWF4OiAlZCkiKSwgZGFlbW9uLT5mdGFic2l6ZSk7CisJfQorCisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIAorICBpZiAoIShmID0gYWxsb2NhdGVfZnJlYyhub3cpKSAmJiB3YWl0KQorICAgIC8qIHdhaXQgb25lIHNlY29uZCBvbiBtYWxsb2MgZmFpbHVyZSAqLworICAgICp3YWl0ID0gMTsKKworICByZXR1cm4gZjsgLyogT0sgaWYgbWFsbG9jIGZhaWxzIGFuZCB0aGlzIGlzIE5VTEwgKi8KK30KKyAKKy8qIGNyYyBpcyBhbGwtb25lcyBpZiBub3Qga25vd24uICovCitzdGF0aWMgc3RydWN0IGZyZWMgKmxvb2t1cF9mcmVjKHVuc2lnbmVkIHNob3J0IGlkLCB2b2lkICpoYXNoKQoreworICBzdHJ1Y3QgZnJlYyAqZjsKKworICBmb3IoZiA9IGRhZW1vbi0+ZnJlY19saXN0OyBmOyBmID0gZi0+bmV4dCkKKyAgICBpZiAoZi0+c2VudHRvICYmIGYtPm5ld19pZCA9PSBpZCAmJiAKKwkoIWhhc2ggfHwgbWVtY21wKGhhc2gsIGYtPmhhc2gsIEhBU0hfU0laRSkgPT0gMCkpCisgICAgICByZXR1cm4gZjsKKyAgICAgIAorICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBmcmVjICpsb29rdXBfZnJlY19ieV9zZW5kZXIodW5zaWduZWQgc2hvcnQgaWQsCisJCQkJCSAgdW5pb24gbXlzb2NrYWRkciAqYWRkciwKKwkJCQkJICB2b2lkICpoYXNoKQoreworICBzdHJ1Y3QgZnJlYyAqZjsKKyAgCisgIGZvcihmID0gZGFlbW9uLT5mcmVjX2xpc3Q7IGY7IGYgPSBmLT5uZXh0KQorICAgIGlmIChmLT5zZW50dG8gJiYKKwlmLT5vcmlnX2lkID09IGlkICYmIAorCW1lbWNtcChoYXNoLCBmLT5oYXNoLCBIQVNIX1NJWkUpID09IDAgJiYKKwlzb2NrYWRkcl9pc2VxdWFsKCZmLT5zb3VyY2UsIGFkZHIpKQorICAgICAgcmV0dXJuIGY7CisgICAKKyAgcmV0dXJuIE5VTEw7Cit9CisgCisvKiBTZW5kIHF1ZXJ5IHBhY2tldCBhZ2FpbiwgaWYgd2UgY2FuLiAqLwordm9pZCByZXNlbmRfcXVlcnkoKQoreworICBpZiAoZGFlbW9uLT5zcnZfc2F2ZSkKKyAgICB7CisgICAgICBpbnQgZmQ7CisgICAgICAKKyAgICAgIGlmIChkYWVtb24tPnNydl9zYXZlLT5zZmQpCisJZmQgPSBkYWVtb24tPnNydl9zYXZlLT5zZmQtPmZkOworICAgICAgZWxzZSBpZiAoZGFlbW9uLT5yZmRfc2F2ZSAmJiBkYWVtb24tPnJmZF9zYXZlLT5yZWZjb3VudCAhPSAwKQorCWZkID0gZGFlbW9uLT5yZmRfc2F2ZS0+ZmQ7CisgICAgICBlbHNlCisJcmV0dXJuOworICAgICAgCisgICAgICB3aGlsZShzZW5kdG8oZmQsIGRhZW1vbi0+cGFja2V0LCBkYWVtb24tPnBhY2tldF9sZW4sIDAsCisJCSAgICZkYWVtb24tPnNydl9zYXZlLT5hZGRyLnNhLCBzYV9sZW4oJmRhZW1vbi0+c3J2X3NhdmUtPmFkZHIpKSA9PSAtMSAmJiByZXRyeV9zZW5kKCkpOyAKKyAgICB9Cit9CisKKy8qIEEgc2VydmVyIHJlY29yZCBpcyBnb2luZyBhd2F5LCByZW1vdmUgcmVmZXJlbmNlcyB0byBpdCAqLwordm9pZCBzZXJ2ZXJfZ29uZShzdHJ1Y3Qgc2VydmVyICpzZXJ2ZXIpCit7CisgIHN0cnVjdCBmcmVjICpmOworICAKKyAgZm9yIChmID0gZGFlbW9uLT5mcmVjX2xpc3Q7IGY7IGYgPSBmLT5uZXh0KQorICAgIGlmIChmLT5zZW50dG8gJiYgZi0+c2VudHRvID09IHNlcnZlcikKKyAgICAgIGZyZWVfZnJlYyhmKTsKKyAgCisgIGlmIChkYWVtb24tPmxhc3Rfc2VydmVyID09IHNlcnZlcikKKyAgICBkYWVtb24tPmxhc3Rfc2VydmVyID0gTlVMTDsKKworICBpZiAoZGFlbW9uLT5zcnZfc2F2ZSA9PSBzZXJ2ZXIpCisgICAgZGFlbW9uLT5zcnZfc2F2ZSA9IE5VTEw7Cit9CisKKy8qIHJldHVybiB1bmlxdWUgcmFuZG9tIGlkcy4gKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBnZXRfaWQodm9pZCkKK3sKKyAgdW5zaWduZWQgc2hvcnQgcmV0ID0gMDsKKyAgCisgIGRvIAorICAgIHJldCA9IHJhbmQxNigpOworICB3aGlsZSAobG9va3VwX2ZyZWMocmV0LCBOVUxMKSk7CisgIAorICByZXR1cm4gcmV0OworfQorCisKKworCisKZGlmZiAtLWdpdCBhL3NyYy9oZWxwZXIuYyBiL3NyYy9oZWxwZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmU1M2MzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2hlbHBlci5jCkBAIC0wLDAgKzEsNzkyIEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE0IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworI2lmZGVmIEhBVkVfU0NSSVBUCisKKy8qIFRoaXMgZmlsZSBoYXMgY29kZSB0byBmb3JrIGEgaGVscGVyIHByb2Nlc3Mgd2hpY2ggcmVjaWV2ZXMgZGF0YSB2aWEgYSBwaXBlIAorICAgc2hhcmVkIHdpdGggdGhlIG1haW4gcHJvY2VzcyBhbmQgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgYSBzY3JpcHQgd2hlbgorICAgREhDUCBsZWFzZXMgY2hhbmdlLgorCisgICBUaGUgaGVscGVyIHByb2Nlc3MgaXMgZm9ya2VkIGJlZm9yZSB0aGUgbWFpbiBwcm9jZXNzIGRyb3BzIHJvb3QsIHNvIGl0IHJldGFpbnMgcm9vdCAKKyAgIHByaXZzIHRvIHBhc3Mgb24gdG8gdGhlIHNjcmlwdC4gRm9yIHRoaXMgcmVhc29uIGl0IHRyaWVzIHRvIGJlIHBhcmFub2lkIGFib3V0IAorICAgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBtYWluIHByb2Nlc3MsIGluIGNhc2UgdGhhdCBoYXMgYmVlbiBjb21wcm9taXNlZC4gV2UgZG9uJ3QKKyAgIHdhbnQgdGhlIGhlbHBlciB0byBnaXZlIGFuIGF0dGFja2VyIHJvb3QuIEluIHBhcnRpY3VsYXIsIHRoZSBzY3JpcHQgdG8gYmUgcnVuIGlzCisgICBub3Qgc2V0dGFibGUgdmlhIHRoZSBwaXBlLCBvbmNlIHRoZSBmb3JrIGhhcyB0YWtlbiBwbGFjZSBpdCBpcyBub3QgYWx0ZXJhYmxlIGJ5IHRoZSAKKyAgIG1haW4gcHJvY2Vzcy4KKyovCisKK3N0YXRpYyB2b2lkIG15X3NldGVudihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwgaW50ICplcnJvcik7CitzdGF0aWMgdW5zaWduZWQgY2hhciAqZ3JhYl9leHRyYWRhdGEodW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBjaGFyICplbmQsICBjaGFyICplbnYsIGludCAqZXJyKTsKKworI2lmZGVmIEhBVkVfTFVBU0NSSVBUCisjZGVmaW5lIExVQV9DT01QQVRfQUxMCisjaW5jbHVkZSA8bHVhLmg+ICAKKyNpbmNsdWRlIDxsdWFsaWIuaD4gIAorI2luY2x1ZGUgPGxhdXhsaWIuaD4gIAorCisjaWZuZGVmIGx1YV9vcGVuCisjZGVmaW5lIGx1YV9vcGVuKCkgICAgIGx1YUxfbmV3c3RhdGUoKQorI2VuZGlmCisKK2x1YV9TdGF0ZSAqbHVhOworCitzdGF0aWMgdW5zaWduZWQgY2hhciAqZ3JhYl9leHRyYWRhdGFfbHVhKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgY2hhciAqZW5kLCBjaGFyICpmaWVsZCk7CisjZW5kaWYKKworCitzdHJ1Y3Qgc2NyaXB0X2RhdGEKK3sKKyAgaW50IGZsYWdzOworICBpbnQgYWN0aW9uLCBod2FkZHJfbGVuLCBod2FkZHJfdHlwZTsKKyAgaW50IGNsaWRfbGVuLCBob3N0bmFtZV9sZW4sIGVkX2xlbjsKKyAgc3RydWN0IGluX2FkZHIgYWRkciwgZ2lhZGRyOworICB1bnNpZ25lZCBpbnQgcmVtYWluaW5nX3RpbWU7CisjaWZkZWYgSEFWRV9CUk9LRU5fUlRDCisgIHVuc2lnbmVkIGludCBsZW5ndGg7CisjZWxzZQorICB0aW1lX3QgZXhwaXJlczsKKyNlbmRpZgorI2lmZGVmIEhBVkVfVEZUUAorICBvZmZfdCBmaWxlX2xlbjsKKyNlbmRpZgorI2lmZGVmIEhBVkVfSVBWNgorICBzdHJ1Y3QgaW42X2FkZHIgYWRkcjY7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0RIQ1A2CisgIGludCBpYWlkLCB2ZW5kb3JjbGFzc19jb3VudDsKKyNlbmRpZgorICB1bnNpZ25lZCBjaGFyIGh3YWRkcltESENQX0NIQUREUl9NQVhdOworICBjaGFyIGludGVyZmFjZVtJRl9OQU1FU0laRV07Cit9OworCitzdGF0aWMgc3RydWN0IHNjcmlwdF9kYXRhICpidWYgPSBOVUxMOworc3RhdGljIHNpemVfdCBieXRlc19pbl9idWYgPSAwLCBidWZfc2l6ZSA9IDA7CisKK2ludCBjcmVhdGVfaGVscGVyKGludCBldmVudF9mZCwgaW50IGVycl9mZCwgdWlkX3QgdWlkLCBnaWRfdCBnaWQsIGxvbmcgbWF4X2ZkKQoreworICBwaWRfdCBwaWQ7CisgIGludCBpLCBwaXBlZmRbMl07CisgIHN0cnVjdCBzaWdhY3Rpb24gc2lnYWN0OworCisgIC8qIGNyZWF0ZSB0aGUgcGlwZSB0aHJvdWdoIHdoaWNoIHRoZSBtYWluIHByb2dyYW0gc2VuZHMgdXMgY29tbWFuZHMsCisgICAgIHRoZW4gZm9yayBvdXIgcHJvY2Vzcy4gKi8KKyAgaWYgKHBpcGUocGlwZWZkKSA9PSAtMSB8fCAhZml4X2ZkKHBpcGVmZFsxXSkgfHwgKHBpZCA9IGZvcmsoKSkgPT0gLTEpCisgICAgeworICAgICAgc2VuZF9ldmVudChlcnJfZmQsIEVWRU5UX1BJUEVfRVJSLCBlcnJubywgTlVMTCk7CisgICAgICBfZXhpdCgwKTsKKyAgICB9CisKKyAgaWYgKHBpZCAhPSAwKQorICAgIHsKKyAgICAgIGNsb3NlKHBpcGVmZFswXSk7IC8qIGNsb3NlIHJlYWRlciBzaWRlICovCisgICAgICByZXR1cm4gcGlwZWZkWzFdOworICAgIH0KKworICAvKiBpZ25vcmUgU0lHVEVSTSwgc28gdGhhdCB3ZSBjYW4gY2xlYW4gdXAgd2hlbiB0aGUgbWFpbiBwcm9jZXNzIGdldHMgaGl0CisgICAgIGFuZCBTSUdBTFJNIHNvIHRoYXQgd2UgY2FuIHVzZSBzbGVlcCgpICovCisgIHNpZ2FjdC5zYV9oYW5kbGVyID0gU0lHX0lHTjsKKyAgc2lnYWN0LnNhX2ZsYWdzID0gMDsKKyAgc2lnZW1wdHlzZXQoJnNpZ2FjdC5zYV9tYXNrKTsKKyAgc2lnYWN0aW9uKFNJR1RFUk0sICZzaWdhY3QsIE5VTEwpOworICBzaWdhY3Rpb24oU0lHQUxSTSwgJnNpZ2FjdCwgTlVMTCk7CisKKyAgaWYgKCFvcHRpb25fYm9vbChPUFRfREVCVUcpICYmIHVpZCAhPSAwKQorICAgIHsKKyAgICAgIGdpZF90IGR1bW15OworICAgICAgaWYgKHNldGdyb3VwcygwLCAmZHVtbXkpID09IC0xIHx8IAorCSAgc2V0Z2lkKGdpZCkgPT0gLTEgfHwgCisJICBzZXR1aWQodWlkKSA9PSAtMSkKKwl7CisJICBpZiAob3B0aW9uX2Jvb2woT1BUX05PX0ZPUkspKQorCSAgICAvKiBzZW5kIGVycm9yIHRvIGRhZW1vbiBwcm9jZXNzIGlmIG5vLWZvcmsgKi8KKwkgICAgc2VuZF9ldmVudChldmVudF9mZCwgRVZFTlRfVVNFUl9FUlIsIGVycm5vLCBkYWVtb24tPnNjcmlwdHVzZXIpOworCSAgZWxzZQorCSAgICB7CisJICAgICAgLyoga2lsbCBkYWVtb24gKi8KKwkgICAgICBzZW5kX2V2ZW50KGV2ZW50X2ZkLCBFVkVOVF9ESUUsIDAsIE5VTEwpOworCSAgICAgIC8qIHJldHVybiBlcnJvciAqLworCSAgICAgIHNlbmRfZXZlbnQoZXJyX2ZkLCBFVkVOVF9VU0VSX0VSUiwgZXJybm8sIGRhZW1vbi0+c2NyaXB0dXNlcik7CisJICAgIH0KKwkgIF9leGl0KDApOworCX0KKyAgICB9CisKKyAgLyogY2xvc2UgYWxsIHRoZSBzb2NrZXRzIGV0Yywgd2UgZG9uJ3QgbmVlZCB0aGVtIGhlcmUuIAorICAgICBEb24ndCBjbG9zZSBlcnJfZmQsIGluIGNhc2UgdGhlIGx1YS1pbml0IGZhaWxzLgorICAgICBOb3RlIHRoYXQgd2UgaGF2ZSB0byBkbyB0aGlzIGJlZm9yZSBsdWEgaW5pdAorICAgICBzbyB3ZSBkb24ndCBjbG9zZSBhbnkgbHVhIGZkcy4gKi8KKyAgZm9yIChtYXhfZmQtLTsgbWF4X2ZkID49IDA7IG1heF9mZC0tKQorICAgIGlmIChtYXhfZmQgIT0gU1RET1VUX0ZJTEVOTyAmJiBtYXhfZmQgIT0gU1RERVJSX0ZJTEVOTyAmJiAKKwltYXhfZmQgIT0gU1RESU5fRklMRU5PICYmIG1heF9mZCAhPSBwaXBlZmRbMF0gJiYgCisJbWF4X2ZkICE9IGV2ZW50X2ZkICYmIG1heF9mZCAhPSBlcnJfZmQpCisgICAgICBjbG9zZShtYXhfZmQpOworICAKKyNpZmRlZiBIQVZFX0xVQVNDUklQVAorICBpZiAoZGFlbW9uLT5sdWFzY3JpcHQpCisgICAgeworICAgICAgY29uc3QgY2hhciAqbHVhX2VyciA9IE5VTEw7CisgICAgICBsdWEgPSBsdWFfb3BlbigpOworICAgICAgbHVhTF9vcGVubGlicyhsdWEpOworICAgICAgCisgICAgICAvKiBnZXQgTHVhIHRvIGxvYWQgb3VyIHNjcmlwdCBmaWxlICovCisgICAgICBpZiAobHVhTF9kb2ZpbGUobHVhLCBkYWVtb24tPmx1YXNjcmlwdCkgIT0gMCkKKwlsdWFfZXJyID0gbHVhX3Rvc3RyaW5nKGx1YSwgLTEpOworICAgICAgZWxzZQorCXsKKwkgIGx1YV9nZXRnbG9iYWwobHVhLCAibGVhc2UiKTsKKwkgIGlmIChsdWFfdHlwZShsdWEsIC0xKSAhPSBMVUFfVEZVTkNUSU9OKSAKKwkgICAgbHVhX2VyciA9IF8oImxlYXNlKCkgZnVuY3Rpb24gbWlzc2luZyBpbiBMdWEgc2NyaXB0Iik7CisJfQorICAgICAgCisgICAgICBpZiAobHVhX2VycikKKwl7CisJICBpZiAob3B0aW9uX2Jvb2woT1BUX05PX0ZPUkspIHx8IG9wdGlvbl9ib29sKE9QVF9ERUJVRykpCisJICAgIC8qIHNlbmQgZXJyb3IgdG8gZGFlbW9uIHByb2Nlc3MgaWYgbm8tZm9yayAqLworCSAgICBzZW5kX2V2ZW50KGV2ZW50X2ZkLCBFVkVOVF9MVUFfRVJSLCAwLCAoY2hhciAqKWx1YV9lcnIpOworCSAgZWxzZQorCSAgICB7CisJICAgICAgLyoga2lsbCBkYWVtb24gKi8KKwkgICAgICBzZW5kX2V2ZW50KGV2ZW50X2ZkLCBFVkVOVF9ESUUsIDAsIE5VTEwpOworCSAgICAgIC8qIHJldHVybiBlcnJvciAqLworCSAgICAgIHNlbmRfZXZlbnQoZXJyX2ZkLCBFVkVOVF9MVUFfRVJSLCAwLCAoY2hhciAqKWx1YV9lcnIpOworCSAgICB9CisJICBfZXhpdCgwKTsKKwl9CisgICAgICAKKyAgICAgIGx1YV9wb3AobHVhLCAxKTsgIC8qIHJlbW92ZSBuaWwgZnJvbSBzdGFjayAqLworICAgICAgbHVhX2dldGdsb2JhbChsdWEsICJpbml0Iik7CisgICAgICBpZiAobHVhX3R5cGUobHVhLCAtMSkgPT0gTFVBX1RGVU5DVElPTikKKwlsdWFfY2FsbChsdWEsIDAsIDApOworICAgICAgZWxzZQorCWx1YV9wb3AobHVhLCAxKTsgIC8qIHJlbW92ZSBuaWwgZnJvbSBzdGFjayAqLwkKKyAgICB9CisjZW5kaWYKKworICAvKiBBbGwgaW5pdCBkb25lLCBjbG9zZSBvdXIgY29weSBvZiB0aGUgZXJyb3IgcGlwZSwgc28gdGhhdCBtYWluIHByb2Nlc3MgY2FuIHJldHVybiAqLworICBpZiAoZXJyX2ZkICE9IC0xKQorICAgIGNsb3NlKGVycl9mZCk7CisgICAgCisgIC8qIGxvb3AgaGVyZSAqLworICB3aGlsZSgxKQorICAgIHsKKyAgICAgIHN0cnVjdCBzY3JpcHRfZGF0YSBkYXRhOworICAgICAgY2hhciAqcCwgKmFjdGlvbl9zdHIsICpob3N0bmFtZSA9IE5VTEwsICpkb21haW4gPSBOVUxMOworICAgICAgdW5zaWduZWQgY2hhciAqYnVmID0gKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPm5hbWVidWZmOworICAgICAgdW5zaWduZWQgY2hhciAqZW5kLCAqZXh0cmFkYXRhLCAqYWxsb2NfYnVmZiA9IE5VTEw7CisgICAgICBpbnQgaXM2LCBlcnIgPSAwOworCisgICAgICBmcmVlKGFsbG9jX2J1ZmYpOworICAgICAgCisgICAgICAvKiB3ZSByZWFkIHplcm8gYnl0ZXMgd2hlbiBwaXBlIGNsb3NlZDogdGhpcyBpcyBvdXIgc2lnbmFsIHRvIGV4aXQgKi8gCisgICAgICBpZiAoIXJlYWRfd3JpdGUocGlwZWZkWzBdLCAodW5zaWduZWQgY2hhciAqKSZkYXRhLCBzaXplb2YoZGF0YSksIDEpKQorCXsKKyNpZmRlZiBIQVZFX0xVQVNDUklQVAorCSAgaWYgKGRhZW1vbi0+bHVhc2NyaXB0KQorCSAgICB7CisJICAgICAgbHVhX2dldGdsb2JhbChsdWEsICJzaHV0ZG93biIpOworCSAgICAgIGlmIChsdWFfdHlwZShsdWEsIC0xKSA9PSBMVUFfVEZVTkNUSU9OKQorCQlsdWFfY2FsbChsdWEsIDAsIDApOworCSAgICB9CisjZW5kaWYKKwkgIF9leGl0KDApOworCX0KKyAKKyAgICAgIGlzNiA9ICEhKGRhdGEuZmxhZ3MgJiAoTEVBU0VfVEEgfCBMRUFTRV9OQSkpOworICAgICAgCisgICAgICBpZiAoZGF0YS5hY3Rpb24gPT0gQUNUSU9OX0RFTCkKKwlhY3Rpb25fc3RyID0gImRlbCI7CisgICAgICBlbHNlIGlmIChkYXRhLmFjdGlvbiA9PSBBQ1RJT05fQUREKQorCWFjdGlvbl9zdHIgPSAiYWRkIjsKKyAgICAgIGVsc2UgaWYgKGRhdGEuYWN0aW9uID09IEFDVElPTl9PTEQgfHwgZGF0YS5hY3Rpb24gPT0gQUNUSU9OX09MRF9IT1NUTkFNRSkKKwlhY3Rpb25fc3RyID0gIm9sZCI7CisgICAgICBlbHNlIGlmIChkYXRhLmFjdGlvbiA9PSBBQ1RJT05fVEZUUCkKKwl7CisJICBhY3Rpb25fc3RyID0gInRmdHAiOworCSAgaXM2ID0gKGRhdGEuZmxhZ3MgIT0gQUZfSU5FVCk7CisJfQorICAgICAgZWxzZQorCWNvbnRpbnVlOworCisgICAgICAJCisgICAgICAvKiBzdHJpbmdpZnkgTUFDIGludG8gZGhjcF9idWZmICovCisgICAgICBwID0gZGFlbW9uLT5kaGNwX2J1ZmY7CisgICAgICBpZiAoZGF0YS5od2FkZHJfdHlwZSAhPSBBUlBIUkRfRVRIRVIgfHwgZGF0YS5od2FkZHJfbGVuID09IDApIAorCXAgKz0gc3ByaW50ZihwLCAiJS4yeC0iLCBkYXRhLmh3YWRkcl90eXBlKTsKKyAgICAgIGZvciAoaSA9IDA7IChpIDwgZGF0YS5od2FkZHJfbGVuKSAmJiAoaSA8IERIQ1BfQ0hBRERSX01BWCk7IGkrKykKKwl7CisJICBwICs9IHNwcmludGYocCwgIiUuMngiLCBkYXRhLmh3YWRkcltpXSk7CisJICBpZiAoaSAhPSBkYXRhLmh3YWRkcl9sZW4gLSAxKQorCSAgICBwICs9IHNwcmludGYocCwgIjoiKTsKKwl9CisgICAgICAKKyAgICAgIC8qIHN1cHBsaWVkIGRhdGEgbWF5IGp1c3QgZXhjZWVkIG5vcm1hbCBidWZmZXIgKHVubGlrZWx5KSAqLworICAgICAgaWYgKChkYXRhLmhvc3RuYW1lX2xlbiArIGRhdGEuZWRfbGVuICsgZGF0YS5jbGlkX2xlbikgPiBNQVhETkFNRSAmJiAKKwkgICEoYWxsb2NfYnVmZiA9IGJ1ZiA9IG1hbGxvYyhkYXRhLmhvc3RuYW1lX2xlbiArIGRhdGEuZWRfbGVuICsgZGF0YS5jbGlkX2xlbikpKQorCWNvbnRpbnVlOworICAgICAgCisgICAgICBpZiAoIXJlYWRfd3JpdGUocGlwZWZkWzBdLCBidWYsIAorCQkgICAgICBkYXRhLmhvc3RuYW1lX2xlbiArIGRhdGEuZWRfbGVuICsgZGF0YS5jbGlkX2xlbiwgMSkpCisJY29udGludWU7CisKKyAgICAgIC8qIENMSUQgaW50byBwYWNrZXQgKi8KKyAgICAgIGZvciAocCA9IGRhZW1vbi0+cGFja2V0LCBpID0gMDsgaSA8IGRhdGEuY2xpZF9sZW47IGkrKykKKwl7CisJICBwICs9IHNwcmludGYocCwgIiUuMngiLCBidWZbaV0pOworCSAgaWYgKGkgIT0gZGF0YS5jbGlkX2xlbiAtIDEpIAorCSAgICAgIHAgKz0gc3ByaW50ZihwLCAiOiIpOworCX0KKworI2lmZGVmIEhBVkVfREhDUDYKKyAgICAgIGlmIChpczYpCisJeworCSAgLyogb3IgSUFJRCBhbmQgc2VydmVyIERVSUQgZm9yIElQdjYgKi8KKwkgIHNwcmludGYoZGFlbW9uLT5kaGNwX2J1ZmYzLCAiJXMldSIsIGRhdGEuZmxhZ3MgJiBMRUFTRV9UQSA/ICJUIiA6ICIiLCBkYXRhLmlhaWQpOwkKKwkgIGZvciAocCA9IGRhZW1vbi0+ZGhjcF9wYWNrZXQuaW92X2Jhc2UsIGkgPSAwOyBpIDwgZGFlbW9uLT5kdWlkX2xlbjsgaSsrKQorCSAgICB7CisJICAgICAgcCArPSBzcHJpbnRmKHAsICIlLjJ4IiwgZGFlbW9uLT5kdWlkW2ldKTsKKwkgICAgICBpZiAoaSAhPSBkYWVtb24tPmR1aWRfbGVuIC0gMSkgCisJCXAgKz0gc3ByaW50ZihwLCAiOiIpOworCSAgICB9CisKKwl9CisjZW5kaWYKKworICAgICAgYnVmICs9IGRhdGEuY2xpZF9sZW47CisKKyAgICAgIGlmIChkYXRhLmhvc3RuYW1lX2xlbiAhPSAwKQorCXsKKwkgIGNoYXIgKmRvdDsKKwkgIGhvc3RuYW1lID0gKGNoYXIgKilidWY7CisJICBob3N0bmFtZVtkYXRhLmhvc3RuYW1lX2xlbiAtIDFdID0gMDsKKwkgIGlmIChkYXRhLmFjdGlvbiAhPSBBQ1RJT05fVEZUUCkKKwkgICAgeworCSAgICAgIGlmICghbGVnYWxfaG9zdG5hbWUoaG9zdG5hbWUpKQorCQlob3N0bmFtZSA9IE5VTEw7CisJICAgICAgZWxzZSBpZiAoKGRvdCA9IHN0cmNocihob3N0bmFtZSwgJy4nKSkpCisJCXsKKwkJICBkb21haW4gPSBkb3QrMTsKKwkJICAqZG90ID0gMDsKKwkJfSAKKwkgICAgfQorCX0KKyAgICAKKyAgICAgIGV4dHJhZGF0YSA9IGJ1ZiArIGRhdGEuaG9zdG5hbWVfbGVuOworICAgIAorICAgICAgaWYgKCFpczYpCisJaW5ldF9udG9wKEFGX0lORVQsICZkYXRhLmFkZHIsIGRhZW1vbi0+YWRkcmJ1ZmYsIEFERFJTVFJMRU4pOworI2lmZGVmIEhBVkVfREhDUDYKKyAgICAgIGVsc2UKKwlpbmV0X250b3AoQUZfSU5FVDYsICZkYXRhLmFkZHI2LCBkYWVtb24tPmFkZHJidWZmLCBBRERSU1RSTEVOKTsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9URlRQCisgICAgICAvKiBmaWxlIGxlbmd0aCAqLworICAgICAgaWYgKGRhdGEuYWN0aW9uID09IEFDVElPTl9URlRQKQorCXNwcmludGYoaXM2ID8gZGFlbW9uLT5wYWNrZXQgOiBkYWVtb24tPmRoY3BfYnVmZiwgIiVsdSIsICh1bnNpZ25lZCBsb25nKWRhdGEuZmlsZV9sZW4pOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX0xVQVNDUklQVAorICAgICAgaWYgKGRhZW1vbi0+bHVhc2NyaXB0KQorCXsKKwkgIGlmIChkYXRhLmFjdGlvbiA9PSBBQ1RJT05fVEZUUCkKKwkgICAgeworCSAgICAgIGx1YV9nZXRnbG9iYWwobHVhLCAidGZ0cCIpOyAKKwkgICAgICBpZiAobHVhX3R5cGUobHVhLCAtMSkgIT0gTFVBX1RGVU5DVElPTikKKwkJbHVhX3BvcChsdWEsIDEpOyAvKiB0ZnRwIGZ1bmN0aW9uIG9wdGlvbmFsICovCisJICAgICAgZWxzZQorCQl7CisJCSAgbHVhX3B1c2hzdHJpbmcobHVhLCBhY3Rpb25fc3RyKTsgLyogYXJnMSAtIGFjdGlvbiAqLworCQkgIGx1YV9uZXd0YWJsZShsdWEpOyAgICAgICAgICAgICAgIC8qIGFyZzIgLSBkYXRhIHRhYmxlICovCisJCSAgbHVhX3B1c2hzdHJpbmcobHVhLCBkYWVtb24tPmFkZHJidWZmKTsKKwkJICBsdWFfc2V0ZmllbGQobHVhLCAtMiwgImRlc3RpbmF0aW9uX2FkZHJlc3MiKTsKKwkJICBsdWFfcHVzaHN0cmluZyhsdWEsIGhvc3RuYW1lKTsKKwkJICBsdWFfc2V0ZmllbGQobHVhLCAtMiwgImZpbGVfbmFtZSIpOyAKKwkJICBsdWFfcHVzaHN0cmluZyhsdWEsIGlzNiA/IGRhZW1vbi0+cGFja2V0IDogZGFlbW9uLT5kaGNwX2J1ZmYpOworCQkgIGx1YV9zZXRmaWVsZChsdWEsIC0yLCAiZmlsZV9zaXplIik7CisJCSAgbHVhX2NhbGwobHVhLCAyLCAwKTsJLyogcGFzcyAyIHZhbHVlcywgZXhwZWN0IDAgKi8KKwkJfQorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBsdWFfZ2V0Z2xvYmFsKGx1YSwgImxlYXNlIik7ICAgICAvKiBmdW5jdGlvbiB0byBjYWxsICovCisJICAgICAgbHVhX3B1c2hzdHJpbmcobHVhLCBhY3Rpb25fc3RyKTsgLyogYXJnMSAtIGFjdGlvbiAqLworCSAgICAgIGx1YV9uZXd0YWJsZShsdWEpOyAgICAgICAgICAgICAgIC8qIGFyZzIgLSBkYXRhIHRhYmxlICovCisJICAgICAgCisJICAgICAgaWYgKGlzNikKKwkJeworCQkgIGx1YV9wdXNoc3RyaW5nKGx1YSwgZGFlbW9uLT5wYWNrZXQpOworCQkgIGx1YV9zZXRmaWVsZChsdWEsIC0yLCAiY2xpZW50X2R1aWQiKTsKKwkJICBsdWFfcHVzaHN0cmluZyhsdWEsIGRhZW1vbi0+ZGhjcF9wYWNrZXQuaW92X2Jhc2UpOworCQkgIGx1YV9zZXRmaWVsZChsdWEsIC0yLCAic2VydmVyX2R1aWQiKTsKKwkJICBsdWFfcHVzaHN0cmluZyhsdWEsIGRhZW1vbi0+ZGhjcF9idWZmMyk7CisJCSAgbHVhX3NldGZpZWxkKGx1YSwgLTIsICJpYWlkIik7CisJCX0KKwkgICAgICAKKwkgICAgICBpZiAoIWlzNiAmJiBkYXRhLmNsaWRfbGVuICE9IDApCisJCXsKKwkJICBsdWFfcHVzaHN0cmluZyhsdWEsIGRhZW1vbi0+cGFja2V0KTsKKwkJICBsdWFfc2V0ZmllbGQobHVhLCAtMiwgImNsaWVudF9pZCIpOworCQl9CisJICAgICAgCisJICAgICAgaWYgKHN0cmxlbihkYXRhLmludGVyZmFjZSkgIT0gMCkKKwkJeworCQkgIGx1YV9wdXNoc3RyaW5nKGx1YSwgZGF0YS5pbnRlcmZhY2UpOworCQkgIGx1YV9zZXRmaWVsZChsdWEsIC0yLCAiaW50ZXJmYWNlIik7CisJCX0KKwkgICAgICAKKyNpZmRlZiBIQVZFX0JST0tFTl9SVEMJCisJICAgICAgbHVhX3B1c2hudW1iZXIobHVhLCBkYXRhLmxlbmd0aCk7CisJICAgICAgbHVhX3NldGZpZWxkKGx1YSwgLTIsICJsZWFzZV9sZW5ndGgiKTsKKyNlbHNlCisJICAgICAgbHVhX3B1c2hudW1iZXIobHVhLCBkYXRhLmV4cGlyZXMpOworCSAgICAgIGx1YV9zZXRmaWVsZChsdWEsIC0yLCAibGVhc2VfZXhwaXJlcyIpOworI2VuZGlmCisJICAgICAgCisJICAgICAgaWYgKGhvc3RuYW1lKQorCQl7CisJCSAgbHVhX3B1c2hzdHJpbmcobHVhLCBob3N0bmFtZSk7CisJCSAgbHVhX3NldGZpZWxkKGx1YSwgLTIsICJob3N0bmFtZSIpOworCQl9CisJICAgICAgCisJICAgICAgaWYgKGRvbWFpbikKKwkJeworCQkgIGx1YV9wdXNoc3RyaW5nKGx1YSwgZG9tYWluKTsKKwkJICBsdWFfc2V0ZmllbGQobHVhLCAtMiwgImRvbWFpbiIpOworCQl9CisJICAgICAgCisJICAgICAgZW5kID0gZXh0cmFkYXRhICsgZGF0YS5lZF9sZW47CisJICAgICAgYnVmID0gZXh0cmFkYXRhOworCSAgICAgIAorCSAgICAgIGlmICghaXM2KQorCQlidWYgPSBncmFiX2V4dHJhZGF0YV9sdWEoYnVmLCBlbmQsICJ2ZW5kb3JfY2xhc3MiKTsKKyNpZmRlZiBIQVZFX0RIQ1A2CisJICAgICAgZWxzZSAgaWYgKGRhdGEudmVuZG9yY2xhc3NfY291bnQgIT0gMCkKKwkJeworCQkgIHNwcmludGYoZGFlbW9uLT5kaGNwX2J1ZmYyLCAidmVuZG9yX2NsYXNzX2lkIik7CisJCSAgYnVmID0gZ3JhYl9leHRyYWRhdGFfbHVhKGJ1ZiwgZW5kLCBkYWVtb24tPmRoY3BfYnVmZjIpOworCQkgIGZvciAoaSA9IDA7IGkgPCBkYXRhLnZlbmRvcmNsYXNzX2NvdW50IC0gMTsgaSsrKQorCQkgICAgeworCQkgICAgICBzcHJpbnRmKGRhZW1vbi0+ZGhjcF9idWZmMiwgInZlbmRvcl9jbGFzcyVpIiwgaSk7CisJCSAgICAgIGJ1ZiA9IGdyYWJfZXh0cmFkYXRhX2x1YShidWYsIGVuZCwgZGFlbW9uLT5kaGNwX2J1ZmYyKTsKKwkJICAgIH0KKwkJfQorI2VuZGlmCisJICAgICAgCisJICAgICAgYnVmID0gZ3JhYl9leHRyYWRhdGFfbHVhKGJ1ZiwgZW5kLCAic3VwcGxpZWRfaG9zdG5hbWUiKTsKKwkgICAgICAKKwkgICAgICBpZiAoIWlzNikKKwkJeworCQkgIGJ1ZiA9IGdyYWJfZXh0cmFkYXRhX2x1YShidWYsIGVuZCwgImNwZXdhbl9vdWkiKTsKKwkJICBidWYgPSBncmFiX2V4dHJhZGF0YV9sdWEoYnVmLCBlbmQsICJjcGV3YW5fc2VyaWFsIik7ICAgCisJCSAgYnVmID0gZ3JhYl9leHRyYWRhdGFfbHVhKGJ1ZiwgZW5kLCAiY3Bld2FuX2NsYXNzIik7CisJCSAgYnVmID0gZ3JhYl9leHRyYWRhdGFfbHVhKGJ1ZiwgZW5kLCAiY2lyY3VpdF9pZCIpOworCQkgIGJ1ZiA9IGdyYWJfZXh0cmFkYXRhX2x1YShidWYsIGVuZCwgInN1YnNjcmliZXJfaWQiKTsKKwkJICBidWYgPSBncmFiX2V4dHJhZGF0YV9sdWEoYnVmLCBlbmQsICJyZW1vdGVfaWQiKTsKKwkJfQorCSAgICAgIAorCSAgICAgIGJ1ZiA9IGdyYWJfZXh0cmFkYXRhX2x1YShidWYsIGVuZCwgInRhZ3MiKTsKKwkgICAgICAKKwkgICAgICBpZiAoaXM2KQorCQlidWYgPSBncmFiX2V4dHJhZGF0YV9sdWEoYnVmLCBlbmQsICJyZWxheV9hZGRyZXNzIik7CisJICAgICAgZWxzZSBpZiAoZGF0YS5naWFkZHIuc19hZGRyICE9IDApCisJCXsKKwkJICBsdWFfcHVzaHN0cmluZyhsdWEsIGluZXRfbnRvYShkYXRhLmdpYWRkcikpOworCQkgIGx1YV9zZXRmaWVsZChsdWEsIC0yLCAicmVsYXlfYWRkcmVzcyIpOworCQl9CisJICAgICAgCisJICAgICAgZm9yIChpID0gMDsgYnVmOyBpKyspCisJCXsKKwkJICBzcHJpbnRmKGRhZW1vbi0+ZGhjcF9idWZmMiwgInVzZXJfY2xhc3MlaSIsIGkpOworCQkgIGJ1ZiA9IGdyYWJfZXh0cmFkYXRhX2x1YShidWYsIGVuZCwgZGFlbW9uLT5kaGNwX2J1ZmYyKTsKKwkJfQorCSAgICAgIAorCSAgICAgIGlmIChkYXRhLmFjdGlvbiAhPSBBQ1RJT05fREVMICYmIGRhdGEucmVtYWluaW5nX3RpbWUgIT0gMCkKKwkJeworCQkgIGx1YV9wdXNobnVtYmVyKGx1YSwgZGF0YS5yZW1haW5pbmdfdGltZSk7CisJCSAgbHVhX3NldGZpZWxkKGx1YSwgLTIsICJ0aW1lX3JlbWFpbmluZyIpOworCQl9CisJICAgICAgCisJICAgICAgaWYgKGRhdGEuYWN0aW9uID09IEFDVElPTl9PTERfSE9TVE5BTUUgJiYgaG9zdG5hbWUpCisJCXsKKwkJICBsdWFfcHVzaHN0cmluZyhsdWEsIGhvc3RuYW1lKTsKKwkJICBsdWFfc2V0ZmllbGQobHVhLCAtMiwgIm9sZF9ob3N0bmFtZSIpOworCQl9CisJICAgICAgCisJICAgICAgaWYgKCFpczYgfHwgZGF0YS5od2FkZHJfbGVuICE9IDApCisJCXsKKwkJICBsdWFfcHVzaHN0cmluZyhsdWEsIGRhZW1vbi0+ZGhjcF9idWZmKTsKKwkJICBsdWFfc2V0ZmllbGQobHVhLCAtMiwgIm1hY19hZGRyZXNzIik7CisJCX0KKwkgICAgICAKKwkgICAgICBsdWFfcHVzaHN0cmluZyhsdWEsIGRhZW1vbi0+YWRkcmJ1ZmYpOworCSAgICAgIGx1YV9zZXRmaWVsZChsdWEsIC0yLCAiaXBfYWRkcmVzcyIpOworCSAgICAKKwkgICAgICBsdWFfY2FsbChsdWEsIDIsIDApOwkvKiBwYXNzIDIgdmFsdWVzLCBleHBlY3QgMCAqLworCSAgICB9CisJfQorI2VuZGlmCisKKyAgICAgIC8qIG5vIHNjcmlwdCwganVzdCBsdWEgKi8KKyAgICAgIGlmICghZGFlbW9uLT5sZWFzZV9jaGFuZ2VfY29tbWFuZCkKKwljb250aW51ZTsKKworICAgICAgLyogcG9zc2libGUgZm9yayBlcnJvcnMgYXJlIGFsbCB0ZW1wb3JhcnkgcmVzb3VyY2UgcHJvYmxlbXMgKi8KKyAgICAgIHdoaWxlICgocGlkID0gZm9yaygpKSA9PSAtMSAmJiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVOT01FTSkpCisJc2xlZXAoMik7CisKKyAgICAgIGlmIChwaWQgPT0gLTEpCisJY29udGludWU7CisgICAgICAKKyAgICAgIC8qIHdhaXQgZm9yIGNoaWxkIHRvIGNvbXBsZXRlICovCisgICAgICBpZiAocGlkICE9IDApCisJeworCSAgLyogcmVhcCBvdXIgY2hpbGRyZW4ncyBjaGlsZHJlbiwgaWYgbmVjZXNzYXJ5ICovCisJICB3aGlsZSAoMSkKKwkgICAgeworCSAgICAgIGludCBzdGF0dXM7CisJICAgICAgcGlkX3QgcmMgPSB3YWl0KCZzdGF0dXMpOworCSAgICAgIAorCSAgICAgIGlmIChyYyA9PSBwaWQpCisJCXsKKwkJICAvKiBPbiBlcnJvciBzZW5kIGV2ZW50IGJhY2sgdG8gbWFpbiBwcm9jZXNzIGZvciBsb2dnaW5nICovCisJCSAgaWYgKFdJRlNJR05BTEVEKHN0YXR1cykpCisJCSAgICBzZW5kX2V2ZW50KGV2ZW50X2ZkLCBFVkVOVF9LSUxMRUQsIFdURVJNU0lHKHN0YXR1cyksIE5VTEwpOworCQkgIGVsc2UgaWYgKFdJRkVYSVRFRChzdGF0dXMpICYmIFdFWElUU1RBVFVTKHN0YXR1cykgIT0gMCkKKwkJICAgIHNlbmRfZXZlbnQoZXZlbnRfZmQsIEVWRU5UX0VYSVRFRCwgV0VYSVRTVEFUVVMoc3RhdHVzKSwgTlVMTCk7CisJCSAgYnJlYWs7CisJCX0KKwkgICAgICAKKwkgICAgICBpZiAocmMgPT0gLTEgJiYgZXJybm8gIT0gRUlOVFIpCisJCWJyZWFrOworCSAgICB9CisJICAKKwkgIGNvbnRpbnVlOworCX0KKyAgICAgIAorICAgICAgaWYgKGRhdGEuYWN0aW9uICE9IEFDVElPTl9URlRQKQorCXsKKyNpZmRlZiBIQVZFX0RIQ1A2CisJICBteV9zZXRlbnYoIkROU01BU1FfSUFJRCIsIGlzNiA/IGRhZW1vbi0+ZGhjcF9idWZmMyA6IE5VTEwsICZlcnIpOworCSAgbXlfc2V0ZW52KCJETlNNQVNRX1NFUlZFUl9EVUlEIiwgaXM2ID8gZGFlbW9uLT5kaGNwX3BhY2tldC5pb3ZfYmFzZSA6IE5VTEwsICZlcnIpOyAKKwkgIG15X3NldGVudigiRE5TTUFTUV9NQUMiLCBpczYgJiYgZGF0YS5od2FkZHJfbGVuICE9IDAgPyBkYWVtb24tPmRoY3BfYnVmZiA6IE5VTEwsICZlcnIpOworI2VuZGlmCisJICAKKwkgIG15X3NldGVudigiRE5TTUFTUV9DTElFTlRfSUQiLCAhaXM2ICYmIGRhdGEuY2xpZF9sZW4gIT0gMCA/IGRhZW1vbi0+cGFja2V0IDogTlVMTCwgJmVycik7CisJICBteV9zZXRlbnYoIkROU01BU1FfSU5URVJGQUNFIiwgc3RybGVuKGRhdGEuaW50ZXJmYWNlKSAhPSAwID8gZGF0YS5pbnRlcmZhY2UgOiBOVUxMLCAmZXJyKTsKKwkgIAorI2lmZGVmIEhBVkVfQlJPS0VOX1JUQworCSAgc3ByaW50ZihkYWVtb24tPmRoY3BfYnVmZjIsICIldSIsIGRhdGEubGVuZ3RoKTsKKwkgIG15X3NldGVudigiRE5TTUFTUV9MRUFTRV9MRU5HVEgiLCBkYWVtb24tPmRoY3BfYnVmZjIsICZlcnIpOworI2Vsc2UKKwkgIHNwcmludGYoZGFlbW9uLT5kaGNwX2J1ZmYyLCAiJWx1IiwgKHVuc2lnbmVkIGxvbmcpZGF0YS5leHBpcmVzKTsKKwkgIG15X3NldGVudigiRE5TTUFTUV9MRUFTRV9FWFBJUkVTIiwgZGFlbW9uLT5kaGNwX2J1ZmYyLCAmZXJyKTsgCisjZW5kaWYKKwkgIAorCSAgbXlfc2V0ZW52KCJETlNNQVNRX0RPTUFJTiIsIGRvbWFpbiwgJmVycik7CisJICAKKwkgIGVuZCA9IGV4dHJhZGF0YSArIGRhdGEuZWRfbGVuOworCSAgYnVmID0gZXh0cmFkYXRhOworCSAgCisJICBpZiAoIWlzNikKKwkgICAgYnVmID0gZ3JhYl9leHRyYWRhdGEoYnVmLCBlbmQsICJETlNNQVNRX1ZFTkRPUl9DTEFTUyIsICZlcnIpOworI2lmZGVmIEhBVkVfREhDUDYKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGlmIChkYXRhLnZlbmRvcmNsYXNzX2NvdW50ICE9IDApCisJCXsKKwkJICBidWYgPSBncmFiX2V4dHJhZGF0YShidWYsIGVuZCwgIkROU01BU1FfVkVORE9SX0NMQVNTX0lEIiwgJmVycik7CisJCSAgZm9yIChpID0gMDsgaSA8IGRhdGEudmVuZG9yY2xhc3NfY291bnQgLSAxOyBpKyspCisJCSAgICB7CisJCSAgICAgIHNwcmludGYoZGFlbW9uLT5kaGNwX2J1ZmYyLCAiRE5TTUFTUV9WRU5ET1JfQ0xBU1MlaSIsIGkpOworCQkgICAgICBidWYgPSBncmFiX2V4dHJhZGF0YShidWYsIGVuZCwgZGFlbW9uLT5kaGNwX2J1ZmYyLCAmZXJyKTsKKwkJICAgIH0KKwkJfQorCSAgICB9CisjZW5kaWYKKwkgIAorCSAgYnVmID0gZ3JhYl9leHRyYWRhdGEoYnVmLCBlbmQsICJETlNNQVNRX1NVUFBMSUVEX0hPU1ROQU1FIiwgJmVycik7CisJICAKKwkgIGlmICghaXM2KQorCSAgICB7CisJICAgICAgYnVmID0gZ3JhYl9leHRyYWRhdGEoYnVmLCBlbmQsICJETlNNQVNRX0NQRVdBTl9PVUkiLCAmZXJyKTsKKwkgICAgICBidWYgPSBncmFiX2V4dHJhZGF0YShidWYsIGVuZCwgIkROU01BU1FfQ1BFV0FOX1NFUklBTCIsICZlcnIpOyAgIAorCSAgICAgIGJ1ZiA9IGdyYWJfZXh0cmFkYXRhKGJ1ZiwgZW5kLCAiRE5TTUFTUV9DUEVXQU5fQ0xBU1MiLCAmZXJyKTsKKwkgICAgICBidWYgPSBncmFiX2V4dHJhZGF0YShidWYsIGVuZCwgIkROU01BU1FfQ0lSQ1VJVF9JRCIsICZlcnIpOworCSAgICAgIGJ1ZiA9IGdyYWJfZXh0cmFkYXRhKGJ1ZiwgZW5kLCAiRE5TTUFTUV9TVUJTQ1JJQkVSX0lEIiwgJmVycik7CisJICAgICAgYnVmID0gZ3JhYl9leHRyYWRhdGEoYnVmLCBlbmQsICJETlNNQVNRX1JFTU9URV9JRCIsICZlcnIpOworCSAgICB9CisJICAKKwkgIGJ1ZiA9IGdyYWJfZXh0cmFkYXRhKGJ1ZiwgZW5kLCAiRE5TTUFTUV9UQUdTIiwgJmVycik7CisKKwkgIGlmIChpczYpCisJICAgIGJ1ZiA9IGdyYWJfZXh0cmFkYXRhKGJ1ZiwgZW5kLCAiRE5TTUFTUV9SRUxBWV9BRERSRVNTIiwgJmVycik7CisJICBlbHNlIAorCSAgICBteV9zZXRlbnYoIkROU01BU1FfUkVMQVlfQUREUkVTUyIsIGRhdGEuZ2lhZGRyLnNfYWRkciAhPSAwID8gaW5ldF9udG9hKGRhdGEuZ2lhZGRyKSA6IE5VTEwsICZlcnIpOyAKKwkgIAorCSAgZm9yIChpID0gMDsgYnVmOyBpKyspCisJICAgIHsKKwkgICAgICBzcHJpbnRmKGRhZW1vbi0+ZGhjcF9idWZmMiwgIkROU01BU1FfVVNFUl9DTEFTUyVpIiwgaSk7CisJICAgICAgYnVmID0gZ3JhYl9leHRyYWRhdGEoYnVmLCBlbmQsIGRhZW1vbi0+ZGhjcF9idWZmMiwgJmVycik7CisJICAgIH0KKwkgIAorCSAgc3ByaW50ZihkYWVtb24tPmRoY3BfYnVmZjIsICIldSIsIGRhdGEucmVtYWluaW5nX3RpbWUpOworCSAgbXlfc2V0ZW52KCJETlNNQVNRX1RJTUVfUkVNQUlOSU5HIiwgZGF0YS5hY3Rpb24gIT0gQUNUSU9OX0RFTCAmJiBkYXRhLnJlbWFpbmluZ190aW1lICE9IDAgPyBkYWVtb24tPmRoY3BfYnVmZjIgOiBOVUxMLCAmZXJyKTsKKwkgIAorCSAgbXlfc2V0ZW52KCJETlNNQVNRX09MRF9IT1NUTkFNRSIsIGRhdGEuYWN0aW9uID09IEFDVElPTl9PTERfSE9TVE5BTUUgPyBob3N0bmFtZSA6IE5VTEwsICZlcnIpOworCSAgaWYgKGRhdGEuYWN0aW9uID09IEFDVElPTl9PTERfSE9TVE5BTUUpCisJICAgIGhvc3RuYW1lID0gTlVMTDsKKwl9CisKKyAgICAgIG15X3NldGVudigiRE5TTUFTUV9MT0dfREhDUCIsIG9wdGlvbl9ib29sKE9QVF9MT0dfT1BUUykgPyAiMSIgOiBOVUxMLCAmZXJyKTsKKyAgICAgIAorICAgICAgLyogd2UgbmVlZCB0byBoYXZlIHRoZSBldmVudF9mZCBhcm91bmQgaWYgZXhlYyBmYWlscyAqLworICAgICAgaWYgKChpID0gZmNudGwoZXZlbnRfZmQsIEZfR0VURkQpKSAhPSAtMSkKKwlmY250bChldmVudF9mZCwgRl9TRVRGRCwgaSB8IEZEX0NMT0VYRUMpOworICAgICAgY2xvc2UocGlwZWZkWzBdKTsKKworICAgICAgcCA9ICBzdHJyY2hyKGRhZW1vbi0+bGVhc2VfY2hhbmdlX2NvbW1hbmQsICcvJyk7CisgICAgICBpZiAoZXJyID09IDApCisJeworCSAgZXhlY2woZGFlbW9uLT5sZWFzZV9jaGFuZ2VfY29tbWFuZCwgCisJCXAgPyBwKzEgOiBkYWVtb24tPmxlYXNlX2NoYW5nZV9jb21tYW5kLAorCQlhY3Rpb25fc3RyLCBpczYgPyBkYWVtb24tPnBhY2tldCA6IGRhZW1vbi0+ZGhjcF9idWZmLCAKKwkJZGFlbW9uLT5hZGRyYnVmZiwgaG9zdG5hbWUsIChjaGFyKilOVUxMKTsKKwkgIGVyciA9IGVycm5vOworCX0KKyAgICAgIC8qIGZhaWxlZCwgc2VuZCBldmVudCBzbyB0aGUgbWFpbiBwcm9jZXNzIGxvZ3MgdGhlIHByb2JsZW0gKi8KKyAgICAgIHNlbmRfZXZlbnQoZXZlbnRfZmQsIEVWRU5UX0VYRUNfRVJSLCBlcnIsIE5VTEwpOworICAgICAgX2V4aXQoMCk7IAorICAgIH0KK30KKworc3RhdGljIHZvaWQgbXlfc2V0ZW52KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgKmVycm9yKQoreworICBpZiAoKmVycm9yID09IDApCisgICAgeworICAgICAgaWYgKCF2YWx1ZSkKKwl1bnNldGVudihuYW1lKTsKKyAgICAgIGVsc2UgaWYgKHNldGVudihuYW1lLCB2YWx1ZSwgMSkgIT0gMCkKKwkqZXJyb3IgPSBlcnJubzsKKyAgICB9Cit9CisgCitzdGF0aWMgdW5zaWduZWQgY2hhciAqZ3JhYl9leHRyYWRhdGEodW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBjaGFyICplbmQsICBjaGFyICplbnYsIGludCAqZXJyKQoreworICB1bnNpZ25lZCBjaGFyICpuZXh0ID0gTlVMTDsKKyAgY2hhciAqdmFsID0gTlVMTDsKKworICBpZiAoYnVmICYmIChidWYgIT0gZW5kKSkKKyAgICB7CisgICAgICBmb3IgKG5leHQgPSBidWY7IDsgbmV4dCsrKQorCWlmIChuZXh0ID09IGVuZCkKKwkgIHsKKwkgICAgbmV4dCA9IE5VTEw7CisJICAgIGJyZWFrOworCSAgfQorCWVsc2UgaWYgKCpuZXh0ID09IDApCisJICBicmVhazsKKworICAgICAgaWYgKG5leHQgJiYgKG5leHQgIT0gYnVmKSkKKwl7CisJICBjaGFyICpwOworCSAgLyogTm8gIj0iIGluIHZhbHVlICovCisJICBpZiAoKHAgPSBzdHJjaHIoKGNoYXIgKilidWYsICc9JykpKQorCSAgICAqcCA9IDA7CisJICB2YWwgPSAoY2hhciAqKWJ1ZjsKKwl9CisgICAgfQorICAKKyAgbXlfc2V0ZW52KGVudiwgdmFsLCBlcnIpOworICAgCisgIHJldHVybiBuZXh0ID8gbmV4dCArIDEgOiBOVUxMOworfQorCisjaWZkZWYgSEFWRV9MVUFTQ1JJUFQKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpncmFiX2V4dHJhZGF0YV9sdWEodW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBjaGFyICplbmQsIGNoYXIgKmZpZWxkKQoreworICB1bnNpZ25lZCBjaGFyICpuZXh0OworCisgIGlmICghYnVmIHx8IChidWYgPT0gZW5kKSkKKyAgICByZXR1cm4gTlVMTDsKKworICBmb3IgKG5leHQgPSBidWY7ICpuZXh0ICE9IDA7IG5leHQrKykKKyAgICBpZiAobmV4dCA9PSBlbmQpCisgICAgICByZXR1cm4gTlVMTDsKKyAgCisgIGlmIChuZXh0ICE9IGJ1ZikKKyAgICB7CisgICAgICBsdWFfcHVzaHN0cmluZyhsdWEsICAoY2hhciAqKWJ1Zik7CisgICAgICBsdWFfc2V0ZmllbGQobHVhLCAtMiwgZmllbGQpOworICAgIH0KKworICByZXR1cm4gbmV4dCArIDE7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgYnVmZl9hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyAgaWYgKHNpemUgPiBidWZfc2l6ZSkKKyAgICB7CisgICAgICBzdHJ1Y3Qgc2NyaXB0X2RhdGEgKm5ldzsKKyAgICAgIAorICAgICAgLyogc3RhcnQgd2l0aCByZWFzb25hYmxlIHNpemUsIHdpbGwgYWxtb3N0IG5ldmVyIG5lZWQgZXh0ZW5kaW5nLiAqLworICAgICAgaWYgKHNpemUgPCBzaXplb2Yoc3RydWN0IHNjcmlwdF9kYXRhKSArIDIwMCkKKwlzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3JpcHRfZGF0YSkgKyAyMDA7CisKKyAgICAgIGlmICghKG5ldyA9IHdoaW5lX21hbGxvYyhzaXplKSkpCisJcmV0dXJuOworICAgICAgaWYgKGJ1ZikKKwlmcmVlKGJ1Zik7CisgICAgICBidWYgPSBuZXc7CisgICAgICBidWZfc2l6ZSA9IHNpemU7CisgICAgfQorfQorCisvKiBwYWNrIHVwIGxlYXNlIGRhdGEgaW50byBhIGJ1ZmZlciAqLyAgICAKK3ZvaWQgcXVldWVfc2NyaXB0KGludCBhY3Rpb24sIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZSwgY2hhciAqaG9zdG5hbWUsIHRpbWVfdCBub3cpCit7CisgIHVuc2lnbmVkIGNoYXIgKnA7CisgIHVuc2lnbmVkIGludCBob3N0bmFtZV9sZW4gPSAwLCBjbGlkX2xlbiA9IDAsIGVkX2xlbiA9IDA7CisgIGludCBmZCA9IGRhZW1vbi0+ZGhjcGZkOworI2lmZGVmIEhBVkVfREhDUDYgCisgIGlmICghZGFlbW9uLT5kaGNwKQorICAgIGZkID0gZGFlbW9uLT5kaGNwNmZkOworI2VuZGlmCisKKyAgLyogbm8gc2NyaXB0ICovCisgIGlmIChkYWVtb24tPmhlbHBlcmZkID09IC0xKQorICAgIHJldHVybjsKKworICBpZiAobGVhc2UtPmV4dHJhZGF0YSkKKyAgICBlZF9sZW4gPSBsZWFzZS0+ZXh0cmFkYXRhX2xlbjsKKyAgaWYgKGxlYXNlLT5jbGlkKQorICAgIGNsaWRfbGVuID0gbGVhc2UtPmNsaWRfbGVuOworICBpZiAoaG9zdG5hbWUpCisgICAgaG9zdG5hbWVfbGVuID0gc3RybGVuKGhvc3RuYW1lKSArIDE7CisKKyAgYnVmZl9hbGxvYyhzaXplb2Yoc3RydWN0IHNjcmlwdF9kYXRhKSArICBjbGlkX2xlbiArIGVkX2xlbiArIGhvc3RuYW1lX2xlbik7CisKKyAgYnVmLT5hY3Rpb24gPSBhY3Rpb247CisgIGJ1Zi0+ZmxhZ3MgPSBsZWFzZS0+ZmxhZ3M7CisjaWZkZWYgSEFWRV9ESENQNiAKKyAgYnVmLT52ZW5kb3JjbGFzc19jb3VudCA9IGxlYXNlLT52ZW5kb3JjbGFzc19jb3VudDsKKyAgYnVmLT5hZGRyNiA9IGxlYXNlLT5hZGRyNjsKKyAgYnVmLT5pYWlkID0gbGVhc2UtPmlhaWQ7CisjZW5kaWYKKyAgYnVmLT5od2FkZHJfbGVuID0gbGVhc2UtPmh3YWRkcl9sZW47CisgIGJ1Zi0+aHdhZGRyX3R5cGUgPSBsZWFzZS0+aHdhZGRyX3R5cGU7CisgIGJ1Zi0+Y2xpZF9sZW4gPSBjbGlkX2xlbjsKKyAgYnVmLT5lZF9sZW4gPSBlZF9sZW47CisgIGJ1Zi0+aG9zdG5hbWVfbGVuID0gaG9zdG5hbWVfbGVuOworICBidWYtPmFkZHIgPSBsZWFzZS0+YWRkcjsKKyAgYnVmLT5naWFkZHIgPSBsZWFzZS0+Z2lhZGRyOworICBtZW1jcHkoYnVmLT5od2FkZHIsIGxlYXNlLT5od2FkZHIsIERIQ1BfQ0hBRERSX01BWCk7CisgIGlmICghaW5kZXh0b25hbWUoZmQsIGxlYXNlLT5sYXN0X2ludGVyZmFjZSwgYnVmLT5pbnRlcmZhY2UpKQorICAgIGJ1Zi0+aW50ZXJmYWNlWzBdID0gMDsKKyAgCisjaWZkZWYgSEFWRV9CUk9LRU5fUlRDIAorICBidWYtPmxlbmd0aCA9IGxlYXNlLT5sZW5ndGg7CisjZWxzZQorICBidWYtPmV4cGlyZXMgPSBsZWFzZS0+ZXhwaXJlczsKKyNlbmRpZgorCisgIGlmIChsZWFzZS0+ZXhwaXJlcyAhPSAwKQorICAgIGJ1Zi0+cmVtYWluaW5nX3RpbWUgPSAodW5zaWduZWQgaW50KWRpZmZ0aW1lKGxlYXNlLT5leHBpcmVzLCBub3cpOworICBlbHNlCisgICAgYnVmLT5yZW1haW5pbmdfdGltZSA9IDA7CisKKyAgcCA9ICh1bnNpZ25lZCBjaGFyICopKGJ1ZisxKTsKKyAgaWYgKGNsaWRfbGVuICE9IDApCisgICAgeworICAgICAgbWVtY3B5KHAsIGxlYXNlLT5jbGlkLCBjbGlkX2xlbik7CisgICAgICBwICs9IGNsaWRfbGVuOworICAgIH0KKyAgaWYgKGhvc3RuYW1lX2xlbiAhPSAwKQorICAgIHsKKyAgICAgIG1lbWNweShwLCBob3N0bmFtZSwgaG9zdG5hbWVfbGVuKTsKKyAgICAgIHAgKz0gaG9zdG5hbWVfbGVuOworICAgIH0KKyAgaWYgKGVkX2xlbiAhPSAwKQorICAgIHsKKyAgICAgIG1lbWNweShwLCBsZWFzZS0+ZXh0cmFkYXRhLCBlZF9sZW4pOworICAgICAgcCArPSBlZF9sZW47CisgICAgfQorICBieXRlc19pbl9idWYgPSBwIC0gKHVuc2lnbmVkIGNoYXIgKilidWY7Cit9CisKKyNpZmRlZiBIQVZFX1RGVFAKKy8qIFRoaXMgbmFzdGlseSByZS11c2VzIERIQ1AtZmllbGRzIGZvciBURlRQIHN0dWZmICovCit2b2lkIHF1ZXVlX3RmdHAob2ZmX3QgZmlsZV9sZW4sIGNoYXIgKmZpbGVuYW1lLCB1bmlvbiBteXNvY2thZGRyICpwZWVyKQoreworICB1bnNpZ25lZCBpbnQgZmlsZW5hbWVfbGVuOworCisgIC8qIG5vIHNjcmlwdCAqLworICBpZiAoZGFlbW9uLT5oZWxwZXJmZCA9PSAtMSkKKyAgICByZXR1cm47CisgIAorICBmaWxlbmFtZV9sZW4gPSBzdHJsZW4oZmlsZW5hbWUpICsgMTsKKyAgYnVmZl9hbGxvYyhzaXplb2Yoc3RydWN0IHNjcmlwdF9kYXRhKSArICBmaWxlbmFtZV9sZW4pOworICBtZW1zZXQoYnVmLCAwLCBzaXplb2Yoc3RydWN0IHNjcmlwdF9kYXRhKSk7CisKKyAgYnVmLT5hY3Rpb24gPSBBQ1RJT05fVEZUUDsKKyAgYnVmLT5ob3N0bmFtZV9sZW4gPSBmaWxlbmFtZV9sZW47CisgIGJ1Zi0+ZmlsZV9sZW4gPSBmaWxlX2xlbjsKKworICBpZiAoKGJ1Zi0+ZmxhZ3MgPSBwZWVyLT5zYS5zYV9mYW1pbHkpID09IEFGX0lORVQpCisgICAgYnVmLT5hZGRyID0gcGVlci0+aW4uc2luX2FkZHI7CisjaWZkZWYgSEFWRV9JUFY2CisgIGVsc2UKKyAgICBidWYtPmFkZHI2ID0gcGVlci0+aW42LnNpbjZfYWRkcjsKKyNlbmRpZgorCisgIG1lbWNweSgodW5zaWduZWQgY2hhciAqKShidWYrMSksIGZpbGVuYW1lLCBmaWxlbmFtZV9sZW4pOworICAKKyAgYnl0ZXNfaW5fYnVmID0gc2l6ZW9mKHN0cnVjdCBzY3JpcHRfZGF0YSkgKyAgZmlsZW5hbWVfbGVuOworfQorI2VuZGlmCisKK2ludCBoZWxwZXJfYnVmX2VtcHR5KHZvaWQpCit7CisgIHJldHVybiBieXRlc19pbl9idWYgPT0gMDsKK30KKwordm9pZCBoZWxwZXJfd3JpdGUodm9pZCkKK3sKKyAgc3NpemVfdCByYzsKKworICBpZiAoYnl0ZXNfaW5fYnVmID09IDApCisgICAgcmV0dXJuOworICAKKyAgaWYgKChyYyA9IHdyaXRlKGRhZW1vbi0+aGVscGVyZmQsIGJ1ZiwgYnl0ZXNfaW5fYnVmKSkgIT0gLTEpCisgICAgeworICAgICAgaWYgKGJ5dGVzX2luX2J1ZiAhPSAoc2l6ZV90KXJjKQorCW1lbW1vdmUoYnVmLCBidWYgKyByYywgYnl0ZXNfaW5fYnVmIC0gcmMpOyAKKyAgICAgIGJ5dGVzX2luX2J1ZiAtPSByYzsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVJTlRSKQorCXJldHVybjsKKyAgICAgIGJ5dGVzX2luX2J1ZiA9IDA7CisgICAgfQorfQorCisjZW5kaWYKKworCisKZGlmZiAtLWdpdCBhL3NyYy9pbm90aWZ5LmMgYi9zcmMvaW5vdGlmeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNzMwMDAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5vdGlmeS5jCkBAIC0wLDAgKzEsMTEzIEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE0IFNpbW9uIEtlbGxleQorIAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisjaWZkZWYgSEFWRV9MSU5VWF9ORVRXT1JLCisKKyNpbmNsdWRlIDxzeXMvaW5vdGlmeS5oPgorCisvKiB0aGUgc3RyYXRlZ3kgaXMgdG8gc2V0IGEgaW5vdGlmeSBvbiB0aGUgZGlyZWN0b3JpZXMgY29udGFpbmluZworICAgcmVzb2x2IGZpbGVzLCBmb3IgYW55IGZpbGVzIGluIHRoZSBkaXJlY3Rvcnkgd2hpY2ggYXJlIGNsb3NlLXdyaXRlIAorICAgb3IgbW92ZWQgaW50byB0aGUgZGlyZWN0b3J5LgorICAgCisgICBXaGVuIGVpdGhlciBvZiB0aG9zZSBoYXBwZW4sIHdlIGxvb2sgdG8gc2VlIGlmIHRoZSBmaWxlIGludm9sdmVkCisgICBpcyBhY3R1YWxseSBhIHJlc29sdi1maWxlLCBhbmQgaWYgc28sIGNhbGwgcG9sbC1yZXNvbHYgd2l0aAorICAgdGhlICJmb3JjZSIgYXJndW1lbnQsIHRvIGVuc3VyZSBpdCdzIHJlYWQuCisKKyAgIFRoaXMgYWRkcyBvbmUgbmV3IGVycm9yIGNvbmRpdGlvbjogdGhlIGRpcmVjdG9yaWVzIGNvbnRhaW5pbmcKKyAgIGFsbCBzcGVjaWZpZWQgcmVzb2x2LWZpbGVzIG11c3QgZXhpc3QgYXQgc3RhcnQtdXAsIGV2ZW4gaWYgdGhlIGFjdHVhbAorICAgZmlsZXMgZG9uJ3QuIAorKi8KKworc3RhdGljIGNoYXIgKmlub3RpZnlfYnVmZmVyOworI2RlZmluZSBJTk9USUZZX1NaIChzaXplb2Yoc3RydWN0IGlub3RpZnlfZXZlbnQpICsgTkFNRV9NQVggKyAxKQorCit2b2lkIGlub3RpZnlfZG5zbWFzcV9pbml0KCkKK3sKKyAgc3RydWN0IHJlc29sdmMgKnJlczsKKworICBpbm90aWZ5X2J1ZmZlciA9IHNhZmVfbWFsbG9jKElOT1RJRllfU1opOworCisKKyAgZGFlbW9uLT5pbm90aWZ5ZmQgPSBpbm90aWZ5X2luaXQxKElOX05PTkJMT0NLIHwgSU5fQ0xPRVhFQyk7CisgIAorICBpZiAoZGFlbW9uLT5pbm90aWZ5ZmQgPT0gLTEpCisgICAgZGllKF8oImZhaWxlZCB0byBjcmVhdGUgaW5vdGlmeTogJXMiKSwgTlVMTCwgRUNfTUlTQyk7CisgIAorICBmb3IgKHJlcyA9IGRhZW1vbi0+cmVzb2x2X2ZpbGVzOyByZXM7IHJlcyA9IHJlcy0+bmV4dCkKKyAgICB7CisgICAgICBjaGFyICpkID0gTlVMTCwgKnBhdGg7CisgICAgICAKKyAgICAgIGlmICghKHBhdGggPSByZWFscGF0aChyZXMtPm5hbWUsIE5VTEwpKSkKKwl7CisJICAvKiByZWFscGF0aCB3aWxsIGZhaWwgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCwgYnV0CisJICAgICBkbnNtYXNxIGNvcGVzIHdpdGggbWlzc2luZyBmaWxlcywgc28gZmFsbCBiYWNrIAorCSAgICAgYW5kIGFzc3VtZSB0aGF0IHN5bWxpbmtzIGFyZSBub3QgaW4gdXNlIGluIHRoYXQgY2FzZS4gKi8KKwkgIGlmIChlcnJubyA9PSBFTk9FTlQpCisJICAgIHBhdGggPSByZXMtPm5hbWU7CisJICBlbHNlCisJICAgIGRpZShfKCJjYW5ub3QgY2Fubm9uaWNhbGlzZSByZXNvbHYtZmlsZSAlczogJXMiKSwgcmVzLT5uYW1lLCBFQ19NSVNDKTsgCisJfQorICAgICAgCisgICAgICBpZiAoKGQgPSBzdHJyY2hyKHBhdGgsICcvJykpKQorCXsKKwkgICpkID0gMDsgLyogbWFrZSBwYXRoIGp1c3QgZGlyZWN0b3J5ICovCisJICByZXMtPndkID0gaW5vdGlmeV9hZGRfd2F0Y2goZGFlbW9uLT5pbm90aWZ5ZmQsIHBhdGgsIElOX0NMT1NFX1dSSVRFIHwgSU5fTU9WRURfVE8pOworCSAgcmVzLT5maWxlID0gZCsxOyAvKiBwb2ludGVyIHRvIGZpbGVuYW1lICovCisJICAqZCA9ICcvJzsKKwkgIAorCSAgaWYgKHJlcy0+d2QgPT0gLTEgJiYgZXJybm8gPT0gRU5PRU5UKQorCSAgICBkaWUoXygiZGlyZWN0b3J5ICVzIGZvciByZXNvbHYtZmlsZSBpcyBtaXNzaW5nLCBjYW5ub3QgcG9sbCIpLCByZXMtPm5hbWUsIEVDX01JU0MpOworCSAgCisJICBpZiAocmVzLT53ZCA9PSAtMSkKKwkgICAgZGllKF8oImZhaWxlZCB0byBjcmVhdGUgaW5vdGlmeSBmb3IgJXM6ICVzIiksIHJlcy0+bmFtZSwgRUNfTUlTQyk7CisJfQorICAgIH0KK30KKworaW50IGlub3RpZnlfY2hlY2sodm9pZCkKK3sKKyAgaW50IGhpdCA9IDA7CisgIAorICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBpbnQgcmM7CisgICAgICBjaGFyICpwOworICAgICAgc3RydWN0IHJlc29sdmMgKnJlczsKKyAgICAgIHN0cnVjdCBpbm90aWZ5X2V2ZW50ICppbjsKKworICAgICAgd2hpbGUgKChyYyA9IHJlYWQoZGFlbW9uLT5pbm90aWZ5ZmQsIGlub3RpZnlfYnVmZmVyLCBJTk9USUZZX1NaKSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworICAgICAgCisgICAgICBpZiAocmMgPD0gMCkKKwlicmVhazsKKyAgICAgIAorICAgICAgZm9yIChwID0gaW5vdGlmeV9idWZmZXI7IHJjIC0gKHAgLSBpbm90aWZ5X2J1ZmZlcikgPj0gKGludClzaXplb2Yoc3RydWN0IGlub3RpZnlfZXZlbnQpOyBwICs9IHNpemVvZihzdHJ1Y3QgaW5vdGlmeV9ldmVudCkgKyBpbi0+bGVuKSAKKwl7CisJICBpbiA9IChzdHJ1Y3QgaW5vdGlmeV9ldmVudCopcDsKKwkgIAorCSAgZm9yIChyZXMgPSBkYWVtb24tPnJlc29sdl9maWxlczsgcmVzOyByZXMgPSByZXMtPm5leHQpCisJICAgIGlmIChyZXMtPndkID09IGluLT53ZCAmJiBpbi0+bGVuICE9IDAgJiYgc3RyY21wKHJlcy0+ZmlsZSwgaW4tPm5hbWUpID09IDApCisJICAgICAgaGl0ID0gMTsKKwl9CisgICAgfQorCisgIHJldHVybiBoaXQ7Cit9CisKKyNlbmRpZgorCisgIAorICAKZGlmZiAtLWdpdCBhL3NyYy9pcDZhZGRyLmggYi9zcmMvaXA2YWRkci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZGNiMzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaXA2YWRkci5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMTQgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisKKworI2RlZmluZSBJTjZfSVNfQUREUl9VTEEoYSkgXAorICAgICAgICAoKCgoX19jb25zdCB1aW50MzJfdCAqKSAoYSkpWzBdICYgaHRvbmwgKDB4ZmYwMDAwMDApKSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgPT0gaHRvbmwgKDB4ZmQwMDAwMDApKQorCisjZGVmaW5lIElONl9JU19BRERSX1VMQV9aRVJPKGEpIFwKKyAgICAgICAgKCgoX19jb25zdCB1aW50MzJfdCAqKSAoYSkpWzBdID09IGh0b25sICgweGZkMDAwMDAwKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICYmICgoX19jb25zdCB1aW50MzJfdCAqKSAoYSkpWzFdID09IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICYmICgoX19jb25zdCB1aW50MzJfdCAqKSAoYSkpWzJdID09IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICYmICgoX19jb25zdCB1aW50MzJfdCAqKSAoYSkpWzNdID09IDApCisKKyNkZWZpbmUgSU42X0lTX0FERFJfTElOS19MT0NBTF9aRVJPKGEpIFwKKyAgICAgICAgKCgoX19jb25zdCB1aW50MzJfdCAqKSAoYSkpWzBdID09IGh0b25sICgweGZlODAwMDAwKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICYmICgoX19jb25zdCB1aW50MzJfdCAqKSAoYSkpWzFdID09IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICYmICgoX19jb25zdCB1aW50MzJfdCAqKSAoYSkpWzJdID09IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICYmICgoX19jb25zdCB1aW50MzJfdCAqKSAoYSkpWzNdID09IDApCisKZGlmZiAtLWdpdCBhL3NyYy9pcHNldC5jIGIvc3JjL2lwc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM1YjcyNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pcHNldC5jCkBAIC0wLDAgKzEsMjI5IEBACisvKiBpcHNldC5jIGlzIENvcHlyaWdodCAoYykgMjAxMyBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAiZG5zbWFzcS5oIgorCisjaWYgZGVmaW5lZChIQVZFX0lQU0VUKSAmJiBkZWZpbmVkKEhBVkVfTElOVVhfTkVUV09SSykKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKworLyogV2Ugd2FudCB0byBiZSBhYmxlIHRvIGNvbXBpbGUgYWdhaW5zdCBvbGQgaGVhZGVyIGZpbGVzCisgICBLZXJuZWwgdmVyc2lvbiBpcyBoYW5kbGVkIGF0IHJ1bi10aW1lLiAqLworCisjZGVmaW5lIE5GTkxfU1VCU1lTX0lQU0VUIDYKKworI2RlZmluZSBJUFNFVF9BVFRSX0RBVEEgNworI2RlZmluZSBJUFNFVF9BVFRSX0lQIDEKKyNkZWZpbmUgSVBTRVRfQVRUUl9JUEFERFJfSVBWNCAxCisjZGVmaW5lIElQU0VUX0FUVFJfSVBBRERSX0lQVjYgMgorI2RlZmluZSBJUFNFVF9BVFRSX1BST1RPQ09MIDEKKyNkZWZpbmUgSVBTRVRfQVRUUl9TRVROQU1FIDIKKyNkZWZpbmUgSVBTRVRfQ01EX0FERCA5CisjZGVmaW5lIElQU0VUX0NNRF9ERUwgMTAKKyNkZWZpbmUgSVBTRVRfTUFYTkFNRUxFTiAzMgorI2RlZmluZSBJUFNFVF9QUk9UT0NPTCA2CisKKyNpZm5kZWYgTkZORVRMSU5LX1YwCisjZGVmaW5lIE5GTkVUTElOS19WMCAgICAwCisjZW5kaWYKKworI2lmbmRlZiBOTEFfRl9ORVNURUQKKyNkZWZpbmUgTkxBX0ZfTkVTVEVECQkoMSA8PCAxNSkKKyNlbmRpZgorCisjaWZuZGVmIE5MQV9GX05FVF9CWVRFT1JERVIKKyNkZWZpbmUgTkxBX0ZfTkVUX0JZVEVPUkRFUgkoMSA8PCAxNCkKKyNlbmRpZgorCitzdHJ1Y3QgbXlfbmxhdHRyIHsKKyAgICAgICAgX191MTYgICAgICAgICAgIG5sYV9sZW47CisgICAgICAgIF9fdTE2ICAgICAgICAgICBubGFfdHlwZTsKK307CisKK3N0cnVjdCBteV9uZmdlbm1zZyB7CisgICAgICAgIF9fdTggIG5mZ2VuX2ZhbWlseTsgICAgICAgICAgICAgLyogQUZfeHh4ICovCisgICAgICAgIF9fdTggIHZlcnNpb247ICAgICAgICAgIC8qIG5mbmV0bGluayB2ZXJzaW9uICovCisgICAgICAgIF9fYmUxNiAgICByZXNfaWQ7ICAgICAgICAgICAgICAgLyogcmVzb3VyY2UgaWQgKi8KK307CisKKworLyogZGF0YSBzdHJ1Y3R1cmUgc2l6ZSBpbiBoZXJlIGlzIGZpeGVkICovCisjZGVmaW5lIEJVRkZfU1ogMjU2CisKKyNkZWZpbmUgTkxfQUxJR04obGVuKSAoKChsZW4pKzMpICYgfigzKSkKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfbmwgc25sID0geyAubmxfZmFtaWx5ID0gQUZfTkVUTElOSyB9Oworc3RhdGljIGludCBpcHNldF9zb2NrLCBvbGRfa2VybmVsOworc3RhdGljIGNoYXIgKmJ1ZmZlcjsKKworc3RhdGljIGlubGluZSB2b2lkIGFkZF9hdHRyKHN0cnVjdCBubG1zZ2hkciAqbmxoLCB1aW50MTZfdCB0eXBlLCBzaXplX3QgbGVuLCBjb25zdCB2b2lkICpkYXRhKQoreworICBzdHJ1Y3QgbXlfbmxhdHRyICphdHRyID0gKHZvaWQgKilubGggKyBOTF9BTElHTihubGgtPm5sbXNnX2xlbik7CisgIHVpbnQxNl90IHBheWxvYWRfbGVuID0gTkxfQUxJR04oc2l6ZW9mKHN0cnVjdCBteV9ubGF0dHIpKSArIGxlbjsKKyAgYXR0ci0+bmxhX3R5cGUgPSB0eXBlOworICBhdHRyLT5ubGFfbGVuID0gcGF5bG9hZF9sZW47CisgIG1lbWNweSgodm9pZCAqKWF0dHIgKyBOTF9BTElHTihzaXplb2Yoc3RydWN0IG15X25sYXR0cikpLCBkYXRhLCBsZW4pOworICBubGgtPm5sbXNnX2xlbiArPSBOTF9BTElHTihwYXlsb2FkX2xlbik7Cit9CisKK3ZvaWQgaXBzZXRfaW5pdCh2b2lkKQoreworICBzdHJ1Y3QgdXRzbmFtZSB1dHNuYW1lOworICBpbnQgdmVyc2lvbjsKKyAgY2hhciAqc3BsaXQ7CisgIAorICBpZiAodW5hbWUoJnV0c25hbWUpIDwgMCkKKyAgICBkaWUoXygiZmFpbGVkIHRvIGZpbmQga2VybmVsIHZlcnNpb246ICVzIiksIE5VTEwsIEVDX01JU0MpOworICAKKyAgc3BsaXQgPSBzdHJ0b2sodXRzbmFtZS5yZWxlYXNlLCAiLiIpOworICB2ZXJzaW9uID0gKHNwbGl0ID8gYXRvaShzcGxpdCkgOiAwKTsKKyAgc3BsaXQgPSBzdHJ0b2soTlVMTCwgIi4iKTsKKyAgdmVyc2lvbiA9IHZlcnNpb24gKiAyNTYgKyAoc3BsaXQgPyBhdG9pKHNwbGl0KSA6IDApOworICBzcGxpdCA9IHN0cnRvayhOVUxMLCAiLiIpOworICB2ZXJzaW9uID0gdmVyc2lvbiAqIDI1NiArIChzcGxpdCA/IGF0b2koc3BsaXQpIDogMCk7CisgIG9sZF9rZXJuZWwgPSAodmVyc2lvbiA8IEtFUk5FTF9WRVJTSU9OKDIsNiwzMikpOworICAKKyAgaWYgKG9sZF9rZXJuZWwgJiYgKGlwc2V0X3NvY2sgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19SQVcsIElQUFJPVE9fUkFXKSkgIT0gLTEpCisgICAgcmV0dXJuOworICAKKyAgaWYgKCFvbGRfa2VybmVsICYmIAorICAgICAgKGJ1ZmZlciA9IHNhZmVfbWFsbG9jKEJVRkZfU1opKSAmJgorICAgICAgKGlwc2V0X3NvY2sgPSBzb2NrZXQoQUZfTkVUTElOSywgU09DS19SQVcsIE5FVExJTktfTkVURklMVEVSKSkgIT0gLTEgJiYKKyAgICAgIChiaW5kKGlwc2V0X3NvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmc25sLCBzaXplb2Yoc25sKSkgIT0gLTEpKQorICAgIHJldHVybjsKKyAgCisgIGRpZSAoXygiZmFpbGVkIHRvIGNyZWF0ZSBJUHNldCBjb250cm9sIHNvY2tldDogJXMiKSwgTlVMTCwgRUNfTUlTQyk7Cit9CisKK3N0YXRpYyBpbnQgbmV3X2FkZF90b19pcHNldChjb25zdCBjaGFyICpzZXRuYW1lLCBjb25zdCBzdHJ1Y3QgYWxsX2FkZHIgKmlwYWRkciwgaW50IGFmLCBpbnQgcmVtb3ZlKQoreworICBzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKKyAgc3RydWN0IG15X25mZ2VubXNnICpuZmc7CisgIHN0cnVjdCBteV9ubGF0dHIgKm5lc3RlZFsyXTsKKyAgdWludDhfdCBwcm90bzsKKyAgaW50IGFkZHJzeiA9IElOQUREUlNaOworICBzc2l6ZV90IHJjOworCisjaWZkZWYgSEFWRV9JUFY2CisgIGlmIChhZiA9PSBBRl9JTkVUNikKKyAgICBhZGRyc3ogPSBJTjZBRERSU1o7CisjZW5kaWYKKyAgICAKKyAgaWYgKHN0cmxlbihzZXRuYW1lKSA+PSBJUFNFVF9NQVhOQU1FTEVOKSAKKyAgICB7CisgICAgICBlcnJubyA9IEVOQU1FVE9PTE9ORzsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIAorICBtZW1zZXQoYnVmZmVyLCAwLCBCVUZGX1NaKTsKKworICBubGggPSAoc3RydWN0IG5sbXNnaGRyICopYnVmZmVyOworICBubGgtPm5sbXNnX2xlbiA9IE5MX0FMSUdOKHNpemVvZihzdHJ1Y3Qgbmxtc2doZHIpKTsKKyAgbmxoLT5ubG1zZ190eXBlID0gKHJlbW92ZSA/IElQU0VUX0NNRF9ERUwgOiBJUFNFVF9DTURfQUREKSB8IChORk5MX1NVQlNZU19JUFNFVCA8PCA4KTsKKyAgbmxoLT5ubG1zZ19mbGFncyA9IE5MTV9GX1JFUVVFU1Q7CisgIAorICBuZmcgPSAoc3RydWN0IG15X25mZ2VubXNnICopKGJ1ZmZlciArIG5saC0+bmxtc2dfbGVuKTsKKyAgbmxoLT5ubG1zZ19sZW4gKz0gTkxfQUxJR04oc2l6ZW9mKHN0cnVjdCBteV9uZmdlbm1zZykpOworICBuZmctPm5mZ2VuX2ZhbWlseSA9IGFmOworICBuZmctPnZlcnNpb24gPSBORk5FVExJTktfVjA7CisgIG5mZy0+cmVzX2lkID0gaHRvbnMoMCk7CisgIAorICBwcm90byA9IElQU0VUX1BST1RPQ09MOworICBhZGRfYXR0cihubGgsIElQU0VUX0FUVFJfUFJPVE9DT0wsIHNpemVvZihwcm90byksICZwcm90byk7CisgIGFkZF9hdHRyKG5saCwgSVBTRVRfQVRUUl9TRVROQU1FLCBzdHJsZW4oc2V0bmFtZSkgKyAxLCBzZXRuYW1lKTsKKyAgbmVzdGVkWzBdID0gKHN0cnVjdCBteV9ubGF0dHIgKikoYnVmZmVyICsgTkxfQUxJR04obmxoLT5ubG1zZ19sZW4pKTsKKyAgbmxoLT5ubG1zZ19sZW4gKz0gTkxfQUxJR04oc2l6ZW9mKHN0cnVjdCBteV9ubGF0dHIpKTsKKyAgbmVzdGVkWzBdLT5ubGFfdHlwZSA9IE5MQV9GX05FU1RFRCB8IElQU0VUX0FUVFJfREFUQTsKKyAgbmVzdGVkWzFdID0gKHN0cnVjdCBteV9ubGF0dHIgKikoYnVmZmVyICsgTkxfQUxJR04obmxoLT5ubG1zZ19sZW4pKTsKKyAgbmxoLT5ubG1zZ19sZW4gKz0gTkxfQUxJR04oc2l6ZW9mKHN0cnVjdCBteV9ubGF0dHIpKTsKKyAgbmVzdGVkWzFdLT5ubGFfdHlwZSA9IE5MQV9GX05FU1RFRCB8IElQU0VUX0FUVFJfSVA7CisgIGFkZF9hdHRyKG5saCwgCisJICAgKGFmID09IEFGX0lORVQgPyBJUFNFVF9BVFRSX0lQQUREUl9JUFY0IDogSVBTRVRfQVRUUl9JUEFERFJfSVBWNikgfCBOTEFfRl9ORVRfQllURU9SREVSLAorCSAgIGFkZHJzeiwgJmlwYWRkci0+YWRkcik7CisgIG5lc3RlZFsxXS0+bmxhX2xlbiA9ICh2b2lkICopYnVmZmVyICsgTkxfQUxJR04obmxoLT5ubG1zZ19sZW4pIC0gKHZvaWQgKiluZXN0ZWRbMV07CisgIG5lc3RlZFswXS0+bmxhX2xlbiA9ICh2b2lkICopYnVmZmVyICsgTkxfQUxJR04obmxoLT5ubG1zZ19sZW4pIC0gKHZvaWQgKiluZXN0ZWRbMF07CisJCisgIHdoaWxlICgocmMgPSBzZW5kdG8oaXBzZXRfc29jaywgYnVmZmVyLCBubGgtPm5sbXNnX2xlbiwgMCwKKwkJICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzbmwsIHNpemVvZihzbmwpKSkgPT0gLTEgJiYgcmV0cnlfc2VuZCgpKTsKKyAgcmV0dXJuIHJjOworfQorCisKK3N0YXRpYyBpbnQgb2xkX2FkZF90b19pcHNldChjb25zdCBjaGFyICpzZXRuYW1lLCBjb25zdCBzdHJ1Y3QgYWxsX2FkZHIgKmlwYWRkciwgaW50IHJlbW92ZSkKK3sKKyAgc29ja2xlbl90IHNpemU7CisgIHN0cnVjdCBpcF9zZXRfcmVxX2FkdF9nZXQgeworICAgIHVuc2lnbmVkIG9wOworICAgIHVuc2lnbmVkIHZlcnNpb247CisgICAgdW5pb24geworICAgICAgY2hhciBuYW1lW0lQU0VUX01BWE5BTUVMRU5dOworICAgICAgdWludDE2X3QgaW5kZXg7CisgICAgfSBzZXQ7CisgICAgY2hhciB0eXBlbmFtZVtJUFNFVF9NQVhOQU1FTEVOXTsKKyAgfSByZXFfYWR0X2dldDsKKyAgc3RydWN0IGlwX3NldF9yZXFfYWR0IHsKKyAgICB1bnNpZ25lZCBvcDsKKyAgICB1aW50MTZfdCBpbmRleDsKKyAgICB1aW50MzJfdCBpcDsKKyAgfSByZXFfYWR0OworICAKKyAgaWYgKHN0cmxlbihzZXRuYW1lKSA+PSBzaXplb2YocmVxX2FkdF9nZXQuc2V0Lm5hbWUpKSAKKyAgICB7CisgICAgICBlcnJubyA9IEVOQU1FVE9PTE9ORzsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIAorICByZXFfYWR0X2dldC5vcCA9IDB4MTA7CisgIHJlcV9hZHRfZ2V0LnZlcnNpb24gPSAzOworICBzdHJjcHkocmVxX2FkdF9nZXQuc2V0Lm5hbWUsIHNldG5hbWUpOworICBzaXplID0gc2l6ZW9mKHJlcV9hZHRfZ2V0KTsKKyAgaWYgKGdldHNvY2tvcHQoaXBzZXRfc29jaywgU09MX0lQLCA4MywgJnJlcV9hZHRfZ2V0LCAmc2l6ZSkgPCAwKQorICAgIHJldHVybiAtMTsKKyAgcmVxX2FkdC5vcCA9IHJlbW92ZSA/IDB4MTAyIDogMHgxMDE7CisgIHJlcV9hZHQuaW5kZXggPSByZXFfYWR0X2dldC5zZXQuaW5kZXg7CisgIHJlcV9hZHQuaXAgPSBudG9obChpcGFkZHItPmFkZHIuYWRkcjQuc19hZGRyKTsKKyAgaWYgKHNldHNvY2tvcHQoaXBzZXRfc29jaywgU09MX0lQLCA4MywgJnJlcV9hZHQsIHNpemVvZihyZXFfYWR0KSkgPCAwKQorICAgIHJldHVybiAtMTsKKyAgCisgIHJldHVybiAwOworfQorCisKKworaW50IGFkZF90b19pcHNldChjb25zdCBjaGFyICpzZXRuYW1lLCBjb25zdCBzdHJ1Y3QgYWxsX2FkZHIgKmlwYWRkciwgaW50IGZsYWdzLCBpbnQgcmVtb3ZlKQoreworICBpbnQgYWYgPSBBRl9JTkVUOworCisjaWZkZWYgSEFWRV9JUFY2CisgIGlmIChmbGFncyAmIEZfSVBWNikKKyAgICB7CisgICAgICBhZiA9IEFGX0lORVQ2OworICAgICAgLyogb2xkIG1ldGhvZCBvbmx5IHN1cHBvcnRzIElQdjQgKi8KKyAgICAgIGlmIChvbGRfa2VybmVsKQorCXJldHVybiAtMTsKKyAgICB9CisjZW5kaWYKKyAgCisgIHJldHVybiBvbGRfa2VybmVsID8gb2xkX2FkZF90b19pcHNldChzZXRuYW1lLCBpcGFkZHIsIHJlbW92ZSkgOiBuZXdfYWRkX3RvX2lwc2V0KHNldG5hbWUsIGlwYWRkciwgYWYsIHJlbW92ZSk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2xlYXNlLmMgYi9zcmMvbGVhc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDU2YjFiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2xlYXNlLmMKQEAgLTAsMCArMSwxMTU0IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE0IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworI2lmZGVmIEhBVkVfREhDUAorCitzdGF0aWMgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlcyA9IE5VTEwsICpvbGRfbGVhc2VzID0gTlVMTDsKK3N0YXRpYyBpbnQgZG5zX2RpcnR5LCBmaWxlX2RpcnR5LCBsZWFzZXNfbGVmdDsKKwordm9pZCBsZWFzZV9pbml0KHRpbWVfdCBub3cpCit7CisgIHVuc2lnbmVkIGxvbmcgZWk7CisgIHN0cnVjdCBhbGxfYWRkciBhZGRyOworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U7CisgIGludCBjbGlkX2xlbiwgaHdfbGVuLCBod190eXBlOworICBGSUxFICpsZWFzZXN0cmVhbTsKKyAgCisgIGxlYXNlc19sZWZ0ID0gZGFlbW9uLT5kaGNwX21heDsKKyAgCisgIGlmIChvcHRpb25fYm9vbChPUFRfTEVBU0VfUk8pKQorICAgIHsKKyAgICAgIC8qIHJ1biAiPGxlYXNlX2NoYW5nZV9zY3JpcHQ+IGluaXQiIG9uY2UgdG8gZ2V0IHRoZQorCSBpbml0aWFsIHN0YXRlIG9mIHRoZSBkYXRhYmFzZS4gSWYgbGVhc2VmaWxlLXJvIGlzCisJIHNldCB3aXRob3V0IGEgc2NyaXB0LCB3ZSBqdXN0IGRvIHdpdGhvdXQgYW55IAorCSBsZWFzZSBkYXRhYmFzZS4gKi8KKyNpZmRlZiBIQVZFX1NDUklQVAorICAgICAgaWYgKGRhZW1vbi0+bGVhc2VfY2hhbmdlX2NvbW1hbmQpCisJeworCSAgc3RyY3B5KGRhZW1vbi0+ZGhjcF9idWZmLCBkYWVtb24tPmxlYXNlX2NoYW5nZV9jb21tYW5kKTsKKwkgIHN0cmNhdChkYWVtb24tPmRoY3BfYnVmZiwgIiBpbml0Iik7CisJICBsZWFzZXN0cmVhbSA9IHBvcGVuKGRhZW1vbi0+ZGhjcF9idWZmLCAiciIpOworCX0KKyAgICAgIGVsc2UKKyNlbmRpZgorCXsKKyAgICAgICAgICBmaWxlX2RpcnR5ID0gZG5zX2RpcnR5ID0gMDsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIE5PVEU6IG5lZWQgYSsgbW9kZSB0byBjcmVhdGUgZmlsZSBpZiBpdCBkb2Vzbid0IGV4aXN0ICovCisgICAgICBsZWFzZXN0cmVhbSA9IGRhZW1vbi0+bGVhc2Vfc3RyZWFtID0gZm9wZW4oZGFlbW9uLT5sZWFzZV9maWxlLCAiYSsiKTsKKyAgICAgIAorICAgICAgaWYgKCFsZWFzZXN0cmVhbSkKKwlkaWUoXygiY2Fubm90IG9wZW4gb3IgY3JlYXRlIGxlYXNlIGZpbGUgJXM6ICVzIiksIGRhZW1vbi0+bGVhc2VfZmlsZSwgRUNfRklMRSk7CisgICAgICAKKyAgICAgIC8qIGErIG1vZGUgbGVhdmVzIHBvaW50ZXIgYXQgZW5kLiAqLworICAgICAgcmV3aW5kKGxlYXNlc3RyZWFtKTsKKyAgICB9CisgIAorICAvKiBjbGllbnQtaWQgbWF4IGxlbmd0aCBpcyAyNTUgd2hpY2ggaXMgMjU1KjIgZGlnaXRzICsgMjU0IGNvbG9ucyAKKyAgICAgYm9ycm93IEROUyBwYWNrZXQgYnVmZmVyIHdoaWNoIGlzIGFsd2F5cyBsYXJnZXIgdGhhbiAxMDAwIGJ5dGVzICovCisgIGlmIChsZWFzZXN0cmVhbSkKKyAgICB3aGlsZSAoZnNjYW5mKGxlYXNlc3RyZWFtLCAiJTI1NXMgJTI1NXMiLCBkYWVtb24tPmRoY3BfYnVmZjMsIGRhZW1vbi0+ZGhjcF9idWZmMikgPT0gMikKKyAgICAgIHsKKyNpZmRlZiBIQVZFX0RIQ1A2CisJaWYgKHN0cmNtcChkYWVtb24tPmRoY3BfYnVmZjMsICJkdWlkIikgPT0gMCkKKwkgIHsKKwkgICAgZGFlbW9uLT5kdWlkX2xlbiA9IHBhcnNlX2hleChkYWVtb24tPmRoY3BfYnVmZjIsICh1bnNpZ25lZCBjaGFyICopZGFlbW9uLT5kaGNwX2J1ZmYyLCAxMzAsIE5VTEwsIE5VTEwpOworCSAgICBkYWVtb24tPmR1aWQgPSBzYWZlX21hbGxvYyhkYWVtb24tPmR1aWRfbGVuKTsKKwkgICAgbWVtY3B5KGRhZW1vbi0+ZHVpZCwgZGFlbW9uLT5kaGNwX2J1ZmYyLCBkYWVtb24tPmR1aWRfbGVuKTsKKwkgICAgY29udGludWU7CisJICB9CisjZW5kaWYKKworCWVpID0gYXRvbChkYWVtb24tPmRoY3BfYnVmZjMpOworCQorCWlmIChmc2NhbmYobGVhc2VzdHJlYW0sICIgJTY0cyAlMjU1cyAlNzY0cyIsCisJCSAgIGRhZW1vbi0+bmFtZWJ1ZmYsIGRhZW1vbi0+ZGhjcF9idWZmLCBkYWVtb24tPnBhY2tldCkgIT0gMykKKwkgIGJyZWFrOworCQorCWNsaWRfbGVuID0gMDsKKwlpZiAoc3RyY21wKGRhZW1vbi0+cGFja2V0LCAiKiIpICE9IDApCisJICBjbGlkX2xlbiA9IHBhcnNlX2hleChkYWVtb24tPnBhY2tldCwgKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPnBhY2tldCwgMjU1LCBOVUxMLCBOVUxMKTsKKwkKKwlpZiAoaW5ldF9wdG9uKEFGX0lORVQsIGRhZW1vbi0+bmFtZWJ1ZmYsICZhZGRyLmFkZHIuYWRkcjQpICYmCisJICAgIChsZWFzZSA9IGxlYXNlNF9hbGxvY2F0ZShhZGRyLmFkZHIuYWRkcjQpKSkKKwkgIHsKKwkgICAgaHdfbGVuID0gcGFyc2VfaGV4KGRhZW1vbi0+ZGhjcF9idWZmMiwgKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPmRoY3BfYnVmZjIsIERIQ1BfQ0hBRERSX01BWCwgTlVMTCwgJmh3X3R5cGUpOworCSAgICAvKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIG5vIGV4cGxpY3QgTUFDIGFkZHJlc3MgdHlwZSBtZWFucyBldGhlci4gKi8KKwkgICAgaWYgKGh3X3R5cGUgPT0gMCAmJiBod19sZW4gIT0gMCkKKwkgICAgICBod190eXBlID0gQVJQSFJEX0VUSEVSOyAKKworCSAgICBsZWFzZV9zZXRfaHdhZGRyKGxlYXNlLCAodW5zaWduZWQgY2hhciAqKWRhZW1vbi0+ZGhjcF9idWZmMiwgKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPnBhY2tldCwgCisJCQkgICAgIGh3X2xlbiwgaHdfdHlwZSwgY2xpZF9sZW4sIG5vdywgMCk7CisJICAgIAorCSAgICBpZiAoc3RyY21wKGRhZW1vbi0+ZGhjcF9idWZmLCAiKiIpICE9ICAwKQorCSAgICAgIGxlYXNlX3NldF9ob3N0bmFtZShsZWFzZSwgZGFlbW9uLT5kaGNwX2J1ZmYsIDAsIGdldF9kb21haW4obGVhc2UtPmFkZHIpLCBOVUxMKTsKKwkgIH0KKyNpZmRlZiBIQVZFX0RIQ1A2CisJZWxzZSBpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBkYWVtb24tPm5hbWVidWZmLCAmYWRkci5hZGRyLmFkZHI2KSkKKwkgIHsKKwkgICAgY2hhciAqcyA9IGRhZW1vbi0+ZGhjcF9idWZmMjsKKwkgICAgaW50IGxlYXNlX3R5cGUgPSBMRUFTRV9OQTsKKwkgICAgaW50IGlhaWQ7CisKKwkgICAgaWYgKHNbMF0gPT0gJ1QnKQorCSAgICAgIHsKKwkJbGVhc2VfdHlwZSA9IExFQVNFX1RBOworCQlzKys7CisJICAgICAgfQorCSAgICAKKwkgICAgaWFpZCA9IHN0cnRvdWwocywgTlVMTCwgMTApOworCSAgICAKKwkgICAgaWYgKChsZWFzZSA9IGxlYXNlNl9hbGxvY2F0ZSgmYWRkci5hZGRyLmFkZHI2LCBsZWFzZV90eXBlKSkpCisJICAgICAgeworCQlsZWFzZV9zZXRfaHdhZGRyKGxlYXNlLCBOVUxMLCAodW5zaWduZWQgY2hhciAqKWRhZW1vbi0+cGFja2V0LCAwLCAwLCBjbGlkX2xlbiwgbm93LCAwKTsKKwkJbGVhc2Vfc2V0X2lhaWQobGVhc2UsIGlhaWQpOworCQlpZiAoc3RyY21wKGRhZW1vbi0+ZGhjcF9idWZmLCAiKiIpICE9ICAwKQorCQkgIGxlYXNlX3NldF9ob3N0bmFtZShsZWFzZSwgZGFlbW9uLT5kaGNwX2J1ZmYsIDAsIGdldF9kb21haW42KChzdHJ1Y3QgaW42X2FkZHIgKilsZWFzZS0+aHdhZGRyKSwgTlVMTCk7CisJICAgICAgfQorCSAgfQorI2VuZGlmCisJZWxzZQorCSAgYnJlYWs7CisKKwlpZiAoIWxlYXNlKQorCSAgZGllIChfKCJ0b28gbWFueSBzdG9yZWQgbGVhc2VzIiksIE5VTEwsIEVDX01JU0MpOworICAgICAgIAkKKyNpZmRlZiBIQVZFX0JST0tFTl9SVEMKKwlpZiAoZWkgIT0gMCkKKwkgIGxlYXNlLT5leHBpcmVzID0gKHRpbWVfdCllaSArIG5vdzsKKwllbHNlCisJICBsZWFzZS0+ZXhwaXJlcyA9ICh0aW1lX3QpMDsKKwlsZWFzZS0+bGVuZ3RoID0gZWk7CisjZWxzZQorCS8qIHN0cmljdGx5IHRpbWVfdCBpcyBvcGFxdWUsIGJ1dCB0aGlzIGhhY2sgc2hvdWxkIHdvcmsgb24gYWxsIHNhbmUgc3lzdGVtcywKKwkgICBldmVuIHdoZW4gc2l6ZW9mKHRpbWVfdCkgPT0gOCAqLworCWxlYXNlLT5leHBpcmVzID0gKHRpbWVfdCllaTsKKyNlbmRpZgorCQorCS8qIHNldCB0aGVzZSBjb3JyZWN0bHk6IHRoZSAib2xkIiBldmVudHMgYXJlIGdlbmVyYXRlZCBsYXRlciBmcm9tCisJICAgdGhlIHN0YXJ0dXAgc3ludGhlc2lzZWQgU0lHSFVQLiAqLworCWxlYXNlLT5mbGFncyAmPSB+KExFQVNFX05FVyB8IExFQVNFX0NIQU5HRUQpOworICAgICAgfQorICAKKyNpZmRlZiBIQVZFX1NDUklQVAorICBpZiAoIWRhZW1vbi0+bGVhc2Vfc3RyZWFtKQorICAgIHsKKyAgICAgIGludCByYyA9IDA7CisKKyAgICAgIC8qIHNoZWxsIHJldHVybnMgMTI3IGZvciAiY29tbWFuZCBub3QgZm91bmQiLCAxMjYgZm9yIGJhZCBwZXJtaXNzaW9ucy4gKi8KKyAgICAgIGlmICghbGVhc2VzdHJlYW0gfHwgKHJjID0gcGNsb3NlKGxlYXNlc3RyZWFtKSkgPT0gLTEgfHwgV0VYSVRTVEFUVVMocmMpID09IDEyNyB8fCBXRVhJVFNUQVRVUyhyYykgPT0gMTI2KQorCXsKKwkgIGlmIChXRVhJVFNUQVRVUyhyYykgPT0gMTI3KQorCSAgICBlcnJubyA9IEVOT0VOVDsKKwkgIGVsc2UgaWYgKFdFWElUU1RBVFVTKHJjKSA9PSAxMjYpCisJICAgIGVycm5vID0gRUFDQ0VTOworCSAgZGllKF8oImNhbm5vdCBydW4gbGVhc2UtaW5pdCBzY3JpcHQgJXM6ICVzIiksIGRhZW1vbi0+bGVhc2VfY2hhbmdlX2NvbW1hbmQsIEVDX0ZJTEUpOworCX0KKyAgICAgIAorICAgICAgaWYgKFdFWElUU1RBVFVTKHJjKSAhPSAwKQorCXsKKwkgIHNwcmludGYoZGFlbW9uLT5kaGNwX2J1ZmYsICIlZCIsIFdFWElUU1RBVFVTKHJjKSk7CisJICBkaWUoXygibGVhc2UtaW5pdCBzY3JpcHQgcmV0dXJuZWQgZXhpdCBjb2RlICVzIiksIGRhZW1vbi0+ZGhjcF9idWZmLCBXRVhJVFNUQVRVUyhyYykgKyBFQ19JTklUX09GRlNFVCk7CisJfQorICAgIH0KKyNlbmRpZgorCisgIC8qIFNvbWUgbGVhc2VzIG1heSBoYXZlIGV4cGlyZWQgKi8KKyAgZmlsZV9kaXJ0eSA9IDA7CisgIGxlYXNlX3BydW5lKE5VTEwsIG5vdyk7CisgIGRuc19kaXJ0eSA9IDE7Cit9CisKK3ZvaWQgbGVhc2VfdXBkYXRlX2Zyb21fY29uZmlncyh2b2lkKQoreworICAvKiBjaGFuZ2VzIHRvIHRoZSBjb25maWcgbWF5IGNoYW5nZSBjdXJyZW50IGxlYXNlcy4gKi8KKyAgCisgIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTsKKyAgc3RydWN0IGRoY3BfY29uZmlnICpjb25maWc7CisgIGNoYXIgKm5hbWU7CisgIAorICBmb3IgKGxlYXNlID0gbGVhc2VzOyBsZWFzZTsgbGVhc2UgPSBsZWFzZS0+bmV4dCkKKyAgICBpZiAobGVhc2UtPmZsYWdzICYgKExFQVNFX1RBIHwgTEVBU0VfTkEpKQorICAgICAgY29udGludWU7CisgICAgZWxzZSBpZiAoKGNvbmZpZyA9IGZpbmRfY29uZmlnKGRhZW1vbi0+ZGhjcF9jb25mLCBOVUxMLCBsZWFzZS0+Y2xpZCwgbGVhc2UtPmNsaWRfbGVuLCAKKwkJCQkgICBsZWFzZS0+aHdhZGRyLCBsZWFzZS0+aHdhZGRyX2xlbiwgbGVhc2UtPmh3YWRkcl90eXBlLCBOVUxMKSkgJiYgCisJICAgICAoY29uZmlnLT5mbGFncyAmIENPTkZJR19OQU1FKSAmJgorCSAgICAgKCEoY29uZmlnLT5mbGFncyAmIENPTkZJR19BRERSKSB8fCBjb25maWctPmFkZHIuc19hZGRyID09IGxlYXNlLT5hZGRyLnNfYWRkcikpCisgICAgICBsZWFzZV9zZXRfaG9zdG5hbWUobGVhc2UsIGNvbmZpZy0+aG9zdG5hbWUsIDEsIGdldF9kb21haW4obGVhc2UtPmFkZHIpLCBOVUxMKTsKKyAgICBlbHNlIGlmICgobmFtZSA9IGhvc3RfZnJvbV9kbnMobGVhc2UtPmFkZHIpKSkKKyAgICAgIGxlYXNlX3NldF9ob3N0bmFtZShsZWFzZSwgbmFtZSwgMSwgZ2V0X2RvbWFpbihsZWFzZS0+YWRkciksIE5VTEwpOyAvKiB1cGRhdGVzIGF1dGggZmxhZyBvbmx5ICovCit9CisgCitzdGF0aWMgdm9pZCBvdXJwcmludGYoaW50ICplcnJwLCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcDsKKyAgCisgIHZhX3N0YXJ0KGFwLCBmb3JtYXQpOworICBpZiAoISgqZXJycCkgJiYgdmZwcmludGYoZGFlbW9uLT5sZWFzZV9zdHJlYW0sIGZvcm1hdCwgYXApIDwgMCkKKyAgICAqZXJycCA9IGVycm5vOworICB2YV9lbmQoYXApOworfQorCit2b2lkIGxlYXNlX3VwZGF0ZV9maWxlKHRpbWVfdCBub3cpCit7CisgIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTsKKyAgdGltZV90IG5leHRfZXZlbnQ7CisgIGludCBpLCBlcnIgPSAwOworCisgIGlmIChmaWxlX2RpcnR5ICE9IDAgJiYgZGFlbW9uLT5sZWFzZV9zdHJlYW0pCisgICAgeworICAgICAgZXJybm8gPSAwOworICAgICAgcmV3aW5kKGRhZW1vbi0+bGVhc2Vfc3RyZWFtKTsKKyAgICAgIGlmIChlcnJubyAhPSAwIHx8IGZ0cnVuY2F0ZShmaWxlbm8oZGFlbW9uLT5sZWFzZV9zdHJlYW0pLCAwKSAhPSAwKQorCWVyciA9IGVycm5vOworICAgICAgCisgICAgICBmb3IgKGxlYXNlID0gbGVhc2VzOyBsZWFzZTsgbGVhc2UgPSBsZWFzZS0+bmV4dCkKKwl7CisKKyNpZmRlZiBIQVZFX0RIQ1A2CisJICBpZiAobGVhc2UtPmZsYWdzICYgKExFQVNFX1RBIHwgTEVBU0VfTkEpKQorCSAgICBjb250aW51ZTsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9CUk9LRU5fUlRDCisJICBvdXJwcmludGYoJmVyciwgIiV1ICIsIGxlYXNlLT5sZW5ndGgpOworI2Vsc2UKKwkgIG91cnByaW50ZigmZXJyLCAiJWx1ICIsICh1bnNpZ25lZCBsb25nKWxlYXNlLT5leHBpcmVzKTsKKyNlbmRpZgorCisJICBpZiAobGVhc2UtPmh3YWRkcl90eXBlICE9IEFSUEhSRF9FVEhFUiB8fCBsZWFzZS0+aHdhZGRyX2xlbiA9PSAwKSAKKwkgICAgb3VycHJpbnRmKCZlcnIsICIlLjJ4LSIsIGxlYXNlLT5od2FkZHJfdHlwZSk7CisJICBmb3IgKGkgPSAwOyBpIDwgbGVhc2UtPmh3YWRkcl9sZW47IGkrKykKKwkgICAgeworCSAgICAgIG91cnByaW50ZigmZXJyLCAiJS4yeCIsIGxlYXNlLT5od2FkZHJbaV0pOworCSAgICAgIGlmIChpICE9IGxlYXNlLT5od2FkZHJfbGVuIC0gMSkKKwkJb3VycHJpbnRmKCZlcnIsICI6Iik7CisJICAgIH0KKwkgIAorCSAgaW5ldF9udG9wKEFGX0lORVQsICZsZWFzZS0+YWRkciwgZGFlbW9uLT5hZGRyYnVmZiwgQUREUlNUUkxFTik7IAorCisJICBvdXJwcmludGYoJmVyciwgIiAlcyAiLCBkYWVtb24tPmFkZHJidWZmKTsKKwkgIG91cnByaW50ZigmZXJyLCAiJXMgIiwgbGVhc2UtPmhvc3RuYW1lID8gbGVhc2UtPmhvc3RuYW1lIDogIioiKTsKKwkgIAkgIAorCSAgaWYgKGxlYXNlLT5jbGlkICYmIGxlYXNlLT5jbGlkX2xlbiAhPSAwKQorCSAgICB7CisJICAgICAgZm9yIChpID0gMDsgaSA8IGxlYXNlLT5jbGlkX2xlbiAtIDE7IGkrKykKKwkJb3VycHJpbnRmKCZlcnIsICIlLjJ4OiIsIGxlYXNlLT5jbGlkW2ldKTsKKwkgICAgICBvdXJwcmludGYoJmVyciwgIiUuMnhcbiIsIGxlYXNlLT5jbGlkW2ldKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICBvdXJwcmludGYoJmVyciwgIipcbiIpOwkgIAorCX0KKyAgICAgIAorI2lmZGVmIEhBVkVfREhDUDYgIAorICAgICAgaWYgKGRhZW1vbi0+ZHVpZCkKKwl7CisJICBvdXJwcmludGYoJmVyciwgImR1aWQgIik7CisJICBmb3IgKGkgPSAwOyBpIDwgZGFlbW9uLT5kdWlkX2xlbiAtIDE7IGkrKykKKwkgICAgb3VycHJpbnRmKCZlcnIsICIlLjJ4OiIsIGRhZW1vbi0+ZHVpZFtpXSk7CisJICBvdXJwcmludGYoJmVyciwgIiUuMnhcbiIsIGRhZW1vbi0+ZHVpZFtpXSk7CisJICAKKwkgIGZvciAobGVhc2UgPSBsZWFzZXM7IGxlYXNlOyBsZWFzZSA9IGxlYXNlLT5uZXh0KQorCSAgICB7CisJICAgICAgCisJICAgICAgaWYgKCEobGVhc2UtPmZsYWdzICYgKExFQVNFX1RBIHwgTEVBU0VfTkEpKSkKKwkJY29udGludWU7CisKKyNpZmRlZiBIQVZFX0JST0tFTl9SVEMKKwkgICAgICBvdXJwcmludGYoJmVyciwgIiV1ICIsIGxlYXNlLT5sZW5ndGgpOworI2Vsc2UKKwkgICAgICBvdXJwcmludGYoJmVyciwgIiVsdSAiLCAodW5zaWduZWQgbG9uZylsZWFzZS0+ZXhwaXJlcyk7CisjZW5kaWYKKyAgICAKKwkgICAgICBpbmV0X250b3AoQUZfSU5FVDYsICZsZWFzZS0+YWRkcjYsIGRhZW1vbi0+YWRkcmJ1ZmYsIEFERFJTVFJMRU4pOworCSAKKwkgICAgICBvdXJwcmludGYoJmVyciwgIiVzJXUgJXMgIiwgKGxlYXNlLT5mbGFncyAmIExFQVNFX1RBKSA/ICJUIiA6ICIiLAorCQkJbGVhc2UtPmlhaWQsIGRhZW1vbi0+YWRkcmJ1ZmYpOworCSAgICAgIG91cnByaW50ZigmZXJyLCAiJXMgIiwgbGVhc2UtPmhvc3RuYW1lID8gbGVhc2UtPmhvc3RuYW1lIDogIioiKTsKKwkgICAgICAKKwkgICAgICBpZiAobGVhc2UtPmNsaWQgJiYgbGVhc2UtPmNsaWRfbGVuICE9IDApCisJCXsKKwkJICBmb3IgKGkgPSAwOyBpIDwgbGVhc2UtPmNsaWRfbGVuIC0gMTsgaSsrKQorCQkgICAgb3VycHJpbnRmKCZlcnIsICIlLjJ4OiIsIGxlYXNlLT5jbGlkW2ldKTsKKwkJICBvdXJwcmludGYoJmVyciwgIiUuMnhcbiIsIGxlYXNlLT5jbGlkW2ldKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJb3VycHJpbnRmKCZlcnIsICIqXG4iKTsJICAKKwkgICAgfQorCX0KKyNlbmRpZiAgICAgIAorCSAgCisgICAgICBpZiAoZmZsdXNoKGRhZW1vbi0+bGVhc2Vfc3RyZWFtKSAhPSAwIHx8CisJICBmc3luYyhmaWxlbm8oZGFlbW9uLT5sZWFzZV9zdHJlYW0pKSA8IDApCisJZXJyID0gZXJybm87CisgICAgICAKKyAgICAgIGlmICghZXJyKQorCWZpbGVfZGlydHkgPSAwOworICAgIH0KKyAgCisgIC8qIFNldCBhbGFybSBmb3Igd2hlbiB0aGUgZmlyc3QgbGVhc2UgZXhwaXJlcy4gKi8KKyAgbmV4dF9ldmVudCA9IDA7CisKKyNpZmRlZiBIQVZFX0RIQ1A2CisgIC8qIGRvIHRpbWVkIFJBcyBhbmQgZGV0ZXJtaW5lIHdoZW4gdGhlIG5leHQgaXMsIGFsc28gcGluZ3MgdG8gcG90ZW50aWFsIFNMQUFDIGFkZHJlc3NlcyAqLworICBpZiAoZGFlbW9uLT5kb2luZ19yYSkKKyAgICB7CisgICAgICB0aW1lX3QgZXZlbnQ7CisgICAgICAKKyAgICAgIGlmICgoZXZlbnQgPSBwZXJpb2RpY19zbGFhYyhub3csIGxlYXNlcykpICE9IDApCisJeworCSAgaWYgKG5leHRfZXZlbnQgPT0gMCB8fCBkaWZmdGltZShuZXh0X2V2ZW50LCBldmVudCkgPiAwLjApCisJICAgIG5leHRfZXZlbnQgPSBldmVudDsKKwl9CisgICAgICAKKyAgICAgIGlmICgoZXZlbnQgPSBwZXJpb2RpY19yYShub3cpKSAhPSAwKQorCXsKKwkgIGlmIChuZXh0X2V2ZW50ID09IDAgfHwgZGlmZnRpbWUobmV4dF9ldmVudCwgZXZlbnQpID4gMC4wKQorCSAgICBuZXh0X2V2ZW50ID0gZXZlbnQ7CisJfQorICAgIH0KKyNlbmRpZgorCisgIGZvciAobGVhc2UgPSBsZWFzZXM7IGxlYXNlOyBsZWFzZSA9IGxlYXNlLT5uZXh0KQorICAgIGlmIChsZWFzZS0+ZXhwaXJlcyAhPSAwICYmCisJKG5leHRfZXZlbnQgPT0gMCB8fCBkaWZmdGltZShuZXh0X2V2ZW50LCBsZWFzZS0+ZXhwaXJlcykgPiAwLjApKQorICAgICAgbmV4dF9ldmVudCA9IGxlYXNlLT5leHBpcmVzOworICAgCisgIGlmIChlcnIpCisgICAgeworICAgICAgaWYgKG5leHRfZXZlbnQgPT0gMCB8fCBkaWZmdGltZShuZXh0X2V2ZW50LCBMRUFTRV9SRVRSWSArIG5vdykgPiAwLjApCisJbmV4dF9ldmVudCA9IExFQVNFX1JFVFJZICsgbm93OworICAgICAgCisgICAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19FUlIsIF8oImZhaWxlZCB0byB3cml0ZSAlczogJXMgKHJldHJ5IGluICV1cykiKSwgCisJCWRhZW1vbi0+bGVhc2VfZmlsZSwgc3RyZXJyb3IoZXJyKSwKKwkJKHVuc2lnbmVkIGludClkaWZmdGltZShuZXh0X2V2ZW50LCBub3cpKTsKKyAgICB9CisKKyAgc2VuZF9hbGFybShuZXh0X2V2ZW50LCBub3cpOworfQorCisKK3N0YXRpYyBpbnQgZmluZF9pbnRlcmZhY2VfdjQoc3RydWN0IGluX2FkZHIgbG9jYWwsIGludCBpZl9pbmRleCwgY2hhciAqbGFiZWwsCisJCQkgICAgIHN0cnVjdCBpbl9hZGRyIG5ldG1hc2ssIHN0cnVjdCBpbl9hZGRyIGJyb2FkY2FzdCwgdm9pZCAqdnBhcmFtKQoreworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U7CisgIGludCBwcmVmaXggPSBuZXRtYXNrX2xlbmd0aChuZXRtYXNrKTsKKworICAodm9pZCkgbGFiZWw7CisgICh2b2lkKSBicm9hZGNhc3Q7CisgICh2b2lkKSB2cGFyYW07CisKKyAgZm9yIChsZWFzZSA9IGxlYXNlczsgbGVhc2U7IGxlYXNlID0gbGVhc2UtPm5leHQpCisgICAgaWYgKCEobGVhc2UtPmZsYWdzICYgKExFQVNFX1RBIHwgTEVBU0VfTkEpKSAmJgorCWlzX3NhbWVfbmV0KGxvY2FsLCBsZWFzZS0+YWRkciwgbmV0bWFzaykgJiYgCisJcHJlZml4ID4gbGVhc2UtPm5ld19wcmVmaXhsZW4pIAorICAgICAgeworCWxlYXNlLT5uZXdfaW50ZXJmYWNlID0gaWZfaW5kZXg7CisgICAgICAgIGxlYXNlLT5uZXdfcHJlZml4bGVuID0gcHJlZml4OworICAgICAgfQorCisgIHJldHVybiAxOworfQorCisjaWZkZWYgSEFWRV9ESENQNgorc3RhdGljIGludCBmaW5kX2ludGVyZmFjZV92NihzdHJ1Y3QgaW42X2FkZHIgKmxvY2FsLCAgaW50IHByZWZpeCwKKwkJCSAgICAgaW50IHNjb3BlLCBpbnQgaWZfaW5kZXgsIGludCBmbGFncywgCisJCQkgICAgIGludCBwcmVmZXJyZWQsIGludCB2YWxpZCwgdm9pZCAqdnBhcmFtKQoreworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U7CisKKyAgKHZvaWQpc2NvcGU7CisgICh2b2lkKWZsYWdzOworICAodm9pZClwcmVmZXJyZWQ7CisgICh2b2lkKXZhbGlkOworICAodm9pZCl2cGFyYW07CisKKyAgZm9yIChsZWFzZSA9IGxlYXNlczsgbGVhc2U7IGxlYXNlID0gbGVhc2UtPm5leHQpCisgICAgaWYgKChsZWFzZS0+ZmxhZ3MgJiAoTEVBU0VfVEEgfCBMRUFTRV9OQSkpKQorICAgICAgaWYgKGlzX3NhbWVfbmV0Nihsb2NhbCwgJmxlYXNlLT5hZGRyNiwgcHJlZml4KSAmJiBwcmVmaXggPiBsZWFzZS0+bmV3X3ByZWZpeGxlbikgeworICAgICAgICAvKiBzYXZlIHByZWZpeCBsZW5ndGggZm9yIGNvbXBhcmlzb24sIGFzIHdlIG1pZ2h0IGdldCBzaG9ydGVyIG1hdGNoaW5nCisgICAgICAgICAqIHByZWZpeCBpbiB1cGNvbWluZyBuZXRsaW5rIEdFVEFERFIgcmVzcG9uc2VzCisgICAgICAgICAqICovCisgICAgICAgIGxlYXNlLT5uZXdfaW50ZXJmYWNlID0gaWZfaW5kZXg7CisgICAgICAgIGxlYXNlLT5uZXdfcHJlZml4bGVuID0gcHJlZml4OworICAgICAgfQorCisgIHJldHVybiAxOworfQorCit2b2lkIGxlYXNlX3BpbmdfcmVwbHkoc3RydWN0IGluNl9hZGRyICpzZW5kZXIsIHVuc2lnbmVkIGNoYXIgKnBhY2tldCwgY2hhciAqaW50ZXJmYWNlKQoreworICAvKiBXZSBtYXkgYmUgZG9pbmcgUkEgYnV0IG5vdCBESENQdjQsIGluIHdoaWNoIGNhc2UgdGhlIGxlYXNlCisgICAgIGRhdGFiYXNlIG1heSBub3QgZXhpc3QgYW5kIHdlIGhhdmUgbm90aGluZyB0byBkbyBhbnl3YXkgKi8KKyAgaWYgKGRhZW1vbi0+ZGhjcCkKKyAgICBzbGFhY19waW5nX3JlcGx5KHNlbmRlciwgcGFja2V0LCBpbnRlcmZhY2UsIGxlYXNlcyk7Cit9CisKK3ZvaWQgbGVhc2VfdXBkYXRlX3NsYWFjKHRpbWVfdCBub3cpCit7CisgIC8qIENhbGxlZCB3aGVuIHdlIGNvbnRydWN0IGEgbmV3IFJBLW5hbWVzIGNvbnRleHQsIHRvIGFkZCBwdXRhdGl2ZQorICAgICBuZXcgU0xBQUMgYWRkcmVzc2VzIHRvIGV4aXN0aW5nIGxlYXNlcy4gKi8KKworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U7CisgIAorICBpZiAoZGFlbW9uLT5kaGNwKQorICAgIGZvciAobGVhc2UgPSBsZWFzZXM7IGxlYXNlOyBsZWFzZSA9IGxlYXNlLT5uZXh0KQorICAgICAgc2xhYWNfYWRkX2FkZHJzKGxlYXNlLCBub3csIDApOworfQorCisjZW5kaWYKKworCisvKiBGaW5kIGludGVyZmFjZXMgYXNzb2NpYXRlZCB3aXRoIGxlYXNlcyBhdCBzdGFydC11cC4gVGhpcyBnZXRzIHVwZGF0ZWQgYXMKKyAgIHdlIGRvIERIQ1AgdHJhbnNhY3Rpb25zLCBidXQgaW5mb3JtYXRpb24gYWJvdXQgZGlyZWN0bHktY29ubmVjdGVkIHN1Ym5ldHMKKyAgIGlzIHVzZWZ1bCBmcm9tIHNjcmlwcyBhbmQgbmVjZXNzYXJ5IGZvciBkZXRlcm1pbmluZyBTTEFBQyBhZGRyZXNzZXMgZnJvbQorICAgc3RhcnQtdGltZS4gKi8KK3ZvaWQgbGVhc2VfZmluZF9pbnRlcmZhY2VzKHRpbWVfdCBub3cpCit7CisgIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTsKKyAgCisgIGZvciAobGVhc2UgPSBsZWFzZXM7IGxlYXNlOyBsZWFzZSA9IGxlYXNlLT5uZXh0KQorICAgIGxlYXNlLT5uZXdfcHJlZml4bGVuID0gbGVhc2UtPm5ld19pbnRlcmZhY2UgPSAwOworCisgIGlmYWNlX2VudW1lcmF0ZShBRl9JTkVULCAmbm93LCBmaW5kX2ludGVyZmFjZV92NCk7CisjaWZkZWYgSEFWRV9ESENQNgorICBpZmFjZV9lbnVtZXJhdGUoQUZfSU5FVDYsICZub3csIGZpbmRfaW50ZXJmYWNlX3Y2KTsKKyNlbmRpZgorCisgIGZvciAobGVhc2UgPSBsZWFzZXM7IGxlYXNlOyBsZWFzZSA9IGxlYXNlLT5uZXh0KQorICAgIGlmIChsZWFzZS0+bmV3X2ludGVyZmFjZSAhPSAwKSAKKyAgICAgIGxlYXNlX3NldF9pbnRlcmZhY2UobGVhc2UsIGxlYXNlLT5uZXdfaW50ZXJmYWNlLCBub3cpOworfQorCisjaWZkZWYgSEFWRV9ESENQNgordm9pZCBsZWFzZV9tYWtlX2R1aWQodGltZV90IG5vdykKK3sKKyAgLyogSWYgd2UncmUgbm90IGRvaW5nIERIQ1B2NiwgYW5kIHRoZXJlIGFyZSBub3QgdjYgbGVhc2VzLCBkb24ndCBhZGQgdGhlIERVSUQgdG8gdGhlIGRhdGFiYXNlICovCisgIGlmICghZGFlbW9uLT5kdWlkICYmIGRhZW1vbi0+ZG9pbmdfZGhjcDYpCisgICAgeworICAgICAgZmlsZV9kaXJ0eSA9IDE7CisgICAgICBtYWtlX2R1aWQobm93KTsKKyAgICB9Cit9CisjZW5kaWYKKworCisKKwordm9pZCBsZWFzZV91cGRhdGVfZG5zKGludCBmb3JjZSkKK3sKKyAgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlOworCisgIGlmIChkYWVtb24tPnBvcnQgIT0gMCAmJiAoZG5zX2RpcnR5IHx8IGZvcmNlKSkKKyAgICB7CisjaWZuZGVmIEhBVkVfQlJPS0VOX1JUQworICAgICAgLyogZm9yY2UgdHJhbnNmZXIgdG8gYXV0aG9yaXRhdGl2ZSBzZWNvbmRhcmllcyAqLworICAgICAgZGFlbW9uLT5zb2Ffc24rKzsKKyNlbmRpZgorICAgICAgCisgICAgICBjYWNoZV91bmhhc2hfZGhjcCgpOworCisgICAgICBmb3IgKGxlYXNlID0gbGVhc2VzOyBsZWFzZTsgbGVhc2UgPSBsZWFzZS0+bmV4dCkKKwl7CisJICBpbnQgcHJvdCA9IEFGX0lORVQ7CisJICAKKyNpZmRlZiBIQVZFX0RIQ1A2CisJICBpZiAobGVhc2UtPmZsYWdzICYgKExFQVNFX1RBIHwgTEVBU0VfTkEpKQorCSAgICBwcm90ID0gQUZfSU5FVDY7CisJICBlbHNlIGlmIChsZWFzZS0+aG9zdG5hbWUgfHwgbGVhc2UtPmZxZG4pCisJICAgIHsKKwkgICAgICBzdHJ1Y3Qgc2xhYWNfYWRkcmVzcyAqc2xhYWM7CisKKwkgICAgICBmb3IgKHNsYWFjID0gbGVhc2UtPnNsYWFjX2FkZHJlc3M7IHNsYWFjOyBzbGFhYyA9IHNsYWFjLT5uZXh0KQorCQlpZiAoc2xhYWMtPmJhY2tvZmYgPT0gMCkKKwkJICB7CisJCSAgICBpZiAobGVhc2UtPmZxZG4pCisJCSAgICAgIGNhY2hlX2FkZF9kaGNwX2VudHJ5KGxlYXNlLT5mcWRuLCBBRl9JTkVUNiwgKHN0cnVjdCBhbGxfYWRkciAqKSZzbGFhYy0+YWRkciwgbGVhc2UtPmV4cGlyZXMpOworCQkgICAgaWYgKCFvcHRpb25fYm9vbChPUFRfREhDUF9GUUROKSAmJiBsZWFzZS0+aG9zdG5hbWUpCisJCSAgICAgIGNhY2hlX2FkZF9kaGNwX2VudHJ5KGxlYXNlLT5ob3N0bmFtZSwgQUZfSU5FVDYsIChzdHJ1Y3QgYWxsX2FkZHIgKikmc2xhYWMtPmFkZHIsIGxlYXNlLT5leHBpcmVzKTsKKwkJICB9CisJICAgIH0KKwkgIAorCSAgaWYgKGxlYXNlLT5mcWRuKQorCSAgICBjYWNoZV9hZGRfZGhjcF9lbnRyeShsZWFzZS0+ZnFkbiwgcHJvdCwgCisJCQkJIHByb3QgPT0gQUZfSU5FVCA/IChzdHJ1Y3QgYWxsX2FkZHIgKikmbGVhc2UtPmFkZHIgOiAoc3RydWN0IGFsbF9hZGRyICopJmxlYXNlLT5hZGRyNiwKKwkJCQkgbGVhc2UtPmV4cGlyZXMpOworCSAgICAgCisJICBpZiAoIW9wdGlvbl9ib29sKE9QVF9ESENQX0ZRRE4pICYmIGxlYXNlLT5ob3N0bmFtZSkKKwkgICAgY2FjaGVfYWRkX2RoY3BfZW50cnkobGVhc2UtPmhvc3RuYW1lLCBwcm90LCAKKwkJCQkgcHJvdCA9PSBBRl9JTkVUID8gKHN0cnVjdCBhbGxfYWRkciAqKSZsZWFzZS0+YWRkciA6IChzdHJ1Y3QgYWxsX2FkZHIgKikmbGVhc2UtPmFkZHI2LCAKKwkJCQkgbGVhc2UtPmV4cGlyZXMpOworICAgICAgIAorI2Vsc2UKKwkgIGlmIChsZWFzZS0+ZnFkbikKKwkgICAgY2FjaGVfYWRkX2RoY3BfZW50cnkobGVhc2UtPmZxZG4sIHByb3QsIChzdHJ1Y3QgYWxsX2FkZHIgKikmbGVhc2UtPmFkZHIsIGxlYXNlLT5leHBpcmVzKTsKKwkgIAorCSAgaWYgKCFvcHRpb25fYm9vbChPUFRfREhDUF9GUUROKSAmJiBsZWFzZS0+aG9zdG5hbWUpCisJICAgIGNhY2hlX2FkZF9kaGNwX2VudHJ5KGxlYXNlLT5ob3N0bmFtZSwgcHJvdCwgKHN0cnVjdCBhbGxfYWRkciAqKSZsZWFzZS0+YWRkciwgbGVhc2UtPmV4cGlyZXMpOworI2VuZGlmCisJfQorICAgICAgCisgICAgICBkbnNfZGlydHkgPSAwOworICAgIH0KK30KKwordm9pZCBsZWFzZV9wcnVuZShzdHJ1Y3QgZGhjcF9sZWFzZSAqdGFyZ2V0LCB0aW1lX3Qgbm93KQoreworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UsICp0bXAsICoqdXA7CisKKyAgZm9yIChsZWFzZSA9IGxlYXNlcywgdXAgPSAmbGVhc2VzOyBsZWFzZTsgbGVhc2UgPSB0bXApCisgICAgeworICAgICAgdG1wID0gbGVhc2UtPm5leHQ7CisgICAgICBpZiAoKGxlYXNlLT5leHBpcmVzICE9IDAgJiYgZGlmZnRpbWUobm93LCBsZWFzZS0+ZXhwaXJlcykgPiAwKSB8fCBsZWFzZSA9PSB0YXJnZXQpCisJeworCSAgZmlsZV9kaXJ0eSA9IDE7CisJICBpZiAobGVhc2UtPmhvc3RuYW1lKQorCSAgICBkbnNfZGlydHkgPSAxOworCSAgCisgCSAgKnVwID0gbGVhc2UtPm5leHQ7IC8qIHVubGluayAqLworCSAgCisJICAvKiBQdXQgb24gb2xkX2xlYXNlcyBsaXN0ICd0aWxsIHdlCisJICAgICBjYW4gcnVuIHRoZSBzY3JpcHQgKi8KKwkgIGxlYXNlLT5uZXh0ID0gb2xkX2xlYXNlczsKKwkgIG9sZF9sZWFzZXMgPSBsZWFzZTsKKwkgIAorCSAgbGVhc2VzX2xlZnQrKzsKKwl9CisgICAgICBlbHNlCisJdXAgPSAmbGVhc2UtPm5leHQ7CisgICAgfQorfSAKKwkKKyAgCitzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2VfZmluZF9ieV9jbGllbnQodW5zaWduZWQgY2hhciAqaHdhZGRyLCBpbnQgaHdfbGVuLCBpbnQgaHdfdHlwZSwKKwkJCQkJdW5zaWduZWQgY2hhciAqY2xpZCwgaW50IGNsaWRfbGVuKQoreworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U7CisKKyAgaWYgKGNsaWQpCisgICAgZm9yIChsZWFzZSA9IGxlYXNlczsgbGVhc2U7IGxlYXNlID0gbGVhc2UtPm5leHQpCisgICAgICB7CisjaWZkZWYgSEFWRV9ESENQNgorCWlmIChsZWFzZS0+ZmxhZ3MgJiAoTEVBU0VfVEEgfCBMRUFTRV9OQSkpCisJICBjb250aW51ZTsKKyNlbmRpZgorCWlmIChsZWFzZS0+Y2xpZCAmJiBjbGlkX2xlbiA9PSBsZWFzZS0+Y2xpZF9sZW4gJiYKKwkgICAgbWVtY21wKGNsaWQsIGxlYXNlLT5jbGlkLCBjbGlkX2xlbikgPT0gMCkKKwkgIHJldHVybiBsZWFzZTsKKyAgICAgIH0KKyAgCisgIGZvciAobGVhc2UgPSBsZWFzZXM7IGxlYXNlOyBsZWFzZSA9IGxlYXNlLT5uZXh0KQkKKyAgICB7CisjaWZkZWYgSEFWRV9ESENQNgorICAgICAgaWYgKGxlYXNlLT5mbGFncyAmIChMRUFTRV9UQSB8IExFQVNFX05BKSkKKwljb250aW51ZTsKKyNlbmRpZiAgIAorICAgICAgaWYgKCghbGVhc2UtPmNsaWQgfHwgIWNsaWQpICYmIAorCSAgaHdfbGVuICE9IDAgJiYgCisJICBsZWFzZS0+aHdhZGRyX2xlbiA9PSBod19sZW4gJiYKKwkgIGxlYXNlLT5od2FkZHJfdHlwZSA9PSBod190eXBlICYmCisJICBtZW1jbXAoaHdhZGRyLCBsZWFzZS0+aHdhZGRyLCBod19sZW4pID09IDApCisJcmV0dXJuIGxlYXNlOworICAgIH0KKworICByZXR1cm4gTlVMTDsKK30KKworc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlX2ZpbmRfYnlfYWRkcihzdHJ1Y3QgaW5fYWRkciBhZGRyKQoreworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U7CisKKyAgZm9yIChsZWFzZSA9IGxlYXNlczsgbGVhc2U7IGxlYXNlID0gbGVhc2UtPm5leHQpCisgICAgeworI2lmZGVmIEhBVkVfREhDUDYKKyAgICAgIGlmIChsZWFzZS0+ZmxhZ3MgJiAoTEVBU0VfVEEgfCBMRUFTRV9OQSkpCisJY29udGludWU7CisjZW5kaWYgIAorICAgICAgaWYgKGxlYXNlLT5hZGRyLnNfYWRkciA9PSBhZGRyLnNfYWRkcikKKwlyZXR1cm4gbGVhc2U7CisgICAgfQorCisgIHJldHVybiBOVUxMOworfQorCisjaWZkZWYgSEFWRV9ESENQNgorLyogZmluZCBhZGRyZXNzIGZvciB7Q0xJRCwgSUFJRCwgYWRkcmVzc30gKi8KK3N0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTZfZmluZCh1bnNpZ25lZCBjaGFyICpjbGlkLCBpbnQgY2xpZF9sZW4sIAorCQkJICAgICAgIGludCBsZWFzZV90eXBlLCBpbnQgaWFpZCwgc3RydWN0IGluNl9hZGRyICphZGRyKQoreworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U7CisgIAorICBmb3IgKGxlYXNlID0gbGVhc2VzOyBsZWFzZTsgbGVhc2UgPSBsZWFzZS0+bmV4dCkKKyAgICB7CisgICAgICBpZiAoIShsZWFzZS0+ZmxhZ3MgJiBsZWFzZV90eXBlKSB8fCBsZWFzZS0+aWFpZCAhPSBpYWlkKQorCWNvbnRpbnVlOworCisgICAgICBpZiAoIUlONl9BUkVfQUREUl9FUVVBTCgmbGVhc2UtPmFkZHI2LCBhZGRyKSkKKwljb250aW51ZTsKKyAgICAgIAorICAgICAgaWYgKChjbGlkX2xlbiAhPSBsZWFzZS0+Y2xpZF9sZW4gfHwKKwkgICBtZW1jbXAoY2xpZCwgbGVhc2UtPmNsaWQsIGNsaWRfbGVuKSAhPSAwKSkKKwljb250aW51ZTsKKyAgICAgIAorICAgICAgcmV0dXJuIGxlYXNlOworICAgIH0KKyAgCisgIHJldHVybiBOVUxMOworfQorCisvKiByZXNldCAiVVNFRCBmbGFncyAqLwordm9pZCBsZWFzZTZfcmVzZXQodm9pZCkKK3sKKyAgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlOworICAKKyAgZm9yIChsZWFzZSA9IGxlYXNlczsgbGVhc2U7IGxlYXNlID0gbGVhc2UtPm5leHQpCisgICAgbGVhc2UtPmZsYWdzICY9IH5MRUFTRV9VU0VEOworfQorCisvKiBlbnVtZXJhdGUgYWxsIGxlYXNlcyBiZWxvbmdpbmcgdG8ge0NMSUQsIElBSUR9ICovCitzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U2X2ZpbmRfYnlfY2xpZW50KHN0cnVjdCBkaGNwX2xlYXNlICpmaXJzdCwgaW50IGxlYXNlX3R5cGUsIHVuc2lnbmVkIGNoYXIgKmNsaWQsIGludCBjbGlkX2xlbiwgaW50IGlhaWQpCit7CisgIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTsKKworICBpZiAoIWZpcnN0KQorICAgIGZpcnN0ID0gbGVhc2VzOworICBlbHNlCisgICAgZmlyc3QgPSBmaXJzdC0+bmV4dDsKKworICBmb3IgKGxlYXNlID0gZmlyc3Q7IGxlYXNlOyBsZWFzZSA9IGxlYXNlLT5uZXh0KQorICAgIHsKKyAgICAgIGlmIChsZWFzZS0+ZmxhZ3MgJiBMRUFTRV9VU0VEKQorCWNvbnRpbnVlOworCisgICAgICBpZiAoIShsZWFzZS0+ZmxhZ3MgJiBsZWFzZV90eXBlKSB8fCBsZWFzZS0+aWFpZCAhPSBpYWlkKQorCWNvbnRpbnVlOworIAorICAgICAgaWYgKChjbGlkX2xlbiAhPSBsZWFzZS0+Y2xpZF9sZW4gfHwKKwkgICBtZW1jbXAoY2xpZCwgbGVhc2UtPmNsaWQsIGNsaWRfbGVuKSAhPSAwKSkKKwljb250aW51ZTsKKworICAgICAgcmV0dXJuIGxlYXNlOworICAgIH0KKyAgCisgIHJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U2X2ZpbmRfYnlfYWRkcihzdHJ1Y3QgaW42X2FkZHIgKm5ldCwgaW50IHByZWZpeCwgdTY0IGFkZHIpCit7CisgIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTsKKyAgICAKKyAgZm9yIChsZWFzZSA9IGxlYXNlczsgbGVhc2U7IGxlYXNlID0gbGVhc2UtPm5leHQpCisgICAgeworICAgICAgaWYgKCEobGVhc2UtPmZsYWdzICYgKExFQVNFX1RBIHwgTEVBU0VfTkEpKSkKKwljb250aW51ZTsKKyAgICAgIAorICAgICAgaWYgKGlzX3NhbWVfbmV0NigmbGVhc2UtPmFkZHI2LCBuZXQsIHByZWZpeCkgJiYKKwkgIChwcmVmaXggPT0gMTI4IHx8IGFkZHI2cGFydCgmbGVhc2UtPmFkZHI2KSA9PSBhZGRyKSkKKwlyZXR1cm4gbGVhc2U7CisgICAgfQorICAKKyAgcmV0dXJuIE5VTEw7Cit9IAorCisvKiBGaW5kIGxhcmdlc3QgYXNzaWduZWQgYWRkcmVzcyBpbiBjb250ZXh0ICovCit1NjQgbGVhc2VfZmluZF9tYXhfYWRkcjYoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCkKK3sKKyAgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlOworICB1NjQgYWRkciA9IGFkZHI2cGFydCgmY29udGV4dC0+c3RhcnQ2KTsKKyAgCisgIGlmICghKGNvbnRleHQtPmZsYWdzICYgKENPTlRFWFRfU1RBVElDIHwgQ09OVEVYVF9QUk9YWSkpKQorICAgIGZvciAobGVhc2UgPSBsZWFzZXM7IGxlYXNlOyBsZWFzZSA9IGxlYXNlLT5uZXh0KQorICAgICAgeworCWlmICghKGxlYXNlLT5mbGFncyAmIChMRUFTRV9UQSB8IExFQVNFX05BKSkpCisJICBjb250aW51ZTsKKworCWlmIChpc19zYW1lX25ldDYoJmxlYXNlLT5hZGRyNiwgJmNvbnRleHQtPnN0YXJ0NiwgNjQpICYmCisJICAgIGFkZHI2cGFydCgmbGVhc2UtPmFkZHI2KSA+IGFkZHI2cGFydCgmY29udGV4dC0+c3RhcnQ2KSAmJgorCSAgICBhZGRyNnBhcnQoJmxlYXNlLT5hZGRyNikgPD0gYWRkcjZwYXJ0KCZjb250ZXh0LT5lbmQ2KSAmJgorCSAgICBhZGRyNnBhcnQoJmxlYXNlLT5hZGRyNikgPiBhZGRyKQorCSAgYWRkciA9IGFkZHI2cGFydCgmbGVhc2UtPmFkZHI2KTsKKyAgICAgIH0KKyAgCisgIHJldHVybiBhZGRyOworfQorCisjZW5kaWYKKworLyogRmluZCBsYXJnZXN0IGFzc2lnbmVkIGFkZHJlc3MgaW4gY29udGV4dCAqLworc3RydWN0IGluX2FkZHIgbGVhc2VfZmluZF9tYXhfYWRkcihzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0KQoreworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U7CisgIHN0cnVjdCBpbl9hZGRyIGFkZHIgPSBjb250ZXh0LT5zdGFydDsKKyAgCisgIGlmICghKGNvbnRleHQtPmZsYWdzICYgKENPTlRFWFRfU1RBVElDIHwgQ09OVEVYVF9QUk9YWSkpKQorICAgIGZvciAobGVhc2UgPSBsZWFzZXM7IGxlYXNlOyBsZWFzZSA9IGxlYXNlLT5uZXh0KQorICAgICAgeworI2lmZGVmIEhBVkVfREhDUDYKKwlpZiAobGVhc2UtPmZsYWdzICYgKExFQVNFX1RBIHwgTEVBU0VfTkEpKQorCSAgY29udGludWU7CisjZW5kaWYKKwlpZiAoKCh1bnNpZ25lZCludG9obChsZWFzZS0+YWRkci5zX2FkZHIpKSA+ICgodW5zaWduZWQpbnRvaGwoY29udGV4dC0+c3RhcnQuc19hZGRyKSkgJiYKKwkgICAgKCh1bnNpZ25lZCludG9obChsZWFzZS0+YWRkci5zX2FkZHIpKSA8PSAoKHVuc2lnbmVkKW50b2hsKGNvbnRleHQtPmVuZC5zX2FkZHIpKSAmJgorCSAgICAoKHVuc2lnbmVkKW50b2hsKGxlYXNlLT5hZGRyLnNfYWRkcikpID4gKCh1bnNpZ25lZCludG9obChhZGRyLnNfYWRkcikpKQorCSAgYWRkciA9IGxlYXNlLT5hZGRyOworICAgICAgfQorICAKKyAgcmV0dXJuIGFkZHI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2VfYWxsb2NhdGUodm9pZCkKK3sKKyAgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlOworICBpZiAoIWxlYXNlc19sZWZ0IHx8ICEobGVhc2UgPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaGNwX2xlYXNlKSkpKQorICAgIHJldHVybiBOVUxMOworCisgIG1lbXNldChsZWFzZSwgMCwgc2l6ZW9mKHN0cnVjdCBkaGNwX2xlYXNlKSk7CisgIGxlYXNlLT5mbGFncyA9IExFQVNFX05FVzsKKyAgbGVhc2UtPmV4cGlyZXMgPSAxOworI2lmZGVmIEhBVkVfQlJPS0VOX1JUQworICBsZWFzZS0+bGVuZ3RoID0gMHhmZmZmZmZmZjsgLyogaWxsZWdhbCB2YWx1ZSAqLworI2VuZGlmCisgIGxlYXNlLT5od2FkZHJfbGVuID0gMjU2OyAvKiBpbGxlZ2FsIHZhbHVlICovCisgIGxlYXNlLT5uZXh0ID0gbGVhc2VzOworICBsZWFzZXMgPSBsZWFzZTsKKyAgCisgIGZpbGVfZGlydHkgPSAxOworICBsZWFzZXNfbGVmdC0tOworCisgIHJldHVybiBsZWFzZTsKK30KKworc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlNF9hbGxvY2F0ZShzdHJ1Y3QgaW5fYWRkciBhZGRyKQoreworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UgPSBsZWFzZV9hbGxvY2F0ZSgpOworICBpZiAobGVhc2UpCisgICAgbGVhc2UtPmFkZHIgPSBhZGRyOworICAKKyAgcmV0dXJuIGxlYXNlOworfQorCisjaWZkZWYgSEFWRV9ESENQNgorc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlNl9hbGxvY2F0ZShzdHJ1Y3QgaW42X2FkZHIgKmFkZHJwLCBpbnQgbGVhc2VfdHlwZSkKK3sKKyAgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlID0gbGVhc2VfYWxsb2NhdGUoKTsKKworICBpZiAobGVhc2UpCisgICAgeworICAgICAgbGVhc2UtPmFkZHI2ID0gKmFkZHJwOworICAgICAgbGVhc2UtPmZsYWdzIHw9IGxlYXNlX3R5cGU7CisgICAgICBsZWFzZS0+aWFpZCA9IDA7CisgICAgfQorCisgIHJldHVybiBsZWFzZTsKK30KKyNlbmRpZgorCit2b2lkIGxlYXNlX3NldF9leHBpcmVzKHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZSwgdW5zaWduZWQgaW50IGxlbiwgdGltZV90IG5vdykKK3sKKyAgdGltZV90IGV4cDsKKworICBpZiAobGVuID09IDB4ZmZmZmZmZmYpCisgICAgeworICAgICAgZXhwID0gMDsKKyAgICAgIGxlbiA9IDA7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZXhwID0gbm93ICsgKHRpbWVfdClsZW47CisgICAgICAvKiBDaGVjayBmb3IgMjAzOCBvdmVyZmxvdy4gTWFrZSB0aGUgbGVhc2UKKwkgaW5pZmluaXRlIGluIHRoYXQgY2FzZSwgYXMgdGhlIGxlYXN0IGRpc3J1cHRpdmUKKwkgdGhpbmcgd2UgY2FuIGRvLiAqLworICAgICAgaWYgKGRpZmZ0aW1lKGV4cCwgbm93KSA8PSAwLjApCisJZXhwID0gMDsKKyAgICB9CisKKyAgaWYgKGV4cCAhPSBsZWFzZS0+ZXhwaXJlcykKKyAgICB7CisgICAgICBkbnNfZGlydHkgPSAxOworICAgICAgbGVhc2UtPmV4cGlyZXMgPSBleHA7CisjaWZuZGVmIEhBVkVfQlJPS0VOX1JUQworICAgICAgbGVhc2UtPmZsYWdzIHw9IExFQVNFX0FVWF9DSEFOR0VEOworICAgICAgZmlsZV9kaXJ0eSA9IDE7CisjZW5kaWYKKyAgICB9CisgIAorI2lmZGVmIEhBVkVfQlJPS0VOX1JUQworICBpZiAobGVuICE9IGxlYXNlLT5sZW5ndGgpCisgICAgeworICAgICAgbGVhc2UtPmxlbmd0aCA9IGxlbjsKKyAgICAgIGxlYXNlLT5mbGFncyB8PSBMRUFTRV9BVVhfQ0hBTkdFRDsKKyAgICAgIGZpbGVfZGlydHkgPSAxOyAKKyAgICB9CisjZW5kaWYKK30gCisKKyNpZmRlZiBIQVZFX0RIQ1A2Cit2b2lkIGxlYXNlX3NldF9pYWlkKHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZSwgaW50IGlhaWQpCit7CisgIGlmIChsZWFzZS0+aWFpZCAhPSBpYWlkKQorICAgIHsKKyAgICAgIGxlYXNlLT5pYWlkID0gaWFpZDsKKyAgICAgIGxlYXNlLT5mbGFncyB8PSBMRUFTRV9DSEFOR0VEOworICAgIH0KK30KKyNlbmRpZgorCit2b2lkIGxlYXNlX3NldF9od2FkZHIoc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlLCB1bnNpZ25lZCBjaGFyICpod2FkZHIsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgKmNsaWQsIGludCBod19sZW4sIGludCBod190eXBlLCBpbnQgY2xpZF9sZW4sIAorCQkgICAgICB0aW1lX3Qgbm93LCBpbnQgZm9yY2UpCit7CisjaWZkZWYgSEFWRV9ESENQNgorICBpbnQgY2hhbmdlID0gZm9yY2U7CisgIGxlYXNlLT5mbGFncyB8PSBMRUFTRV9IQVZFX0hXQUREUjsKKyNlbmRpZgorCisgICh2b2lkKWZvcmNlOworICAodm9pZClub3c7CisKKyAgaWYgKGh3X2xlbiAhPSBsZWFzZS0+aHdhZGRyX2xlbiB8fAorICAgICAgaHdfdHlwZSAhPSBsZWFzZS0+aHdhZGRyX3R5cGUgfHwgCisgICAgICAoaHdfbGVuICE9IDAgJiYgbWVtY21wKGxlYXNlLT5od2FkZHIsIGh3YWRkciwgaHdfbGVuKSAhPSAwKSkKKyAgICB7CisgICAgICBpZiAoaHdfbGVuICE9IDApCisJbWVtY3B5KGxlYXNlLT5od2FkZHIsIGh3YWRkciwgaHdfbGVuKTsKKyAgICAgIGxlYXNlLT5od2FkZHJfbGVuID0gaHdfbGVuOworICAgICAgbGVhc2UtPmh3YWRkcl90eXBlID0gaHdfdHlwZTsKKyAgICAgIGxlYXNlLT5mbGFncyB8PSBMRUFTRV9DSEFOR0VEOworICAgICAgZmlsZV9kaXJ0eSA9IDE7IC8qIHJ1biBzY3JpcHQgb24gY2hhbmdlICovCisgICAgfQorCisgIC8qIG9ubHkgdXBkYXRlIGNsaWQgd2hlbiBvbmUgaXMgYXZhaWxhYmxlLCBzdG9wcyBwYWNrZXRzCisgICAgIHdpdGhvdXQgYSBjbGlkIHJlbW92aW5nIHRoZSByZWNvcmQuIExlYXNlIGluaXQgdXNlcworICAgICBjbGlkX2xlbiA9PSAwIGZvciBubyBjbGlkLiAqLworICBpZiAoY2xpZF9sZW4gIT0gMCAmJiBjbGlkKQorICAgIHsKKyAgICAgIGlmICghbGVhc2UtPmNsaWQpCisJbGVhc2UtPmNsaWRfbGVuID0gMDsKKworICAgICAgaWYgKGxlYXNlLT5jbGlkX2xlbiAhPSBjbGlkX2xlbikKKwl7CisJICBsZWFzZS0+ZmxhZ3MgfD0gTEVBU0VfQVVYX0NIQU5HRUQ7CisJICBmaWxlX2RpcnR5ID0gMTsKKwkgIGZyZWUobGVhc2UtPmNsaWQpOworCSAgaWYgKCEobGVhc2UtPmNsaWQgPSB3aGluZV9tYWxsb2MoY2xpZF9sZW4pKSkKKwkgICAgcmV0dXJuOworI2lmZGVmIEhBVkVfREhDUDYKKwkgIGNoYW5nZSA9IDE7CisjZW5kaWYJICAgCisJfQorICAgICAgZWxzZSBpZiAobWVtY21wKGxlYXNlLT5jbGlkLCBjbGlkLCBjbGlkX2xlbikgIT0gMCkKKwl7CisJICBsZWFzZS0+ZmxhZ3MgfD0gTEVBU0VfQVVYX0NIQU5HRUQ7CisJICBmaWxlX2RpcnR5ID0gMTsKKyNpZmRlZiBIQVZFX0RIQ1A2CisJICBjaGFuZ2UgPSAxOworI2VuZGlmCQorCX0KKyAgICAgIAorICAgICAgbGVhc2UtPmNsaWRfbGVuID0gY2xpZF9sZW47CisgICAgICBtZW1jcHkobGVhc2UtPmNsaWQsIGNsaWQsIGNsaWRfbGVuKTsKKyAgICB9CisgIAorI2lmZGVmIEhBVkVfREhDUDYKKyAgaWYgKGNoYW5nZSkKKyAgICBzbGFhY19hZGRfYWRkcnMobGVhc2UsIG5vdywgZm9yY2UpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGtpbGxfbmFtZShzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UpCit7CisgIC8qIHJ1biBzY3JpcHQgdG8gc2F5IHdlIGxvc3Qgb3VyIG9sZCBuYW1lICovCisgIAorICAvKiB0aGlzIHNob3VsZG4ndCBoYXBwZW4gdW5sZXNzIHVwZGF0ZXMgYXJlIHZlcnkgcXVpY2sgYW5kIHRoZQorICAgICBzY3JpcHQgdmVyeSBzbG93LCB3ZSBqdXN0IGF2b2lkIGEgbWVtb3J5IGxlYWsgaWYgaXQgZG9lcy4gKi8KKyAgZnJlZShsZWFzZS0+b2xkX2hvc3RuYW1lKTsKKyAgCisgIC8qIElmIHdlIGtub3cgdGhlIGZxZG4sIHBhc3MgdGhhdC4gVGhlIGhlbHBlciB3aWxsIGRlcml2ZSB0aGUKKyAgICAgdW5xdWFsaWZpZWQgbmFtZSBmcm9tIGl0LCBmcmVlIHRoZSB1bnF1YWxpZmllZCBuYW1lIGhlcmUuICovCisKKyAgaWYgKGxlYXNlLT5mcWRuKQorICAgIHsKKyAgICAgIGxlYXNlLT5vbGRfaG9zdG5hbWUgPSBsZWFzZS0+ZnFkbjsKKyAgICAgIGZyZWUobGVhc2UtPmhvc3RuYW1lKTsKKyAgICB9CisgIGVsc2UKKyAgICBsZWFzZS0+b2xkX2hvc3RuYW1lID0gbGVhc2UtPmhvc3RuYW1lOworCisgIGxlYXNlLT5ob3N0bmFtZSA9IGxlYXNlLT5mcWRuID0gTlVMTDsKK30KKwordm9pZCBsZWFzZV9zZXRfaG9zdG5hbWUoc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlLCBjaGFyICpuYW1lLCBpbnQgYXV0aCwgY2hhciAqZG9tYWluLCBjaGFyICpjb25maWdfZG9tYWluKQoreworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2VfdG1wOworICBjaGFyICpuZXdfbmFtZSA9IE5VTEwsICpuZXdfZnFkbiA9IE5VTEw7CisKKyAgaWYgKGNvbmZpZ19kb21haW4gJiYgKCFkb21haW4gfHwgIWhvc3RuYW1lX2lzZXF1YWwoZG9tYWluLCBjb25maWdfZG9tYWluKSkpCisgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfV0FSTklORywgXygiSWdub3JpbmcgZG9tYWluICVzIGZvciBESENQIGhvc3QgbmFtZSAlcyIpLCBjb25maWdfZG9tYWluLCBuYW1lKTsKKyAgCisgIGlmIChsZWFzZS0+aG9zdG5hbWUgJiYgbmFtZSAmJiBob3N0bmFtZV9pc2VxdWFsKGxlYXNlLT5ob3N0bmFtZSwgbmFtZSkpCisgICAgeworICAgICAgaWYgKGF1dGgpCisJbGVhc2UtPmZsYWdzIHw9IExFQVNFX0FVVEhfTkFNRTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIAorICBpZiAoIW5hbWUgJiYgIWxlYXNlLT5ob3N0bmFtZSkKKyAgICByZXR1cm47CisKKyAgLyogSWYgYSBtYWNoaW5lIHR1cm5zIHVwIG9uIGEgbmV3IG5ldCB3aXRob3V0IGRyb3BwaW5nIHRoZSBvbGQgbGVhc2UsCisgICAgIG9yIHR3byBtYWNoaW5lcyBjbGFpbSB0aGUgc2FtZSBuYW1lLCB0aGVuIHdlIGVuZCB1cCB3aXRoIHR3byBpbnRlcmZhY2VzIHdpdGgKKyAgICAgdGhlIHNhbWUgbmFtZS4gQ2hlY2sgZm9yIHRoYXQgaGVyZSBhbmQgcmVtb3ZlIHRoZSBuYW1lIGZyb20gdGhlIG9sZCBsZWFzZS4KKyAgICAgTm90ZSB0aGF0IElQdjYgbGVhc2VzIGFyZSBkaWZmZXJlbnQuIEFsbCB0aGUgbGVhc2VzIHRvIHRoZSBzYW1lIERVSUQgYXJlIAorICAgICBhbGxvd2VkIHRoZSBzYW1lIG5hbWUuCisKKyAgICAgRG9uJ3QgYWxsb3cgYSBuYW1lIGZyb20gdGhlIGNsaWVudCB0byBvdmVycmlkZSBhIG5hbWUgZnJvbSBkbnNtYXNxIGNvbmZpZy4gKi8KKyAgCisgIGlmIChuYW1lKQorICAgIHsKKyAgICAgIGlmICgobmV3X25hbWUgPSB3aGluZV9tYWxsb2Moc3RybGVuKG5hbWUpICsgMSkpKQorCXsKKwkgIHN0cmNweShuZXdfbmFtZSwgbmFtZSk7CisJICBpZiAoZG9tYWluICYmIChuZXdfZnFkbiA9IHdoaW5lX21hbGxvYyhzdHJsZW4obmV3X25hbWUpICsgc3RybGVuKGRvbWFpbikgKyAyKSkpCisJICAgIHsKKwkgICAgICBzdHJjcHkobmV3X2ZxZG4sIG5hbWUpOworCSAgICAgIHN0cmNhdChuZXdfZnFkbiwgIi4iKTsKKwkgICAgICBzdHJjYXQobmV3X2ZxZG4sIGRvbWFpbik7CisJICAgIH0KKwl9CisJICAKKyAgICAgIC8qIERlcGVuZGluZyBvbiBtb2RlLCB3ZSBjaGVjayBlaXRoZXIgdW5xdWFsaWZpZWQgbmFtZSBvciBGUUROLiAqLworICAgICAgZm9yIChsZWFzZV90bXAgPSBsZWFzZXM7IGxlYXNlX3RtcDsgbGVhc2VfdG1wID0gbGVhc2VfdG1wLT5uZXh0KQorCXsKKwkgIGlmIChvcHRpb25fYm9vbChPUFRfREhDUF9GUUROKSkKKwkgICAgeworCSAgICAgIGlmICghbmV3X2ZxZG4gfHwgIWxlYXNlX3RtcC0+ZnFkbiB8fCAhaG9zdG5hbWVfaXNlcXVhbChsZWFzZV90bXAtPmZxZG4sIG5ld19mcWRuKSkKKwkJY29udGludWU7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGlmICghbmV3X25hbWUgfHwgIWxlYXNlX3RtcC0+aG9zdG5hbWUgfHwgIWhvc3RuYW1lX2lzZXF1YWwobGVhc2VfdG1wLT5ob3N0bmFtZSwgbmV3X25hbWUpICkKKwkJY29udGludWU7IAorCSAgICB9CisKKwkgIGlmIChsZWFzZS0+ZmxhZ3MgJiAoTEVBU0VfVEEgfCBMRUFTRV9OQSkpCisJICAgIHsKKwkgICAgICBpZiAoIShsZWFzZV90bXAtPmZsYWdzICYgKExFQVNFX1RBIHwgTEVBU0VfTkEpKSkKKwkJY29udGludWU7CisKKwkgICAgICAvKiBhbm90aGVyIGxlYXNlIGZvciB0aGUgc2FtZSBEVUlEIGlzIE9LIGZvciBJUHY2ICovCisJICAgICAgaWYgKGxlYXNlLT5jbGlkX2xlbiA9PSBsZWFzZV90bXAtPmNsaWRfbGVuICYmCisJCSAgbGVhc2UtPmNsaWQgJiYgbGVhc2VfdG1wLT5jbGlkICYmCisJCSAgbWVtY21wKGxlYXNlLT5jbGlkLCBsZWFzZV90bXAtPmNsaWQsIGxlYXNlLT5jbGlkX2xlbikgPT0gMCkKKwkJY29udGludWU7CSAgICAgIAorCSAgICB9CisJICBlbHNlIGlmIChsZWFzZV90bXAtPmZsYWdzICYgKExFQVNFX1RBIHwgTEVBU0VfTkEpKQorCSAgICBjb250aW51ZTsKKwkJICAgCisJICBpZiAoKGxlYXNlX3RtcC0+ZmxhZ3MgJiBMRUFTRV9BVVRIX05BTUUpICYmICFhdXRoKQorCSAgICB7CisJICAgICAgZnJlZShuZXdfbmFtZSk7CisJICAgICAgZnJlZShuZXdfZnFkbik7CisJICAgICAgcmV0dXJuOworCSAgICB9CisJCisJICBraWxsX25hbWUobGVhc2VfdG1wKTsKKwkgIGJyZWFrOworCX0KKyAgICB9CisKKyAgaWYgKGxlYXNlLT5ob3N0bmFtZSkKKyAgICBraWxsX25hbWUobGVhc2UpOworCisgIGxlYXNlLT5ob3N0bmFtZSA9IG5ld19uYW1lOworICBsZWFzZS0+ZnFkbiA9IG5ld19mcWRuOworICAKKyAgaWYgKGF1dGgpCisgICAgbGVhc2UtPmZsYWdzIHw9IExFQVNFX0FVVEhfTkFNRTsKKyAgCisgIGZpbGVfZGlydHkgPSAxOworICBkbnNfZGlydHkgPSAxOyAKKyAgbGVhc2UtPmZsYWdzIHw9IExFQVNFX0NIQU5HRUQ7IC8qIHJ1biBzY3JpcHQgb24gY2hhbmdlICovCit9CisKK3ZvaWQgbGVhc2Vfc2V0X2ludGVyZmFjZShzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UsIGludCBpbnRlcmZhY2UsIHRpbWVfdCBub3cpCit7CisgICh2b2lkKW5vdzsKKworICBpZiAobGVhc2UtPmxhc3RfaW50ZXJmYWNlID09IGludGVyZmFjZSkKKyAgICByZXR1cm47CisKKyAgbGVhc2UtPmxhc3RfaW50ZXJmYWNlID0gaW50ZXJmYWNlOworICBsZWFzZS0+ZmxhZ3MgfD0gTEVBU0VfQ0hBTkdFRDsgCisKKyNpZmRlZiBIQVZFX0RIQ1A2CisgIHNsYWFjX2FkZF9hZGRycyhsZWFzZSwgbm93LCAwKTsKKyNlbmRpZgorfQorCit2b2lkIHJlcnVuX3NjcmlwdHModm9pZCkKK3sKKyAgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlOworICAKKyAgZm9yIChsZWFzZSA9IGxlYXNlczsgbGVhc2U7IGxlYXNlID0gbGVhc2UtPm5leHQpCisgICAgbGVhc2UtPmZsYWdzIHw9IExFQVNFX0NIQU5HRUQ7IAorfQorCisvKiBkZWxldGVkIGxlYXNlcyBnZXQgdHJhbnNmZXJyZWQgdG8gdGhlIG9sZF9sZWFzZXMgbGlzdC4KKyAgIHJlbW92ZSB0aGVtIGhlcmUsIGFmdGVyIGNhbGxpbmcgdGhlIGxlYXNlIGNoYW5nZQorICAgc2NyaXB0LiBBbHNvIHJ1biB0aGUgbGVhc2UgY2hhbmdlIHNjcmlwdCBvbiBuZXcvbW9kaWZpZWQgbGVhc2VzLgorCisgICBSZXR1cm4gemVybyBpZiBub3RoaW5nIHRvIGRvLiAqLworaW50IGRvX3NjcmlwdF9ydW4odGltZV90IG5vdykKK3sKKyAgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlOworCisgICh2b2lkKW5vdzsKKworI2lmZGVmIEhBVkVfREJVUworICAvKiBJZiB3ZSdyZSBnb2luZyB0byBiZSBzZW5kaW5nIERCdXMgc2lnbmFscywgYnV0IHRoZSBjb25uZWN0aW9uIGlzIG5vdCB5ZXQgdXAsCisgICAgIGRlbGF5IGV2ZXJ5dGhpbmcgdW50aWwgaXQgaXMuICovCisgIGlmIChvcHRpb25fYm9vbChPUFRfREJVUykgJiYgIWRhZW1vbi0+ZGJ1cykKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorCisgIGlmIChvbGRfbGVhc2VzKQorICAgIHsKKyAgICAgIGxlYXNlID0gb2xkX2xlYXNlczsKKyAgICAgICAgICAgICAgICAgIAorICAgICAgLyogSWYgdGhlIGxlYXNlIHN0aWxsIGhhcyBhbiBvbGRfaG9zdG5hbWUsIGRvIHRoZSAib2xkIiBhY3Rpb24gb24gdGhhdCBmaXJzdCAqLworICAgICAgaWYgKGxlYXNlLT5vbGRfaG9zdG5hbWUpCisJeworI2lmZGVmIEhBVkVfU0NSSVBUCisJICBxdWV1ZV9zY3JpcHQoQUNUSU9OX09MRF9IT1NUTkFNRSwgbGVhc2UsIGxlYXNlLT5vbGRfaG9zdG5hbWUsIG5vdyk7CisjZW5kaWYKKwkgIGZyZWUobGVhc2UtPm9sZF9ob3N0bmFtZSk7CisJICBsZWFzZS0+b2xkX2hvc3RuYW1lID0gTlVMTDsKKwkgIHJldHVybiAxOworCX0KKyAgICAgIGVsc2UgCisJeworI2lmZGVmIEhBVkVfREhDUDYKKwkgIHN0cnVjdCBzbGFhY19hZGRyZXNzICpzbGFhYywgKnRtcDsKKwkgIGZvciAoc2xhYWMgPSBsZWFzZS0+c2xhYWNfYWRkcmVzczsgc2xhYWM7IHNsYWFjID0gdG1wKQorCSAgICB7CisJICAgICAgdG1wID0gc2xhYWMtPm5leHQ7CisJICAgICAgZnJlZShzbGFhYyk7CisJICAgIH0KKyNlbmRpZgorCSAga2lsbF9uYW1lKGxlYXNlKTsKKyNpZmRlZiBIQVZFX1NDUklQVAorCSAgcXVldWVfc2NyaXB0KEFDVElPTl9ERUwsIGxlYXNlLCBsZWFzZS0+b2xkX2hvc3RuYW1lLCBub3cpOworI2VuZGlmCisjaWZkZWYgSEFWRV9EQlVTCisJICBlbWl0X2RidXNfc2lnbmFsKEFDVElPTl9ERUwsIGxlYXNlLCBsZWFzZS0+b2xkX2hvc3RuYW1lKTsKKyNlbmRpZgorCSAgb2xkX2xlYXNlcyA9IGxlYXNlLT5uZXh0OworCSAgCisJICBmcmVlKGxlYXNlLT5vbGRfaG9zdG5hbWUpOyAKKwkgIGZyZWUobGVhc2UtPmNsaWQpOworCSAgZnJlZShsZWFzZS0+ZXh0cmFkYXRhKTsKKwkgIGZyZWUobGVhc2UpOworCSAgICAKKwkgIHJldHVybiAxOyAKKwl9CisgICAgfQorICAKKyAgLyogbWFrZSBzdXJlIHdlIGFubm91bmNlIHRoZSBsb3NzIG9mIGEgaG9zdG5hbWUgYmVmb3JlIGl0cyBuZXcgbG9jYXRpb24uICovCisgIGZvciAobGVhc2UgPSBsZWFzZXM7IGxlYXNlOyBsZWFzZSA9IGxlYXNlLT5uZXh0KQorICAgIGlmIChsZWFzZS0+b2xkX2hvc3RuYW1lKQorICAgICAgewkKKyNpZmRlZiBIQVZFX1NDUklQVAorCXF1ZXVlX3NjcmlwdChBQ1RJT05fT0xEX0hPU1ROQU1FLCBsZWFzZSwgbGVhc2UtPm9sZF9ob3N0bmFtZSwgbm93KTsKKyNlbmRpZgorCWZyZWUobGVhc2UtPm9sZF9ob3N0bmFtZSk7CisJbGVhc2UtPm9sZF9ob3N0bmFtZSA9IE5VTEw7CisJcmV0dXJuIDE7CisgICAgICB9CisgIAorICBmb3IgKGxlYXNlID0gbGVhc2VzOyBsZWFzZTsgbGVhc2UgPSBsZWFzZS0+bmV4dCkKKyAgICBpZiAoKGxlYXNlLT5mbGFncyAmIChMRUFTRV9ORVcgfCBMRUFTRV9DSEFOR0VEKSkgfHwgCisJKChsZWFzZS0+ZmxhZ3MgJiBMRUFTRV9BVVhfQ0hBTkdFRCkgJiYgb3B0aW9uX2Jvb2woT1BUX0xFQVNFX1JPKSkpCisgICAgICB7CisjaWZkZWYgSEFWRV9TQ1JJUFQKKwlxdWV1ZV9zY3JpcHQoKGxlYXNlLT5mbGFncyAmIExFQVNFX05FVykgPyBBQ1RJT05fQUREIDogQUNUSU9OX09MRCwgbGVhc2UsIAorCQkgICAgIGxlYXNlLT5mcWRuID8gbGVhc2UtPmZxZG4gOiBsZWFzZS0+aG9zdG5hbWUsIG5vdyk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0RCVVMKKwllbWl0X2RidXNfc2lnbmFsKChsZWFzZS0+ZmxhZ3MgJiBMRUFTRV9ORVcpID8gQUNUSU9OX0FERCA6IEFDVElPTl9PTEQsIGxlYXNlLAorCQkJIGxlYXNlLT5mcWRuID8gbGVhc2UtPmZxZG4gOiBsZWFzZS0+aG9zdG5hbWUpOworI2VuZGlmCisJbGVhc2UtPmZsYWdzICY9IH4oTEVBU0VfTkVXIHwgTEVBU0VfQ0hBTkdFRCB8IExFQVNFX0FVWF9DSEFOR0VEKTsKKwkKKwkvKiB0aGlzIGlzIHVzZWQgZm9yIHRoZSAiYWRkIiBjYWxsLCB0aGVuIGp1bmtlZCwgc2luY2UgdGhleSdyZSBub3QgaW4gdGhlIGRhdGFiYXNlICovCisJZnJlZShsZWFzZS0+ZXh0cmFkYXRhKTsKKwlsZWFzZS0+ZXh0cmFkYXRhID0gTlVMTDsKKwkKKwlyZXR1cm4gMTsKKyAgICAgIH0KKworICByZXR1cm4gMDsgLyogbm90aGluZyB0byBkbyAqLworfQorCisjaWZkZWYgSEFWRV9TQ1JJUFQKK3ZvaWQgbGVhc2VfYWRkX2V4dHJhZGF0YShzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4sIGludCBkZWxpbSkKK3sKKyAgdW5zaWduZWQgaW50IGk7CisgIAorICAvKiBjaGVjayBmb3IgZW1iZWRlZCBOVUxMcyAqLworICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgaWYgKGRhdGFbaV0gPT0gMCkKKyAgICAgIHsKKwlsZW4gPSBpOworCWJyZWFrOworICAgICAgfQorCisgIGlmICgobGVhc2UtPmV4dHJhZGF0YV9zaXplIC0gbGVhc2UtPmV4dHJhZGF0YV9sZW4pIDwgKGxlbiArIDEpKQorICAgIHsKKyAgICAgIHNpemVfdCBuZXdzeiA9IGxlYXNlLT5leHRyYWRhdGFfbGVuICsgbGVuICsgMTAwOworICAgICAgdW5zaWduZWQgY2hhciAqbmV3ID0gd2hpbmVfbWFsbG9jKG5ld3N6KTsKKyAgCisgICAgICBpZiAoIW5ldykKKwlyZXR1cm47CisgICAgICAKKyAgICAgIGlmIChsZWFzZS0+ZXh0cmFkYXRhKQorCXsKKwkgIG1lbWNweShuZXcsIGxlYXNlLT5leHRyYWRhdGEsIGxlYXNlLT5leHRyYWRhdGFfbGVuKTsKKwkgIGZyZWUobGVhc2UtPmV4dHJhZGF0YSk7CisJfQorCisgICAgICBsZWFzZS0+ZXh0cmFkYXRhID0gbmV3OworICAgICAgbGVhc2UtPmV4dHJhZGF0YV9zaXplID0gbmV3c3o7CisgICAgfQorCisgIGlmIChsZW4gIT0gMCkKKyAgICBtZW1jcHkobGVhc2UtPmV4dHJhZGF0YSArIGxlYXNlLT5leHRyYWRhdGFfbGVuLCBkYXRhLCBsZW4pOworICBsZWFzZS0+ZXh0cmFkYXRhW2xlYXNlLT5leHRyYWRhdGFfbGVuICsgbGVuXSA9IGRlbGltOworICBsZWFzZS0+ZXh0cmFkYXRhX2xlbiArPSBsZW4gKyAxOyAKK30KKyNlbmRpZgorCisjZW5kaWYKKwkgIAorCisgICAgICAKKwpkaWZmIC0tZ2l0IGEvc3JjL2xvZy5jIGIvc3JjL2xvZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwODNhODYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbG9nLmMKQEAgLTAsMCArMSw0NzYgQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMTQgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAiZG5zbWFzcS5oIgorCisjaWZkZWYgX19BTkRST0lEX18KKyMgIGluY2x1ZGUgPGFuZHJvaWQvbG9nLmg+CisjZW5kaWYKKworLyogSW1wbGVtZW50IGxvZ2dpbmcgdG8gL2Rldi9sb2cgYXN5bmNocm9ub3VzbHkuIElmIHN5c2xvZ2QgaXMgCisgICBtYWtpbmcgRE5TIGxvb2t1cHMgdGhyb3VnaCBkbnNtYXNxLCBhbmQgZG5zbWFzcSBibG9ja3MgYXdhaXRpbmcKKyAgIHN5c2xvZ2QsIHRoZW4gdGhlIHR3byBkYWVtb25zIGNhbiBkZWFkbG9jay4gV2UgZ2V0IGFyb3VuZCB0aGlzCisgICBieSBub3QgYmxvY2tpbmcgd2hlbiB0YWxraW5nIHRvIHN5c2xvZywgaW5zdGVhZCB3ZSBxdWV1ZSB1cCB0byAKKyAgIE1BWF9MT0dTIG1lc3NhZ2VzLiBJZiBtb3JlIGFyZSBxdWV1ZWQsIHRoZXkgd2lsbCBiZSBkcm9wcGVkLAorICAgYW5kIHRoZSBkcm9wIGV2ZW50IGl0c2VsZiBsb2dnZWQuICovCisKKy8qIFRoZSAid2lyZSIgcHJvdG9jb2wgZm9yIGxvZ2dpbmcgaXMgZGVmaW5lZCBpbiBSRkMgMzE2NCAqLworCisvKiBGcm9tIFJGQyAzMTY0ICovCisjZGVmaW5lIE1BWF9NRVNTQUdFIDEwMjQKKworLyogZGVmYXVsdHMgaW4gY2FzZSB3ZSBkaWUoKSBiZWZvcmUgd2UgbG9nX3N0YXJ0KCkgKi8KK3N0YXRpYyBpbnQgbG9nX2ZhYyA9IExPR19EQUVNT047CitzdGF0aWMgaW50IGxvZ19zdGRlcnIgPSAwOworc3RhdGljIGludCBlY2hvX3N0ZGVyciA9IDA7CitzdGF0aWMgaW50IGxvZ19mZCA9IC0xOworc3RhdGljIGludCBsb2dfdG9fZmlsZSA9IDA7CitzdGF0aWMgaW50IGVudHJpZXNfYWxsb2NlZCA9IDA7CitzdGF0aWMgaW50IGVudHJpZXNfbG9zdCA9IDA7CitzdGF0aWMgaW50IGNvbm5lY3Rpb25fZ29vZCA9IDE7CitzdGF0aWMgaW50IG1heF9sb2dzID0gMDsKK3N0YXRpYyBpbnQgY29ubmVjdGlvbl90eXBlID0gU09DS19ER1JBTTsKKworc3RydWN0IGxvZ19lbnRyeSB7CisgIGludCBvZmZzZXQsIGxlbmd0aDsKKyAgcGlkX3QgcGlkOyAvKiB0byBhdm9pZCBkdXBsaWNhdGVzIG92ZXIgYSBmb3JrICovCisgIHN0cnVjdCBsb2dfZW50cnkgKm5leHQ7CisgIGNoYXIgcGF5bG9hZFtNQVhfTUVTU0FHRV07Cit9OworCitzdGF0aWMgc3RydWN0IGxvZ19lbnRyeSAqZW50cmllcyA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGxvZ19lbnRyeSAqZnJlZV9lbnRyaWVzID0gTlVMTDsKKworCitpbnQgbG9nX3N0YXJ0KHN0cnVjdCBwYXNzd2QgKmVudF9wdywgaW50IGVycmZkKQoreworICBpbnQgcmV0ID0gMDsKKworICBlY2hvX3N0ZGVyciA9IG9wdGlvbl9ib29sKE9QVF9ERUJVRyk7CisKKyAgaWYgKGRhZW1vbi0+bG9nX2ZhYyAhPSAtMSkKKyAgICBsb2dfZmFjID0gZGFlbW9uLT5sb2dfZmFjOworI2lmZGVmIExPR19MT0NBTDAKKyAgZWxzZSBpZiAob3B0aW9uX2Jvb2woT1BUX0RFQlVHKSkKKyAgICBsb2dfZmFjID0gTE9HX0xPQ0FMMDsKKyNlbmRpZgorCisgIGlmIChkYWVtb24tPmxvZ19maWxlKQorICAgIHsgCisgICAgICBsb2dfdG9fZmlsZSA9IDE7CisgICAgICBkYWVtb24tPm1heF9sb2dzID0gMDsKKyAgICAgIGlmIChzdHJjbXAoZGFlbW9uLT5sb2dfZmlsZSwgIi0iKSA9PSAwKQorCXsKKwkgIGxvZ19zdGRlcnIgPSAxOworCSAgZWNob19zdGRlcnIgPSAwOworCSAgbG9nX2ZkID0gZHVwKFNUREVSUl9GSUxFTk8pOworCX0KKyAgICB9CisgIAorICBtYXhfbG9ncyA9IGRhZW1vbi0+bWF4X2xvZ3M7CisKKyAgaWYgKCFsb2dfcmVvcGVuKGRhZW1vbi0+bG9nX2ZpbGUpKQorICAgIHsKKyAgICAgIHNlbmRfZXZlbnQoZXJyZmQsIEVWRU5UX0xPR19FUlIsIGVycm5vLCBkYWVtb24tPmxvZ19maWxlID8gZGFlbW9uLT5sb2dfZmlsZSA6ICIiKTsKKyAgICAgIF9leGl0KDApOworICAgIH0KKworICAvKiBpZiBxdWV1aW5nIGlzIGluaGliaXRlZCwgbWFrZSBzdXJlIHdlIGFsbG9jYXRlCisgICAgIHRoZSBvbmUgcmVxdWlyZWQgYnVmZmVyIG5vdy4gKi8KKyAgaWYgKG1heF9sb2dzID09IDApCisgICAgeyAgCisgICAgICBmcmVlX2VudHJpZXMgPSBzYWZlX21hbGxvYyhzaXplb2Yoc3RydWN0IGxvZ19lbnRyeSkpOworICAgICAgZnJlZV9lbnRyaWVzLT5uZXh0ID0gTlVMTDsKKyAgICAgIGVudHJpZXNfYWxsb2NlZCA9IDE7CisgICAgfQorCisgIC8qIElmIHdlJ3JlIHJ1bm5pbmcgYXMgcm9vdCBhbmQgZ29pbmcgdG8gY2hhbmdlIHVpZCBsYXRlciwKKyAgICAgY2hhbmdlIHRoZSBvd25lcnNoaXAgaGVyZSBzbyB0aGF0IHRoZSBmaWxlIGlzIGFsd2F5cyBvd25lZCBieQorICAgICB0aGUgZG5zbWFzcSB1c2VyLiBUaGVuIGxvZ3JvdGF0ZSBjYW4ganVzdCBjb3B5IHRoZSBvd25lci4KKyAgICAgRmFpbHVyZSBvZiB0aGUgY2hvd24gY2FsbCBpcyBPSywgKGZvciBpbnN0YW5jZSB3aGVuIHN0YXJ0ZWQgYXMgbm9uLXJvb3QpICovCisgIGlmIChsb2dfdG9fZmlsZSAmJiAhbG9nX3N0ZGVyciAmJiBlbnRfcHcgJiYgZW50X3B3LT5wd191aWQgIT0gMCAmJiAKKyAgICAgIGZjaG93bihsb2dfZmQsIGVudF9wdy0+cHdfdWlkLCAtMSkgIT0gMCkKKyAgICByZXQgPSBlcnJubzsKKworICByZXR1cm4gcmV0OworfQorCitpbnQgbG9nX3Jlb3BlbihjaGFyICpsb2dfZmlsZSkKK3sKKyAgaWYgKCFsb2dfc3RkZXJyKQorICAgIHsgICAgICAKKyAgICAgIGlmIChsb2dfZmQgIT0gLTEpCisJY2xvc2UobG9nX2ZkKTsKKyAgICAgIAorICAgICAgLyogTk9URTogdW1hc2sgaXMgc2V0IHRvIDAyMiBieSB0aGUgdGltZSB0aGlzIGdldHMgY2FsbGVkICovCisgICAgICAKKyAgICAgIGlmIChsb2dfZmlsZSkKKwlsb2dfZmQgPSBvcGVuKGxvZ19maWxlLCBPX1dST05MWXxPX0NSRUFUfE9fQVBQRU5ELCBTX0lSVVNSfFNfSVdVU1J8U19JUkdSUCk7ICAgICAgCisgICAgICBlbHNlCisJeworI2lmIGRlZmluZWQoSEFWRV9TT0xBUklTX05FVFdPUkspIHx8IGRlZmluZWQoX19BTkRST0lEX18pCisJICAvKiBTb2xhcmlzIGxvZ2dpbmcgaXMgImRpZmZlcmVudCIsIC9kZXYvbG9nIGlzIG5vdCB1bml4LWRvbWFpbiBzb2NrZXQuCisJICAgICBKdXN0IGxlYXZlIGxvZ19mZCA9PSAtMSBhbmQgdXNlIHRoZSB2c3lzbG9nIGNhbGwgZm9yIGV2ZXJ5dGhpbmcuLi4uICovCisjICAgZGVmaW5lIF9QQVRIX0xPRyAiIiAgLyogZHVtbXkgKi8KKwkgIHJldHVybiAxOworI2Vsc2UKKwkgIGludCBmbGFnczsKKwkgIGxvZ19mZCA9IHNvY2tldChBRl9VTklYLCBjb25uZWN0aW9uX3R5cGUsIDApOworCSAgCisJICAvKiBpZiBtYXhfbG9ncyBpcyB6ZXJvLCBsZWF2ZSB0aGUgc29ja2V0IGJsb2NraW5nICovCisJICBpZiAobG9nX2ZkICE9IC0xICYmIG1heF9sb2dzICE9IDAgJiYgKGZsYWdzID0gZmNudGwobG9nX2ZkLCBGX0dFVEZMKSkgIT0gLTEpCisJICAgIGZjbnRsKGxvZ19mZCwgRl9TRVRGTCwgZmxhZ3MgfCBPX05PTkJMT0NLKTsKKyNlbmRpZgorCX0KKyAgICB9CisgIAorICByZXR1cm4gbG9nX2ZkICE9IC0xOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2VudHJ5KHZvaWQpCit7CisgIHN0cnVjdCBsb2dfZW50cnkgKnRtcCA9IGVudHJpZXM7CisgIGVudHJpZXMgPSB0bXAtPm5leHQ7CisgIHRtcC0+bmV4dCA9IGZyZWVfZW50cmllczsKKyAgZnJlZV9lbnRyaWVzID0gdG1wOworfSAgICAgIAorCitzdGF0aWMgdm9pZCBsb2dfd3JpdGUodm9pZCkKK3sKKyAgc3NpemVfdCByYzsKKyAgIAorICB3aGlsZSAoZW50cmllcykKKyAgICB7CisgICAgICAvKiBUaGUgZGF0YSBpbiB0aGUgcGF5b2FkIGlzIHdyaXR0ZW4gd2l0aCBhIHRlcm1pbmF0aW5nIHplcm8gY2hhcmFjdGVyIAorCSBhbmQgdGhlIGxlbmd0aCByZWZsZWN0cyB0aGlzLiBGb3IgYSBzdHJlYW0gY29ubmVjdGlvbiB3ZSBuZWVkIHRvIAorCSBzZW5kIHRoZSB6ZXJvIGFzIGEgcmVjb3JkIHRlcm1pbmF0b3IsIGJ1dCB0aGlzIGlzbid0IGRvbmUgZm9yIGEgCisJIGRhdGFncmFtIGNvbm5lY3Rpb24sIHNvIHRyZWF0IHRoZSBsZW5ndGggYXMgb25lIGxlc3MgdGhhbiByZWFsaXR5IAorCSB0byBlbGlkZSB0aGUgemVyby4gSWYgd2UncmUgbG9nZ2luZyB0byBhIGZpbGUsIHR1cm4gdGhlIHplcm8gaW50byAKKwkgYSBuZXdsaW5lLCBhbmQgbGVhdmUgdGhlIGxlbmd0aCBhbG9uZS4gKi8KKyAgICAgIGludCBsZW5fYWRqdXN0ID0gMDsKKworICAgICAgaWYgKGxvZ190b19maWxlKQorCWVudHJpZXMtPnBheWxvYWRbZW50cmllcy0+b2Zmc2V0ICsgZW50cmllcy0+bGVuZ3RoIC0gMV0gPSAnXG4nOworICAgICAgZWxzZSBpZiAoY29ubmVjdGlvbl90eXBlID09IFNPQ0tfREdSQU0pCisJbGVuX2FkanVzdCA9IDE7CisKKyAgICAgIC8qIEF2b2lkIGR1cGxpY2F0ZXMgb3ZlciBhIGZvcmsoKSAqLworICAgICAgaWYgKGVudHJpZXMtPnBpZCAhPSBnZXRwaWQoKSkKKwl7CisJICBmcmVlX2VudHJ5KCk7CisJICBjb250aW51ZTsKKwl9CisKKyAgICAgIGNvbm5lY3Rpb25fZ29vZCA9IDE7CisKKyAgICAgIGlmICgocmMgPSB3cml0ZShsb2dfZmQsIGVudHJpZXMtPnBheWxvYWQgKyBlbnRyaWVzLT5vZmZzZXQsIGVudHJpZXMtPmxlbmd0aCAtIGxlbl9hZGp1c3QpKSAhPSAtMSkKKwl7CisJICBlbnRyaWVzLT5sZW5ndGggLT0gcmM7CisJICBlbnRyaWVzLT5vZmZzZXQgKz0gcmM7CisJICBpZiAoZW50cmllcy0+bGVuZ3RoID09IGxlbl9hZGp1c3QpCisJICAgIHsKKwkgICAgICBmcmVlX2VudHJ5KCk7CisJICAgICAgaWYgKGVudHJpZXNfbG9zdCAhPSAwKQorCQl7CisJCSAgaW50IGUgPSBlbnRyaWVzX2xvc3Q7CisJCSAgZW50cmllc19sb3N0ID0gMDsgLyogYXZvaWQgd2lsZCByZWN1cnNpb24gKi8KKwkJICBteV9zeXNsb2coTE9HX1dBUk5JTkcsIF8oIm92ZXJmbG93OiAlZCBsb2cgZW50cmllcyBsb3N0IiksIGUpOworCQl9CSAgCisJICAgIH0KKwkgIGNvbnRpbnVlOworCX0KKyAgICAgIAorICAgICAgaWYgKGVycm5vID09IEVJTlRSKQorCWNvbnRpbnVlOworCisgICAgICBpZiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVXT1VMREJMT0NLKQorCXJldHVybjsgLyogc3lzbG9nZCBidXN5LCBnbyBhZ2FpbiB3aGVuIHNlbGVjdCgpIG9yIHBvbGwoKSBzYXlzIHNvICovCisgICAgICAKKyAgICAgIGlmIChlcnJubyA9PSBFTk9CVUZTKQorCXsKKwkgIGNvbm5lY3Rpb25fZ29vZCA9IDA7CisJICByZXR1cm47CisJfQorCisgICAgICAvKiBlcnJvcnMgaGFuZGxpbmcgYWZ0ZXIgdGhpcyBhc3N1bWVzIHNvY2tldHMgKi8gCisgICAgICBpZiAoIWxvZ190b19maWxlKQorCXsKKwkgIC8qIE9uY2UgYSBzdHJlYW0gc29ja2V0IGhpdHMgRVBJUEUsIHdlIGhhdmUgdG8gY2xvc2UgYW5kIHJlLW9wZW4KKwkgICAgICh3ZSBpZ25vcmUgU0lHUElQRSkgKi8KKwkgIGlmIChlcnJubyA9PSBFUElQRSkKKwkgICAgeworCSAgICAgIGlmIChsb2dfcmVvcGVuKE5VTEwpKQorCQljb250aW51ZTsKKwkgICAgfQorCSAgZWxzZSBpZiAoZXJybm8gPT0gRUNPTk5SRUZVU0VEIHx8IAorCQkgICBlcnJubyA9PSBFTk9UQ09OTiB8fCAKKwkJICAgZXJybm8gPT0gRURFU1RBRERSUkVRIHx8IAorCQkgICBlcnJubyA9PSBFQ09OTlJFU0VUKQorCSAgICB7CisJICAgICAgLyogc29ja2V0IHdlbnQgKHN5c2xvZ2QgZG93bj8pLCB0cnkgYW5kIHJlY29ubmVjdC4gSWYgd2UgZmFpbCwKKwkJIHN0b3AgdHJ5aW5nIHVudGlsIHRoZSBuZXh0IGNhbGwgdG8gbXlfc3lzbG9nKCkgCisJCSBFQ09OTlJFRlVTRUQgLT4gY29ubmVjdGlvbiB3ZW50IGRvd24KKwkJIEVOT1RDT05OIC0+IG5vYm9keSBsaXN0ZW5pbmcKKwkJIChFQ09OTlJFU0VULCBFREVTVEFERFJSRVEgYXJlICpCU0QgZXF1aXZhbGVudHMpICovCisJICAgICAgCisJICAgICAgc3RydWN0IHNvY2thZGRyX3VuIGxvZ2FkZHI7CisJICAgICAgCisjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKwkgICAgICBsb2dhZGRyLnN1bl9sZW4gPSBzaXplb2YobG9nYWRkcikgLSBzaXplb2YobG9nYWRkci5zdW5fcGF0aCkgKyBzdHJsZW4oX1BBVEhfTE9HKSArIDE7IAorI2VuZGlmCisJICAgICAgbG9nYWRkci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKwkgICAgICBzdHJuY3B5KGxvZ2FkZHIuc3VuX3BhdGgsIF9QQVRIX0xPRywgc2l6ZW9mKGxvZ2FkZHIuc3VuX3BhdGgpKTsKKwkgICAgICAKKwkgICAgICAvKiBHb3QgY29ubmVjdGlvbiBiYWNrPyB0cnkgYWdhaW4uICovCisJICAgICAgaWYgKGNvbm5lY3QobG9nX2ZkLCAoc3RydWN0IHNvY2thZGRyICopJmxvZ2FkZHIsIHNpemVvZihsb2dhZGRyKSkgIT0gLTEpCisJCWNvbnRpbnVlOworCSAgICAgIAorCSAgICAgIC8qIGVycm9ycyBmcm9tIGNvbm5lY3Qgd2hpY2ggbWVhbiB3ZSBzaG91bGQga2VlcCB0cnlpbmcgKi8KKwkgICAgICBpZiAoZXJybm8gPT0gRU5PRU5UIHx8IAorCQkgIGVycm5vID09IEVBTFJFQURZIHx8IAorCQkgIGVycm5vID09IEVDT05OUkVGVVNFRCB8fAorCQkgIGVycm5vID09IEVJU0NPTk4gfHwgCisJCSAgZXJybm8gPT0gRUlOVFIgfHwKKwkJICBlcnJubyA9PSBFQUdBSU4gfHwgCisJCSAgZXJybm8gPT0gRVdPVUxEQkxPQ0spCisJCXsKKwkJICAvKiB0cnkgYWdhaW4gb24gbmV4dCBzeXNsb2coKSBjYWxsICovCisJCSAgY29ubmVjdGlvbl9nb29kID0gMDsKKwkJICByZXR1cm47CisJCX0KKwkgICAgICAKKwkgICAgICAvKiB0cnkgdGhlIG90aGVyIHNvcnQgb2Ygc29ja2V0Li4uICovCisJICAgICAgaWYgKGVycm5vID09IEVQUk9UT1RZUEUpCisJCXsKKwkJICBjb25uZWN0aW9uX3R5cGUgPSBjb25uZWN0aW9uX3R5cGUgPT0gU09DS19ER1JBTSA/IFNPQ0tfU1RSRUFNIDogU09DS19ER1JBTTsKKwkJICBpZiAobG9nX3Jlb3BlbihOVUxMKSkKKwkJICAgIGNvbnRpbnVlOworCQl9CisJICAgIH0KKwl9CisKKyAgICAgIC8qIGdpdmUgdXAgLSBmYWxsIGJhY2sgdG8gc3lzbG9nKCkgLSB0aGlzIGhhbmRsZXMgb3V0LW9mLXNwYWNlCisJIHdoZW4gbG9nZ2luZyB0byBhIGZpbGUsIGZvciBpbnN0YW5jZS4gKi8KKyAgICAgIGxvZ19mZCA9IC0xOworICAgICAgbXlfc3lzbG9nKExPR19DUklULCBfKCJsb2cgZmFpbGVkOiAlcyIpLCBzdHJlcnJvcihlcnJubykpOworICAgICAgcmV0dXJuOworICAgIH0KK30KKworLyogcHJpb3JpdHkgaXMgb25lIG9mIExPR19ERUJVRywgTE9HX0lORk8sIExPR19OT1RJQ0UsIGV0Yy4gU2VlIHN5cy9zeXNsb2cuaC4KKyAgIE9SJ2QgdG8gcHJpb3JpdHkgY2FuIGJlIE1TX1RGVFAsIE1TX0RIQ1AsIC4uLiB0byBiZSBhYmxlIHRvIGRvIGxvZyBzZXBhcmF0aW9uIGJldHdlZW4KKyAgIEROUywgREhDUCBhbmQgVEZUUCBzZXJ2aWNlcy4KKyovCit2b2lkIG15X3N5c2xvZyhpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFwOworICBzdHJ1Y3QgbG9nX2VudHJ5ICplbnRyeTsKKyAgdGltZV90IHRpbWVfbm93OworICBjaGFyICpwOworICBzaXplX3QgbGVuOworICBwaWRfdCBwaWQgPSBnZXRwaWQoKTsKKyAgY2hhciAqZnVuYyA9ICIiOworCisgIGlmICgoTE9HX0ZBQ01BU0sgJiBwcmlvcml0eSkgPT0gTVNfVEZUUCkKKyAgICBmdW5jID0gIi10ZnRwIjsKKyAgZWxzZSBpZiAoKExPR19GQUNNQVNLICYgcHJpb3JpdHkpID09IE1TX0RIQ1ApCisgICAgZnVuYyA9ICItZGhjcCI7CisgICAgICAKKyNpZmRlZiBMT0dfUFJJCisgIHByaW9yaXR5ID0gTE9HX1BSSShwcmlvcml0eSk7CisjZWxzZQorICAvKiBTb2xhcmlzIGRvZXNuJ3QgaGF2ZSBMT0dfUFJJICovCisgIHByaW9yaXR5ICY9IExPR19QUklNQVNLOworI2VuZGlmCisKKyAgaWYgKGVjaG9fc3RkZXJyKSAKKyAgICB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImRuc21hc3ElczogIiwgZnVuYyk7CisgICAgICB2YV9zdGFydChhcCwgZm9ybWF0KTsKKyAgICAgIHZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcCk7CisgICAgICB2YV9lbmQoYXApOworICAgICAgZnB1dGMoJ1xuJywgc3RkZXJyKTsKKyAgICB9CisKKyAgaWYgKGxvZ19mZCA9PSAtMSkKKyAgICB7CisjaWZkZWYgX19BTkRST0lEX18KKyAgICAgIC8qIGRvIGFuZHJvaWQtc3BlY2lmaWMgbG9nZ2luZy4gCisJIGxvZ19mZCBpcyBhbHdheXMgLTEgb24gQW5kcm9pZCBleGNlcHQgd2hlbiBsb2dnaW5nIHRvIGEgZmlsZS4gKi8KKyAgICAgIGludCBhbG9nX2x2bDsKKyAgICAgIAorICAgICAgaWYgKHByaW9yaXR5IDw9IExPR19FUlIpCisJYWxvZ19sdmwgPSBBTkRST0lEX0xPR19FUlJPUjsKKyAgICAgIGVsc2UgaWYgKHByaW9yaXR5ID09IExPR19XQVJOSU5HKQorCWFsb2dfbHZsID0gQU5EUk9JRF9MT0dfV0FSTjsKKyAgICAgIGVsc2UgaWYgKHByaW9yaXR5IDw9IExPR19JTkZPKQorCWFsb2dfbHZsID0gQU5EUk9JRF9MT0dfSU5GTzsKKyAgICAgIGVsc2UKKwlhbG9nX2x2bCA9IEFORFJPSURfTE9HX0RFQlVHOworCisgICAgICB2YV9zdGFydChhcCwgZm9ybWF0KTsKKyAgICAgIF9fYW5kcm9pZF9sb2dfdnByaW50KGFsb2dfbHZsLCAiZG5zbWFzcSIsIGZvcm1hdCwgYXApOworICAgICAgdmFfZW5kKGFwKTsKKyNlbHNlCisgICAgICAvKiBmYWxsLWJhY2sgdG8gc3lzbG9nIGlmIHdlIGRpZSBkdXJpbmcgc3RhcnR1cCBvciAKKwkgZmFpbCBkdXJpbmcgcnVubmluZyAoYWx3YXlzIG9uIFNvbGFyaXMpLiAqLworICAgICAgc3RhdGljIGludCBpc29wZW4gPSAwOworCisgICAgICBpZiAoIWlzb3BlbikKKwl7CisJICBvcGVubG9nKCJkbnNtYXNxIiwgTE9HX1BJRCwgbG9nX2ZhYyk7CisJICBpc29wZW4gPSAxOworCX0KKyAgICAgIHZhX3N0YXJ0KGFwLCBmb3JtYXQpOyAgCisgICAgICB2c3lzbG9nKHByaW9yaXR5LCBmb3JtYXQsIGFwKTsKKyAgICAgIHZhX2VuZChhcCk7CisjZW5kaWYKKworICAgICAgcmV0dXJuOworICAgIH0KKyAgCisgIGlmICgoZW50cnkgPSBmcmVlX2VudHJpZXMpKQorICAgIGZyZWVfZW50cmllcyA9IGVudHJ5LT5uZXh0OworICBlbHNlIGlmIChlbnRyaWVzX2FsbG9jZWQgPCBtYXhfbG9ncyAmJiAoZW50cnkgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBsb2dfZW50cnkpKSkpCisgICAgZW50cmllc19hbGxvY2VkKys7CisgIAorICBpZiAoIWVudHJ5KQorICAgIGVudHJpZXNfbG9zdCsrOworICBlbHNlCisgICAgeworICAgICAgLyogYWRkIHRvIGVuZCBvZiBsaXN0LCBjb25zdW1lZCBmcm9tIHRoZSBzdGFydCAqLworICAgICAgZW50cnktPm5leHQgPSBOVUxMOworICAgICAgaWYgKCFlbnRyaWVzKQorCWVudHJpZXMgPSBlbnRyeTsKKyAgICAgIGVsc2UKKwl7CisJICBzdHJ1Y3QgbG9nX2VudHJ5ICp0bXA7CisJICBmb3IgKHRtcCA9IGVudHJpZXM7IHRtcC0+bmV4dDsgdG1wID0gdG1wLT5uZXh0KTsKKwkgIHRtcC0+bmV4dCA9IGVudHJ5OworCX0KKyAgICAgIAorICAgICAgdGltZSgmdGltZV9ub3cpOworICAgICAgcCA9IGVudHJ5LT5wYXlsb2FkOworICAgICAgaWYgKCFsb2dfdG9fZmlsZSkKKwlwICs9IHNwcmludGYocCwgIjwlZD4iLCBwcmlvcml0eSB8IGxvZ19mYWMpOworCisgICAgICAvKiBPbWl0IHRpbWVzdGFtcCBmb3IgZGVmYXVsdCBkYWVtb250b29scyBzaXR1YXRpb24gKi8KKyAgICAgIGlmICghbG9nX3N0ZGVyciB8fCAhb3B0aW9uX2Jvb2woT1BUX05PX0ZPUkspKSAKKwlwICs9IHNwcmludGYocCwgIiUuMTVzICIsIGN0aW1lKCZ0aW1lX25vdykgKyA0KTsKKyAgICAgIAorICAgICAgcCArPSBzcHJpbnRmKHAsICJkbnNtYXNxJXNbJWRdOiAiLCBmdW5jLCAoaW50KXBpZCk7CisgICAgICAgIAorICAgICAgbGVuID0gcCAtIGVudHJ5LT5wYXlsb2FkOworICAgICAgdmFfc3RhcnQoYXAsIGZvcm1hdCk7ICAKKyAgICAgIGxlbiArPSB2c25wcmludGYocCwgTUFYX01FU1NBR0UgLSBsZW4sIGZvcm1hdCwgYXApICsgMTsgLyogaW5jbHVkZSB6ZXJvLXRlcm1pbmF0b3IgKi8KKyAgICAgIHZhX2VuZChhcCk7CisgICAgICBlbnRyeS0+bGVuZ3RoID0gbGVuID4gTUFYX01FU1NBR0UgPyBNQVhfTUVTU0FHRSA6IGxlbjsKKyAgICAgIGVudHJ5LT5vZmZzZXQgPSAwOworICAgICAgZW50cnktPnBpZCA9IHBpZDsKKyAgICB9CisgIAorICAvKiBhbG1vc3QgYWx3YXlzLCBsb2dnaW5nIHdvbid0IGJsb2NrLCBzbyB0cnkgYW5kIHdyaXRlIHRoaXMgbm93LAorICAgICB0byBzYXZlIGNvbGxlY3RpbmcgdG9vIG1hbnkgbG9nIG1lc3NhZ2VzIGR1cmluZyBhIHNlbGVjdCBsb29wLiAqLworICBsb2dfd3JpdGUoKTsKKyAgCisgIC8qIFNpbmNlIHdlJ3JlIGRvaW5nIHRoaW5ncyBhc3luY2hyb25vdXNseSwgYSBjYWNoZS1kdW1wLCBmb3IgaW5zdGFuY2UsCisgICAgIGNhbiBub3cgZ2VuZXJhdGUgbG9nIGxpbmVzIHZlcnkgZmFzdC4gV2l0aCBhIHNtYWxsIGJ1ZmZlciAoZGVzaXJhYmxlKSwKKyAgICAgdGhhdCBtZWFucyBpdCBjYW4gb3ZlcmZsb3cgdGhlIGxvZy1idWZmZXIgdmVyeSBxdWlja2x5LAorICAgICBzbyB0aGF0IHRoZSBjYWNoZSBkdW1wIGJlY29tZXMgbWFpbmx5IGEgY291bnQgb2YgaG93IG1hbnkgbGluZXMgCisgICAgIG92ZXJmbG93ZWQuIFRvIGF2b2lkIHRoaXMsIHdlIGRlbGF5IGhlcmUsIHRoZSBkZWxheSBpcyBjb250cm9sbGVkIAorICAgICBieSBxdWV1ZS1vY2N1cGFuY3ksIGFuZCBncm93cyBleHBvbmVudGlhbGx5LiBUaGUgZGVsYXkgaXMgbGltaXRlZCB0byAoMl44KW1zLgorICAgICBUaGUgc2NhbGluZyBzdHVmZiBlbnN1cmVzIHRoYXQgd2hlbiB0aGUgcXVldWUgaXMgYmlnZ2VyIHRoYW4gOCwgdGhlIGRlbGF5CisgICAgIG9ubHkgb2NjdXJzIGZvciB0aGUgbGFzdCA4IGVudHJpZXMuIE9uY2UgdGhlIHF1ZXVlIGlzIGZ1bGwsIHdlIHN0b3AgZGVsYXlpbmcKKyAgICAgdG8gcHJlc2VydmUgcGVyZm9ybWFuY2UuCisgICovCisKKyAgaWYgKGVudHJpZXMgJiYgbWF4X2xvZ3MgIT0gMCkKKyAgICB7CisgICAgICBpbnQgZDsKKyAgICAgIAorICAgICAgZm9yIChkID0gMCxlbnRyeSA9IGVudHJpZXM7IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5uZXh0LCBkKyspOworICAgICAgCisgICAgICBpZiAoZCA9PSBtYXhfbG9ncykKKwlkID0gMDsKKyAgICAgIGVsc2UgaWYgKG1heF9sb2dzID4gOCkKKwlkIC09IG1heF9sb2dzIC0gODsKKworICAgICAgaWYgKGQgPiAwKQorCXsKKwkgIHN0cnVjdCB0aW1lc3BlYyB3YWl0ZXI7CisJICB3YWl0ZXIudHZfc2VjID0gMDsKKwkgIHdhaXRlci50dl9uc2VjID0gMTAwMDAwMCA8PCAoZCAtIDEpOyAvKiAxIG1zICovCisJICBuYW5vc2xlZXAoJndhaXRlciwgTlVMTCk7CisgICAgICAKKwkgIC8qIEhhdmUgYW5vdGhlciBnbyBub3cgKi8KKwkgIGxvZ193cml0ZSgpOworCX0KKyAgICB9IAorfQorCit2b2lkIHNldF9sb2dfd3JpdGVyKGZkX3NldCAqc2V0LCBpbnQgKm1heGZkcCkKK3sKKyAgaWYgKGVudHJpZXMgJiYgbG9nX2ZkICE9IC0xICYmIGNvbm5lY3Rpb25fZ29vZCkKKyAgICB7CisgICAgICBGRF9TRVQobG9nX2ZkLCBzZXQpOworICAgICAgYnVtcF9tYXhmZChsb2dfZmQsIG1heGZkcCk7CisgICAgfQorfQorCit2b2lkIGNoZWNrX2xvZ193cml0ZXIoZmRfc2V0ICpzZXQpCit7CisgIGlmIChsb2dfZmQgIT0gLTEgJiYgKCFzZXQgfHwgRkRfSVNTRVQobG9nX2ZkLCBzZXQpKSkKKyAgICBsb2dfd3JpdGUoKTsKK30KKwordm9pZCBmbHVzaF9sb2codm9pZCkKK3sKKyAgLyogd3JpdGUgdW50aWwgcXVldWUgZW1wdHksIGJ1dCBkb24ndCBsb29wIGZvcmV2ZXIgaWYgdGhlcmUncworICAgbm8gY29ubmVjdGlvbiB0byB0aGUgc3lzbG9nIGluIGV4aXN0YW5jZSAqLworICB3aGlsZSAobG9nX2ZkICE9IC0xKQorICAgIHsKKyAgICAgIHN0cnVjdCB0aW1lc3BlYyB3YWl0ZXI7CisgICAgICBsb2dfd3JpdGUoKTsKKyAgICAgIGlmICghZW50cmllcyB8fCAhY29ubmVjdGlvbl9nb29kKQorCXsKKwkgIGNsb3NlKGxvZ19mZCk7CQorCSAgYnJlYWs7CisJfQorICAgICAgd2FpdGVyLnR2X3NlYyA9IDA7CisgICAgICB3YWl0ZXIudHZfbnNlYyA9IDEwMDAwMDA7IC8qIDEgbXMgKi8KKyAgICAgIG5hbm9zbGVlcCgmd2FpdGVyLCBOVUxMKTsKKyAgICB9Cit9CisKK3ZvaWQgZGllKGNoYXIgKm1lc3NhZ2UsIGNoYXIgKmFyZzEsIGludCBleGl0X2NvZGUpCit7CisgIGNoYXIgKmVycm1lc3MgPSBzdHJlcnJvcihlcnJubyk7CisgIAorICBpZiAoIWFyZzEpCisgICAgYXJnMSA9IGVycm1lc3M7CisKKyAgaWYgKCFsb2dfc3RkZXJyKQorICAgIHsKKyAgICAgIGVjaG9fc3RkZXJyID0gMTsgLyogcHJpbnQgYXMgd2VsbCBhcyBsb2cgd2hlbiB3ZSBkaWUuLi4uICovCisgICAgICBmcHV0YygnXG4nLCBzdGRlcnIpOyAvKiBwcmV0dHlmeSAgc3RhcnR1cC1zY3JpcHQgbWVzc2FnZSAqLworICAgIH0KKyAgbXlfc3lzbG9nKExPR19DUklULCBtZXNzYWdlLCBhcmcxLCBlcnJtZXNzKTsKKyAgZWNob19zdGRlcnIgPSAwOworICBteV9zeXNsb2coTE9HX0NSSVQsIF8oIkZBSUxFRCB0byBzdGFydCB1cCIpKTsKKyAgZmx1c2hfbG9nKCk7CisgIAorICBleGl0KGV4aXRfY29kZSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvbG9vcC5jIGIvc3JjL2xvb3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjM3N2FkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2xvb3AuYwpAQCAtMCwwICsxLDExNiBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxNCBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisKKyNpZmRlZiBIQVZFX0xPT1AKK3N0YXRpYyBzc2l6ZV90IGxvb3BfbWFrZV9wcm9iZSh1MzIgdWlkKTsKKwordm9pZCBsb29wX3NlbmRfcHJvYmVzKCkKK3sKKyAgIHN0cnVjdCBzZXJ2ZXIgKnNlcnY7CisgICAKKyAgIGlmICghb3B0aW9uX2Jvb2woT1BUX0xPT1BfREVURUNUKSkKKyAgICAgcmV0dXJuOworCisgICAvKiBMb29wIHRocm91Z2ggYWxsIHVwc3RyZWFtIHNlcnZlcnMgbm90IGZvciBwYXJ0aWN1bGFyIGRvbWFpbnMsIGFuZCBzZW5kIGEgcXVlcnkgdG8gdGhhdCBzZXJ2ZXIgd2hpY2ggaXMKKyAgICAgIGlkZW50aWZpYWJsZSwgdmlhIHRoZSB1aWQuIElmIHdlIHNlZSB0aGF0IHF1ZXJ5IGJhY2sgYWdhaW4sIHRoZW4gdGhlIHNlcnZlciBpcyBsb29waW5nLCBhbmQgd2Ugc2hvdWxkIG5vdCB1c2UgaXQuICovCisgICBmb3IgKHNlcnYgPSBkYWVtb24tPnNlcnZlcnM7IHNlcnY7IHNlcnYgPSBzZXJ2LT5uZXh0KQorICAgICBpZiAoIShzZXJ2LT5mbGFncyAmIAorCSAgIChTRVJWX0xJVEVSQUxfQUREUkVTUyB8IFNFUlZfTk9fQUREUiB8IFNFUlZfVVNFX1JFU09MViB8IFNFUlZfTk9fUkVCSU5EIHwgU0VSVl9IQVNfRE9NQUlOIHwgU0VSVl9GT1JfTk9ET1RTIHwgU0VSVl9MT09QKSkpCisgICAgICAgeworCSBzc2l6ZV90IGxlbiA9IGxvb3BfbWFrZV9wcm9iZShzZXJ2LT51aWQpOworCSBpbnQgZmQ7CisJIHN0cnVjdCByYW5kZmQgKnJmZCA9IE5VTEw7CisJIAorCSBpZiAoc2Vydi0+c2ZkKQorCSAgIGZkID0gc2Vydi0+c2ZkLT5mZDsKKwkgZWxzZSAKKwkgICB7CisJICAgICBpZiAoIShyZmQgPSBhbGxvY2F0ZV9yZmQoc2Vydi0+YWRkci5zYS5zYV9mYW1pbHkpKSkKKwkgICAgICAgY29udGludWU7CisJICAgICBmZCA9IHJmZC0+ZmQ7CisJICAgfQorCisJIHdoaWxlIChzZW5kdG8oZmQsIGRhZW1vbi0+cGFja2V0LCBsZW4sIDAsICZzZXJ2LT5hZGRyLnNhLCBzYV9sZW4oJnNlcnYtPmFkZHIpKSA9PSAtMSAmJiByZXRyeV9zZW5kKCkpOworCisJIGZyZWVfcmZkKHJmZCk7CisgICAgICAgfQorfQorICAKK3N0YXRpYyBzc2l6ZV90IGxvb3BfbWFrZV9wcm9iZSh1MzIgdWlkKQoreworICBzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyID0gKHN0cnVjdCBkbnNfaGVhZGVyICopZGFlbW9uLT5wYWNrZXQ7CisgIHVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKShoZWFkZXIrMSk7CisKKyAgLyogcGFja2V0IGJ1ZmZlciBvdmVyd3JpdHRlbiAqLworICBkYWVtb24tPnNydl9zYXZlID0gTlVMTDsKKyAgCisgIGhlYWRlci0+aWQgPSByYW5kMTYoKTsKKyAgaGVhZGVyLT5hbmNvdW50ID0gaGVhZGVyLT5uc2NvdW50ID0gaGVhZGVyLT5hcmNvdW50ID0gaHRvbnMoMCk7CisgIGhlYWRlci0+cWRjb3VudCA9IGh0b25zKDEpOworICBoZWFkZXItPmhiMyA9IEhCM19SRDsKKyAgaGVhZGVyLT5oYjQgPSAwOworICBTRVRfT1BDT0RFKGhlYWRlciwgUVVFUlkpOworCisgICpwKysgPSA4OworICBzcHJpbnRmKChjaGFyICopcCwgIiUuOHgiLCB1aWQpOworICBwICs9IDg7CisgICpwKysgPSBzdHJsZW4oTE9PUF9URVNUX0RPTUFJTik7CisgIHN0cmNweSgoY2hhciAqKXAsIExPT1BfVEVTVF9ET01BSU4pOyAvKiBBZGQgdGVybWluYXRpbmcgemVybyAqLworICBwICs9IHN0cmxlbihMT09QX1RFU1RfRE9NQUlOKSArIDE7CisKKyAgUFVUU0hPUlQoTE9PUF9URVNUX1RZUEUsIHApOworICBQVVRTSE9SVChDX0lOLCBwKTsKKworICByZXR1cm4gcCAtICh1bnNpZ25lZCBjaGFyICopaGVhZGVyOworfQorICAKKworaW50IGRldGVjdF9sb29wKGNoYXIgKnF1ZXJ5LCBpbnQgdHlwZSkKK3sKKyAgaW50IGk7CisgIHUzMiB1aWQ7CisgIHN0cnVjdCBzZXJ2ZXIgKnNlcnY7CisgIAorICBpZiAoIW9wdGlvbl9ib29sKE9QVF9MT09QX0RFVEVDVCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHR5cGUgIT0gTE9PUF9URVNUX1RZUEUgfHwKKyAgICAgIHN0cmxlbihMT09QX1RFU1RfRE9NQUlOKSArIDkgIT0gc3RybGVuKHF1ZXJ5KSB8fAorICAgICAgc3Ryc3RyKHF1ZXJ5LCBMT09QX1RFU1RfRE9NQUlOKSAhPSBxdWVyeSArIDkpCisgICAgcmV0dXJuIDA7CisKKyAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKyAgICBpZiAoIWlzeGRpZ2l0KHF1ZXJ5W2ldKSkKKyAgICAgIHJldHVybiAwOworCisgIHVpZCA9IHN0cnRvbChxdWVyeSwgTlVMTCwgMTYpOworCisgIGZvciAoc2VydiA9IGRhZW1vbi0+c2VydmVyczsgc2Vydjsgc2VydiA9IHNlcnYtPm5leHQpCisgICAgIGlmICghKHNlcnYtPmZsYWdzICYgCisJICAgKFNFUlZfTElURVJBTF9BRERSRVNTIHwgU0VSVl9OT19BRERSIHwgU0VSVl9VU0VfUkVTT0xWIHwgU0VSVl9OT19SRUJJTkQgfCBTRVJWX0hBU19ET01BSU4gfCBTRVJWX0ZPUl9OT0RPVFMgfCBTRVJWX0xPT1ApKSAmJgorCSB1aWQgPT0gc2Vydi0+dWlkKQorICAgICAgIHsKKwkgc2Vydi0+ZmxhZ3MgfD0gU0VSVl9MT09QOworCSBjaGVja19zZXJ2ZXJzKCk7IC8qIGxvZyBuZXcgc3RhdGUgKi8KKwkgcmV0dXJuIDE7CisgICAgICAgfQorCisgIHJldHVybiAwOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9uZXRsaW5rLmMgYi9zcmMvbmV0bGluay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzOTMyODMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbmV0bGluay5jCkBAIC0wLDAgKzEsMzY3IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE0IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworI2lmZGVmIEhBVkVfTElOVVhfTkVUV09SSworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisKKy8qIGxpbnV4IDIuNi4xOSBidWdnZXJzIHVwIHRoZSBoZWFkZXJzLCBwYXRjaCBpdCB1cCBoZXJlLiAqLyAKKyNpZm5kZWYgSUZBX1JUQQorIyAgZGVmaW5lIElGQV9SVEEocikgIFwKKyAgICAgICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IGlmYWRkcm1zZykpKSkKKworIyAgaW5jbHVkZSA8bGludXgvaWZfYWRkci5oPgorI2VuZGlmCisKKyNpZm5kZWYgTkRBX1JUQQorIyAgZGVmaW5lIE5EQV9SVEEocikgKChzdHJ1Y3QgcnRhdHRyKikoKChjaGFyKikocikpICsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBuZG1zZykpKSkgCisjZW5kaWYgCisKKworc3RhdGljIHN0cnVjdCBpb3ZlYyBpb3Y7CitzdGF0aWMgdTMyIG5ldGxpbmtfcGlkOworCitzdGF0aWMgdm9pZCBubF9hc3luYyhzdHJ1Y3Qgbmxtc2doZHIgKmgpOworCit2b2lkIG5ldGxpbmtfaW5pdCh2b2lkKQoreworICBzdHJ1Y3Qgc29ja2FkZHJfbmwgYWRkcjsKKyAgc29ja2xlbl90IHNsZW4gPSBzaXplb2YoYWRkcik7CisKKyAgYWRkci5ubF9mYW1pbHkgPSBBRl9ORVRMSU5LOworICBhZGRyLm5sX3BhZCA9IDA7CisgIGFkZHIubmxfcGlkID0gMDsgLyogYXV0b2JpbmQgKi8KKyAgYWRkci5ubF9ncm91cHMgPSBSVE1HUlBfSVBWNF9ST1VURTsKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9DTEVWRVJCSU5EKSkKKyAgICBhZGRyLm5sX2dyb3VwcyB8PSBSVE1HUlBfSVBWNF9JRkFERFI7ICAKKyNpZmRlZiBIQVZFX0lQVjYKKyAgYWRkci5ubF9ncm91cHMgfD0gUlRNR1JQX0lQVjZfUk9VVEU7CisgIGlmIChvcHRpb25fYm9vbChPUFRfQ0xFVkVSQklORCkpCisgICAgYWRkci5ubF9ncm91cHMgfD0gUlRNR1JQX0lQVjZfSUZBRERSOworI2VuZGlmCisjaWZkZWYgSEFWRV9ESENQNgorICBpZiAoZGFlbW9uLT5kb2luZ19yYSB8fCBkYWVtb24tPmRvaW5nX2RoY3A2KQorICAgIGFkZHIubmxfZ3JvdXBzIHw9IFJUTUdSUF9JUFY2X0lGQUREUjsKKyNlbmRpZgorICAKKyAgLyogTWF5IG5vdCBiZSBhYmxlIHRvIGhhdmUgcGVybWlzc2lvbiB0byBzZXQgbXVsdGljYXN0IGdyb3VwcyBkb24ndCBkaWUgaW4gdGhhdCBjYXNlICovCisgIGlmICgoZGFlbW9uLT5uZXRsaW5rZmQgPSBzb2NrZXQoQUZfTkVUTElOSywgU09DS19SQVcsIE5FVExJTktfUk9VVEUpKSAhPSAtMSkKKyAgICB7CisgICAgICBpZiAoYmluZChkYWVtb24tPm5ldGxpbmtmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzaXplb2YoYWRkcikpID09IC0xKQorCXsKKwkgIGFkZHIubmxfZ3JvdXBzID0gMDsKKwkgIGlmIChlcnJubyAhPSBFUEVSTSB8fCBiaW5kKGRhZW1vbi0+bmV0bGlua2ZkLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsIHNpemVvZihhZGRyKSkgPT0gLTEpCisJICAgIGRhZW1vbi0+bmV0bGlua2ZkID0gLTE7CisJfQorICAgIH0KKyAgCisgIGlmIChkYWVtb24tPm5ldGxpbmtmZCA9PSAtMSB8fCAKKyAgICAgIGdldHNvY2tuYW1lKGRhZW1vbi0+bmV0bGlua2ZkLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsICZzbGVuKSA9PSAxKQorICAgIGRpZShfKCJjYW5ub3QgY3JlYXRlIG5ldGxpbmsgc29ja2V0OiAlcyIpLCBOVUxMLCBFQ19NSVNDKTsKKyAgIAorICAvKiBzYXZlIHBpZCBhc3NpZ25lZCBieSBiaW5kKCkgYW5kIHJldHJpZXZlZCBieSBnZXRzb2NrbmFtZSgpICovIAorICBuZXRsaW5rX3BpZCA9IGFkZHIubmxfcGlkOworICAKKyAgaW92Lmlvdl9sZW4gPSAxMDA7CisgIGlvdi5pb3ZfYmFzZSA9IHNhZmVfbWFsbG9jKGlvdi5pb3ZfbGVuKTsKK30KKworc3RhdGljIHNzaXplX3QgbmV0bGlua19yZWN2KHZvaWQpCit7CisgIHN0cnVjdCBtc2doZHIgbXNnOworICBzdHJ1Y3Qgc29ja2FkZHJfbmwgbmxhZGRyOworICBzc2l6ZV90IHJjOworCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIG1zZy5tc2dfY29udHJvbCA9IE5VTEw7CisgICAgICBtc2cubXNnX2NvbnRyb2xsZW4gPSAwOworICAgICAgbXNnLm1zZ19uYW1lID0gJm5sYWRkcjsKKyAgICAgIG1zZy5tc2dfbmFtZWxlbiA9IHNpemVvZihubGFkZHIpOworICAgICAgbXNnLm1zZ19pb3YgPSAmaW92OworICAgICAgbXNnLm1zZ19pb3ZsZW4gPSAxOworICAgICAgbXNnLm1zZ19mbGFncyA9IDA7CisgICAgICAKKyAgICAgIHdoaWxlICgocmMgPSByZWN2bXNnKGRhZW1vbi0+bmV0bGlua2ZkLCAmbXNnLCBNU0dfUEVFSyB8IE1TR19UUlVOQykpID09IC0xICYmIGVycm5vID09IEVJTlRSKTsKKyAgICAgIAorICAgICAgLyogbWFrZSBidWZmZXIgYmlnIGVub3VnaCAqLworICAgICAgaWYgKHJjICE9IC0xICYmIChtc2cubXNnX2ZsYWdzICYgTVNHX1RSVU5DKSkKKwl7CisJICAvKiBWZXJ5IG5ldyBMaW51eCBrZXJuZWxzIHJldHVybiB0aGUgYWN0dWFsIHNpemUgbmVlZGVkLCBvbGRlciBvbmVzIGFsd2F5cyByZXR1cm4gdHJ1bmNhdGVkIHNpemUgKi8KKwkgIGlmICgoc2l6ZV90KXJjID09IGlvdi5pb3ZfbGVuKQorCSAgICB7CisJICAgICAgaWYgKGV4cGFuZF9idWYoJmlvdiwgcmMgKyAxMDApKQorCQljb250aW51ZTsKKwkgICAgfQorCSAgZWxzZQorCSAgICBleHBhbmRfYnVmKCZpb3YsIHJjKTsKKwl9CisKKyAgICAgIC8qIHJlYWQgaXQgZm9yIHJlYWwgKi8KKyAgICAgIG1zZy5tc2dfZmxhZ3MgPSAwOworICAgICAgd2hpbGUgKChyYyA9IHJlY3Ztc2coZGFlbW9uLT5uZXRsaW5rZmQsICZtc2csIDApKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisgICAgICAKKyAgICAgIC8qIE1ha2Ugc3VyZSB0aGlzIGlzIGZyb20gdGhlIGtlcm5lbCAqLworICAgICAgaWYgKHJjID09IC0xIHx8IG5sYWRkci5ubF9waWQgPT0gMCkKKwlicmVhazsKKyAgICB9CisgICAgICAKKyAgLyogZGlzY2FyZCBzdHVmZiB3aGljaCBpcyB0cnVuY2F0ZWQgYXQgdGhpcyBwb2ludCAoZXhwYW5kX2J1ZigpIG1heSBmYWlsKSAqLworICBpZiAobXNnLm1zZ19mbGFncyAmIE1TR19UUlVOQykKKyAgICB7CisgICAgICByYyA9IC0xOworICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgfQorICAKKyAgcmV0dXJuIHJjOworfQorICAKKworLyogZmFtaWx5ID0gQUZfVU5TUEVDIGZpbmRzIEFSUCB0YWJsZSBlbnRyaWVzLgorICAgZmFtaWx5ID0gQUZfTE9DQUwgZmluZHMgTUFDIGFkZHJlc3Nlcy4gKi8KK2ludCBpZmFjZV9lbnVtZXJhdGUoaW50IGZhbWlseSwgdm9pZCAqcGFybSwgaW50ICgqY2FsbGJhY2spKCkpCit7CisgIHN0cnVjdCBzb2NrYWRkcl9ubCBhZGRyOworICBzdHJ1Y3Qgbmxtc2doZHIgKmg7CisgIHNzaXplX3QgbGVuOworICBzdGF0aWMgdW5zaWduZWQgaW50IHNlcSA9IDA7CisgIGludCBjYWxsYmFja19vayA9IDE7CisKKyAgc3RydWN0IHsKKyAgICBzdHJ1Y3Qgbmxtc2doZHIgbmxoOworICAgIHN0cnVjdCBydGdlbm1zZyBnOyAKKyAgfSByZXE7CisKKyAgYWRkci5ubF9mYW1pbHkgPSBBRl9ORVRMSU5LOworICBhZGRyLm5sX3BhZCA9IDA7CisgIGFkZHIubmxfZ3JvdXBzID0gMDsKKyAgYWRkci5ubF9waWQgPSAwOyAvKiBhZGRyZXNzIHRvIGtlcm5lbCAqLworIAorIGFnYWluOiAKKyAgaWYgKGZhbWlseSA9PSBBRl9VTlNQRUMpCisgICAgcmVxLm5saC5ubG1zZ190eXBlID0gUlRNX0dFVE5FSUdIOworICBlbHNlIGlmIChmYW1pbHkgPT0gQUZfTE9DQUwpCisgICAgcmVxLm5saC5ubG1zZ190eXBlID0gUlRNX0dFVExJTks7CisgIGVsc2UKKyAgICByZXEubmxoLm5sbXNnX3R5cGUgPSBSVE1fR0VUQUREUjsKKworICByZXEubmxoLm5sbXNnX2xlbiA9IHNpemVvZihyZXEpOworICByZXEubmxoLm5sbXNnX2ZsYWdzID0gTkxNX0ZfUk9PVCB8IE5MTV9GX01BVENIIHwgTkxNX0ZfUkVRVUVTVCB8IE5MTV9GX0FDSzsgCisgIHJlcS5ubGgubmxtc2dfcGlkID0gMDsKKyAgcmVxLm5saC5ubG1zZ19zZXEgPSArK3NlcTsKKyAgcmVxLmcucnRnZW5fZmFtaWx5ID0gZmFtaWx5OyAKKworICAvKiBEb24ndCBibG9jayBpbiByZWN2ZnJvbSBpZiBzZW5kIGZhaWxzICovCisgIHdoaWxlKChsZW4gPSBzZW5kdG8oZGFlbW9uLT5uZXRsaW5rZmQsICh2b2lkICopJnJlcSwgc2l6ZW9mKHJlcSksIDAsIAorCQkgICAgICAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsIHNpemVvZihhZGRyKSkpID09IC0xICYmIHJldHJ5X3NlbmQoKSk7CisgIAorICBpZiAobGVuID09IC0xKQorICAgIHJldHVybiAwOworICAgIAorICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBpZiAoKGxlbiA9IG5ldGxpbmtfcmVjdigpKSA9PSAtMSkKKwl7CisJICBpZiAoZXJybm8gPT0gRU5PQlVGUykKKwkgICAgeworCSAgICAgIHNsZWVwKDEpOworCSAgICAgIGdvdG8gYWdhaW47CisJICAgIH0KKwkgIHJldHVybiAwOworCX0KKworICAgICAgZm9yIChoID0gKHN0cnVjdCBubG1zZ2hkciAqKWlvdi5pb3ZfYmFzZTsgTkxNU0dfT0soaCwgKHNpemVfdClsZW4pOyBoID0gTkxNU0dfTkVYVChoLCBsZW4pKQorCWlmIChoLT5ubG1zZ19zZXEgIT0gc2VxIHx8IGgtPm5sbXNnX3BpZCAhPSBuZXRsaW5rX3BpZCB8fCBoLT5ubG1zZ190eXBlID09IE5MTVNHX0VSUk9SKQorCSAgeworCSAgICAvKiBNYXkgYmUgbXVsdGljYXN0IGFycml2aW5nIGFzeW5jICovCisJICAgIG5sX2FzeW5jKGgpOworCSAgfQorCWVsc2UgaWYgKGgtPm5sbXNnX3R5cGUgPT0gTkxNU0dfRE9ORSkKKwkgIHJldHVybiBjYWxsYmFja19vazsKKwllbHNlIGlmIChoLT5ubG1zZ190eXBlID09IFJUTV9ORVdBRERSICYmIGZhbWlseSAhPSBBRl9VTlNQRUMgJiYgZmFtaWx5ICE9IEFGX0xPQ0FMKQorCSAgeworCSAgICBzdHJ1Y3QgaWZhZGRybXNnICppZmEgPSBOTE1TR19EQVRBKGgpOyAgCisJICAgIHN0cnVjdCBydGF0dHIgKnJ0YSA9IElGQV9SVEEoaWZhKTsKKwkgICAgdW5zaWduZWQgaW50IGxlbjEgPSBoLT5ubG1zZ19sZW4gLSBOTE1TR19MRU5HVEgoc2l6ZW9mKCppZmEpKTsKKwkgICAgCisJICAgIGlmIChpZmEtPmlmYV9mYW1pbHkgPT0gZmFtaWx5KQorCSAgICAgIHsKKwkJaWYgKGlmYS0+aWZhX2ZhbWlseSA9PSBBRl9JTkVUKQorCQkgIHsKKwkJICAgIHN0cnVjdCBpbl9hZGRyIG5ldG1hc2ssIGFkZHIsIGJyb2FkY2FzdDsKKwkJICAgIGNoYXIgKmxhYmVsID0gTlVMTDsKKworCQkgICAgbmV0bWFzay5zX2FkZHIgPSBodG9ubCh+KGluX2FkZHJfdCkwIDw8ICgzMiAtIGlmYS0+aWZhX3ByZWZpeGxlbikpOworCisJCSAgICBhZGRyLnNfYWRkciA9IDA7CisJCSAgICBicm9hZGNhc3Quc19hZGRyID0gMDsKKwkJICAgIAorCQkgICAgd2hpbGUgKFJUQV9PSyhydGEsIGxlbjEpKQorCQkgICAgICB7CisJCQlpZiAocnRhLT5ydGFfdHlwZSA9PSBJRkFfTE9DQUwpCisJCQkgIGFkZHIgPSAqKChzdHJ1Y3QgaW5fYWRkciAqKShydGErMSkpOworCQkJZWxzZSBpZiAocnRhLT5ydGFfdHlwZSA9PSBJRkFfQlJPQURDQVNUKQorCQkJICBicm9hZGNhc3QgPSAqKChzdHJ1Y3QgaW5fYWRkciAqKShydGErMSkpOworCQkJZWxzZSBpZiAocnRhLT5ydGFfdHlwZSA9PSBJRkFfTEFCRUwpCisJCQkgIGxhYmVsID0gUlRBX0RBVEEocnRhKTsKKwkJCQorCQkJcnRhID0gUlRBX05FWFQocnRhLCBsZW4xKTsKKwkJICAgICAgfQorCQkgICAgCisJCSAgICBpZiAoYWRkci5zX2FkZHIgJiYgY2FsbGJhY2tfb2spCisJCSAgICAgIGlmICghKCgqY2FsbGJhY2spKGFkZHIsIGlmYS0+aWZhX2luZGV4LCBsYWJlbCwgIG5ldG1hc2ssIGJyb2FkY2FzdCwgcGFybSkpKQorCQkJY2FsbGJhY2tfb2sgPSAwOworCQkgIH0KKyNpZmRlZiBIQVZFX0lQVjYKKwkJZWxzZSBpZiAoaWZhLT5pZmFfZmFtaWx5ID09IEFGX0lORVQ2KQorCQkgIHsKKwkJICAgIHN0cnVjdCBpbjZfYWRkciAqYWRkcnAgPSBOVUxMOworCQkgICAgdTMyIHZhbGlkID0gMCwgcHJlZmVycmVkID0gMDsKKwkJICAgIGludCBmbGFncyA9IDA7CisJCSAgICAKKwkJICAgIHdoaWxlIChSVEFfT0socnRhLCBsZW4xKSkKKwkJICAgICAgeworCQkJaWYgKHJ0YS0+cnRhX3R5cGUgPT0gSUZBX0FERFJFU1MpCisJCQkgIGFkZHJwID0gKChzdHJ1Y3QgaW42X2FkZHIgKikocnRhKzEpKTsgCisJCQllbHNlIGlmIChydGEtPnJ0YV90eXBlID09IElGQV9DQUNIRUlORk8pCisJCQkgIHsKKwkJCSAgICBzdHJ1Y3QgaWZhX2NhY2hlaW5mbyAqaWZjID0gKHN0cnVjdCBpZmFfY2FjaGVpbmZvICopKHJ0YSsxKTsKKwkJCSAgICBwcmVmZXJyZWQgPSBpZmMtPmlmYV9wcmVmZXJlZDsKKwkJCSAgICB2YWxpZCA9IGlmYy0+aWZhX3ZhbGlkOworCQkJICB9CisJCQlydGEgPSBSVEFfTkVYVChydGEsIGxlbjEpOworCQkgICAgICB9CisJCSAgICAKKwkJICAgIGlmIChpZmEtPmlmYV9mbGFncyAmIElGQV9GX1RFTlRBVElWRSkKKwkJICAgICAgZmxhZ3MgfD0gSUZBQ0VfVEVOVEFUSVZFOworCQkgICAgCisJCSAgICBpZiAoaWZhLT5pZmFfZmxhZ3MgJiBJRkFfRl9ERVBSRUNBVEVEKQorCQkgICAgICBmbGFncyB8PSBJRkFDRV9ERVBSRUNBVEVEOworCQkgICAgCisJCSAgICBpZiAoIShpZmEtPmlmYV9mbGFncyAmIElGQV9GX1RFTVBPUkFSWSkpCisJCSAgICAgIGZsYWdzIHw9IElGQUNFX1BFUk1BTkVOVDsKKyAgICAJCSAgICAKKwkJICAgIGlmIChhZGRycCAmJiBjYWxsYmFja19vaykKKwkJICAgICAgaWYgKCEoKCpjYWxsYmFjaykoYWRkcnAsIChpbnQpKGlmYS0+aWZhX3ByZWZpeGxlbiksIChpbnQpKGlmYS0+aWZhX3Njb3BlKSwgCisJCQkJCShpbnQpKGlmYS0+aWZhX2luZGV4KSwgZmxhZ3MsIAorCQkJCQkoaW50KSBwcmVmZXJyZWQsIChpbnQpdmFsaWQsIHBhcm0pKSkKKwkJCWNhbGxiYWNrX29rID0gMDsKKwkJICB9CisjZW5kaWYKKwkgICAgICB9CisJICB9CisJZWxzZSBpZiAoaC0+bmxtc2dfdHlwZSA9PSBSVE1fTkVXTkVJR0ggJiYgZmFtaWx5ID09IEFGX1VOU1BFQykKKwkgIHsKKwkgICAgc3RydWN0IG5kbXNnICpuZWlnaCA9IE5MTVNHX0RBVEEoaCk7ICAKKwkgICAgc3RydWN0IHJ0YXR0ciAqcnRhID0gTkRBX1JUQShuZWlnaCk7CisJICAgIHVuc2lnbmVkIGludCBsZW4xID0gaC0+bmxtc2dfbGVuIC0gTkxNU0dfTEVOR1RIKHNpemVvZigqbmVpZ2gpKTsKKwkgICAgc2l6ZV90IG1hY2xlbiA9IDA7CisJICAgIGNoYXIgKmluYWRkciA9IE5VTEwsICptYWMgPSBOVUxMOworCSAgICAKKwkgICAgd2hpbGUgKFJUQV9PSyhydGEsIGxlbjEpKQorCSAgICAgIHsKKwkJaWYgKHJ0YS0+cnRhX3R5cGUgPT0gTkRBX0RTVCkKKwkJICBpbmFkZHIgPSAoY2hhciAqKShydGErMSk7CisJCWVsc2UgaWYgKHJ0YS0+cnRhX3R5cGUgPT0gTkRBX0xMQUREUikKKwkJICB7CisJCSAgICBtYWNsZW4gPSBydGEtPnJ0YV9sZW4gLSBzaXplb2Yoc3RydWN0IHJ0YXR0cik7CisJCSAgICBtYWMgPSAoY2hhciAqKShydGErMSk7CisJCSAgfQorCQkKKwkJcnRhID0gUlRBX05FWFQocnRhLCBsZW4xKTsKKwkgICAgICB9CisKKwkgICAgaWYgKGluYWRkciAmJiBtYWMgJiYgY2FsbGJhY2tfb2spCisJICAgICAgaWYgKCEoKCpjYWxsYmFjaykobmVpZ2gtPm5kbV9mYW1pbHksIGluYWRkciwgbWFjLCBtYWNsZW4sIHBhcm0pKSkKKwkJY2FsbGJhY2tfb2sgPSAwOworCSAgfQorI2lmZGVmIEhBVkVfREhDUDYKKwllbHNlIGlmIChoLT5ubG1zZ190eXBlID09IFJUTV9ORVdMSU5LICYmIGZhbWlseSA9PSBBRl9MT0NBTCkKKwkgIHsKKwkgICAgc3RydWN0IGlmaW5mb21zZyAqbGluayA9ICBOTE1TR19EQVRBKGgpOworCSAgICBzdHJ1Y3QgcnRhdHRyICpydGEgPSBJRkxBX1JUQShsaW5rKTsKKwkgICAgdW5zaWduZWQgaW50IGxlbjEgPSBoLT5ubG1zZ19sZW4gLSBOTE1TR19MRU5HVEgoc2l6ZW9mKCpsaW5rKSk7CisJICAgIGNoYXIgKm1hYyA9IE5VTEw7CisJICAgIHNpemVfdCBtYWNsZW4gPSAwOworCisJICAgIHdoaWxlIChSVEFfT0socnRhLCBsZW4xKSkKKwkgICAgICB7CisJCWlmIChydGEtPnJ0YV90eXBlID09IElGTEFfQUREUkVTUykKKwkJICB7CisJCSAgICBtYWNsZW4gPSBydGEtPnJ0YV9sZW4gLSBzaXplb2Yoc3RydWN0IHJ0YXR0cik7CisJCSAgICBtYWMgPSAoY2hhciAqKShydGErMSk7CisJCSAgfQorCQkKKwkJcnRhID0gUlRBX05FWFQocnRhLCBsZW4xKTsKKwkgICAgICB9CisKKwkgICAgaWYgKG1hYyAmJiBjYWxsYmFja19vayAmJiAhKChsaW5rLT5pZmlfZmxhZ3MgJiAoSUZGX0xPT1BCQUNLIHwgSUZGX1BPSU5UT1BPSU5UKSkpICYmIAorCQkhKCgqY2FsbGJhY2spKChpbnQpbGluay0+aWZpX2luZGV4LCAodW5zaWduZWQgaW50KWxpbmstPmlmaV90eXBlLCBtYWMsIG1hY2xlbiwgcGFybSkpKQorCSAgICAgIGNhbGxiYWNrX29rID0gMDsKKwkgIH0KKyNlbmRpZgorICAgIH0KK30KKwordm9pZCBuZXRsaW5rX211bHRpY2FzdCh2b2lkKQoreworICBzc2l6ZV90IGxlbjsKKyAgc3RydWN0IG5sbXNnaGRyICpoOworICBpbnQgZmxhZ3M7CisgIAorICAvKiBkb24ndCByaXNrIGJsb2NraW5nIHJlYWRpbmcgbmV0bGluayBtZXNzYWdlcyBoZXJlLiAqLworICBpZiAoKGZsYWdzID0gZmNudGwoZGFlbW9uLT5uZXRsaW5rZmQsIEZfR0VURkwpKSA9PSAtMSB8fAorICAgICAgZmNudGwoZGFlbW9uLT5uZXRsaW5rZmQsIEZfU0VURkwsIGZsYWdzIHwgT19OT05CTE9DSykgPT0gLTEpIAorICAgIHJldHVybjsKKyAgCisgIGlmICgobGVuID0gbmV0bGlua19yZWN2KCkpICE9IC0xKQorICAgIGZvciAoaCA9IChzdHJ1Y3Qgbmxtc2doZHIgKilpb3YuaW92X2Jhc2U7IE5MTVNHX09LKGgsIChzaXplX3QpbGVuKTsgaCA9IE5MTVNHX05FWFQoaCwgbGVuKSkKKyAgICAgIG5sX2FzeW5jKGgpOworICAKKyAgLyogcmVzdG9yZSBub24tYmxvY2tpbmcgc3RhdHVzICovCisgIGZjbnRsKGRhZW1vbi0+bmV0bGlua2ZkLCBGX1NFVEZMLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG5sX2FzeW5jKHN0cnVjdCBubG1zZ2hkciAqaCkKK3sKKyAgaWYgKGgtPm5sbXNnX3R5cGUgPT0gTkxNU0dfRVJST1IpCisgICAgeworICAgICAgc3RydWN0IG5sbXNnZXJyICplcnIgPSBOTE1TR19EQVRBKGgpOworICAgICAgaWYgKGVyci0+ZXJyb3IgIT0gMCkKKwlteV9zeXNsb2coTE9HX0VSUiwgXygibmV0bGluayByZXR1cm5zIGVycm9yOiAlcyIpLCBzdHJlcnJvcigtKGVyci0+ZXJyb3IpKSk7CisgICAgfQorICBlbHNlIGlmIChoLT5ubG1zZ19waWQgPT0gMCAmJiBoLT5ubG1zZ190eXBlID09IFJUTV9ORVdST1VURSkgCisgICAgeworICAgICAgLyogV2UgYXJyYW5nZSB0byByZWNlaXZlIG5ldGxpbmsgbXVsdGljYXN0IG1lc3NhZ2VzIHdoZW5ldmVyIHRoZSBuZXR3b3JrIHJvdXRlIGlzIGFkZGVkLgorCSBJZiB0aGlzIGhhcHBlbnMgYW5kIHdlIHN0aWxsIGhhdmUgYSBETlMgcGFja2V0IGluIHRoZSBidWZmZXIsIHdlIHJlLXNlbmQgaXQuCisJIFRoaXMgaGVscHMgb24gRG9EIGxpbmtzLCB3aGVyZSBmcmVxdWVudGx5IHRoZSBwYWNrZXQgd2hpY2ggdHJpZ2dlcnMgZGlhbGxpbmcgaXMKKwkgYSBETlMgcXVlcnksIHdoaWNoIHRoZW4gZ2V0cyBsb3N0LiBCeSByZS1zZW5kaW5nLCB3ZSBjYW4gYXZvaWQgdGhlIGxvb2t1cAorCSBmYWlsaW5nLiAqLyAKKyAgICAgIHN0cnVjdCBydG1zZyAqcnRtID0gTkxNU0dfREFUQShoKTsKKyAgICAgIAorICAgICAgaWYgKHJ0bS0+cnRtX3R5cGUgPT0gUlROX1VOSUNBU1QgJiYgcnRtLT5ydG1fc2NvcGUgPT0gUlRfU0NPUEVfTElOSykKKwlxdWV1ZV9ldmVudChFVkVOVF9ORVdST1VURSk7CisgICAgfQorICBlbHNlIGlmIChoLT5ubG1zZ190eXBlID09IFJUTV9ORVdBRERSIHx8IGgtPm5sbXNnX3R5cGUgPT0gUlRNX0RFTEFERFIpIAorICAgIHF1ZXVlX2V2ZW50KEVWRU5UX05FV0FERFIpOworfQorI2VuZGlmCisKKyAgICAgIApkaWZmIC0tZ2l0IGEvc3JjL25ldHdvcmsuYyBiL3NyYy9uZXR3b3JrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRkMmFmMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9uZXR3b3JrLmMKQEAgLTAsMCArMSwxNjA3IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE0IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworI2lmZGVmIEhBVkVfTElOVVhfTkVUV09SSworCitpbnQgaW5kZXh0b25hbWUoaW50IGZkLCBpbnQgaW5kZXgsIGNoYXIgKm5hbWUpCit7CisgIHN0cnVjdCBpZnJlcSBpZnI7CisgIAorICBpZiAoaW5kZXggPT0gMCkKKyAgICByZXR1cm4gMDsKKworICBpZnIuaWZyX2lmaW5kZXggPSBpbmRleDsKKyAgaWYgKGlvY3RsKGZkLCBTSU9DR0lGTkFNRSwgJmlmcikgPT0gLTEpCisgICAgcmV0dXJuIDA7CisKKyAgc3RybmNweShuYW1lLCBpZnIuaWZyX25hbWUsIElGX05BTUVTSVpFKTsKKworICByZXR1cm4gMTsKK30KKworCisjZWxpZiBkZWZpbmVkKEhBVkVfU09MQVJJU19ORVRXT1JLKQorCisjaW5jbHVkZSA8em9uZS5oPgorI2luY2x1ZGUgPGFsbG9jYS5oPgorI2lmbmRlZiBMSUZDX1VOREVSX0lQTVAKKyMgIGRlZmluZSBMSUZDX1VOREVSX0lQTVAgMAorI2VuZGlmCisKK2ludCBpbmRleHRvbmFtZShpbnQgZmQsIGludCBpbmRleCwgY2hhciAqbmFtZSkKK3sKKyAgaW50NjRfdCBsaWZjX2ZsYWdzOworICBzdHJ1Y3QgbGlmbnVtIGxpZm47CisgIGludCBudW1pZnMsIGJ1ZnNpemUsIGk7CisgIHN0cnVjdCBsaWZjb25mIGxpZmM7CisgIHN0cnVjdCBsaWZyZXEgKmxpZnJwOworICAKKyAgaWYgKGluZGV4ID09IDApCisgICAgcmV0dXJuIDA7CisgIAorICBpZiAoZ2V0em9uZWlkKCkgPT0gR0xPQkFMX1pPTkVJRCkgCisgICAgeworICAgICAgaWYgKCFpZl9pbmRleHRvbmFtZShpbmRleCwgbmFtZSkpCisJcmV0dXJuIDA7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIAorICBsaWZjX2ZsYWdzID0gTElGQ19OT1hNSVQgfCBMSUZDX1RFTVBPUkFSWSB8IExJRkNfQUxMWk9ORVMgfCBMSUZDX1VOREVSX0lQTVA7CisgIGxpZm4ubGlmbl9mYW1pbHkgPSBBRl9VTlNQRUM7CisgIGxpZm4ubGlmbl9mbGFncyA9IGxpZmNfZmxhZ3M7CisgIGlmIChpb2N0bChmZCwgU0lPQ0dMSUZOVU0sICZsaWZuKSA8IDApIAorICAgIHJldHVybiAwOworICAKKyAgbnVtaWZzID0gbGlmbi5saWZuX2NvdW50OworICBidWZzaXplID0gbnVtaWZzICogc2l6ZW9mKHN0cnVjdCBsaWZyZXEpOworICAKKyAgbGlmYy5saWZjX2ZhbWlseSA9IEFGX1VOU1BFQzsKKyAgbGlmYy5saWZjX2ZsYWdzID0gbGlmY19mbGFnczsKKyAgbGlmYy5saWZjX2xlbiA9IGJ1ZnNpemU7CisgIGxpZmMubGlmY19idWYgPSBhbGxvY2EoYnVmc2l6ZSk7CisgIAorICBpZiAoaW9jdGwoZmQsIFNJT0NHTElGQ09ORiwgJmxpZmMpIDwgMCkgIAorICAgIHJldHVybiAwOworICAKKyAgbGlmcnAgPSBsaWZjLmxpZmNfcmVxOworICBmb3IgKGkgPSBsaWZjLmxpZmNfbGVuIC8gc2l6ZW9mKHN0cnVjdCBsaWZyZXEpOyBpOyBpLS0sIGxpZnJwKyspIAorICAgIHsKKyAgICAgIHN0cnVjdCBsaWZyZXEgbGlmcjsKKyAgICAgIHN0cm5jcHkobGlmci5saWZyX25hbWUsIGxpZnJwLT5saWZyX25hbWUsIElGX05BTUVTSVpFKTsKKyAgICAgIGlmIChpb2N0bChmZCwgU0lPQ0dMSUZJTkRFWCwgJmxpZnIpIDwgMCkgCisJcmV0dXJuIDA7CisgICAgICAKKyAgICAgIGlmIChsaWZyLmxpZnJfaW5kZXggPT0gaW5kZXgpIHsKKwlzdHJuY3B5KG5hbWUsIGxpZnIubGlmcl9uYW1lLCBJRl9OQU1FU0laRSk7CisJcmV0dXJuIDE7CisgICAgICB9CisgICAgfQorICByZXR1cm4gMDsKK30KKworCisjZWxzZQorCitpbnQgaW5kZXh0b25hbWUoaW50IGZkLCBpbnQgaW5kZXgsIGNoYXIgKm5hbWUpCit7IAorICAodm9pZClmZDsKKworICBpZiAoaW5kZXggPT0gMCB8fCAhaWZfaW5kZXh0b25hbWUoaW5kZXgsIG5hbWUpKQorICAgIHJldHVybiAwOworCisgIHJldHVybiAxOworfQorCisjZW5kaWYKKworaW50IGlmYWNlX2NoZWNrKGludCBmYW1pbHksIHN0cnVjdCBhbGxfYWRkciAqYWRkciwgY2hhciAqbmFtZSwgaW50ICphdXRoKQoreworICBzdHJ1Y3QgaW5hbWUgKnRtcDsKKyAgaW50IHJldCA9IDEsIG1hdGNoX2FkZHIgPSAwOworCisgIC8qIE5vdGU6IGhhdmUgdG8gY2hlY2sgYWxsIGFuZCBub3QgYmFpbCBvdXQgZWFybHksIHNvIHRoYXQgd2Ugc2V0IHRoZQorICAgICAidXNlZCIgZmxhZ3MuCisKKyAgICAgTWF5IGJlIGNhbGxlZCB3aXRoIGZhbWlseSA9PSBBRl9MT0NBTHRvIGNoZWNrIGludGVyZmFjZSBieSBuYW1lIG9ubHkuICovCisgIAorICBpZiAoYXV0aCkKKyAgICAqYXV0aCA9IDA7CisgIAorICBpZiAoZGFlbW9uLT5pZl9uYW1lcyB8fCBkYWVtb24tPmlmX2FkZHJzKQorICAgIHsKKyAgICAgIHJldCA9IDA7CisKKyAgICAgIGZvciAodG1wID0gZGFlbW9uLT5pZl9uYW1lczsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCisJaWYgKHRtcC0+bmFtZSAmJiB3aWxkY2FyZF9tYXRjaCh0bXAtPm5hbWUsIG5hbWUpKQorCSAgcmV0ID0gdG1wLT51c2VkID0gMTsKKwkgICAgICAgIAorICAgICAgaWYgKGFkZHIpCisJZm9yICh0bXAgPSBkYWVtb24tPmlmX2FkZHJzOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKKwkgIGlmICh0bXAtPmFkZHIuc2Euc2FfZmFtaWx5ID09IGZhbWlseSkKKwkgICAgeworCSAgICAgIGlmIChmYW1pbHkgPT0gQUZfSU5FVCAmJgorCQkgIHRtcC0+YWRkci5pbi5zaW5fYWRkci5zX2FkZHIgPT0gYWRkci0+YWRkci5hZGRyNC5zX2FkZHIpCisJCXJldCA9IG1hdGNoX2FkZHIgPSB0bXAtPnVzZWQgPSAxOworI2lmZGVmIEhBVkVfSVBWNgorCSAgICAgIGVsc2UgaWYgKGZhbWlseSA9PSBBRl9JTkVUNiAmJgorCQkgICAgICAgSU42X0FSRV9BRERSX0VRVUFMKCZ0bXAtPmFkZHIuaW42LnNpbjZfYWRkciwgCisJCQkJCSAgJmFkZHItPmFkZHIuYWRkcjYpKQorCQlyZXQgPSBtYXRjaF9hZGRyID0gdG1wLT51c2VkID0gMTsKKyNlbmRpZgorCSAgICB9ICAgICAgICAgIAorICAgIH0KKyAgCisgIGlmICghbWF0Y2hfYWRkcikKKyAgICBmb3IgKHRtcCA9IGRhZW1vbi0+aWZfZXhjZXB0OyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKKyAgICAgIGlmICh0bXAtPm5hbWUgJiYgd2lsZGNhcmRfbWF0Y2godG1wLT5uYW1lLCBuYW1lKSkKKwlyZXQgPSAwOworICAgIAorCisgIGZvciAodG1wID0gZGFlbW9uLT5hdXRoaW50ZXJmYWNlOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKKyAgICBpZiAodG1wLT5uYW1lKQorICAgICAgeworCWlmIChzdHJjbXAodG1wLT5uYW1lLCBuYW1lKSA9PSAwICYmCisJICAgICh0bXAtPmFkZHIuc2Euc2FfZmFtaWx5ID09IDAgfHwgdG1wLT5hZGRyLnNhLnNhX2ZhbWlseSA9PSBmYW1pbHkpKQorCSAgYnJlYWs7CisgICAgICB9CisgICAgZWxzZSBpZiAoYWRkciAmJiB0bXAtPmFkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQgJiYgZmFtaWx5ID09IEFGX0lORVQgJiYKKwkgICAgIHRtcC0+YWRkci5pbi5zaW5fYWRkci5zX2FkZHIgPT0gYWRkci0+YWRkci5hZGRyNC5zX2FkZHIpCisgICAgICBicmVhazsKKyNpZmRlZiBIQVZFX0lQVjYKKyAgICBlbHNlIGlmIChhZGRyICYmIHRtcC0+YWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYgJiYgZmFtaWx5ID09IEFGX0lORVQ2ICYmCisJICAgICBJTjZfQVJFX0FERFJfRVFVQUwoJnRtcC0+YWRkci5pbjYuc2luNl9hZGRyLCAmYWRkci0+YWRkci5hZGRyNikpCisgICAgICBicmVhazsKKyNlbmRpZiAgICAgIAorCisgIGlmICh0bXAgJiYgYXV0aCkgCisgICAgeworICAgICAgKmF1dGggPSAxOworICAgICAgcmV0ID0gMTsKKyAgICB9CisKKyAgcmV0dXJuIHJldDsgCit9CisKKworLyogRml4IGZvciBwcm9ibGVtIHRoYXQgdGhlIGtlcm5lbCBzb21ldGltZXMgcmVwb3J0cyB0aGUgbG9vcGJhY2sgaW5lcmZhY2UgYXMgdGhlCisgICBhcnJpdmFsIGludGVyZmFjZSB3aGVuIGEgcGFja2V0IG9yaWdpbmF0ZXMgbG9jYWxseSwgZXZlbiB3aGVuIHNlbnQgdG8gYWRkcmVzcyBvZiAKKyAgIGFuIGludGVyZmFjZSBvdGhlciB0aGFuIHRoZSBsb29wYmFjay4gQWNjZXB0IHBhY2tldCBpZiBpdCBhcnJpdmVkIHZpYSBhIGxvb3BiYWNrIAorICAgaW50ZXJmYWNlLCBldmVuIHdoZW4gd2UncmUgbm90IGFjY2VwdGluZyBwYWNrZXRzIHRoYXQgd2F5LCBhcyBsb25nIGFzIHRoZSBkZXN0aW5hdGlvbgorICAgYWRkcmVzcyBpcyBvbmUgd2UncmUgYmVsaWV2aW5nLiBJbnRlcmZhY2UgbGlzdCBtdXN0IGJlIHVwLXRvLWRhdGUgYmVmb3JlIGNhbGxpbmcuICovCitpbnQgbG9vcGJhY2tfZXhjZXB0aW9uKGludCBmZCwgaW50IGZhbWlseSwgc3RydWN0IGFsbF9hZGRyICphZGRyLCBjaGFyICpuYW1lKSAgICAKK3sKKyAgc3RydWN0IGlmcmVxIGlmcjsKKyAgc3RydWN0IGlyZWMgKmlmYWNlOworCisgIHN0cm5jcHkoaWZyLmlmcl9uYW1lLCBuYW1lLCBJRl9OQU1FU0laRSk7CisgIGlmIChpb2N0bChmZCwgU0lPQ0dJRkZMQUdTLCAmaWZyKSAhPSAtMSAmJgorICAgICAgaWZyLmlmcl9mbGFncyAmIElGRl9MT09QQkFDSykKKyAgICB7CisgICAgICBmb3IgKGlmYWNlID0gZGFlbW9uLT5pbnRlcmZhY2VzOyBpZmFjZTsgaWZhY2UgPSBpZmFjZS0+bmV4dCkKKwlpZiAoaWZhY2UtPmFkZHIuc2Euc2FfZmFtaWx5ID09IGZhbWlseSkKKwkgIHsKKwkgICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUKQorCSAgICAgIHsKKwkJaWYgKGlmYWNlLT5hZGRyLmluLnNpbl9hZGRyLnNfYWRkciA9PSBhZGRyLT5hZGRyLmFkZHI0LnNfYWRkcikKKwkJICByZXR1cm4gMTsKKwkgICAgICB9CisjaWZkZWYgSEFWRV9JUFY2CisJICAgIGVsc2UgaWYgKElONl9BUkVfQUREUl9FUVVBTCgmaWZhY2UtPmFkZHIuaW42LnNpbjZfYWRkciwgJmFkZHItPmFkZHIuYWRkcjYpKQorCSAgICAgIHJldHVybiAxOworI2VuZGlmCisJICAgIAorCSAgfQorICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIElmIHdlJ3JlIGNvbmZpZ3VyZWQgd2l0aCBzb21ldGhpbmcgbGlrZSAtLWludGVyZmFjZT1ldGgwOjAgdGhlbiB3ZSdsbCBsaXN0ZW4gY29ycmVjdGx5CisgICBvbiB0aGUgcmVsZXZhbnQgYWRkcmVzcywgYnV0IHRoZSBuYW1lIG9mIHRoZSBhcnJpdmFsIGludGVyZmFjZSwgZGVyaXZlZCBmcm9tIHRoZQorICAgaW5kZXggd29uJ3QgbWF0Y2ggdGhlIGNvbmZpZy4gQ2hlY2sgdGhhdCB3ZSBmb3VuZCBhbiBpbnRlcmZhY2UgYWRkcmVzcyBmb3IgdGhlIGFycml2YWwgCisgICBpbnRlcmZhY2U6IGRhZW1vbi0+aW50ZXJmYWNlcyBtdXN0IGJlIHVwLXRvLWRhdGUuICovCitpbnQgbGFiZWxfZXhjZXB0aW9uKGludCBpbmRleCwgaW50IGZhbWlseSwgc3RydWN0IGFsbF9hZGRyICphZGRyKQoreworICBzdHJ1Y3QgaXJlYyAqaWZhY2U7CisKKyAgLyogbGFiZWxzIG9ubHkgc3VwcG9ydGVkIG9uIElQdjQgYWRkcmVzc2VzLiAqLworICBpZiAoZmFtaWx5ICE9IEFGX0lORVQpCisgICAgcmV0dXJuIDA7CisKKyAgZm9yIChpZmFjZSA9IGRhZW1vbi0+aW50ZXJmYWNlczsgaWZhY2U7IGlmYWNlID0gaWZhY2UtPm5leHQpCisgICAgaWYgKGlmYWNlLT5pbmRleCA9PSBpbmRleCAmJiBpZmFjZS0+YWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCAmJgorCWlmYWNlLT5hZGRyLmluLnNpbl9hZGRyLnNfYWRkciA9PSBhZGRyLT5hZGRyLmFkZHI0LnNfYWRkcikKKyAgICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitzdHJ1Y3QgaWZhY2VfcGFyYW0geworICBzdHJ1Y3QgYWRkcmxpc3QgKnNwYXJlOworICBpbnQgZmQ7Cit9OworCitzdGF0aWMgaW50IGlmYWNlX2FsbG93ZWQoc3RydWN0IGlmYWNlX3BhcmFtICpwYXJhbSwgaW50IGlmX2luZGV4LCBjaGFyICpsYWJlbCwKKwkJCSB1bmlvbiBteXNvY2thZGRyICphZGRyLCBzdHJ1Y3QgaW5fYWRkciBuZXRtYXNrLCBpbnQgcHJlZml4bGVuLCBpbnQgaWZhY2VfZmxhZ3MpIAoreworICBzdHJ1Y3QgaXJlYyAqaWZhY2U7CisgIGludCBtdHUgPSAwLCBsb29wYmFjazsKKyAgc3RydWN0IGlmcmVxIGlmcjsKKyAgaW50IHRmdHBfb2sgPSAhIW9wdGlvbl9ib29sKE9QVF9URlRQKTsKKyAgaW50IGRoY3Bfb2sgPSAxOworICBpbnQgYXV0aF9kbnMgPSAwOworI2lmIGRlZmluZWQoSEFWRV9ESENQKSB8fCBkZWZpbmVkKEhBVkVfVEZUUCkKKyAgc3RydWN0IGluYW1lICp0bXA7CisjZW5kaWYKKworICAodm9pZClwcmVmaXhsZW47CisKKyAgaWYgKCFpbmRleHRvbmFtZShwYXJhbS0+ZmQsIGlmX2luZGV4LCBpZnIuaWZyX25hbWUpIHx8CisgICAgICBpb2N0bChwYXJhbS0+ZmQsIFNJT0NHSUZGTEFHUywgJmlmcikgPT0gLTEpCisgICAgcmV0dXJuIDA7CisgICAKKyAgbG9vcGJhY2sgPSBpZnIuaWZyX2ZsYWdzICYgSUZGX0xPT1BCQUNLOworICAKKyAgaWYgKGxvb3BiYWNrKQorICAgIGRoY3Bfb2sgPSAwOworICAKKyAgaWYgKGlvY3RsKHBhcmFtLT5mZCwgU0lPQ0dJRk1UVSwgJmlmcikgIT0gLTEpCisgICAgbXR1ID0gaWZyLmlmcl9tdHU7CisgIAorICBpZiAoIWxhYmVsKQorICAgIGxhYmVsID0gaWZyLmlmcl9uYW1lOworIAorICAvKiBtYWludGFpbiBhIGxpc3Qgb2YgYWxsIGFkZHJlc3NlcyBvbiBhbGwgaW50ZXJmYWNlcyBmb3IgLS1sb2NhbC1zZXJ2aWNlIG9wdGlvbiAqLworICBpZiAob3B0aW9uX2Jvb2woT1BUX0xPQ0FMX1NFUlZJQ0UpKQorICAgIHsKKyAgICAgIHN0cnVjdCBhZGRybGlzdCAqYWw7CisKKyAgICAgIGlmIChwYXJhbS0+c3BhcmUpCisJeworCSAgYWwgPSBwYXJhbS0+c3BhcmU7CisJICBwYXJhbS0+c3BhcmUgPSBhbC0+bmV4dDsKKwl9CisgICAgICBlbHNlCisJYWwgPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBhZGRybGlzdCkpOworICAgICAgCisgICAgICBpZiAoYWwpCisJeworCSAgYWwtPm5leHQgPSBkYWVtb24tPmludGVyZmFjZV9hZGRyczsKKwkgIGRhZW1vbi0+aW50ZXJmYWNlX2FkZHJzID0gYWw7CisJICBhbC0+cHJlZml4bGVuID0gcHJlZml4bGVuOworCSAgCisJICBpZiAoYWRkci0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQpCisJICAgIHsKKwkgICAgICBhbC0+YWRkci5hZGRyLmFkZHI0ID0gYWRkci0+aW4uc2luX2FkZHI7CisJICAgICAgYWwtPmZsYWdzID0gMDsKKwkgICAgfQorI2lmZGVmIEhBVkVfSVBWNgorCSAgZWxzZQorCSAgICB7CisJICAgICAgYWwtPmFkZHIuYWRkci5hZGRyNiA9IGFkZHItPmluNi5zaW42X2FkZHI7CisJICAgICAgYWwtPmZsYWdzID0gQUREUkxJU1RfSVBWNjsKKwkgICAgfSAKKyNlbmRpZgorCX0KKyAgICB9CisgIAorI2lmZGVmIEhBVkVfSVBWNgorICBpZiAoYWRkci0+c2Euc2FfZmFtaWx5ICE9IEFGX0lORVQ2IHx8ICFJTjZfSVNfQUREUl9MSU5LTE9DQUwoJmFkZHItPmluNi5zaW42X2FkZHIpKQorI2VuZGlmCisgICAgeworICAgICAgc3RydWN0IGludGVyZmFjZV9uYW1lICppbnRfbmFtZTsKKyAgICAgIHN0cnVjdCBhZGRybGlzdCAqYWw7CisjaWZkZWYgSEFWRV9BVVRICisgICAgICBzdHJ1Y3QgYXV0aF96b25lICp6b25lOworICAgICAgc3RydWN0IGF1dGhfbmFtZV9saXN0ICpuYW1lOworCisgICAgICAvKiBGaW5kIHN1Ym5ldHMgaW4gYXV0aF96b25lcyAqLworICAgICAgZm9yICh6b25lID0gZGFlbW9uLT5hdXRoX3pvbmVzOyB6b25lOyB6b25lID0gem9uZS0+bmV4dCkKKwlmb3IgKG5hbWUgPSB6b25lLT5pbnRlcmZhY2VfbmFtZXM7IG5hbWU7IG5hbWUgPSBuYW1lLT5uZXh0KQorCSAgaWYgKHdpbGRjYXJkX21hdGNoKG5hbWUtPm5hbWUsIGxhYmVsKSkKKwkgICAgeworCSAgICAgIGlmIChhZGRyLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCAmJiAobmFtZS0+ZmxhZ3MgJiBBVVRINCkpCisJCXsKKwkJICBpZiAocGFyYW0tPnNwYXJlKQorCQkgICAgeworCQkgICAgICBhbCA9IHBhcmFtLT5zcGFyZTsKKwkJICAgICAgcGFyYW0tPnNwYXJlID0gYWwtPm5leHQ7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgYWwgPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBhZGRybGlzdCkpOworCQkgIAorCQkgIGlmIChhbCkKKwkJICAgIHsKKwkJICAgICAgYWwtPm5leHQgPSB6b25lLT5zdWJuZXQ7CisJCSAgICAgIHpvbmUtPnN1Ym5ldCA9IGFsOworCQkgICAgICBhbC0+cHJlZml4bGVuID0gcHJlZml4bGVuOworCQkgICAgICBhbC0+YWRkci5hZGRyLmFkZHI0ID0gYWRkci0+aW4uc2luX2FkZHI7CisJCSAgICAgIGFsLT5mbGFncyA9IDA7CisJCSAgICB9CisJCX0KKwkgICAgICAKKyNpZmRlZiBIQVZFX0lQVjYKKwkgICAgICBpZiAoYWRkci0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2ICYmIChuYW1lLT5mbGFncyAmIEFVVEg2KSkKKwkJeworCQkgIGlmIChwYXJhbS0+c3BhcmUpCisJCSAgICB7CisJCSAgICAgIGFsID0gcGFyYW0tPnNwYXJlOworCQkgICAgICBwYXJhbS0+c3BhcmUgPSBhbC0+bmV4dDsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICBhbCA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IGFkZHJsaXN0KSk7CisJCSAgCisJCSAgaWYgKGFsKQorCQkgICAgeworCQkgICAgICBhbC0+bmV4dCA9IHpvbmUtPnN1Ym5ldDsKKwkJICAgICAgem9uZS0+c3VibmV0ID0gYWw7CisJCSAgICAgIGFsLT5wcmVmaXhsZW4gPSBwcmVmaXhsZW47CisJCSAgICAgIGFsLT5hZGRyLmFkZHIuYWRkcjYgPSBhZGRyLT5pbjYuc2luNl9hZGRyOworCQkgICAgICBhbC0+ZmxhZ3MgPSBBRERSTElTVF9JUFY2OworCQkgICAgfQorCQl9IAorI2VuZGlmCisJICAgICAgCisJICAgIH0KKyNlbmRpZgorICAgICAgIAorICAgICAgLyogVXBkYXRlIGFkZHJlc3NlcyBmcm9tIGludGVyZmFjZV9uYW1lcy4gVGhlc2UgYXJlIGEgc2V0IGluZGVwZW5kZW50CisJIG9mIHRoZSBzZXQgd2UncmUgbGlzdGVuaW5nIG9uLiAqLyAgCisgICAgICBmb3IgKGludF9uYW1lID0gZGFlbW9uLT5pbnRfbmFtZXM7IGludF9uYW1lOyBpbnRfbmFtZSA9IGludF9uYW1lLT5uZXh0KQorCWlmIChzdHJuY21wKGxhYmVsLCBpbnRfbmFtZS0+aW50ciwgSUZfTkFNRVNJWkUpID09IDAgJiYgCisJICAgIChhZGRyLT5zYS5zYV9mYW1pbHkgPT0gaW50X25hbWUtPmZhbWlseSB8fCBpbnRfbmFtZS0+ZmFtaWx5ID09IDApKQorCSAgeworCSAgICBpZiAocGFyYW0tPnNwYXJlKQorCSAgICAgIHsKKwkJYWwgPSBwYXJhbS0+c3BhcmU7CisJCXBhcmFtLT5zcGFyZSA9IGFsLT5uZXh0OworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIGFsID0gd2hpbmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWRkcmxpc3QpKTsKKwkgICAgCisJICAgIGlmIChhbCkKKwkgICAgICB7CisJCWFsLT5uZXh0ID0gaW50X25hbWUtPmFkZHI7CisJCWludF9uYW1lLT5hZGRyID0gYWw7CisJCQorCQlpZiAoYWRkci0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQpCisJCSAgeworCQkgICAgYWwtPmFkZHIuYWRkci5hZGRyNCA9IGFkZHItPmluLnNpbl9hZGRyOworCQkgICAgYWwtPmZsYWdzID0gMDsKKwkJICB9CisjaWZkZWYgSEFWRV9JUFY2CisJCWVsc2UKKwkJIHsKKwkJICAgIGFsLT5hZGRyLmFkZHIuYWRkcjYgPSBhZGRyLT5pbjYuc2luNl9hZGRyOworCQkgICAgYWwtPmZsYWdzID0gQUREUkxJU1RfSVBWNjsKKwkJICAgIC8qIFByaXZhY3kgYWRkcmVzc2VzIGFuZCBhZGRyZXNzZXMgc3RpbGwgdW5kZXJnb2luZyBEQUQgYW5kIGRlcHJlY2F0ZWQgYWRkcmVzc2VzCisJCSAgICAgICBkb24ndCBhcHBlYXIgaW4gZm9yd2FyZCBxdWVyaWVzLCBidXQgd2lsbCBpbiByZXZlcnNlIG9uZXMuICovCisJCSAgICBpZiAoIShpZmFjZV9mbGFncyAmIElGQUNFX1BFUk1BTkVOVCkgfHwgKGlmYWNlX2ZsYWdzICYgKElGQUNFX0RFUFJFQ0FURUQgfCBJRkFDRV9URU5UQVRJVkUpKSkKKwkJICAgICAgYWwtPmZsYWdzIHw9IEFERFJMSVNUX1JFVk9OTFk7CisJCSB9IAorI2VuZGlmCisJICAgICAgfQorCSAgfQorICAgIH0KKyAKKyAgLyogY2hlY2sgd2hldGhlciB0aGUgaW50ZXJmYWNlIElQIGhhcyBiZWVuIGFkZGVkIGFscmVhZHkgCisgICAgIHdlIGNhbGwgdGhpcyByb3V0aW5lIG11bHRpcGxlIHRpbWVzLiAqLworICBmb3IgKGlmYWNlID0gZGFlbW9uLT5pbnRlcmZhY2VzOyBpZmFjZTsgaWZhY2UgPSBpZmFjZS0+bmV4dCkgCisgICAgaWYgKHNvY2thZGRyX2lzZXF1YWwoJmlmYWNlLT5hZGRyLCBhZGRyKSkKKyAgICAgIHsKKwlpZmFjZS0+ZGFkID0gISEoaWZhY2VfZmxhZ3MgJiBJRkFDRV9URU5UQVRJVkUpOworCWlmYWNlLT5mb3VuZCA9IDE7IC8qIGZvciBnYXJiYWdlIGNvbGxlY3Rpb24gKi8KKwlyZXR1cm4gMTsKKyAgICAgIH0KKworIC8qIElmIHdlIGFyZSByZXN0cmljdGluZyB0aGUgc2V0IG9mIGludGVyZmFjZXMgdG8gdXNlLCBtYWtlCisgICAgIHN1cmUgdGhhdCBsb29wYmFjayBpbnRlcmZhY2VzIGFyZSBpbiB0aGF0IHNldC4gKi8KKyAgaWYgKGRhZW1vbi0+aWZfbmFtZXMgJiYgbG9vcGJhY2spCisgICAgeworICAgICAgc3RydWN0IGluYW1lICpsbzsKKyAgICAgIGZvciAobG8gPSBkYWVtb24tPmlmX25hbWVzOyBsbzsgbG8gPSBsby0+bmV4dCkKKwlpZiAobG8tPm5hbWUgJiYgc3RyY21wKGxvLT5uYW1lLCBpZnIuaWZyX25hbWUpID09IDApCisJICBicmVhazsKKyAgICAgIAorICAgICAgaWYgKCFsbyAmJiAobG8gPSB3aGluZV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbmFtZSkpKSkgCisJeworCSAgaWYgKChsby0+bmFtZSA9IHdoaW5lX21hbGxvYyhzdHJsZW4oaWZyLmlmcl9uYW1lKSsxKSkpCisJICAgIHsKKwkgICAgICBzdHJjcHkobG8tPm5hbWUsIGlmci5pZnJfbmFtZSk7CisJICAgICAgbG8tPnVzZWQgPSAxOworCSAgICAgIGxvLT5uZXh0ID0gZGFlbW9uLT5pZl9uYW1lczsKKwkgICAgICBkYWVtb24tPmlmX25hbWVzID0gbG87CisJICAgIH0KKwkgIGVsc2UKKwkgICAgZnJlZShsbyk7CisJfQorICAgIH0KKyAgCisgIGlmIChhZGRyLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCAmJgorICAgICAgIWlmYWNlX2NoZWNrKEFGX0lORVQsIChzdHJ1Y3QgYWxsX2FkZHIgKikmYWRkci0+aW4uc2luX2FkZHIsIGxhYmVsLCAmYXV0aF9kbnMpKQorICAgIHJldHVybiAxOworCisjaWZkZWYgSEFWRV9JUFY2CisgIGlmIChhZGRyLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYgJiYKKyAgICAgICFpZmFjZV9jaGVjayhBRl9JTkVUNiwgKHN0cnVjdCBhbGxfYWRkciAqKSZhZGRyLT5pbjYuc2luNl9hZGRyLCBsYWJlbCwgJmF1dGhfZG5zKSkKKyAgICByZXR1cm4gMTsKKyNlbmRpZgorICAgIAorI2lmZGVmIEhBVkVfREhDUAorICAvKiBObyBESENQIHdoZXJlIHdlJ3JlIGRvaW5nIGF1dGggRE5TLiAqLworICBpZiAoYXV0aF9kbnMpCisgICAgeworICAgICAgdGZ0cF9vayA9IDA7CisgICAgICBkaGNwX29rID0gMDsKKyAgICB9CisgIGVsc2UKKyAgICBmb3IgKHRtcCA9IGRhZW1vbi0+ZGhjcF9leGNlcHQ7IHRtcDsgdG1wID0gdG1wLT5uZXh0KQorICAgICAgaWYgKHRtcC0+bmFtZSAmJiB3aWxkY2FyZF9tYXRjaCh0bXAtPm5hbWUsIGlmci5pZnJfbmFtZSkpCisJeworCSAgdGZ0cF9vayA9IDA7CisJICBkaGNwX29rID0gMDsKKwl9CisjZW5kaWYKKyAKKyAgCisjaWZkZWYgSEFWRV9URlRQCisgIGlmIChkYWVtb24tPnRmdHBfaW50ZXJmYWNlcykKKyAgICB7CisgICAgICAvKiBkZWRpY2F0ZWQgdGZ0cCBpbnRlcmZhY2UgbGlzdCAqLworICAgICAgdGZ0cF9vayA9IDA7CisgICAgICBmb3IgKHRtcCA9IGRhZW1vbi0+dGZ0cF9pbnRlcmZhY2VzOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKKwlpZiAodG1wLT5uYW1lICYmIHdpbGRjYXJkX21hdGNoKHRtcC0+bmFtZSwgaWZyLmlmcl9uYW1lKSkKKwkgIHRmdHBfb2sgPSAxOworICAgIH0KKyNlbmRpZgorICAKKyAgLyogYWRkIHRvIGxpc3QgKi8KKyAgaWYgKChpZmFjZSA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IGlyZWMpKSkpCisgICAgeworICAgICAgaWZhY2UtPmFkZHIgPSAqYWRkcjsKKyAgICAgIGlmYWNlLT5uZXRtYXNrID0gbmV0bWFzazsKKyAgICAgIGlmYWNlLT50ZnRwX29rID0gdGZ0cF9vazsKKyAgICAgIGlmYWNlLT5kaGNwX29rID0gZGhjcF9vazsKKyAgICAgIGlmYWNlLT5kbnNfYXV0aCA9IGF1dGhfZG5zOworICAgICAgaWZhY2UtPm10dSA9IG10dTsKKyAgICAgIGlmYWNlLT5kYWQgPSAhIShpZmFjZV9mbGFncyAmIElGQUNFX1RFTlRBVElWRSk7CisgICAgICBpZmFjZS0+Zm91bmQgPSAxOworICAgICAgaWZhY2UtPmRvbmUgPSBpZmFjZS0+bXVsdGljYXN0X2RvbmUgPSBpZmFjZS0+d2FybmVkID0gMDsKKyAgICAgIGlmYWNlLT5pbmRleCA9IGlmX2luZGV4OworICAgICAgaWYgKChpZmFjZS0+bmFtZSA9IHdoaW5lX21hbGxvYyhzdHJsZW4oaWZyLmlmcl9uYW1lKSsxKSkpCisJeworCSAgc3RyY3B5KGlmYWNlLT5uYW1lLCBpZnIuaWZyX25hbWUpOworCSAgaWZhY2UtPm5leHQgPSBkYWVtb24tPmludGVyZmFjZXM7CisJICBkYWVtb24tPmludGVyZmFjZXMgPSBpZmFjZTsKKwkgIHJldHVybiAxOworCX0KKyAgICAgIGZyZWUoaWZhY2UpOworCisgICAgfQorICAKKyAgZXJybm8gPSBFTk9NRU07IAorICByZXR1cm4gMDsKK30KKworI2lmZGVmIEhBVkVfSVBWNgorc3RhdGljIGludCBpZmFjZV9hbGxvd2VkX3Y2KHN0cnVjdCBpbjZfYWRkciAqbG9jYWwsIGludCBwcmVmaXgsIAorCQkJICAgIGludCBzY29wZSwgaW50IGlmX2luZGV4LCBpbnQgZmxhZ3MsIAorCQkJICAgIGludCBwcmVmZXJyZWQsIGludCB2YWxpZCwgdm9pZCAqdnBhcmFtKQoreworICB1bmlvbiBteXNvY2thZGRyIGFkZHI7CisgIHN0cnVjdCBpbl9hZGRyIG5ldG1hc2s7IC8qIGR1bW15ICovCisgIG5ldG1hc2suc19hZGRyID0gMDsKKworICAodm9pZClzY29wZTsgLyogd2FybmluZyAqLworICAodm9pZClwcmVmZXJyZWQ7CisgICh2b2lkKXZhbGlkOworICAKKyAgbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgIGFkZHIuaW42LnNpbjZfbGVuID0gc2l6ZW9mKGFkZHIuaW42KTsKKyNlbmRpZgorICBhZGRyLmluNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworICBhZGRyLmluNi5zaW42X2FkZHIgPSAqbG9jYWw7CisgIGFkZHIuaW42LnNpbjZfcG9ydCA9IGh0b25zKGRhZW1vbi0+cG9ydCk7CisgIC8qIEZyZWVCU0QgaW5zaXN0cyB0aGlzIGlzIHplcm8gZm9yIG5vbi1saW5rbG9jYWwgYWRkcmVzc2VzICovCisgIGlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwobG9jYWwpKQorICAgIGFkZHIuaW42LnNpbjZfc2NvcGVfaWQgPSBpZl9pbmRleDsKKyAgZWxzZQorICAgIGFkZHIuaW42LnNpbjZfc2NvcGVfaWQgPSAwOworICAKKyAgcmV0dXJuIGlmYWNlX2FsbG93ZWQoKHN0cnVjdCBpZmFjZV9wYXJhbSAqKXZwYXJhbSwgaWZfaW5kZXgsIE5VTEwsICZhZGRyLCBuZXRtYXNrLCBwcmVmaXgsIGZsYWdzKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGlmYWNlX2FsbG93ZWRfdjQoc3RydWN0IGluX2FkZHIgbG9jYWwsIGludCBpZl9pbmRleCwgY2hhciAqbGFiZWwsCisJCQkgICAgc3RydWN0IGluX2FkZHIgbmV0bWFzaywgc3RydWN0IGluX2FkZHIgYnJvYWRjYXN0LCB2b2lkICp2cGFyYW0pCit7CisgIHVuaW9uIG15c29ja2FkZHIgYWRkcjsKKyAgaW50IHByZWZpeCwgYml0OworCisgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorICBhZGRyLmluLnNpbl9sZW4gPSBzaXplb2YoYWRkci5pbik7CisjZW5kaWYKKyAgYWRkci5pbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgYWRkci5pbi5zaW5fYWRkciA9IGJyb2FkY2FzdDsgLyogd2FybmluZyAqLworICBhZGRyLmluLnNpbl9hZGRyID0gbG9jYWw7CisgIGFkZHIuaW4uc2luX3BvcnQgPSBodG9ucyhkYWVtb24tPnBvcnQpOworCisgIC8qIGRldGVybWluZSBwcmVmaXggbGVuZ3RoIGZyb20gbmV0bWFzayAqLworICBmb3IgKHByZWZpeCA9IDMyLCBiaXQgPSAxOyAoYml0ICYgbnRvaGwobmV0bWFzay5zX2FkZHIpKSA9PSAwICYmIHByZWZpeCAhPSAwOyBiaXQgPSBiaXQgPDwgMSwgcHJlZml4LS0pOworCisgIHJldHVybiBpZmFjZV9hbGxvd2VkKChzdHJ1Y3QgaWZhY2VfcGFyYW0gKil2cGFyYW0sIGlmX2luZGV4LCBsYWJlbCwgJmFkZHIsIG5ldG1hc2ssIHByZWZpeCwgMCk7Cit9CisgICAKK2ludCBlbnVtZXJhdGVfaW50ZXJmYWNlcyhpbnQgcmVzZXQpCit7CisgIHN0YXRpYyBzdHJ1Y3QgYWRkcmxpc3QgKnNwYXJlID0gTlVMTDsKKyAgc3RhdGljIGludCBkb25lID0gMDsKKyAgc3RydWN0IGlmYWNlX3BhcmFtIHBhcmFtOworICBpbnQgZXJyc2F2ZSwgcmV0ID0gMTsKKyAgc3RydWN0IGFkZHJsaXN0ICphZGRyLCAqdG1wOworICBzdHJ1Y3QgaW50ZXJmYWNlX25hbWUgKmludG5hbWU7CisgIHN0cnVjdCBpcmVjICppZmFjZTsKKyNpZmRlZiBIQVZFX0FVVEgKKyAgc3RydWN0IGF1dGhfem9uZSAqem9uZTsKKyNlbmRpZgorCisgIC8qIERvIHRoaXMgbWF4IG9uY2UgcGVyIHNlbGVjdCBjeWNsZSAgLSBhbHNvIGluaGliaXRzIG5ldGxpbmsgc29ja2V0IHVzZQorICAgaW4gVENQIGNoaWxkIHByb2Nlc3Nlcy4gKi8KKworICBpZiAocmVzZXQpCisgICAgeworICAgICAgZG9uZSA9IDA7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgaWYgKGRvbmUpCisgICAgcmV0dXJuIDE7CisKKyAgZG9uZSA9IDE7CisKKyAgaWYgKChwYXJhbS5mZCA9IHNvY2tldChQRl9JTkVULCBTT0NLX0RHUkFNLCAwKSkgPT0gLTEpCisgICAgcmV0dXJuIDA7CisgCisgIC8qIE1hcmsgaW50ZXJmYWNlcyBmb3IgZ2FyYmFnZSBjb2xsZWN0aW9uICovCisgIGZvciAoaWZhY2UgPSBkYWVtb24tPmludGVyZmFjZXM7IGlmYWNlOyBpZmFjZSA9IGlmYWNlLT5uZXh0KSAKKyAgICBpZmFjZS0+Zm91bmQgPSAwOworCisgIC8qIHJlbW92ZSBhZGRyZXNzZXMgc3RvcmVkIGFnYWluc3QgaW50ZXJmYWNlX25hbWVzICovCisgIGZvciAoaW50bmFtZSA9IGRhZW1vbi0+aW50X25hbWVzOyBpbnRuYW1lOyBpbnRuYW1lID0gaW50bmFtZS0+bmV4dCkKKyAgICB7CisgICAgICBmb3IgKGFkZHIgPSBpbnRuYW1lLT5hZGRyOyBhZGRyOyBhZGRyID0gdG1wKQorCXsKKwkgIHRtcCA9IGFkZHItPm5leHQ7CisJICBhZGRyLT5uZXh0ID0gc3BhcmU7CisJICBzcGFyZSA9IGFkZHI7CisJfQorICAgICAgCisgICAgICBpbnRuYW1lLT5hZGRyID0gTlVMTDsKKyAgICB9CisKKyAgLyogUmVtb3ZlIGxpc3Qgb2YgYWRkcmVzc2VzIG9mIGxvY2FsIGludGVyZmFjZXMgKi8KKyAgZm9yIChhZGRyID0gZGFlbW9uLT5pbnRlcmZhY2VfYWRkcnM7IGFkZHI7IGFkZHIgPSB0bXApCisgICAgeworICAgICAgdG1wID0gYWRkci0+bmV4dDsKKyAgICAgIGFkZHItPm5leHQgPSBzcGFyZTsKKyAgICAgIHNwYXJlID0gYWRkcjsKKyAgICB9CisgIGRhZW1vbi0+aW50ZXJmYWNlX2FkZHJzID0gTlVMTDsKKyAgCisjaWZkZWYgSEFWRV9BVVRICisgIC8qIHJlbW92ZSBhZGRyZXNzZXMgc3RvcmVkIGFnYWluc3QgYXV0aF96b25lIHN1Ym5ldHMsIGJ1dCBub3QgCisgICBvbmVzIGNvbmZpZ3VyZWQgYXMgYWRkcmVzcyBsaXRlcmFscyAqLworICBmb3IgKHpvbmUgPSBkYWVtb24tPmF1dGhfem9uZXM7IHpvbmU7IHpvbmUgPSB6b25lLT5uZXh0KQorICAgIGlmICh6b25lLT5pbnRlcmZhY2VfbmFtZXMpCisgICAgICB7CisJc3RydWN0IGFkZHJsaXN0ICoqdXA7CisJZm9yICh1cCA9ICZ6b25lLT5zdWJuZXQsIGFkZHIgPSB6b25lLT5zdWJuZXQ7IGFkZHI7IGFkZHIgPSB0bXApCisJICB7CisJICAgIHRtcCA9IGFkZHItPm5leHQ7CisJICAgIGlmIChhZGRyLT5mbGFncyAmIEFERFJMSVNUX0xJVEVSQUwpCisJICAgICAgdXAgPSAmYWRkci0+bmV4dDsKKwkgICAgZWxzZQorCSAgICAgIHsKKwkJKnVwID0gYWRkci0+bmV4dDsKKwkJYWRkci0+bmV4dCA9IHNwYXJlOworCQlzcGFyZSA9IGFkZHI7CisJICAgICAgfQorCSAgfQorICAgICAgfQorI2VuZGlmCisKKyAgcGFyYW0uc3BhcmUgPSBzcGFyZTsKKyAgCisjaWZkZWYgSEFWRV9JUFY2CisgIHJldCA9IGlmYWNlX2VudW1lcmF0ZShBRl9JTkVUNiwgJnBhcmFtLCBpZmFjZV9hbGxvd2VkX3Y2KTsKKyNlbmRpZgorCisgIGlmIChyZXQpCisgICAgcmV0ID0gaWZhY2VfZW51bWVyYXRlKEFGX0lORVQsICZwYXJhbSwgaWZhY2VfYWxsb3dlZF92NCk7IAorIAorICBlcnJzYXZlID0gZXJybm87CisgIGNsb3NlKHBhcmFtLmZkKTsKKyAgCisgIGlmIChvcHRpb25fYm9vbChPUFRfQ0xFVkVSQklORCkpCisgICAgeyAKKyAgICAgIC8qIEdhcmJhZ2UtY29sbGVjdCBsaXN0ZW5lcnMgbGlzdGVuaW5nIG9uIGFkZHJlc3NlcyB0aGF0IG5vIGxvbmdlciBleGlzdC4KKwkgRG9lcyBub3RoaW5nIHdoZW4gbm90IGJpbmRpbmcgaW50ZXJmYWNlcyBvciBmb3IgbGlzdGVuZXJzIG9uIGxvY2FsaG9zdCwgCisJIHNpbmNlIHRoZSAtPmlmYWNlIGZpZWxkIGlzIE5VTEwuIE5vdGUgdGhhdCB0aGlzIG5lZWRzIHRoZSBwcm90ZWN0aW9ucworCSBhZ2FpbnN0IHJlLWVudHJhbmN5LCBoZW5jZSBpdCdzIGhlcmUuICBJdCBhbHNvIG1lYW5zIHRoZXJlJ3MgYSBwb3NzaWJpbGl0eSwKKwkgaW4gT1BUX0NMRVZFUkJJTkQgbW9kZSwgdGhhdCBhdCBsaXN0ZW5lciB3aWxsIGp1c3QgZGlzYXBwZWFyIGFmdGVyCisJIGEgY2FsbCB0byBlbnVtZXJhdGVfaW50ZXJmYWNlcywgdGhpcyBpcyBjaGVja2VkIE9LIG9uIGFsbCBjYWxscy4gKi8KKyAgICAgIHN0cnVjdCBsaXN0ZW5lciAqbCwgKnRtcCwgKip1cDsKKyAgICAgIAorICAgICAgZm9yICh1cCA9ICZkYWVtb24tPmxpc3RlbmVycywgbCA9IGRhZW1vbi0+bGlzdGVuZXJzOyBsOyBsID0gdG1wKQorCXsKKwkgIHRtcCA9IGwtPm5leHQ7CisJICAKKwkgIGlmICghbC0+aWZhY2UgfHwgbC0+aWZhY2UtPmZvdW5kKQorCSAgICB1cCA9ICZsLT5uZXh0OworCSAgZWxzZQorCSAgICB7CisJICAgICAgKnVwID0gbC0+bmV4dDsKKwkgICAgICAKKwkgICAgICAvKiBJbiBjYXNlIGl0IGV2ZXIgcmV0dXJucyAqLworCSAgICAgIGwtPmlmYWNlLT5kb25lID0gMDsKKwkgICAgICAKKwkgICAgICBpZiAobC0+ZmQgIT0gLTEpCisJCWNsb3NlKGwtPmZkKTsKKwkgICAgICBpZiAobC0+dGNwZmQgIT0gLTEpCisJCWNsb3NlKGwtPnRjcGZkKTsKKwkgICAgICBpZiAobC0+dGZ0cGZkICE9IC0xKQorCQljbG9zZShsLT50ZnRwZmQpOworCSAgICAgIAorCSAgICAgIGZyZWUobCk7CisJICAgIH0KKwl9CisgICAgfQorICAKKyAgZXJybm8gPSBlcnJzYXZlOworICBzcGFyZSA9IHBhcmFtLnNwYXJlOworICAgIAorICByZXR1cm4gcmV0OworfQorCisvKiBzZXQgTk9OQkxPQ0sgYml0IG9uIGZkOiBTZWUgU3RldmVucyAxNi42ICovCitpbnQgZml4X2ZkKGludCBmZCkKK3sKKyAgaW50IGZsYWdzOworCisgIGlmICgoZmxhZ3MgPSBmY250bChmZCwgRl9HRVRGTCkpID09IC0xIHx8CisgICAgICBmY250bChmZCwgRl9TRVRGTCwgZmxhZ3MgfCBPX05PTkJMT0NLKSA9PSAtMSkKKyAgICByZXR1cm4gMDsKKyAgCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IG1ha2Vfc29jayh1bmlvbiBteXNvY2thZGRyICphZGRyLCBpbnQgdHlwZSwgaW50IGRpZW5vdykKK3sKKyAgaW50IGZhbWlseSA9IGFkZHItPnNhLnNhX2ZhbWlseTsKKyAgaW50IGZkLCByYywgb3B0ID0gMTsKKyAgCisgIGlmICgoZmQgPSBzb2NrZXQoZmFtaWx5LCB0eXBlLCAwKSkgPT0gLTEpCisgICAgeworICAgICAgaW50IHBvcnQsIGVycnNhdjsKKyAgICAgIGNoYXIgKnM7CisKKyAgICAgIC8qIE5vIGVycm9yIGlmIHRoZSBrZXJuZWwganVzdCBkb2Vzbid0IHN1cHBvcnQgdGhpcyBJUCBmbGF2b3VyICovCisgICAgICBpZiAoZXJybm8gPT0gRVBST1RPTk9TVVBQT1JUIHx8CisJICBlcnJubyA9PSBFQUZOT1NVUFBPUlQgfHwKKwkgIGVycm5vID09IEVJTlZBTCkKKwlyZXR1cm4gLTE7CisgICAgICAKKyAgICBlcnI6CisgICAgICBlcnJzYXYgPSBlcnJubzsKKyAgICAgIHBvcnQgPSBwcmV0dHlwcmludF9hZGRyKGFkZHIsIGRhZW1vbi0+YWRkcmJ1ZmYpOworICAgICAgaWYgKCFvcHRpb25fYm9vbChPUFRfTk9XSUxEKSAmJiAhb3B0aW9uX2Jvb2woT1BUX0NMRVZFUkJJTkQpKQorCXNwcmludGYoZGFlbW9uLT5hZGRyYnVmZiwgInBvcnQgJWQiLCBwb3J0KTsKKyAgICAgIHMgPSBfKCJmYWlsZWQgdG8gY3JlYXRlIGxpc3RlbmluZyBzb2NrZXQgZm9yICVzOiAlcyIpOworICAgICAgCisgICAgICBpZiAoZmQgIT0gLTEpCisJY2xvc2UgKGZkKTsKKwkKKyAgICAgIGVycm5vID0gZXJyc2F2OworCisgICAgICBpZiAoZGllbm93KQorCXsKKwkgIC8qIGZhaWx1cmUgdG8gYmluZCBhZGRyZXNzZXMgZ2l2ZW4gYnkgLS1saXN0ZW4tYWRkcmVzcyBhdCB0aGlzIHBvaW50CisJICAgICBpcyBPSyBpZiB3ZSdyZSBkb2luZyBiaW5kLWR5bmFtaWMgKi8KKwkgIGlmICghb3B0aW9uX2Jvb2woT1BUX0NMRVZFUkJJTkQpKQorCSAgICBkaWUocywgZGFlbW9uLT5hZGRyYnVmZiwgRUNfQkFETkVUKTsKKwl9CisgICAgICBlbHNlCisJbXlfc3lzbG9nKExPR19XQVJOSU5HLCBzLCBkYWVtb24tPmFkZHJidWZmLCBzdHJlcnJvcihlcnJubykpOworICAgICAgCisgICAgICByZXR1cm4gLTE7CisgICAgfQkKKyAgCisgIGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsICZvcHQsIHNpemVvZihvcHQpKSA9PSAtMSB8fCAhZml4X2ZkKGZkKSkKKyAgICBnb3RvIGVycjsKKyAgCisjaWZkZWYgSEFWRV9JUFY2CisgIGlmIChmYW1pbHkgPT0gQUZfSU5FVDYgJiYgc2V0c29ja29wdChmZCwgSVBQUk9UT19JUFY2LCBJUFY2X1Y2T05MWSwgJm9wdCwgc2l6ZW9mKG9wdCkpID09IC0xKQorICAgIGdvdG8gZXJyOworI2VuZGlmCisgIAorICBpZiAoKHJjID0gYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHIsIHNhX2xlbihhZGRyKSkpID09IC0xKQorICAgIGdvdG8gZXJyOworICAKKyAgaWYgKHR5cGUgPT0gU09DS19TVFJFQU0pCisgICAgeworICAgICAgaWYgKGxpc3RlbihmZCwgNSkgPT0gLTEpCisJZ290byBlcnI7CisgICAgfQorICBlbHNlIGlmIChmYW1pbHkgPT0gQUZfSU5FVCkKKyAgICB7CisgICAgICBpZiAoIW9wdGlvbl9ib29sKE9QVF9OT1dJTEQpKQorCXsKKyNpZiBkZWZpbmVkKEhBVkVfTElOVVhfTkVUV09SSykgCisJICBpZiAoc2V0c29ja29wdChmZCwgSVBQUk9UT19JUCwgSVBfUEtUSU5GTywgJm9wdCwgc2l6ZW9mKG9wdCkpID09IC0xKQorCSAgICBnb3RvIGVycjsKKyNlbGlmIGRlZmluZWQoSVBfUkVDVkRTVEFERFIpICYmIGRlZmluZWQoSVBfUkVDVklGKQorCSAgaWYgKHNldHNvY2tvcHQoZmQsIElQUFJPVE9fSVAsIElQX1JFQ1ZEU1RBRERSLCAmb3B0LCBzaXplb2Yob3B0KSkgPT0gLTEgfHwKKwkgICAgICBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQLCBJUF9SRUNWSUYsICZvcHQsIHNpemVvZihvcHQpKSA9PSAtMSkKKwkgICAgZ290byBlcnI7CisjZW5kaWYKKwl9CisgICAgfQorI2lmZGVmIEhBVkVfSVBWNgorICBlbHNlIGlmICghc2V0X2lwdjZwa3RpbmZvKGZkKSkKKyAgICBnb3RvIGVycjsKKyNlbmRpZgorICAKKyAgcmV0dXJuIGZkOworfQorCisjaWZkZWYgSEFWRV9JUFY2ICAKK2ludCBzZXRfaXB2NnBrdGluZm8oaW50IGZkKQoreworICBpbnQgb3B0ID0gMTsKKworICAvKiBUaGUgQVBJIGNoYW5nZWQgYXJvdW5kIExpbnV4IDIuNi4xNCBidXQgdGhlIG9sZCBBQkkgaXMgc3RpbGwgc3VwcG9ydGVkOgorICAgICBoYW5kbGUgYWxsIGNvbWJpbmF0aW9ucyBvZiBoZWFkZXJzIGFuZCBrZXJuZWwuCisgICAgIE9wZW5XcnQgbm90ZSB0aGF0IHRoaXMgZml4ZXMgdGhlIHByb2JsZW0gYWRkcmVzc2VkIGJ5IHlvdXIgdmVyeSBicm9rZW4gcGF0Y2guICovCisgIGRhZW1vbi0+djZwa3RpbmZvID0gSVBWNl9QS1RJTkZPOworICAKKyNpZmRlZiBJUFY2X1JFQ1ZQS1RJTkZPCisgIGlmIChzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQVjYsIElQVjZfUkVDVlBLVElORk8sICZvcHQsIHNpemVvZihvcHQpKSAhPSAtMSkKKyAgICByZXR1cm4gMTsKKyMgaWZkZWYgSVBWNl8yMjkyUEtUSU5GTworICBlbHNlIGlmIChlcnJubyA9PSBFTk9QUk9UT09QVCAmJiBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQVjYsIElQVjZfMjI5MlBLVElORk8sICZvcHQsIHNpemVvZihvcHQpKSAhPSAtMSkKKyAgICB7CisgICAgICBkYWVtb24tPnY2cGt0aW5mbyA9IElQVjZfMjI5MlBLVElORk87CisgICAgICByZXR1cm4gMTsKKyAgICB9CisjIGVuZGlmIAorI2Vsc2UKKyAgaWYgKHNldHNvY2tvcHQoZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9QS1RJTkZPLCAmb3B0LCBzaXplb2Yob3B0KSkgIT0gLTEpCisgICAgcmV0dXJuIDE7CisjZW5kaWYKKworICByZXR1cm4gMDsKK30KKyNlbmRpZgorCisKKy8qIEZpbmQgdGhlIGludGVyZmFjZSBvbiB3aGljaCBhIFRDUCBjb25uZWN0aW9uIGFycml2ZWQsIGlmIHBvc3NpYmxlLCBvciB6ZXJvIG90aGVyd2lzZS4gKi8KK2ludCB0Y3BfaW50ZXJmYWNlKGludCBmZCwgaW50IGFmKQoreyAKKyAgaW50IGlmX2luZGV4ID0gMDsKKworI2lmZGVmIEhBVkVfTElOVVhfTkVUV09SSworICBpbnQgb3B0ID0gMTsKKyAgc3RydWN0IGNtc2doZHIgKmNtcHRyOworICBzdHJ1Y3QgbXNnaGRyIG1zZzsKKyAgCisgIC8qIHVzZSBtc2hkciBkbyB0aGF0IHRoZSBDTVNER18qIG1hY3JvcyBhcmUgYXZhaWxhYmxlICovCisgIG1zZy5tc2dfY29udHJvbCA9IGRhZW1vbi0+cGFja2V0OworICBtc2cubXNnX2NvbnRyb2xsZW4gPSBkYWVtb24tPnBhY2tldF9idWZmX3N6OworICAKKyAgLyogd2Ugb3Zlcndyb3RlIHRoZSBidWZmZXIuLi4gKi8KKyAgZGFlbW9uLT5zcnZfc2F2ZSA9IE5VTEw7CisgIAorICBpZiAoYWYgPT0gQUZfSU5FVCkKKyAgICB7CisgICAgICBpZiAoc2V0c29ja29wdChmZCwgSVBQUk9UT19JUCwgSVBfUEtUSU5GTywgJm9wdCwgc2l6ZW9mKG9wdCkpICE9IC0xICYmCisJICBnZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQLCBJUF9QS1RPUFRJT05TLCBtc2cubXNnX2NvbnRyb2wsIChzb2NrbGVuX3QgKikmbXNnLm1zZ19jb250cm9sbGVuKSAhPSAtMSkKKwlmb3IgKGNtcHRyID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY21wdHI7IGNtcHRyID0gQ01TR19OWFRIRFIoJm1zZywgY21wdHIpKQorCSAgaWYgKGNtcHRyLT5jbXNnX2xldmVsID09IElQUFJPVE9fSVAgJiYgY21wdHItPmNtc2dfdHlwZSA9PSBJUF9QS1RJTkZPKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYzsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5fcGt0aW5mbyAqcDsKKyAgICAgICAgICAgICAgfSBwOworCSAgICAgIAorCSAgICAgIHAuYyA9IENNU0dfREFUQShjbXB0cik7CisJICAgICAgaWZfaW5kZXggPSBwLnAtPmlwaV9pZmluZGV4OworCSAgICB9CisgICAgfQorI2lmZGVmIEhBVkVfSVBWNgorICBlbHNlCisgICAgeworICAgICAgLyogT25seSB0aGUgUkZDLTIyOTIgQVBJIGhhcyB0aGUgYWJpbGl0eSB0byBmaW5kIHRoZSBpbnRlcmZhY2UgZm9yIFRDUCBjb25uZWN0aW9ucywKKwkgaXQgd2FzIHJlbW92ZWQgaW4gUkZDLTM1NDIgISEhISAKKworCSBGb3J0dW5hdGVseSwgTGludXgga2VwdCB0aGUgMjI5MiBBQkkgd2hlbiBpdCBtb3ZlZCB0byAzNTQyLiBUaGUgZm9sbG93aW5nIGNvZGUgYWx3YXlzCisJIHVzZXMgdGhlIG9sZCBBQkksIGFuZCBzaG91bGQgd29yayB3aXRoIHByZS0gYW5kIHBvc3QtMzU0MiBrZXJuZWwgaGVhZGVycyAqLworCisjaWZkZWYgSVBWNl8yMjkyUEtUT1BUSU9OUyAgIAorIyAgZGVmaW5lIFBLVE9QVElPTlMgSVBWNl8yMjkyUEtUT1BUSU9OUworI2Vsc2UKKyMgIGRlZmluZSBQS1RPUFRJT05TIElQVjZfUEtUT1BUSU9OUworI2VuZGlmCisKKyAgICAgIGlmIChzZXRfaXB2NnBrdGluZm8oZmQpICYmCisJICBnZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQVjYsIFBLVE9QVElPTlMsIG1zZy5tc2dfY29udHJvbCwgKHNvY2tsZW5fdCAqKSZtc2cubXNnX2NvbnRyb2xsZW4pICE9IC0xKQorCXsKKyAgICAgICAgICBmb3IgKGNtcHRyID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY21wdHI7IGNtcHRyID0gQ01TR19OWFRIRFIoJm1zZywgY21wdHIpKQorICAgICAgICAgICAgaWYgKGNtcHRyLT5jbXNnX2xldmVsID09IElQUFJPVE9fSVBWNiAmJiBjbXB0ci0+Y21zZ190eXBlID09IGRhZW1vbi0+djZwa3RpbmZvKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5pb24geworICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYzsKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbjZfcGt0aW5mbyAqcDsKKyAgICAgICAgICAgICAgICB9IHA7CisgICAgICAgICAgICAgICAgcC5jID0gQ01TR19EQVRBKGNtcHRyKTsKKwkJCisJCWlmX2luZGV4ID0gcC5wLT5pcGk2X2lmaW5kZXg7CisgICAgICAgICAgICAgIH0KKwl9CisgICAgfQorI2VuZGlmIC8qIElQVjYgKi8KKyNlbmRpZiAvKiBMaW51eCAqLworIAorICByZXR1cm4gaWZfaW5kZXg7Cit9CisgICAgICAKK3N0YXRpYyBzdHJ1Y3QgbGlzdGVuZXIgKmNyZWF0ZV9saXN0ZW5lcnModW5pb24gbXlzb2NrYWRkciAqYWRkciwgaW50IGRvX3RmdHAsIGludCBkaWVub3cpCit7CisgIHN0cnVjdCBsaXN0ZW5lciAqbCA9IE5VTEw7CisgIGludCBmZCA9IC0xLCB0Y3BmZCA9IC0xLCB0ZnRwZmQgPSAtMTsKKworICAodm9pZClkb190ZnRwOworCisgIGlmIChkYWVtb24tPnBvcnQgIT0gMCkKKyAgICB7CisgICAgICBmZCA9IG1ha2Vfc29jayhhZGRyLCBTT0NLX0RHUkFNLCBkaWVub3cpOworICAgICAgdGNwZmQgPSBtYWtlX3NvY2soYWRkciwgU09DS19TVFJFQU0sIGRpZW5vdyk7CisgICAgfQorICAKKyNpZmRlZiBIQVZFX1RGVFAKKyAgaWYgKGRvX3RmdHApCisgICAgeworICAgICAgaWYgKGFkZHItPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorCXsKKwkgIC8qIHBvcnQgbXVzdCBiZSByZXN0b3JlZCB0byBETlMgcG9ydCBmb3IgVENQIGNvZGUgKi8KKwkgIHNob3J0IHNhdmUgPSBhZGRyLT5pbi5zaW5fcG9ydDsKKwkgIGFkZHItPmluLnNpbl9wb3J0ID0gaHRvbnMoVEZUUF9QT1JUKTsKKwkgIHRmdHBmZCA9IG1ha2Vfc29jayhhZGRyLCBTT0NLX0RHUkFNLCBkaWVub3cpOworCSAgYWRkci0+aW4uc2luX3BvcnQgPSBzYXZlOworCX0KKyMgIGlmZGVmIEhBVkVfSVBWNgorICAgICAgZWxzZQorCXsKKwkgIHNob3J0IHNhdmUgPSBhZGRyLT5pbjYuc2luNl9wb3J0OworCSAgYWRkci0+aW42LnNpbjZfcG9ydCA9IGh0b25zKFRGVFBfUE9SVCk7CisJICB0ZnRwZmQgPSBtYWtlX3NvY2soYWRkciwgU09DS19ER1JBTSwgZGllbm93KTsKKwkgIGFkZHItPmluNi5zaW42X3BvcnQgPSBzYXZlOworCX0gIAorIyAgZW5kaWYKKyAgICB9CisjZW5kaWYKKworICBpZiAoZmQgIT0gLTEgfHwgdGNwZmQgIT0gLTEgfHwgdGZ0cGZkICE9IC0xKQorICAgIHsKKyAgICAgIGwgPSBzYWZlX21hbGxvYyhzaXplb2Yoc3RydWN0IGxpc3RlbmVyKSk7CisgICAgICBsLT5uZXh0ID0gTlVMTDsKKyAgICAgIGwtPmZhbWlseSA9IGFkZHItPnNhLnNhX2ZhbWlseTsKKyAgICAgIGwtPmZkID0gZmQ7CisgICAgICBsLT50Y3BmZCA9IHRjcGZkOworICAgICAgbC0+dGZ0cGZkID0gdGZ0cGZkOwkKKyAgICAgIGwtPmlmYWNlID0gTlVMTDsKKyAgICB9CisKKyAgcmV0dXJuIGw7Cit9CisKK3ZvaWQgY3JlYXRlX3dpbGRjYXJkX2xpc3RlbmVycyh2b2lkKQoreworICB1bmlvbiBteXNvY2thZGRyIGFkZHI7CisgIHN0cnVjdCBsaXN0ZW5lciAqbCwgKmw2OworCisgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorICBhZGRyLmluLnNpbl9sZW4gPSBzaXplb2YoYWRkci5pbik7CisjZW5kaWYKKyAgYWRkci5pbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgYWRkci5pbi5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOworICBhZGRyLmluLnNpbl9wb3J0ID0gaHRvbnMoZGFlbW9uLT5wb3J0KTsKKworICBsID0gY3JlYXRlX2xpc3RlbmVycygmYWRkciwgISFvcHRpb25fYm9vbChPUFRfVEZUUCksIDEpOworCisjaWZkZWYgSEFWRV9JUFY2CisgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyMgIGlmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgIGFkZHIuaW42LnNpbjZfbGVuID0gc2l6ZW9mKGFkZHIuaW42KTsKKyMgIGVuZGlmCisgIGFkZHIuaW42LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgIGFkZHIuaW42LnNpbjZfYWRkciA9IGluNmFkZHJfYW55OworICBhZGRyLmluNi5zaW42X3BvcnQgPSBodG9ucyhkYWVtb24tPnBvcnQpOworIAorICBsNiA9IGNyZWF0ZV9saXN0ZW5lcnMoJmFkZHIsICEhb3B0aW9uX2Jvb2woT1BUX1RGVFApLCAxKTsKKyAgaWYgKGwpIAorICAgIGwtPm5leHQgPSBsNjsKKyAgZWxzZSAKKyAgICBsID0gbDY7CisjZW5kaWYKKworICBkYWVtb24tPmxpc3RlbmVycyA9IGw7Cit9CisKK3ZvaWQgY3JlYXRlX2JvdW5kX2xpc3RlbmVycyhpbnQgZGllbm93KQoreworICBzdHJ1Y3QgbGlzdGVuZXIgKm5ldzsKKyAgc3RydWN0IGlyZWMgKmlmYWNlOworICBzdHJ1Y3QgaW5hbWUgKmlmX3RtcDsKKworICBmb3IgKGlmYWNlID0gZGFlbW9uLT5pbnRlcmZhY2VzOyBpZmFjZTsgaWZhY2UgPSBpZmFjZS0+bmV4dCkKKyAgICBpZiAoIWlmYWNlLT5kb25lICYmICFpZmFjZS0+ZGFkICYmIGlmYWNlLT5mb3VuZCAmJgorCShuZXcgPSBjcmVhdGVfbGlzdGVuZXJzKCZpZmFjZS0+YWRkciwgaWZhY2UtPnRmdHBfb2ssIGRpZW5vdykpKQorICAgICAgeworCW5ldy0+aWZhY2UgPSBpZmFjZTsKKwluZXctPm5leHQgPSBkYWVtb24tPmxpc3RlbmVyczsKKwlkYWVtb24tPmxpc3RlbmVycyA9IG5ldzsKKwlpZmFjZS0+ZG9uZSA9IDE7CisgICAgICB9CisKKyAgLyogQ2hlY2sgZm9yIC0tbGlzdGVuLWFkZHJlc3Mgb3B0aW9ucyB0aGF0IGhhdmVuJ3QgYmVlbiB1c2VkIGJlY2F1c2UgdGhlcmUncworICAgICBubyBpbnRlcmZhY2Ugd2l0aCBhIG1hdGNoaW5nIGFkZHJlc3MuIFRoZXNlIG1heSBiZSB2YWxpZDogZWcgaXQncyBwb3NzaWJsZQorICAgICB0byBsaXN0ZW4gb24gMTI3LjAuMS4xIGV2ZW4gaWYgdGhlIGxvb3BiYWNrIGludGVyZmFjZSBpcyAxMjcuMC4wLjEKKworICAgICBJZiB0aGUgYWRkcmVzcyBpc24ndCB2YWxpZCB0aGUgYmluZCgpIHdpbGwgZmFpbCBhbmQgd2UnbGwgZGllKCkgCisgICAgIChleGNlcHQgaW4gYmluZC1keW5hbWljIG1vZGUsIHdoZW4gd2UnbGwgY29tcGxhaW4gYnV0IGtlZXAgdHJ5aW5nLikKKworICAgICBUaGUgcmVzdWx0aW5nIGxpc3RlbmVycyBoYXZlIHRoZSAtPmlmYWNlIGZpZWxkIE5VTEwsIGFuZCB0aGlzIGhhcyB0byBiZQorICAgICBoYW5kbGVkIGJ5IHRoZSBETlMgYW5kIFRGVFAgY29kZS4gSXQgZGlzYWJsZXMgLS1sb2NhbGlzZS1xdWVyaWVzIHByb2Nlc3NpbmcKKyAgICAgKG5vIG5ldG1hc2spIGFuZCBzb21lIE1UVSBsb2dpbiB0aGUgdGZ0cCBjb2RlLiAqLworCisgIGZvciAoaWZfdG1wID0gZGFlbW9uLT5pZl9hZGRyczsgaWZfdG1wOyBpZl90bXAgPSBpZl90bXAtPm5leHQpCisgICAgaWYgKCFpZl90bXAtPnVzZWQgJiYgCisJKG5ldyA9IGNyZWF0ZV9saXN0ZW5lcnMoJmlmX3RtcC0+YWRkciwgISFvcHRpb25fYm9vbChPUFRfVEZUUCksIGRpZW5vdykpKQorICAgICAgeworCW5ldy0+bmV4dCA9IGRhZW1vbi0+bGlzdGVuZXJzOworCWRhZW1vbi0+bGlzdGVuZXJzID0gbmV3OworICAgICAgfQorfQorCisvKiBJbiAtLWJpbmQtaW50ZXJmYWNlcywgdGhlIG9ubHkgYWNjZXNzIGNvbnRyb2wgaXMgdGhlIGFkZHJlc3NlcyB3ZSdyZSBsaXN0ZW5pbmcgb24uIAorICAgVGhlcmUncyBub3RoaW5nIHRvIGF2b2lkIGEgcXVlcnkgdG8gdGhlIGFkZHJlc3Mgb2YgYW4gaW50ZXJuYWwgaW50ZXJmYWNlIGFycml2aW5nIHZpYQorICAgYW4gZXh0ZXJuYWwgaW50ZXJmYWNlIHdoZXJlIHdlIGRvbid0IHdhbnQgdG8gYWNjZXB0IHF1ZXJpZXMsIGV4Y2VwdCB0aGF0IGluIHRoZSB1c3VhbCAKKyAgIGNhc2UgdGhlIGFkZHJlc3NlcyBvZiBpbnRlcm5hbCBpbnRlcmZhY2VzIGFyZSBSRkMxOTE4LiBXaGVuIGJpbmQtaW50ZXJmYWNlcyBpbiB1c2UsIAorICAgYW5kIHdlIGxpc3RlbiBvbiBhbiBhZGRyZXNzIHRoYXQgbG9va3MgbGlrZSBpdCdzIHByb2JhYmx5IGdsb2JhbGx5IHJvdXRlYWJsZSwgc2hvdXQuCisKKyAgIFRoZSBmaXggaXMgdG8gdXNlIC0tYmluZC1keW5hbWljLCB3aGljaCBhY3R1YWxseSBjaGVja3MgdGhlIGFycml2YWwgaW50ZXJmYWNlIHRvby4KKyAgIFRvdWdoIGlmIHlvdXIgcGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0IHRoaXMuCisKKyAgIE5vdGUgdGhhdCBjaGVja2luZyB0aGUgYXJyaXZhbCBpbnRlcmZhY2UgaXMgc3VwcG9ydGVkIGluIHRoZSBzdGFuZGFyZCBJUHY2IEFQSSBhbmQKKyAgIGFsd2F5cyBkb25lLCBzbyB3ZSBkb24ndCB3YXJuIGFib3V0IGFueSBJUHY2IGFkZHJlc3NlcyBoZXJlLgorKi8KKwordm9pZCB3YXJuX2JvdW5kX2xpc3RlbmVycyh2b2lkKQoreworICBzdHJ1Y3QgaXJlYyAqaWZhY2U7IAkKKyAgaW50IGFkdmljZSA9IDA7CisKKyAgZm9yIChpZmFjZSA9IGRhZW1vbi0+aW50ZXJmYWNlczsgaWZhY2U7IGlmYWNlID0gaWZhY2UtPm5leHQpCisgICAgaWYgKCFpZmFjZS0+ZG5zX2F1dGgpCisgICAgICB7CisJaWYgKGlmYWNlLT5hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorCSAgeworCSAgICBpZiAoIXByaXZhdGVfbmV0KGlmYWNlLT5hZGRyLmluLnNpbl9hZGRyLCAxKSkKKwkgICAgICB7CisJCWluZXRfbnRvcChBRl9JTkVULCAmaWZhY2UtPmFkZHIuaW4uc2luX2FkZHIsIGRhZW1vbi0+YWRkcmJ1ZmYsIEFERFJTVFJMRU4pOworCQlpZmFjZS0+d2FybmVkID0gYWR2aWNlID0gMTsKKwkJbXlfc3lzbG9nKExPR19XQVJOSU5HLCAKKwkJCSAgXygiTE9VRCBXQVJOSU5HOiBsaXN0ZW5pbmcgb24gJXMgbWF5IGFjY2VwdCByZXF1ZXN0cyB2aWEgaW50ZXJmYWNlcyBvdGhlciB0aGFuICVzIiksCisJCQkgIGRhZW1vbi0+YWRkcmJ1ZmYsIGlmYWNlLT5uYW1lKTsKKwkgICAgICB9CisJICB9CisgICAgICB9CisgIAorICBpZiAoYWR2aWNlKQorICAgIG15X3N5c2xvZyhMT0dfV0FSTklORywgXygiTE9VRCBXQVJOSU5HOiB1c2UgLS1iaW5kLWR5bmFtaWMgcmF0aGVyIHRoYW4gLS1iaW5kLWludGVyZmFjZXMgdG8gYXZvaWQgRE5TIGFtcGxpZmljYXRpb24gYXR0YWNrcyB2aWEgdGhlc2UgaW50ZXJmYWNlKHMpIikpOyAKK30KKwordm9pZCB3YXJuX2ludF9uYW1lcyh2b2lkKQoreworICBzdHJ1Y3QgaW50ZXJmYWNlX25hbWUgKmludG5hbWU7CisgCisgIGZvciAoaW50bmFtZSA9IGRhZW1vbi0+aW50X25hbWVzOyBpbnRuYW1lOyBpbnRuYW1lID0gaW50bmFtZS0+bmV4dCkKKyAgICBpZiAoIWludG5hbWUtPmFkZHIpCisgICAgICBteV9zeXNsb2coTE9HX1dBUk5JTkcsIF8oIndhcm5pbmc6IG5vIGFkZHJlc3NlcyBmb3VuZCBmb3IgaW50ZXJmYWNlICVzIiksIGludG5hbWUtPmludHIpOworfQorIAoraW50IGlzX2RhZF9saXN0ZW5lcnModm9pZCkKK3sKKyAgc3RydWN0IGlyZWMgKmlmYWNlOworICAKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9OT1dJTEQpKQorICAgIGZvciAoaWZhY2UgPSBkYWVtb24tPmludGVyZmFjZXM7IGlmYWNlOyBpZmFjZSA9IGlmYWNlLT5uZXh0KQorICAgICAgaWYgKGlmYWNlLT5kYWQgJiYgIWlmYWNlLT5kb25lKQorCXJldHVybiAxOworICAKKyAgcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBIQVZFX0RIQ1A2Cit2b2lkIGpvaW5fbXVsdGljYXN0KGludCBkaWVub3cpICAgICAgCit7CisgIHN0cnVjdCBpcmVjICppZmFjZSwgKnRtcDsKKworICBmb3IgKGlmYWNlID0gZGFlbW9uLT5pbnRlcmZhY2VzOyBpZmFjZTsgaWZhY2UgPSBpZmFjZS0+bmV4dCkKKyAgICBpZiAoaWZhY2UtPmFkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2ICYmIGlmYWNlLT5kaGNwX29rICYmICFpZmFjZS0+bXVsdGljYXN0X2RvbmUpCisgICAgICB7CisJLyogVGhlcmUncyBhbiBpcmVjIHBlciBhZGRyZXNzIGJ1dCB3ZSBvbmx5IHdhbnQgdG8gam9pbiBmb3IgbXVsdGljYXN0IAorCSAgIG9uY2UgcGVyIGludGVyZmFjZS4gV2VlZCBvdXQgZHVwbGljYXRlcy4gKi8KKwlmb3IgKHRtcCA9IGRhZW1vbi0+aW50ZXJmYWNlczsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCisJICBpZiAodG1wLT5tdWx0aWNhc3RfZG9uZSAmJiB0bXAtPmluZGV4ID09IGlmYWNlLT5pbmRleCkKKwkgICAgYnJlYWs7CisJCisJaWZhY2UtPm11bHRpY2FzdF9kb25lID0gMTsKKwkKKwlpZiAoIXRtcCkKKwkgIHsKKwkgICAgc3RydWN0IGlwdjZfbXJlcSBtcmVxOworCSAgICBpbnQgZXJyID0gMDsKKworCSAgICBtcmVxLmlwdjZtcl9pbnRlcmZhY2UgPSBpZmFjZS0+aW5kZXg7CisJICAgIAorCSAgICBpbmV0X3B0b24oQUZfSU5FVDYsIEFMTF9SRUxBWV9BR0VOVFNfQU5EX1NFUlZFUlMsICZtcmVxLmlwdjZtcl9tdWx0aWFkZHIpOworCSAgICAKKwkgICAgaWYgKChkYWVtb24tPmRvaW5nX2RoY3A2IHx8IGRhZW1vbi0+cmVsYXk2KSAmJgorCQlzZXRzb2Nrb3B0KGRhZW1vbi0+ZGhjcDZmZCwgSVBQUk9UT19JUFY2LCBJUFY2X0pPSU5fR1JPVVAsICZtcmVxLCBzaXplb2YobXJlcSkpID09IC0xKQorCSAgICAgIGVyciA9IDE7CisJICAgIAorCSAgICBpbmV0X3B0b24oQUZfSU5FVDYsIEFMTF9TRVJWRVJTLCAmbXJlcS5pcHY2bXJfbXVsdGlhZGRyKTsKKwkgICAgCisJICAgIGlmIChkYWVtb24tPmRvaW5nX2RoY3A2ICYmIAorCQlzZXRzb2Nrb3B0KGRhZW1vbi0+ZGhjcDZmZCwgSVBQUk9UT19JUFY2LCBJUFY2X0pPSU5fR1JPVVAsICZtcmVxLCBzaXplb2YobXJlcSkpID09IC0xKQorCSAgICAgIGVyciA9IDE7CisJICAgIAorCSAgICBpbmV0X3B0b24oQUZfSU5FVDYsIEFMTF9ST1VURVJTLCAmbXJlcS5pcHY2bXJfbXVsdGlhZGRyKTsKKwkgICAgCisJICAgIGlmIChkYWVtb24tPmRvaW5nX3JhICYmCisJCXNldHNvY2tvcHQoZGFlbW9uLT5pY21wNmZkLCBJUFBST1RPX0lQVjYsIElQVjZfSk9JTl9HUk9VUCwgJm1yZXEsIHNpemVvZihtcmVxKSkgPT0gLTEpCisJICAgICAgZXJyID0gMTsKKwkgICAgCisJICAgIGlmIChlcnIpCisJICAgICAgeworCQljaGFyICpzID0gXygiaW50ZXJmYWNlICVzIGZhaWxlZCB0byBqb2luIERIQ1B2NiBtdWx0aWNhc3QgZ3JvdXA6ICVzIik7CisJCWlmIChkaWVub3cpCisJCSAgZGllKHMsIGlmYWNlLT5uYW1lLCBFQ19CQURORVQpOworCQllbHNlCisJCSAgbXlfc3lzbG9nKExPR19FUlIsIHMsIGlmYWNlLT5uYW1lLCBzdHJlcnJvcihlcnJubykpOworCSAgICAgIH0KKwkgIH0KKyAgICAgIH0KK30KKyNlbmRpZgorCisvKiByZXR1cm4gYSBVRFAgc29ja2V0IGJvdW5kIHRvIGEgcmFuZG9tIHBvcnQsIGhhdmUgdG8gY29wZSB3aXRoIHN0cmF5aW5nIGludG8KKyAgIG9jY3VwaWVkIHBvcnQgbm9zIGFuZCByZXNlcnZlZCBvbmVzLiAqLworaW50IHJhbmRvbV9zb2NrKGludCBmYW1pbHkpCit7CisgIGludCBmZDsKKworICBpZiAoKGZkID0gc29ja2V0KGZhbWlseSwgU09DS19ER1JBTSwgMCkpICE9IC0xKQorICAgIHsKKyAgICAgIHVuaW9uIG15c29ja2FkZHIgYWRkcjsKKyAgICAgIHVuc2lnbmVkIGludCBwb3J0c19hdmFpbCA9IDY1NTM2dSAtICh1bnNpZ25lZCBzaG9ydClkYWVtb24tPm1pbl9wb3J0OworICAgICAgaW50IHRyaWVzID0gcG9ydHNfYXZhaWwgPCAzMCA/IDMgKiBwb3J0c19hdmFpbCA6IDEwMDsKKworICAgICAgbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworICAgICAgYWRkci5zYS5zYV9mYW1pbHkgPSBmYW1pbHk7CisKKyAgICAgIC8qIGRvbid0IGxvb3AgZm9yZXZlciBpZiBhbGwgcG9ydHMgaW4gdXNlLiAqLworCisgICAgICBpZiAoZml4X2ZkKGZkKSkKKwl3aGlsZSh0cmllcy0tKQorCSAgeworCSAgICB1bnNpZ25lZCBzaG9ydCBwb3J0ID0gcmFuZDE2KCk7CisJICAgIAorCSAgICBpZiAoZGFlbW9uLT5taW5fcG9ydCAhPSAwKQorCSAgICAgIHBvcnQgPSBodG9ucyhkYWVtb24tPm1pbl9wb3J0ICsgKHBvcnQgJSAoKHVuc2lnbmVkIHNob3J0KXBvcnRzX2F2YWlsKSkpOworCSAgICAKKwkgICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUKSAKKwkgICAgICB7CisJCWFkZHIuaW4uc2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKKwkJYWRkci5pbi5zaW5fcG9ydCA9IHBvcnQ7CisjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKwkJYWRkci5pbi5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwkgICAgICB9CisjaWZkZWYgSEFWRV9JUFY2CisJICAgIGVsc2UKKwkgICAgICB7CisJCWFkZHIuaW42LnNpbjZfYWRkciA9IGluNmFkZHJfYW55OyAKKwkJYWRkci5pbjYuc2luNl9wb3J0ID0gcG9ydDsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorCQlhZGRyLmluNi5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorCSAgICAgIH0KKyNlbmRpZgorCSAgICAKKwkgICAgaWYgKGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgc2FfbGVuKCZhZGRyKSkgPT0gMCkKKwkgICAgICByZXR1cm4gZmQ7CisJICAgIAorCSAgICBpZiAoZXJybm8gIT0gRUFERFJJTlVTRSAmJiBlcnJubyAhPSBFQUNDRVMpCisJICAgICAgYnJlYWs7CisJICB9CisKKyAgICAgIGNsb3NlKGZkKTsKKyAgICB9CisKKyAgcmV0dXJuIC0xOyAKK30KKyAgCisKK2ludCBsb2NhbF9iaW5kKGludCBmZCwgdW5pb24gbXlzb2NrYWRkciAqYWRkciwgY2hhciAqaW50bmFtZSwgaW50IGlzX3RjcCkKK3sKKyAgdW5pb24gbXlzb2NrYWRkciBhZGRyX2NvcHkgPSAqYWRkcjsKKworICAvKiBjYW5ub3Qgc2V0IHNvdXJjZSBfcG9ydF8gZm9yIFRDUCBjb25uZWN0aW9ucy4gKi8KKyAgaWYgKGlzX3RjcCkKKyAgICB7CisgICAgICBpZiAoYWRkcl9jb3B5LnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorCWFkZHJfY29weS5pbi5zaW5fcG9ydCA9IDA7CisjaWZkZWYgSEFWRV9JUFY2CisgICAgICBlbHNlCisJYWRkcl9jb3B5LmluNi5zaW42X3BvcnQgPSAwOworI2VuZGlmCisgICAgfQorICAKKyAgaWYgKGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcl9jb3B5LCBzYV9sZW4oJmFkZHJfY29weSkpID09IC0xKQorICAgIHJldHVybiAwOworICAgIAorI2lmIGRlZmluZWQoU09fQklORFRPREVWSUNFKQorICBpZiAoaW50bmFtZVswXSAhPSAwICYmCisgICAgICBzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19CSU5EVE9ERVZJQ0UsIGludG5hbWUsIElGX05BTUVTSVpFKSA9PSAtMSkKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorCisgIHJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IHNlcnZlcmZkICphbGxvY2F0ZV9zZmQodW5pb24gbXlzb2NrYWRkciAqYWRkciwgY2hhciAqaW50bmFtZSkKK3sKKyAgc3RydWN0IHNlcnZlcmZkICpzZmQ7CisgIGludCBlcnJzYXZlOworCisgIC8qIHdoZW4gdXNpbmcgcmFuZG9tIHBvcnRzLCBzZXJ2ZXJzIHdoaWNoIHdvdWxkIG90aGVyd2lzZSB1c2UKKyAgICAgdGhlIElOQUREUl9BTlkvcG9ydDAgc29ja2V0IGhhdmUgc2ZkIHNldCB0byBOVUxMICovCisgIGlmICghZGFlbW9uLT5vc3BvcnQgJiYgaW50bmFtZVswXSA9PSAwKQorICAgIHsKKyAgICAgIGVycm5vID0gMDsKKyAgICAgIAorICAgICAgaWYgKGFkZHItPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUICYmCisJICBhZGRyLT5pbi5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSAmJgorCSAgYWRkci0+aW4uc2luX3BvcnQgPT0gaHRvbnMoMCkpIAorCXJldHVybiBOVUxMOworCisjaWZkZWYgSEFWRV9JUFY2CisgICAgICBpZiAoYWRkci0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2ICYmCisJICBtZW1jbXAoJmFkZHItPmluNi5zaW42X2FkZHIsICZpbjZhZGRyX2FueSwgc2l6ZW9mKGluNmFkZHJfYW55KSkgPT0gMCAmJgorCSAgYWRkci0+aW42LnNpbjZfcG9ydCA9PSBodG9ucygwKSkgCisJcmV0dXJuIE5VTEw7CisjZW5kaWYKKyAgICB9CisgICAgICAKKyAgLyogbWF5IGhhdmUgYSBzdWl0YWJsZSBvbmUgYWxyZWFkeSAqLworICBmb3IgKHNmZCA9IGRhZW1vbi0+c2Zkczsgc2ZkOyBzZmQgPSBzZmQtPm5leHQgKQorICAgIGlmIChzb2NrYWRkcl9pc2VxdWFsKCZzZmQtPnNvdXJjZV9hZGRyLCBhZGRyKSAmJgorCXN0cmNtcChpbnRuYW1lLCBzZmQtPmludGVyZmFjZSkgPT0gMCkKKyAgICAgIHJldHVybiBzZmQ7CisgIAorICAvKiBuZWVkIHRvIG1ha2UgYSBuZXcgb25lLiAqLworICBlcnJubyA9IEVOT01FTTsgLyogaW4gY2FzZSBtYWxsb2MgZmFpbHMuICovCisgIGlmICghKHNmZCA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IHNlcnZlcmZkKSkpKQorICAgIHJldHVybiBOVUxMOworICAKKyAgaWYgKChzZmQtPmZkID0gc29ja2V0KGFkZHItPnNhLnNhX2ZhbWlseSwgU09DS19ER1JBTSwgMCkpID09IC0xKQorICAgIHsKKyAgICAgIGZyZWUoc2ZkKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgCisgIGlmICghbG9jYWxfYmluZChzZmQtPmZkLCBhZGRyLCBpbnRuYW1lLCAwKSB8fCAhZml4X2ZkKHNmZC0+ZmQpKQorICAgIHsgCisgICAgICBlcnJzYXZlID0gZXJybm87IC8qIHNhdmUgZXJyb3IgZnJvbSBiaW5kLiAqLworICAgICAgY2xvc2Uoc2ZkLT5mZCk7CisgICAgICBmcmVlKHNmZCk7CisgICAgICBlcnJubyA9IGVycnNhdmU7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgCisgIHN0cmNweShzZmQtPmludGVyZmFjZSwgaW50bmFtZSk7IAorICBzZmQtPnNvdXJjZV9hZGRyID0gKmFkZHI7CisgIHNmZC0+bmV4dCA9IGRhZW1vbi0+c2ZkczsKKyAgZGFlbW9uLT5zZmRzID0gc2ZkOworICByZXR1cm4gc2ZkOyAKK30KKworLyogY3JlYXRlIHVwc3RyZWFtIHNvY2tldHMgZHVyaW5nIHN0YXJ0dXAsIGJlZm9yZSByb290IGlzIGRyb3BwZWQgd2hpY2ggbWF5IGJlIG5lZWRlZAorICAgdGhpcyBhbGxvd3MgcXVlcnlfcG9ydCB0byBiZSBhIGxvdyBwb3J0IGFuZCBpbnRlcmZhY2UgYmluZGluZyAqLwordm9pZCBwcmVfYWxsb2NhdGVfc2Zkcyh2b2lkKQoreworICBzdHJ1Y3Qgc2VydmVyICpzcnY7CisgIAorICBpZiAoZGFlbW9uLT5xdWVyeV9wb3J0ICE9IDApCisgICAgeworICAgICAgdW5pb24gIG15c29ja2FkZHIgYWRkcjsKKyAgICAgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAgICAgIGFkZHIuaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICBhZGRyLmluLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7CisgICAgICBhZGRyLmluLnNpbl9wb3J0ID0gaHRvbnMoZGFlbW9uLT5xdWVyeV9wb3J0KTsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorICAgICAgYWRkci5pbi5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKyAgICAgIGFsbG9jYXRlX3NmZCgmYWRkciwgIiIpOworI2lmZGVmIEhBVkVfSVBWNgorICAgICAgbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworICAgICAgYWRkci5pbjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgIGFkZHIuaW42LnNpbjZfYWRkciA9IGluNmFkZHJfYW55OworICAgICAgYWRkci5pbjYuc2luNl9wb3J0ID0gaHRvbnMoZGFlbW9uLT5xdWVyeV9wb3J0KTsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorICAgICAgYWRkci5pbjYuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKyAgICAgIGFsbG9jYXRlX3NmZCgmYWRkciwgIiIpOworI2VuZGlmCisgICAgfQorICAKKyAgZm9yIChzcnYgPSBkYWVtb24tPnNlcnZlcnM7IHNydjsgc3J2ID0gc3J2LT5uZXh0KQorICAgIGlmICghKHNydi0+ZmxhZ3MgJiAoU0VSVl9MSVRFUkFMX0FERFJFU1MgfCBTRVJWX05PX0FERFIgfCBTRVJWX1VTRV9SRVNPTFYgfCBTRVJWX05PX1JFQklORCkpICYmCisJIWFsbG9jYXRlX3NmZCgmc3J2LT5zb3VyY2VfYWRkciwgc3J2LT5pbnRlcmZhY2UpICYmCisJZXJybm8gIT0gMCAmJgorCW9wdGlvbl9ib29sKE9QVF9OT1dJTEQpKQorICAgICAgeworCXByZXR0eXByaW50X2FkZHIoJnNydi0+c291cmNlX2FkZHIsIGRhZW1vbi0+bmFtZWJ1ZmYpOworCWlmIChzcnYtPmludGVyZmFjZVswXSAhPSAwKQorCSAgeworCSAgICBzdHJjYXQoZGFlbW9uLT5uYW1lYnVmZiwgIiAiKTsKKwkgICAgc3RyY2F0KGRhZW1vbi0+bmFtZWJ1ZmYsIHNydi0+aW50ZXJmYWNlKTsKKwkgIH0KKwlkaWUoXygiZmFpbGVkIHRvIGJpbmQgc2VydmVyIHNvY2tldCBmb3IgJXM6ICVzIiksCisJICAgIGRhZW1vbi0+bmFtZWJ1ZmYsIEVDX0JBRE5FVCk7CisgICAgICB9ICAKK30KKwordm9pZCBtYXJrX3NlcnZlcnMoaW50IGZsYWcpCit7CisgIHN0cnVjdCBzZXJ2ZXIgKnNlcnY7CisKKyAgLyogbWFyayBldmVyeXRoaW5nIHdpdGggYXJndW1lbnQgZmxhZyAqLworICBmb3IgKHNlcnYgPSBkYWVtb24tPnNlcnZlcnM7IHNlcnY7IHNlcnYgPSBzZXJ2LT5uZXh0KQorICAgIHsKKyAgICAgIGlmIChzZXJ2LT5mbGFncyAmIGZsYWcpCisJc2Vydi0+ZmxhZ3MgfD0gU0VSVl9NQVJLOworI2lmZGVmIEhBVkVfTE9PUAorICAgICAgLyogR2l2ZSBsb29wZWQgc2VydmVycyBhbm90aGVyIGNoYW5jZSAqLworICAgICAgc2Vydi0+ZmxhZ3MgJj0gflNFUlZfTE9PUDsKKyNlbmRpZgorICAgIH0KK30KKwordm9pZCBjbGVhbnVwX3NlcnZlcnModm9pZCkKK3sKKyAgc3RydWN0IHNlcnZlciAqc2VydiwgKnRtcCwgKip1cDsKKworICAvKiB1bmxpbmsgYW5kIGZyZWUgYW55dGhpbmcgc3RpbGwgbWFya2VkLiAqLworICBmb3IgKHNlcnYgPSBkYWVtb24tPnNlcnZlcnMsIHVwID0gJmRhZW1vbi0+c2VydmVyczsgc2Vydjsgc2VydiA9IHRtcCkgCisgICAgeworICAgICAgdG1wID0gc2Vydi0+bmV4dDsKKyAgICAgIGlmIChzZXJ2LT5mbGFncyAmIFNFUlZfTUFSSykKKyAgICAgICB7CisgICAgICAgICBzZXJ2ZXJfZ29uZShzZXJ2KTsKKyAgICAgICAgICp1cCA9IHNlcnYtPm5leHQ7CisgICAgICAgICBpZiAoc2Vydi0+ZG9tYWluKQorCSAgIGZyZWUoc2Vydi0+ZG9tYWluKTsKKwkgZnJlZShzZXJ2KTsKKyAgICAgICB9CisgICAgICBlbHNlIAorICAgICAgIHVwID0gJnNlcnYtPm5leHQ7CisgICAgfQorCisjaWZkZWYgSEFWRV9MT09QCisgIC8qIE5vdyB3ZSBoYXZlIGEgbmV3IHNldCBvZiBzZXJ2ZXJzLCB0ZXN0IGZvciBsb29wcy4gKi8KKyAgbG9vcF9zZW5kX3Byb2JlcygpOworI2VuZGlmCit9CisKK3ZvaWQgYWRkX3VwZGF0ZV9zZXJ2ZXIoaW50IGZsYWdzLAorCQkgICAgICAgdW5pb24gbXlzb2NrYWRkciAqYWRkciwKKwkJICAgICAgIHVuaW9uIG15c29ja2FkZHIgKnNvdXJjZV9hZGRyLAorCQkgICAgICAgY29uc3QgY2hhciAqaW50ZXJmYWNlLAorCQkgICAgICAgY29uc3QgY2hhciAqZG9tYWluKQoreworICBzdHJ1Y3Qgc2VydmVyICpzZXJ2LCAqbmV4dCA9IE5VTEw7CisgIGNoYXIgKmRvbWFpbl9zdHIgPSBOVUxMOworICAKKyAgLyogU2VlIGlmIHRoZXJlIGlzIGEgc3VpdGFibGUgY2FuZGlkYXRlLCBhbmQgdW5tYXJrICovCisgIGZvciAoc2VydiA9IGRhZW1vbi0+c2VydmVyczsgc2Vydjsgc2VydiA9IHNlcnYtPm5leHQpCisgICAgaWYgKHNlcnYtPmZsYWdzICYgU0VSVl9NQVJLKQorICAgICAgeworCWlmIChkb21haW4pCisJICB7CisJICAgIGlmICghKHNlcnYtPmZsYWdzICYgU0VSVl9IQVNfRE9NQUlOKSB8fCAhaG9zdG5hbWVfaXNlcXVhbChkb21haW4sIHNlcnYtPmRvbWFpbikpCisJICAgICAgY29udGludWU7CisJICB9CisJZWxzZQorCSAgeworCSAgICBpZiAoc2Vydi0+ZmxhZ3MgJiBTRVJWX0hBU19ET01BSU4pCisJICAgICAgY29udGludWU7CisJICB9CisJCisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgIGlmIChzZXJ2KQorICAgIHsKKyAgICAgIGRvbWFpbl9zdHIgPSBzZXJ2LT5kb21haW47CisgICAgICBuZXh0ID0gc2Vydi0+bmV4dDsKKyAgICB9CisgIGVsc2UgaWYgKChzZXJ2ID0gd2hpbmVfbWFsbG9jKHNpemVvZiAoc3RydWN0IHNlcnZlcikpKSkKKyAgICB7CisgICAgICAvKiBOb3QgZm91bmQsIGNyZWF0ZSBhIG5ldyBvbmUuICovCisgICAgICBpZiAoZG9tYWluICYmICEoZG9tYWluX3N0ciA9IHdoaW5lX21hbGxvYyhzdHJsZW4oZG9tYWluKSsxKSkpCisJeworCSAgZnJlZShzZXJ2KTsKKyAgICAgICAgICBzZXJ2ID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisJICBzdHJ1Y3Qgc2VydmVyICpzOworCSAgLyogQWRkIHRvIHRoZSBlbmQgb2YgdGhlIGNoYWluLCBmb3Igb3JkZXIgKi8KKwkgIGlmICghZGFlbW9uLT5zZXJ2ZXJzKQorCSAgICBkYWVtb24tPnNlcnZlcnMgPSBzZXJ2OworCSAgZWxzZQorCSAgICB7CisJICAgICAgZm9yIChzID0gZGFlbW9uLT5zZXJ2ZXJzOyBzLT5uZXh0OyBzID0gcy0+bmV4dCk7CisJICAgICAgcy0+bmV4dCA9IHNlcnY7CisJICAgIH0KKwkgIGlmIChkb21haW4pCisJICAgIHN0cmNweShkb21haW5fc3RyLCBkb21haW4pOworCX0KKyAgICB9CisgIAorICBpZiAoc2VydikKKyAgICB7CisgICAgICBtZW1zZXQoc2VydiwgMCwgc2l6ZW9mKHN0cnVjdCBzZXJ2ZXIpKTsKKyAgICAgIHNlcnYtPmZsYWdzID0gZmxhZ3M7CisgICAgICBzZXJ2LT5kb21haW4gPSBkb21haW5fc3RyOworICAgICAgc2Vydi0+bmV4dCA9IG5leHQ7CisgICAgICBzZXJ2LT5xdWVyaWVzID0gc2Vydi0+ZmFpbGVkX3F1ZXJpZXMgPSAwOworI2lmZGVmIEhBVkVfTE9PUAorICAgICAgc2Vydi0+dWlkID0gcmFuZDMyKCk7CisjZW5kaWYgICAgICAKKworICAgICAgaWYgKGRvbWFpbikKKwlzZXJ2LT5mbGFncyB8PSBTRVJWX0hBU19ET01BSU47CisgICAgICAKKyAgICAgIGlmIChpbnRlcmZhY2UpCisJc3RyY3B5KHNlcnYtPmludGVyZmFjZSwgaW50ZXJmYWNlKTsgICAgICAKKyAgICAgIGlmIChhZGRyKQorCXNlcnYtPmFkZHIgPSAqYWRkcjsKKyAgICAgIGlmIChzb3VyY2VfYWRkcikKKwlzZXJ2LT5zb3VyY2VfYWRkciA9ICpzb3VyY2VfYWRkcjsKKyAgICB9Cit9CisKK3ZvaWQgY2hlY2tfc2VydmVycyh2b2lkKQoreworICBzdHJ1Y3QgaXJlYyAqaWZhY2U7CisgIHN0cnVjdCBzZXJ2ZXIgKnNlcnY7CisgIGludCBwb3J0ID0gMDsKKworICAvKiBpbnRlcmZhY2UgbWF5IGJlIG5ldyBzaW5jZSBzdGFydHVwICovCisgIGlmICghb3B0aW9uX2Jvb2woT1BUX05PV0lMRCkpCisgICAgZW51bWVyYXRlX2ludGVyZmFjZXMoMCk7CisgIAorICBmb3IgKHNlcnYgPSBkYWVtb24tPnNlcnZlcnM7IHNlcnY7IHNlcnYgPSBzZXJ2LT5uZXh0KQorICAgIHsKKyAgICAgICBpZiAoIShzZXJ2LT5mbGFncyAmIChTRVJWX0xJVEVSQUxfQUREUkVTUyB8IFNFUlZfTk9fQUREUiB8IFNFUlZfVVNFX1JFU09MViB8IFNFUlZfTk9fUkVCSU5EKSkpCisJeworCSAgcG9ydCA9IHByZXR0eXByaW50X2FkZHIoJnNlcnYtPmFkZHIsIGRhZW1vbi0+bmFtZWJ1ZmYpOworCisJICAvKiAwLjAuMC4wIGlzIG5vdGhpbmcsIHRoZSBzdGFjayB0cmVhdHMgaXQgbGlrZSAxMjcuMC4wLjEgKi8KKwkgIGlmIChzZXJ2LT5hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUICYmCisJICAgICAgc2Vydi0+YWRkci5pbi5zaW5fYWRkci5zX2FkZHIgPT0gMCkKKwkgICAgeworCSAgICAgIHNlcnYtPmZsYWdzIHw9IFNFUlZfTUFSSzsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCisJICBmb3IgKGlmYWNlID0gZGFlbW9uLT5pbnRlcmZhY2VzOyBpZmFjZTsgaWZhY2UgPSBpZmFjZS0+bmV4dCkKKwkgICAgaWYgKHNvY2thZGRyX2lzZXF1YWwoJnNlcnYtPmFkZHIsICZpZmFjZS0+YWRkcikpCisJICAgICAgYnJlYWs7CisJICBpZiAoaWZhY2UpCisJICAgIHsKKwkgICAgICBteV9zeXNsb2coTE9HX1dBUk5JTkcsIF8oImlnbm9yaW5nIG5hbWVzZXJ2ZXIgJXMgLSBsb2NhbCBpbnRlcmZhY2UiKSwgZGFlbW9uLT5uYW1lYnVmZik7CisJICAgICAgc2Vydi0+ZmxhZ3MgfD0gU0VSVl9NQVJLOworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisJICAKKwkgIC8qIERvIHdlIG5lZWQgYSBzb2NrZXQgc2V0PyAqLworCSAgaWYgKCFzZXJ2LT5zZmQgJiYgCisJICAgICAgIShzZXJ2LT5zZmQgPSBhbGxvY2F0ZV9zZmQoJnNlcnYtPnNvdXJjZV9hZGRyLCBzZXJ2LT5pbnRlcmZhY2UpKSAmJgorCSAgICAgIGVycm5vICE9IDApCisJICAgIHsKKwkgICAgICBteV9zeXNsb2coTE9HX1dBUk5JTkcsIAorCQkJXygiaWdub3JpbmcgbmFtZXNlcnZlciAlcyAtIGNhbm5vdCBtYWtlL2JpbmQgc29ja2V0OiAlcyIpLAorCQkJZGFlbW9uLT5uYW1lYnVmZiwgc3RyZXJyb3IoZXJybm8pKTsKKwkgICAgICBzZXJ2LT5mbGFncyB8PSBTRVJWX01BUks7CisJICAgICAgY29udGludWU7CisJICAgIH0KKwl9CisgICAgICAKKyAgICAgIGlmICghKHNlcnYtPmZsYWdzICYgU0VSVl9OT19SRUJJTkQpKQorCXsKKwkgIGlmIChzZXJ2LT5mbGFncyAmIChTRVJWX0hBU19ET01BSU4gfCBTRVJWX0ZPUl9OT0RPVFMgfCBTRVJWX1VTRV9SRVNPTFYpKQorCSAgICB7CisJICAgICAgY2hhciAqczEsICpzMjsKKwkgICAgICBpZiAoIShzZXJ2LT5mbGFncyAmIFNFUlZfSEFTX0RPTUFJTikpCisJCXMxID0gXygidW5xdWFsaWZpZWQiKSwgczIgPSBfKCJuYW1lcyIpOworCSAgICAgIGVsc2UgaWYgKHN0cmxlbihzZXJ2LT5kb21haW4pID09IDApCisJCXMxID0gXygiZGVmYXVsdCIpLCBzMiA9ICIiOworCSAgICAgIGVsc2UKKwkJczEgPSBfKCJkb21haW4iKSwgczIgPSBzZXJ2LT5kb21haW47CisJICAgICAgCisJICAgICAgaWYgKHNlcnYtPmZsYWdzICYgU0VSVl9OT19BRERSKQorCQlteV9zeXNsb2coTE9HX0lORk8sIF8oInVzaW5nIGxvY2FsIGFkZHJlc3NlcyBvbmx5IGZvciAlcyAlcyIpLCBzMSwgczIpOworCSAgICAgIGVsc2UgaWYgKHNlcnYtPmZsYWdzICYgU0VSVl9VU0VfUkVTT0xWKQorCQlteV9zeXNsb2coTE9HX0lORk8sIF8oInVzaW5nIHN0YW5kYXJkIG5hbWVzZXJ2ZXJzIGZvciAlcyAlcyIpLCBzMSwgczIpOworCSAgICAgIGVsc2UgaWYgKCEoc2Vydi0+ZmxhZ3MgJiBTRVJWX0xJVEVSQUxfQUREUkVTUykpCisJCW15X3N5c2xvZyhMT0dfSU5GTywgXygidXNpbmcgbmFtZXNlcnZlciAlcyMlZCBmb3IgJXMgJXMiKSwgZGFlbW9uLT5uYW1lYnVmZiwgcG9ydCwgczEsIHMyKTsKKwkgICAgfQorI2lmZGVmIEhBVkVfTE9PUAorCSAgZWxzZSBpZiAoc2Vydi0+ZmxhZ3MgJiBTRVJWX0xPT1ApCisJICAgIG15X3N5c2xvZyhMT0dfSU5GTywgXygiTk9UIHVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQgLSBxdWVyeSBsb29wIGRldGVjdGVkIiksIGRhZW1vbi0+bmFtZWJ1ZmYsIHBvcnQpOyAKKyNlbmRpZgorCSAgZWxzZSBpZiAoc2Vydi0+aW50ZXJmYWNlWzBdICE9IDApCisJICAgIG15X3N5c2xvZyhMT0dfSU5GTywgXygidXNpbmcgbmFtZXNlcnZlciAlcyMlZCh2aWEgJXMpIiksIGRhZW1vbi0+bmFtZWJ1ZmYsIHBvcnQsIHNlcnYtPmludGVyZmFjZSk7IAorCSAgZWxzZQorCSAgICBteV9zeXNsb2coTE9HX0lORk8sIF8oInVzaW5nIG5hbWVzZXJ2ZXIgJXMjJWQiKSwgZGFlbW9uLT5uYW1lYnVmZiwgcG9ydCk7IAorCX0KKyAgICB9CisKKyAgY2xlYW51cF9zZXJ2ZXJzKCk7Cit9CisKKy8qIFJldHVybiB6ZXJvIGlmIG5vIHNlcnZlcnMgZm91bmQsIGluIHRoYXQgY2FzZSB3ZSBrZWVwIHBvbGxpbmcuCisgICBUaGlzIGlzIGEgcHJvdGVjdGlvbiBhZ2FpbnN0IGFuIHVwZGF0ZS10aW1lL3dyaXRlIHJhY2Ugb24gcmVzb2x2LmNvbmYgKi8KK2ludCByZWxvYWRfc2VydmVycyhjaGFyICpmbmFtZSkKK3sKKyAgRklMRSAqZjsKKyAgY2hhciAqbGluZTsKKyAgaW50IGdvdG9uZSA9IDA7CisKKyAgLyogYnVmZiBoYXBwZW5zIHRvIGJlIE1BWEROQU1FIGxvbmcuLi4gKi8KKyAgaWYgKCEoZiA9IGZvcGVuKGZuYW1lLCAiciIpKSkKKyAgICB7CisgICAgICBteV9zeXNsb2coTE9HX0VSUiwgXygiZmFpbGVkIHRvIHJlYWQgJXM6ICVzIiksIGZuYW1lLCBzdHJlcnJvcihlcnJubykpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgCisgIG1hcmtfc2VydmVycyhTRVJWX0ZST01fUkVTT0xWKTsKKyAgICAKKyAgd2hpbGUgKChsaW5lID0gZmdldHMoZGFlbW9uLT5uYW1lYnVmZiwgTUFYRE5BTUUsIGYpKSkKKyAgICB7CisgICAgICB1bmlvbiBteXNvY2thZGRyIGFkZHIsIHNvdXJjZV9hZGRyOworICAgICAgY2hhciAqdG9rZW4gPSBzdHJ0b2sobGluZSwgIiBcdFxuXHIiKTsKKyAgICAgIAorICAgICAgaWYgKCF0b2tlbikKKwljb250aW51ZTsKKyAgICAgIGlmIChzdHJjbXAodG9rZW4sICJuYW1lc2VydmVyIikgIT0gMCAmJiBzdHJjbXAodG9rZW4sICJzZXJ2ZXIiKSAhPSAwKQorCWNvbnRpbnVlOworICAgICAgaWYgKCEodG9rZW4gPSBzdHJ0b2soTlVMTCwgIiBcdFxuXHIiKSkpCisJY29udGludWU7CisgICAgICAKKyAgICAgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAgICAgIG1lbXNldCgmc291cmNlX2FkZHIsIDAsIHNpemVvZihzb3VyY2VfYWRkcikpOworICAgICAgCisgICAgICBpZiAoKGFkZHIuaW4uc2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKHRva2VuKSkgIT0gKGluX2FkZHJfdCkgLTEpCisJeworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisJICBzb3VyY2VfYWRkci5pbi5zaW5fbGVuID0gYWRkci5pbi5zaW5fbGVuID0gc2l6ZW9mKHNvdXJjZV9hZGRyLmluKTsKKyNlbmRpZgorCSAgc291cmNlX2FkZHIuaW4uc2luX2ZhbWlseSA9IGFkZHIuaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJICBhZGRyLmluLnNpbl9wb3J0ID0gaHRvbnMoTkFNRVNFUlZFUl9QT1JUKTsKKwkgIHNvdXJjZV9hZGRyLmluLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7CisJICBzb3VyY2VfYWRkci5pbi5zaW5fcG9ydCA9IGh0b25zKGRhZW1vbi0+cXVlcnlfcG9ydCk7CisJfQorI2lmZGVmIEhBVkVfSVBWNgorICAgICAgZWxzZSAKKwl7CQorCSAgaW50IHNjb3BlX2luZGV4ID0gMDsKKwkgIGNoYXIgKnNjb3BlX2lkID0gc3RyY2hyKHRva2VuLCAnJScpOworCSAgCisJICBpZiAoc2NvcGVfaWQpCisJICAgIHsKKwkgICAgICAqKHNjb3BlX2lkKyspID0gMDsKKwkgICAgICBzY29wZV9pbmRleCA9IGlmX25hbWV0b2luZGV4KHNjb3BlX2lkKTsKKwkgICAgfQorCSAgCisJICBpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCB0b2tlbiwgJmFkZHIuaW42LnNpbjZfYWRkcikgPiAwKQorCSAgICB7CisjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKwkgICAgICBzb3VyY2VfYWRkci5pbjYuc2luNl9sZW4gPSBhZGRyLmluNi5zaW42X2xlbiA9IHNpemVvZihzb3VyY2VfYWRkci5pbjYpOworI2VuZGlmCisJICAgICAgc291cmNlX2FkZHIuaW42LnNpbjZfZmFtaWx5ID0gYWRkci5pbjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKwkgICAgICBzb3VyY2VfYWRkci5pbjYuc2luNl9mbG93aW5mbyA9IGFkZHIuaW42LnNpbjZfZmxvd2luZm8gPSAwOworCSAgICAgIGFkZHIuaW42LnNpbjZfcG9ydCA9IGh0b25zKE5BTUVTRVJWRVJfUE9SVCk7CisJICAgICAgYWRkci5pbjYuc2luNl9zY29wZV9pZCA9IHNjb3BlX2luZGV4OworCSAgICAgIHNvdXJjZV9hZGRyLmluNi5zaW42X2FkZHIgPSBpbjZhZGRyX2FueTsKKwkgICAgICBzb3VyY2VfYWRkci5pbjYuc2luNl9wb3J0ID0gaHRvbnMoZGFlbW9uLT5xdWVyeV9wb3J0KTsKKwkgICAgICBzb3VyY2VfYWRkci5pbjYuc2luNl9zY29wZV9pZCA9IDA7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgY29udGludWU7CisJfQorI2Vsc2UgLyogSVBWNiAqLworICAgICAgZWxzZQorCWNvbnRpbnVlOworI2VuZGlmIAorCisgICAgICBhZGRfdXBkYXRlX3NlcnZlcihTRVJWX0ZST01fUkVTT0xWLCAmYWRkciwgJnNvdXJjZV9hZGRyLCBOVUxMLCBOVUxMKTsKKyAgICAgIGdvdG9uZSA9IDE7CisgICAgfQorICAKKyAgZmNsb3NlKGYpOworICBjbGVhbnVwX3NlcnZlcnMoKTsKKworICByZXR1cm4gZ290b25lOworfQorCisvKiBDYWxsZWQgd2hlbiBhZGRyZXNzZXMgYXJlIGFkZGVkIG9yIGRlbGV0ZWQgZnJvbSBhbiBpbnRlcmZhY2UgKi8KK3ZvaWQgbmV3YWRkcmVzcyh0aW1lX3Qgbm93KQoreworICAodm9pZClub3c7CisgIAorICBpZiAob3B0aW9uX2Jvb2woT1BUX0NMRVZFUkJJTkQpIHx8IG9wdGlvbl9ib29sKE9QVF9MT0NBTF9TRVJWSUNFKSB8fAorICAgICAgZGFlbW9uLT5kb2luZ19kaGNwNiB8fCBkYWVtb24tPnJlbGF5NiB8fCBkYWVtb24tPmRvaW5nX3JhKQorICAgIGVudW1lcmF0ZV9pbnRlcmZhY2VzKDApOworICAKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9DTEVWRVJCSU5EKSkKKyAgICBjcmVhdGVfYm91bmRfbGlzdGVuZXJzKDApOworICAKKyNpZmRlZiBIQVZFX0RIQ1A2CisgIGlmIChkYWVtb24tPmRvaW5nX2RoY3A2IHx8IGRhZW1vbi0+cmVsYXk2IHx8IGRhZW1vbi0+ZG9pbmdfcmEpCisgICAgam9pbl9tdWx0aWNhc3QoMCk7CisgIAorICBpZiAoZGFlbW9uLT5kb2luZ19kaGNwNiB8fCBkYWVtb24tPmRvaW5nX3JhKQorICAgIGRoY3BfY29uc3RydWN0X2NvbnRleHRzKG5vdyk7CisgIAorICBpZiAoZGFlbW9uLT5kb2luZ19kaGNwNikKKyAgICBsZWFzZV9maW5kX2ludGVyZmFjZXMobm93KTsKKyNlbmRpZgorfQorCisKKworCisKZGlmZiAtLWdpdCBhL3NyYy9vcHRpb24uYyBiL3NyYy9vcHRpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yjk5NDA5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL29wdGlvbi5jCkBAIC0wLDAgKzEsNDU3NyBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxNCBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKy8qIGRlZmluZSB0aGlzIHRvIGdldCBmYWNpbGl0eW5hbWVzICovCisjZGVmaW5lIFNZU0xPR19OQU1FUworI2luY2x1ZGUgImRuc21hc3EuaCIKKyNpbmNsdWRlIDxzZXRqbXAuaD4KKworc3RhdGljIHZvbGF0aWxlIGludCBtZW1fcmVjb3ZlciA9IDA7CitzdGF0aWMgam1wX2J1ZiBtZW1fam1wOworc3RhdGljIGludCBvbmVfZmlsZShjaGFyICpmaWxlLCBpbnQgaGFyZF9vcHQpOworCisvKiBTb2xhcmlzIGhlYWRlcnMgZG9uJ3QgaGF2ZSBmYWNpbGl0eSBuYW1lcy4gKi8KKyNpZmRlZiBIQVZFX1NPTEFSSVNfTkVUV09SSworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgIGNoYXIgKmNfbmFtZTsKKyAgdW5zaWduZWQgaW50IGNfdmFsOworfSAgZmFjaWxpdHluYW1lc1tdID0geworICB7ICJrZXJuIiwgICBMT0dfS0VSTiB9LAorICB7ICJ1c2VyIiwgICBMT0dfVVNFUiB9LAorICB7ICJtYWlsIiwgICBMT0dfTUFJTCB9LAorICB7ICJkYWVtb24iLCBMT0dfREFFTU9OIH0sCisgIHsgImF1dGgiLCAgIExPR19BVVRIIH0sCisgIHsgInN5c2xvZyIsIExPR19TWVNMT0cgfSwKKyAgeyAibHByIiwgICAgTE9HX0xQUiB9LAorICB7ICJuZXdzIiwgICBMT0dfTkVXUyB9LAorICB7ICJ1dWNwIiwgICBMT0dfVVVDUCB9LAorICB7ICJhdWRpdCIsICBMT0dfQVVESVQgfSwKKyAgeyAiY3JvbiIsICAgTE9HX0NST04gfSwKKyAgeyAibG9jYWwwIiwgTE9HX0xPQ0FMMCB9LAorICB7ICJsb2NhbDEiLCBMT0dfTE9DQUwxIH0sCisgIHsgImxvY2FsMiIsIExPR19MT0NBTDIgfSwKKyAgeyAibG9jYWwzIiwgTE9HX0xPQ0FMMyB9LAorICB7ICJsb2NhbDQiLCBMT0dfTE9DQUw0IH0sCisgIHsgImxvY2FsNSIsIExPR19MT0NBTDUgfSwKKyAgeyAibG9jYWw2IiwgTE9HX0xPQ0FMNiB9LAorICB7ICJsb2NhbDciLCBMT0dfTE9DQUw3IH0sCisgIHsgTlVMTCwgMCB9Cit9OworI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9HRVRPUFRfTE9ORworc3RydWN0IG15b3B0aW9uIHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgaW50IGhhc19hcmc7CisgIGludCAqZmxhZzsKKyAgaW50IHZhbDsKK307CisjZW5kaWYKKworI2RlZmluZSBPUFRTVFJJTkcgIjk1MXlaRE5MRVJLem93ZWZuYnZoZGtxcjptOnA6YzpsOnM6aTp0OnU6ZzphOng6UzpDOkE6VDpIOlE6STpCOkY6RzpPOk06WDpWOlU6ajpQOko6VzpZOjI6NDo2Ojc6ODowOjM6IgorCisvKiBvcHRpb25zIHdoaWNoIGRvbid0IGhhdmUgYSBvbmUtY2hhciB2ZXJzaW9uICovCisjZGVmaW5lIExPUFRfUkVMT0FEICAgICAgICAyNTYKKyNkZWZpbmUgTE9QVF9OT19OQU1FUyAgICAgIDI1NworI2RlZmluZSBMT1BUX1RGVFAgICAgICAgICAgMjU4CisjZGVmaW5lIExPUFRfU0VDVVJFICAgICAgICAyNTkKKyNkZWZpbmUgTE9QVF9QUkVGSVggICAgICAgIDI2MAorI2RlZmluZSBMT1BUX1BUUiAgICAgICAgICAgMjYxCisjZGVmaW5lIExPUFRfQlJJREdFICAgICAgICAyNjIKKyNkZWZpbmUgTE9QVF9URlRQX01BWCAgICAgIDI2MworI2RlZmluZSBMT1BUX0ZPUkNFICAgICAgICAgMjY0CisjZGVmaW5lIExPUFRfTk9CTE9DSyAgICAgICAyNjUKKyNkZWZpbmUgTE9QVF9MT0dfT1BUUyAgICAgIDI2NgorI2RlZmluZSBMT1BUX01BWF9MT0dTICAgICAgMjY3CisjZGVmaW5lIExPUFRfQ0lSQ1VJVCAgICAgICAyNjgKKyNkZWZpbmUgTE9QVF9SRU1PVEUgICAgICAgIDI2OQorI2RlZmluZSBMT1BUX1NVQlNDUiAgICAgICAgMjcwCisjZGVmaW5lIExPUFRfSU5UTkFNRSAgICAgICAyNzEKKyNkZWZpbmUgTE9QVF9CQU5LICAgICAgICAgIDI3MgorI2RlZmluZSBMT1BUX0RIQ1BfSE9TVCAgICAgMjczCisjZGVmaW5lIExPUFRfQVBSRUYgICAgICAgICAyNzQKKyNkZWZpbmUgTE9QVF9PVkVSUklERSAgICAgIDI3NQorI2RlZmluZSBMT1BUX1RGVFBQT1JUUyAgICAgMjc2CisjZGVmaW5lIExPUFRfUkVCSU5EICAgICAgICAyNzcKKyNkZWZpbmUgTE9QVF9OT0xBU1QgICAgICAgIDI3OAorI2RlZmluZSBMT1BUX09QVFMgICAgICAgICAgMjc5CisjZGVmaW5lIExPUFRfREhDUF9PUFRTICAgICAyODAKKyNkZWZpbmUgTE9QVF9NQVRDSCAgICAgICAgIDI4MQorI2RlZmluZSBMT1BUX0JST0FEQ0FTVCAgICAgMjgyCisjZGVmaW5lIExPUFRfTkVHVFRMICAgICAgICAyODMKKyNkZWZpbmUgTE9QVF9BTFRQT1JUICAgICAgIDI4NAorI2RlZmluZSBMT1BUX1NDUklQVFVTUiAgICAgMjg1CisjZGVmaW5lIExPUFRfTE9DQUwgICAgICAgICAyODYKKyNkZWZpbmUgTE9QVF9OQVBUUiAgICAgICAgIDI4NworI2RlZmluZSBMT1BUX01JTlBPUlQgICAgICAgMjg4CisjZGVmaW5lIExPUFRfREhDUF9GUUROICAgICAyODkKKyNkZWZpbmUgTE9QVF9DTkFNRSAgICAgICAgIDI5MAorI2RlZmluZSBMT1BUX1BYRV9QUk9NVCAgICAgMjkxCisjZGVmaW5lIExPUFRfUFhFX1NFUlYgICAgICAyOTIKKyNkZWZpbmUgTE9QVF9URVNUICAgICAgICAgIDI5MworI2RlZmluZSBMT1BUX1RBR19JRiAgICAgICAgMjk0CisjZGVmaW5lIExPUFRfUFJPWFkgICAgICAgICAyOTUKKyNkZWZpbmUgTE9QVF9HRU5fTkFNRVMgICAgIDI5NgorI2RlZmluZSBMT1BUX01BWFRUTCAgICAgICAgMjk3CisjZGVmaW5lIExPUFRfTk9fUkVCSU5EICAgICAyOTgKKyNkZWZpbmUgTE9QVF9MT0NfUkVCTkQgICAgIDI5OQorI2RlZmluZSBMT1BUX0FERF9NQUMgICAgICAgMzAwCisjZGVmaW5lIExPUFRfRE5TU0VDICAgICAgICAzMDEKKyNkZWZpbmUgTE9QVF9JTkNSX0FERFIgICAgIDMwMgorI2RlZmluZSBMT1BUX0NPTk5UUkFDSyAgICAgMzAzCisjZGVmaW5lIExPUFRfRlFETiAgICAgICAgICAzMDQKKyNkZWZpbmUgTE9QVF9MVUFTQ1JJUFQgICAgIDMwNQorI2RlZmluZSBMT1BUX1JBICAgICAgICAgICAgMzA2CisjZGVmaW5lIExPUFRfRFVJRCAgICAgICAgICAzMDcKKyNkZWZpbmUgTE9QVF9IT1NUX1JFQyAgICAgIDMwOAorI2RlZmluZSBMT1BUX1RGVFBfTEMgICAgICAgMzA5CisjZGVmaW5lIExPUFRfUlIgICAgICAgICAgICAzMTAKKyNkZWZpbmUgTE9QVF9DTFZFUkJJTkQgICAgIDMxMQorI2RlZmluZSBMT1BUX01BWENUVEwgICAgICAgMzEyCisjZGVmaW5lIExPUFRfQVVUSFpPTkUgICAgICAzMTMKKyNkZWZpbmUgTE9QVF9BVVRIU0VSViAgICAgIDMxNAorI2RlZmluZSBMT1BUX0FVVEhUVEwgICAgICAgMzE1CisjZGVmaW5lIExPUFRfQVVUSFNPQSAgICAgICAzMTYKKyNkZWZpbmUgTE9QVF9BVVRIU0ZTICAgICAgIDMxNworI2RlZmluZSBMT1BUX0FVVEhQRUVSICAgICAgMzE4CisjZGVmaW5lIExPUFRfSVBTRVQgICAgICAgICAzMTkKKyNkZWZpbmUgTE9QVF9TWU5USCAgICAgICAgIDMyMAorI2lmZGVmIE9QVElPTjZfUFJFRklYX0NMQVNTIAorI2RlZmluZSBMT1BUX1BSRUZfQ0xTUyAgICAgMzIxCisjZW5kaWYKKyNkZWZpbmUgTE9QVF9SRUxBWSAgICAgICAgIDMyMworI2RlZmluZSBMT1BUX1JBX1BBUkFNICAgICAgMzI0CisjZGVmaW5lIExPUFRfQUREX1NCTkVUICAgICAzMjUKKyNkZWZpbmUgTE9QVF9RVUlFVF9ESENQICAgIDMyNgorI2RlZmluZSBMT1BUX1FVSUVUX0RIQ1A2ICAgMzI3CisjZGVmaW5lIExPUFRfUVVJRVRfUkEgICAgICAzMjgKKyNkZWZpbmUgTE9QVF9TRUNfVkFMSUQgICAgIDMyOQorI2RlZmluZSBMT1BUX1RSVVNUX0FOQ0hPUiAgMzMwCisjZGVmaW5lIExPUFRfRE5TU0VDX0RFQlVHICAzMzEKKyNkZWZpbmUgTE9QVF9SRVZfU0VSViAgICAgIDMzMgorI2RlZmluZSBMT1BUX1NFUlZFUlNfRklMRSAgMzMzCisjZGVmaW5lIExPUFRfRE5TU0VDX0NIRUNLICAzMzQKKyNkZWZpbmUgTE9QVF9MT0NBTF9TRVJWSUNFIDMzNQorI2RlZmluZSBMT1BUX0ROU1NFQ19USU1FICAgMzM2CisjZGVmaW5lIExPUFRfTE9PUF9ERVRFQ1QgICAzMzcKKyNkZWZpbmUgTE9QVF9JR05PUkVfQUREUiAgIDMzOAorI2RlZmluZSBMT1BUX01JTkNUVEwgICAgICAgMzM5CisKKworI2lmZGVmIEhBVkVfR0VUT1BUX0xPTkcKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdHNbXSA9ICAKKyNlbHNlCitzdGF0aWMgY29uc3Qgc3RydWN0IG15b3B0aW9uIG9wdHNbXSA9IAorI2VuZGlmCisgIHsgCisgICAgeyAidmVyc2lvbiIsIDAsIDAsICd2JyB9LAorICAgIHsgIm5vLWhvc3RzIiwgMCwgMCwgJ2gnIH0sCisgICAgeyAibm8tcG9sbCIsIDAsIDAsICduJyB9LAorICAgIHsgImhlbHAiLCAwLCAwLCAndycgfSwKKyAgICB7ICJuby1kYWVtb24iLCAwLCAwLCAnZCcgfSwKKyAgICB7ICJsb2ctcXVlcmllcyIsIDIsIDAsICdxJyB9LAorICAgIHsgInVzZXIiLCAyLCAwLCAndScgfSwKKyAgICB7ICJncm91cCIsIDIsIDAsICdnJyB9LAorICAgIHsgInJlc29sdi1maWxlIiwgMiwgMCwgJ3InIH0sCisgICAgeyAic2VydmVycy1maWxlIiwgMSwgMCwgTE9QVF9TRVJWRVJTX0ZJTEUgfSwKKyAgICB7ICJteC1ob3N0IiwgMSwgMCwgJ20nIH0sCisgICAgeyAibXgtdGFyZ2V0IiwgMSwgMCwgJ3QnIH0sCisgICAgeyAiY2FjaGUtc2l6ZSIsIDIsIDAsICdjJyB9LAorICAgIHsgInBvcnQiLCAxLCAwLCAncCcgfSwKKyAgICB7ICJkaGNwLWxlYXNlZmlsZSIsIDIsIDAsICdsJyB9LAorICAgIHsgImRoY3AtbGVhc2UiLCAxLCAwLCAnbCcgfSwKKyAgICB7ICJkaGNwLWhvc3QiLCAxLCAwLCAnRycgfSwKKyAgICB7ICJkaGNwLXJhbmdlIiwgMSwgMCwgJ0YnIH0sCisgICAgeyAiZGhjcC1vcHRpb24iLCAxLCAwLCAnTycgfSwKKyAgICB7ICJkaGNwLWJvb3QiLCAxLCAwLCAnTScgfSwKKyAgICB7ICJkb21haW4iLCAxLCAwLCAncycgfSwKKyAgICB7ICJkb21haW4tc3VmZml4IiwgMSwgMCwgJ3MnIH0sCisgICAgeyAiaW50ZXJmYWNlIiwgMSwgMCwgJ2knIH0sCisgICAgeyAibGlzdGVuLWFkZHJlc3MiLCAxLCAwLCAnYScgfSwKKyAgICB7ICJsb2NhbC1zZXJ2aWNlIiwgMCwgMCwgTE9QVF9MT0NBTF9TRVJWSUNFIH0sCisgICAgeyAiYm9ndXMtcHJpdiIsIDAsIDAsICdiJyB9LAorICAgIHsgImJvZ3VzLW54ZG9tYWluIiwgMSwgMCwgJ0InIH0sCisgICAgeyAiaWdub3JlLWFkZHJlc3MiLCAxLCAwLCBMT1BUX0lHTk9SRV9BRERSIH0sCisgICAgeyAic2VsZm14IiwgMCwgMCwgJ2UnIH0sCisgICAgeyAiZmlsdGVyd2luMmsiLCAwLCAwLCAnZicgfSwKKyAgICB7ICJwaWQtZmlsZSIsIDIsIDAsICd4JyB9LAorICAgIHsgInN0cmljdC1vcmRlciIsIDAsIDAsICdvJyB9LAorICAgIHsgInNlcnZlciIsIDEsIDAsICdTJyB9LAorICAgIHsgInJldi1zZXJ2ZXIiLCAxLCAwLCBMT1BUX1JFVl9TRVJWIH0sCisgICAgeyAibG9jYWwiLCAxLCAwLCBMT1BUX0xPQ0FMIH0sCisgICAgeyAiYWRkcmVzcyIsIDEsIDAsICdBJyB9LAorICAgIHsgImNvbmYtZmlsZSIsIDIsIDAsICdDJyB9LAorICAgIHsgIm5vLXJlc29sdiIsIDAsIDAsICdSJyB9LAorICAgIHsgImV4cGFuZC1ob3N0cyIsIDAsIDAsICdFJyB9LAorICAgIHsgImxvY2FsbXgiLCAwLCAwLCAnTCcgfSwKKyAgICB7ICJsb2NhbC10dGwiLCAxLCAwLCAnVCcgfSwKKyAgICB7ICJuby1uZWdjYWNoZSIsIDAsIDAsICdOJyB9LAorICAgIHsgImFkZG4taG9zdHMiLCAxLCAwLCAnSCcgfSwKKyAgICB7ICJxdWVyeS1wb3J0IiwgMSwgMCwgJ1EnIH0sCisgICAgeyAiZXhjZXB0LWludGVyZmFjZSIsIDEsIDAsICdJJyB9LAorICAgIHsgIm5vLWRoY3AtaW50ZXJmYWNlIiwgMSwgMCwgJzInIH0sCisgICAgeyAiZG9tYWluLW5lZWRlZCIsIDAsIDAsICdEJyB9LAorICAgIHsgImRoY3AtbGVhc2UtbWF4IiwgMSwgMCwgJ1gnIH0sCisgICAgeyAiYmluZC1pbnRlcmZhY2VzIiwgMCwgMCwgJ3onIH0sCisgICAgeyAicmVhZC1ldGhlcnMiLCAwLCAwLCAnWicgfSwKKyAgICB7ICJhbGlhcyIsIDEsIDAsICdWJyB9LAorICAgIHsgImRoY3AtdmVuZG9yY2xhc3MiLCAxLCAwLCAnVScgfSwKKyAgICB7ICJkaGNwLXVzZXJjbGFzcyIsIDEsIDAsICdqJyB9LAorICAgIHsgImRoY3AtaWdub3JlIiwgMSwgMCwgJ0onIH0sCisgICAgeyAiZWRucy1wYWNrZXQtbWF4IiwgMSwgMCwgJ1AnIH0sCisgICAgeyAia2VlcC1pbi1mb3JlZ3JvdW5kIiwgMCwgMCwgJ2snIH0sCisgICAgeyAiZGhjcC1hdXRob3JpdGF0aXZlIiwgMCwgMCwgJ0snIH0sCisgICAgeyAic3J2LWhvc3QiLCAxLCAwLCAnVycgfSwKKyAgICB7ICJsb2NhbGlzZS1xdWVyaWVzIiwgMCwgMCwgJ3knIH0sCisgICAgeyAidHh0LXJlY29yZCIsIDEsIDAsICdZJyB9LAorICAgIHsgImRucy1yciIsIDEsIDAsIExPUFRfUlIgfSwKKyAgICB7ICJlbmFibGUtZGJ1cyIsIDIsIDAsICcxJyB9LAorICAgIHsgImJvb3RwLWR5bmFtaWMiLCAyLCAwLCAnMycgfSwKKyAgICB7ICJkaGNwLW1hYyIsIDEsIDAsICc0JyB9LAorICAgIHsgIm5vLXBpbmciLCAwLCAwLCAnNScgfSwKKyAgICB7ICJkaGNwLXNjcmlwdCIsIDEsIDAsICc2JyB9LAorICAgIHsgImNvbmYtZGlyIiwgMSwgMCwgJzcnIH0sCisgICAgeyAibG9nLWZhY2lsaXR5IiwgMSwgMCAsJzgnIH0sCisgICAgeyAibGVhc2VmaWxlLXJvIiwgMCwgMCwgJzknIH0sCisgICAgeyAiZG5zLWZvcndhcmQtbWF4IiwgMSwgMCwgJzAnIH0sCisgICAgeyAiY2xlYXItb24tcmVsb2FkIiwgMCwgMCwgTE9QVF9SRUxPQUQgfSwKKyAgICB7ICJkaGNwLWlnbm9yZS1uYW1lcyIsIDIsIDAsIExPUFRfTk9fTkFNRVMgfSwKKyAgICB7ICJlbmFibGUtdGZ0cCIsIDIsIDAsIExPUFRfVEZUUCB9LAorICAgIHsgInRmdHAtc2VjdXJlIiwgMCwgMCwgTE9QVF9TRUNVUkUgfSwKKyAgICB7ICJ0ZnRwLXVuaXF1ZS1yb290IiwgMCwgMCwgTE9QVF9BUFJFRiB9LAorICAgIHsgInRmdHAtcm9vdCIsIDEsIDAsIExPUFRfUFJFRklYIH0sCisgICAgeyAidGZ0cC1tYXgiLCAxLCAwLCBMT1BUX1RGVFBfTUFYIH0sCisgICAgeyAidGZ0cC1sb3dlcmNhc2UiLCAwLCAwLCBMT1BUX1RGVFBfTEMgfSwKKyAgICB7ICJwdHItcmVjb3JkIiwgMSwgMCwgTE9QVF9QVFIgfSwKKyAgICB7ICJuYXB0ci1yZWNvcmQiLCAxLCAwLCBMT1BUX05BUFRSIH0sCisgICAgeyAiYnJpZGdlLWludGVyZmFjZSIsIDEsIDAgLCBMT1BUX0JSSURHRSB9LAorICAgIHsgImRoY3Atb3B0aW9uLWZvcmNlIiwgMSwgMCwgTE9QVF9GT1JDRSB9LAorICAgIHsgInRmdHAtbm8tYmxvY2tzaXplIiwgMCwgMCwgTE9QVF9OT0JMT0NLIH0sCisgICAgeyAibG9nLWRoY3AiLCAwLCAwLCBMT1BUX0xPR19PUFRTIH0sCisgICAgeyAibG9nLWFzeW5jIiwgMiwgMCwgTE9QVF9NQVhfTE9HUyB9LAorICAgIHsgImRoY3AtY2lyY3VpdGlkIiwgMSwgMCwgTE9QVF9DSVJDVUlUIH0sCisgICAgeyAiZGhjcC1yZW1vdGVpZCIsIDEsIDAsIExPUFRfUkVNT1RFIH0sCisgICAgeyAiZGhjcC1zdWJzY3JpZCIsIDEsIDAsIExPUFRfU1VCU0NSIH0sCisgICAgeyAiaW50ZXJmYWNlLW5hbWUiLCAxLCAwLCBMT1BUX0lOVE5BTUUgfSwKKyAgICB7ICJkaGNwLWhvc3RzZmlsZSIsIDEsIDAsIExPUFRfREhDUF9IT1NUIH0sCisgICAgeyAiZGhjcC1vcHRzZmlsZSIsIDEsIDAsIExPUFRfREhDUF9PUFRTIH0sCisgICAgeyAiZGhjcC1uby1vdmVycmlkZSIsIDAsIDAsIExPUFRfT1ZFUlJJREUgfSwKKyAgICB7ICJ0ZnRwLXBvcnQtcmFuZ2UiLCAxLCAwLCBMT1BUX1RGVFBQT1JUUyB9LAorICAgIHsgInN0b3AtZG5zLXJlYmluZCIsIDAsIDAsIExPUFRfUkVCSU5EIH0sCisgICAgeyAicmViaW5kLWRvbWFpbi1vayIsIDEsIDAsIExPUFRfTk9fUkVCSU5EIH0sCisgICAgeyAiYWxsLXNlcnZlcnMiLCAwLCAwLCBMT1BUX05PTEFTVCB9LCAKKyAgICB7ICJkaGNwLW1hdGNoIiwgMSwgMCwgTE9QVF9NQVRDSCB9LCAKKyAgICB7ICJkaGNwLWJyb2FkY2FzdCIsIDIsIDAsIExPUFRfQlJPQURDQVNUIH0sCisgICAgeyAibmVnLXR0bCIsIDEsIDAsIExPUFRfTkVHVFRMIH0sCisgICAgeyAibWF4LXR0bCIsIDEsIDAsIExPUFRfTUFYVFRMIH0sCisgICAgeyAibWluLWNhY2hlLXR0bCIsIDEsIDAsIExPUFRfTUlOQ1RUTCB9LAorICAgIHsgIm1heC1jYWNoZS10dGwiLCAxLCAwLCBMT1BUX01BWENUVEwgfSwKKyAgICB7ICJkaGNwLWFsdGVybmF0ZS1wb3J0IiwgMiwgMCwgTE9QVF9BTFRQT1JUIH0sCisgICAgeyAiZGhjcC1zY3JpcHR1c2VyIiwgMSwgMCwgTE9QVF9TQ1JJUFRVU1IgfSwKKyAgICB7ICJtaW4tcG9ydCIsIDEsIDAsIExPUFRfTUlOUE9SVCB9LAorICAgIHsgImRoY3AtZnFkbiIsIDAsIDAsIExPUFRfREhDUF9GUUROIH0sCisgICAgeyAiY25hbWUiLCAxLCAwLCBMT1BUX0NOQU1FIH0sCisgICAgeyAicHhlLXByb21wdCIsIDEsIDAsIExPUFRfUFhFX1BST01UIH0sCisgICAgeyAicHhlLXNlcnZpY2UiLCAxLCAwLCBMT1BUX1BYRV9TRVJWIH0sCisgICAgeyAidGVzdCIsIDAsIDAsIExPUFRfVEVTVCB9LAorICAgIHsgInRhZy1pZiIsIDEsIDAsIExPUFRfVEFHX0lGIH0sCisgICAgeyAiZGhjcC1wcm94eSIsIDIsIDAsIExPUFRfUFJPWFkgfSwKKyAgICB7ICJkaGNwLWdlbmVyYXRlLW5hbWVzIiwgMiwgMCwgTE9QVF9HRU5fTkFNRVMgfSwKKyAgICB7ICJyZWJpbmQtbG9jYWxob3N0LW9rIiwgMCwgMCwgIExPUFRfTE9DX1JFQk5EIH0sCisgICAgeyAiYWRkLW1hYyIsIDAsIDAsIExPUFRfQUREX01BQyB9LAorICAgIHsgImFkZC1zdWJuZXQiLCAyLCAwLCBMT1BUX0FERF9TQk5FVCB9LAorICAgIHsgInByb3h5LWRuc3NlYyIsIDAsIDAsIExPUFRfRE5TU0VDIH0sCisgICAgeyAiZGhjcC1zZXF1ZW50aWFsLWlwIiwgMCwgMCwgIExPUFRfSU5DUl9BRERSIH0sCisgICAgeyAiY29ubnRyYWNrIiwgMCwgMCwgTE9QVF9DT05OVFJBQ0sgfSwKKyAgICB7ICJkaGNwLWNsaWVudC11cGRhdGUiLCAwLCAwLCBMT1BUX0ZRRE4gfSwKKyAgICB7ICJkaGNwLWx1YXNjcmlwdCIsIDEsIDAsIExPUFRfTFVBU0NSSVBUIH0sCisgICAgeyAiZW5hYmxlLXJhIiwgMCwgMCwgTE9QVF9SQSB9LAorICAgIHsgImRoY3AtZHVpZCIsIDEsIDAsIExPUFRfRFVJRCB9LAorICAgIHsgImhvc3QtcmVjb3JkIiwgMSwgMCwgTE9QVF9IT1NUX1JFQyB9LAorICAgIHsgImJpbmQtZHluYW1pYyIsIDAsIDAsIExPUFRfQ0xWRVJCSU5EIH0sCisgICAgeyAiYXV0aC16b25lIiwgMSwgMCwgTE9QVF9BVVRIWk9ORSB9LAorICAgIHsgImF1dGgtc2VydmVyIiwgMSwgMCwgTE9QVF9BVVRIU0VSViB9LAorICAgIHsgImF1dGgtdHRsIiwgMSwgMCwgTE9QVF9BVVRIVFRMIH0sCisgICAgeyAiYXV0aC1zb2EiLCAxLCAwLCBMT1BUX0FVVEhTT0EgfSwKKyAgICB7ICJhdXRoLXNlYy1zZXJ2ZXJzIiwgMSwgMCwgTE9QVF9BVVRIU0ZTIH0sCisgICAgeyAiYXV0aC1wZWVyIiwgMSwgMCwgTE9QVF9BVVRIUEVFUiB9LCAKKyAgICB7ICJpcHNldCIsIDEsIDAsIExPUFRfSVBTRVQgfSwKKyAgICB7ICJzeW50aC1kb21haW4iLCAxLCAwLCBMT1BUX1NZTlRIIH0sCisgICAgeyAiZG5zc2VjIiwgMCwgMCwgTE9QVF9TRUNfVkFMSUQgfSwKKyAgICB7ICJ0cnVzdC1hbmNob3IiLCAxLCAwLCBMT1BUX1RSVVNUX0FOQ0hPUiB9LAorICAgIHsgImRuc3NlYy1kZWJ1ZyIsIDAsIDAsIExPUFRfRE5TU0VDX0RFQlVHIH0sCisgICAgeyAiZG5zc2VjLWNoZWNrLXVuc2lnbmVkIiwgMCwgMCwgTE9QVF9ETlNTRUNfQ0hFQ0sgfSwKKyAgICB7ICJkbnNzZWMtbm8tdGltZWNoZWNrIiwgMCwgMCwgTE9QVF9ETlNTRUNfVElNRSB9LAorI2lmZGVmIE9QVElPTjZfUFJFRklYX0NMQVNTIAorICAgIHsgImRoY3AtcHJlZml4LWNsYXNzIiwgMSwgMCwgTE9QVF9QUkVGX0NMU1MgfSwKKyNlbmRpZgorICAgIHsgImRoY3AtcmVsYXkiLCAxLCAwLCBMT1BUX1JFTEFZIH0sCisgICAgeyAicmEtcGFyYW0iLCAxLCAwLCBMT1BUX1JBX1BBUkFNIH0sCisgICAgeyAicXVpZXQtZGhjcCIsIDAsIDAsIExPUFRfUVVJRVRfREhDUCB9LAorICAgIHsgInF1aWV0LWRoY3A2IiwgMCwgMCwgTE9QVF9RVUlFVF9ESENQNiB9LAorICAgIHsgInF1aWV0LXJhIiwgMCwgMCwgTE9QVF9RVUlFVF9SQSB9LAorICAgIHsgImRucy1sb29wLWRldGVjdCIsIDAsIDAsIExPUFRfTE9PUF9ERVRFQ1QgfSwKKyAgICB7IE5VTEwsIDAsIDAsIDAgfQorICB9OworCisKKyNkZWZpbmUgQVJHX0RVUCAgICAgICBPUFRfTEFTVAorI2RlZmluZSBBUkdfT05FICAgICAgIE9QVF9MQVNUICsgMQorI2RlZmluZSBBUkdfVVNFRF9DTCAgIE9QVF9MQVNUICsgMgorI2RlZmluZSBBUkdfVVNFRF9GSUxFIE9QVF9MQVNUICsgMworCitzdGF0aWMgc3RydWN0IHsKKyAgaW50IG9wdDsKKyAgdW5zaWduZWQgaW50IHJlcHQ7CisgIGNoYXIgKiBjb25zdCBmbGFnZGVzYzsKKyAgY2hhciAqIGNvbnN0IGRlc2M7CisgIGNoYXIgKiBjb25zdCBhcmc7Cit9IHVzYWdlW10gPSB7CisgIHsgJ2EnLCBBUkdfRFVQLCAiPGlwYWRkcj4iLCAgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IGxvY2FsIGFkZHJlc3MoZXMpIHRvIGxpc3RlbiBvbi4iKSwgTlVMTCB9LAorICB7ICdBJywgQVJHX0RVUCwgIi88ZG9tYWluPi88aXBhZGRyPiIsIGdldHRleHRfbm9vcCgiUmV0dXJuIGlwYWRkciBmb3IgYWxsIGhvc3RzIGluIHNwZWNpZmllZCBkb21haW5zLiIpLCBOVUxMIH0sCisgIHsgJ2InLCBPUFRfQk9HVVNQUklWLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkZha2UgcmV2ZXJzZSBsb29rdXBzIGZvciBSRkMxOTE4IHByaXZhdGUgYWRkcmVzcyByYW5nZXMuIiksIE5VTEwgfSwKKyAgeyAnQicsIEFSR19EVVAsICI8aXBhZGRyPiIsIGdldHRleHRfbm9vcCgiVHJlYXQgaXBhZGRyIGFzIE5YRE9NQUlOIChkZWZlYXRzIFZlcmlzaWduIHdpbGRjYXJkKS4iKSwgTlVMTCB9LCAKKyAgeyAnYycsIEFSR19PTkUsICI8aW50ZWdlcj4iLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIGNhY2hlIGluIGVudHJpZXMgKGRlZmF1bHRzIHRvICVzKS4iKSwgIiQiIH0sCisgIHsgJ0MnLCBBUkdfRFVQLCAiPHBhdGg+IiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IGNvbmZpZ3VyYXRpb24gZmlsZSAoZGVmYXVsdHMgdG8gJXMpLiIpLCBDT05GRklMRSB9LAorICB7ICdkJywgT1BUX0RFQlVHLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkRvIE5PVCBmb3JrIGludG8gdGhlIGJhY2tncm91bmQ6IHJ1biBpbiBkZWJ1ZyBtb2RlLiIpLCBOVUxMIH0sCisgIHsgJ0QnLCBPUFRfTk9ET1RTX0xPQ0FMLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkRvIE5PVCBmb3J3YXJkIHF1ZXJpZXMgd2l0aCBubyBkb21haW4gcGFydC4iKSwgTlVMTCB9LCAKKyAgeyAnZScsIE9QVF9TRUxGTVgsIE5VTEwsIGdldHRleHRfbm9vcCgiUmV0dXJuIHNlbGYtcG9pbnRpbmcgTVggcmVjb3JkcyBmb3IgbG9jYWwgaG9zdHMuIiksIE5VTEwgfSwKKyAgeyAnRScsIE9QVF9FWFBBTkQsIE5VTEwsIGdldHRleHRfbm9vcCgiRXhwYW5kIHNpbXBsZSBuYW1lcyBpbiAvZXRjL2hvc3RzIHdpdGggZG9tYWluLXN1ZmZpeC4iKSwgTlVMTCB9LAorICB7ICdmJywgT1BUX0ZJTFRFUiwgTlVMTCwgZ2V0dGV4dF9ub29wKCJEb24ndCBmb3J3YXJkIHNwdXJpb3VzIEROUyByZXF1ZXN0cyBmcm9tIFdpbmRvd3MgaG9zdHMuIiksIE5VTEwgfSwKKyAgeyAnRicsIEFSR19EVVAsICI8aXBhZGRyPiwuLi4iLCBnZXR0ZXh0X25vb3AoIkVuYWJsZSBESENQIGluIHRoZSByYW5nZSBnaXZlbiB3aXRoIGxlYXNlIGR1cmF0aW9uLiIpLCBOVUxMIH0sCisgIHsgJ2cnLCBBUkdfT05FLCAiPGdyb3VwbmFtZT4iLCBnZXR0ZXh0X25vb3AoIkNoYW5nZSB0byB0aGlzIGdyb3VwIGFmdGVyIHN0YXJ0dXAgKGRlZmF1bHRzIHRvICVzKS4iKSwgQ0hHUlAgfSwKKyAgeyAnRycsIEFSR19EVVAsICI8aG9zdHNwZWM+IiwgZ2V0dGV4dF9ub29wKCJTZXQgYWRkcmVzcyBvciBob3N0bmFtZSBmb3IgYSBzcGVjaWZpZWQgbWFjaGluZS4iKSwgTlVMTCB9LAorICB7IExPUFRfREhDUF9IT1NULCBBUkdfRFVQLCAiPHBhdGg+IiwgZ2V0dGV4dF9ub29wKCJSZWFkIERIQ1AgaG9zdCBzcGVjcyBmcm9tIGZpbGUuIiksIE5VTEwgfSwKKyAgeyBMT1BUX0RIQ1BfT1BUUywgQVJHX0RVUCwgIjxwYXRoPiIsIGdldHRleHRfbm9vcCgiUmVhZCBESENQIG9wdGlvbiBzcGVjcyBmcm9tIGZpbGUuIiksIE5VTEwgfSwKKyAgeyBMT1BUX1RBR19JRiwgQVJHX0RVUCwgInRhZy1leHByZXNzaW9uIiwgZ2V0dGV4dF9ub29wKCJFdmFsdWF0ZSBjb25kaXRpb25hbCB0YWcgZXhwcmVzc2lvbi4iKSwgTlVMTCB9LAorICB7ICdoJywgT1BUX05PX0hPU1RTLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkRvIE5PVCBsb2FkICVzIGZpbGUuIiksIEhPU1RTRklMRSB9LAorICB7ICdIJywgQVJHX0RVUCwgIjxwYXRoPiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBhIGhvc3RzIGZpbGUgdG8gYmUgcmVhZCBpbiBhZGRpdGlvbiB0byAlcy4iKSwgSE9TVFNGSUxFIH0sCisgIHsgJ2knLCBBUkdfRFVQLCAiPGludGVyZmFjZT4iLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgaW50ZXJmYWNlKHMpIHRvIGxpc3RlbiBvbi4iKSwgTlVMTCB9LAorICB7ICdJJywgQVJHX0RVUCwgIjxpbnRlcmZhY2U+IiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IGludGVyZmFjZShzKSBOT1QgdG8gbGlzdGVuIG9uLiIpICwgTlVMTCB9LAorICB7ICdqJywgQVJHX0RVUCwgInNldDo8dGFnPiw8Y2xhc3M+IiwgZ2V0dGV4dF9ub29wKCJNYXAgREhDUCB1c2VyIGNsYXNzIHRvIHRhZy4iKSwgTlVMTCB9LAorICB7IExPUFRfQ0lSQ1VJVCwgQVJHX0RVUCwgInNldDo8dGFnPiw8Y2lyY3VpdD4iLCBnZXR0ZXh0X25vb3AoIk1hcCBSRkMzMDQ2IGNpcmN1aXQtaWQgdG8gdGFnLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9SRU1PVEUsIEFSR19EVVAsICJzZXQ6PHRhZz4sPHJlbW90ZT4iLCBnZXR0ZXh0X25vb3AoIk1hcCBSRkMzMDQ2IHJlbW90ZS1pZCB0byB0YWcuIiksIE5VTEwgfSwKKyAgeyBMT1BUX1NVQlNDUiwgQVJHX0RVUCwgInNldDo8dGFnPiw8cmVtb3RlPiIsIGdldHRleHRfbm9vcCgiTWFwIFJGQzM5OTMgc3Vic2NyaWJlci1pZCB0byB0YWcuIiksIE5VTEwgfSwKKyAgeyAnSicsIEFSR19EVVAsICJ0YWc6PHRhZz4uLi4iLCBnZXR0ZXh0X25vb3AoIkRvbid0IGRvIERIQ1AgZm9yIGhvc3RzIHdpdGggdGFnIHNldC4iKSwgTlVMTCB9LAorICB7IExPUFRfQlJPQURDQVNULCBBUkdfRFVQLCAiWz10YWc6PHRhZz4uLi5dIiwgZ2V0dGV4dF9ub29wKCJGb3JjZSBicm9hZGNhc3QgcmVwbGllcyBmb3IgaG9zdHMgd2l0aCB0YWcgc2V0LiIpLCBOVUxMIH0sIAorICB7ICdrJywgT1BUX05PX0ZPUkssIE5VTEwsIGdldHRleHRfbm9vcCgiRG8gTk9UIGZvcmsgaW50byB0aGUgYmFja2dyb3VuZCwgZG8gTk9UIHJ1biBpbiBkZWJ1ZyBtb2RlLiIpLCBOVUxMIH0sCisgIHsgJ0snLCBPUFRfQVVUSE9SSVRBVElWRSwgTlVMTCwgZ2V0dGV4dF9ub29wKCJBc3N1bWUgd2UgYXJlIHRoZSBvbmx5IERIQ1Agc2VydmVyIG9uIHRoZSBsb2NhbCBuZXR3b3JrLiIpLCBOVUxMIH0sCisgIHsgJ2wnLCBBUkdfT05FLCAiPHBhdGg+IiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IHdoZXJlIHRvIHN0b3JlIERIQ1AgbGVhc2VzIChkZWZhdWx0cyB0byAlcykuIiksIExFQVNFRklMRSB9LAorICB7ICdMJywgT1BUX0xPQ0FMTVgsIE5VTEwsIGdldHRleHRfbm9vcCgiUmV0dXJuIE1YIHJlY29yZHMgZm9yIGxvY2FsIGhvc3RzLiIpLCBOVUxMIH0sCisgIHsgJ20nLCBBUkdfRFVQLCAiPGhvc3RfbmFtZT4sPHRhcmdldD4sPHByZWY+IiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IGFuIE1YIHJlY29yZC4iKSwgTlVMTCB9LAorICB7ICdNJywgQVJHX0RVUCwgIjxib290cCBvcHRzPiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBCT09UUCBvcHRpb25zIHRvIERIQ1Agc2VydmVyLiIpLCBOVUxMIH0sCisgIHsgJ24nLCBPUFRfTk9fUE9MTCwgTlVMTCwgZ2V0dGV4dF9ub29wKCJEbyBOT1QgcG9sbCAlcyBmaWxlLCByZWxvYWQgb25seSBvbiBTSUdIVVAuIiksIFJFU09MVkZJTEUgfSwgCisgIHsgJ04nLCBPUFRfTk9fTkVHLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkRvIE5PVCBjYWNoZSBmYWlsZWQgc2VhcmNoIHJlc3VsdHMuIiksIE5VTEwgfSwKKyAgeyAnbycsIE9QVF9PUkRFUiwgTlVMTCwgZ2V0dGV4dF9ub29wKCJVc2UgbmFtZXNlcnZlcnMgc3RyaWN0bHkgaW4gdGhlIG9yZGVyIGdpdmVuIGluICVzLiIpLCBSRVNPTFZGSUxFIH0sCisgIHsgJ08nLCBBUkdfRFVQLCAiPG9wdHNwZWM+IiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IG9wdGlvbnMgdG8gYmUgc2VudCB0byBESENQIGNsaWVudHMuIiksIE5VTEwgfSwKKyAgeyBMT1BUX0ZPUkNFLCBBUkdfRFVQLCAiPG9wdHNwZWM+IiwgZ2V0dGV4dF9ub29wKCJESENQIG9wdGlvbiBzZW50IGV2ZW4gaWYgdGhlIGNsaWVudCBkb2VzIG5vdCByZXF1ZXN0IGl0LiIpLCBOVUxMfSwKKyAgeyAncCcsIEFSR19PTkUsICI8aW50ZWdlcj4iLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgcG9ydCB0byBsaXN0ZW4gZm9yIEROUyByZXF1ZXN0cyBvbiAoZGVmYXVsdHMgdG8gNTMpLiIpLCBOVUxMIH0sCisgIHsgJ1AnLCBBUkdfT05FLCAiPGludGVnZXI+IiwgZ2V0dGV4dF9ub29wKCJNYXhpbXVtIHN1cHBvcnRlZCBVRFAgcGFja2V0IHNpemUgZm9yIEVETlMuMCAoZGVmYXVsdHMgdG8gJXMpLiIpLCAiKiIgfSwKKyAgeyAncScsIEFSR19EVVAsIE5VTEwsIGdldHRleHRfbm9vcCgiTG9nIEROUyBxdWVyaWVzLiIpLCBOVUxMIH0sCisgIHsgJ1EnLCBBUkdfT05FLCAiPGludGVnZXI+IiwgZ2V0dGV4dF9ub29wKCJGb3JjZSB0aGUgb3JpZ2luYXRpbmcgcG9ydCBmb3IgdXBzdHJlYW0gRE5TIHF1ZXJpZXMuIiksIE5VTEwgfSwKKyAgeyAnUicsIE9QVF9OT19SRVNPTFYsIE5VTEwsIGdldHRleHRfbm9vcCgiRG8gTk9UIHJlYWQgcmVzb2x2LmNvbmYuIiksIE5VTEwgfSwKKyAgeyAncicsIEFSR19EVVAsICI8cGF0aD4iLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgcGF0aCB0byByZXNvbHYuY29uZiAoZGVmYXVsdHMgdG8gJXMpLiIpLCBSRVNPTFZGSUxFIH0sIAorICB7IExPUFRfU0VSVkVSU19GSUxFLCBBUkdfT05FLCAiPHBhdGg+IiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IHBhdGggdG8gZmlsZSB3aXRoIHNlcnZlcj0gb3B0aW9ucyIpLCBOVUxMIH0sCisgIHsgJ1MnLCBBUkdfRFVQLCAiLzxkb21haW4+LzxpcGFkZHI+IiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IGFkZHJlc3MoZXMpIG9mIHVwc3RyZWFtIHNlcnZlcnMgd2l0aCBvcHRpb25hbCBkb21haW5zLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9SRVZfU0VSViwgQVJHX0RVUCwgIjxhZGRyPi88cHJlZml4Piw8aXBhZGRyPiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBhZGRyZXNzIG9mIHVwc3RyZWFtIHNlcnZlcnMgZm9yIHJldmVyc2UgYWRkcmVzcyBxdWVyaWVzIiksIE5VTEwgfSwKKyAgeyBMT1BUX0xPQ0FMLCBBUkdfRFVQLCAiLzxkb21haW4+LyIsIGdldHRleHRfbm9vcCgiTmV2ZXIgZm9yd2FyZCBxdWVyaWVzIHRvIHNwZWNpZmllZCBkb21haW5zLiIpLCBOVUxMIH0sCisgIHsgJ3MnLCBBUkdfRFVQLCAiPGRvbWFpbj5bLDxyYW5nZT5dIiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IHRoZSBkb21haW4gdG8gYmUgYXNzaWduZWQgaW4gREhDUCBsZWFzZXMuIiksIE5VTEwgfSwKKyAgeyAndCcsIEFSR19PTkUsICI8aG9zdF9uYW1lPiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBkZWZhdWx0IHRhcmdldCBpbiBhbiBNWCByZWNvcmQuIiksIE5VTEwgfSwKKyAgeyAnVCcsIEFSR19PTkUsICI8aW50ZWdlcj4iLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIHJlcGxpZXMgZnJvbSAvZXRjL2hvc3RzLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9ORUdUVEwsIEFSR19PTkUsICI8aW50ZWdlcj4iLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgdGltZS10by1saXZlIGluIHNlY29uZHMgZm9yIG5lZ2F0aXZlIGNhY2hpbmcuIiksIE5VTEwgfSwKKyAgeyBMT1BUX01BWFRUTCwgQVJHX09ORSwgIjxpbnRlZ2VyPiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSB0aW1lLXRvLWxpdmUgaW4gc2Vjb25kcyBmb3IgbWF4aW11bSBUVEwgdG8gc2VuZCB0byBjbGllbnRzLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9NQVhDVFRMLCBBUkdfT05FLCAiPGludGVnZXI+IiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IHRpbWUtdG8tbGl2ZSBjZWlsaW5nIGZvciBjYWNoZS4iKSwgTlVMTCB9LAorICB7IExPUFRfTUlOQ1RUTCwgQVJHX09ORSwgIjxpbnRlZ2VyPiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSB0aW1lLXRvLWxpdmUgZmxvb3IgZm9yIGNhY2hlLiIpLCBOVUxMIH0sCisgIHsgJ3UnLCBBUkdfT05FLCAiPHVzZXJuYW1lPiIsIGdldHRleHRfbm9vcCgiQ2hhbmdlIHRvIHRoaXMgdXNlciBhZnRlciBzdGFydHVwLiAoZGVmYXVsdHMgdG8gJXMpLiIpLCBDSFVTRVIgfSwgCisgIHsgJ1UnLCBBUkdfRFVQLCAic2V0Ojx0YWc+LDxjbGFzcz4iLCBnZXR0ZXh0X25vb3AoIk1hcCBESENQIHZlbmRvciBjbGFzcyB0byB0YWcuIiksIE5VTEwgfSwKKyAgeyAndicsIDAsIE5VTEwsIGdldHRleHRfbm9vcCgiRGlzcGxheSBkbnNtYXNxIHZlcnNpb24gYW5kIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4iKSwgTlVMTCB9LAorICB7ICdWJywgQVJHX0RVUCwgIjxpcGFkZHI+LDxpcGFkZHI+LDxuZXRtYXNrPiIsIGdldHRleHRfbm9vcCgiVHJhbnNsYXRlIElQdjQgYWRkcmVzc2VzIGZyb20gdXBzdHJlYW0gc2VydmVycy4iKSwgTlVMTCB9LAorICB7ICdXJywgQVJHX0RVUCwgIjxuYW1lPiw8dGFyZ2V0PiwuLi4iLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgYSBTUlYgcmVjb3JkLiIpLCBOVUxMIH0sCisgIHsgJ3cnLCAwLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkRpc3BsYXkgdGhpcyBtZXNzYWdlLiBVc2UgLS1oZWxwIGRoY3AgZm9yIGtub3duIERIQ1Agb3B0aW9ucy4iKSwgTlVMTCB9LAorICB7ICd4JywgQVJHX09ORSwgIjxwYXRoPiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBwYXRoIG9mIFBJRCBmaWxlIChkZWZhdWx0cyB0byAlcykuIiksIFJVTkZJTEUgfSwKKyAgeyAnWCcsIEFSR19PTkUsICI8aW50ZWdlcj4iLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgbWF4aW11bSBudW1iZXIgb2YgREhDUCBsZWFzZXMgKGRlZmF1bHRzIHRvICVzKS4iKSwgIiYiIH0sCisgIHsgJ3knLCBPUFRfTE9DQUxJU0UsIE5VTEwsIGdldHRleHRfbm9vcCgiQW5zd2VyIEROUyBxdWVyaWVzIGJhc2VkIG9uIHRoZSBpbnRlcmZhY2UgYSBxdWVyeSB3YXMgc2VudCB0by4iKSwgTlVMTCB9LAorICB7ICdZJywgQVJHX0RVUCwgIjxuYW1lPiw8dHh0PlssPHR4dF0iLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgVFhUIEROUyByZWNvcmQuIiksIE5VTEwgfSwKKyAgeyBMT1BUX1BUUiwgQVJHX0RVUCwgIjxuYW1lPiw8dGFyZ2V0PiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBQVFIgRE5TIHJlY29yZC4iKSwgTlVMTCB9LAorICB7IExPUFRfSU5UTkFNRSwgQVJHX0RVUCwgIjxuYW1lPiw8aW50ZXJmYWNlPiIsIGdldHRleHRfbm9vcCgiR2l2ZSBETlMgbmFtZSB0byBJUHY0IGFkZHJlc3Mgb2YgaW50ZXJmYWNlLiIpLCBOVUxMIH0sCisgIHsgJ3onLCBPUFRfTk9XSUxELCBOVUxMLCBnZXR0ZXh0X25vb3AoIkJpbmQgb25seSB0byBpbnRlcmZhY2VzIGluIHVzZS4iKSwgTlVMTCB9LAorICB7ICdaJywgT1BUX0VUSEVSUywgTlVMTCwgZ2V0dGV4dF9ub29wKCJSZWFkIERIQ1Agc3RhdGljIGhvc3QgaW5mb3JtYXRpb24gZnJvbSAlcy4iKSwgRVRIRVJTRklMRSB9LAorICB7ICcxJywgQVJHX09ORSwgIls9PGJ1c25hbWU+XSIsIGdldHRleHRfbm9vcCgiRW5hYmxlIHRoZSBEQnVzIGludGVyZmFjZSBmb3Igc2V0dGluZyB1cHN0cmVhbSBzZXJ2ZXJzLCBldGMuIiksIE5VTEwgfSwKKyAgeyAnMicsIEFSR19EVVAsICI8aW50ZXJmYWNlPiIsIGdldHRleHRfbm9vcCgiRG8gbm90IHByb3ZpZGUgREhDUCBvbiB0aGlzIGludGVyZmFjZSwgb25seSBwcm92aWRlIEROUy4iKSwgTlVMTCB9LAorICB7ICczJywgQVJHX0RVUCwgIls9dGFnOjx0YWc+XS4uLiIsIGdldHRleHRfbm9vcCgiRW5hYmxlIGR5bmFtaWMgYWRkcmVzcyBhbGxvY2F0aW9uIGZvciBib290cC4iKSwgTlVMTCB9LAorICB7ICc0JywgQVJHX0RVUCwgInNldDo8dGFnPiw8bWFjIGFkZHJlc3M+IiwgZ2V0dGV4dF9ub29wKCJNYXAgTUFDIGFkZHJlc3MgKHdpdGggd2lsZGNhcmRzKSB0byBvcHRpb24gc2V0LiIpLCBOVUxMIH0sCisgIHsgTE9QVF9CUklER0UsIEFSR19EVVAsICI8aWZhY2U+LDxhbGlhcz4uLiIsIGdldHRleHRfbm9vcCgiVHJlYXQgREhDUCByZXF1ZXN0cyBvbiBhbGlhc2VzIGFzIGFycml2aW5nIGZyb20gaW50ZXJmYWNlLiIpLCBOVUxMIH0sCisgIHsgJzUnLCBPUFRfTk9fUElORywgTlVMTCwgZ2V0dGV4dF9ub29wKCJEaXNhYmxlIElDTVAgZWNobyBhZGRyZXNzIGNoZWNraW5nIGluIHRoZSBESENQIHNlcnZlci4iKSwgTlVMTCB9LAorICB7ICc2JywgQVJHX09ORSwgIjxwYXRoPiIsIGdldHRleHRfbm9vcCgiU2hlbGwgc2NyaXB0IHRvIHJ1biBvbiBESENQIGxlYXNlIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbi4iKSwgTlVMTCB9LAorICB7IExPUFRfTFVBU0NSSVBULCBBUkdfRFVQLCAicGF0aCIsIGdldHRleHRfbm9vcCgiTHVhIHNjcmlwdCB0byBydW4gb24gREhDUCBsZWFzZSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uIiksIE5VTEwgfSwKKyAgeyBMT1BUX1NDUklQVFVTUiwgQVJHX09ORSwgIjx1c2VybmFtZT4iLCBnZXR0ZXh0X25vb3AoIlJ1biBsZWFzZS1jaGFuZ2Ugc2NyaXB0cyBhcyB0aGlzIHVzZXIuIiksIE5VTEwgfSwKKyAgeyAnNycsIEFSR19EVVAsICI8cGF0aD4iLCBnZXR0ZXh0X25vb3AoIlJlYWQgY29uZmlndXJhdGlvbiBmcm9tIGFsbCB0aGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuIiksIE5VTEwgfSwKKyAgeyAnOCcsIEFSR19PTkUsICI8ZmFjaWx0eT58PGZpbGU+IiwgZ2V0dGV4dF9ub29wKCJMb2cgdG8gdGhpcyBzeXNsb2cgZmFjaWxpdHkgb3IgZmlsZS4gKGRlZmF1bHRzIHRvIERBRU1PTikiKSwgTlVMTCB9LAorICB7ICc5JywgT1BUX0xFQVNFX1JPLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkRvIG5vdCB1c2UgbGVhc2VmaWxlLiIpLCBOVUxMIH0sCisgIHsgJzAnLCBBUkdfT05FLCAiPGludGVnZXI+IiwgZ2V0dGV4dF9ub29wKCJNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IEROUyBxdWVyaWVzLiAoZGVmYXVsdHMgdG8gJXMpIiksICIhIiB9LCAKKyAgeyBMT1BUX1JFTE9BRCwgT1BUX1JFTE9BRCwgTlVMTCwgZ2V0dGV4dF9ub29wKCJDbGVhciBETlMgY2FjaGUgd2hlbiByZWxvYWRpbmcgJXMuIiksIFJFU09MVkZJTEUgfSwKKyAgeyBMT1BUX05PX05BTUVTLCBBUkdfRFVQLCAiWz10YWc6PHRhZz5dLi4uIiwgZ2V0dGV4dF9ub29wKCJJZ25vcmUgaG9zdG5hbWVzIHByb3ZpZGVkIGJ5IERIQ1AgY2xpZW50cy4iKSwgTlVMTCB9LAorICB7IExPUFRfT1ZFUlJJREUsIE9QVF9OT19PVkVSUklERSwgTlVMTCwgZ2V0dGV4dF9ub29wKCJEbyBOT1QgcmV1c2UgZmlsZW5hbWUgYW5kIHNlcnZlciBmaWVsZHMgZm9yIGV4dHJhIERIQ1Agb3B0aW9ucy4iKSwgTlVMTCB9LAorICB7IExPUFRfVEZUUCwgQVJHX0RVUCwgIls9PGludHI+Wyw8aW50cj5dXSIsIGdldHRleHRfbm9vcCgiRW5hYmxlIGludGVncmF0ZWQgcmVhZC1vbmx5IFRGVFAgc2VydmVyLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9QUkVGSVgsIEFSR19EVVAsICI8ZGlyPlssPGlmYWNlPl0iLCBnZXR0ZXh0X25vb3AoIkV4cG9ydCBmaWxlcyBieSBURlRQIG9ubHkgZnJvbSB0aGUgc3BlY2lmaWVkIHN1YnRyZWUuIiksIE5VTEwgfSwKKyAgeyBMT1BUX0FQUkVGLCBPUFRfVEZUUF9BUFJFRiwgTlVMTCwgZ2V0dGV4dF9ub29wKCJBZGQgY2xpZW50IElQIGFkZHJlc3MgdG8gdGZ0cC1yb290LiIpLCBOVUxMIH0sCisgIHsgTE9QVF9TRUNVUkUsIE9QVF9URlRQX1NFQ1VSRSwgTlVMTCwgZ2V0dGV4dF9ub29wKCJBbGxvdyBhY2Nlc3Mgb25seSB0byBmaWxlcyBvd25lZCBieSB0aGUgdXNlciBydW5uaW5nIGRuc21hc3EuIiksIE5VTEwgfSwKKyAgeyBMT1BUX1RGVFBfTUFYLCBBUkdfT05FLCAiPGludGVnZXI+IiwgZ2V0dGV4dF9ub29wKCJNYXhpbXVtIG51bWJlciBvZiBjb25uY3VycmVudCBURlRQIHRyYW5zZmVycyAoZGVmYXVsdHMgdG8gJXMpLiIpLCAiIyIgfSwKKyAgeyBMT1BUX05PQkxPQ0ssIE9QVF9URlRQX05PQkxPQ0ssIE5VTEwsIGdldHRleHRfbm9vcCgiRGlzYWJsZSB0aGUgVEZUUCBibG9ja3NpemUgZXh0ZW5zaW9uLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9URlRQX0xDLCBPUFRfVEZUUF9MQywgTlVMTCwgZ2V0dGV4dF9ub29wKCJDb252ZXJ0IFRGVFAgZmlsZW5hbWVzIHRvIGxvd2VyY2FzZSIpLCBOVUxMIH0sCisgIHsgTE9QVF9URlRQUE9SVFMsIEFSR19PTkUsICI8c3RhcnQ+LDxlbmQ+IiwgZ2V0dGV4dF9ub29wKCJFcGhlbWVyYWwgcG9ydCByYW5nZSBmb3IgdXNlIGJ5IFRGVFAgdHJhbnNmZXJzLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9MT0dfT1BUUywgT1BUX0xPR19PUFRTLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkV4dHJhIGxvZ2dpbmcgZm9yIERIQ1AuIiksIE5VTEwgfSwKKyAgeyBMT1BUX01BWF9MT0dTLCBBUkdfT05FLCAiWz08aW50ZWdlcj5dIiwgZ2V0dGV4dF9ub29wKCJFbmFibGUgYXN5bmMuIGxvZ2dpbmc7IG9wdGlvbmFsbHkgc2V0IHF1ZXVlIGxlbmd0aC4iKSwgTlVMTCB9LAorICB7IExPUFRfUkVCSU5ELCBPUFRfTk9fUkVCSU5ELCBOVUxMLCBnZXR0ZXh0X25vb3AoIlN0b3AgRE5TIHJlYmluZGluZy4gRmlsdGVyIHByaXZhdGUgSVAgcmFuZ2VzIHdoZW4gcmVzb2x2aW5nLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9MT0NfUkVCTkQsIE9QVF9MT0NBTF9SRUJJTkQsIE5VTEwsIGdldHRleHRfbm9vcCgiQWxsb3cgcmViaW5kaW5nIG9mIDEyNy4wLjAuMC84LCBmb3IgUkJMIHNlcnZlcnMuIiksIE5VTEwgfSwKKyAgeyBMT1BUX05PX1JFQklORCwgQVJHX0RVUCwgIi88ZG9tYWluPi8iLCBnZXR0ZXh0X25vb3AoIkluaGliaXQgRE5TLXJlYmluZCBwcm90ZWN0aW9uIG9uIHRoaXMgZG9tYWluLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9OT0xBU1QsIE9QVF9BTExfU0VSVkVSUywgTlVMTCwgZ2V0dGV4dF9ub29wKCJBbHdheXMgcGVyZm9ybSBETlMgcXVlcmllcyB0byBhbGwgc2VydmVycy4iKSwgTlVMTCB9LAorICB7IExPUFRfTUFUQ0gsIEFSR19EVVAsICJzZXQ6PHRhZz4sPG9wdHNwZWM+IiwgZ2V0dGV4dF9ub29wKCJTZXQgdGFnIGlmIGNsaWVudCBpbmNsdWRlcyBtYXRjaGluZyBvcHRpb24gaW4gcmVxdWVzdC4iKSwgTlVMTCB9LAorICB7IExPUFRfQUxUUE9SVCwgQVJHX09ORSwgIls9PHBvcnRzPl0iLCBnZXR0ZXh0X25vb3AoIlVzZSBhbHRlcm5hdGl2ZSBwb3J0cyBmb3IgREhDUC4iKSwgTlVMTCB9LAorICB7IExPUFRfTkFQVFIsIEFSR19EVVAsICI8bmFtZT4sPG5hcHRyPiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBOQVBUUiBETlMgcmVjb3JkLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9NSU5QT1JULCBBUkdfT05FLCAiPHBvcnQ+IiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IGxvd2VzdCBwb3J0IGF2YWlsYWJsZSBmb3IgRE5TIHF1ZXJ5IHRyYW5zbWlzc2lvbi4iKSwgTlVMTCB9LAorICB7IExPUFRfREhDUF9GUUROLCBPUFRfREhDUF9GUUROLCBOVUxMLCBnZXR0ZXh0X25vb3AoIlVzZSBvbmx5IGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZXMgZm9yIERIQ1AgY2xpZW50cy4iKSwgTlVMTCB9LAorICB7IExPUFRfR0VOX05BTUVTLCBBUkdfRFVQLCAiWz10YWc6PHRhZz5dIiwgZ2V0dGV4dF9ub29wKCJHZW5lcmF0ZSBob3N0bmFtZXMgYmFzZWQgb24gTUFDIGFkZHJlc3MgZm9yIG5hbWVsZXNzIGNsaWVudHMuIiksIE5VTEx9LAorICB7IExPUFRfUFJPWFksIEFSR19EVVAsICJbPTxpcGFkZHI+XS4uLiIsIGdldHRleHRfbm9vcCgiVXNlIHRoZXNlIERIQ1AgcmVsYXlzIGFzIGZ1bGwgcHJveGllcy4iKSwgTlVMTCB9LAorICB7IExPUFRfUkVMQVksIEFSR19EVVAsICI8bG9jYWwtYWRkcj4sPHNlcnZlcj5bLDxpbnRlcmZhY2U+XSIsIGdldHRleHRfbm9vcCgiUmVsYXkgREhDUCByZXF1ZXN0cyB0byBhIHJlbW90ZSBzZXJ2ZXIiKSwgTlVMTH0sCisgIHsgTE9QVF9DTkFNRSwgQVJHX0RVUCwgIjxhbGlhcz4sPHRhcmdldD4iLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgYWxpYXMgbmFtZSBmb3IgTE9DQUwgRE5TIG5hbWUuIiksIE5VTEwgfSwKKyAgeyBMT1BUX1BYRV9QUk9NVCwgQVJHX0RVUCwgIjxwcm9tcHQ+LFs8dGltZW91dD5dIiwgZ2V0dGV4dF9ub29wKCJQcm9tcHQgdG8gc2VuZCB0byBQWEUgY2xpZW50cy4iKSwgTlVMTCB9LAorICB7IExPUFRfUFhFX1NFUlYsIEFSR19EVVAsICI8c2VydmljZT4iLCBnZXR0ZXh0X25vb3AoIkJvb3Qgc2VydmljZSBmb3IgUFhFIG1lbnUuIiksIE5VTEwgfSwKKyAgeyBMT1BUX1RFU1QsIDAsIE5VTEwsIGdldHRleHRfbm9vcCgiQ2hlY2sgY29uZmlndXJhdGlvbiBzeW50YXguIiksIE5VTEwgfSwKKyAgeyBMT1BUX0FERF9NQUMsIE9QVF9BRERfTUFDLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkFkZCByZXF1ZXN0b3IncyBNQUMgYWRkcmVzcyB0byBmb3J3YXJkZWQgRE5TIHF1ZXJpZXMuIiksIE5VTEwgfSwKKyAgeyBMT1BUX0FERF9TQk5FVCwgQVJHX09ORSwgIjx2NCBwcmVmPlssPHY2IHByZWY+XSIsIGdldHRleHRfbm9vcCgiQWRkIHJlcXVlc3RvcidzIElQIHN1Ym5ldCB0byBmb3J3YXJkZWQgRE5TIHF1ZXJpZXMuIiksIE5VTEwgfSwKKyAgeyBMT1BUX0ROU1NFQywgT1BUX0ROU1NFQ19QUk9YWSwgTlVMTCwgZ2V0dGV4dF9ub29wKCJQcm94eSBETlNTRUMgdmFsaWRhdGlvbiByZXN1bHRzIGZyb20gdXBzdHJlYW0gbmFtZXNlcnZlcnMuIiksIE5VTEwgfSwKKyAgeyBMT1BUX0lOQ1JfQUREUiwgT1BUX0NPTlNFQ19BRERSLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkF0dGVtcHQgdG8gYWxsb2NhdGUgc2VxdWVudGlhbCBJUCBhZGRyZXNzZXMgdG8gREhDUCBjbGllbnRzLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9DT05OVFJBQ0ssIE9QVF9DT05OVFJBQ0ssIE5VTEwsIGdldHRleHRfbm9vcCgiQ29weSBjb25uZWN0aW9uLXRyYWNrIG1hcmsgZnJvbSBxdWVyaWVzIHRvIHVwc3RyZWFtIGNvbm5lY3Rpb25zLiIpLCBOVUxMIH0sCisgIHsgTE9QVF9GUUROLCBPUFRfRlFETl9VUERBVEUsIE5VTEwsIGdldHRleHRfbm9vcCgiQWxsb3cgREhDUCBjbGllbnRzIHRvIGRvIHRoZWlyIG93biBERE5TIHVwZGF0ZXMuIiksIE5VTEwgfSwKKyAgeyBMT1BUX1JBLCBPUFRfUkEsIE5VTEwsIGdldHRleHRfbm9vcCgiU2VuZCByb3V0ZXItYWR2ZXJ0aXNlbWVudHMgZm9yIGludGVyZmFjZXMgZG9pbmcgREhDUHY2IiksIE5VTEwgfSwKKyAgeyBMT1BUX0RVSUQsIEFSR19PTkUsICI8ZW50ZXJwcmlzZT4sPGR1aWQ+IiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IERVSURfRU4tdHlwZSBESENQdjYgc2VydmVyIERVSUQiKSwgTlVMTCB9LAorICB7IExPUFRfSE9TVF9SRUMsIEFSR19EVVAsICI8bmFtZT4sPGFkZHJlc3M+IiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IGhvc3QgKEEvQUFBQSBhbmQgUFRSKSByZWNvcmRzIiksIE5VTEwgfSwKKyAgeyBMT1BUX1JSLCBBUkdfRFVQLCAiPG5hbWU+LDxSUi1udW1iZXI+LFs8ZGF0YT5dIiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IGFyYml0cmFyeSBETlMgcmVzb3VyY2UgcmVjb3JkIiksIE5VTEwgfSwKKyAgeyBMT1BUX0NMVkVSQklORCwgT1BUX0NMRVZFUkJJTkQsIE5VTEwsIGdldHRleHRfbm9vcCgiQmluZCB0byBpbnRlcmZhY2VzIGluIHVzZSAtIGNoZWNrIGZvciBuZXcgaW50ZXJmYWNlcyIpLCBOVUxMIH0sCisgIHsgTE9QVF9BVVRIU0VSViwgQVJHX09ORSwgIjxOUz4sPGludGVyZmFjZT4iLCBnZXR0ZXh0X25vb3AoIkV4cG9ydCBsb2NhbCBuYW1lcyB0byBnbG9iYWwgRE5TIiksIE5VTEwgfSwKKyAgeyBMT1BUX0FVVEhaT05FLCBBUkdfRFVQLCAiPGRvbWFpbj4sWzxzdWJuZXQ+Li4uXSIsIGdldHRleHRfbm9vcCgiRG9tYWluIHRvIGV4cG9ydCB0byBnbG9iYWwgRE5TIiksIE5VTEwgfSwKKyAgeyBMT1BUX0FVVEhUVEwsIEFSR19PTkUsICI8aW50ZWdlcj4iLCBnZXR0ZXh0X25vb3AoIlNldCBUVEwgZm9yIGF1dGhvcml0YXRpdmUgcmVwbGllcyIpLCBOVUxMIH0sCisgIHsgTE9QVF9BVVRIU09BLCBBUkdfT05FLCAiPHNlcmlhbD5bLC4uLl0iLCBnZXR0ZXh0X25vb3AoIlNldCBhdXRob3JpdGl2ZSB6b25lIGluZm9ybWF0aW9uIiksIE5VTEwgfSwKKyAgeyBMT1BUX0FVVEhTRlMsIEFSR19EVVAsICI8TlM+Wyw8TlM+Li4uXSIsIGdldHRleHRfbm9vcCgiU2Vjb25kYXJ5IGF1dGhvcml0YXRpdmUgbmFtZXNlcnZlcnMgZm9yIGZvcndhcmQgZG9tYWlucyIpLCBOVUxMIH0sCisgIHsgTE9QVF9BVVRIUEVFUiwgQVJHX0RVUCwgIjxpcGFkZHI+Wyw8aXBhZGRyPi4uLl0iLCBnZXR0ZXh0X25vb3AoIlBlZXJzIHdoaWNoIGFyZSBhbGxvd2VkIHRvIGRvIHpvbmUgdHJhbnNmZXIiKSwgTlVMTCB9LAorICB7IExPUFRfSVBTRVQsIEFSR19EVVAsICIvPGRvbWFpbj4vPGlwc2V0PlssPGlwc2V0Pi4uLl0iLCBnZXR0ZXh0X25vb3AoIlNwZWNpZnkgaXBzZXRzIHRvIHdoaWNoIG1hdGNoaW5nIGRvbWFpbnMgc2hvdWxkIGJlIGFkZGVkIiksIE5VTEwgfSwKKyAgeyBMT1BUX1NZTlRILCBBUkdfRFVQLCAiPGRvbWFpbj4sPHJhbmdlPixbPHByZWZpeD5dIiwgZ2V0dGV4dF9ub29wKCJTcGVjaWZ5IGEgZG9tYWluIGFuZCBhZGRyZXNzIHJhbmdlIGZvciBzeW50aGVzaXNlZCBuYW1lcyIpLCBOVUxMIH0sCisgIHsgTE9QVF9TRUNfVkFMSUQsIE9QVF9ETlNTRUNfVkFMSUQsIE5VTEwsIGdldHRleHRfbm9vcCgiQWN0aXZhdGUgRE5TU0VDIHZhbGlkYXRpb24iKSwgTlVMTCB9LAorICB7IExPUFRfVFJVU1RfQU5DSE9SLCBBUkdfRFVQLCAiPGRvbWFpbj4sWzxjbGFzcz5dLC4uLiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSB0cnVzdCBhbmNob3Iga2V5IGRpZ2VzdC4iKSwgTlVMTCB9LAorICB7IExPUFRfRE5TU0VDX0RFQlVHLCBPUFRfRE5TU0VDX0RFQlVHLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkRpc2FibGUgdXBzdHJlYW0gY2hlY2tpbmcgZm9yIEROU1NFQyBkZWJ1Z2dpbmcuIiksIE5VTEwgfSwKKyAgeyBMT1BUX0ROU1NFQ19DSEVDSywgT1BUX0ROU1NFQ19OT19TSUdOLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkVuc3VyZSBhbnN3ZXJzIHdpdGhvdXQgRE5TU0VDIGFyZSBpbiB1bnNpZ25lZCB6b25lcy4iKSwgTlVMTCB9LAorICB7IExPUFRfRE5TU0VDX1RJTUUsIE9QVF9ETlNTRUNfVElNRSwgTlVMTCwgZ2V0dGV4dF9ub29wKCJEb24ndCBjaGVjayBETlNTRUMgc2lnbmF0dXJlIHRpbWVzdGFtcHMgdW50aWwgZmlyc3QgY2FjaGUtcmVsb2FkIiksIE5VTEwgfSwKKyNpZmRlZiBPUFRJT042X1BSRUZJWF9DTEFTUyAKKyAgeyBMT1BUX1BSRUZfQ0xTUywgQVJHX0RVUCwgInNldDp0YWcsPGNsYXNzPiIsIGdldHRleHRfbm9vcCgiU3BlY2lmeSBESENQdjYgcHJlZml4IGNsYXNzIiksIE5VTEwgfSwKKyNlbmRpZgorICB7IExPUFRfUkFfUEFSQU0sIEFSR19EVVAsICI8aW50ZXJmYWNlPixbaGlnaCx8bG93LF08aW50ZXJ2YWw+Wyw8bGlmZXRpbWU+XSIsIGdldHRleHRfbm9vcCgiU2V0IHByaW9yaXR5LCByZXNlbmQtaW50ZXJ2YWwgYW5kIHJvdXRlci1saWZldGltZSIpLCBOVUxMIH0sCisgIHsgTE9QVF9RVUlFVF9ESENQLCBPUFRfUVVJRVRfREhDUCwgTlVMTCwgZ2V0dGV4dF9ub29wKCJEbyBub3QgbG9nIHJvdXRpbmUgREhDUC4iKSwgTlVMTCB9LAorICB7IExPUFRfUVVJRVRfREhDUDYsIE9QVF9RVUlFVF9ESENQNiwgTlVMTCwgZ2V0dGV4dF9ub29wKCJEbyBub3QgbG9nIHJvdXRpbmUgREhDUHY2LiIpLCBOVUxMIH0sCisgIHsgTE9QVF9RVUlFVF9SQSwgT1BUX1FVSUVUX1JBLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkRvIG5vdCBsb2cgUkEuIiksIE5VTEwgfSwKKyAgeyBMT1BUX0xPQ0FMX1NFUlZJQ0UsIE9QVF9MT0NBTF9TRVJWSUNFLCBOVUxMLCBnZXR0ZXh0X25vb3AoIkFjY2VwdCBxdWVyaWVzIG9ubHkgZnJvbSBkaXJlY3RseS1jb25uZWN0ZWQgbmV0d29ya3MiKSwgTlVMTCB9LAorICB7IExPUFRfTE9PUF9ERVRFQ1QsIE9QVF9MT09QX0RFVEVDVCwgTlVMTCwgZ2V0dGV4dF9ub29wKCJEZXRlY3QgYW5kIHJlbW92ZSBETlMgZm9yd2FyZGluZyBsb29wcyIpLCBOVUxMIH0sCisgIHsgTE9QVF9JR05PUkVfQUREUiwgQVJHX0RVUCwgIjxpcGFkZHI+IiwgZ2V0dGV4dF9ub29wKCJJZ25vcmUgRE5TIHJlc3BvbnNlcyBjb250YWluaW5nIGlwYWRkci4iKSwgTlVMTCB9LCAKKyAgeyAwLCAwLCBOVUxMLCBOVUxMLCBOVUxMIH0KK307IAorCisvKiBXZSBoaWRlIG1ldGFjaGFyYXRlcnMgaW4gcXVvdGVkIHN0cmluZ3MgYnkgbWFwcGluZyB0aGVtIGludG8gdGhlIEFTQ0lJIGNvbnRyb2wKKyAgIGNoYXJhY3RlciBzcGFjZS4gTm90ZSB0aGF0IHRoZSBcMCwgXHQgXGIgXHIgXDAzMyBhbmQgXG4gY2hhcmFjdGVycyBhcmUgY2FyZWZ1bGx5IHBsYWNlZCBpbiB0aGUKKyAgIGZvbGxvd2luZyBzZXF1ZW5jZSBzbyB0aGF0IHRoZXkgbWFwIHRvIHRoZW1zZWx2ZXM6IGl0IGlzIHRoZXJlZm9yZSBwb3NzaWJsZSB0byBjYWxsCisgICB1bmhpZGVfbWV0YXMgcmVwZWF0ZWRseSBvbiBzdHJpbmcgd2l0aG91dCBicmVha2luZyB0aGluZ3MuCisgICBUaGUgdHJhbnNmb3JtYXRpb24gZ2V0cyB1bmRvbmUgYnkgb3B0X2Nhbm9uaWNhbGlzZSwgYXRvaV9jaGVjayBhbmQgb3B0X3N0cmluZ19hbGxvYywgYW5kIGEgCisgICBjb3VwbGUgb2Ygb3RoZXIgcGxhY2VzLiAKKyAgIE5vdGUgdGhhdCBzcGFjZSBpcyBpbmNsdWRlZCBoZXJlIHNvIHRoYXQKKyAgIC0tZGhjcC1vcHRpb249Mywgc3RyaW5nCisgICBoYXMgZml2ZSBjaGFyYWN0ZXJzLCB3aGlsc3QKKyAgIC0tZGhjcC1vcHRpb249MywiIHN0cmluZyIKKyAgIGhhcyBzaXguCisqLworCitzdGF0aWMgY29uc3QgY2hhciBtZXRhW10gPSAiXDAwMDEyMzQ1NiBcYlx0XG43OFxyOTBhYmNkZWZBQkNERVwwMzNGOiwuIjsKKworc3RhdGljIGNoYXIgaGlkZV9tZXRhKGNoYXIgYykKK3sKKyAgdW5zaWduZWQgaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IChzaXplb2YobWV0YSkgLSAxKTsgaSsrKQorICAgIGlmIChjID09IG1ldGFbaV0pCisgICAgICByZXR1cm4gKGNoYXIpaTsKKyAgCisgIHJldHVybiBjOworfQorCitzdGF0aWMgY2hhciB1bmhpZGVfbWV0YShjaGFyIGNyKQoreyAKKyAgdW5zaWduZWQgaW50IGMgPSBjcjsKKyAgCisgIGlmIChjIDwgKHNpemVvZihtZXRhKSAtIDEpKQorICAgIGNyID0gbWV0YVtjXTsKKyAgCisgIHJldHVybiBjcjsKK30KKworc3RhdGljIHZvaWQgdW5oaWRlX21ldGFzKGNoYXIgKmNwKQoreworICBpZiAoY3ApCisgICAgZm9yKDsgKmNwOyBjcCsrKQorICAgICAgKmNwID0gdW5oaWRlX21ldGEoKmNwKTsKK30KKworc3RhdGljIHZvaWQgKm9wdF9tYWxsb2Moc2l6ZV90IHNpemUpCit7CisgIHZvaWQgKnJldDsKKworICBpZiAobWVtX3JlY292ZXIpCisgICAgeworICAgICAgcmV0ID0gd2hpbmVfbWFsbG9jKHNpemUpOworICAgICAgaWYgKCFyZXQpCisJbG9uZ2ptcChtZW1fam1wLCAxKTsKKyAgICB9CisgIGVsc2UKKyAgICByZXQgPSBzYWZlX21hbGxvYyhzaXplKTsKKyAgCisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjaGFyICpvcHRfc3RyaW5nX2FsbG9jKGNoYXIgKmNwKQoreworICBjaGFyICpyZXQgPSBOVUxMOworICAKKyAgaWYgKGNwICYmIHN0cmxlbihjcCkgIT0gMCkKKyAgICB7CisgICAgICByZXQgPSBvcHRfbWFsbG9jKHN0cmxlbihjcCkrMSk7CisgICAgICBzdHJjcHkocmV0LCBjcCk7IAorICAgICAgCisgICAgICAvKiByZXN0b3JlIGhpZGRlbiBtZXRhY2hhcnMgKi8KKyAgICAgIHVuaGlkZV9tZXRhcyhyZXQpOworICAgIH0KKyAgICAKKyAgcmV0dXJuIHJldDsKK30KKworCisvKiBmaW5kIG5leHQgY29tbWEsIHNwbGl0IHN0cmluZyB3aXRoIHplcm8gYW5kIGVsaW1pbmF0ZSBzcGFjZXMuCisgICByZXR1cm4gc3RhcnQgb2Ygc3RyaW5nIGZvbGxvd2luZyBjb21tYSAqLworCitzdGF0aWMgY2hhciAqc3BsaXRfY2hyKGNoYXIgKnMsIGNoYXIgYykKK3sKKyAgY2hhciAqY29tbWEsICpwOworCisgIGlmICghcyB8fCAhKGNvbW1hID0gc3RyY2hyKHMsIGMpKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgCisgIHAgPSBjb21tYTsKKyAgKmNvbW1hID0gJyAnOworICAKKyAgZm9yICg7ICpjb21tYSA9PSAnICc7IGNvbW1hKyspOworIAorICBmb3IgKDsgKHAgPj0gcykgJiYgKnAgPT0gJyAnOyBwLS0pCisgICAgKnAgPSAwOworICAgIAorICByZXR1cm4gY29tbWE7Cit9CisKK3N0YXRpYyBjaGFyICpzcGxpdChjaGFyICpzKQoreworICByZXR1cm4gc3BsaXRfY2hyKHMsICcsJyk7Cit9CisKK3N0YXRpYyBjaGFyICpjYW5vbmljYWxpc2Vfb3B0KGNoYXIgKnMpCit7CisgIGNoYXIgKnJldDsKKyAgaW50IG5vbWVtOworCisgIGlmICghcykKKyAgICByZXR1cm4gMDsKKworICB1bmhpZGVfbWV0YXMocyk7CisgIGlmICghKHJldCA9IGNhbm9uaWNhbGlzZShzLCAmbm9tZW0pKSAmJiBub21lbSkKKyAgICB7CisgICAgICBpZiAobWVtX3JlY292ZXIpCisJbG9uZ2ptcChtZW1fam1wLCAxKTsKKyAgICAgIGVsc2UKKwlkaWUoXygiY291bGQgbm90IGdldCBtZW1vcnkiKSwgTlVMTCwgRUNfTk9NRU0pOworICAgIH0KKworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0b2lfY2hlY2soY2hhciAqYSwgaW50ICpyZXMpCit7CisgIGNoYXIgKnA7CisKKyAgaWYgKCFhKQorICAgIHJldHVybiAwOworCisgIHVuaGlkZV9tZXRhcyhhKTsKKyAgCisgIGZvciAocCA9IGE7ICpwOyBwKyspCisgICAgIGlmICgqcCA8ICcwJyB8fCAqcCA+ICc5JykKKyAgICAgICByZXR1cm4gMDsKKworICAqcmVzID0gYXRvaShhKTsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgYXRvaV9jaGVjazE2KGNoYXIgKmEsIGludCAqcmVzKQoreworICBpZiAoIShhdG9pX2NoZWNrKGEsIHJlcykpIHx8CisgICAgICAqcmVzIDwgMCB8fAorICAgICAgKnJlcyA+IDB4ZmZmZikKKyAgICByZXR1cm4gMDsKKworICByZXR1cm4gMTsKK30KKworI2lmZGVmIEhBVkVfRE5TU0VDCitzdGF0aWMgaW50IGF0b2lfY2hlY2s4KGNoYXIgKmEsIGludCAqcmVzKQoreworICBpZiAoIShhdG9pX2NoZWNrKGEsIHJlcykpIHx8CisgICAgICAqcmVzIDwgMCB8fAorICAgICAgKnJlcyA+IDB4ZmYpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDE7Cit9CisjZW5kaWYKKwkKK3N0YXRpYyB2b2lkIGFkZF90eHQoY2hhciAqbmFtZSwgY2hhciAqdHh0LCBpbnQgc3RhdCkKK3sKKyAgc3RydWN0IHR4dF9yZWNvcmQgKnIgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgdHh0X3JlY29yZCkpOworCisgIGlmICh0eHQpCisgICAgeworICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbih0eHQpOworICAgICAgci0+dHh0ID0gb3B0X21hbGxvYyhsZW4rMSk7CisgICAgICByLT5sZW4gPSBsZW4rMTsKKyAgICAgICooci0+dHh0KSA9IGxlbjsKKyAgICAgIG1lbWNweSgoci0+dHh0KSsxLCB0eHQsIGxlbik7CisgICAgfQorICAKKyAgci0+c3RhdCA9IHN0YXQ7CisgIHItPm5hbWUgPSBvcHRfc3RyaW5nX2FsbG9jKG5hbWUpOworICByLT5uZXh0ID0gZGFlbW9uLT50eHQ7CisgIGRhZW1vbi0+dHh0ID0gcjsKKyAgci0+Y2xhc3MgPSBDX0NIQU9TOworfQorCitzdGF0aWMgdm9pZCBkb191c2FnZSh2b2lkKQoreworICBjaGFyIGJ1ZmZbMTAwXTsKKyAgaW50IGksIGo7CisKKyAgc3RydWN0IHsKKyAgICBjaGFyIGhhbmRsZTsKKyAgICBpbnQgdmFsOworICB9IHRhYltdID0geworICAgIHsgJyQnLCBDQUNIRVNJWiB9LAorICAgIHsgJyonLCBFRE5TX1BLVFNaIH0sCisgICAgeyAnJicsIE1BWExFQVNFUyB9LAorICAgIHsgJyEnLCBGVEFCU0laIH0sCisgICAgeyAnIycsIFRGVFBfTUFYX0NPTk5FQ1RJT05TIH0sCisgICAgeyAnXDAnLCAwIH0KKyAgfTsKKworICBwcmludGYoXygiVXNhZ2U6IGRuc21hc3EgW29wdGlvbnNdXG5cbiIpKTsKKyNpZm5kZWYgSEFWRV9HRVRPUFRfTE9ORworICBwcmludGYoXygiVXNlIHNob3J0IG9wdGlvbnMgb25seSBvbiB0aGUgY29tbWFuZCBsaW5lLlxuIikpOworI2VuZGlmCisgIHByaW50ZihfKCJWYWxpZCBvcHRpb25zIGFyZTpcbiIpKTsKKyAgCisgIGZvciAoaSA9IDA7IHVzYWdlW2ldLm9wdCAhPSAwOyBpKyspCisgICAgeworICAgICAgY2hhciAqZGVzYyA9IHVzYWdlW2ldLmZsYWdkZXNjOyAKKyAgICAgIGNoYXIgKmVxID0gIj0iOworICAgICAgCisgICAgICBpZiAoIWRlc2MgfHwgKmRlc2MgPT0gJ1snKQorCWVxID0gIiI7CisgICAgICAKKyAgICAgIGlmICghZGVzYykKKwlkZXNjID0gIiI7CisKKyAgICAgIGZvciAoIGogPSAwOyBvcHRzW2pdLm5hbWU7IGorKykKKwlpZiAob3B0c1tqXS52YWwgPT0gdXNhZ2VbaV0ub3B0KQorCSAgYnJlYWs7CisgICAgICBpZiAodXNhZ2VbaV0ub3B0IDwgMjU2KQorCXNwcmludGYoYnVmZiwgIi0lYywgIiwgdXNhZ2VbaV0ub3B0KTsKKyAgICAgIGVsc2UKKwlzcHJpbnRmKGJ1ZmYsICIgICAgIik7CisgICAgICAKKyAgICAgIHNwcmludGYoYnVmZis0LCAiLS0lcyVzJXMiLCBvcHRzW2pdLm5hbWUsIGVxLCBkZXNjKTsKKyAgICAgIHByaW50ZigiJS00MC40MHMiLCBidWZmKTsKKwkgICAgIAorICAgICAgaWYgKHVzYWdlW2ldLmFyZykKKwl7CisJICBzdHJjcHkoYnVmZiwgdXNhZ2VbaV0uYXJnKTsKKwkgIGZvciAoaiA9IDA7IHRhYltqXS5oYW5kbGU7IGorKykKKwkgICAgaWYgKHRhYltqXS5oYW5kbGUgPT0gKih1c2FnZVtpXS5hcmcpKQorCSAgICAgIHNwcmludGYoYnVmZiwgIiVkIiwgdGFiW2pdLnZhbCk7CisJfQorICAgICAgcHJpbnRmKF8odXNhZ2VbaV0uZGVzYyksIGJ1ZmYpOworICAgICAgcHJpbnRmKCJcbiIpOworICAgIH0KK30KKworI2RlZmluZSByZXRfZXJyKHgpIGRvIHsgc3RyY3B5KGVycnN0ciwgKHgpKTsgcmV0dXJuIDA7IH0gd2hpbGUgKDApCisKK2NoYXIgKnBhcnNlX3NlcnZlcihjaGFyICphcmcsIHVuaW9uIG15c29ja2FkZHIgKmFkZHIsIHVuaW9uIG15c29ja2FkZHIgKnNvdXJjZV9hZGRyLCBjaGFyICppbnRlcmZhY2UsIGludCAqZmxhZ3MpCit7CisgIGludCBzb3VyY2VfcG9ydCA9IDAsIHNlcnZfcG9ydCA9IE5BTUVTRVJWRVJfUE9SVDsKKyAgY2hhciAqcG9ydG5vLCAqc291cmNlOworI2lmZGVmIEhBVkVfSVBWNgorICBpbnQgc2NvcGVfaW5kZXggPSAwOworICBjaGFyICpzY29wZV9pZDsKKyNlbmRpZgorICAKKyAgaWYgKCFhcmcgfHwgc3RybGVuKGFyZykgPT0gMCkKKyAgICB7CisgICAgICAqZmxhZ3MgfD0gU0VSVl9OT19BRERSOworICAgICAgKmludGVyZmFjZSA9IDA7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgaWYgKChzb3VyY2UgPSBzcGxpdF9jaHIoYXJnLCAnQCcpKSAmJiAvKiBpcyB0aGVyZSBhIHNvdXJjZS4gKi8KKyAgICAgIChwb3J0bm8gPSBzcGxpdF9jaHIoc291cmNlLCAnIycpKSAmJgorICAgICAgIWF0b2lfY2hlY2sxNihwb3J0bm8sICZzb3VyY2VfcG9ydCkpCisgICAgcmV0dXJuIF8oImJhZCBwb3J0Iik7CisgIAorICBpZiAoKHBvcnRubyA9IHNwbGl0X2NocihhcmcsICcjJykpICYmIC8qIGlzIHRoZXJlIGEgcG9ydCBuby4gKi8KKyAgICAgICFhdG9pX2NoZWNrMTYocG9ydG5vLCAmc2Vydl9wb3J0KSkKKyAgICByZXR1cm4gXygiYmFkIHBvcnQiKTsKKyAgCisjaWZkZWYgSEFWRV9JUFY2CisgIHNjb3BlX2lkID0gc3BsaXRfY2hyKGFyZywgJyUnKTsKKyNlbmRpZgorICAKKyAgaWYgKGluZXRfcHRvbihBRl9JTkVULCBhcmcsICZhZGRyLT5pbi5zaW5fYWRkcikgPiAwKQorICAgIHsKKyAgICAgIGFkZHItPmluLnNpbl9wb3J0ID0gaHRvbnMoc2Vydl9wb3J0KTsJCisgICAgICBhZGRyLT5zYS5zYV9mYW1pbHkgPSBzb3VyY2VfYWRkci0+c2Euc2FfZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorICAgICAgc291cmNlX2FkZHItPmluLnNpbl9sZW4gPSBhZGRyLT5pbi5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKyAgICAgIHNvdXJjZV9hZGRyLT5pbi5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOworICAgICAgc291cmNlX2FkZHItPmluLnNpbl9wb3J0ID0gaHRvbnMoZGFlbW9uLT5xdWVyeV9wb3J0KTsKKyAgICAgIAorICAgICAgaWYgKHNvdXJjZSkKKwl7CisJICBpZiAoZmxhZ3MpCisJICAgICpmbGFncyB8PSBTRVJWX0hBU19TT1VSQ0U7CisJICBzb3VyY2VfYWRkci0+aW4uc2luX3BvcnQgPSBodG9ucyhzb3VyY2VfcG9ydCk7CisJICBpZiAoIShpbmV0X3B0b24oQUZfSU5FVCwgc291cmNlLCAmc291cmNlX2FkZHItPmluLnNpbl9hZGRyKSA+IDApKQorCSAgICB7CisjaWYgZGVmaW5lZChTT19CSU5EVE9ERVZJQ0UpCisJICAgICAgc291cmNlX2FkZHItPmluLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7CisJICAgICAgc3RybmNweShpbnRlcmZhY2UsIHNvdXJjZSwgSUZfTkFNRVNJWkUgLSAxKTsKKyNlbHNlCisJICAgICAgcmV0dXJuIF8oImludGVyZmFjZSBiaW5kaW5nIG5vdCBzdXBwb3J0ZWQiKTsKKyNlbmRpZgorCSAgICB9CisJfQorICAgIH0KKyNpZmRlZiBIQVZFX0lQVjYKKyAgZWxzZSBpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBhcmcsICZhZGRyLT5pbjYuc2luNl9hZGRyKSA+IDApCisgICAgeworICAgICAgaWYgKHNjb3BlX2lkICYmIChzY29wZV9pbmRleCA9IGlmX25hbWV0b2luZGV4KHNjb3BlX2lkKSkgPT0gMCkKKwlyZXR1cm4gXygiYmFkIGludGVyZmFjZSBuYW1lIik7CisgICAgICAKKyAgICAgIGFkZHItPmluNi5zaW42X3BvcnQgPSBodG9ucyhzZXJ2X3BvcnQpOworICAgICAgYWRkci0+aW42LnNpbjZfc2NvcGVfaWQgPSBzY29wZV9pbmRleDsKKyAgICAgIHNvdXJjZV9hZGRyLT5pbjYuc2luNl9hZGRyID0gaW42YWRkcl9hbnk7IAorICAgICAgc291cmNlX2FkZHItPmluNi5zaW42X3BvcnQgPSBodG9ucyhkYWVtb24tPnF1ZXJ5X3BvcnQpOworICAgICAgc291cmNlX2FkZHItPmluNi5zaW42X3Njb3BlX2lkID0gMDsKKyAgICAgIGFkZHItPnNhLnNhX2ZhbWlseSA9IHNvdXJjZV9hZGRyLT5zYS5zYV9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgIGFkZHItPmluNi5zaW42X2Zsb3dpbmZvID0gc291cmNlX2FkZHItPmluNi5zaW42X2Zsb3dpbmZvID0gMDsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorICAgICAgYWRkci0+aW42LnNpbjZfbGVuID0gc291cmNlX2FkZHItPmluNi5zaW42X2xlbiA9IHNpemVvZihhZGRyLT5pbjYpOworI2VuZGlmCisgICAgICBpZiAoc291cmNlKQorCXsKKwkgIGlmIChmbGFncykKKwkgICAgKmZsYWdzIHw9IFNFUlZfSEFTX1NPVVJDRTsKKwkgIHNvdXJjZV9hZGRyLT5pbjYuc2luNl9wb3J0ID0gaHRvbnMoc291cmNlX3BvcnQpOworCSAgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgc291cmNlLCAmc291cmNlX2FkZHItPmluNi5zaW42X2FkZHIpID09IDApCisJICAgIHsKKyNpZiBkZWZpbmVkKFNPX0JJTkRUT0RFVklDRSkKKwkgICAgICBzb3VyY2VfYWRkci0+aW42LnNpbjZfYWRkciA9IGluNmFkZHJfYW55OyAKKwkgICAgICBzdHJuY3B5KGludGVyZmFjZSwgc291cmNlLCBJRl9OQU1FU0laRSAtIDEpOworI2Vsc2UKKwkgICAgICByZXR1cm4gXygiaW50ZXJmYWNlIGJpbmRpbmcgbm90IHN1cHBvcnRlZCIpOworI2VuZGlmCisJICAgIH0KKwl9CisgICAgfQorI2VuZGlmCisgIGVsc2UKKyAgICByZXR1cm4gXygiYmFkIGFkZHJlc3MiKTsKKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBzZXJ2ZXIgKmFkZF9yZXY0KHN0cnVjdCBpbl9hZGRyIGFkZHIsIGludCBtc2l6ZSkKK3sKKyAgc3RydWN0IHNlcnZlciAqc2VydiA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXJ2ZXIpKTsKKyAgaW5fYWRkcl90ICBhID0gbnRvaGwoYWRkci5zX2FkZHIpID4+IDg7CisgIGNoYXIgKnA7CisKKyAgbWVtc2V0KHNlcnYsIDAsIHNpemVvZihzdHJ1Y3Qgc2VydmVyKSk7CisgIHAgPSBzZXJ2LT5kb21haW4gPSBvcHRfbWFsbG9jKDI1KTsgLyogc3RybGVuKCJ4eHgueXl5Lnp6ei5pbi1hZGRyLmFycGEiKSsxICovCisgIAorICBpZiAobXNpemUgPT0gMjQpCisgICAgcCArPSBzcHJpbnRmKHAsICIlZC4iLCBhICYgMHhmZik7CisgIGEgPSBhID4+IDg7CisgIGlmIChtc2l6ZSAhPSA4KQorICAgIHAgKz0gc3ByaW50ZihwLCAiJWQuIiwgYSAmIDB4ZmYpOworICBhID0gYSA+PiA4OworICBwICs9IHNwcmludGYocCwgIiVkLmluLWFkZHIuYXJwYSIsIGEgJiAweGZmKTsKKyAgCisgIHNlcnYtPmZsYWdzID0gU0VSVl9IQVNfRE9NQUlOOworICBzZXJ2LT5uZXh0ID0gZGFlbW9uLT5zZXJ2ZXJzOworICBkYWVtb24tPnNlcnZlcnMgPSBzZXJ2OworCisgIHJldHVybiBzZXJ2OworCit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2VydmVyICphZGRfcmV2NihzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIGludCBtc2l6ZSkKK3sKKyAgc3RydWN0IHNlcnZlciAqc2VydiA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXJ2ZXIpKTsKKyAgY2hhciAqcDsKKyAgaW50IGk7CisJCQkJICAKKyAgbWVtc2V0KHNlcnYsIDAsIHNpemVvZihzdHJ1Y3Qgc2VydmVyKSk7CisgIHAgPSBzZXJ2LT5kb21haW4gPSBvcHRfbWFsbG9jKDczKTsgLyogc3RybGVuKCIzMio8bi4+aXA2LmFycGEiKSsxICovCisgIAorICBmb3IgKGkgPSBtc2l6ZS0xOyBpID49IDA7IGkgLT0gNCkKKyAgICB7IAorICAgICAgaW50IGRpZyA9ICgodW5zaWduZWQgY2hhciAqKWFkZHIpW2k+PjNdOworICAgICAgcCArPSBzcHJpbnRmKHAsICIlLjF4LiIsIChpPj4yKSAmIDEgPyBkaWcgJiAxNSA6IGRpZyA+PiA0KTsKKyAgICB9CisgIHAgKz0gc3ByaW50ZihwLCAiaXA2LmFycGEiKTsKKyAgCisgIHNlcnYtPmZsYWdzID0gU0VSVl9IQVNfRE9NQUlOOworICBzZXJ2LT5uZXh0ID0gZGFlbW9uLT5zZXJ2ZXJzOworICBkYWVtb24tPnNlcnZlcnMgPSBzZXJ2OworICAKKyAgcmV0dXJuIHNlcnY7Cit9CisKKyNpZmRlZiBIQVZFX0RIQ1AKKworc3RhdGljIGludCBpc190YWdfcHJlZml4KGNoYXIgKmFyZykKK3sKKyAgaWYgKGFyZyAmJiAoc3Ryc3RyKGFyZywgIm5ldDoiKSA9PSBhcmcgfHwgc3Ryc3RyKGFyZywgInRhZzoiKSA9PSBhcmcpKQorICAgIHJldHVybiAxOworICAKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyICpzZXRfcHJlZml4KGNoYXIgKmFyZykKK3sKKyAgIGlmIChzdHJzdHIoYXJnLCAic2V0OiIpID09IGFyZykKKyAgICAgcmV0dXJuIGFyZys0OworICAgCisgICByZXR1cm4gYXJnOworfQorCisvKiBUaGlzIGlzIHRvbyBpbnNhbmVseSBsYXJnZSB0byBrZWVwIGluLWxpbmUgaW4gdGhlIHN3aXRjaCAqLworc3RhdGljIGludCBwYXJzZV9kaGNwX29wdChjaGFyICplcnJzdHIsIGNoYXIgKmFyZywgaW50IGZsYWdzKQoreworICBzdHJ1Y3QgZGhjcF9vcHQgKm5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaGNwX29wdCkpOworICBjaGFyIGxlbmNoYXIgPSAwLCAqY3A7CisgIGludCBhZGRycywgZGlncywgaXNfYWRkciwgaXNfYWRkcjYsIGlzX2hleCwgaXNfZGVjLCBpc19zdHJpbmcsIGRvdHM7CisgIGNoYXIgKmNvbW1hID0gTlVMTDsKKyAgc3RydWN0IGRoY3BfbmV0aWQgKm5wID0gTlVMTDsKKyAgdTE2IG9wdF9sZW4gPSAwOworICBpbnQgaXM2ID0gMDsKKyAgaW50IG9wdGlvbl9vayA9IDA7CisKKyAgbmV3LT5sZW4gPSAwOworICBuZXctPmZsYWdzID0gZmxhZ3M7CisgIG5ldy0+bmV0aWQgPSBOVUxMOworICBuZXctPnZhbCA9IE5VTEw7CisgIG5ldy0+b3B0ID0gMDsKKyAgCisgIHdoaWxlIChhcmcpCisgICAgeworICAgICAgY29tbWEgPSBzcGxpdChhcmcpOyAgICAgIAorCisgICAgICBmb3IgKGNwID0gYXJnOyAqY3A7IGNwKyspCisJaWYgKCpjcCA8ICcwJyB8fCAqY3AgPiAnOScpCisJICBicmVhazsKKyAgICAgIAorICAgICAgaWYgKCEqY3ApCisJeworCSAgbmV3LT5vcHQgPSBhdG9pKGFyZyk7CisJICBvcHRfbGVuID0gMDsKKwkgIG9wdGlvbl9vayA9IDE7CisJICBicmVhazsKKwl9CisgICAgICAKKyAgICAgIGlmIChzdHJzdHIoYXJnLCAib3B0aW9uOiIpID09IGFyZykKKwl7CisJICBpZiAoKG5ldy0+b3B0ID0gbG9va3VwX2RoY3Bfb3B0KEFGX0lORVQsIGFyZys3KSkgIT0gLTEpCisJICAgIHsKKwkgICAgICBvcHRfbGVuID0gbG9va3VwX2RoY3BfbGVuKEFGX0lORVQsIG5ldy0+b3B0KTsKKwkgICAgICAvKiBvcHRpb246PG9wdG5hbWU+IG11c3QgZm9sbG93IHRhZyBhbmQgdmVuZG9yIHN0cmluZy4gKi8KKwkgICAgICBpZiAoIShvcHRfbGVuICYgT1RfSU5URVJOQUwpIHx8IGZsYWdzID09IERIT1BUX01BVENIKQorCQlvcHRpb25fb2sgPSAxOworCSAgICB9CisJICBicmVhazsKKwl9CisjaWZkZWYgSEFWRV9ESENQNgorICAgICAgZWxzZSBpZiAoc3Ryc3RyKGFyZywgIm9wdGlvbjY6IikgPT0gYXJnKQorCXsKKwkgIGZvciAoY3AgPSBhcmcrODsgKmNwOyBjcCsrKQorCSAgICBpZiAoKmNwIDwgJzAnIHx8ICpjcCA+ICc5JykKKwkgICAgICBicmVhazsKKwkgCisJICBpZiAoISpjcCkKKwkgICAgeworCSAgICAgIG5ldy0+b3B0ID0gYXRvaShhcmcrOCk7CisJICAgICAgb3B0X2xlbiA9IDA7CisJICAgICAgb3B0aW9uX29rID0gMTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgaWYgKChuZXctPm9wdCA9IGxvb2t1cF9kaGNwX29wdChBRl9JTkVUNiwgYXJnKzgpKSAhPSAtMSkKKwkJeworCQkgIG9wdF9sZW4gPSBsb29rdXBfZGhjcF9sZW4oQUZfSU5FVDYsIG5ldy0+b3B0KTsKKwkJICBpZiAoIShvcHRfbGVuICYgT1RfSU5URVJOQUwpIHx8IGZsYWdzID09IERIT1BUX01BVENIKQorCQkgICAgb3B0aW9uX29rID0gMTsKKwkJfQorCSAgICB9CisJICAvKiBvcHRpb242OjxvcHQ+fDxvcHRuYW1lPiBtdXN0IGZvbGxvdyB0YWcgYW5kIHZlbmRvciBzdHJpbmcuICovCisJICBpczYgPSAxOworCSAgYnJlYWs7CisJfQorI2VuZGlmCisgICAgICBlbHNlIGlmIChzdHJzdHIoYXJnLCAidmVuZG9yOiIpID09IGFyZykKKwl7CisJICBuZXctPnUudmVuZG9yX2NsYXNzID0gKHVuc2lnbmVkIGNoYXIgKilvcHRfc3RyaW5nX2FsbG9jKGFyZys3KTsKKwkgIG5ldy0+ZmxhZ3MgfD0gREhPUFRfVkVORE9SOworCX0KKyAgICAgIGVsc2UgaWYgKHN0cnN0cihhcmcsICJlbmNhcDoiKSA9PSBhcmcpCisJeworCSAgbmV3LT51LmVuY2FwID0gYXRvaShhcmcrNik7CisJICBuZXctPmZsYWdzIHw9IERIT1BUX0VOQ0FQU1VMQVRFOworCX0KKyAgICAgIGVsc2UgaWYgKHN0cnN0cihhcmcsICJ2aS1lbmNhcDoiKSA9PSBhcmcpCisJeworCSAgbmV3LT51LmVuY2FwID0gYXRvaShhcmcrOSk7CisJICBuZXctPmZsYWdzIHw9IERIT1BUX1JGQzM5MjU7CisJICBpZiAoZmxhZ3MgPT0gREhPUFRfTUFUQ0gpCisJICAgIHsKKwkgICAgICBvcHRpb25fb2sgPSAxOworCSAgICAgIGJyZWFrOworCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIG5ldy0+bmV0aWQgPSBvcHRfbWFsbG9jKHNpemVvZiAoc3RydWN0IGRoY3BfbmV0aWQpKTsKKwkgIC8qIGFsbG93IG9wdGlvbmFsICJuZXQ6IiBvciAidGFnOiIgZm9yIGNvbnNpc3RlbmN5ICovCisJICBpZiAoaXNfdGFnX3ByZWZpeChhcmcpKQorCSAgICBuZXctPm5ldGlkLT5uZXQgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZys0KTsKKwkgIGVsc2UKKwkgICAgbmV3LT5uZXRpZC0+bmV0ID0gb3B0X3N0cmluZ19hbGxvYyhzZXRfcHJlZml4KGFyZykpOworCSAgbmV3LT5uZXRpZC0+bmV4dCA9IG5wOworCSAgbnAgPSBuZXctPm5ldGlkOworCX0KKyAgICAgIAorICAgICAgYXJnID0gY29tbWE7IAorICAgIH0KKworI2lmZGVmIEhBVkVfREhDUDYKKyAgaWYgKGlzNikKKyAgICB7CisgICAgICBpZiAobmV3LT5mbGFncyAmIChESE9QVF9WRU5ET1IgfCBESE9QVF9FTkNBUFNVTEFURSkpCisJcmV0X2VycihfKCJ1bnN1cHBvcnRlZCBlbmNhcHN1bGF0aW9uIGZvciBJUHY2IG9wdGlvbiIpKTsKKyAgICAgIAorICAgICAgaWYgKG9wdF9sZW4gPT0gMCAmJgorCSAgIShuZXctPmZsYWdzICYgREhPUFRfUkZDMzkyNSkpCisJb3B0X2xlbiA9IGxvb2t1cF9kaGNwX2xlbihBRl9JTkVUNiwgbmV3LT5vcHQpOworICAgIH0KKyAgZWxzZQorI2VuZGlmCisgICAgaWYgKG9wdF9sZW4gPT0gMCAmJgorCSEobmV3LT5mbGFncyAmIChESE9QVF9WRU5ET1IgfCBESE9QVF9FTkNBUFNVTEFURSB8IERIT1BUX1JGQzM5MjUpKSkKKyAgICAgIG9wdF9sZW4gPSBsb29rdXBfZGhjcF9sZW4oQUZfSU5FVCwgbmV3LT5vcHQpOworICAKKyAgLyogb3B0aW9uIG1heSBiZSBtaXNzaW5nIHdpdGggcmZjMzkyNSBtYXRjaCAqLworICBpZiAoIW9wdGlvbl9vaykKKyAgICByZXRfZXJyKF8oImJhZCBkaGNwLW9wdGlvbiIpKTsKKyAgCisgIGlmIChjb21tYSkKKyAgICB7CisgICAgICAvKiBjaGFyYWN0ZXJpc2UgdGhlIHZhbHVlICovCisgICAgICBjaGFyIGM7CisgICAgICBpbnQgZm91bmRfZGlnID0gMDsKKyAgICAgIGlzX2FkZHIgPSBpc19hZGRyNiA9IGlzX2hleCA9IGlzX2RlYyA9IGlzX3N0cmluZyA9IDE7CisgICAgICBhZGRycyA9IGRpZ3MgPSAxOworICAgICAgZG90cyA9IDA7CisgICAgICBmb3IgKGNwID0gY29tbWE7IChjID0gKmNwKTsgY3ArKykKKwlpZiAoYyA9PSAnLCcpCisJICB7CisJICAgIGFkZHJzKys7CisJICAgIGlzX2RlYyA9IGlzX2hleCA9IDA7CisJICB9CisJZWxzZSBpZiAoYyA9PSAnOicpCisJICB7CisJICAgIGRpZ3MrKzsKKwkgICAgaXNfZGVjID0gaXNfYWRkciA9IDA7CisJICB9CisJZWxzZSBpZiAoYyA9PSAnLycpIAorCSAgeworCSAgICBpc19hZGRyNiA9IGlzX2RlYyA9IGlzX2hleCA9IDA7CisJICAgIGlmIChjcCA9PSBjb21tYSkgLyogbGVhZGluZyAvIG1lYW5zIGEgcGF0aG5hbWUgKi8KKwkgICAgICBpc19hZGRyID0gMDsKKwkgIH0gCisJZWxzZSBpZiAoYyA9PSAnLicpCQorCSAgeworCSAgICBpc19hZGRyNiA9IGlzX2RlYyA9IGlzX2hleCA9IDA7CisJICAgIGRvdHMrKzsKKwkgIH0KKwllbHNlIGlmIChjID09ICctJykKKwkgIGlzX2hleCA9IGlzX2FkZHIgPSBpc19hZGRyNiA9IDA7CisJZWxzZSBpZiAoYyA9PSAnICcpCisJICBpc19kZWMgPSBpc19oZXggPSAwOworCWVsc2UgaWYgKCEoYyA+PScwJyAmJiBjIDw9ICc5JykpCisJICB7CisJICAgIGlzX2FkZHIgPSAwOworCSAgICBpZiAoY3BbMV0gPT0gMCAmJiBpc19kZWMgJiYKKwkJKGMgPT0gJ2InIHx8IGMgPT0gJ3MnIHx8IGMgPT0gJ2knKSkKKwkgICAgICB7CisJCWxlbmNoYXIgPSBjOworCQkqY3AgPSAwOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIGlzX2RlYyA9IDA7CisJICAgIGlmICghKChjID49J0EnICYmIGMgPD0gJ0YnKSB8fAorCQkgIChjID49J2EnICYmIGMgPD0gJ2YnKSB8fCAKKwkJICAoYyA9PSAnKicgJiYgKGZsYWdzICYgREhPUFRfTUFUQ0gpKSkpCisJICAgICAgeworCQlpc19oZXggPSAwOworCQlpZiAoYyAhPSAnWycgJiYgYyAhPSAnXScpCisJCSAgaXNfYWRkcjYgPSAwOworCSAgICAgIH0KKwkgIH0KKwllbHNlCisJICBmb3VuZF9kaWcgPSAxOworICAgICAKKyAgICAgIGlmICghZm91bmRfZGlnKQorCWlzX2RlYyA9IGlzX2FkZHIgPSAwOworICAgICAKKyAgICAgIC8qIFdlIGtub3cgdGhhdCBzb21lIG9wdGlvbnMgdGFrZSBhZGRyZXNzZXMgKi8KKyAgICAgIGlmIChvcHRfbGVuICYgT1RfQUREUl9MSVNUKQorCXsKKwkgIGlzX3N0cmluZyA9IGlzX2RlYyA9IGlzX2hleCA9IDA7CisJICAKKwkgIGlmICghaXM2ICYmICghaXNfYWRkciB8fCBkb3RzID09IDApKQorCSAgICByZXRfZXJyKF8oImJhZCBJUCBhZGRyZXNzIikpOworCisJICAgaWYgKGlzNiAmJiAhaXNfYWRkcjYpCisJICAgICByZXRfZXJyKF8oImJhZCBJUHY2IGFkZHJlc3MiKSk7CisJfQorICAgICAgLyogb3IgbmFtZXMgKi8KKyAgICAgIGVsc2UgaWYgKG9wdF9sZW4gJiAoT1RfTkFNRSB8IE9UX1JGQzEwMzVfTkFNRSB8IE9UX0NTVFJJTkcpKQorCWlzX2FkZHI2ID0gaXNfYWRkciA9IGlzX2RlYyA9IGlzX2hleCA9IDA7CisgICAgICAKKyAgICAgIGlmIChmb3VuZF9kaWcgJiYgKG9wdF9sZW4gJiBPVF9USU1FKSAmJiBzdHJsZW4oY29tbWEpID4gMCkKKwl7CisJICBpbnQgdmFsLCBmYWMgPSAxOworCisJICBzd2l0Y2ggKGNvbW1hW3N0cmxlbihjb21tYSkgLSAxXSkKKwkgICAgeworCSAgICBjYXNlICd3JzoKKwkgICAgY2FzZSAnVyc6CisJICAgICAgZmFjICo9IDc7CisJICAgICAgLyogZmFsbCB0aHJvdWdoICovCisJICAgIGNhc2UgJ2QnOgorCSAgICBjYXNlICdEJzoKKwkgICAgICBmYWMgKj0gMjQ7CisJICAgICAgLyogZmFsbCB0aG91Z2ggKi8KKwkgICAgY2FzZSAnaCc6CisJICAgIGNhc2UgJ0gnOgorCSAgICAgIGZhYyAqPSA2MDsKKwkgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKwkgICAgY2FzZSAnbSc6CisJICAgIGNhc2UgJ00nOgorCSAgICAgIGZhYyAqPSA2MDsKKwkgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKwkgICAgY2FzZSAncyc6CisJICAgIGNhc2UgJ1MnOgorCSAgICAgIGNvbW1hW3N0cmxlbihjb21tYSkgLSAxXSA9IDA7CisJICAgIH0KKwkgIAorCSAgbmV3LT5sZW4gPSA0OworCSAgbmV3LT52YWwgPSBvcHRfbWFsbG9jKDQpOworCSAgdmFsID0gYXRvaShjb21tYSk7CisJICAqKChpbnQgKiluZXctPnZhbCkgPSBodG9ubCh2YWwgKiBmYWMpOwkgIAorCX0gIAorICAgICAgZWxzZSBpZiAoaXNfaGV4ICYmIGRpZ3MgPiAxKQorCXsKKwkgIG5ldy0+bGVuID0gZGlnczsKKwkgIG5ldy0+dmFsID0gb3B0X21hbGxvYyhuZXctPmxlbik7CisJICBwYXJzZV9oZXgoY29tbWEsIG5ldy0+dmFsLCBkaWdzLCAoZmxhZ3MgJiBESE9QVF9NQVRDSCkgPyAmbmV3LT51LndpbGRjYXJkX21hc2sgOiBOVUxMLCBOVUxMKTsKKwkgIG5ldy0+ZmxhZ3MgfD0gREhPUFRfSEVYOworCX0KKyAgICAgIGVsc2UgaWYgKGlzX2RlYykKKwl7CisJICBpbnQgaSwgdmFsID0gYXRvaShjb21tYSk7CisJICAvKiBhc3N1bWUgbnVtZXJpYyBhcmcgaXMgMSBieXRlIGV4Y2VwdCBmb3IKKwkgICAgIG9wdGlvbnMgd2hlcmUgaXQgaXMga25vd24gb3RoZXJ3aXNlLgorCSAgICAgRm9yIHZlbmRvciBjbGFzcyBvcHRpb24sIHdlIGhhdmUgdG8gaGFjay4gKi8KKwkgIGlmIChvcHRfbGVuICE9IDApCisJICAgIG5ldy0+bGVuID0gb3B0X2xlbjsKKwkgIGVsc2UgaWYgKHZhbCAmIDB4ZmZmZjAwMDApCisJICAgIG5ldy0+bGVuID0gNDsKKwkgIGVsc2UgaWYgKHZhbCAmIDB4ZmYwMCkKKwkgICAgbmV3LT5sZW4gPSAyOworCSAgZWxzZQorCSAgICBuZXctPmxlbiA9IDE7CisKKwkgIGlmIChsZW5jaGFyID09ICdiJykKKwkgICAgbmV3LT5sZW4gPSAxOworCSAgZWxzZSBpZiAobGVuY2hhciA9PSAncycpCisJICAgIG5ldy0+bGVuID0gMjsKKwkgIGVsc2UgaWYgKGxlbmNoYXIgPT0gJ2knKQorCSAgICBuZXctPmxlbiA9IDQ7CisJICAKKwkgIG5ldy0+dmFsID0gb3B0X21hbGxvYyhuZXctPmxlbik7CisJICBmb3IgKGk9MDsgaTxuZXctPmxlbjsgaSsrKQorCSAgICBuZXctPnZhbFtpXSA9IHZhbD4+KChuZXctPmxlbiAtIGkgLSAxKSo4KTsKKwl9CisgICAgICBlbHNlIGlmIChpc19hZGRyICYmICFpczYpCQorCXsKKwkgIHN0cnVjdCBpbl9hZGRyIGluOworCSAgdW5zaWduZWQgY2hhciAqb3A7CisJICBjaGFyICpzbGFzaDsKKwkgIC8qIG1heCBsZW5ndGggb2YgYWRkcmVzcy9zdWJuZXQgZGVzY3JpcHRvciBpcyBmaXZlIGJ5dGVzLAorCSAgICAgYWRkIG9uZSBmb3IgdGhlIG9wdGlvbiAxMjAgZW5jIGJ5dGUgdG9vICovCisJICBuZXctPnZhbCA9IG9wID0gb3B0X21hbGxvYygoNSAqIGFkZHJzKSArIDEpOworCSAgbmV3LT5mbGFncyB8PSBESE9QVF9BRERSOworCisJICBpZiAoIShuZXctPmZsYWdzICYgKERIT1BUX0VOQ0FQU1VMQVRFIHwgREhPUFRfVkVORE9SIHwgREhPUFRfUkZDMzkyNSkpICYmIAorCSAgICAgIG5ldy0+b3B0ID09IE9QVElPTl9TSVBfU0VSVkVSKQorCSAgICB7CisJICAgICAgKihvcCsrKSA9IDE7IC8qIFJGQyAzMzYxICJlbmMgYnl0ZSIgKi8KKwkgICAgICBuZXctPmZsYWdzICY9IH5ESE9QVF9BRERSOworCSAgICB9CisJICB3aGlsZSAoYWRkcnMtLSkgCisJICAgIHsKKwkgICAgICBjcCA9IGNvbW1hOworCSAgICAgIGNvbW1hID0gc3BsaXQoY3ApOworCSAgICAgIHNsYXNoID0gc3BsaXRfY2hyKGNwLCAnLycpOworCSAgICAgIGluZXRfcHRvbihBRl9JTkVULCBjcCwgJmluKTsKKwkgICAgICBpZiAoIXNsYXNoKQorCQl7CisJCSAgbWVtY3B5KG9wLCAmaW4sIElOQUREUlNaKTsKKwkJICBvcCArPSBJTkFERFJTWjsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIHVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKSZpbjsKKwkJICBpbnQgbmV0c2l6ZSA9IGF0b2koc2xhc2gpOworCQkgICpvcCsrID0gbmV0c2l6ZTsKKwkJICBpZiAobmV0c2l6ZSA+IDApCisJCSAgICAqb3ArKyA9ICpwKys7CisJCSAgaWYgKG5ldHNpemUgPiA4KQorCQkgICAgKm9wKysgPSAqcCsrOworCQkgIGlmIChuZXRzaXplID4gMTYpCisJCSAgICAqb3ArKyA9ICpwKys7CisJCSAgaWYgKG5ldHNpemUgPiAyNCkKKwkJICAgICpvcCsrID0gKnArKzsKKwkJICBuZXctPmZsYWdzICY9IH5ESE9QVF9BRERSOyAvKiBjYW5ub3QgcmUtd3JpdGUgZGVzY3JpcHRvciBmb3JtYXQgKi8KKwkJfSAKKwkgICAgfQorCSAgbmV3LT5sZW4gPSBvcCAtIG5ldy0+dmFsOworCX0KKyAgICAgIGVsc2UgaWYgKGlzX2FkZHI2ICYmIGlzNikKKwl7CisJICB1bnNpZ25lZCBjaGFyICpvcDsKKwkgIG5ldy0+dmFsID0gb3AgPSBvcHRfbWFsbG9jKDE2ICogYWRkcnMpOworCSAgbmV3LT5mbGFncyB8PSBESE9QVF9BRERSNjsKKwkgIHdoaWxlIChhZGRycy0tKSAKKwkgICAgeworCSAgICAgIGNwID0gY29tbWE7CisJICAgICAgY29tbWEgPSBzcGxpdChjcCk7CisJICAgICAgCisJICAgICAgLyogY2hlY2sgZm9yIFsxMjM0Ojo3XSAqLworCSAgICAgIGlmICgqY3AgPT0gJ1snKQorCQljcCsrOworCSAgICAgIGlmIChzdHJsZW4oY3ApID4gMSAmJiBjcFtzdHJsZW4oY3ApLTFdID09ICddJykKKwkJY3Bbc3RybGVuKGNwKS0xXSA9IDA7CisJICAgICAgCisJICAgICAgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgY3AsIG9wKSkKKwkJeworCQkgIG9wICs9IElONkFERFJTWjsKKwkJICBjb250aW51ZTsKKwkJfQorCSAgCisJICAgICAgcmV0X2VycihfKCJiYWQgSVB2NiBhZGRyZXNzIikpOworCSAgICB9IAorCSAgbmV3LT5sZW4gPSBvcCAtIG5ldy0+dmFsOworCX0KKyAgICAgIGVsc2UgaWYgKGlzX3N0cmluZykKKwl7CisgCSAgLyogdGV4dCBhcmcgKi8KKwkgIGlmICgobmV3LT5vcHQgPT0gT1BUSU9OX0RPTUFJTl9TRUFSQ0ggfHwgbmV3LT5vcHQgPT0gT1BUSU9OX1NJUF9TRVJWRVIpICYmCisJICAgICAgIWlzNiAmJiAhKG5ldy0+ZmxhZ3MgJiAoREhPUFRfRU5DQVBTVUxBVEUgfCBESE9QVF9WRU5ET1IgfCBESE9QVF9SRkMzOTI1KSkpCisJICAgIHsKKwkgICAgICAvKiBkbnMgc2VhcmNoLCBSRkMgMzM5Nywgb3IgU0lQLCBSRkMgMzM2MSAqLworCSAgICAgIHVuc2lnbmVkIGNoYXIgKnEsICpyLCAqdGFpbDsKKwkgICAgICB1bnNpZ25lZCBjaGFyICpwLCAqbSA9IE5VTEwsICpuZXdwOworCSAgICAgIHNpemVfdCBuZXdsZW4sIGxlbiA9IDA7CisJICAgICAgaW50IGhlYWRlcl9zaXplID0gKG5ldy0+b3B0ID09IE9QVElPTl9ET01BSU5fU0VBUkNIKSA/IDAgOiAxOworCSAgICAgIAorCSAgICAgIGFyZyA9IGNvbW1hOworCSAgICAgIGNvbW1hID0gc3BsaXQoYXJnKTsKKwkgICAgICAKKwkgICAgICB3aGlsZSAoYXJnICYmICphcmcpCisJCXsKKwkJICBjaGFyICppbiwgKmRvbSA9IE5VTEw7CisJCSAgc2l6ZV90IGRvbWxlbiA9IDE7CisJCSAgLyogQWxsb3cgIi4iIGFzIGFuIGVtcHR5IGRvbWFpbiAqLworCQkgIGlmIChzdHJjbXAgKGFyZywgIi4iKSAhPSAwKQorCQkgICAgeworCQkgICAgICBpZiAoIShkb20gPSBjYW5vbmljYWxpc2Vfb3B0KGFyZykpKQorCQkJcmV0X2VycihfKCJiYWQgZG9tYWluIGluIGRoY3Atb3B0aW9uIikpOworCQkJCisJCSAgICAgIGRvbWxlbiA9IHN0cmxlbihkb20pICsgMjsKKwkJICAgIH0KKwkJICAgICAgCisJCSAgbmV3cCA9IG9wdF9tYWxsb2MobGVuICsgZG9tbGVuICsgaGVhZGVyX3NpemUpOworCQkgIGlmIChtKQorCQkgICAgeworCQkgICAgICBtZW1jcHkobmV3cCwgbSwgaGVhZGVyX3NpemUgKyBsZW4pOworCQkgICAgICBmcmVlKG0pOworCQkgICAgfQorCQkgIG0gPSBuZXdwOworCQkgIHAgPSBtICsgaGVhZGVyX3NpemU7CisJCSAgcSA9IHAgKyBsZW47CisJCSAgCisJCSAgLyogYWRkIHN0cmluZyBvbiB0aGUgZW5kIGluIFJGQzEwMzUgZm9ybWF0ICovCisJCSAgZm9yIChpbiA9IGRvbTsgaW4gJiYgKmluOykgCisJCSAgICB7CisJCSAgICAgIHVuc2lnbmVkIGNoYXIgKmNwID0gcSsrOworCQkgICAgICBpbnQgajsKKwkJICAgICAgZm9yIChqID0gMDsgKmluICYmICgqaW4gIT0gJy4nKTsgaW4rKywgaisrKQorCQkJKnErKyA9ICppbjsKKwkJICAgICAgKmNwID0gajsKKwkJICAgICAgaWYgKCppbikKKwkJCWluKys7CisJCSAgICB9CisJCSAgKnErKyA9IDA7CisJCSAgZnJlZShkb20pOworCQkgIAorCQkgIC8qIE5vdyB0YWlsLWNvbXByZXNzIHVzaW5nIGVhcmxpZXIgbmFtZXMuICovCisJCSAgbmV3bGVuID0gcSAtIHA7CisJCSAgZm9yICh0YWlsID0gcCArIGxlbjsgKnRhaWw7IHRhaWwgKz0gKCp0YWlsKSArIDEpCisJCSAgICBmb3IgKHIgPSBwOyByIC0gcCA8IChpbnQpbGVuOyByICs9ICgqcikgKyAxKQorCQkgICAgICBpZiAoc3RyY21wKChjaGFyICopciwgKGNoYXIgKil0YWlsKSA9PSAwKQorCQkJeworCQkJICBQVVRTSE9SVCgociAtIHApIHwgMHhjMDAwLCB0YWlsKTsgCisJCQkgIG5ld2xlbiA9IHRhaWwgLSBwOworCQkJICBnb3RvIGVuZDsKKwkJCX0KKwkJZW5kOgorCQkgIGxlbiA9IG5ld2xlbjsKKwkJICAKKwkJICBhcmcgPSBjb21tYTsKKwkJICBjb21tYSA9IHNwbGl0KGFyZyk7CisJCX0KKyAgICAgIAorCSAgICAgIC8qIFJGQyAzMzYxLCBlbmMgYnl0ZSBpcyB6ZXJvIGZvciBuYW1lcyAqLworCSAgICAgIGlmIChuZXctPm9wdCA9PSBPUFRJT05fU0lQX1NFUlZFUikKKwkJbVswXSA9IDA7CisJICAgICAgbmV3LT5sZW4gPSAoaW50KSBsZW4gKyBoZWFkZXJfc2l6ZTsKKwkgICAgICBuZXctPnZhbCA9IG07CisJICAgIH0KKyNpZmRlZiBIQVZFX0RIQ1A2CisJICBlbHNlIGlmIChjb21tYSAmJiAob3B0X2xlbiAmIE9UX0NTVFJJTkcpKQorCSAgICB7CisJICAgICAgLyogbGVuZ3RoIGZpZWxkcyBhcmUgdHdvIGJ5dGVzIHNvIG5lZWQgMTYgYml0cyBmb3IgZWFjaCBzdHJpbmcgKi8KKwkgICAgICBpbnQgaSwgY29tbWFzID0gMTsKKwkgICAgICB1bnNpZ25lZCBjaGFyICpwLCAqbmV3cDsKKworCSAgICAgIGZvciAoaSA9IDA7IGNvbW1hW2ldOyBpKyspCisJCWlmIChjb21tYVtpXSA9PSAnLCcpCisJCSAgY29tbWFzKys7CisJICAgICAgCisJICAgICAgbmV3cCA9IG9wdF9tYWxsb2Moc3RybGVuKGNvbW1hKSsoMipjb21tYXMpKTsJICAKKwkgICAgICBwID0gbmV3cDsKKwkgICAgICBhcmcgPSBjb21tYTsKKwkgICAgICBjb21tYSA9IHNwbGl0KGFyZyk7CisJICAgICAgCisJICAgICAgd2hpbGUgKGFyZyAmJiAqYXJnKQorCQl7CisJCSAgdTE2IGxlbiA9IHN0cmxlbihhcmcpOworCQkgIHVuaGlkZV9tZXRhcyhhcmcpOworCQkgIFBVVFNIT1JUKGxlbiwgcCk7CisJCSAgbWVtY3B5KHAsIGFyZywgbGVuKTsKKwkJICBwICs9IGxlbjsgCisKKwkJICBhcmcgPSBjb21tYTsKKwkJICBjb21tYSA9IHNwbGl0KGFyZyk7CisJCX0KKworCSAgICAgIG5ldy0+dmFsID0gbmV3cDsKKwkgICAgICBuZXctPmxlbiA9IHAgLSBuZXdwOworCSAgICB9CisJICBlbHNlIGlmIChjb21tYSAmJiAob3B0X2xlbiAmIE9UX1JGQzEwMzVfTkFNRSkpCisJICAgIHsKKwkgICAgICB1bnNpZ25lZCBjaGFyICpwID0gTlVMTCwgKm5ld3AsICplbmQ7CisJICAgICAgaW50IGxlbiA9IDA7CisJICAgICAgYXJnID0gY29tbWE7CisJICAgICAgY29tbWEgPSBzcGxpdChhcmcpOworCSAgICAgIAorCSAgICAgIHdoaWxlIChhcmcgJiYgKmFyZykKKwkJeworCQkgIGNoYXIgKmRvbSA9IGNhbm9uaWNhbGlzZV9vcHQoYXJnKTsKKwkJICBpZiAoIWRvbSkKKwkJICAgIHJldF9lcnIoXygiYmFkIGRvbWFpbiBpbiBkaGNwLW9wdGlvbiIpKTsKKwkJICAgIAkJICAKKwkJICBuZXdwID0gb3B0X21hbGxvYyhsZW4gKyBzdHJsZW4oZG9tKSArIDIpOworCQkgIAorCQkgIGlmIChwKQorCQkgICAgeworCQkgICAgICBtZW1jcHkobmV3cCwgcCwgbGVuKTsKKwkJICAgICAgZnJlZShwKTsKKwkJICAgIH0KKwkJICAKKwkJICBwID0gbmV3cDsKKwkJICBlbmQgPSBkb19yZmMxMDM1X25hbWUocCArIGxlbiwgZG9tKTsKKwkJICAqZW5kKysgPSAwOworCQkgIGxlbiA9IGVuZCAtIHA7CisJCSAgZnJlZShkb20pOworCisJCSAgYXJnID0gY29tbWE7CisJCSAgY29tbWEgPSBzcGxpdChhcmcpOworCQl9CisJICAgICAgCisJICAgICAgbmV3LT52YWwgPSBwOworCSAgICAgIG5ldy0+bGVuID0gbGVuOworCSAgICB9CisjZW5kaWYKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIG5ldy0+bGVuID0gc3RybGVuKGNvbW1hKTsKKwkgICAgICAvKiBrZWVwIHRlcm1pbmF0aW5nIHplcm8gb24gc3RyaW5nICovCisJICAgICAgbmV3LT52YWwgPSAodW5zaWduZWQgY2hhciAqKW9wdF9zdHJpbmdfYWxsb2MoY29tbWEpOworCSAgICAgIG5ldy0+ZmxhZ3MgfD0gREhPUFRfU1RSSU5HOworCSAgICB9CisJfQorICAgIH0KKworICBpZiAoIWlzNiAmJiAKKyAgICAgICgobmV3LT5sZW4gPiAyNTUpIHx8IAorICAgICAgKG5ldy0+bGVuID4gMjUzICYmIChuZXctPmZsYWdzICYgKERIT1BUX1ZFTkRPUiB8IERIT1BUX0VOQ0FQU1VMQVRFKSkpIHx8CisgICAgICAgKG5ldy0+bGVuID4gMjUwICYmIChuZXctPmZsYWdzICYgREhPUFRfUkZDMzkyNSkpKSkKKyAgICByZXRfZXJyKF8oImRoY3Atb3B0aW9uIHRvbyBsb25nIikpOworICAKKyAgaWYgKGZsYWdzID09IERIT1BUX01BVENIKQorICAgIHsKKyAgICAgIGlmICgobmV3LT5mbGFncyAmIChESE9QVF9FTkNBUFNVTEFURSB8IERIT1BUX1ZFTkRPUikpIHx8CisJICAhbmV3LT5uZXRpZCB8fAorCSAgbmV3LT5uZXRpZC0+bmV4dCkKKwlyZXRfZXJyKF8oImlsbGVnYWwgZGhjcC1tYXRjaCIpKTsKKyAgICAgICAKKyAgICAgIGlmIChpczYpCisJeworCSAgbmV3LT5uZXh0ID0gZGFlbW9uLT5kaGNwX21hdGNoNjsKKwkgIGRhZW1vbi0+ZGhjcF9tYXRjaDYgPSBuZXc7CisJfQorICAgICAgZWxzZQorCXsKKwkgIG5ldy0+bmV4dCA9IGRhZW1vbi0+ZGhjcF9tYXRjaDsKKwkgIGRhZW1vbi0+ZGhjcF9tYXRjaCA9IG5ldzsKKwl9CisgICAgfQorICBlbHNlIGlmIChpczYpCisgICAgeworICAgICAgbmV3LT5uZXh0ID0gZGFlbW9uLT5kaGNwX29wdHM2OworICAgICAgZGFlbW9uLT5kaGNwX29wdHM2ID0gbmV3OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG5ldy0+bmV4dCA9IGRhZW1vbi0+ZGhjcF9vcHRzOworICAgICAgZGFlbW9uLT5kaGNwX29wdHMgPSBuZXc7CisgICAgfQorICAgIAorICByZXR1cm4gMTsKK30KKworI2VuZGlmCisKK3ZvaWQgc2V0X29wdGlvbl9ib29sKHVuc2lnbmVkIGludCBvcHQpCit7CisgIGlmIChvcHQgPCAzMikKKyAgICBkYWVtb24tPm9wdGlvbnMgfD0gMXUgPDwgb3B0OworICBlbHNlCisgICAgZGFlbW9uLT5vcHRpb25zMiB8PSAxdSA8PCAob3B0IC0gMzIpOworfQorCit2b2lkIHJlc2V0X29wdGlvbl9ib29sKHVuc2lnbmVkIGludCBvcHQpCit7CisgIGlmIChvcHQgPCAzMikKKyAgICBkYWVtb24tPm9wdGlvbnMgJj0gfigxdSA8PCBvcHQpOworICBlbHNlCisgICAgZGFlbW9uLT5vcHRpb25zMiAmPSB+KDF1IDw8IChvcHQgLSAzMikpOworfQorCitzdGF0aWMgaW50IG9uZV9vcHQoaW50IG9wdGlvbiwgY2hhciAqYXJnLCBjaGFyICplcnJzdHIsIGNoYXIgKmdlbl9lcnIsIGludCBjb21tYW5kX2xpbmUsIGludCBzZXJ2ZXJzX29ubHkpCit7ICAgICAgCisgIGludCBpOworICBjaGFyICpjb21tYTsKKworICBpZiAob3B0aW9uID09ICc/JykKKyAgICByZXRfZXJyKGdlbl9lcnIpOworICAKKyAgZm9yIChpPTA7IHVzYWdlW2ldLm9wdCAhPSAwOyBpKyspCisgICAgaWYgKHVzYWdlW2ldLm9wdCA9PSBvcHRpb24pCisgICAgICB7CisJIGludCByZXB0ID0gdXNhZ2VbaV0ucmVwdDsKKwkgCisJIGlmIChjb21tYW5kX2xpbmUpCisJICAgeworCSAgICAgLyogY29tbWFuZCBsaW5lICovCisJICAgICBpZiAocmVwdCA9PSBBUkdfVVNFRF9DTCkKKwkgICAgICAgcmV0X2VycihfKCJpbGxlZ2FsIHJlcGVhdGVkIGZsYWciKSk7CisJICAgICBpZiAocmVwdCA9PSBBUkdfT05FKQorCSAgICAgICB1c2FnZVtpXS5yZXB0ID0gQVJHX1VTRURfQ0w7CisJICAgfQorCSBlbHNlCisJICAgeworCSAgICAgLyogYWxsb3cgZmlsZSB0byBvdmVycmlkZSBjb21tYW5kIGxpbmUgKi8KKwkgICAgIGlmIChyZXB0ID09IEFSR19VU0VEX0ZJTEUpCisJICAgICAgIHJldF9lcnIoXygiaWxsZWdhbCByZXBlYXRlZCBrZXl3b3JkIikpOworCSAgICAgaWYgKHJlcHQgPT0gQVJHX1VTRURfQ0wgfHwgcmVwdCA9PSBBUkdfT05FKQorCSAgICAgICB1c2FnZVtpXS5yZXB0ID0gQVJHX1VTRURfRklMRTsKKwkgICB9CisKKwkgaWYgKHJlcHQgIT0gQVJHX0RVUCAmJiByZXB0ICE9IEFSR19PTkUgJiYgcmVwdCAhPSBBUkdfVVNFRF9DTCkgCisJICAgeworCSAgICAgc2V0X29wdGlvbl9ib29sKHJlcHQpOworCSAgICAgcmV0dXJuIDE7CisJICAgfQorICAgICAgIAorCSBicmVhazsKKyAgICAgIH0KKyAgCisgIHN3aXRjaCAob3B0aW9uKQorICAgIHsgCisgICAgY2FzZSAnQyc6IC8qIC0tY29uZi1maWxlICovCisgICAgICB7CisJY2hhciAqZmlsZSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKwlpZiAoZmlsZSkKKwkgIHsKKwkgICAgb25lX2ZpbGUoZmlsZSwgMCk7CisJICAgIGZyZWUoZmlsZSk7CisJICB9CisJYnJlYWs7CisgICAgICB9CisKKyAgICBjYXNlICc3JzogLyogLS1jb25mLWRpciAqLwkgICAgICAKKyAgICAgIHsKKwlESVIgKmRpcl9zdHJlYW07CisJc3RydWN0IGRpcmVudCAqZW50OworCWNoYXIgKmRpcmVjdG9yeSwgKnBhdGg7CisJc3RydWN0IGxpc3QgeworCSAgY2hhciAqc3VmZml4OworCSAgc3RydWN0IGxpc3QgKm5leHQ7CisJfSAqaWdub3JlX3N1ZmZpeCA9IE5VTEwsICptYXRjaF9zdWZmaXggPSBOVUxMLCAqbGk7CisJCisJY29tbWEgPSBzcGxpdChhcmcpOworCWlmICghKGRpcmVjdG9yeSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKSkpCisJICBicmVhazsKKwkKKwlmb3IgKGFyZyA9IGNvbW1hOyBhcmc7IGFyZyA9IGNvbW1hKSAKKwkgIHsKKwkgICAgY29tbWEgPSBzcGxpdChhcmcpOworCSAgICBpZiAoc3RybGVuKGFyZykgIT0gMCkKKwkgICAgICB7CisJCWxpID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGxpc3QpKTsKKwkJaWYgKCphcmcgPT0gJyonKQorCQkgIHsKKwkJICAgIGxpLT5uZXh0ID0gbWF0Y2hfc3VmZml4OworCQkgICAgbWF0Y2hfc3VmZml4ID0gbGk7CisJCSAgICAvKiBIYXZlIHRvIGNvcHk6IGJ1ZmZlciBpcyBvdmVyd3JpdHRlbiAqLworCQkgICAgbGktPnN1ZmZpeCA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKzEpOworCQkgIH0KKwkJZWxzZQorCQkgIHsKKwkJICAgIGxpLT5uZXh0ID0gaWdub3JlX3N1ZmZpeDsKKwkJICAgIGlnbm9yZV9zdWZmaXggPSBsaTsKKwkJICAgIC8qIEhhdmUgdG8gY29weTogYnVmZmVyIGlzIG92ZXJ3cml0dGVuICovCisJCSAgICBsaS0+c3VmZml4ID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworCQkgIH0KKwkgICAgICB9CisJICB9CisJCisJaWYgKCEoZGlyX3N0cmVhbSA9IG9wZW5kaXIoZGlyZWN0b3J5KSkpCisJICBkaWUoXygiY2Fubm90IGFjY2VzcyBkaXJlY3RvcnkgJXM6ICVzIiksIGRpcmVjdG9yeSwgRUNfRklMRSk7CisJCisJd2hpbGUgKChlbnQgPSByZWFkZGlyKGRpcl9zdHJlYW0pKSkKKwkgIHsKKwkgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihlbnQtPmRfbmFtZSk7CisJICAgIHN0cnVjdCBzdGF0IGJ1ZjsKKwkgICAgCisJICAgIC8qIGlnbm9yZSBlbWFjcyBiYWNrdXBzIGFuZCBkb3RmaWxlcyAqLworCSAgICBpZiAobGVuID09IDAgfHwKKwkJZW50LT5kX25hbWVbbGVuIC0gMV0gPT0gJ34nIHx8CisJCShlbnQtPmRfbmFtZVswXSA9PSAnIycgJiYgZW50LT5kX25hbWVbbGVuIC0gMV0gPT0gJyMnKSB8fAorCQllbnQtPmRfbmFtZVswXSA9PSAnLicpCisJICAgICAgY29udGludWU7CisKKwkgICAgaWYgKG1hdGNoX3N1ZmZpeCkKKwkgICAgICB7CisJCWZvciAobGkgPSBtYXRjaF9zdWZmaXg7IGxpOyBsaSA9IGxpLT5uZXh0KQorCQkgIHsKKwkJICAgIC8qIGNoZWNrIGZvciByZXF1aXJlZCBzdWZmaWNlcyAqLworCQkgICAgc2l6ZV90IGxzID0gc3RybGVuKGxpLT5zdWZmaXgpOworCQkgICAgaWYgKGxlbiA+IGxzICYmCisJCQlzdHJjbXAobGktPnN1ZmZpeCwgJmVudC0+ZF9uYW1lW2xlbiAtIGxzXSkgPT0gMCkKKwkJICAgICAgYnJlYWs7CisJCSAgfQorCQlpZiAoIWxpKQorCQkgIGNvbnRpbnVlOworCSAgICAgIH0KKwkgICAgCisJICAgIGZvciAobGkgPSBpZ25vcmVfc3VmZml4OyBsaTsgbGkgPSBsaS0+bmV4dCkKKwkgICAgICB7CisJCS8qIGNoZWNrIGZvciBwcm9zY3JpYmVkIHN1ZmZpY2VzICovCisJCXNpemVfdCBscyA9IHN0cmxlbihsaS0+c3VmZml4KTsKKwkJaWYgKGxlbiA+IGxzICYmCisJCSAgICBzdHJjbXAobGktPnN1ZmZpeCwgJmVudC0+ZF9uYW1lW2xlbiAtIGxzXSkgPT0gMCkKKwkJICBicmVhazsKKwkgICAgICB9CisJICAgIGlmIChsaSkKKwkgICAgICBjb250aW51ZTsKKwkgICAgCisJICAgIHBhdGggPSBvcHRfbWFsbG9jKHN0cmxlbihkaXJlY3RvcnkpICsgbGVuICsgMik7CisJICAgIHN0cmNweShwYXRoLCBkaXJlY3RvcnkpOworCSAgICBzdHJjYXQocGF0aCwgIi8iKTsKKwkgICAgc3RyY2F0KHBhdGgsIGVudC0+ZF9uYW1lKTsKKworCSAgICAvKiBmaWxlcyBtdXN0IGJlIHJlYWRhYmxlICovCisJICAgIGlmIChzdGF0KHBhdGgsICZidWYpID09IC0xKQorCSAgICAgIGRpZShfKCJjYW5ub3QgYWNjZXNzICVzOiAlcyIpLCBwYXRoLCBFQ19GSUxFKTsKKwkgICAgCisJICAgIC8qIG9ubHkgcmVnIGZpbGVzIGFsbG93ZWQuICovCisJICAgIGlmIChTX0lTUkVHKGJ1Zi5zdF9tb2RlKSkKKwkgICAgICBvbmVfZmlsZShwYXRoLCAwKTsKKwkgICAgCisJICAgIGZyZWUocGF0aCk7CisJICB9CisgICAgIAorCWNsb3NlZGlyKGRpcl9zdHJlYW0pOworCWZyZWUoZGlyZWN0b3J5KTsKKwlmb3IoOyBpZ25vcmVfc3VmZml4OyBpZ25vcmVfc3VmZml4ID0gbGkpCisJICB7CisJICAgIGxpID0gaWdub3JlX3N1ZmZpeC0+bmV4dDsKKwkgICAgZnJlZShpZ25vcmVfc3VmZml4LT5zdWZmaXgpOworCSAgICBmcmVlKGlnbm9yZV9zdWZmaXgpOworCSAgfQorCWZvcig7IG1hdGNoX3N1ZmZpeDsgbWF0Y2hfc3VmZml4ID0gbGkpCisJICB7CisJICAgIGxpID0gbWF0Y2hfc3VmZml4LT5uZXh0OworCSAgICBmcmVlKG1hdGNoX3N1ZmZpeC0+c3VmZml4KTsKKwkgICAgZnJlZShtYXRjaF9zdWZmaXgpOworCSAgfSAgICAKKwlicmVhazsKKyAgICAgIH0KKworICAgIGNhc2UgTE9QVF9BRERfU0JORVQ6IC8qIC0tYWRkLXN1Ym5ldCAqLworICAgICAgc2V0X29wdGlvbl9ib29sKE9QVF9DTElFTlRfU1VCTkVUKTsKKyAgICAgIGlmIChhcmcpCisJeworCSAgY29tbWEgPSBzcGxpdChhcmcpOworCSAgaWYgKCFhdG9pX2NoZWNrKGFyZywgJmRhZW1vbi0+YWRkcjRfbmV0bWFzaykgfHwgCisJICAgICAgKGNvbW1hICYmICFhdG9pX2NoZWNrKGNvbW1hLCAmZGFlbW9uLT5hZGRyNl9uZXRtYXNrKSkpCisJICAgICByZXRfZXJyKGdlbl9lcnIpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAnMSc6IC8qIC0tZW5hYmxlLWRidXMgKi8KKyAgICAgIHNldF9vcHRpb25fYm9vbChPUFRfREJVUyk7CisgICAgICBpZiAoYXJnKQorCWRhZW1vbi0+ZGJ1c19uYW1lID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworICAgICAgZWxzZQorCWRhZW1vbi0+ZGJ1c19uYW1lID0gRE5TTUFTUV9TRVJWSUNFOworICAgICAgYnJlYWs7CisgICAgICAKKyAgICBjYXNlICc4JzogLyogLS1sb2ctZmFjaWxpdHkgKi8KKyAgICAgIC8qIG1heSBiZSBhIGZpbGVuYW1lICovCisgICAgICBpZiAoc3RyY2hyKGFyZywgJy8nKSB8fCBzdHJjbXAgKGFyZywgIi0iKSA9PSAwKQorCWRhZW1vbi0+bG9nX2ZpbGUgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisgICAgICBlbHNlCisJewkgIAorI2lmZGVmIF9fQU5EUk9JRF9fCisJICByZXRfZXJyKF8oInNldHRpbmcgbG9nIGZhY2lsaXR5IGlzIG5vdCBwb3NzaWJsZSB1bmRlciBBbmRyb2lkIikpOworI2Vsc2UKKwkgIGZvciAoaSA9IDA7IGZhY2lsaXR5bmFtZXNbaV0uY19uYW1lOyBpKyspCisJICAgIGlmIChob3N0bmFtZV9pc2VxdWFsKChjaGFyICopZmFjaWxpdHluYW1lc1tpXS5jX25hbWUsIGFyZykpCisJICAgICAgYnJlYWs7CisJICAKKwkgIGlmIChmYWNpbGl0eW5hbWVzW2ldLmNfbmFtZSkKKwkgICAgZGFlbW9uLT5sb2dfZmFjID0gZmFjaWxpdHluYW1lc1tpXS5jX3ZhbDsKKwkgIGVsc2UKKwkgICAgcmV0X2VycihfKCJiYWQgbG9nIGZhY2lsaXR5IikpOworI2VuZGlmCisJfQorICAgICAgYnJlYWs7CisgICAgICAKKyAgICBjYXNlICd4JzogLyogLS1waWQtZmlsZSAqLworICAgICAgZGFlbW9uLT5ydW5maWxlID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlICdyJzogLyogLS1yZXNvbHYtZmlsZSAqLworICAgICAgeworCWNoYXIgKm5hbWUgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisJc3RydWN0IHJlc29sdmMgKm5ldywgKmxpc3QgPSBkYWVtb24tPnJlc29sdl9maWxlczsKKwkKKwlpZiAobGlzdCAmJiBsaXN0LT5pc19kZWZhdWx0KQorCSAgeworCSAgICAvKiByZXBsYWNlIGRlZmF1bHQgcmVzb2x2IGZpbGUgLSBwb3NzaWJseSB3aXRoIG5vdGhpbmcgKi8KKwkgICAgaWYgKG5hbWUpCisJICAgICAgeworCQlsaXN0LT5pc19kZWZhdWx0ID0gMDsKKwkJbGlzdC0+bmFtZSA9IG5hbWU7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgbGlzdCA9IE5VTEw7CisJICB9CisJZWxzZSBpZiAobmFtZSkKKwkgIHsKKwkgICAgbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IHJlc29sdmMpKTsKKwkgICAgbmV3LT5uZXh0ID0gbGlzdDsKKwkgICAgbmV3LT5uYW1lID0gbmFtZTsKKwkgICAgbmV3LT5pc19kZWZhdWx0ID0gMDsKKwkgICAgbmV3LT5tdGltZSA9IDA7CisJICAgIG5ldy0+bG9nZ2VkID0gMDsKKwkgICAgbGlzdCA9IG5ldzsKKwkgIH0KKwlkYWVtb24tPnJlc29sdl9maWxlcyA9IGxpc3Q7CisJYnJlYWs7CisgICAgICB9CisKKyAgICBjYXNlIExPUFRfU0VSVkVSU19GSUxFOgorICAgICAgZGFlbW9uLT5zZXJ2ZXJzX2ZpbGUgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGNhc2UgJ20nOiAgLyogLS1teC1ob3N0ICovCisgICAgICB7CisJaW50IHByZWYgPSAxOworCXN0cnVjdCBteF9zcnZfcmVjb3JkICpuZXc7CisJY2hhciAqbmFtZSwgKnRhcmdldCA9IE5VTEw7CisKKwlpZiAoKGNvbW1hID0gc3BsaXQoYXJnKSkpCisJICB7CisJICAgIGNoYXIgKnByZWZzdHI7CisJICAgIGlmICgocHJlZnN0ciA9IHNwbGl0KGNvbW1hKSkgJiYgIWF0b2lfY2hlY2sxNihwcmVmc3RyLCAmcHJlZikpCisJICAgICAgcmV0X2VycihfKCJiYWQgTVggcHJlZmVyZW5jZSIpKTsKKwkgIH0KKwkKKwlpZiAoIShuYW1lID0gY2Fub25pY2FsaXNlX29wdChhcmcpKSB8fCAKKwkgICAgKGNvbW1hICYmICEodGFyZ2V0ID0gY2Fub25pY2FsaXNlX29wdChjb21tYSkpKSkKKwkgIHJldF9lcnIoXygiYmFkIE1YIG5hbWUiKSk7CisJCisJbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IG14X3Nydl9yZWNvcmQpKTsKKwluZXctPm5leHQgPSBkYWVtb24tPm14bmFtZXM7CisJZGFlbW9uLT5teG5hbWVzID0gbmV3OworCW5ldy0+aXNzcnYgPSAwOworCW5ldy0+bmFtZSA9IG5hbWU7CisJbmV3LT50YXJnZXQgPSB0YXJnZXQ7IC8qIG1heSBiZSBOVUxMICovCisJbmV3LT53ZWlnaHQgPSBwcmVmOworCWJyZWFrOworICAgICAgfQorICAgICAgCisgICAgY2FzZSAndCc6IC8qICAtLW14LXRhcmdldCAqLworICAgICAgaWYgKCEoZGFlbW9uLT5teHRhcmdldCA9IGNhbm9uaWNhbGlzZV9vcHQoYXJnKSkpCisJcmV0X2VycihfKCJiYWQgTVggdGFyZ2V0IikpOworICAgICAgYnJlYWs7CisKKyNpZmRlZiBIQVZFX0RIQ1AgICAgICAKKyAgICBjYXNlICdsJzogIC8qIC0tZGhjcC1sZWFzZWZpbGUgKi8KKyAgICAgIGRhZW1vbi0+bGVhc2VfZmlsZSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgICAvKiBTb3JyeSBhYm91dCB0aGUgZ3Jvc3MgcHJlLXByb2Nlc3NvciBhYnVzZSAqLworICAgIGNhc2UgJzYnOiAgICAgICAgICAgICAvKiAtLWRoY3Atc2NyaXB0ICovCisgICAgY2FzZSBMT1BUX0xVQVNDUklQVDogIC8qIC0tZGhjcC1sdWFzY3JpcHQgKi8KKyMgIGlmIGRlZmluZWQoTk9fRk9SSykKKyAgICAgIHJldF9lcnIoXygiY2Fubm90IHJ1biBzY3JpcHRzIHVuZGVyIHVDbGludXgiKSk7CisjICBlbGlmICFkZWZpbmVkKEhBVkVfU0NSSVBUKQorICAgICAgcmV0X2VycihfKCJyZWNvbXBpbGUgd2l0aCBIQVZFX1NDUklQVCBkZWZpbmVkIHRvIGVuYWJsZSBsZWFzZS1jaGFuZ2Ugc2NyaXB0cyIpKTsKKyMgIGVsc2UKKyAgICAgIGlmIChvcHRpb24gPT0gTE9QVF9MVUFTQ1JJUFQpCisjICAgIGlmICFkZWZpbmVkKEhBVkVfTFVBU0NSSVBUKQorCXJldF9lcnIoXygicmVjb21waWxlIHdpdGggSEFWRV9MVUFTQ1JJUFQgZGVmaW5lZCB0byBlbmFibGUgTHVhIHNjcmlwdHMiKSk7CisjICAgIGVsc2UKKyAgICAgICAgZGFlbW9uLT5sdWFzY3JpcHQgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisjICAgIGVuZGlmCisgICAgICBlbHNlCisgICAgICAgIGRhZW1vbi0+bGVhc2VfY2hhbmdlX2NvbW1hbmQgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisjICBlbmRpZgorICAgICAgYnJlYWs7CisjZW5kaWYgLyogSEFWRV9ESENQICovCisKKyAgICBjYXNlIExPUFRfREhDUF9IT1NUOiAvKiAtLWRoY3AtaG9zdGZpbGUgKi8KKyAgICBjYXNlIExPUFRfREhDUF9PUFRTOiAvKiAtLWRoY3Atb3B0c2ZpbGUgKi8KKyAgICBjYXNlICdIJzogLyogLS1hZGRuLWhvc3RzICovCisgICAgICB7CisJc3RydWN0IGhvc3RzZmlsZSAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGhvc3RzZmlsZSkpOworCXN0YXRpYyB1bnNpZ25lZCBpbnQgaG9zdHNfaW5kZXggPSBTUkNfQUg7CisJbmV3LT5mbmFtZSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKwluZXctPmluZGV4ID0gaG9zdHNfaW5kZXgrKzsKKwluZXctPmZsYWdzID0gMDsKKwlpZiAob3B0aW9uID09ICdIJykKKwkgIHsKKwkgICAgbmV3LT5uZXh0ID0gZGFlbW9uLT5hZGRuX2hvc3RzOworCSAgICBkYWVtb24tPmFkZG5faG9zdHMgPSBuZXc7CisJICB9CisJZWxzZSBpZiAob3B0aW9uID09IExPUFRfREhDUF9IT1NUKQorCSAgeworCSAgICBuZXctPm5leHQgPSBkYWVtb24tPmRoY3BfaG9zdHNfZmlsZTsKKwkgICAgZGFlbW9uLT5kaGNwX2hvc3RzX2ZpbGUgPSBuZXc7CisJICB9CisJZWxzZSBpZiAob3B0aW9uID09IExPUFRfREhDUF9PUFRTKQorCSAgeworCSAgICBuZXctPm5leHQgPSBkYWVtb24tPmRoY3Bfb3B0c19maWxlOworCSAgICBkYWVtb24tPmRoY3Bfb3B0c19maWxlID0gbmV3OworCSAgfSAJICAKKwlicmVhazsKKyAgICAgIH0KKyAgICAgIAorCisjaWZkZWYgSEFWRV9BVVRICisgICAgY2FzZSBMT1BUX0FVVEhTRVJWOiAvKiAtLWF1dGgtc2VydmVyICovCisgICAgICBpZiAoIShjb21tYSA9IHNwbGl0KGFyZykpKQorCXJldF9lcnIoZ2VuX2Vycik7CisgICAgICAKKyAgICAgIGRhZW1vbi0+YXV0aHNlcnZlciA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKyAgICAgIGFyZyA9IGNvbW1hOworICAgICAgZG8geworCXN0cnVjdCBpbmFtZSAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGluYW1lKSk7CisJY29tbWEgPSBzcGxpdChhcmcpOworCW5ldy0+bmFtZSA9IE5VTEw7CisJdW5oaWRlX21ldGFzKGFyZyk7CisJaWYgKGluZXRfcHRvbihBRl9JTkVULCBhcmcsICZuZXctPmFkZHIuaW4uc2luX2FkZHIpID4gMCkKKwkgIG5ldy0+YWRkci5zYS5zYV9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfSVBWNgorCWVsc2UgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgYXJnLCAmbmV3LT5hZGRyLmluNi5zaW42X2FkZHIpID4gMCkKKwkgIG5ldy0+YWRkci5zYS5zYV9mYW1pbHkgPSBBRl9JTkVUNjsKKyNlbmRpZgorCWVsc2UKKwkgIHsKKwkgICAgY2hhciAqZmFtID0gc3BsaXRfY2hyKGFyZywgJy8nKTsKKwkgICAgbmV3LT5uYW1lID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworCSAgICBuZXctPmFkZHIuc2Euc2FfZmFtaWx5ID0gMDsKKwkgICAgaWYgKGZhbSkKKwkgICAgICB7CisJCWlmIChzdHJjbXAoZmFtLCAiNCIpID09IDApCisJCSAgbmV3LT5hZGRyLnNhLnNhX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9JUFY2CisJCWVsc2UgaWYgKHN0cmNtcChmYW0sICI2IikgPT0gMCkKKwkJICBuZXctPmFkZHIuc2Euc2FfZmFtaWx5ID0gQUZfSU5FVDY7CisjZW5kaWYKKwkJZWxzZQorCQkgIHJldF9lcnIoZ2VuX2Vycik7CisJICAgICAgfSAKKwkgIH0KKwluZXctPm5leHQgPSBkYWVtb24tPmF1dGhpbnRlcmZhY2U7CisJZGFlbW9uLT5hdXRoaW50ZXJmYWNlID0gbmV3OworCQorCWFyZyA9IGNvbW1hOworICAgICAgfSB3aGlsZSAoYXJnKTsKKyAgICAgICAgICAgIAorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIExPUFRfQVVUSFNGUzogLyogLS1hdXRoLXNlYy1zZXJ2ZXJzICovCisgICAgICB7CisJc3RydWN0IG5hbWVfbGlzdCAqbmV3OworCisJZG8geworCSAgY29tbWEgPSBzcGxpdChhcmcpOworCSAgbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IG5hbWVfbGlzdCkpOworCSAgbmV3LT5uYW1lID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworCSAgbmV3LT5uZXh0ID0gZGFlbW9uLT5zZWNvbmRhcnlfZm9yd2FyZF9zZXJ2ZXI7CisJICBkYWVtb24tPnNlY29uZGFyeV9mb3J3YXJkX3NlcnZlciA9IG5ldzsKKwkgIGFyZyA9IGNvbW1hOworCX0gd2hpbGUgKGFyZyk7CisJYnJlYWs7CisgICAgICB9CisJCisgICAgY2FzZSBMT1BUX0FVVEhaT05FOiAvKiAtLWF1dGgtem9uZSAqLworICAgICAgeworCXN0cnVjdCBhdXRoX3pvbmUgKm5ldzsKKwkKKwljb21tYSA9IHNwbGl0KGFyZyk7CisJCQorCW5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBhdXRoX3pvbmUpKTsKKwluZXctPmRvbWFpbiA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKwluZXctPnN1Ym5ldCA9IE5VTEw7CisJbmV3LT5pbnRlcmZhY2VfbmFtZXMgPSBOVUxMOworCW5ldy0+bmV4dCA9IGRhZW1vbi0+YXV0aF96b25lczsKKwlkYWVtb24tPmF1dGhfem9uZXMgPSBuZXc7CisKKwl3aGlsZSAoKGFyZyA9IGNvbW1hKSkKKwkgIHsKKwkgICAgaW50IHByZWZpeGxlbiA9IDA7CisJICAgIGNoYXIgKnByZWZpeDsKKwkgICAgc3RydWN0IGFkZHJsaXN0ICpzdWJuZXQgPSAgTlVMTDsKKwkgICAgc3RydWN0IGFsbF9hZGRyIGFkZHI7CisKKwkgICAgY29tbWEgPSBzcGxpdChhcmcpOworCSAgICBwcmVmaXggPSBzcGxpdF9jaHIoYXJnLCAnLycpOworCSAgICAKKwkgICAgaWYgKHByZWZpeCAmJiAhYXRvaV9jaGVjayhwcmVmaXgsICZwcmVmaXhsZW4pKQorCSAgICAgIHJldF9lcnIoZ2VuX2Vycik7CisJICAgIAorCSAgICBpZiAoaW5ldF9wdG9uKEFGX0lORVQsIGFyZywgJmFkZHIuYWRkci5hZGRyNCkpCisJICAgICAgeworCQlzdWJuZXQgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWRkcmxpc3QpKTsKKwkJc3VibmV0LT5wcmVmaXhsZW4gPSAocHJlZml4bGVuID09IDApID8gMjQgOiBwcmVmaXhsZW47CisJCXN1Ym5ldC0+ZmxhZ3MgPSBBRERSTElTVF9MSVRFUkFMOworCSAgICAgIH0KKyNpZmRlZiBIQVZFX0lQVjYKKwkgICAgZWxzZSBpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBhcmcsICZhZGRyLmFkZHIuYWRkcjYpKQorCSAgICAgIHsKKwkJc3VibmV0ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGFkZHJsaXN0KSk7CisJCXN1Ym5ldC0+cHJlZml4bGVuID0gKHByZWZpeGxlbiA9PSAwKSA/IDY0IDogcHJlZml4bGVuOworCQlzdWJuZXQtPmZsYWdzID0gQUREUkxJU1RfTElURVJBTCB8IEFERFJMSVNUX0lQVjY7CisJICAgICAgfQorI2VuZGlmCisJICAgIGVsc2UgCisJICAgICAgeworCQlzdHJ1Y3QgYXV0aF9uYW1lX2xpc3QgKm5hbWUgPSAgb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGF1dGhfbmFtZV9saXN0KSk7CisJCW5hbWUtPm5hbWUgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisJCW5hbWUtPmZsYWdzID0gQVVUSDQgfCBBVVRINjsKKwkJbmFtZS0+bmV4dCA9IG5ldy0+aW50ZXJmYWNlX25hbWVzOworCQluZXctPmludGVyZmFjZV9uYW1lcyA9IG5hbWU7CisJCWlmIChwcmVmaXgpCisJCSAgeworCQkgICAgaWYgKHByZWZpeGxlbiA9PSA0KQorCQkgICAgICBuYW1lLT5mbGFncyAmPSB+QVVUSDY7CisjaWZkZWYgSEFWRV9JUFY2CisJCSAgICBlbHNlIGlmIChwcmVmaXhsZW4gPT0gNikKKwkJICAgICAgbmFtZS0+ZmxhZ3MgJj0gfkFVVEg0OworI2VuZGlmCisJCSAgICBlbHNlCisJCSAgICAgIHJldF9lcnIoZ2VuX2Vycik7CisJCSAgfQorCSAgICAgIH0KKwkgICAgCisJICAgIGlmIChzdWJuZXQpCisJICAgICAgeworCQlzdWJuZXQtPmFkZHIgPSBhZGRyOworCQlzdWJuZXQtPm5leHQgPSBuZXctPnN1Ym5ldDsKKwkJbmV3LT5zdWJuZXQgPSBzdWJuZXQ7CisJICAgICAgfQorCSAgfQorCWJyZWFrOworICAgICAgfQorICAgICAgCisgICAgY2FzZSAgTE9QVF9BVVRIU09BOiAvKiAtLWF1dGgtc29hICovCisgICAgICBjb21tYSA9IHNwbGl0KGFyZyk7CisgICAgICBkYWVtb24tPnNvYV9zbiA9ICh1MzIpYXRvaShhcmcpOworICAgICAgaWYgKGNvbW1hKQorCXsKKwkgIGNoYXIgKmNwOworCSAgYXJnID0gY29tbWE7CisJICBjb21tYSA9IHNwbGl0KGFyZyk7CisJICBkYWVtb24tPmhvc3RtYXN0ZXIgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisJICBmb3IgKGNwID0gZGFlbW9uLT5ob3N0bWFzdGVyOyAqY3A7IGNwKyspCisJICAgIGlmICgqY3AgPT0gJ0AnKQorCSAgICAgICpjcCA9ICcuJzsKKworCSAgaWYgKGNvbW1hKQorCSAgICB7CisJICAgICAgYXJnID0gY29tbWE7CisJICAgICAgY29tbWEgPSBzcGxpdChhcmcpOyAKKwkgICAgICBkYWVtb24tPnNvYV9yZWZyZXNoID0gKHUzMilhdG9pKGFyZyk7CisJICAgICAgaWYgKGNvbW1hKQorCQl7CisJCSAgYXJnID0gY29tbWE7CisJCSAgY29tbWEgPSBzcGxpdChhcmcpOyAKKwkJICBkYWVtb24tPnNvYV9yZXRyeSA9ICh1MzIpYXRvaShhcmcpOworCQkgIGlmIChjb21tYSkKKwkJICAgIHsKKwkJICAgICAgYXJnID0gY29tbWE7CisJCSAgICAgIGNvbW1hID0gc3BsaXQoYXJnKTsgCisJCSAgICAgIGRhZW1vbi0+c29hX2V4cGlyeSA9ICh1MzIpYXRvaShhcmcpOworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisKKyAgICAgIGJyZWFrOworI2VuZGlmCisKKyAgICBjYXNlICdzJzogICAgICAgICAvKiAtLWRvbWFpbiAqLworICAgIGNhc2UgTE9QVF9TWU5USDogIC8qIC0tc3ludGgtZG9tYWluICovCisgICAgICBpZiAoc3RyY21wIChhcmcsICIjIikgPT0gMCkKKwlzZXRfb3B0aW9uX2Jvb2woT1BUX1JFU09MVl9ET01BSU4pOworICAgICAgZWxzZQorCXsKKwkgIGNoYXIgKmQ7CisJICBjb21tYSA9IHNwbGl0KGFyZyk7CisJICBpZiAoIShkID0gY2Fub25pY2FsaXNlX29wdChhcmcpKSkKKwkgICAgcmV0X2VycihnZW5fZXJyKTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGlmIChjb21tYSkKKwkJeworCQkgIHN0cnVjdCBjb25kX2RvbWFpbiAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGNvbmRfZG9tYWluKSk7CisJCSAgY2hhciAqbmV0cGFydDsKKwkJICAKKwkJICBuZXctPnByZWZpeCA9IE5VTEw7CisKKwkJICB1bmhpZGVfbWV0YXMoY29tbWEpOworCQkgIGlmICgobmV0cGFydCA9IHNwbGl0X2Nocihjb21tYSwgJy8nKSkpCisJCSAgICB7CisJCSAgICAgIGludCBtc2l6ZTsKKworCQkgICAgICBhcmcgPSBzcGxpdChuZXRwYXJ0KTsKKwkJICAgICAgaWYgKCFhdG9pX2NoZWNrKG5ldHBhcnQsICZtc2l6ZSkpCisJCQlyZXRfZXJyKGdlbl9lcnIpOworCQkgICAgICBlbHNlIGlmIChpbmV0X3B0b24oQUZfSU5FVCwgY29tbWEsICZuZXctPnN0YXJ0KSkKKwkJCXsKKwkJCSAgaW50IG1hc2sgPSAoMSA8PCAoMzIgLSBtc2l6ZSkpIC0gMTsKKwkJCSAgbmV3LT5pczYgPSAwOyAJCQkgIAorCQkJICBuZXctPnN0YXJ0LnNfYWRkciA9IG50b2hsKGh0b25sKG5ldy0+c3RhcnQuc19hZGRyKSAmIH5tYXNrKTsKKwkJCSAgbmV3LT5lbmQuc19hZGRyID0gbmV3LT5zdGFydC5zX2FkZHIgfCBodG9ubChtYXNrKTsKKwkJCSAgaWYgKGFyZykKKwkJCSAgICB7CisJCQkgICAgICBpZiAob3B0aW9uICE9ICdzJykKKwkJCQl7CisJCQkJICBpZiAoIShuZXctPnByZWZpeCA9IGNhbm9uaWNhbGlzZV9vcHQoYXJnKSkgfHwKKwkJCQkgICAgICBzdHJsZW4obmV3LT5wcmVmaXgpID4gTUFYTEFCRUwgLSBJTkVUX0FERFJTVFJMRU4pCisJCQkJICAgIHJldF9lcnIoXygiYmFkIHByZWZpeCIpKTsKKwkJCQl9CisJCQkgICAgICBlbHNlIGlmIChzdHJjbXAoYXJnLCAibG9jYWwiKSAhPSAwIHx8CisJCQkJICAgICAgIChtc2l6ZSAhPSA4ICYmIG1zaXplICE9IDE2ICYmIG1zaXplICE9IDI0KSkKKwkJCQlyZXRfZXJyKGdlbl9lcnIpOworCQkJICAgICAgZWxzZQorCQkJCXsKKwkJCQkgICAvKiBnZW5lcmF0ZSB0aGUgZXF1aXZhbGVudCBvZgorCQkJCSAgICAgIGxvY2FsPS94eHgueXl5Lnp6ei5pbi1hZGRyLmFycGEvICovCisJCQkJICBzdHJ1Y3Qgc2VydmVyICpzZXJ2ID0gYWRkX3JldjQobmV3LT5zdGFydCwgbXNpemUpOworCQkJCSAgc2Vydi0+ZmxhZ3MgfD0gU0VSVl9OT19BRERSOworCisJCQkJICAvKiBsb2NhbD0vPGRvbWFpbj4vICovCisJCQkJICBzZXJ2ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IHNlcnZlcikpOworCQkJCSAgbWVtc2V0KHNlcnYsIDAsIHNpemVvZihzdHJ1Y3Qgc2VydmVyKSk7CisJCQkJICBzZXJ2LT5kb21haW4gPSBkOworCQkJCSAgc2Vydi0+ZmxhZ3MgPSBTRVJWX0hBU19ET01BSU4gfCBTRVJWX05PX0FERFI7CisJCQkJICBzZXJ2LT5uZXh0ID0gZGFlbW9uLT5zZXJ2ZXJzOworCQkJCSAgZGFlbW9uLT5zZXJ2ZXJzID0gc2VydjsKKwkJCQl9CisJCQkgICAgfQorCQkJfQorI2lmZGVmIEhBVkVfSVBWNgorCQkgICAgICBlbHNlIGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIGNvbW1hLCAmbmV3LT5zdGFydDYpKQorCQkJeworCQkJICB1NjQgbWFzayA9ICgxTExVIDw8ICgxMjggLSBtc2l6ZSkpIC0gMUxMVTsKKwkJCSAgdTY0IGFkZHJwYXJ0ID0gYWRkcjZwYXJ0KCZuZXctPnN0YXJ0Nik7CisJCQkgIG5ldy0+aXM2ID0gMTsKKwkJCSAgCisJCQkgIC8qIHByZWZpeD09NjQgb3ZlcmZsb3dzIHRoZSBtYXNrIGNhbGN1bGF0aW9uIGFib3ZlICovCisJCQkgIGlmIChtc2l6ZSA9PSA2NCkKKwkJCSAgICBtYXNrID0gKHU2NCktMUxMOworCQkJICAKKwkJCSAgbmV3LT5lbmQ2ID0gbmV3LT5zdGFydDY7CisJCQkgIHNldGFkZHI2cGFydCgmbmV3LT5zdGFydDYsIGFkZHJwYXJ0ICYgfm1hc2spOworCQkJICBzZXRhZGRyNnBhcnQoJm5ldy0+ZW5kNiwgYWRkcnBhcnQgfCBtYXNrKTsKKwkJCSAgCisJCQkgIGlmIChtc2l6ZSA8IDY0KQorCQkJICAgIHJldF9lcnIoZ2VuX2Vycik7CisJCQkgIGVsc2UgaWYgKGFyZykKKwkJCSAgICB7CisJCQkgICAgICBpZiAob3B0aW9uICE9ICdzJykKKwkJCQl7CisJCQkJICBpZiAoIShuZXctPnByZWZpeCA9IGNhbm9uaWNhbGlzZV9vcHQoYXJnKSkgfHwKKwkJCQkgICAgICBzdHJsZW4obmV3LT5wcmVmaXgpID4gTUFYTEFCRUwgLSBJTkVUNl9BRERSU1RSTEVOKQorCQkJCSAgICByZXRfZXJyKF8oImJhZCBwcmVmaXgiKSk7CisJCQkJfQkKKwkJCSAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmcsICJsb2NhbCIpICE9IDAgfHwgKChtc2l6ZSAmIDQpICE9IDApKQorCQkJCXJldF9lcnIoZ2VuX2Vycik7CisJCQkgICAgICBlbHNlIAorCQkJCXsKKwkJCQkgIC8qIGdlbmVyYXRlIHRoZSBlcXVpdmFsZW50IG9mCisJCQkJICAgICBsb2NhbD0veHh4Lnl5eS56enouaXA2LmFycGEvICovCisJCQkJICBzdHJ1Y3Qgc2VydmVyICpzZXJ2ID0gYWRkX3JldjYoJm5ldy0+c3RhcnQ2LCBtc2l6ZSk7CisJCQkJICBzZXJ2LT5mbGFncyB8PSBTRVJWX05PX0FERFI7CisJCQkJICAKKwkJCQkgIC8qIGxvY2FsPS88ZG9tYWluPi8gKi8KKwkJCQkgIHNlcnYgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VydmVyKSk7CisJCQkJICBtZW1zZXQoc2VydiwgMCwgc2l6ZW9mKHN0cnVjdCBzZXJ2ZXIpKTsKKwkJCQkgIHNlcnYtPmRvbWFpbiA9IGQ7CisJCQkJICBzZXJ2LT5mbGFncyA9IFNFUlZfSEFTX0RPTUFJTiB8IFNFUlZfTk9fQUREUjsKKwkJCQkgIHNlcnYtPm5leHQgPSBkYWVtb24tPnNlcnZlcnM7CisJCQkJICBkYWVtb24tPnNlcnZlcnMgPSBzZXJ2OworCQkJCX0KKwkJCSAgICB9CisJCQl9CisjZW5kaWYKKwkJICAgICAgZWxzZQorCQkJcmV0X2VycihnZW5fZXJyKTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGNoYXIgKnByZWZzdHI7CisJCSAgICAgIGFyZyA9IHNwbGl0KGNvbW1hKTsKKwkJICAgICAgcHJlZnN0ciA9IHNwbGl0KGFyZyk7CisKKwkJICAgICAgaWYgKGluZXRfcHRvbihBRl9JTkVULCBjb21tYSwgJm5ldy0+c3RhcnQpKQorCQkJeworCQkJICBuZXctPmlzNiA9IDA7CisJCQkgIGlmICghYXJnKQorCQkJICAgIG5ldy0+ZW5kLnNfYWRkciA9IG5ldy0+c3RhcnQuc19hZGRyOworCQkJICBlbHNlIGlmICghaW5ldF9wdG9uKEFGX0lORVQsIGFyZywgJm5ldy0+ZW5kKSkKKwkJCSAgICByZXRfZXJyKGdlbl9lcnIpOworCQkJfQorI2lmZGVmIEhBVkVfSVBWNgorCQkgICAgICBlbHNlIGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIGNvbW1hLCAmbmV3LT5zdGFydDYpKQorCQkJeworCQkJICBuZXctPmlzNiA9IDE7CisJCQkgIGlmICghYXJnKQorCQkJICAgIG1lbWNweSgmbmV3LT5lbmQ2LCAmbmV3LT5zdGFydDYsIElONkFERFJTWik7CisJCQkgIGVsc2UgaWYgKCFpbmV0X3B0b24oQUZfSU5FVDYsIGFyZywgJm5ldy0+ZW5kNikpCisJCQkgICAgcmV0X2VycihnZW5fZXJyKTsKKwkJCX0KKyNlbmRpZgorCQkgICAgICBlbHNlIAorCQkJcmV0X2VycihnZW5fZXJyKTsKKworCQkgICAgICBpZiAob3B0aW9uICE9ICdzJyAmJiBwcmVmc3RyKQorCQkJeworCQkJICBpZiAoIShuZXctPnByZWZpeCA9IGNhbm9uaWNhbGlzZV9vcHQocHJlZnN0cikpIHx8CisJCQkgICAgICBzdHJsZW4obmV3LT5wcmVmaXgpID4gTUFYTEFCRUwgLSBJTkVUX0FERFJTVFJMRU4pCisJCQkgICAgcmV0X2VycihfKCJiYWQgcHJlZml4IikpOworCQkJfQorCQkgICAgfQorCisJCSAgbmV3LT5kb21haW4gPSBkOworCQkgIGlmIChvcHRpb24gID09ICdzJykKKwkJICAgIHsKKwkJICAgICAgbmV3LT5uZXh0ID0gZGFlbW9uLT5jb25kX2RvbWFpbjsKKwkJICAgICAgZGFlbW9uLT5jb25kX2RvbWFpbiA9IG5ldzsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIG5ldy0+bmV4dCA9IGRhZW1vbi0+c3ludGhfZG9tYWluczsKKwkJICAgICAgZGFlbW9uLT5zeW50aF9kb21haW5zID0gbmV3OworCQkgICAgfQorCQl9CisJICAgICAgZWxzZSBpZiAob3B0aW9uID09ICdzJykKKwkJZGFlbW9uLT5kb21haW5fc3VmZml4ID0gZDsKKwkgICAgICBlbHNlIAorCQlyZXRfZXJyKGdlbl9lcnIpOworCSAgICB9CisJfQorICAgICAgYnJlYWs7CisgICAgICAKKyAgICBjYXNlICd1JzogIC8qIC0tdXNlciAqLworICAgICAgZGFlbW9uLT51c2VybmFtZSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSAnZyc6ICAvKiAtLWdyb3VwICovCisgICAgICBkYWVtb24tPmdyb3VwbmFtZSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKyAgICAgIGRhZW1vbi0+Z3JvdXBfc2V0ID0gMTsKKyAgICAgIGJyZWFrOworCisjaWZkZWYgSEFWRV9ESENQCisgICAgY2FzZSBMT1BUX1NDUklQVFVTUjogLyogLS1zY3JpcHR1c2VyICovCisgICAgICBkYWVtb24tPnNjcmlwdHVzZXIgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgCisgICAgY2FzZSAnaSc6ICAvKiAtLWludGVyZmFjZSAqLworICAgICAgZG8geworCXN0cnVjdCBpbmFtZSAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGluYW1lKSk7CisJY29tbWEgPSBzcGxpdChhcmcpOworCW5ldy0+bmV4dCA9IGRhZW1vbi0+aWZfbmFtZXM7CisJZGFlbW9uLT5pZl9uYW1lcyA9IG5ldzsKKwkvKiBuZXctPm5hbWUgbWF5IGJlIE5VTEwgaWYgc29tZW9uZSBkb2VzCisJICAgImludGVyZmFjZT0iIHRvIGRpc2FibGUgYWxsIGludGVyZmFjZXMgZXhjZXB0IGxvb3AuICovCisJbmV3LT5uYW1lID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworCW5ldy0+dXNlZCA9IDA7CisJYXJnID0gY29tbWE7CisgICAgICB9IHdoaWxlIChhcmcpOworICAgICAgYnJlYWs7CisgICAgICAKKyAgICBjYXNlIExPUFRfVEZUUDogLyogLS1lbmFibGUtdGZ0cCAqLworICAgICAgc2V0X29wdGlvbl9ib29sKE9QVF9URlRQKTsKKyAgICAgIGlmICghYXJnKQorCWJyZWFrOworICAgICAgLyogZmFsbCB0aHJvdWdoICovCisKKyAgICBjYXNlICdJJzogIC8qIC0tZXhjZXB0LWludGVyZmFjZSAqLworICAgIGNhc2UgJzInOiAgLyogLS1uby1kaGNwLWludGVyZmFjZSAqLworICAgICAgZG8geworCXN0cnVjdCBpbmFtZSAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGluYW1lKSk7CisJY29tbWEgPSBzcGxpdChhcmcpOworCW5ldy0+bmFtZSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKwlpZiAob3B0aW9uID09ICdJJykKKwkgIHsKKwkgICAgbmV3LT5uZXh0ID0gZGFlbW9uLT5pZl9leGNlcHQ7CisJICAgIGRhZW1vbi0+aWZfZXhjZXB0ID0gbmV3OworCSAgfQorCWVsc2UgaWYgKG9wdGlvbiA9PSBMT1BUX1RGVFApCisJICAgeworCSAgICBuZXctPm5leHQgPSBkYWVtb24tPnRmdHBfaW50ZXJmYWNlczsKKwkgICAgZGFlbW9uLT50ZnRwX2ludGVyZmFjZXMgPSBuZXc7CisJICB9CisJZWxzZQorCSAgeworCSAgICBuZXctPm5leHQgPSBkYWVtb24tPmRoY3BfZXhjZXB0OworCSAgICBkYWVtb24tPmRoY3BfZXhjZXB0ID0gbmV3OworCSAgfQorCWFyZyA9IGNvbW1hOworICAgICAgfSB3aGlsZSAoYXJnKTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSAnQic6ICAvKiAtLWJvZ3VzLW54ZG9tYWluICovCisgICAgY2FzZSBMT1BUX0lHTk9SRV9BRERSOiAvKiAtLWlnbm9yZS1hZGRyZXNzICovCisgICAgIHsKKwlzdHJ1Y3QgaW5fYWRkciBhZGRyOworCXVuaGlkZV9tZXRhcyhhcmcpOworCWlmIChhcmcgJiYgKGluZXRfcHRvbihBRl9JTkVULCBhcmcsICZhZGRyKSA+IDApKQorCSAgeworCSAgICBzdHJ1Y3QgYm9ndXNfYWRkciAqYmFkZHIgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgYm9ndXNfYWRkcikpOworCSAgICBpZiAob3B0aW9uID09ICdCJykKKwkgICAgICB7CisJCWJhZGRyLT5uZXh0ID0gZGFlbW9uLT5ib2d1c19hZGRyOworCQlkYWVtb24tPmJvZ3VzX2FkZHIgPSBiYWRkcjsKKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICB7CisJCWJhZGRyLT5uZXh0ID0gZGFlbW9uLT5pZ25vcmVfYWRkcjsKKwkJZGFlbW9uLT5pZ25vcmVfYWRkciA9IGJhZGRyOworCSAgICAgIH0KKwkgICAgYmFkZHItPmFkZHIgPSBhZGRyOworCSAgfQorCWVsc2UKKwkgIHJldF9lcnIoZ2VuX2Vycik7IC8qIGVycm9yICovCisJYnJlYWs7CQorICAgICAgfQorICAgICAgCisgICAgY2FzZSAnYSc6ICAvKiAtLWxpc3Rlbi1hZGRyZXNzICovCisgICAgY2FzZSBMT1BUX0FVVEhQRUVSOiAvKiAtLWF1dGgtcGVlciAqLworICAgICAgZG8geworCXN0cnVjdCBpbmFtZSAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGluYW1lKSk7CisJY29tbWEgPSBzcGxpdChhcmcpOworCXVuaGlkZV9tZXRhcyhhcmcpOworCWlmIChhcmcgJiYgKGluZXRfcHRvbihBRl9JTkVULCBhcmcsICZuZXctPmFkZHIuaW4uc2luX2FkZHIpID4gMCkpCisJICB7CisJICAgIG5ldy0+YWRkci5zYS5zYV9mYW1pbHkgPSBBRl9JTkVUOworCSAgICBuZXctPmFkZHIuaW4uc2luX3BvcnQgPSAwOworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisJICAgIG5ldy0+YWRkci5pbi5zaW5fbGVuID0gc2l6ZW9mKG5ldy0+YWRkci5pbik7CisjZW5kaWYKKwkgIH0KKyNpZmRlZiBIQVZFX0lQVjYKKwllbHNlIGlmIChhcmcgJiYgaW5ldF9wdG9uKEFGX0lORVQ2LCBhcmcsICZuZXctPmFkZHIuaW42LnNpbjZfYWRkcikgPiAwKQorCSAgeworCSAgICBuZXctPmFkZHIuc2Euc2FfZmFtaWx5ID0gQUZfSU5FVDY7CisJICAgIG5ldy0+YWRkci5pbjYuc2luNl9mbG93aW5mbyA9IDA7CisJICAgIG5ldy0+YWRkci5pbjYuc2luNl9zY29wZV9pZCA9IDA7CisJICAgIG5ldy0+YWRkci5pbjYuc2luNl9wb3J0ID0gMDsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorCSAgICBuZXctPmFkZHIuaW42LnNpbjZfbGVuID0gc2l6ZW9mKG5ldy0+YWRkci5pbjYpOworI2VuZGlmCisJICB9CisjZW5kaWYKKwllbHNlCisJICByZXRfZXJyKGdlbl9lcnIpOworCisJbmV3LT51c2VkID0gMDsKKwlpZiAob3B0aW9uID09ICdhJykKKwkgIHsKKwkgICAgbmV3LT5uZXh0ID0gZGFlbW9uLT5pZl9hZGRyczsKKwkgICAgZGFlbW9uLT5pZl9hZGRycyA9IG5ldzsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIG5ldy0+bmV4dCA9IGRhZW1vbi0+YXV0aF9wZWVyczsKKwkgICAgZGFlbW9uLT5hdXRoX3BlZXJzID0gbmV3OworCSAgfSAKKwlhcmcgPSBjb21tYTsKKyAgICAgIH0gd2hpbGUgKGFyZyk7CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGNhc2UgJ1MnOiAgICAgICAgICAgIC8qICAtLXNlcnZlciAqLworICAgIGNhc2UgTE9QVF9MT0NBTDogICAgIC8qICAtLWxvY2FsICovCisgICAgY2FzZSAnQSc6ICAgICAgICAgICAgLyogIC0tYWRkcmVzcyAqLworICAgIGNhc2UgTE9QVF9OT19SRUJJTkQ6IC8qICAtLXJlYmluZC1kb21haW4tb2sgKi8KKyAgICAgIHsKKwlzdHJ1Y3Qgc2VydmVyICpzZXJ2LCAqbmV3bGlzdCA9IE5VTEw7CisJCisJdW5oaWRlX21ldGFzKGFyZyk7CisJCisJaWYgKGFyZyAmJiAoKmFyZyA9PSAnLycgfHwgb3B0aW9uID09IExPUFRfTk9fUkVCSU5EKSkKKwkgIHsKKwkgICAgaW50IHJlYmluZCA9ICEoKmFyZyA9PSAnLycpOworCSAgICBjaGFyICplbmQgPSBOVUxMOworCSAgICBpZiAoIXJlYmluZCkKKwkgICAgICBhcmcrKzsKKwkgICAgd2hpbGUgKHJlYmluZCB8fCAoZW5kID0gc3BsaXRfY2hyKGFyZywgJy8nKSkpCisJICAgICAgeworCQljaGFyICpkb21haW4gPSBOVUxMOworCQkvKiBlbGlkZSBsZWFkaW5nIGRvdHMgLSB0aGV5IGFyZSBpbXBsaWVkIGluIHRoZSBzZWFyY2ggYWxnb3JpdGhtICovCisJCXdoaWxlICgqYXJnID09ICcuJykgYXJnKys7CisJCS8qICMgbWF0Y2hlcyBldmVyeXRoaW5nIGFuZCBiZWNvbWVzIGEgemVybyBsZW5ndGggZG9tYWluIHN0cmluZyAqLworCQlpZiAoc3RyY21wKGFyZywgIiMiKSA9PSAwKQorCQkgIGRvbWFpbiA9ICIiOworCQllbHNlIGlmIChzdHJsZW4gKGFyZykgIT0gMCAmJiAhKGRvbWFpbiA9IGNhbm9uaWNhbGlzZV9vcHQoYXJnKSkpCisJCSAgb3B0aW9uID0gJz8nOworCQlzZXJ2ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IHNlcnZlcikpOworCQltZW1zZXQoc2VydiwgMCwgc2l6ZW9mKHN0cnVjdCBzZXJ2ZXIpKTsKKwkJc2Vydi0+bmV4dCA9IG5ld2xpc3Q7CisJCW5ld2xpc3QgPSBzZXJ2OworCQlzZXJ2LT5kb21haW4gPSBkb21haW47CisJCXNlcnYtPmZsYWdzID0gZG9tYWluID8gU0VSVl9IQVNfRE9NQUlOIDogU0VSVl9GT1JfTk9ET1RTOworCQlhcmcgPSBlbmQ7CisJCWlmIChyZWJpbmQpCisJCSAgYnJlYWs7CisJICAgICAgfQorCSAgICBpZiAoIW5ld2xpc3QpCisJICAgICAgcmV0X2VycihnZW5fZXJyKTsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIG5ld2xpc3QgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VydmVyKSk7CisJICAgIG1lbXNldChuZXdsaXN0LCAwLCBzaXplb2Yoc3RydWN0IHNlcnZlcikpOworI2lmZGVmIEhBVkVfTE9PUAorCSAgICBuZXdsaXN0LT51aWQgPSByYW5kMzIoKTsKKyNlbmRpZgorCSAgfQorCQorCWlmIChzZXJ2ZXJzX29ubHkgJiYgb3B0aW9uID09ICdTJykKKwkgIG5ld2xpc3QtPmZsYWdzIHw9IFNFUlZfRlJPTV9GSUxFOworCQorCWlmIChvcHRpb24gPT0gJ0EnKQorCSAgeworCSAgICBuZXdsaXN0LT5mbGFncyB8PSBTRVJWX0xJVEVSQUxfQUREUkVTUzsKKwkgICAgaWYgKCEobmV3bGlzdC0+ZmxhZ3MgJiBTRVJWX1RZUEUpKQorCSAgICAgIHJldF9lcnIoZ2VuX2Vycik7CisJICB9CisJZWxzZSBpZiAob3B0aW9uID09IExPUFRfTk9fUkVCSU5EKQorCSAgbmV3bGlzdC0+ZmxhZ3MgfD0gU0VSVl9OT19SRUJJTkQ7CisJCisJaWYgKCFhcmcgfHwgISphcmcpCisJICB7CisJICAgIGlmICghKG5ld2xpc3QtPmZsYWdzICYgU0VSVl9OT19SRUJJTkQpKQorCSAgICAgIG5ld2xpc3QtPmZsYWdzIHw9IFNFUlZfTk9fQUREUjsgLyogbm8gc2VydmVyICovCisJICAgIGlmIChuZXdsaXN0LT5mbGFncyAmIFNFUlZfTElURVJBTF9BRERSRVNTKQorCSAgICAgIHJldF9lcnIoZ2VuX2Vycik7CisJICB9CisKKwllbHNlIGlmIChzdHJjbXAoYXJnLCAiIyIpID09IDApCisJICB7CisJICAgIG5ld2xpc3QtPmZsYWdzIHw9IFNFUlZfVVNFX1JFU09MVjsgLyogdHJlYXQgaW4gb3JkaW5hcnkgd2F5ICovCisJICAgIGlmIChuZXdsaXN0LT5mbGFncyAmIFNFUlZfTElURVJBTF9BRERSRVNTKQorCSAgICAgIHJldF9lcnIoZ2VuX2Vycik7CisJICB9CisJZWxzZQorCSAgeworCSAgICBjaGFyICplcnIgPSBwYXJzZV9zZXJ2ZXIoYXJnLCAmbmV3bGlzdC0+YWRkciwgJm5ld2xpc3QtPnNvdXJjZV9hZGRyLCBuZXdsaXN0LT5pbnRlcmZhY2UsICZuZXdsaXN0LT5mbGFncyk7CisJICAgIGlmIChlcnIpCisJICAgICAgcmV0X2VycihlcnIpOworCSAgfQorCQorCXNlcnYgPSBuZXdsaXN0OworCXdoaWxlIChzZXJ2LT5uZXh0KQorCSAgeworCSAgICBzZXJ2LT5uZXh0LT5mbGFncyA9IHNlcnYtPmZsYWdzOworCSAgICBzZXJ2LT5uZXh0LT5hZGRyID0gc2Vydi0+YWRkcjsKKwkgICAgc2Vydi0+bmV4dC0+c291cmNlX2FkZHIgPSBzZXJ2LT5zb3VyY2VfYWRkcjsKKwkgICAgc3RyY3B5KHNlcnYtPm5leHQtPmludGVyZmFjZSwgc2Vydi0+aW50ZXJmYWNlKTsKKwkgICAgc2VydiA9IHNlcnYtPm5leHQ7CisJICB9CisJc2Vydi0+bmV4dCA9IGRhZW1vbi0+c2VydmVyczsKKwlkYWVtb24tPnNlcnZlcnMgPSBuZXdsaXN0OworCWJyZWFrOworICAgICAgfQorCisgICAgY2FzZSBMT1BUX1JFVl9TRVJWOiAvKiAtLXJldi1zZXJ2ZXIgKi8KKyAgICAgIHsKKwljaGFyICpzdHJpbmc7CisJaW50IHNpemU7CisJc3RydWN0IHNlcnZlciAqc2VydjsKKwlzdHJ1Y3QgaW5fYWRkciBhZGRyNDsKKyNpZmRlZiBIQVZFX0lQVjYKKwlzdHJ1Y3QgaW42X2FkZHIgYWRkcjY7CisjZW5kaWYKKyAKKwl1bmhpZGVfbWV0YXMoYXJnKTsKKwlpZiAoIWFyZyB8fCAhKGNvbW1hPXNwbGl0KGFyZykpIHx8ICEoc3RyaW5nID0gc3BsaXRfY2hyKGFyZywgJy8nKSkgfHwgIWF0b2lfY2hlY2soc3RyaW5nLCAmc2l6ZSkpCisJICByZXRfZXJyKGdlbl9lcnIpOworCisJaWYgKGluZXRfcHRvbihBRl9JTkVULCBhcmcsICZhZGRyNCkpCisJICBzZXJ2ID0gYWRkX3JldjQoYWRkcjQsIHNpemUpOworI2lmZGVmIEhBVkVfSVBWNgorCWVsc2UgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgYXJnLCAmYWRkcjYpKQorCSAgc2VydiA9IGFkZF9yZXY2KCZhZGRyNiwgc2l6ZSk7CisjZW5kaWYKKwllbHNlCisJICByZXRfZXJyKGdlbl9lcnIpOworIAorCXN0cmluZyA9IHBhcnNlX3NlcnZlcihjb21tYSwgJnNlcnYtPmFkZHIsICZzZXJ2LT5zb3VyY2VfYWRkciwgc2Vydi0+aW50ZXJmYWNlLCAmc2Vydi0+ZmxhZ3MpOworCQorCWlmIChzdHJpbmcpCisJICByZXRfZXJyKHN0cmluZyk7CisJCisJaWYgKHNlcnZlcnNfb25seSkKKwkgIHNlcnYtPmZsYWdzIHw9IFNFUlZfRlJPTV9GSUxFOworCQorCWJyZWFrOworICAgICAgfQorCisgICAgY2FzZSBMT1BUX0lQU0VUOiAvKiAtLWlwc2V0ICovCisjaWZuZGVmIEhBVkVfSVBTRVQKKyAgICAgIHJldF9lcnIoXygicmVjb21waWxlIHdpdGggSEFWRV9JUFNFVCBkZWZpbmVkIHRvIGVuYWJsZSBpcHNldCBkaXJlY3RpdmVzIikpOworICAgICAgYnJlYWs7CisjZWxzZQorICAgICAgeworCSBzdHJ1Y3QgaXBzZXRzIGlwc2V0c19oZWFkOworCSBzdHJ1Y3QgaXBzZXRzICppcHNldHMgPSAmaXBzZXRzX2hlYWQ7CisJIGludCBzaXplOworCSBjaGFyICplbmQ7CisJIGNoYXIgKipzZXRzLCAqKnNldHNfcG9zOworCSBtZW1zZXQoaXBzZXRzLCAwLCBzaXplb2Yoc3RydWN0IGlwc2V0cykpOworCSB1bmhpZGVfbWV0YXMoYXJnKTsKKwkgaWYgKGFyZyAmJiAqYXJnID09ICcvJykgCisJICAgeworCSAgICAgYXJnKys7CisJICAgICB3aGlsZSAoKGVuZCA9IHNwbGl0X2NocihhcmcsICcvJykpKSAKKwkgICAgICAgeworCQkgY2hhciAqZG9tYWluID0gTlVMTDsKKwkJIC8qIGVsaWRlIGxlYWRpbmcgZG90cyAtIHRoZXkgYXJlIGltcGxpZWQgaW4gdGhlIHNlYXJjaCBhbGdvcml0aG0gKi8KKwkJIHdoaWxlICgqYXJnID09ICcuJykKKwkJICAgYXJnKys7CisJCSAvKiAjIG1hdGNoZXMgZXZlcnl0aGluZyBhbmQgYmVjb21lcyBhIHplcm8gbGVuZ3RoIGRvbWFpbiBzdHJpbmcgKi8KKwkJIGlmIChzdHJjbXAoYXJnLCAiIyIpID09IDAgfHwgISphcmcpCisJCSAgIGRvbWFpbiA9ICIiOworCQkgZWxzZSBpZiAoc3RybGVuKGFyZykgIT0gMCAmJiAhKGRvbWFpbiA9IGNhbm9uaWNhbGlzZV9vcHQoYXJnKSkpCisJCSAgIG9wdGlvbiA9ICc/JzsKKwkJIGlwc2V0cy0+bmV4dCA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcHNldHMpKTsKKwkJIGlwc2V0cyA9IGlwc2V0cy0+bmV4dDsKKwkJIG1lbXNldChpcHNldHMsIDAsIHNpemVvZihzdHJ1Y3QgaXBzZXRzKSk7CisJCSBpcHNldHMtPmRvbWFpbiA9IGRvbWFpbjsKKwkJIGFyZyA9IGVuZDsKKwkgICAgICAgfQorCSAgIH0gCisJIGVsc2UgCisJICAgeworCSAgICAgaXBzZXRzLT5uZXh0ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGlwc2V0cykpOworCSAgICAgaXBzZXRzID0gaXBzZXRzLT5uZXh0OworCSAgICAgbWVtc2V0KGlwc2V0cywgMCwgc2l6ZW9mKHN0cnVjdCBpcHNldHMpKTsKKwkgICAgIGlwc2V0cy0+ZG9tYWluID0gIiI7CisJICAgfQorCSBpZiAoIWFyZyB8fCAhKmFyZykKKwkgICB7CisJICAgICBvcHRpb24gPSAnPyc7CisJICAgICBicmVhazsKKwkgICB9CisJIHNpemUgPSAyOworCSBmb3IgKGVuZCA9IGFyZzsgKmVuZDsgKytlbmQpIAorCSAgIGlmICgqZW5kID09ICcsJykKKwkgICAgICAgKytzaXplOworICAgICAKKwkgc2V0cyA9IHNldHNfcG9zID0gb3B0X21hbGxvYyhzaXplb2YoY2hhciAqKSAqIHNpemUpOworCSAKKwkgZG8geworCSAgIGVuZCA9IHNwbGl0KGFyZyk7CisJICAgKnNldHNfcG9zKysgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisJICAgYXJnID0gZW5kOworCSB9IHdoaWxlIChlbmQpOworCSAqc2V0c19wb3MgPSAwOworCSBmb3IgKGlwc2V0cyA9ICZpcHNldHNfaGVhZDsgaXBzZXRzLT5uZXh0OyBpcHNldHMgPSBpcHNldHMtPm5leHQpCisJICAgaXBzZXRzLT5uZXh0LT5zZXRzID0gc2V0czsKKwkgaXBzZXRzLT5uZXh0ID0gZGFlbW9uLT5pcHNldHM7CisJIGRhZW1vbi0+aXBzZXRzID0gaXBzZXRzX2hlYWQubmV4dDsKKwkgCisJIGJyZWFrOworICAgICAgfQorI2VuZGlmCisgICAgICAKKyAgICBjYXNlICdjJzogIC8qIC0tY2FjaGUtc2l6ZSAqLworICAgICAgeworCWludCBzaXplOworCQorCWlmICghYXRvaV9jaGVjayhhcmcsICZzaXplKSkKKwkgIHJldF9lcnIoZ2VuX2Vycik7CisJZWxzZQorCSAgeworCSAgICAvKiB6ZXJvIGlzIE9LLCBhbmQgbWVhbnMgbm8gY2FjaGluZy4gKi8KKwkgICAgCisJICAgIGlmIChzaXplIDwgMCkKKwkgICAgICBzaXplID0gMDsKKwkgICAgZWxzZSBpZiAoc2l6ZSA+IDEwMDAwKQorCSAgICAgIHNpemUgPSAxMDAwMDsKKwkgICAgCisJICAgIGRhZW1vbi0+Y2FjaGVzaXplID0gc2l6ZTsKKwkgIH0KKwlicmVhazsKKyAgICAgIH0KKyAgICAgIAorICAgIGNhc2UgJ3AnOiAgLyogLS1wb3J0ICovCisgICAgICBpZiAoIWF0b2lfY2hlY2sxNihhcmcsICZkYWVtb24tPnBvcnQpKQorCXJldF9lcnIoZ2VuX2Vycik7CisgICAgICBicmVhazsKKyAgICAKKyAgICBjYXNlIExPUFRfTUlOUE9SVDogIC8qIC0tbWluLXBvcnQgKi8KKyAgICAgIGlmICghYXRvaV9jaGVjazE2KGFyZywgJmRhZW1vbi0+bWluX3BvcnQpKQorCXJldF9lcnIoZ2VuX2Vycik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgJzAnOiAgLyogLS1kbnMtZm9yd2FyZC1tYXggKi8KKyAgICAgIGlmICghYXRvaV9jaGVjayhhcmcsICZkYWVtb24tPmZ0YWJzaXplKSkKKwlyZXRfZXJyKGdlbl9lcnIpOworICAgICAgYnJlYWs7ICAKKyAgICAKKyAgICBjYXNlICdxJzogLyogLS1sb2ctcXVlcmllcyAqLworICAgICAgc2V0X29wdGlvbl9ib29sKE9QVF9MT0cpOworICAgICAgaWYgKGFyZyAmJiBzdHJjbXAoYXJnLCAiZXh0cmEiKSA9PSAwKQorCXNldF9vcHRpb25fYm9vbChPUFRfRVhUUkFMT0cpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIExPUFRfTUFYX0xPR1M6ICAvKiAtLWxvZy1hc3luYyAqLworICAgICAgZGFlbW9uLT5tYXhfbG9ncyA9IExPR19NQVg7IC8qIGRlZmF1bHQgKi8KKyAgICAgIGlmIChhcmcgJiYgIWF0b2lfY2hlY2soYXJnLCAmZGFlbW9uLT5tYXhfbG9ncykpCisJcmV0X2VycihnZW5fZXJyKTsKKyAgICAgIGVsc2UgaWYgKGRhZW1vbi0+bWF4X2xvZ3MgPiAxMDApCisJZGFlbW9uLT5tYXhfbG9ncyA9IDEwMDsKKyAgICAgIGJyZWFrOyAgCisKKyAgICBjYXNlICdQJzogLyogLS1lZG5zLXBhY2tldC1tYXggKi8KKyAgICAgIHsKKwlpbnQgaTsKKwlpZiAoIWF0b2lfY2hlY2soYXJnLCAmaSkpCisJICByZXRfZXJyKGdlbl9lcnIpOworCWRhZW1vbi0+ZWRuc19wa3RzeiA9ICh1bnNpZ25lZCBzaG9ydClpOwkKKwlicmVhazsKKyAgICAgIH0KKyAgICAgIAorICAgIGNhc2UgJ1EnOiAgLyogLS1xdWVyeS1wb3J0ICovCisgICAgICBpZiAoIWF0b2lfY2hlY2sxNihhcmcsICZkYWVtb24tPnF1ZXJ5X3BvcnQpKQorCXJldF9lcnIoZ2VuX2Vycik7CisgICAgICAvKiBpZiBleHBsaWNpdGx5IHNldCB0byB6ZXJvLCB1c2Ugc2luZ2xlIE9TIGVwaGVtZXJhbCBwb3J0CisJIGFuZCBkaXNhYmxlIHJhbmRvbSBwb3J0cyAqLworICAgICAgaWYgKGRhZW1vbi0+cXVlcnlfcG9ydCA9PSAwKQorCWRhZW1vbi0+b3Nwb3J0ID0gMTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSAnVCc6ICAgICAgICAgLyogLS1sb2NhbC10dGwgKi8KKyAgICBjYXNlIExPUFRfTkVHVFRMOiAvKiAtLW5lZy10dGwgKi8KKyAgICBjYXNlIExPUFRfTUFYVFRMOiAvKiAtLW1heC10dGwgKi8KKyAgICBjYXNlIExPUFRfTUlOQ1RUTDogLyogLS1taW4tY2FjaGUtdHRsICovCisgICAgY2FzZSBMT1BUX01BWENUVEw6IC8qIC0tbWF4LWNhY2hlLXR0bCAqLworICAgIGNhc2UgTE9QVF9BVVRIVFRMOiAvKiAtLWF1dGgtdHRsICovCisgICAgICB7CisJaW50IHR0bDsKKwlpZiAoIWF0b2lfY2hlY2soYXJnLCAmdHRsKSkKKwkgIHJldF9lcnIoZ2VuX2Vycik7CisJZWxzZSBpZiAob3B0aW9uID09IExPUFRfTkVHVFRMKQorCSAgZGFlbW9uLT5uZWdfdHRsID0gKHVuc2lnbmVkIGxvbmcpdHRsOworCWVsc2UgaWYgKG9wdGlvbiA9PSBMT1BUX01BWFRUTCkKKwkgIGRhZW1vbi0+bWF4X3R0bCA9ICh1bnNpZ25lZCBsb25nKXR0bDsKKwllbHNlIGlmIChvcHRpb24gPT0gTE9QVF9NSU5DVFRMKQorCSAgeworCSAgICBpZiAodHRsID4gVFRMX0ZMT09SX0xJTUlUKQorCSAgICAgIHR0bCA9IFRUTF9GTE9PUl9MSU1JVDsKKwkgICAgZGFlbW9uLT5taW5fY2FjaGVfdHRsID0gKHVuc2lnbmVkIGxvbmcpdHRsOworCSAgfQorCWVsc2UgaWYgKG9wdGlvbiA9PSBMT1BUX01BWENUVEwpCisJICBkYWVtb24tPm1heF9jYWNoZV90dGwgPSAodW5zaWduZWQgbG9uZyl0dGw7CisJZWxzZSBpZiAob3B0aW9uID09IExPUFRfQVVUSFRUTCkKKwkgIGRhZW1vbi0+YXV0aF90dGwgPSAodW5zaWduZWQgbG9uZyl0dGw7CisJZWxzZQorCSAgZGFlbW9uLT5sb2NhbF90dGwgPSAodW5zaWduZWQgbG9uZyl0dGw7CisJYnJlYWs7CisgICAgICB9CisgICAgICAKKyNpZmRlZiBIQVZFX0RIQ1AKKyAgICBjYXNlICdYJzogLyogLS1kaGNwLWxlYXNlLW1heCAqLworICAgICAgaWYgKCFhdG9pX2NoZWNrKGFyZywgJmRhZW1vbi0+ZGhjcF9tYXgpKQorCXJldF9lcnIoZ2VuX2Vycik7CisgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgCisjaWZkZWYgSEFWRV9URlRQCisgICAgY2FzZSBMT1BUX1RGVFBfTUFYOiAgLyogIC0tdGZ0cC1tYXggKi8KKyAgICAgIGlmICghYXRvaV9jaGVjayhhcmcsICZkYWVtb24tPnRmdHBfbWF4KSkKKwlyZXRfZXJyKGdlbl9lcnIpOworICAgICAgYnJlYWs7ICAKKworICAgIGNhc2UgTE9QVF9QUkVGSVg6IC8qIC0tdGZ0cC1wcmVmaXggKi8KKyAgICAgIGNvbW1hID0gc3BsaXQoYXJnKTsKKyAgICAgIGlmIChjb21tYSkKKwl7CisJICBzdHJ1Y3QgdGZ0cF9wcmVmaXggKm5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCB0ZnRwX3ByZWZpeCkpOworCSAgbmV3LT5pbnRlcmZhY2UgPSBvcHRfc3RyaW5nX2FsbG9jKGNvbW1hKTsKKwkgIG5ldy0+cHJlZml4ID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworCSAgbmV3LT5uZXh0ID0gZGFlbW9uLT5pZl9wcmVmaXg7CisJICBkYWVtb24tPmlmX3ByZWZpeCA9IG5ldzsKKwl9CisgICAgICBlbHNlCisJZGFlbW9uLT50ZnRwX3ByZWZpeCA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBMT1BUX1RGVFBQT1JUUzogLyogLS10ZnRwLXBvcnQtcmFuZ2UgKi8KKyAgICAgIGlmICghKGNvbW1hID0gc3BsaXQoYXJnKSkgfHwgCisJICAhYXRvaV9jaGVjazE2KGFyZywgJmRhZW1vbi0+c3RhcnRfdGZ0cF9wb3J0KSB8fAorCSAgIWF0b2lfY2hlY2sxNihjb21tYSwgJmRhZW1vbi0+ZW5kX3RmdHBfcG9ydCkpCisJcmV0X2VycihfKCJiYWQgcG9ydCByYW5nZSIpKTsKKyAgICAgIAorICAgICAgaWYgKGRhZW1vbi0+c3RhcnRfdGZ0cF9wb3J0ID4gZGFlbW9uLT5lbmRfdGZ0cF9wb3J0KQorCXsKKwkgIGludCB0bXAgPSBkYWVtb24tPnN0YXJ0X3RmdHBfcG9ydDsKKwkgIGRhZW1vbi0+c3RhcnRfdGZ0cF9wb3J0ID0gZGFlbW9uLT5lbmRfdGZ0cF9wb3J0OworCSAgZGFlbW9uLT5lbmRfdGZ0cF9wb3J0ID0gdG1wOworCX0gCisgICAgICAKKyAgICAgIGJyZWFrOworI2VuZGlmCisJICAgICAgCisgICAgY2FzZSBMT1BUX0JSSURHRTogICAvKiAtLWJyaWRnZS1pbnRlcmZhY2UgKi8KKyAgICAgIHsKKwlzdHJ1Y3QgZGhjcF9icmlkZ2UgKm5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaGNwX2JyaWRnZSkpOworCWlmICghKGNvbW1hID0gc3BsaXQoYXJnKSkgfHwgc3RybGVuKGFyZykgPiBJRl9OQU1FU0laRSAtIDEgKQorCSAgcmV0X2VycihfKCJiYWQgYnJpZGdlLWludGVyZmFjZSIpKTsKKwkKKwlzdHJjcHkobmV3LT5pZmFjZSwgYXJnKTsKKwluZXctPmFsaWFzID0gTlVMTDsKKwluZXctPm5leHQgPSBkYWVtb24tPmJyaWRnZXM7CisJZGFlbW9uLT5icmlkZ2VzID0gbmV3OworCisJZG8geworCSAgYXJnID0gY29tbWE7CisJICBjb21tYSA9IHNwbGl0KGFyZyk7CisJICBpZiAoc3RybGVuKGFyZykgIT0gMCAmJiBzdHJsZW4oYXJnKSA8PSBJRl9OQU1FU0laRSAtIDEpCisJICAgIHsKKwkgICAgICBzdHJ1Y3QgZGhjcF9icmlkZ2UgKmIgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGhjcF9icmlkZ2UpKTsgCisJICAgICAgYi0+bmV4dCA9IG5ldy0+YWxpYXM7CisJICAgICAgbmV3LT5hbGlhcyA9IGI7CisJICAgICAgc3RyY3B5KGItPmlmYWNlLCBhcmcpOworCSAgICB9CisJfSB3aGlsZSAoY29tbWEpOworCQorCWJyZWFrOworICAgICAgfQorCisjaWZkZWYgSEFWRV9ESENQCisgICAgY2FzZSAnRic6ICAvKiAtLWRoY3AtcmFuZ2UgKi8KKyAgICAgIHsKKwlpbnQgaywgbGVhc2Vwb3MgPSAyOworCWNoYXIgKmNwLCAqYVs4XSA9IHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9OworCXN0cnVjdCBkaGNwX2NvbnRleHQgKm5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaGNwX2NvbnRleHQpKTsKKwkKKwltZW1zZXQgKG5ldywgMCwgc2l6ZW9mKCpuZXcpKTsKKwluZXctPmxlYXNlX3RpbWUgPSBERUZMRUFTRTsKKwkKKwlpZiAoIWFyZykKKwkgIHsKKwkgICAgb3B0aW9uID0gJz8nOworCSAgICBicmVhazsKKwkgIH0KKwkKKwl3aGlsZSgxKQorCSAgeworCSAgICBmb3IgKGNwID0gYXJnOyAqY3A7IGNwKyspCisJICAgICAgaWYgKCEoKmNwID09ICcgJyB8fCAqY3AgPT0gJy4nIHx8ICpjcCA9PSAnOicgfHwgCisJCSAgICAoKmNwID49ICdhJyAmJiAqY3AgPD0gJ2YnKSB8fCAoKmNwID49ICdBJyAmJiAqY3AgPD0gJ0YnKSB8fAorCQkgICAgKCpjcCA+PScwJyAmJiAqY3AgPD0gJzknKSkpCisJCWJyZWFrOworCSAgICAKKwkgICAgaWYgKCpjcCAhPSAnLCcgJiYgKGNvbW1hID0gc3BsaXQoYXJnKSkpCisJICAgICAgeworCQlpZiAoaXNfdGFnX3ByZWZpeChhcmcpKQorCQkgIHsKKwkJICAgIHN0cnVjdCBkaGNwX25ldGlkICp0dCA9IG9wdF9tYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgZGhjcF9uZXRpZCkpOworCQkgICAgdHQtPm5ldCA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKzQpOworCQkgICAgdHQtPm5leHQgPSBuZXctPmZpbHRlcjsKKwkJICAgIC8qIGlnbm9yZSBlbXB0eSB0YWcgKi8KKwkJICAgIGlmICh0dC0+bmV0KQorCQkgICAgICBuZXctPmZpbHRlciA9IHR0OworCQkgIH0KKwkJZWxzZQorCQkgIHsKKwkJICAgIGlmIChuZXctPm5ldGlkLm5ldCkKKwkJICAgICAgcmV0X2VycihfKCJvbmx5IG9uZSB0YWcgYWxsb3dlZCIpKTsKKwkJICAgIGVsc2UgaWYgKHN0cnN0cihhcmcsICJzZXQ6IikgPT0gYXJnKQorCQkgICAgICBuZXctPm5ldGlkLm5ldCA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKzQpOworCQkgICAgZWxzZQorCQkgICAgICBuZXctPm5ldGlkLm5ldCA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKwkJICB9CisJCWFyZyA9IGNvbW1hOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJYVswXSA9IGFyZzsKKwkJYnJlYWs7CisJICAgICAgfQorCSAgfQorCQorCWZvciAoayA9IDE7IGsgPCA4OyBrKyspCisJICBpZiAoIShhW2tdID0gc3BsaXQoYVtrLTFdKSkpCisJICAgIGJyZWFrOworCQorCWlmIChrIDwgMikKKwkgIHJldF9lcnIoXygiYmFkIGRoY3AtcmFuZ2UiKSk7CisJCisJaWYgKGluZXRfcHRvbihBRl9JTkVULCBhWzBdLCAmbmV3LT5zdGFydCkpCisJICB7CisJICAgIG5ldy0+bmV4dCA9IGRhZW1vbi0+ZGhjcDsKKwkgICAgZGFlbW9uLT5kaGNwID0gbmV3OworCSAgICBuZXctPmVuZCA9IG5ldy0+c3RhcnQ7CisJICAgIGlmIChzdHJjbXAoYVsxXSwgInN0YXRpYyIpID09IDApCisJICAgICAgbmV3LT5mbGFncyB8PSBDT05URVhUX1NUQVRJQzsKKwkgICAgZWxzZSBpZiAoc3RyY21wKGFbMV0sICJwcm94eSIpID09IDApCisJICAgICAgbmV3LT5mbGFncyB8PSBDT05URVhUX1BST1hZOworCSAgICBlbHNlIGlmICghaW5ldF9wdG9uKEFGX0lORVQsIGFbMV0sICZuZXctPmVuZCkpCisJICAgICAgcmV0X2VycihfKCJiYWQgZGhjcC1yYW5nZSIpKTsKKwkgICAgCisJICAgIGlmIChudG9obChuZXctPnN0YXJ0LnNfYWRkcikgPiBudG9obChuZXctPmVuZC5zX2FkZHIpKQorCSAgICAgIHsKKwkJc3RydWN0IGluX2FkZHIgdG1wID0gbmV3LT5zdGFydDsKKwkJbmV3LT5zdGFydCA9IG5ldy0+ZW5kOworCQluZXctPmVuZCA9IHRtcDsKKwkgICAgICB9CisJICAgIAorCSAgICBpZiAoayA+PSAzICYmIHN0cmNocihhWzJdLCAnLicpICYmICAKKwkJKGluZXRfcHRvbihBRl9JTkVULCBhWzJdLCAmbmV3LT5uZXRtYXNrKSA+IDApKQorCSAgICAgIHsKKwkJbmV3LT5mbGFncyB8PSBDT05URVhUX05FVE1BU0s7CisJCWxlYXNlcG9zID0gMzsKKwkJaWYgKCFpc19zYW1lX25ldChuZXctPnN0YXJ0LCBuZXctPmVuZCwgbmV3LT5uZXRtYXNrKSkKKwkJICByZXRfZXJyKF8oImluY29uc2lzdGVudCBESENQIHJhbmdlIikpOworCSAgICAgIH0KKwkgICAgCisJICAgIGlmIChrID49IDQgJiYgc3RyY2hyKGFbM10sICcuJykgJiYgIAorCQkoaW5ldF9wdG9uKEFGX0lORVQsIGFbM10sICZuZXctPmJyb2FkY2FzdCkgPiAwKSkKKwkgICAgICB7CisJCW5ldy0+ZmxhZ3MgfD0gQ09OVEVYVF9CUkRDQVNUOworCQlsZWFzZXBvcyA9IDQ7CisJICAgICAgfQorCSAgfQorI2lmZGVmIEhBVkVfREhDUDYKKwllbHNlIGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIGFbMF0sICZuZXctPnN0YXJ0NikpCisJICB7CisJICAgIG5ldy0+ZmxhZ3MgfD0gQ09OVEVYVF9WNjsgCisJICAgIG5ldy0+cHJlZml4ID0gNjQ7IC8qIGRlZmF1bHQgKi8KKwkgICAgbmV3LT5lbmQ2ID0gbmV3LT5zdGFydDY7CisJICAgIG5ldy0+bmV4dCA9IGRhZW1vbi0+ZGhjcDY7CisJICAgIGRhZW1vbi0+ZGhjcDYgPSBuZXc7CisKKwkgICAgZm9yIChsZWFzZXBvcyA9IDE7IGxlYXNlcG9zIDwgazsgbGVhc2Vwb3MrKykKKwkgICAgICB7CisJCWlmIChzdHJjbXAoYVtsZWFzZXBvc10sICJzdGF0aWMiKSA9PSAwKQorCQkgIG5ldy0+ZmxhZ3MgfD0gQ09OVEVYVF9TVEFUSUMgfCBDT05URVhUX0RIQ1A7CisJCWVsc2UgaWYgKHN0cmNtcChhW2xlYXNlcG9zXSwgInJhLW9ubHkiKSA9PSAwIHx8IHN0cmNtcChhW2xlYXNlcG9zXSwgInNsYWFjIikgPT0gMCApCisJCSAgbmV3LT5mbGFncyB8PSBDT05URVhUX1JBOworCQllbHNlIGlmIChzdHJjbXAoYVtsZWFzZXBvc10sICJyYS1uYW1lcyIpID09IDApCisJCSAgbmV3LT5mbGFncyB8PSBDT05URVhUX1JBX05BTUUgfCBDT05URVhUX1JBOworCQllbHNlIGlmIChzdHJjbXAoYVtsZWFzZXBvc10sICJyYS1hZHZyb3V0ZXIiKSA9PSAwKQorCQkgIG5ldy0+ZmxhZ3MgfD0gQ09OVEVYVF9SQV9ST1VURVIgfCBDT05URVhUX1JBOworCQllbHNlIGlmIChzdHJjbXAoYVtsZWFzZXBvc10sICJyYS1zdGF0ZWxlc3MiKSA9PSAwKQorCQkgIG5ldy0+ZmxhZ3MgfD0gQ09OVEVYVF9SQV9TVEFURUxFU1MgfCBDT05URVhUX0RIQ1AgfCBDT05URVhUX1JBOworCQllbHNlIGlmIChsZWFzZXBvcyA9PSAxICYmIGluZXRfcHRvbihBRl9JTkVUNiwgYVtsZWFzZXBvc10sICZuZXctPmVuZDYpKQorCQkgIG5ldy0+ZmxhZ3MgfD0gQ09OVEVYVF9ESENQOyAKKwkJZWxzZSBpZiAoc3Ryc3RyKGFbbGVhc2Vwb3NdLCAiY29uc3RydWN0b3I6IikgPT0gYVtsZWFzZXBvc10pCisJCSAgeworCQkgICAgbmV3LT50ZW1wbGF0ZV9pbnRlcmZhY2UgPSBvcHRfc3RyaW5nX2FsbG9jKGFbbGVhc2Vwb3NdICsgMTIpOworCQkgICAgbmV3LT5mbGFncyB8PSBDT05URVhUX1RFTVBMQVRFOworCQkgIH0KKwkJZWxzZSAgCisJCSAgYnJlYWs7CisJICAgICAgfQorCSAgIAkgICAgCSAgICAgCisJICAgIC8qIGJhcmUgaW50ZWdlciA8IDEyOCBpcyBwcmVmaXggdmFsdWUgKi8KKwkgICAgaWYgKGxlYXNlcG9zIDwgaykKKwkgICAgICB7CisJCWludCBwcmVmOworCQlmb3IgKGNwID0gYVtsZWFzZXBvc107ICpjcDsgY3ArKykKKwkJICBpZiAoISgqY3AgPj0gJzAnICYmICpjcCA8PSAnOScpKQorCQkgICAgYnJlYWs7CisJCWlmICghKmNwICYmIChwcmVmID0gYXRvaShhW2xlYXNlcG9zXSkpIDw9IDEyOCkKKwkJICB7CisJCSAgICBuZXctPnByZWZpeCA9IHByZWY7CisJCSAgICBsZWFzZXBvcysrOworCQkgIH0KKwkgICAgICB9CisJICAgIAorCSAgICBpZiAobmV3LT5wcmVmaXggIT0gNjQpCisJICAgICAgeworCQlpZiAobmV3LT5mbGFncyAmIENPTlRFWFRfUkEpCisJCSAgcmV0X2VycihfKCJwcmVmaXggbGVuZ3RoIG11c3QgYmUgZXhhY3RseSA2NCBmb3IgUkEgc3VibmV0cyIpKTsKKwkJZWxzZSBpZiAobmV3LT5mbGFncyAmIENPTlRFWFRfVEVNUExBVEUpCisJCSAgcmV0X2VycihfKCJwcmVmaXggbGVuZ3RoIG11c3QgYmUgZXhhY3RseSA2NCBmb3Igc3VibmV0IGNvbnN0cnVjdG9ycyIpKTsKKwkgICAgICB9CisKKwkgICAgaWYgKG5ldy0+cHJlZml4IDwgNjQpCisJICAgICAgcmV0X2VycihfKCJwcmVmaXggbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgNjQiKSk7CisJICAgIAorCSAgICBpZiAoIWlzX3NhbWVfbmV0NigmbmV3LT5zdGFydDYsICZuZXctPmVuZDYsIG5ldy0+cHJlZml4KSkKKwkgICAgICByZXRfZXJyKF8oImluY29uc2lzdGVudCBESENQdjYgcmFuZ2UiKSk7CisKKwkgICAgLyogZGhjcC1yYW5nZT06OiBlbmFibGVzIERIQ1Agc3RhdGVsZXNzIG9uIGFueSBpbnRlcmZhY2UgKi8KKwkgICAgaWYgKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZuZXctPnN0YXJ0NikgJiYgIShuZXctPmZsYWdzICYgQ09OVEVYVF9URU1QTEFURSkpCisJICAgICAgbmV3LT5wcmVmaXggPSAwOworCSAgICAKKwkgICAgaWYgKG5ldy0+ZmxhZ3MgJiBDT05URVhUX1RFTVBMQVRFKQorCSAgICAgIHsKKwkJc3RydWN0IGluNl9hZGRyIHplcm87CisJCW1lbXNldCgmemVybywgMCwgc2l6ZW9mKHplcm8pKTsKKwkJaWYgKCFpc19zYW1lX25ldDYoJnplcm8sICZuZXctPnN0YXJ0NiwgbmV3LT5wcmVmaXgpKQorCQkgIHJldF9lcnIoXygicHJlZml4IG11c3QgYmUgemVybyB3aXRoIFwiY29uc3RydWN0b3I6XCIgYXJndW1lbnQiKSk7CisJICAgICAgfQorCSAgICAKKwkgICAgaWYgKGFkZHI2cGFydCgmbmV3LT5zdGFydDYpID4gYWRkcjZwYXJ0KCZuZXctPmVuZDYpKQorCSAgICAgIHsKKwkJc3RydWN0IGluNl9hZGRyIHRtcCA9IG5ldy0+c3RhcnQ2OworCQluZXctPnN0YXJ0NiA9IG5ldy0+ZW5kNjsKKwkJbmV3LT5lbmQ2ID0gdG1wOworCSAgICAgIH0KKwkgIH0KKyNlbmRpZgorCWVsc2UKKwkgIHJldF9lcnIoXygiYmFkIGRoY3AtcmFuZ2UiKSk7CisJCisJaWYgKGxlYXNlcG9zIDwgaykKKwkgIHsKKwkgICAgaWYgKHN0cmNtcChhW2xlYXNlcG9zXSwgImluZmluaXRlIikgPT0gMCkKKwkgICAgICBuZXctPmxlYXNlX3RpbWUgPSAweGZmZmZmZmZmOworCSAgICBlbHNlIGlmIChzdHJjbXAoYVtsZWFzZXBvc10sICJkZXByZWNhdGVkIikgPT0gMCkKKwkgICAgICBuZXctPmZsYWdzIHw9IENPTlRFWFRfREVQUkVDQVRFOworCSAgICBlbHNlCisJICAgICAgeworCQlpbnQgZmFjID0gMTsKKwkJaWYgKHN0cmxlbihhW2xlYXNlcG9zXSkgPiAwKQorCQkgIHsKKwkJICAgIHN3aXRjaCAoYVtsZWFzZXBvc11bc3RybGVuKGFbbGVhc2Vwb3NdKSAtIDFdKQorCQkgICAgICB7CisJCSAgICAgIGNhc2UgJ3cnOgorCQkgICAgICBjYXNlICdXJzoKKwkJCWZhYyAqPSA3OworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCSAgICAgIGNhc2UgJ2QnOgorCQkgICAgICBjYXNlICdEJzoKKwkJCWZhYyAqPSAyNDsKKwkJCS8qIGZhbGwgdGhvdWdoICovCisJCSAgICAgIGNhc2UgJ2gnOgorCQkgICAgICBjYXNlICdIJzoKKwkJCWZhYyAqPSA2MDsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQkgICAgICBjYXNlICdtJzoKKwkJICAgICAgY2FzZSAnTSc6CisJCQlmYWMgKj0gNjA7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJICAgICAgY2FzZSAncyc6CisJCSAgICAgIGNhc2UgJ1MnOgorCQkJYVtsZWFzZXBvc11bc3RybGVuKGFbbGVhc2Vwb3NdKSAtIDFdID0gMDsKKwkJICAgICAgfQorCQkgICAgCisJCSAgICBmb3IgKGNwID0gYVtsZWFzZXBvc107ICpjcDsgY3ArKykKKwkJICAgICAgaWYgKCEoKmNwID49ICcwJyAmJiAqY3AgPD0gJzknKSkKKwkJCWJyZWFrOworCisJCSAgICBpZiAoKmNwIHx8IChsZWFzZXBvcysxIDwgaykpCisJCSAgICAgIHJldF9lcnIoXygiYmFkIGRoY3AtcmFuZ2UiKSk7CisJCSAgICAKKwkJICAgIG5ldy0+bGVhc2VfdGltZSA9IGF0b2koYVtsZWFzZXBvc10pICogZmFjOworCQkgICAgLyogTGVhc2VzIG9mIGEgbWludXRlIG9yIGxlc3MgY29uZnVzZQorCQkgICAgICAgc29tZSBjbGllbnRzLCBub3RhYmx5IEFwcGxlJ3MgKi8KKwkJICAgIGlmIChuZXctPmxlYXNlX3RpbWUgPCAxMjApCisJCSAgICAgIG5ldy0+bGVhc2VfdGltZSA9IDEyMDsKKwkJICB9CisJICAgICAgfQorCSAgfQorCWJyZWFrOworICAgICAgfQorCisgICAgY2FzZSBMT1BUX0JBTks6CisgICAgY2FzZSAnRyc6ICAvKiAtLWRoY3AtaG9zdCAqLworICAgICAgeworCWludCBqLCBrID0gMDsKKwljaGFyICphWzddID0geyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH07CisJc3RydWN0IGRoY3BfY29uZmlnICpuZXc7CisJc3RydWN0IGluX2FkZHIgaW47CisJCisJbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGRoY3BfY29uZmlnKSk7CisJCisJbmV3LT5uZXh0ID0gZGFlbW9uLT5kaGNwX2NvbmY7CisJbmV3LT5mbGFncyA9IChvcHRpb24gPT0gTE9QVF9CQU5LKSA/IENPTkZJR19CQU5LIDogMDsKKwluZXctPmh3YWRkciA9IE5VTEw7CisJbmV3LT5uZXRpZCA9IE5VTEw7CisKKwlpZiAoKGFbMF0gPSBhcmcpKQorCSAgZm9yIChrID0gMTsgayA8IDc7IGsrKykKKwkgICAgaWYgKCEoYVtrXSA9IHNwbGl0KGFbay0xXSkpKQorCSAgICAgIGJyZWFrOworCQorCWZvciAoaiA9IDA7IGogPCBrOyBqKyspCisJICBpZiAoc3RyY2hyKGFbal0sICc6JykpIC8qIGV0aGVybmV0IGFkZHJlc3MsIG5ldGlkIG9yIGJpbmFyeSBDTElEICovCisJICAgIHsKKwkgICAgICBjaGFyICphcmcgPSBhW2pdOworCSAgICAgIAorCSAgICAgIGlmICgoYXJnWzBdID09ICdpJyB8fCBhcmdbMF0gPT0gJ0knKSAmJgorCQkgIChhcmdbMV0gPT0gJ2QnIHx8IGFyZ1sxXSA9PSAnRCcpICYmCisJCSAgYXJnWzJdID09ICc6JykKKwkJeworCQkgIGlmIChhcmdbM10gPT0gJyonKQorCQkgICAgbmV3LT5mbGFncyB8PSBDT05GSUdfTk9DTElEOworCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgaW50IGxlbjsKKwkJICAgICAgYXJnICs9IDM7IC8qIGR1bXAgaWQ6ICovCisJCSAgICAgIGlmIChzdHJjaHIoYXJnLCAnOicpKQorCQkJbGVuID0gcGFyc2VfaGV4KGFyZywgKHVuc2lnbmVkIGNoYXIgKilhcmcsIC0xLCBOVUxMLCBOVUxMKTsKKwkJICAgICAgZWxzZQorCQkJeworCQkJICB1bmhpZGVfbWV0YXMoYXJnKTsKKwkJCSAgbGVuID0gKGludCkgc3RybGVuKGFyZyk7CisJCQl9CisKKwkJICAgICAgaWYgKGxlbiA9PSAtMSkKKworCQkJcmV0X2VycihfKCJiYWQgaGV4IGNvbnN0YW50IikpOworCQkgICAgICBlbHNlIGlmICgobmV3LT5jbGlkID0gb3B0X21hbGxvYyhsZW4pKSkKKwkJCXsKKwkJCSAgbmV3LT5mbGFncyB8PSBDT05GSUdfQ0xJRDsKKwkJCSAgbmV3LT5jbGlkX2xlbiA9IGxlbjsKKwkJCSAgbWVtY3B5KG5ldy0+Y2xpZCwgYXJnLCBsZW4pOworCQkJfQorCQkgICAgfQorCQl9CisJICAgICAgLyogZGhjcC1ob3N0IGhhcyBzdHJhbmdlIGJhY2t3YXJkcy1jb21wYXQgbmVlZHMuICovCisJICAgICAgZWxzZSBpZiAoc3Ryc3RyKGFyZywgIm5ldDoiKSA9PSBhcmcgfHwgc3Ryc3RyKGFyZywgInNldDoiKSA9PSBhcmcpCisJCXsKKwkJICBzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV3dGFnID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGRoY3BfbmV0aWQpKTsKKwkJICBzdHJ1Y3QgZGhjcF9uZXRpZF9saXN0ICpuZXdsaXN0ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGRoY3BfbmV0aWRfbGlzdCkpOworCQkgIG5ld3RhZy0+bmV0ID0gb3B0X21hbGxvYyhzdHJsZW4oYXJnICsgNCkgKyAxKTsKKwkJICBuZXdsaXN0LT5uZXh0ID0gbmV3LT5uZXRpZDsKKwkJICBuZXctPm5ldGlkID0gbmV3bGlzdDsKKwkJICBuZXdsaXN0LT5saXN0ID0gbmV3dGFnOworCQkgIHN0cmNweShuZXd0YWctPm5ldCwgYXJnKzQpOworCQkgIHVuaGlkZV9tZXRhcyhuZXd0YWctPm5ldCk7CisJCX0KKwkgICAgICBlbHNlIGlmIChzdHJzdHIoYXJnLCAidGFnOiIpID09IGFyZykKKwkJcmV0X2VycihfKCJjYW5ub3QgbWF0Y2ggdGFncyBpbiAtLWRoY3AtaG9zdCIpKTsKKyNpZmRlZiBIQVZFX0RIQ1A2CisJICAgICAgZWxzZSBpZiAoYXJnWzBdID09ICdbJyAmJiBhcmdbc3RybGVuKGFyZyktMV0gPT0gJ10nKQorCQl7CisJCSAgYXJnW3N0cmxlbihhcmcpLTFdID0gMDsKKwkJICBhcmcrKzsKKwkJICAKKwkJICBpZiAoIWluZXRfcHRvbihBRl9JTkVUNiwgYXJnLCAmbmV3LT5hZGRyNikpCisJCSAgICByZXRfZXJyKF8oImJhZCBJUHY2IGFkZHJlc3MiKSk7CisKKwkJICBmb3IgKGk9IDA7IGkgPCA4OyBpKyspCisJCSAgICBpZiAobmV3LT5hZGRyNi5zNl9hZGRyW2ldICE9IDApCisJCSAgICAgIGJyZWFrOworCisJCSAgLyogc2V0IFdJTERDQVJEIGlmIG5ldHdvcmsgcGFydCBhbGwgemVyb3MgKi8KKwkJICBpZiAoaSA9PSA4KQorCQkgICAgbmV3LT5mbGFncyB8PSBDT05GSUdfV0lMRENBUkQ7CisJCSAgCisJCSAgbmV3LT5mbGFncyB8PSBDT05GSUdfQUREUjY7CisJCX0KKyNlbmRpZgorCSAgICAgIGVsc2UKKwkJeworCQkgIHN0cnVjdCBod2FkZHJfY29uZmlnICpuZXdodyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBod2FkZHJfY29uZmlnKSk7CisJCSAgaWYgKChuZXdody0+aHdhZGRyX2xlbiA9IHBhcnNlX2hleChhW2pdLCBuZXdody0+aHdhZGRyLCBESENQX0NIQUREUl9NQVgsIAorCQkJCQkJICAgICAmbmV3aHctPndpbGRjYXJkX21hc2ssICZuZXdody0+aHdhZGRyX3R5cGUpKSA9PSAtMSkKKwkJICAgIHJldF9lcnIoXygiYmFkIGhleCBjb25zdGFudCIpKTsKKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIAorCQkgICAgICBuZXdody0+bmV4dCA9IG5ldy0+aHdhZGRyOworCQkgICAgICBuZXctPmh3YWRkciA9IG5ld2h3OworCQkgICAgfQkJICAgIAorCQl9CisJICAgIH0KKwkgIGVsc2UgaWYgKHN0cmNocihhW2pdLCAnLicpICYmIChpbmV0X3B0b24oQUZfSU5FVCwgYVtqXSwgJmluKSA+IDApKQorCSAgICB7CisJICAgICAgc3RydWN0IGRoY3BfY29uZmlnICpjb25maWdzOworCSAgICAgIAorCSAgICAgIG5ldy0+YWRkciA9IGluOworCSAgICAgIG5ldy0+ZmxhZ3MgfD0gQ09ORklHX0FERFI7CisKKwkgICAgICAvKiBJZiB0aGUgc2FtZSBJUCBhcHBlYXJzIGluIG1vcmUgdGhhbiBvbmUgaG9zdCBjb25maWcsIHRoZW4gRElTQ09WRVIKKwkJIGZvciBvbmUgb2YgdGhlIGhvc3RzIHdpbGwgZ2V0IHRoZSBhZGRyZXNzLCBidXQgUkVRVUVTVCB3aWxsIGJlIE5BS2VkLAorCQkgc2luY2UgdGhlIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgYnkgdGhlIG90aGVyIG9uZSAtPiBwcm90b2NvbCBsb29wLiAqLworCSAgICAgIGZvciAoY29uZmlncyA9IGRhZW1vbi0+ZGhjcF9jb25mOyBjb25maWdzOyBjb25maWdzID0gY29uZmlncy0+bmV4dCkgCisJCWlmICgoY29uZmlncy0+ZmxhZ3MgJiBDT05GSUdfQUREUikgJiYgY29uZmlncy0+YWRkci5zX2FkZHIgPT0gaW4uc19hZGRyKQorCQkgIHsKKwkJICAgIHNwcmludGYoZXJyc3RyLCBfKCJkdXBsaWNhdGUgZGhjcC1ob3N0IElQIGFkZHJlc3MgJXMiKSwgIGluZXRfbnRvYShpbikpOworCQkgICAgcmV0dXJuIDA7CisJCSAgfQkgICAgICAKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgY2hhciAqY3AsICpsYXN0cCA9IE5VTEwsIGxhc3QgPSAwOworCSAgICAgIGludCBmYWMgPSAxLCBpc2RpZyA9IDA7CisJICAgICAgCisJICAgICAgaWYgKHN0cmxlbihhW2pdKSA+IDEpCisJCXsKKwkJICBsYXN0cCA9IGFbal0gKyBzdHJsZW4oYVtqXSkgLSAxOworCQkgIGxhc3QgPSAqbGFzdHA7CisJCSAgc3dpdGNoIChsYXN0KQorCQkgICAgeworCQkgICAgY2FzZSAndyc6CisJCSAgICBjYXNlICdXJzoKKwkJICAgICAgZmFjICo9IDc7CisJCSAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworCQkgICAgY2FzZSAnZCc6CisJCSAgICBjYXNlICdEJzoKKwkJICAgICAgZmFjICo9IDI0OworCQkgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKwkJICAgIGNhc2UgJ2gnOgorCQkgICAgY2FzZSAnSCc6CisJCSAgICAgIGZhYyAqPSA2MDsKKwkJICAgICAgLyogZmFsbCB0aHJvdWdoICovCisJCSAgICBjYXNlICdtJzoKKwkJICAgIGNhc2UgJ00nOgorCQkgICAgICBmYWMgKj0gNjA7CisJCSAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworCQkgICAgY2FzZSAncyc6CisJCSAgICBjYXNlICdTJzoKKwkJICAgICAgKmxhc3RwID0gMDsKKwkJICAgIH0KKwkJfQorCSAgICAgIAorCSAgICAgIGZvciAoY3AgPSBhW2pdOyAqY3A7IGNwKyspCisJCWlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpCisJCSAgaXNkaWcgPSAxOworCQllbHNlIGlmICgqY3AgIT0gJyAnKQorCQkgIGJyZWFrOworCisJICAgICAgaWYgKCpjcCkKKwkJeworCQkgIGlmIChsYXN0cCkKKwkJICAgICpsYXN0cCA9IGxhc3Q7CisJCSAgaWYgKHN0cmNtcChhW2pdLCAiaW5maW5pdGUiKSA9PSAwKQorCQkgICAgeworCQkgICAgICBuZXctPmxlYXNlX3RpbWUgPSAweGZmZmZmZmZmOworCQkgICAgICBuZXctPmZsYWdzIHw9IENPTkZJR19USU1FOworCQkgICAgfQorCQkgIGVsc2UgaWYgKHN0cmNtcChhW2pdLCAiaWdub3JlIikgPT0gMCkKKwkJICAgIG5ldy0+ZmxhZ3MgfD0gQ09ORklHX0RJU0FCTEU7CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBpZiAoIShuZXctPmhvc3RuYW1lID0gY2Fub25pY2FsaXNlX29wdChhW2pdKSkgfHwKKwkJCSAgIWxlZ2FsX2hvc3RuYW1lKG5ldy0+aG9zdG5hbWUpKQorCQkJcmV0X2VycihfKCJiYWQgREhDUCBob3N0IG5hbWUiKSk7CisJCSAgICAgCisJCSAgICAgIG5ldy0+ZmxhZ3MgfD0gQ09ORklHX05BTUU7CisJCSAgICAgIG5ldy0+ZG9tYWluID0gc3RyaXBfaG9zdG5hbWUobmV3LT5ob3N0bmFtZSk7CQkJCisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlIGlmIChpc2RpZykKKwkJeworCQkgIG5ldy0+bGVhc2VfdGltZSA9IGF0b2koYVtqXSkgKiBmYWM7IAorCQkgIC8qIExlYXNlcyBvZiBhIG1pbnV0ZSBvciBsZXNzIGNvbmZ1c2UKKwkJICAgICBzb21lIGNsaWVudHMsIG5vdGFibHkgQXBwbGUncyAqLworCQkgIGlmIChuZXctPmxlYXNlX3RpbWUgPCAxMjApCisJCSAgICBuZXctPmxlYXNlX3RpbWUgPSAxMjA7CisJCSAgbmV3LT5mbGFncyB8PSBDT05GSUdfVElNRTsKKwkJfQorCSAgICB9CisJCisJZGFlbW9uLT5kaGNwX2NvbmYgPSBuZXc7CisJYnJlYWs7CisgICAgICB9CisKKyAgICBjYXNlIExPUFRfVEFHX0lGOiAgLyogLS10YWctaWYgKi8KKyAgICAgIHsKKwlzdHJ1Y3QgdGFnX2lmICpuZXcgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGFnX2lmKSk7CisJCQorCW5ldy0+dGFnID0gTlVMTDsKKwluZXctPnNldCA9IE5VTEw7CisJbmV3LT5uZXh0ID0gTlVMTDsKKwkKKwkvKiBwcmVzZXJ2ZSBvcmRlciAqLworCWlmICghZGFlbW9uLT50YWdfaWYpCisJICBkYWVtb24tPnRhZ19pZiA9IG5ldzsKKwllbHNlCisJICB7CisJICAgIHN0cnVjdCB0YWdfaWYgKnRtcDsKKwkgICAgZm9yICh0bXAgPSBkYWVtb24tPnRhZ19pZjsgdG1wLT5uZXh0OyB0bXAgPSB0bXAtPm5leHQpOworCSAgICB0bXAtPm5leHQgPSBuZXc7CisJICB9CisKKwl3aGlsZSAoYXJnKQorCSAgeworCSAgICBzaXplX3QgbGVuOworCisJICAgIGNvbW1hID0gc3BsaXQoYXJnKTsKKwkgICAgbGVuID0gc3RybGVuKGFyZyk7CisKKwkgICAgaWYgKGxlbiA8IDUpCisJICAgICAgeworCQluZXctPnNldCA9IE5VTEw7CisJCWJyZWFrOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJc3RydWN0IGRoY3BfbmV0aWQgKm5ld3RhZyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaGNwX25ldGlkKSk7CisJCW5ld3RhZy0+bmV0ID0gb3B0X21hbGxvYyhsZW4gLSAzKTsKKwkJc3RyY3B5KG5ld3RhZy0+bmV0LCBhcmcrNCk7CisJCXVuaGlkZV9tZXRhcyhuZXd0YWctPm5ldCk7CisKKwkJaWYgKHN0cnN0cihhcmcsICJzZXQ6IikgPT0gYXJnKQorCQkgIHsKKwkJICAgIHN0cnVjdCBkaGNwX25ldGlkX2xpc3QgKm5ld2xpc3QgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGhjcF9uZXRpZF9saXN0KSk7CisJCSAgICBuZXdsaXN0LT5uZXh0ID0gbmV3LT5zZXQ7CisJCSAgICBuZXctPnNldCA9IG5ld2xpc3Q7CisJCSAgICBuZXdsaXN0LT5saXN0ID0gbmV3dGFnOworCQkgIH0KKwkJZWxzZSBpZiAoc3Ryc3RyKGFyZywgInRhZzoiKSA9PSBhcmcpCisJCSAgeworCQkgICAgbmV3dGFnLT5uZXh0ID0gbmV3LT50YWc7CisJCSAgICBuZXctPnRhZyA9IG5ld3RhZzsKKwkJICB9CisJCWVsc2UgCisJCSAgeworCQkgICAgbmV3LT5zZXQgPSBOVUxMOworCQkgICAgZnJlZShuZXd0YWcpOworCQkgICAgYnJlYWs7CisJCSAgfQorCSAgICAgIH0KKwkgICAgCisJICAgIGFyZyA9IGNvbW1hOworCSAgfQorCisJaWYgKCFuZXctPnNldCkKKwkgIHJldF9lcnIoXygiYmFkIHRhZy1pZiIpKTsKKwkgIAorCWJyZWFrOworICAgICAgfQorCisgICAgICAKKyAgICBjYXNlICdPJzogICAgICAgICAgIC8qIC0tZGhjcC1vcHRpb24gKi8KKyAgICBjYXNlIExPUFRfRk9SQ0U6ICAgIC8qIC0tZGhjcC1vcHRpb24tZm9yY2UgKi8KKyAgICBjYXNlIExPUFRfT1BUUzoKKyAgICBjYXNlIExPUFRfTUFUQ0g6ICAgIC8qIC0tZGhjcC1tYXRjaCAqLworICAgICAgcmV0dXJuIHBhcnNlX2RoY3Bfb3B0KGVycnN0ciwgYXJnLCAKKwkJCSAgICBvcHRpb24gPT0gTE9QVF9GT1JDRSA/IERIT1BUX0ZPUkNFIDogCisJCQkgICAgKG9wdGlvbiA9PSBMT1BUX01BVENIID8gREhPUFRfTUFUQ0ggOgorCQkJICAgICAob3B0aW9uID09IExPUFRfT1BUUyA/IERIT1BUX0JBTksgOiAwKSkpOworICAgICAKKyAgICBjYXNlICdNJzogLyogLS1kaGNwLWJvb3QgKi8KKyAgICAgIHsKKwlzdHJ1Y3QgZGhjcF9uZXRpZCAqaWQgPSBOVUxMOworCXdoaWxlIChpc190YWdfcHJlZml4KGFyZykpCisJICB7CisJICAgIHN0cnVjdCBkaGNwX25ldGlkICpuZXdpZCA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaGNwX25ldGlkKSk7CisJICAgIG5ld2lkLT5uZXh0ID0gaWQ7CisJICAgIGlkID0gbmV3aWQ7CisJICAgIGNvbW1hID0gc3BsaXQoYXJnKTsKKwkgICAgbmV3aWQtPm5ldCA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKzQpOworCSAgICBhcmcgPSBjb21tYTsKKwkgIH07CisJCisJaWYgKCFhcmcpCisJICByZXRfZXJyKGdlbl9lcnIpOworCWVsc2UgCisJICB7CisJICAgIGNoYXIgKmRoY3BfZmlsZSwgKmRoY3Bfc25hbWUgPSBOVUxMLCAqdGZ0cF9zbmFtZSA9IE5VTEw7CisJICAgIHN0cnVjdCBpbl9hZGRyIGRoY3BfbmV4dF9zZXJ2ZXI7CisJICAgIHN0cnVjdCBkaGNwX2Jvb3QgKm5ldzsKKwkgICAgY29tbWEgPSBzcGxpdChhcmcpOworCSAgICBkaGNwX2ZpbGUgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisJICAgIGRoY3BfbmV4dF9zZXJ2ZXIuc19hZGRyID0gMDsKKwkgICAgaWYgKGNvbW1hKQorCSAgICAgIHsKKwkJYXJnID0gY29tbWE7CisJCWNvbW1hID0gc3BsaXQoYXJnKTsKKwkJZGhjcF9zbmFtZSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKwkJaWYgKGNvbW1hKQorCQkgIHsKKwkJICAgIHVuaGlkZV9tZXRhcyhjb21tYSk7CisJCSAgICBpZiAoIShpbmV0X3B0b24oQUZfSU5FVCwgY29tbWEsICZkaGNwX25leHRfc2VydmVyKSA+IDApKQorCQkgICAgICB7CisJCQkvKgorCQkJICogVGhlIHVzZXIgbWF5IGhhdmUgc3BlY2lmaWVkIHRoZSB0ZnRwIGhvc3RuYW1lIGhlcmUuCisJCQkgKiBzYXZlIGl0IHNvIHRoYXQgaXQgY2FuIGJlIHJlc29sdmVkL2xvb2tlZCB1cCBkdXJpbmcKKwkJCSAqIGFjdHVhbCBkaGNwX3JlcGx5KCkuCisJCQkgKi8JCisJCQkKKwkJCXRmdHBfc25hbWUgPSBvcHRfc3RyaW5nX2FsbG9jKGNvbW1hKTsKKwkJCWRoY3BfbmV4dF9zZXJ2ZXIuc19hZGRyID0gMDsKKwkJICAgICAgfQorCQkgIH0KKwkgICAgICB9CisJICAgIAorCSAgICBuZXcgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGhjcF9ib290KSk7CisJICAgIG5ldy0+ZmlsZSA9IGRoY3BfZmlsZTsKKwkgICAgbmV3LT5zbmFtZSA9IGRoY3Bfc25hbWU7CisJICAgIG5ldy0+dGZ0cF9zbmFtZSA9IHRmdHBfc25hbWU7CisJICAgIG5ldy0+bmV4dF9zZXJ2ZXIgPSBkaGNwX25leHRfc2VydmVyOworCSAgICBuZXctPm5ldGlkID0gaWQ7CisJICAgIG5ldy0+bmV4dCA9IGRhZW1vbi0+Ym9vdF9jb25maWc7CisJICAgIGRhZW1vbi0+Ym9vdF9jb25maWcgPSBuZXc7CisJICB9CisgICAgICAKKwlicmVhazsKKyAgICAgIH0KKworICAgIGNhc2UgTE9QVF9QWEVfUFJPTVQ6ICAvKiAtLXB4ZS1wcm9tcHQgKi8KKyAgICAgICB7CisJIHN0cnVjdCBkaGNwX29wdCAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGRoY3Bfb3B0KSk7CisJIGludCB0aW1lb3V0OworCisJIG5ldy0+bmV0aWQgPSBOVUxMOworCSBuZXctPm9wdCA9IDEwOyAvKiBQWEVfTUVOVV9QUk9NUFQgKi8KKworCSB3aGlsZSAoaXNfdGFnX3ByZWZpeChhcmcpKQorCSAgeworCSAgICAgc3RydWN0IGRoY3BfbmV0aWQgKm5uID0gb3B0X21hbGxvYyhzaXplb2YgKHN0cnVjdCBkaGNwX25ldGlkKSk7CisJICAgICBjb21tYSA9IHNwbGl0KGFyZyk7CisJICAgICBubi0+bmV4dCA9IG5ldy0+bmV0aWQ7CisJICAgICBuZXctPm5ldGlkID0gbm47CisJICAgICBubi0+bmV0ID0gb3B0X3N0cmluZ19hbGxvYyhhcmcrNCk7CisJICAgICBhcmcgPSBjb21tYTsKKwkgICB9CisJIAorCSBpZiAoIWFyZykKKwkgICByZXRfZXJyKGdlbl9lcnIpOworCSBlbHNlCisJICAgeworCSAgICAgY29tbWEgPSBzcGxpdChhcmcpOworCSAgICAgdW5oaWRlX21ldGFzKGFyZyk7CisJICAgICBuZXctPmxlbiA9IHN0cmxlbihhcmcpICsgMTsKKwkgICAgIG5ldy0+dmFsID0gb3B0X21hbGxvYyhuZXctPmxlbik7CisJICAgICBtZW1jcHkobmV3LT52YWwgKyAxLCBhcmcsIG5ldy0+bGVuIC0gMSk7CisJICAgICAKKwkgICAgIG5ldy0+dS52ZW5kb3JfY2xhc3MgPSAodW5zaWduZWQgY2hhciAqKSJQWEVDbGllbnQiOworCSAgICAgbmV3LT5mbGFncyA9IERIT1BUX1ZFTkRPUjsKKwkgICAgIAorCSAgICAgaWYgKGNvbW1hICYmIGF0b2lfY2hlY2soY29tbWEsICZ0aW1lb3V0KSkKKwkgICAgICAgKihuZXctPnZhbCkgPSB0aW1lb3V0OworCSAgICAgZWxzZQorCSAgICAgICAqKG5ldy0+dmFsKSA9IDI1NTsKKworCSAgICAgbmV3LT5uZXh0ID0gZGFlbW9uLT5kaGNwX29wdHM7CisJICAgICBkYWVtb24tPmRoY3Bfb3B0cyA9IG5ldzsKKwkgICAgIGRhZW1vbi0+ZW5hYmxlX3B4ZSA9IDE7CisJICAgfQorCSAKKwkgYnJlYWs7CisgICAgICAgfQorICAgICAgIAorICAgIGNhc2UgTE9QVF9QWEVfU0VSVjogIC8qIC0tcHhlLXNlcnZpY2UgKi8KKyAgICAgICB7CisJIHN0cnVjdCBweGVfc2VydmljZSAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IHB4ZV9zZXJ2aWNlKSk7CisJIGNoYXIgKkNTQVtdID0geyAieDg2UEMiLCAiUEM5OCIsICJJQTY0X0VGSSIsICJBbHBoYSIsICJBcmNfeDg2IiwgIkludGVsX0xlYW5fQ2xpZW50IiwKKwkJCSAiSUEzMl9FRkkiLCAiQkNfRUZJIiwgIlhzY2FsZV9FRkkiLCAieDg2LTY0X0VGSSIsIE5VTEwgfTsgIAorCSBzdGF0aWMgaW50IGJvb3R0eXBlID0gMzI3Njg7CisJIAorCSBuZXctPm5ldGlkID0gTlVMTDsKKwkgbmV3LT5zbmFtZSA9IE5VTEw7CisJIG5ldy0+c2VydmVyLnNfYWRkciA9IDA7CisKKwkgd2hpbGUgKGlzX3RhZ19wcmVmaXgoYXJnKSkKKwkgICB7CisJICAgICBzdHJ1Y3QgZGhjcF9uZXRpZCAqbm4gPSBvcHRfbWFsbG9jKHNpemVvZiAoc3RydWN0IGRoY3BfbmV0aWQpKTsKKwkgICAgIGNvbW1hID0gc3BsaXQoYXJnKTsKKwkgICAgIG5uLT5uZXh0ID0gbmV3LT5uZXRpZDsKKwkgICAgIG5ldy0+bmV0aWQgPSBubjsKKwkgICAgIG5uLT5uZXQgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZys0KTsKKwkgICAgIGFyZyA9IGNvbW1hOworCSAgIH0KKyAgICAgICAKKwkgaWYgKGFyZyAmJiAoY29tbWEgPSBzcGxpdChhcmcpKSkKKwkgICB7CisJICAgICBmb3IgKGkgPSAwOyBDU0FbaV07IGkrKykKKwkgICAgICAgaWYgKHN0cmNhc2VjbXAoQ1NBW2ldLCBhcmcpID09IDApCisJCSBicmVhazsKKwkgICAgIAorCSAgICAgaWYgKENTQVtpXSB8fCBhdG9pX2NoZWNrKGFyZywgJmkpKQorCSAgICAgICB7CisJCSBhcmcgPSBjb21tYTsKKwkJIGNvbW1hID0gc3BsaXQoYXJnKTsKKwkJIAorCQkgbmV3LT5DU0EgPSBpOworCQkgbmV3LT5tZW51ID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworCQkgCisJCSBpZiAoIWNvbW1hKQorCQkgICB7CisJCSAgICAgbmV3LT50eXBlID0gMDsgLyogbG9jYWwgYm9vdCAqLworCQkgICAgIG5ldy0+YmFzZW5hbWUgPSBOVUxMOworCQkgICB9CisJCSBlbHNlCisJCSAgIHsKKwkJICAgICBhcmcgPSBjb21tYTsKKwkJICAgICBjb21tYSA9IHNwbGl0KGFyZyk7CisJCSAgICAgaWYgKGF0b2lfY2hlY2soYXJnLCAmaSkpCisJCSAgICAgICB7CisJCQkgbmV3LT50eXBlID0gaTsKKwkJCSBuZXctPmJhc2VuYW1lID0gTlVMTDsKKwkJICAgICAgIH0KKwkJICAgICBlbHNlCisJCSAgICAgICB7CisJCQkgbmV3LT50eXBlID0gYm9vdHR5cGUrKzsKKwkJCSBuZXctPmJhc2VuYW1lID0gb3B0X3N0cmluZ19hbGxvYyhhcmcpOworCQkgICAgICAgfQorCQkgICAgIAorCQkgICAgIGlmIChjb21tYSkKKwkJICAgICAgIHsKKwkJCSBpZiAoIWluZXRfcHRvbihBRl9JTkVULCBjb21tYSwgJm5ldy0+c2VydmVyKSkKKwkJCSAgIHsKKwkJCSAgICAgbmV3LT5zZXJ2ZXIuc19hZGRyID0gMDsKKwkJCSAgICAgbmV3LT5zbmFtZSA9IG9wdF9zdHJpbmdfYWxsb2MoY29tbWEpOworCQkJICAgfQorCQkgICAgICAgCisJCSAgICAgICB9CisJCSAgIH0KKwkJIAorCQkgLyogT3JkZXIgbWF0dGVycyAqLworCQkgbmV3LT5uZXh0ID0gTlVMTDsKKwkJIGlmICghZGFlbW9uLT5weGVfc2VydmljZXMpCisJCSAgIGRhZW1vbi0+cHhlX3NlcnZpY2VzID0gbmV3OyAKKwkJIGVsc2UKKwkJICAgeworCQkgICAgIHN0cnVjdCBweGVfc2VydmljZSAqczsKKwkJICAgICBmb3IgKHMgPSBkYWVtb24tPnB4ZV9zZXJ2aWNlczsgcy0+bmV4dDsgcyA9IHMtPm5leHQpOworCQkgICAgIHMtPm5leHQgPSBuZXc7CisJCSAgIH0KKwkJIAorCQkgZGFlbW9uLT5lbmFibGVfcHhlID0gMTsKKwkJIGJyZWFrOworCQkKKwkgICAgICAgfQorCSAgIH0KKwkgCisJIHJldF9lcnIoZ2VuX2Vycik7CisgICAgICAgfQorCSAKKyAgICBjYXNlICc0JzogIC8qIC0tZGhjcC1tYWMgKi8KKyAgICAgIHsKKwlpZiAoIShjb21tYSA9IHNwbGl0KGFyZykpKQorCSAgcmV0X2VycihnZW5fZXJyKTsKKwllbHNlCisJICB7CisJICAgIHN0cnVjdCBkaGNwX21hYyAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGRoY3BfbWFjKSk7CisJICAgIG5ldy0+bmV0aWQubmV0ID0gb3B0X3N0cmluZ19hbGxvYyhzZXRfcHJlZml4KGFyZykpOworCSAgICB1bmhpZGVfbWV0YXMoY29tbWEpOworCSAgICBuZXctPmh3YWRkcl9sZW4gPSBwYXJzZV9oZXgoY29tbWEsIG5ldy0+aHdhZGRyLCBESENQX0NIQUREUl9NQVgsICZuZXctPm1hc2ssICZuZXctPmh3YWRkcl90eXBlKTsKKwkgICAgaWYgKG5ldy0+aHdhZGRyX2xlbiA9PSAtMSkKKwkgICAgICByZXRfZXJyKGdlbl9lcnIpOworCSAgICBlbHNlCisJICAgICAgeworCQluZXctPm5leHQgPSBkYWVtb24tPmRoY3BfbWFjczsKKwkJZGFlbW9uLT5kaGNwX21hY3MgPSBuZXc7CisJICAgICAgfQorCSAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisKKyNpZmRlZiBPUFRJT042X1BSRUZJWF9DTEFTUyAKKyAgICBjYXNlIExPUFRfUFJFRl9DTFNTOiAvKiAtLWRoY3AtcHJlZml4LWNsYXNzICovCisgICAgICB7CisJc3RydWN0IHByZWZpeF9jbGFzcyAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IHByZWZpeF9jbGFzcykpOworCQorCWlmICghKGNvbW1hID0gc3BsaXQoYXJnKSkgfHwKKwkgICAgIWF0b2lfY2hlY2sxNihjb21tYSwgJm5ldy0+Y2xhc3MpKQorCSAgcmV0X2VycihnZW5fZXJyKTsKKwkKKwluZXctPnRhZy5uZXQgPSBvcHRfc3RyaW5nX2FsbG9jKHNldF9wcmVmaXgoYXJnKSk7CisJbmV3LT5uZXh0ID0gZGFlbW9uLT5wcmVmaXhfY2xhc3NlczsKKwlkYWVtb24tPnByZWZpeF9jbGFzc2VzID0gbmV3OworCQorCWJyZWFrOworICAgICAgfQorI2VuZGlmCisJCQkgICAgICAKKworICAgIGNhc2UgJ1UnOiAgICAgICAgICAgLyogLS1kaGNwLXZlbmRvcmNsYXNzICovCisgICAgY2FzZSAnaic6ICAgICAgICAgICAvKiAtLWRoY3AtdXNlcmNsYXNzICovCisgICAgY2FzZSBMT1BUX0NJUkNVSVQ6ICAvKiAtLWRoY3AtY2lyY3VpdGlkICovCisgICAgY2FzZSBMT1BUX1JFTU9URTogICAvKiAtLWRoY3AtcmVtb3RlaWQgKi8KKyAgICBjYXNlIExPUFRfU1VCU0NSOiAgIC8qIC0tZGhjcC1zdWJzY3JpZCAqLworICAgICAgeworCSB1bnNpZ25lZCBjaGFyICpwOworCSBpbnQgZGlnID0gMDsKKwkgc3RydWN0IGRoY3BfdmVuZG9yICpuZXcgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGhjcF92ZW5kb3IpKTsKKwkgCisJIGlmICghKGNvbW1hID0gc3BsaXQoYXJnKSkpCisJICAgcmV0X2VycihnZW5fZXJyKTsKKwkKKwkgbmV3LT5uZXRpZC5uZXQgPSBvcHRfc3RyaW5nX2FsbG9jKHNldF9wcmVmaXgoYXJnKSk7CisJIC8qIGNoZWNrIGZvciBoZXggc3RyaW5nIC0gbXVzdCBkaWdpdHMgbWF5IGluY2x1ZGUgOiBtdXN0IG5vdCBoYXZlIG5vdGhpbmcgZWxzZSwgCisJICAgIG9ubHkgYWxsb3dlZCBmb3IgYWdlbnQtb3B0aW9ucy4gKi8KKwkgCisJIGFyZyA9IGNvbW1hOworCSBpZiAoKGNvbW1hID0gc3BsaXQoYXJnKSkpCisJICAgeworCSAgICAgaWYgKG9wdGlvbiAgIT0gJ1UnIHx8IHN0cnN0cihhcmcsICJlbnRlcnByaXNlOiIpICE9IGFyZykKKwkgICAgICAgcmV0X2VycihnZW5fZXJyKTsKKwkgICAgIGVsc2UKKwkgICAgICAgbmV3LT5lbnRlcnByaXNlID0gYXRvaShhcmcrMTEpOworCSAgIH0KKwkgZWxzZQorCSAgIGNvbW1hID0gYXJnOworCSAKKwkgZm9yIChwID0gKHVuc2lnbmVkIGNoYXIgKiljb21tYTsgKnA7IHArKykKKwkgICBpZiAoaXN4ZGlnaXQoKnApKQorCSAgICAgZGlnID0gMTsKKwkgICBlbHNlIGlmICgqcCAhPSAnOicpCisJICAgICBicmVhazsKKwkgdW5oaWRlX21ldGFzKGNvbW1hKTsKKwkgaWYgKG9wdGlvbiA9PSAnVScgfHwgb3B0aW9uID09ICdqJyB8fCAqcCB8fCAhZGlnKQorCSAgIHsKKwkgICAgIG5ldy0+bGVuID0gc3RybGVuKGNvbW1hKTsgIAorCSAgICAgbmV3LT5kYXRhID0gb3B0X21hbGxvYyhuZXctPmxlbik7CisJICAgICBtZW1jcHkobmV3LT5kYXRhLCBjb21tYSwgbmV3LT5sZW4pOworCSAgIH0KKwkgZWxzZQorCSAgIHsKKwkgICAgIG5ldy0+bGVuID0gcGFyc2VfaGV4KGNvbW1hLCAodW5zaWduZWQgY2hhciAqKWNvbW1hLCBzdHJsZW4oY29tbWEpLCBOVUxMLCBOVUxMKTsKKwkgICAgIG5ldy0+ZGF0YSA9IG9wdF9tYWxsb2MobmV3LT5sZW4pOworCSAgICAgbWVtY3B5KG5ldy0+ZGF0YSwgY29tbWEsIG5ldy0+bGVuKTsKKwkgICB9CisJIAorCSBzd2l0Y2ggKG9wdGlvbikKKwkgICB7CisJICAgY2FzZSAnaic6CisJICAgICBuZXctPm1hdGNoX3R5cGUgPSBNQVRDSF9VU0VSOworCSAgICAgYnJlYWs7CisJICAgY2FzZSAnVSc6CisJICAgICBuZXctPm1hdGNoX3R5cGUgPSBNQVRDSF9WRU5ET1I7CisJICAgICBicmVhazsgCisJICAgY2FzZSBMT1BUX0NJUkNVSVQ6CisJICAgICBuZXctPm1hdGNoX3R5cGUgPSBNQVRDSF9DSVJDVUlUOworCSAgICAgYnJlYWs7CisJICAgY2FzZSBMT1BUX1JFTU9URToKKwkgICAgIG5ldy0+bWF0Y2hfdHlwZSA9IE1BVENIX1JFTU9URTsKKwkgICAgIGJyZWFrOworCSAgIGNhc2UgTE9QVF9TVUJTQ1I6CisJICAgICBuZXctPm1hdGNoX3R5cGUgPSBNQVRDSF9TVUJTQ1JJQkVSOworCSAgICAgYnJlYWs7CisJICAgfQorCSBuZXctPm5leHQgPSBkYWVtb24tPmRoY3BfdmVuZG9yczsKKwkgZGFlbW9uLT5kaGNwX3ZlbmRvcnMgPSBuZXc7CisKKwkgYnJlYWs7CisgICAgICB9CisgICAgICAKKyAgICBjYXNlIExPUFRfQUxUUE9SVDogICAvKiAtLWRoY3AtYWx0ZXJuYXRlLXBvcnQgKi8KKyAgICAgIGlmICghYXJnKQorCXsKKwkgIGRhZW1vbi0+ZGhjcF9zZXJ2ZXJfcG9ydCA9IERIQ1BfU0VSVkVSX0FMVFBPUlQ7CisJICBkYWVtb24tPmRoY3BfY2xpZW50X3BvcnQgPSBESENQX0NMSUVOVF9BTFRQT1JUOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBjb21tYSA9IHNwbGl0KGFyZyk7CisJICBpZiAoIWF0b2lfY2hlY2sxNihhcmcsICZkYWVtb24tPmRoY3Bfc2VydmVyX3BvcnQpIHx8IAorCSAgICAgIChjb21tYSAmJiAhYXRvaV9jaGVjazE2KGNvbW1hLCAmZGFlbW9uLT5kaGNwX2NsaWVudF9wb3J0KSkpCisJICAgIHJldF9lcnIoXygiaW52YWxpZCBwb3J0IG51bWJlciIpKTsKKwkgIGlmICghY29tbWEpCisJICAgIGRhZW1vbi0+ZGhjcF9jbGllbnRfcG9ydCA9IGRhZW1vbi0+ZGhjcF9zZXJ2ZXJfcG9ydCsxOyAKKwl9CisgICAgICBicmVhazsKKworICAgIGNhc2UgJ0onOiAgICAgICAgICAgIC8qIC0tZGhjcC1pZ25vcmUgKi8KKyAgICBjYXNlIExPUFRfTk9fTkFNRVM6ICAvKiAtLWRoY3AtaWdub3JlLW5hbWVzICovCisgICAgY2FzZSBMT1BUX0JST0FEQ0FTVDogLyogLS1kaGNwLWJyb2FkY2FzdCAqLworICAgIGNhc2UgJzMnOiAgICAgICAgICAgIC8qIC0tYm9vdHAtZHluYW1pYyAqLworICAgIGNhc2UgTE9QVF9HRU5fTkFNRVM6IC8qIC0tZGhjcC1nZW5lcmF0ZS1uYW1lcyAqLworICAgICAgeworCXN0cnVjdCBkaGNwX25ldGlkX2xpc3QgKm5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaGNwX25ldGlkX2xpc3QpKTsKKwlzdHJ1Y3QgZGhjcF9uZXRpZCAqbGlzdCA9IE5VTEw7CisJaWYgKG9wdGlvbiA9PSAnSicpCisJICB7CisJICAgIG5ldy0+bmV4dCA9IGRhZW1vbi0+ZGhjcF9pZ25vcmU7CisJICAgIGRhZW1vbi0+ZGhjcF9pZ25vcmUgPSBuZXc7CisJICB9CisJZWxzZSBpZiAob3B0aW9uID09IExPUFRfQlJPQURDQVNUKQorCSAgeworCSAgICBuZXctPm5leHQgPSBkYWVtb24tPmZvcmNlX2Jyb2FkY2FzdDsKKwkgICAgZGFlbW9uLT5mb3JjZV9icm9hZGNhc3QgPSBuZXc7CisJICB9CisJZWxzZSBpZiAob3B0aW9uID09ICczJykKKwkgIHsKKwkgICAgbmV3LT5uZXh0ID0gZGFlbW9uLT5ib290cF9keW5hbWljOworCSAgICBkYWVtb24tPmJvb3RwX2R5bmFtaWMgPSBuZXc7CisJICB9CisJZWxzZSBpZiAob3B0aW9uID09IExPUFRfR0VOX05BTUVTKQorCSAgeworCSAgICBuZXctPm5leHQgPSBkYWVtb24tPmRoY3BfZ2VuX25hbWVzOworCSAgICBkYWVtb24tPmRoY3BfZ2VuX25hbWVzID0gbmV3OworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgbmV3LT5uZXh0ID0gZGFlbW9uLT5kaGNwX2lnbm9yZV9uYW1lczsKKwkgICAgZGFlbW9uLT5kaGNwX2lnbm9yZV9uYW1lcyA9IG5ldzsKKwkgIH0KKwkKKwl3aGlsZSAoYXJnKSB7CisJICBzdHJ1Y3QgZGhjcF9uZXRpZCAqbWVtYmVyID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGRoY3BfbmV0aWQpKTsKKwkgIGNvbW1hID0gc3BsaXQoYXJnKTsKKwkgIG1lbWJlci0+bmV4dCA9IGxpc3Q7CisJICBsaXN0ID0gbWVtYmVyOworCSAgaWYgKGlzX3RhZ19wcmVmaXgoYXJnKSkKKwkgICAgbWVtYmVyLT5uZXQgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZys0KTsKKwkgIGVsc2UKKwkgICAgbWVtYmVyLT5uZXQgPSBvcHRfc3RyaW5nX2FsbG9jKGFyZyk7CisJICBhcmcgPSBjb21tYTsKKwl9CisJCisJbmV3LT5saXN0ID0gbGlzdDsKKwlicmVhazsKKyAgICAgIH0KKworICAgIGNhc2UgTE9QVF9QUk9YWTogLyogLS1kaGNwLXByb3h5ICovCisgICAgICBkYWVtb24tPm92ZXJyaWRlID0gMTsKKyAgICAgIHdoaWxlIChhcmcpIHsKKwlzdHJ1Y3QgYWRkcl9saXN0ICpuZXcgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWRkcl9saXN0KSk7CisJY29tbWEgPSBzcGxpdChhcmcpOworCWlmICghKGluZXRfcHRvbihBRl9JTkVULCBhcmcsICZuZXctPmFkZHIpID4gMCkpCisJICByZXRfZXJyKF8oImJhZCBkaGNwLXByb3h5IGFkZHJlc3MiKSk7CisJbmV3LT5uZXh0ID0gZGFlbW9uLT5vdmVycmlkZV9yZWxheXM7CisJZGFlbW9uLT5vdmVycmlkZV9yZWxheXMgPSBuZXc7CisJYXJnID0gY29tbWE7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgTE9QVF9SRUxBWTogLyogLS1kaGNwLXJlbGF5ICovCisgICAgICB7CisJc3RydWN0IGRoY3BfcmVsYXkgKm5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaGNwX3JlbGF5KSk7CisJY29tbWEgPSBzcGxpdChhcmcpOworCW5ldy0+aW50ZXJmYWNlID0gb3B0X3N0cmluZ19hbGxvYyhzcGxpdChjb21tYSkpOworCW5ldy0+aWZhY2VfaW5kZXggPSAwOworCWlmIChpbmV0X3B0b24oQUZfSU5FVCwgYXJnLCAmbmV3LT5sb2NhbCkgJiYgaW5ldF9wdG9uKEFGX0lORVQsIGNvbW1hLCAmbmV3LT5zZXJ2ZXIpKQorCSAgeworCSAgICBuZXctPm5leHQgPSBkYWVtb24tPnJlbGF5NDsKKwkgICAgZGFlbW9uLT5yZWxheTQgPSBuZXc7CisJICB9CisjaWZkZWYgSEFWRV9ESENQNgorCWVsc2UgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgYXJnLCAmbmV3LT5sb2NhbCkgJiYgaW5ldF9wdG9uKEFGX0lORVQ2LCBjb21tYSwgJm5ldy0+c2VydmVyKSkKKwkgIHsKKwkgICAgbmV3LT5uZXh0ID0gZGFlbW9uLT5yZWxheTY7CisJICAgIGRhZW1vbi0+cmVsYXk2ID0gbmV3OworCSAgfQorI2VuZGlmCisJZWxzZQorCSAgcmV0X2VycihfKCJCYWQgZGhjcC1yZWxheSIpKTsKKwkKKwlicmVhazsKKyAgICAgIH0KKworI2VuZGlmCisgICAgICAKKyNpZmRlZiBIQVZFX0RIQ1A2CisgICAgY2FzZSBMT1BUX1JBX1BBUkFNOiAvKiAtLXJhLXBhcmFtICovCisgICAgICBpZiAoKGNvbW1hID0gc3BsaXQoYXJnKSkpCisJeworCSAgc3RydWN0IHJhX2ludGVyZmFjZSAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IHJhX2ludGVyZmFjZSkpOworCSAgbmV3LT5saWZldGltZSA9IC0xOworCSAgbmV3LT5wcmlvID0gMDsKKwkgIG5ldy0+bmFtZSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKwkgIGlmIChzdHJjYXNlc3RyKGNvbW1hLCAiaGlnaCIpID09IGNvbW1hIHx8IHN0cmNhc2VzdHIoY29tbWEsICJsb3ciKSA9PSBjb21tYSkKKwkgICAgeworCSAgICAgIGlmICgqY29tbWEgPT0gJ2wnIHx8ICpjb21tYSA9PSAnTCcpCisJCW5ldy0+cHJpbyA9IDB4MTg7CisJICAgICAgZWxzZQorCQluZXctPnByaW8gPSAweDA4OworCSAgICAgIGNvbW1hID0gc3BsaXQoY29tbWEpOworCSAgICB9CisJICAgYXJnID0gc3BsaXQoY29tbWEpOworCSAgIGlmICghYXRvaV9jaGVjayhjb21tYSwgJm5ldy0+aW50ZXJ2YWwpIHx8IAorCSAgICAgIChhcmcgJiYgIWF0b2lfY2hlY2soYXJnLCAmbmV3LT5saWZldGltZSkpKQorCSAgICByZXRfZXJyKF8oImJhZCBSQS1wYXJhbXMiKSk7CisJICAKKwkgIG5ldy0+bmV4dCA9IGRhZW1vbi0+cmFfaW50ZXJmYWNlczsKKwkgIGRhZW1vbi0+cmFfaW50ZXJmYWNlcyA9IG5ldzsKKwl9CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGNhc2UgTE9QVF9EVUlEOiAvKiAtLWRoY3AtZHVpZCAqLworICAgICAgaWYgKCEoY29tbWEgPSBzcGxpdChhcmcpKSB8fCAhYXRvaV9jaGVjayhhcmcsIChpbnQgKikmZGFlbW9uLT5kdWlkX2VudGVycHJpc2UpKQorCXJldF9lcnIoXygiYmFkIERVSUQiKSk7CisgICAgICBlbHNlCisJeworCSAgZGFlbW9uLT5kdWlkX2NvbmZpZ19sZW4gPSBwYXJzZV9oZXgoY29tbWEsKHVuc2lnbmVkIGNoYXIgKiljb21tYSwgc3RybGVuKGNvbW1hKSwgTlVMTCwgTlVMTCk7CisJICBkYWVtb24tPmR1aWRfY29uZmlnID0gb3B0X21hbGxvYyhkYWVtb24tPmR1aWRfY29uZmlnX2xlbik7CisJICBtZW1jcHkoZGFlbW9uLT5kdWlkX2NvbmZpZywgY29tbWEsIGRhZW1vbi0+ZHVpZF9jb25maWdfbGVuKTsKKwl9CisgICAgICBicmVhazsKKyNlbmRpZgorCisgICAgY2FzZSAnVic6ICAvKiAtLWFsaWFzICovCisgICAgICB7CisJY2hhciAqZGFzaCwgKmFbM10gPSB7IE5VTEwsIE5VTEwsIE5VTEwgfTsKKwlpbnQgayA9IDA7CisJc3RydWN0IGRvY3RvciAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGRvY3RvcikpOworCW5ldy0+bmV4dCA9IGRhZW1vbi0+ZG9jdG9yczsKKwlkYWVtb24tPmRvY3RvcnMgPSBuZXc7CisJbmV3LT5tYXNrLnNfYWRkciA9IDB4ZmZmZmZmZmY7CisJbmV3LT5lbmQuc19hZGRyID0gMDsKKworCWlmICgoYVswXSA9IGFyZykpCisJICBmb3IgKGsgPSAxOyBrIDwgMzsgaysrKQorCSAgICB7CisJICAgICAgaWYgKCEoYVtrXSA9IHNwbGl0KGFbay0xXSkpKQorCQlicmVhazsKKwkgICAgICB1bmhpZGVfbWV0YXMoYVtrXSk7CisJICAgIH0KKwkKKwlkYXNoID0gc3BsaXRfY2hyKGFbMF0sICctJyk7CisKKwlpZiAoKGsgPCAyKSB8fCAKKwkgICAgKCEoaW5ldF9wdG9uKEFGX0lORVQsIGFbMF0sICZuZXctPmluKSA+IDApKSB8fAorCSAgICAoIShpbmV0X3B0b24oQUZfSU5FVCwgYVsxXSwgJm5ldy0+b3V0KSA+IDApKSkKKwkgIG9wdGlvbiA9ICc/JzsKKwkKKwlpZiAoayA9PSAzKQorCSAgaW5ldF9wdG9uKEFGX0lORVQsIGFbMl0sICZuZXctPm1hc2spOworCQorCWlmIChkYXNoICYmIAorCSAgICAoIShpbmV0X3B0b24oQUZfSU5FVCwgZGFzaCwgJm5ldy0+ZW5kKSA+IDApIHx8CisJICAgICAhaXNfc2FtZV9uZXQobmV3LT5pbiwgbmV3LT5lbmQsIG5ldy0+bWFzaykgfHwKKwkgICAgIG50b2hsKG5ldy0+aW4uc19hZGRyKSA+IG50b2hsKG5ldy0+ZW5kLnNfYWRkcikpKQorCSAgcmV0X2VycihfKCJpbnZhbGlkIGFsaWFzIHJhbmdlIikpOworCQorCWJyZWFrOworICAgICAgfQorICAgICAgCisgICAgY2FzZSBMT1BUX0lOVE5BTUU6ICAvKiAtLWludGVyZmFjZS1uYW1lICovCisgICAgICB7CisJc3RydWN0IGludGVyZmFjZV9uYW1lICpuZXcsICoqdXA7CisJY2hhciAqZG9tYWluID0gTlVMTDsKKworCWNvbW1hID0gc3BsaXQoYXJnKTsKKwkKKwlpZiAoIWNvbW1hIHx8ICEoZG9tYWluID0gY2Fub25pY2FsaXNlX29wdChhcmcpKSkKKwkgIHJldF9lcnIoXygiYmFkIGludGVyZmFjZSBuYW1lIikpOworCQorCW5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbnRlcmZhY2VfbmFtZSkpOworCW5ldy0+bmV4dCA9IE5VTEw7CisJbmV3LT5hZGRyID0gTlVMTDsKKwkKKwkvKiBBZGQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBmaXJzdCBuYW1lCisJICAgb2YgYW4gaW50ZXJmYWNlIGlzIHVzZWQgZm9yIFBUUiBsb29rdXBzLiAqLworCWZvciAodXAgPSAmZGFlbW9uLT5pbnRfbmFtZXM7ICp1cDsgdXAgPSAmKCgqdXApLT5uZXh0KSk7CisJKnVwID0gbmV3OworCW5ldy0+bmFtZSA9IGRvbWFpbjsKKwluZXctPmZhbWlseSA9IDA7CisJYXJnID0gc3BsaXRfY2hyKGNvbW1hLCAnLycpOworCWlmIChhcmcpCisJICB7CisJICAgIGlmIChzdHJjbXAoYXJnLCAiNCIpID09IDApCisJICAgICAgbmV3LT5mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfSVBWNgorCSAgICBlbHNlIGlmIChzdHJjbXAoYXJnLCAiNiIpID09IDApCisJICAgICAgbmV3LT5mYW1pbHkgPSBBRl9JTkVUNjsKKyNlbmRpZgorCSAgICBlbHNlCisJICAgICAgcmV0X2VycihnZW5fZXJyKTsKKwkgIH0gCisJbmV3LT5pbnRyID0gb3B0X3N0cmluZ19hbGxvYyhjb21tYSk7CisJYnJlYWs7CisgICAgICB9CisgICAgICAKKyAgICBjYXNlIExPUFRfQ05BTUU6IC8qIC0tY25hbWUgKi8KKyAgICAgIHsKKwlzdHJ1Y3QgY25hbWUgKm5ldzsKKwljaGFyICphbGlhczsKKwljaGFyICp0YXJnZXQ7CisKKwlpZiAoIShjb21tYSA9IHNwbGl0KGFyZykpKQorCSAgcmV0X2VycihnZW5fZXJyKTsKKwkKKwlhbGlhcyA9IGNhbm9uaWNhbGlzZV9vcHQoYXJnKTsKKwl0YXJnZXQgPSBjYW5vbmljYWxpc2Vfb3B0KGNvbW1hKTsKKwkgICAgCisJaWYgKCFhbGlhcyB8fCAhdGFyZ2V0KQorCSAgcmV0X2VycihfKCJiYWQgQ05BTUUiKSk7CisJZWxzZQorCSAgeworCSAgICBmb3IgKG5ldyA9IGRhZW1vbi0+Y25hbWVzOyBuZXc7IG5ldyA9IG5ldy0+bmV4dCkKKwkgICAgICBpZiAoaG9zdG5hbWVfaXNlcXVhbChuZXctPmFsaWFzLCBhcmcpKQorCQlyZXRfZXJyKF8oImR1cGxpY2F0ZSBDTkFNRSIpKTsKKwkgICAgbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGNuYW1lKSk7CisJICAgIG5ldy0+bmV4dCA9IGRhZW1vbi0+Y25hbWVzOworCSAgICBkYWVtb24tPmNuYW1lcyA9IG5ldzsKKwkgICAgbmV3LT5hbGlhcyA9IGFsaWFzOworCSAgICBuZXctPnRhcmdldCA9IHRhcmdldDsKKwkgIH0KKyAgICAgIAorCWJyZWFrOworICAgICAgfQorCisgICAgY2FzZSBMT1BUX1BUUjogIC8qIC0tcHRyLXJlY29yZCAqLworICAgICAgeworCXN0cnVjdCBwdHJfcmVjb3JkICpuZXc7CisJY2hhciAqZG9tLCAqdGFyZ2V0ID0gTlVMTDsKKworCWNvbW1hID0gc3BsaXQoYXJnKTsKKwkKKwlpZiAoIShkb20gPSBjYW5vbmljYWxpc2Vfb3B0KGFyZykpIHx8CisJICAgIChjb21tYSAmJiAhKHRhcmdldCA9IGNhbm9uaWNhbGlzZV9vcHQoY29tbWEpKSkpCisJICByZXRfZXJyKF8oImJhZCBQVFIgcmVjb3JkIikpOworCWVsc2UKKwkgIHsKKwkgICAgbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IHB0cl9yZWNvcmQpKTsKKwkgICAgbmV3LT5uZXh0ID0gZGFlbW9uLT5wdHI7CisJICAgIGRhZW1vbi0+cHRyID0gbmV3OworCSAgICBuZXctPm5hbWUgPSBkb207CisJICAgIG5ldy0+cHRyID0gdGFyZ2V0OworCSAgfQorCWJyZWFrOworICAgICAgfQorCisgICAgY2FzZSBMT1BUX05BUFRSOiAvKiAtLW5hcHRyLXJlY29yZCAqLworICAgICAgeworCWNoYXIgKmFbN10gPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKwlpbnQgayA9IDA7CisJc3RydWN0IG5hcHRyICpuZXc7CisJaW50IG9yZGVyLCBwcmVmOworCWNoYXIgKm5hbWUsICpyZXBsYWNlID0gTlVMTDsKKworCWlmICgoYVswXSA9IGFyZykpCisJICBmb3IgKGsgPSAxOyBrIDwgNzsgaysrKQorCSAgICBpZiAoIShhW2tdID0gc3BsaXQoYVtrLTFdKSkpCisJICAgICAgYnJlYWs7CisJCisJCisJaWYgKGsgPCA2IHx8IAorCSAgICAhKG5hbWUgPSBjYW5vbmljYWxpc2Vfb3B0KGFbMF0pKSB8fAorCSAgICAhYXRvaV9jaGVjazE2KGFbMV0sICZvcmRlcikgfHwgCisJICAgICFhdG9pX2NoZWNrMTYoYVsyXSwgJnByZWYpIHx8CisJICAgIChrID09IDcgJiYgIShyZXBsYWNlID0gY2Fub25pY2FsaXNlX29wdChhWzZdKSkpKQorCSAgcmV0X2VycihfKCJiYWQgTkFQVFIgcmVjb3JkIikpOworCWVsc2UKKwkgIHsKKwkgICAgbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IG5hcHRyKSk7CisJICAgIG5ldy0+bmV4dCA9IGRhZW1vbi0+bmFwdHI7CisJICAgIGRhZW1vbi0+bmFwdHIgPSBuZXc7CisJICAgIG5ldy0+bmFtZSA9IG5hbWU7CisJICAgIG5ldy0+ZmxhZ3MgPSBvcHRfc3RyaW5nX2FsbG9jKGFbM10pOworCSAgICBuZXctPnNlcnZpY2VzID0gb3B0X3N0cmluZ19hbGxvYyhhWzRdKTsKKwkgICAgbmV3LT5yZWdleHAgPSBvcHRfc3RyaW5nX2FsbG9jKGFbNV0pOworCSAgICBuZXctPnJlcGxhY2UgPSByZXBsYWNlOworCSAgICBuZXctPm9yZGVyID0gb3JkZXI7CisJICAgIG5ldy0+cHJlZiA9IHByZWY7CisJICB9CisJYnJlYWs7CisgICAgICB9CisKKyAgICBjYXNlIExPUFRfUlI6IC8qIGRucy1yciAqLworICAgICAgeworICAgICAgIAlzdHJ1Y3QgdHh0X3JlY29yZCAqbmV3OworCXNpemVfdCBsZW4gPSBsZW47CisJY2hhciAqZGF0YTsKKwlpbnQgdmFsOworCisJY29tbWEgPSBzcGxpdChhcmcpOworCWRhdGEgPSBzcGxpdChjb21tYSk7CisJCQorCW5ldyA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCB0eHRfcmVjb3JkKSk7CisJbmV3LT5uZXh0ID0gZGFlbW9uLT5ycjsKKwlkYWVtb24tPnJyID0gbmV3OworCQorCWlmICghYXRvaV9jaGVjayhjb21tYSwgJnZhbCkgfHwgCisJICAgICEobmV3LT5uYW1lID0gY2Fub25pY2FsaXNlX29wdChhcmcpKSB8fAorCSAgICAoZGF0YSAmJiAobGVuID0gcGFyc2VfaGV4KGRhdGEsICh1bnNpZ25lZCBjaGFyICopZGF0YSwgLTEsIE5VTEwsIE5VTEwpKSA9PSAtMVUpKQorCSAgcmV0X2VycihfKCJiYWQgUlIgcmVjb3JkIikpOworCSAgIAkKKwluZXctPmNsYXNzID0gdmFsOworCW5ldy0+bGVuID0gMDsKKwkKKwlpZiAoZGF0YSkKKwkgIHsKKwkgICAgbmV3LT50eHQ9b3B0X21hbGxvYyhsZW4pOworCSAgICBuZXctPmxlbiA9IGxlbjsKKwkgICAgbWVtY3B5KG5ldy0+dHh0LCBkYXRhLCBsZW4pOworCSAgfQorCQorCWJyZWFrOworICAgICAgfQorCisgICAgY2FzZSAnWSc6ICAvKiAtLXR4dC1yZWNvcmQgKi8KKyAgICAgIHsKKwlzdHJ1Y3QgdHh0X3JlY29yZCAqbmV3OworCXVuc2lnbmVkIGNoYXIgKnAsICpjbnQ7CisJc2l6ZV90IGxlbjsKKworCWNvbW1hID0gc3BsaXQoYXJnKTsKKwkJCisJbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IHR4dF9yZWNvcmQpKTsKKwluZXctPm5leHQgPSBkYWVtb24tPnR4dDsKKwlkYWVtb24tPnR4dCA9IG5ldzsKKwluZXctPmNsYXNzID0gQ19JTjsKKwluZXctPnN0YXQgPSAwOworCisJaWYgKCEobmV3LT5uYW1lID0gY2Fub25pY2FsaXNlX29wdChhcmcpKSkKKwkgIHJldF9lcnIoXygiYmFkIFRYVCByZWNvcmQiKSk7CisJCisJbGVuID0gY29tbWEgPyBzdHJsZW4oY29tbWEpIDogMDsKKwlsZW4gKz0gKGxlbi8yNTUpICsgMTsgLyogcm9vbSBmb3IgZXh0cmEgY291bnRzICovCisJbmV3LT50eHQgPSBwID0gb3B0X21hbGxvYyhsZW4pOworCisJY250ID0gcCsrOworCSpjbnQgPSAwOworCQorCXdoaWxlIChjb21tYSAmJiAqY29tbWEpCisJICB7CisJICAgIHVuc2lnbmVkIGNoYXIgYyA9ICh1bnNpZ25lZCBjaGFyKSpjb21tYSsrOworCisJICAgIGlmIChjID09ICcsJyB8fCAqY250ID09IDI1NSkKKwkgICAgICB7CisJCWlmIChjICE9ICcsJykKKwkJICBjb21tYS0tOworCQljbnQgPSBwKys7CisJCSpjbnQgPSAwOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJKnArKyA9IHVuaGlkZV9tZXRhKGMpOworCQkoKmNudCkrKzsKKwkgICAgICB9CisJICB9CisKKwluZXctPmxlbiA9IHAgLSBuZXctPnR4dDsKKworCWJyZWFrOworICAgICAgfQorICAgICAgCisgICAgY2FzZSAnVyc6ICAvKiAtLXNydi1ob3N0ICovCisgICAgICB7CisJaW50IHBvcnQgPSAxLCBwcmlvcml0eSA9IDAsIHdlaWdodCA9IDA7CisJY2hhciAqbmFtZSwgKnRhcmdldCA9IE5VTEw7CisJc3RydWN0IG14X3Nydl9yZWNvcmQgKm5ldzsKKwkKKwljb21tYSA9IHNwbGl0KGFyZyk7CisJCisJaWYgKCEobmFtZSA9IGNhbm9uaWNhbGlzZV9vcHQoYXJnKSkpCisJICByZXRfZXJyKF8oImJhZCBTUlYgcmVjb3JkIikpOworCQorCWlmIChjb21tYSkKKwkgIHsKKwkgICAgYXJnID0gY29tbWE7CisJICAgIGNvbW1hID0gc3BsaXQoYXJnKTsKKwkgICAgaWYgKCEodGFyZ2V0ID0gY2Fub25pY2FsaXNlX29wdChhcmcpKSkKKwkgICAgICByZXRfZXJyKF8oImJhZCBTUlYgdGFyZ2V0IikpOworCQkKKwkgICAgaWYgKGNvbW1hKQorCSAgICAgIHsKKwkJYXJnID0gY29tbWE7CisJCWNvbW1hID0gc3BsaXQoYXJnKTsKKwkJaWYgKCFhdG9pX2NoZWNrMTYoYXJnLCAmcG9ydCkpCisJCSAgcmV0X2VycihfKCJpbnZhbGlkIHBvcnQgbnVtYmVyIikpOworCQkKKwkJaWYgKGNvbW1hKQorCQkgIHsKKwkJICAgIGFyZyA9IGNvbW1hOworCQkgICAgY29tbWEgPSBzcGxpdChhcmcpOworCQkgICAgaWYgKCFhdG9pX2NoZWNrMTYoYXJnLCAmcHJpb3JpdHkpKQorCQkgICAgICByZXRfZXJyKF8oImludmFsaWQgcHJpb3JpdHkiKSk7CisJCQkKKwkJICAgIGlmIChjb21tYSkKKwkJICAgICAgeworCQkJYXJnID0gY29tbWE7CisJCQljb21tYSA9IHNwbGl0KGFyZyk7CisJCQlpZiAoIWF0b2lfY2hlY2sxNihhcmcsICZ3ZWlnaHQpKQorCQkJICByZXRfZXJyKF8oImludmFsaWQgd2VpZ2h0IikpOworCQkgICAgICB9CisJCSAgfQorCSAgICAgIH0KKwkgIH0KKwkKKwluZXcgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXhfc3J2X3JlY29yZCkpOworCW5ldy0+bmV4dCA9IGRhZW1vbi0+bXhuYW1lczsKKwlkYWVtb24tPm14bmFtZXMgPSBuZXc7CisJbmV3LT5pc3NydiA9IDE7CisJbmV3LT5uYW1lID0gbmFtZTsKKwluZXctPnRhcmdldCA9IHRhcmdldDsKKwluZXctPnNydnBvcnQgPSBwb3J0OworCW5ldy0+cHJpb3JpdHkgPSBwcmlvcml0eTsKKwluZXctPndlaWdodCA9IHdlaWdodDsKKwlicmVhazsKKyAgICAgIH0KKyAgICAgIAorICAgIGNhc2UgTE9QVF9IT1NUX1JFQzogLyogLS1ob3N0LXJlY29yZCAqLworICAgICAgeworCXN0cnVjdCBob3N0X3JlY29yZCAqbmV3ID0gb3B0X21hbGxvYyhzaXplb2Yoc3RydWN0IGhvc3RfcmVjb3JkKSk7CisJbWVtc2V0KG5ldywgMCwgc2l6ZW9mKHN0cnVjdCBob3N0X3JlY29yZCkpOworCQorCWlmICghYXJnIHx8ICEoY29tbWEgPSBzcGxpdChhcmcpKSkKKwkgIHJldF9lcnIoXygiQmFkIGhvc3QtcmVjb3JkIikpOworCQorCXdoaWxlIChhcmcpCisJICB7CisJICAgIHN0cnVjdCBhbGxfYWRkciBhZGRyOworCSAgICBpZiAoaW5ldF9wdG9uKEFGX0lORVQsIGFyZywgJmFkZHIpKQorCSAgICAgIG5ldy0+YWRkciA9IGFkZHIuYWRkci5hZGRyNDsKKyNpZmRlZiBIQVZFX0lQVjYKKwkgICAgZWxzZSBpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBhcmcsICZhZGRyKSkKKwkgICAgICBuZXctPmFkZHI2ID0gYWRkci5hZGRyLmFkZHI2OworI2VuZGlmCisJICAgIGVsc2UKKwkgICAgICB7CisJCWludCBub21lbTsKKwkJY2hhciAqY2Fub24gPSBjYW5vbmljYWxpc2UoYXJnLCAmbm9tZW0pOworCQlzdHJ1Y3QgbmFtZV9saXN0ICpubCA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBuYW1lX2xpc3QpKTsKKwkJaWYgKCFjYW5vbikKKwkJICByZXRfZXJyKF8oIkJhZCBuYW1lIGluIGhvc3QtcmVjb3JkIikpOworCisJCW5sLT5uYW1lID0gY2Fub247CisJCS8qIGtlZXAgb3JkZXIsIHNvIHRoYXQgUFRSIHJlY29yZCBnb2VzIHRvIGZpcnN0IG5hbWUgKi8KKwkJbmwtPm5leHQgPSBOVUxMOworCQlpZiAoIW5ldy0+bmFtZXMpCisJCSAgbmV3LT5uYW1lcyA9IG5sOworCQllbHNlCisJCSAgeyAKKwkJICAgIHN0cnVjdCBuYW1lX2xpc3QgKnRtcDsKKwkJICAgIGZvciAodG1wID0gbmV3LT5uYW1lczsgdG1wLT5uZXh0OyB0bXAgPSB0bXAtPm5leHQpOworCQkgICAgdG1wLT5uZXh0ID0gbmw7CisJCSAgfQorCSAgICAgIH0KKwkgICAgCisJICAgIGFyZyA9IGNvbW1hOworCSAgICBjb21tYSA9IHNwbGl0KGFyZyk7CisJICB9CisKKwkvKiBLZWVwIGxpc3Qgb3JkZXIgKi8KKwlpZiAoIWRhZW1vbi0+aG9zdF9yZWNvcmRzX3RhaWwpCisJICBkYWVtb24tPmhvc3RfcmVjb3JkcyA9IG5ldzsKKwllbHNlCisJICBkYWVtb24tPmhvc3RfcmVjb3Jkc190YWlsLT5uZXh0ID0gbmV3OworCW5ldy0+bmV4dCA9IE5VTEw7CisJZGFlbW9uLT5ob3N0X3JlY29yZHNfdGFpbCA9IG5ldzsKKwlicmVhazsKKyAgICAgIH0KKworI2lmZGVmIEhBVkVfRE5TU0VDCisgICAgY2FzZSBMT1BUX1RSVVNUX0FOQ0hPUjoKKyAgICAgIHsKKwlzdHJ1Y3QgZHNfY29uZmlnICpuZXcgPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZHNfY29uZmlnKSk7CisgICAgICAJY2hhciAqY3AsICpjcDEsICprZXloZXgsICpkaWdlc3QsICphbGdvID0gTlVMTDsKKwlpbnQgbGVuOworCQorCW5ldy0+Y2xhc3MgPSBDX0lOOworCisJaWYgKChjb21tYSA9IHNwbGl0KGFyZykpICYmIChhbGdvID0gc3BsaXQoY29tbWEpKSkKKwkgIHsKKwkgICAgaW50IGNsYXNzID0gMDsKKwkgICAgaWYgKHN0cmNtcChjb21tYSwgIklOIikgPT0gMCkKKwkgICAgICBjbGFzcyA9IENfSU47CisJICAgIGVsc2UgaWYgKHN0cmNtcChjb21tYSwgIkNIIikgPT0gMCkKKwkgICAgICBjbGFzcyA9IENfQ0hBT1M7CisJICAgIGVsc2UgaWYgKHN0cmNtcChjb21tYSwgIkhTIikgPT0gMCkKKwkgICAgICBjbGFzcyA9IENfSEVTSU9EOworCSAgICAKKwkgICAgaWYgKGNsYXNzICE9IDApCisJICAgICAgeworCQluZXctPmNsYXNzID0gY2xhc3M7CisJCWNvbW1hID0gYWxnbzsKKwkJYWxnbyA9IHNwbGl0KGNvbW1hKTsKKwkgICAgICB9CisJICB9CisJCSAgCisgICAgICAgCWlmICghY29tbWEgfHwgIWFsZ28gfHwgIShkaWdlc3QgPSBzcGxpdChhbGdvKSkgfHwgIShrZXloZXggPSBzcGxpdChkaWdlc3QpKSB8fAorCSAgICAhYXRvaV9jaGVjazE2KGNvbW1hLCAmbmV3LT5rZXl0YWcpIHx8IAorCSAgICAhYXRvaV9jaGVjazgoYWxnbywgJm5ldy0+YWxnbykgfHwKKwkgICAgIWF0b2lfY2hlY2s4KGRpZ2VzdCwgJm5ldy0+ZGlnZXN0X3R5cGUpIHx8CisJICAgICEobmV3LT5uYW1lID0gY2Fub25pY2FsaXNlX29wdChhcmcpKSkKKwkgIHJldF9lcnIoXygiYmFkIHRydXN0IGFuY2hvciIpKTsKKwkgICAgCisJLyogVXBwZXIgYm91bmQgb24gbGVuZ3RoICovCisJbGVuID0gKDIqc3RybGVuKGtleWhleCkpKzE7CisJbmV3LT5kaWdlc3QgPSBvcHRfbWFsbG9jKGxlbik7CisJdW5oaWRlX21ldGFzKGtleWhleCk7CisJLyogNDAzNDogIldoaXRlc3BhY2UgaXMgYWxsb3dlZCB3aXRoaW4gZGlnaXRzIiAqLworCWZvciAoY3AgPSBrZXloZXg7ICpjcDsgKQorCSAgaWYgKGlzc3BhY2UoKmNwKSkKKwkgICAgZm9yIChjcDEgPSBjcDsgKmNwMTsgY3AxKyspCisJICAgICAgKmNwMSA9ICooY3AxKzEpOworCSAgZWxzZQorCSAgICBjcCsrOworCWlmICgobmV3LT5kaWdlc3RsZW4gPSBwYXJzZV9oZXgoa2V5aGV4LCAodW5zaWduZWQgY2hhciAqKW5ldy0+ZGlnZXN0LCBsZW4sIE5VTEwsIE5VTEwpKSA9PSAtMSkKKwkgIHJldF9lcnIoXygiYmFkIEhFWCBpbiB0cnVzdCBhbmNob3IiKSk7CisJCisJbmV3LT5uZXh0ID0gZGFlbW9uLT5kczsKKwlkYWVtb24tPmRzID0gbmV3OworCQorCWJyZWFrOworICAgICAgfQorI2VuZGlmCisJCQorICAgIGRlZmF1bHQ6CisgICAgICByZXRfZXJyKF8oInVuc3VwcG9ydGVkIG9wdGlvbiAoY2hlY2sgdGhhdCBkbnNtYXNxIHdhcyBjb21waWxlZCB3aXRoIERIQ1AvVEZUUC9ETlNTRUMvREJ1cyBzdXBwb3J0KSIpKTsKKyAgICAgIAorICAgIH0KKyAgCisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCByZWFkX2ZpbGUoY2hhciAqZmlsZSwgRklMRSAqZiwgaW50IGhhcmRfb3B0KQkKK3sKKyAgdm9sYXRpbGUgaW50IGxpbmVubyA9IDA7CisgIGNoYXIgKmJ1ZmYgPSBkYWVtb24tPm5hbWVidWZmOworICAKKyAgd2hpbGUgKGZnZXRzKGJ1ZmYsIE1BWEROQU1FLCBmKSkKKyAgICB7CisgICAgICBpbnQgd2hpdGUsIGk7CisgICAgICB2b2xhdGlsZSBpbnQgb3B0aW9uID0gKGhhcmRfb3B0ID09IExPUFRfUkVWX1NFUlYpID8gMCA6IGhhcmRfb3B0OworICAgICAgY2hhciAqZXJybWVzcywgKnAsICphcmcgPSBOVUxMLCAqc3RhcnQ7CisgICAgICBzaXplX3QgbGVuOworCisgICAgICAvKiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGxvbmdqbXBzIGhlcmUgaWYgbWVtX3JlY292ZXIgPT0gMSAqLyAKKyAgICAgIGlmIChvcHRpb24gIT0gMCB8fCBoYXJkX29wdCA9PSBMT1BUX1JFVl9TRVJWKQorCXsKKwkgIGlmIChzZXRqbXAobWVtX2ptcCkpCisJICAgIGNvbnRpbnVlOworCSAgbWVtX3JlY292ZXIgPSAxOworCX0KKyAgICAgIAorICAgICAgbGluZW5vKys7CisgICAgICBlcnJtZXNzID0gTlVMTDsKKyAgICAgIAorICAgICAgLyogSW1wbGVtZW50IHF1b3RlcywgaW5zaWRlIHF1b3RlcyB3ZSBhbGxvdyBcXCBcIiBcbiBhbmQgXHQgCisJIG1ldGFjaGFyYWN0ZXJzIGdldCBoaWRkZW4gYWxzbyBzdHJpcCBjb21tZW50cyAqLworICAgICAgZm9yICh3aGl0ZSA9IDEsIHAgPSBidWZmOyAqcDsgcCsrKQorCXsKKwkgIGlmICgqcCA9PSAnIicpCisJICAgIHsKKwkgICAgICBtZW1tb3ZlKHAsIHArMSwgc3RybGVuKHArMSkrMSk7CisKKwkgICAgICBmb3IoOyAqcCAmJiAqcCAhPSAnIic7IHArKykKKwkJeworCQkgIGlmICgqcCA9PSAnXFwnICYmIHN0cmNocigiXCJ0bmViclxcIiwgcFsxXSkpCisJCSAgICB7CisJCSAgICAgIGlmIChwWzFdID09ICd0JykKKwkJCXBbMV0gPSAnXHQnOworCQkgICAgICBlbHNlIGlmIChwWzFdID09ICduJykKKwkJCXBbMV0gPSAnXG4nOworCQkgICAgICBlbHNlIGlmIChwWzFdID09ICdiJykKKwkJCXBbMV0gPSAnXGInOworCQkgICAgICBlbHNlIGlmIChwWzFdID09ICdyJykKKwkJCXBbMV0gPSAnXHInOworCQkgICAgICBlbHNlIGlmIChwWzFdID09ICdlJykgLyogZXNjYXBlICovCisJCQlwWzFdID0gJ1wwMzMnOworCQkgICAgICBtZW1tb3ZlKHAsIHArMSwgc3RybGVuKHArMSkrMSk7CisJCSAgICB9CisJCSAgKnAgPSBoaWRlX21ldGEoKnApOworCQl9CisKKwkgICAgICBpZiAoKnAgPT0gMCkgCisJCXsKKwkJICBlcnJtZXNzID0gXygibWlzc2luZyBcIiIpOworCQkgIGdvdG8gb29wczsgCisJCX0KKworCSAgICAgIG1lbW1vdmUocCwgcCsxLCBzdHJsZW4ocCsxKSsxKTsKKwkgICAgfQorCisJICBpZiAoaXNzcGFjZSgqcCkpCisJICAgIHsKKwkgICAgICAqcCA9ICcgJzsKKwkgICAgICB3aGl0ZSA9IDE7CisJICAgIH0KKwkgIGVsc2UgCisJICAgIHsKKwkgICAgICBpZiAod2hpdGUgJiYgKnAgPT0gJyMnKQorCQl7IAorCQkgICpwID0gMDsKKwkJICBicmVhazsKKwkJfQorCSAgICAgIHdoaXRlID0gMDsKKwkgICAgfSAKKwl9CisKKyAgICAgIAorICAgICAgLyogc3RyaXAgbGVhZGluZyBzcGFjZXMgKi8KKyAgICAgIGZvciAoc3RhcnQgPSBidWZmOyAqc3RhcnQgJiYgKnN0YXJ0ID09ICcgJzsgc3RhcnQrKyk7CisgICAgICAKKyAgICAgIC8qIHN0cmlwIHRyYWlsaW5nIHNwYWNlcyAqLworICAgICAgZm9yIChsZW4gPSBzdHJsZW4oc3RhcnQpOyAobGVuICE9IDApICYmIChzdGFydFtsZW4tMV0gPT0gJyAnKTsgbGVuLS0pOworICAgICAgCisgICAgICBpZiAobGVuID09IDApCisJY29udGludWU7IAorICAgICAgZWxzZQorCXN0YXJ0W2xlbl0gPSAwOworICAgICAgCisgICAgICBpZiAob3B0aW9uICE9IDApCisJYXJnID0gc3RhcnQ7CisgICAgICBlbHNlIGlmICgocD1zdHJjaHIoc3RhcnQsICc9JykpKQorCXsKKwkgIC8qIGFsbG93IHNwYWNlcyBhcm91bmQgIj0iICovCisJICBmb3IgKGFyZyA9IHArMTsgKmFyZyA9PSAnICc7IGFyZysrKTsKKwkgIGZvciAoOyBwID49IHN0YXJ0ICYmICgqcCA9PSAnICcgfHwgKnAgPT0gJz0nKTsgcC0tKQorCSAgICAqcCA9IDA7CisJfQorICAgICAgZWxzZQorCWFyZyA9IE5VTEw7CisKKyAgICAgIGlmIChvcHRpb24gPT0gMCkKKwl7CisJICBmb3IgKG9wdGlvbiA9IDAsIGkgPSAwOyBvcHRzW2ldLm5hbWU7IGkrKykgCisJICAgIGlmIChzdHJjbXAob3B0c1tpXS5uYW1lLCBzdGFydCkgPT0gMCkKKwkgICAgICB7CisJCW9wdGlvbiA9IG9wdHNbaV0udmFsOworCQlicmVhazsKKwkgICAgICB9CisJICAKKwkgIGlmICghb3B0aW9uKQorCSAgICBlcnJtZXNzID0gXygiYmFkIG9wdGlvbiIpOworCSAgZWxzZSBpZiAob3B0c1tpXS5oYXNfYXJnID09IDAgJiYgYXJnKQorCSAgICBlcnJtZXNzID0gXygiZXh0cmFuZW91cyBwYXJhbWV0ZXIiKTsKKwkgIGVsc2UgaWYgKG9wdHNbaV0uaGFzX2FyZyA9PSAxICYmICFhcmcpCisJICAgIGVycm1lc3MgPSBfKCJtaXNzaW5nIHBhcmFtZXRlciIpOworCSAgZWxzZSBpZiAoaGFyZF9vcHQgPT0gTE9QVF9SRVZfU0VSViAmJiBvcHRpb24gIT0gJ1MnICYmIG9wdGlvbiAhPSBMT1BUX1JFVl9TRVJWKQorCSAgICBlcnJtZXNzID0gXygiaWxsZWdhbCBvcHRpb24iKTsKKwl9CisKKyAgICBvb3BzOgorICAgICAgaWYgKGVycm1lc3MpCisJc3RyY3B5KGRhZW1vbi0+bmFtZWJ1ZmYsIGVycm1lc3MpOworCSAgCisgICAgICBpZiAoZXJybWVzcyB8fCAhb25lX29wdChvcHRpb24sIGFyZywgYnVmZiwgXygiZXJyb3IiKSwgMCwgaGFyZF9vcHQgPT0gTE9QVF9SRVZfU0VSVikpCisJeworCSAgc3ByaW50ZihkYWVtb24tPm5hbWVidWZmICsgc3RybGVuKGRhZW1vbi0+bmFtZWJ1ZmYpLCBfKCIgYXQgbGluZSAlZCBvZiAlcyIpLCBsaW5lbm8sIGZpbGUpOworCSAgaWYgKGhhcmRfb3B0ICE9IDApCisJICAgIG15X3N5c2xvZyhMT0dfRVJSLCAiJXMiLCBkYWVtb24tPm5hbWVidWZmKTsKKwkgIGVsc2UKKwkgICAgZGllKCIlcyIsIGRhZW1vbi0+bmFtZWJ1ZmYsIEVDX0JBRENPTkYpOworCX0KKyAgICB9CisKKyAgbWVtX3JlY292ZXIgPSAwOworICBmY2xvc2UoZik7Cit9CisKK3N0YXRpYyBpbnQgb25lX2ZpbGUoY2hhciAqZmlsZSwgaW50IGhhcmRfb3B0KQoreworICBGSUxFICpmOworICBpbnQgbm9maWxlX29rID0gMDsKKyAgc3RhdGljIGludCByZWFkX3N0ZGluID0gMDsKKyAgc3RhdGljIHN0cnVjdCBmaWxlcmVhZCB7CisgICAgZGV2X3QgZGV2OworICAgIGlub190IGlubzsKKyAgICBzdHJ1Y3QgZmlsZXJlYWQgKm5leHQ7CisgIH0gKmZpbGVzcmVhZCA9IE5VTEw7CisgIAorICBpZiAoaGFyZF9vcHQgPT0gJzcnKQorICAgIHsKKyAgICAgIC8qIGRlZmF1bHQgY29uZi1maWxlIHJlYWRpbmcgKi8KKyAgICAgIGhhcmRfb3B0ID0gMDsKKyAgICAgIG5vZmlsZV9vayA9IDE7CisgICAgfQorCisgIGlmIChoYXJkX29wdCA9PSAwICYmIHN0cmNtcChmaWxlLCAiLSIpID09IDApCisgICAgeworICAgICAgaWYgKHJlYWRfc3RkaW4gPT0gMSkKKwlyZXR1cm4gMTsKKyAgICAgIHJlYWRfc3RkaW4gPSAxOworICAgICAgZmlsZSA9ICJzdGRpbiI7CisgICAgICBmID0gc3RkaW47CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogaWdub3JlIHJlcGVhdGVkIGZpbGVzLiAqLworICAgICAgc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKyAgICAKKyAgICAgIGlmIChoYXJkX29wdCA9PSAwICYmIHN0YXQoZmlsZSwgJnN0YXRidWYpID09IDApCisJeworCSAgc3RydWN0IGZpbGVyZWFkICpyOworCSAgCisJICBmb3IgKHIgPSBmaWxlc3JlYWQ7IHI7IHIgPSByLT5uZXh0KQorCSAgICBpZiAoci0+ZGV2ID09IHN0YXRidWYuc3RfZGV2ICYmIHItPmlubyA9PSBzdGF0YnVmLnN0X2lubykKKwkgICAgICByZXR1cm4gMTsKKwkgIAorCSAgciA9IHNhZmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgZmlsZXJlYWQpKTsKKwkgIHItPm5leHQgPSBmaWxlc3JlYWQ7CisJICBmaWxlc3JlYWQgPSByOworCSAgci0+ZGV2ID0gc3RhdGJ1Zi5zdF9kZXY7CisJICByLT5pbm8gPSBzdGF0YnVmLnN0X2lubzsKKwl9CisgICAgICAKKyAgICAgIGlmICghKGYgPSBmb3BlbihmaWxlLCAiciIpKSkKKwl7ICAgCisJICBpZiAoZXJybm8gPT0gRU5PRU5UICYmIG5vZmlsZV9vaykKKwkgICAgcmV0dXJuIDE7IC8qIE5vIGNvbmZmaWxlLCBhbGwgZG9uZS4gKi8KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGNoYXIgKnN0ciA9IF8oImNhbm5vdCByZWFkICVzOiAlcyIpOworCSAgICAgIGlmIChoYXJkX29wdCAhPSAwKQorCQl7CisJCSAgbXlfc3lzbG9nKExPR19FUlIsIHN0ciwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJICByZXR1cm4gMDsKKwkJfQorCSAgICAgIGVsc2UKKwkJZGllKHN0ciwgZmlsZSwgRUNfRklMRSk7CisJICAgIH0KKwl9IAorICAgIH0KKyAgCisgIHJlYWRfZmlsZShmaWxlLCBmLCBoYXJkX29wdCk7CisgIHJldHVybiAxOworfQorCisvKiBleHBhbmQgYW55IG5hbWUgd2hpY2ggaXMgYSBkaXJlY3RvcnkgKi8KK3N0cnVjdCBob3N0c2ZpbGUgKmV4cGFuZF9maWxlbGlzdChzdHJ1Y3QgaG9zdHNmaWxlICpsaXN0KQoreworICB1bnNpZ25lZCBpbnQgaTsKKyAgc3RydWN0IGhvc3RzZmlsZSAqYWg7CisKKyAgLyogZmluZCBsYXJnZXN0IHVzZWQgaW5kZXggKi8KKyAgZm9yIChpID0gU1JDX0FILCBhaCA9IGxpc3Q7IGFoOyBhaCA9IGFoLT5uZXh0KQorICAgIHsKKyAgICAgIGlmIChpIDw9IGFoLT5pbmRleCkKKwlpID0gYWgtPmluZGV4ICsgMTsKKworICAgICAgaWYgKGFoLT5mbGFncyAmIEFIX0RJUikKKwlhaC0+ZmxhZ3MgfD0gQUhfSU5BQ1RJVkU7CisgICAgICBlbHNlCisJYWgtPmZsYWdzICY9IH5BSF9JTkFDVElWRTsKKyAgICB9CisKKyAgZm9yIChhaCA9IGxpc3Q7IGFoOyBhaCA9IGFoLT5uZXh0KQorICAgIGlmICghKGFoLT5mbGFncyAmIEFIX0lOQUNUSVZFKSkKKyAgICAgIHsKKwlzdHJ1Y3Qgc3RhdCBidWY7CisJaWYgKHN0YXQoYWgtPmZuYW1lLCAmYnVmKSAhPSAtMSAmJiBTX0lTRElSKGJ1Zi5zdF9tb2RlKSkKKwkgIHsKKwkgICAgRElSICpkaXJfc3RyZWFtOworCSAgICBzdHJ1Y3QgZGlyZW50ICplbnQ7CisJICAgIAorCSAgICAvKiBkb24ndCByZWFkIHRoaXMgYXMgYSBmaWxlICovCisJICAgIGFoLT5mbGFncyB8PSBBSF9JTkFDVElWRTsKKworCSAgICBpZiAoIShkaXJfc3RyZWFtID0gb3BlbmRpcihhaC0+Zm5hbWUpKSkKKwkgICAgICBteV9zeXNsb2coTE9HX0VSUiwgXygiY2Fubm90IGFjY2VzcyBkaXJlY3RvcnkgJXM6ICVzIiksIAorCQkJYWgtPmZuYW1lLCBzdHJlcnJvcihlcnJubykpOworCSAgICBlbHNlCisJICAgICAgeworCQl3aGlsZSAoKGVudCA9IHJlYWRkaXIoZGlyX3N0cmVhbSkpKQorCQkgIHsKKwkJICAgIHNpemVfdCBsZW5kaXIgPSBzdHJsZW4oYWgtPmZuYW1lKTsKKwkJICAgIHNpemVfdCBsZW5maWxlID0gc3RybGVuKGVudC0+ZF9uYW1lKTsKKwkJICAgIHN0cnVjdCBob3N0c2ZpbGUgKmFoMTsKKwkJICAgIGNoYXIgKnBhdGg7CisJCSAgICAKKwkJICAgIC8qIGlnbm9yZSBlbWFjcyBiYWNrdXBzIGFuZCBkb3RmaWxlcyAqLworCQkgICAgaWYgKGxlbmZpbGUgPT0gMCB8fCAKKwkJCWVudC0+ZF9uYW1lW2xlbmZpbGUgLSAxXSA9PSAnficgfHwKKwkJCShlbnQtPmRfbmFtZVswXSA9PSAnIycgJiYgZW50LT5kX25hbWVbbGVuZmlsZSAtIDFdID09ICcjJykgfHwKKwkJCWVudC0+ZF9uYW1lWzBdID09ICcuJykKKwkJICAgICAgY29udGludWU7CisJCSAgICAKKwkJICAgIC8qIHNlZSBpZiB3ZSBoYXZlIGFuIGV4aXN0aW5nIHJlY29yZC4KKwkJICAgICAgIGRpciBpcyBhaC0+Zm5hbWUgCisJCSAgICAgICBmaWxlIGlzIGVudC0+ZF9uYW1lCisJCSAgICAgICBwYXRoIHRvIG1hdGNoIGlzIGFoMS0+Zm5hbWUgKi8KKwkJICAgIAorCQkgICAgZm9yIChhaDEgPSBsaXN0OyBhaDE7IGFoMSA9IGFoMS0+bmV4dCkKKwkJICAgICAgeworCQkJaWYgKGxlbmRpciA8IHN0cmxlbihhaDEtPmZuYW1lKSAmJgorCQkJICAgIHN0cnN0cihhaDEtPmZuYW1lLCBhaC0+Zm5hbWUpID09IGFoMS0+Zm5hbWUgJiYKKwkJCSAgICBhaDEtPmZuYW1lW2xlbmRpcl0gPT0gJy8nICYmCisJCQkgICAgc3RyY21wKGFoMS0+Zm5hbWUgKyBsZW5kaXIgKyAxLCBlbnQtPmRfbmFtZSkgPT0gMCkKKwkJCSAgeworCQkJICAgIGFoMS0+ZmxhZ3MgJj0gfkFIX0lOQUNUSVZFOworCQkJICAgIGJyZWFrOworCQkJICB9CisJCSAgICAgIH0KKwkJICAgIAorCQkgICAgLyogbWFrZSBuZXcgcmVjb3JkICovCisJCSAgICBpZiAoIWFoMSkKKwkJICAgICAgeworCQkJaWYgKCEoYWgxID0gd2hpbmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgaG9zdHNmaWxlKSkpKQorCQkJICBjb250aW51ZTsKKwkJCQorCQkJaWYgKCEocGF0aCA9IHdoaW5lX21hbGxvYyhsZW5kaXIgKyBsZW5maWxlICsgMikpKQorCQkJICB7CisJCQkgICAgZnJlZShhaDEpOworCQkJICAgIGNvbnRpbnVlOworCQkJICB9CisJCSAgICAgIAkKKwkJCXN0cmNweShwYXRoLCBhaC0+Zm5hbWUpOworCQkJc3RyY2F0KHBhdGgsICIvIik7CisJCQlzdHJjYXQocGF0aCwgZW50LT5kX25hbWUpOworCQkJYWgxLT5mbmFtZSA9IHBhdGg7CisJCQlhaDEtPmluZGV4ID0gaSsrOworCQkJYWgxLT5mbGFncyA9IEFIX0RJUjsKKwkJCWFoMS0+bmV4dCA9IGxpc3Q7CisJCQlsaXN0ID0gYWgxOworCQkgICAgICB9CisJCSAgICAKKwkJICAgIC8qIGluYWN0aXZhdGUgcmVjb3JkIGlmIG5vdCByZWd1bGFyIGZpbGUgKi8KKwkJICAgIGlmICgoYWgxLT5mbGFncyAmIEFIX0RJUikgJiYgc3RhdChhaDEtPmZuYW1lLCAmYnVmKSAhPSAtMSAmJiAhU19JU1JFRyhidWYuc3RfbW9kZSkpCisJCSAgICAgIGFoMS0+ZmxhZ3MgfD0gQUhfSU5BQ1RJVkU7IAorCQkgICAgCisJCSAgfQorCQljbG9zZWRpcihkaXJfc3RyZWFtKTsKKwkgICAgICB9CisJICB9CisgICAgICB9CisgIAorICByZXR1cm4gbGlzdDsKK30KKwordm9pZCByZWFkX3NlcnZlcnNfZmlsZSh2b2lkKQoreworICBGSUxFICpmOworCisgIGlmICghKGYgPSBmb3BlbihkYWVtb24tPnNlcnZlcnNfZmlsZSwgInIiKSkpCisgICAgeworICAgICAgIG15X3N5c2xvZyhMT0dfRVJSLCBfKCJjYW5ub3QgcmVhZCAlczogJXMiKSwgZGFlbW9uLT5zZXJ2ZXJzX2ZpbGUsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgcmV0dXJuOworICAgIH0KKyAgCisgIG1hcmtfc2VydmVycyhTRVJWX0ZST01fRklMRSk7CisgIGNsZWFudXBfc2VydmVycygpOworICAKKyAgcmVhZF9maWxlKGRhZW1vbi0+c2VydmVyc19maWxlLCBmLCBMT1BUX1JFVl9TRVJWKTsKK30KKyAKKworI2lmZGVmIEhBVkVfREhDUAordm9pZCByZXJlYWRfZGhjcCh2b2lkKQoreworICBzdHJ1Y3QgaG9zdHNmaWxlICpoZjsKKworICBpZiAoZGFlbW9uLT5kaGNwX2hvc3RzX2ZpbGUpCisgICAgeworICAgICAgc3RydWN0IGRoY3BfY29uZmlnICpjb25maWdzLCAqY3AsICoqdXA7CisgIAorICAgICAgLyogcmVtb3ZlIGV4aXN0aW5nLi4uICovCisgICAgICBmb3IgKHVwID0gJmRhZW1vbi0+ZGhjcF9jb25mLCBjb25maWdzID0gZGFlbW9uLT5kaGNwX2NvbmY7IGNvbmZpZ3M7IGNvbmZpZ3MgPSBjcCkKKwl7CisJICBjcCA9IGNvbmZpZ3MtPm5leHQ7CisJICAKKwkgIGlmIChjb25maWdzLT5mbGFncyAmIENPTkZJR19CQU5LKQorCSAgICB7CisJICAgICAgc3RydWN0IGh3YWRkcl9jb25maWcgKm1hYywgKnRtcDsKKwkgICAgICBzdHJ1Y3QgZGhjcF9uZXRpZF9saXN0ICpsaXN0LCAqdG1wbGlzdDsKKwkgICAgICAKKwkgICAgICBmb3IgKG1hYyA9IGNvbmZpZ3MtPmh3YWRkcjsgbWFjOyBtYWMgPSB0bXApCisJCXsKKwkJICB0bXAgPSBtYWMtPm5leHQ7CisJCSAgZnJlZShtYWMpOworCQl9CisKKwkgICAgICBpZiAoY29uZmlncy0+ZmxhZ3MgJiBDT05GSUdfQ0xJRCkKKwkJZnJlZShjb25maWdzLT5jbGlkKTsKKworCSAgICAgIGZvciAobGlzdCA9IGNvbmZpZ3MtPm5ldGlkOyBsaXN0OyBsaXN0ID0gdG1wbGlzdCkKKwkJeworCQkgIGZyZWUobGlzdC0+bGlzdCk7CisJCSAgdG1wbGlzdCA9IGxpc3QtPm5leHQ7CisJCSAgZnJlZShsaXN0KTsKKwkJfQorCSAgICAgIAorCSAgICAgIGlmIChjb25maWdzLT5mbGFncyAmIENPTkZJR19OQU1FKQorCQlmcmVlKGNvbmZpZ3MtPmhvc3RuYW1lKTsKKwkgICAgICAKKwkgICAgICAqdXAgPSBjb25maWdzLT5uZXh0OworCSAgICAgIGZyZWUoY29uZmlncyk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgdXAgPSAmY29uZmlncy0+bmV4dDsKKwl9CisgICAgICAKKyAgICAgIGRhZW1vbi0+ZGhjcF9ob3N0c19maWxlID0gZXhwYW5kX2ZpbGVsaXN0KGRhZW1vbi0+ZGhjcF9ob3N0c19maWxlKTsKKyAgICAgIGZvciAoaGYgPSBkYWVtb24tPmRoY3BfaG9zdHNfZmlsZTsgaGY7IGhmID0gaGYtPm5leHQpCisJIGlmICghKGhmLT5mbGFncyAmIEFIX0lOQUNUSVZFKSkKKwkgICB7CisJICAgICBpZiAob25lX2ZpbGUoaGYtPmZuYW1lLCBMT1BUX0JBTkspKSAgCisJICAgICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sIF8oInJlYWQgJXMiKSwgaGYtPmZuYW1lKTsKKwkgICB9CisgICAgfQorCisgIGlmIChkYWVtb24tPmRoY3Bfb3B0c19maWxlKQorICAgIHsKKyAgICAgIHN0cnVjdCBkaGNwX29wdCAqb3B0cywgKmNwLCAqKnVwOworICAgICAgc3RydWN0IGRoY3BfbmV0aWQgKmlkLCAqbmV4dDsKKworICAgICAgZm9yICh1cCA9ICZkYWVtb24tPmRoY3Bfb3B0cywgb3B0cyA9IGRhZW1vbi0+ZGhjcF9vcHRzOyBvcHRzOyBvcHRzID0gY3ApCisJeworCSAgY3AgPSBvcHRzLT5uZXh0OworCSAgCisJICBpZiAob3B0cy0+ZmxhZ3MgJiBESE9QVF9CQU5LKQorCSAgICB7CisJICAgICAgaWYgKChvcHRzLT5mbGFncyAmIERIT1BUX1ZFTkRPUikpCisJCWZyZWUob3B0cy0+dS52ZW5kb3JfY2xhc3MpOworCSAgICAgIGZyZWUob3B0cy0+dmFsKTsKKwkgICAgICBmb3IgKGlkID0gb3B0cy0+bmV0aWQ7IGlkOyBpZCA9IG5leHQpCisJCXsKKwkJICBuZXh0ID0gaWQtPm5leHQ7CisJCSAgZnJlZShpZC0+bmV0KTsKKwkJICBmcmVlKGlkKTsKKwkJfQorCSAgICAgICp1cCA9IG9wdHMtPm5leHQ7CisJICAgICAgZnJlZShvcHRzKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB1cCA9ICZvcHRzLT5uZXh0OworCX0KKyAgICAgIAorICAgICAgZGFlbW9uLT5kaGNwX29wdHNfZmlsZSA9IGV4cGFuZF9maWxlbGlzdChkYWVtb24tPmRoY3Bfb3B0c19maWxlKTsKKyAgICAgIGZvciAoaGYgPSBkYWVtb24tPmRoY3Bfb3B0c19maWxlOyBoZjsgaGYgPSBoZi0+bmV4dCkKKwlpZiAoIShoZi0+ZmxhZ3MgJiBBSF9JTkFDVElWRSkpCisJICB7CisJICAgIGlmIChvbmVfZmlsZShoZi0+Zm5hbWUsIExPUFRfT1BUUykpICAKKwkgICAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCJyZWFkICVzIiksIGhmLT5mbmFtZSk7CisJICB9CisgICAgfQorfQorI2VuZGlmCisgICAgCit2b2lkIHJlYWRfb3B0cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKmNvbXBpbGVfb3B0cykKK3sKKyAgY2hhciAqYnVmZiA9IG9wdF9tYWxsb2MoTUFYRE5BTUUpOworICBpbnQgb3B0aW9uLCBjb25mZmlsZV9vcHQgPSAnNycsIHRlc3Rtb2RlID0gMDsKKyAgY2hhciAqYXJnLCAqY29uZmZpbGUgPSBDT05GRklMRTsKKyAgICAgIAorICBvcHRlcnIgPSAwOworCisgIGRhZW1vbiA9IG9wdF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkYWVtb24pKTsKKyAgbWVtc2V0KGRhZW1vbiwgMCwgc2l6ZW9mKHN0cnVjdCBkYWVtb24pKTsKKyAgZGFlbW9uLT5uYW1lYnVmZiA9IGJ1ZmY7CisKKyAgLyogU2V0IGRlZmF1bHRzIC0gZXZlcnl0aGluZyBlbHNlIGlzIHplcm8gb3IgTlVMTCAqLworICBkYWVtb24tPmNhY2hlc2l6ZSA9IENBQ0hFU0laOworICBkYWVtb24tPmZ0YWJzaXplID0gRlRBQlNJWjsKKyAgZGFlbW9uLT5wb3J0ID0gTkFNRVNFUlZFUl9QT1JUOworICBkYWVtb24tPmRoY3BfY2xpZW50X3BvcnQgPSBESENQX0NMSUVOVF9QT1JUOworICBkYWVtb24tPmRoY3Bfc2VydmVyX3BvcnQgPSBESENQX1NFUlZFUl9QT1JUOworICBkYWVtb24tPmRlZmF1bHRfcmVzb2x2LmlzX2RlZmF1bHQgPSAxOworICBkYWVtb24tPmRlZmF1bHRfcmVzb2x2Lm5hbWUgPSBSRVNPTFZGSUxFOworICBkYWVtb24tPnJlc29sdl9maWxlcyA9ICZkYWVtb24tPmRlZmF1bHRfcmVzb2x2OworICBkYWVtb24tPnVzZXJuYW1lID0gQ0hVU0VSOworICBkYWVtb24tPnJ1bmZpbGUgPSAgUlVORklMRTsKKyAgZGFlbW9uLT5kaGNwX21heCA9IE1BWExFQVNFUzsKKyAgZGFlbW9uLT50ZnRwX21heCA9IFRGVFBfTUFYX0NPTk5FQ1RJT05TOworICBkYWVtb24tPmVkbnNfcGt0c3ogPSBFRE5TX1BLVFNaOworICBkYWVtb24tPmxvZ19mYWMgPSAtMTsKKyAgZGFlbW9uLT5hdXRoX3R0bCA9IEFVVEhfVFRMOyAKKyAgZGFlbW9uLT5zb2FfcmVmcmVzaCA9IFNPQV9SRUZSRVNIOworICBkYWVtb24tPnNvYV9yZXRyeSA9IFNPQV9SRVRSWTsKKyAgZGFlbW9uLT5zb2FfZXhwaXJ5ID0gU09BX0VYUElSWTsKKworICBhZGRfdHh0KCJ2ZXJzaW9uLmJpbmQiLCAiZG5zbWFzcS0iIFZFUlNJT04sIDAgKTsKKyAgYWRkX3R4dCgiYXV0aG9ycy5iaW5kIiwgIlNpbW9uIEtlbGxleSIsIDApOworICBhZGRfdHh0KCJjb3B5cmlnaHQuYmluZCIsIENPUFlSSUdIVCwgMCk7CisgIGFkZF90eHQoImNhY2hlc2l6ZS5iaW5kIiwgTlVMTCwgVFhUX1NUQVRfQ0FDSEVTSVpFKTsKKyAgYWRkX3R4dCgiaW5zZXJ0aW9ucy5iaW5kIiwgTlVMTCwgVFhUX1NUQVRfSU5TRVJUUyk7CisgIGFkZF90eHQoImV2aWN0aW9ucy5iaW5kIiwgTlVMTCwgVFhUX1NUQVRfRVZJQ1RJT05TKTsKKyAgYWRkX3R4dCgibWlzc2VzLmJpbmQiLCBOVUxMLCBUWFRfU1RBVF9NSVNTRVMpOworICBhZGRfdHh0KCJoaXRzLmJpbmQiLCBOVUxMLCBUWFRfU1RBVF9ISVRTKTsKKyNpZmRlZiBIQVZFX0FVVEgKKyAgYWRkX3R4dCgiYXV0aC5iaW5kIiwgTlVMTCwgVFhUX1NUQVRfQVVUSCk7CisjZW5kaWYKKyAgYWRkX3R4dCgic2VydmVycy5iaW5kIiwgTlVMTCwgVFhUX1NUQVRfU0VSVkVSUyk7CisKKyAgd2hpbGUgKDEpIAorICAgIHsKKyNpZmRlZiBIQVZFX0dFVE9QVF9MT05HCisgICAgICBvcHRpb24gPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBPUFRTVFJJTkcsIG9wdHMsIE5VTEwpOworI2Vsc2UKKyAgICAgIG9wdGlvbiA9IGdldG9wdChhcmdjLCBhcmd2LCBPUFRTVFJJTkcpOworI2VuZGlmCisgICAgICAKKyAgICAgIGlmIChvcHRpb24gPT0gLTEpCisJeworCSAgZm9yICg7IG9wdGluZCA8IGFyZ2M7IG9wdGluZCsrKQorCSAgICB7CisJICAgICAgdW5zaWduZWQgY2hhciAqYyA9ICh1bnNpZ25lZCBjaGFyICopYXJndltvcHRpbmRdOworCSAgICAgIGZvciAoOyAqYyAhPSAwOyBjKyspCisJCWlmICghaXNzcGFjZSgqYykpCisJCSAgZGllKF8oImp1bmsgZm91bmQgaW4gY29tbWFuZCBsaW5lIiksIE5VTEwsIEVDX0JBRENPTkYpOworCSAgICB9CisJICBicmVhazsKKwl9CisKKyAgICAgIC8qIENvcHkgb3B0YXJnIHNvIHRoYXQgYXJndiBkb2Vzbid0IGdldCBjaGFuZ2VkICovCisgICAgICBpZiAob3B0YXJnKQorCXsKKwkgIHN0cm5jcHkoYnVmZiwgb3B0YXJnLCBNQVhETkFNRSk7CisJICBidWZmW01BWEROQU1FLTFdID0gMDsKKwkgIGFyZyA9IGJ1ZmY7CisJfQorICAgICAgZWxzZQorCWFyZyA9IE5VTEw7CisgICAgICAKKyAgICAgIC8qIGNvbW1hbmQtbGluZSBvbmx5IHN0dWZmICovCisgICAgICBpZiAob3B0aW9uID09IExPUFRfVEVTVCkKKwl0ZXN0bW9kZSA9IDE7CisgICAgICBlbHNlIGlmIChvcHRpb24gPT0gJ3cnKQorCXsKKyNpZmRlZiBIQVZFX0RIQ1AKKwkgIGlmIChhcmdjID09IDMgJiYgc3RyY21wKGFyZ3ZbMl0sICJkaGNwIikgPT0gMCkKKwkgICAgZGlzcGxheV9vcHRzKCk7CisjaWZkZWYgSEFWRV9ESENQNgorCSAgZWxzZSBpZiAoYXJnYyA9PSAzICYmIHN0cmNtcChhcmd2WzJdLCAiZGhjcDYiKSA9PSAwKQorCSAgICBkaXNwbGF5X29wdHM2KCk7CisjZW5kaWYKKwkgIGVsc2UKKyNlbmRpZgorCSAgICBkb191c2FnZSgpOworCisJICBleGl0KDApOworCX0KKyAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PSAndicpCisJeworCSAgcHJpbnRmKF8oIkRuc21hc3EgdmVyc2lvbiAlcyAgJXNcbiIpLCBWRVJTSU9OLCBDT1BZUklHSFQpOworCSAgcHJpbnRmKF8oIkNvbXBpbGUgdGltZSBvcHRpb25zOiAlc1xuXG4iKSwgY29tcGlsZV9vcHRzKTsgCisJICBwcmludGYoXygiVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuXG4iKSk7CisJICBwcmludGYoXygiRG5zbWFzcSBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdFxuIikpOworCSAgcHJpbnRmKF8oInVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiBvciAzLlxuIikpOworICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PSAnQycpCisJeworCSAgY29uZmZpbGVfb3B0ID0gMDsgLyogZmlsZSBtdXN0IGV4aXN0ICovCisJICBjb25mZmlsZSA9IG9wdF9zdHJpbmdfYWxsb2MoYXJnKTsKKwl9CisgICAgICBlbHNlCisJeworI2lmZGVmIEhBVkVfR0VUT1BUX0xPTkcKKwkgIGlmICghb25lX29wdChvcHRpb24sIGFyZywgZGFlbW9uLT5uYW1lYnVmZiwgXygidHJ5IC0taGVscCIpLCAxLCAwKSkKKyNlbHNlIAorCSAgICBpZiAoIW9uZV9vcHQob3B0aW9uLCBhcmcsIGRhZW1vbi0+bmFtZWJ1ZmYsIF8oInRyeSAtdyIpLCAxLCAwKSkgCisjZW5kaWYgIAorCSAgICBkaWUoXygiYmFkIGNvbW1hbmQgbGluZSBvcHRpb25zOiAlcyIpLCBkYWVtb24tPm5hbWVidWZmLCBFQ19CQURDT05GKTsKKwl9CisgICAgfQorCisgIGlmIChjb25mZmlsZSkKKyAgICBvbmVfZmlsZShjb25mZmlsZSwgY29uZmZpbGVfb3B0KTsKKworICAvKiBwb3J0IG1pZ2h0IG5vdCBiZSBrbm93biB3aGVuIHRoZSBhZGRyZXNzIGlzIHBhcnNlZCAtIGZpbGwgaW4gaGVyZSAqLworICBpZiAoZGFlbW9uLT5zZXJ2ZXJzKQorICAgIHsKKyAgICAgIHN0cnVjdCBzZXJ2ZXIgKnRtcDsKKyAgICAgIGZvciAodG1wID0gZGFlbW9uLT5zZXJ2ZXJzOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKKwlpZiAoISh0bXAtPmZsYWdzICYgU0VSVl9IQVNfU09VUkNFKSkKKwkgIHsKKwkgICAgaWYgKHRtcC0+c291cmNlX2FkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpCisJICAgICAgdG1wLT5zb3VyY2VfYWRkci5pbi5zaW5fcG9ydCA9IGh0b25zKGRhZW1vbi0+cXVlcnlfcG9ydCk7CisjaWZkZWYgSEFWRV9JUFY2CisJICAgIGVsc2UgaWYgKHRtcC0+c291cmNlX2FkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KQorCSAgICAgIHRtcC0+c291cmNlX2FkZHIuaW42LnNpbjZfcG9ydCA9IGh0b25zKGRhZW1vbi0+cXVlcnlfcG9ydCk7CisjZW5kaWYgCisJICB9IAorICAgIH0KKyAgCisgIGlmIChkYWVtb24tPmlmX2FkZHJzKQorICAgIHsgIAorICAgICAgc3RydWN0IGluYW1lICp0bXA7CisgICAgICBmb3IodG1wID0gZGFlbW9uLT5pZl9hZGRyczsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCisJaWYgKHRtcC0+YWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkKKwkgIHRtcC0+YWRkci5pbi5zaW5fcG9ydCA9IGh0b25zKGRhZW1vbi0+cG9ydCk7CisjaWZkZWYgSEFWRV9JUFY2CisJZWxzZSBpZiAodG1wLT5hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKKwkgIHRtcC0+YWRkci5pbjYuc2luNl9wb3J0ID0gaHRvbnMoZGFlbW9uLT5wb3J0KTsKKyNlbmRpZiAvKiBJUHY2ICovCisgICAgfQorCQorICAvKiBjcmVhdGUgZGVmYXVsdCwgaWYgbm90IHNwZWNpZmllZCAqLworICBpZiAoZGFlbW9uLT5hdXRoc2VydmVyICYmICFkYWVtb24tPmhvc3RtYXN0ZXIpCisgICAgeworICAgICAgc3RyY3B5KGJ1ZmYsICJob3N0bWFzdGVyLiIpOworICAgICAgc3RyY2F0KGJ1ZmYsIGRhZW1vbi0+YXV0aHNlcnZlcik7CisgICAgICBkYWVtb24tPmhvc3RtYXN0ZXIgPSBvcHRfc3RyaW5nX2FsbG9jKGJ1ZmYpOworICAgIH0KKyAgCisgIC8qIG9ubHkgb25lIG9mIHRoZXNlIG5lZWQgYmUgc3BlY2lmaWVkOiB0aGUgb3RoZXIgZGVmYXVsdHMgdG8gdGhlIGhvc3QtbmFtZSAqLworICBpZiAob3B0aW9uX2Jvb2woT1BUX0xPQ0FMTVgpIHx8IGRhZW1vbi0+bXhuYW1lcyB8fCBkYWVtb24tPm14dGFyZ2V0KQorICAgIHsKKyAgICAgIHN0cnVjdCBteF9zcnZfcmVjb3JkICpteDsKKyAgICAgIAorICAgICAgaWYgKGdldGhvc3RuYW1lKGJ1ZmYsIE1BWEROQU1FKSA9PSAtMSkKKwlkaWUoXygiY2Fubm90IGdldCBob3N0LW5hbWU6ICVzIiksIE5VTEwsIEVDX01JU0MpOworICAgICAgCisgICAgICBmb3IgKG14ID0gZGFlbW9uLT5teG5hbWVzOyBteDsgbXggPSBteC0+bmV4dCkKKwlpZiAoIW14LT5pc3NydiAmJiBob3N0bmFtZV9pc2VxdWFsKG14LT5uYW1lLCBidWZmKSkKKwkgIGJyZWFrOworICAgICAgCisgICAgICBpZiAoKGRhZW1vbi0+bXh0YXJnZXQgfHwgb3B0aW9uX2Jvb2woT1BUX0xPQ0FMTVgpKSAmJiAhbXgpCisJeworCSAgbXggPSBvcHRfbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXhfc3J2X3JlY29yZCkpOworCSAgbXgtPm5leHQgPSBkYWVtb24tPm14bmFtZXM7CisJICBteC0+aXNzcnYgPSAwOworCSAgbXgtPnRhcmdldCA9IE5VTEw7CisJICBteC0+bmFtZSA9IG9wdF9zdHJpbmdfYWxsb2MoYnVmZik7CisJICBkYWVtb24tPm14bmFtZXMgPSBteDsKKwl9CisgICAgICAKKyAgICAgIGlmICghZGFlbW9uLT5teHRhcmdldCkKKwlkYWVtb24tPm14dGFyZ2V0ID0gb3B0X3N0cmluZ19hbGxvYyhidWZmKTsKKworICAgICAgZm9yIChteCA9IGRhZW1vbi0+bXhuYW1lczsgbXg7IG14ID0gbXgtPm5leHQpCisJaWYgKCFteC0+aXNzcnYgJiYgIW14LT50YXJnZXQpCisJICBteC0+dGFyZ2V0ID0gZGFlbW9uLT5teHRhcmdldDsKKyAgICB9CisKKyAgaWYgKCFvcHRpb25fYm9vbChPUFRfTk9fUkVTT0xWKSAmJgorICAgICAgZGFlbW9uLT5yZXNvbHZfZmlsZXMgJiYgCisgICAgICBkYWVtb24tPnJlc29sdl9maWxlcy0+bmV4dCAmJiAKKyAgICAgIG9wdGlvbl9ib29sKE9QVF9OT19QT0xMKSkKKyAgICBkaWUoXygib25seSBvbmUgcmVzb2x2LmNvbmYgZmlsZSBhbGxvd2VkIGluIG5vLXBvbGwgbW9kZS4iKSwgTlVMTCwgRUNfQkFEQ09ORik7CisgIAorICBpZiAob3B0aW9uX2Jvb2woT1BUX1JFU09MVl9ET01BSU4pKQorICAgIHsKKyAgICAgIGNoYXIgKmxpbmU7CisgICAgICBGSUxFICpmOworCisgICAgICBpZiAob3B0aW9uX2Jvb2woT1BUX05PX1JFU09MVikgfHwKKwkgICFkYWVtb24tPnJlc29sdl9maWxlcyB8fCAKKwkgIChkYWVtb24tPnJlc29sdl9maWxlcyktPm5leHQpCisJZGllKF8oIm11c3QgaGF2ZSBleGFjdGx5IG9uZSByZXNvbHYuY29uZiB0byByZWFkIGRvbWFpbiBmcm9tLiIpLCBOVUxMLCBFQ19CQURDT05GKTsKKyAgICAgIAorICAgICAgaWYgKCEoZiA9IGZvcGVuKChkYWVtb24tPnJlc29sdl9maWxlcyktPm5hbWUsICJyIikpKQorCWRpZShfKCJmYWlsZWQgdG8gcmVhZCAlczogJXMiKSwgKGRhZW1vbi0+cmVzb2x2X2ZpbGVzKS0+bmFtZSwgRUNfRklMRSk7CisgICAgICAKKyAgICAgIHdoaWxlICgobGluZSA9IGZnZXRzKGJ1ZmYsIE1BWEROQU1FLCBmKSkpCisJeworCSAgY2hhciAqdG9rZW4gPSBzdHJ0b2sobGluZSwgIiBcdFxuXHIiKTsKKwkgIAorCSAgaWYgKCF0b2tlbiB8fCBzdHJjbXAodG9rZW4sICJzZWFyY2giKSAhPSAwKQorCSAgICBjb250aW51ZTsKKwkgIAorCSAgaWYgKCh0b2tlbiA9IHN0cnRvayhOVUxMLCAiIFx0XG5cciIpKSAmJiAgCisJICAgICAgKGRhZW1vbi0+ZG9tYWluX3N1ZmZpeCA9IGNhbm9uaWNhbGlzZV9vcHQodG9rZW4pKSkKKwkgICAgYnJlYWs7CisJfQorCisgICAgICBmY2xvc2UoZik7CisKKyAgICAgIGlmICghZGFlbW9uLT5kb21haW5fc3VmZml4KQorCWRpZShfKCJubyBzZWFyY2ggZGlyZWN0aXZlIGZvdW5kIGluICVzIiksIChkYWVtb24tPnJlc29sdl9maWxlcyktPm5hbWUsIEVDX01JU0MpOworICAgIH0KKworICBpZiAoZGFlbW9uLT5kb21haW5fc3VmZml4KQorICAgIHsKKyAgICAgICAvKiBhZGQgZG9tYWluIGZvciBhbnkgc3J2IHJlY29yZCB3aXRob3V0IG9uZS4gKi8KKyAgICAgIHN0cnVjdCBteF9zcnZfcmVjb3JkICpzcnY7CisgICAgICAKKyAgICAgIGZvciAoc3J2ID0gZGFlbW9uLT5teG5hbWVzOyBzcnY7IHNydiA9IHNydi0+bmV4dCkKKwlpZiAoc3J2LT5pc3NydiAmJgorCSAgICBzdHJjaHIoc3J2LT5uYW1lLCAnLicpICYmIAorCSAgICBzdHJjaHIoc3J2LT5uYW1lLCAnLicpID09IHN0cnJjaHIoc3J2LT5uYW1lLCAnLicpKQorCSAgeworCSAgICBzdHJjcHkoYnVmZiwgc3J2LT5uYW1lKTsKKwkgICAgc3RyY2F0KGJ1ZmYsICIuIik7CisJICAgIHN0cmNhdChidWZmLCBkYWVtb24tPmRvbWFpbl9zdWZmaXgpOworCSAgICBmcmVlKHNydi0+bmFtZSk7CisJICAgIHNydi0+bmFtZSA9IG9wdF9zdHJpbmdfYWxsb2MoYnVmZik7CisJICB9CisgICAgfQorICBlbHNlIGlmIChvcHRpb25fYm9vbChPUFRfREhDUF9GUUROKSkKKyAgICBkaWUoXygidGhlcmUgbXVzdCBiZSBhIGRlZmF1bHQgZG9tYWluIHdoZW4gLS1kaGNwLWZxZG4gaXMgc2V0IiksIE5VTEwsIEVDX0JBRENPTkYpOworCisgIC8qIElmIHRoZXJlJ3MgYWNjZXNzLWNvbnRyb2wgY29uZmlnLCB0aGVuIGlnbm9yZSAtLWxvY2FsLXNlcnZpY2UsIGl0J3MgaW50ZW5kZWQKKyAgICAgYXMgYSBzeXN0ZW0gZGVmYXVsdCB0byBrZWVwIG90aGVyd2lzZSB1bmNvbmZpZ3VyZWQgaW5zdGFsbGF0aW9ucyBzYWZlLiAqLworICBpZiAoZGFlbW9uLT5pZl9uYW1lcyB8fCBkYWVtb24tPmlmX2V4Y2VwdCB8fCBkYWVtb24tPmlmX2FkZHJzIHx8IGRhZW1vbi0+YXV0aHNlcnZlcikKKyAgICByZXNldF9vcHRpb25fYm9vbChPUFRfTE9DQUxfU0VSVklDRSk7IAorCisgIGlmICh0ZXN0bW9kZSkKKyAgICB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImRuc21hc3E6ICVzLlxuIiwgXygic3ludGF4IGNoZWNrIE9LIikpOworICAgICAgZXhpdCgwKTsKKyAgICB9Cit9ICAKZGlmZiAtLWdpdCBhL3NyYy9vdXRwYWNrZXQuYyBiL3NyYy9vdXRwYWNrZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2U2OGY3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL291dHBhY2tldC5jCkBAIC0wLDAgKzEsMTA4IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE0IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworCisjaW5jbHVkZSAiZG5zbWFzcS5oIgorIAorI2lmZGVmIEhBVkVfREhDUDYKKworc3RhdGljIHNpemVfdCBvdXRwYWNrZXRfY291bnRlcjsKKwordm9pZCBlbmRfb3B0NihpbnQgY29udGFpbmVyKQoreworICAgdm9pZCAqcCA9IGRhZW1vbi0+b3V0cGFja2V0Lmlvdl9iYXNlICsgY29udGFpbmVyICsgMjsKKyAgIHUxNiBsZW4gPSBvdXRwYWNrZXRfY291bnRlciAtIGNvbnRhaW5lciAtIDQgOworICAgCisgICBQVVRTSE9SVChsZW4sIHApOworfQorCitpbnQgc2F2ZV9jb3VudGVyKGludCBuZXd2YWwpCit7CisgIGludCByZXQgPSBvdXRwYWNrZXRfY291bnRlcjsKKyAgaWYgKG5ld3ZhbCAhPSAtMSkKKyAgICBvdXRwYWNrZXRfY291bnRlciA9IG5ld3ZhbDsKKworICByZXR1cm4gcmV0OworfQorCit2b2lkICpleHBhbmQoc2l6ZV90IGhlYWRyb29tKQoreworICB2b2lkICpyZXQ7CisKKyAgaWYgKGV4cGFuZF9idWYoJmRhZW1vbi0+b3V0cGFja2V0LCBvdXRwYWNrZXRfY291bnRlciArIGhlYWRyb29tKSkKKyAgICB7CisgICAgICByZXQgPSBkYWVtb24tPm91dHBhY2tldC5pb3ZfYmFzZSArIG91dHBhY2tldF9jb3VudGVyOworICAgICAgb3V0cGFja2V0X2NvdW50ZXIgKz0gaGVhZHJvb207CisgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgCisgIHJldHVybiBOVUxMOworfQorICAgIAoraW50IG5ld19vcHQ2KGludCBvcHQpCit7CisgIGludCByZXQgPSBvdXRwYWNrZXRfY291bnRlcjsKKyAgdm9pZCAqcDsKKworICBpZiAoKHAgPSBleHBhbmQoNCkpKQorICAgIHsKKyAgICAgIFBVVFNIT1JUKG9wdCwgcCk7CisgICAgICBQVVRTSE9SVCgwLCBwKTsKKyAgICB9CisKKyAgcmV0dXJuIHJldDsKK30KKwordm9pZCAqcHV0X29wdDYodm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKyAgdm9pZCAqcDsKKworICBpZiAoKHAgPSBleHBhbmQobGVuKSkgJiYgZGF0YSkKKyAgICBtZW1jcHkocCwgZGF0YSwgbGVuKTsgICAKKyAgCisgIHJldHVybiBwOworfQorICAKK3ZvaWQgcHV0X29wdDZfbG9uZyh1bnNpZ25lZCBpbnQgdmFsKQoreworICB2b2lkICpwOworICAKKyAgaWYgKChwID0gZXhwYW5kKDQpKSkgIAorICAgIFBVVExPTkcodmFsLCBwKTsKK30KKwordm9pZCBwdXRfb3B0Nl9zaG9ydCh1bnNpZ25lZCBpbnQgdmFsKQoreworICB2b2lkICpwOworCisgIGlmICgocCA9IGV4cGFuZCgyKSkpCisgICAgUFVUU0hPUlQodmFsLCBwKTsgICAKK30KKwordm9pZCBwdXRfb3B0Nl9jaGFyKHVuc2lnbmVkIGludCB2YWwpCit7CisgIHVuc2lnbmVkIGNoYXIgKnA7CisKKyAgaWYgKChwID0gZXhwYW5kKDEpKSkKKyAgICAqcCA9IHZhbDsgICAKK30KKwordm9pZCBwdXRfb3B0Nl9zdHJpbmcoY2hhciAqcykKK3sKKyAgcHV0X29wdDYocywgc3RybGVuKHMpKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvcmFkdi1wcm90b2NvbC5oIGIvc3JjL3JhZHYtcHJvdG9jb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmNjZGE0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3JhZHYtcHJvdG9jb2wuaApAQCAtMCwwICsxLDU4IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE0IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2RlZmluZSBBTExfTk9ERVMgICAgICAgICAgICAgICAgICJGRjAyOjoxIgorI2RlZmluZSBBTExfUk9VVEVSUyAgICAgICAgICAgICAgICJGRjAyOjoyIgorCitzdHJ1Y3QgcGluZ19wYWNrZXQgeworICB1OCB0eXBlLCBjb2RlOworICB1MTYgY2hlY2tzdW07CisgIHUxNiBpZGVudGlmaWVyOworICB1MTYgc2VxdWVuY2Vfbm87Cit9OworCitzdHJ1Y3QgcmFfcGFja2V0IHsKKyAgdTggdHlwZSwgY29kZTsKKyAgdTE2IGNoZWNrc3VtOworICB1OCBob3BfbGltaXQsIGZsYWdzOworICB1MTYgbGlmZXRpbWU7CisgIHUzMiByZWFjaGFibGVfdGltZTsKKyAgdTMyIHJldHJhbnNfdGltZTsKK307CisKK3N0cnVjdCBuZWlnaF9wYWNrZXQgeworICB1OCB0eXBlLCBjb2RlOworICB1MTYgY2hlY2tzdW07CisgIHUxNiByZXNlcnZlZDsKKyAgc3RydWN0IGluNl9hZGRyIHRhcmdldDsKK307CisKK3N0cnVjdCBwcmVmaXhfb3B0IHsKKyAgdTggdHlwZSwgbGVuLCBwcmVmaXhfbGVuLCBmbGFnczsKKyAgdTMyIHZhbGlkX2xpZmV0aW1lLCBwcmVmZXJyZWRfbGlmZXRpbWUsIHJlc2VydmVkOworICBzdHJ1Y3QgaW42X2FkZHIgcHJlZml4OworfTsKKworI2RlZmluZSBJQ01QNl9PUFRfU09VUkNFX01BQyAgIDEKKyNkZWZpbmUgSUNNUDZfT1BUX1BSRUZJWCAgICAgICAzCisjZGVmaW5lIElDTVA2X09QVF9NVFUgICAgICAgICAgNQorI2RlZmluZSBJQ01QNl9PUFRfQURWX0lOVEVSVkFMIDcKKyNkZWZpbmUgSUNNUDZfT1BUX1JUX0lORk8gICAgIDI0CisjZGVmaW5lIElDTVA2X09QVF9SRE5TUyAgICAgICAyNQorI2RlZmluZSBJQ01QNl9PUFRfRE5TU0wgICAgICAgMzEKKworCisKZGlmZiAtLWdpdCBhL3NyYy9yYWR2LmMgYi9zcmMvcmFkdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOGIxNjIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcmFkdi5jCkBAIC0wLDAgKzEsODUzIEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE0IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworCisvKiBOQi4gVGhpcyBjb2RlIG1heSBiZSBjYWxsZWQgZHVyaW5nIGEgREhDUHY0IG9yIHRyYW5zYWN0aW9uIHdoaWNoIGlzIGluIHBpbmctd2FpdAorICAgSXQgdGhlcmVmb3JlIGNhbm5vdCB1c2UgYW55IERIQ1AgYnVmZmVyIHJlc291cmNlcyBleGNlcHQgb3V0cGFja2V0LCB3aGljaCBpcworICAgbm90IHVzZWQgYnkgREhDUHY0IGNvZGUuIFRoaXMgY29kZSBtYXkgYWxzbyBiZSBjYWxsZWQgd2hlbiBESENQIDQgb3IgNiBpc24ndAorICAgYWN0aXZlLCBzbyB3ZSBlbnN1cmUgdGhhdCBvdXRwYWNrZXQgaXMgYWxsb2NhdGVkIGhlcmUgdG9vICovCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisKKyNpZmRlZiBIQVZFX0RIQ1A2CisKKyNpbmNsdWRlIDxuZXRpbmV0L2ljbXA2Lmg+CisKK3N0cnVjdCByYV9wYXJhbSB7CisgIHRpbWVfdCBub3c7CisgIGludCBpbmQsIG1hbmFnZWQsIG90aGVyLCBmb3VuZF9jb250ZXh0LCBmaXJzdCwgYWR2X3JvdXRlcjsKKyAgY2hhciAqaWZfbmFtZTsKKyAgc3RydWN0IGRoY3BfbmV0aWQgKnRhZ3M7CisgIHN0cnVjdCBpbjZfYWRkciBsaW5rX2xvY2FsLCBsaW5rX2dsb2JhbCwgdWxhOworICB1bnNpZ25lZCBpbnQgZ2xvYl9wcmVmX3RpbWUsIGxpbmtfcHJlZl90aW1lLCB1bGFfcHJlZl90aW1lLCBhZHZfaW50ZXJ2YWwsIHByaW87Cit9OworCitzdHJ1Y3Qgc2VhcmNoX3BhcmFtIHsKKyAgdGltZV90IG5vdzsgaW50IGlmYWNlOworICBjaGFyIG5hbWVbSUZfTkFNRVNJWkUrMV07Cit9OworCitzdGF0aWMgdm9pZCBzZW5kX3JhKHRpbWVfdCBub3csIGludCBpZmFjZSwgY2hhciAqaWZhY2VfbmFtZSwgc3RydWN0IGluNl9hZGRyICpkZXN0KTsKK3N0YXRpYyBpbnQgYWRkX3ByZWZpeGVzKHN0cnVjdCBpbjZfYWRkciAqbG9jYWwsICBpbnQgcHJlZml4LAorCQkJaW50IHNjb3BlLCBpbnQgaWZfaW5kZXgsIGludCBmbGFncywgCisJCQl1bnNpZ25lZCBpbnQgcHJlZmVycmVkLCB1bnNpZ25lZCBpbnQgdmFsaWQsIHZvaWQgKnZwYXJhbSk7CitzdGF0aWMgaW50IGlmYWNlX3NlYXJjaChzdHJ1Y3QgaW42X2FkZHIgKmxvY2FsLCAgaW50IHByZWZpeCwKKwkJCWludCBzY29wZSwgaW50IGlmX2luZGV4LCBpbnQgZmxhZ3MsIAorCQkJaW50IHByZWZlcmVkLCBpbnQgdmFsaWQsIHZvaWQgKnZwYXJhbSk7CitzdGF0aWMgaW50IGFkZF9sbGEoaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgdHlwZSwgY2hhciAqbWFjLCBzaXplX3QgbWFjbGVuLCB2b2lkICpwYXJtKTsKK3N0YXRpYyB2b2lkIG5ld190aW1lb3V0KHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIGNoYXIgKmlmYWNlX25hbWUsIHRpbWVfdCBub3cpOworc3RhdGljIHVuc2lnbmVkIGludCBjYWxjX2xpZmV0aW1lKHN0cnVjdCByYV9pbnRlcmZhY2UgKnJhKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY19pbnRlcnZhbChzdHJ1Y3QgcmFfaW50ZXJmYWNlICpyYSk7CitzdGF0aWMgdW5zaWduZWQgaW50IGNhbGNfcHJpbyhzdHJ1Y3QgcmFfaW50ZXJmYWNlICpyYSk7CitzdGF0aWMgc3RydWN0IHJhX2ludGVyZmFjZSAqZmluZF9pZmFjZV9wYXJhbShjaGFyICppZmFjZSk7CisKK3N0YXRpYyBpbnQgaG9wX2xpbWl0OworCit2b2lkIHJhX2luaXQodGltZV90IG5vdykKK3sKKyAgc3RydWN0IGljbXA2X2ZpbHRlciBmaWx0ZXI7CisgIGludCBmZDsKKyNpZiBkZWZpbmVkKElQVjZfVENMQVNTKSAmJiBkZWZpbmVkKElQVE9TX0NMQVNTX0NTNikKKyAgaW50IGNsYXNzID0gSVBUT1NfQ0xBU1NfQ1M2OworI2VuZGlmCisgIGludCB2YWwgPSAyNTU7IC8qIHJhZHZkIHVzZXMgdGhpcyB2YWx1ZSAqLworICBzb2NrbGVuX3QgbGVuID0gc2l6ZW9mKGludCk7CisgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQ7CisgIAorICAvKiBlbnN1cmUgdGhpcyBpcyBhcm91bmQgZXZlbiBpZiB3ZSdyZSBub3QgZG9pbmcgREhDUHY2ICovCisgIGV4cGFuZF9idWYoJmRhZW1vbi0+b3V0cGFja2V0LCBzaXplb2Yoc3RydWN0IGRoY3BfcGFja2V0KSk7CisgCisgIC8qIFNlZSBpZiB3ZSdyZSBndWVzc2luZyBTTEFBQyBhZGRyZXNzZXMsIGlmIHNvIHdlIG5lZWQgdG8gcmVjaWV2ZSBwaW5nIHJlcGxpZXMgKi8KKyAgZm9yIChjb250ZXh0ID0gZGFlbW9uLT5kaGNwNjsgY29udGV4dDsgY29udGV4dCA9IGNvbnRleHQtPm5leHQpCisgICAgaWYgKChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfUkFfTkFNRSkpCisgICAgICBicmVhazsKKyAgCisgIC8qIE5lZWQgSUNNUDYgc29ja2V0IGZvciB0cmFuc21pc3Npb24gZm9yIERIQ1B2NiBldmVuIHdoZW4gbm90IGRvaW5nIFJBLiAqLworCisgIElDTVA2X0ZJTFRFUl9TRVRCTE9DS0FMTCgmZmlsdGVyKTsKKyAgaWYgKGRhZW1vbi0+ZG9pbmdfcmEpCisgICAgeworICAgICAgSUNNUDZfRklMVEVSX1NFVFBBU1MoTkRfUk9VVEVSX1NPTElDSVQsICZmaWx0ZXIpOworICAgICAgaWYgKGNvbnRleHQpCisJSUNNUDZfRklMVEVSX1NFVFBBU1MoSUNNUDZfRUNIT19SRVBMWSwgJmZpbHRlcik7CisgICAgfQorICAKKyAgaWYgKChmZCA9IHNvY2tldChQRl9JTkVUNiwgU09DS19SQVcsIElQUFJPVE9fSUNNUFY2KSkgPT0gLTEgfHwKKyAgICAgIGdldHNvY2tvcHQoZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9VTklDQVNUX0hPUFMsICZob3BfbGltaXQsICZsZW4pIHx8CisjaWYgZGVmaW5lZChJUFY2X1RDTEFTUykgJiYgZGVmaW5lZChJUFRPU19DTEFTU19DUzYpCisgICAgICBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQVjYsIElQVjZfVENMQVNTLCAmY2xhc3MsIHNpemVvZihjbGFzcykpID09IC0xIHx8CisjZW5kaWYKKyAgICAgICFmaXhfZmQoZmQpIHx8CisgICAgICAhc2V0X2lwdjZwa3RpbmZvKGZkKSB8fAorICAgICAgc2V0c29ja29wdChmZCwgSVBQUk9UT19JUFY2LCBJUFY2X1VOSUNBU1RfSE9QUywgJnZhbCwgc2l6ZW9mKHZhbCkpIHx8CisgICAgICBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX0lQVjYsIElQVjZfTVVMVElDQVNUX0hPUFMsICZ2YWwsIHNpemVvZih2YWwpKSB8fAorICAgICAgc2V0c29ja29wdChmZCwgSVBQUk9UT19JQ01QVjYsIElDTVA2X0ZJTFRFUiwgJmZpbHRlciwgc2l6ZW9mKGZpbHRlcikpID09IC0xKQorICAgIGRpZSAoXygiY2Fubm90IGNyZWF0ZSBJQ01QdjYgc29ja2V0OiAlcyIpLCBOVUxMLCBFQ19CQURORVQpOworICAKKyAgIGRhZW1vbi0+aWNtcDZmZCA9IGZkOworICAgCisgICBpZiAoZGFlbW9uLT5kb2luZ19yYSkKKyAgICAgcmFfc3RhcnRfdW5zb2xpY3RlZChub3csIE5VTEwpOworfQorCit2b2lkIHJhX3N0YXJ0X3Vuc29saWN0ZWQodGltZV90IG5vdywgc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCkKK3sgICAKKyAgIC8qIGluaXQgdGltZXJzIHNvIHRoYXQgd2UgZG8gcmEncyBmb3Igc29tZS9hbGwgc29vbi4gc29tZSByYV90aW1lcyB3aWxsIGVuZCB1cCB6ZXJvZWQKKyAgICAgaWYgaXQncyBub3QgYXBwcm9wcmlhdGUgdG8gYWR2ZXJ0aXNlIHRob3NlIGNvbnRleHRzLgorICAgICBUaGlzIGdldHMgcmUtY2FsbGVkIG9uIGEgbmV0bGluayByb3V0ZS1jaGFuZ2UgdG8gcmUtZG8gdGhlIGFkdmVydGlzZW1lbnQKKyAgICAgYW5kIHBpY2sgdXAgbmV3IGludGVyZmFjZXMgKi8KKyAgCisgIGlmIChjb250ZXh0KQorICAgIGNvbnRleHQtPnJhX3Nob3J0X3BlcmlvZF9zdGFydCA9IGNvbnRleHQtPnJhX3RpbWUgPSBub3c7CisgIGVsc2UKKyAgICBmb3IgKGNvbnRleHQgPSBkYWVtb24tPmRoY3A2OyBjb250ZXh0OyBjb250ZXh0ID0gY29udGV4dC0+bmV4dCkKKyAgICAgIGlmICghKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9URU1QTEFURSkpCisJeworCSAgY29udGV4dC0+cmFfdGltZSA9IG5vdyArIChyYW5kMTYoKS8xMzAwMCk7IC8qIHJhbmdlIDAgLSA1ICovCisJICAvKiByZS1kbyBmcmVxdWVudGx5IGZvciBhIG1pbnV0ZSBvciBzbywgaW4gY2FzZSB0aGUgZmlyc3QgZ2V0cyBsb3N0LiAqLworCSAgY29udGV4dC0+cmFfc2hvcnRfcGVyaW9kX3N0YXJ0ID0gbm93OworCX0KK30KKwordm9pZCBpY21wNl9wYWNrZXQodGltZV90IG5vdykKK3sKKyAgY2hhciBpbnRlcmZhY2VbSUZfTkFNRVNJWkUrMV07CisgIHNzaXplX3Qgc3o7IAorICBpbnQgaWZfaW5kZXggPSAwOworICBzdHJ1Y3QgY21zZ2hkciAqY21wdHI7CisgIHN0cnVjdCBtc2doZHIgbXNnOworICB1bmlvbiB7CisgICAgc3RydWN0IGNtc2doZHIgYWxpZ247IC8qIHRoaXMgZW5zdXJlcyBhbGlnbm1lbnQgKi8KKyAgICBjaGFyIGNvbnRyb2w2W0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpbjZfcGt0aW5mbykpXTsKKyAgfSBjb250cm9sX3U7CisgIHN0cnVjdCBzb2NrYWRkcl9pbjYgZnJvbTsKKyAgdW5zaWduZWQgY2hhciAqcGFja2V0OworICBzdHJ1Y3QgaW5hbWUgKnRtcDsKKworICAvKiBOb3RlOiB1c2Ugb3V0cGFja2V0IGZvciBpbnB1dCBidWZmZXIgKi8KKyAgbXNnLm1zZ19jb250cm9sID0gY29udHJvbF91LmNvbnRyb2w2OworICBtc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY29udHJvbF91KTsKKyAgbXNnLm1zZ19mbGFncyA9IDA7CisgIG1zZy5tc2dfbmFtZSA9ICZmcm9tOworICBtc2cubXNnX25hbWVsZW4gPSBzaXplb2YoZnJvbSk7CisgIG1zZy5tc2dfaW92ID0gJmRhZW1vbi0+b3V0cGFja2V0OworICBtc2cubXNnX2lvdmxlbiA9IDE7CisgIAorICBpZiAoKHN6ID0gcmVjdl9kaGNwX3BhY2tldChkYWVtb24tPmljbXA2ZmQsICZtc2cpKSA9PSAtMSB8fCBzeiA8IDgpCisgICAgcmV0dXJuOworICAgCisgIHBhY2tldCA9ICh1bnNpZ25lZCBjaGFyICopZGFlbW9uLT5vdXRwYWNrZXQuaW92X2Jhc2U7CisgIAorICBmb3IgKGNtcHRyID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY21wdHI7IGNtcHRyID0gQ01TR19OWFRIRFIoJm1zZywgY21wdHIpKQorICAgIGlmIChjbXB0ci0+Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQVjYgJiYgY21wdHItPmNtc2dfdHlwZSA9PSBkYWVtb24tPnY2cGt0aW5mbykKKyAgICAgIHsKKwl1bmlvbiB7CisJICB1bnNpZ25lZCBjaGFyICpjOworCSAgc3RydWN0IGluNl9wa3RpbmZvICpwOworCX0gcDsKKwlwLmMgPSBDTVNHX0RBVEEoY21wdHIpOworICAgICAgICAKKwlpZl9pbmRleCA9IHAucC0+aXBpNl9pZmluZGV4OworICAgICAgfQorICAKKyAgaWYgKCFpbmRleHRvbmFtZShkYWVtb24tPmljbXA2ZmQsIGlmX2luZGV4LCBpbnRlcmZhY2UpKQorICAgIHJldHVybjsKKyAgICAKKyAgaWYgKCFpZmFjZV9jaGVjayhBRl9MT0NBTCwgTlVMTCwgaW50ZXJmYWNlLCBOVUxMKSkKKyAgICByZXR1cm47CisgIAorICBmb3IgKHRtcCA9IGRhZW1vbi0+ZGhjcF9leGNlcHQ7IHRtcDsgdG1wID0gdG1wLT5uZXh0KQorICAgIGlmICh0bXAtPm5hbWUgJiYgd2lsZGNhcmRfbWF0Y2godG1wLT5uYW1lLCBpbnRlcmZhY2UpKQorICAgICAgcmV0dXJuOworIAorICBpZiAocGFja2V0WzFdICE9IDApCisgICAgcmV0dXJuOworICAKKyAgaWYgKHBhY2tldFswXSA9PSBJQ01QNl9FQ0hPX1JFUExZKQorICAgIGxlYXNlX3BpbmdfcmVwbHkoJmZyb20uc2luNl9hZGRyLCBwYWNrZXQsIGludGVyZmFjZSk7IAorICBlbHNlIGlmIChwYWNrZXRbMF0gPT0gTkRfUk9VVEVSX1NPTElDSVQpCisgICAgeworICAgICAgY2hhciAqbWFjID0gIiI7CisgICAgICAKKyAgICAgIC8qIGxvb2sgZm9yIGxpbmstbGF5ZXIgYWRkcmVzcyBvcHRpb24gZm9yIGxvZ2dpbmcgKi8KKyAgICAgIGlmIChzeiA+PSAxNiAmJiBwYWNrZXRbOF0gPT0gSUNNUDZfT1BUX1NPVVJDRV9NQUMgJiYgKHBhY2tldFs5XSAqIDgpICsgOCA8PSBzeikKKwl7CisJICBwcmludF9tYWMoZGFlbW9uLT5uYW1lYnVmZiwgJnBhY2tldFsxMF0sIChwYWNrZXRbOV0gKiA4KSAtIDIpOworCSAgbWFjID0gZGFlbW9uLT5uYW1lYnVmZjsKKwl9CisgICAgICAgICAKKyAgICAgIGlmICghb3B0aW9uX2Jvb2woT1BUX1FVSUVUX1JBKSkKKwlteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCAiUlRSLVNPTElDSVQoJXMpICVzIiwgaW50ZXJmYWNlLCBtYWMpOworICAgICAgLyogc291cmNlIGFkZHJlc3MgbWF5IG5vdCBiZSB2YWxpZCBpbiBzb2xpY2l0IHJlcXVlc3QuICovCisgICAgICBzZW5kX3JhKG5vdywgaWZfaW5kZXgsIGludGVyZmFjZSwgIUlONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZmcm9tLnNpbjZfYWRkcikgPyAmZnJvbS5zaW42X2FkZHIgOiBOVUxMKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRfcmEodGltZV90IG5vdywgaW50IGlmYWNlLCBjaGFyICppZmFjZV9uYW1lLCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QpCit7CisgIHN0cnVjdCByYV9wYWNrZXQgKnJhOworICBzdHJ1Y3QgcmFfcGFyYW0gcGFybTsKKyAgc3RydWN0IHNvY2thZGRyX2luNiBhZGRyOworICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCAqdG1wLCAgKip1cDsKKyAgc3RydWN0IGRoY3BfbmV0aWQgaWZhY2VfaWQ7CisgIHN0cnVjdCBkaGNwX29wdCAqb3B0X2NmZzsKKyAgc3RydWN0IHJhX2ludGVyZmFjZSAqcmFfcGFyYW0gPSBmaW5kX2lmYWNlX3BhcmFtKGlmYWNlX25hbWUpOworICBpbnQgZG9uZV9kbnMgPSAwLCBvbGRfcHJlZml4ID0gMDsKKyAgdW5zaWduZWQgaW50IG1pbl9wcmVmX3RpbWU7CisjaWZkZWYgSEFWRV9MSU5VWF9ORVRXT1JLCisgIEZJTEUgKmY7CisjZW5kaWYKKyAgCisgIHBhcm0uaW5kID0gaWZhY2U7CisgIHBhcm0ubWFuYWdlZCA9IDA7CisgIHBhcm0ub3RoZXIgPSAwOworICBwYXJtLmZvdW5kX2NvbnRleHQgPSAwOworICBwYXJtLmFkdl9yb3V0ZXIgPSAwOworICBwYXJtLmlmX25hbWUgPSBpZmFjZV9uYW1lOworICBwYXJtLmZpcnN0ID0gMTsKKyAgcGFybS5ub3cgPSBub3c7CisgIHBhcm0uZ2xvYl9wcmVmX3RpbWUgPSBwYXJtLmxpbmtfcHJlZl90aW1lID0gcGFybS51bGFfcHJlZl90aW1lID0gMDsKKyAgcGFybS5hZHZfaW50ZXJ2YWwgPSBjYWxjX2ludGVydmFsKHJhX3BhcmFtKTsKKyAgcGFybS5wcmlvID0gY2FsY19wcmlvKHJhX3BhcmFtKTsKKyAgCisgIHNhdmVfY291bnRlcigwKTsKKyAgcmEgPSBleHBhbmQoc2l6ZW9mKHN0cnVjdCByYV9wYWNrZXQpKTsKKyAgCisgIHJhLT50eXBlID0gTkRfUk9VVEVSX0FEVkVSVDsKKyAgcmEtPmNvZGUgPSAwOworICByYS0+aG9wX2xpbWl0ID0gaG9wX2xpbWl0OworICByYS0+ZmxhZ3MgPSBwYXJtLnByaW87CisgIHJhLT5saWZldGltZSA9IGh0b25zKGNhbGNfbGlmZXRpbWUocmFfcGFyYW0pKTsKKyAgcmEtPnJlYWNoYWJsZV90aW1lID0gMDsKKyAgcmEtPnJldHJhbnNfdGltZSA9IDA7CisKKyAgLyogc2V0IHRhZyB3aXRoIG5hbWUgPT0gaW50ZXJmYWNlICovCisgIGlmYWNlX2lkLm5ldCA9IGlmYWNlX25hbWU7CisgIGlmYWNlX2lkLm5leHQgPSBOVUxMOworICBwYXJtLnRhZ3MgPSAmaWZhY2VfaWQ7IAorICAKKyAgZm9yIChjb250ZXh0ID0gZGFlbW9uLT5kaGNwNjsgY29udGV4dDsgY29udGV4dCA9IGNvbnRleHQtPm5leHQpCisgICAgeworICAgICAgY29udGV4dC0+ZmxhZ3MgJj0gfkNPTlRFWFRfUkFfRE9ORTsKKyAgICAgIGNvbnRleHQtPm5ldGlkLm5leHQgPSAmY29udGV4dC0+bmV0aWQ7CisgICAgfQorCisgIGlmICghaWZhY2VfZW51bWVyYXRlKEFGX0lORVQ2LCAmcGFybSwgYWRkX3ByZWZpeGVzKSkKKyAgICByZXR1cm47CisKKyAgLyogRmluZCBzbWFsbGVzdCBwcmVmZXJyZWQgdGltZSB3aXRoaW4gYWRkcmVzcyBjbGFzc2VzLAorICAgICB0byB1c2UgYXMgbGlmZXRpbWUgZm9yIG9wdGlvbnMuIFRoaXMgaXMgYSByYXRoZXIgYXJiaXRyYXJ5IGNob2ljZS4gKi8KKyAgbWluX3ByZWZfdGltZSA9IDB4ZmZmZmZmZmY7CisgIGlmIChwYXJtLmdsb2JfcHJlZl90aW1lICE9IDAgJiYgcGFybS5nbG9iX3ByZWZfdGltZSA8IG1pbl9wcmVmX3RpbWUpCisgICAgbWluX3ByZWZfdGltZSA9IHBhcm0uZ2xvYl9wcmVmX3RpbWU7CisgIAorICBpZiAocGFybS51bGFfcHJlZl90aW1lICE9IDAgJiYgcGFybS51bGFfcHJlZl90aW1lIDwgbWluX3ByZWZfdGltZSkKKyAgICBtaW5fcHJlZl90aW1lID0gcGFybS51bGFfcHJlZl90aW1lOworCisgIGlmIChwYXJtLmxpbmtfcHJlZl90aW1lICE9IDAgJiYgcGFybS5saW5rX3ByZWZfdGltZSA8IG1pbl9wcmVmX3RpbWUpCisgICAgbWluX3ByZWZfdGltZSA9IHBhcm0ubGlua19wcmVmX3RpbWU7CisKKyAgLyogTG9vayBmb3IgY29uc3RydWN0ZWQgY29udGV4dHMgYXNzb2NpYXRlZCB3aXRoIGFkZHJlc3NlcyB3aGljaCBoYXZlIGdvbmUsIAorICAgICBhbmQgYWR2ZXJ0aXNlIHRoZW0gd2l0aCBwcmVmZXJyZWRfdGltZSA9PSAwICBSRkMgNjIwNCA0LjMgTC0xMyAqLworICBmb3IgKHVwID0gJmRhZW1vbi0+ZGhjcDYsIGNvbnRleHQgPSBkYWVtb24tPmRoY3A2OyBjb250ZXh0OyBjb250ZXh0ID0gdG1wKQorICAgIHsKKyAgICAgIHRtcCA9IGNvbnRleHQtPm5leHQ7CisKKyAgICAgIGlmIChjb250ZXh0LT5pZl9pbmRleCA9PSBpZmFjZSAmJiAoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX09MRCkpCisJeworCSAgdW5zaWduZWQgaW50IG9sZCA9IGRpZmZ0aW1lKG5vdywgY29udGV4dC0+YWRkcmVzc19sb3N0X3RpbWUpOworCSAgCisJICBpZiAob2xkID4gY29udGV4dC0+c2F2ZWRfdmFsaWQpCisJICAgIHsKKwkgICAgICAvKiBXZSd2ZSBhZHZlcnRpc2VkIHRoaXMgZW5vdWdoLCB0aW1lIHRvIGdvICovCisJICAgICAgKnVwID0gY29udGV4dC0+bmV4dDsKKwkgICAgICBmcmVlKGNvbnRleHQpOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBzdHJ1Y3QgcHJlZml4X29wdCAqb3B0OworCSAgICAgIHN0cnVjdCBpbjZfYWRkciBsb2NhbCA9IGNvbnRleHQtPnN0YXJ0NjsKKwkgICAgICBpbnQgZG9fc2xhYWMgPSAwOworCisJICAgICAgb2xkX3ByZWZpeCA9IDE7CisKKwkgICAgICAvKiB6ZXJvIG5ldCBwYXJ0IG9mIGFkZHJlc3MgKi8KKwkgICAgICBzZXRhZGRyNnBhcnQoJmxvY2FsLCBhZGRyNnBhcnQoJmxvY2FsKSAmIH4oKGNvbnRleHQtPnByZWZpeCA9PSA2NCkgPyAodTY0KS0xTEwgOiAoMUxMVSA8PCAoMTI4IC0gY29udGV4dC0+cHJlZml4KSkgLSAxTExVKSk7CisJICAgICAKKwkgICAgICAKKwkgICAgICBpZiAoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX1JBKQorCQl7CisJCSAgZG9fc2xhYWMgPSAxOworCQkgIGlmIChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfREhDUCkKKwkJICAgIHsKKwkJICAgICAgcGFybS5vdGhlciA9IDE7IAorCQkgICAgICBpZiAoIShjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfUkFfU1RBVEVMRVNTKSkKKwkJCXBhcm0ubWFuYWdlZCA9IDE7CisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICAvKiBkb24ndCBkbyBSQSBmb3Igbm9uLXJhLW9ubHkgdW5sZXNzIC0tZW5hYmxlLXJhIGlzIHNldCAqLworCQkgIGlmIChvcHRpb25fYm9vbChPUFRfUkEpKQorCQkgICAgeworCQkgICAgICBwYXJtLm1hbmFnZWQgPSAxOworCQkgICAgICBwYXJtLm90aGVyID0gMTsKKwkJICAgIH0KKwkJfQorCisJICAgICAgaWYgKChvcHQgPSBleHBhbmQoc2l6ZW9mKHN0cnVjdCBwcmVmaXhfb3B0KSkpKQorCQl7CisJCSAgb3B0LT50eXBlID0gSUNNUDZfT1BUX1BSRUZJWDsKKwkJICBvcHQtPmxlbiA9IDQ7CisJCSAgb3B0LT5wcmVmaXhfbGVuID0gY29udGV4dC0+cHJlZml4OworCQkgIC8qIGF1dG9ub21vdXMgb25seSBpZiB3ZSdyZSBub3QgZG9pbmcgZGhjcCwgYWx3YXlzIHNldCAib24tbGluayIgKi8KKwkJICBvcHQtPmZsYWdzID0gZG9fc2xhYWMgPyAweEMwIDogMHg4MDsKKwkJICBvcHQtPnZhbGlkX2xpZmV0aW1lID0gaHRvbmwoY29udGV4dC0+c2F2ZWRfdmFsaWQgLSBvbGQpOworCQkgIG9wdC0+cHJlZmVycmVkX2xpZmV0aW1lID0gaHRvbmwoMCk7CisJCSAgb3B0LT5yZXNlcnZlZCA9IDA7IAorCQkgIG9wdC0+cHJlZml4ID0gbG9jYWw7CisJCSAgCisJCSAgaW5ldF9udG9wKEFGX0lORVQ2LCAmbG9jYWwsIGRhZW1vbi0+YWRkcmJ1ZmYsIEFERFJTVFJMRU4pOworCQkgIGlmICghb3B0aW9uX2Jvb2woT1BUX1FVSUVUX1JBKSkKKwkJICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sICJSVFItQURWRVJUKCVzKSAlcyBvbGQgcHJlZml4IiwgaWZhY2VfbmFtZSwgZGFlbW9uLT5hZGRyYnVmZik7IAkJICAgIAorCQl9CisJICAgCisJICAgICAgdXAgPSAmY29udGV4dC0+bmV4dDsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl1cCA9ICZjb250ZXh0LT5uZXh0OworICAgIH0KKyAgICAKKyAgLyogSWYgd2UncmUgYWR2ZXJ0aXNpbmcgb25seSBvbGQgcHJlZml4ZXMsIHNldCByb3V0ZXIgbGlmZXRpbWUgdG8gemVyby4gKi8KKyAgaWYgKG9sZF9wcmVmaXggJiYgIXBhcm0uZm91bmRfY29udGV4dCkKKyAgICByYS0+bGlmZXRpbWUgPSBodG9ucygwKTsKKworICAvKiBObyBwcmVmaXhlcyB0byBhZHZlcnRpc2UuICovCisgIGlmICghb2xkX3ByZWZpeCAmJiAhcGFybS5mb3VuZF9jb250ZXh0KQorICAgIHJldHVybjsgCisgIAorICAvKiBJZiB3ZSdyZSBzZW5kaW5nIHJvdXRlciBhZGRyZXNzIGluc3RlYWQgb2YgcHJlZml4IGluIGF0IGxlYXN0IG9uIHByZWZpeCwKKyAgICAgaW5jbHVkZSB0aGUgYWR2ZXJ0aXNlbWVudCBpbnRlcnZhbCBvcHRpb24uICovCisgIGlmIChwYXJtLmFkdl9yb3V0ZXIpCisgICAgeworICAgICAgcHV0X29wdDZfY2hhcihJQ01QNl9PUFRfQURWX0lOVEVSVkFMKTsKKyAgICAgIHB1dF9vcHQ2X2NoYXIoMSk7CisgICAgICBwdXRfb3B0Nl9zaG9ydCgwKTsKKyAgICAgIC8qIGludGVydmFsIHZhbHVlIGlzIGluIG1pbGxpc2Vjb25kcyAqLworICAgICAgcHV0X29wdDZfbG9uZygxMDAwICogY2FsY19pbnRlcnZhbChmaW5kX2lmYWNlX3BhcmFtKGlmYWNlX25hbWUpKSk7CisgICAgfQorCisjaWZkZWYgSEFWRV9MSU5VWF9ORVRXT1JLCisgIC8qIE5vdGUgdGhhdCBJUHY2IE1UVSBpcyBub3QgbmVjZXNzYXJpbGx5IHRoZSBzYW1lIGFzIHRoZSBJUHY0IE1UVQorICAgICBhdmFpbGFibGUgZnJvbSBTSU9DR0lGTVRVICovCisgIHNwcmludGYoZGFlbW9uLT5uYW1lYnVmZiwgIi9wcm9jL3N5cy9uZXQvaXB2Ni9jb25mLyVzL210dSIsIGlmYWNlX25hbWUpOworICBpZiAoKGYgPSBmb3BlbihkYWVtb24tPm5hbWVidWZmLCAiciIpKSkKKyAgICB7CisgICAgICBpZiAoZmdldHMoZGFlbW9uLT5uYW1lYnVmZiwgTUFYRE5BTUUsIGYpKQorCXsKKwkgIHB1dF9vcHQ2X2NoYXIoSUNNUDZfT1BUX01UVSk7CisJICBwdXRfb3B0Nl9jaGFyKDEpOworCSAgcHV0X29wdDZfc2hvcnQoMCk7CisJICBwdXRfb3B0Nl9sb25nKGF0b2koZGFlbW9uLT5uYW1lYnVmZikpOworCX0KKyAgICAgIGZjbG9zZShmKTsKKyAgICB9CisjZW5kaWYKKyAgICAgCisgIGlmYWNlX2VudW1lcmF0ZShBRl9MT0NBTCwgJmlmYWNlLCBhZGRfbGxhKTsKKyAKKyAgLyogUkROU1MsIFJGQyA2MTA2LCB1c2UgcmVsZXZhbnQgREhDUDYgb3B0aW9ucyAqLworICAodm9pZClvcHRpb25fZmlsdGVyKHBhcm0udGFncywgTlVMTCwgZGFlbW9uLT5kaGNwX29wdHM2KTsKKyAgCisgIGZvciAob3B0X2NmZyA9IGRhZW1vbi0+ZGhjcF9vcHRzNjsgb3B0X2NmZzsgb3B0X2NmZyA9IG9wdF9jZmctPm5leHQpCisgICAgeworICAgICAgaW50IGk7CisgICAgICAKKyAgICAgIC8qIG5ldGlkcyBtYXRjaCBhbmQgbm90IGVuY2Fwc3VsYXRlZD8gKi8KKyAgICAgIGlmICghKG9wdF9jZmctPmZsYWdzICYgREhPUFRfVEFHT0spKQorICAgICAgICBjb250aW51ZTsKKyAgICAgIAorICAgICAgaWYgKG9wdF9jZmctPm9wdCA9PSBPUFRJT042X0ROU19TRVJWRVIpCisgICAgICAgIHsKKwkgIHN0cnVjdCBpbjZfYWRkciAqYTsKKwkgIGludCBsZW47CisKKwkgIGRvbmVfZG5zID0gMTsKKworICAgICAgICAgIGlmIChvcHRfY2ZnLT5sZW4gPT0gMCkKKwkgICAgY29udGludWU7CisJICAKKwkgIC8qIHJlZHVjZSBsZW4gZm9yIGFueSBhZGRyZXNzZXMgd2UgY2FuJ3Qgc3Vic3RpdHV0ZSAqLworCSAgZm9yIChhID0gKHN0cnVjdCBpbjZfYWRkciAqKW9wdF9jZmctPnZhbCwgbGVuID0gb3B0X2NmZy0+bGVuLCBpID0gMDsgCisJICAgICAgIGkgPCBvcHRfY2ZnLT5sZW47IGkgKz0gSU42QUREUlNaLCBhKyspCisJICAgIGlmICgoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoYSkgJiYgcGFybS5nbG9iX3ByZWZfdGltZSA9PSAwKSB8fAorCQkoSU42X0lTX0FERFJfVUxBX1pFUk8oYSkgJiYgcGFybS51bGFfcHJlZl90aW1lID09IDApIHx8CisJCShJTjZfSVNfQUREUl9MSU5LX0xPQ0FMX1pFUk8oYSkgJiYgcGFybS5saW5rX3ByZWZfdGltZSA9PSAwKSkKKwkgICAgICBsZW4gLT0gSU42QUREUlNaOworCisJICBpZiAobGVuICE9IDApCisJICAgIHsKKwkgICAgICBwdXRfb3B0Nl9jaGFyKElDTVA2X09QVF9SRE5TUyk7CisJICAgICAgcHV0X29wdDZfY2hhcigobGVuLzgpICsgMSk7CisJICAgICAgcHV0X29wdDZfc2hvcnQoMCk7CisJICAgICAgcHV0X29wdDZfbG9uZyhtaW5fcHJlZl90aW1lKTsKKwkgCisJICAgICAgZm9yIChhID0gKHN0cnVjdCBpbjZfYWRkciAqKW9wdF9jZmctPnZhbCwgaSA9IDA7IGkgPCAgb3B0X2NmZy0+bGVuOyBpICs9IElONkFERFJTWiwgYSsrKQorCQlpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoYSkpCisJCSAgeworCQkgICAgaWYgKHBhcm0uZ2xvYl9wcmVmX3RpbWUgIT0gMCkKKwkJICAgICAgcHV0X29wdDYoJnBhcm0ubGlua19nbG9iYWwsIElONkFERFJTWik7CisJCSAgfQorCQllbHNlIGlmIChJTjZfSVNfQUREUl9VTEFfWkVSTyhhKSkKKwkJICB7CisJCSAgICBpZiAocGFybS51bGFfcHJlZl90aW1lICE9IDApCisJCSAgICBwdXRfb3B0NigmcGFybS51bGEsIElONkFERFJTWik7CisJCSAgfQorCQllbHNlIGlmIChJTjZfSVNfQUREUl9MSU5LX0xPQ0FMX1pFUk8oYSkpCisJCSAgeworCQkgICAgaWYgKHBhcm0ubGlua19wcmVmX3RpbWUgIT0gMCkKKwkJICAgICAgcHV0X29wdDYoJnBhcm0ubGlua19sb2NhbCwgSU42QUREUlNaKTsKKwkJICB9CisJCWVsc2UKKwkJICBwdXRfb3B0NihhLCBJTjZBRERSU1opOworCSAgICB9CisJfQorICAgICAgCisgICAgICBpZiAob3B0X2NmZy0+b3B0ID09IE9QVElPTjZfRE9NQUlOX1NFQVJDSCAmJiBvcHRfY2ZnLT5sZW4gIT0gMCkKKwl7CisJICBpbnQgbGVuID0gKChvcHRfY2ZnLT5sZW4rNykvOCk7CisJICAKKwkgIHB1dF9vcHQ2X2NoYXIoSUNNUDZfT1BUX0ROU1NMKTsKKwkgIHB1dF9vcHQ2X2NoYXIobGVuICsgMSk7CisJICBwdXRfb3B0Nl9zaG9ydCgwKTsKKwkgIHB1dF9vcHQ2X2xvbmcobWluX3ByZWZfdGltZSk7IAorCSAgcHV0X29wdDYob3B0X2NmZy0+dmFsLCBvcHRfY2ZnLT5sZW4pOworCSAgCisJICAvKiBwYWQgKi8KKwkgIGZvciAoaSA9IG9wdF9jZmctPmxlbjsgaSA8IGxlbiAqIDg7IGkrKykKKwkgICAgcHV0X29wdDZfY2hhcigwKTsKKwl9CisgICAgfQorCQorICBpZiAoZGFlbW9uLT5wb3J0ID09IE5BTUVTRVJWRVJfUE9SVCAmJiAhZG9uZV9kbnMgJiYgcGFybS5saW5rX3ByZWZfdGltZSAhPSAwKQorICAgIHsKKyAgICAgIC8qIGRlZmF1bHQgPT0gdXMsIGFzIGxvbmcgYXMgd2UgYXJlIHN1cHBseWluZyBETlMgc2VydmljZS4gKi8KKyAgICAgIHB1dF9vcHQ2X2NoYXIoSUNNUDZfT1BUX1JETlNTKTsKKyAgICAgIHB1dF9vcHQ2X2NoYXIoMyk7CisgICAgICBwdXRfb3B0Nl9zaG9ydCgwKTsKKyAgICAgIHB1dF9vcHQ2X2xvbmcobWluX3ByZWZfdGltZSk7IAorICAgICAgcHV0X29wdDYoJnBhcm0ubGlua19sb2NhbCwgSU42QUREUlNaKTsKKyAgICB9CisKKyAgLyogc2V0IG1hbmFnZWQgYml0cyB1bmxlc3Mgd2UncmUgcHJvdmlkaW5nIG9ubHkgUkEgb24gdGhpcyBsaW5rICovCisgIGlmIChwYXJtLm1hbmFnZWQpCisgICAgcmEtPmZsYWdzIHw9IDB4ODA7IC8qIE0gZmxhZywgbWFuYWdlZCwgKi8KKyAgIGlmIChwYXJtLm90aGVyKQorICAgIHJhLT5mbGFncyB8PSAweDQwOyAvKiBPIGZsYWcsIG90aGVyICovIAorCQkJCisgIC8qIGRlY2lkZSB3aGVyZSB3ZSdyZSBzZW5kaW5nICovCisgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorICBhZGRyLnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisgIGFkZHIuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgYWRkci5zaW42X3BvcnQgPSBodG9ucyhJUFBST1RPX0lDTVBWNik7CisgIGlmIChkZXN0KQorICAgIHsKKyAgICAgIGFkZHIuc2luNl9hZGRyID0gKmRlc3Q7CisgICAgICBpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKGRlc3QpIHx8CisJICBJTjZfSVNfQUREUl9NQ19MSU5LTE9DQUwoZGVzdCkpCisJYWRkci5zaW42X3Njb3BlX2lkID0gaWZhY2U7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaW5ldF9wdG9uKEFGX0lORVQ2LCBBTExfTk9ERVMsICZhZGRyLnNpbjZfYWRkcik7IAorICAgICAgc2V0c29ja29wdChkYWVtb24tPmljbXA2ZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9NVUxUSUNBU1RfSUYsICZpZmFjZSwgc2l6ZW9mKGlmYWNlKSk7CisgICAgfQorICAKKyAgd2hpbGUgKHNlbmR0byhkYWVtb24tPmljbXA2ZmQsIGRhZW1vbi0+b3V0cGFja2V0Lmlvdl9iYXNlLCBzYXZlX2NvdW50ZXIoMCksIDAsIAorCQkoc3RydWN0IHNvY2thZGRyICopJmFkZHIsIHNpemVvZihhZGRyKSkgPT0gLTEgJiYgcmV0cnlfc2VuZCgpKTsKKyAgCit9CisKK3N0YXRpYyBpbnQgYWRkX3ByZWZpeGVzKHN0cnVjdCBpbjZfYWRkciAqbG9jYWwsICBpbnQgcHJlZml4LAorCQkJaW50IHNjb3BlLCBpbnQgaWZfaW5kZXgsIGludCBmbGFncywgCisJCQl1bnNpZ25lZCBpbnQgcHJlZmVycmVkLCB1bnNpZ25lZCBpbnQgdmFsaWQsIHZvaWQgKnZwYXJhbSkKK3sKKyAgc3RydWN0IHJhX3BhcmFtICpwYXJhbSA9IHZwYXJhbTsKKworICAodm9pZClzY29wZTsgLyogd2FybmluZyAqLworICAKKyAgaWYgKGlmX2luZGV4ID09IHBhcmFtLT5pbmQpCisgICAgeworICAgICAgaWYgKElONl9JU19BRERSX0xJTktMT0NBTChsb2NhbCkpCisJeworCSAgLyogQ2FuIHRoZXJlIGJlIG1vcmUgdGhhbiBvbmUgTEwgYWRkcmVzcz8KKwkgICAgIFNlbGVjdCB0aGUgb25lIHdpdGggdGhlIGxvbmdlc3QgcHJlZmVycmVkIHRpbWUgCisJICAgICBpZiB0aGVyZSBpcy4gKi8KKwkgIGlmIChwcmVmZXJyZWQgPiBwYXJhbS0+bGlua19wcmVmX3RpbWUpCisJICAgIHsKKwkgICAgICBwYXJhbS0+bGlua19wcmVmX3RpbWUgPSBwcmVmZXJyZWQ7CisJICAgICAgcGFyYW0tPmxpbmtfbG9jYWwgPSAqbG9jYWw7CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmICghSU42X0lTX0FERFJfTE9PUEJBQ0sobG9jYWwpICYmCisJICAgICAgICFJTjZfSVNfQUREUl9NVUxUSUNBU1QobG9jYWwpKQorCXsKKwkgIGludCByZWFsX3ByZWZpeCA9IDA7CisJICBpbnQgZG9fc2xhYWMgPSAwOworCSAgaW50IGRlcHJlY2F0ZSAgPSAwOworCSAgaW50IGNvbnN0cnVjdGVkID0gMDsKKwkgIGludCBhZHZfcm91dGVyID0gMDsKKwkgIHVuc2lnbmVkIGludCB0aW1lID0gMHhmZmZmZmZmZjsKKwkgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQ7CisJICAKKwkgIGZvciAoY29udGV4dCA9IGRhZW1vbi0+ZGhjcDY7IGNvbnRleHQ7IGNvbnRleHQgPSBjb250ZXh0LT5uZXh0KQorCSAgICBpZiAoIShjb250ZXh0LT5mbGFncyAmIChDT05URVhUX1RFTVBMQVRFIHwgQ09OVEVYVF9PTEQpKSAmJgorCQlwcmVmaXggPD0gY29udGV4dC0+cHJlZml4ICYmCisJCWlzX3NhbWVfbmV0Nihsb2NhbCwgJmNvbnRleHQtPnN0YXJ0NiwgY29udGV4dC0+cHJlZml4KSAmJgorCQlpc19zYW1lX25ldDYobG9jYWwsICZjb250ZXh0LT5lbmQ2LCBjb250ZXh0LT5wcmVmaXgpKQorCSAgICAgIHsKKwkJY29udGV4dC0+c2F2ZWRfdmFsaWQgPSB2YWxpZDsKKworCQlpZiAoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX1JBKSAKKwkJICB7CisJCSAgICBkb19zbGFhYyA9IDE7CisJCSAgICBpZiAoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX0RIQ1ApCisJCSAgICAgIHsKKwkJCXBhcmFtLT5vdGhlciA9IDE7IAorCQkJaWYgKCEoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX1JBX1NUQVRFTEVTUykpCisJCQkgIHBhcmFtLT5tYW5hZ2VkID0gMTsKKwkJICAgICAgfQorCQkgIH0KKwkJZWxzZQorCQkgIHsKKwkJICAgIC8qIGRvbid0IGRvIFJBIGZvciBub24tcmEtb25seSB1bmxlc3MgLS1lbmFibGUtcmEgaXMgc2V0ICovCisJCSAgICBpZiAoIW9wdGlvbl9ib29sKE9QVF9SQSkpCisJCSAgICAgIGNvbnRpbnVlOworCQkgICAgcGFyYW0tPm1hbmFnZWQgPSAxOworCQkgICAgcGFyYW0tPm90aGVyID0gMTsKKwkJICB9CisKKwkJLyogQ29uZmlndXJlZCB0byBhZHZlcnRpc2Ugcm91dGVyIGFkZHJlc3MsIG5vdCBwcmVmaXguIFNlZSBSRkMgMzc3NSA3LjIgCisJCSBJbiB0aGlzIGNhc2Ugd2UgZG8gYWxsIGFkZHJlc3NlcyBhc3NvY2lhdGVkIHdpdGggYSBjb250ZXh0LCAKKwkJIGhlbmNlIHRoZSByZWFsX3ByZWZpeCBzZXR0aW5nIGhlcmUuICovCisJCWlmIChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfUkFfUk9VVEVSKQorCQkgIHsKKwkJICAgIGFkdl9yb3V0ZXIgPSAxOworCQkgICAgcGFyYW0tPmFkdl9yb3V0ZXIgPSAxOworCQkgICAgcmVhbF9wcmVmaXggPSBjb250ZXh0LT5wcmVmaXg7CisJCSAgfQorCisJCS8qIGZpbmQgZmxvb3IgdGltZSwgZG9uJ3QgcmVkdWNlIGJlbG93IDMgKiBSQSBpbnRlcnZhbC4gKi8KKwkJaWYgKHRpbWUgPiBjb250ZXh0LT5sZWFzZV90aW1lKQorCQkgIHsKKwkJICAgIHRpbWUgPSBjb250ZXh0LT5sZWFzZV90aW1lOworCQkgICAgaWYgKHRpbWUgPCAoKHVuc2lnbmVkIGludCkoMyAqIHBhcmFtLT5hZHZfaW50ZXJ2YWwpKSkKKwkJICAgICAgdGltZSA9IDMgKiBwYXJhbS0+YWR2X2ludGVydmFsOworCQkgIH0KKworCQlpZiAoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX0RFUFJFQ0FURSkKKwkJICBkZXByZWNhdGUgPSAxOworCQkKKwkJaWYgKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9DT05TVFJVQ1RFRCkKKwkJICBjb25zdHJ1Y3RlZCA9IDE7CisKKworCQkvKiBjb2xsZWN0IGRoY3AtcmFuZ2UgdGFncyAqLworCQlpZiAoY29udGV4dC0+bmV0aWQubmV4dCA9PSAmY29udGV4dC0+bmV0aWQgJiYgY29udGV4dC0+bmV0aWQubmV0KQorCQkgIHsKKwkJICAgIGNvbnRleHQtPm5ldGlkLm5leHQgPSBwYXJhbS0+dGFnczsKKwkJICAgIHBhcmFtLT50YWdzID0gJmNvbnRleHQtPm5ldGlkOworCQkgIH0KKwkJICAKKwkJLyogc3Vic2VxdWVudCBwcmVmaXhlcyBvbiB0aGUgc2FtZSBpbnRlcmZhY2UgCisJCSAgIGFuZCBzdWJzZXF1ZW50IGluc3RhbmNlcyBvZiB0aGlzIHByZWZpeCBkb24ndCBuZWVkIHRpbWVycy4KKwkJICAgQmUgY2FyZWZ1bCBub3QgdG8gZmluZCB0aGUgc2FtZSBwcmVmaXggdHdpY2Ugd2l0aCBkaWZmZXJlbnQKKwkJICAgYWRkcmVzc2VzIHVubGVzcyB3ZSdyZSBhZHZlcnRpc2luZyB0aGUgYWN0dWFsIGFkZHJlc3Nlcy4gKi8KKwkJaWYgKCEoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX1JBX0RPTkUpKQorCQkgIHsKKwkJICAgIGlmICghcGFyYW0tPmZpcnN0KQorCQkgICAgICBjb250ZXh0LT5yYV90aW1lID0gMDsKKwkJICAgIGNvbnRleHQtPmZsYWdzIHw9IENPTlRFWFRfUkFfRE9ORTsKKwkJICAgIHJlYWxfcHJlZml4ID0gY29udGV4dC0+cHJlZml4OworCQkgIH0KKworCQlwYXJhbS0+Zmlyc3QgPSAwOwkKKwkJcGFyYW0tPmZvdW5kX2NvbnRleHQgPSAxOworCSAgICAgIH0KKworCSAgLyogY29uZmlndXJlZCB0aW1lIGlzIGNlaWxpbmcgKi8KKwkgIGlmICghY29uc3RydWN0ZWQgfHwgdmFsaWQgPiB0aW1lKQorCSAgICB2YWxpZCA9IHRpbWU7CisJICAKKwkgIGlmIChmbGFncyAmIElGQUNFX0RFUFJFQ0FURUQpCisJICAgIHByZWZlcnJlZCA9IDA7CisJICAKKwkgIGlmIChkZXByZWNhdGUpCisJICAgIHRpbWUgPSAwOworCSAgCisJICAvKiBjb25maWd1cmVkIHRpbWUgaXMgY2VpbGluZyAqLworCSAgaWYgKCFjb25zdHJ1Y3RlZCB8fCBwcmVmZXJyZWQgPiB0aW1lKQorCSAgICBwcmVmZXJyZWQgPSB0aW1lOworCSAgCisJICBpZiAoSU42X0lTX0FERFJfVUxBKGxvY2FsKSkKKwkgICAgeworCSAgICAgIGlmIChwcmVmZXJyZWQgPiBwYXJhbS0+dWxhX3ByZWZfdGltZSkKKwkJeworCQkgIHBhcmFtLT51bGFfcHJlZl90aW1lID0gcHJlZmVycmVkOworCQkgIHBhcmFtLT51bGEgPSAqbG9jYWw7CisJCX0KKwkgICAgfQorCSAgZWxzZSAKKwkgICAgeworCSAgICAgIGlmIChwcmVmZXJyZWQgPiBwYXJhbS0+Z2xvYl9wcmVmX3RpbWUpCisJCXsKKwkJICBwYXJhbS0+Z2xvYl9wcmVmX3RpbWUgPSBwcmVmZXJyZWQ7CisJCSAgcGFyYW0tPmxpbmtfZ2xvYmFsID0gKmxvY2FsOworCQl9CisJICAgIH0KKwkgIAorCSAgaWYgKHJlYWxfcHJlZml4ICE9IDApCisJICAgIHsKKwkgICAgICBzdHJ1Y3QgcHJlZml4X29wdCAqb3B0OworCSAgICAgCSAgICAgIAorCSAgICAgIGlmICgob3B0ID0gZXhwYW5kKHNpemVvZihzdHJ1Y3QgcHJlZml4X29wdCkpKSkKKwkJeworCQkgIC8qIHplcm8gbmV0IHBhcnQgb2YgYWRkcmVzcyAqLworCQkgIGlmICghYWR2X3JvdXRlcikKKwkJICAgIHNldGFkZHI2cGFydChsb2NhbCwgYWRkcjZwYXJ0KGxvY2FsKSAmIH4oKHJlYWxfcHJlZml4ID09IDY0KSA/ICh1NjQpLTFMTCA6ICgxTExVIDw8ICgxMjggLSByZWFsX3ByZWZpeCkpIC0gMUxMVSkpOworCQkgIAorCQkgIG9wdC0+dHlwZSA9IElDTVA2X09QVF9QUkVGSVg7CisJCSAgb3B0LT5sZW4gPSA0OworCQkgIG9wdC0+cHJlZml4X2xlbiA9IHJlYWxfcHJlZml4OworCQkgIC8qIGF1dG9ub21vdXMgb25seSBpZiB3ZSdyZSBub3QgZG9pbmcgZGhjcCwgYWx3YXlzIHNldCAib24tbGluayIgKi8KKwkJICBvcHQtPmZsYWdzID0gMHg4MDsKKwkJICBpZiAoZG9fc2xhYWMpCisJCSAgICBvcHQtPmZsYWdzIHw9IDB4NDA7CisJCSAgaWYgKGFkdl9yb3V0ZXIpCisJCSAgICBvcHQtPmZsYWdzIHw9IDB4MjA7CisJCSAgb3B0LT52YWxpZF9saWZldGltZSA9IGh0b25sKHZhbGlkKTsKKwkJICBvcHQtPnByZWZlcnJlZF9saWZldGltZSA9IGh0b25sKHByZWZlcnJlZCk7CisJCSAgb3B0LT5yZXNlcnZlZCA9IDA7IAorCQkgIG9wdC0+cHJlZml4ID0gKmxvY2FsOworCQkgIAorCQkgIGluZXRfbnRvcChBRl9JTkVUNiwgbG9jYWwsIGRhZW1vbi0+YWRkcmJ1ZmYsIEFERFJTVFJMRU4pOworCQkgIGlmICghb3B0aW9uX2Jvb2woT1BUX1FVSUVUX1JBKSkKKwkJICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sICJSVFItQURWRVJUKCVzKSAlcyIsIHBhcmFtLT5pZl9uYW1lLCBkYWVtb24tPmFkZHJidWZmKTsgCQkgICAgCisJCX0KKwkgICAgfQorCX0KKyAgICB9ICAgICAgICAgIAorICByZXR1cm4gMTsKK30KKworc3RhdGljIGludCBhZGRfbGxhKGludCBpbmRleCwgdW5zaWduZWQgaW50IHR5cGUsIGNoYXIgKm1hYywgc2l6ZV90IG1hY2xlbiwgdm9pZCAqcGFybSkKK3sKKyAgKHZvaWQpdHlwZTsKKworICBpZiAoaW5kZXggPT0gKigoaW50ICopcGFybSkpCisgICAgeworICAgICAgLyogc2l6ZSBpcyBpbiB1bml0cyBvZiA4IG9jdGV0cyBhbmQgaW5jbHVkZXMgdHlwZSBhbmQgbGVuZ3RoICgyIGJ5dGVzKQorCSBhZGQgNyB0byByb3VuZCB1cCAqLworICAgICAgaW50IGxlbiA9IChtYWNsZW4gKyA5KSA+PiAzOworICAgICAgdW5zaWduZWQgY2hhciAqcCA9IGV4cGFuZChsZW4gPDwgMyk7CisgICAgICBtZW1zZXQocCwgMCwgbGVuIDw8IDMpOworICAgICAgKnArKyA9IElDTVA2X09QVF9TT1VSQ0VfTUFDOworICAgICAgKnArKyA9IGxlbjsKKyAgICAgIG1lbWNweShwLCBtYWMsIG1hY2xlbik7CisKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICByZXR1cm4gMTsKK30KKwordGltZV90IHBlcmlvZGljX3JhKHRpbWVfdCBub3cpCit7CisgIHN0cnVjdCBzZWFyY2hfcGFyYW0gcGFyYW07CisgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQ7CisgIHRpbWVfdCBuZXh0X2V2ZW50OworICAgIAorICBwYXJhbS5ub3cgPSBub3c7CisgIHBhcmFtLmlmYWNlID0gMDsKKworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICAvKiBmaW5kIG92ZXJkdWUgZXZlbnRzLCBhbmQgdGltZSBvZiBmaXJzdCBmdXR1cmUgZXZlbnQgKi8KKyAgICAgIGZvciAobmV4dF9ldmVudCA9IDAsIGNvbnRleHQgPSBkYWVtb24tPmRoY3A2OyBjb250ZXh0OyBjb250ZXh0ID0gY29udGV4dC0+bmV4dCkKKwlpZiAoY29udGV4dC0+cmFfdGltZSAhPSAwKQorCSAgeworCSAgICBpZiAoZGlmZnRpbWUoY29udGV4dC0+cmFfdGltZSwgbm93KSA8PSAwLjApCisJICAgICAgYnJlYWs7IC8qIG92ZXJkdWUgKi8KKwkgICAgCisJICAgIGlmIChuZXh0X2V2ZW50ID09IDAgfHwgZGlmZnRpbWUobmV4dF9ldmVudCwgY29udGV4dC0+cmFfdGltZSkgPiAwLjApCisJICAgICAgbmV4dF9ldmVudCA9IGNvbnRleHQtPnJhX3RpbWU7CisJICB9CisgICAgICAKKyAgICAgIC8qIG5vbmUgb3ZlcmR1ZSAqLworICAgICAgaWYgKCFjb250ZXh0KQorCWJyZWFrOworICAgICAgCisgICAgICBpZiAoKGNvbnRleHQtPmZsYWdzICYgQ09OVEVYVF9PTEQpICYmIAorCSAgY29udGV4dC0+aWZfaW5kZXggIT0gMCAmJiAKKwkgIGluZGV4dG9uYW1lKGRhZW1vbi0+aWNtcDZmZCwgY29udGV4dC0+aWZfaW5kZXgsIHBhcmFtLm5hbWUpKQorCXsKKwkgIC8qIEEgY29udGV4dCBmb3IgYW4gb2xkIGFkZHJlc3MuIFdlJ2xsIG5vdCBmaW5kIHRoZSBpbnRlcmZhY2UgYnkgCisJICAgICBsb29raW5nIGZvciBhZGRyZXNzZXMsIGJ1dCB3ZSBrbm93IGl0IGFueXdheSwgc2luY2UgdGhlIGNvbnRleHQgaXMKKwkgICAgIGNvbnN0cnVjdGVkICovCisJICBwYXJhbS5pZmFjZSA9IGNvbnRleHQtPmlmX2luZGV4OworCSAgbmV3X3RpbWVvdXQoY29udGV4dCwgcGFyYW0ubmFtZSwgbm93KTsKKwl9CisgICAgICBlbHNlIGlmIChpZmFjZV9lbnVtZXJhdGUoQUZfSU5FVDYsICZwYXJhbSwgaWZhY2Vfc2VhcmNoKSkKKwkvKiBUaGVyZSdzIGEgY29udGV4dCBvdmVyZHVlLCBidXQgd2UgY2FuJ3QgZmluZCBhbiBpbnRlcmZhY2UKKwkgICBhc3NvY2lhdGVkIHdpdGggaXQsIGJlY2F1c2UgaXQncyBmb3IgYSBzdWJuZXQgd2UgZG9udCAKKwkgICBoYXZlIGFuIGludGVyZmFjZSBvbi4gUHJvYmFibHkgd2UncmUgZG9pbmcgREhDUCBvbgorCSAgIGEgcmVtb3RlIHN1Ym5ldCB2aWEgYSByZWxheS4gWmVybyB0aGUgdGltZXIsIHNpbmNlIHdlIHdvbid0CisJICAgZXZlciBiZSBhYmxlIHRvIHNlbmQgcmEncyBhbmQgc2F0aXN0ZnkgaXQuICovCisJY29udGV4dC0+cmFfdGltZSA9IDA7CisgICAgICAKKyAgICAgIGlmIChwYXJhbS5pZmFjZSAhPSAwICYmCisJICBpZmFjZV9jaGVjayhBRl9MT0NBTCwgTlVMTCwgcGFyYW0ubmFtZSwgTlVMTCkpCisJeworCSAgc3RydWN0IGluYW1lICp0bXA7CisJICBmb3IgKHRtcCA9IGRhZW1vbi0+ZGhjcF9leGNlcHQ7IHRtcDsgdG1wID0gdG1wLT5uZXh0KQorCSAgICBpZiAodG1wLT5uYW1lICYmIHdpbGRjYXJkX21hdGNoKHRtcC0+bmFtZSwgcGFyYW0ubmFtZSkpCisJICAgICAgYnJlYWs7CisJICBpZiAoIXRtcCkKKwkgICAgc2VuZF9yYShub3csIHBhcmFtLmlmYWNlLCBwYXJhbS5uYW1lLCBOVUxMKTsgCisJfQorICAgIH0gICAgICAKKyAgcmV0dXJuIG5leHRfZXZlbnQ7Cit9CisgIAorc3RhdGljIGludCBpZmFjZV9zZWFyY2goc3RydWN0IGluNl9hZGRyICpsb2NhbCwgIGludCBwcmVmaXgsCisJCQlpbnQgc2NvcGUsIGludCBpZl9pbmRleCwgaW50IGZsYWdzLCAKKwkJCWludCBwcmVmZXJyZWQsIGludCB2YWxpZCwgdm9pZCAqdnBhcmFtKQoreworICBzdHJ1Y3Qgc2VhcmNoX3BhcmFtICpwYXJhbSA9IHZwYXJhbTsKKyAgc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dDsKKworICAodm9pZClzY29wZTsKKyAgKHZvaWQpcHJlZmVycmVkOworICAodm9pZCl2YWxpZDsKKyAKKyAgZm9yIChjb250ZXh0ID0gZGFlbW9uLT5kaGNwNjsgY29udGV4dDsgY29udGV4dCA9IGNvbnRleHQtPm5leHQpCisgICAgaWYgKCEoY29udGV4dC0+ZmxhZ3MgJiAoQ09OVEVYVF9URU1QTEFURSB8IENPTlRFWFRfT0xEKSkgJiYKKwlwcmVmaXggPD0gY29udGV4dC0+cHJlZml4ICYmCisJaXNfc2FtZV9uZXQ2KGxvY2FsLCAmY29udGV4dC0+c3RhcnQ2LCBjb250ZXh0LT5wcmVmaXgpICYmCisJaXNfc2FtZV9uZXQ2KGxvY2FsLCAmY29udGV4dC0+ZW5kNiwgY29udGV4dC0+cHJlZml4KSAmJgorCWNvbnRleHQtPnJhX3RpbWUgIT0gMCAmJiAKKwlkaWZmdGltZShjb250ZXh0LT5yYV90aW1lLCBwYXJhbS0+bm93KSA8PSAwLjApCisgICAgICB7CisJLyogZm91bmQgYW4gaW50ZXJmYWNlIHRoYXQncyBvdmVyZHVlIGZvciBSQSBkZXRlcm1pbmUgbmV3IAorCSAgIHRpbWVvdXQgdmFsdWUgYW5kIGFycmFuZ2UgZm9yIFJBIHRvIGJlIHNlbnQgdW5sZXNzIGludGVyZmFjZSBpcworCSAgIHN0aWxsIGRvaW5nIERBRC4qLworCQorCWlmICghKGZsYWdzICYgSUZBQ0VfVEVOVEFUSVZFKSkKKwkgIHBhcmFtLT5pZmFjZSA9IGlmX2luZGV4OworCQorCS8qIHNob3VsZCBuZXZlciBmYWlsICovCisJaWYgKCFpbmRleHRvbmFtZShkYWVtb24tPmljbXA2ZmQsIGlmX2luZGV4LCBwYXJhbS0+bmFtZSkpCisJICB7CisJICAgIHBhcmFtLT5pZmFjZSA9IDA7CisJICAgIHJldHVybiAwOworCSAgfQorCQorCW5ld190aW1lb3V0KGNvbnRleHQsIHBhcmFtLT5uYW1lLCBwYXJhbS0+bm93KTsKKwkKKwkvKiB6ZXJvIHRpbWVycyBmb3Igb3RoZXIgY29udGV4dHMgb24gdGhlIHNhbWUgc3VibmV0LCBzbyB0aGV5IGRvbid0IHRpbWVvdXQgCisJICAgaW5kZXBlbmRlbnRseSAqLworCWZvciAoY29udGV4dCA9IGNvbnRleHQtPm5leHQ7IGNvbnRleHQ7IGNvbnRleHQgPSBjb250ZXh0LT5uZXh0KQorCSAgaWYgKHByZWZpeCA8PSBjb250ZXh0LT5wcmVmaXggJiYKKwkgICAgICBpc19zYW1lX25ldDYobG9jYWwsICZjb250ZXh0LT5zdGFydDYsIGNvbnRleHQtPnByZWZpeCkgJiYKKwkgICAgICBpc19zYW1lX25ldDYobG9jYWwsICZjb250ZXh0LT5lbmQ2LCBjb250ZXh0LT5wcmVmaXgpKQorCSAgICBjb250ZXh0LT5yYV90aW1lID0gMDsKKwkKKwlyZXR1cm4gMDsgLyogZm91bmQsIGFib3J0ICovCisgICAgICB9CisgIAorICByZXR1cm4gMTsgLyoga2VlcCBzZWFyY2hpbmcgKi8KK30KKyAKK3N0YXRpYyB2b2lkIG5ld190aW1lb3V0KHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIGNoYXIgKmlmYWNlX25hbWUsIHRpbWVfdCBub3cpCit7CisgIGlmIChkaWZmdGltZShub3csIGNvbnRleHQtPnJhX3Nob3J0X3BlcmlvZF9zdGFydCkgPCA2MC4wKQorICAgIC8qIHJhbmdlIDUgLSAyMCAqLworICAgIGNvbnRleHQtPnJhX3RpbWUgPSBub3cgKyA1ICsgKHJhbmQxNigpLzQ0MDApOworICBlbHNlCisgICAgeworICAgICAgLyogcmFuZ2UgMy80IC0gMSB0aW1lcyBNYXhSdHJBZHZJbnRlcnZhbCAqLworICAgICAgdW5zaWduZWQgaW50IGFkdl9pbnRlcnZhbCA9IGNhbGNfaW50ZXJ2YWwoZmluZF9pZmFjZV9wYXJhbShpZmFjZV9uYW1lKSk7CisgICAgICBjb250ZXh0LT5yYV90aW1lID0gbm93ICsgKDMgKiBhZHZfaW50ZXJ2YWwpLzQgKyAoKGFkdl9pbnRlcnZhbCAqICh1bnNpZ25lZCBpbnQpcmFuZDE2KCkpID4+IDE4KTsKKyAgICB9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmFfaW50ZXJmYWNlICpmaW5kX2lmYWNlX3BhcmFtKGNoYXIgKmlmYWNlKQoreworICBzdHJ1Y3QgcmFfaW50ZXJmYWNlICpyYTsKKyAgCisgIGZvciAocmEgPSBkYWVtb24tPnJhX2ludGVyZmFjZXM7IHJhOyByYSA9IHJhLT5uZXh0KQorICAgIGlmICh3aWxkY2FyZF9tYXRjaChyYS0+bmFtZSwgaWZhY2UpKQorICAgICAgcmV0dXJuIHJhOworCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGNhbGNfaW50ZXJ2YWwoc3RydWN0IHJhX2ludGVyZmFjZSAqcmEpCit7CisgIGludCBpbnRlcnZhbCA9IDYwMDsKKyAgCisgIGlmIChyYSAmJiByYS0+aW50ZXJ2YWwgIT0gMCkKKyAgICB7CisgICAgICBpbnRlcnZhbCA9IHJhLT5pbnRlcnZhbDsKKyAgICAgIGlmIChpbnRlcnZhbCA+IDE4MDApCisJaW50ZXJ2YWwgPSAxODAwOworICAgICAgZWxzZSBpZiAoaW50ZXJ2YWwgPCA0KQorCWludGVydmFsID0gNDsKKyAgICB9CisgIAorICByZXR1cm4gKHVuc2lnbmVkIGludClpbnRlcnZhbDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBjYWxjX2xpZmV0aW1lKHN0cnVjdCByYV9pbnRlcmZhY2UgKnJhKQoreworICBpbnQgbGlmZXRpbWUsIGludGVydmFsID0gKGludCljYWxjX2ludGVydmFsKHJhKTsKKyAgCisgIGlmICghcmEgfHwgcmEtPmxpZmV0aW1lID09IC0xKSAvKiBub3Qgc3BlY2lmaWVkICovCisgICAgbGlmZXRpbWUgPSAzICogaW50ZXJ2YWw7CisgIGVsc2UKKyAgICB7CisgICAgICBsaWZldGltZSA9IHJhLT5saWZldGltZTsKKyAgICAgIGlmIChsaWZldGltZSA8IGludGVydmFsICYmIGxpZmV0aW1lICE9IDApCisJbGlmZXRpbWUgPSBpbnRlcnZhbDsKKyAgICAgIGVsc2UgaWYgKGxpZmV0aW1lID4gOTAwMCkKKwlsaWZldGltZSA9IDkwMDA7CisgICAgfQorICAKKyAgcmV0dXJuICh1bnNpZ25lZCBpbnQpbGlmZXRpbWU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY19wcmlvKHN0cnVjdCByYV9pbnRlcmZhY2UgKnJhKQoreworICBpZiAocmEpCisgICAgcmV0dXJuIHJhLT5wcmlvOworICAKKyAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3JmYzEwMzUuYyBiL3NyYy9yZmMxMDM1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVjNDI2NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9yZmMxMDM1LmMKQEAgLTAsMCArMSwyMzQ1IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE0IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworaW50IGV4dHJhY3RfbmFtZShzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgdW5zaWduZWQgY2hhciAqKnBwLCAKKwkJIGNoYXIgKm5hbWUsIGludCBpc0V4dHJhY3QsIGludCBleHRyYWJ5dGVzKQoreworICB1bnNpZ25lZCBjaGFyICpjcCA9ICh1bnNpZ25lZCBjaGFyICopbmFtZSwgKnAgPSAqcHAsICpwMSA9IE5VTEw7CisgIHVuc2lnbmVkIGludCBqLCBsLCBob3BzID0gMDsKKyAgaW50IHJldHZhbHVlID0gMTsKKyAgCisgIGlmIChpc0V4dHJhY3QpCisgICAgKmNwID0gMDsKKworICB3aGlsZSAoMSkKKyAgICB7IAorICAgICAgdW5zaWduZWQgaW50IGxhYmVsX3R5cGU7CisKKyAgICAgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgcCwgcGxlbiwgMSkpCisJcmV0dXJuIDA7CisgICAgICAKKyAgICAgIGlmICgobCA9ICpwKyspID09IDApIAorCS8qIGVuZCBtYXJrZXIgKi8KKwl7CisJICAvKiBjaGVjayB0aGF0IHRoZXJlIGFyZSB0aGUgY29ycmVjdCBubyBvZiBieXRlcyBhZnRlciB0aGUgbmFtZSAqLworCSAgaWYgKCFDSEVDS19MRU4oaGVhZGVyLCBwLCBwbGVuLCBleHRyYWJ5dGVzKSkKKwkgICAgcmV0dXJuIDA7CisJICAKKwkgIGlmIChpc0V4dHJhY3QpCisJICAgIHsKKwkgICAgICBpZiAoY3AgIT0gKHVuc2lnbmVkIGNoYXIgKiluYW1lKQorCQljcC0tOworCSAgICAgICpjcCA9IDA7IC8qIHRlcm1pbmF0ZTogbG9zZSBmaW5hbCBwZXJpb2QgKi8KKwkgICAgfQorCSAgZWxzZSBpZiAoKmNwICE9IDApCisJICAgIHJldHZhbHVlID0gMjsKKwkgIAorCSAgaWYgKHAxKSAvKiB3ZSBqdW1wZWQgdmlhIGNvbXByZXNzaW9uICovCisJICAgICpwcCA9IHAxOworCSAgZWxzZQorCSAgICAqcHAgPSBwOworCSAgCisJICByZXR1cm4gcmV0dmFsdWU7CisJfQorCisgICAgICBsYWJlbF90eXBlID0gbCAmIDB4YzA7CisgICAgICAKKyAgICAgIGlmIChsYWJlbF90eXBlID09IDB4YzApIC8qIHBvaW50ZXIgKi8KKwl7IAorCSAgaWYgKCFDSEVDS19MRU4oaGVhZGVyLCBwLCBwbGVuLCAxKSkKKwkgICAgcmV0dXJuIDA7CisJICAgICAgCisJICAvKiBnZXQgb2Zmc2V0ICovCisJICBsID0gKGwmMHgzZikgPDwgODsKKwkgIGwgfD0gKnArKzsKKwkgIAorCSAgaWYgKCFwMSkgLyogZmlyc3QganVtcCwgc2F2ZSBsb2NhdGlvbiB0byBnbyBiYWNrIHRvICovCisJICAgIHAxID0gcDsKKwkgICAgICAKKwkgIGhvcHMrKzsgLyogYnJlYWsgbWFsaWNpb3VzIGluZmluaXRlIGxvb3BzICovCisJICBpZiAoaG9wcyA+IDI1NSkKKwkgICAgcmV0dXJuIDA7CisJICAKKwkgIHAgPSBsICsgKHVuc2lnbmVkIGNoYXIgKiloZWFkZXI7CisJfQorICAgICAgZWxzZSBpZiAobGFiZWxfdHlwZSA9PSAweDgwKQorCXJldHVybiAwOyAvKiByZXNlcnZlZCAqLworICAgICAgZWxzZSBpZiAobGFiZWxfdHlwZSA9PSAweDQwKQorCXsgLyogRUxUICovCisJICB1bnNpZ25lZCBpbnQgY291bnQsIGRpZ3M7CisJICAKKwkgIGlmICgobCAmIDB4M2YpICE9IDEpCisJICAgIHJldHVybiAwOyAvKiB3ZSBvbmx5IHVuZGVyc3RhbmQgYml0c3RyaW5ncyAqLworCisJICBpZiAoIWlzRXh0cmFjdCkKKwkgICAgcmV0dXJuIDA7IC8qIENhbm5vdCBjb21wYXJlIGJpdHNyaW5ncyAqLworCSAgCisJICBjb3VudCA9ICpwKys7CisJICBpZiAoY291bnQgPT0gMCkKKwkgICAgY291bnQgPSAyNTY7CisJICBkaWdzID0gKChjb3VudC0xKT4+MikrMTsKKwkgIAorCSAgLyogb3V0cHV0IGlzIFxbeDxoZXg+L3Npel0uIHdoaWNoIGlzIGRpZ3MrOSBjaGFycyAqLworCSAgaWYgKGNwIC0gKHVuc2lnbmVkIGNoYXIgKiluYW1lICsgZGlncyArIDkgPj0gTUFYRE5BTUUpCisJICAgIHJldHVybiAwOworCSAgaWYgKCFDSEVDS19MRU4oaGVhZGVyLCBwLCBwbGVuLCAoY291bnQtMSk+PjMpKQorCSAgICByZXR1cm4gMDsKKworCSAgKmNwKysgPSAnXFwnOworCSAgKmNwKysgPSAnWyc7CisJICAqY3ArKyA9ICd4JzsKKwkgIGZvciAoaj0wOyBqPGRpZ3M7IGorKykKKwkgICAgeworCSAgICAgIHVuc2lnbmVkIGludCBkaWc7CisJICAgICAgaWYgKGolMiA9PSAwKQorCQlkaWcgPSAqcCA+PiA0OworCSAgICAgIGVsc2UKKwkJZGlnID0gKnArKyAmIDB4MGY7CisJICAgICAgCisJICAgICAgKmNwKysgPSBkaWcgPCAxMCA/IGRpZyArICcwJyA6IGRpZyArICdBJyAtIDEwOworCSAgICB9IAorCSAgY3AgKz0gc3ByaW50ZigoY2hhciAqKWNwLCAiLyVkXSIsIGNvdW50KTsKKwkgIC8qIGRvIHRoaXMgaGVyZSB0byBvdmVyd3JpdGUgdGhlIHplcm8gY2hhciBmcm9tIHNwcmludGYgKi8KKwkgICpjcCsrID0gJy4nOworCX0KKyAgICAgIGVsc2UgCisJeyAvKiBsYWJlbF90eXBlID0gMCAtPiBsYWJlbC4gKi8KKwkgIGlmIChjcCAtICh1bnNpZ25lZCBjaGFyICopbmFtZSArIGwgKyAxID49IE1BWEROQU1FKQorCSAgICByZXR1cm4gMDsKKwkgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgcCwgcGxlbiwgbCkpCisJICAgIHJldHVybiAwOworCSAgCisJICBmb3Ioaj0wOyBqPGw7IGorKywgcCsrKQorCSAgICBpZiAoaXNFeHRyYWN0KQorCSAgICAgIHsKKwkJdW5zaWduZWQgY2hhciBjID0gKnA7CisJCWlmIChpc2FzY2lpKGMpICYmICFpc2NudHJsKGMpICYmIGMgIT0gJy4nKQorCQkgICpjcCsrID0gKnA7CisJCWVsc2UKKwkJICByZXR1cm4gMDsKKwkgICAgICB9CisJICAgIGVsc2UgCisJICAgICAgeworCQl1bnNpZ25lZCBjaGFyIGMxID0gKmNwLCBjMiA9ICpwOworCQkKKwkJaWYgKGMxID09IDApCisJCSAgcmV0dmFsdWUgPSAyOworCQllbHNlIAorCQkgIHsKKwkJICAgIGNwKys7CisJCSAgICBpZiAoYzEgPj0gJ0EnICYmIGMxIDw9ICdaJykKKwkJICAgICAgYzEgKz0gJ2EnIC0gJ0EnOworCQkgICAgaWYgKGMyID49ICdBJyAmJiBjMiA8PSAnWicpCisJCSAgICAgIGMyICs9ICdhJyAtICdBJzsKKwkJICAgIAorCQkgICAgaWYgKGMxICE9IGMyKQorCQkgICAgICByZXR2YWx1ZSA9ICAyOworCQkgIH0KKwkgICAgICB9CisJICAKKwkgIGlmIChpc0V4dHJhY3QpCisJICAgICpjcCsrID0gJy4nOworCSAgZWxzZSBpZiAoKmNwICE9IDAgJiYgKmNwKysgIT0gJy4nKQorCSAgICByZXR2YWx1ZSA9IDI7CisJfQorICAgIH0KK30KKyAKKy8qIE1heCBzaXplIG9mIGlucHV0IHN0cmluZyAoZm9yIElQdjYpIGlzIDc1IGNoYXJzLikgKi8KKyNkZWZpbmUgTUFYQVJQQU5BTUUgNzUKK2ludCBpbl9hcnBhX25hbWVfMl9hZGRyKGNoYXIgKm5hbWVpbiwgc3RydWN0IGFsbF9hZGRyICphZGRycCkKK3sKKyAgaW50IGo7CisgIGNoYXIgbmFtZVtNQVhBUlBBTkFNRSsxXSwgKmNwMTsKKyAgdW5zaWduZWQgY2hhciAqYWRkciA9ICh1bnNpZ25lZCBjaGFyICopYWRkcnA7CisgIGNoYXIgKmxhc3RjaHVuayA9IE5VTEwsICpwZW5jaHVuayA9IE5VTEw7CisgIAorICBpZiAoc3RybGVuKG5hbWVpbikgPiBNQVhBUlBBTkFNRSkKKyAgICByZXR1cm4gMDsKKworICBtZW1zZXQoYWRkcnAsIDAsIHNpemVvZihzdHJ1Y3QgYWxsX2FkZHIpKTsKKworICAvKiB0dXJuIG5hbWUgaW50byBhIHNlcmllcyBvZiBhc2NpaXogc3RyaW5ncyAqLworICAvKiBqIGNvdW50cyBubyBvZiBsYWJlbHMgKi8KKyAgZm9yKGogPSAxLGNwMSA9IG5hbWU7ICpuYW1laW47IGNwMSsrLCBuYW1laW4rKykKKyAgICBpZiAoKm5hbWVpbiA9PSAnLicpCisgICAgICB7CisJcGVuY2h1bmsgPSBsYXN0Y2h1bms7CisgICAgICAgIGxhc3RjaHVuayA9IGNwMSArIDE7CisJKmNwMSA9IDA7CisJaisrOworICAgICAgfQorICAgIGVsc2UKKyAgICAgICpjcDEgPSAqbmFtZWluOworICAKKyAgKmNwMSA9IDA7CisKKyAgaWYgKGo8MykKKyAgICByZXR1cm4gMDsKKworICBpZiAoaG9zdG5hbWVfaXNlcXVhbChsYXN0Y2h1bmssICJhcnBhIikgJiYgaG9zdG5hbWVfaXNlcXVhbChwZW5jaHVuaywgImluLWFkZHIiKSkKKyAgICB7CisgICAgICAvKiBJUCB2NCAqLworICAgICAgLyogYWRkcmVzcyBhcml2ZXMgYXMgYSBuYW1lIG9mIHRoZSBmb3JtCisJIHd3dy54eHgueXl5Lnp6ei5pbi1hZGRyLmFycGEKKwkgc29tZSBvZiB0aGUgbG93IG9yZGVyIGFkZHJlc3Mgb2N0ZXRzIG1pZ2h0IGJlIG1pc3NpbmcKKwkgYW5kIHNob3VsZCBiZSBzZXQgdG8gemVyby4gKi8KKyAgICAgIGZvciAoY3AxID0gbmFtZTsgY3AxICE9IHBlbmNodW5rOyBjcDEgKz0gc3RybGVuKGNwMSkrMSkKKwl7CisJICAvKiBjaGVjayBmb3IgZGlnaXRzIG9ubHkgKHdlZWRzIG91dCB0aGluZ3MgbGlrZQorCSAgICAgNTAuMC8yNC42Ny4yOC42NC5pbi1hZGRyLmFycGEgd2hpY2ggYXJlIHVzZWQgCisJICAgICBhcyBDTkFNRSB0YXJnZXRzIGFjY29yZGluZyB0byBSRkMgMjMxNyAqLworCSAgY2hhciAqY3A7CisJICBmb3IgKGNwID0gY3AxOyAqY3A7IGNwKyspCisJICAgIGlmICghaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKQorCSAgICAgIHJldHVybiAwOworCSAgCisJICBhZGRyWzNdID0gYWRkclsyXTsKKwkgIGFkZHJbMl0gPSBhZGRyWzFdOworCSAgYWRkclsxXSA9IGFkZHJbMF07CisJICBhZGRyWzBdID0gYXRvaShjcDEpOworCX0KKworICAgICAgcmV0dXJuIEZfSVBWNDsKKyAgICB9CisjaWZkZWYgSEFWRV9JUFY2CisgIGVsc2UgaWYgKGhvc3RuYW1lX2lzZXF1YWwocGVuY2h1bmssICJpcDYiKSAmJiAKKwkgICAoaG9zdG5hbWVfaXNlcXVhbChsYXN0Y2h1bmssICJpbnQiKSB8fCBob3N0bmFtZV9pc2VxdWFsKGxhc3RjaHVuaywgImFycGEiKSkpCisgICAgeworICAgICAgLyogSVAgdjY6CisgICAgICAgICBBZGRyZXNzIGFycml2ZXMgYXMgMC4xLjIuMy40LjUuNi43LjguOS5hLmIuYy5kLmUuZi5pcDYuW2ludHxhcnBhXQorICAgIAkgb3IgXFt4ZmVkY2JhOTg3NjU0MzIxMGZlZGNiYTk4NzY1NDMyMTAvMTI4XS5pcDYuW2ludHxhcnBhXQorICAgICAgCisJIE5vdGUgdGhhdCBtb3N0IG9mIHRoZXNlIHRoZSB2YXJpb3VzIHJlcHJlbnRhdGlvbnMgYXJlIG9ic29sZXRlIGFuZCAKKwkgbGVmdC1vdmVyIGZyb20gdGhlIG1hbnkgRE5TLWZvci1JUHY2IHdhcnMuIFdlIHN1cHBvcnQgYWxsIHRoZSBmb3JtYXRzCisJIHRoYXQgd2UgY2FuIHNpbmNlIHRoZXJlIGlzIG5vIHJlYXNvbiBub3QgdG8uCisgICAgICAqLworCisgICAgICBpZiAoKm5hbWUgPT0gJ1xcJyAmJiAqKG5hbWUrMSkgPT0gJ1snICYmIAorCSAgKCoobmFtZSsyKSA9PSAneCcgfHwgKihuYW1lKzIpID09ICdYJykpCisJewkgIAorCSAgZm9yIChqID0gMCwgY3AxID0gbmFtZSszOyAqY3AxICYmIGlzeGRpZ2l0KCh1bnNpZ25lZCBjaGFyKSAqY3AxKSAmJiBqIDwgMzI7IGNwMSsrLCBqKyspCisJICAgIHsKKwkgICAgICBjaGFyIHhkaWdbMl07CisJICAgICAgeGRpZ1swXSA9ICpjcDE7CisJICAgICAgeGRpZ1sxXSA9IDA7CisJICAgICAgaWYgKGolMikKKwkJYWRkcltqLzJdIHw9IHN0cnRvbCh4ZGlnLCBOVUxMLCAxNik7CisJICAgICAgZWxzZQorCQlhZGRyW2ovMl0gPSBzdHJ0b2woeGRpZywgTlVMTCwgMTYpIDw8IDQ7CisJICAgIH0KKwkgIAorCSAgaWYgKCpjcDEgPT0gJy8nICYmIGogPT0gMzIpCisJICAgIHJldHVybiBGX0lQVjY7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGZvciAoY3AxID0gbmFtZTsgY3AxICE9IHBlbmNodW5rOyBjcDEgKz0gc3RybGVuKGNwMSkrMSkKKwkgICAgeworCSAgICAgIGlmICgqKGNwMSsxKSB8fCAhaXN4ZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwMSkpCisJCXJldHVybiAwOworCSAgICAgIAorCSAgICAgIGZvciAoaiA9IHNpemVvZihzdHJ1Y3QgYWxsX2FkZHIpLTE7IGo+MDsgai0tKQorCQlhZGRyW2pdID0gKGFkZHJbal0gPj4gNCkgfCAoYWRkcltqLTFdIDw8IDQpOworCSAgICAgIGFkZHJbMF0gPSAoYWRkclswXSA+PiA0KSB8IChzdHJ0b2woY3AxLCBOVUxMLCAxNikgPDwgNCk7CisJICAgIH0KKwkgIAorCSAgcmV0dXJuIEZfSVBWNjsKKwl9CisgICAgfQorI2VuZGlmCisgIAorICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgY2hhciAqc2tpcF9uYW1lKHVuc2lnbmVkIGNoYXIgKmFuc3AsIHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuLCBpbnQgZXh0cmFieXRlcykKK3sKKyAgd2hpbGUoMSkKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgbGFiZWxfdHlwZTsKKyAgICAgIAorICAgICAgaWYgKCFDSEVDS19MRU4oaGVhZGVyLCBhbnNwLCBwbGVuLCAxKSkKKwlyZXR1cm4gTlVMTDsKKyAgICAgIAorICAgICAgbGFiZWxfdHlwZSA9ICgqYW5zcCkgJiAweGMwOworCisgICAgICBpZiAobGFiZWxfdHlwZSA9PSAweGMwKQorCXsKKwkgIC8qIHBvaW50ZXIgZm9yIGNvbXByZXNzaW9uLiAqLworCSAgYW5zcCArPSAyOwkKKwkgIGJyZWFrOworCX0KKyAgICAgIGVsc2UgaWYgKGxhYmVsX3R5cGUgPT0gMHg4MCkKKwlyZXR1cm4gTlVMTDsgLyogcmVzZXJ2ZWQgKi8KKyAgICAgIGVsc2UgaWYgKGxhYmVsX3R5cGUgPT0gMHg0MCkKKwl7CisJICAvKiBFeHRlbmRlZCBsYWJlbCB0eXBlICovCisJICB1bnNpZ25lZCBpbnQgY291bnQ7CisJICAKKwkgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgYW5zcCwgcGxlbiwgMikpCisJICAgIHJldHVybiBOVUxMOworCSAgCisJICBpZiAoKCgqYW5zcCsrKSAmIDB4M2YpICE9IDEpCisJICAgIHJldHVybiBOVUxMOyAvKiB3ZSBvbmx5IHVuZGVyc3RhbmQgYml0c3RyaW5ncyAqLworCSAgCisJICBjb3VudCA9ICooYW5zcCsrKTsgLyogQml0cyBpbiBiaXRzdHJpbmcgKi8KKwkgIAorCSAgaWYgKGNvdW50ID09IDApIC8qIGNvdW50ID09IDAgbWVhbnMgMjU2IGJpdHMgKi8KKwkgICAgYW5zcCArPSAzMjsKKwkgIGVsc2UKKwkgICAgYW5zcCArPSAoKGNvdW50LTEpPj4zKSsxOworCX0KKyAgICAgIGVsc2UKKwl7IC8qIGxhYmVsIHR5cGUgPT0gMCBCb3R0b20gc2l4IGJpdHMgaXMgbGVuZ3RoICovCisJICB1bnNpZ25lZCBpbnQgbGVuID0gKCphbnNwKyspICYgMHgzZjsKKwkgIAorCSAgaWYgKCFBRERfUkRMRU4oaGVhZGVyLCBhbnNwLCBwbGVuLCBsZW4pKQorCSAgICByZXR1cm4gTlVMTDsKKworCSAgaWYgKGxlbiA9PSAwKQorCSAgICBicmVhazsgLyogemVybyBsZW5ndGggbGFiZWwgbWFya3MgdGhlIGVuZC4gKi8KKwl9CisgICAgfQorCisgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgYW5zcCwgcGxlbiwgZXh0cmFieXRlcykpCisgICAgcmV0dXJuIE5VTEw7CisgIAorICByZXR1cm4gYW5zcDsKK30KKwordW5zaWduZWQgY2hhciAqc2tpcF9xdWVzdGlvbnMoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4pCit7CisgIGludCBxOworICB1bnNpZ25lZCBjaGFyICphbnNwID0gKHVuc2lnbmVkIGNoYXIgKikoaGVhZGVyKzEpOworCisgIGZvciAocSA9IG50b2hzKGhlYWRlci0+cWRjb3VudCk7IHEgIT0gMDsgcS0tKQorICAgIHsKKyAgICAgIGlmICghKGFuc3AgPSBza2lwX25hbWUoYW5zcCwgaGVhZGVyLCBwbGVuLCA0KSkpCisJcmV0dXJuIE5VTEw7CisgICAgICBhbnNwICs9IDQ7IC8qIGNsYXNzIGFuZCB0eXBlICovCisgICAgfQorICAKKyAgcmV0dXJuIGFuc3A7Cit9CisKK3Vuc2lnbmVkIGNoYXIgKnNraXBfc2VjdGlvbih1bnNpZ25lZCBjaGFyICphbnNwLCBpbnQgY291bnQsIHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuKQoreworICBpbnQgaSwgcmRsZW47CisgIAorICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICBpZiAoIShhbnNwID0gc2tpcF9uYW1lKGFuc3AsIGhlYWRlciwgcGxlbiwgMTApKSkKKwlyZXR1cm4gTlVMTDsgCisgICAgICBhbnNwICs9IDg7IC8qIHR5cGUsIGNsYXNzLCBUVEwgKi8KKyAgICAgIEdFVFNIT1JUKHJkbGVuLCBhbnNwKTsKKyAgICAgIGlmICghQUREX1JETEVOKGhlYWRlciwgYW5zcCwgcGxlbiwgcmRsZW4pKQorCXJldHVybiBOVUxMOworICAgIH0KKworICByZXR1cm4gYW5zcDsKK30KKworLyogQ1JDIHRoZSBxdWVzdGlvbiBzZWN0aW9uLiBUaGlzIGlzIHVzZWQgdG8gc2FmZWx5IGRldGVjdCBxdWVyeSAKKyAgIHJldHJhbnNtaXNpb24gYW5kIHRvIGRldGVjdCBhbnN3ZXJzIHRvIHF1ZXN0aW9ucyB3ZSBkaWRuJ3QgYXNrLCB3aGljaCAKKyAgIG1pZ2h0IGJlIHBvaXNvbmluZyBhdHRhY2tzLiBOb3RlIHRoYXQgd2UgZGVjb2RlIHRoZSBuYW1lIHJhdGhlciAKKyAgIHRoYW4gQ1JDIHRoZSByYXcgYnl0ZXMsIHNpbmNlIHJlcGxpZXMgbWlnaHQgYmUgY29tcHJlc3NlZCBkaWZmZXJlbnRseS4gCisgICBXZSBpZ25vcmUgY2FzZSBpbiB0aGUgbmFtZXMgZm9yIHRoZSBzYW1lIHJlYXNvbi4gUmV0dXJuIGFsbC1vbmVzCisgICBpZiB0aGVyZSBpcyBub3QgcXVlc3Rpb24gc2VjdGlvbi4gKi8KKyNpZm5kZWYgSEFWRV9ETlNTRUMKK3Vuc2lnbmVkIGludCBxdWVzdGlvbnNfY3JjKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuLCBjaGFyICpuYW1lKQoreworICBpbnQgcTsKKyAgdW5zaWduZWQgaW50IGNyYyA9IDB4ZmZmZmZmZmY7CisgIHVuc2lnbmVkIGNoYXIgKnAxLCAqcCA9ICh1bnNpZ25lZCBjaGFyICopKGhlYWRlcisxKTsKKworICBmb3IgKHEgPSBudG9ocyhoZWFkZXItPnFkY291bnQpOyBxICE9IDA7IHEtLSkgCisgICAgeworICAgICAgaWYgKCFleHRyYWN0X25hbWUoaGVhZGVyLCBwbGVuLCAmcCwgbmFtZSwgMSwgNCkpCisJcmV0dXJuIGNyYzsgLyogYmFkIHBhY2tldCAqLworICAgICAgCisgICAgICBmb3IgKHAxID0gKHVuc2lnbmVkIGNoYXIgKiluYW1lOyAqcDE7IHAxKyspCisJeworCSAgaW50IGkgPSA4OworCSAgY2hhciBjID0gKnAxOworCisJICBpZiAoYyA+PSAnQScgJiYgYyA8PSAnWicpCisJICAgIGMgKz0gJ2EnIC0gJ0EnOworCisJICBjcmMgXj0gYyA8PCAyNDsKKwkgIHdoaWxlIChpLS0pCisJICAgIGNyYyA9IGNyYyAmIDB4ODAwMDAwMDAgPyAoY3JjIDw8IDEpIF4gMHgwNGMxMWRiNyA6IGNyYyA8PCAxOworCX0KKyAgICAgIAorICAgICAgLyogQ1JDIHRoZSBjbGFzcyBhbmQgdHlwZSBhcyB3ZWxsICovCisgICAgICBmb3IgKHAxID0gcDsgcDEgPCBwKzQ7IHAxKyspCisJeworCSAgaW50IGkgPSA4OworCSAgY3JjIF49ICpwMSA8PCAyNDsKKwkgIHdoaWxlIChpLS0pCisJICAgIGNyYyA9IGNyYyAmIDB4ODAwMDAwMDAgPyAoY3JjIDw8IDEpIF4gMHgwNGMxMWRiNyA6IGNyYyA8PCAxOworCX0KKworICAgICAgcCArPSA0OworICAgICAgaWYgKCFDSEVDS19MRU4oaGVhZGVyLCBwLCBwbGVuLCAwKSkKKwlyZXR1cm4gY3JjOyAvKiBiYWQgcGFja2V0ICovCisgICAgfQorCisgIHJldHVybiBjcmM7Cit9CisjZW5kaWYKKworc2l6ZV90IHJlc2l6ZV9wYWNrZXQoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIHVuc2lnbmVkIGNoYXIgKnBoZWFkZXIsIHNpemVfdCBobGVuKQoreworICB1bnNpZ25lZCBjaGFyICphbnNwID0gc2tpcF9xdWVzdGlvbnMoaGVhZGVyLCBwbGVuKTsKKyAgICAKKyAgLyogaWYgcGFja2V0IGlzIG1hbGZvcm1lZCwganVzdCByZXR1cm4gYXMtaXMuICovCisgIGlmICghYW5zcCkKKyAgICByZXR1cm4gcGxlbjsKKyAgCisgIGlmICghKGFuc3AgPSBza2lwX3NlY3Rpb24oYW5zcCwgbnRvaHMoaGVhZGVyLT5hbmNvdW50KSArIG50b2hzKGhlYWRlci0+bnNjb3VudCkgKyBudG9ocyhoZWFkZXItPmFyY291bnQpLAorCQkJICAgIGhlYWRlciwgcGxlbikpKQorICAgIHJldHVybiBwbGVuOworICAgIAorICAvKiByZXN0b3JlIHBzZXVkb2hlYWRlciAqLworICBpZiAocGhlYWRlciAmJiBudG9ocyhoZWFkZXItPmFyY291bnQpID09IDApCisgICAgeworICAgICAgLyogbXVzdCB1c2UgbWVtbW92ZSwgbWF5IG92ZXJsYXAgKi8KKyAgICAgIG1lbW1vdmUoYW5zcCwgcGhlYWRlciwgaGxlbik7CisgICAgICBoZWFkZXItPmFyY291bnQgPSBodG9ucygxKTsKKyAgICAgIGFuc3AgKz0gaGxlbjsKKyAgICB9CisKKyAgcmV0dXJuIGFuc3AgLSAodW5zaWduZWQgY2hhciAqKWhlYWRlcjsKK30KKwordW5zaWduZWQgY2hhciAqZmluZF9wc2V1ZG9oZWFkZXIoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIHNpemVfdCAgKmxlbiwgdW5zaWduZWQgY2hhciAqKnAsIGludCAqaXNfc2lnbikKK3sKKyAgLyogU2VlIGlmIHBhY2tldCBoYXMgYW4gUkZDMjY3MSBwc2V1ZG9oZWFkZXIsIGFuZCBpZiBzbyByZXR1cm4gYSBwb2ludGVyIHRvIGl0LiAKKyAgICAgYWxzbyByZXR1cm4gbGVuZ3RoIG9mIHBzZXVkb2hlYWRlciBpbiAqbGVuIGFuZCBwb2ludGVyIHRvIHRoZSBVRFAgc2l6ZSBpbiAqcAorICAgICBGaW5hbGx5LCBjaGVjayB0byBzZWUgaWYgYSBwYWNrZXQgaXMgc2lnbmVkLiBJZiBpdCBpcyB3ZSBjYW5ub3QgY2hhbmdlIGEgc2luZ2xlIGJpdCBiZWZvcmUKKyAgICAgZm9yd2FyZGluZy4gV2UgbG9vayBmb3IgU0lHIGFuZCBUU0lHIGluIHRoZSBhZGRpdGlvbiBzZWN0aW9uLCBhbmQgVEtFWSBxdWVyaWVzIChmb3IgR1NTLVRTSUcpICovCisgIAorICBpbnQgaSwgYXJjb3VudCA9IG50b2hzKGhlYWRlci0+YXJjb3VudCk7CisgIHVuc2lnbmVkIGNoYXIgKmFuc3AgPSAodW5zaWduZWQgY2hhciAqKShoZWFkZXIrMSk7CisgIHVuc2lnbmVkIHNob3J0IHJkbGVuLCB0eXBlLCBjbGFzczsKKyAgdW5zaWduZWQgY2hhciAqcmV0ID0gTlVMTDsKKworICBpZiAoaXNfc2lnbikKKyAgICB7CisgICAgICAqaXNfc2lnbiA9IDA7CisKKyAgICAgIGlmIChPUENPREUoaGVhZGVyKSA9PSBRVUVSWSkKKwl7CisJICBmb3IgKGkgPSBudG9ocyhoZWFkZXItPnFkY291bnQpOyBpICE9IDA7IGktLSkKKwkgICAgeworCSAgICAgIGlmICghKGFuc3AgPSBza2lwX25hbWUoYW5zcCwgaGVhZGVyLCBwbGVuLCA0KSkpCisJCXJldHVybiBOVUxMOworCSAgICAgIAorCSAgICAgIEdFVFNIT1JUKHR5cGUsIGFuc3ApOyAKKwkgICAgICBHRVRTSE9SVChjbGFzcywgYW5zcCk7CisJICAgICAgCisJICAgICAgaWYgKGNsYXNzID09IENfSU4gJiYgdHlwZSA9PSBUX1RLRVkpCisJCSppc19zaWduID0gMTsKKwkgICAgfQorCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoIShhbnNwID0gc2tpcF9xdWVzdGlvbnMoaGVhZGVyLCBwbGVuKSkpCisJcmV0dXJuIE5VTEw7CisgICAgfQorICAgIAorICBpZiAoYXJjb3VudCA9PSAwKQorICAgIHJldHVybiBOVUxMOworICAKKyAgaWYgKCEoYW5zcCA9IHNraXBfc2VjdGlvbihhbnNwLCBudG9ocyhoZWFkZXItPmFuY291bnQpICsgbnRvaHMoaGVhZGVyLT5uc2NvdW50KSwgaGVhZGVyLCBwbGVuKSkpCisgICAgcmV0dXJuIE5VTEw7IAorICAKKyAgZm9yIChpID0gMDsgaSA8IGFyY291bnQ7IGkrKykKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyICpzYXZlLCAqc3RhcnQgPSBhbnNwOworICAgICAgaWYgKCEoYW5zcCA9IHNraXBfbmFtZShhbnNwLCBoZWFkZXIsIHBsZW4sIDEwKSkpCisJcmV0dXJuIE5VTEw7IAorCisgICAgICBHRVRTSE9SVCh0eXBlLCBhbnNwKTsKKyAgICAgIHNhdmUgPSBhbnNwOworICAgICAgR0VUU0hPUlQoY2xhc3MsIGFuc3ApOworICAgICAgYW5zcCArPSA0OyAvKiBUVEwgKi8KKyAgICAgIEdFVFNIT1JUKHJkbGVuLCBhbnNwKTsKKyAgICAgIGlmICghQUREX1JETEVOKGhlYWRlciwgYW5zcCwgcGxlbiwgcmRsZW4pKQorCXJldHVybiBOVUxMOworICAgICAgaWYgKHR5cGUgPT0gVF9PUFQpCisJeworCSAgaWYgKGxlbikKKwkgICAgKmxlbiA9IGFuc3AgLSBzdGFydDsKKwkgIGlmIChwKQorCSAgICAqcCA9IHNhdmU7CisJICByZXQgPSBzdGFydDsKKwl9CisgICAgICBlbHNlIGlmIChpc19zaWduICYmIAorCSAgICAgICBpID09IGFyY291bnQgLSAxICYmIAorCSAgICAgICBjbGFzcyA9PSBDX0FOWSAmJiAKKwkgICAgICAgdHlwZSA9PSBUX1RTSUcpCisJKmlzX3NpZ24gPSAxOworICAgIH0KKyAgCisgIHJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBtYWNwYXJtIHsKKyAgdW5zaWduZWQgY2hhciAqbGltaXQ7CisgIHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXI7CisgIHNpemVfdCBwbGVuOworICB1bmlvbiBteXNvY2thZGRyICpsMzsKK307CisgCitzdGF0aWMgc2l6ZV90IGFkZF9wc2V1ZG9oZWFkZXIoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIHVuc2lnbmVkIGNoYXIgKmxpbWl0LCAKKwkJCSAgICAgICBpbnQgb3B0bm8sIHVuc2lnbmVkIGNoYXIgKm9wdCwgc2l6ZV90IG9wdGxlbiwgaW50IHNldF9kbykKK3sgCisgIHVuc2lnbmVkIGNoYXIgKmxlbnAsICpkYXRhcCwgKnA7CisgIGludCByZGxlbiwgaXNfc2lnbjsKKyAgCisgIGlmICghKHAgPSBmaW5kX3BzZXVkb2hlYWRlcihoZWFkZXIsIHBsZW4sIE5VTEwsIE5VTEwsICZpc19zaWduKSkpCisgICAgeworICAgICAgaWYgKGlzX3NpZ24pCisJcmV0dXJuIHBsZW47CisKKyAgICAgIC8qIFdlIGFyZSBhZGRpbmcgdGhlIHBzZXVkb2hlYWRlciAqLworICAgICAgaWYgKCEocCA9IHNraXBfcXVlc3Rpb25zKGhlYWRlciwgcGxlbikpIHx8CisJICAhKHAgPSBza2lwX3NlY3Rpb24ocCwgCisJCQkgICAgIG50b2hzKGhlYWRlci0+YW5jb3VudCkgKyBudG9ocyhoZWFkZXItPm5zY291bnQpICsgbnRvaHMoaGVhZGVyLT5hcmNvdW50KSwgCisJCQkgICAgIGhlYWRlciwgcGxlbikpKQorCXJldHVybiBwbGVuOworICAgICAgKnArKyA9IDA7IC8qIGVtcHR5IG5hbWUgKi8KKyAgICAgIFBVVFNIT1JUKFRfT1BULCBwKTsKKyAgICAgIFBVVFNIT1JUKGRhZW1vbi0+ZWRuc19wa3RzeiwgcCk7IC8qIG1heCBwYWNrZXQgbGVuZ3RoICovCisgICAgICBQVVRTSE9SVCgwLCBwKTsgICAgLyogZXh0ZW5kZWQgUkNPREUgYW5kIHZlcnNpb24gKi8KKyAgICAgIFBVVFNIT1JUKHNldF9kbyA/IDB4ODAwMCA6IDAsIHApOyAvKiBETyBmbGFnICovCisgICAgICBsZW5wID0gcDsKKyAgICAgIFBVVFNIT1JUKDAsIHApOyAgICAvKiBSRExFTiAqLworICAgICAgcmRsZW4gPSAwOworICAgICAgaWYgKCgoc3NpemVfdClvcHRsZW4pID4gKGxpbWl0IC0gKHAgKyA0KSkpCisJcmV0dXJuIHBsZW47IC8qIFRvbyBiaWcgKi8KKyAgICAgIGhlYWRlci0+YXJjb3VudCA9IGh0b25zKG50b2hzKGhlYWRlci0+YXJjb3VudCkgKyAxKTsKKyAgICAgIGRhdGFwID0gcDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpbnQgaTsKKyAgICAgIHVuc2lnbmVkIHNob3J0IGNvZGUsIGxlbiwgZmxhZ3M7CisgICAgICAKKyAgICAgIC8qIE11c3QgYmUgYXQgdGhlIGVuZCwgaWYgZXhpc3RzICovCisgICAgICBpZiAobnRvaHMoaGVhZGVyLT5hcmNvdW50KSAhPSAxIHx8CisJICBpc19zaWduIHx8CisJICAoIShwID0gc2tpcF9uYW1lKHAsIGhlYWRlciwgcGxlbiwgMTApKSkpCisJcmV0dXJuIHBsZW47CisgICAgICAKKyAgICAgIHAgKz0gNjsgLyogc2tpcCBVRFAgbGVuZ3RoIGFuZCBSQ09ERSAqLworICAgICAgR0VUU0hPUlQoZmxhZ3MsIHApOworICAgICAgaWYgKHNldF9kbykKKwl7CisJICBwIC09MjsKKwkgIFBVVFNIT1JUKGZsYWdzIHwgMHg4MDAwLCBwKTsKKwl9CisKKyAgICAgIGxlbnAgPSBwOworICAgICAgR0VUU0hPUlQocmRsZW4sIHApOworICAgICAgaWYgKCFDSEVDS19MRU4oaGVhZGVyLCBwLCBwbGVuLCByZGxlbikpCisJcmV0dXJuIHBsZW47IC8qIGJhZCBwYWNrZXQgKi8KKyAgICAgIGRhdGFwID0gcDsKKworICAgICAgIC8qIG5vIG9wdGlvbiB0byBhZGQgKi8KKyAgICAgIGlmIChvcHRubyA9PSAwKQorCXJldHVybiBwbGVuOworICAgICAgCSAgCisgICAgICAvKiBjaGVjayBpZiBvcHRpb24gYWxyZWFkeSB0aGVyZSAqLworICAgICAgZm9yIChpID0gMDsgaSArIDQgPCByZGxlbjsgaSArPSBsZW4gKyA0KQorCXsKKwkgIEdFVFNIT1JUKGNvZGUsIHApOworCSAgR0VUU0hPUlQobGVuLCBwKTsKKwkgIGlmIChjb2RlID09IG9wdG5vKQorCSAgICByZXR1cm4gcGxlbjsKKwkgIHAgKz0gbGVuOworCX0KKyAgICAgIAorICAgICAgaWYgKCgoc3NpemVfdClvcHRsZW4pID4gKGxpbWl0IC0gKHAgKyA0KSkpCisJcmV0dXJuIHBsZW47IC8qIFRvbyBiaWcgKi8KKyAgICB9CisgIAorICBpZiAob3B0bm8gIT0gMCkKKyAgICB7CisgICAgICBQVVRTSE9SVChvcHRubywgcCk7CisgICAgICBQVVRTSE9SVChvcHRsZW4sIHApOworICAgICAgbWVtY3B5KHAsIG9wdCwgb3B0bGVuKTsKKyAgICAgIHAgKz0gb3B0bGVuOyAgCisgICAgfQorCisgIFBVVFNIT1JUKHAgLSBkYXRhcCwgbGVucCk7CisgIHJldHVybiBwIC0gKHVuc2lnbmVkIGNoYXIgKiloZWFkZXI7CisgIAorfQorCitzdGF0aWMgaW50IGZpbHRlcl9tYWMoaW50IGZhbWlseSwgY2hhciAqYWRkcnAsIGNoYXIgKm1hYywgc2l6ZV90IG1hY2xlbiwgdm9pZCAqcGFybXYpCit7CisgIHN0cnVjdCBtYWNwYXJtICpwYXJtID0gcGFybXY7CisgIGludCBtYXRjaCA9IDA7CisgICAgCisgIGlmIChmYW1pbHkgPT0gcGFybS0+bDMtPnNhLnNhX2ZhbWlseSkKKyAgICB7CisgICAgICBpZiAoZmFtaWx5ID09IEFGX0lORVQgJiYgbWVtY21wKCZwYXJtLT5sMy0+aW4uc2luX2FkZHIsIGFkZHJwLCBJTkFERFJTWikgPT0gMCkKKwltYXRjaCA9IDE7CisjaWZkZWYgSEFWRV9JUFY2CisgICAgICBlbHNlCisJaWYgKGZhbWlseSA9PSBBRl9JTkVUNiAmJiBtZW1jbXAoJnBhcm0tPmwzLT5pbjYuc2luNl9hZGRyLCBhZGRycCwgSU42QUREUlNaKSA9PSAwKQorCSAgbWF0Y2ggPSAxOworI2VuZGlmCisgICAgfQorIAorICBpZiAoIW1hdGNoKQorICAgIHJldHVybiAxOyAvKiBjb250aW51ZSAqLworCisgIHBhcm0tPnBsZW4gPSBhZGRfcHNldWRvaGVhZGVyKHBhcm0tPmhlYWRlciwgcGFybS0+cGxlbiwgcGFybS0+bGltaXQsICBFRE5TMF9PUFRJT05fTUFDLCAodW5zaWduZWQgY2hhciAqKW1hYywgbWFjbGVuLCAwKTsKKyAgCisgIHJldHVybiAwOyAvKiBkb25lICovCit9CSAgICAgIAorICAgICAKK3NpemVfdCBhZGRfbWFjKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBwbGVuLCBjaGFyICpsaW1pdCwgdW5pb24gbXlzb2NrYWRkciAqbDMpCit7CisgIHN0cnVjdCBtYWNwYXJtIHBhcm07CisgICAgIAorLyogTXVzdCBoYXZlIGFuIGV4aXN0aW5nIHBzZXVkb2hlYWRlciBhcyB0aGUgb25seSBhci1yZWNvcmQsIAorICAgb3IgaGF2ZSBubyBhci1yZWNvcmRzLiBNdXN0IGFsc28gbm90IGJlIHNpZ25lZCAqLworICAgCisgIGlmIChudG9ocyhoZWFkZXItPmFyY291bnQpID4gMSkKKyAgICByZXR1cm4gcGxlbjsKKworICBwYXJtLmhlYWRlciA9IGhlYWRlcjsKKyAgcGFybS5saW1pdCA9ICh1bnNpZ25lZCBjaGFyICopbGltaXQ7CisgIHBhcm0ucGxlbiA9IHBsZW47CisgIHBhcm0ubDMgPSBsMzsKKworICBpZmFjZV9lbnVtZXJhdGUoQUZfVU5TUEVDLCAmcGFybSwgZmlsdGVyX21hYyk7CisgIAorICByZXR1cm4gcGFybS5wbGVuOyAKK30KKworc3RydWN0IHN1Ym5ldF9vcHQgeworICB1MTYgZmFtaWx5OworICB1OCBzb3VyY2VfbmV0bWFzaywgc2NvcGVfbmV0bWFzazsKKyNpZmRlZiBIQVZFX0lQVjYgCisgIHU4IGFkZHJbSU42QUREUlNaXTsKKyNlbHNlCisgIHU4IGFkZHJbSU5BRERSU1pdOworI2VuZGlmCit9OworCitzdGF0aWMgc2l6ZV90IGNhbGNfc3VibmV0X29wdChzdHJ1Y3Qgc3VibmV0X29wdCAqb3B0LCB1bmlvbiBteXNvY2thZGRyICpzb3VyY2UpCit7CisgIC8qIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LXZhbmRlcmdhYXN0LWVkbnMtY2xpZW50LXN1Ym5ldC0wMiAqLworICAKKyAgaW50IGxlbjsKKyAgdm9pZCAqYWRkcnA7CisKKyNpZmRlZiBIQVZFX0lQVjYKKyAgaWYgKHNvdXJjZS0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KQorICAgIHsKKyAgICAgIG9wdC0+ZmFtaWx5ID0gaHRvbnMoMik7CisgICAgICBvcHQtPnNvdXJjZV9uZXRtYXNrID0gZGFlbW9uLT5hZGRyNl9uZXRtYXNrOworICAgICAgYWRkcnAgPSAmc291cmNlLT5pbjYuc2luNl9hZGRyOworICAgIH0KKyAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgb3B0LT5mYW1pbHkgPSBodG9ucygxKTsKKyAgICAgIG9wdC0+c291cmNlX25ldG1hc2sgPSBkYWVtb24tPmFkZHI0X25ldG1hc2s7CisgICAgICBhZGRycCA9ICZzb3VyY2UtPmluLnNpbl9hZGRyOworICAgIH0KKyAgCisgIG9wdC0+c2NvcGVfbmV0bWFzayA9IDA7CisgIGxlbiA9IDA7CisgIAorICBpZiAob3B0LT5zb3VyY2VfbmV0bWFzayAhPSAwKQorICAgIHsKKyAgICAgIGxlbiA9ICgob3B0LT5zb3VyY2VfbmV0bWFzayAtIDEpID4+IDMpICsgMTsKKyAgICAgIG1lbWNweShvcHQtPmFkZHIsIGFkZHJwLCBsZW4pOworICAgICAgaWYgKG9wdC0+c291cmNlX25ldG1hc2sgJiA3KQorCW9wdC0+YWRkcltsZW4tMV0gJj0gMHhmZiA8PCAoOCAtIChvcHQtPnNvdXJjZV9uZXRtYXNrICYgNykpOworICAgIH0KKworICByZXR1cm4gbGVuICsgNDsKK30KKyAKK3NpemVfdCBhZGRfc291cmNlX2FkZHIoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHBsZW4sIGNoYXIgKmxpbWl0LCB1bmlvbiBteXNvY2thZGRyICpzb3VyY2UpCit7CisgIC8qIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LXZhbmRlcmdhYXN0LWVkbnMtY2xpZW50LXN1Ym5ldC0wMiAqLworICAKKyAgaW50IGxlbjsKKyAgc3RydWN0IHN1Ym5ldF9vcHQgb3B0OworICAKKyAgbGVuID0gY2FsY19zdWJuZXRfb3B0KCZvcHQsIHNvdXJjZSk7CisgIHJldHVybiBhZGRfcHNldWRvaGVhZGVyKGhlYWRlciwgcGxlbiwgKHVuc2lnbmVkIGNoYXIgKilsaW1pdCwgRUROUzBfT1BUSU9OX0NMSUVOVF9TVUJORVQsICh1bnNpZ25lZCBjaGFyICopJm9wdCwgbGVuLCAwKTsKK30KKworI2lmZGVmIEhBVkVfRE5TU0VDCitzaXplX3QgYWRkX2RvX2JpdChzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgY2hhciAqbGltaXQpCit7CisgIHJldHVybiBhZGRfcHNldWRvaGVhZGVyKGhlYWRlciwgcGxlbiwgKHVuc2lnbmVkIGNoYXIgKilsaW1pdCwgMCwgTlVMTCwgMCwgMSk7Cit9CisjZW5kaWYKKworaW50IGNoZWNrX3NvdXJjZShzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcGxlbiwgdW5zaWduZWQgY2hhciAqcHNldWRvaGVhZGVyLCB1bmlvbiBteXNvY2thZGRyICpwZWVyKQoreworICAvKiBTZWN0aW9uIDkuMiwgQ2hlY2sgdGhhdCBzdWJuZXQgb3B0aW9uIGluIHJlcGx5IG1hdGNoZXMuICovCisKKworIGludCBsZW4sIGNhbGNfbGVuOworICBzdHJ1Y3Qgc3VibmV0X29wdCBvcHQ7CisgIHVuc2lnbmVkIGNoYXIgKnA7CisgIGludCBjb2RlLCBpLCByZGxlbjsKKyAgCisgICBjYWxjX2xlbiA9IGNhbGNfc3VibmV0X29wdCgmb3B0LCBwZWVyKTsKKyAgIAorICAgaWYgKCEocCA9IHNraXBfbmFtZShwc2V1ZG9oZWFkZXIsIGhlYWRlciwgcGxlbiwgMTApKSkKKyAgICAgcmV0dXJuIDE7CisgICAKKyAgIHAgKz0gODsgLyogc2tpcCBVRFAgbGVuZ3RoIGFuZCBSQ09ERSAqLworICAgCisgICBHRVRTSE9SVChyZGxlbiwgcCk7CisgICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIHAsIHBsZW4sIHJkbGVuKSkKKyAgICAgcmV0dXJuIDE7IC8qIGJhZCBwYWNrZXQgKi8KKyAgIAorICAgLyogY2hlY2sgaWYgb3B0aW9uIHRoZXJlICovCisgICBmb3IgKGkgPSAwOyBpICsgNCA8IHJkbGVuOyBpICs9IGxlbiArIDQpCisgICAgIHsKKyAgICAgICBHRVRTSE9SVChjb2RlLCBwKTsKKyAgICAgICBHRVRTSE9SVChsZW4sIHApOworICAgICAgIGlmIChjb2RlID09IEVETlMwX09QVElPTl9DTElFTlRfU1VCTkVUKQorCSB7CisJICAgLyogbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBtaXNtYXRjaC4gKi8KKwkgICBvcHQuc2NvcGVfbmV0bWFzayA9IHBbM107CisJICAgaWYgKGxlbiAhPSBjYWxjX2xlbiB8fCBtZW1jbXAocCwgJm9wdCwgbGVuKSAhPSAwKQorCSAgICAgcmV0dXJuIDA7CisJIH0KKyAgICAgICBwICs9IGxlbjsKKyAgICAgfQorICAgCisgICByZXR1cm4gMTsKK30KKworLyogaXMgYWRkciBpbiB0aGUgbm9uLWdsb2JhbGx5LXJvdXRlZCBJUCBzcGFjZT8gKi8gCitpbnQgcHJpdmF0ZV9uZXQoc3RydWN0IGluX2FkZHIgYWRkciwgaW50IGJhbl9sb2NhbGhvc3QpIAoreworICBpbl9hZGRyX3QgaXBfYWRkciA9IG50b2hsKGFkZHIuc19hZGRyKTsKKworICByZXR1cm4KKyAgICAoKChpcF9hZGRyICYgMHhGRjAwMDAwMCkgPT0gMHg3RjAwMDAwMCkgJiYgYmFuX2xvY2FsaG9zdCkgIC8qIDEyNy4wLjAuMC84ICAgIChsb29wYmFjaykgKi8gfHwgCisgICAgKChpcF9hZGRyICYgMHhGRkZGMDAwMCkgPT0gMHhDMEE4MDAwMCkgIC8qIDE5Mi4xNjguMC4wLzE2IChwcml2YXRlKSAgKi8gfHwKKyAgICAoKGlwX2FkZHIgJiAweEZGMDAwMDAwKSA9PSAweDBBMDAwMDAwKSAgLyogMTAuMC4wLjAvOCAgICAgKHByaXZhdGUpICAqLyB8fAorICAgICgoaXBfYWRkciAmIDB4RkZGMDAwMDApID09IDB4QUMxMDAwMDApICAvKiAxNzIuMTYuMC4wLzEyICAocHJpdmF0ZSkgICovIHx8CisgICAgKChpcF9hZGRyICYgMHhGRkZGMDAwMCkgPT0gMHhBOUZFMDAwMCkgIC8qIDE2OS4yNTQuMC4wLzE2ICh6ZXJvY29uZikgKi8gOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciAqZG9fZG9jdG9yKHVuc2lnbmVkIGNoYXIgKnAsIGludCBjb3VudCwgc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHFsZW4sIGNoYXIgKm5hbWUsIGludCAqZG9jdG9yZWQpCit7CisgIGludCBpLCBxdHlwZSwgcWNsYXNzLCByZGxlbjsKKworICBmb3IgKGkgPSBjb3VudDsgaSAhPSAwOyBpLS0pCisgICAgeworICAgICAgaWYgKG5hbWUgJiYgb3B0aW9uX2Jvb2woT1BUX0xPRykpCisJeworCSAgaWYgKCFleHRyYWN0X25hbWUoaGVhZGVyLCBxbGVuLCAmcCwgbmFtZSwgMSwgMTApKQorCSAgICByZXR1cm4gMDsKKwl9CisgICAgICBlbHNlIGlmICghKHAgPSBza2lwX25hbWUocCwgaGVhZGVyLCBxbGVuLCAxMCkpKQorCXJldHVybiAwOyAvKiBiYWQgcGFja2V0ICovCisgICAgICAKKyAgICAgIEdFVFNIT1JUKHF0eXBlLCBwKTsgCisgICAgICBHRVRTSE9SVChxY2xhc3MsIHApOworICAgICAgcCArPSA0OyAvKiB0dGwgKi8KKyAgICAgIEdFVFNIT1JUKHJkbGVuLCBwKTsKKyAgICAgIAorICAgICAgaWYgKHFjbGFzcyA9PSBDX0lOICYmIHF0eXBlID09IFRfQSkKKwl7CisJICBzdHJ1Y3QgZG9jdG9yICpkb2N0b3I7CisJICBzdHJ1Y3QgaW5fYWRkciBhZGRyOworCSAgCisJICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIHAsIHFsZW4sIElOQUREUlNaKSkKKwkgICAgcmV0dXJuIDA7CisJICAKKwkgIC8qIGFsaWdubWVudCAqLworCSAgbWVtY3B5KCZhZGRyLCBwLCBJTkFERFJTWik7CisJICAKKwkgIGZvciAoZG9jdG9yID0gZGFlbW9uLT5kb2N0b3JzOyBkb2N0b3I7IGRvY3RvciA9IGRvY3Rvci0+bmV4dCkKKwkgICAgeworCSAgICAgIGlmIChkb2N0b3ItPmVuZC5zX2FkZHIgPT0gMCkKKwkJeworCQkgIGlmICghaXNfc2FtZV9uZXQoZG9jdG9yLT5pbiwgYWRkciwgZG9jdG9yLT5tYXNrKSkKKwkJICAgIGNvbnRpbnVlOworCQl9CisJICAgICAgZWxzZSBpZiAobnRvaGwoZG9jdG9yLT5pbi5zX2FkZHIpID4gbnRvaGwoYWRkci5zX2FkZHIpIHx8IAorCQkgICAgICAgbnRvaGwoZG9jdG9yLT5lbmQuc19hZGRyKSA8IG50b2hsKGFkZHIuc19hZGRyKSkKKwkJY29udGludWU7CisJICAgICAgCisJICAgICAgYWRkci5zX2FkZHIgJj0gfmRvY3Rvci0+bWFzay5zX2FkZHI7CisJICAgICAgYWRkci5zX2FkZHIgfD0gKGRvY3Rvci0+b3V0LnNfYWRkciAmIGRvY3Rvci0+bWFzay5zX2FkZHIpOworCSAgICAgIC8qIFNpbmNlIHdlIG11bmdlZCB0aGUgZGF0YSwgdGhlIHNlcnZlciBpdCBjYW1lIGZyb20gaXMgbm8gbG9uZ2VyIGF1dGhvcml0YXRpdmUgKi8KKwkgICAgICBoZWFkZXItPmhiMyAmPSB+SEIzX0FBOworCSAgICAgICpkb2N0b3JlZCA9IDE7CisJICAgICAgbWVtY3B5KHAsICZhZGRyLCBJTkFERFJTWik7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmIChxdHlwZSA9PSBUX1RYVCAmJiBuYW1lICYmIG9wdGlvbl9ib29sKE9QVF9MT0cpKQorCXsKKwkgIHVuc2lnbmVkIGNoYXIgKnAxID0gcDsKKwkgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgcDEsIHFsZW4sIHJkbGVuKSkKKwkgICAgcmV0dXJuIDA7CisJICB3aGlsZSAoKHAxIC0gcCkgPCByZGxlbikKKwkgICAgeworCSAgICAgIHVuc2lnbmVkIGludCBpLCBsZW4gPSAqcDE7CisJICAgICAgdW5zaWduZWQgY2hhciAqcDIgPSBwMTsKKwkgICAgICAvKiBtYWtlIGNvdW50ZWQgc3RyaW5nIHplcm8tdGVybSAgYW5kIHNhbml0aXNlICovCisJICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQl7CisJCSAgaWYgKCFpc3ByaW50KChpbnQpKihwMisxKSkpCisJCSAgICBicmVhazsKKwkJICAKKwkJICAqcDIgPSAqKHAyKzEpOworCQkgIHAyKys7CisJCX0KKwkgICAgICAqcDIgPSAwOworCSAgICAgIG15X3N5c2xvZyhMT0dfSU5GTywgInJlcGx5ICVzIGlzICVzIiwgbmFtZSwgcDEpOworCSAgICAgIC8qIHJlc3RvcmUgKi8KKwkgICAgICBtZW1tb3ZlKHAxICsgMSwgcDEsIGkpOworCSAgICAgICpwMSA9IGxlbjsKKwkgICAgICBwMSArPSBsZW4rMTsKKwkgICAgfQorCX0JCSAgCisgICAgICAKKyAgICAgIGlmICghQUREX1JETEVOKGhlYWRlciwgcCwgcWxlbiwgcmRsZW4pKQorCSByZXR1cm4gMDsgLyogYmFkIHBhY2tldCAqLworICAgIH0KKyAgCisgIHJldHVybiBwOyAKK30KKworc3RhdGljIGludCBmaW5kX3NvYShzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcWxlbiwgY2hhciAqbmFtZSwgaW50ICpkb2N0b3JlZCkKK3sKKyAgdW5zaWduZWQgY2hhciAqcDsKKyAgaW50IHF0eXBlLCBxY2xhc3MsIHJkbGVuOworICB1bnNpZ25lZCBsb25nIHR0bCwgbWludHRsID0gVUxPTkdfTUFYOworICBpbnQgaSwgZm91bmRfc29hID0gMDsKKyAgCisgIC8qIGZpcnN0IG1vdmUgdG8gTlMgc2VjdGlvbiBhbmQgZmluZCBUVEwgZnJvbSBhbnkgU09BIHNlY3Rpb24gKi8KKyAgaWYgKCEocCA9IHNraXBfcXVlc3Rpb25zKGhlYWRlciwgcWxlbikpIHx8CisgICAgICAhKHAgPSBkb19kb2N0b3IocCwgbnRvaHMoaGVhZGVyLT5hbmNvdW50KSwgaGVhZGVyLCBxbGVuLCBuYW1lLCBkb2N0b3JlZCkpKQorICAgIHJldHVybiAwOyAgLyogYmFkIHBhY2tldCAqLworICAKKyAgZm9yIChpID0gbnRvaHMoaGVhZGVyLT5uc2NvdW50KTsgaSAhPSAwOyBpLS0pCisgICAgeworICAgICAgaWYgKCEocCA9IHNraXBfbmFtZShwLCBoZWFkZXIsIHFsZW4sIDEwKSkpCisJcmV0dXJuIDA7IC8qIGJhZCBwYWNrZXQgKi8KKyAgICAgIAorICAgICAgR0VUU0hPUlQocXR5cGUsIHApOyAKKyAgICAgIEdFVFNIT1JUKHFjbGFzcywgcCk7CisgICAgICBHRVRMT05HKHR0bCwgcCk7CisgICAgICBHRVRTSE9SVChyZGxlbiwgcCk7CisgICAgICAKKyAgICAgIGlmICgocWNsYXNzID09IENfSU4pICYmIChxdHlwZSA9PSBUX1NPQSkpCisJeworCSAgZm91bmRfc29hID0gMTsKKwkgIGlmICh0dGwgPCBtaW50dGwpCisJICAgIG1pbnR0bCA9IHR0bDsKKworCSAgLyogTU5BTUUgKi8KKwkgIGlmICghKHAgPSBza2lwX25hbWUocCwgaGVhZGVyLCBxbGVuLCAwKSkpCisJICAgIHJldHVybiAwOworCSAgLyogUk5BTUUgKi8KKwkgIGlmICghKHAgPSBza2lwX25hbWUocCwgaGVhZGVyLCBxbGVuLCAyMCkpKQorCSAgICByZXR1cm4gMDsKKwkgIHAgKz0gMTY7IC8qIFNFUklBTCBSRUZSRVNIIFJFVFJZIEVYUElSRSAqLworCSAgCisJICBHRVRMT05HKHR0bCwgcCk7IC8qIG1pblRUTCAqLworCSAgaWYgKHR0bCA8IG1pbnR0bCkKKwkgICAgbWludHRsID0gdHRsOworCX0KKyAgICAgIGVsc2UgaWYgKCFBRERfUkRMRU4oaGVhZGVyLCBwLCBxbGVuLCByZGxlbikpCisJcmV0dXJuIDA7IC8qIGJhZCBwYWNrZXQgKi8KKyAgICB9CisgIAorICAvKiByZXdyaXRlIGFkZHJlc3NlcyBpbiBhZGRpdGlvbmFsIHNlY3Rpb24gdG9vICovCisgIGlmICghZG9fZG9jdG9yKHAsIG50b2hzKGhlYWRlci0+YXJjb3VudCksIGhlYWRlciwgcWxlbiwgTlVMTCwgZG9jdG9yZWQpKQorICAgIHJldHVybiAwOworICAKKyAgaWYgKCFmb3VuZF9zb2EpCisgICAgbWludHRsID0gZGFlbW9uLT5uZWdfdHRsOworCisgIHJldHVybiBtaW50dGw7Cit9CisKKy8qIE5vdGUgdGhhdCB0aGUgZm9sbG93aW5nIGNvZGUgY2FuIGNyZWF0ZSBDTkFNRSBjaGFpbnMgdGhhdCBkb24ndCBwb2ludCB0byBhIHJlYWwgcmVjb3JkLAorICAgZWl0aGVyIGJlY2F1c2Ugb2YgbGFjayBvZiBtZW1vcnksIG9yIGxhY2sgb2YgU09BIHJlY29yZHMuICBUaGVzZSBhcmUgdHJlYXRlZCBieSB0aGUgY2FjaGUgY29kZSBhcyAKKyAgIGV4cGlyZWQgYW5kIGNsZWFuZWQgb3V0IHRoYXQgd2F5LiAKKyAgIFJldHVybiAxIGlmIHdlIHJlamVjdCBhbiBhZGRyZXNzIGJlY2F1c2UgaXQgbG9vayBsaWtlIHBhcnQgb2YgZG5zLXJlYmluZGluZyBhdHRhY2suICovCitpbnQgZXh0cmFjdF9hZGRyZXNzZXMoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgc2l6ZV90IHFsZW4sIGNoYXIgKm5hbWUsIHRpbWVfdCBub3csIAorCQkgICAgICBjaGFyICoqaXBzZXRzLCBpbnQgaXNfc2lnbiwgaW50IGNoZWNrX3JlYmluZCwgaW50IG5vX2NhY2hlX2Ruc3NlYywgaW50IHNlY3VyZSwgaW50ICpkb2N0b3JlZCkKK3sKKyAgdW5zaWduZWQgY2hhciAqcCwgKnAxLCAqZW5kcnIsICpuYW1lcDsKKyAgaW50IGksIGosIHF0eXBlLCBxY2xhc3MsIGFxdHlwZSwgYXFjbGFzcywgYXJkbGVuLCByZXMsIHNlYXJjaGVkX3NvYSA9IDA7CisgIHVuc2lnbmVkIGxvbmcgdHRsID0gMDsKKyAgc3RydWN0IGFsbF9hZGRyIGFkZHI7CisjaWZkZWYgSEFWRV9JUFNFVAorICBjaGFyICoqaXBzZXRzX2N1cjsKKyNlbHNlCisgICh2b2lkKWlwc2V0czsgLyogdW51c2VkICovCisjZW5kaWYKKyAgCisgIGNhY2hlX3N0YXJ0X2luc2VydCgpOworCisgIC8qIGZpbmRfc29hIGlzIG5lZWRlZCBmb3IgZG5zX2RvY3RvciBhbmQgbG9nZ2luZyBzaWRlLWVmZmVjdHMsIHNvIGRvbid0IGNhbGwgaXQgbGF6aWx5IGlmIHRoZXJlIGFyZSBhbnkuICovCisgIGlmIChkYWVtb24tPmRvY3RvcnMgfHwgb3B0aW9uX2Jvb2woT1BUX0xPRykgfHwgb3B0aW9uX2Jvb2woT1BUX0ROU1NFQ19WQUxJRCkpCisgICAgeworICAgICAgc2VhcmNoZWRfc29hID0gMTsKKyAgICAgIHR0bCA9IGZpbmRfc29hKGhlYWRlciwgcWxlbiwgbmFtZSwgZG9jdG9yZWQpOworI2lmZGVmIEhBVkVfRE5TU0VDCisgICAgICBpZiAoKmRvY3RvcmVkICYmIHNlY3VyZSkKKwlyZXR1cm4gMDsKKyNlbmRpZgorICAgIH0KKyAgCisgIC8qIGdvIHRocm91Z2ggdGhlIHF1ZXN0aW9ucy4gKi8KKyAgcCA9ICh1bnNpZ25lZCBjaGFyICopKGhlYWRlcisxKTsKKyAgCisgIGZvciAoaSA9IG50b2hzKGhlYWRlci0+cWRjb3VudCk7IGkgIT0gMDsgaS0tKQorICAgIHsKKyAgICAgIGludCBmb3VuZCA9IDAsIGNuYW1lX2NvdW50ID0gQ05BTUVfQ0hBSU47CisgICAgICBzdHJ1Y3QgY3JlYyAqY3BwID0gTlVMTDsKKyAgICAgIGludCBmbGFncyA9IFJDT0RFKGhlYWRlcikgPT0gTlhET01BSU4gPyBGX05YRE9NQUlOIDogMDsKKyAgICAgIGludCBzZWNmbGFnID0gc2VjdXJlID8gIEZfRE5TU0VDT0sgOiAwOworICAgICAgdW5zaWduZWQgbG9uZyBjdHRsID0gVUxPTkdfTUFYLCBhdHRsOworCisgICAgICBuYW1lcCA9IHA7CisgICAgICBpZiAoIWV4dHJhY3RfbmFtZShoZWFkZXIsIHFsZW4sICZwLCBuYW1lLCAxLCA0KSkKKwlyZXR1cm4gMDsgLyogYmFkIHBhY2tldCAqLworICAgICAgICAgICAKKyAgICAgIEdFVFNIT1JUKHF0eXBlLCBwKTsgCisgICAgICBHRVRTSE9SVChxY2xhc3MsIHApOworICAgICAgCisgICAgICBpZiAocWNsYXNzICE9IENfSU4pCisJY29udGludWU7CisKKyAgICAgIC8qIFBUUnM6IHdlIGNoYXNlIENOQU1FcyBoZXJlLCBzaW5jZSB3ZSBoYXZlIG5vIHdheSB0byAKKwkgcmVwcmVzZW50IHRoZW0gaW4gdGhlIGNhY2hlLiAqLworICAgICAgaWYgKHF0eXBlID09IFRfUFRSKQorCXsgCisJICBpbnQgbmFtZV9lbmNvZGluZyA9IGluX2FycGFfbmFtZV8yX2FkZHIobmFtZSwgJmFkZHIpOworCSAgCisJICBpZiAoIW5hbWVfZW5jb2RpbmcpCisJICAgIGNvbnRpbnVlOworCisJICBpZiAoIShmbGFncyAmIEZfTlhET01BSU4pKQorCSAgICB7CisJICAgIGNuYW1lX2xvb3A6CisJICAgICAgaWYgKCEocDEgPSBza2lwX3F1ZXN0aW9ucyhoZWFkZXIsIHFsZW4pKSkKKwkJcmV0dXJuIDA7CisJICAgICAgCisJICAgICAgZm9yIChqID0gbnRvaHMoaGVhZGVyLT5hbmNvdW50KTsgaiAhPSAwOyBqLS0pIAorCQl7CisJCSAgdW5zaWduZWQgY2hhciAqdG1wID0gbmFtZXA7CisJCSAgLyogdGhlIGxvb3AgYm9keSBvdmVyd3JpdGVzIHRoZSBvcmlnaW5hbCBuYW1lLCBzbyBnZXQgaXQgYmFjayBoZXJlLiAqLworCQkgIGlmICghZXh0cmFjdF9uYW1lKGhlYWRlciwgcWxlbiwgJnRtcCwgbmFtZSwgMSwgMCkgfHwKKwkJICAgICAgIShyZXMgPSBleHRyYWN0X25hbWUoaGVhZGVyLCBxbGVuLCAmcDEsIG5hbWUsIDAsIDEwKSkpCisJCSAgICByZXR1cm4gMDsgLyogYmFkIHBhY2tldCAqLworCQkgIAorCQkgIEdFVFNIT1JUKGFxdHlwZSwgcDEpOyAKKwkJICBHRVRTSE9SVChhcWNsYXNzLCBwMSk7CisJCSAgR0VUTE9ORyhhdHRsLCBwMSk7CisJCSAgaWYgKChkYWVtb24tPm1heF90dGwgIT0gMCkgJiYgKGF0dGwgPiBkYWVtb24tPm1heF90dGwpICYmICFpc19zaWduKQorCQkgICAgeworCQkgICAgICAocDEpIC09IDQ7CisJCSAgICAgIFBVVExPTkcoZGFlbW9uLT5tYXhfdHRsLCBwMSk7CisJCSAgICB9CisJCSAgR0VUU0hPUlQoYXJkbGVuLCBwMSk7CisJCSAgZW5kcnIgPSBwMSthcmRsZW47CisJCSAgCisJCSAgLyogVFRMIG9mIHJlY29yZCBpcyBtaW5pbXVtIG9mIENOQU1FUyBhbmQgUFRSICovCisJCSAgaWYgKGF0dGwgPCBjdHRsKQorCQkgICAgY3R0bCA9IGF0dGw7CisKKwkJICBpZiAoYXFjbGFzcyA9PSBDX0lOICYmIHJlcyAhPSAyICYmIChhcXR5cGUgPT0gVF9DTkFNRSB8fCBhcXR5cGUgPT0gVF9QVFIpKQorCQkgICAgeworCQkgICAgICBpZiAoIWV4dHJhY3RfbmFtZShoZWFkZXIsIHFsZW4sICZwMSwgbmFtZSwgMSwgMCkpCisJCQlyZXR1cm4gMDsKKwkJICAgICAgCisJCSAgICAgIGlmIChhcXR5cGUgPT0gVF9DTkFNRSkKKwkJCXsKKwkJCSAgaWYgKCFjbmFtZV9jb3VudC0tIHx8IHNlY3VyZSkKKwkJCSAgICByZXR1cm4gMDsgLyogbG9vcGVkIENOQU1FUywgb3IgRE5TU0VDLCB3aGljaCB3ZSBjYW4ndCBjYWNoZS4gKi8KKwkJCSAgZ290byBjbmFtZV9sb29wOworCQkJfQorCQkgICAgICAKKwkJICAgICAgY2FjaGVfaW5zZXJ0KG5hbWUsICZhZGRyLCBub3csIGN0dGwsIG5hbWVfZW5jb2RpbmcgfCBzZWNmbGFnIHwgRl9SRVZFUlNFKTsKKwkJICAgICAgZm91bmQgPSAxOyAKKwkJICAgIH0KKwkJICAKKwkJICBwMSA9IGVuZHJyOworCQkgIGlmICghQ0hFQ0tfTEVOKGhlYWRlciwgcDEsIHFsZW4sIDApKQorCQkgICAgcmV0dXJuIDA7IC8qIGJhZCBwYWNrZXQgKi8KKwkJfQorCSAgICB9CisJICAKKwkgICBpZiAoIWZvdW5kICYmICFvcHRpb25fYm9vbChPUFRfTk9fTkVHKSkKKwkgICAgeworCSAgICAgIGlmICghc2VhcmNoZWRfc29hKQorCQl7CisJCSAgc2VhcmNoZWRfc29hID0gMTsKKwkJICB0dGwgPSBmaW5kX3NvYShoZWFkZXIsIHFsZW4sIE5VTEwsIGRvY3RvcmVkKTsKKwkJfQorCSAgICAgIGlmICh0dGwpCisJCWNhY2hlX2luc2VydChOVUxMLCAmYWRkciwgbm93LCB0dGwsIG5hbWVfZW5jb2RpbmcgfCBGX1JFVkVSU0UgfCBGX05FRyB8IGZsYWdzIHwgc2VjZmxhZyk7CQorCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIGV2ZXJ5dGhpbmcgb3RoZXIgdGhhbiBQVFIgKi8KKwkgIHN0cnVjdCBjcmVjICpuZXdjOworCSAgaW50IGFkZHJsZW47CisKKwkgIGlmIChxdHlwZSA9PSBUX0EpCisJICAgIHsKKwkgICAgICBhZGRybGVuID0gSU5BRERSU1o7CisJICAgICAgZmxhZ3MgfD0gRl9JUFY0OworCSAgICB9CisjaWZkZWYgSEFWRV9JUFY2CisJICBlbHNlIGlmIChxdHlwZSA9PSBUX0FBQUEpCisJICAgIHsKKwkgICAgICBhZGRybGVuID0gSU42QUREUlNaOworCSAgICAgIGZsYWdzIHw9IEZfSVBWNjsKKwkgICAgfQorI2VuZGlmCisJICBlbHNlIAorCSAgICBjb250aW51ZTsKKwkgICAgCisJY25hbWVfbG9vcDE6CisJICBpZiAoIShwMSA9IHNraXBfcXVlc3Rpb25zKGhlYWRlciwgcWxlbikpKQorCSAgICByZXR1cm4gMDsKKwkgIAorCSAgZm9yIChqID0gbnRvaHMoaGVhZGVyLT5hbmNvdW50KTsgaiAhPSAwOyBqLS0pIAorCSAgICB7CisJICAgICAgaWYgKCEocmVzID0gZXh0cmFjdF9uYW1lKGhlYWRlciwgcWxlbiwgJnAxLCBuYW1lLCAwLCAxMCkpKQorCQlyZXR1cm4gMDsgLyogYmFkIHBhY2tldCAqLworCSAgICAgIAorCSAgICAgIEdFVFNIT1JUKGFxdHlwZSwgcDEpOyAKKwkgICAgICBHRVRTSE9SVChhcWNsYXNzLCBwMSk7CisJICAgICAgR0VUTE9ORyhhdHRsLCBwMSk7CisJICAgICAgaWYgKChkYWVtb24tPm1heF90dGwgIT0gMCkgJiYgKGF0dGwgPiBkYWVtb24tPm1heF90dGwpICYmICFpc19zaWduKQorCQl7CisJCSAgKHAxKSAtPSA0OworCQkgIFBVVExPTkcoZGFlbW9uLT5tYXhfdHRsLCBwMSk7CisJCX0KKwkgICAgICBHRVRTSE9SVChhcmRsZW4sIHAxKTsKKwkgICAgICBlbmRyciA9IHAxK2FyZGxlbjsKKwkgICAgICAKKwkgICAgICBpZiAoYXFjbGFzcyA9PSBDX0lOICYmIHJlcyAhPSAyICYmIChhcXR5cGUgPT0gVF9DTkFNRSB8fCBhcXR5cGUgPT0gcXR5cGUpKQorCQl7CisJCSAgaWYgKGFxdHlwZSA9PSBUX0NOQU1FKQorCQkgICAgeworCQkgICAgICBpZiAoIWNuYW1lX2NvdW50LS0pCisJCQlyZXR1cm4gMDsgLyogbG9vcGVkIENOQU1FUyAqLworCQkgICAgICBuZXdjID0gY2FjaGVfaW5zZXJ0KG5hbWUsIE5VTEwsIG5vdywgYXR0bCwgRl9DTkFNRSB8IEZfRk9SV0FSRCB8IHNlY2ZsYWcpOworCQkgICAgICBpZiAobmV3YykKKwkJCXsKKwkJCSAgbmV3Yy0+YWRkci5jbmFtZS50YXJnZXQuY2FjaGUgPSBOVUxMOworCQkJICAvKiBhbnl0aGluZyBvdGhlciB0aGFuIHplcm8sIHRvIGF2b2lkIGJlaW5nIG1pc3Rha2VuIGZvciBDTkFNRSB0byBpbnRlcmZhY2UtbmFtZSAqLyAKKwkJCSAgbmV3Yy0+YWRkci5jbmFtZS51aWQgPSAxOyAKKwkJCSAgaWYgKGNwcCkKKwkJCSAgICB7CisJCQkgICAgICBjcHAtPmFkZHIuY25hbWUudGFyZ2V0LmNhY2hlID0gbmV3YzsKKwkJCSAgICAgIGNwcC0+YWRkci5jbmFtZS51aWQgPSBuZXdjLT51aWQ7CisJCQkgICAgfQorCQkJfQorCQkgICAgICAKKwkJICAgICAgY3BwID0gbmV3YzsKKwkJICAgICAgaWYgKGF0dGwgPCBjdHRsKQorCQkJY3R0bCA9IGF0dGw7CisJCSAgICAgIAorCQkgICAgICBpZiAoIWV4dHJhY3RfbmFtZShoZWFkZXIsIHFsZW4sICZwMSwgbmFtZSwgMSwgMCkpCisJCQlyZXR1cm4gMDsKKwkJICAgICAgZ290byBjbmFtZV9sb29wMTsKKwkJICAgIH0KKwkJICBlbHNlIGlmICghKGZsYWdzICYgRl9OWERPTUFJTikpCisJCSAgICB7CisJCSAgICAgIGZvdW5kID0gMTsKKwkJICAgICAgCisJCSAgICAgIC8qIGNvcHkgYWRkcmVzcyBpbnRvIGFsaWduZWQgc3RvcmFnZSAqLworCQkgICAgICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIHAxLCBxbGVuLCBhZGRybGVuKSkKKwkJCXJldHVybiAwOyAvKiBiYWQgcGFja2V0ICovCisJCSAgICAgIG1lbWNweSgmYWRkciwgcDEsIGFkZHJsZW4pOworCQkgICAgICAKKwkJICAgICAgLyogY2hlY2sgZm9yIHJldHVybmVkIGFkZHJlc3MgaW4gcHJpdmF0ZSBzcGFjZSAqLworCQkgICAgICBpZiAoY2hlY2tfcmViaW5kICYmCisJCQkgIChmbGFncyAmIEZfSVBWNCkgJiYKKwkJCSAgcHJpdmF0ZV9uZXQoYWRkci5hZGRyLmFkZHI0LCAhb3B0aW9uX2Jvb2woT1BUX0xPQ0FMX1JFQklORCkpKQorCQkJcmV0dXJuIDE7CisJCSAgICAgIAorI2lmZGVmIEhBVkVfSVBTRVQKKwkJICAgICAgaWYgKGlwc2V0cyAmJiAoZmxhZ3MgJiAoRl9JUFY0IHwgRl9JUFY2KSkpCisJCQl7CisJCQkgIGlwc2V0c19jdXIgPSBpcHNldHM7CisJCQkgIHdoaWxlICgqaXBzZXRzX2N1cikKKwkJCSAgICB7CisJCQkgICAgICBsb2dfcXVlcnkoKGZsYWdzICYgKEZfSVBWNCB8IEZfSVBWNikpIHwgRl9JUFNFVCwgbmFtZSwgJmFkZHIsICppcHNldHNfY3VyKTsKKwkJCSAgICAgIGFkZF90b19pcHNldCgqaXBzZXRzX2N1cisrLCAmYWRkciwgZmxhZ3MsIDApOworCQkJICAgIH0KKwkJCX0KKyNlbmRpZgorCQkgICAgICAKKwkJICAgICAgbmV3YyA9IGNhY2hlX2luc2VydChuYW1lLCAmYWRkciwgbm93LCBhdHRsLCBmbGFncyB8IEZfRk9SV0FSRCB8IHNlY2ZsYWcpOworCQkgICAgICBpZiAobmV3YyAmJiBjcHApCisJCQl7CisJCQkgIGNwcC0+YWRkci5jbmFtZS50YXJnZXQuY2FjaGUgPSBuZXdjOworCQkJICBjcHAtPmFkZHIuY25hbWUudWlkID0gbmV3Yy0+dWlkOworCQkJfQorCQkgICAgICBjcHAgPSBOVUxMOworCQkgICAgfQorCQl9CisJICAgICAgCisJICAgICAgcDEgPSBlbmRycjsKKwkgICAgICBpZiAoIUNIRUNLX0xFTihoZWFkZXIsIHAxLCBxbGVuLCAwKSkKKwkJcmV0dXJuIDA7IC8qIGJhZCBwYWNrZXQgKi8KKwkgICAgfQorCSAgCisJICBpZiAoIWZvdW5kICYmICFvcHRpb25fYm9vbChPUFRfTk9fTkVHKSkKKwkgICAgeworCSAgICAgIGlmICghc2VhcmNoZWRfc29hKQorCQl7CisJCSAgc2VhcmNoZWRfc29hID0gMTsKKwkJICB0dGwgPSBmaW5kX3NvYShoZWFkZXIsIHFsZW4sIE5VTEwsIGRvY3RvcmVkKTsKKwkJfQorCSAgICAgIC8qIElmIHRoZXJlJ3Mgbm8gU09BIHRvIGdldCB0aGUgVFRMIGZyb20sIGJ1dCB0aGVyZSBpcyBhIENOQU1FIAorCQkgcG9pbnRpbmcgYXQgdGhpcywgaW5oZXJpdCBpdHMgVFRMICovCisJICAgICAgaWYgKHR0bCB8fCBjcHApCisJCXsKKwkJICBuZXdjID0gY2FjaGVfaW5zZXJ0KG5hbWUsIE5VTEwsIG5vdywgdHRsID8gdHRsIDogY3R0bCwgRl9GT1JXQVJEIHwgRl9ORUcgfCBmbGFncyB8IHNlY2ZsYWcpOwkKKwkJICBpZiAobmV3YyAmJiBjcHApCisJCSAgICB7CisJCSAgICAgIGNwcC0+YWRkci5jbmFtZS50YXJnZXQuY2FjaGUgPSBuZXdjOworCQkgICAgICBjcHAtPmFkZHIuY25hbWUudWlkID0gbmV3Yy0+dWlkOworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisgICAgfQorICAKKyAgLyogRG9uJ3QgcHV0IHN0dWZmIGZyb20gYSB0cnVuY2F0ZWQgcGFja2V0IGludG8gdGhlIGNhY2hlLgorICAgICBEb24ndCBjYWNoZSByZXBsaWVzIGZyb20gbm9uLXJlY3Vyc2l2ZSBuYW1lc2VydmVycywgc2luY2Ugd2UgbWF5IGdldCBhIAorICAgICByZXBseSBjb250YWluaW5nIGEgQ05BTUUgYnV0IG5vdCBpdHMgdGFyZ2V0LCBldmVuIHRob3VnaCB0aGUgdGFyZ2V0IAorICAgICBkb2VzIGV4aXN0LiAqLworICBpZiAoIShoZWFkZXItPmhiMyAmIEhCM19UQykgJiYgCisgICAgICAhKGhlYWRlci0+aGI0ICYgSEI0X0NEKSAmJgorICAgICAgKGhlYWRlci0+aGI0ICYgSEI0X1JBKSAmJgorICAgICAgIW5vX2NhY2hlX2Ruc3NlYykKKyAgICBjYWNoZV9lbmRfaW5zZXJ0KCk7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIElmIHRoZSBwYWNrZXQgaG9sZHMgZXhhY3RseSBvbmUgcXVlcnkKKyAgIHJldHVybiBGX0lQVjQgb3IgRl9JUFY2ICBhbmQgbGVhdmUgdGhlIG5hbWUgZnJvbSB0aGUgcXVlcnkgaW4gbmFtZSAqLwordW5zaWduZWQgaW50IGV4dHJhY3RfcmVxdWVzdChzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcWxlbiwgY2hhciAqbmFtZSwgdW5zaWduZWQgc2hvcnQgKnR5cGVwKQoreworICB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKikoaGVhZGVyKzEpOworICBpbnQgcXR5cGUsIHFjbGFzczsKKworICBpZiAodHlwZXApCisgICAgKnR5cGVwID0gMDsKKworICBpZiAobnRvaHMoaGVhZGVyLT5xZGNvdW50KSAhPSAxIHx8IE9QQ09ERShoZWFkZXIpICE9IFFVRVJZKQorICAgIHJldHVybiAwOyAvKiBtdXN0IGJlIGV4YWN0bHkgb25lIHF1ZXJ5LiAqLworICAKKyAgaWYgKCFleHRyYWN0X25hbWUoaGVhZGVyLCBxbGVuLCAmcCwgbmFtZSwgMSwgNCkpCisgICAgcmV0dXJuIDA7IC8qIGJhZCBwYWNrZXQgKi8KKyAgIAorICBHRVRTSE9SVChxdHlwZSwgcCk7IAorICBHRVRTSE9SVChxY2xhc3MsIHApOworCisgIGlmICh0eXBlcCkKKyAgICAqdHlwZXAgPSBxdHlwZTsKKworICBpZiAocWNsYXNzID09IENfSU4pCisgICAgeworICAgICAgaWYgKHF0eXBlID09IFRfQSkKKwlyZXR1cm4gRl9JUFY0OworICAgICAgaWYgKHF0eXBlID09IFRfQUFBQSkKKwlyZXR1cm4gRl9JUFY2OworICAgICAgaWYgKHF0eXBlID09IFRfQU5ZKQorCXJldHVybiAgRl9JUFY0IHwgRl9JUFY2OworICAgIH0KKyAgCisgIHJldHVybiBGX1FVRVJZOworfQorCisKK3NpemVfdCBzZXR1cF9yZXBseShzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcWxlbiwKKwkJc3RydWN0IGFsbF9hZGRyICphZGRycCwgdW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBsb25nIHR0bCkKK3sKKyAgdW5zaWduZWQgY2hhciAqcCA9IHNraXBfcXVlc3Rpb25zKGhlYWRlciwgcWxlbik7CisgIAorICAvKiBjbGVhciBhdXRob3JpdGF0aXZlIGFuZCB0cnVuY2F0ZWQgZmxhZ3MsIHNldCBRUiBmbGFnICovCisgIGhlYWRlci0+aGIzID0gKGhlYWRlci0+aGIzICYgfihIQjNfQUEgfCBIQjNfVEMpKSB8IEhCM19RUjsKKyAgLyogc2V0IFJBIGZsYWcgKi8KKyAgaGVhZGVyLT5oYjQgfD0gSEI0X1JBOworCisgIGhlYWRlci0+bnNjb3VudCA9IGh0b25zKDApOworICBoZWFkZXItPmFyY291bnQgPSBodG9ucygwKTsKKyAgaGVhZGVyLT5hbmNvdW50ID0gaHRvbnMoMCk7IC8qIG5vIGFuc3dlcnMgdW5sZXNzIGNoYW5nZWQgYmVsb3cgKi8KKyAgaWYgKGZsYWdzID09IEZfTkVHKQorICAgIFNFVF9SQ09ERShoZWFkZXIsIFNFUlZGQUlMKTsgLyogY291bGRuJ3QgZ2V0IG1lbW9yeSAqLworICBlbHNlIGlmIChmbGFncyA9PSBGX05PRVJSKQorICAgIFNFVF9SQ09ERShoZWFkZXIsIE5PRVJST1IpOyAvKiBlbXB0eSBkb21haW4gKi8KKyAgZWxzZSBpZiAoZmxhZ3MgPT0gRl9OWERPTUFJTikKKyAgICBTRVRfUkNPREUoaGVhZGVyLCBOWERPTUFJTik7CisgIGVsc2UgaWYgKHAgJiYgZmxhZ3MgPT0gRl9JUFY0KQorICAgIHsgLyogd2Uga25vdyB0aGUgYWRkcmVzcyAqLworICAgICAgU0VUX1JDT0RFKGhlYWRlciwgTk9FUlJPUik7CisgICAgICBoZWFkZXItPmFuY291bnQgPSBodG9ucygxKTsKKyAgICAgIGhlYWRlci0+aGIzIHw9IEhCM19BQTsKKyAgICAgIGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBOVUxMLCBOVUxMLCBzaXplb2Yoc3RydWN0IGRuc19oZWFkZXIpLCAmcCwgdHRsLCBOVUxMLCBUX0EsIENfSU4sICI0IiwgYWRkcnApOworICAgIH0KKyNpZmRlZiBIQVZFX0lQVjYKKyAgZWxzZSBpZiAocCAmJiBmbGFncyA9PSBGX0lQVjYpCisgICAgeworICAgICAgU0VUX1JDT0RFKGhlYWRlciwgTk9FUlJPUik7CisgICAgICBoZWFkZXItPmFuY291bnQgPSBodG9ucygxKTsKKyAgICAgIGhlYWRlci0+aGIzIHw9IEhCM19BQTsKKyAgICAgIGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBOVUxMLCBOVUxMLCBzaXplb2Yoc3RydWN0IGRuc19oZWFkZXIpLCAmcCwgdHRsLCBOVUxMLCBUX0FBQUEsIENfSU4sICI2IiwgYWRkcnApOworICAgIH0KKyNlbmRpZgorICBlbHNlIC8qIG5vd2hlcmUgdG8gZm9yd2FyZCB0byAqLworICAgIFNFVF9SQ09ERShoZWFkZXIsIFJFRlVTRUQpOworIAorICByZXR1cm4gcCAtICh1bnNpZ25lZCBjaGFyICopaGVhZGVyOworfQorCisvKiBjaGVjayBpZiBuYW1lIG1hdGNoZXMgbG9jYWwgbmFtZXMgaWUgZnJvbSAvZXRjL2hvc3RzIG9yIERIQ1Agb3IgbG9jYWwgbXggbmFtZXMuICovCitpbnQgY2hlY2tfZm9yX2xvY2FsX2RvbWFpbihjaGFyICpuYW1lLCB0aW1lX3Qgbm93KQoreworICBzdHJ1Y3QgY3JlYyAqY3JlY3A7CisgIHN0cnVjdCBteF9zcnZfcmVjb3JkICpteDsKKyAgc3RydWN0IHR4dF9yZWNvcmQgKnR4dDsKKyAgc3RydWN0IGludGVyZmFjZV9uYW1lICppbnRyOworICBzdHJ1Y3QgcHRyX3JlY29yZCAqcHRyOworICBzdHJ1Y3QgbmFwdHIgKm5hcHRyOworCisgIC8qIE5vdGU6IHRoZSBjYWxsIHRvIGNhY2hlX2ZpbmRfYnlfbmFtZSBpcyBpbnRlbmRlZCB0byBmaW5kIGFueSByZWNvcmQgd2hpY2ggbWF0Y2hlcworICAgICBpZSBBLCBBQUFBLCBDTkFNRSwgRFMuIEJlY2F1c2UgUlJTSUcgcmVjb3JkcyBhcmUgbWFya2VkIGJ5IHNldHRpbmcgYm90aCBGX0RTIGFuZCBGX0ROU0tFWSwKKyAgICAgY2FjaGVfZmluZF9ieSBuYW1lIG9yZGluYXJpbHkgb25seSByZXR1cm5zIHJlY29yZHMgd2l0aCBhbiBleGFjdCBtYXRjaCBvbiB0aG9zZSBiaXRzIChpZQorICAgICBmb3IgdGhlIGNhbGwgYmVsb3csIG9ubHkgRFMgcmVjb3JkcykuIFRoZSBGX05TSUdNQVRDSCBiaXQgY2hhbmdlcyB0aGlzIGJlaGF2aW91ciAqLworCisgIGlmICgoY3JlY3AgPSBjYWNoZV9maW5kX2J5X25hbWUoTlVMTCwgbmFtZSwgbm93LCBGX0lQVjQgfCBGX0lQVjYgfCBGX0NOQU1FIHwgRl9EUyB8IEZfTk9fUlIgfCBGX05TSUdNQVRDSCkpICYmCisgICAgICAoY3JlY3AtPmZsYWdzICYgKEZfSE9TVFMgfCBGX0RIQ1AgfCBGX0NPTkZJRykpKQorICAgIHJldHVybiAxOworICAKKyAgZm9yIChuYXB0ciA9IGRhZW1vbi0+bmFwdHI7IG5hcHRyOyBuYXB0ciA9IG5hcHRyLT5uZXh0KQorICAgICBpZiAoaG9zdG5hbWVfaXNlcXVhbChuYW1lLCBuYXB0ci0+bmFtZSkpCisgICAgICByZXR1cm4gMTsKKworICAgZm9yIChteCA9IGRhZW1vbi0+bXhuYW1lczsgbXg7IG14ID0gbXgtPm5leHQpCisgICAgaWYgKGhvc3RuYW1lX2lzZXF1YWwobmFtZSwgbXgtPm5hbWUpKQorICAgICAgcmV0dXJuIDE7CisKKyAgZm9yICh0eHQgPSBkYWVtb24tPnR4dDsgdHh0OyB0eHQgPSB0eHQtPm5leHQpCisgICAgaWYgKGhvc3RuYW1lX2lzZXF1YWwobmFtZSwgdHh0LT5uYW1lKSkKKyAgICAgIHJldHVybiAxOworCisgIGZvciAoaW50ciA9IGRhZW1vbi0+aW50X25hbWVzOyBpbnRyOyBpbnRyID0gaW50ci0+bmV4dCkKKyAgICBpZiAoaG9zdG5hbWVfaXNlcXVhbChuYW1lLCBpbnRyLT5uYW1lKSkKKyAgICAgIHJldHVybiAxOworCisgIGZvciAocHRyID0gZGFlbW9uLT5wdHI7IHB0cjsgcHRyID0gcHRyLT5uZXh0KQorICAgIGlmIChob3N0bmFtZV9pc2VxdWFsKG5hbWUsIHB0ci0+bmFtZSkpCisgICAgICByZXR1cm4gMTsKKyAKKyAgcmV0dXJuIDA7Cit9CisKKy8qIElzIHRoZSBwYWNrZXQgYSByZXBseSB3aXRoIHRoZSBhbnN3ZXIgYWRkcmVzcyBlcXVhbCB0byBhZGRyPworICAgSWYgc28gbXVuZyBpcyBpbnRvIGFuIE5YRE9NQUlOIHJlcGx5IGFuZCBhbHNvIHB1dCB0aGF0IGluZm9ybWF0aW9uCisgICBpbiB0aGUgY2FjaGUuICovCitpbnQgY2hlY2tfZm9yX2JvZ3VzX3dpbGRjYXJkKHN0cnVjdCBkbnNfaGVhZGVyICpoZWFkZXIsIHNpemVfdCBxbGVuLCBjaGFyICpuYW1lLCAKKwkJCSAgICAgc3RydWN0IGJvZ3VzX2FkZHIgKmJhZGRyLCB0aW1lX3Qgbm93KQoreworICB1bnNpZ25lZCBjaGFyICpwOworICBpbnQgaSwgcXR5cGUsIHFjbGFzcywgcmRsZW47CisgIHVuc2lnbmVkIGxvbmcgdHRsOworICBzdHJ1Y3QgYm9ndXNfYWRkciAqYmFkZHJwOworCisgIC8qIHNraXAgb3ZlciBxdWVzdGlvbnMgKi8KKyAgaWYgKCEocCA9IHNraXBfcXVlc3Rpb25zKGhlYWRlciwgcWxlbikpKQorICAgIHJldHVybiAwOyAvKiBiYWQgcGFja2V0ICovCisKKyAgZm9yIChpID0gbnRvaHMoaGVhZGVyLT5hbmNvdW50KTsgaSAhPSAwOyBpLS0pCisgICAgeworICAgICAgaWYgKCFleHRyYWN0X25hbWUoaGVhZGVyLCBxbGVuLCAmcCwgbmFtZSwgMSwgMTApKQorCXJldHVybiAwOyAvKiBiYWQgcGFja2V0ICovCisgIAorICAgICAgR0VUU0hPUlQocXR5cGUsIHApOyAKKyAgICAgIEdFVFNIT1JUKHFjbGFzcywgcCk7CisgICAgICBHRVRMT05HKHR0bCwgcCk7CisgICAgICBHRVRTSE9SVChyZGxlbiwgcCk7CisgICAgICAKKyAgICAgIGlmIChxY2xhc3MgPT0gQ19JTiAmJiBxdHlwZSA9PSBUX0EpCisJeworCSAgaWYgKCFDSEVDS19MRU4oaGVhZGVyLCBwLCBxbGVuLCBJTkFERFJTWikpCisJICAgIHJldHVybiAwOworCSAgCisJICBmb3IgKGJhZGRycCA9IGJhZGRyOyBiYWRkcnA7IGJhZGRycCA9IGJhZGRycC0+bmV4dCkKKwkgICAgaWYgKG1lbWNtcCgmYmFkZHJwLT5hZGRyLCBwLCBJTkFERFJTWikgPT0gMCkKKwkgICAgICB7CisJCS8qIEZvdW5kIGEgYm9ndXMgYWRkcmVzcy4gSW5zZXJ0IHRoYXQgaW5mbyBoZXJlLCBzaW5jZSB0aGVyZSBubyBTT0EgcmVjb3JkCisJCSAgIHRvIGdldCB0aGUgdHRsIGZyb20gaW4gdGhlIG5vcm1hbCBwcm9jZXNzaW5nICovCisJCWNhY2hlX3N0YXJ0X2luc2VydCgpOworCQljYWNoZV9pbnNlcnQobmFtZSwgTlVMTCwgbm93LCB0dGwsIEZfSVBWNCB8IEZfRk9SV0FSRCB8IEZfTkVHIHwgRl9OWERPTUFJTik7CisJCWNhY2hlX2VuZF9pbnNlcnQoKTsKKwkJCisJCXJldHVybiAxOworCSAgICAgIH0KKwl9CisgICAgICAKKyAgICAgIGlmICghQUREX1JETEVOKGhlYWRlciwgcCwgcWxlbiwgcmRsZW4pKQorCXJldHVybiAwOworICAgIH0KKyAgCisgIHJldHVybiAwOworfQorCitpbnQgY2hlY2tfZm9yX2lnbm9yZWRfYWRkcmVzcyhzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBzaXplX3QgcWxlbiwgc3RydWN0IGJvZ3VzX2FkZHIgKmJhZGRyKQoreworICB1bnNpZ25lZCBjaGFyICpwOworICBpbnQgaSwgcXR5cGUsIHFjbGFzcywgcmRsZW47CisgIHN0cnVjdCBib2d1c19hZGRyICpiYWRkcnA7CisKKyAgLyogc2tpcCBvdmVyIHF1ZXN0aW9ucyAqLworICBpZiAoIShwID0gc2tpcF9xdWVzdGlvbnMoaGVhZGVyLCBxbGVuKSkpCisgICAgcmV0dXJuIDA7IC8qIGJhZCBwYWNrZXQgKi8KKworICBmb3IgKGkgPSBudG9ocyhoZWFkZXItPmFuY291bnQpOyBpICE9IDA7IGktLSkKKyAgICB7CisgICAgICBpZiAoIShwID0gc2tpcF9uYW1lKHAsIGhlYWRlciwgcWxlbiwgMTApKSkKKwlyZXR1cm4gMDsgLyogYmFkIHBhY2tldCAqLworICAgICAgCisgICAgICBHRVRTSE9SVChxdHlwZSwgcCk7IAorICAgICAgR0VUU0hPUlQocWNsYXNzLCBwKTsKKyAgICAgIHAgKz0gNDsgLyogVFRMICovCisgICAgICBHRVRTSE9SVChyZGxlbiwgcCk7CisgICAgICAKKyAgICAgIGlmIChxY2xhc3MgPT0gQ19JTiAmJiBxdHlwZSA9PSBUX0EpCisJeworCSAgaWYgKCFDSEVDS19MRU4oaGVhZGVyLCBwLCBxbGVuLCBJTkFERFJTWikpCisJICAgIHJldHVybiAwOworCSAgCisJICBmb3IgKGJhZGRycCA9IGJhZGRyOyBiYWRkcnA7IGJhZGRycCA9IGJhZGRycC0+bmV4dCkKKwkgICAgaWYgKG1lbWNtcCgmYmFkZHJwLT5hZGRyLCBwLCBJTkFERFJTWikgPT0gMCkKKwkgICAgICByZXR1cm4gMTsKKwl9CisgICAgICAKKyAgICAgIGlmICghQUREX1JETEVOKGhlYWRlciwgcCwgcWxlbiwgcmRsZW4pKQorCXJldHVybiAwOworICAgIH0KKyAgCisgIHJldHVybiAwOworfQorCitpbnQgYWRkX3Jlc291cmNlX3JlY29yZChzdHJ1Y3QgZG5zX2hlYWRlciAqaGVhZGVyLCBjaGFyICpsaW1pdCwgaW50ICp0cnVuY3AsIGludCBuYW1lb2Zmc2V0LCB1bnNpZ25lZCBjaGFyICoqcHAsIAorCQkJdW5zaWduZWQgbG9uZyB0dGwsIGludCAqb2Zmc2V0LCB1bnNpZ25lZCBzaG9ydCB0eXBlLCB1bnNpZ25lZCBzaG9ydCBjbGFzcywgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgIHZhX2xpc3QgYXA7CisgIHVuc2lnbmVkIGNoYXIgKnNhdiwgKnAgPSAqcHA7CisgIGludCBqOworICB1bnNpZ25lZCBzaG9ydCB1c3ZhbDsKKyAgbG9uZyBsdmFsOworICBjaGFyICpzdmFsOworCisgIGlmICh0cnVuY3AgJiYgKnRydW5jcCkKKyAgICByZXR1cm4gMDsKKyAKKyAgdmFfc3RhcnQoYXAsIGZvcm1hdCk7ICAgLyogbWFrZSBhcCBwb2ludCB0byAxc3QgdW5hbWVkIGFyZ3VtZW50ICovCisgIAorICBpZiAobmFtZW9mZnNldCA+IDApCisgICAgeworICAgICAgUFVUU0hPUlQobmFtZW9mZnNldCB8IDB4YzAwMCwgcCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgY2hhciAqbmFtZSA9IHZhX2FyZyhhcCwgY2hhciAqKTsKKyAgICAgIGlmIChuYW1lKQorCXAgPSBkb19yZmMxMDM1X25hbWUocCwgbmFtZSk7CisgICAgICBpZiAobmFtZW9mZnNldCA8IDApCisJeworCSAgUFVUU0hPUlQoLW5hbWVvZmZzZXQgfCAweGMwMDAsIHApOworCX0KKyAgICAgIGVsc2UKKwkqcCsrID0gMDsKKyAgICB9CisKKyAgUFVUU0hPUlQodHlwZSwgcCk7CisgIFBVVFNIT1JUKGNsYXNzLCBwKTsKKyAgUFVUTE9ORyh0dGwsIHApOyAgICAgIC8qIFRUTCAqLworCisgIHNhdiA9IHA7ICAgICAgICAgICAgICAvKiBTYXZlIHBvaW50ZXIgdG8gUkRMZW5ndGggZmllbGQgKi8KKyAgUFVUU0hPUlQoMCwgcCk7ICAgICAgIC8qIFBsYWNlaG9sZGVyIFJETGVuZ3RoICovCisKKyAgZm9yICg7ICpmb3JtYXQ7IGZvcm1hdCsrKQorICAgIHN3aXRjaCAoKmZvcm1hdCkKKyAgICAgIHsKKyNpZmRlZiBIQVZFX0lQVjYKKyAgICAgIGNhc2UgJzYnOgorCXN2YWwgPSB2YV9hcmcoYXAsIGNoYXIgKik7IAorCW1lbWNweShwLCBzdmFsLCBJTjZBRERSU1opOworCXAgKz0gSU42QUREUlNaOworCWJyZWFrOworI2VuZGlmCisJCisgICAgICBjYXNlICc0JzoKKwlzdmFsID0gdmFfYXJnKGFwLCBjaGFyICopOyAKKwltZW1jcHkocCwgc3ZhbCwgSU5BRERSU1opOworCXAgKz0gSU5BRERSU1o7CisJYnJlYWs7CisJCisgICAgICBjYXNlICdiJzoKKwl1c3ZhbCA9IHZhX2FyZyhhcCwgaW50KTsKKwkqcCsrID0gdXN2YWw7CisJYnJlYWs7CisJCisgICAgICBjYXNlICdzJzoKKwl1c3ZhbCA9IHZhX2FyZyhhcCwgaW50KTsKKwlQVVRTSE9SVCh1c3ZhbCwgcCk7CisJYnJlYWs7CisJCisgICAgICBjYXNlICdsJzoKKwlsdmFsID0gdmFfYXJnKGFwLCBsb25nKTsKKwlQVVRMT05HKGx2YWwsIHApOworCWJyZWFrOworCQorICAgICAgY2FzZSAnZCc6CisJLyogZ2V0IGRvbWFpbi1uYW1lIGFuc3dlciBhcmcgYW5kIHN0b3JlIGl0IGluIFJEQVRBIGZpZWxkICovCisJaWYgKG9mZnNldCkKKwkgICpvZmZzZXQgPSBwIC0gKHVuc2lnbmVkIGNoYXIgKiloZWFkZXI7CisJcCA9IGRvX3JmYzEwMzVfbmFtZShwLCB2YV9hcmcoYXAsIGNoYXIgKikpOworCSpwKysgPSAwOworCWJyZWFrOworCQorICAgICAgY2FzZSAndCc6CisJdXN2YWwgPSB2YV9hcmcoYXAsIGludCk7CisJc3ZhbCA9IHZhX2FyZyhhcCwgY2hhciAqKTsKKwlpZiAodXN2YWwgIT0gMCkKKwkgIG1lbWNweShwLCBzdmFsLCB1c3ZhbCk7CisJcCArPSB1c3ZhbDsKKwlicmVhazsKKworICAgICAgY2FzZSAneic6CisJc3ZhbCA9IHZhX2FyZyhhcCwgY2hhciAqKTsKKwl1c3ZhbCA9IHN2YWwgPyBzdHJsZW4oc3ZhbCkgOiAwOworCWlmICh1c3ZhbCA+IDI1NSkKKwkgIHVzdmFsID0gMjU1OworCSpwKysgPSAodW5zaWduZWQgY2hhcil1c3ZhbDsKKwltZW1jcHkocCwgc3ZhbCwgdXN2YWwpOworCXAgKz0gdXN2YWw7CisJYnJlYWs7CisgICAgICB9CisKKyAgdmFfZW5kKGFwKTsJLyogY2xlYW4gdXAgdmFyaWFibGUgYXJndW1lbnQgcG9pbnRlciAqLworICAKKyAgaiA9IHAgLSBzYXYgLSAyOworICBQVVRTSE9SVChqLCBzYXYpOyAgICAgLyogTm93LCBzdG9yZSByZWFsIFJETGVuZ3RoICovCisgIAorICAvKiBjaGVjayBmb3Igb3ZlcmZsb3cgb2YgYnVmZmVyICovCisgIGlmIChsaW1pdCAmJiAoKHVuc2lnbmVkIGNoYXIgKilsaW1pdCAtIHApIDwgMCkKKyAgICB7CisgICAgICBpZiAodHJ1bmNwKQorCSp0cnVuY3AgPSAxOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAKKyAgKnBwID0gcDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNyZWNfdHRsKHN0cnVjdCBjcmVjICpjcmVjcCwgdGltZV90IG5vdykKK3sKKyAgLyogUmV0dXJuIDAgdHRsIGZvciBESENQIGVudHJpZXMsIHdoaWNoIG1pZ2h0IGNoYW5nZQorICAgICBiZWZvcmUgdGhlIGxlYXNlIGV4cGlyZXMuICovCisKKyAgaWYgIChjcmVjcC0+ZmxhZ3MgJiAoRl9JTU1PUlRBTCB8IEZfREhDUCkpCisgICAgcmV0dXJuIGRhZW1vbi0+bG9jYWxfdHRsOworICAKKyAgLyogUmV0dXJuIHRoZSBNYXggVFRMIHZhbHVlIGlmIGl0IGlzIGxvd2VyIHRoZW4gdGhlIGFjdHVhbCBUVEwgKi8KKyAgaWYgKGRhZW1vbi0+bWF4X3R0bCA9PSAwIHx8ICgodW5zaWduZWQpKGNyZWNwLT50dGQgLSBub3cpIDwgZGFlbW9uLT5tYXhfdHRsKSkKKyAgICByZXR1cm4gY3JlY3AtPnR0ZCAtIG5vdzsKKyAgZWxzZQorICAgIHJldHVybiBkYWVtb24tPm1heF90dGw7Cit9CisgIAorCisvKiByZXR1cm4gemVybyBpZiB3ZSBjYW4ndCBhbnN3ZXIgZnJvbSBjYWNoZSwgb3IgcGFja2V0IHNpemUgaWYgd2UgY2FuICovCitzaXplX3QgYW5zd2VyX3JlcXVlc3Qoc3RydWN0IGRuc19oZWFkZXIgKmhlYWRlciwgY2hhciAqbGltaXQsIHNpemVfdCBxbGVuLCAgCisJCSAgICAgIHN0cnVjdCBpbl9hZGRyIGxvY2FsX2FkZHIsIHN0cnVjdCBpbl9hZGRyIGxvY2FsX25ldG1hc2ssIAorCQkgICAgICB0aW1lX3Qgbm93LCBpbnQgKmFkX3JlcWQsIGludCAqZG9fYml0KSAKK3sKKyAgY2hhciAqbmFtZSA9IGRhZW1vbi0+bmFtZWJ1ZmY7CisgIHVuc2lnbmVkIGNoYXIgKnAsICphbnNwLCAqcGhlYWRlcjsKKyAgdW5zaWduZWQgaW50IHF0eXBlLCBxY2xhc3M7CisgIHN0cnVjdCBhbGxfYWRkciBhZGRyOworICBpbnQgbmFtZW9mZnNldDsKKyAgdW5zaWduZWQgc2hvcnQgZmxhZzsKKyAgaW50IHEsIGFucywgYW5zY291bnQgPSAwLCBhZGRuY291bnQgPSAwOworICBpbnQgZHJ5cnVuID0gMCwgc2VjX3JlcWQgPSAwLCBoYXZlX3BzZXVkb2hlYWRlciA9IDA7CisgIGludCBpc19zaWduOworICBzdHJ1Y3QgY3JlYyAqY3JlY3A7CisgIGludCBueGRvbWFpbiA9IDAsIGF1dGggPSAxLCB0cnVuYyA9IDAsIHNlY19kYXRhID0gMTsKKyAgc3RydWN0IG14X3Nydl9yZWNvcmQgKnJlYzsKKyAgc2l6ZV90IGxlbjsKKyAKKyAgLyogRG9uJ3QgcmV0dXJuIEFEIHNldCBpZiBjaGVja2luZyBkaXNhYmxlZC4gKi8KKyAgaWYgKGhlYWRlci0+aGI0ICYgSEI0X0NEKQorICAgIHNlY19kYXRhID0gMDsKKyAgCisgIC8qIFJGQyA2ODQwIDUuNyAqLworICAqYWRfcmVxZCA9IGhlYWRlci0+aGI0ICYgSEI0X0FEOworICAqZG9fYml0ID0gMDsKKworICAvKiBJZiB0aGVyZSBpcyBhbiBSRkMyNjcxIHBzZXVkb2hlYWRlciB0aGVuIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkKKyAgICAgcGFydGlhbCByZXBsaWVzLCBzbyB3ZSBoYXZlIHRvIGRvIGEgZHJ5IHJ1biB0byBzZWUgaWYgd2UgY2FuIGFuc3dlcgorICAgICB0aGUgcXVlcnkuIFdlIGNoZWNrIHRvIHNlZSBpZiB0aGUgZG8gYml0IGlzIHNldCwgaWYgc28gd2UgYWx3YXlzCisgICAgIGZvcndhcmQgcmF0aGVyIHRoYW4gYW5zd2VyaW5nIGZyb20gdGhlIGNhY2hlLCB3aGljaCBkb2Vzbid0IGluY2x1ZGUKKyAgICAgc2VjdXJpdHkgaW5mb3JtYXRpb24sIHVubGVzcyB3ZSdyZSBpbiBETlNTRUMgdmFsaWRhdGlvbiBtb2RlLiAqLworCisgIGlmIChmaW5kX3BzZXVkb2hlYWRlcihoZWFkZXIsIHFsZW4sIE5VTEwsICZwaGVhZGVyLCAmaXNfc2lnbikpCisgICAgeyAKKyAgICAgIHVuc2lnbmVkIHNob3J0IHVkcHN6LCBmbGFnczsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKnBzYXZlID0gcGhlYWRlcjsKKworICAgICAgaGF2ZV9wc2V1ZG9oZWFkZXIgPSAxOworCisgICAgICBHRVRTSE9SVCh1ZHBzeiwgcGhlYWRlcik7CisgICAgICBwaGVhZGVyICs9IDI7IC8qIGV4dF9yY29kZSAqLworICAgICAgR0VUU0hPUlQoZmxhZ3MsIHBoZWFkZXIpOworICAgICAgCisgICAgICBpZiAoKHNlY19yZXFkID0gZmxhZ3MgJiAweDgwMDApKQorCSpkb19iaXQgPSAxOy8qIGRvIGJpdCAqLyAKKyAgICAgICphZF9yZXFkID0gMTsKKworICAgICAgLyogSWYgb3VyIGNsaWVudCBpcyBhZHZlcnRpc2luZyBhIGxhcmdlciBVRFAgcGFja2V0IHNpemUKKwkgdGhhbiB3ZSBhbGxvdywgdHJpbSBpdCBzbyB0aGF0IHdlIGRvbid0IGdldCBhbiBvdmVybGFyZ2UKKwkgcmVzcG9uc2UgZnJvbSB1cHN0cmVhbSAqLworCisgICAgICBpZiAoIWlzX3NpZ24gJiYgKHVkcHN6ID4gZGFlbW9uLT5lZG5zX3BrdHN6KSkKKwlQVVRTSE9SVChkYWVtb24tPmVkbnNfcGt0c3osIHBzYXZlKTsgCisKKyAgICAgIGRyeXJ1biA9IDE7CisgICAgfQorCisgIGlmIChudG9ocyhoZWFkZXItPnFkY291bnQpID09IDAgfHwgT1BDT0RFKGhlYWRlcikgIT0gUVVFUlkgKQorICAgIHJldHVybiAwOworICAKKyAgZm9yIChyZWMgPSBkYWVtb24tPm14bmFtZXM7IHJlYzsgcmVjID0gcmVjLT5uZXh0KQorICAgIHJlYy0+b2Zmc2V0ID0gMDsKKyAgCisgcmVydW46CisgIC8qIGRldGVybWluZSBlbmQgb2YgcXVlc3Rpb24gc2VjdGlvbiAod2UgcHV0IGFuc3dlcnMgdGhlcmUpICovCisgIGlmICghKGFuc3AgPSBza2lwX3F1ZXN0aW9ucyhoZWFkZXIsIHFsZW4pKSkKKyAgICByZXR1cm4gMDsgLyogYmFkIHBhY2tldCAqLworICAgCisgIC8qIG5vdyBwcm9jZXNzIGVhY2ggcXVlc3Rpb24sIGFuc3dlcnMgZ28gaW4gUlJzIGFmdGVyIHRoZSBxdWVzdGlvbiAqLworICBwID0gKHVuc2lnbmVkIGNoYXIgKikoaGVhZGVyKzEpOworCisgIGZvciAocSA9IG50b2hzKGhlYWRlci0+cWRjb3VudCk7IHEgIT0gMDsgcS0tKQorICAgIHsKKyAgICAgIC8qIHNhdmUgcG9pbnRlciB0byBuYW1lIGZvciBjb3B5aW5nIGludG8gYW5zd2VycyAqLworICAgICAgbmFtZW9mZnNldCA9IHAgLSAodW5zaWduZWQgY2hhciAqKWhlYWRlcjsKKworICAgICAgLyogbm93IGV4dHJhY3QgbmFtZSBhcyAuLWNvbmNhdGVuYXRlZCBzdHJpbmcgaW50byBuYW1lICovCisgICAgICBpZiAoIWV4dHJhY3RfbmFtZShoZWFkZXIsIHFsZW4sICZwLCBuYW1lLCAxLCA0KSkKKwlyZXR1cm4gMDsgLyogYmFkIHBhY2tldCAqLworICAgICAgICAgICAgCisgICAgICBHRVRTSE9SVChxdHlwZSwgcCk7IAorICAgICAgR0VUU0hPUlQocWNsYXNzLCBwKTsKKworICAgICAgYW5zID0gMDsgLyogaGF2ZSB3ZSBhbnN3ZXJlZCB0aGlzIHF1ZXN0aW9uICovCisgICAgICAKKyAgICAgIGlmIChxdHlwZSA9PSBUX1RYVCB8fCBxdHlwZSA9PSBUX0FOWSkKKwl7CisJICBzdHJ1Y3QgdHh0X3JlY29yZCAqdDsKKwkgIGZvcih0ID0gZGFlbW9uLT50eHQ7IHQgOyB0ID0gdC0+bmV4dCkKKwkgICAgeworCSAgICAgIGlmICh0LT5jbGFzcyA9PSBxY2xhc3MgJiYgaG9zdG5hbWVfaXNlcXVhbChuYW1lLCB0LT5uYW1lKSkKKwkJeworCQkgIGFucyA9IDE7CisJCSAgaWYgKCFkcnlydW4pCisJCSAgICB7CisJCSAgICAgIHVuc2lnbmVkIGxvbmcgdHRsID0gZGFlbW9uLT5sb2NhbF90dGw7CisJCSAgICAgIGludCBvayA9IDE7CisJCSAgICAgIGxvZ19xdWVyeShGX0NPTkZJRyB8IEZfUlJOQU1FLCBuYW1lLCBOVUxMLCAiPFRYVD4iKTsKKwkJICAgICAgLyogRHluYW1pY2FsbHkgZ2VuZXJhdGUgc3RhdCByZWNvcmQgKi8KKwkJICAgICAgaWYgKHQtPnN0YXQgIT0gMCkKKwkJCXsKKwkJCSAgdHRsID0gMDsKKwkJCSAgaWYgKCFjYWNoZV9tYWtlX3N0YXQodCkpCisJCQkgICAgb2sgPSAwOworCQkJfQorCQkgICAgICAKKwkJICAgICAgaWYgKG9rICYmIGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBuYW1lb2Zmc2V0LCAmYW5zcCwgCisJCQkJCQkgICAgdHRsLCBOVUxMLAorCQkJCQkJICAgIFRfVFhULCB0LT5jbGFzcywgInQiLCB0LT5sZW4sIHQtPnR4dCkpCisJCQlhbnNjb3VudCsrOworCisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKworI2lmZGVmIEhBVkVfRE5TU0VDCisgICAgICBpZiAob3B0aW9uX2Jvb2woT1BUX0ROU1NFQ19WQUxJRCkgJiYgKHF0eXBlID09IFRfRE5TS0VZIHx8IHF0eXBlID09IFRfRFMpKQorCXsKKwkgIGludCBnb3RvbmUgPSAwOworCSAgc3RydWN0IGJsb2NrZGF0YSAqa2V5ZGF0YTsKKworCSAgLyogRG8gd2UgaGF2ZSBSUlNJRz8gQ2FuJ3QgZG8gRFMgb3IgRE5TS0VZIG90aGVyd2lzZS4gKi8KKwkgIGlmIChzZWNfcmVxZCkKKwkgICAgeworCSAgICAgIGNyZWNwID0gTlVMTDsKKwkgICAgICB3aGlsZSAoKGNyZWNwID0gY2FjaGVfZmluZF9ieV9uYW1lKGNyZWNwLCBuYW1lLCBub3csIEZfRE5TS0VZIHwgRl9EUykpKQorCQlpZiAoY3JlY3AtPnVpZCA9PSBxY2xhc3MgJiYgY3JlY3AtPmFkZHIuc2lnLnR5cGVfY292ZXJlZCA9PSBxdHlwZSkKKwkJICBicmVhazsKKwkgICAgfQorCSAgCisJICBpZiAoIXNlY19yZXFkIHx8IGNyZWNwKQorCSAgICB7CisJICAgICAgaWYgKHF0eXBlID09IFRfRFMpCisJCXsKKwkJICBjcmVjcCA9IE5VTEw7CisJCSAgd2hpbGUgKChjcmVjcCA9IGNhY2hlX2ZpbmRfYnlfbmFtZShjcmVjcCwgbmFtZSwgbm93LCBGX0RTKSkpCisJCSAgICBpZiAoY3JlY3AtPnVpZCA9PSBxY2xhc3MpCisJCSAgICAgIHsKKwkJCWdvdG9uZSA9IDE7IAorCQkJaWYgKCFkcnlydW4pCisJCQkgIHsKKwkJCSAgICBpZiAoY3JlY3AtPmZsYWdzICYgRl9ORUcpCisJCQkgICAgICB7CisJCQkJaWYgKGNyZWNwLT5mbGFncyAmIEZfTlhET01BSU4pCisJCQkJICBueGRvbWFpbiA9IDE7CisJCQkJbG9nX3F1ZXJ5KEZfVVBTVFJFQU0sIG5hbWUsIE5VTEwsICJzZWN1cmUgbm8gRFMiKTsJCisJCQkgICAgICB9CisJCQkgICAgZWxzZSBpZiAoKGtleWRhdGEgPSBibG9ja2RhdGFfcmV0cmlldmUoY3JlY3AtPmFkZHIuZHMua2V5ZGF0YSwgY3JlY3AtPmFkZHIuZHMua2V5bGVuLCBOVUxMKSkpCisJCQkgICAgICB7CQkJICAgICAJCQkgICAgICAKKwkJCQlzdHJ1Y3QgYWxsX2FkZHIgYTsKKwkJCQlhLmFkZHIua2V5dGFnID0gIGNyZWNwLT5hZGRyLmRzLmtleXRhZzsKKwkJCQlsb2dfcXVlcnkoRl9LRVlUQUcgfCAoY3JlY3AtPmZsYWdzICYgRl9DT05GSUcpLCBuYW1lLCAmYSwgIkRTIGtleXRhZyAldSIpOworCQkJCWlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIAorCQkJCQkJCWNyZWNfdHRsKGNyZWNwLCBub3cpLCAmbmFtZW9mZnNldCwKKwkJCQkJCQlUX0RTLCBxY2xhc3MsICJzYmJ0IiwgCisJCQkJCQkJY3JlY3AtPmFkZHIuZHMua2V5dGFnLCBjcmVjcC0+YWRkci5kcy5hbGdvLCAKKwkJCQkJCQljcmVjcC0+YWRkci5kcy5kaWdlc3QsIGNyZWNwLT5hZGRyLmRzLmtleWxlbiwga2V5ZGF0YSkpCisJCQkJICBhbnNjb3VudCsrOworCQkJCQorCQkJICAgICAgfSAKKwkJCSAgfQorCQkgICAgICB9CisJCX0KKwkgICAgICBlbHNlIC8qIEROU0tFWSAqLworCQl7CisJCSAgY3JlY3AgPSBOVUxMOworCQkgIHdoaWxlICgoY3JlY3AgPSBjYWNoZV9maW5kX2J5X25hbWUoY3JlY3AsIG5hbWUsIG5vdywgRl9ETlNLRVkpKSkKKwkJICAgIGlmIChjcmVjcC0+dWlkID09IHFjbGFzcykKKwkJICAgICAgeworCQkJZ290b25lID0gMTsKKwkJCWlmICghZHJ5cnVuICYmIChrZXlkYXRhID0gYmxvY2tkYXRhX3JldHJpZXZlKGNyZWNwLT5hZGRyLmtleS5rZXlkYXRhLCBjcmVjcC0+YWRkci5rZXkua2V5bGVuLCBOVUxMKSkpCisJCQkgIHsJCQkgICAgIAkJCSAgICAgIAorCQkJICAgIHN0cnVjdCBhbGxfYWRkciBhOworCQkJICAgIGEuYWRkci5rZXl0YWcgPSAgY3JlY3AtPmFkZHIua2V5LmtleXRhZzsKKwkJCSAgICBsb2dfcXVlcnkoRl9LRVlUQUcgfCAoY3JlY3AtPmZsYWdzICYgRl9DT05GSUcpLCBuYW1lLCAmYSwgIkROU0tFWSBrZXl0YWcgJXUiKTsKKwkJCSAgICBpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIG5hbWVvZmZzZXQsICZhbnNwLCAKKwkJCQkJCSAgICBjcmVjX3R0bChjcmVjcCwgbm93KSwgJm5hbWVvZmZzZXQsCisJCQkJCQkgICAgVF9ETlNLRVksIHFjbGFzcywgInNiYnQiLCAKKwkJCQkJCSAgICBjcmVjcC0+YWRkci5rZXkuZmxhZ3MsIDMsIGNyZWNwLT5hZGRyLmtleS5hbGdvLCBjcmVjcC0+YWRkci5rZXkua2V5bGVuLCBrZXlkYXRhKSkKKwkJCSAgICAgIGFuc2NvdW50Kys7CisJCQkgIH0KKwkJICAgICAgfQorCQl9CisJICAgIH0KKwkgIAorCSAgLyogTm93IGRvIFJSU0lHcyAqLworCSAgaWYgKGdvdG9uZSkKKwkgICAgeworCSAgICAgIGFucyA9IDE7CisJICAgICAgYXV0aCA9IDA7CisJICAgICAgaWYgKCFkcnlydW4gJiYgc2VjX3JlcWQpCisJCXsKKwkJICBjcmVjcCA9IE5VTEw7CisJCSAgd2hpbGUgKChjcmVjcCA9IGNhY2hlX2ZpbmRfYnlfbmFtZShjcmVjcCwgbmFtZSwgbm93LCBGX0ROU0tFWSB8IEZfRFMpKSkKKwkJICAgIGlmIChjcmVjcC0+dWlkID09IHFjbGFzcyAmJiBjcmVjcC0+YWRkci5zaWcudHlwZV9jb3ZlcmVkID09IHF0eXBlICYmCisJCQkoa2V5ZGF0YSA9IGJsb2NrZGF0YV9yZXRyaWV2ZShjcmVjcC0+YWRkci5zaWcua2V5ZGF0YSwgY3JlY3AtPmFkZHIuc2lnLmtleWxlbiwgTlVMTCkpKQorCQkgICAgICB7CisJCQlhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIAorCQkJCQkgICAgY3JlY190dGwoY3JlY3AsIG5vdyksICZuYW1lb2Zmc2V0LAorCQkJCQkgICAgVF9SUlNJRywgcWNsYXNzLCAidCIsIGNyZWNwLT5hZGRyLnNpZy5rZXlsZW4sIGtleWRhdGEpOworCQkJYW5zY291bnQrKzsKKwkJICAgICAgfQorCQl9CisJICAgIH0KKwl9CisjZW5kaWYJICAgICAKKyAgICAgIAorICAgICAgaWYgKHFjbGFzcyA9PSBDX0lOKQorCXsKKwkgIHN0cnVjdCB0eHRfcmVjb3JkICp0OworCisJICBmb3IgKHQgPSBkYWVtb24tPnJyOyB0OyB0ID0gdC0+bmV4dCkKKwkgICAgaWYgKCh0LT5jbGFzcyA9PSBxdHlwZSB8fCBxdHlwZSA9PSBUX0FOWSkgJiYgaG9zdG5hbWVfaXNlcXVhbChuYW1lLCB0LT5uYW1lKSkKKwkgICAgICB7CisJCWFucyA9IDE7CisJCWlmICghZHJ5cnVuKQorCQkgIHsKKwkJICAgIGxvZ19xdWVyeShGX0NPTkZJRyB8IEZfUlJOQU1FLCBuYW1lLCBOVUxMLCAiPFJSPiIpOworCQkgICAgaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBuYW1lb2Zmc2V0LCAmYW5zcCwgCisJCQkJCSAgICBkYWVtb24tPmxvY2FsX3R0bCwgTlVMTCwKKwkJCQkJICAgIHQtPmNsYXNzLCBDX0lOLCAidCIsIHQtPmxlbiwgdC0+dHh0KSkKKwkJICAgICAgYW5zY291bnQgKys7CisJCSAgfQorCSAgICAgIH0KKwkJCisJICBpZiAocXR5cGUgPT0gVF9QVFIgfHwgcXR5cGUgPT0gVF9BTlkpCisJICAgIHsKKwkgICAgICAvKiBzZWUgaWYgaXQncyB3LnoueS56LmluLWFkZHIuYXJwYSBmb3JtYXQgKi8KKwkgICAgICBpbnQgaXNfYXJwYSA9IGluX2FycGFfbmFtZV8yX2FkZHIobmFtZSwgJmFkZHIpOworCSAgICAgIHN0cnVjdCBwdHJfcmVjb3JkICpwdHI7CisJICAgICAgc3RydWN0IGludGVyZmFjZV9uYW1lKiBpbnRyID0gTlVMTDsKKworCSAgICAgIGZvciAocHRyID0gZGFlbW9uLT5wdHI7IHB0cjsgcHRyID0gcHRyLT5uZXh0KQorCQlpZiAoaG9zdG5hbWVfaXNlcXVhbChuYW1lLCBwdHItPm5hbWUpKQorCQkgIGJyZWFrOworCisJICAgICAgaWYgKGlzX2FycGEgPT0gRl9JUFY0KQorCQlmb3IgKGludHIgPSBkYWVtb24tPmludF9uYW1lczsgaW50cjsgaW50ciA9IGludHItPm5leHQpCisJCSAgeworCQkgICAgc3RydWN0IGFkZHJsaXN0ICphZGRybGlzdDsKKwkJICAgIAorCQkgICAgZm9yIChhZGRybGlzdCA9IGludHItPmFkZHI7IGFkZHJsaXN0OyBhZGRybGlzdCA9IGFkZHJsaXN0LT5uZXh0KQorCQkgICAgICBpZiAoIShhZGRybGlzdC0+ZmxhZ3MgJiBBRERSTElTVF9JUFY2KSAmJiBhZGRyLmFkZHIuYWRkcjQuc19hZGRyID09IGFkZHJsaXN0LT5hZGRyLmFkZHIuYWRkcjQuc19hZGRyKQorCQkJYnJlYWs7CisJCSAgICAKKwkJICAgIGlmIChhZGRybGlzdCkKKwkJICAgICAgYnJlYWs7CisJCSAgICBlbHNlCisJCSAgICAgIHdoaWxlIChpbnRyLT5uZXh0ICYmIHN0cmNtcChpbnRyLT5pbnRyLCBpbnRyLT5uZXh0LT5pbnRyKSA9PSAwKQorCQkJaW50ciA9IGludHItPm5leHQ7CisJCSAgfQorI2lmZGVmIEhBVkVfSVBWNgorCSAgICAgIGVsc2UgaWYgKGlzX2FycGEgPT0gRl9JUFY2KQorCQlmb3IgKGludHIgPSBkYWVtb24tPmludF9uYW1lczsgaW50cjsgaW50ciA9IGludHItPm5leHQpCisJCSAgeworCQkgICAgc3RydWN0IGFkZHJsaXN0ICphZGRybGlzdDsKKwkJICAgIAorCQkgICAgZm9yIChhZGRybGlzdCA9IGludHItPmFkZHI7IGFkZHJsaXN0OyBhZGRybGlzdCA9IGFkZHJsaXN0LT5uZXh0KQorCQkgICAgICBpZiAoKGFkZHJsaXN0LT5mbGFncyAmIEFERFJMSVNUX0lQVjYpICYmIElONl9BUkVfQUREUl9FUVVBTCgmYWRkci5hZGRyLmFkZHI2LCAmYWRkcmxpc3QtPmFkZHIuYWRkci5hZGRyNikpCisJCQlicmVhazsKKwkJICAgIAorCQkgICAgaWYgKGFkZHJsaXN0KQorCQkgICAgICBicmVhazsKKwkJICAgIGVsc2UKKwkJICAgICAgd2hpbGUgKGludHItPm5leHQgJiYgc3RyY21wKGludHItPmludHIsIGludHItPm5leHQtPmludHIpID09IDApCisJCQlpbnRyID0gaW50ci0+bmV4dDsKKwkJICB9CisjZW5kaWYKKwkgICAgICAKKwkgICAgICBpZiAoaW50cikKKwkJeworCQkgIGFucyA9IDE7CisJCSAgaWYgKCFkcnlydW4pCisJCSAgICB7CisJCSAgICAgIGxvZ19xdWVyeShpc19hcnBhIHwgRl9SRVZFUlNFIHwgRl9DT05GSUcsIGludHItPm5hbWUsICZhZGRyLCBOVUxMKTsKKwkJICAgICAgaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBuYW1lb2Zmc2V0LCAmYW5zcCwgCisJCQkJCSAgICAgIGRhZW1vbi0+bG9jYWxfdHRsLCBOVUxMLAorCQkJCQkgICAgICBUX1BUUiwgQ19JTiwgImQiLCBpbnRyLT5uYW1lKSkKKwkJCWFuc2NvdW50Kys7CisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlIGlmIChwdHIpCisJCXsKKwkJICBhbnMgPSAxOworCQkgIGlmICghZHJ5cnVuKQorCQkgICAgeworCQkgICAgICBsb2dfcXVlcnkoRl9DT05GSUcgfCBGX1JSTkFNRSwgbmFtZSwgTlVMTCwgIjxQVFI+Iik7CisJCSAgICAgIGZvciAocHRyID0gZGFlbW9uLT5wdHI7IHB0cjsgcHRyID0gcHRyLT5uZXh0KQorCQkJaWYgKGhvc3RuYW1lX2lzZXF1YWwobmFtZSwgcHRyLT5uYW1lKSAmJgorCQkJICAgIGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBuYW1lb2Zmc2V0LCAmYW5zcCwgCisJCQkJCQlkYWVtb24tPmxvY2FsX3R0bCwgTlVMTCwKKwkJCQkJCVRfUFRSLCBDX0lOLCAiZCIsIHB0ci0+cHRyKSkKKwkJCSAgYW5zY291bnQrKzsKKwkJCSAKKwkJICAgIH0KKwkJfQorCSAgICAgIGVsc2UgaWYgKChjcmVjcCA9IGNhY2hlX2ZpbmRfYnlfYWRkcihOVUxMLCAmYWRkciwgbm93LCBpc19hcnBhKSkpCisJCXsKKwkJICBpZiAoIShjcmVjcC0+ZmxhZ3MgJiAoRl9IT1NUUyB8IEZfREhDUCB8IEZfQ09ORklHKSkgJiYgc2VjX3JlcWQpCisJCSAgICB7CisJCSAgICAgIGlmICghb3B0aW9uX2Jvb2woT1BUX0ROU1NFQ19WQUxJRCkgfHwgKChjcmVjcC0+ZmxhZ3MgJiBGX05FRykgJiYgKGNyZWNwLT5mbGFncyAmIEZfRE5TU0VDT0spKSkKKwkJCWNyZWNwID0gTlVMTDsKKyNpZmRlZiBIQVZFX0ROU1NFQworCQkgICAgICBlbHNlIGlmIChjcmVjcC0+ZmxhZ3MgJiBGX0ROU1NFQ09LKQorCQkJeworCQkJICBpbnQgZ290c2lnID0gMDsKKwkJCSAgc3RydWN0IGNyZWMgKnJyX2NyZWMgPSBOVUxMOworCisJCQkgIHdoaWxlICgocnJfY3JlYyA9IGNhY2hlX2ZpbmRfYnlfbmFtZShycl9jcmVjLCBuYW1lLCBub3csIEZfRFMgfCBGX0ROU0tFWSkpKQorCQkJICAgIHsKKwkJCSAgICAgIGlmIChycl9jcmVjLT5hZGRyLnNpZy50eXBlX2NvdmVyZWQgPT0gVF9QVFIgJiYgcnJfY3JlYy0+dWlkID09IENfSU4pCisJCQkJeworCQkJCSAgY2hhciAqc2lnZGF0YSA9IGJsb2NrZGF0YV9yZXRyaWV2ZShycl9jcmVjLT5hZGRyLnNpZy5rZXlkYXRhLCBycl9jcmVjLT5hZGRyLnNpZy5rZXlsZW4sIE5VTEwpOworCQkJCSAgZ290c2lnID0gMTsKKwkJCQkgIAorCQkJCSAgaWYgKCFkcnlydW4gJiYgCisJCQkJICAgICAgYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIG5hbWVvZmZzZXQsICZhbnNwLCAKKwkJCQkJCQkgIHJyX2NyZWMtPnR0ZCAtIG5vdywgJm5hbWVvZmZzZXQsCisJCQkJCQkJICBUX1JSU0lHLCBDX0lOLCAidCIsIGNyZWNwLT5hZGRyLnNpZy5rZXlsZW4sIHNpZ2RhdGEpKQorCQkJCSAgICBhbnNjb3VudCsrOworCQkJCX0KKwkJCSAgICB9IAorCQkJICAKKwkJCSAgaWYgKCFnb3RzaWcpCisJCQkgICAgY3JlY3AgPSBOVUxMOworCQkJfQorI2VuZGlmCisJCSAgICB9CisKKwkJICBpZiAoY3JlY3ApCisJCSAgICB7CisJCSAgICAgIGRvIAorCQkJeyAKKwkJCSAgLyogZG9uJ3QgYW5zd2VyIHdpbGRjYXJkIHF1ZXJpZXMgd2l0aCBkYXRhIG5vdCBmcm9tIC9ldGMvaG9zdHMgb3IgZGhjcCBsZWFzZXMgKi8KKwkJCSAgaWYgKHF0eXBlID09IFRfQU5ZICYmICEoY3JlY3AtPmZsYWdzICYgKEZfSE9TVFMgfCBGX0RIQ1ApKSkKKwkJCSAgICBjb250aW51ZTsKKwkJCSAgCisJCQkgIGlmICghKGNyZWNwLT5mbGFncyAmIEZfRE5TU0VDT0spKQorCQkJICAgIHNlY19kYXRhID0gMDsKKwkJCSAgCisJCQkgIGlmIChjcmVjcC0+ZmxhZ3MgJiBGX05FRykKKwkJCSAgICB7CisJCQkgICAgICBhbnMgPSAxOworCQkJICAgICAgYXV0aCA9IDA7CisJCQkgICAgICBpZiAoY3JlY3AtPmZsYWdzICYgRl9OWERPTUFJTikKKwkJCQlueGRvbWFpbiA9IDE7CisJCQkgICAgICBpZiAoIWRyeXJ1bikKKwkJCQlsb2dfcXVlcnkoY3JlY3AtPmZsYWdzICYgfkZfRk9SV0FSRCwgbmFtZSwgJmFkZHIsIE5VTEwpOworCQkJICAgIH0KKwkJCSAgZWxzZSBpZiAoKGNyZWNwLT5mbGFncyAmIChGX0hPU1RTIHwgRl9ESENQKSkgfHwgIXNlY19yZXFkIHx8IG9wdGlvbl9ib29sKE9QVF9ETlNTRUNfVkFMSUQpKQorCQkJICAgIHsKKwkJCSAgICAgIGFucyA9IDE7CisJCQkgICAgICBpZiAoIShjcmVjcC0+ZmxhZ3MgJiAoRl9IT1NUUyB8IEZfREhDUCkpKQorCQkJCWF1dGggPSAwOworCQkJICAgICAgaWYgKCFkcnlydW4pCisJCQkJeworCQkJCSAgbG9nX3F1ZXJ5KGNyZWNwLT5mbGFncyAmIH5GX0ZPUldBUkQsIGNhY2hlX2dldF9uYW1lKGNyZWNwKSwgJmFkZHIsIAorCQkJCQkgICAgcmVjb3JkX3NvdXJjZShjcmVjcC0+dWlkKSk7CisJCQkJICAKKwkJCQkgIGlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIAorCQkJCQkJCSAgY3JlY190dGwoY3JlY3AsIG5vdyksIE5VTEwsCisJCQkJCQkJICBUX1BUUiwgQ19JTiwgImQiLCBjYWNoZV9nZXRfbmFtZShjcmVjcCkpKQorCQkJCSAgICBhbnNjb3VudCsrOworCQkJCX0KKwkJCSAgICB9CisJCQl9IHdoaWxlICgoY3JlY3AgPSBjYWNoZV9maW5kX2J5X2FkZHIoY3JlY3AsICZhZGRyLCBub3csIGlzX2FycGEpKSk7CisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlIGlmIChpc19yZXZfc3ludGgoaXNfYXJwYSwgJmFkZHIsIG5hbWUpKQorCQl7CisJCSAgYW5zID0gMTsKKwkJICBpZiAoIWRyeXJ1bikKKwkJICAgIHsKKwkJICAgICAgbG9nX3F1ZXJ5KEZfQ09ORklHIHwgRl9SRVZFUlNFIHwgaXNfYXJwYSwgbmFtZSwgJmFkZHIsIE5VTEwpOyAKKwkJICAgICAgCisJCSAgICAgIGlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIAorCQkJCQkgICAgICBkYWVtb24tPmxvY2FsX3R0bCwgTlVMTCwKKwkJCQkJICAgICAgVF9QVFIsIENfSU4sICJkIiwgbmFtZSkpCisJCQkgICAgICBhbnNjb3VudCsrOworCQkgICAgfQorCQl9CisJICAgICAgZWxzZSBpZiAoaXNfYXJwYSA9PSBGX0lQVjQgJiYgCisJCSAgICAgICBvcHRpb25fYm9vbChPUFRfQk9HVVNQUklWKSAmJiAKKwkJICAgICAgIHByaXZhdGVfbmV0KGFkZHIuYWRkci5hZGRyNCwgMSkpCisJCXsKKwkJICAvKiBpZiBub3QgaW4gY2FjaGUsIGVuYWJsZWQgYW5kIHByaXZhdGUgSVBWNCBhZGRyZXNzLCByZXR1cm4gTlhET01BSU4gKi8KKwkJICBhbnMgPSAxOworCQkgIG54ZG9tYWluID0gMTsKKwkJICBpZiAoIWRyeXJ1bikKKwkJICAgIGxvZ19xdWVyeShGX0NPTkZJRyB8IEZfUkVWRVJTRSB8IEZfSVBWNCB8IEZfTkVHIHwgRl9OWERPTUFJTiwgCisJCQkgICAgICBuYW1lLCAmYWRkciwgTlVMTCk7CisJCX0KKwkgICAgfQorCSAgICAKKwkgIGZvciAoZmxhZyA9IEZfSVBWNDsgZmxhZzsgZmxhZyA9IChmbGFnID09IEZfSVBWNCkgPyBGX0lQVjYgOiAwKQorCSAgICB7CisJICAgICAgdW5zaWduZWQgc2hvcnQgdHlwZSA9IFRfQTsKKwkgICAgICBzdHJ1Y3QgaW50ZXJmYWNlX25hbWUgKmludHI7CisKKwkgICAgICBpZiAoZmxhZyA9PSBGX0lQVjYpCisjaWZkZWYgSEFWRV9JUFY2CisJCXR5cGUgPSBUX0FBQUE7CisjZWxzZQorCSAgICAgICAgYnJlYWs7CisjZW5kaWYKKwkgICAgICAKKwkgICAgICBpZiAocXR5cGUgIT0gdHlwZSAmJiBxdHlwZSAhPSBUX0FOWSkKKwkJY29udGludWU7CisJICAgICAgCisJICAgICAgLyogQ2hlY2sgZm9yICJBIGZvciBBIiAgcXVlcmllczsgYmUgcmF0aGVyIGNvbnNlcnZhdGl2ZSAKKwkJIGFib3V0IHdoYXQgbG9va3MgbGlrZSBkb3R0ZWQtcXVhZC4gICovCisJICAgICAgaWYgKHF0eXBlID09IFRfQSkKKwkJeworCQkgIGNoYXIgKmNwOworCQkgIHVuc2lnbmVkIGludCBpLCBhOworCQkgIGludCB4OworCisJCSAgZm9yIChjcCA9IG5hbWUsIGkgPSAwLCBhID0gMDsgKmNwOyBpKyspCisJCSAgICB7CisJCSAgICAgIGlmICghaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApIHx8ICh4ID0gc3RydG9sKGNwLCAmY3AsIDEwKSkgPiAyNTUpIAorCQkJeworCQkJICBpID0gNTsKKwkJCSAgYnJlYWs7CisJCQl9CisJCSAgICAgIAorCQkgICAgICBhID0gKGEgPDwgOCkgKyB4OworCQkgICAgICAKKwkJICAgICAgaWYgKCpjcCA9PSAnLicpIAorCQkJY3ArKzsKKwkJICAgIH0KKwkJICAKKwkJICBpZiAoaSA9PSA0KQorCQkgICAgeworCQkgICAgICBhbnMgPSAxOworCQkgICAgICBpZiAoIWRyeXJ1bikKKwkJCXsKKwkJCSAgYWRkci5hZGRyLmFkZHI0LnNfYWRkciA9IGh0b25sKGEpOworCQkJICBsb2dfcXVlcnkoRl9GT1JXQVJEIHwgRl9DT05GSUcgfCBGX0lQVjQsIG5hbWUsICZhZGRyLCBOVUxMKTsKKwkJCSAgaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBuYW1lb2Zmc2V0LCAmYW5zcCwgCisJCQkJCQkgIGRhZW1vbi0+bG9jYWxfdHRsLCBOVUxMLCB0eXBlLCBDX0lOLCAiNCIsICZhZGRyKSkKKwkJCSAgICBhbnNjb3VudCsrOworCQkJfQorCQkgICAgICBjb250aW51ZTsKKwkJICAgIH0KKwkJfQorCisJICAgICAgLyogaW50ZXJmYWNlIG5hbWUgc3R1ZmYgKi8KKwkgICAgaW50bmFtZV9yZXN0YXJ0OgorCSAgICAgIGZvciAoaW50ciA9IGRhZW1vbi0+aW50X25hbWVzOyBpbnRyOyBpbnRyID0gaW50ci0+bmV4dCkKKwkJaWYgKGhvc3RuYW1lX2lzZXF1YWwobmFtZSwgaW50ci0+bmFtZSkpCisJCSAgYnJlYWs7CisJICAgICAgCisJICAgICAgaWYgKGludHIpCisJCXsKKwkJICBzdHJ1Y3QgYWRkcmxpc3QgKmFkZHJsaXN0OworCQkgIGludCBnb3RpdCA9IDA7CisKKwkJICBlbnVtZXJhdGVfaW50ZXJmYWNlcygwKTsKKwkJICAKKwkJICBmb3IgKGludHIgPSBkYWVtb24tPmludF9uYW1lczsgaW50cjsgaW50ciA9IGludHItPm5leHQpCisJCSAgICBpZiAoaG9zdG5hbWVfaXNlcXVhbChuYW1lLCBpbnRyLT5uYW1lKSkKKwkJICAgICAgeworCQkJZm9yIChhZGRybGlzdCA9IGludHItPmFkZHI7IGFkZHJsaXN0OyBhZGRybGlzdCA9IGFkZHJsaXN0LT5uZXh0KQorI2lmZGVmIEhBVkVfSVBWNgorCQkJICBpZiAoKChhZGRybGlzdC0+ZmxhZ3MgJiBBRERSTElTVF9JUFY2KSA/IFRfQUFBQSA6IFRfQSkgPT0gdHlwZSkKKyNlbmRpZgorCQkJICAgIHsKKyNpZmRlZiBIQVZFX0lQVjYKKwkJCSAgICAgIGlmIChhZGRybGlzdC0+ZmxhZ3MgJiBBRERSTElTVF9SRVZPTkxZKQorCQkJCWNvbnRpbnVlOworI2VuZGlmCQorCQkJICAgICAgYW5zID0gMTsJCisJCQkgICAgICBpZiAoIWRyeXJ1bikKKwkJCQl7CisJCQkJICBnb3RpdCA9IDE7CisJCQkJICBsb2dfcXVlcnkoRl9GT1JXQVJEIHwgRl9DT05GSUcgfCBmbGFnLCBuYW1lLCAmYWRkcmxpc3QtPmFkZHIsIE5VTEwpOworCQkJCSAgaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBuYW1lb2Zmc2V0LCAmYW5zcCwgCisJCQkJCQkJICBkYWVtb24tPmxvY2FsX3R0bCwgTlVMTCwgdHlwZSwgQ19JTiwgCisJCQkJCQkJICB0eXBlID09IFRfQSA/ICI0IiA6ICI2IiwgJmFkZHJsaXN0LT5hZGRyKSkKKwkJCQkgICAgYW5zY291bnQrKzsKKwkJCQl9CisJCQkgICAgfQorCQkgICAgICB9CisJCSAgCisJCSAgaWYgKCFkcnlydW4gJiYgIWdvdGl0KQorCQkgICAgbG9nX3F1ZXJ5KEZfRk9SV0FSRCB8IEZfQ09ORklHIHwgZmxhZyB8IEZfTkVHLCBuYW1lLCBOVUxMLCBOVUxMKTsKKwkJICAgICAKKwkJICBjb250aW51ZTsKKwkJfQorCisJICAgIGNuYW1lX3Jlc3RhcnQ6CisJICAgICAgaWYgKChjcmVjcCA9IGNhY2hlX2ZpbmRfYnlfbmFtZShOVUxMLCBuYW1lLCBub3csIGZsYWcgfCBGX0NOQU1FIHwgKGRyeXJ1biA/IEZfTk9fUlIgOiAwKSkpKQorCQl7CisJCSAgaW50IGxvY2FsaXNlID0gMDsKKwkJICAKKwkJICAvKiBTZWUgaWYgYSBwdXRhdGl2ZSBhZGRyZXNzIGlzIG9uIHRoZSBuZXR3b3JrIGZyb20gd2hpY2ggd2UgcmVjaWV2ZWQKKwkJICAgICB0aGUgcXVlcnksIGlzIHNvIHdlJ2xsIGZpbHRlciBvdGhlciBhbnN3ZXJzLiAqLworCQkgIGlmIChsb2NhbF9hZGRyLnNfYWRkciAhPSAwICYmIG9wdGlvbl9ib29sKE9QVF9MT0NBTElTRSkgJiYgZmxhZyA9PSBGX0lQVjQpCisJCSAgICB7CisJCSAgICAgIHN0cnVjdCBjcmVjICpzYXZlID0gY3JlY3A7CisJCSAgICAgIGRvIHsKKwkJCWlmICgoY3JlY3AtPmZsYWdzICYgRl9IT1NUUykgJiYKKwkJCSAgICBpc19zYW1lX25ldCgqKChzdHJ1Y3QgaW5fYWRkciAqKSZjcmVjcC0+YWRkciksIGxvY2FsX2FkZHIsIGxvY2FsX25ldG1hc2spKQorCQkJICB7CisJCQkgICAgbG9jYWxpc2UgPSAxOworCQkJICAgIGJyZWFrOworCQkJICB9IAorCQkJfSB3aGlsZSAoKGNyZWNwID0gY2FjaGVfZmluZF9ieV9uYW1lKGNyZWNwLCBuYW1lLCBub3csIGZsYWcgfCBGX0NOQU1FKSkpOworCQkgICAgICBjcmVjcCA9IHNhdmU7CisJCSAgICB9CisKKwkJICAvKiBJZiB0aGUgY2xpZW50IGFza2VkIGZvciBETlNTRUMgYW5kIHdlIGNhbid0IHByb3ZpZGUgUlJTSUdzLCBlaXRoZXIKKwkJICAgICBiZWNhdXNlIHdlJ3ZlIG5vdCBkb2luZyBETlNTRUMgb3IgdGhlIGNhY2hlZCBhbnN3ZXIgaXMgc2lnbmVkIGJ5IG5lZ2F0aXZlLAorCQkgICAgIGRvbid0IGFuc3dlciBmcm9tIHRoZSBjYWNoZSwgZm9yd2FyZCBpbnN0ZWFkLiAqLworCQkgIGlmICghKGNyZWNwLT5mbGFncyAmIChGX0hPU1RTIHwgRl9ESENQIHwgRl9DT05GSUcpKSAmJiBzZWNfcmVxZCkKKwkJICAgIHsKKwkJICAgICAgaWYgKCFvcHRpb25fYm9vbChPUFRfRE5TU0VDX1ZBTElEKSB8fCAoKGNyZWNwLT5mbGFncyAmIEZfTkVHKSAmJiAoY3JlY3AtPmZsYWdzICYgRl9ETlNTRUNPSykpKQorCQkJY3JlY3AgPSBOVUxMOworI2lmZGVmIEhBVkVfRE5TU0VDCisJCSAgICAgIGVsc2UgaWYgKGNyZWNwLT5mbGFncyAmIEZfRE5TU0VDT0spCisJCQl7CisJCQkgIC8qIFdlJ3JlIHJldHVybmluZyB2YWxpZGF0ZWQgZGF0YSwgbmVlZCB0byByZXR1cm4gdGhlIFJSU0lHIHRvby4gKi8KKwkJCSAgc3RydWN0IGNyZWMgKnJyX2NyZWMgPSBOVUxMOworCQkJICBpbnQgc2lndHlwZSA9IHR5cGU7CisJCQkgIC8qIFRoZSBzaWduYXR1cmUgbWF5IGhhdmUgZXhwaXJlZCBldmVuIHRob3VnaCB0aGUgZGF0YSBpcyBzdGlsbCBpbiBjYWNoZSwgCisJCQkgICAgIGZvcndhcmQgaW5zdGVhZCBvZiBhbnN3ZXJpbmcgZnJvbSBjYWNoZSBpZiBzby4gKi8KKwkJCSAgaW50IGdvdHNpZyA9IDA7CisJCQkgIAorCQkJICBpZiAoY3JlY3AtPmZsYWdzICYgRl9DTkFNRSkKKwkJCSAgICBzaWd0eXBlID0gVF9DTkFNRTsKKwkJCSAgCisJCQkgIHdoaWxlICgocnJfY3JlYyA9IGNhY2hlX2ZpbmRfYnlfbmFtZShycl9jcmVjLCBuYW1lLCBub3csIEZfRFMgfCBGX0ROU0tFWSkpKQorCQkJICAgIHsKKwkJCSAgICAgIGlmIChycl9jcmVjLT5hZGRyLnNpZy50eXBlX2NvdmVyZWQgPT0gc2lndHlwZSAmJiBycl9jcmVjLT51aWQgPT0gQ19JTikKKwkJCQl7CisJCQkJICBjaGFyICpzaWdkYXRhID0gYmxvY2tkYXRhX3JldHJpZXZlKHJyX2NyZWMtPmFkZHIuc2lnLmtleWRhdGEsIHJyX2NyZWMtPmFkZHIuc2lnLmtleWxlbiwgTlVMTCk7CisJCQkJICBnb3RzaWcgPSAxOworCQkJCSAgCisJCQkJICBpZiAoIWRyeXJ1biAmJiAKKwkJCQkgICAgICBhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIAorCQkJCQkJCSAgcnJfY3JlYy0+dHRkIC0gbm93LCAmbmFtZW9mZnNldCwKKwkJCQkJCQkgIFRfUlJTSUcsIENfSU4sICJ0IiwgcnJfY3JlYy0+YWRkci5zaWcua2V5bGVuLCBzaWdkYXRhKSkKKwkJCQkgICAgYW5zY291bnQrKzsKKwkJCQl9CisJCQkgICAgfQorCQkJICAKKwkJCSAgaWYgKCFnb3RzaWcpCisJCQkgICAgY3JlY3AgPSBOVUxMOworCQkJfQorI2VuZGlmCisJCSAgICB9CQkgCisKKwkJICBpZiAoY3JlY3ApCisJCSAgICBkbworCQkgICAgICB7IAorCQkJLyogZG9uJ3QgYW5zd2VyIHdpbGRjYXJkIHF1ZXJpZXMgd2l0aCBkYXRhIG5vdCBmcm9tIC9ldGMvaG9zdHMKKwkJCSAgIG9yIERIQ1AgbGVhc2VzICovCisJCQlpZiAocXR5cGUgPT0gVF9BTlkgJiYgIShjcmVjcC0+ZmxhZ3MgJiAoRl9IT1NUUyB8IEZfREhDUCB8IEZfQ09ORklHKSkpCisJCQkgIGJyZWFrOworCQkJCisJCQlpZiAoIShjcmVjcC0+ZmxhZ3MgJiBGX0ROU1NFQ09LKSkKKwkJCSAgc2VjX2RhdGEgPSAwOworCQkJCisJCQlpZiAoY3JlY3AtPmZsYWdzICYgRl9DTkFNRSkKKwkJCSAgeworCQkJICAgIGNoYXIgKmNuYW1lX3RhcmdldCA9IGNhY2hlX2dldF9jbmFtZV90YXJnZXQoY3JlY3ApOworCQkJICAgIAorCQkJICAgIGlmICghZHJ5cnVuKQorCQkJICAgICAgeworCQkJCWxvZ19xdWVyeShjcmVjcC0+ZmxhZ3MsIG5hbWUsIE5VTEwsIHJlY29yZF9zb3VyY2UoY3JlY3AtPnVpZCkpOworCQkJCWlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIAorCQkJCQkJCWNyZWNfdHRsKGNyZWNwLCBub3cpLCAmbmFtZW9mZnNldCwKKwkJCQkJCQlUX0NOQU1FLCBDX0lOLCAiZCIsIGNuYW1lX3RhcmdldCkpCisJCQkJICBhbnNjb3VudCsrOworCQkJICAgICAgfQorCQkJICAgIAorCQkJICAgIHN0cmNweShuYW1lLCBjbmFtZV90YXJnZXQpOworCQkJICAgIC8qIGNoZWNrIGlmIHRhcmdldCBpbnRlcmZhY2VfbmFtZSAqLworCQkJICAgIGlmIChjcmVjcC0+YWRkci5jbmFtZS51aWQgPT0gU1JDX0lOVEVSRkFDRSkKKwkJCSAgICAgIGdvdG8gaW50bmFtZV9yZXN0YXJ0OworCQkJICAgIGVsc2UKKwkJCSAgICAgIGdvdG8gY25hbWVfcmVzdGFydDsKKwkJCSAgfQorCQkJCisJCQlpZiAoY3JlY3AtPmZsYWdzICYgRl9ORUcpCisJCQkgIHsKKwkJCSAgICAvKiBXZSBkb24ndCBjYWNoZSBOU0VDIHJlY29yZHMsIHNvIGlmIGEgRE5TU0VDLXZhbGlkYXRlZCBuZWdhdGl2ZSBhbnN3ZXIKKwkJCSAgICAgICBpcyBjYWNoZWQgYW5kIHRoZSBjbGllbnQgd2FudHMgRE5TU0VDLCBmb3J3YXJkIHJhdGhlciB0aGFuIGFuc3dlcmluZyBmcm9tIHRoZSBjYWNoZSAqLworCQkJICAgIGlmICghc2VjX3JlcWQgfHwgIShjcmVjcC0+ZmxhZ3MgJiBGX0ROU1NFQ09LKSkKKwkJCSAgICAgIHsKKwkJCQlhbnMgPSAxOworCQkJCWF1dGggPSAwOworCQkJCWlmIChjcmVjcC0+ZmxhZ3MgJiBGX05YRE9NQUlOKQorCQkJCSAgbnhkb21haW4gPSAxOworCQkJCWlmICghZHJ5cnVuKQorCQkJCSAgbG9nX3F1ZXJ5KGNyZWNwLT5mbGFncywgbmFtZSwgTlVMTCwgTlVMTCk7CisJCQkgICAgICB9CisJCQkgIH0KKwkJCWVsc2UgCisJCQkgIHsKKwkJCSAgICAvKiBJZiB3ZSBhcmUgcmV0dXJuaW5nIGxvY2FsIGFuc3dlcnMgZGVwZW5kaW5nIG9uIG5ldHdvcmssCisJCQkgICAgICAgZmlsdGVyIGhlcmUuICovCisJCQkgICAgaWYgKGxvY2FsaXNlICYmIAorCQkJCShjcmVjcC0+ZmxhZ3MgJiBGX0hPU1RTKSAmJgorCQkJCSFpc19zYW1lX25ldCgqKChzdHJ1Y3QgaW5fYWRkciAqKSZjcmVjcC0+YWRkciksIGxvY2FsX2FkZHIsIGxvY2FsX25ldG1hc2spKQorCQkJICAgICAgY29udGludWU7CisJCQkgICAgCisJCQkgICAgaWYgKCEoY3JlY3AtPmZsYWdzICYgKEZfSE9TVFMgfCBGX0RIQ1ApKSkKKwkJCSAgICAgIGF1dGggPSAwOworCQkJICAgIAorCQkJICAgIGFucyA9IDE7CisJCQkgICAgaWYgKCFkcnlydW4pCisJCQkgICAgICB7CisJCQkJbG9nX3F1ZXJ5KGNyZWNwLT5mbGFncyAmIH5GX1JFVkVSU0UsIG5hbWUsICZjcmVjcC0+YWRkci5hZGRyLAorCQkJCQkgIHJlY29yZF9zb3VyY2UoY3JlY3AtPnVpZCkpOworCQkJCQorCQkJCWlmIChhZGRfcmVzb3VyY2VfcmVjb3JkKGhlYWRlciwgbGltaXQsICZ0cnVuYywgbmFtZW9mZnNldCwgJmFuc3AsIAorCQkJCQkJCWNyZWNfdHRsKGNyZWNwLCBub3cpLCBOVUxMLCB0eXBlLCBDX0lOLCAKKwkJCQkJCQl0eXBlID09IFRfQSA/ICI0IiA6ICI2IiwgJmNyZWNwLT5hZGRyKSkKKwkJCQkgIGFuc2NvdW50Kys7CisJCQkgICAgICB9CisJCQkgIH0KKwkJICAgICAgfSB3aGlsZSAoKGNyZWNwID0gY2FjaGVfZmluZF9ieV9uYW1lKGNyZWNwLCBuYW1lLCBub3csIGZsYWcgfCBGX0NOQU1FKSkpOworCQl9CisJICAgICAgZWxzZSBpZiAoaXNfbmFtZV9zeW50aGV0aWMoZmxhZywgbmFtZSwgJmFkZHIpKQorCQl7CisJCSAgYW5zID0gMTsKKwkJICBpZiAoIWRyeXJ1bikKKwkJICAgIHsKKwkJICAgICAgbG9nX3F1ZXJ5KEZfRk9SV0FSRCB8IEZfQ09ORklHIHwgZmxhZywgbmFtZSwgJmFkZHIsIE5VTEwpOworCQkgICAgICBpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIG5hbWVvZmZzZXQsICZhbnNwLCAKKwkJCQkJICAgICAgZGFlbW9uLT5sb2NhbF90dGwsIE5VTEwsIHR5cGUsIENfSU4sIHR5cGUgPT0gVF9BID8gIjQiIDogIjYiLCAmYWRkcikpCisJCQlhbnNjb3VudCsrOworCQkgICAgfQorCQl9CisJICAgIH0KKworCSAgaWYgKHF0eXBlID09IFRfQ05BTUUgfHwgcXR5cGUgPT0gVF9BTlkpCisJICAgIHsKKwkgICAgICBpZiAoKGNyZWNwID0gY2FjaGVfZmluZF9ieV9uYW1lKE5VTEwsIG5hbWUsIG5vdywgRl9DTkFNRSkpICYmCisJCSAgKHF0eXBlID09IFRfQ05BTUUgfHwgKGNyZWNwLT5mbGFncyAmIChGX0hPU1RTIHwgRl9ESENQIHwgRl9DT05GSUcgIHwgKGRyeXJ1biA/IEZfTk9fUlIgOiAwKSkpKSkKKwkJeworCQkgIGlmICghKGNyZWNwLT5mbGFncyAmIEZfRE5TU0VDT0spKQorCQkgICAgc2VjX2RhdGEgPSAwOworCQkgIAorCQkgIGFucyA9IDE7CisJCSAgaWYgKCFkcnlydW4pCisJCSAgICB7CisJCSAgICAgIGxvZ19xdWVyeShjcmVjcC0+ZmxhZ3MsIG5hbWUsIE5VTEwsIHJlY29yZF9zb3VyY2UoY3JlY3AtPnVpZCkpOworCQkgICAgICBpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIG5hbWVvZmZzZXQsICZhbnNwLCAKKwkJCQkJICAgICAgY3JlY190dGwoY3JlY3AsIG5vdyksICZuYW1lb2Zmc2V0LAorCQkJCQkgICAgICBUX0NOQU1FLCBDX0lOLCAiZCIsIGNhY2hlX2dldF9jbmFtZV90YXJnZXQoY3JlY3ApKSkKKwkJCWFuc2NvdW50Kys7CisJCSAgICB9CisJCX0KKwkgICAgfQorCisJICBpZiAocXR5cGUgPT0gVF9NWCB8fCBxdHlwZSA9PSBUX0FOWSkKKwkgICAgeworCSAgICAgIGludCBmb3VuZCA9IDA7CisJICAgICAgZm9yIChyZWMgPSBkYWVtb24tPm14bmFtZXM7IHJlYzsgcmVjID0gcmVjLT5uZXh0KQorCQlpZiAoIXJlYy0+aXNzcnYgJiYgaG9zdG5hbWVfaXNlcXVhbChuYW1lLCByZWMtPm5hbWUpKQorCQkgIHsKKwkJICBhbnMgPSBmb3VuZCA9IDE7CisJCSAgaWYgKCFkcnlydW4pCisJCSAgICB7CisJCSAgICAgIGludCBvZmZzZXQ7CisJCSAgICAgIGxvZ19xdWVyeShGX0NPTkZJRyB8IEZfUlJOQU1FLCBuYW1lLCBOVUxMLCAiPE1YPiIpOworCQkgICAgICBpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIG5hbWVvZmZzZXQsICZhbnNwLCBkYWVtb24tPmxvY2FsX3R0bCwKKwkJCQkJICAgICAgJm9mZnNldCwgVF9NWCwgQ19JTiwgInNkIiwgcmVjLT53ZWlnaHQsIHJlYy0+dGFyZ2V0KSkKKwkJCXsKKwkJCSAgYW5zY291bnQrKzsKKwkJCSAgaWYgKHJlYy0+dGFyZ2V0KQorCQkJICAgIHJlYy0+b2Zmc2V0ID0gb2Zmc2V0OworCQkJfQorCQkgICAgfQorCQkgIH0KKwkgICAgICAKKwkgICAgICBpZiAoIWZvdW5kICYmIChvcHRpb25fYm9vbChPUFRfU0VMRk1YKSB8fCBvcHRpb25fYm9vbChPUFRfTE9DQUxNWCkpICYmIAorCQkgIGNhY2hlX2ZpbmRfYnlfbmFtZShOVUxMLCBuYW1lLCBub3csIEZfSE9TVFMgfCBGX0RIQ1AgfCBGX05PX1JSKSkKKwkJeyAKKwkJICBhbnMgPSAxOworCQkgIGlmICghZHJ5cnVuKQorCQkgICAgeworCQkgICAgICBsb2dfcXVlcnkoRl9DT05GSUcgfCBGX1JSTkFNRSwgbmFtZSwgTlVMTCwgIjxNWD4iKTsKKwkJICAgICAgaWYgKGFkZF9yZXNvdXJjZV9yZWNvcmQoaGVhZGVyLCBsaW1pdCwgJnRydW5jLCBuYW1lb2Zmc2V0LCAmYW5zcCwgZGFlbW9uLT5sb2NhbF90dGwsIE5VTEwsIAorCQkJCQkgICAgICBUX01YLCBDX0lOLCAic2QiLCAxLCAKKwkJCQkJICAgICAgb3B0aW9uX2Jvb2woT1BUX1NFTEZNWCkgPyBuYW1lIDogZGFlbW9uLT5teHRhcmdldCkpCisJCQlhbnNjb3VudCsrOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgIAkgIAorCSAgaWYgKHF0eXBlID09IFRfU1JWIHx8IHF0eXBlID09IFRfQU5ZKQorCSAgICB7CisJICAgICAgaW50IGZvdW5kID0gMDsKKwkgICAgICBzdHJ1Y3QgbXhfc3J2X3JlY29yZCAqbW92ZSA9IE5VTEwsICoqdXAgPSAmZGFlbW9uLT5teG5hbWVzOworCisJICAgICAgZm9yIChyZWMgPSBkYWVtb24tPm14bmFtZXM7IHJlYzsgcmVjID0gcmVjLT5uZXh0KQorCQlpZiAocmVjLT5pc3NydiAmJiBob3N0bmFtZV9pc2VxdWFsKG5hbWUsIHJlYy0+bmFtZSkpCisJCSAgeworCQkgICAgZm91bmQgPSBhbnMgPSAxOworCQkgICAgaWYgKCFkcnlydW4pCisJCSAgICAgIHsKKwkJCWludCBvZmZzZXQ7CisJCQlsb2dfcXVlcnkoRl9DT05GSUcgfCBGX1JSTkFNRSwgbmFtZSwgTlVMTCwgIjxTUlY+Iik7CisJCQlpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIG5hbWVvZmZzZXQsICZhbnNwLCBkYWVtb24tPmxvY2FsX3R0bCwgCisJCQkJCQkmb2Zmc2V0LCBUX1NSViwgQ19JTiwgInNzc2QiLCAKKwkJCQkJCXJlYy0+cHJpb3JpdHksIHJlYy0+d2VpZ2h0LCByZWMtPnNydnBvcnQsIHJlYy0+dGFyZ2V0KSkKKwkJCSAgeworCQkJICAgIGFuc2NvdW50Kys7CisJCQkgICAgaWYgKHJlYy0+dGFyZ2V0KQorCQkJICAgICAgcmVjLT5vZmZzZXQgPSBvZmZzZXQ7CisJCQkgIH0KKwkJICAgICAgfQorCQkgICAgCisJCSAgICAvKiB1bmxpbmsgZmlyc3QgU1JWIHJlY29yZCBmb3VuZCAqLworCQkgICAgaWYgKCFtb3ZlKQorCQkgICAgICB7CisJCQltb3ZlID0gcmVjOworCQkJKnVwID0gcmVjLT5uZXh0OworCQkgICAgICB9CisJCSAgICBlbHNlCisJCSAgICAgIHVwID0gJnJlYy0+bmV4dDsgICAgICAKKwkJICB9CisJCWVsc2UKKwkJICB1cCA9ICZyZWMtPm5leHQ7CisKKwkgICAgICAvKiBwdXQgZmlyc3QgU1JWIHJlY29yZCBiYWNrIGF0IHRoZSBlbmQuICovCisJICAgICAgaWYgKG1vdmUpCisJCXsKKwkJICAqdXAgPSBtb3ZlOworCQkgIG1vdmUtPm5leHQgPSBOVUxMOworCQl9CisJICAgICAgCisJICAgICAgaWYgKCFmb3VuZCAmJiBvcHRpb25fYm9vbChPUFRfRklMVEVSKSAmJiAocXR5cGUgPT0gVF9TUlYgfHwgKHF0eXBlID09IFRfQU5ZICYmIHN0cmNocihuYW1lLCAnXycpKSkpCisJCXsKKwkJICBhbnMgPSAxOworCQkgIGlmICghZHJ5cnVuKQorCQkgICAgbG9nX3F1ZXJ5KEZfQ09ORklHIHwgRl9ORUcsIG5hbWUsIE5VTEwsIE5VTEwpOworCQl9CisJICAgIH0KKworCSAgaWYgKHF0eXBlID09IFRfTkFQVFIgfHwgcXR5cGUgPT0gVF9BTlkpCisJICAgIHsKKwkgICAgICBzdHJ1Y3QgbmFwdHIgKm5hOworCSAgICAgIGZvciAobmEgPSBkYWVtb24tPm5hcHRyOyBuYTsgbmEgPSBuYS0+bmV4dCkKKwkJaWYgKGhvc3RuYW1lX2lzZXF1YWwobmFtZSwgbmEtPm5hbWUpKQorCQkgIHsKKwkJICAgIGFucyA9IDE7CisJCSAgICBpZiAoIWRyeXJ1bikKKwkJICAgICAgeworCQkJbG9nX3F1ZXJ5KEZfQ09ORklHIHwgRl9SUk5BTUUsIG5hbWUsIE5VTEwsICI8TkFQVFI+Iik7CisJCQlpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCAmdHJ1bmMsIG5hbWVvZmZzZXQsICZhbnNwLCBkYWVtb24tPmxvY2FsX3R0bCwgCisJCQkJCQlOVUxMLCBUX05BUFRSLCBDX0lOLCAic3N6enpkIiwgCisJCQkJCQluYS0+b3JkZXIsIG5hLT5wcmVmLCBuYS0+ZmxhZ3MsIG5hLT5zZXJ2aWNlcywgbmEtPnJlZ2V4cCwgbmEtPnJlcGxhY2UpKQorCQkJICBhbnNjb3VudCsrOworCQkgICAgICB9CisJCSAgfQorCSAgICB9CisJICAKKwkgIGlmIChxdHlwZSA9PSBUX01BSUxCKQorCSAgICBhbnMgPSAxLCBueGRvbWFpbiA9IDE7CisKKwkgIGlmIChxdHlwZSA9PSBUX1NPQSAmJiBvcHRpb25fYm9vbChPUFRfRklMVEVSKSkKKwkgICAgeworCSAgICAgIGFucyA9IDE7IAorCSAgICAgIGlmICghZHJ5cnVuKQorCQlsb2dfcXVlcnkoRl9DT05GSUcgfCBGX05FRywgbmFtZSwgJmFkZHIsIE5VTEwpOworCSAgICB9CisJfQorCisgICAgICBpZiAoIWFucykKKwlyZXR1cm4gMDsgLyogZmFpbGVkIHRvIGFuc3dlciBhIHF1ZXN0aW9uICovCisgICAgfQorICAKKyAgaWYgKGRyeXJ1bikKKyAgICB7CisgICAgICBkcnlydW4gPSAwOworICAgICAgZ290byByZXJ1bjsKKyAgICB9CisgIAorICAvKiBjcmVhdGUgYW4gYWRkaXRpb25hbCBkYXRhIHNlY3Rpb24sIGZvciBzdHVmZiBpbiBTUlYgYW5kIE1YIHJlY29yZCByZXBsaWVzLiAqLworICBmb3IgKHJlYyA9IGRhZW1vbi0+bXhuYW1lczsgcmVjOyByZWMgPSByZWMtPm5leHQpCisgICAgaWYgKHJlYy0+b2Zmc2V0ICE9IDApCisgICAgICB7CisJLyogc3F1YXNoIGR1cGVzICovCisJc3RydWN0IG14X3Nydl9yZWNvcmQgKnRtcDsKKwlmb3IgKHRtcCA9IHJlYy0+bmV4dDsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCisJICBpZiAodG1wLT5vZmZzZXQgIT0gMCAmJiBob3N0bmFtZV9pc2VxdWFsKHJlYy0+dGFyZ2V0LCB0bXAtPnRhcmdldCkpCisJICAgIHRtcC0+b2Zmc2V0ID0gMDsKKwkKKwljcmVjcCA9IE5VTEw7CisJd2hpbGUgKChjcmVjcCA9IGNhY2hlX2ZpbmRfYnlfbmFtZShjcmVjcCwgcmVjLT50YXJnZXQsIG5vdywgRl9JUFY0IHwgRl9JUFY2KSkpCisJICB7CisjaWZkZWYgSEFWRV9JUFY2CisJICAgIGludCB0eXBlID0gIGNyZWNwLT5mbGFncyAmIEZfSVBWNCA/IFRfQSA6IFRfQUFBQTsKKyNlbHNlCisJICAgIGludCB0eXBlID0gVF9BOworI2VuZGlmCisJICAgIGlmIChjcmVjcC0+ZmxhZ3MgJiBGX05FRykKKwkgICAgICBjb250aW51ZTsKKworCSAgICBpZiAoYWRkX3Jlc291cmNlX3JlY29yZChoZWFkZXIsIGxpbWl0LCBOVUxMLCByZWMtPm9mZnNldCwgJmFuc3AsIAorCQkJCSAgICBjcmVjX3R0bChjcmVjcCwgbm93KSwgTlVMTCwgdHlwZSwgQ19JTiwgCisJCQkJICAgIGNyZWNwLT5mbGFncyAmIEZfSVBWNCA/ICI0IiA6ICI2IiwgJmNyZWNwLT5hZGRyKSkKKwkgICAgICBhZGRuY291bnQrKzsKKwkgIH0KKyAgICAgIH0KKyAgCisgIC8qIGRvbmUgYWxsIHF1ZXN0aW9ucywgc2V0IHVwIGhlYWRlciBhbmQgcmV0dXJuIGxlbmd0aCBvZiByZXN1bHQgKi8KKyAgLyogY2xlYXIgYXV0aG9yaXRhdGl2ZSBhbmQgdHJ1bmNhdGVkIGZsYWdzLCBzZXQgUVIgZmxhZyAqLworICBoZWFkZXItPmhiMyA9IChoZWFkZXItPmhiMyAmIH4oSEIzX0FBIHwgSEIzX1RDKSkgfCBIQjNfUVI7CisgIC8qIHNldCBSQSBmbGFnICovCisgIGhlYWRlci0+aGI0IHw9IEhCNF9SQTsKKyAgIAorICAvKiBhdXRob3JpdGl2ZSAtIG9ubHkgaG9zdHMgYW5kIERIQ1AgZGVyaXZlZCBuYW1lcy4gKi8KKyAgaWYgKGF1dGgpCisgICAgaGVhZGVyLT5oYjMgfD0gSEIzX0FBOworICAKKyAgLyogdHJ1bmNhdGlvbiAqLworICBpZiAodHJ1bmMpCisgICAgaGVhZGVyLT5oYjMgfD0gSEIzX1RDOworICAKKyAgaWYgKG54ZG9tYWluKQorICAgIFNFVF9SQ09ERShoZWFkZXIsIE5YRE9NQUlOKTsKKyAgZWxzZQorICAgIFNFVF9SQ09ERShoZWFkZXIsIE5PRVJST1IpOyAvKiBubyBlcnJvciAqLworICBoZWFkZXItPmFuY291bnQgPSBodG9ucyhhbnNjb3VudCk7CisgIGhlYWRlci0+bnNjb3VudCA9IGh0b25zKDApOworICBoZWFkZXItPmFyY291bnQgPSBodG9ucyhhZGRuY291bnQpOworCisgIGxlbiA9IGFuc3AgLSAodW5zaWduZWQgY2hhciAqKWhlYWRlcjsKKyAgCisgIGlmIChoYXZlX3BzZXVkb2hlYWRlcikKKyAgICBsZW4gPSBhZGRfcHNldWRvaGVhZGVyKGhlYWRlciwgbGVuLCAodW5zaWduZWQgY2hhciAqKWxpbWl0LCAwLCBOVUxMLCAwLCBzZWNfcmVxZCk7CisgIAorICBpZiAoKmFkX3JlcWQgJiYgc2VjX2RhdGEpCisgICAgaGVhZGVyLT5oYjQgfD0gSEI0X0FEOworICBlbHNlCisgICAgaGVhZGVyLT5oYjQgJj0gfkhCNF9BRDsKKyAgCisgIHJldHVybiBsZW47Cit9CisKZGlmZiAtLWdpdCBhL3NyYy9yZmMyMTMxLmMgYi9zcmMvcmZjMjEzMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjOTA0MDgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcmZjMjEzMS5jCkBAIC0wLDAgKzEsMjUwNCBAQAorLyogZG5zbWFzcSBpcyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxNCBTaW1vbiBLZWxsZXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgZGF0ZWQgSnVuZSwgMTk5MSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzIGRhdGVkIDI5IEp1bmUsIDIwMDcuCisgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisKKyNpZmRlZiBIQVZFX0RIQ1AKKworI2RlZmluZSBvcHRpb25fbGVuKG9wdCkgKChpbnQpKCgodW5zaWduZWQgY2hhciAqKShvcHQpKVsxXSkpCisjZGVmaW5lIG9wdGlvbl9wdHIob3B0LCBpKSAoKHZvaWQgKikmKCgodW5zaWduZWQgY2hhciAqKShvcHQpKVsydSsodW5zaWduZWQgaW50KShpKV0pKQorCisjaWZkZWYgSEFWRV9TQ1JJUFQKK3N0YXRpYyB2b2lkIGFkZF9leHRyYWRhdGFfb3B0KHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZSwgdW5zaWduZWQgY2hhciAqb3B0KTsKKyNlbmRpZgorCitzdGF0aWMgaW50IHNhbml0aXNlKHVuc2lnbmVkIGNoYXIgKm9wdCwgY2hhciAqYnVmKTsKK3N0YXRpYyBzdHJ1Y3QgaW5fYWRkciBzZXJ2ZXJfaWQoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwgc3RydWN0IGluX2FkZHIgb3ZlcnJpZGUsIHN0cnVjdCBpbl9hZGRyIGZhbGxiYWNrKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY190aW1lKHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBjaGFyICpvcHQpOworc3RhdGljIHZvaWQgb3B0aW9uX3B1dChzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHVuc2lnbmVkIGNoYXIgKmVuZCwgaW50IG9wdCwgaW50IGxlbiwgdW5zaWduZWQgaW50IHZhbCk7CitzdGF0aWMgdm9pZCBvcHRpb25fcHV0X3N0cmluZyhzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHVuc2lnbmVkIGNoYXIgKmVuZCwgCisJCQkgICAgICBpbnQgb3B0LCBjaGFyICpzdHJpbmcsIGludCBudWxsX3Rlcm0pOworc3RhdGljIHN0cnVjdCBpbl9hZGRyIG9wdGlvbl9hZGRyKHVuc2lnbmVkIGNoYXIgKm9wdCk7CitzdGF0aWMgdW5zaWduZWQgaW50IG9wdGlvbl91aW50KHVuc2lnbmVkIGNoYXIgKm9wdCwgaW50IGksIGludCBzaXplKTsKK3N0YXRpYyB2b2lkIGxvZ19wYWNrZXQoY2hhciAqdHlwZSwgdm9pZCAqYWRkciwgdW5zaWduZWQgY2hhciAqZXh0X21hYywgCisJCSAgICAgICBpbnQgbWFjX2xlbiwgY2hhciAqaW50ZXJmYWNlLCBjaGFyICpzdHJpbmcsIGNoYXIgKmVyciwgdTMyIHhpZCk7CitzdGF0aWMgdW5zaWduZWQgY2hhciAqb3B0aW9uX2ZpbmQoc3RydWN0IGRoY3BfcGFja2V0ICptZXNzLCBzaXplX3Qgc2l6ZSwgaW50IG9wdF90eXBlLCBpbnQgbWluc2l6ZSk7CitzdGF0aWMgdW5zaWduZWQgY2hhciAqb3B0aW9uX2ZpbmQxKHVuc2lnbmVkIGNoYXIgKnAsIHVuc2lnbmVkIGNoYXIgKmVuZCwgaW50IG9wdCwgaW50IG1pbnNpemUpOworc3RhdGljIHNpemVfdCBkaGNwX3BhY2tldF9zaXplKHN0cnVjdCBkaGNwX3BhY2tldCAqbWVzcywgdW5zaWduZWQgY2hhciAqYWdlbnRfaWQsIHVuc2lnbmVkIGNoYXIgKnJlYWxfZW5kKTsKK3N0YXRpYyB2b2lkIGNsZWFyX3BhY2tldChzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHVuc2lnbmVkIGNoYXIgKmVuZCk7CitzdGF0aWMgaW50IGluX2xpc3QodW5zaWduZWQgY2hhciAqbGlzdCwgaW50IG9wdCk7CitzdGF0aWMgdm9pZCBkb19vcHRpb25zKHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsCisJCSAgICAgICBzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICpyZWFsX2VuZCwgCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICpyZXFfb3B0aW9ucywKKwkJICAgICAgIGNoYXIgKmhvc3RuYW1lLCAKKwkJICAgICAgIGNoYXIgKmNvbmZpZ19kb21haW4sCisJCSAgICAgICBzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV0aWQsCisJCSAgICAgICBzdHJ1Y3QgaW5fYWRkciBzdWJuZXRfYWRkciwgCisJCSAgICAgICB1bnNpZ25lZCBjaGFyIGZxZG5fZmxhZ3MsCisJCSAgICAgICBpbnQgbnVsbF90ZXJtLCBpbnQgcHhlYXJjaCwKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKnV1aWQsCisJCSAgICAgICBpbnQgdmVuZG9yX2NsYXNzX2xlbiwKKwkJICAgICAgIHRpbWVfdCBub3cpOworCisKK3N0YXRpYyB2b2lkIG1hdGNoX3ZlbmRvcl9vcHRzKHVuc2lnbmVkIGNoYXIgKm9wdCwgc3RydWN0IGRoY3Bfb3B0ICpkb3B0KTsgCitzdGF0aWMgaW50IGRvX2VuY2FwX29wdHMoc3RydWN0IGRoY3Bfb3B0ICpvcHRzLCBpbnQgZW5jYXAsIGludCBmbGFnLCBzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHVuc2lnbmVkIGNoYXIgKmVuZCwgaW50IG51bGxfdGVybSk7CitzdGF0aWMgdm9pZCBweGVfbWlzYyhzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHVuc2lnbmVkIGNoYXIgKmVuZCwgdW5zaWduZWQgY2hhciAqdXVpZCk7CitzdGF0aWMgaW50IHBydW5lX3ZlbmRvcl9vcHRzKHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZCk7CitzdGF0aWMgc3RydWN0IGRoY3Bfb3B0ICpweGVfb3B0cyhpbnQgcHhlX2FyY2gsIHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZCwgc3RydWN0IGluX2FkZHIgbG9jYWwsIHRpbWVfdCBub3cpOworc3RydWN0IGRoY3BfYm9vdCAqZmluZF9ib290KHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZCk7CisKKyAgCitzaXplX3QgZGhjcF9yZXBseShzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCBjaGFyICppZmFjZV9uYW1lLCBpbnQgaW50X2luZGV4LAorCQkgIHNpemVfdCBzeiwgdGltZV90IG5vdywgaW50IHVuaWNhc3RfZGVzdCwgaW50ICppc19pbmZvcm0sIGludCBweGUsIHN0cnVjdCBpbl9hZGRyIGZhbGxiYWNrKQoreworICB1bnNpZ25lZCBjaGFyICpvcHQsICpjbGlkID0gTlVMTDsKKyAgc3RydWN0IGRoY3BfbGVhc2UgKmx0bXAsICpsZWFzZSA9IE5VTEw7CisgIHN0cnVjdCBkaGNwX3ZlbmRvciAqdmVuZG9yOworICBzdHJ1Y3QgZGhjcF9tYWMgKm1hYzsKKyAgc3RydWN0IGRoY3BfbmV0aWRfbGlzdCAqaWRfbGlzdDsKKyAgaW50IGNsaWRfbGVuID0gMCwgaWdub3JlID0gMCwgZG9fY2xhc3NlcyA9IDAsIHNlbGVjdGluZyA9IDAsIHB4ZWFyY2ggPSAtMTsKKyAgc3RydWN0IGRoY3BfcGFja2V0ICptZXNzID0gKHN0cnVjdCBkaGNwX3BhY2tldCAqKWRhZW1vbi0+ZGhjcF9wYWNrZXQuaW92X2Jhc2U7CisgIHVuc2lnbmVkIGNoYXIgKmVuZCA9ICh1bnNpZ25lZCBjaGFyICopKG1lc3MgKyAxKTsgCisgIHVuc2lnbmVkIGNoYXIgKnJlYWxfZW5kID0gKHVuc2lnbmVkIGNoYXIgKikobWVzcyArIDEpOyAKKyAgY2hhciAqaG9zdG5hbWUgPSBOVUxMLCAqb2ZmZXJfaG9zdG5hbWUgPSBOVUxMLCAqY2xpZW50X2hvc3RuYW1lID0gTlVMTCwgKmRvbWFpbiA9IE5VTEw7CisgIGludCBob3N0bmFtZV9hdXRoID0gMCwgYm9ya2VuX29wdCA9IDA7CisgIHVuc2lnbmVkIGNoYXIgKnJlcV9vcHRpb25zID0gTlVMTDsKKyAgY2hhciAqbWVzc2FnZSA9IE5VTEw7CisgIHVuc2lnbmVkIGludCB0aW1lOworICBzdHJ1Y3QgZGhjcF9jb25maWcgKmNvbmZpZzsKKyAgc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkLCAqdGFnaWZfbmV0aWQ7CisgIHN0cnVjdCBpbl9hZGRyIHN1Ym5ldF9hZGRyLCBvdmVycmlkZTsKKyAgdW5zaWduZWQgc2hvcnQgZnV6eiA9IDA7CisgIHVuc2lnbmVkIGludCBtZXNzX3R5cGUgPSAwOworICB1bnNpZ25lZCBjaGFyIGZxZG5fZmxhZ3MgPSAwOworICB1bnNpZ25lZCBjaGFyICphZ2VudF9pZCA9IE5VTEwsICp1dWlkID0gTlVMTDsKKyAgdW5zaWduZWQgY2hhciAqZW1hYyA9IE5VTEw7CisgIGludCB2ZW5kb3JfY2xhc3NfbGVuID0gMCwgZW1hY19sZW4gPSAwOworICBzdHJ1Y3QgZGhjcF9uZXRpZCBrbm93bl9pZCwgaWZhY2VfaWQsIGNwZXdhbl9pZDsKKyAgc3RydWN0IGRoY3Bfb3B0ICpvOworICB1bnNpZ25lZCBjaGFyIHB4ZV91dWlkWzE3XTsKKyAgdW5zaWduZWQgY2hhciAqb3VpID0gTlVMTCwgKnNlcmlhbCA9IE5VTEw7CisjaWZkZWYgSEFWRV9TQ1JJUFQKKyAgdW5zaWduZWQgY2hhciAqY2xhc3MgPSBOVUxMOworI2VuZGlmCisKKyAgc3VibmV0X2FkZHIuc19hZGRyID0gb3ZlcnJpZGUuc19hZGRyID0gMDsKKworICAvKiBzZXQgdGFnIHdpdGggbmFtZSA9PSBpbnRlcmZhY2UgKi8KKyAgaWZhY2VfaWQubmV0ID0gaWZhY2VfbmFtZTsKKyAgaWZhY2VfaWQubmV4dCA9IE5VTEw7CisgIG5ldGlkID0gJmlmYWNlX2lkOyAKKyAgCisgIGlmIChtZXNzLT5vcCAhPSBCT09UUkVRVUVTVCB8fCBtZXNzLT5obGVuID4gREhDUF9DSEFERFJfTUFYKQorICAgIHJldHVybiAwOworICAgCisgIGlmIChtZXNzLT5odHlwZSA9PSAwICYmIG1lc3MtPmhsZW4gIT0gMCkKKyAgICByZXR1cm4gMDsKKworICAvKiBjaGVjayBmb3IgREhDUCByYXRoZXIgdGhhbiBCT09UUCAqLworICBpZiAoKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fTUVTU0FHRV9UWVBFLCAxKSkpCisgICAgeworICAgICAgdTMyIGNvb2tpZSA9IGh0b25sKERIQ1BfQ09PS0lFKTsKKyAgICAgIAorICAgICAgLyogb25seSBpbnNpc3Qgb24gYSBjb29raWUgZm9yIERIQ1AuICovCisgICAgICBpZiAobWVtY21wKG1lc3MtPm9wdGlvbnMsICZjb29raWUsIHNpemVvZih1MzIpKSAhPSAwKQorCXJldHVybiAwOworICAgICAgCisgICAgICBtZXNzX3R5cGUgPSBvcHRpb25fdWludChvcHQsIDAsIDEpOworICAgICAgCisgICAgICAvKiB0d28gdGhpbmdzIHRvIG5vdGUgaGVyZTogZXhwYW5kX2J1ZiBtYXkgbW92ZSB0aGUgcGFja2V0LAorCSBzbyByZWFzc2lnbiBtZXNzIGZyb20gZGFlbW9uLT5wYWNrZXQuIEFsc28sIHRoZSBzaXplCisJIHNlbnQgaW5jbHVkZXMgdGhlIElQIGFuZCBVRFAgaGVhZGVycywgaGVuY2UgdGhlIG1hZ2ljICItMjgiICovCisgICAgICBpZiAoKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fTUFYTUVTU0FHRSwgMikpKQorCXsKKwkgIHNpemVfdCBzaXplID0gKHNpemVfdClvcHRpb25fdWludChvcHQsIDAsIDIpIC0gMjg7CisJICAKKwkgIGlmIChzaXplID4gREhDUF9QQUNLRVRfTUFYKQorCSAgICBzaXplID0gREhDUF9QQUNLRVRfTUFYOworCSAgZWxzZSBpZiAoc2l6ZSA8IHNpemVvZihzdHJ1Y3QgZGhjcF9wYWNrZXQpKQorCSAgICBzaXplID0gc2l6ZW9mKHN0cnVjdCBkaGNwX3BhY2tldCk7CisJICAKKwkgIGlmIChleHBhbmRfYnVmKCZkYWVtb24tPmRoY3BfcGFja2V0LCBzaXplKSkKKwkgICAgeworCSAgICAgIG1lc3MgPSAoc3RydWN0IGRoY3BfcGFja2V0ICopZGFlbW9uLT5kaGNwX3BhY2tldC5pb3ZfYmFzZTsKKwkgICAgICByZWFsX2VuZCA9IGVuZCA9ICgodW5zaWduZWQgY2hhciAqKW1lc3MpICsgc2l6ZTsKKwkgICAgfQorCX0KKworICAgICAgLyogU29tZSBidWdneSBjbGllbnRzIHNldCBjaWFkZHIgd2hlbiB0aGV5IHNob3VsZG4ndCwgc28gY2xlYXIgdGhhdCBoZXJlIHNpbmNlCisJIGl0IGNhbiBhZmZlY3QgdGhlIGNvbnRleHQtZGV0ZXJtaW5hdGlvbiBjb2RlLiAqLworICAgICAgaWYgKChvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX1JFUVVFU1RFRF9JUCwgSU5BRERSU1opIHx8IG1lc3NfdHlwZSA9PSBESENQRElTQ09WRVIpKQorCW1lc3MtPmNpYWRkci5zX2FkZHIgPSAwOworCisgICAgICAvKiBzZWFyY2ggZm9yIGRldmljZSBpZGVudGl0eSBmcm9tIENQRVdBTiBkZXZpY2VzLCB3ZSBwYXNzIHRoaXMgdGhyb3VnaCB0byB0aGUgc2NyaXB0ICovCisgICAgICBpZiAoKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fVkVORE9SX0lERU5UX09QVCwgNSkpKQorCXsKKwkgIHVuc2lnbmVkICBpbnQgZWxlbiwgb2Zmc2V0LCBsZW4gPSBvcHRpb25fbGVuKG9wdCk7CisJICAKKwkgIGZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgKGxlbiAtIDUpOyBvZmZzZXQgKz0gZWxlbiArIDUpCisJICAgIHsKKwkgICAgICBlbGVuID0gb3B0aW9uX3VpbnQob3B0LCBvZmZzZXQgKyA0ICwgMSk7CisJICAgICAgaWYgKG9wdGlvbl91aW50KG9wdCwgb2Zmc2V0LCA0KSA9PSBCUkRCQU5EX0ZPUlVNX0lBTkEpCisJCXsKKwkJICB1bnNpZ25lZCBjaGFyICp4ID0gb3B0aW9uX3B0cihvcHQsIG9mZnNldCArIDUpOworCQkgIHVuc2lnbmVkIGNoYXIgKnkgPSBvcHRpb25fcHRyKG9wdCwgb2Zmc2V0ICsgZWxlbiArIDUpOworCQkgIG91aSA9IG9wdGlvbl9maW5kMSh4LCB5LCAxLCAxKTsKKwkJICBzZXJpYWwgPSBvcHRpb25fZmluZDEoeCwgeSwgMiwgMSk7CisjaWZkZWYgSEFWRV9TQ1JJUFQKKwkJICBjbGFzcyA9IG9wdGlvbl9maW5kMSh4LCB5LCAzLCAxKTsJCSAgCisjZW5kaWYKKwkJICAvKiBJZiBUUjA2OS1pZCBpcyBwcmVzZW50IHNldCB0aGUgdGFnICJjcGV3YW4taWQiIHRvIGZhY2lsaXRhdGUgZWNob2luZyAKKwkJICAgICB0aGUgZ2F0ZXdheSBpZCBiYWNrLiBOb3RlIHRoYXQgdGhlIGRldmljZSBjbGFzcyBpcyBvcHRpb25hbCAqLworCQkgIGlmIChvdWkgJiYgc2VyaWFsKQorCQkgICAgeworCQkgICAgICBjcGV3YW5faWQubmV0ID0gImNwZXdhbi1pZCI7CisJCSAgICAgIGNwZXdhbl9pZC5uZXh0ID0gbmV0aWQ7CisJCSAgICAgIG5ldGlkID0gJmNwZXdhbl9pZDsKKwkJICAgIH0KKwkJICBicmVhazsKKwkJfQorCSAgICB9CisJfQorICAgICAgCisgICAgICBpZiAoKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fQUdFTlRfSUQsIDEpKSkKKwl7CisJICAvKiBBbnkgYWdlbnQtaWQgbmVlZHMgdG8gYmUgY29waWVkIGJhY2sgb3V0LCB2ZXJiYXRpbSwgYXMgdGhlIGxhc3Qgb3B0aW9uCisJICAgICBpbiB0aGUgcGFja2V0LiBIZXJlLCB3ZSBzaGlmdCBpdCB0byB0aGUgdmVyeSBlbmQgb2YgdGhlIGJ1ZmZlciwgaWYgaXQgZG9lc24ndAorCSAgICAgZ2V0IG92ZXJ3cml0dGVuLCB0aGVuIGl0IHdpbGwgYmUgc2h1ZmZsZWQgYmFjayBhdCB0aGUgZW5kIG9mIHByb2Nlc3NpbmcuCisJICAgICBOb3RlIHRoYXQgdGhlIGluY29taW5nIG9wdGlvbnMgbXVzdCBub3QgYmUgb3ZlcndyaXR0ZW4gaGVyZSwgc28gdGhlcmUgaGFzIHRvIAorCSAgICAgYmUgZW5vdWdoIGZyZWUgc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgcGFja2V0IHRvIGNvcHkgdGhlIG9wdGlvbi4gKi8KKwkgIHVuc2lnbmVkIGNoYXIgKnNvcHQ7CisJICB1bnNpZ25lZCBpbnQgdG90YWwgPSBvcHRpb25fbGVuKG9wdCkgKyAyOworCSAgdW5zaWduZWQgY2hhciAqbGFzdF9vcHQgPSBvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX0VORCwgMCk7CisJICBpZiAobGFzdF9vcHQgJiYgbGFzdF9vcHQgPCBlbmQgLSB0b3RhbCkKKwkgICAgeworCSAgICAgIGVuZCAtPSB0b3RhbDsKKwkgICAgICBhZ2VudF9pZCA9IGVuZDsKKwkgICAgICBtZW1jcHkoYWdlbnRfaWQsIG9wdCwgdG90YWwpOworCSAgICB9CisKKwkgIC8qIGxvb2sgZm9yIFJGQzM1MjcgTGluayBzZWxlY3Rpb24gc3ViLW9wdGlvbiAqLworCSAgaWYgKChzb3B0ID0gb3B0aW9uX2ZpbmQxKG9wdGlvbl9wdHIob3B0LCAwKSwgb3B0aW9uX3B0cihvcHQsIG9wdGlvbl9sZW4ob3B0KSksIFNVQk9QVF9TVUJORVRfU0VMRUNULCBJTkFERFJTWikpKQorCSAgICBzdWJuZXRfYWRkciA9IG9wdGlvbl9hZGRyKHNvcHQpOworCisJICAvKiBsb29rIGZvciBSRkM1MTA3IHNlcnZlci1pZGVudGlmaWVyLW92ZXJyaWRlICovCisJICBpZiAoKHNvcHQgPSBvcHRpb25fZmluZDEob3B0aW9uX3B0cihvcHQsIDApLCBvcHRpb25fcHRyKG9wdCwgb3B0aW9uX2xlbihvcHQpKSwgU1VCT1BUX1NFUlZFUl9PUiwgSU5BRERSU1opKSkKKwkgICAgb3ZlcnJpZGUgPSBvcHRpb25fYWRkcihzb3B0KTsKKwkgIAorCSAgLyogaWYgYSBjaXJjdWl0LWlkIG9yIHJlbW90ZS1pcyBvcHRpb24gaXMgcHJvdmlkZWQsIGV4YWN0LW1hdGNoIHRvIG9wdGlvbnMuICovIAorCSAgZm9yICh2ZW5kb3IgPSBkYWVtb24tPmRoY3BfdmVuZG9yczsgdmVuZG9yOyB2ZW5kb3IgPSB2ZW5kb3ItPm5leHQpCisJICAgIHsKKwkgICAgICBpbnQgc2VhcmNoOworCSAgICAgIAorCSAgICAgIGlmICh2ZW5kb3ItPm1hdGNoX3R5cGUgPT0gTUFUQ0hfQ0lSQ1VJVCkKKwkJc2VhcmNoID0gU1VCT1BUX0NJUkNVSVRfSUQ7CisJICAgICAgZWxzZSBpZiAodmVuZG9yLT5tYXRjaF90eXBlID09IE1BVENIX1JFTU9URSkKKwkJc2VhcmNoID0gU1VCT1BUX1JFTU9URV9JRDsKKwkgICAgICBlbHNlIGlmICh2ZW5kb3ItPm1hdGNoX3R5cGUgPT0gTUFUQ0hfU1VCU0NSSUJFUikKKwkJc2VhcmNoID0gU1VCT1BUX1NVQlNDUl9JRDsKKwkgICAgICBlbHNlIAorCQljb250aW51ZTsKKworCSAgICAgIGlmICgoc29wdCA9IG9wdGlvbl9maW5kMShvcHRpb25fcHRyKG9wdCwgMCksIG9wdGlvbl9wdHIob3B0LCBvcHRpb25fbGVuKG9wdCkpLCBzZWFyY2gsIDEpKSAmJgorCQkgIHZlbmRvci0+bGVuID09IG9wdGlvbl9sZW4oc29wdCkgJiYKKwkJICBtZW1jbXAob3B0aW9uX3B0cihzb3B0LCAwKSwgdmVuZG9yLT5kYXRhLCB2ZW5kb3ItPmxlbikgPT0gMCkKKwkJeworCQkgIHZlbmRvci0+bmV0aWQubmV4dCA9IG5ldGlkOworCQkgIG5ldGlkID0gJnZlbmRvci0+bmV0aWQ7CisJCX0gCisJICAgIH0KKwl9CisKKyAgICAgIC8qIENoZWNrIGZvciBSRkMzMDExIHN1Ym5ldCBzZWxlY3RvciAtIG9ubHkgaWYgUkZDMzUyNyBvbmUgbm90IHByZXNlbnQgKi8KKyAgICAgIGlmIChzdWJuZXRfYWRkci5zX2FkZHIgPT0gMCAmJiAob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9TVUJORVRfU0VMRUNULCBJTkFERFJTWikpKQorCXN1Ym5ldF9hZGRyID0gb3B0aW9uX2FkZHIob3B0KTsKKyAgICAgIAorICAgICAgLyogSWYgdGhlcmUgaXMgbm8gY2xpZW50IGlkZW50aWZpZXIgb3B0aW9uLCB1c2UgdGhlIGhhcmR3YXJlIGFkZHJlc3MgKi8KKyAgICAgIGlmICgob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9DTElFTlRfSUQsIDEpKSkKKwl7CisJICBjbGlkX2xlbiA9IG9wdGlvbl9sZW4ob3B0KTsKKwkgIGNsaWQgPSBvcHRpb25fcHRyKG9wdCwgMCk7CisJfQorCisgICAgICAvKiBkbyB3ZSBoYXZlIGEgbGVhc2UgaW4gc3RvcmU/ICovCisgICAgICBsZWFzZSA9IGxlYXNlX2ZpbmRfYnlfY2xpZW50KG1lc3MtPmNoYWRkciwgbWVzcy0+aGxlbiwgbWVzcy0+aHR5cGUsIGNsaWQsIGNsaWRfbGVuKTsKKworICAgICAgLyogSWYgdGhpcyByZXF1ZXN0IGlzIG1pc3NpbmcgYSBjbGlkLCBidXQgd2UndmUgc2VlbiBvbmUgYmVmb3JlLCAKKwkgdXNlIGl0IGFnYWluIGZvciBvcHRpb24gbWF0Y2hpbmcgZXRjLiAqLworICAgICAgaWYgKGxlYXNlICYmICFjbGlkICYmIGxlYXNlLT5jbGlkKQorCXsKKwkgIGNsaWRfbGVuID0gbGVhc2UtPmNsaWRfbGVuOworCSAgY2xpZCA9IGxlYXNlLT5jbGlkOworCX0KKworICAgICAgLyogZmluZCBtYWMgdG8gdXNlIGZvciBsb2dnaW5nIGFuZCBoYXNoaW5nICovCisgICAgICBlbWFjID0gZXh0ZW5kZWRfaHdhZGRyKG1lc3MtPmh0eXBlLCBtZXNzLT5obGVuLCBtZXNzLT5jaGFkZHIsIGNsaWRfbGVuLCBjbGlkLCAmZW1hY19sZW4pOworICAgIH0KKyAgCisgIGZvciAobWFjID0gZGFlbW9uLT5kaGNwX21hY3M7IG1hYzsgbWFjID0gbWFjLT5uZXh0KQorICAgIGlmIChtYWMtPmh3YWRkcl9sZW4gPT0gbWVzcy0+aGxlbiAmJgorCShtYWMtPmh3YWRkcl90eXBlID09IG1lc3MtPmh0eXBlIHx8IG1hYy0+aHdhZGRyX3R5cGUgPT0gMCkgJiYKKwltZW1jbXBfbWFza2VkKG1hYy0+aHdhZGRyLCBtZXNzLT5jaGFkZHIsIG1lc3MtPmhsZW4sIG1hYy0+bWFzaykpCisgICAgICB7CisJbWFjLT5uZXRpZC5uZXh0ID0gbmV0aWQ7CisJbmV0aWQgPSAmbWFjLT5uZXRpZDsKKyAgICAgIH0KKyAgCisgIC8qIERldGVybWluZSBuZXR3b3JrIGZvciB0aGlzIHBhY2tldC4gT3VyIGNhbGxlciB3aWxsIGhhdmUgYWxyZWFkeSBsaW5rZWQgYWxsIHRoZSAKKyAgICAgY29udGV4dHMgd2hpY2ggbWF0Y2ggdGhlIGFkZHJlc3NlcyBvZiB0aGUgcmVjZWl2aW5nIGludGVyZmFjZSBidXQgaWYgdGhlIAorICAgICBtYWNoaW5lIGhhcyBhbiBhZGRyZXNzIGFscmVhZHksIG9yIGNhbWUgdmlhIGEgcmVsYXksIG9yIHdlIGhhdmUgYSBzdWJuZXQgc2VsZWN0b3IsIAorICAgICB3ZSBzZWFyY2ggYWdhaW4uIElmIHdlIGRvbid0IGhhdmUgaGF2ZSBhIGdpYWRkciBvciBleHBsaWNpdCBzdWJuZXQgc2VsZWN0b3IsIAorICAgICB1c2UgdGhlIGNpYWRkci4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBhICBtYWNoaW5lIHdoaWNoIGdvdCBhIGxlYXNlIHZpYSBhIAorICAgICByZWxheSB3b24ndCB1c2UgdGhlIHJlbGF5IHRvIHJlbmV3LiBJZiBtYXRjaGluZyBhIGNpYWRkciBmYWlscyBidXQgd2UgaGF2ZSBhIGNvbnRleHQgCisgICAgIGZyb20gdGhlIHBoeXNpY2FsIG5ldHdvcmssIGNvbnRpbnVlIHVzaW5nIHRoYXQgdG8gYWxsb3cgY29ycmVjdCBESENQTkFLIGdlbmVyYXRpb24gbGF0ZXIuICovCisgIGlmIChtZXNzLT5naWFkZHIuc19hZGRyIHx8IHN1Ym5ldF9hZGRyLnNfYWRkciB8fCBtZXNzLT5jaWFkZHIuc19hZGRyKQorICAgIHsKKyAgICAgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHRfdG1wLCAqY29udGV4dF9uZXcgPSBOVUxMOworICAgICAgc3RydWN0IGluX2FkZHIgYWRkcjsKKyAgICAgIGludCBmb3JjZSA9IDA7CisgICAgICAKKyAgICAgIGlmIChzdWJuZXRfYWRkci5zX2FkZHIpCisJeworCSAgYWRkciA9IHN1Ym5ldF9hZGRyOworCSAgZm9yY2UgPSAxOworCX0KKyAgICAgIGVsc2UgaWYgKG1lc3MtPmdpYWRkci5zX2FkZHIpCisJeworCSAgYWRkciA9IG1lc3MtPmdpYWRkcjsKKwkgIGZvcmNlID0gMTsKKwl9CisgICAgICBlbHNlCisJeworCSAgLyogSWYgY2lhZGRyIGlzIGluIHRoZSBoYXJkd2FyZSBkZXJpdmVkIHNldCBvZiBjb250ZXh0cywgbGVhdmUgdGhhdCB1bmNoYW5nZWQgKi8KKwkgIGFkZHIgPSBtZXNzLT5jaWFkZHI7CisJICBmb3IgKGNvbnRleHRfdG1wID0gY29udGV4dDsgY29udGV4dF90bXA7IGNvbnRleHRfdG1wID0gY29udGV4dF90bXAtPmN1cnJlbnQpCisJICAgIGlmIChjb250ZXh0X3RtcC0+bmV0bWFzay5zX2FkZHIgJiYgCisJCWlzX3NhbWVfbmV0KGFkZHIsIGNvbnRleHRfdG1wLT5zdGFydCwgY29udGV4dF90bXAtPm5ldG1hc2spICYmCisJCWlzX3NhbWVfbmV0KGFkZHIsIGNvbnRleHRfdG1wLT5lbmQsIGNvbnRleHRfdG1wLT5uZXRtYXNrKSkKKwkgICAgICB7CisJCWNvbnRleHRfbmV3ID0gY29udGV4dDsKKwkJYnJlYWs7CisJICAgICAgfQorCX0gCisJCQorICAgICAgaWYgKCFjb250ZXh0X25ldykKKwlmb3IgKGNvbnRleHRfdG1wID0gZGFlbW9uLT5kaGNwOyBjb250ZXh0X3RtcDsgY29udGV4dF90bXAgPSBjb250ZXh0X3RtcC0+bmV4dCkKKwkgIHsKKwkgICAgc3RydWN0IGluX2FkZHIgbmV0bWFzayA9IGNvbnRleHRfdG1wLT5uZXRtYXNrOworCisJICAgIC8qIGd1ZXNzIHRoZSBuZXRtYXNrIGZvciByZWxheWVkIG5ldHdvcmtzICovCisJICAgIGlmICghKGNvbnRleHRfdG1wLT5mbGFncyAmIENPTlRFWFRfTkVUTUFTSykgJiYgY29udGV4dF90bXAtPm5ldG1hc2suc19hZGRyID09IDApCisJICAgICAgeworCQlpZiAoSU5fQ0xBU1NBKG50b2hsKGNvbnRleHRfdG1wLT5zdGFydC5zX2FkZHIpKSAmJiBJTl9DTEFTU0EobnRvaGwoY29udGV4dF90bXAtPmVuZC5zX2FkZHIpKSkKKwkJICBuZXRtYXNrLnNfYWRkciA9IGh0b25sKDB4ZmYwMDAwMDApOworCQllbHNlIGlmIChJTl9DTEFTU0IobnRvaGwoY29udGV4dF90bXAtPnN0YXJ0LnNfYWRkcikpICYmIElOX0NMQVNTQihudG9obChjb250ZXh0X3RtcC0+ZW5kLnNfYWRkcikpKQorCQkgIG5ldG1hc2suc19hZGRyID0gaHRvbmwoMHhmZmZmMDAwMCk7CisJCWVsc2UgaWYgKElOX0NMQVNTQyhudG9obChjb250ZXh0X3RtcC0+c3RhcnQuc19hZGRyKSkgJiYgSU5fQ0xBU1NDKG50b2hsKGNvbnRleHRfdG1wLT5lbmQuc19hZGRyKSkpCisJCSAgbmV0bWFzay5zX2FkZHIgPSBodG9ubCgweGZmZmZmZjAwKTsgCisJICAgICAgfQorCSAgICAKKwkgICAgLyogVGhpcyBzZWN0aW9uIGZpbGxzIGluIGNvbnRleHQgbWFpbmx5IHdoZW4gYSBjbGllbnQgd2hpY2ggaXMgb24gYSByZW1vdGUgKHJlbGF5ZWQpCisJICAgICAgIG5ldHdvcmsgcmVuZXdzIGEgbGVhc2Ugd2l0aG91dCB1c2luZyB0aGUgcmVsYXksIGFmdGVyIGRuc21hc3EgaGFzIHJlc3RhcnRlZC4gKi8KKwkgICAgaWYgKG5ldG1hc2suc19hZGRyICE9IDAgICYmIAorCQlpc19zYW1lX25ldChhZGRyLCBjb250ZXh0X3RtcC0+c3RhcnQsIG5ldG1hc2spICYmCisJCWlzX3NhbWVfbmV0KGFkZHIsIGNvbnRleHRfdG1wLT5lbmQsIG5ldG1hc2spKQorCSAgICAgIHsKKwkJY29udGV4dF90bXAtPm5ldG1hc2sgPSBuZXRtYXNrOworCQlpZiAoY29udGV4dF90bXAtPmxvY2FsLnNfYWRkciA9PSAwKQorCQkgIGNvbnRleHRfdG1wLT5sb2NhbCA9IGZhbGxiYWNrOworCQlpZiAoY29udGV4dF90bXAtPnJvdXRlci5zX2FkZHIgPT0gMCkKKwkJICBjb250ZXh0X3RtcC0+cm91dGVyID0gbWVzcy0+Z2lhZGRyOworCSAgIAorCQkvKiBmaWxsIGluIG1pc3NpbmcgYnJvYWRjYXN0IGFkZHJlc3NlcyBmb3IgcmVsYXllZCByYW5nZXMgKi8KKwkJaWYgKCEoY29udGV4dF90bXAtPmZsYWdzICYgQ09OVEVYVF9CUkRDQVNUKSAmJiBjb250ZXh0X3RtcC0+YnJvYWRjYXN0LnNfYWRkciA9PSAwICkKKwkJICBjb250ZXh0X3RtcC0+YnJvYWRjYXN0LnNfYWRkciA9IGNvbnRleHRfdG1wLT5zdGFydC5zX2FkZHIgfCB+Y29udGV4dF90bXAtPm5ldG1hc2suc19hZGRyOworCQkKKwkJY29udGV4dF90bXAtPmN1cnJlbnQgPSBjb250ZXh0X25ldzsKKwkJY29udGV4dF9uZXcgPSBjb250ZXh0X3RtcDsKKwkgICAgICB9CisJICB9CisgICAgICAKKyAgICAgIGlmIChjb250ZXh0X25ldyB8fCBmb3JjZSkKKwljb250ZXh0ID0gY29udGV4dF9uZXc7IAorICAgIH0KKyAgCisgIGlmICghY29udGV4dCkKKyAgICB7CisgICAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19XQVJOSU5HLCBfKCJubyBhZGRyZXNzIHJhbmdlIGF2YWlsYWJsZSBmb3IgREhDUCByZXF1ZXN0ICVzICVzIiksIAorCQlzdWJuZXRfYWRkci5zX2FkZHIgPyBfKCJ3aXRoIHN1Ym5ldCBzZWxlY3RvciIpIDogXygidmlhIiksCisJCXN1Ym5ldF9hZGRyLnNfYWRkciA/IGluZXRfbnRvYShzdWJuZXRfYWRkcikgOiAobWVzcy0+Z2lhZGRyLnNfYWRkciA/IGluZXRfbnRvYShtZXNzLT5naWFkZHIpIDogaWZhY2VfbmFtZSkpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIGlmIChvcHRpb25fYm9vbChPUFRfTE9HX09QVFMpKQorICAgIHsKKyAgICAgIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHRfdG1wOworICAgICAgZm9yIChjb250ZXh0X3RtcCA9IGNvbnRleHQ7IGNvbnRleHRfdG1wOyBjb250ZXh0X3RtcCA9IGNvbnRleHRfdG1wLT5jdXJyZW50KQorCXsKKwkgIHN0cmNweShkYWVtb24tPm5hbWVidWZmLCBpbmV0X250b2EoY29udGV4dF90bXAtPnN0YXJ0KSk7CisJICBpZiAoY29udGV4dF90bXAtPmZsYWdzICYgKENPTlRFWFRfU1RBVElDIHwgQ09OVEVYVF9QUk9YWSkpCisJICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sIF8oIiV1IGF2YWlsYWJsZSBESENQIHN1Ym5ldDogJXMvJXMiKSwKKwkJICAgICAgbnRvaGwobWVzcy0+eGlkKSwgZGFlbW9uLT5uYW1lYnVmZiwgaW5ldF9udG9hKGNvbnRleHRfdG1wLT5uZXRtYXNrKSk7CisJICBlbHNlCisJICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sIF8oIiV1IGF2YWlsYWJsZSBESENQIHJhbmdlOiAlcyAtLSAlcyIpLCAKKwkJICAgICAgbnRvaGwobWVzcy0+eGlkKSwgZGFlbW9uLT5uYW1lYnVmZiwgaW5ldF9udG9hKGNvbnRleHRfdG1wLT5lbmQpKTsKKwl9CisgICAgfQorICAKKyAgLyogZGhjcC1tYXRjaC4gSWYgd2UgaGF2ZSBoZXgtYW5kLXdpbGRjYXJkcywgbG9vayBmb3IgYSBsZWZ0LWFuY2hvcmVkIG1hdGNoLgorICAgICBPdGhlcndpc2UgYXNzdW1lIHRoZSBvcHRpb24gaXMgYW4gYXJyYXksIGFuZCBsb29rIGZvciBhIG1hdGNoaW5nIGVsZW1lbnQuIAorICAgICBJZiBubyBkYXRhIGdpdmVuLCBleGlzdGFuY2Ugb2YgdGhlIG9wdGlvbiBpcyBlbm91Z2guIFRoaXMgY29kZSBoYW5kbGVzIAorICAgICByZmMzOTI1IFYtSSBjbGFzc2VzIHRvby4gKi8KKyAgZm9yIChvID0gZGFlbW9uLT5kaGNwX21hdGNoOyBvOyBvID0gby0+bmV4dCkKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgbGVuLCBlbGVuLCBtYXRjaCA9IDA7CisgICAgICBzaXplX3Qgb2Zmc2V0LCBvMjsKKworICAgICAgaWYgKG8tPmZsYWdzICYgREhPUFRfUkZDMzkyNSkKKwl7CisJICBpZiAoIShvcHQgPSBvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX1ZFTkRPUl9JREVOVCwgNSkpKQorCSAgICBjb250aW51ZTsKKwkgIAorCSAgZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCAob3B0aW9uX2xlbihvcHQpIC0gNXUpOyBvZmZzZXQgKz0gbGVuICsgNSkKKwkgICAgeworCSAgICAgIGxlbiA9IG9wdGlvbl91aW50KG9wdCwgb2Zmc2V0ICsgNCAsIDEpOworCSAgICAgIC8qIE5lZWQgdG8gdGFrZSBjYXJlIHRoYXQgYmFkIGRhdGEgY2FuJ3QgcnVuIHVzIG9mZiB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgKi8KKwkgICAgICBpZiAoKG9mZnNldCArIGxlbiArIDUgPD0gKG9wdGlvbl9sZW4ob3B0KSkpICYmCisJCSAgKG9wdGlvbl91aW50KG9wdCwgb2Zmc2V0LCA0KSA9PSAodW5zaWduZWQgaW50KW8tPnUuZW5jYXApKQorCQlmb3IgKG8yID0gb2Zmc2V0ICsgNTsgbzIgPCBvZmZzZXQgKyBsZW4gKyA1OyBvMiArPSBlbGVuICsgMSkKKwkJICB7IAorCQkgICAgZWxlbiA9IG9wdGlvbl91aW50KG9wdCwgbzIsIDEpOworCQkgICAgaWYgKChvMiArIGVsZW4gKyAxIDw9IG9wdGlvbl9sZW4ob3B0KSkgJiYKKwkJCShtYXRjaCA9IG1hdGNoX2J5dGVzKG8sIG9wdGlvbl9wdHIob3B0LCBvMiArIDEpLCBlbGVuKSkpCisJCSAgICAgIGJyZWFrOworCQkgIH0KKwkgICAgICBpZiAobWF0Y2gpIAorCQlicmVhazsKKwkgICAgfQkgIAorCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAoIShvcHQgPSBvcHRpb25fZmluZChtZXNzLCBzeiwgby0+b3B0LCAxKSkpCisJICAgIGNvbnRpbnVlOworCSAgCisJICBtYXRjaCA9IG1hdGNoX2J5dGVzKG8sIG9wdGlvbl9wdHIob3B0LCAwKSwgb3B0aW9uX2xlbihvcHQpKTsKKwl9IAorCisgICAgICBpZiAobWF0Y2gpCisJeworCSAgby0+bmV0aWQtPm5leHQgPSBuZXRpZDsKKwkgIG5ldGlkID0gby0+bmV0aWQ7CisJfQorICAgIH0KKwkKKyAgLyogdXNlci1jbGFzcyBvcHRpb25zIGFyZSwgYWNjb3JkaW5nIHRvIFJGQzMwMDQsIHN1cHBvc2VkIHRvIGNvbnRhaW4KKyAgICAgYSBzZXQgb2YgY291bnRlZCBzdHJpbmdzLiBIZXJlIHdlIGNoZWNrIHRoYXQgdGhpcyBpcyBzbyAoYnkgc2VlaW5nCisgICAgIGlmIHRoZSBjb3VudHMgYXJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgb3ZlcmFsbCBvcHRpb24gbGVuZ3RoKSBhbmQgaWYKKyAgICAgc28gemVybyB0aGUgY291bnRzIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IHNwdXJpb3VzIG1hdGNoZXMgYmV0d2VlbiAKKyAgICAgdGhlIHZlbmRvciBzdHJpbmcgYW5kIHRoZSBjb3VudHMuIElmIHRoZSBsZW5ndGhzIGRvbid0IGFkZCB1cCwgd2UKKyAgICAgYXNzdW1lIHRoYXQgdGhlIG9wdGlvbiBpcyBhIHNpbmdsZSBzdHJpbmcgYW5kIG5vbiBSRkMzMDA0IGNvbXBsaWFudCAKKyAgICAgYW5kIGp1c3QgZG8gdGhlIHN1YnN0cmluZyBtYXRjaC4gZGhjbGllbnQgcHJvdmlkZXMgdGhlc2UgYnJva2VuIG9wdGlvbnMuCisgICAgIFRoZSBjb2RlLCBsYXRlciwgd2hpY2ggc2VuZHMgdXNlci1jbGFzcyBkYXRhIHRvIHRoZSBsZWFzZS1jaGFuZ2Ugc2NyaXB0CisgICAgIHJlbGllcyBvbiB0aGUgdHJhbnNmb3JtYXRpb24gZG9uZSBoZXJlLgorICAqLworCisgIGlmICgob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9VU0VSX0NMQVNTLCAxKSkpCisgICAgeworICAgICAgdW5zaWduZWQgY2hhciAqdWNwID0gb3B0aW9uX3B0cihvcHQsIDApOworICAgICAgaW50IHRtcCwgajsKKyAgICAgIGZvciAoaiA9IDA7IGogPCBvcHRpb25fbGVuKG9wdCk7IGogKz0gdWNwW2pdICsgMSk7CisgICAgICBpZiAoaiA9PSBvcHRpb25fbGVuKG9wdCkpCisJZm9yIChqID0gMDsgaiA8IG9wdGlvbl9sZW4ob3B0KTsgaiA9IHRtcCkKKwkgIHsKKwkgICAgdG1wID0gaiArIHVjcFtqXSArIDE7CisJICAgIHVjcFtqXSA9IDA7CisJICB9CisgICAgfQorICAgIAorICBmb3IgKHZlbmRvciA9IGRhZW1vbi0+ZGhjcF92ZW5kb3JzOyB2ZW5kb3I7IHZlbmRvciA9IHZlbmRvci0+bmV4dCkKKyAgICB7CisgICAgICBpbnQgbW9wdDsKKyAgICAgIAorICAgICAgaWYgKHZlbmRvci0+bWF0Y2hfdHlwZSA9PSBNQVRDSF9WRU5ET1IpCisJbW9wdCA9IE9QVElPTl9WRU5ET1JfSUQ7CisgICAgICBlbHNlIGlmICh2ZW5kb3ItPm1hdGNoX3R5cGUgPT0gTUFUQ0hfVVNFUikKKwltb3B0ID0gT1BUSU9OX1VTRVJfQ0xBU1M7IAorICAgICAgZWxzZQorCWNvbnRpbnVlOworCisgICAgICBpZiAoKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBtb3B0LCAxKSkpCisJeworCSAgaW50IGk7CisJICBmb3IgKGkgPSAwOyBpIDw9IChvcHRpb25fbGVuKG9wdCkgLSB2ZW5kb3ItPmxlbik7IGkrKykKKwkgICAgaWYgKG1lbWNtcCh2ZW5kb3ItPmRhdGEsIG9wdGlvbl9wdHIob3B0LCBpKSwgdmVuZG9yLT5sZW4pID09IDApCisJICAgICAgeworCQl2ZW5kb3ItPm5ldGlkLm5leHQgPSBuZXRpZDsKKwkJbmV0aWQgPSAmdmVuZG9yLT5uZXRpZDsKKwkJYnJlYWs7CisJICAgICAgfQorCX0KKyAgICB9CisKKyAgLyogbWFyayB2ZW5kb3ItZW5jYXBzdWxhdGVkIG9wdGlvbnMgd2hpY2ggbWF0Y2ggdGhlIGNsaWVudC1zdXBwbGllZCB2ZW5kb3IgY2xhc3MsCisgICAgIHNhdmUgY2xpZW50LXN1cHBsaWVkIHZlbmRvciBjbGFzcyAqLworICBpZiAoKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fVkVORE9SX0lELCAxKSkpCisgICAgeworICAgICAgbWVtY3B5KGRhZW1vbi0+ZGhjcF9idWZmMywgb3B0aW9uX3B0cihvcHQsIDApLCBvcHRpb25fbGVuKG9wdCkpOworICAgICAgdmVuZG9yX2NsYXNzX2xlbiA9IG9wdGlvbl9sZW4ob3B0KTsKKyAgICB9CisgIG1hdGNoX3ZlbmRvcl9vcHRzKG9wdCwgZGFlbW9uLT5kaGNwX29wdHMpOworICAKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9MT0dfT1BUUykpCisgICAgeworICAgICAgaWYgKHNhbml0aXNlKG9wdCwgZGFlbW9uLT5uYW1lYnVmZikpCisJbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgXygiJXUgdmVuZG9yIGNsYXNzOiAlcyIpLCBudG9obChtZXNzLT54aWQpLCBkYWVtb24tPm5hbWVidWZmKTsKKyAgICAgIGlmIChzYW5pdGlzZShvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX1VTRVJfQ0xBU1MsIDEpLCBkYWVtb24tPm5hbWVidWZmKSkKKwlteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCIldSB1c2VyIGNsYXNzOiAlcyIpLCBudG9obChtZXNzLT54aWQpLCBkYWVtb24tPm5hbWVidWZmKTsKKyAgICB9CisKKyAgbWVzcy0+b3AgPSBCT09UUkVQTFk7CisgIAorICBjb25maWcgPSBmaW5kX2NvbmZpZyhkYWVtb24tPmRoY3BfY29uZiwgY29udGV4dCwgY2xpZCwgY2xpZF9sZW4sIAorCQkgICAgICAgbWVzcy0+Y2hhZGRyLCBtZXNzLT5obGVuLCBtZXNzLT5odHlwZSwgTlVMTCk7CisKKyAgLyogc2V0ICJrbm93biIgdGFnIGZvciBrbm93biBob3N0cyAqLworICBpZiAoY29uZmlnKQorICAgIHsKKyAgICAgIGtub3duX2lkLm5ldCA9ICJrbm93biI7CisgICAgICBrbm93bl9pZC5uZXh0ID0gbmV0aWQ7CisgICAgICBuZXRpZCA9ICZrbm93bl9pZDsKKyAgICB9CisgIAorICBpZiAobWVzc190eXBlID09IDAgJiYgIXB4ZSkKKyAgICB7CisgICAgICAvKiBCT09UUCByZXF1ZXN0ICovCisgICAgICBzdHJ1Y3QgZGhjcF9uZXRpZCBpZCwgYm9vdHBfaWQ7CisgICAgICBzdHJ1Y3QgaW5fYWRkciAqbG9nYWRkciA9IE5VTEw7CisKKyAgICAgIC8qIG11c3QgaGF2ZSBhIE1BQyBhZGRyIGZvciBib290cCAqLworICAgICAgaWYgKG1lc3MtPmh0eXBlID09IDAgfHwgbWVzcy0+aGxlbiA9PSAwIHx8IChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfUFJPWFkpKQorCXJldHVybiAwOworICAgICAgCisgICAgICBpZiAoaGF2ZV9jb25maWcoY29uZmlnLCBDT05GSUdfRElTQUJMRSkpCisJbWVzc2FnZSA9IF8oImRpc2FibGVkIik7CisKKyAgICAgIGVuZCA9IG1lc3MtPm9wdGlvbnMgKyA2NDsgLyogQk9PVFAgdmVuZCBhcmVhIGlzIG9ubHkgNjQgYnl0ZXMgKi8KKyAgICAgICAgICAgIAorICAgICAgaWYgKGhhdmVfY29uZmlnKGNvbmZpZywgQ09ORklHX05BTUUpKQorCXsKKwkgIGhvc3RuYW1lID0gY29uZmlnLT5ob3N0bmFtZTsKKwkgIGRvbWFpbiA9IGNvbmZpZy0+ZG9tYWluOworCX0KKworICAgICAgaWYgKGNvbmZpZykKKwl7CisJICBzdHJ1Y3QgZGhjcF9uZXRpZF9saXN0ICpsaXN0OworCisJICBmb3IgKGxpc3QgPSBjb25maWctPm5ldGlkOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkKKwkgICAgeworCSAgICAgIGxpc3QtPmxpc3QtPm5leHQgPSBuZXRpZDsKKwkgICAgICBuZXRpZCA9IGxpc3QtPmxpc3Q7CisJICAgIH0KKwl9CisKKyAgICAgIC8qIE1hdGNoIGluY29taW5nIGZpbGVuYW1lIGZpZWxkIGFzIGEgbmV0aWQuICovCisgICAgICBpZiAobWVzcy0+ZmlsZVswXSkKKwl7CisJICBtZW1jcHkoZGFlbW9uLT5kaGNwX2J1ZmYyLCBtZXNzLT5maWxlLCBzaXplb2YobWVzcy0+ZmlsZSkpOworCSAgZGFlbW9uLT5kaGNwX2J1ZmYyW3NpemVvZihtZXNzLT5maWxlKSArIDFdID0gMDsgLyogZW5zdXJlIHplcm8gdGVybS4gKi8KKwkgIGlkLm5ldCA9IChjaGFyICopZGFlbW9uLT5kaGNwX2J1ZmYyOworCSAgaWQubmV4dCA9IG5ldGlkOworCSAgbmV0aWQgPSAmaWQ7CisJfQorCisgICAgICAvKiBBZGQgImJvb3RwIiBhcyBhIHRhZyB0byBhbGxvdyBkaWZmZXJlbnQgb3B0aW9ucywgYWRkcmVzcyByYW5nZXMgZXRjCisJIGZvciBCT09UUCBjbGllbnRzICovCisgICAgICBib290cF9pZC5uZXQgPSAiYm9vdHAiOworICAgICAgYm9vdHBfaWQubmV4dCA9IG5ldGlkOworICAgICAgbmV0aWQgPSAmYm9vdHBfaWQ7CisgICAgICAKKyAgICAgIHRhZ2lmX25ldGlkID0gcnVuX3RhZ19pZihuZXRpZCk7CisKKyAgICAgIGZvciAoaWRfbGlzdCA9IGRhZW1vbi0+ZGhjcF9pZ25vcmU7IGlkX2xpc3Q7IGlkX2xpc3QgPSBpZF9saXN0LT5uZXh0KQorCWlmIChtYXRjaF9uZXRpZChpZF9saXN0LT5saXN0LCB0YWdpZl9uZXRpZCwgMCkpCisJICBtZXNzYWdlID0gXygiaWdub3JlZCIpOworICAgICAgCisgICAgICBpZiAoIW1lc3NhZ2UpCisJeworCSAgaW50IG5haWxlZCA9IDA7CisKKwkgIGlmIChoYXZlX2NvbmZpZyhjb25maWcsIENPTkZJR19BRERSKSkKKwkgICAgeworCSAgICAgIG5haWxlZCA9IDE7CisJICAgICAgbG9nYWRkciA9ICZjb25maWctPmFkZHI7CisJICAgICAgbWVzcy0+eWlhZGRyID0gY29uZmlnLT5hZGRyOworCSAgICAgIGlmICgobGVhc2UgPSBsZWFzZV9maW5kX2J5X2FkZHIoY29uZmlnLT5hZGRyKSkgJiYKKwkJICAobGVhc2UtPmh3YWRkcl9sZW4gIT0gbWVzcy0+aGxlbiB8fAorCQkgICBsZWFzZS0+aHdhZGRyX3R5cGUgIT0gbWVzcy0+aHR5cGUgfHwKKwkJICAgbWVtY21wKGxlYXNlLT5od2FkZHIsIG1lc3MtPmNoYWRkciwgbGVhc2UtPmh3YWRkcl9sZW4pICE9IDApKQorCQltZXNzYWdlID0gXygiYWRkcmVzcyBpbiB1c2UiKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgaWYgKCEobGVhc2UgPSBsZWFzZV9maW5kX2J5X2NsaWVudChtZXNzLT5jaGFkZHIsIG1lc3MtPmhsZW4sIG1lc3MtPmh0eXBlLCBOVUxMLCAwKSkgfHwKKwkJICAhYWRkcmVzc19hdmFpbGFibGUoY29udGV4dCwgbGVhc2UtPmFkZHIsIHRhZ2lmX25ldGlkKSkKKwkJeworCQkgICBpZiAobGVhc2UpCisJCSAgICAgeworCQkgICAgICAgLyogbGVhc2UgZXhpc3RzLCB3cm9uZyBuZXR3b3JrLiAqLworCQkgICAgICAgbGVhc2VfcHJ1bmUobGVhc2UsIG5vdyk7CisJCSAgICAgICBsZWFzZSA9IE5VTEw7CisJCSAgICAgfQorCQkgICBpZiAoIWFkZHJlc3NfYWxsb2NhdGUoY29udGV4dCwgJm1lc3MtPnlpYWRkciwgbWVzcy0+Y2hhZGRyLCBtZXNzLT5obGVuLCB0YWdpZl9uZXRpZCwgbm93KSkKKwkJICAgICBtZXNzYWdlID0gXygibm8gYWRkcmVzcyBhdmFpbGFibGUiKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJbWVzcy0+eWlhZGRyID0gbGVhc2UtPmFkZHI7CisJICAgIH0KKwkgIAorCSAgaWYgKCFtZXNzYWdlICYmICEoY29udGV4dCA9IG5hcnJvd19jb250ZXh0KGNvbnRleHQsIG1lc3MtPnlpYWRkciwgbmV0aWQpKSkKKwkgICAgbWVzc2FnZSA9IF8oIndyb25nIG5ldHdvcmsiKTsKKwkgIGVsc2UgaWYgKGNvbnRleHQtPm5ldGlkLm5ldCkKKwkgICAgeworCSAgICAgIGNvbnRleHQtPm5ldGlkLm5leHQgPSBuZXRpZDsKKwkgICAgICB0YWdpZl9uZXRpZCA9IHJ1bl90YWdfaWYoJmNvbnRleHQtPm5ldGlkKTsKKwkgICAgfQorCisJICBsb2dfdGFncyh0YWdpZl9uZXRpZCwgbnRvaGwobWVzcy0+eGlkKSk7CisJICAgIAorCSAgaWYgKCFtZXNzYWdlICYmICFuYWlsZWQpCisJICAgIHsKKwkgICAgICBmb3IgKGlkX2xpc3QgPSBkYWVtb24tPmJvb3RwX2R5bmFtaWM7IGlkX2xpc3Q7IGlkX2xpc3QgPSBpZF9saXN0LT5uZXh0KQorCQlpZiAoKCFpZF9saXN0LT5saXN0KSB8fCBtYXRjaF9uZXRpZChpZF9saXN0LT5saXN0LCB0YWdpZl9uZXRpZCwgMCkpCisJCSAgYnJlYWs7CisJICAgICAgaWYgKCFpZF9saXN0KQorCQltZXNzYWdlID0gXygibm8gYWRkcmVzcyBjb25maWd1cmVkIik7CisJICAgIH0KKworCSAgaWYgKCFtZXNzYWdlICYmIAorCSAgICAgICFsZWFzZSAmJiAKKwkgICAgICAoIShsZWFzZSA9IGxlYXNlNF9hbGxvY2F0ZShtZXNzLT55aWFkZHIpKSkpCisJICAgIG1lc3NhZ2UgPSBfKCJubyBsZWFzZXMgbGVmdCIpOworCSAgCisJICBpZiAoIW1lc3NhZ2UpCisJICAgIHsKKwkgICAgICBsb2dhZGRyID0gJm1lc3MtPnlpYWRkcjsKKwkJCisJICAgICAgbGVhc2Vfc2V0X2h3YWRkcihsZWFzZSwgbWVzcy0+Y2hhZGRyLCBOVUxMLCBtZXNzLT5obGVuLCBtZXNzLT5odHlwZSwgMCwgbm93LCAxKTsKKwkgICAgICBpZiAoaG9zdG5hbWUpCisJCWxlYXNlX3NldF9ob3N0bmFtZShsZWFzZSwgaG9zdG5hbWUsIDEsIGdldF9kb21haW4obGVhc2UtPmFkZHIpLCBkb21haW4pOyAKKwkgICAgICAvKiBpbmZpbml0ZSBsZWFzZSB1bmxlc3MgbmFpbGVkIGluIGRoY3AtaG9zdCBsaW5lLiAqLworCSAgICAgIGxlYXNlX3NldF9leHBpcmVzKGxlYXNlLCAgCisJCQkJaGF2ZV9jb25maWcoY29uZmlnLCBDT05GSUdfVElNRSkgPyBjb25maWctPmxlYXNlX3RpbWUgOiAweGZmZmZmZmZmLCAKKwkJCQlub3cpOyAKKwkgICAgICBsZWFzZV9zZXRfaW50ZXJmYWNlKGxlYXNlLCBpbnRfaW5kZXgsIG5vdyk7CisJICAgICAgCisJICAgICAgY2xlYXJfcGFja2V0KG1lc3MsIGVuZCk7CisJICAgICAgZG9fb3B0aW9ucyhjb250ZXh0LCBtZXNzLCBlbmQsIE5VTEwsIGhvc3RuYW1lLCBnZXRfZG9tYWluKG1lc3MtPnlpYWRkciksIAorCQkJIG5ldGlkLCBzdWJuZXRfYWRkciwgMCwgMCwgLTEsIE5VTEwsIHZlbmRvcl9jbGFzc19sZW4sIG5vdyk7CisJICAgIH0KKwl9CisgICAgICAKKyAgICAgIGxvZ19wYWNrZXQoIkJPT1RQIiwgbG9nYWRkciwgbWVzcy0+Y2hhZGRyLCBtZXNzLT5obGVuLCBpZmFjZV9uYW1lLCBOVUxMLCBtZXNzYWdlLCBtZXNzLT54aWQpOworICAgICAgCisgICAgICByZXR1cm4gbWVzc2FnZSA/IDAgOiBkaGNwX3BhY2tldF9zaXplKG1lc3MsIGFnZW50X2lkLCByZWFsX2VuZCk7CisgICAgfQorICAgICAgCisgIGlmICgob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9DTElFTlRfRlFETiwgMykpKQorICAgIHsKKyAgICAgIC8qIGh0dHA6Ly90b29scy5pZXRmLm9yZy93Zy9kaGMvZHJhZnQtaWV0Zi1kaGMtZnFkbi1vcHRpb24vZHJhZnQtaWV0Zi1kaGMtZnFkbi1vcHRpb24tMTAudHh0ICovCisgICAgICBpbnQgbGVuID0gb3B0aW9uX2xlbihvcHQpOworICAgICAgY2hhciAqcHEgPSBkYWVtb24tPmRoY3BfYnVmZjsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKnBwLCAqb3AgPSBvcHRpb25fcHRyKG9wdCwgMCk7CisgICAgICAKKyAgICAgIGZxZG5fZmxhZ3MgPSAqb3A7CisgICAgICBsZW4gLT0gMzsKKyAgICAgIG9wICs9IDM7CisgICAgICBwcCA9IG9wOworICAgICAgCisgICAgICAvKiBOQiwgdGhlIGZvbGxvd2luZyBhbHdheXMgc2V0cyBhdCBsZWFzdCBvbmUgYml0ICovCisgICAgICBpZiAob3B0aW9uX2Jvb2woT1BUX0ZRRE5fVVBEQVRFKSkKKwl7CisJICBpZiAoZnFkbl9mbGFncyAmIDB4MDEpCisJICAgIHsKKwkgICAgICBmcWRuX2ZsYWdzIHw9IDB4MDI7IC8qIHNldCBPICovCisJICAgICAgZnFkbl9mbGFncyAmPSB+MHgwMTsgLyogY2xlYXIgUyAqLworCSAgICB9CisJICBmcWRuX2ZsYWdzIHw9IDB4MDg7IC8qIHNldCBOICovCisJfQorICAgICAgZWxzZSAKKwl7CisJICBpZiAoIShmcWRuX2ZsYWdzICYgMHgwMSkpCisJICAgIGZxZG5fZmxhZ3MgfD0gMHgwMzsgLyogc2V0IFMgYW5kIE8gKi8KKwkgIGZxZG5fZmxhZ3MgJj0gfjB4MDg7IC8qIGNsZWFyIE4gKi8KKwl9CisgICAgICAKKyAgICAgIGlmIChmcWRuX2ZsYWdzICYgMHgwNCkKKwl3aGlsZSAoKm9wICE9IDAgJiYgKChvcCArICgqb3ApKSAtIHBwKSA8IGxlbikKKwkgIHsKKwkgICAgbWVtY3B5KHBxLCBvcCsxLCAqb3ApOworCSAgICBwcSArPSAqb3A7CisJICAgIG9wICs9ICgqb3ApKzE7CisJICAgICoocHErKykgPSAnLic7CisJICB9CisgICAgICBlbHNlCisJeworCSAgbWVtY3B5KHBxLCBvcCwgbGVuKTsKKwkgIGlmIChsZW4gPiAwICYmIG9wW2xlbi0xXSA9PSAwKQorCSAgICBib3JrZW5fb3B0ID0gMTsKKwkgIHBxICs9IGxlbiArIDE7CisJfQorICAgICAgCisgICAgICBpZiAocHEgIT0gZGFlbW9uLT5kaGNwX2J1ZmYpCisJcHEtLTsKKyAgICAgIAorICAgICAgKnBxID0gMDsKKyAgICAgIAorICAgICAgaWYgKGxlZ2FsX2hvc3RuYW1lKGRhZW1vbi0+ZGhjcF9idWZmKSkKKwlvZmZlcl9ob3N0bmFtZSA9IGNsaWVudF9ob3N0bmFtZSA9IGRhZW1vbi0+ZGhjcF9idWZmOworICAgIH0KKyAgZWxzZSBpZiAoKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fSE9TVE5BTUUsIDEpKSkKKyAgICB7CisgICAgICBpbnQgbGVuID0gb3B0aW9uX2xlbihvcHQpOworICAgICAgbWVtY3B5KGRhZW1vbi0+ZGhjcF9idWZmLCBvcHRpb25fcHRyKG9wdCwgMCksIGxlbik7CisgICAgICAvKiBNaWNyb3NvZnQgY2xpZW50cyBhcmUgYnJva2VuLCBhbmQgbmVlZCB6ZXJvLXRlcm1pbmF0ZWQgc3RyaW5ncworCSBpbiBvcHRpb25zLiBXZSBkZXRlY3QgdGhpcyBzdGF0ZSBoZXJlLCBhbmQgZG8gdGhlIHNhbWUgaW4KKwkgYW55IG9wdGlvbnMgd2Ugc2VuZCAqLworICAgICAgaWYgKGxlbiA+IDAgJiYgZGFlbW9uLT5kaGNwX2J1ZmZbbGVuLTFdID09IDApCisJYm9ya2VuX29wdCA9IDE7CisgICAgICBlbHNlCisJZGFlbW9uLT5kaGNwX2J1ZmZbbGVuXSA9IDA7CisgICAgICBpZiAobGVnYWxfaG9zdG5hbWUoZGFlbW9uLT5kaGNwX2J1ZmYpKQorCWNsaWVudF9ob3N0bmFtZSA9IGRhZW1vbi0+ZGhjcF9idWZmOworICAgIH0KKworICBpZiAoY2xpZW50X2hvc3RuYW1lICYmIG9wdGlvbl9ib29sKE9QVF9MT0dfT1BUUykpCisgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgXygiJXUgY2xpZW50IHByb3ZpZGVzIG5hbWU6ICVzIiksIG50b2hsKG1lc3MtPnhpZCksIGNsaWVudF9ob3N0bmFtZSk7CisgIAorICBpZiAoaGF2ZV9jb25maWcoY29uZmlnLCBDT05GSUdfTkFNRSkpCisgICAgeworICAgICAgaG9zdG5hbWUgPSBjb25maWctPmhvc3RuYW1lOworICAgICAgZG9tYWluID0gY29uZmlnLT5kb21haW47CisgICAgICBob3N0bmFtZV9hdXRoID0gMTsKKyAgICAgIC8qIGJlIGNhcmVmdWwgbm90IHRvIHNlbmQgYW4gT0ZGRVIgd2l0aCBhIGhvc3RuYW1lIG5vdCBtYXRjaGluZyB0aGUgRElTQ09WRVIuICovCisgICAgICBpZiAoZnFkbl9mbGFncyAhPSAwIHx8ICFjbGllbnRfaG9zdG5hbWUgfHwgaG9zdG5hbWVfaXNlcXVhbChob3N0bmFtZSwgY2xpZW50X2hvc3RuYW1lKSkKKyAgICAgICAgb2ZmZXJfaG9zdG5hbWUgPSBob3N0bmFtZTsKKyAgICB9CisgIGVsc2UgaWYgKGNsaWVudF9ob3N0bmFtZSkKKyAgICB7CisgICAgICBkb21haW4gPSBzdHJpcF9ob3N0bmFtZShjbGllbnRfaG9zdG5hbWUpOworICAgICAgCisgICAgICBpZiAoc3RybGVuKGNsaWVudF9ob3N0bmFtZSkgIT0gMCkKKwl7CisJICBob3N0bmFtZSA9IGNsaWVudF9ob3N0bmFtZTsKKwkgIGlmICghY29uZmlnKQorCSAgICB7CisJICAgICAgLyogU2VhcmNoIGFnYWluIG5vdyB3ZSBoYXZlIGEgaG9zdG5hbWUuIAorCQkgT25seSBhY2NlcHQgY29uZmlncyB3aXRob3V0IENMSUQgYW5kIEhXQUREUiBoZXJlLCAodGhleSB3b24ndCBtYXRjaCkKKwkJIHRvIGF2b2lkIGltcGVyc29uYXRpb24gYnkgbmFtZS4gKi8KKwkgICAgICBzdHJ1Y3QgZGhjcF9jb25maWcgKm5ldyA9IGZpbmRfY29uZmlnKGRhZW1vbi0+ZGhjcF9jb25mLCBjb250ZXh0LCBOVUxMLCAwLAorCQkJCQkJICAgIG1lc3MtPmNoYWRkciwgbWVzcy0+aGxlbiwgCisJCQkJCQkgICAgbWVzcy0+aHR5cGUsIGhvc3RuYW1lKTsKKwkgICAgICBpZiAobmV3ICYmICFoYXZlX2NvbmZpZyhuZXcsIENPTkZJR19DTElEKSAmJiAhbmV3LT5od2FkZHIpCisJCXsKKwkJICBjb25maWcgPSBuZXc7CisJCSAgLyogc2V0ICJrbm93biIgdGFnIGZvciBrbm93biBob3N0cyAqLworCQkgIGtub3duX2lkLm5ldCA9ICJrbm93biI7CisJCSAga25vd25faWQubmV4dCA9IG5ldGlkOworCQkgIG5ldGlkID0gJmtub3duX2lkOworCQl9CisJICAgIH0KKwl9CisgICAgfQorICAKKyAgaWYgKGNvbmZpZykKKyAgICB7CisgICAgICBzdHJ1Y3QgZGhjcF9uZXRpZF9saXN0ICpsaXN0OworICAgICAgCisgICAgICBmb3IgKGxpc3QgPSBjb25maWctPm5ldGlkOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkKKwl7CisJICBsaXN0LT5saXN0LT5uZXh0ID0gbmV0aWQ7CisJICBuZXRpZCA9IGxpc3QtPmxpc3Q7CisJfQorICAgIH0KKyAgCisgIHRhZ2lmX25ldGlkID0gcnVuX3RhZ19pZihuZXRpZCk7CisgIAorICAvKiBpZiBhbGwgdGhlIG5ldGlkcyBpbiB0aGUgaWdub3JlIGxpc3QgYXJlIHByZXNlbnQsIGlnbm9yZSB0aGlzIGNsaWVudCAqLworICBmb3IgKGlkX2xpc3QgPSBkYWVtb24tPmRoY3BfaWdub3JlOyBpZF9saXN0OyBpZF9saXN0ID0gaWRfbGlzdC0+bmV4dCkKKyAgICBpZiAobWF0Y2hfbmV0aWQoaWRfbGlzdC0+bGlzdCwgdGFnaWZfbmV0aWQsIDApKQorICAgICAgaWdub3JlID0gMTsKKworICAvKiBJZiBjb25maWd1cmVkLCB3ZSBjYW4gb3ZlcnJpZGUgdGhlIHNlcnZlci1pZCB0byBiZSB0aGUgYWRkcmVzcyBvZiB0aGUgcmVsYXksIAorICAgICBzbyB0aGF0IGFsbCB0cmFmZmljIGdvZXMgdmlhIHRoZSByZWxheSBhbmQgY2FuIHBpY2sgdXAgYWdlbnQtaWQgaW5mby4gVGhpcyBjYW4gYmUKKyAgICAgY29uZmlndXJlZCBmb3IgYWxsIHJlbGF5cywgb3IgYnkgYWRkcmVzcy4gKi8KKyAgaWYgKGRhZW1vbi0+b3ZlcnJpZGUgJiYgbWVzcy0+Z2lhZGRyLnNfYWRkciAhPSAwICYmIG92ZXJyaWRlLnNfYWRkciA9PSAwKQorICAgIHsKKyAgICAgIGlmICghZGFlbW9uLT5vdmVycmlkZV9yZWxheXMpCisJb3ZlcnJpZGUgPSBtZXNzLT5naWFkZHI7CisgICAgICBlbHNlCisJeworCSAgc3RydWN0IGFkZHJfbGlzdCAqbDsKKwkgIGZvciAobCA9IGRhZW1vbi0+b3ZlcnJpZGVfcmVsYXlzOyBsOyBsID0gbC0+bmV4dCkKKwkgICAgaWYgKGwtPmFkZHIuc19hZGRyID09IG1lc3MtPmdpYWRkci5zX2FkZHIpCisJICAgICAgYnJlYWs7CisJICBpZiAobCkKKwkgICAgb3ZlcnJpZGUgPSBtZXNzLT5naWFkZHI7CisJfQorICAgIH0KKworICAvKiBDYW4gaGF2ZSBzZXR0aW5nIHRvIGlnbm9yZSB0aGUgY2xpZW50IElEIGZvciBhIHBhcnRpY3VsYXIgTUFDIGFkZHJlc3Mgb3IgaG9zdG5hbWUgKi8KKyAgaWYgKGhhdmVfY29uZmlnKGNvbmZpZywgQ09ORklHX05PQ0xJRCkpCisgICAgY2xpZCA9IE5VTEw7CisgICAgICAgICAgCisgIC8qIENoZWNrIGlmIGNsaWVudCBpcyBQWEUgY2xpZW50LiAqLworICBpZiAoZGFlbW9uLT5lbmFibGVfcHhlICYmIAorICAgICAgKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fVkVORE9SX0lELCA5KSkgJiYgCisgICAgICBzdHJuY21wKG9wdGlvbl9wdHIob3B0LCAwKSwgIlBYRUNsaWVudCIsIDkpID09IDApCisgICAgeworICAgICAgaWYgKChvcHQgPSBvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX1BYRV9VVUlELCAxNykpKQorCXsKKwkgIG1lbWNweShweGVfdXVpZCwgb3B0aW9uX3B0cihvcHQsIDApLCAxNyk7CisJICB1dWlkID0gcHhlX3V1aWQ7CisJfQorCisgICAgICAvKiBDaGVjayBpZiB0aGlzIGlzIHJlYWxseSBhIFBYRSBib290c2VydmVyIHJlcXVlc3QsIGFuZCBoYW5kbGUgc3BlY2lhbGx5IGlmIHNvLiAqLworICAgICAgaWYgKChtZXNzX3R5cGUgPT0gREhDUFJFUVVFU1QgfHwgbWVzc190eXBlID09IERIQ1BJTkZPUk0pICYmCisJICAob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9WRU5ET1JfQ0xBU1NfT1BULCAxKSkgJiYKKwkgIChvcHQgPSBvcHRpb25fZmluZDEob3B0aW9uX3B0cihvcHQsIDApLCBvcHRpb25fcHRyKG9wdCwgb3B0aW9uX2xlbihvcHQpKSwgU1VCT1BUX1BYRV9CT09UX0lURU0sIDQpKSkKKwl7CisJICBzdHJ1Y3QgcHhlX3NlcnZpY2UgKnNlcnZpY2U7CisJICBpbnQgdHlwZSA9IG9wdGlvbl91aW50KG9wdCwgMCwgMik7CisJICBpbnQgbGF5ZXIgPSBvcHRpb25fdWludChvcHQsIDIsIDIpOworCSAgdW5zaWduZWQgY2hhciBzYXZlNzFbNF07CisJICBzdHJ1Y3QgZGhjcF9vcHQgb3B0NzE7CisKKwkgIGlmIChpZ25vcmUpCisJICAgIHJldHVybiAwOworCisJICBpZiAobGF5ZXIgJiAweDgwMDApCisJICAgIHsKKwkgICAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19FUlIsIF8oIlBYRSBCSVMgbm90IHN1cHBvcnRlZCIpKTsKKwkgICAgICByZXR1cm4gMDsKKwkgICAgfQorCisJICBtZW1jcHkoc2F2ZTcxLCBvcHRpb25fcHRyKG9wdCwgMCksIDQpOworCSAgCisJICBmb3IgKHNlcnZpY2UgPSBkYWVtb24tPnB4ZV9zZXJ2aWNlczsgc2VydmljZTsgc2VydmljZSA9IHNlcnZpY2UtPm5leHQpCisJICAgIGlmIChzZXJ2aWNlLT50eXBlID09IHR5cGUpCisJICAgICAgYnJlYWs7CisJICAKKwkgIGlmICghc2VydmljZSB8fCAhc2VydmljZS0+YmFzZW5hbWUpCisJICAgIHJldHVybiAwOworCSAgCisJICBjbGVhcl9wYWNrZXQobWVzcywgZW5kKTsKKwkgIAorCSAgbWVzcy0+eWlhZGRyID0gbWVzcy0+Y2lhZGRyOworCSAgbWVzcy0+Y2lhZGRyLnNfYWRkciA9IDA7CisJICBpZiAoc2VydmljZS0+c25hbWUpCisJICAgIG1lc3MtPnNpYWRkciA9IGFfcmVjb3JkX2Zyb21faG9zdHMoc2VydmljZS0+c25hbWUsIG5vdyk7CisJICBlbHNlIGlmIChzZXJ2aWNlLT5zZXJ2ZXIuc19hZGRyICE9IDApCisJICAgIG1lc3MtPnNpYWRkciA9IHNlcnZpY2UtPnNlcnZlcjsgCisJICBlbHNlCisJICAgIG1lc3MtPnNpYWRkciA9IGNvbnRleHQtPmxvY2FsOyAKKwkgIAorCSAgc25wcmludGYoKGNoYXIgKiltZXNzLT5maWxlLCBzaXplb2YobWVzcy0+ZmlsZSksICIlcy4lZCIsIHNlcnZpY2UtPmJhc2VuYW1lLCBsYXllcik7CisJICBvcHRpb25fcHV0KG1lc3MsIGVuZCwgT1BUSU9OX01FU1NBR0VfVFlQRSwgMSwgREhDUEFDSyk7CisJICBvcHRpb25fcHV0KG1lc3MsIGVuZCwgT1BUSU9OX1NFUlZFUl9JREVOVElGSUVSLCBJTkFERFJTWiwgaHRvbmwoY29udGV4dC0+bG9jYWwuc19hZGRyKSk7CisJICBweGVfbWlzYyhtZXNzLCBlbmQsIHV1aWQpOworCSAgCisJICBwcnVuZV92ZW5kb3Jfb3B0cyh0YWdpZl9uZXRpZCk7CisJICBvcHQ3MS52YWwgPSBzYXZlNzE7CisJICBvcHQ3MS5vcHQgPSBTVUJPUFRfUFhFX0JPT1RfSVRFTTsKKwkgIG9wdDcxLmxlbiA9IDQ7CisJICBvcHQ3MS5mbGFncyA9IERIT1BUX1ZFTkRPUl9NQVRDSDsKKwkgIG9wdDcxLm5ldGlkID0gTlVMTDsKKwkgIG9wdDcxLm5leHQgPSBkYWVtb24tPmRoY3Bfb3B0czsKKwkgIGRvX2VuY2FwX29wdHMoJm9wdDcxLCBPUFRJT05fVkVORE9SX0NMQVNTX09QVCwgREhPUFRfVkVORE9SX01BVENILCBtZXNzLCBlbmQsIDApOworCSAgCisJICBsb2dfcGFja2V0KCJQWEUiLCAmbWVzcy0+eWlhZGRyLCBlbWFjLCBlbWFjX2xlbiwgaWZhY2VfbmFtZSwgKGNoYXIgKiltZXNzLT5maWxlLCBOVUxMLCBtZXNzLT54aWQpOworCSAgbG9nX3RhZ3ModGFnaWZfbmV0aWQsIG50b2hsKG1lc3MtPnhpZCkpOworCSAgcmV0dXJuIGRoY3BfcGFja2V0X3NpemUobWVzcywgYWdlbnRfaWQsIHJlYWxfZW5kKTsJICAKKwl9CisgICAgICAKKyAgICAgIGlmICgob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9BUkNILCAyKSkpCisJeworCSAgcHhlYXJjaCA9IG9wdGlvbl91aW50KG9wdCwgMCwgMik7CisKKwkgIC8qIHByb3h5IERIQ1AgaGVyZS4gKi8KKwkgIGlmICgobWVzc190eXBlID09IERIQ1BESVNDT1ZFUiB8fCAocHhlICYmIG1lc3NfdHlwZSA9PSBESENQUkVRVUVTVCkpKQorCSAgICB7CisJICAgICAgc3RydWN0IGRoY3BfY29udGV4dCAqdG1wOworCSAgICAgIAorCSAgICAgIGZvciAodG1wID0gY29udGV4dDsgdG1wOyB0bXAgPSB0bXAtPmN1cnJlbnQpCisJCWlmICgodG1wLT5mbGFncyAmIENPTlRFWFRfUFJPWFkpICYmCisJCSAgICBtYXRjaF9uZXRpZCh0bXAtPmZpbHRlciwgdGFnaWZfbmV0aWQsIDEpKQorCQkgIGJyZWFrOworCSAgICAgIAorCSAgICAgIGlmICh0bXApCisJCXsKKwkJICBzdHJ1Y3QgZGhjcF9ib290ICpib290OworCQkgIAorCQkgIGlmICh0bXAtPm5ldGlkLm5ldCkKKwkJICAgIHsKKwkJICAgICAgdG1wLT5uZXRpZC5uZXh0ID0gbmV0aWQ7CisJCSAgICAgIHRhZ2lmX25ldGlkID0gcnVuX3RhZ19pZigmdG1wLT5uZXRpZCk7CisJCSAgICB9CisJCSAgCisJCSAgYm9vdCA9IGZpbmRfYm9vdCh0YWdpZl9uZXRpZCk7CisJCSAgCisJCSAgbWVzcy0+eWlhZGRyLnNfYWRkciA9IDA7CisJCSAgaWYgIChtZXNzX3R5cGUgPT0gREhDUERJU0NPVkVSIHx8IG1lc3MtPmNpYWRkci5zX2FkZHIgPT0gMCkKKwkJICAgIHsKKwkJICAgICAgbWVzcy0+Y2lhZGRyLnNfYWRkciA9IDA7CisJCSAgICAgIG1lc3MtPmZsYWdzIHw9IGh0b25zKDB4ODAwMCk7IC8qIGJyb2FkY2FzdCAqLworCQkgICAgfQorCQkgIAorCQkgIGNsZWFyX3BhY2tldChtZXNzLCBlbmQpOworCQkgIAorCQkgIC8qIFByb3ZpZGUgdGhlIGJvb3RmaWxlIGhlcmUsIGZvciBnUFhFLCBhbmQgaW4gY2FzZSB3ZSBoYXZlIG5vIG1lbnUgaXRlbXMKKwkJICAgICBhbmQgc2V0IGRpc2NvdmVyeV9jb250cm9sID0gOCAqLworCQkgIGlmIChib290KQorCQkgICAgeworCQkgICAgICBpZiAoYm9vdC0+bmV4dF9zZXJ2ZXIuc19hZGRyKSAKKwkJCW1lc3MtPnNpYWRkciA9IGJvb3QtPm5leHRfc2VydmVyOworCQkgICAgICBlbHNlIGlmIChib290LT50ZnRwX3NuYW1lKSAKKwkJCW1lc3MtPnNpYWRkciA9IGFfcmVjb3JkX2Zyb21faG9zdHMoYm9vdC0+dGZ0cF9zbmFtZSwgbm93KTsKKwkJICAgICAgCisJCSAgICAgIGlmIChib290LT5maWxlKQorCQkJc3RybmNweSgoY2hhciAqKW1lc3MtPmZpbGUsIGJvb3QtPmZpbGUsIHNpemVvZihtZXNzLT5maWxlKS0xKTsKKwkJICAgIH0KKwkJICAKKwkJICBvcHRpb25fcHV0KG1lc3MsIGVuZCwgT1BUSU9OX01FU1NBR0VfVFlQRSwgMSwgCisJCQkgICAgIG1lc3NfdHlwZSA9PSBESENQRElTQ09WRVIgPyBESENQT0ZGRVIgOiBESENQQUNLKTsKKwkJICBvcHRpb25fcHV0KG1lc3MsIGVuZCwgT1BUSU9OX1NFUlZFUl9JREVOVElGSUVSLCBJTkFERFJTWiwgaHRvbmwoY29udGV4dC0+bG9jYWwuc19hZGRyKSk7CisJCSAgcHhlX21pc2MobWVzcywgZW5kLCB1dWlkKTsKKwkJICBwcnVuZV92ZW5kb3Jfb3B0cyh0YWdpZl9uZXRpZCk7CisJCSAgZG9fZW5jYXBfb3B0cyhweGVfb3B0cyhweGVhcmNoLCB0YWdpZl9uZXRpZCwgY29udGV4dC0+bG9jYWwsIG5vdyksIE9QVElPTl9WRU5ET1JfQ0xBU1NfT1BULCBESE9QVF9WRU5ET1JfTUFUQ0gsIG1lc3MsIGVuZCwgMCk7CisJCSAgCisJCSAgbG9nX3BhY2tldCgiUFhFIiwgTlVMTCwgZW1hYywgZW1hY19sZW4sIGlmYWNlX25hbWUsIGlnbm9yZSA/ICJwcm94eS1pZ25vcmVkIiA6ICJwcm94eSIsIE5VTEwsIG1lc3MtPnhpZCk7CisJCSAgbG9nX3RhZ3ModGFnaWZfbmV0aWQsIG50b2hsKG1lc3MtPnhpZCkpOworCQkgIHJldHVybiBpZ25vcmUgPyAwIDogZGhjcF9wYWNrZXRfc2l6ZShtZXNzLCBhZ2VudF9pZCwgcmVhbF9lbmQpOwkgIAorCQl9CisJICAgIH0KKwl9CisgICAgfQorCisgIC8qIGlmIHdlJ3JlIGp1c3QgYSBwcm94eSBzZXJ2ZXIsIGdvIG5vIGZ1cnRoZXIgKi8KKyAgaWYgKChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfUFJPWFkpIHx8IHB4ZSkKKyAgICByZXR1cm4gMDsKKyAgCisgIGlmICgob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9SRVFVRVNURURfT1BUSU9OUywgMCkpKQorICAgIHsKKyAgICAgIHJlcV9vcHRpb25zID0gKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPmRoY3BfYnVmZjI7CisgICAgICBtZW1jcHkocmVxX29wdGlvbnMsIG9wdGlvbl9wdHIob3B0LCAwKSwgb3B0aW9uX2xlbihvcHQpKTsKKyAgICAgIHJlcV9vcHRpb25zW29wdGlvbl9sZW4ob3B0KV0gPSBPUFRJT05fRU5EOworICAgIH0KKyAgCisgIHN3aXRjaCAobWVzc190eXBlKQorICAgIHsKKyAgICBjYXNlIERIQ1BERUNMSU5FOgorICAgICAgaWYgKCEob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9TRVJWRVJfSURFTlRJRklFUiwgSU5BRERSU1opKSB8fAorCSAgb3B0aW9uX2FkZHIob3B0KS5zX2FkZHIgIT0gc2VydmVyX2lkKGNvbnRleHQsIG92ZXJyaWRlLCBmYWxsYmFjaykuc19hZGRyKQorCXJldHVybiAwOworICAgICAgCisgICAgICAvKiBzYW5pdGlzZSBhbnkgbWVzc2FnZS4gUGFyYW5vaWQ/IE1vaT8gKi8KKyAgICAgIHNhbml0aXNlKG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fTUVTU0FHRSwgMSksIGRhZW1vbi0+ZGhjcF9idWZmKTsKKyAgICAgIAorICAgICAgaWYgKCEob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9SRVFVRVNURURfSVAsIElOQUREUlNaKSkpCisJcmV0dXJuIDA7CisgICAgICAKKyAgICAgIGxvZ19wYWNrZXQoIkRIQ1BERUNMSU5FIiwgb3B0aW9uX3B0cihvcHQsIDApLCBlbWFjLCBlbWFjX2xlbiwgaWZhY2VfbmFtZSwgTlVMTCwgZGFlbW9uLT5kaGNwX2J1ZmYsIG1lc3MtPnhpZCk7CisgICAgICAKKyAgICAgIGlmIChsZWFzZSAmJiBsZWFzZS0+YWRkci5zX2FkZHIgPT0gb3B0aW9uX2FkZHIob3B0KS5zX2FkZHIpCisJbGVhc2VfcHJ1bmUobGVhc2UsIG5vdyk7CisgICAgICAKKyAgICAgIGlmIChoYXZlX2NvbmZpZyhjb25maWcsIENPTkZJR19BRERSKSAmJiAKKwkgIGNvbmZpZy0+YWRkci5zX2FkZHIgPT0gb3B0aW9uX2FkZHIob3B0KS5zX2FkZHIpCisJeworCSAgcHJldHR5cHJpbnRfdGltZShkYWVtb24tPmRoY3BfYnVmZiwgREVDTElORV9CQUNLT0ZGKTsKKwkgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX1dBUk5JTkcsIF8oImRpc2FibGluZyBESENQIHN0YXRpYyBhZGRyZXNzICVzIGZvciAlcyIpLCAKKwkJICAgIGluZXRfbnRvYShjb25maWctPmFkZHIpLCBkYWVtb24tPmRoY3BfYnVmZik7CisJICBjb25maWctPmZsYWdzIHw9IENPTkZJR19ERUNMSU5FRDsKKwkgIGNvbmZpZy0+ZGVjbGluZV90aW1lID0gbm93OworCX0KKyAgICAgIGVsc2UKKwkvKiBtYWtlIHN1cmUgdGhpcyBob3N0IGdldHMgYSBkaWZmZXJlbnQgYWRkcmVzcyBuZXh0IHRpbWUuICovCisJZm9yICg7IGNvbnRleHQ7IGNvbnRleHQgPSBjb250ZXh0LT5jdXJyZW50KQorCSAgY29udGV4dC0+YWRkcl9lcG9jaCsrOworICAgICAgCisgICAgICByZXR1cm4gMDsKKworICAgIGNhc2UgREhDUFJFTEVBU0U6CisgICAgICBpZiAoIShjb250ZXh0ID0gbmFycm93X2NvbnRleHQoY29udGV4dCwgbWVzcy0+Y2lhZGRyLCB0YWdpZl9uZXRpZCkpIHx8CisJICAhKG9wdCA9IG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fU0VSVkVSX0lERU5USUZJRVIsIElOQUREUlNaKSkgfHwKKwkgIG9wdGlvbl9hZGRyKG9wdCkuc19hZGRyICE9IHNlcnZlcl9pZChjb250ZXh0LCBvdmVycmlkZSwgZmFsbGJhY2spLnNfYWRkcikKKwlyZXR1cm4gMDsKKyAgICAgIAorICAgICAgaWYgKGxlYXNlICYmIGxlYXNlLT5hZGRyLnNfYWRkciA9PSBtZXNzLT5jaWFkZHIuc19hZGRyKQorCWxlYXNlX3BydW5lKGxlYXNlLCBub3cpOworICAgICAgZWxzZQorCW1lc3NhZ2UgPSBfKCJ1bmtub3duIGxlYXNlIik7CisKKyAgICAgIGxvZ19wYWNrZXQoIkRIQ1BSRUxFQVNFIiwgJm1lc3MtPmNpYWRkciwgZW1hYywgZW1hY19sZW4sIGlmYWNlX25hbWUsIE5VTEwsIG1lc3NhZ2UsIG1lc3MtPnhpZCk7CisJCisgICAgICByZXR1cm4gMDsKKyAgICAgIAorICAgIGNhc2UgREhDUERJU0NPVkVSOgorICAgICAgaWYgKGlnbm9yZSB8fCBoYXZlX2NvbmZpZyhjb25maWcsIENPTkZJR19ESVNBQkxFKSkKKwl7CisJICBpZiAob3B0aW9uX2Jvb2woT1BUX1FVSUVUX0RIQ1ApKQorCSAgICByZXR1cm4gMDsKKwkgIG1lc3NhZ2UgPSBfKCJpZ25vcmVkIik7CisJICBvcHQgPSBOVUxMOworCX0KKyAgICAgIGVsc2UgCisJeworCSAgc3RydWN0IGluX2FkZHIgYWRkciwgY29uZjsKKwkgIAorCSAgYWRkci5zX2FkZHIgPSBjb25mLnNfYWRkciA9IDA7CisKKwkgIGlmICgob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9SRVFVRVNURURfSVAsIElOQUREUlNaKSkpCSAKKwkgICAgYWRkciA9IG9wdGlvbl9hZGRyKG9wdCk7CisJICAKKwkgIGlmIChoYXZlX2NvbmZpZyhjb25maWcsIENPTkZJR19BRERSKSkKKwkgICAgeworCSAgICAgIGNoYXIgKmFkZHJzID0gaW5ldF9udG9hKGNvbmZpZy0+YWRkcik7CisJICAgICAgCisJICAgICAgaWYgKChsdG1wID0gbGVhc2VfZmluZF9ieV9hZGRyKGNvbmZpZy0+YWRkcikpICYmIAorCQkgIGx0bXAgIT0gbGVhc2UgJiYKKwkJICAhY29uZmlnX2hhc19tYWMoY29uZmlnLCBsdG1wLT5od2FkZHIsIGx0bXAtPmh3YWRkcl9sZW4sIGx0bXAtPmh3YWRkcl90eXBlKSkKKwkJeworCQkgIGludCBsZW47CisJCSAgdW5zaWduZWQgY2hhciAqbWFjID0gZXh0ZW5kZWRfaHdhZGRyKGx0bXAtPmh3YWRkcl90eXBlLCBsdG1wLT5od2FkZHJfbGVuLAorCQkJCQkJICAgICAgIGx0bXAtPmh3YWRkciwgbHRtcC0+Y2xpZF9sZW4sIGx0bXAtPmNsaWQsICZsZW4pOworCQkgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX1dBUk5JTkcsIF8oIm5vdCB1c2luZyBjb25maWd1cmVkIGFkZHJlc3MgJXMgYmVjYXVzZSBpdCBpcyBsZWFzZWQgdG8gJXMiKSwKKwkJCSAgICBhZGRycywgcHJpbnRfbWFjKGRhZW1vbi0+bmFtZWJ1ZmYsIG1hYywgbGVuKSk7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICp0bXA7CisJCSAgZm9yICh0bXAgPSBjb250ZXh0OyB0bXA7IHRtcCA9IHRtcC0+Y3VycmVudCkKKwkJICAgIGlmIChjb250ZXh0LT5yb3V0ZXIuc19hZGRyID09IGNvbmZpZy0+YWRkci5zX2FkZHIpCisJCSAgICAgIGJyZWFrOworCQkgIGlmICh0bXApCisJCSAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19XQVJOSU5HLCBfKCJub3QgdXNpbmcgY29uZmlndXJlZCBhZGRyZXNzICVzIGJlY2F1c2UgaXQgaXMgaW4gdXNlIGJ5IHRoZSBzZXJ2ZXIgb3IgcmVsYXkiKSwgYWRkcnMpOworCQkgIGVsc2UgaWYgKGhhdmVfY29uZmlnKGNvbmZpZywgQ09ORklHX0RFQ0xJTkVEKSAmJgorCQkJICAgZGlmZnRpbWUobm93LCBjb25maWctPmRlY2xpbmVfdGltZSkgPCAoZmxvYXQpREVDTElORV9CQUNLT0ZGKQorCQkgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfV0FSTklORywgXygibm90IHVzaW5nIGNvbmZpZ3VyZWQgYWRkcmVzcyAlcyBiZWNhdXNlIGl0IHdhcyBwcmV2aW91c2x5IGRlY2xpbmVkIiksIGFkZHJzKTsKKwkJICBlbHNlCisJCSAgICBjb25mID0gY29uZmlnLT5hZGRyOworCQl9CisJICAgIH0KKwkgIAorCSAgaWYgKGNvbmYuc19hZGRyKQorCSAgICBtZXNzLT55aWFkZHIgPSBjb25mOworCSAgZWxzZSBpZiAobGVhc2UgJiYgCisJCSAgIGFkZHJlc3NfYXZhaWxhYmxlKGNvbnRleHQsIGxlYXNlLT5hZGRyLCB0YWdpZl9uZXRpZCkgJiYgCisJCSAgICFjb25maWdfZmluZF9ieV9hZGRyZXNzKGRhZW1vbi0+ZGhjcF9jb25mLCBsZWFzZS0+YWRkcikpCisJICAgIG1lc3MtPnlpYWRkciA9IGxlYXNlLT5hZGRyOworCSAgZWxzZSBpZiAob3B0ICYmIGFkZHJlc3NfYXZhaWxhYmxlKGNvbnRleHQsIGFkZHIsIHRhZ2lmX25ldGlkKSAmJiAhbGVhc2VfZmluZF9ieV9hZGRyKGFkZHIpICYmIAorCQkgICAhY29uZmlnX2ZpbmRfYnlfYWRkcmVzcyhkYWVtb24tPmRoY3BfY29uZiwgYWRkcikpCisJICAgIG1lc3MtPnlpYWRkciA9IGFkZHI7CisJICBlbHNlIGlmIChlbWFjX2xlbiA9PSAwKQorCSAgICBtZXNzYWdlID0gXygibm8gdW5pcXVlLWlkIik7CisJICBlbHNlIGlmICghYWRkcmVzc19hbGxvY2F0ZShjb250ZXh0LCAmbWVzcy0+eWlhZGRyLCBlbWFjLCBlbWFjX2xlbiwgdGFnaWZfbmV0aWQsIG5vdykpCisJICAgIG1lc3NhZ2UgPSBfKCJubyBhZGRyZXNzIGF2YWlsYWJsZSIpOyAgICAgIAorCX0KKyAgICAgIAorICAgICAgbG9nX3BhY2tldCgiREhDUERJU0NPVkVSIiwgb3B0ID8gb3B0aW9uX3B0cihvcHQsIDApIDogTlVMTCwgZW1hYywgZW1hY19sZW4sIGlmYWNlX25hbWUsIE5VTEwsIG1lc3NhZ2UsIG1lc3MtPnhpZCk7IAorCisgICAgICBpZiAobWVzc2FnZSB8fCAhKGNvbnRleHQgPSBuYXJyb3dfY29udGV4dChjb250ZXh0LCBtZXNzLT55aWFkZHIsIHRhZ2lmX25ldGlkKSkpCisJcmV0dXJuIDA7CisKKyAgICAgIGlmIChjb250ZXh0LT5uZXRpZC5uZXQpCisJeworCSAgY29udGV4dC0+bmV0aWQubmV4dCA9IG5ldGlkOworCSAgdGFnaWZfbmV0aWQgPSBydW5fdGFnX2lmKCZjb250ZXh0LT5uZXRpZCk7CisJfQorCisgICAgICBsb2dfdGFncyh0YWdpZl9uZXRpZCwgbnRvaGwobWVzcy0+eGlkKSk7CisgICAgICAKKyAgICAgIGxvZ19wYWNrZXQoIkRIQ1BPRkZFUiIgLCAmbWVzcy0+eWlhZGRyLCBlbWFjLCBlbWFjX2xlbiwgaWZhY2VfbmFtZSwgTlVMTCwgTlVMTCwgbWVzcy0+eGlkKTsKKyAgICAgIAorICAgICAgdGltZSA9IGNhbGNfdGltZShjb250ZXh0LCBjb25maWcsIG9wdGlvbl9maW5kKG1lc3MsIHN6LCBPUFRJT05fTEVBU0VfVElNRSwgNCkpOworICAgICAgY2xlYXJfcGFja2V0KG1lc3MsIGVuZCk7CisgICAgICBvcHRpb25fcHV0KG1lc3MsIGVuZCwgT1BUSU9OX01FU1NBR0VfVFlQRSwgMSwgREhDUE9GRkVSKTsKKyAgICAgIG9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fU0VSVkVSX0lERU5USUZJRVIsIElOQUREUlNaLCBudG9obChzZXJ2ZXJfaWQoY29udGV4dCwgb3ZlcnJpZGUsIGZhbGxiYWNrKS5zX2FkZHIpKTsKKyAgICAgIG9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fTEVBU0VfVElNRSwgNCwgdGltZSk7CisgICAgICAvKiBUMSBhbmQgVDIgYXJlIHJlcXVpcmVkIGluIERIQ1BPRkZFUiBieSBIUCdzIHdhY2t5IEpldGRpcmVjdCBjbGllbnQuICovCisgICAgICBpZiAodGltZSAhPSAweGZmZmZmZmZmKQorCXsKKwkgIG9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fVDEsIDQsICh0aW1lLzIpKTsKKwkgIG9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fVDIsIDQsICh0aW1lKjcpLzgpOworCX0KKyAgICAgIGRvX29wdGlvbnMoY29udGV4dCwgbWVzcywgZW5kLCByZXFfb3B0aW9ucywgb2ZmZXJfaG9zdG5hbWUsIGdldF9kb21haW4obWVzcy0+eWlhZGRyKSwgCisJCSBuZXRpZCwgc3VibmV0X2FkZHIsIGZxZG5fZmxhZ3MsIGJvcmtlbl9vcHQsIHB4ZWFyY2gsIHV1aWQsIHZlbmRvcl9jbGFzc19sZW4sIG5vdyk7CisgICAgICAKKyAgICAgIHJldHVybiBkaGNwX3BhY2tldF9zaXplKG1lc3MsIGFnZW50X2lkLCByZWFsX2VuZCk7CisgICAgICAKKyAgICBjYXNlIERIQ1BSRVFVRVNUOgorICAgICAgaWYgKGlnbm9yZSB8fCBoYXZlX2NvbmZpZyhjb25maWcsIENPTkZJR19ESVNBQkxFKSkKKwlyZXR1cm4gMDsKKyAgICAgIGlmICgob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9SRVFVRVNURURfSVAsIElOQUREUlNaKSkpCisJeworCSAgLyogU0VMRUNUSU5HICBvciBJTklUX1JFQk9PVCAqLworCSAgbWVzcy0+eWlhZGRyID0gb3B0aW9uX2FkZHIob3B0KTsKKwkgIAorCSAgLyogc2VuZCB2ZW5kb3IgYW5kIHVzZXIgY2xhc3MgaW5mbyBmb3IgbmV3IG9yIHJlY3JlYXRlZCBsZWFzZSAqLworCSAgZG9fY2xhc3NlcyA9IDE7CisJICAKKwkgIGlmICgob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9TRVJWRVJfSURFTlRJRklFUiwgSU5BRERSU1opKSkKKwkgICAgeworCSAgICAgIC8qIFNFTEVDVElORyAqLworCSAgICAgIHNlbGVjdGluZyA9IDE7CisJICAgICAgCisJICAgICAgaWYgKG92ZXJyaWRlLnNfYWRkciAhPSAwKQorCQl7CisJCSAgaWYgKG9wdGlvbl9hZGRyKG9wdCkuc19hZGRyICE9IG92ZXJyaWRlLnNfYWRkcikKKwkJICAgIHJldHVybiAwOworCQl9CisJICAgICAgZWxzZSAKKwkJeworCQkgIGZvciAoOyBjb250ZXh0OyBjb250ZXh0ID0gY29udGV4dC0+Y3VycmVudCkKKwkJICAgIGlmIChjb250ZXh0LT5sb2NhbC5zX2FkZHIgPT0gb3B0aW9uX2FkZHIob3B0KS5zX2FkZHIpCisJCSAgICAgIGJyZWFrOworCQkgIAorCQkgIGlmICghY29udGV4dCkKKwkJICAgIHsKKwkJICAgICAgLyogSGFuZGxlIHZlcnkgc3RyYW5nZSBjb25maWdzIHdoZXJlIGNsaWVudHMgaGF2ZSBtb3JlIHRoYW4gb25lIHJvdXRlIHRvIHRoZSBzZXJ2ZXIuCisJCQkgSWYgYSBjbGllbnRzIGlkZWEgb2YgaXRzIHNlcnZlci1pZCBtYXRjaGVzIGFueSBvZiBvdXIgREhDUCBpbnRlcmZhY2VzLCB3ZSBsZXQgaXQgcGFzcy4KKwkJCSBIYXZlIHRvIHNldCBvdmVycmlkZSB0byBtYWtlIHN1cmUgd2UgZWNobyBiYWNrIHRoZSBjb3JyZWN0IHNlcnZlci1pZCAqLworCQkgICAgICBzdHJ1Y3QgaXJlYyAqaW50cjsKKwkJICAgICAgCisJCSAgICAgIGVudW1lcmF0ZV9pbnRlcmZhY2VzKDApOworCisJCSAgICAgIGZvciAoaW50ciA9IGRhZW1vbi0+aW50ZXJmYWNlczsgaW50cjsgaW50ciA9IGludHItPm5leHQpCisJCQlpZiAoaW50ci0+YWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCAmJgorCQkJICAgIGludHItPmFkZHIuaW4uc2luX2FkZHIuc19hZGRyID09IG9wdGlvbl9hZGRyKG9wdCkuc19hZGRyICYmCisJCQkgICAgaW50ci0+dGZ0cF9vaykKKwkJCSAgYnJlYWs7CisKKwkJICAgICAgaWYgKGludHIpCisJCQlvdmVycmlkZSA9IGludHItPmFkZHIuaW4uc2luX2FkZHI7CisJCSAgICAgIGVsc2UKKwkJCXsKKwkJCSAgLyogSW4gYXV0aCBtb2RlLCBhIFJFUVVFU1Qgc2VudCB0byB0aGUgd3Jvbmcgc2VydmVyCisJCQkgICAgIHNob3VsZCBiZSBmYXVsdGVkLCBzbyB0aGF0IHRoZSBjbGllbnQgZXN0YWJsaXNoZXMgCisJCQkgICAgIGNvbW11bmljYXRpb24gd2l0aCB1cywgb3RoZXJ3aXNlLCBzaWxlbnRseSBpZ25vcmUuICovCisJCQkgIGlmICghb3B0aW9uX2Jvb2woT1BUX0FVVEhPUklUQVRJVkUpKQorCQkJICAgIHJldHVybiAwOworCQkJICBtZXNzYWdlID0gXygid3Jvbmcgc2VydmVyLUlEIik7CisJCQl9CisJCSAgICB9CisJCX0KKworCSAgICAgIC8qIElmIGEgbGVhc2UgZXhpc3RzIGZvciB0aGlzIGhvc3QgYW5kIGFub3RoZXIgYWRkcmVzcywgc3F1YXNoIGl0LiAqLworCSAgICAgIGlmIChsZWFzZSAmJiBsZWFzZS0+YWRkci5zX2FkZHIgIT0gbWVzcy0+eWlhZGRyLnNfYWRkcikKKwkJeworCQkgIGxlYXNlX3BydW5lKGxlYXNlLCBub3cpOworCQkgIGxlYXNlID0gTlVMTDsKKwkJfQorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvKiBJTklULVJFQk9PVCAqLworCSAgICAgIGlmICghbGVhc2UgJiYgIW9wdGlvbl9ib29sKE9QVF9BVVRIT1JJVEFUSVZFKSkKKwkJcmV0dXJuIDA7CisJICAgICAgCisJICAgICAgaWYgKGxlYXNlICYmIGxlYXNlLT5hZGRyLnNfYWRkciAhPSBtZXNzLT55aWFkZHIuc19hZGRyKQorCQltZXNzYWdlID0gXygid3JvbmcgYWRkcmVzcyIpOworCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIFJFTkVXSU5HIG9yIFJFQklORElORyAqLyAKKwkgIC8qIENoZWNrIGV4aXN0aW5nIGxlYXNlIGZvciB0aGlzIGFkZHJlc3MuCisJICAgICBXZSBhbGxvdyBpdCB0byBiZSBtaXNzaW5nIGlmIGRoY3AtYXV0aG9yaXRhdGl2ZSBtb2RlCisJICAgICBhcyBsb25nIGFzIHdlIGNhbiBhbGxvY2F0ZSB0aGUgbGVhc2Ugbm93IC0gY2hlY2tlZCBiZWxvdy4KKwkgICAgIFRoaXMgbWFrZXMgZm9yIGEgc21vb3RoIHJlY292ZXJ5IGZyb20gYSBsb3N0IGxlYXNlIERCICovCisJICBpZiAoKGxlYXNlICYmIG1lc3MtPmNpYWRkci5zX2FkZHIgIT0gbGVhc2UtPmFkZHIuc19hZGRyKSB8fAorCSAgICAgICghbGVhc2UgJiYgIW9wdGlvbl9ib29sKE9QVF9BVVRIT1JJVEFUSVZFKSkpCisJICAgIHsKKwkgICAgICAvKiBBIGNsaWVudCByZWJpbmRpbmcgd2lsbCBicm9hZGNhc3QgdGhlIHJlcXVlc3QsIHNvIHdlIG1heSBzZWUgaXQgZXZlbiAKKwkJIGlmIHRoZSBsZWFzZSBpcyBoZWxkIGJ5IGFub3RoZXIgc2VydmVyLiBKdXN0IGlnbm9yZSBpdCBpbiB0aGF0IGNhc2UuIAorCQkgSWYgdGhlIHJlcXVlc3QgaXMgdW5pY2FzdCB0byB1cywgdGhlbiBzb21ldGhpbmdzIHdyb25nLCBOQUsgKi8KKwkgICAgICBpZiAoIXVuaWNhc3RfZGVzdCkKKwkJcmV0dXJuIDA7CisJICAgICAgbWVzc2FnZSA9IF8oImxlYXNlIG5vdCBmb3VuZCIpOworCSAgICAgIC8qIGVuc3VyZSB3ZSBicm9hZGNhc3QgTkFLICovCisJICAgICAgdW5pY2FzdF9kZXN0ID0gMDsKKwkgICAgfQorCisJICAvKiBkZXN5bmNocm9uaXNlIHJlbmV3YWxzICovCisJICBmdXp6ID0gcmFuZDE2KCk7CisJICBtZXNzLT55aWFkZHIgPSBtZXNzLT5jaWFkZHI7CisJfQorICAgICAgCisgICAgICBsb2dfcGFja2V0KCJESENQUkVRVUVTVCIsICZtZXNzLT55aWFkZHIsIGVtYWMsIGVtYWNfbGVuLCBpZmFjZV9uYW1lLCBOVUxMLCBOVUxMLCBtZXNzLT54aWQpOworIAorICAgICAgaWYgKCFtZXNzYWdlKQorCXsKKwkgIHN0cnVjdCBkaGNwX2NvbmZpZyAqYWRkcl9jb25maWc7CisJICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICp0bXAgPSBOVUxMOworCSAgCisJICBpZiAoaGF2ZV9jb25maWcoY29uZmlnLCBDT05GSUdfQUREUikpCisJICAgIGZvciAodG1wID0gY29udGV4dDsgdG1wOyB0bXAgPSB0bXAtPmN1cnJlbnQpCisJICAgICAgaWYgKGNvbnRleHQtPnJvdXRlci5zX2FkZHIgPT0gY29uZmlnLT5hZGRyLnNfYWRkcikKKwkJYnJlYWs7CisJICAKKwkgIGlmICghKGNvbnRleHQgPSBuYXJyb3dfY29udGV4dChjb250ZXh0LCBtZXNzLT55aWFkZHIsIHRhZ2lmX25ldGlkKSkpCisJICAgIHsKKwkgICAgICAvKiBJZiBhIG1hY2hpbmUgbW92ZXMgbmV0d29ya3Mgd2hpbHN0IGl0IGhhcyBhIGxlYXNlLCB3ZSBjYXRjaCB0aGF0IGhlcmUuICovCisJICAgICAgbWVzc2FnZSA9IF8oIndyb25nIG5ldHdvcmsiKTsKKwkgICAgICAvKiBlbnN1cmUgd2UgYnJvYWRjYXN0IE5BSyAqLworCSAgICAgIHVuaWNhc3RfZGVzdCA9IDA7CisJICAgIH0KKwkgIAorCSAgLyogQ2hlY2sgZm9yIHJlbmV3YWwgb2YgYSBsZWFzZSB3aGljaCBpcyBvdXRzaWRlIHRoZSBhbGxvd2VkIHJhbmdlLiAqLworCSAgZWxzZSBpZiAoIWFkZHJlc3NfYXZhaWxhYmxlKGNvbnRleHQsIG1lc3MtPnlpYWRkciwgdGFnaWZfbmV0aWQpICYmCisJCSAgICghaGF2ZV9jb25maWcoY29uZmlnLCBDT05GSUdfQUREUikgfHwgY29uZmlnLT5hZGRyLnNfYWRkciAhPSBtZXNzLT55aWFkZHIuc19hZGRyKSkKKwkgICAgbWVzc2FnZSA9IF8oImFkZHJlc3Mgbm90IGF2YWlsYWJsZSIpOworCSAgCisJICAvKiBDaGVjayBpZiBhIG5ldyBzdGF0aWMgYWRkcmVzcyBoYXMgYmVlbiBjb25maWd1cmVkLiBCZSB2ZXJ5IHN1cmUgdGhhdAorCSAgICAgd2hlbiB0aGUgY2xpZW50IGRvZXMgRElTQ09WRVIsIGl0IHdpbGwgZ2V0IHRoZSBzdGF0aWMgYWRkcmVzcywgb3RoZXJ3aXNlCisJICAgICBhbiBlbmRsZXNzIHByb3RvY29sIGxvb3Agd2lsbCBlbnN1ZS4gKi8KKwkgIGVsc2UgaWYgKCF0bXAgJiYgIXNlbGVjdGluZyAmJgorCQkgICBoYXZlX2NvbmZpZyhjb25maWcsIENPTkZJR19BRERSKSAmJiAKKwkJICAgKCFoYXZlX2NvbmZpZyhjb25maWcsIENPTkZJR19ERUNMSU5FRCkgfHwKKwkJICAgIGRpZmZ0aW1lKG5vdywgY29uZmlnLT5kZWNsaW5lX3RpbWUpID4gKGZsb2F0KURFQ0xJTkVfQkFDS09GRikgJiYKKwkJICAgY29uZmlnLT5hZGRyLnNfYWRkciAhPSBtZXNzLT55aWFkZHIuc19hZGRyICYmCisJCSAgICghKGx0bXAgPSBsZWFzZV9maW5kX2J5X2FkZHIoY29uZmlnLT5hZGRyKSkgfHwgbHRtcCA9PSBsZWFzZSkpCisJICAgIG1lc3NhZ2UgPSBfKCJzdGF0aWMgbGVhc2UgYXZhaWxhYmxlIik7CisKKwkgIC8qIENoZWNrIHRvIHNlZSBpZiB0aGUgYWRkcmVzcyBpcyByZXNlcnZlZCBhcyBhIHN0YXRpYyBhZGRyZXNzIGZvciBhbm90aGVyIGhvc3QgKi8KKwkgIGVsc2UgaWYgKChhZGRyX2NvbmZpZyA9IGNvbmZpZ19maW5kX2J5X2FkZHJlc3MoZGFlbW9uLT5kaGNwX2NvbmYsIG1lc3MtPnlpYWRkcikpICYmIGFkZHJfY29uZmlnICE9IGNvbmZpZykKKwkgICAgbWVzc2FnZSA9IF8oImFkZHJlc3MgcmVzZXJ2ZWQiKTsKKworCSAgZWxzZSBpZiAoIWxlYXNlICYmIChsdG1wID0gbGVhc2VfZmluZF9ieV9hZGRyKG1lc3MtPnlpYWRkcikpKQorCSAgICB7CisJICAgICAgLyogSWYgYSBob3N0IGlzIGNvbmZpZ3VyZWQgd2l0aCBtb3JlIHRoYW4gb25lIE1BQyBhZGRyZXNzLCBpdCdzIE9LIHRvICduaXggCisJCSBhIGxlYXNlIGZyb20gb25lIG9mIGl0J3MgTUFDcyB0byBnaXZlIHRoZSBhZGRyZXNzIHRvIGFub3RoZXIuICovCisJICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWdfaGFzX21hYyhjb25maWcsIGx0bXAtPmh3YWRkciwgbHRtcC0+aHdhZGRyX2xlbiwgbHRtcC0+aHdhZGRyX3R5cGUpKQorCQl7CisJCSAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgXygiYWJhbmRvbmluZyBsZWFzZSB0byAlcyBvZiAlcyIpLAorCQkJICAgIHByaW50X21hYyhkYWVtb24tPm5hbWVidWZmLCBsdG1wLT5od2FkZHIsIGx0bXAtPmh3YWRkcl9sZW4pLCAKKwkJCSAgICBpbmV0X250b2EobHRtcC0+YWRkcikpOworCQkgIGxlYXNlID0gbHRtcDsKKwkJfQorCSAgICAgIGVsc2UKKwkJbWVzc2FnZSA9IF8oImFkZHJlc3MgaW4gdXNlIik7CisJICAgIH0KKworCSAgaWYgKCFtZXNzYWdlKQorCSAgICB7CisJICAgICAgaWYgKGVtYWNfbGVuID09IDApCisJCW1lc3NhZ2UgPSBfKCJubyB1bmlxdWUtaWQiKTsKKwkgICAgICAKKwkgICAgICBlbHNlIGlmICghbGVhc2UpCisJCXsJICAgICAKKwkJICBpZiAoKGxlYXNlID0gbGVhc2U0X2FsbG9jYXRlKG1lc3MtPnlpYWRkcikpKQorCQkgICAgZG9fY2xhc3NlcyA9IDE7CisJCSAgZWxzZQorCQkgICAgbWVzc2FnZSA9IF8oIm5vIGxlYXNlcyBsZWZ0Iik7CisJCX0KKwkgICAgfQorCX0KKworICAgICAgaWYgKG1lc3NhZ2UpCisJeworCSAgbG9nX3BhY2tldCgiREhDUE5BSyIsICZtZXNzLT55aWFkZHIsIGVtYWMsIGVtYWNfbGVuLCBpZmFjZV9uYW1lLCBOVUxMLCBtZXNzYWdlLCBtZXNzLT54aWQpOworCSAgCisJICBtZXNzLT55aWFkZHIuc19hZGRyID0gMDsKKwkgIGNsZWFyX3BhY2tldChtZXNzLCBlbmQpOworCSAgb3B0aW9uX3B1dChtZXNzLCBlbmQsIE9QVElPTl9NRVNTQUdFX1RZUEUsIDEsIERIQ1BOQUspOworCSAgb3B0aW9uX3B1dChtZXNzLCBlbmQsIE9QVElPTl9TRVJWRVJfSURFTlRJRklFUiwgSU5BRERSU1osIG50b2hsKHNlcnZlcl9pZChjb250ZXh0LCBvdmVycmlkZSwgZmFsbGJhY2spLnNfYWRkcikpOworCSAgb3B0aW9uX3B1dF9zdHJpbmcobWVzcywgZW5kLCBPUFRJT05fTUVTU0FHRSwgbWVzc2FnZSwgYm9ya2VuX29wdCk7CisJICAvKiBUaGlzIGZpeGVzIGEgcHJvYmxlbSB3aXRoIHRoZSBESENQIHNwZWMsIGJyb2FkY2FzdGluZyBhIE5BSyB0byBhIGhvc3Qgb24gCisJICAgICBhIGRpc3RhbnQgc3VibmV0IHdoaWNoIHVuaWNhc3QgYSBSRVEgdG8gdXMgd29uJ3Qgd29yay4gKi8KKwkgIGlmICghdW5pY2FzdF9kZXN0IHx8IG1lc3MtPmdpYWRkci5zX2FkZHIgIT0gMCB8fCAKKwkgICAgICBtZXNzLT5jaWFkZHIuc19hZGRyID09IDAgfHwgaXNfc2FtZV9uZXQoY29udGV4dC0+bG9jYWwsIG1lc3MtPmNpYWRkciwgY29udGV4dC0+bmV0bWFzaykpCisJICAgIHsKKwkgICAgICBtZXNzLT5mbGFncyB8PSBodG9ucygweDgwMDApOyAvKiBicm9hZGNhc3QgKi8KKwkgICAgICBtZXNzLT5jaWFkZHIuc19hZGRyID0gMDsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAoY29udGV4dC0+bmV0aWQubmV0KQorCSAgICB7CisJICAgICAgY29udGV4dC0+bmV0aWQubmV4dCA9IG5ldGlkOworCSAgICAgIHRhZ2lmX25ldGlkID0gcnVuX3RhZ19pZiggJmNvbnRleHQtPm5ldGlkKTsKKwkgICAgfQorCisJICBsb2dfdGFncyh0YWdpZl9uZXRpZCwgbnRvaGwobWVzcy0+eGlkKSk7CisJICAKKwkgIGlmIChkb19jbGFzc2VzKQorCSAgICB7CisJICAgICAgLyogcGljayB1cCBJTklULVJFQk9PVCBldmVudHMuICovCisJICAgICAgbGVhc2UtPmZsYWdzIHw9IExFQVNFX0NIQU5HRUQ7CisKKyNpZmRlZiBIQVZFX1NDUklQVAorCSAgICAgIGlmIChkYWVtb24tPmxlYXNlX2NoYW5nZV9jb21tYW5kKQorCQl7CisJCSAgc3RydWN0IGRoY3BfbmV0aWQgKm47CisJCSAgCisJCSAgaWYgKG1lc3MtPmdpYWRkci5zX2FkZHIpCisJCSAgICBsZWFzZS0+Z2lhZGRyID0gbWVzcy0+Z2lhZGRyOworCQkgIAorCQkgIGZyZWUobGVhc2UtPmV4dHJhZGF0YSk7CisJCSAgbGVhc2UtPmV4dHJhZGF0YSA9IE5VTEw7CisJCSAgbGVhc2UtPmV4dHJhZGF0YV9zaXplID0gbGVhc2UtPmV4dHJhZGF0YV9sZW4gPSAwOworCQkgIAorCQkgIGFkZF9leHRyYWRhdGFfb3B0KGxlYXNlLCBvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX1ZFTkRPUl9JRCwgMSkpOworCQkgIGFkZF9leHRyYWRhdGFfb3B0KGxlYXNlLCBvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX0hPU1ROQU1FLCAxKSk7CisJCSAgYWRkX2V4dHJhZGF0YV9vcHQobGVhc2UsIG91aSk7CisJCSAgYWRkX2V4dHJhZGF0YV9vcHQobGVhc2UsIHNlcmlhbCk7CisJCSAgYWRkX2V4dHJhZGF0YV9vcHQobGVhc2UsIGNsYXNzKTsKKworCQkgIGlmICgob3B0ID0gb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9BR0VOVF9JRCwgMSkpKQorCQkgICAgeworCQkgICAgICBhZGRfZXh0cmFkYXRhX29wdChsZWFzZSwgb3B0aW9uX2ZpbmQxKG9wdGlvbl9wdHIob3B0LCAwKSwgb3B0aW9uX3B0cihvcHQsIG9wdGlvbl9sZW4ob3B0KSksIFNVQk9QVF9DSVJDVUlUX0lELCAxKSk7CisJCSAgICAgIGFkZF9leHRyYWRhdGFfb3B0KGxlYXNlLCBvcHRpb25fZmluZDEob3B0aW9uX3B0cihvcHQsIDApLCBvcHRpb25fcHRyKG9wdCwgb3B0aW9uX2xlbihvcHQpKSwgU1VCT1BUX1NVQlNDUl9JRCwgMSkpOworCQkgICAgICBhZGRfZXh0cmFkYXRhX29wdChsZWFzZSwgb3B0aW9uX2ZpbmQxKG9wdGlvbl9wdHIob3B0LCAwKSwgb3B0aW9uX3B0cihvcHQsIG9wdGlvbl9sZW4ob3B0KSksIFNVQk9QVF9SRU1PVEVfSUQsIDEpKTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGFkZF9leHRyYWRhdGFfb3B0KGxlYXNlLCBOVUxMKTsKKwkJICAgICAgYWRkX2V4dHJhZGF0YV9vcHQobGVhc2UsIE5VTEwpOworCQkgICAgICBhZGRfZXh0cmFkYXRhX29wdChsZWFzZSwgTlVMTCk7CisJCSAgICB9CisKKwkJICAvKiBzcGFjZS1jb25jYXQgdGFnIHNldCAqLworCQkgIGlmICghdGFnaWZfbmV0aWQpCisJCSAgICBhZGRfZXh0cmFkYXRhX29wdChsZWFzZSwgTlVMTCk7CisJCSAgZWxzZQorCQkgICAgZm9yIChuID0gdGFnaWZfbmV0aWQ7IG47IG4gPSBuLT5uZXh0KQorCQkgICAgICB7CisJCQlzdHJ1Y3QgZGhjcF9uZXRpZCAqbjE7CisJCQkvKiBraWxsIGR1cGVzICovCisJCQlmb3IgKG4xID0gbi0+bmV4dDsgbjE7IG4xID0gbjEtPm5leHQpCisJCQkgIGlmIChzdHJjbXAobi0+bmV0LCBuMS0+bmV0KSA9PSAwKQorCQkJICAgIGJyZWFrOworCQkJaWYgKCFuMSkKKwkJCSAgbGVhc2VfYWRkX2V4dHJhZGF0YShsZWFzZSwgKHVuc2lnbmVkIGNoYXIgKiluLT5uZXQsIHN0cmxlbihuLT5uZXQpLCBuLT5uZXh0ID8gJyAnIDogMCk7IAorCQkgICAgICB9CisJCSAgCisJCSAgaWYgKChvcHQgPSBvcHRpb25fZmluZChtZXNzLCBzeiwgT1BUSU9OX1VTRVJfQ0xBU1MsIDEpKSkKKwkJICAgIHsKKwkJICAgICAgaW50IGxlbiA9IG9wdGlvbl9sZW4ob3B0KTsKKwkJICAgICAgdW5zaWduZWQgY2hhciAqdWNwID0gb3B0aW9uX3B0cihvcHQsIDApOworCQkgICAgICAvKiBJZiB0aGUgdXNlci1jbGFzcyBvcHRpb24gc3RhcnRlZCBhcyBjb3VudGVkIHN0cmluZ3MsIHRoZSBmaXJzdCBieXRlIHdpbGwgYmUgemVyby4gKi8KKwkJICAgICAgaWYgKGxlbiAhPSAwICYmIHVjcFswXSA9PSAwKQorCQkJdWNwKyssIGxlbi0tOworCQkgICAgICBsZWFzZV9hZGRfZXh0cmFkYXRhKGxlYXNlLCB1Y3AsIGxlbiwgMCk7CisJCSAgICB9CisJCX0KKyNlbmRpZgorCSAgICB9CisJICAKKwkgIGlmICghaG9zdG5hbWVfYXV0aCAmJiAoY2xpZW50X2hvc3RuYW1lID0gaG9zdF9mcm9tX2RucyhtZXNzLT55aWFkZHIpKSkKKwkgICAgeworCSAgICAgIGRvbWFpbiA9IGdldF9kb21haW4obWVzcy0+eWlhZGRyKTsKKwkgICAgICBob3N0bmFtZSA9IGNsaWVudF9ob3N0bmFtZTsKKwkgICAgICBob3N0bmFtZV9hdXRoID0gMTsKKwkgICAgfQorCSAgCisJICB0aW1lID0gY2FsY190aW1lKGNvbnRleHQsIGNvbmZpZywgb3B0aW9uX2ZpbmQobWVzcywgc3osIE9QVElPTl9MRUFTRV9USU1FLCA0KSk7CisJICBsZWFzZV9zZXRfaHdhZGRyKGxlYXNlLCBtZXNzLT5jaGFkZHIsIGNsaWQsIG1lc3MtPmhsZW4sIG1lc3MtPmh0eXBlLCBjbGlkX2xlbiwgbm93LCBkb19jbGFzc2VzKTsKKwkgIAorCSAgLyogaWYgYWxsIHRoZSBuZXRpZHMgaW4gdGhlIGlnbm9yZV9uYW1lIGxpc3QgYXJlIHByZXNlbnQsIGlnbm9yZSBjbGllbnQtc3VwcGxpZWQgbmFtZSAqLworCSAgaWYgKCFob3N0bmFtZV9hdXRoKQorCSAgICB7CisJICAgICAgZm9yIChpZF9saXN0ID0gZGFlbW9uLT5kaGNwX2lnbm9yZV9uYW1lczsgaWRfbGlzdDsgaWRfbGlzdCA9IGlkX2xpc3QtPm5leHQpCisJCWlmICgoIWlkX2xpc3QtPmxpc3QpIHx8IG1hdGNoX25ldGlkKGlkX2xpc3QtPmxpc3QsIHRhZ2lmX25ldGlkLCAwKSkKKwkJICBicmVhazsKKwkgICAgICBpZiAoaWRfbGlzdCkKKwkJaG9zdG5hbWUgPSBOVUxMOworCSAgICB9CisJICAKKwkgIC8qIExhc3QgZGl0Y2gsIGlmIGNvbmZpZ3VyZWQsIGdlbmVyYXRlIGhvc3RuYW1lIGZyb20gbWFjIGFkZHJlc3MgKi8KKwkgIGlmICghaG9zdG5hbWUgJiYgZW1hY19sZW4gIT0gMCkKKwkgICAgeworCSAgICAgIGZvciAoaWRfbGlzdCA9IGRhZW1vbi0+ZGhjcF9nZW5fbmFtZXM7IGlkX2xpc3Q7IGlkX2xpc3QgPSBpZF9saXN0LT5uZXh0KQorCQlpZiAoKCFpZF9saXN0LT5saXN0KSB8fCBtYXRjaF9uZXRpZChpZF9saXN0LT5saXN0LCB0YWdpZl9uZXRpZCwgMCkpCisJCSAgYnJlYWs7CisJICAgICAgaWYgKGlkX2xpc3QpCisJCXsKKwkJICBpbnQgaTsKKworCQkgIGhvc3RuYW1lID0gZGFlbW9uLT5kaGNwX2J1ZmY7CisJCSAgLyogYnVmZmVyIGlzIDI1NiBieXRlcywgMyBieXRlcyBwZXIgb2N0ZXQgKi8KKwkJICBmb3IgKGkgPSAwOyAoaSA8IGVtYWNfbGVuKSAmJiAoaSA8IDgwKTsgaSsrKQorCQkgICAgaG9zdG5hbWUgKz0gc3ByaW50Zihob3N0bmFtZSwgIiUuMnglcyIsIGVtYWNbaV0sIChpID09IGVtYWNfbGVuIC0gMSkgPyAiIiA6ICItIik7CisJCSAgaG9zdG5hbWUgPSBkYWVtb24tPmRoY3BfYnVmZjsKKwkJfQorCSAgICB9CisKKwkgIGlmIChob3N0bmFtZSkKKwkgICAgbGVhc2Vfc2V0X2hvc3RuYW1lKGxlYXNlLCBob3N0bmFtZSwgaG9zdG5hbWVfYXV0aCwgZ2V0X2RvbWFpbihsZWFzZS0+YWRkciksIGRvbWFpbik7CisJICAKKwkgIGxlYXNlX3NldF9leHBpcmVzKGxlYXNlLCB0aW1lLCBub3cpOworCSAgbGVhc2Vfc2V0X2ludGVyZmFjZShsZWFzZSwgaW50X2luZGV4LCBub3cpOworCisJICBpZiAob3ZlcnJpZGUuc19hZGRyICE9IDApCisJICAgIGxlYXNlLT5vdmVycmlkZSA9IG92ZXJyaWRlOworCSAgZWxzZQorCSAgICBvdmVycmlkZSA9IGxlYXNlLT5vdmVycmlkZTsKKworCSAgbG9nX3BhY2tldCgiREhDUEFDSyIsICZtZXNzLT55aWFkZHIsIGVtYWMsIGVtYWNfbGVuLCBpZmFjZV9uYW1lLCBob3N0bmFtZSwgTlVMTCwgbWVzcy0+eGlkKTsgIAorCSAgCisJICBjbGVhcl9wYWNrZXQobWVzcywgZW5kKTsKKwkgIG9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fTUVTU0FHRV9UWVBFLCAxLCBESENQQUNLKTsKKwkgIG9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fU0VSVkVSX0lERU5USUZJRVIsIElOQUREUlNaLCBudG9obChzZXJ2ZXJfaWQoY29udGV4dCwgb3ZlcnJpZGUsIGZhbGxiYWNrKS5zX2FkZHIpKTsKKwkgIG9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fTEVBU0VfVElNRSwgNCwgdGltZSk7CisJICBpZiAodGltZSAhPSAweGZmZmZmZmZmKQorCSAgICB7CisJICAgICAgd2hpbGUgKGZ1enogPiAodGltZS8xNikpCisJCWZ1enogPSBmdXp6LzI7IAorCSAgICAgIG9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fVDEsIDQsICh0aW1lLzIpIC0gZnV6eik7CisJICAgICAgb3B0aW9uX3B1dChtZXNzLCBlbmQsIE9QVElPTl9UMiwgNCwgKCh0aW1lLzgpKjcpIC0gZnV6eik7CisJICAgIH0KKwkgIGRvX29wdGlvbnMoY29udGV4dCwgbWVzcywgZW5kLCByZXFfb3B0aW9ucywgaG9zdG5hbWUsIGdldF9kb21haW4obWVzcy0+eWlhZGRyKSwgCisJCSAgICAgbmV0aWQsIHN1Ym5ldF9hZGRyLCBmcWRuX2ZsYWdzLCBib3JrZW5fb3B0LCBweGVhcmNoLCB1dWlkLCB2ZW5kb3JfY2xhc3NfbGVuLCBub3cpOworCX0KKworICAgICAgcmV0dXJuIGRoY3BfcGFja2V0X3NpemUobWVzcywgYWdlbnRfaWQsIHJlYWxfZW5kKTsgCisgICAgICAKKyAgICBjYXNlIERIQ1BJTkZPUk06CisgICAgICBpZiAoaWdub3JlIHx8IGhhdmVfY29uZmlnKGNvbmZpZywgQ09ORklHX0RJU0FCTEUpKQorCW1lc3NhZ2UgPSBfKCJpZ25vcmVkIik7CisgICAgICAKKyAgICAgIGxvZ19wYWNrZXQoIkRIQ1BJTkZPUk0iLCAmbWVzcy0+Y2lhZGRyLCBlbWFjLCBlbWFjX2xlbiwgaWZhY2VfbmFtZSwgbWVzc2FnZSwgTlVMTCwgbWVzcy0+eGlkKTsKKyAgICAgCisgICAgICBpZiAobWVzc2FnZSB8fCBtZXNzLT5jaWFkZHIuc19hZGRyID09IDApCisJcmV0dXJuIDA7CisKKyAgICAgIC8qIEZvciBESENQSU5GT1JNIG9ubHksIGNvcGUgd2l0aG91dCBhIHZhbGlkIGNvbnRleHQgKi8KKyAgICAgIGNvbnRleHQgPSBuYXJyb3dfY29udGV4dChjb250ZXh0LCBtZXNzLT5jaWFkZHIsIHRhZ2lmX25ldGlkKTsKKyAgICAgIAorICAgICAgLyogRmluZCBhIGxlYXN0IGJhc2VkIG9uIElQIGFkZHJlc3MgaWYgd2UgZGlkbid0CisJIGdldCBvbmUgZnJvbSBNQUMgYWRkcmVzcy9jbGllbnQtZCAqLworICAgICAgaWYgKCFsZWFzZSAmJgorCSAgKGxlYXNlID0gbGVhc2VfZmluZF9ieV9hZGRyKG1lc3MtPmNpYWRkcikpICYmIAorCSAgbGVhc2UtPmhvc3RuYW1lKQorCWhvc3RuYW1lID0gbGVhc2UtPmhvc3RuYW1lOworICAgICAgCisgICAgICBpZiAoIWhvc3RuYW1lKQorCWhvc3RuYW1lID0gaG9zdF9mcm9tX2RucyhtZXNzLT5jaWFkZHIpOworICAgICAgCisgICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0LT5uZXRpZC5uZXQpCisJeworCSAgY29udGV4dC0+bmV0aWQubmV4dCA9IG5ldGlkOworCSAgdGFnaWZfbmV0aWQgPSBydW5fdGFnX2lmKCZjb250ZXh0LT5uZXRpZCk7CisJfQorCisgICAgICBsb2dfdGFncyh0YWdpZl9uZXRpZCwgbnRvaGwobWVzcy0+eGlkKSk7CisgICAgICAKKyAgICAgIGxvZ19wYWNrZXQoIkRIQ1BBQ0siLCAmbWVzcy0+Y2lhZGRyLCBlbWFjLCBlbWFjX2xlbiwgaWZhY2VfbmFtZSwgaG9zdG5hbWUsIE5VTEwsIG1lc3MtPnhpZCk7CisgICAgICAKKyAgICAgIGlmIChsZWFzZSkKKwl7CisJICBsZWFzZV9zZXRfaW50ZXJmYWNlKGxlYXNlLCBpbnRfaW5kZXgsIG5vdyk7CisJICBpZiAob3ZlcnJpZGUuc19hZGRyICE9IDApCisJICAgIGxlYXNlLT5vdmVycmlkZSA9IG92ZXJyaWRlOworCSAgZWxzZQorCSAgICBvdmVycmlkZSA9IGxlYXNlLT5vdmVycmlkZTsKKwl9CisKKyAgICAgIGNsZWFyX3BhY2tldChtZXNzLCBlbmQpOworICAgICAgb3B0aW9uX3B1dChtZXNzLCBlbmQsIE9QVElPTl9NRVNTQUdFX1RZUEUsIDEsIERIQ1BBQ0spOworICAgICAgb3B0aW9uX3B1dChtZXNzLCBlbmQsIE9QVElPTl9TRVJWRVJfSURFTlRJRklFUiwgSU5BRERSU1osIG50b2hsKHNlcnZlcl9pZChjb250ZXh0LCBvdmVycmlkZSwgZmFsbGJhY2spLnNfYWRkcikpOworICAgICAKKyAgICAgIC8qIFJGQyAyMTMxIHNheXMgdGhhdCBESENQSU5GT1JNIHNob3VsZG4ndCBpbmNsdWRlIGxlYXNlLXRpbWUgcGFyYW1ldGVycywgYnV0IAorCSB3ZSBzdXBwbHkgYSB1dGlsaXR5IHdoaWNoIG1ha2VzIERIQ1BJTkZPUk0gcmVxdWVzdHMgdG8gZ2V0IHRoaXMgaW5mb3JtYXRpb24uCisJIE9ubHkgaW5jbHVkZSBsZWFzZSB0aW1lIGlmIE9QVElPTl9MRUFTRV9USU1FIGlzIGluIHRoZSBwYXJhbWV0ZXIgcmVxdWVzdCBsaXN0LAorCSB3aGljaCB3b24ndCBiZSB0cnVlIGZvciBvcmRpbmFyeSBjbGllbnRzLCBidXQgd2lsbCBiZSB0cnVlIGZvciB0aGUgCisJIGRoY3BfbGVhc2VfdGltZSB1dGlsaXR5LiAqLworICAgICAgaWYgKGxlYXNlICYmIGluX2xpc3QocmVxX29wdGlvbnMsIE9QVElPTl9MRUFTRV9USU1FKSkKKwl7CisJICBpZiAobGVhc2UtPmV4cGlyZXMgPT0gMCkKKwkgICAgdGltZSA9IDB4ZmZmZmZmZmY7CisJICBlbHNlCisJICAgIHRpbWUgPSAodW5zaWduZWQgaW50KWRpZmZ0aW1lKGxlYXNlLT5leHBpcmVzLCBub3cpOworCSAgb3B0aW9uX3B1dChtZXNzLCBlbmQsIE9QVElPTl9MRUFTRV9USU1FLCA0LCB0aW1lKTsKKwl9CisKKyAgICAgIGRvX29wdGlvbnMoY29udGV4dCwgbWVzcywgZW5kLCByZXFfb3B0aW9ucywgaG9zdG5hbWUsIGdldF9kb21haW4obWVzcy0+Y2lhZGRyKSwKKwkJIG5ldGlkLCBzdWJuZXRfYWRkciwgZnFkbl9mbGFncywgYm9ya2VuX29wdCwgcHhlYXJjaCwgdXVpZCwgdmVuZG9yX2NsYXNzX2xlbiwgbm93KTsKKyAgICAgIAorICAgICAgKmlzX2luZm9ybSA9IDE7IC8qIGhhbmRsZSByZXBseSBkaWZmZXJlbnRseSAqLworICAgICAgcmV0dXJuIGRoY3BfcGFja2V0X3NpemUobWVzcywgYWdlbnRfaWQsIHJlYWxfZW5kKTsgCisgICAgfQorICAKKyAgcmV0dXJuIDA7Cit9CisKKy8qIGZpbmQgYSBnb29kIHZhbHVlIHRvIHVzZSBhcyBNQUMgYWRkcmVzcyBmb3IgbG9nZ2luZyBhbmQgYWRkcmVzcy1hbGxvY2F0aW9uIGhhc2hpbmcuCisgICBUaGlzIGlzIG5vcm1hbGx5IGp1c3QgdGhlIGNoYWRkciBmaWVsZCBmcm9tIHRoZSBESENQIHBhY2tldCwKKyAgIGJ1dCBlZyBGaXJld2lyZSB3aWxsIGhhdmUgaGxlbiA9PSAwIGFuZCB1c2UgdGhlIGNsaWVudC1pZCBpbnN0ZWFkLiAKKyAgIFRoaXMgY291bGQgYmUgYW55dGhpbmcsIGJ1dCB3aWxsIG5vcm1hbGx5IGJlIEVVSTY0IGZvciBGaXJld2lyZS4KKyAgIFdlIGFzc3VtZSB0aGF0IGlmIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBjbGllbnQtaWQgZXF1YWxzIHRoZSBodHlwZSBieXRlCisgICB0aGVuIHRoZSBjbGllbnQtaWQgaXMgdXNpbmcgdGhlIHVzdWFsIGVuY29kaW5nIGFuZCB1c2UgdGhlIHJlc3Qgb2YgdGhlIAorICAgY2xpZW50LWlkOiBpZiBub3Qgd2UgY2FuIHVzZSB0aGUgd2hvbGUgY2xpZW50LWlkLiBUaGlzIHNob3VsZCBnaXZlCisgICBzYW5lIE1BQyBhZGRyZXNzIGxvZ3MuICovCit1bnNpZ25lZCBjaGFyICpleHRlbmRlZF9od2FkZHIoaW50IGh3dHlwZSwgaW50IGh3bGVuLCB1bnNpZ25lZCBjaGFyICpod2FkZHIsIAorCQkJCSAgICAgIGludCBjbGlkX2xlbiwgdW5zaWduZWQgY2hhciAqY2xpZCwgaW50ICpsZW5fb3V0KQoreworICBpZiAoaHdsZW4gPT0gMCAmJiBjbGlkICYmIGNsaWRfbGVuID4gMykKKyAgICB7CisgICAgICBpZiAoY2xpZFswXSAgPT0gaHd0eXBlKQorCXsKKwkgICpsZW5fb3V0ID0gY2xpZF9sZW4gLSAxIDsKKwkgIHJldHVybiBjbGlkICsgMTsKKwl9CisKKyNpZiBkZWZpbmVkKEFSUEhSRF9FVUk2NCkgJiYgZGVmaW5lZChBUlBIUkRfSUVFRTEzOTQpCisgICAgICBpZiAoY2xpZFswXSA9PSAgQVJQSFJEX0VVSTY0ICYmIGh3dHlwZSA9PSBBUlBIUkRfSUVFRTEzOTQpCisJeworCSAgKmxlbl9vdXQgPSBjbGlkX2xlbiAtIDEgOworCSAgcmV0dXJuIGNsaWQgKyAxOworCX0KKyNlbmRpZgorICAgICAgCisgICAgICAqbGVuX291dCA9IGNsaWRfbGVuOworICAgICAgcmV0dXJuIGNsaWQ7CisgICAgfQorICAKKyAgKmxlbl9vdXQgPSBod2xlbjsKKyAgcmV0dXJuIGh3YWRkcjsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBjYWxjX3RpbWUoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwgc3RydWN0IGRoY3BfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGNoYXIgKm9wdCkKK3sKKyAgdW5zaWduZWQgaW50IHRpbWUgPSBoYXZlX2NvbmZpZyhjb25maWcsIENPTkZJR19USU1FKSA/IGNvbmZpZy0+bGVhc2VfdGltZSA6IGNvbnRleHQtPmxlYXNlX3RpbWU7CisgIAorICBpZiAob3B0KQorICAgIHsgCisgICAgICB1bnNpZ25lZCBpbnQgcmVxX3RpbWUgPSBvcHRpb25fdWludChvcHQsIDAsIDQpOworICAgICAgaWYgKHJlcV90aW1lIDwgMTIwICkKKwlyZXFfdGltZSA9IDEyMDsgLyogc2FuaXR5ICovCisgICAgICBpZiAodGltZSA9PSAweGZmZmZmZmZmIHx8IChyZXFfdGltZSAhPSAweGZmZmZmZmZmICYmIHJlcV90aW1lIDwgdGltZSkpCisJdGltZSA9IHJlcV90aW1lOworICAgIH0KKworICByZXR1cm4gdGltZTsKK30KKworc3RhdGljIHN0cnVjdCBpbl9hZGRyIHNlcnZlcl9pZChzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3QgaW5fYWRkciBvdmVycmlkZSwgc3RydWN0IGluX2FkZHIgZmFsbGJhY2spCit7CisgIGlmIChvdmVycmlkZS5zX2FkZHIgIT0gMCkKKyAgICByZXR1cm4gb3ZlcnJpZGU7CisgIGVsc2UgaWYgKGNvbnRleHQgJiYgY29udGV4dC0+bG9jYWwuc19hZGRyICE9IDApCisgICAgcmV0dXJuIGNvbnRleHQtPmxvY2FsOworICBlbHNlCisgICAgcmV0dXJuIGZhbGxiYWNrOworfQorCitzdGF0aWMgaW50IHNhbml0aXNlKHVuc2lnbmVkIGNoYXIgKm9wdCwgY2hhciAqYnVmKQoreworICBjaGFyICpwOworICBpbnQgaTsKKyAgCisgICpidWYgPSAwOworICAKKyAgaWYgKCFvcHQpCisgICAgcmV0dXJuIDA7CisKKyAgcCA9IG9wdGlvbl9wdHIob3B0LCAwKTsKKworICBmb3IgKGkgPSBvcHRpb25fbGVuKG9wdCk7IGkgPiAwOyBpLS0pCisgICAgeworICAgICAgY2hhciBjID0gKnArKzsKKyAgICAgIGlmIChpc3ByaW50KChpbnQpYykpCisJKmJ1ZisrID0gYzsKKyAgICB9CisgICpidWYgPSAwOyAvKiBhZGQgdGVybWluYXRvciAqLworICAKKyAgcmV0dXJuIDE7Cit9CisKKyNpZmRlZiBIQVZFX1NDUklQVAorc3RhdGljIHZvaWQgYWRkX2V4dHJhZGF0YV9vcHQoc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlLCB1bnNpZ25lZCBjaGFyICpvcHQpCit7CisgIGlmICghb3B0KQorICAgIGxlYXNlX2FkZF9leHRyYWRhdGEobGVhc2UsIE5VTEwsIDAsIDApOworICBlbHNlCisgICAgbGVhc2VfYWRkX2V4dHJhZGF0YShsZWFzZSwgb3B0aW9uX3B0cihvcHQsIDApLCBvcHRpb25fbGVuKG9wdCksIDApOyAKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBsb2dfcGFja2V0KGNoYXIgKnR5cGUsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGNoYXIgKmV4dF9tYWMsIAorCQkgICAgICAgaW50IG1hY19sZW4sIGNoYXIgKmludGVyZmFjZSwgY2hhciAqc3RyaW5nLCBjaGFyICplcnIsIHUzMiB4aWQpCit7CisgIHN0cnVjdCBpbl9hZGRyIGE7CisgCisgIGlmICghZXJyICYmICFvcHRpb25fYm9vbChPUFRfTE9HX09QVFMpICYmIG9wdGlvbl9ib29sKE9QVF9RVUlFVF9ESENQKSkKKyAgICByZXR1cm47CisgIAorICAvKiBhZGRyIG1heSBiZSBtaXNhbGlnbmVkICovCisgIGlmIChhZGRyKQorICAgIG1lbWNweSgmYSwgYWRkciwgc2l6ZW9mKGEpKTsKKyAgCisgIHByaW50X21hYyhkYWVtb24tPm5hbWVidWZmLCBleHRfbWFjLCBtYWNfbGVuKTsKKyAgCisgIGlmKG9wdGlvbl9ib29sKE9QVF9MT0dfT1BUUykpCisgICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sICIldSAlcyglcykgJXMlcyVzICVzJXMiLAorCSAgICAgICBudG9obCh4aWQpLCAKKwkgICAgICAgdHlwZSwKKwkgICAgICAgaW50ZXJmYWNlLCAKKwkgICAgICAgYWRkciA/IGluZXRfbnRvYShhKSA6ICIiLAorCSAgICAgICBhZGRyID8gIiAiIDogIiIsCisJICAgICAgIGRhZW1vbi0+bmFtZWJ1ZmYsCisJICAgICAgIHN0cmluZyA/IHN0cmluZyA6ICIiLAorCSAgICAgICBlcnIgPyBlcnIgOiAiIik7CisgIGVsc2UKKyAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCAiJXMoJXMpICVzJXMlcyAlcyVzIiwKKwkgICAgICB0eXBlLAorCSAgICAgIGludGVyZmFjZSwgCisJICAgICAgYWRkciA/IGluZXRfbnRvYShhKSA6ICIiLAorCSAgICAgIGFkZHIgPyAiICIgOiAiIiwKKwkgICAgICBkYWVtb24tPm5hbWVidWZmLAorCSAgICAgIHN0cmluZyA/IHN0cmluZyA6ICIiLAorCSAgICAgIGVyciA/IGVyciA6ICIiKTsKK30KKworc3RhdGljIHZvaWQgbG9nX29wdGlvbnModW5zaWduZWQgY2hhciAqc3RhcnQsIHUzMiB4aWQpCit7CisgIHdoaWxlICgqc3RhcnQgIT0gT1BUSU9OX0VORCkKKyAgICB7CisgICAgICBjaGFyICpvcHRuYW1lID0gb3B0aW9uX3N0cmluZyhBRl9JTkVULCBzdGFydFswXSwgb3B0aW9uX3B0cihzdGFydCwgMCksIG9wdGlvbl9sZW4oc3RhcnQpLCBkYWVtb24tPm5hbWVidWZmLCBNQVhETkFNRSk7CisgICAgICAKKyAgICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sICIldSBzZW50IHNpemU6JTNkIG9wdGlvbjolM2QgJXMgICVzIiwgCisJCW50b2hsKHhpZCksIG9wdGlvbl9sZW4oc3RhcnQpLCBzdGFydFswXSwgb3B0bmFtZSwgZGFlbW9uLT5uYW1lYnVmZik7CisgICAgICBzdGFydCArPSBzdGFydFsxXSArIDI7CisgICAgfQorfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciAqb3B0aW9uX2ZpbmQxKHVuc2lnbmVkIGNoYXIgKnAsIHVuc2lnbmVkIGNoYXIgKmVuZCwgaW50IG9wdCwgaW50IG1pbnNpemUpCit7CisgIHdoaWxlICgxKSAKKyAgICB7CisgICAgICBpZiAocCA+IGVuZCkKKwlyZXR1cm4gTlVMTDsKKyAgICAgIGVsc2UgaWYgKCpwID09IE9QVElPTl9FTkQpCisJcmV0dXJuIG9wdCA9PSBPUFRJT05fRU5EID8gcCA6IE5VTEw7CisgICAgICBlbHNlIGlmICgqcCA9PSBPUFRJT05fUEFEKQorCXArKzsKKyAgICAgIGVsc2UgCisJeyAKKwkgIGludCBvcHRfbGVuOworCSAgaWYgKHAgPiBlbmQgLSAyKQorCSAgICByZXR1cm4gTlVMTDsgLyogbWFsZm9ybWVkIHBhY2tldCAqLworCSAgb3B0X2xlbiA9IG9wdGlvbl9sZW4ocCk7CisJICBpZiAocCA+IGVuZCAtICgyICsgb3B0X2xlbikpCisJICAgIHJldHVybiBOVUxMOyAvKiBtYWxmb3JtZWQgcGFja2V0ICovCisJICBpZiAoKnAgPT0gb3B0ICYmIG9wdF9sZW4gPj0gbWluc2l6ZSkKKwkgICAgcmV0dXJuIHA7CisJICBwICs9IG9wdF9sZW4gKyAyOworCX0KKyAgICB9Cit9CisgCitzdGF0aWMgdW5zaWduZWQgY2hhciAqb3B0aW9uX2ZpbmQoc3RydWN0IGRoY3BfcGFja2V0ICptZXNzLCBzaXplX3Qgc2l6ZSwgaW50IG9wdF90eXBlLCBpbnQgbWluc2l6ZSkKK3sKKyAgdW5zaWduZWQgY2hhciAqcmV0LCAqb3ZlcmxvYWQ7CisgIAorICAvKiBza2lwIG92ZXIgREhDUCBjb29raWU7ICovCisgIGlmICgocmV0ID0gb3B0aW9uX2ZpbmQxKCZtZXNzLT5vcHRpb25zWzBdICsgc2l6ZW9mKHUzMiksICgodW5zaWduZWQgY2hhciAqKW1lc3MpICsgc2l6ZSwgb3B0X3R5cGUsIG1pbnNpemUpKSkKKyAgICByZXR1cm4gcmV0OworCisgIC8qIGxvb2sgZm9yIG92ZXJsb2FkIG9wdGlvbi4gKi8KKyAgaWYgKCEob3ZlcmxvYWQgPSBvcHRpb25fZmluZDEoJm1lc3MtPm9wdGlvbnNbMF0gKyBzaXplb2YodTMyKSwgKCh1bnNpZ25lZCBjaGFyICopbWVzcykgKyBzaXplLCBPUFRJT05fT1ZFUkxPQUQsIDEpKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgCisgIC8qIENhbiB3ZSBsb29rIGluIGZpbGVuYW1lIGFyZWEgPyAqLworICBpZiAoKG92ZXJsb2FkWzJdICYgMSkgJiYKKyAgICAgIChyZXQgPSBvcHRpb25fZmluZDEoJm1lc3MtPmZpbGVbMF0sICZtZXNzLT5maWxlWzEyOF0sIG9wdF90eXBlLCBtaW5zaXplKSkpCisgICAgcmV0dXJuIHJldDsKKworICAvKiBmaW5hbGx5IHRyeSBzbmFtZSBhcmVhICovCisgIGlmICgob3ZlcmxvYWRbMl0gJiAyKSAmJgorICAgICAgKHJldCA9IG9wdGlvbl9maW5kMSgmbWVzcy0+c25hbWVbMF0sICZtZXNzLT5zbmFtZVs2NF0sIG9wdF90eXBlLCBtaW5zaXplKSkpCisgICAgcmV0dXJuIHJldDsKKworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBpbl9hZGRyIG9wdGlvbl9hZGRyKHVuc2lnbmVkIGNoYXIgKm9wdCkKK3sKKyAgIC8qIHRoaXMgd29ycmllcyBhYm91dCB1bmFsaWduZWQgZGF0YSBpbiB0aGUgb3B0aW9uLiAqLworICAvKiBzdHJ1Y3QgaW5fYWRkciBpcyBuZXR3b3JrIGJ5dGUgb3JkZXIgKi8KKyAgc3RydWN0IGluX2FkZHIgcmV0OworCisgIG1lbWNweSgmcmV0LCBvcHRpb25fcHRyKG9wdCwgMCksIElOQUREUlNaKTsKKworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG9wdGlvbl91aW50KHVuc2lnbmVkIGNoYXIgKm9wdCwgaW50IG9mZnNldCwgaW50IHNpemUpCit7CisgIC8qIHRoaXMgd29ycmllcyBhYm91dCB1bmFsaWduZWQgZGF0YSBhbmQgYnl0ZSBvcmRlciAqLworICB1bnNpZ25lZCBpbnQgcmV0ID0gMDsKKyAgaW50IGk7CisgIHVuc2lnbmVkIGNoYXIgKnAgPSBvcHRpb25fcHRyKG9wdCwgb2Zmc2V0KTsKKyAgCisgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgcmV0ID0gKHJldCA8PCA4KSB8ICpwKys7CisKKyAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgKmRoY3Bfc2tpcF9vcHRzKHVuc2lnbmVkIGNoYXIgKnN0YXJ0KQoreworICB3aGlsZSAoKnN0YXJ0ICE9IDApCisgICAgc3RhcnQgKz0gc3RhcnRbMV0gKyAyOworICByZXR1cm4gc3RhcnQ7Cit9CisKKy8qIG9ubHkgZm9yIHVzZSB3aGVuIGJ1aWxkaW5nIHBhY2tldDogZG9lc24ndCBjaGVjayBmb3IgYmFkIGRhdGEuICovIAorc3RhdGljIHVuc2lnbmVkIGNoYXIgKmZpbmRfb3ZlcmxvYWQoc3RydWN0IGRoY3BfcGFja2V0ICptZXNzKQoreworICB1bnNpZ25lZCBjaGFyICpwID0gJm1lc3MtPm9wdGlvbnNbMF0gKyBzaXplb2YodTMyKTsKKyAgCisgIHdoaWxlICgqcCAhPSAwKQorICAgIHsKKyAgICAgIGlmICgqcCA9PSBPUFRJT05fT1ZFUkxPQUQpCisJcmV0dXJuIHA7CisgICAgICBwICs9IHBbMV0gKyAyOworICAgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzaXplX3QgZGhjcF9wYWNrZXRfc2l6ZShzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHVuc2lnbmVkIGNoYXIgKmFnZW50X2lkLCB1bnNpZ25lZCBjaGFyICpyZWFsX2VuZCkKK3sKKyAgdW5zaWduZWQgY2hhciAqcCA9IGRoY3Bfc2tpcF9vcHRzKCZtZXNzLT5vcHRpb25zWzBdICsgc2l6ZW9mKHUzMikpOworICB1bnNpZ25lZCBjaGFyICpvdmVybG9hZDsKKyAgc2l6ZV90IHJldDsKKyAgCisgIC8qIG1vdmUgYWdlbnRfaWQgYmFjayBkb3duIHRvIHRoZSBlbmQgb2YgdGhlIHBhY2tldCAqLworICBpZiAoYWdlbnRfaWQpCisgICAgeworICAgICAgbWVtbW92ZShwLCBhZ2VudF9pZCwgcmVhbF9lbmQgLSBhZ2VudF9pZCk7CisgICAgICBwICs9IHJlYWxfZW5kIC0gYWdlbnRfaWQ7CisgICAgICBtZW1zZXQocCwgMCwgcmVhbF9lbmQgLSBwKTsgLyogaW4gY2FzZSBvZiBvdmVybGFwICovCisgICAgfQorICAKKyAgLyogYWRkIEVORCBvcHRpb25zIHRvIHRoZSByZWdpb25zLiAqLworICBvdmVybG9hZCA9IGZpbmRfb3ZlcmxvYWQobWVzcyk7CisgIAorICBpZiAob3ZlcmxvYWQgJiYgKG9wdGlvbl91aW50KG92ZXJsb2FkLCAwLCAxKSAmIDEpKQorICAgIHsKKyAgICAgICpkaGNwX3NraXBfb3B0cyhtZXNzLT5maWxlKSA9IE9QVElPTl9FTkQ7CisgICAgICBpZiAob3B0aW9uX2Jvb2woT1BUX0xPR19PUFRTKSkKKwlsb2dfb3B0aW9ucyhtZXNzLT5maWxlLCBtZXNzLT54aWQpOworICAgIH0KKyAgZWxzZSBpZiAob3B0aW9uX2Jvb2woT1BUX0xPR19PUFRTKSAmJiBzdHJsZW4oKGNoYXIgKiltZXNzLT5maWxlKSAhPSAwKQorICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sIF8oIiV1IGJvb3RmaWxlIG5hbWU6ICVzIiksIG50b2hsKG1lc3MtPnhpZCksIChjaGFyICopbWVzcy0+ZmlsZSk7CisgIAorICBpZiAob3ZlcmxvYWQgJiYgKG9wdGlvbl91aW50KG92ZXJsb2FkLCAwLCAxKSAmIDIpKQorICAgIHsKKyAgICAgICpkaGNwX3NraXBfb3B0cyhtZXNzLT5zbmFtZSkgPSBPUFRJT05fRU5EOworICAgICAgaWYgKG9wdGlvbl9ib29sKE9QVF9MT0dfT1BUUykpCisJbG9nX29wdGlvbnMobWVzcy0+c25hbWUsIG1lc3MtPnhpZCk7CisgICAgfQorICBlbHNlIGlmIChvcHRpb25fYm9vbChPUFRfTE9HX09QVFMpICYmIHN0cmxlbigoY2hhciAqKW1lc3MtPnNuYW1lKSAhPSAwKQorICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sIF8oIiV1IHNlcnZlciBuYW1lOiAlcyIpLCBudG9obChtZXNzLT54aWQpLCAoY2hhciAqKW1lc3MtPnNuYW1lKTsKKworCisgICpwKysgPSBPUFRJT05fRU5EOworICAKKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9MT0dfT1BUUykpCisgICAgeworICAgICAgaWYgKG1lc3MtPnNpYWRkci5zX2FkZHIgIT0gMCkKKwlteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCIldSBuZXh0IHNlcnZlcjogJXMiKSwgbnRvaGwobWVzcy0+eGlkKSwgaW5ldF9udG9hKG1lc3MtPnNpYWRkcikpOworICAgICAgCisgICAgICBpZiAoKG1lc3MtPmZsYWdzICYgaHRvbnMoMHg4MDAwKSkgJiYgbWVzcy0+Y2lhZGRyLnNfYWRkciA9PSAwKQorCW15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sIF8oIiV1IGJyb2FkY2FzdCByZXNwb25zZSIpLCBudG9obChtZXNzLT54aWQpKTsKKyAgICAgIAorICAgICAgbG9nX29wdGlvbnMoJm1lc3MtPm9wdGlvbnNbMF0gKyBzaXplb2YodTMyKSwgbWVzcy0+eGlkKTsKKyAgICB9IAorICAKKyAgcmV0ID0gKHNpemVfdCkocCAtICh1bnNpZ25lZCBjaGFyICopbWVzcyk7CisgIAorICBpZiAocmV0IDwgTUlOX1BBQ0tFVFNaKQorICAgIHJldCA9IE1JTl9QQUNLRVRTWjsKKyAgCisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpmcmVlX3NwYWNlKHN0cnVjdCBkaGNwX3BhY2tldCAqbWVzcywgdW5zaWduZWQgY2hhciAqZW5kLCBpbnQgb3B0LCBpbnQgbGVuKQoreworICB1bnNpZ25lZCBjaGFyICpwID0gZGhjcF9za2lwX29wdHMoJm1lc3MtPm9wdGlvbnNbMF0gKyBzaXplb2YodTMyKSk7CisgIAorICBpZiAocCArIGxlbiArIDMgPj0gZW5kKQorICAgIC8qIG5vdCBlbm91Z2ggc3BhY2UgaW4gb3B0aW9ucyBhcmVhLCB0cnkgYW5kIHVzZSBvdmVybG9hZCwgaWYgcG9zcyAqLworICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKm92ZXJsb2FkOworICAgICAgCisgICAgICBpZiAoIShvdmVybG9hZCA9IGZpbmRfb3ZlcmxvYWQobWVzcykpICYmCisJICAobWVzcy0+ZmlsZVswXSA9PSAwIHx8IG1lc3MtPnNuYW1lWzBdID09IDApKQorCXsKKwkgIC8qIGF0dGVtcHQgdG8gb3ZlcmxvYWQgZm5hbWUgYW5kIHNuYW1lIGFyZWFzLCB3ZSd2ZSByZXNlcnZlZCBzcGFjZSBmb3IgdGhlCisJICAgICBvdmVyZmxvdyBvcHRpb24gcHJldml1b3VzbHkuICovCisJICBvdmVybG9hZCA9IHA7CisJICAqKHArKykgPSBPUFRJT05fT1ZFUkxPQUQ7CisJICAqKHArKykgPSAxOworCX0KKyAgICAgIAorICAgICAgcCA9IE5VTEw7CisgICAgICAKKyAgICAgIC8qIHVzaW5nIGZpbGVuYW1lIGZpZWxkID8gKi8KKyAgICAgIGlmIChvdmVybG9hZCkKKwl7CisJICBpZiAobWVzcy0+ZmlsZVswXSA9PSAwKQorCSAgICBvdmVybG9hZFsyXSB8PSAxOworCSAgCisJICBpZiAob3ZlcmxvYWRbMl0gJiAxKQorCSAgICB7CisJICAgICAgcCA9IGRoY3Bfc2tpcF9vcHRzKG1lc3MtPmZpbGUpOworCSAgICAgIGlmIChwICsgbGVuICsgMyA+PSBtZXNzLT5maWxlICsgc2l6ZW9mKG1lc3MtPmZpbGUpKQorCQlwID0gTlVMTDsKKwkgICAgfQorCSAgCisJICBpZiAoIXApCisJICAgIHsKKwkgICAgICAvKiB0cnkgdG8gYnJpbmcgc25hbWUgaW50byBwbGF5IChpdCBtYXkgYmUgYWxyZWFkeSkgKi8KKwkgICAgICBpZiAobWVzcy0+c25hbWVbMF0gPT0gMCkKKwkJb3ZlcmxvYWRbMl0gfD0gMjsKKwkgICAgICAKKwkgICAgICBpZiAob3ZlcmxvYWRbMl0gJiAyKQorCQl7CisJCSAgcCA9IGRoY3Bfc2tpcF9vcHRzKG1lc3MtPnNuYW1lKTsKKwkJICBpZiAocCArIGxlbiArIDMgPj0gbWVzcy0+c25hbWUgKyBzaXplb2YobWVzcy0+c25hbWUpKQorCQkgICAgcCA9IE5VTEw7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIAorICAgICAgaWYgKCFwKQorCW15X3N5c2xvZyhNU19ESENQIHwgTE9HX1dBUk5JTkcsIF8oImNhbm5vdCBzZW5kIERIQ1AvQk9PVFAgb3B0aW9uICVkOiBubyBzcGFjZSBsZWZ0IGluIHBhY2tldCIpLCBvcHQpOworICAgIH0KKyAKKyAgaWYgKHApCisgICAgeworICAgICAgKihwKyspID0gb3B0OworICAgICAgKihwKyspID0gbGVuOworICAgIH0KKworICByZXR1cm4gcDsKK30KKwkgICAgICAKK3N0YXRpYyB2b2lkIG9wdGlvbl9wdXQoc3RydWN0IGRoY3BfcGFja2V0ICptZXNzLCB1bnNpZ25lZCBjaGFyICplbmQsIGludCBvcHQsIGludCBsZW4sIHVuc2lnbmVkIGludCB2YWwpCit7CisgIGludCBpOworICB1bnNpZ25lZCBjaGFyICpwID0gZnJlZV9zcGFjZShtZXNzLCBlbmQsIG9wdCwgbGVuKTsKKyAgCisgIGlmIChwKSAKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgICAqKHArKykgPSB2YWwgPj4gKDggKiAobGVuIC0gKGkgKyAxKSkpOworfQorCitzdGF0aWMgdm9pZCBvcHRpb25fcHV0X3N0cmluZyhzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHVuc2lnbmVkIGNoYXIgKmVuZCwgaW50IG9wdCwgCisJCQkgICAgICBjaGFyICpzdHJpbmcsIGludCBudWxsX3Rlcm0pCit7CisgIHVuc2lnbmVkIGNoYXIgKnA7CisgIHNpemVfdCBsZW4gPSBzdHJsZW4oc3RyaW5nKTsKKworICBpZiAobnVsbF90ZXJtICYmIGxlbiAhPSAyNTUpCisgICAgbGVuKys7CisKKyAgaWYgKChwID0gZnJlZV9zcGFjZShtZXNzLCBlbmQsIG9wdCwgbGVuKSkpCisgICAgbWVtY3B5KHAsIHN0cmluZywgbGVuKTsKK30KKworLyogcmV0dXJuIGxlbmd0aCwgbm90ZSB0aGlzIG9ubHkgZG9lcyB0aGUgZGF0YSBwYXJ0ICovCitzdGF0aWMgaW50IGRvX29wdChzdHJ1Y3QgZGhjcF9vcHQgKm9wdCwgdW5zaWduZWQgY2hhciAqcCwgc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwgaW50IG51bGxfdGVybSkKK3sKKyAgaW50IGxlbiA9IG9wdC0+bGVuOworICAKKyAgaWYgKChvcHQtPmZsYWdzICYgREhPUFRfU1RSSU5HKSAmJiBudWxsX3Rlcm0gJiYgbGVuICE9IDI1NSkKKyAgICBsZW4rKzsKKworICBpZiAocCAmJiBsZW4gIT0gMCkKKyAgICB7CisgICAgICBpZiAoY29udGV4dCAmJiAob3B0LT5mbGFncyAmIERIT1BUX0FERFIpKQorCXsKKwkgIGludCBqOworCSAgc3RydWN0IGluX2FkZHIgKmEgPSAoc3RydWN0IGluX2FkZHIgKilvcHQtPnZhbDsKKwkgIGZvciAoaiA9IDA7IGogPCBvcHQtPmxlbjsgais9SU5BRERSU1osIGErKykKKwkgICAgeworCSAgICAgIC8qIHplcm8gbWVhbnMgInNlbGYiIChidXQgbm90IGluIHZlbmRvcmNsYXNzIG9wdGlvbnMuKSAqLworCSAgICAgIGlmIChhLT5zX2FkZHIgPT0gMCkKKwkJbWVtY3B5KHAsICZjb250ZXh0LT5sb2NhbCwgSU5BRERSU1opOworCSAgICAgIGVsc2UKKwkJbWVtY3B5KHAsIGEsIElOQUREUlNaKTsKKwkgICAgICBwICs9IElOQUREUlNaOworCSAgICB9CisJfQorICAgICAgZWxzZQorCS8qIGVtcHR5IHN0cmluZyBtYXkgYmUgZXh0ZW5kZWQgdG8gIlwwIiBieSBudWxsX3Rlcm0gKi8KKwltZW1jcHkocCwgb3B0LT52YWwgPyBvcHQtPnZhbCA6ICh1bnNpZ25lZCBjaGFyICopIiIsIGxlbik7CisgICAgfSAgCisgIHJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgaW5fbGlzdCh1bnNpZ25lZCBjaGFyICpsaXN0LCBpbnQgb3B0KQoreworICBpbnQgaTsKKworICAgLyogSWYgbm8gcmVxdWVzdGVkIG9wdGlvbnMsIHNlbmQgZXZlcnl0aGluZywgbm90IG5vdGhpbmcuICovCisgIGlmICghbGlzdCkKKyAgICByZXR1cm4gMTsKKyAgCisgIGZvciAoaSA9IDA7IGxpc3RbaV0gIT0gT1BUSU9OX0VORDsgaSsrKQorICAgIGlmIChvcHQgPT0gbGlzdFtpXSkKKyAgICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRoY3Bfb3B0ICpvcHRpb25fZmluZDIoaW50IG9wdCkKK3sKKyAgc3RydWN0IGRoY3Bfb3B0ICpvcHRzOworICAKKyAgZm9yIChvcHRzID0gZGFlbW9uLT5kaGNwX29wdHM7IG9wdHM7IG9wdHMgPSBvcHRzLT5uZXh0KQorICAgIGlmIChvcHRzLT5vcHQgPT0gb3B0ICYmIChvcHRzLT5mbGFncyAmIERIT1BUX1RBR09LKSkKKyAgICAgIHJldHVybiBvcHRzOworICAKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIG1hcmsgdmVuZG9yLWVuY2Fwc3VsYXRlZCBvcHRpb25zIHdoaWNoIG1hdGNoIHRoZSBjbGllbnQtc3VwcGxpZWQgIG9yCisgICBjb25maWctc3VwcGxpZWQgdmVuZG9yIGNsYXNzICovCitzdGF0aWMgdm9pZCBtYXRjaF92ZW5kb3Jfb3B0cyh1bnNpZ25lZCBjaGFyICpvcHQsIHN0cnVjdCBkaGNwX29wdCAqZG9wdCkKK3sKKyAgZm9yICg7IGRvcHQ7IGRvcHQgPSBkb3B0LT5uZXh0KQorICAgIHsKKyAgICAgIGRvcHQtPmZsYWdzICY9IH5ESE9QVF9WRU5ET1JfTUFUQ0g7CisgICAgICBpZiAob3B0ICYmIChkb3B0LT5mbGFncyAmIERIT1BUX1ZFTkRPUikpCisJeworCSAgaW50IGksIGxlbiA9IDA7CisJICBpZiAoZG9wdC0+dS52ZW5kb3JfY2xhc3MpCisJICAgIGxlbiA9IHN0cmxlbigoY2hhciAqKWRvcHQtPnUudmVuZG9yX2NsYXNzKTsKKwkgIGZvciAoaSA9IDA7IGkgPD0gKG9wdGlvbl9sZW4ob3B0KSAtIGxlbik7IGkrKykKKwkgICAgaWYgKGxlbiA9PSAwIHx8IG1lbWNtcChkb3B0LT51LnZlbmRvcl9jbGFzcywgb3B0aW9uX3B0cihvcHQsIGkpLCBsZW4pID09IDApCisJICAgICAgeworCQlkb3B0LT5mbGFncyB8PSBESE9QVF9WRU5ET1JfTUFUQ0g7CisJCWJyZWFrOworCSAgICAgIH0KKwl9CisgICAgfQorfQorCitzdGF0aWMgaW50IGRvX2VuY2FwX29wdHMoc3RydWN0IGRoY3Bfb3B0ICpvcHQsIGludCBlbmNhcCwgaW50IGZsYWcsICAKKwkJCSBzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHVuc2lnbmVkIGNoYXIgKmVuZCwgaW50IG51bGxfdGVybSkKK3sKKyAgaW50IGxlbiwgZW5jX2xlbiwgcmV0ID0gMDsKKyAgc3RydWN0IGRoY3Bfb3B0ICpzdGFydDsKKyAgdW5zaWduZWQgY2hhciAqcDsKKyAgICAKKyAgLyogZmluZCBzaXplIGluIGFkdmFuY2UgKi8KKyAgZm9yIChlbmNfbGVuID0gMCwgc3RhcnQgPSBvcHQ7IG9wdDsgb3B0ID0gb3B0LT5uZXh0KQorICAgIGlmIChvcHQtPmZsYWdzICYgZmxhZykKKyAgICAgIHsKKwlpbnQgbmV3ID0gZG9fb3B0KG9wdCwgTlVMTCwgTlVMTCwgbnVsbF90ZXJtKSArIDI7CisJcmV0ICA9IDE7CisJaWYgKGVuY19sZW4gKyBuZXcgPD0gMjU1KQorCSAgZW5jX2xlbiArPSBuZXc7CisJZWxzZQorCSAgeworCSAgICBwID0gZnJlZV9zcGFjZShtZXNzLCBlbmQsIGVuY2FwLCBlbmNfbGVuKTsKKwkgICAgZm9yICg7IHN0YXJ0ICYmIHN0YXJ0ICE9IG9wdDsgc3RhcnQgPSBzdGFydC0+bmV4dCkKKwkgICAgICBpZiAocCAmJiAoc3RhcnQtPmZsYWdzICYgZmxhZykpCisJCXsKKwkJICBsZW4gPSBkb19vcHQoc3RhcnQsIHAgKyAyLCBOVUxMLCBudWxsX3Rlcm0pOworCQkgICoocCsrKSA9IHN0YXJ0LT5vcHQ7CisJCSAgKihwKyspID0gbGVuOworCQkgIHAgKz0gbGVuOworCQl9CisJICAgIGVuY19sZW4gPSBuZXc7CisJICAgIHN0YXJ0ID0gb3B0OworCSAgfQorICAgICAgfQorICAKKyAgaWYgKGVuY19sZW4gIT0gMCAmJgorICAgICAgKHAgPSBmcmVlX3NwYWNlKG1lc3MsIGVuZCwgZW5jYXAsIGVuY19sZW4gKyAxKSkpCisgICAgeworICAgICAgZm9yICg7IHN0YXJ0OyBzdGFydCA9IHN0YXJ0LT5uZXh0KQorCWlmIChzdGFydC0+ZmxhZ3MgJiBmbGFnKQorCSAgeworCSAgICBsZW4gPSBkb19vcHQoc3RhcnQsIHAgKyAyLCBOVUxMLCBudWxsX3Rlcm0pOworCSAgICAqKHArKykgPSBzdGFydC0+b3B0OworCSAgICAqKHArKykgPSBsZW47CisJICAgIHAgKz0gbGVuOworCSAgfQorICAgICAgKnAgPSBPUFRJT05fRU5EOworICAgIH0KKworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBweGVfbWlzYyhzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHVuc2lnbmVkIGNoYXIgKmVuZCwgdW5zaWduZWQgY2hhciAqdXVpZCkKK3sKKyAgdW5zaWduZWQgY2hhciAqcDsKKworICBvcHRpb25fcHV0X3N0cmluZyhtZXNzLCBlbmQsIE9QVElPTl9WRU5ET1JfSUQsICJQWEVDbGllbnQiLCAwKTsKKyAgaWYgKHV1aWQgJiYgKHAgPSBmcmVlX3NwYWNlKG1lc3MsIGVuZCwgT1BUSU9OX1BYRV9VVUlELCAxNykpKQorICAgIG1lbWNweShwLCB1dWlkLCAxNyk7Cit9CisKK3N0YXRpYyBpbnQgcHJ1bmVfdmVuZG9yX29wdHMoc3RydWN0IGRoY3BfbmV0aWQgKm5ldGlkKQoreworICBpbnQgZm9yY2UgPSAwOworICBzdHJ1Y3QgZGhjcF9vcHQgKm9wdDsKKworICAvKiBwcnVuZSB2ZW5kb3ItZW5jYXBzdWxhdGVkIG9wdGlvbnMgYmFzZWQgb24gbmV0aWQsIGFuZCBsb29rIGlmIHdlJ3JlIGZvcmNpbmcgdGhlbSB0byBiZSBzZW50ICovCisgIGZvciAob3B0ID0gZGFlbW9uLT5kaGNwX29wdHM7IG9wdDsgb3B0ID0gb3B0LT5uZXh0KQorICAgIGlmIChvcHQtPmZsYWdzICYgREhPUFRfVkVORE9SX01BVENIKQorICAgICAgeworCWlmICghbWF0Y2hfbmV0aWQob3B0LT5uZXRpZCwgbmV0aWQsIDEpKQorCSAgb3B0LT5mbGFncyAmPSB+REhPUFRfVkVORE9SX01BVENIOworCWVsc2UgaWYgKG9wdC0+ZmxhZ3MgJiBESE9QVF9GT1JDRSkKKwkgIGZvcmNlID0gMTsKKyAgICAgIH0KKyAgcmV0dXJuIGZvcmNlOworfQorCitzdGF0aWMgc3RydWN0IGRoY3Bfb3B0ICpweGVfb3B0cyhpbnQgcHhlX2FyY2gsIHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZCwgc3RydWN0IGluX2FkZHIgbG9jYWwsIHRpbWVfdCBub3cpCit7CisjZGVmaW5lIE5VTV9PUFRTIDQgIAorCisgIHVuc2lnbmVkICBjaGFyICpwLCAqcTsKKyAgc3RydWN0IHB4ZV9zZXJ2aWNlICpzZXJ2aWNlOworICBzdGF0aWMgc3RydWN0IGRoY3Bfb3B0ICpvLCAqcmV0OworICBpbnQgaSwgaiA9IE5VTV9PUFRTIC0gMTsKKyAgc3RydWN0IGluX2FkZHIgYm9vdF9zZXJ2ZXI7CisgIAorICAvKiBXZSBwYXNzIGJhY2sgcmVmZXJlbmNlcyB0byB0aGVzZSwgaGVuY2UgdGhleSBhcmUgZGVjbGFyZWQgc3RhdGljICovCisgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGRpc2NvdmVyeV9jb250cm9sOworICBzdGF0aWMgdW5zaWduZWQgY2hhciBmYWtlX3Byb21wdFtdID0geyAwLCAnUCcsICdYJywgJ0UnIH07IAorICBzdGF0aWMgc3RydWN0IGRoY3Bfb3B0ICpmYWtlX29wdHMgPSBOVUxMOworICAKKyAgLyogRGlzYWJsZSBtdWx0aWNhc3QsIHNpbmNlIHdlIGRvbid0IHN1cHBvcnQgaXQsIGFuZCBicm9hZGNhc3QKKyAgICAgdW5sZXNzIHdlIG5lZWQgaXQgKi8KKyAgZGlzY292ZXJ5X2NvbnRyb2wgPSAzOworICAKKyAgcmV0ID0gZGFlbW9uLT5kaGNwX29wdHM7CisgIAorICBpZiAoIWZha2Vfb3B0cyAmJiAhKGZha2Vfb3B0cyA9IHdoaW5lX21hbGxvYyhOVU1fT1BUUyAqIHNpemVvZihzdHJ1Y3QgZGhjcF9vcHQpKSkpCisgICAgcmV0dXJuIHJldDsKKworICBmb3IgKGkgPSAwOyBpIDwgTlVNX09QVFM7IGkrKykKKyAgICB7CisgICAgICBmYWtlX29wdHNbaV0uZmxhZ3MgPSBESE9QVF9WRU5ET1JfTUFUQ0g7CisgICAgICBmYWtlX29wdHNbaV0ubmV0aWQgPSBOVUxMOworICAgICAgZmFrZV9vcHRzW2ldLm5leHQgPSBpID09IChOVU1fT1BUUyAtIDEpID8gcmV0IDogJmZha2Vfb3B0c1tpKzFdOworICAgIH0KKyAgCisgIC8qIGNyZWF0ZSB0aGUgZGF0YSBmb3IgdGhlIFBYRV9NRU5VIGFuZCBQWEVfU0VSVkVSUyBvcHRpb25zLiAqLworICBwID0gKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPmRoY3BfYnVmZjsKKyAgcSA9ICh1bnNpZ25lZCBjaGFyICopZGFlbW9uLT5kaGNwX2J1ZmYzOworCisgIGZvciAoaSA9IDAsIHNlcnZpY2UgPSBkYWVtb24tPnB4ZV9zZXJ2aWNlczsgc2VydmljZTsgc2VydmljZSA9IHNlcnZpY2UtPm5leHQpCisgICAgaWYgKHB4ZV9hcmNoID09IHNlcnZpY2UtPkNTQSAmJiBtYXRjaF9uZXRpZChzZXJ2aWNlLT5uZXRpZCwgbmV0aWQsIDEpKQorICAgICAgeworCXNpemVfdCBsZW4gPSBzdHJsZW4oc2VydmljZS0+bWVudSk7CisJLyogb3B0IDQzIG1heCBzaXplIGlzIDI1NS4gZW5jYXBzdWxhdGVkIG9wdGlvbiBoYXMgdHlwZSBhbmQgbGVuZ3RoCisJICAgYnl0ZXMsIHNvIGl0cyBtYXggc2l6ZSBpcyAyNTMuICovCisJaWYgKHAgLSAodW5zaWduZWQgY2hhciAqKWRhZW1vbi0+ZGhjcF9idWZmICsgbGVuICsgMyA8IDI1MykKKwkgIHsKKwkgICAgKihwKyspID0gc2VydmljZS0+dHlwZSA+PiA4OworCSAgICAqKHArKykgPSBzZXJ2aWNlLT50eXBlOworCSAgICAqKHArKykgPSBsZW47CisJICAgIG1lbWNweShwLCBzZXJ2aWNlLT5tZW51LCBsZW4pOworCSAgICBwICs9IGxlbjsKKwkgICAgaSsrOworCSAgfQorCWVsc2UKKwkgIHsKKwkgIHRvb2JpZzoKKwkgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfRVJSLCBfKCJQWEUgbWVudSB0b28gbGFyZ2UiKSk7CisJICAgIHJldHVybiBkYWVtb24tPmRoY3Bfb3B0czsKKwkgIH0KKwkKKwlib290X3NlcnZlciA9IHNlcnZpY2UtPmJhc2VuYW1lID8gbG9jYWwgOiAKKwkgIChzZXJ2aWNlLT5zbmFtZSA/IGFfcmVjb3JkX2Zyb21faG9zdHMoc2VydmljZS0+c25hbWUsIG5vdykgOiBzZXJ2aWNlLT5zZXJ2ZXIpOworCQorCWlmIChib290X3NlcnZlci5zX2FkZHIgIT0gMCkKKwkgIHsKKwkgICAgaWYgKHEgLSAodW5zaWduZWQgY2hhciAqKWRhZW1vbi0+ZGhjcF9idWZmMyArIDMgKyBJTkFERFJTWiA+PSAyNTMpCisJICAgICAgZ290byB0b29iaWc7CisJICAgIAorCSAgICAvKiBCb290IHNlcnZpY2Ugd2l0aCBrbm93biBhZGRyZXNzIC0gZ2l2ZSBpdCAqLworCSAgICAqKHErKykgPSBzZXJ2aWNlLT50eXBlID4+IDg7CisJICAgICoocSsrKSA9IHNlcnZpY2UtPnR5cGU7CisJICAgICoocSsrKSA9IDE7CisJICAgIC8qIGRlc3QgbWlzYWxpZ25lZCAqLworCSAgICBtZW1jcHkocSwgJmJvb3Rfc2VydmVyLnNfYWRkciwgSU5BRERSU1opOworCSAgICBxICs9IElOQUREUlNaOworCSAgfQorCWVsc2UgaWYgKHNlcnZpY2UtPnR5cGUgIT0gMCkKKwkgIC8qIFdlIGRvbid0IGtub3cgdGhlIHNlcnZlciBmb3IgYSBzZXJ2aWNlIHR5cGUsIHNvIHdlJ2xsCisJICAgICBhbGxvdyB0aGUgY2xpZW50IHRvIGJyb2FkY2FzdCBmb3IgaXQgKi8KKwkgIGRpc2NvdmVyeV9jb250cm9sID0gMjsKKyAgICAgIH0KKworICAvKiBpZiBubyBwcm9tcHQsIHdhaXQgZm9yZXZlciBpZiB0aGVyZSdzIGEgY2hvaWNlICovCisgIGZha2VfcHJvbXB0WzBdID0gKGkgPiAxKSA/IDI1NSA6IDA7CisgIAorICBpZiAoaSA9PSAwKQorICAgIGRpc2NvdmVyeV9jb250cm9sID0gODsgLyogbm8gbWVudSAtIGp1c3QgdXNlIHVzZSBtZXNzLT5maWxlbmFtZSAqLworICBlbHNlCisgICAgeworICAgICAgcmV0ID0gJmZha2Vfb3B0c1tqLS1dOworICAgICAgcmV0LT5sZW4gPSBwIC0gKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPmRoY3BfYnVmZjsKKyAgICAgIHJldC0+dmFsID0gKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPmRoY3BfYnVmZjsKKyAgICAgIHJldC0+b3B0ID0gU1VCT1BUX1BYRV9NRU5VOworCisgICAgICBpZiAocSAtICh1bnNpZ25lZCBjaGFyICopZGFlbW9uLT5kaGNwX2J1ZmYzICE9IDApCisJeworCSAgcmV0ID0gJmZha2Vfb3B0c1tqLS1dOyAKKwkgIHJldC0+bGVuID0gcSAtICh1bnNpZ25lZCBjaGFyICopZGFlbW9uLT5kaGNwX2J1ZmYzOworCSAgcmV0LT52YWwgPSAodW5zaWduZWQgY2hhciAqKWRhZW1vbi0+ZGhjcF9idWZmMzsKKwkgIHJldC0+b3B0ID0gU1VCT1BUX1BYRV9TRVJWRVJTOworCX0KKyAgICB9CisKKyAgZm9yIChvID0gZGFlbW9uLT5kaGNwX29wdHM7IG87IG8gPSBvLT5uZXh0KQorICAgIGlmICgoby0+ZmxhZ3MgJiBESE9QVF9WRU5ET1JfTUFUQ0gpICYmIG8tPm9wdCA9PSBTVUJPUFRfUFhFX01FTlVfUFJPTVBUKQorICAgICAgYnJlYWs7CisgIAorICBpZiAoIW8pCisgICAgeworICAgICAgcmV0ID0gJmZha2Vfb3B0c1tqLS1dOyAKKyAgICAgIHJldC0+bGVuID0gc2l6ZW9mKGZha2VfcHJvbXB0KTsKKyAgICAgIHJldC0+dmFsID0gZmFrZV9wcm9tcHQ7CisgICAgICByZXQtPm9wdCA9IFNVQk9QVF9QWEVfTUVOVV9QUk9NUFQ7CisgICAgfQorICAKKyAgcmV0ID0gJmZha2Vfb3B0c1tqLS1dOyAKKyAgcmV0LT5sZW4gPSAxOworICByZXQtPm9wdCA9IFNVQk9QVF9QWEVfRElTQ09WRVJZOworICByZXQtPnZhbD0gJmRpc2NvdmVyeV9jb250cm9sOworIAorICByZXR1cm4gcmV0OworfQorICAKK3N0YXRpYyB2b2lkIGNsZWFyX3BhY2tldChzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsIHVuc2lnbmVkIGNoYXIgKmVuZCkKK3sKKyAgbWVtc2V0KG1lc3MtPnNuYW1lLCAwLCBzaXplb2YobWVzcy0+c25hbWUpKTsKKyAgbWVtc2V0KG1lc3MtPmZpbGUsIDAsIHNpemVvZihtZXNzLT5maWxlKSk7CisgIG1lbXNldCgmbWVzcy0+b3B0aW9uc1swXSArIHNpemVvZih1MzIpLCAwLCBlbmQgLSAoJm1lc3MtPm9wdGlvbnNbMF0gKyBzaXplb2YodTMyKSkpOworICBtZXNzLT5zaWFkZHIuc19hZGRyID0gMDsKK30KKworc3RydWN0IGRoY3BfYm9vdCAqZmluZF9ib290KHN0cnVjdCBkaGNwX25ldGlkICpuZXRpZCkKK3sKKyAgc3RydWN0IGRoY3BfYm9vdCAqYm9vdDsKKworICAvKiBkZWNpZGUgd2hpY2ggZGhjcC1ib290IG9wdGlvbiB3ZSdyZSB1c2luZyAqLworICBmb3IgKGJvb3QgPSBkYWVtb24tPmJvb3RfY29uZmlnOyBib290OyBib290ID0gYm9vdC0+bmV4dCkKKyAgICBpZiAobWF0Y2hfbmV0aWQoYm9vdC0+bmV0aWQsIG5ldGlkLCAwKSkKKyAgICAgIGJyZWFrOworICBpZiAoIWJvb3QpCisgICAgLyogTm8gbWF0Y2gsIGxvb2sgZm9yIG9uZSB3aXRob3V0IGEgbmV0aWQgKi8KKyAgICBmb3IgKGJvb3QgPSBkYWVtb24tPmJvb3RfY29uZmlnOyBib290OyBib290ID0gYm9vdC0+bmV4dCkKKyAgICAgIGlmIChtYXRjaF9uZXRpZChib290LT5uZXRpZCwgbmV0aWQsIDEpKQorCWJyZWFrOworCisgIHJldHVybiBib290OworfQorCitzdGF0aWMgdm9pZCBkb19vcHRpb25zKHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsCisJCSAgICAgICBzdHJ1Y3QgZGhjcF9wYWNrZXQgKm1lc3MsCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICplbmQsIAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqcmVxX29wdGlvbnMsCisJCSAgICAgICBjaGFyICpob3N0bmFtZSwgCisJCSAgICAgICBjaGFyICpkb21haW4sCisJCSAgICAgICBzdHJ1Y3QgZGhjcF9uZXRpZCAqbmV0aWQsCisJCSAgICAgICBzdHJ1Y3QgaW5fYWRkciBzdWJuZXRfYWRkciwKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgZnFkbl9mbGFncywKKwkJICAgICAgIGludCBudWxsX3Rlcm0sIGludCBweGVfYXJjaCwKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKnV1aWQsCisJCSAgICAgICBpbnQgdmVuZG9yX2NsYXNzX2xlbiwKKwkJICAgICAgIHRpbWVfdCBub3cpCit7CisgIHN0cnVjdCBkaGNwX29wdCAqb3B0LCAqY29uZmlnX29wdHMgPSBkYWVtb24tPmRoY3Bfb3B0czsKKyAgc3RydWN0IGRoY3BfYm9vdCAqYm9vdDsKKyAgdW5zaWduZWQgY2hhciAqcDsKKyAgaW50IGksIGxlbiwgZm9yY2VfZW5jYXAgPSAwOworICB1bnNpZ25lZCBjaGFyIGYwID0gMCwgczAgPSAwOworICBpbnQgZG9uZV9maWxlID0gMCwgZG9uZV9zZXJ2ZXIgPSAwOworICBpbnQgZG9uZV92ZW5kb3JfY2xhc3MgPSAwOworICBzdHJ1Y3QgZGhjcF9uZXRpZCAqdGFnaWY7CisgIHN0cnVjdCBkaGNwX25ldGlkX2xpc3QgKmlkX2xpc3Q7CisKKyAgLyogZmlsdGVyIG9wdGlvbnMgYmFzZWQgb24gdGFncywgdGhvc2Ugd2Ugd2FudCBnZXQgREhPUFRfVEFHT0sgYml0IHNldCAqLworICBpZiAoY29udGV4dCkKKyAgICBjb250ZXh0LT5uZXRpZC5uZXh0ID0gTlVMTDsKKyAgdGFnaWYgPSBvcHRpb25fZmlsdGVyKG5ldGlkLCBjb250ZXh0ICYmIGNvbnRleHQtPm5ldGlkLm5ldCA/ICZjb250ZXh0LT5uZXRpZCA6IE5VTEwsIGNvbmZpZ19vcHRzKTsKKwkKKyAgLyogbG9nZ2luZyAqLworICBpZiAob3B0aW9uX2Jvb2woT1BUX0xPR19PUFRTKSAmJiByZXFfb3B0aW9ucykKKyAgICB7CisgICAgICBjaGFyICpxID0gZGFlbW9uLT5uYW1lYnVmZjsKKyAgICAgIGZvciAoaSA9IDA7IHJlcV9vcHRpb25zW2ldICE9IE9QVElPTl9FTkQ7IGkrKykKKwl7CisJICBjaGFyICpzID0gb3B0aW9uX3N0cmluZyhBRl9JTkVULCByZXFfb3B0aW9uc1tpXSwgTlVMTCwgMCwgTlVMTCwgMCk7CisJICBxICs9IHNucHJpbnRmKHEsIE1BWEROQU1FIC0gKHEgLSBkYWVtb24tPm5hbWVidWZmKSwKKwkJCSIlZCVzJXMlcyIsIAorCQkJcmVxX29wdGlvbnNbaV0sCisJCQlzdHJsZW4ocykgIT0gMCA/ICI6IiA6ICIiLAorCQkJcywgCisJCQlyZXFfb3B0aW9uc1tpKzFdID09IE9QVElPTl9FTkQgPyAiIiA6ICIsICIpOworCSAgaWYgKHJlcV9vcHRpb25zW2krMV0gPT0gT1BUSU9OX0VORCB8fCAocSAtIGRhZW1vbi0+bmFtZWJ1ZmYpID4gNDApCisJICAgIHsKKwkgICAgICBxID0gZGFlbW9uLT5uYW1lYnVmZjsKKwkgICAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCIldSByZXF1ZXN0ZWQgb3B0aW9uczogJXMiKSwgbnRvaGwobWVzcy0+eGlkKSwgZGFlbW9uLT5uYW1lYnVmZik7CisJICAgIH0KKwl9CisgICAgfQorICAgICAgCisgIGZvciAoaWRfbGlzdCA9IGRhZW1vbi0+Zm9yY2VfYnJvYWRjYXN0OyBpZF9saXN0OyBpZF9saXN0ID0gaWRfbGlzdC0+bmV4dCkKKyAgICBpZiAoKCFpZF9saXN0LT5saXN0KSB8fCBtYXRjaF9uZXRpZChpZF9saXN0LT5saXN0LCBuZXRpZCwgMCkpCisgICAgICBicmVhazsKKyAgaWYgKGlkX2xpc3QpCisgICAgbWVzcy0+ZmxhZ3MgfD0gaHRvbnMoMHg4MDAwKTsgLyogZm9yY2UgYnJvYWRjYXN0ICovCisgIAorICBpZiAoY29udGV4dCkKKyAgICBtZXNzLT5zaWFkZHIgPSBjb250ZXh0LT5sb2NhbDsKKyAgCisgIC8qIFNlZSBpZiB3ZSBjYW4gc2VuZCB0aGUgYm9vdCBzdHVmZiBhcyBvcHRpb25zLgorICAgICBUbyBkbyB0aGlzIHdlIG5lZWQgYSByZXF1ZXN0ZWQgb3B0aW9uIGxpc3QsIEJPT1RQCisgICAgIGFuZCB2ZXJ5IG9sZCBESENQIGNsaWVudHMgd29uJ3QgaGF2ZSB0aGlzLCB3ZSBhbHNvIAorICAgICBwcm92aWRlIGFuIG1hbnVhbCBvcHRpb24gdG8gZGlzYWJsZSBpdC4KKyAgICAgU29tZSBQWEUgUk9NcyBoYXZlIGJ1Z3MgKHN1cnByaXNlISkgYW5kIG5lZWQgemVyby10ZXJtaW5hdGVkIAorICAgICBuYW1lcywgc28gd2UgYWx3YXlzIHNlbmQgdGhvc2UuICAqLworICBpZiAoKGJvb3QgPSBmaW5kX2Jvb3QodGFnaWYpKSkKKyAgICB7CisgICAgICBpZiAoYm9vdC0+c25hbWUpCisJewkgIAorCSAgaWYgKCFvcHRpb25fYm9vbChPUFRfTk9fT1ZFUlJJREUpICYmCisJICAgICAgcmVxX29wdGlvbnMgJiYgCisJICAgICAgaW5fbGlzdChyZXFfb3B0aW9ucywgT1BUSU9OX1NOQU1FKSkKKwkgICAgb3B0aW9uX3B1dF9zdHJpbmcobWVzcywgZW5kLCBPUFRJT05fU05BTUUsIGJvb3QtPnNuYW1lLCAxKTsKKwkgIGVsc2UKKwkgICAgc3RybmNweSgoY2hhciAqKW1lc3MtPnNuYW1lLCBib290LT5zbmFtZSwgc2l6ZW9mKG1lc3MtPnNuYW1lKS0xKTsKKwl9CisgICAgICAKKyAgICAgIGlmIChib290LT5maWxlKQorCXsKKwkgIGlmICghb3B0aW9uX2Jvb2woT1BUX05PX09WRVJSSURFKSAmJgorCSAgICAgIHJlcV9vcHRpb25zICYmIAorCSAgICAgIGluX2xpc3QocmVxX29wdGlvbnMsIE9QVElPTl9GSUxFTkFNRSkpCisJICAgIG9wdGlvbl9wdXRfc3RyaW5nKG1lc3MsIGVuZCwgT1BUSU9OX0ZJTEVOQU1FLCBib290LT5maWxlLCAxKTsKKwkgIGVsc2UKKwkgICAgc3RybmNweSgoY2hhciAqKW1lc3MtPmZpbGUsIGJvb3QtPmZpbGUsIHNpemVvZihtZXNzLT5maWxlKS0xKTsKKwl9CisgICAgICAKKyAgICAgIGlmIChib290LT5uZXh0X3NlcnZlci5zX2FkZHIpIAorCW1lc3MtPnNpYWRkciA9IGJvb3QtPm5leHRfc2VydmVyOworICAgICAgZWxzZSBpZiAoYm9vdC0+dGZ0cF9zbmFtZSkKKwltZXNzLT5zaWFkZHIgPSBhX3JlY29yZF9mcm9tX2hvc3RzKGJvb3QtPnRmdHBfc25hbWUsIG5vdyk7CisgICAgfQorICBlbHNlCisgICAgLyogVXNlIHRoZSB2YWx1ZXMgb2YgdGhlIHJlbGV2YW50IG9wdGlvbnMgaWYgbm8gZGhjcC1ib290IGdpdmVuIGFuZAorICAgICAgIHRoZXkncmUgbm90IGV4cGxpY2l0bHkgYXNrZWQgZm9yIGFzIG9wdGlvbnMuIE9QVElPTl9FTkQgaXMgdXNlZAorICAgICAgIGFzIGFuIGludGVybmFsIHdheSB0byBzcGVjaWZ5IHNpYWRkciB3aXRob3V0IHVzaW5nIGRoY3AtYm9vdCwgZm9yIHVzZSBpbgorICAgICAgIGRoY3Atb3B0c2ZpbGUuICovCisgICAgeworICAgICAgaWYgKCghcmVxX29wdGlvbnMgfHwgIWluX2xpc3QocmVxX29wdGlvbnMsIE9QVElPTl9GSUxFTkFNRSkpICYmCisJICAob3B0ID0gb3B0aW9uX2ZpbmQyKE9QVElPTl9GSUxFTkFNRSkpICYmICEob3B0LT5mbGFncyAmIERIT1BUX0ZPUkNFKSkKKwl7CisJICBzdHJuY3B5KChjaGFyICopbWVzcy0+ZmlsZSwgKGNoYXIgKilvcHQtPnZhbCwgc2l6ZW9mKG1lc3MtPmZpbGUpLTEpOworCSAgZG9uZV9maWxlID0gMTsKKwl9CisgICAgICAKKyAgICAgIGlmICgoIXJlcV9vcHRpb25zIHx8ICFpbl9saXN0KHJlcV9vcHRpb25zLCBPUFRJT05fU05BTUUpKSAmJgorCSAgKG9wdCA9IG9wdGlvbl9maW5kMihPUFRJT05fU05BTUUpKSAmJiAhKG9wdC0+ZmxhZ3MgJiBESE9QVF9GT1JDRSkpCisJeworCSAgc3RybmNweSgoY2hhciAqKW1lc3MtPnNuYW1lLCAoY2hhciAqKW9wdC0+dmFsLCBzaXplb2YobWVzcy0+c25hbWUpLTEpOworCSAgZG9uZV9zZXJ2ZXIgPSAxOworCX0KKyAgICAgIAorICAgICAgaWYgKChvcHQgPSBvcHRpb25fZmluZDIoT1BUSU9OX0VORCkpKQorCW1lc3MtPnNpYWRkci5zX2FkZHIgPSAoKHN0cnVjdCBpbl9hZGRyICopb3B0LT52YWwpLT5zX2FkZHI7CQorICAgIH0KKyAgICAgICAgCisgIC8qIFdlIGRvbid0IHdhbnQgdG8gZG8gb3B0aW9uLW92ZXJsb2FkIGZvciBCT09UUCwgc28gbWFrZSB0aGUgZmlsZSBhbmQgc25hbWUKKyAgICAgZmllbGRzIGxvb2sgbGlrZSB0aGV5IGFyZSBpbiB1c2UsIGV2ZW4gd2hlbiB0aGV5IGFyZW4ndC4gVGhpcyBnZXRzIHJlc3RvcmVkCisgICAgIGF0IHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbi4gKi8KKworICBpZiAoIXJlcV9vcHRpb25zIHx8IG9wdGlvbl9ib29sKE9QVF9OT19PVkVSUklERSkpCisgICAgeworICAgICAgZjAgPSBtZXNzLT5maWxlWzBdOworICAgICAgbWVzcy0+ZmlsZVswXSA9IDE7CisgICAgICBzMCA9IG1lc3MtPnNuYW1lWzBdOworICAgICAgbWVzcy0+c25hbWVbMF0gPSAxOworICAgIH0KKyAgICAgIAorICAvKiBBdCB0aGlzIHBvaW50LCBpZiBtZXNzLT5zbmFtZSBvciBtZXNzLT5maWxlIGFyZSB6ZXJvZWQsIHRoZXkgYXJlIGF2YWlsYWJsZQorICAgICBmb3Igb3B0aW9uIG92ZXJsb2FkLCByZXNlcnZlIHNwYWNlIGZvciB0aGUgb3ZlcmxvYWQgb3B0aW9uLiAqLworICBpZiAobWVzcy0+ZmlsZVswXSA9PSAwIHx8IG1lc3MtPnNuYW1lWzBdID09IDApCisgICAgZW5kIC09IDM7CisKKyAgLyogcmZjMzAxMSBzYXlzIHRoaXMgZG9lc24ndCBuZWVkIHRvIGJlIGluIHRoZSByZXF1ZXN0ZWQgb3B0aW9ucyBsaXN0LiAqLworICBpZiAoc3VibmV0X2FkZHIuc19hZGRyKQorICAgIG9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fU1VCTkVUX1NFTEVDVCwgSU5BRERSU1osIG50b2hsKHN1Ym5ldF9hZGRyLnNfYWRkcikpOworICAKKyAgLyogcmVwbGllcyB0byBESENQSU5GT1JNIG1heSBub3QgaGF2ZSBhIHZhbGlkIGNvbnRleHQgKi8KKyAgaWYgKGNvbnRleHQpCisgICAgeworICAgICAgaWYgKCFvcHRpb25fZmluZDIoT1BUSU9OX05FVE1BU0spKQorCW9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fTkVUTUFTSywgSU5BRERSU1osIG50b2hsKGNvbnRleHQtPm5ldG1hc2suc19hZGRyKSk7CisgIAorICAgICAgLyogTWF5IG5vdCBoYXZlIGEgImd1ZXNzZWQiIGJyb2FkY2FzdCBhZGRyZXNzIGlmIHdlIGdvdCBubyBwYWNrZXRzIHZpYSBhIHJlbGF5CisJIGZyb20gdGhpcyBuZXQgeWV0IChpZSBqdXN0IHVuaWNhc3QgcmVuZXdhbHMgYWZ0ZXIgYSByZXN0YXJ0ICovCisgICAgICBpZiAoY29udGV4dC0+YnJvYWRjYXN0LnNfYWRkciAmJgorCSAgIW9wdGlvbl9maW5kMihPUFRJT05fQlJPQURDQVNUKSkKKwlvcHRpb25fcHV0KG1lc3MsIGVuZCwgT1BUSU9OX0JST0FEQ0FTVCwgSU5BRERSU1osIG50b2hsKGNvbnRleHQtPmJyb2FkY2FzdC5zX2FkZHIpKTsKKyAgICAgIAorICAgICAgLyogU2FtZSBjb21tZW50cyBhcyBicm9hZGNhc3QgYXBwbHksIGFuZCBhbHNvIG1heSBub3QgYmUgYWJsZSB0byBnZXQgYSBzZW5zaWJsZQorCSBkZWZhdWx0IHdoZW4gdXNpbmcgc3VibmV0IHNlbGVjdC4gIFVzZXIgbXVzdCBjb25maWd1cmUgYnkgc3RlYW0gaW4gdGhhdCBjYXNlLiAqLworICAgICAgaWYgKGNvbnRleHQtPnJvdXRlci5zX2FkZHIgJiYKKwkgIGluX2xpc3QocmVxX29wdGlvbnMsIE9QVElPTl9ST1VURVIpICYmCisJICAhb3B0aW9uX2ZpbmQyKE9QVElPTl9ST1VURVIpKQorCW9wdGlvbl9wdXQobWVzcywgZW5kLCBPUFRJT05fUk9VVEVSLCBJTkFERFJTWiwgbnRvaGwoY29udGV4dC0+cm91dGVyLnNfYWRkcikpOworICAgICAgCisgICAgICBpZiAoZGFlbW9uLT5wb3J0ID09IE5BTUVTRVJWRVJfUE9SVCAmJgorCSAgaW5fbGlzdChyZXFfb3B0aW9ucywgT1BUSU9OX0ROU1NFUlZFUikgJiYKKwkgICFvcHRpb25fZmluZDIoT1BUSU9OX0ROU1NFUlZFUikpCisJb3B0aW9uX3B1dChtZXNzLCBlbmQsIE9QVElPTl9ETlNTRVJWRVIsIElOQUREUlNaLCBudG9obChjb250ZXh0LT5sb2NhbC5zX2FkZHIpKTsKKyAgICB9CisKKyAgaWYgKGRvbWFpbiAmJiBpbl9saXN0KHJlcV9vcHRpb25zLCBPUFRJT05fRE9NQUlOTkFNRSkgJiYgCisgICAgICAhb3B0aW9uX2ZpbmQyKE9QVElPTl9ET01BSU5OQU1FKSkKKyAgICBvcHRpb25fcHV0X3N0cmluZyhtZXNzLCBlbmQsIE9QVElPTl9ET01BSU5OQU1FLCBkb21haW4sIG51bGxfdGVybSk7CisgCisgIC8qIE5vdGUgdGhhdCB3ZSBpZ25vcmUgYXR0ZW1wdHMgdG8gc2V0IHRoZSBmcWRuIHVzaW5nIC0tZGhjLW9wdGlvbj04MSw8bmFtZT4gKi8KKyAgaWYgKGhvc3RuYW1lKQorICAgIHsKKyAgICAgIGlmIChpbl9saXN0KHJlcV9vcHRpb25zLCBPUFRJT05fSE9TVE5BTUUpICYmCisJICAhb3B0aW9uX2ZpbmQyKE9QVElPTl9IT1NUTkFNRSkpCisJb3B0aW9uX3B1dF9zdHJpbmcobWVzcywgZW5kLCBPUFRJT05fSE9TVE5BTUUsIGhvc3RuYW1lLCBudWxsX3Rlcm0pOworICAgICAgCisgICAgICBpZiAoZnFkbl9mbGFncyAhPSAwKQorCXsKKwkgIGxlbiA9IHN0cmxlbihob3N0bmFtZSkgKyAzOworCSAgCisJICBpZiAoZnFkbl9mbGFncyAmIDB4MDQpCisJICAgIGxlbiArPSAyOworCSAgZWxzZSBpZiAobnVsbF90ZXJtKQorCSAgICBsZW4rKzsKKworCSAgaWYgKGRvbWFpbikKKwkgICAgbGVuICs9IHN0cmxlbihkb21haW4pICsgMTsKKwkgIGVsc2UgaWYgKGZxZG5fZmxhZ3MgJiAweDA0KQorCSAgICBsZW4tLTsKKworCSAgaWYgKChwID0gZnJlZV9zcGFjZShtZXNzLCBlbmQsIE9QVElPTl9DTElFTlRfRlFETiwgbGVuKSkpCisJICAgIHsKKwkgICAgICAqKHArKykgPSBmcWRuX2ZsYWdzICYgMHgwZjsgLyogTUJaIGJpdHMgdG8gemVybyAqLyAKKwkgICAgICAqKHArKykgPSAyNTU7CisJICAgICAgKihwKyspID0gMjU1OworCisJICAgICAgaWYgKGZxZG5fZmxhZ3MgJiAweDA0KQorCQl7CisJCSAgcCA9IGRvX3JmYzEwMzVfbmFtZShwLCBob3N0bmFtZSk7CisJCSAgaWYgKGRvbWFpbikKKwkJICAgIHsKKwkJICAgICAgcCA9IGRvX3JmYzEwMzVfbmFtZShwLCBkb21haW4pOworCQkgICAgICAqcCsrID0gMDsKKwkJICAgIH0KKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIG1lbWNweShwLCBob3N0bmFtZSwgc3RybGVuKGhvc3RuYW1lKSk7CisJCSAgcCArPSBzdHJsZW4oaG9zdG5hbWUpOworCQkgIGlmIChkb21haW4pCisJCSAgICB7CisJCSAgICAgICoocCsrKSA9ICcuJzsKKwkJICAgICAgbWVtY3B5KHAsIGRvbWFpbiwgc3RybGVuKGRvbWFpbikpOworCQkgICAgICBwICs9IHN0cmxlbihkb21haW4pOworCQkgICAgfQorCQkgIGlmIChudWxsX3Rlcm0pCisJCSAgICAqKHArKykgPSAwOworCQl9CisJICAgIH0KKwl9CisgICAgfSAgICAgIAorCisgIGZvciAob3B0ID0gY29uZmlnX29wdHM7IG9wdDsgb3B0ID0gb3B0LT5uZXh0KQorICAgIHsKKyAgICAgIGludCBvcHRubyA9IG9wdC0+b3B0OworCisgICAgICAvKiBuZXRpZHMgbWF0Y2ggYW5kIG5vdCBlbmNhcHN1bGF0ZWQ/ICovCisgICAgICBpZiAoIShvcHQtPmZsYWdzICYgREhPUFRfVEFHT0spKQorCWNvbnRpbnVlOworICAgICAgCisgICAgICAvKiB3YXMgaXQgYXNrZWQgZm9yLCBvciBhcmUgd2Ugc2VuZGluZyBpdCBhbnl3YXk/ICovCisgICAgICBpZiAoIShvcHQtPmZsYWdzICYgREhPUFRfRk9SQ0UpICYmICFpbl9saXN0KHJlcV9vcHRpb25zLCBvcHRubykpCisJY29udGludWU7CisgICAgICAKKyAgICAgIC8qIHByb2hpYml0IHNvbWUgdXNlZC1pbnRlcm5hbGx5IG9wdGlvbnMgKi8KKyAgICAgIGlmIChvcHRubyA9PSBPUFRJT05fQ0xJRU5UX0ZRRE4gfHwKKwkgIG9wdG5vID09IE9QVElPTl9NQVhNRVNTQUdFIHx8CisJICBvcHRubyA9PSBPUFRJT05fT1ZFUkxPQUQgfHwKKwkgIG9wdG5vID09IE9QVElPTl9QQUQgfHwKKwkgIG9wdG5vID09IE9QVElPTl9FTkQpCisJY29udGludWU7CisKKyAgICAgIGlmIChvcHRubyA9PSBPUFRJT05fU05BTUUgJiYgZG9uZV9zZXJ2ZXIpCisJY29udGludWU7CisKKyAgICAgIGlmIChvcHRubyA9PSBPUFRJT05fRklMRU5BTUUgJiYgZG9uZV9maWxlKQorCWNvbnRpbnVlOworICAgICAgCisgICAgICAvKiBGb3IgdGhlIG9wdGlvbnMgd2UgaGF2ZSBkZWZhdWx0IHZhbHVlcyBvbgorCSBkaGMtb3B0aW9uPTxvcHRpb25ubz4gbWVhbnMgImRvbid0IGluY2x1ZGUgdGhpcyBvcHRpb24iCisJIG5vdCAiaW5jbHVkZSBhIHplcm8tbGVuZ3RoIG9wdGlvbiIgKi8KKyAgICAgIGlmIChvcHQtPmxlbiA9PSAwICYmIAorCSAgKG9wdG5vID09IE9QVElPTl9ORVRNQVNLIHx8CisJICAgb3B0bm8gPT0gT1BUSU9OX0JST0FEQ0FTVCB8fAorCSAgIG9wdG5vID09IE9QVElPTl9ST1VURVIgfHwKKwkgICBvcHRubyA9PSBPUFRJT05fRE5TU0VSVkVSIHx8IAorCSAgIG9wdG5vID09IE9QVElPTl9ET01BSU5OQU1FIHx8CisJICAgb3B0bm8gPT0gT1BUSU9OX0hPU1ROQU1FKSkKKwljb250aW51ZTsKKworICAgICAgLyogdmVuZG9yLWNsYXNzIGNvbWVzIGZyb20gZWxzZXdoZXJlIGZvciBQWEUgKi8KKyAgICAgIGlmIChweGVfYXJjaCAhPSAtMSAmJiBvcHRubyA9PSBPUFRJT05fVkVORE9SX0lEKQorCWNvbnRpbnVlOworICAgICAgCisgICAgICAvKiBhbHdheXMgZm9yY2UgbnVsbC10ZXJtIGZvciBmaWxlbmFtZSBhbmQgc2VydmVybmFtZSAtIGJ1Z2d5IFBYRSBhZ2Fpbi4gKi8KKyAgICAgIGxlbiA9IGRvX29wdChvcHQsIE5VTEwsIGNvbnRleHQsIAorCQkgICAob3B0bm8gPT0gT1BUSU9OX1NOQU1FIHx8IG9wdG5vID09IE9QVElPTl9GSUxFTkFNRSkgPyAxIDogbnVsbF90ZXJtKTsKKworICAgICAgaWYgKChwID0gZnJlZV9zcGFjZShtZXNzLCBlbmQsIG9wdG5vLCBsZW4pKSkKKwl7CisJICBkb19vcHQob3B0LCBwLCBjb250ZXh0LCAKKwkJIChvcHRubyA9PSBPUFRJT05fU05BTUUgfHwgb3B0bm8gPT0gT1BUSU9OX0ZJTEVOQU1FKSA/IDEgOiBudWxsX3Rlcm0pOworCSAgCisJICAvKiBJZiB3ZSBzZW5kIGEgdmVuZG9yLWlkLCByZXZpc2l0IHdoaWNoIHZlbmRvci1vcHMgd2UgY29uc2lkZXIgCisJICAgICBpdCBhcHByb3ByaWF0ZSB0byBzZW5kLiAqLworCSAgaWYgKG9wdG5vID09IE9QVElPTl9WRU5ET1JfSUQpCisJICAgIHsKKwkgICAgICBtYXRjaF92ZW5kb3Jfb3B0cyhwIC0gMiwgY29uZmlnX29wdHMpOworCSAgICAgIGRvbmVfdmVuZG9yX2NsYXNzID0gMTsKKwkgICAgfQorCX0gIAorICAgIH0KKworICAvKiBOb3cgc2VuZCBvcHRpb25zIHRvIGJlIGVuY2Fwc3VsYXRlZCBpbiBhcmJpdHJhcnkgb3B0aW9ucywgCisgICAgIGVnIGRoY3Atb3B0aW9uPWVuY2FwOjE3MiwxNywuLi4uLi4uCisgICAgIEFsc28gaGFuZGxlIHZlbmRvci1pZGVudGlmeWluZyB2ZW5kb3ItZW5jYXBzdWxhdGVkIG9wdGlvbnMsCisgICAgIGRoY3Atb3B0aW9uID0gdmktZW5jYXA6MTMsMTcsLi4uLi4uLgorICAgICBUaGUgbWF5IGJlIG1vcmUgdGhhdCBvbmUgIm91dGVyIiB0byBkbywgc28gZ3JvdXAKKyAgICAgYWxsIHRoZSBvcHRpb25zIHdoaWNoIG1hdGNoIGVhY2ggb3V0ZXIgaW4gdHVybi4gKi8KKyAgZm9yIChvcHQgPSBjb25maWdfb3B0czsgb3B0OyBvcHQgPSBvcHQtPm5leHQpCisgICAgb3B0LT5mbGFncyAmPSB+REhPUFRfRU5DQVBfRE9ORTsKKyAgCisgIGZvciAob3B0ID0gY29uZmlnX29wdHM7IG9wdDsgb3B0ID0gb3B0LT5uZXh0KQorICAgIHsKKyAgICAgIGludCBmbGFnczsKKyAgICAgIAorICAgICAgaWYgKChmbGFncyA9IChvcHQtPmZsYWdzICYgKERIT1BUX0VOQ0FQU1VMQVRFIHwgREhPUFRfUkZDMzkyNSkpKSkKKwl7CisJICBpbnQgZm91bmQgPSAwOworCSAgc3RydWN0IGRoY3Bfb3B0ICpvOworCisJICBpZiAob3B0LT5mbGFncyAmIERIT1BUX0VOQ0FQX0RPTkUpCisJICAgIGNvbnRpbnVlOworCisJICBmb3IgKGxlbiA9IDAsIG8gPSBjb25maWdfb3B0czsgbzsgbyA9IG8tPm5leHQpCisJICAgIHsKKwkgICAgICBpbnQgb3V0ZXIgPSBmbGFncyAmIERIT1BUX0VOQ0FQU1VMQVRFID8gby0+dS5lbmNhcCA6IE9QVElPTl9WRU5ET1JfSURFTlRfT1BUOworCisJICAgICAgby0+ZmxhZ3MgJj0gfkRIT1BUX0VOQ0FQX01BVENIOworCSAgICAgIAorCSAgICAgIGlmICghKG8tPmZsYWdzICYgZmxhZ3MpIHx8IG9wdC0+dS5lbmNhcCAhPSBvLT51LmVuY2FwKQorCQljb250aW51ZTsKKwkgICAgICAKKwkgICAgICBvLT5mbGFncyB8PSBESE9QVF9FTkNBUF9ET05FOworCSAgICAgIGlmIChtYXRjaF9uZXRpZChvLT5uZXRpZCwgdGFnaWYsIDEpICYmCisJCSAgKChvLT5mbGFncyAmIERIT1BUX0ZPUkNFKSB8fCBpbl9saXN0KHJlcV9vcHRpb25zLCBvdXRlcikpKQorCQl7CisJCSAgby0+ZmxhZ3MgfD0gREhPUFRfRU5DQVBfTUFUQ0g7CisJCSAgZm91bmQgPSAxOworCQkgIGxlbiArPSBkb19vcHQobywgTlVMTCwgTlVMTCwgMCkgKyAyOworCQl9CisJICAgIH0gCisJICAKKwkgIGlmIChmb3VuZCkKKwkgICAgeyAKKwkgICAgICBpZiAoZmxhZ3MgJiBESE9QVF9FTkNBUFNVTEFURSkKKwkJZG9fZW5jYXBfb3B0cyhjb25maWdfb3B0cywgb3B0LT51LmVuY2FwLCBESE9QVF9FTkNBUF9NQVRDSCwgbWVzcywgZW5kLCBudWxsX3Rlcm0pOworCSAgICAgIGVsc2UgaWYgKGxlbiA+IDI1MCkKKwkJbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfV0FSTklORywgXygiY2Fubm90IHNlbmQgUkZDMzkyNSBvcHRpb246IHRvbyBtYW55IG9wdGlvbnMgZm9yIGVudGVycHJpc2UgbnVtYmVyICVkIiksIG9wdC0+dS5lbmNhcCk7CisJICAgICAgZWxzZSBpZiAoKHAgPSBmcmVlX3NwYWNlKG1lc3MsIGVuZCwgIE9QVElPTl9WRU5ET1JfSURFTlRfT1BULCBsZW4gKyA1KSkpCisJCXsKKwkJICBpbnQgc3dhcF9lbnQgPSBodG9ubChvcHQtPnUuZW5jYXApOworCQkgIG1lbWNweShwLCAmc3dhcF9lbnQsIDQpOworCQkgIHAgKz0gNDsKKwkJICAqKHArKykgPSBsZW47CisJCSAgZm9yIChvID0gY29uZmlnX29wdHM7IG87IG8gPSBvLT5uZXh0KQorCQkgICAgaWYgKG8tPmZsYWdzICYgREhPUFRfRU5DQVBfTUFUQ0gpCisJCSAgICAgIHsKKwkJCWxlbiA9IGRvX29wdChvLCBwICsgMiwgTlVMTCwgMCk7CisJCQkqKHArKykgPSBvLT5vcHQ7CisJCQkqKHArKykgPSBsZW47CisJCQlwICs9IGxlbjsKKwkJICAgICAgfSAgICAgCisJCX0KKwkgICAgfQorCX0KKyAgICB9ICAgICAgCisKKyAgZm9yY2VfZW5jYXAgPSBwcnVuZV92ZW5kb3Jfb3B0cyh0YWdpZik7CisgIAorICBpZiAoY29udGV4dCAmJiBweGVfYXJjaCAhPSAtMSkKKyAgICB7CisgICAgICBweGVfbWlzYyhtZXNzLCBlbmQsIHV1aWQpOworICAgICAgY29uZmlnX29wdHMgPSBweGVfb3B0cyhweGVfYXJjaCwgdGFnaWYsIGNvbnRleHQtPmxvY2FsLCBub3cpOworICAgIH0KKworICBpZiAoKGZvcmNlX2VuY2FwIHx8IGluX2xpc3QocmVxX29wdGlvbnMsIE9QVElPTl9WRU5ET1JfQ0xBU1NfT1BUKSkgJiYKKyAgICAgIGRvX2VuY2FwX29wdHMoY29uZmlnX29wdHMsIE9QVElPTl9WRU5ET1JfQ0xBU1NfT1BULCBESE9QVF9WRU5ET1JfTUFUQ0gsIG1lc3MsIGVuZCwgbnVsbF90ZXJtKSAmJiAKKyAgICAgIHB4ZV9hcmNoID09IC0xICYmICFkb25lX3ZlbmRvcl9jbGFzcyAmJiB2ZW5kb3JfY2xhc3NfbGVuICE9IDAgJiYKKyAgICAgIChwID0gZnJlZV9zcGFjZShtZXNzLCBlbmQsIE9QVElPTl9WRU5ET1JfSUQsIHZlbmRvcl9jbGFzc19sZW4pKSkKKyAgICAvKiBJZiB3ZSBzZW5kIHZlbmRvciBlbmNhcHN1bGF0ZWQgb3B0aW9ucywgYW5kIGhhdmVuJ3QgYWxyZWFkeSBzZW50IG9wdGlvbiA2MCwKKyAgICAgICBlY2hvIGJhY2sgdGhlIHZhbHVlIHdlIGdvdCBmcm9tIHRoZSBjbGllbnQuICovCisgICAgbWVtY3B5KHAsIGRhZW1vbi0+ZGhjcF9idWZmMywgdmVuZG9yX2NsYXNzX2xlbik7CSAgICAKKyAgIAorICAgLyogcmVzdG9yZSBCT09UUCBhbnRpLW92ZXJsb2FkIGhhY2sgKi8KKyAgaWYgKCFyZXFfb3B0aW9ucyB8fCBvcHRpb25fYm9vbChPUFRfTk9fT1ZFUlJJREUpKQorICAgIHsKKyAgICAgIG1lc3MtPmZpbGVbMF0gPSBmMDsKKyAgICAgIG1lc3MtPnNuYW1lWzBdID0gczA7CisgICAgfQorfQorCisjZW5kaWYKKyAgCisKKyAgCisgIAorCisKKyAgCmRpZmYgLS1naXQgYS9zcmMvcmZjMzMxNS5jIGIvc3JjL3JmYzMzMTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGIzOTBiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3JmYzMzMTUuYwpAQCAtMCwwICsxLDIxNzQgQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMTQgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisKKyNpbmNsdWRlICJkbnNtYXNxLmgiCisKKyNpZmRlZiBIQVZFX0RIQ1A2CisKK3N0cnVjdCBzdGF0ZSB7CisgIHVuc2lnbmVkIGNoYXIgKmNsaWQ7CisgIGludCBjbGlkX2xlbiwgaWFpZCwgaWFfdHlwZSwgaW50ZXJmYWNlLCBob3N0bmFtZV9hdXRoLCBsZWFzZV9hbGxvY2F0ZTsKKyAgY2hhciAqY2xpZW50X2hvc3RuYW1lLCAqaG9zdG5hbWUsICpkb21haW4sICpzZW5kX2RvbWFpbjsKKyAgc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dDsKKyAgc3RydWN0IGluNl9hZGRyICpsaW5rX2FkZHJlc3MsICpmYWxsYmFjaywgKmxsX2FkZHIsICp1bGFfYWRkcjsKKyAgdW5zaWduZWQgaW50IHhpZCwgZnFkbl9mbGFnczsKKyAgY2hhciAqaWZhY2VfbmFtZTsKKyAgdm9pZCAqcGFja2V0X29wdGlvbnMsICplbmQ7CisgIHN0cnVjdCBkaGNwX25ldGlkICp0YWdzLCAqY29udGV4dF90YWdzOworICB1bnNpZ25lZCBjaGFyIG1hY1tESENQX0NIQUREUl9NQVhdOworICB1bnNpZ25lZCBpbnQgbWFjX2xlbiwgbWFjX3R5cGU7CisjaWZkZWYgT1BUSU9ONl9QUkVGSVhfQ0xBU1MKKyAgc3RydWN0IHByZWZpeF9jbGFzcyAqc2VuZF9wcmVmaXhfY2xhc3M7CisjZW5kaWYKK307CisKK3N0YXRpYyBpbnQgZGhjcDZfbWF5YmVfcmVsYXkoc3RydWN0IHN0YXRlICpzdGF0ZSwgdm9pZCAqaW5idWZmLCBzaXplX3Qgc3osIAorCQkJICAgICBzdHJ1Y3QgaW42X2FkZHIgKmNsaWVudF9hZGRyLCBpbnQgaXNfdW5pY2FzdCwgdGltZV90IG5vdyk7CitzdGF0aWMgaW50IGRoY3A2X25vX3JlbGF5KHN0cnVjdCBzdGF0ZSAqc3RhdGUsIGludCBtc2dfdHlwZSwgdm9pZCAqaW5idWZmLCBzaXplX3Qgc3osIGludCBpc191bmljYXN0LCB0aW1lX3Qgbm93KTsKK3N0YXRpYyB2b2lkIGxvZzZfb3B0cyhpbnQgbmVzdCwgdW5zaWduZWQgaW50IHhpZCwgdm9pZCAqc3RhcnRfb3B0cywgdm9pZCAqZW5kX29wdHMpOworc3RhdGljIHZvaWQgbG9nNl9wYWNrZXQoc3RydWN0IHN0YXRlICpzdGF0ZSwgY2hhciAqdHlwZSwgc3RydWN0IGluNl9hZGRyICphZGRyLCBjaGFyICpzdHJpbmcpOworc3RhdGljIHZvaWQgbG9nNl9xdWlldChzdHJ1Y3Qgc3RhdGUgKnN0YXRlLCBjaGFyICp0eXBlLCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIGNoYXIgKnN0cmluZyk7CitzdGF0aWMgdm9pZCAqb3B0Nl9maW5kICh2b2lkICpvcHRzLCB2b2lkICplbmQsIHVuc2lnbmVkIGludCBzZWFyY2gsIHVuc2lnbmVkIGludCBtaW5zaXplKTsKK3N0YXRpYyB2b2lkICpvcHQ2X25leHQodm9pZCAqb3B0cywgdm9pZCAqZW5kKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb3B0Nl91aW50KHVuc2lnbmVkIGNoYXIgKm9wdCwgaW50IG9mZnNldCwgaW50IHNpemUpOworc3RhdGljIHZvaWQgZ2V0X2NvbnRleHRfdGFnKHN0cnVjdCBzdGF0ZSAqc3RhdGUsIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQpOworc3RhdGljIGludCBjaGVja19pYShzdHJ1Y3Qgc3RhdGUgKnN0YXRlLCB2b2lkICpvcHQsIHZvaWQgKiplbmRwLCB2b2lkICoqaWFfb3B0aW9uKTsKK3N0YXRpYyBpbnQgYnVpbGRfaWEoc3RydWN0IHN0YXRlICpzdGF0ZSwgaW50ICp0MWNudHIpOworc3RhdGljIHZvaWQgZW5kX2lhKGludCB0MWNudHIsIHVuc2lnbmVkIGludCBtaW5fdGltZSwgaW50IGRvX2Z1enopOworI2lmZGVmIE9QVElPTjZfUFJFRklYX0NMQVNTCitzdGF0aWMgc3RydWN0IHByZWZpeF9jbGFzcyAqcHJlZml4X2NsYXNzX2Zyb21fY29udGV4dChzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0KTsKKyNlbmRpZgorc3RhdGljIHZvaWQgbWFya19jb250ZXh0X3VzZWQoc3RydWN0IHN0YXRlICpzdGF0ZSwgc3RydWN0IGluNl9hZGRyICphZGRyKTsKK3N0YXRpYyB2b2lkIG1hcmtfY29uZmlnX3VzZWQoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwgc3RydWN0IGluNl9hZGRyICphZGRyKTsKK3N0YXRpYyBpbnQgY2hlY2tfYWRkcmVzcyhzdHJ1Y3Qgc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOworc3RhdGljIHZvaWQgYWRkX2FkZHJlc3Moc3RydWN0IHN0YXRlICpzdGF0ZSwgc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwgdW5zaWduZWQgaW50IGxlYXNlX3RpbWUsIHZvaWQgKmlhX29wdGlvbiwgCisJCQl1bnNpZ25lZCBpbnQgKm1pbl90aW1lLCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIHRpbWVfdCBub3cpOworc3RhdGljIHZvaWQgdXBkYXRlX2xlYXNlcyhzdHJ1Y3Qgc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIHVuc2lnbmVkIGludCBsZWFzZV90aW1lLCB0aW1lX3Qgbm93KTsKK3N0YXRpYyBpbnQgYWRkX2xvY2FsX2FkZHJzKHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQpOworc3RhdGljIHN0cnVjdCBkaGNwX25ldGlkICphZGRfb3B0aW9ucyhzdHJ1Y3Qgc3RhdGUgKnN0YXRlLCBpbnQgZG9fcmVmcmVzaCk7CitzdGF0aWMgdm9pZCBjYWxjdWxhdGVfdGltZXMoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCwgdW5zaWduZWQgaW50ICptaW5fdGltZSwgdW5zaWduZWQgaW50ICp2YWxpZF90aW1lcCwgCisJCQkgICAgdW5zaWduZWQgaW50ICpwcmVmZXJyZWRfdGltZXAsIHVuc2lnbmVkIGludCBsZWFzZV90aW1lKTsKKworI2RlZmluZSBvcHQ2X2xlbihvcHQpICgoaW50KShvcHQ2X3VpbnQob3B0LCAtMiwgMikpKQorI2RlZmluZSBvcHQ2X3R5cGUob3B0KSAob3B0Nl91aW50KG9wdCwgLTQsIDIpKQorI2RlZmluZSBvcHQ2X3B0cihvcHQsIGkpICgodm9pZCAqKSYoKCh1bnNpZ25lZCBjaGFyICopKG9wdCkpWzQrKGkpXSkpCisKKyNkZWZpbmUgb3B0Nl91c2VyX3ZlbmRvcl9wdHIob3B0LCBpKSAoKHZvaWQgKikmKCgodW5zaWduZWQgY2hhciAqKShvcHQpKVsyKyhpKV0pKQorI2RlZmluZSBvcHQ2X3VzZXJfdmVuZG9yX2xlbihvcHQpICgoaW50KShvcHQ2X3VpbnQob3B0LCAtNCwgMikpKQorI2RlZmluZSBvcHQ2X3VzZXJfdmVuZG9yX25leHQob3B0LCBlbmQpIChvcHQ2X25leHQoKCh2b2lkICopIG9wdCkgLSAyLCBlbmQpKQorIAorCit1bnNpZ25lZCBzaG9ydCBkaGNwNl9yZXBseShzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCBpbnQgaW50ZXJmYWNlLCBjaGFyICppZmFjZV9uYW1lLAorCQkJICAgc3RydWN0IGluNl9hZGRyICpmYWxsYmFjaywgIHN0cnVjdCBpbjZfYWRkciAqbGxfYWRkciwgc3RydWN0IGluNl9hZGRyICp1bGFfYWRkciwKKwkJCSAgIHNpemVfdCBzeiwgc3RydWN0IGluNl9hZGRyICpjbGllbnRfYWRkciwgdGltZV90IG5vdykKK3sKKyAgc3RydWN0IGRoY3BfdmVuZG9yICp2ZW5kb3I7CisgIGludCBtc2dfdHlwZTsKKyAgc3RydWN0IHN0YXRlIHN0YXRlOworICAKKyAgaWYgKHN6IDw9IDQpCisgICAgcmV0dXJuIDA7CisgIAorICBtc2dfdHlwZSA9ICooKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPmRoY3BfcGFja2V0Lmlvdl9iYXNlKTsKKyAgCisgIC8qIE1hcmsgdGhlc2Ugc28gd2Ugb25seSBtYXRjaCBlYWNoIGF0IG1vc3Qgb25jZSwgdG8gYXZvaWQgdGFuZ2xlZCBsaW5rZWQgbGlzdHMgKi8KKyAgZm9yICh2ZW5kb3IgPSBkYWVtb24tPmRoY3BfdmVuZG9yczsgdmVuZG9yOyB2ZW5kb3IgPSB2ZW5kb3ItPm5leHQpCisgICAgdmVuZG9yLT5uZXRpZC5uZXh0ID0gJnZlbmRvci0+bmV0aWQ7CisgIAorICBzYXZlX2NvdW50ZXIoMCk7CisgIHN0YXRlLmNvbnRleHQgPSBjb250ZXh0OworICBzdGF0ZS5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisgIHN0YXRlLmlmYWNlX25hbWUgPSBpZmFjZV9uYW1lOworICBzdGF0ZS5mYWxsYmFjayA9IGZhbGxiYWNrOworICBzdGF0ZS5sbF9hZGRyID0gbGxfYWRkcjsKKyAgc3RhdGUudWxhX2FkZHIgPSB1bGFfYWRkcjsKKyAgc3RhdGUubWFjX2xlbiA9IDA7CisgIHN0YXRlLnRhZ3MgPSBOVUxMOworICBzdGF0ZS5saW5rX2FkZHJlc3MgPSBOVUxMOworCisgIGlmIChkaGNwNl9tYXliZV9yZWxheSgmc3RhdGUsIGRhZW1vbi0+ZGhjcF9wYWNrZXQuaW92X2Jhc2UsIHN6LCBjbGllbnRfYWRkciwgCisJCQlJTjZfSVNfQUREUl9NVUxUSUNBU1QoY2xpZW50X2FkZHIpLCBub3cpKQorICAgIHJldHVybiBtc2dfdHlwZSA9PSBESENQNlJFTEFZRk9SVyA/IERIQ1BWNl9TRVJWRVJfUE9SVCA6IERIQ1BWNl9DTElFTlRfUE9SVDsKKworICByZXR1cm4gMDsKK30KKworLyogVGhpcyBjb3N0IG1lIGJsb29kIHRvIHdyaXRlLCBpdCB3aWxsIHByb2JhYmx5IGNvc3QgeW91IGJsb29kIHRvIHVuZGVyc3RhbmQgLSBzcmsuICovCitzdGF0aWMgaW50IGRoY3A2X21heWJlX3JlbGF5KHN0cnVjdCBzdGF0ZSAqc3RhdGUsIHZvaWQgKmluYnVmZiwgc2l6ZV90IHN6LCAKKwkJCSAgICAgc3RydWN0IGluNl9hZGRyICpjbGllbnRfYWRkciwgaW50IGlzX3VuaWNhc3QsIHRpbWVfdCBub3cpCit7CisgIHZvaWQgKmVuZCA9IGluYnVmZiArIHN6OworICB2b2lkICpvcHRzID0gaW5idWZmICsgMzQ7CisgIGludCBtc2dfdHlwZSA9ICooKHVuc2lnbmVkIGNoYXIgKilpbmJ1ZmYpOworICB1bnNpZ25lZCBjaGFyICpvdXRtc2d0eXBlcDsKKyAgdm9pZCAqb3B0OworICBzdHJ1Y3QgZGhjcF92ZW5kb3IgKnZlbmRvcjsKKworICAvKiBpZiBub3QgYW4gZW5jYXBsc3VsYXRlZCByZWxheWVkIG1lc3NhZ2UsIGp1c3QgZG8gdGhlIHN0dWZmICovCisgIGlmIChtc2dfdHlwZSAhPSBESENQNlJFTEFZRk9SVykKKyAgICB7CisgICAgICAvKiBpZiBsaW5rX2FkZHJlc3MgIT0gTlVMTCBpZiBwb2ludHMgdG8gdGhlIGxpbmsgYWRkcmVzcyBmaWVsZCBvZiB0aGUgCisJIGlubmVybW9zdCBuZXN0ZWQgUkVMQVlGT1JXIG1lc3NhZ2UsIHdoaWNoIGlzIHdoZXJlIHdlIGZpbmQgdGhlCisJIGFkZHJlc3Mgb2YgdGhlIG5ldHdvcmsgb24gd2hpY2ggd2UgY2FuIGFsbG9jYXRlIGFuIGFkZHJlc3MuCisJIFJlY2FsY3VsYXRlIHRoZSBhdmFpbGFibGUgY29udGV4dHMgdXNpbmcgdGhhdCBpbmZvcm1hdGlvbi4gCisKKyAgICAgIGxpbmtfYWRkcmVzcyA9PSBOVUxMIG1lYW5zIHRoZXJlJ3Mgbm8gcmVsYXkgaW4gdXNlLCBzbyB3ZSB0cnkgYW5kIGZpbmQgdGhlIGNsaWVudCdzIAorICAgICAgTUFDIGFkZHJlc3MgZnJvbSB0aGUgbG9jYWwgTkQgY2FjaGUuICovCisgICAgICAKKyAgICAgIGlmICghc3RhdGUtPmxpbmtfYWRkcmVzcykKKwlnZXRfY2xpZW50X21hYyhjbGllbnRfYWRkciwgc3RhdGUtPmludGVyZmFjZSwgc3RhdGUtPm1hYywgJnN0YXRlLT5tYWNfbGVuLCAmc3RhdGUtPm1hY190eXBlKTsKKyAgICAgIGVsc2UKKwl7CisJICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjOworCSAgc3RhdGUtPmNvbnRleHQgPSBOVUxMOworCSAgIAorCSAgaWYgKCFJTjZfSVNfQUREUl9MT09QQkFDSyhzdGF0ZS0+bGlua19hZGRyZXNzKSAmJgorCSAgICAgICFJTjZfSVNfQUREUl9MSU5LTE9DQUwoc3RhdGUtPmxpbmtfYWRkcmVzcykgJiYKKwkgICAgICAhSU42X0lTX0FERFJfTVVMVElDQVNUKHN0YXRlLT5saW5rX2FkZHJlc3MpKQorCSAgICBmb3IgKGMgPSBkYWVtb24tPmRoY3A2OyBjOyBjID0gYy0+bmV4dCkKKwkgICAgICBpZiAoKGMtPmZsYWdzICYgQ09OVEVYVF9ESENQKSAmJgorCQkgICEoYy0+ZmxhZ3MgJiAoQ09OVEVYVF9URU1QTEFURSB8IENPTlRFWFRfT0xEKSkgJiYKKwkJICBpc19zYW1lX25ldDYoc3RhdGUtPmxpbmtfYWRkcmVzcywgJmMtPnN0YXJ0NiwgYy0+cHJlZml4KSAmJgorCQkgIGlzX3NhbWVfbmV0NihzdGF0ZS0+bGlua19hZGRyZXNzLCAmYy0+ZW5kNiwgYy0+cHJlZml4KSkKKwkJeworCQkgIGMtPnByZWZlcnJlZCA9IGMtPnZhbGlkID0gMHhmZmZmZmZmZjsKKwkJICBjLT5jdXJyZW50ID0gc3RhdGUtPmNvbnRleHQ7CisJCSAgc3RhdGUtPmNvbnRleHQgPSBjOworCQl9CisJICAKKwkgIGlmICghc3RhdGUtPmNvbnRleHQpCisJICAgIHsKKwkgICAgICBpbmV0X250b3AoQUZfSU5FVDYsIHN0YXRlLT5saW5rX2FkZHJlc3MsIGRhZW1vbi0+YWRkcmJ1ZmYsIEFERFJTVFJMRU4pOyAKKwkgICAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19XQVJOSU5HLCAKKwkJCV8oIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQdjYgcmVxdWVzdCBmcm9tIHJlbGF5IGF0ICVzIiksCisJCQlkYWVtb24tPmFkZHJidWZmKTsKKwkgICAgICByZXR1cm4gMDsKKwkgICAgfQorCX0KKwkgIAorICAgICAgaWYgKCFzdGF0ZS0+Y29udGV4dCkKKwl7CisJICBteV9zeXNsb2coTVNfREhDUCB8IExPR19XQVJOSU5HLCAKKwkJICAgIF8oIm5vIGFkZHJlc3MgcmFuZ2UgYXZhaWxhYmxlIGZvciBESENQdjYgcmVxdWVzdCB2aWEgJXMiKSwgc3RhdGUtPmlmYWNlX25hbWUpOworCSAgcmV0dXJuIDA7CisJfQorCisgICAgICByZXR1cm4gZGhjcDZfbm9fcmVsYXkoc3RhdGUsIG1zZ190eXBlLCBpbmJ1ZmYsIHN6LCBpc191bmljYXN0LCBub3cpOworICAgIH0KKworICAvKiBtdXN0IGhhdmUgYXQgbGVhc3QgbXNnX3R5cGUraG9wY291bnQrbGlua19hZGRyZXNzK3BlZXJfYWRkcmVzcyttaW5pbWFsIHNpemUgb3B0aW9uCisgICAgIHdoaWNoIGlzICAgICAgICAgICAgICAgMSAgICsgICAgMSAgICsgICAgMTYgICAgICArICAgICAxNiAgICAgKyAyICsgMiA9IDM4ICovCisgIGlmIChzeiA8IDM4KQorICAgIHJldHVybiAwOworICAKKyAgLyogY29weSBoZWFkZXIgc3R1ZmYgaW50byByZXBseSBtZXNzYWdlIGFuZCBzZXQgdHlwZSB0byByZXBseSAqLworICBpZiAoIShvdXRtc2d0eXBlcCA9IHB1dF9vcHQ2KGluYnVmZiwgMzQpKSkKKyAgICByZXR1cm4gMDsKKyAgKm91dG1zZ3R5cGVwID0gREhDUDZSRUxBWVJFUEw7CisKKyAgLyogbG9vayBmb3IgcmVsYXkgb3B0aW9ucyBhbmQgc2V0IHRhZ3MgaWYgZm91bmQuICovCisgIGZvciAodmVuZG9yID0gZGFlbW9uLT5kaGNwX3ZlbmRvcnM7IHZlbmRvcjsgdmVuZG9yID0gdmVuZG9yLT5uZXh0KQorICAgIHsKKyAgICAgIGludCBtb3B0OworICAgICAgCisgICAgICBpZiAodmVuZG9yLT5tYXRjaF90eXBlID09IE1BVENIX1NVQlNDUklCRVIpCisJbW9wdCA9IE9QVElPTjZfU1VCU0NSSUJFUl9JRDsKKyAgICAgIGVsc2UgaWYgKHZlbmRvci0+bWF0Y2hfdHlwZSA9PSBNQVRDSF9SRU1PVEUpCisJbW9wdCA9IE9QVElPTjZfUkVNT1RFX0lEOyAKKyAgICAgIGVsc2UKKwljb250aW51ZTsKKworICAgICAgaWYgKChvcHQgPSBvcHQ2X2ZpbmQob3B0cywgZW5kLCBtb3B0LCAxKSkgJiYKKwkgIHZlbmRvci0+bGVuID09IG9wdDZfbGVuKG9wdCkgJiYKKwkgIG1lbWNtcCh2ZW5kb3ItPmRhdGEsIG9wdDZfcHRyKG9wdCwgMCksIHZlbmRvci0+bGVuKSA9PSAwICYmCisJICB2ZW5kb3ItPm5ldGlkLm5leHQgIT0gJnZlbmRvci0+bmV0aWQpCisJeworCSAgdmVuZG9yLT5uZXRpZC5uZXh0ID0gc3RhdGUtPnRhZ3M7CisJICBzdGF0ZS0+dGFncyA9ICZ2ZW5kb3ItPm5ldGlkOworCSAgYnJlYWs7CisJfQorICAgIH0KKyAgCisgIC8qIFJGQy02OTM5ICovCisgIGlmICgob3B0ID0gb3B0Nl9maW5kKG9wdHMsIGVuZCwgT1BUSU9ONl9DTElFTlRfTUFDLCAzKSkpCisgICAgeworICAgICAgc3RhdGUtPm1hY190eXBlID0gb3B0Nl91aW50KG9wdCwgMCwgMik7CisgICAgICBzdGF0ZS0+bWFjX2xlbiA9IG9wdDZfbGVuKG9wdCkgLSAyOworICAgICAgbWVtY3B5KCZzdGF0ZS0+bWFjWzBdLCBvcHQ2X3B0cihvcHQsIDIpLCBzdGF0ZS0+bWFjX2xlbik7CisgICAgfQorICAKKyAgZm9yIChvcHQgPSBvcHRzOyBvcHQ7IG9wdCA9IG9wdDZfbmV4dChvcHQsIGVuZCkpCisgICAgeworICAgICAgaW50IG8gPSBuZXdfb3B0NihvcHQ2X3R5cGUob3B0KSk7CisgICAgICBpZiAob3B0Nl90eXBlKG9wdCkgPT0gT1BUSU9ONl9SRUxBWV9NU0cpCisJeworCSAgc3RydWN0IGluNl9hZGRyIGFsaWduOworCSAgLyogdGhlIHBhY2tldCBkYXRhIGlzIHVuYWxpZ25lZCwgY29weSB0byBhbGlnbmVkIHN0b3JhZ2UgKi8KKwkgIG1lbWNweSgmYWxpZ24sIGluYnVmZiArIDIsIElONkFERFJTWik7IAorCSAgc3RhdGUtPmxpbmtfYWRkcmVzcyA9ICZhbGlnbjsKKwkgIC8qIHplcm8gaXNfdW5pY2FzdCBzaW5jZSB0aGF0IGlzIG5vdyBrbm93biB0byByZWZlciB0byB0aGUgCisJICAgICByZWxheWVkIHBhY2tldCwgbm90IHRoZSBvcmlnaW5hbCBzZW50IGJ5IHRoZSBjbGllbnQgKi8KKwkgIGlmICghZGhjcDZfbWF5YmVfcmVsYXkoc3RhdGUsIG9wdDZfcHRyKG9wdCwgMCksIG9wdDZfbGVuKG9wdCksIGNsaWVudF9hZGRyLCAwLCBub3cpKQorCSAgICByZXR1cm4gMDsKKwl9CisgICAgICBlbHNlIGlmIChvcHQ2X3R5cGUob3B0KSAhPSBPUFRJT042X0NMSUVOVF9NQUMpCisJcHV0X29wdDYob3B0Nl9wdHIob3B0LCAwKSwgb3B0Nl9sZW4ob3B0KSk7CisgICAgICBlbmRfb3B0NihvKTsJICAgIAorICAgIH0KKyAgCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IGRoY3A2X25vX3JlbGF5KHN0cnVjdCBzdGF0ZSAqc3RhdGUsIGludCBtc2dfdHlwZSwgdm9pZCAqaW5idWZmLCBzaXplX3Qgc3osIGludCBpc191bmljYXN0LCB0aW1lX3Qgbm93KQoreworICB2b2lkICpvcHQ7CisgIGludCBpLCBvLCBvMSwgc3RhcnRfb3B0czsKKyAgc3RydWN0IGRoY3Bfb3B0ICpvcHRfY2ZnOworICBzdHJ1Y3QgZGhjcF9uZXRpZCAqdGFnaWY7CisgIHN0cnVjdCBkaGNwX2NvbmZpZyAqY29uZmlnID0gTlVMTDsKKyAgc3RydWN0IGRoY3BfbmV0aWQga25vd25faWQsIGlmYWNlX2lkLCB2Nl9pZDsKKyAgdW5zaWduZWQgY2hhciAqb3V0bXNndHlwZXA7CisgIHN0cnVjdCBkaGNwX3ZlbmRvciAqdmVuZG9yOworICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0X3RtcDsKKyAgc3RydWN0IGRoY3BfbWFjICptYWNfb3B0OworICB1bnNpZ25lZCBpbnQgaWdub3JlID0gMDsKKyNpZmRlZiBPUFRJT042X1BSRUZJWF9DTEFTUworICBzdHJ1Y3QgcHJlZml4X2NsYXNzICpwOworICBpbnQgZHVtcF9hbGxfcHJlZml4X2NsYXNzZXMgPSAwOworI2VuZGlmCisKKyAgc3RhdGUtPnBhY2tldF9vcHRpb25zID0gaW5idWZmICsgNDsKKyAgc3RhdGUtPmVuZCA9IGluYnVmZiArIHN6OworICBzdGF0ZS0+Y2xpZCA9IE5VTEw7CisgIHN0YXRlLT5jbGlkX2xlbiA9IDA7CisgIHN0YXRlLT5sZWFzZV9hbGxvY2F0ZSA9IDA7CisgIHN0YXRlLT5jb250ZXh0X3RhZ3MgPSBOVUxMOworICBzdGF0ZS0+ZG9tYWluID0gTlVMTDsKKyAgc3RhdGUtPnNlbmRfZG9tYWluID0gTlVMTDsKKyAgc3RhdGUtPmhvc3RuYW1lX2F1dGggPSAwOworICBzdGF0ZS0+aG9zdG5hbWUgPSBOVUxMOworICBzdGF0ZS0+Y2xpZW50X2hvc3RuYW1lID0gTlVMTDsKKyAgc3RhdGUtPmZxZG5fZmxhZ3MgPSAweDAxOyAvKiBkZWZhdWx0IHRvIHNlbmQgaWYgd2UgcmVjaWV2ZSBubyBGUUROIG9wdGlvbiAqLworI2lmZGVmIE9QVElPTjZfUFJFRklYX0NMQVNTCisgIHN0YXRlLT5zZW5kX3ByZWZpeF9jbGFzcyA9IE5VTEw7CisjZW5kaWYKKworICAvKiBzZXQgdGFnIHdpdGggbmFtZSA9PSBpbnRlcmZhY2UgKi8KKyAgaWZhY2VfaWQubmV0ID0gc3RhdGUtPmlmYWNlX25hbWU7CisgIGlmYWNlX2lkLm5leHQgPSBzdGF0ZS0+dGFnczsKKyAgc3RhdGUtPnRhZ3MgPSAmaWZhY2VfaWQ7IAorCisgIC8qIHNldCB0YWcgImRoY3B2NiIgKi8KKyAgdjZfaWQubmV0ID0gImRoY3B2NiI7CisgIHY2X2lkLm5leHQgPSBzdGF0ZS0+dGFnczsKKyAgc3RhdGUtPnRhZ3MgPSAmdjZfaWQ7CisKKyAgLyogY29weSBvdmVyIHRyYW5zYWN0aW9uLWlkLCBhbmQgc2F2ZSBwb2ludGVyIHRvIG1lc3NhZ2UgdHlwZSAqLworICBpZiAoIShvdXRtc2d0eXBlcCA9IHB1dF9vcHQ2KGluYnVmZiwgNCkpKQorICAgIHJldHVybiAwOworICBzdGFydF9vcHRzID0gc2F2ZV9jb3VudGVyKC0xKTsKKyAgc3RhdGUtPnhpZCA9IG91dG1zZ3R5cGVwWzNdIHwgb3V0bXNndHlwZXBbMl0gPDwgOCB8IG91dG1zZ3R5cGVwWzFdIDw8IDE2OworICAgCisgIC8qIFdlJ3JlIGdvaW5nIHRvIGJlIGxpbmtpbmcgdGFncyBmcm9tIGFsbCBjb250ZXh0IHdlIHVzZS4gCisgICAgIG1hcmsgdGhlbSBhcyB1bnVzZWQgc28gd2UgZG9uJ3QgbGluayBvbmUgdHdpY2UgYW5kIGJyZWFrIHRoZSBsaXN0ICovCisgIGZvciAoY29udGV4dF90bXAgPSBzdGF0ZS0+Y29udGV4dDsgY29udGV4dF90bXA7IGNvbnRleHRfdG1wID0gY29udGV4dF90bXAtPmN1cnJlbnQpCisgICAgeworICAgICAgY29udGV4dF90bXAtPm5ldGlkLm5leHQgPSAmY29udGV4dF90bXAtPm5ldGlkOworCisgICAgICBpZiAob3B0aW9uX2Jvb2woT1BUX0xPR19PUFRTKSkKKwl7CisJICAgaW5ldF9udG9wKEFGX0lORVQ2LCAmY29udGV4dF90bXAtPnN0YXJ0NiwgZGFlbW9uLT5kaGNwX2J1ZmYsIEFERFJTVFJMRU4pOyAKKwkgICBpbmV0X250b3AoQUZfSU5FVDYsICZjb250ZXh0X3RtcC0+ZW5kNiwgZGFlbW9uLT5kaGNwX2J1ZmYyLCBBRERSU1RSTEVOKTsgCisJICAgaWYgKGNvbnRleHRfdG1wLT5mbGFncyAmIChDT05URVhUX1NUQVRJQykpCisJICAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCIldSBhdmFpbGFibGUgREhDUHY2IHN1Ym5ldDogJXMvJWQiKSwKKwkJICAgICAgIHN0YXRlLT54aWQsIGRhZW1vbi0+ZGhjcF9idWZmLCBjb250ZXh0X3RtcC0+cHJlZml4KTsKKwkgICBlbHNlCisJICAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCIldSBhdmFpbGFibGUgREhDUCByYW5nZTogJXMgLS0gJXMiKSwgCisJCSAgICAgICBzdGF0ZS0+eGlkLCBkYWVtb24tPmRoY3BfYnVmZiwgZGFlbW9uLT5kaGNwX2J1ZmYyKTsKKwl9CisgICAgfQorCisgIGlmICgob3B0ID0gb3B0Nl9maW5kKHN0YXRlLT5wYWNrZXRfb3B0aW9ucywgc3RhdGUtPmVuZCwgT1BUSU9ONl9DTElFTlRfSUQsIDEpKSkKKyAgICB7CisgICAgICBzdGF0ZS0+Y2xpZCA9IG9wdDZfcHRyKG9wdCwgMCk7CisgICAgICBzdGF0ZS0+Y2xpZF9sZW4gPSBvcHQ2X2xlbihvcHQpOworICAgICAgbyA9IG5ld19vcHQ2KE9QVElPTjZfQ0xJRU5UX0lEKTsKKyAgICAgIHB1dF9vcHQ2KHN0YXRlLT5jbGlkLCBzdGF0ZS0+Y2xpZF9sZW4pOworICAgICAgZW5kX29wdDYobyk7CisgICAgfQorICBlbHNlIGlmIChtc2dfdHlwZSAhPSBESENQNklSRVEpCisgICAgcmV0dXJuIDA7CisKKyAgLyogc2VydmVyLWlkIG11c3QgbWF0Y2ggZXhjZXB0IGZvciBTT0xJQ0lULCBDT05GSVJNIGFuZCBSRUJJTkQgbWVzc2FnZXMgKi8KKyAgaWYgKG1zZ190eXBlICE9IERIQ1A2U09MSUNJVCAmJiBtc2dfdHlwZSAhPSBESENQNkNPTkZJUk0gJiYgbXNnX3R5cGUgIT0gREhDUDZJUkVRICYmIG1zZ190eXBlICE9IERIQ1A2UkVCSU5EICYmCisgICAgICAoIShvcHQgPSBvcHQ2X2ZpbmQoc3RhdGUtPnBhY2tldF9vcHRpb25zLCBzdGF0ZS0+ZW5kLCBPUFRJT042X1NFUlZFUl9JRCwgMSkpIHx8CisgICAgICAgb3B0Nl9sZW4ob3B0KSAhPSBkYWVtb24tPmR1aWRfbGVuIHx8CisgICAgICAgbWVtY21wKG9wdDZfcHRyKG9wdCwgMCksIGRhZW1vbi0+ZHVpZCwgZGFlbW9uLT5kdWlkX2xlbikgIT0gMCkpCisgICAgcmV0dXJuIDA7CisgIAorICBvID0gbmV3X29wdDYoT1BUSU9ONl9TRVJWRVJfSUQpOworICBwdXRfb3B0NihkYWVtb24tPmR1aWQsIGRhZW1vbi0+ZHVpZF9sZW4pOworICBlbmRfb3B0NihvKTsKKworICBpZiAoaXNfdW5pY2FzdCAmJgorICAgICAgKG1zZ190eXBlID09IERIQ1A2UkVRVUVTVCB8fCBtc2dfdHlwZSA9PSBESENQNlJFTkVXIHx8IG1zZ190eXBlID09IERIQ1A2UkVMRUFTRSB8fCBtc2dfdHlwZSA9PSBESENQNkRFQ0xJTkUpKQorICAgIAorICAgIHsgIAorICAgICAgKm91dG1zZ3R5cGVwID0gREhDUDZSRVBMWTsKKyAgICAgIG8xID0gbmV3X29wdDYoT1BUSU9ONl9TVEFUVVNfQ09ERSk7CisgICAgICBwdXRfb3B0Nl9zaG9ydChESENQNlVTRU1VTFRJKTsKKyAgICAgIHB1dF9vcHQ2X3N0cmluZygiVXNlIG11bHRpY2FzdCIpOworICAgICAgZW5kX29wdDYobzEpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgIC8qIG1hdGNoIHZlbmRvciBhbmQgdXNlciBjbGFzcyBvcHRpb25zICovCisgIGZvciAodmVuZG9yID0gZGFlbW9uLT5kaGNwX3ZlbmRvcnM7IHZlbmRvcjsgdmVuZG9yID0gdmVuZG9yLT5uZXh0KQorICAgIHsKKyAgICAgIGludCBtb3B0OworICAgICAgCisgICAgICBpZiAodmVuZG9yLT5tYXRjaF90eXBlID09IE1BVENIX1ZFTkRPUikKKwltb3B0ID0gT1BUSU9ONl9WRU5ET1JfQ0xBU1M7CisgICAgICBlbHNlIGlmICh2ZW5kb3ItPm1hdGNoX3R5cGUgPT0gTUFUQ0hfVVNFUikKKwltb3B0ID0gT1BUSU9ONl9VU0VSX0NMQVNTOyAKKyAgICAgIGVsc2UKKwljb250aW51ZTsKKworICAgICAgaWYgKChvcHQgPSBvcHQ2X2ZpbmQoc3RhdGUtPnBhY2tldF9vcHRpb25zLCBzdGF0ZS0+ZW5kLCBtb3B0LCAyKSkpCisJeworCSAgdm9pZCAqZW5jX29wdCwgKmVuY19lbmQgPSBvcHQ2X3B0cihvcHQsIG9wdDZfbGVuKG9wdCkpOworCSAgaW50IG9mZnNldCA9IDA7CisJICAKKwkgIGlmIChtb3B0ID09IE9QVElPTjZfVkVORE9SX0NMQVNTKQorCSAgICB7CisJICAgICAgaWYgKG9wdDZfbGVuKG9wdCkgPCA0KQorCQljb250aW51ZTsKKwkgICAgICAKKwkgICAgICBpZiAodmVuZG9yLT5lbnRlcnByaXNlICE9IG9wdDZfdWludChvcHQsIDAsIDQpKQorCQljb250aW51ZTsKKwkgICAgCisJICAgICAgb2Zmc2V0ID0gNDsKKwkgICAgfQorIAorCSAgLyogTm90ZSB0aGF0IGZvcm1hdCBpZiB1c2VyL3ZlbmRvciBjbGFzc2VzIGlzIGRpZmZlcmVudCB0byBESENQIG9wdGlvbnMgLSBubyBvcHRpb24gdHlwZXMuICovCisJICBmb3IgKGVuY19vcHQgPSBvcHQ2X3B0cihvcHQsIG9mZnNldCk7IGVuY19vcHQ7IGVuY19vcHQgPSBvcHQ2X3VzZXJfdmVuZG9yX25leHQoZW5jX29wdCwgZW5jX2VuZCkpCisJICAgIGZvciAoaSA9IDA7IGkgPD0gKG9wdDZfdXNlcl92ZW5kb3JfbGVuKGVuY19vcHQpIC0gdmVuZG9yLT5sZW4pOyBpKyspCisJICAgICAgaWYgKG1lbWNtcCh2ZW5kb3ItPmRhdGEsIG9wdDZfdXNlcl92ZW5kb3JfcHRyKGVuY19vcHQsIGkpLCB2ZW5kb3ItPmxlbikgPT0gMCkKKwkJeworCQkgIHZlbmRvci0+bmV0aWQubmV4dCA9IHN0YXRlLT50YWdzOworCQkgIHN0YXRlLT50YWdzID0gJnZlbmRvci0+bmV0aWQ7CisJCSAgYnJlYWs7CisJCX0KKwl9CisgICAgfQorCisgIGlmIChvcHRpb25fYm9vbChPUFRfTE9HX09QVFMpICYmIChvcHQgPSBvcHQ2X2ZpbmQoc3RhdGUtPnBhY2tldF9vcHRpb25zLCBzdGF0ZS0+ZW5kLCBPUFRJT042X1ZFTkRPUl9DTEFTUywgNCkpKQorICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sIF8oIiV1IHZlbmRvciBjbGFzczogJXUiKSwgc3RhdGUtPnhpZCwgb3B0Nl91aW50KG9wdCwgMCwgNCkpOworICAKKyAgLyogZGhjcC1tYXRjaC4gSWYgd2UgaGF2ZSBoZXgtYW5kLXdpbGRjYXJkcywgbG9vayBmb3IgYSBsZWZ0LWFuY2hvcmVkIG1hdGNoLgorICAgICBPdGhlcndpc2UgYXNzdW1lIHRoZSBvcHRpb24gaXMgYW4gYXJyYXksIGFuZCBsb29rIGZvciBhIG1hdGNoaW5nIGVsZW1lbnQuIAorICAgICBJZiBubyBkYXRhIGdpdmVuLCBleGlzdGFuY2Ugb2YgdGhlIG9wdGlvbiBpcyBlbm91Z2guIFRoaXMgY29kZSBoYW5kbGVzIAorICAgICBWLUkgb3B0cyB0b28uICovCisgIGZvciAob3B0X2NmZyA9IGRhZW1vbi0+ZGhjcF9tYXRjaDY7IG9wdF9jZmc7IG9wdF9jZmcgPSBvcHRfY2ZnLT5uZXh0KQorICAgIHsKKyAgICAgIGludCBtYXRjaCA9IDA7CisgICAgICAKKyAgICAgIGlmIChvcHRfY2ZnLT5mbGFncyAmIERIT1BUX1JGQzM5MjUpCisJeworCSAgZm9yIChvcHQgPSBvcHQ2X2ZpbmQoc3RhdGUtPnBhY2tldF9vcHRpb25zLCBzdGF0ZS0+ZW5kLCBPUFRJT042X1ZFTkRPUl9PUFRTLCA0KTsKKwkgICAgICAgb3B0OworCSAgICAgICBvcHQgPSBvcHQ2X2ZpbmQob3B0Nl9uZXh0KG9wdCwgc3RhdGUtPmVuZCksIHN0YXRlLT5lbmQsIE9QVElPTjZfVkVORE9SX09QVFMsIDQpKQorCSAgICB7CisJICAgICAgdm9pZCAqdm9wdDsKKwkgICAgICB2b2lkICp2ZW5kID0gb3B0Nl9wdHIob3B0LCBvcHQ2X2xlbihvcHQpKTsKKwkgICAgICAKKwkgICAgICBmb3IgKHZvcHQgPSBvcHQ2X2ZpbmQob3B0Nl9wdHIob3B0LCA0KSwgdmVuZCwgb3B0X2NmZy0+b3B0LCAwKTsKKwkJICAgdm9wdDsKKwkJICAgdm9wdCA9IG9wdDZfZmluZChvcHQ2X25leHQodm9wdCwgdmVuZCksIHZlbmQsIG9wdF9jZmctPm9wdCwgMCkpCisJCWlmICgobWF0Y2ggPSBtYXRjaF9ieXRlcyhvcHRfY2ZnLCBvcHQ2X3B0cih2b3B0LCAwKSwgb3B0Nl9sZW4odm9wdCkpKSkKKwkJICBicmVhazsKKwkgICAgfQorCSAgaWYgKG1hdGNoKQorCSAgICBicmVhazsKKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKCEob3B0ID0gb3B0Nl9maW5kKHN0YXRlLT5wYWNrZXRfb3B0aW9ucywgc3RhdGUtPmVuZCwgb3B0X2NmZy0+b3B0LCAxKSkpCisJICAgIGNvbnRpbnVlOworCSAgCisJICBtYXRjaCA9IG1hdGNoX2J5dGVzKG9wdF9jZmcsIG9wdDZfcHRyKG9wdCwgMCksIG9wdDZfbGVuKG9wdCkpOworCX0gCisgIAorICAgICAgaWYgKG1hdGNoKQorCXsKKwkgIG9wdF9jZmctPm5ldGlkLT5uZXh0ID0gc3RhdGUtPnRhZ3M7CisJICBzdGF0ZS0+dGFncyA9IG9wdF9jZmctPm5ldGlkOworCX0KKyAgICB9CisKKyAgaWYgKHN0YXRlLT5tYWNfbGVuICE9IDApCisgICAgeworICAgICAgaWYgKG9wdGlvbl9ib29sKE9QVF9MT0dfT1BUUykpCisJeworCSAgcHJpbnRfbWFjKGRhZW1vbi0+ZGhjcF9idWZmLCBzdGF0ZS0+bWFjLCBzdGF0ZS0+bWFjX2xlbik7CisJICBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCIldSBjbGllbnQgTUFDIGFkZHJlc3M6ICVzIiksIHN0YXRlLT54aWQsIGRhZW1vbi0+ZGhjcF9idWZmKTsKKwl9CisKKyAgICAgIGZvciAobWFjX29wdCA9IGRhZW1vbi0+ZGhjcF9tYWNzOyBtYWNfb3B0OyBtYWNfb3B0ID0gbWFjX29wdC0+bmV4dCkKKwlpZiAoKHVuc2lnbmVkKW1hY19vcHQtPmh3YWRkcl9sZW4gPT0gc3RhdGUtPm1hY19sZW4gJiYKKwkgICAgKCh1bnNpZ25lZCltYWNfb3B0LT5od2FkZHJfdHlwZSA9PSBzdGF0ZS0+bWFjX3R5cGUgfHwgbWFjX29wdC0+aHdhZGRyX3R5cGUgPT0gMCkgJiYKKwkgICAgbWVtY21wX21hc2tlZChtYWNfb3B0LT5od2FkZHIsIHN0YXRlLT5tYWMsIHN0YXRlLT5tYWNfbGVuLCBtYWNfb3B0LT5tYXNrKSkKKwkgIHsKKwkgICAgbWFjX29wdC0+bmV0aWQubmV4dCA9IHN0YXRlLT50YWdzOworCSAgICBzdGF0ZS0+dGFncyA9ICZtYWNfb3B0LT5uZXRpZDsKKwkgIH0KKyAgICB9CisgIAorICBpZiAoKG9wdCA9IG9wdDZfZmluZChzdGF0ZS0+cGFja2V0X29wdGlvbnMsIHN0YXRlLT5lbmQsIE9QVElPTjZfRlFETiwgMSkpKQorICAgIHsKKyAgICAgIC8qIFJGQzQ3MDQgcmVmZXJzICovCisgICAgICAgaW50IGxlbiA9IG9wdDZfbGVuKG9wdCkgLSAxOworICAgICAgIAorICAgICAgIHN0YXRlLT5mcWRuX2ZsYWdzID0gb3B0Nl91aW50KG9wdCwgMCwgMSk7CisgICAgICAgCisgICAgICAgLyogQWx3YXlzIGZvcmNlIHVwZGF0ZSwgc2luY2UgdGhlIGNsaWVudCBoYXMgbm8gd2F5IHRvIGRvIGl0IGl0c2VsZi4gKi8KKyAgICAgICBpZiAoIW9wdGlvbl9ib29sKE9QVF9GUUROX1VQREFURSkgJiYgIShzdGF0ZS0+ZnFkbl9mbGFncyAmIDB4MDEpKQorCSBzdGF0ZS0+ZnFkbl9mbGFncyB8PSAweDAzOworIAorICAgICAgIHN0YXRlLT5mcWRuX2ZsYWdzICY9IH4weDA0OworCisgICAgICAgaWYgKGxlbiAhPSAwICYmIGxlbiA8IDI1NSkKKwkgeworCSAgIHVuc2lnbmVkIGNoYXIgKnBwLCAqb3AgPSBvcHQ2X3B0cihvcHQsIDEpOworCSAgIGNoYXIgKnBxID0gZGFlbW9uLT5kaGNwX2J1ZmY7CisJICAgCisJICAgcHAgPSBvcDsKKwkgICB3aGlsZSAoKm9wICE9IDAgJiYgKChvcCArICgqb3ApKSAtIHBwKSA8IGxlbikKKwkgICAgIHsKKwkgICAgICAgbWVtY3B5KHBxLCBvcCsxLCAqb3ApOworCSAgICAgICBwcSArPSAqb3A7CisJICAgICAgIG9wICs9ICgqb3ApKzE7CisJICAgICAgICoocHErKykgPSAnLic7CisJICAgICB9CisJICAgCisJICAgaWYgKHBxICE9IGRhZW1vbi0+ZGhjcF9idWZmKQorCSAgICAgcHEtLTsKKwkgICAqcHEgPSAwOworCSAgIAorCSAgIGlmIChsZWdhbF9ob3N0bmFtZShkYWVtb24tPmRoY3BfYnVmZikpCisJICAgICB7CisJICAgICAgIHN0YXRlLT5jbGllbnRfaG9zdG5hbWUgPSBkYWVtb24tPmRoY3BfYnVmZjsKKwkgICAgICAgaWYgKG9wdGlvbl9ib29sKE9QVF9MT0dfT1BUUykpCisJCSBteV9zeXNsb2coTVNfREhDUCB8IExPR19JTkZPLCBfKCIldSBjbGllbnQgcHJvdmlkZXMgbmFtZTogJXMiKSwgc3RhdGUtPnhpZCwgc3RhdGUtPmNsaWVudF9ob3N0bmFtZSk7IAorCSAgICAgfQorCSB9CisgICAgfQkgCisgIAorICBpZiAoc3RhdGUtPmNsaWQpCisgICAgeworICAgICAgY29uZmlnID0gZmluZF9jb25maWcoZGFlbW9uLT5kaGNwX2NvbmYsIHN0YXRlLT5jb250ZXh0LCBzdGF0ZS0+Y2xpZCwgc3RhdGUtPmNsaWRfbGVuLCBzdGF0ZS0+bWFjLCBzdGF0ZS0+bWFjX2xlbiwgc3RhdGUtPm1hY190eXBlLCBOVUxMKTsKKyAgICAgIAorICAgICAgaWYgKGhhdmVfY29uZmlnKGNvbmZpZywgQ09ORklHX05BTUUpKQorCXsKKwkgIHN0YXRlLT5ob3N0bmFtZSA9IGNvbmZpZy0+aG9zdG5hbWU7CisJICBzdGF0ZS0+ZG9tYWluID0gY29uZmlnLT5kb21haW47CisJICBzdGF0ZS0+aG9zdG5hbWVfYXV0aCA9IDE7CisJfQorICAgICAgZWxzZSBpZiAoc3RhdGUtPmNsaWVudF9ob3N0bmFtZSkKKwl7CisJICBzdGF0ZS0+ZG9tYWluID0gc3RyaXBfaG9zdG5hbWUoc3RhdGUtPmNsaWVudF9ob3N0bmFtZSk7CisJICAKKwkgIGlmIChzdHJsZW4oc3RhdGUtPmNsaWVudF9ob3N0bmFtZSkgIT0gMCkKKwkgICAgeworCSAgICAgIHN0YXRlLT5ob3N0bmFtZSA9IHN0YXRlLT5jbGllbnRfaG9zdG5hbWU7CisJICAgICAgaWYgKCFjb25maWcpCisJCXsKKwkJICAvKiBTZWFyY2ggYWdhaW4gbm93IHdlIGhhdmUgYSBob3N0bmFtZS4gCisJCSAgICAgT25seSBhY2NlcHQgY29uZmlncyB3aXRob3V0IENMSUQgaGVyZSwgKGl0IHdvbid0IG1hdGNoKQorCQkgICAgIHRvIGF2b2lkIGltcGVyc29uYXRpb24gYnkgbmFtZS4gKi8KKwkJICBzdHJ1Y3QgZGhjcF9jb25maWcgKm5ldyA9IGZpbmRfY29uZmlnKGRhZW1vbi0+ZGhjcF9jb25mLCBzdGF0ZS0+Y29udGV4dCwgTlVMTCwgMCwgTlVMTCwgMCwgMCwgc3RhdGUtPmhvc3RuYW1lKTsKKwkJICBpZiAobmV3ICYmICFoYXZlX2NvbmZpZyhuZXcsIENPTkZJR19DTElEKSAmJiAhbmV3LT5od2FkZHIpCisJCSAgICBjb25maWcgPSBuZXc7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisKKyAgaWYgKGNvbmZpZykKKyAgICB7CisgICAgICBzdHJ1Y3QgZGhjcF9uZXRpZF9saXN0ICpsaXN0OworICAgICAgCisgICAgICBmb3IgKGxpc3QgPSBjb25maWctPm5ldGlkOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkKKyAgICAgICAgeworICAgICAgICAgIGxpc3QtPmxpc3QtPm5leHQgPSBzdGF0ZS0+dGFnczsKKyAgICAgICAgICBzdGF0ZS0+dGFncyA9IGxpc3QtPmxpc3Q7CisgICAgICAgIH0KKworICAgICAgLyogc2V0ICJrbm93biIgdGFnIGZvciBrbm93biBob3N0cyAqLworICAgICAga25vd25faWQubmV0ID0gImtub3duIjsKKyAgICAgIGtub3duX2lkLm5leHQgPSBzdGF0ZS0+dGFnczsKKyAgICAgIHN0YXRlLT50YWdzID0gJmtub3duX2lkOworCisgICAgICBpZiAoaGF2ZV9jb25maWcoY29uZmlnLCBDT05GSUdfRElTQUJMRSkpCisJaWdub3JlID0gMTsKKyAgICB9CisKKyNpZmRlZiBPUFRJT042X1BSRUZJWF9DTEFTUworICAvKiBPUFRJT05fUFJFRklYX0NMQVNTIGluIE9STywgc2VuZCBhZGRyZXNzZXMgaW4gYWxsIHByZWZpeCBjbGFzc2VzICovCisgIGlmIChkYWVtb24tPnByZWZpeF9jbGFzc2VzICYmIChtc2dfdHlwZSA9PSBESENQNlNPTElDSVQgfHwgbXNnX3R5cGUgPT0gREhDUDZSRVFVRVNUKSkKKyAgICB7CisgICAgICB2b2lkICpvcm87CisgICAgICAKKyAgICAgIGlmICgob3JvID0gb3B0Nl9maW5kKHN0YXRlLT5wYWNrZXRfb3B0aW9ucywgc3RhdGUtPmVuZCwgT1BUSU9ONl9PUk8sIDApKSkKKwlmb3IgKGkgPSAwOyBpIDwgIG9wdDZfbGVuKG9ybykgLSAxOyBpICs9IDIpCisJICBpZiAob3B0Nl91aW50KG9ybywgaSwgMikgPT0gT1BUSU9ONl9QUkVGSVhfQ0xBU1MpCisJICAgIHsKKwkgICAgICBkdW1wX2FsbF9wcmVmaXhfY2xhc3NlcyA9IDE7CisJICAgICAgYnJlYWs7CisJICAgIH0KKyAgICAgIAorICAgICAgaWYgKG1zZ190eXBlICE9IERIQ1A2U09MSUNJVCB8fCBkdW1wX2FsbF9wcmVmaXhfY2xhc3NlcykKKwkvKiBBZGQgdGhlIHRhZ3MgYXNzb2NpYXRlZCB3aXRoIHByZWZpeCBjbGFzc2VzIHNvIHdlIGNhbiB1c2UgdGhlIERIQ1AgcmFuZ2VzLgorCSAgIE5vdCBkb25lIGZvciBTT0xJQ0lUIGFzIHdlIGFkZCB0aGVtICBvbmUtYXQtdGltZS4gKi8KKwlmb3IgKHAgPSBkYWVtb24tPnByZWZpeF9jbGFzc2VzOyBwIDsgcCA9IHAtPm5leHQpCisJICB7CisJICAgIHAtPnRhZy5uZXh0ID0gc3RhdGUtPnRhZ3M7CisJICAgIHN0YXRlLT50YWdzID0gJnAtPnRhZzsKKwkgIH0KKyAgICB9ICAgIAorI2VuZGlmCisKKyAgdGFnaWYgPSBydW5fdGFnX2lmKHN0YXRlLT50YWdzKTsKKyAgCisgIC8qIGlmIGFsbCB0aGUgbmV0aWRzIGluIHRoZSBpZ25vcmUgbGlzdCBhcmUgcHJlc2VudCwgaWdub3JlIHRoaXMgY2xpZW50ICovCisgIGlmIChkYWVtb24tPmRoY3BfaWdub3JlKQorICAgIHsKKyAgICAgIHN0cnVjdCBkaGNwX25ldGlkX2xpc3QgKmlkX2xpc3Q7CisgICAgIAorICAgICAgZm9yIChpZF9saXN0ID0gZGFlbW9uLT5kaGNwX2lnbm9yZTsgaWRfbGlzdDsgaWRfbGlzdCA9IGlkX2xpc3QtPm5leHQpCisJaWYgKG1hdGNoX25ldGlkKGlkX2xpc3QtPmxpc3QsIHRhZ2lmLCAwKSkKKwkgIGlnbm9yZSA9IDE7CisgICAgfQorICAKKyAgLyogaWYgYWxsIHRoZSBuZXRpZHMgaW4gdGhlIGlnbm9yZV9uYW1lIGxpc3QgYXJlIHByZXNlbnQsIGlnbm9yZSBjbGllbnQtc3VwcGxpZWQgbmFtZSAqLworICBpZiAoIXN0YXRlLT5ob3N0bmFtZV9hdXRoKQorICAgIHsKKyAgICAgICBzdHJ1Y3QgZGhjcF9uZXRpZF9saXN0ICppZF9saXN0OworICAgICAgIAorICAgICAgIGZvciAoaWRfbGlzdCA9IGRhZW1vbi0+ZGhjcF9pZ25vcmVfbmFtZXM7IGlkX2xpc3Q7IGlkX2xpc3QgPSBpZF9saXN0LT5uZXh0KQorCSBpZiAoKCFpZF9saXN0LT5saXN0KSB8fCBtYXRjaF9uZXRpZChpZF9saXN0LT5saXN0LCB0YWdpZiwgMCkpCisJICAgYnJlYWs7CisgICAgICAgaWYgKGlkX2xpc3QpCisJIHN0YXRlLT5ob3N0bmFtZSA9IE5VTEw7CisgICAgfQorICAKKworICBzd2l0Y2ggKG1zZ190eXBlKQorICAgIHsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIDA7CisgICAgICAKKyAgICAgIAorICAgIGNhc2UgREhDUDZTT0xJQ0lUOgorICAgICAgeworICAgICAgCWludCBhZGRyZXNzX2Fzc2lnbmVkID0gMDsKKwkvKiB0YWdzIHdpdGhvdXQgYWxsIHByZWZpeC1jbGFzcyB0YWdzICovCisJc3RydWN0IGRoY3BfbmV0aWQgKnNvbGljaXRfdGFnczsKKwlzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjOworCQorCSpvdXRtc2d0eXBlcCA9IERIQ1A2QURWRVJUSVNFOworCQorCWlmIChvcHQ2X2ZpbmQoc3RhdGUtPnBhY2tldF9vcHRpb25zLCBzdGF0ZS0+ZW5kLCBPUFRJT042X1JBUElEX0NPTU1JVCwgMCkpCisJICB7CisJICAgICpvdXRtc2d0eXBlcCA9IERIQ1A2UkVQTFk7CisJICAgIHN0YXRlLT5sZWFzZV9hbGxvY2F0ZSA9IDE7CisJICAgIG8gPSBuZXdfb3B0NihPUFRJT042X1JBUElEX0NPTU1JVCk7CisJICAgIGVuZF9vcHQ2KG8pOworCSAgfQorCQorICAJbG9nNl9xdWlldChzdGF0ZSwgIkRIQ1BTT0xJQ0lUIiwgTlVMTCwgaWdub3JlID8gXygiaWdub3JlZCIpIDogTlVMTCk7CisKKyAgICAgIHJlcXVlc3Rfbm9fYWRkcmVzczoKKwlzb2xpY2l0X3RhZ3MgPSB0YWdpZjsKKwkKKwlpZiAoaWdub3JlKQorCSAgcmV0dXJuIDA7CisJCisJLyogcmVzZXQgVVNFRCBiaXRzIGluIGxlYXNlcyAqLworCWxlYXNlNl9yZXNldCgpOworCisJLyogQ2FuIHVzZSBjb25maWd1cmVkIGFkZHJlc3MgbWF4IG9uY2UgcGVyIHByZWZpeCAqLworCWZvciAoYyA9IHN0YXRlLT5jb250ZXh0OyBjOyBjID0gYy0+Y3VycmVudCkKKwkgIGMtPmZsYWdzICY9IH5DT05URVhUX0NPTkZfVVNFRDsKKworCWZvciAob3B0ID0gc3RhdGUtPnBhY2tldF9vcHRpb25zOyBvcHQ7IG9wdCA9IG9wdDZfbmV4dChvcHQsIHN0YXRlLT5lbmQpKQorCSAgeyAgIAorCSAgICB2b2lkICppYV9vcHRpb24sICppYV9lbmQ7CisJICAgIHVuc2lnbmVkIGludCBtaW5fdGltZSA9IDB4ZmZmZmZmZmY7CisJICAgIGludCB0MWNudHI7CisJICAgIGludCBpYV9jb3VudGVyOworCSAgICAvKiBzZXQgdW5sZXNzIHdlJ3JlIHNlbmRpbmcgYSBwYXJ0aWN1bGFyIHByZWZpeC1jbGFzcywgd2hlbiB3ZQorCSAgICAgICB3YW50IG9ubHkgZGhjcC1yYW5nZXMgd2l0aCB0aGUgY29ycmVjdCB0YWdzIHNldCBhbmQgbm90IHRob3NlIHdpdGhvdXQgYW55IHRhZ3MuICovCisJICAgIGludCBwbGFpbl9yYW5nZSA9IDE7CisJICAgIHUzMiBsZWFzZV90aW1lOworCSAgICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbHRtcDsKKwkgICAgc3RydWN0IGluNl9hZGRyICpyZXFfYWRkcjsKKwkgICAgc3RydWN0IGluNl9hZGRyIGFkZHI7CisKKwkgICAgaWYgKCFjaGVja19pYShzdGF0ZSwgb3B0LCAmaWFfZW5kLCAmaWFfb3B0aW9uKSkKKwkgICAgICBjb250aW51ZTsKKwkgICAgCisJICAgIC8qIHJlc2V0IFVTRUQgYml0cyBpbiBjb250ZXh0cyAtIG9uZSBhZGRyZXNzIHBlciBwcmVmaXggcGVyIElBSUQgKi8KKwkgICAgZm9yIChjID0gc3RhdGUtPmNvbnRleHQ7IGM7IGMgPSBjLT5jdXJyZW50KQorCSAgICAgIGMtPmZsYWdzICY9IH5DT05URVhUX1VTRUQ7CisKKyNpZmRlZiBPUFRJT042X1BSRUZJWF9DTEFTUworCSAgICBpZiAoZGFlbW9uLT5wcmVmaXhfY2xhc3NlcyAmJiBzdGF0ZS0+aWFfdHlwZSA9PSBPUFRJT042X0lBX05BKQorCSAgICAgIHsKKwkJdm9pZCAqcHJlZml4X29wdDsKKwkJaW50IHByZWZpeF9jbGFzczsKKwkJCisJCWlmIChkdW1wX2FsbF9wcmVmaXhfY2xhc3NlcykKKwkJICAvKiBPUFRJT05fUFJFRklYX0NMQVNTIGluIE9STywgc2VuZCBhZGRyZXNzZXMgaW4gYWxsIHByZWZpeCBjbGFzc2VzICovCisJCSAgcGxhaW5fcmFuZ2UgPSAwOworCQllbHNlIAorCQkgIHsgCisJCSAgICBpZiAoKHByZWZpeF9vcHQgPSBvcHQ2X2ZpbmQob3B0Nl9wdHIob3B0LCAxMiksIGlhX2VuZCwgT1BUSU9ONl9QUkVGSVhfQ0xBU1MsIDIpKSkKKwkJICAgICAgeworCQkJCisJCQlwcmVmaXhfY2xhc3MgPSBvcHQ2X3VpbnQocHJlZml4X29wdCwgMCwgMik7CisJCQkKKwkJCWZvciAocCA9IGRhZW1vbi0+cHJlZml4X2NsYXNzZXM7IHAgOyBwID0gcC0+bmV4dCkKKwkJCSAgaWYgKHAtPmNsYXNzID09IHByZWZpeF9jbGFzcykKKwkJCSAgICBicmVhazsKKwkJCQorCQkJaWYgKCFwKQorCQkJICBteV9zeXNsb2coTVNfREhDUCB8IExPR19XQVJOSU5HLCBfKCJ1bmtub3duIHByZWZpeC1jbGFzcyAlZCIpLCBwcmVmaXhfY2xhc3MpOworCQkJZWxzZQorCQkJICB7CisJCQkgICAgLyogYWRkIHRhZyB0byBsaXN0LCBhbmQgZXhjbHVkZSB1bmRlY29yYXRlZCBkaGNwLXJhbmdlcyAqLworCQkJICAgIHAtPnRhZy5uZXh0ID0gc3RhdGUtPnRhZ3M7CisJCQkgICAgc29saWNpdF90YWdzID0gcnVuX3RhZ19pZigmcC0+dGFnKTsKKwkJCSAgICBwbGFpbl9yYW5nZSA9IDA7CisJCQkgICAgc3RhdGUtPnNlbmRfcHJlZml4X2NsYXNzID0gcDsKKwkJCSAgfQorCQkgICAgICB9CisJCSAgICBlbHNlCisJCSAgICAgIHsKKwkJCS8qIGNsaWVudCBkaWRuJ3QgYXNrIGZvciBhIHByZWZpeCBjbGFzcywgbGV0cyBzZWUgaWYgd2UgY2FuIGZpbmQgb25lLiAqLworCQkJZm9yIChwID0gZGFlbW9uLT5wcmVmaXhfY2xhc3NlczsgcCA7IHAgPSBwLT5uZXh0KQorCQkJICB7CisJCQkgICAgcC0+dGFnLm5leHQgPSBOVUxMOworCQkJICAgIGlmIChtYXRjaF9uZXRpZCgmcC0+dGFnLCBzb2xpY2l0X3RhZ3MsIDEpKQorCQkJICAgICAgYnJlYWs7CisJCQkgIH0KKwkJCQorCQkJaWYgKHApCisJCQkgIHsKKwkJCSAgICBwbGFpbl9yYW5nZSA9IDA7CisJCQkgICAgc3RhdGUtPnNlbmRfcHJlZml4X2NsYXNzID0gcDsKKwkJCSAgfQorCQkgICAgICB9CisKKwkJICAgIGlmIChwICYmIG9wdGlvbl9ib29sKE9QVF9MT0dfT1BUUykpCisJCSAgICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sICIldSBwcmVmaXggY2xhc3MgJWQgdGFnOiVzIiwgc3RhdGUtPnhpZCwgcC0+Y2xhc3MsIHAtPnRhZy5uZXQpOyAKKwkJICB9CisJICAgICAgfQorI2VuZGlmCisKKwkgICAgbyA9IGJ1aWxkX2lhKHN0YXRlLCAmdDFjbnRyKTsKKwkgICAgaWYgKGFkZHJlc3NfYXNzaWduZWQpCisJCWFkZHJlc3NfYXNzaWduZWQgPSAyOworCisJICAgIGZvciAoaWFfY291bnRlciA9IDA7IGlhX29wdGlvbjsgaWFfY291bnRlcisrLCBpYV9vcHRpb24gPSBvcHQ2X2ZpbmQob3B0Nl9uZXh0KGlhX29wdGlvbiwgaWFfZW5kKSwgaWFfZW5kLCBPUFRJT042X0lBQUREUiwgMjQpKQorCSAgICAgIHsKKwkJcmVxX2FkZHIgPSBvcHQ2X3B0cihpYV9vcHRpb24sIDApOworCQkJCQorCQlpZiAoKGMgPSBhZGRyZXNzNl92YWxpZChzdGF0ZS0+Y29udGV4dCwgcmVxX2FkZHIsIHNvbGljaXRfdGFncywgcGxhaW5fcmFuZ2UpKSkKKwkJICB7CisJCSAgICBsZWFzZV90aW1lID0gYy0+bGVhc2VfdGltZTsKKwkJICAgIC8qIElmIHRoZSBjbGllbnQgYXNrcyBmb3IgYW4gYWRkcmVzcyBvbiB0aGUgc2FtZSBuZXR3b3JrIGFzIGEgY29uZmlndXJlZCBhZGRyZXNzLCAKKwkJICAgICAgIG9mZmVyIHRoZSBjb25maWd1cmVkIGFkZHJlc3MgaW5zdGVhZCwgdG8gbWFrZSBtb3ZpbmcgdG8gbmV3bHktY29uZmlndXJlZAorCQkgICAgICAgYWRkcmVzc2VzIGF1dG9tYXRpYy4gKi8KKwkJICAgIGlmICghKGMtPmZsYWdzICYgQ09OVEVYVF9DT05GX1VTRUQpICYmIGNvbmZpZ192YWxpZChjb25maWcsIGMsICZhZGRyKSAmJiBjaGVja19hZGRyZXNzKHN0YXRlLCAmYWRkcikpCisJCSAgICAgIHsKKwkJCXJlcV9hZGRyID0gJmFkZHI7CisJCQltYXJrX2NvbmZpZ191c2VkKGMsICZhZGRyKTsKKwkJCWlmIChoYXZlX2NvbmZpZyhjb25maWcsIENPTkZJR19USU1FKSkKKwkJCSAgbGVhc2VfdGltZSA9IGNvbmZpZy0+bGVhc2VfdGltZTsKKwkJICAgICAgfQorCQkgICAgZWxzZSBpZiAoIShjID0gYWRkcmVzczZfYXZhaWxhYmxlKHN0YXRlLT5jb250ZXh0LCByZXFfYWRkciwgc29saWNpdF90YWdzLCBwbGFpbl9yYW5nZSkpKQorCQkgICAgICBjb250aW51ZTsgLyogbm90IGFuIGFkZHJlc3Mgd2UncmUgYWxsb3dlZCAqLworCQkgICAgZWxzZSBpZiAoIWNoZWNrX2FkZHJlc3Moc3RhdGUsIHJlcV9hZGRyKSkKKwkJICAgICAgY29udGludWU7IC8qIGFkZHJlc3MgbGVhc2VkIGVsc2V3aGVyZSAqLworCQkgICAgCisJCSAgICAvKiBhZGQgYWRkcmVzcyB0byBvdXRwdXQgcGFja2V0ICovCisjaWZkZWYgT1BUSU9ONl9QUkVGSVhfQ0xBU1MKKwkJICAgIGlmIChkdW1wX2FsbF9wcmVmaXhfY2xhc3NlcyAmJiBzdGF0ZS0+aWFfdHlwZSA9PSBPUFRJT042X0lBX05BKQorCQkgICAgICBzdGF0ZS0+c2VuZF9wcmVmaXhfY2xhc3MgPSBwcmVmaXhfY2xhc3NfZnJvbV9jb250ZXh0KGMpOworI2VuZGlmCQkgICAgCisJCSAgICBhZGRfYWRkcmVzcyhzdGF0ZSwgYywgbGVhc2VfdGltZSwgaWFfb3B0aW9uLCAmbWluX3RpbWUsIHJlcV9hZGRyLCBub3cpOworCQkgICAgbWFya19jb250ZXh0X3VzZWQoc3RhdGUsIHJlcV9hZGRyKTsKKwkJICAgIGdldF9jb250ZXh0X3RhZyhzdGF0ZSwgYyk7CisJCSAgICBhZGRyZXNzX2Fzc2lnbmVkID0gMTsKKwkJICB9CisJICAgICAgfQorCSAgICAKKwkgICAgLyogU3VnZ2VzdCBjb25maWd1cmVkIGFkZHJlc3MoZXMpICovCisJICAgIGZvciAoYyA9IHN0YXRlLT5jb250ZXh0OyBjOyBjID0gYy0+Y3VycmVudCkgCisJICAgICAgaWYgKCEoYy0+ZmxhZ3MgJiBDT05URVhUX0NPTkZfVVNFRCkgJiYKKwkJICBtYXRjaF9uZXRpZChjLT5maWx0ZXIsIHNvbGljaXRfdGFncywgcGxhaW5fcmFuZ2UpICYmCisJCSAgY29uZmlnX3ZhbGlkKGNvbmZpZywgYywgJmFkZHIpICYmIAorCQkgIGNoZWNrX2FkZHJlc3Moc3RhdGUsICZhZGRyKSkKKwkJeworCQkgIG1hcmtfY29uZmlnX3VzZWQoc3RhdGUtPmNvbnRleHQsICZhZGRyKTsKKwkJICBpZiAoaGF2ZV9jb25maWcoY29uZmlnLCBDT05GSUdfVElNRSkpCisJCSAgICBsZWFzZV90aW1lID0gY29uZmlnLT5sZWFzZV90aW1lOworCQkgIGVsc2UKKwkJICAgIGxlYXNlX3RpbWUgPSBjLT5sZWFzZV90aW1lOworCQkgIC8qIGFkZCBhZGRyZXNzIHRvIG91dHB1dCBwYWNrZXQgKi8KKyNpZmRlZiBPUFRJT042X1BSRUZJWF9DTEFTUworCQkgIGlmIChkdW1wX2FsbF9wcmVmaXhfY2xhc3NlcyAmJiBzdGF0ZS0+aWFfdHlwZSA9PSBPUFRJT042X0lBX05BKQorCQkgICAgc3RhdGUtPnNlbmRfcHJlZml4X2NsYXNzID0gcHJlZml4X2NsYXNzX2Zyb21fY29udGV4dChjKTsKKyNlbmRpZgorCQkgIGFkZF9hZGRyZXNzKHN0YXRlLCBjLCBsZWFzZV90aW1lLCBOVUxMLCAmbWluX3RpbWUsICZhZGRyLCBub3cpOworCQkgIG1hcmtfY29udGV4dF91c2VkKHN0YXRlLCAmYWRkcik7CisJCSAgZ2V0X2NvbnRleHRfdGFnKHN0YXRlLCBjKTsKKwkJICBhZGRyZXNzX2Fzc2lnbmVkID0gMTsKKwkJfQorCSAgICAKKwkgICAgLyogcmV0dXJuIGFkZHJlc3NlcyBmb3IgZXhpc3RpbmcgbGVhc2VzICovCisJICAgIGx0bXAgPSBOVUxMOworCSAgICB3aGlsZSAoKGx0bXAgPSBsZWFzZTZfZmluZF9ieV9jbGllbnQobHRtcCwgc3RhdGUtPmlhX3R5cGUgPT0gT1BUSU9ONl9JQV9OQSA/IExFQVNFX05BIDogTEVBU0VfVEEsIHN0YXRlLT5jbGlkLCBzdGF0ZS0+Y2xpZF9sZW4sIHN0YXRlLT5pYWlkKSkpCisJICAgICAgeworCQlyZXFfYWRkciA9ICZsdG1wLT5hZGRyNjsKKwkJaWYgKChjID0gYWRkcmVzczZfYXZhaWxhYmxlKHN0YXRlLT5jb250ZXh0LCByZXFfYWRkciwgc29saWNpdF90YWdzLCBwbGFpbl9yYW5nZSkpKQorCQkgIHsKKyNpZmRlZiBPUFRJT042X1BSRUZJWF9DTEFTUworCQkgICAgaWYgKGR1bXBfYWxsX3ByZWZpeF9jbGFzc2VzICYmIHN0YXRlLT5pYV90eXBlID09IE9QVElPTjZfSUFfTkEpCisJCSAgICAgIHN0YXRlLT5zZW5kX3ByZWZpeF9jbGFzcyA9IHByZWZpeF9jbGFzc19mcm9tX2NvbnRleHQoYyk7CisjZW5kaWYKKwkJICAgIGFkZF9hZGRyZXNzKHN0YXRlLCBjLCBjLT5sZWFzZV90aW1lLCBOVUxMLCAmbWluX3RpbWUsIHJlcV9hZGRyLCBub3cpOworCQkgICAgbWFya19jb250ZXh0X3VzZWQoc3RhdGUsIHJlcV9hZGRyKTsKKwkJICAgIGdldF9jb250ZXh0X3RhZyhzdGF0ZSwgYyk7CisJCSAgICBhZGRyZXNzX2Fzc2lnbmVkID0gMTsKKwkJICB9CisJICAgICAgfQorCQkgCSAgIAorCSAgICAvKiBSZXR1cm4gYWRkcmVzc2VzIGZvciBhbGwgdmFsaWQgY29udGV4dHMgd2hpY2ggZG9uJ3QgeWV0IGhhdmUgb25lICovCisJICAgIHdoaWxlICgoYyA9IGFkZHJlc3M2X2FsbG9jYXRlKHN0YXRlLT5jb250ZXh0LCBzdGF0ZS0+Y2xpZCwgc3RhdGUtPmNsaWRfbGVuLCBzdGF0ZS0+aWFfdHlwZSA9PSBPUFRJT042X0lBX1RBLAorCQkJCQkgIHN0YXRlLT5pYWlkLCBpYV9jb3VudGVyLCBzb2xpY2l0X3RhZ3MsIHBsYWluX3JhbmdlLCAmYWRkcikpKQorCSAgICAgIHsKKyNpZmRlZiBPUFRJT042X1BSRUZJWF9DTEFTUworCQlpZiAoZHVtcF9hbGxfcHJlZml4X2NsYXNzZXMgJiYgc3RhdGUtPmlhX3R5cGUgPT0gT1BUSU9ONl9JQV9OQSkKKwkJICBzdGF0ZS0+c2VuZF9wcmVmaXhfY2xhc3MgPSBwcmVmaXhfY2xhc3NfZnJvbV9jb250ZXh0KGMpOworI2VuZGlmCisJCWFkZF9hZGRyZXNzKHN0YXRlLCBjLCBjLT5sZWFzZV90aW1lLCBOVUxMLCAmbWluX3RpbWUsICZhZGRyLCBub3cpOworCQltYXJrX2NvbnRleHRfdXNlZChzdGF0ZSwgJmFkZHIpOworCQlnZXRfY29udGV4dF90YWcoc3RhdGUsIGMpOworCQlhZGRyZXNzX2Fzc2lnbmVkID0gMTsKKwkgICAgICB9CisJICAgIAorCSAgICBpZiAoYWRkcmVzc19hc3NpZ25lZCAhPSAxKQorCSAgICAgIHsKKwkJLyogSWYgdGhlIHNlcnZlciB3aWxsIG5vdCBhc3NpZ24gYW55IGFkZHJlc3NlcyB0byBhbnkgSUFzIGluIGEKKwkJICAgc3Vic2VxdWVudCBSZXF1ZXN0IGZyb20gdGhlIGNsaWVudCwgdGhlIHNlcnZlciBNVVNUIHNlbmQgYW4gQWR2ZXJ0aXNlCisJCSAgIG1lc3NhZ2UgdG8gdGhlIGNsaWVudCB0aGF0IGRvZXNuJ3QgaW5jbHVkZSBhbnkgSUEgb3B0aW9ucy4gKi8KKwkJaWYgKCFzdGF0ZS0+bGVhc2VfYWxsb2NhdGUpCisJCSAgeworCQkgICAgc2F2ZV9jb3VudGVyKG8pOworCQkgICAgY29udGludWU7CisJCSAgfQorCQkKKwkJLyogSWYgdGhlIHNlcnZlciBjYW5ub3QgYXNzaWduIGFueSBhZGRyZXNzZXMgdG8gYW4gSUEgaW4gdGhlIG1lc3NhZ2UKKwkJICAgZnJvbSB0aGUgY2xpZW50LCB0aGUgc2VydmVyIE1VU1QgaW5jbHVkZSB0aGUgSUEgaW4gdGhlIFJlcGx5IG1lc3NhZ2UKKwkJICAgd2l0aCBubyBhZGRyZXNzZXMgaW4gdGhlIElBIGFuZCBhIFN0YXR1cyBDb2RlIG9wdGlvbiBpbiB0aGUgSUEKKwkJICAgY29udGFpbmluZyBzdGF0dXMgY29kZSBOb0FkZHJzQXZhaWwuICovCisJCW8xID0gbmV3X29wdDYoT1BUSU9ONl9TVEFUVVNfQ09ERSk7CisJCXB1dF9vcHQ2X3Nob3J0KERIQ1A2Tk9BRERSUyk7CisJCXB1dF9vcHQ2X3N0cmluZyhfKCJhZGRyZXNzIHVuYXZhaWxhYmxlIikpOworCQllbmRfb3B0NihvMSk7CisJICAgICAgfQorCSAgICAKKwkgICAgZW5kX2lhKHQxY250ciwgbWluX3RpbWUsIDApOworCSAgICBlbmRfb3B0NihvKTsJCisJICB9CisKKwlpZiAoYWRkcmVzc19hc3NpZ25lZCkgCisJICB7CisJICAgIG8xID0gbmV3X29wdDYoT1BUSU9ONl9TVEFUVVNfQ09ERSk7CisJICAgIHB1dF9vcHQ2X3Nob3J0KERIQ1A2U1VDQ0VTUyk7CisJICAgIHB1dF9vcHQ2X3N0cmluZyhfKCJzdWNjZXNzIikpOworCSAgICBlbmRfb3B0NihvMSk7CisJICAgIAorCSAgICAvKiBJZiAtLWRoY3AtYXV0aG9yaXRhdGl2ZSBpcyBzZXQsIHdlIGNhbiB0ZWxsIGNsaWVudCBub3QgdG8gd2FpdCBmb3IKKwkgICAgICAgb3RoZXIgcG9zc2libGUgc2VydmVycyAqLworCSAgICBvID0gbmV3X29wdDYoT1BUSU9ONl9QUkVGRVJFTkNFKTsKKwkgICAgcHV0X29wdDZfY2hhcihvcHRpb25fYm9vbChPUFRfQVVUSE9SSVRBVElWRSkgPyAyNTUgOiAwKTsKKwkgICAgZW5kX29wdDYobyk7CisJICAgIHRhZ2lmID0gYWRkX29wdGlvbnMoc3RhdGUsIDApOworCSAgfQorCWVsc2UKKwkgIHsgCisJICAgIC8qIG5vIGFkZHJlc3MsIHJldHVybiBlcnJvciAqLworCSAgICBvMSA9IG5ld19vcHQ2KE9QVElPTjZfU1RBVFVTX0NPREUpOworCSAgICBwdXRfb3B0Nl9zaG9ydChESENQNk5PQUREUlMpOworCSAgICBwdXRfb3B0Nl9zdHJpbmcoXygibm8gYWRkcmVzc2VzIGF2YWlsYWJsZSIpKTsKKwkgICAgZW5kX29wdDYobzEpOworCSAgICBsb2c2X3BhY2tldChzdGF0ZSwgc3RhdGUtPmxlYXNlX2FsbG9jYXRlID8gIkRIQ1BSRVBMWSIgOiAiREhDUEFEVkVSVElTRSIsIE5VTEwsIF8oIm5vIGFkZHJlc3NlcyBhdmFpbGFibGUiKSk7CisJICB9CisKKwlicmVhazsKKyAgICAgIH0KKyAgICAgIAorICAgIGNhc2UgREhDUDZSRVFVRVNUOgorICAgICAgeworCWludCBhZGRyZXNzX2Fzc2lnbmVkID0gMDsKKwlpbnQgc3RhcnQgPSBzYXZlX2NvdW50ZXIoLTEpOworCisJLyogc2V0IHJlcGx5IG1lc3NhZ2UgdHlwZSAqLworCSpvdXRtc2d0eXBlcCA9IERIQ1A2UkVQTFk7CisJc3RhdGUtPmxlYXNlX2FsbG9jYXRlID0gMTsKKworCWxvZzZfcXVpZXQoc3RhdGUsICJESENQUkVRVUVTVCIsIE5VTEwsIGlnbm9yZSA/IF8oImlnbm9yZWQiKSA6IE5VTEwpOworCQorCWlmIChpZ25vcmUpCisJICByZXR1cm4gMDsKKwkKKwlmb3IgKG9wdCA9IHN0YXRlLT5wYWNrZXRfb3B0aW9uczsgb3B0OyBvcHQgPSBvcHQ2X25leHQob3B0LCBzdGF0ZS0+ZW5kKSkKKwkgIHsgICAKKwkgICAgdm9pZCAqaWFfb3B0aW9uLCAqaWFfZW5kOworCSAgICB1bnNpZ25lZCBpbnQgbWluX3RpbWUgPSAweGZmZmZmZmZmOworCSAgICBpbnQgdDFjbnRyOworCSAgICAKKwkgICAgIGlmICghY2hlY2tfaWEoc3RhdGUsIG9wdCwgJmlhX2VuZCwgJmlhX29wdGlvbikpCisJICAgICAgIGNvbnRpbnVlOworCisJICAgICBpZiAoIWlhX29wdGlvbikKKwkgICAgICAgeworCQkgLyogSWYgd2UgZ2V0IGEgcmVxdWVzdCB3aXRoIGEgSUFfKkEgd2l0aG91dCBhZGRyZXNzZXMsIHRyZWF0IGl0IGV4YWN0bHkgbGlrZQorCQkgICAgYSBTT0xJQ1Qgd2l0aCByYXBpZCBjb21taXQgc2V0LiAqLworCQkgc2F2ZV9jb3VudGVyKHN0YXJ0KTsKKwkJIGdvdG8gcmVxdWVzdF9ub19hZGRyZXNzOyAKKwkgICAgICAgfQorCisJICAgIG8gPSBidWlsZF9pYShzdGF0ZSwgJnQxY250cik7CisJICAgICAgCisJICAgIGZvciAoOyBpYV9vcHRpb247IGlhX29wdGlvbiA9IG9wdDZfZmluZChvcHQ2X25leHQoaWFfb3B0aW9uLCBpYV9lbmQpLCBpYV9lbmQsIE9QVElPTjZfSUFBRERSLCAyNCkpCisJICAgICAgeworCQlzdHJ1Y3QgaW42X2FkZHIgKnJlcV9hZGRyID0gb3B0Nl9wdHIoaWFfb3B0aW9uLCAwKTsKKwkJc3RydWN0IGRoY3BfY29udGV4dCAqZHluYW1pYywgKmM7CisJCXVuc2lnbmVkIGludCBsZWFzZV90aW1lOworCQlzdHJ1Y3QgaW42X2FkZHIgYWRkcjsKKwkJaW50IGNvbmZpZ19vayA9IDA7CisJCQorCQlpZiAoKGMgPSBhZGRyZXNzNl92YWxpZChzdGF0ZS0+Y29udGV4dCwgcmVxX2FkZHIsIHRhZ2lmLCAxKSkpCisJCSAgY29uZmlnX29rID0gY29uZmlnX3ZhbGlkKGNvbmZpZywgYywgJmFkZHIpICYmIElONl9BUkVfQUREUl9FUVVBTCgmYWRkciwgcmVxX2FkZHIpOworCQkKKwkJaWYgKChkeW5hbWljID0gYWRkcmVzczZfYXZhaWxhYmxlKHN0YXRlLT5jb250ZXh0LCByZXFfYWRkciwgdGFnaWYsIDEpKSB8fCBjKQorCQkgIHsKKwkJICAgIGlmICghZHluYW1pYyAmJiAhY29uZmlnX29rKQorCQkgICAgICB7CisJCQkvKiBTdGF0aWMgcmFuZ2UsIG5vdCBjb25maWd1cmVkLiAqLworCQkJbzEgPSBuZXdfb3B0NihPUFRJT042X1NUQVRVU19DT0RFKTsKKwkJCXB1dF9vcHQ2X3Nob3J0KERIQ1A2Tk9BRERSUyk7CisJCQlwdXRfb3B0Nl9zdHJpbmcoXygiYWRkcmVzcyB1bmF2YWlsYWJsZSIpKTsKKwkJCWVuZF9vcHQ2KG8xKTsKKwkJICAgICAgfQorCQkgICAgZWxzZSBpZiAoIWNoZWNrX2FkZHJlc3Moc3RhdGUsIHJlcV9hZGRyKSkKKwkJICAgICAgeworCQkJLyogQWRkcmVzcyBsZWFzZWQgdG8gYW5vdGhlciBEVUlEL0lBSUQgKi8KKwkJCW8xID0gbmV3X29wdDYoT1BUSU9ONl9TVEFUVVNfQ09ERSk7CisJCQlwdXRfb3B0Nl9zaG9ydChESENQNlVOU1BFQyk7CisJCQlwdXRfb3B0Nl9zdHJpbmcoXygiYWRkcmVzcyBpbiB1c2UiKSk7CisJCQllbmRfb3B0NihvMSk7CisJCSAgICAgIH0gCisJCSAgICBlbHNlIAorCQkgICAgICB7CisJCQlpZiAoIWR5bmFtaWMpCisJCQkgIGR5bmFtaWMgPSBjOworCisJCQlsZWFzZV90aW1lID0gZHluYW1pYy0+bGVhc2VfdGltZTsKKwkJCQorCQkJaWYgKGNvbmZpZ19vayAmJiBoYXZlX2NvbmZpZyhjb25maWcsIENPTkZJR19USU1FKSkKKwkJCSAgbGVhc2VfdGltZSA9IGNvbmZpZy0+bGVhc2VfdGltZTsKKworI2lmZGVmIE9QVElPTjZfUFJFRklYX0NMQVNTCisJCQlpZiAoZHVtcF9hbGxfcHJlZml4X2NsYXNzZXMgJiYgc3RhdGUtPmlhX3R5cGUgPT0gT1BUSU9ONl9JQV9OQSkKKwkJCSAgc3RhdGUtPnNlbmRfcHJlZml4X2NsYXNzID0gcHJlZml4X2NsYXNzX2Zyb21fY29udGV4dChjKTsKKyNlbmRpZgorCQkJYWRkX2FkZHJlc3Moc3RhdGUsIGR5bmFtaWMsIGxlYXNlX3RpbWUsIGlhX29wdGlvbiwgJm1pbl90aW1lLCByZXFfYWRkciwgbm93KTsKKwkJCWdldF9jb250ZXh0X3RhZyhzdGF0ZSwgZHluYW1pYyk7CisJCQlhZGRyZXNzX2Fzc2lnbmVkID0gMTsKKwkJICAgICAgfQorCQkgIH0KKwkJZWxzZSAKKwkJICB7CisJCSAgICAvKiByZXF1ZXN0ZWQgYWRkcmVzcyBub3Qgb24gdGhlIGNvcnJlY3QgbGluayAqLworCQkgICAgbzEgPSBuZXdfb3B0NihPUFRJT042X1NUQVRVU19DT0RFKTsKKwkJICAgIHB1dF9vcHQ2X3Nob3J0KERIQ1A2Tk9UT05MSU5LKTsKKwkJICAgIHB1dF9vcHQ2X3N0cmluZyhfKCJub3Qgb24gbGluayIpKTsKKwkJICAgIGVuZF9vcHQ2KG8xKTsKKwkJICB9CisJICAgICAgfQorCSAKKwkgICAgZW5kX2lhKHQxY250ciwgbWluX3RpbWUsIDApOworCSAgICBlbmRfb3B0NihvKTsJCisJICB9CisKKwlpZiAoYWRkcmVzc19hc3NpZ25lZCkgCisJICB7CisJICAgIG8xID0gbmV3X29wdDYoT1BUSU9ONl9TVEFUVVNfQ09ERSk7CisJICAgIHB1dF9vcHQ2X3Nob3J0KERIQ1A2U1VDQ0VTUyk7CisJICAgIHB1dF9vcHQ2X3N0cmluZyhfKCJzdWNjZXNzIikpOworCSAgICBlbmRfb3B0NihvMSk7CisJICB9CisJZWxzZQorCSAgeyAKKwkgICAgLyogbm8gYWRkcmVzcywgcmV0dXJuIGVycm9yICovCisJICAgIG8xID0gbmV3X29wdDYoT1BUSU9ONl9TVEFUVVNfQ09ERSk7CisJICAgIHB1dF9vcHQ2X3Nob3J0KERIQ1A2Tk9BRERSUyk7CisJICAgIHB1dF9vcHQ2X3N0cmluZyhfKCJubyBhZGRyZXNzZXMgYXZhaWxhYmxlIikpOworCSAgICBlbmRfb3B0NihvMSk7CisJICAgIGxvZzZfcGFja2V0KHN0YXRlLCAiREhDUFJFUExZIiwgTlVMTCwgXygibm8gYWRkcmVzc2VzIGF2YWlsYWJsZSIpKTsKKwkgIH0KKworCXRhZ2lmID0gYWRkX29wdGlvbnMoc3RhdGUsIDApOworCWJyZWFrOworICAgICAgfQorICAgICAgCisgIAorICAgIGNhc2UgREhDUDZSRU5FVzoKKyAgICAgIHsKKwkvKiBzZXQgcmVwbHkgbWVzc2FnZSB0eXBlICovCisJKm91dG1zZ3R5cGVwID0gREhDUDZSRVBMWTsKKwkKKwlsb2c2X3F1aWV0KHN0YXRlLCAiREhDUFJFTkVXIiwgTlVMTCwgTlVMTCk7CisKKwlmb3IgKG9wdCA9IHN0YXRlLT5wYWNrZXRfb3B0aW9uczsgb3B0OyBvcHQgPSBvcHQ2X25leHQob3B0LCBzdGF0ZS0+ZW5kKSkKKwkgIHsKKwkgICAgdm9pZCAqaWFfb3B0aW9uLCAqaWFfZW5kOworCSAgICB1bnNpZ25lZCBpbnQgbWluX3RpbWUgPSAweGZmZmZmZmZmOworCSAgICBpbnQgdDFjbnRyLCBpYWNudHI7CisJICAgIAorCSAgICBpZiAoIWNoZWNrX2lhKHN0YXRlLCBvcHQsICZpYV9lbmQsICZpYV9vcHRpb24pKQorCSAgICAgIGNvbnRpbnVlOworCSAgICAKKwkgICAgbyA9IGJ1aWxkX2lhKHN0YXRlLCAmdDFjbnRyKTsKKwkgICAgaWFjbnRyID0gc2F2ZV9jb3VudGVyKC0xKTsgCisJICAgIAorCSAgICBmb3IgKDsgaWFfb3B0aW9uOyBpYV9vcHRpb24gPSBvcHQ2X2ZpbmQob3B0Nl9uZXh0KGlhX29wdGlvbiwgaWFfZW5kKSwgaWFfZW5kLCBPUFRJT042X0lBQUREUiwgMjQpKQorCSAgICAgIHsKKwkJc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlID0gTlVMTDsKKwkJc3RydWN0IGluNl9hZGRyICpyZXFfYWRkciA9IG9wdDZfcHRyKGlhX29wdGlvbiwgMCk7CisJCXVuc2lnbmVkIGludCBwcmVmZXJyZWRfdGltZSA9ICBvcHQ2X3VpbnQoaWFfb3B0aW9uLCAxNiwgNCk7CisJCXVuc2lnbmVkIGludCB2YWxpZF90aW1lID0gIG9wdDZfdWludChpYV9vcHRpb24sIDIwLCA0KTsKKwkJY2hhciAqbWVzc2FnZSA9IE5VTEw7CisJCXN0cnVjdCBkaGNwX2NvbnRleHQgKnRoaXNfY29udGV4dDsKKwkJCisJCWlmICghKGxlYXNlID0gbGVhc2U2X2ZpbmQoc3RhdGUtPmNsaWQsIHN0YXRlLT5jbGlkX2xlbiwKKwkJCQkJICBzdGF0ZS0+aWFfdHlwZSA9PSBPUFRJT042X0lBX05BID8gTEVBU0VfTkEgOiBMRUFTRV9UQSwgCisJCQkJCSAgc3RhdGUtPmlhaWQsIHJlcV9hZGRyKSkpCisJCSAgeworCQkgICAgLyogSWYgdGhlIHNlcnZlciBjYW5ub3QgZmluZCBhIGNsaWVudCBlbnRyeSBmb3IgdGhlIElBIHRoZSBzZXJ2ZXIKKwkJICAgICAgIHJldHVybnMgdGhlIElBIGNvbnRhaW5pbmcgbm8gYWRkcmVzc2VzIHdpdGggYSBTdGF0dXMgQ29kZSBvcHRpb24gc2V0CisJCSAgICAgICB0byBOb0JpbmRpbmcgaW4gdGhlIFJlcGx5IG1lc3NhZ2UuICovCisJCSAgICBzYXZlX2NvdW50ZXIoaWFjbnRyKTsKKwkJICAgIHQxY250ciA9IDA7CisJCSAgICAKKwkJICAgIGxvZzZfcGFja2V0KHN0YXRlLCAiREhDUFJFUExZIiwgcmVxX2FkZHIsIF8oImxlYXNlIG5vdCBmb3VuZCIpKTsKKwkJICAgIAorCQkgICAgbzEgPSBuZXdfb3B0NihPUFRJT042X1NUQVRVU19DT0RFKTsKKwkJICAgIHB1dF9vcHQ2X3Nob3J0KERIQ1A2Tk9CSU5ESU5HKTsKKwkJICAgIHB1dF9vcHQ2X3N0cmluZyhfKCJubyBiaW5kaW5nIGZvdW5kIikpOworCQkgICAgZW5kX29wdDYobzEpOworCisJCSAgICBwcmVmZXJyZWRfdGltZSA9IHZhbGlkX3RpbWUgPSAwOworCQkgICAgYnJlYWs7CisJCSAgfQorCQkKKwkJCisJCWlmICgodGhpc19jb250ZXh0ID0gYWRkcmVzczZfYXZhaWxhYmxlKHN0YXRlLT5jb250ZXh0LCByZXFfYWRkciwgdGFnaWYsIDEpKSB8fAorCQkgICAgKHRoaXNfY29udGV4dCA9IGFkZHJlc3M2X3ZhbGlkKHN0YXRlLT5jb250ZXh0LCByZXFfYWRkciwgdGFnaWYsIDEpKSkKKwkJICB7CisJCSAgICBzdHJ1Y3QgaW42X2FkZHIgYWRkcjsKKwkJICAgIHVuc2lnbmVkIGludCBsZWFzZV90aW1lOworCisJCSAgICBnZXRfY29udGV4dF90YWcoc3RhdGUsIHRoaXNfY29udGV4dCk7CisJCSAgICAKKwkJICAgIGlmIChjb25maWdfdmFsaWQoY29uZmlnLCB0aGlzX2NvbnRleHQsICZhZGRyKSAmJiBJTjZfQVJFX0FERFJfRVFVQUwoJmFkZHIsIHJlcV9hZGRyKSAmJiBoYXZlX2NvbmZpZyhjb25maWcsIENPTkZJR19USU1FKSkKKwkJICAgICAgbGVhc2VfdGltZSA9IGNvbmZpZy0+bGVhc2VfdGltZTsKKwkJICAgIGVsc2UgCisJCSAgICAgIGxlYXNlX3RpbWUgPSB0aGlzX2NvbnRleHQtPmxlYXNlX3RpbWU7CisJCSAgICAKKwkJICAgIGNhbGN1bGF0ZV90aW1lcyh0aGlzX2NvbnRleHQsICZtaW5fdGltZSwgJnZhbGlkX3RpbWUsICZwcmVmZXJyZWRfdGltZSwgbGVhc2VfdGltZSk7IAorCQkgICAgCisJCSAgICBsZWFzZV9zZXRfZXhwaXJlcyhsZWFzZSwgdmFsaWRfdGltZSwgbm93KTsKKwkJICAgIC8qIFVwZGF0ZSBNQUMgcmVjb3JkIGluIGNhc2UgaXQncyBuZXcgaW5mb3JtYXRpb24uICovCisJCSAgICBpZiAoc3RhdGUtPm1hY19sZW4gIT0gMCkKKwkJICAgICAgbGVhc2Vfc2V0X2h3YWRkcihsZWFzZSwgc3RhdGUtPm1hYywgc3RhdGUtPmNsaWQsIHN0YXRlLT5tYWNfbGVuLCBzdGF0ZS0+bWFjX3R5cGUsIHN0YXRlLT5jbGlkX2xlbiwgbm93LCAwKTsKKwkJICAgIGlmIChzdGF0ZS0+aWFfdHlwZSA9PSBPUFRJT042X0lBX05BICYmIHN0YXRlLT5ob3N0bmFtZSkKKwkJICAgICAgeworCQkJY2hhciAqYWRkcl9kb21haW4gPSBnZXRfZG9tYWluNihyZXFfYWRkcik7CisJCQlpZiAoIXN0YXRlLT5zZW5kX2RvbWFpbikKKwkJCSAgc3RhdGUtPnNlbmRfZG9tYWluID0gYWRkcl9kb21haW47CisJCQlsZWFzZV9zZXRfaG9zdG5hbWUobGVhc2UsIHN0YXRlLT5ob3N0bmFtZSwgc3RhdGUtPmhvc3RuYW1lX2F1dGgsIGFkZHJfZG9tYWluLCBzdGF0ZS0+ZG9tYWluKTsgCisJCQltZXNzYWdlID0gc3RhdGUtPmhvc3RuYW1lOworCQkgICAgICB9CisJCSAgICAKKwkJICAgIAorCQkgICAgaWYgKHByZWZlcnJlZF90aW1lID09IDApCisJCSAgICAgIG1lc3NhZ2UgPSBfKCJkZXByZWNhdGVkIik7CisJCSAgfQorCQllbHNlCisJCSAgeworCQkgICAgcHJlZmVycmVkX3RpbWUgPSB2YWxpZF90aW1lID0gMDsKKwkJICAgIG1lc3NhZ2UgPSBfKCJhZGRyZXNzIGludmFsaWQiKTsKKwkJICB9CisKKwkJaWYgKG1lc3NhZ2UpCisJCSAgbG9nNl9wYWNrZXQoc3RhdGUsICJESENQUkVQTFkiLCByZXFfYWRkciwgbWVzc2FnZSk7CQorCQllbHNlCisJCSAgbG9nNl9xdWlldChzdGF0ZSwgIkRIQ1BSRVBMWSIsIHJlcV9hZGRyLCBtZXNzYWdlKTsKKwkKKwkJbzEgPSAgbmV3X29wdDYoT1BUSU9ONl9JQUFERFIpOworCQlwdXRfb3B0NihyZXFfYWRkciwgc2l6ZW9mKCpyZXFfYWRkcikpOworCQlwdXRfb3B0Nl9sb25nKHByZWZlcnJlZF90aW1lKTsKKwkJcHV0X29wdDZfbG9uZyh2YWxpZF90aW1lKTsKKwkJZW5kX29wdDYobzEpOworCSAgICAgIH0KKwkgICAgCisJICAgIGVuZF9pYSh0MWNudHIsIG1pbl90aW1lLCAxKTsKKwkgICAgZW5kX29wdDYobyk7CisJICB9CisJCisJdGFnaWYgPSBhZGRfb3B0aW9ucyhzdGF0ZSwgMCk7CisJYnJlYWs7CisJCisgICAgICB9CisgICAgICAKKyAgICBjYXNlIERIQ1A2Q09ORklSTToKKyAgICAgIHsKKwlpbnQgZ29vZF9hZGRyID0gMDsKKworCS8qIHNldCByZXBseSBtZXNzYWdlIHR5cGUgKi8KKwkqb3V0bXNndHlwZXAgPSBESENQNlJFUExZOworCQorCWxvZzZfcXVpZXQoc3RhdGUsICJESENQQ09ORklSTSIsIE5VTEwsIE5VTEwpOworCQorCWZvciAob3B0ID0gc3RhdGUtPnBhY2tldF9vcHRpb25zOyBvcHQ7IG9wdCA9IG9wdDZfbmV4dChvcHQsIHN0YXRlLT5lbmQpKQorCSAgeworCSAgICB2b2lkICppYV9vcHRpb24sICppYV9lbmQ7CisJICAgIAorCSAgICBmb3IgKGNoZWNrX2lhKHN0YXRlLCBvcHQsICZpYV9lbmQsICZpYV9vcHRpb24pOworCQkgaWFfb3B0aW9uOworCQkgaWFfb3B0aW9uID0gb3B0Nl9maW5kKG9wdDZfbmV4dChpYV9vcHRpb24sIGlhX2VuZCksIGlhX2VuZCwgT1BUSU9ONl9JQUFERFIsIDI0KSkKKwkgICAgICB7CisJCXN0cnVjdCBpbjZfYWRkciAqcmVxX2FkZHIgPSBvcHQ2X3B0cihpYV9vcHRpb24sIDApOworCQkKKwkJaWYgKCFhZGRyZXNzNl9hdmFpbGFibGUoc3RhdGUtPmNvbnRleHQsIHJlcV9hZGRyLCB0YWdpZiwgMSkpCisJCSAgeworCQkgICAgbzEgPSBuZXdfb3B0NihPUFRJT042X1NUQVRVU19DT0RFKTsKKwkJICAgIHB1dF9vcHQ2X3Nob3J0KERIQ1A2Tk9UT05MSU5LKTsKKwkJICAgIHB1dF9vcHQ2X3N0cmluZyhfKCJjb25maXJtIGZhaWxlZCIpKTsKKwkJICAgIGVuZF9vcHQ2KG8xKTsKKwkJICAgIHJldHVybiAxOworCQkgIH0KKworCQlnb29kX2FkZHIgPSAxOworCQlsb2c2X3F1aWV0KHN0YXRlLCAiREhDUFJFUExZIiwgcmVxX2FkZHIsIHN0YXRlLT5ob3N0bmFtZSk7CisJICAgICAgfQorCSAgfQkgCisJCisJLyogTm8gYWRkcmVzc2VzLCBubyByZXBseTogUkZDIDMzMTUgMTguMi4yICovCisJaWYgKCFnb29kX2FkZHIpCisJICByZXR1cm4gMDsKKworCW8xID0gbmV3X29wdDYoT1BUSU9ONl9TVEFUVVNfQ09ERSk7CisJcHV0X29wdDZfc2hvcnQoREhDUDZTVUNDRVNTICk7CisJcHV0X29wdDZfc3RyaW5nKF8oImFsbCBhZGRyZXNzZXMgc3RpbGwgb24gbGluayIpKTsKKwllbmRfb3B0NihvMSk7CisJYnJlYWs7CisgICAgfQorICAgICAgCisgICAgY2FzZSBESENQNklSRVE6CisgICAgICB7CisJLyogV2UgY2FuJ3QgZGlzY3JpbWluYXRlIGNvbnRleHRzIGJhc2VkIG9uIGFkZHJlc3MsIGFzIHdlIGRvbid0IGtub3cgaXQuCisJICAgSWYgdGhlcmUgaXMgb25seSBvbmUgcG9zc2libGUgY29udGV4dCwgd2UgY2FuIHVzZSBpdHMgdGFncyAqLworCWlmIChzdGF0ZS0+Y29udGV4dCAmJiBzdGF0ZS0+Y29udGV4dC0+bmV0aWQubmV0ICYmICFzdGF0ZS0+Y29udGV4dC0+Y3VycmVudCkKKwkgIHsKKwkgICAgc3RhdGUtPmNvbnRleHQtPm5ldGlkLm5leHQgPSBOVUxMOworCSAgICBzdGF0ZS0+Y29udGV4dF90YWdzID0gICZzdGF0ZS0+Y29udGV4dC0+bmV0aWQ7CisJICB9CisKKwkvKiBTaW1pbGFybHksIHdlIGNhbid0IGRldGVybWluZSBkb21haW4gZnJvbSBhZGRyZXNzLCBidXQgaWYgdGhlIEZRRE4gaXMKKwkgICBnaXZlbiBpbiAtLWRoY3AtaG9zdCwgd2UgY2FuIHVzZSB0aGF0LCBhbmQgZmFpbGluZyB0aGF0IHdlIGNhbiB1c2UgdGhlIAorCSAgIHVucXVhbGlmaWVkIGNvbmZpZ3VyZWQgZG9tYWluLCBpZiBhbnkuICovCisJaWYgKHN0YXRlLT5ob3N0bmFtZV9hdXRoKQorCSAgc3RhdGUtPnNlbmRfZG9tYWluID0gc3RhdGUtPmRvbWFpbjsKKwllbHNlCisJICBzdGF0ZS0+c2VuZF9kb21haW4gPSBnZXRfZG9tYWluNihOVUxMKTsKKworCWxvZzZfcXVpZXQoc3RhdGUsICJESENQSU5GT1JNQVRJT04tUkVRVUVTVCIsIE5VTEwsIGlnbm9yZSA/IF8oImlnbm9yZWQiKSA6IHN0YXRlLT5ob3N0bmFtZSk7CisJaWYgKGlnbm9yZSkKKwkgIHJldHVybiAwOworCSpvdXRtc2d0eXBlcCA9IERIQ1A2UkVQTFk7CisJdGFnaWYgPSBhZGRfb3B0aW9ucyhzdGF0ZSwgMSk7CisJYnJlYWs7CisgICAgICB9CisgICAgICAKKyAgICAgIAorICAgIGNhc2UgREhDUDZSRUxFQVNFOgorICAgICAgeworCS8qIHNldCByZXBseSBtZXNzYWdlIHR5cGUgKi8KKwkqb3V0bXNndHlwZXAgPSBESENQNlJFUExZOworCisJbG9nNl9xdWlldChzdGF0ZSwgIkRIQ1BSRUxFQVNFIiwgTlVMTCwgTlVMTCk7CisKKwlmb3IgKG9wdCA9IHN0YXRlLT5wYWNrZXRfb3B0aW9uczsgb3B0OyBvcHQgPSBvcHQ2X25leHQob3B0LCBzdGF0ZS0+ZW5kKSkKKwkgIHsKKwkgICAgdm9pZCAqaWFfb3B0aW9uLCAqaWFfZW5kOworCSAgICBpbnQgbWFkZV9pYSA9IDA7CisJICAgIAkgICAgCisJICAgIGZvciAoY2hlY2tfaWEoc3RhdGUsIG9wdCwgJmlhX2VuZCwgJmlhX29wdGlvbik7CisJCSBpYV9vcHRpb247CisJCSBpYV9vcHRpb24gPSBvcHQ2X2ZpbmQob3B0Nl9uZXh0KGlhX29wdGlvbiwgaWFfZW5kKSwgaWFfZW5kLCBPUFRJT042X0lBQUREUiwgMjQpKSAKKwkgICAgICB7CisJCXN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTsKKwkJCisJCWlmICgobGVhc2UgPSBsZWFzZTZfZmluZChzdGF0ZS0+Y2xpZCwgc3RhdGUtPmNsaWRfbGVuLCBzdGF0ZS0+aWFfdHlwZSA9PSBPUFRJT042X0lBX05BID8gTEVBU0VfTkEgOiBMRUFTRV9UQSwKKwkJCQkJIHN0YXRlLT5pYWlkLCBvcHQ2X3B0cihpYV9vcHRpb24sIDApKSkpCisJCSAgbGVhc2VfcHJ1bmUobGVhc2UsIG5vdyk7CisJCWVsc2UKKwkJICB7CisJCSAgICBpZiAoIW1hZGVfaWEpCisJCSAgICAgIHsKKwkJCW8gPSBuZXdfb3B0NihzdGF0ZS0+aWFfdHlwZSk7CisJCQlwdXRfb3B0Nl9sb25nKHN0YXRlLT5pYWlkKTsKKwkJCWlmIChzdGF0ZS0+aWFfdHlwZSA9PSBPUFRJT042X0lBX05BKQorCQkJICB7CisJCQkgICAgcHV0X29wdDZfbG9uZygwKTsKKwkJCSAgICBwdXRfb3B0Nl9sb25nKDApOyAKKwkJCSAgfQorCQkJbWFkZV9pYSA9IDE7CisJCSAgICAgIH0KKwkJICAgIAorCQkgICAgbzEgPSBuZXdfb3B0NihPUFRJT042X0lBQUREUik7CisJCSAgICBwdXRfb3B0NihvcHQ2X3B0cihpYV9vcHRpb24sIDApLCBJTjZBRERSU1opOworCQkgICAgcHV0X29wdDZfbG9uZygwKTsKKwkJICAgIHB1dF9vcHQ2X2xvbmcoMCk7CisJCSAgICBlbmRfb3B0NihvMSk7CisJCSAgfQorCSAgICAgIH0KKwkgICAgCisJICAgIGlmIChtYWRlX2lhKQorCSAgICAgIHsKKwkJbzEgPSBuZXdfb3B0NihPUFRJT042X1NUQVRVU19DT0RFKTsKKwkJcHV0X29wdDZfc2hvcnQoREhDUDZOT0JJTkRJTkcpOworCQlwdXRfb3B0Nl9zdHJpbmcoXygibm8gYmluZGluZyBmb3VuZCIpKTsKKwkJZW5kX29wdDYobzEpOworCQkKKwkJZW5kX29wdDYobyk7CisJICAgICAgfQorCSAgfQorCQorCW8xID0gbmV3X29wdDYoT1BUSU9ONl9TVEFUVVNfQ09ERSk7CisJcHV0X29wdDZfc2hvcnQoREhDUDZTVUNDRVNTKTsKKwlwdXRfb3B0Nl9zdHJpbmcoXygicmVsZWFzZSByZWNlaXZlZCIpKTsKKwllbmRfb3B0NihvMSk7CisJCisJYnJlYWs7CisgICAgICB9CisKKyAgICBjYXNlIERIQ1A2REVDTElORToKKyAgICAgIHsKKwkvKiBzZXQgcmVwbHkgbWVzc2FnZSB0eXBlICovCisJKm91dG1zZ3R5cGVwID0gREhDUDZSRVBMWTsKKwkKKwlsb2c2X3F1aWV0KHN0YXRlLCAiREhDUERFQ0xJTkUiLCBOVUxMLCBOVUxMKTsKKworCWZvciAob3B0ID0gc3RhdGUtPnBhY2tldF9vcHRpb25zOyBvcHQ7IG9wdCA9IG9wdDZfbmV4dChvcHQsIHN0YXRlLT5lbmQpKQorCSAgeworCSAgICB2b2lkICppYV9vcHRpb24sICppYV9lbmQ7CisJICAgIGludCBtYWRlX2lhID0gMDsKKwkgICAgCSAgICAKKwkgICAgZm9yIChjaGVja19pYShzdGF0ZSwgb3B0LCAmaWFfZW5kLCAmaWFfb3B0aW9uKTsKKwkJIGlhX29wdGlvbjsKKwkJIGlhX29wdGlvbiA9IG9wdDZfZmluZChvcHQ2X25leHQoaWFfb3B0aW9uLCBpYV9lbmQpLCBpYV9lbmQsIE9QVElPTjZfSUFBRERSLCAyNCkpIAorCSAgICAgIHsKKwkJc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlOworCQlzdHJ1Y3QgaW42X2FkZHIgKmFkZHJwID0gb3B0Nl9wdHIoaWFfb3B0aW9uLCAwKTsKKworCQlpZiAoaGF2ZV9jb25maWcoY29uZmlnLCBDT05GSUdfQUREUjYpICYmIElONl9BUkVfQUREUl9FUVVBTCgmY29uZmlnLT5hZGRyNiwgYWRkcnApKQorCQkgIHsKKwkJICAgIHByZXR0eXByaW50X3RpbWUoZGFlbW9uLT5kaGNwX2J1ZmYzLCBERUNMSU5FX0JBQ0tPRkYpOworCQkgICAgaW5ldF9udG9wKEFGX0lORVQ2LCBhZGRycCwgZGFlbW9uLT5hZGRyYnVmZiwgQUREUlNUUkxFTik7CisJCSAgICBteV9zeXNsb2coTVNfREhDUCB8IExPR19XQVJOSU5HLCBfKCJkaXNhYmxpbmcgREhDUCBzdGF0aWMgYWRkcmVzcyAlcyBmb3IgJXMiKSwgCisJCQkgICAgICBkYWVtb24tPmFkZHJidWZmLCBkYWVtb24tPmRoY3BfYnVmZjMpOworCQkgICAgY29uZmlnLT5mbGFncyB8PSBDT05GSUdfREVDTElORUQ7CisJCSAgICBjb25maWctPmRlY2xpbmVfdGltZSA9IG5vdzsKKwkJICB9CisJCWVsc2UKKwkJICAvKiBtYWtlIHN1cmUgdGhpcyBob3N0IGdldHMgYSBkaWZmZXJlbnQgYWRkcmVzcyBuZXh0IHRpbWUuICovCisJCSAgZm9yIChjb250ZXh0X3RtcCA9IHN0YXRlLT5jb250ZXh0OyBjb250ZXh0X3RtcDsgY29udGV4dF90bXAgPSBjb250ZXh0X3RtcC0+Y3VycmVudCkKKwkJICAgIGNvbnRleHRfdG1wLT5hZGRyX2Vwb2NoKys7CisJCQorCQlpZiAoKGxlYXNlID0gbGVhc2U2X2ZpbmQoc3RhdGUtPmNsaWQsIHN0YXRlLT5jbGlkX2xlbiwgc3RhdGUtPmlhX3R5cGUgPT0gT1BUSU9ONl9JQV9OQSA/IExFQVNFX05BIDogTEVBU0VfVEEsCisJCQkJCSBzdGF0ZS0+aWFpZCwgb3B0Nl9wdHIoaWFfb3B0aW9uLCAwKSkpKQorCQkgIGxlYXNlX3BydW5lKGxlYXNlLCBub3cpOworCQllbHNlCisJCSAgeworCQkgICAgaWYgKCFtYWRlX2lhKQorCQkgICAgICB7CisJCQlvID0gbmV3X29wdDYoc3RhdGUtPmlhX3R5cGUpOworCQkJcHV0X29wdDZfbG9uZyhzdGF0ZS0+aWFpZCk7CisJCQlpZiAoc3RhdGUtPmlhX3R5cGUgPT0gT1BUSU9ONl9JQV9OQSkKKwkJCSAgeworCQkJICAgIHB1dF9vcHQ2X2xvbmcoMCk7CisJCQkgICAgcHV0X29wdDZfbG9uZygwKTsgCisJCQkgIH0KKwkJCW1hZGVfaWEgPSAxOworCQkgICAgICB9CisJCSAgICAKKwkJICAgIG8xID0gbmV3X29wdDYoT1BUSU9ONl9JQUFERFIpOworCQkgICAgcHV0X29wdDYob3B0Nl9wdHIoaWFfb3B0aW9uLCAwKSwgSU42QUREUlNaKTsKKwkJICAgIHB1dF9vcHQ2X2xvbmcoMCk7CisJCSAgICBwdXRfb3B0Nl9sb25nKDApOworCQkgICAgZW5kX29wdDYobzEpOworCQkgIH0KKwkgICAgICB9CisJICAgIAorCSAgICBpZiAobWFkZV9pYSkKKwkgICAgICB7CisJCW8xID0gbmV3X29wdDYoT1BUSU9ONl9TVEFUVVNfQ09ERSk7CisJCXB1dF9vcHQ2X3Nob3J0KERIQ1A2Tk9CSU5ESU5HKTsKKwkJcHV0X29wdDZfc3RyaW5nKF8oIm5vIGJpbmRpbmcgZm91bmQiKSk7CisJCWVuZF9vcHQ2KG8xKTsKKwkJCisJCWVuZF9vcHQ2KG8pOworCSAgICAgIH0KKwkgICAgCisJICB9CisKKwkvKiBXZSBtdXN0IGFud3NlciB3aXRoICdzdWNjZXNzJyBpbiBnbG9iYWwgc2VjdGlvbiBhbnl3YXkgKi8KKwlvMSA9IG5ld19vcHQ2KE9QVElPTjZfU1RBVFVTX0NPREUpOworCXB1dF9vcHQ2X3Nob3J0KERIQ1A2U1VDQ0VTUyk7CisJcHV0X29wdDZfc3RyaW5nKF8oInN1Y2Nlc3MiKSk7CisJZW5kX29wdDYobzEpOworCWJyZWFrOworICAgICAgfQorCisgICAgfQorICAKKyAgbG9nX3RhZ3ModGFnaWYsIHN0YXRlLT54aWQpOworICBsb2c2X29wdHMoMCwgc3RhdGUtPnhpZCwgZGFlbW9uLT5vdXRwYWNrZXQuaW92X2Jhc2UgKyBzdGFydF9vcHRzLCBkYWVtb24tPm91dHBhY2tldC5pb3ZfYmFzZSArIHNhdmVfY291bnRlcigtMSkpOworICAKKyAgcmV0dXJuIDE7CisKK30KKworc3RhdGljIHN0cnVjdCBkaGNwX25ldGlkICphZGRfb3B0aW9ucyhzdHJ1Y3Qgc3RhdGUgKnN0YXRlLCBpbnQgZG9fcmVmcmVzaCkgIAoreworICB2b2lkICpvcm87CisgIC8qIGZpbHRlciBvcHRpb25zIGJhc2VkIG9uIHRhZ3MsIHRob3NlIHdlIHdhbnQgZ2V0IERIT1BUX1RBR09LIGJpdCBzZXQgKi8KKyAgc3RydWN0IGRoY3BfbmV0aWQgKnRhZ2lmID0gb3B0aW9uX2ZpbHRlcihzdGF0ZS0+dGFncywgc3RhdGUtPmNvbnRleHRfdGFncywgZGFlbW9uLT5kaGNwX29wdHM2KTsKKyAgc3RydWN0IGRoY3Bfb3B0ICpvcHRfY2ZnOworICBpbnQgZG9uZV9kbnMgPSAwLCBkb25lX3JlZnJlc2ggPSAhZG9fcmVmcmVzaCwgZG9fZW5jYXAgPSAwOworICBpbnQgaSwgbywgbzE7CisKKyAgb3JvID0gb3B0Nl9maW5kKHN0YXRlLT5wYWNrZXRfb3B0aW9ucywgc3RhdGUtPmVuZCwgT1BUSU9ONl9PUk8sIDApOworICAKKyAgZm9yIChvcHRfY2ZnID0gZGFlbW9uLT5kaGNwX29wdHM2OyBvcHRfY2ZnOyBvcHRfY2ZnID0gb3B0X2NmZy0+bmV4dCkKKyAgICB7CisgICAgICAvKiBuZXRpZHMgbWF0Y2ggYW5kIG5vdCBlbmNhcHN1bGF0ZWQ/ICovCisgICAgICBpZiAoIShvcHRfY2ZnLT5mbGFncyAmIERIT1BUX1RBR09LKSkKKwljb250aW51ZTsKKyAgICAgIAorICAgICAgaWYgKCEob3B0X2NmZy0+ZmxhZ3MgJiBESE9QVF9GT1JDRSkgJiYgb3JvKQorCXsKKwkgIGZvciAoaSA9IDA7IGkgPCAgb3B0Nl9sZW4ob3JvKSAtIDE7IGkgKz0gMikKKwkgICAgaWYgKG9wdDZfdWludChvcm8sIGksIDIpID09ICh1bnNpZ25lZClvcHRfY2ZnLT5vcHQpCisJICAgICAgYnJlYWs7CisJICAKKwkgIC8qIG9wdGlvbiBub3QgcmVxdWVzdGVkICovCisJICBpZiAoaSA+PSAgb3B0Nl9sZW4ob3JvKSAtIDEpCisJICAgIGNvbnRpbnVlOworCX0KKyAgICAgIAorICAgICAgaWYgKG9wdF9jZmctPm9wdCA9PSBPUFRJT042X1JFRlJFU0hfVElNRSkKKwlkb25lX3JlZnJlc2ggPSAxOworICAgICAgCisgICAgICBpZiAob3B0X2NmZy0+ZmxhZ3MgJiBESE9QVF9BRERSNikKKwl7CisJICBpbnQgbGVuLCBqOworCSAgc3RydWN0IGluNl9hZGRyICphOworCSAgCisJICBpZiAob3B0X2NmZy0+b3B0ID09IE9QVElPTjZfRE5TX1NFUlZFUikKKwkgICAgZG9uZV9kbnMgPSAxOworCSAgCisJICBmb3IgKGEgPSAoc3RydWN0IGluNl9hZGRyICopb3B0X2NmZy0+dmFsLCBsZW4gPSBvcHRfY2ZnLT5sZW4sIGogPSAwOyAKKwkgICAgICAgaiA8IG9wdF9jZmctPmxlbjsgaiArPSBJTjZBRERSU1osIGErKykKKwkgICAgaWYgKChJTjZfSVNfQUREUl9VTEFfWkVSTyhhKSAmJiBJTjZfSVNfQUREUl9VTlNQRUNJRklFRChzdGF0ZS0+dWxhX2FkZHIpKSB8fAorCQkoSU42X0lTX0FERFJfTElOS19MT0NBTF9aRVJPKGEpICYmIElONl9JU19BRERSX1VOU1BFQ0lGSUVEKHN0YXRlLT5sbF9hZGRyKSkpCisJICAgICAgbGVuIC09IElONkFERFJTWjsKKwkgIAorCSAgaWYgKGxlbiAhPSAwKQorCSAgICB7CisJICAgICAgCisJICAgICAgbyA9IG5ld19vcHQ2KG9wdF9jZmctPm9wdCk7CisJICAgICAgCSAgCisJICAgICAgZm9yIChhID0gKHN0cnVjdCBpbjZfYWRkciAqKW9wdF9jZmctPnZhbCwgaiA9IDA7IGogPCBvcHRfY2ZnLT5sZW47IGorPUlONkFERFJTWiwgYSsrKQorCQl7CisJCSAgaWYgKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKGEpKQorCQkgICAgeworCQkgICAgICBpZiAoIWFkZF9sb2NhbF9hZGRycyhzdGF0ZS0+Y29udGV4dCkpCisJCQlwdXRfb3B0NihzdGF0ZS0+ZmFsbGJhY2ssIElONkFERFJTWik7CisJCSAgICB9CisJCSAgZWxzZSBpZiAoSU42X0lTX0FERFJfVUxBX1pFUk8oYSkpCisJCSAgICB7CisJCSAgICAgIGlmICghSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoc3RhdGUtPnVsYV9hZGRyKSkKKwkJCXB1dF9vcHQ2KHN0YXRlLT51bGFfYWRkciwgSU42QUREUlNaKTsKKwkJICAgIH0KKwkJICBlbHNlIGlmIChJTjZfSVNfQUREUl9MSU5LX0xPQ0FMX1pFUk8oYSkpCisJCSAgICB7CisJCSAgICAgIGlmICghSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoc3RhdGUtPmxsX2FkZHIpKQorCQkJcHV0X29wdDYoc3RhdGUtPmxsX2FkZHIsIElONkFERFJTWik7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgcHV0X29wdDYoYSwgSU42QUREUlNaKTsKKwkJfQorCisJICAgICAgZW5kX29wdDYobyk7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgbyA9IG5ld19vcHQ2KG9wdF9jZmctPm9wdCk7CisJICBpZiAob3B0X2NmZy0+dmFsKQorCSAgICBwdXRfb3B0NihvcHRfY2ZnLT52YWwsIG9wdF9jZmctPmxlbik7CisJICBlbmRfb3B0NihvKTsKKwl9CisgICAgfQorICAKKyAgaWYgKGRhZW1vbi0+cG9ydCA9PSBOQU1FU0VSVkVSX1BPUlQgJiYgIWRvbmVfZG5zKQorICAgIHsKKyAgICAgIG8gPSBuZXdfb3B0NihPUFRJT042X0ROU19TRVJWRVIpOworICAgICAgaWYgKCFhZGRfbG9jYWxfYWRkcnMoc3RhdGUtPmNvbnRleHQpKQorCXB1dF9vcHQ2KHN0YXRlLT5mYWxsYmFjaywgSU42QUREUlNaKTsKKyAgICAgIGVuZF9vcHQ2KG8pOyAKKyAgICB9CisKKyAgaWYgKHN0YXRlLT5jb250ZXh0ICYmICFkb25lX3JlZnJlc2gpCisgICAgeworICAgICAgc3RydWN0IGRoY3BfY29udGV4dCAqYzsKKyAgICAgIHVuc2lnbmVkIGludCBsZWFzZV90aW1lID0gMHhmZmZmZmZmZjsKKyAgICAgIAorICAgICAgLyogRmluZCB0aGUgc21hbGxlc3QgbGVhc2UgdGllIG9mIGFsbCBjb250ZXh0cywKKwkgc3ViamV4dCB0byB0aGUgUkZDLTQyNDIgc3RpcHVsYXRpb24gdGhhdCB0aGlzIG11c3Qgbm90IAorCSBiZSBsZXNzIHRoYW4gNjAwLiAqLworICAgICAgZm9yIChjID0gc3RhdGUtPmNvbnRleHQ7IGM7IGMgPSBjLT5uZXh0KQorCWlmIChjLT5sZWFzZV90aW1lIDwgbGVhc2VfdGltZSkKKwkgIHsKKwkgICAgaWYgKGMtPmxlYXNlX3RpbWUgPCA2MDApCisJICAgICAgbGVhc2VfdGltZSA9IDYwMDsKKwkgICAgZWxzZQorCSAgICAgIGxlYXNlX3RpbWUgPSBjLT5sZWFzZV90aW1lOworCSAgfQorCisgICAgICBvID0gbmV3X29wdDYoT1BUSU9ONl9SRUZSRVNIX1RJTUUpOworICAgICAgcHV0X29wdDZfbG9uZyhsZWFzZV90aW1lKTsKKyAgICAgIGVuZF9vcHQ2KG8pOyAKKyAgICB9CisgICAKKyAgICAvKiBoYW5kbGUgdmVuZG9yLWlkZW50aWZ5aW5nIHZlbmRvci1lbmNhcHN1bGF0ZWQgb3B0aW9ucywKKyAgICAgICBkaGNwLW9wdGlvbiA9IHZpLWVuY2FwOjEzLDE3LC4uLi4uLi4gKi8KKyAgZm9yIChvcHRfY2ZnID0gZGFlbW9uLT5kaGNwX29wdHM2OyBvcHRfY2ZnOyBvcHRfY2ZnID0gb3B0X2NmZy0+bmV4dCkKKyAgICBvcHRfY2ZnLT5mbGFncyAmPSB+REhPUFRfRU5DQVBfRE9ORTsKKyAgICAKKyAgaWYgKG9ybykKKyAgICBmb3IgKGkgPSAwOyBpIDwgIG9wdDZfbGVuKG9ybykgLSAxOyBpICs9IDIpCisgICAgICBpZiAob3B0Nl91aW50KG9ybywgaSwgMikgPT0gT1BUSU9ONl9WRU5ET1JfT1BUUykKKwlkb19lbmNhcCA9IDE7CisgIAorICBmb3IgKG9wdF9jZmcgPSBkYWVtb24tPmRoY3Bfb3B0czY7IG9wdF9jZmc7IG9wdF9jZmcgPSBvcHRfY2ZnLT5uZXh0KQorICAgIHsgCisgICAgICBpZiAob3B0X2NmZy0+ZmxhZ3MgJiBESE9QVF9SRkMzOTI1KQorCXsKKwkgIGludCBmb3VuZCA9IDA7CisJICBzdHJ1Y3QgZGhjcF9vcHQgKm9jOworCSAgCisJICBpZiAob3B0X2NmZy0+ZmxhZ3MgJiBESE9QVF9FTkNBUF9ET05FKQorCSAgICBjb250aW51ZTsKKwkgIAorCSAgZm9yIChvYyA9IGRhZW1vbi0+ZGhjcF9vcHRzNjsgb2M7IG9jID0gb2MtPm5leHQpCisJICAgIHsKKwkgICAgICBvYy0+ZmxhZ3MgJj0gfkRIT1BUX0VOQ0FQX01BVENIOworCSAgICAgIAorCSAgICAgIGlmICghKG9jLT5mbGFncyAmIERIT1BUX1JGQzM5MjUpIHx8IG9wdF9jZmctPnUuZW5jYXAgIT0gb2MtPnUuZW5jYXApCisJCWNvbnRpbnVlOworCSAgICAgIAorCSAgICAgIG9jLT5mbGFncyB8PSBESE9QVF9FTkNBUF9ET05FOworCSAgICAgIGlmIChtYXRjaF9uZXRpZChvYy0+bmV0aWQsIHRhZ2lmLCAxKSkKKwkJeworCQkgIC8qIG9wdGlvbiByZXF1ZXN0ZWQvZm9yY2VkPyAqLworCQkgIGlmICghb3JvIHx8IGRvX2VuY2FwIHx8IChvYy0+ZmxhZ3MgJiBESE9QVF9GT1JDRSkpCisJCSAgICB7CisJCSAgICAgIG9jLT5mbGFncyB8PSBESE9QVF9FTkNBUF9NQVRDSDsKKwkJICAgICAgZm91bmQgPSAxOworCQkgICAgfQorCQl9IAorCSAgICB9CisJICAKKwkgIGlmIChmb3VuZCkKKwkgICAgeyAKKwkgICAgICBvID0gbmV3X29wdDYoT1BUSU9ONl9WRU5ET1JfT1BUUyk7CSAgICAgIAorCSAgICAgIHB1dF9vcHQ2X2xvbmcob3B0X2NmZy0+dS5lbmNhcCk7CQorCSAgICAgCisJICAgICAgZm9yIChvYyA9IGRhZW1vbi0+ZGhjcF9vcHRzNjsgb2M7IG9jID0gb2MtPm5leHQpCisJCWlmIChvYy0+ZmxhZ3MgJiBESE9QVF9FTkNBUF9NQVRDSCkKKwkJICB7CisJCSAgICBvMSA9IG5ld19vcHQ2KG9jLT5vcHQpOworCQkgICAgcHV0X29wdDYob2MtPnZhbCwgb2MtPmxlbik7CisJCSAgICBlbmRfb3B0NihvMSk7CisJCSAgfQorCSAgICAgIGVuZF9vcHQ2KG8pOworCSAgICB9CisJfQorICAgIH0gICAgICAKKworCisgIGlmIChzdGF0ZS0+aG9zdG5hbWUpCisgICAgeworICAgICAgdW5zaWduZWQgY2hhciAqcDsKKyAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oc3RhdGUtPmhvc3RuYW1lKTsKKyAgICAgIAorICAgICAgaWYgKHN0YXRlLT5zZW5kX2RvbWFpbikKKwlsZW4gKz0gc3RybGVuKHN0YXRlLT5zZW5kX2RvbWFpbikgKyAyOworCisgICAgICBvID0gbmV3X29wdDYoT1BUSU9ONl9GUUROKTsKKyAgICAgIGlmICgocCA9IGV4cGFuZChsZW4gKyAyKSkpCisJeworCSAgKihwKyspID0gc3RhdGUtPmZxZG5fZmxhZ3M7CisJICBwID0gZG9fcmZjMTAzNV9uYW1lKHAsIHN0YXRlLT5ob3N0bmFtZSk7CisJICBpZiAoc3RhdGUtPnNlbmRfZG9tYWluKQorCSAgICB7CisJICAgICAgcCA9IGRvX3JmYzEwMzVfbmFtZShwLCBzdGF0ZS0+c2VuZF9kb21haW4pOworCSAgICAgICpwID0gMDsKKwkgICAgfQorCX0KKyAgICAgIGVuZF9vcHQ2KG8pOworICAgIH0KKworCisgIC8qIGxvZ2dpbmcgKi8KKyAgaWYgKG9wdGlvbl9ib29sKE9QVF9MT0dfT1BUUykgJiYgb3JvKQorICAgIHsKKyAgICAgIGNoYXIgKnEgPSBkYWVtb24tPm5hbWVidWZmOworICAgICAgZm9yIChpID0gMDsgaSA8ICBvcHQ2X2xlbihvcm8pIC0gMTsgaSArPSAyKQorCXsKKwkgIGNoYXIgKnMgPSBvcHRpb25fc3RyaW5nKEFGX0lORVQ2LCBvcHQ2X3VpbnQob3JvLCBpLCAyKSwgTlVMTCwgMCwgTlVMTCwgMCk7CisJICBxICs9IHNucHJpbnRmKHEsIE1BWEROQU1FIC0gKHEgLSBkYWVtb24tPm5hbWVidWZmKSwKKwkJCSIlZCVzJXMlcyIsIAorCQkJb3B0Nl91aW50KG9ybywgaSwgMiksCisJCQlzdHJsZW4ocykgIT0gMCA/ICI6IiA6ICIiLAorCQkJcywgCisJCQkoaSA+IG9wdDZfbGVuKG9ybykgLSAzKSA/ICIiIDogIiwgIik7CisJICBpZiAoIGkgPiAgb3B0Nl9sZW4ob3JvKSAtIDMgfHwgKHEgLSBkYWVtb24tPm5hbWVidWZmKSA+IDQwKQorCSAgICB7CisJICAgICAgcSA9IGRhZW1vbi0+bmFtZWJ1ZmY7CisJICAgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgXygiJXUgcmVxdWVzdGVkIG9wdGlvbnM6ICVzIiksIHN0YXRlLT54aWQsIGRhZW1vbi0+bmFtZWJ1ZmYpOworCSAgICB9CisJfQorICAgIH0gCisKKyAgcmV0dXJuIHRhZ2lmOworfQorIAorc3RhdGljIGludCBhZGRfbG9jYWxfYWRkcnMoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCkKK3sKKyAgaW50IGRvbmUgPSAwOworICAKKyAgZm9yICg7IGNvbnRleHQ7IGNvbnRleHQgPSBjb250ZXh0LT5jdXJyZW50KQorICAgIGlmICgoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX1VTRUQpICYmICFJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmY29udGV4dC0+bG9jYWw2KSkKKyAgICAgIHsKKwkvKiBzcXVhc2ggZHVwbGljYXRlcyAqLworCXN0cnVjdCBkaGNwX2NvbnRleHQgKmM7CisJZm9yIChjID0gY29udGV4dC0+Y3VycmVudDsgYzsgYyA9IGMtPmN1cnJlbnQpCisJICBpZiAoKGMtPmZsYWdzICYgQ09OVEVYVF9VU0VEKSAmJgorCSAgICAgIElONl9BUkVfQUREUl9FUVVBTCgmY29udGV4dC0+bG9jYWw2LCAmYy0+bG9jYWw2KSkKKwkgICAgYnJlYWs7CisJCisJaWYgKCFjKQorCSAgeyAKKwkgICAgZG9uZSA9IDE7CisJICAgIHB1dF9vcHQ2KCZjb250ZXh0LT5sb2NhbDYsIElONkFERFJTWik7CisJICB9CisgICAgICB9CisKKyAgcmV0dXJuIGRvbmU7Cit9CisKKworc3RhdGljIHZvaWQgZ2V0X2NvbnRleHRfdGFnKHN0cnVjdCBzdGF0ZSAqc3RhdGUsIHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQpCit7CisgIC8qIGdldCB0YWdzIGZyb20gY29udGV4dCBpZiB3ZSd2ZSBub3QgdXNlZCBpdCBiZWZvcmUgKi8KKyAgaWYgKGNvbnRleHQtPm5ldGlkLm5leHQgPT0gJmNvbnRleHQtPm5ldGlkICYmIGNvbnRleHQtPm5ldGlkLm5ldCkKKyAgICB7CisgICAgICBjb250ZXh0LT5uZXRpZC5uZXh0ID0gc3RhdGUtPmNvbnRleHRfdGFnczsKKyAgICAgIHN0YXRlLT5jb250ZXh0X3RhZ3MgPSAmY29udGV4dC0+bmV0aWQ7CisgICAgICBpZiAoIXN0YXRlLT5ob3N0bmFtZV9hdXRoKQorCXsKKwkgIHN0cnVjdCBkaGNwX25ldGlkX2xpc3QgKmlkX2xpc3Q7CisJICAKKwkgIGZvciAoaWRfbGlzdCA9IGRhZW1vbi0+ZGhjcF9pZ25vcmVfbmFtZXM7IGlkX2xpc3Q7IGlkX2xpc3QgPSBpZF9saXN0LT5uZXh0KQorCSAgICBpZiAoKCFpZF9saXN0LT5saXN0KSB8fCBtYXRjaF9uZXRpZChpZF9saXN0LT5saXN0LCAmY29udGV4dC0+bmV0aWQsIDApKQorCSAgICAgIGJyZWFrOworCSAgaWYgKGlkX2xpc3QpCisJICAgIHN0YXRlLT5ob3N0bmFtZSA9IE5VTEw7CisJfQorICAgIH0KK30gCisKKyNpZmRlZiBPUFRJT042X1BSRUZJWF9DTEFTUworc3RhdGljIHN0cnVjdCBwcmVmaXhfY2xhc3MgKnByZWZpeF9jbGFzc19mcm9tX2NvbnRleHQoc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dCkKK3sKKyAgc3RydWN0IHByZWZpeF9jbGFzcyAqcDsKKyAgc3RydWN0IGRoY3BfbmV0aWQgKnQ7CisgIAorICBmb3IgKHAgPSBkYWVtb24tPnByZWZpeF9jbGFzc2VzOyBwIDsgcCA9IHAtPm5leHQpCisgICAgZm9yICh0ID0gY29udGV4dC0+ZmlsdGVyOyB0OyB0ID0gdC0+bmV4dCkKKyAgICAgIGlmIChzdHJjbXAocC0+dGFnLm5ldCwgdC0+bmV0KSA9PSAwKQorCXJldHVybiBwOworICAKKyByZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGNoZWNrX2lhKHN0cnVjdCBzdGF0ZSAqc3RhdGUsIHZvaWQgKm9wdCwgdm9pZCAqKmVuZHAsIHZvaWQgKippYV9vcHRpb24pCit7CisgIHN0YXRlLT5pYV90eXBlID0gb3B0Nl90eXBlKG9wdCk7CisgICppYV9vcHRpb24gPSBOVUxMOworCisgIGlmIChzdGF0ZS0+aWFfdHlwZSAhPSBPUFRJT042X0lBX05BICYmIHN0YXRlLT5pYV90eXBlICE9IE9QVElPTjZfSUFfVEEpCisgICAgcmV0dXJuIDA7CisgIAorICBpZiAoc3RhdGUtPmlhX3R5cGUgPT0gT1BUSU9ONl9JQV9OQSAmJiBvcHQ2X2xlbihvcHQpIDwgMTIpCisgICAgcmV0dXJuIDA7CisJICAgIAorICBpZiAoc3RhdGUtPmlhX3R5cGUgPT0gT1BUSU9ONl9JQV9UQSAmJiBvcHQ2X2xlbihvcHQpIDwgNCkKKyAgICByZXR1cm4gMDsKKyAgCisgICplbmRwID0gb3B0Nl9wdHIob3B0LCBvcHQ2X2xlbihvcHQpKTsKKyAgc3RhdGUtPmlhaWQgPSBvcHQ2X3VpbnQob3B0LCAwLCA0KTsKKyAgKmlhX29wdGlvbiA9IG9wdDZfZmluZChvcHQ2X3B0cihvcHQsIHN0YXRlLT5pYV90eXBlID09IE9QVElPTjZfSUFfTkEgPyAxMiA6IDQpLCAqZW5kcCwgT1BUSU9ONl9JQUFERFIsIDI0KTsKKworICByZXR1cm4gMTsKK30KKworCitzdGF0aWMgaW50IGJ1aWxkX2lhKHN0cnVjdCBzdGF0ZSAqc3RhdGUsIGludCAqdDFjbnRyKQoreworICBpbnQgIG8gPSBuZXdfb3B0NihzdGF0ZS0+aWFfdHlwZSk7CisgCisgIHB1dF9vcHQ2X2xvbmcoc3RhdGUtPmlhaWQpOworICAqdDFjbnRyID0gMDsKKwkgICAgCisgIGlmIChzdGF0ZS0+aWFfdHlwZSA9PSBPUFRJT042X0lBX05BKQorICAgIHsKKyAgICAgIC8qIHNhdmUgcG9pbnRlciAqLworICAgICAgKnQxY250ciA9IHNhdmVfY291bnRlcigtMSk7CisgICAgICAvKiBzbyB3ZSBjYW4gZmlsbCB0aGVzZSBpbiBsYXRlciAqLworICAgICAgcHV0X29wdDZfbG9uZygwKTsKKyAgICAgIHB1dF9vcHQ2X2xvbmcoMCk7IAorICAgIH0KKworICByZXR1cm4gbzsKK30KKworc3RhdGljIHZvaWQgZW5kX2lhKGludCB0MWNudHIsIHVuc2lnbmVkIGludCBtaW5fdGltZSwgaW50IGRvX2Z1enopCit7CisgIGlmICh0MWNudHIgIT0gMCkKKyAgICB7CisgICAgICAvKiBnbyBiYWNrIGFuIGZpbGwgaW4gZmllbGRzIGluIElBX05BIG9wdGlvbiAqLworICAgICAgaW50IHNhdiA9IHNhdmVfY291bnRlcih0MWNudHIpOworICAgICAgdW5zaWduZWQgaW50IHQxLCB0MiwgZnV6eiA9IDA7CisKKyAgICAgIGlmIChkb19mdXp6KQorCXsKKwkgIGZ1enogPSByYW5kMTYoKTsKKyAgICAgIAorCSAgd2hpbGUgKGZ1enogPiAobWluX3RpbWUvMTYpKQorCSAgICBmdXp6ID0gZnV6ei8yOworCX0KKyAgICAgIAorICAgICAgdDEgPSAobWluX3RpbWUgPT0gMHhmZmZmZmZmZikgPyAweGZmZmZmZmZmIDogbWluX3RpbWUvMiAtIGZ1eno7CisgICAgICB0MiA9IChtaW5fdGltZSA9PSAweGZmZmZmZmZmKSA/IDB4ZmZmZmZmZmYgOiAoKG1pbl90aW1lLzgpKjcpIC0gZnV6ejsKKyAgICAgIHB1dF9vcHQ2X2xvbmcodDEpOworICAgICAgcHV0X29wdDZfbG9uZyh0Mik7CisgICAgICBzYXZlX2NvdW50ZXIoc2F2KTsKKyAgICB9CQorfQorCitzdGF0aWMgdm9pZCBhZGRfYWRkcmVzcyhzdHJ1Y3Qgc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCB1bnNpZ25lZCBpbnQgbGVhc2VfdGltZSwgdm9pZCAqaWFfb3B0aW9uLCAKKwkJCXVuc2lnbmVkIGludCAqbWluX3RpbWUsIHN0cnVjdCBpbjZfYWRkciAqYWRkciwgdGltZV90IG5vdykKK3sKKyAgdW5zaWduZWQgaW50IHZhbGlkX3RpbWUgPSAwLCBwcmVmZXJyZWRfdGltZSA9IDA7CisgIGludCBvID0gbmV3X29wdDYoT1BUSU9ONl9JQUFERFIpOworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U7CisKKyAgLyogZ2V0IGNsaWVudCByZXF1ZXN0ZWQgdGltZXMgKi8KKyAgaWYgKGlhX29wdGlvbikKKyAgICB7CisgICAgICBwcmVmZXJyZWRfdGltZSA9ICBvcHQ2X3VpbnQoaWFfb3B0aW9uLCAxNiwgNCk7CisgICAgICB2YWxpZF90aW1lID0gIG9wdDZfdWludChpYV9vcHRpb24sIDIwLCA0KTsKKyAgICB9CisKKyAgY2FsY3VsYXRlX3RpbWVzKGNvbnRleHQsIG1pbl90aW1lLCAmdmFsaWRfdGltZSwgJnByZWZlcnJlZF90aW1lLCBsZWFzZV90aW1lKTsgCisgIAorICBwdXRfb3B0NihhZGRyLCBzaXplb2YoKmFkZHIpKTsKKyAgcHV0X29wdDZfbG9uZyhwcmVmZXJyZWRfdGltZSk7CisgIHB1dF9vcHQ2X2xvbmcodmFsaWRfdGltZSk7IAkJICAgIAorICAKKyNpZmRlZiBPUFRJT042X1BSRUZJWF9DTEFTUworICBpZiAoc3RhdGUtPnNlbmRfcHJlZml4X2NsYXNzKQorICAgIHsKKyAgICAgIGludCBvMSA9IG5ld19vcHQ2KE9QVElPTjZfUFJFRklYX0NMQVNTKTsKKyAgICAgIHB1dF9vcHQ2X3Nob3J0KHN0YXRlLT5zZW5kX3ByZWZpeF9jbGFzcy0+Y2xhc3MpOworICAgICAgZW5kX29wdDYobzEpOworICAgIH0KKyNlbmRpZgorCisgIGVuZF9vcHQ2KG8pOworICAKKyAgaWYgKHN0YXRlLT5sZWFzZV9hbGxvY2F0ZSkKKyAgICB1cGRhdGVfbGVhc2VzKHN0YXRlLCBjb250ZXh0LCBhZGRyLCB2YWxpZF90aW1lLCBub3cpOworCisgIGlmICgobGVhc2UgPSBsZWFzZTZfZmluZF9ieV9hZGRyKGFkZHIsIDEyOCwgMCkpKQorICAgIGxlYXNlLT5mbGFncyB8PSBMRUFTRV9VU0VEOworCisgIC8qIGdldCB0YWdzIGZyb20gY29udGV4dCBpZiB3ZSd2ZSBub3QgdXNlZCBpdCBiZWZvcmUgKi8KKyAgaWYgKGNvbnRleHQtPm5ldGlkLm5leHQgPT0gJmNvbnRleHQtPm5ldGlkICYmIGNvbnRleHQtPm5ldGlkLm5ldCkKKyAgICB7CisgICAgICBjb250ZXh0LT5uZXRpZC5uZXh0ID0gc3RhdGUtPmNvbnRleHRfdGFnczsKKyAgICAgIHN0YXRlLT5jb250ZXh0X3RhZ3MgPSAmY29udGV4dC0+bmV0aWQ7CisgICAgICAKKyAgICAgIGlmICghc3RhdGUtPmhvc3RuYW1lX2F1dGgpCisJeworCSAgc3RydWN0IGRoY3BfbmV0aWRfbGlzdCAqaWRfbGlzdDsKKwkgIAorCSAgZm9yIChpZF9saXN0ID0gZGFlbW9uLT5kaGNwX2lnbm9yZV9uYW1lczsgaWRfbGlzdDsgaWRfbGlzdCA9IGlkX2xpc3QtPm5leHQpCisJICAgIGlmICgoIWlkX2xpc3QtPmxpc3QpIHx8IG1hdGNoX25ldGlkKGlkX2xpc3QtPmxpc3QsICZjb250ZXh0LT5uZXRpZCwgMCkpCisJICAgICAgYnJlYWs7CisJICBpZiAoaWRfbGlzdCkKKwkgICAgc3RhdGUtPmhvc3RuYW1lID0gTlVMTDsKKwl9CisgICAgfQorCisgIGxvZzZfcXVpZXQoc3RhdGUsIHN0YXRlLT5sZWFzZV9hbGxvY2F0ZSA/ICJESENQUkVQTFkiIDogIkRIQ1BBRFZFUlRJU0UiLCBhZGRyLCBzdGF0ZS0+aG9zdG5hbWUpOworCit9CisKK3N0YXRpYyB2b2lkIG1hcmtfY29udGV4dF91c2VkKHN0cnVjdCBzdGF0ZSAqc3RhdGUsIHN0cnVjdCBpbjZfYWRkciAqYWRkcikKK3sKKyAgc3RydWN0IGRoY3BfY29udGV4dCAqY29udGV4dDsKKworICAvKiBNYXJrIHRoYXQgd2UgaGF2ZSBhbiBhZGRyZXNzIGZvciB0aGlzIHByZWZpeC4gKi8KKyNpZmRlZiBPUFRJT042X1BSRUZJWF9DTEFTUworICBmb3IgKGNvbnRleHQgPSBzdGF0ZS0+Y29udGV4dDsgY29udGV4dDsgY29udGV4dCA9IGNvbnRleHQtPmN1cnJlbnQpCisgICAgaWYgKGlzX3NhbWVfbmV0NihhZGRyLCAmY29udGV4dC0+c3RhcnQ2LCBjb250ZXh0LT5wcmVmaXgpICYmCisJKCFzdGF0ZS0+c2VuZF9wcmVmaXhfY2xhc3MgfHwgc3RhdGUtPnNlbmRfcHJlZml4X2NsYXNzID09IHByZWZpeF9jbGFzc19mcm9tX2NvbnRleHQoY29udGV4dCkpKQorICAgICAgY29udGV4dC0+ZmxhZ3MgfD0gQ09OVEVYVF9VU0VEOworI2Vsc2UKKyAgZm9yIChjb250ZXh0ID0gc3RhdGUtPmNvbnRleHQ7IGNvbnRleHQ7IGNvbnRleHQgPSBjb250ZXh0LT5jdXJyZW50KQorICAgIGlmIChpc19zYW1lX25ldDYoYWRkciwgJmNvbnRleHQtPnN0YXJ0NiwgY29udGV4dC0+cHJlZml4KSkKKyAgICAgIGNvbnRleHQtPmZsYWdzIHw9IENPTlRFWFRfVVNFRDsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBtYXJrX2NvbmZpZ191c2VkKHN0cnVjdCBkaGNwX2NvbnRleHQgKmNvbnRleHQsIHN0cnVjdCBpbjZfYWRkciAqYWRkcikKK3sKKyAgZm9yICg7IGNvbnRleHQ7IGNvbnRleHQgPSBjb250ZXh0LT5jdXJyZW50KQorICAgIGlmIChpc19zYW1lX25ldDYoYWRkciwgJmNvbnRleHQtPnN0YXJ0NiwgY29udGV4dC0+cHJlZml4KSkKKyAgICAgIGNvbnRleHQtPmZsYWdzIHw9IENPTlRFWFRfQ09ORl9VU0VEOworfQorCisvKiBtYWtlIHN1cmUgYWRkcmVzcyBub3QgbGVhc2VkIHRvIGFub3RoZXIgQ0xJRC9JQUlEICovCitzdGF0aWMgaW50IGNoZWNrX2FkZHJlc3Moc3RydWN0IHN0YXRlICpzdGF0ZSwgc3RydWN0IGluNl9hZGRyICphZGRyKQoreyAKKyAgc3RydWN0IGRoY3BfbGVhc2UgKmxlYXNlOworCisgIGlmICghKGxlYXNlID0gbGVhc2U2X2ZpbmRfYnlfYWRkcihhZGRyLCAxMjgsIDApKSkKKyAgICByZXR1cm4gMTsKKworICBpZiAobGVhc2UtPmNsaWRfbGVuICE9IHN0YXRlLT5jbGlkX2xlbiB8fCAKKyAgICAgIG1lbWNtcChsZWFzZS0+Y2xpZCwgc3RhdGUtPmNsaWQsIHN0YXRlLT5jbGlkX2xlbikgIT0gMCB8fAorICAgICAgbGVhc2UtPmlhaWQgIT0gc3RhdGUtPmlhaWQpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDE7Cit9CisKKworLyogQ2FsY3VsYXRlIHZhbGlkIGFuZCBwcmVmZXJyZWQgdGltZXMgdG8gc2VuZCBpbiBsZWFzZXMvcmVuZXdhbHMuIAorCisgICBJbnB1dHMgYXJlOgorCisgICAqdmFsaWRfdGltZXAsICpwcmVmZXJyZWRfdGltZXAgLSByZXF1ZXN0ZWQgdGltZXMgZnJvbSBJQUFERFIgb3B0aW9ucy4KKyAgIGNvbnRleHQtPnZhbGlkLCBjb250ZXh0LT5wcmVmZXJyZWQgLSB0aW1lcyBhc3NvY2lhdGVkIHdpdGggc3VibmV0IGFkZHJlc3Mgb24gbG9jYWwgaW50ZXJmYWNlLgorICAgY29udGV4dC0+ZmxhZ3MgfCBDT05URVhUX0RFUFJFQ0FURSAtICJkZXByZWNhdGVkIiBmbGFnIGluIGRoY3AtcmFuZ2UuCisgICBsZWFzZV90aW1lIC0gY29uZmlndXJlZCB0aW1lIGZvciBjb250ZXh0IGZvciBpbmRpdmlkdWFsIGNsaWVudC4KKyAgICptaW5fdGltZSAtIHNtYWxsZXN0IHZhbGlkIHRpbWUgc2VudCBzbyBmYXIuCisKKyAgIE91dHB1dHMgYXJlIDoKKyAgIAorICAgKnZhbGlkX3RpbWVwLCAqcHJlZmVycmVkX3RpbWVwIC0gdGltZXMgdG8gYmUgc2VuZCBpbiBJQUFERFIgb3B0aW9uLgorICAgKm1pbl90aW1lIC0gc21hbGxlc3QgdmFsaWQgdGltZSBzZW50IHNvIGZhciwgdG8gY2FsY3VsYXRlIFQxIGFuZCBUMi4KKyAgIAorICAgKi8KK3N0YXRpYyB2b2lkIGNhbGN1bGF0ZV90aW1lcyhzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCB1bnNpZ25lZCBpbnQgKm1pbl90aW1lLCB1bnNpZ25lZCBpbnQgKnZhbGlkX3RpbWVwLCAKKwkJCSAgICB1bnNpZ25lZCBpbnQgKnByZWZlcnJlZF90aW1lcCwgdW5zaWduZWQgaW50IGxlYXNlX3RpbWUpCit7CisgIHVuc2lnbmVkIGludCByZXFfcHJlZmVycmVkID0gKnByZWZlcnJlZF90aW1lcCwgcmVxX3ZhbGlkID0gKnZhbGlkX3RpbWVwOworICB1bnNpZ25lZCBpbnQgdmFsaWRfdGltZSA9IGxlYXNlX3RpbWUsIHByZWZlcnJlZF90aW1lID0gbGVhc2VfdGltZTsKKyAgCisgIC8qIFJGQyAzMzE1OiAiQSBzZXJ2ZXIgaWdub3JlcyB0aGUgbGlmZXRpbWVzIHNldAorICAgICBieSB0aGUgY2xpZW50IGlmIHRoZSBwcmVmZXJyZWQgbGlmZXRpbWUgaXMgZ3JlYXRlciB0aGFuIHRoZSB2YWxpZAorICAgICBsaWZldGltZS4gKi8KKyAgaWYgKHJlcV9wcmVmZXJyZWQgPD0gcmVxX3ZhbGlkKQorICAgIHsKKyAgICAgIGlmIChyZXFfcHJlZmVycmVkICE9IDApCisJeworCSAgLyogMCA9PSAibm8gcHJlZmVyZW5jZSBmcm9tIGNsaWVudCIgKi8KKwkgIGlmIChyZXFfcHJlZmVycmVkIDwgMTIwdSkKKwkgICAgcmVxX3ByZWZlcnJlZCA9IDEyMHU7IC8qIHNhbml0eSAqLworCSAgCisJICBpZiAocmVxX3ByZWZlcnJlZCA8IHByZWZlcnJlZF90aW1lKQorCSAgICBwcmVmZXJyZWRfdGltZSA9IHJlcV9wcmVmZXJyZWQ7CisJfQorICAgICAgCisgICAgICBpZiAocmVxX3ZhbGlkICE9IDApCisJLyogMCA9PSAibm8gcHJlZmVyZW5jZSBmcm9tIGNsaWVudCIgKi8KKwl7CisJICBpZiAocmVxX3ZhbGlkIDwgMTIwdSkKKwkgICAgcmVxX3ZhbGlkID0gMTIwdTsgLyogc2FuaXR5ICovCisJICAKKwkgIGlmIChyZXFfdmFsaWQgPCB2YWxpZF90aW1lKQorCSAgICB2YWxpZF90aW1lID0gcmVxX3ZhbGlkOworCX0KKyAgICB9CisKKyAgLyogZGVwcmVjYXRlIChwcmVmZXJyZWQgPT0gMCkgd2hpY2ggY29uZmlndXJlZCwgb3Igd2hlbiBsb2NhbCBhZGRyZXNzIAorICAgICBpcyBkZXByZWNhdGVkICovCisgIGlmICgoY29udGV4dC0+ZmxhZ3MgJiBDT05URVhUX0RFUFJFQ0FURSkgfHwgY29udGV4dC0+cHJlZmVycmVkID09IDApCisgICAgcHJlZmVycmVkX3RpbWUgPSAwOworICAKKyAgaWYgKHByZWZlcnJlZF90aW1lICE9IDAgJiYgcHJlZmVycmVkX3RpbWUgPCAqbWluX3RpbWUpCisgICAgKm1pbl90aW1lID0gcHJlZmVycmVkX3RpbWU7CisgIAorICBpZiAodmFsaWRfdGltZSAhPSAwICYmIHZhbGlkX3RpbWUgPCAqbWluX3RpbWUpCisgICAgKm1pbl90aW1lID0gdmFsaWRfdGltZTsKKyAgCisgICp2YWxpZF90aW1lcCA9IHZhbGlkX3RpbWU7CisgICpwcmVmZXJyZWRfdGltZXAgPSBwcmVmZXJyZWRfdGltZTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2xlYXNlcyhzdHJ1Y3Qgc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIHVuc2lnbmVkIGludCBsZWFzZV90aW1lLCB0aW1lX3Qgbm93KQoreworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UgPSBsZWFzZTZfZmluZF9ieV9hZGRyKGFkZHIsIDEyOCwgMCk7CisjaWZkZWYgSEFWRV9TQ1JJUFQKKyAgc3RydWN0IGRoY3BfbmV0aWQgKnRhZ2lmID0gcnVuX3RhZ19pZihzdGF0ZS0+dGFncyk7CisjZW5kaWYKKworICAodm9pZCljb250ZXh0OworCisgIGlmICghbGVhc2UpCisgICAgbGVhc2UgPSBsZWFzZTZfYWxsb2NhdGUoYWRkciwgc3RhdGUtPmlhX3R5cGUgPT0gT1BUSU9ONl9JQV9OQSA/IExFQVNFX05BIDogTEVBU0VfVEEpOworICAKKyAgaWYgKGxlYXNlKQorICAgIHsKKyAgICAgIGxlYXNlX3NldF9leHBpcmVzKGxlYXNlLCBsZWFzZV90aW1lLCBub3cpOworICAgICAgbGVhc2Vfc2V0X2lhaWQobGVhc2UsIHN0YXRlLT5pYWlkKTsgCisgICAgICBsZWFzZV9zZXRfaHdhZGRyKGxlYXNlLCBzdGF0ZS0+bWFjLCBzdGF0ZS0+Y2xpZCwgc3RhdGUtPm1hY19sZW4sIHN0YXRlLT5tYWNfdHlwZSwgc3RhdGUtPmNsaWRfbGVuLCBub3csIDApOworICAgICAgbGVhc2Vfc2V0X2ludGVyZmFjZShsZWFzZSwgc3RhdGUtPmludGVyZmFjZSwgbm93KTsKKyAgICAgIGlmIChzdGF0ZS0+aG9zdG5hbWUgJiYgc3RhdGUtPmlhX3R5cGUgPT0gT1BUSU9ONl9JQV9OQSkKKwl7CisJICBjaGFyICphZGRyX2RvbWFpbiA9IGdldF9kb21haW42KGFkZHIpOworCSAgaWYgKCFzdGF0ZS0+c2VuZF9kb21haW4pCisJICAgIHN0YXRlLT5zZW5kX2RvbWFpbiA9IGFkZHJfZG9tYWluOworCSAgbGVhc2Vfc2V0X2hvc3RuYW1lKGxlYXNlLCBzdGF0ZS0+aG9zdG5hbWUsIHN0YXRlLT5ob3N0bmFtZV9hdXRoLCBhZGRyX2RvbWFpbiwgc3RhdGUtPmRvbWFpbik7CisJfQorICAgICAgCisjaWZkZWYgSEFWRV9TQ1JJUFQKKyAgICAgIGlmIChkYWVtb24tPmxlYXNlX2NoYW5nZV9jb21tYW5kKQorCXsKKwkgIHZvaWQgKmNsYXNzX29wdDsKKwkgIGxlYXNlLT5mbGFncyB8PSBMRUFTRV9DSEFOR0VEOworCSAgZnJlZShsZWFzZS0+ZXh0cmFkYXRhKTsKKwkgIGxlYXNlLT5leHRyYWRhdGEgPSBOVUxMOworCSAgbGVhc2UtPmV4dHJhZGF0YV9zaXplID0gbGVhc2UtPmV4dHJhZGF0YV9sZW4gPSAwOworCSAgbGVhc2UtPnZlbmRvcmNsYXNzX2NvdW50ID0gMDsgCisJICAKKwkgIGlmICgoY2xhc3Nfb3B0ID0gb3B0Nl9maW5kKHN0YXRlLT5wYWNrZXRfb3B0aW9ucywgc3RhdGUtPmVuZCwgT1BUSU9ONl9WRU5ET1JfQ0xBU1MsIDQpKSkKKwkgICAgeworCSAgICAgIHZvaWQgKmVuY19vcHQsICplbmNfZW5kID0gb3B0Nl9wdHIoY2xhc3Nfb3B0LCBvcHQ2X2xlbihjbGFzc19vcHQpKTsKKwkgICAgICBsZWFzZS0+dmVuZG9yY2xhc3NfY291bnQrKzsKKwkgICAgICAvKiBzZW5kIGVudGVycHJpc2UgbnVtYmVyIGZpcnN0ICAqLworCSAgICAgIHNwcmludGYoZGFlbW9uLT5kaGNwX2J1ZmYyLCAiJXUiLCBvcHQ2X3VpbnQoY2xhc3Nfb3B0LCAwLCA0KSk7CisJICAgICAgbGVhc2VfYWRkX2V4dHJhZGF0YShsZWFzZSwgKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPmRoY3BfYnVmZjIsIHN0cmxlbihkYWVtb24tPmRoY3BfYnVmZjIpLCAwKTsKKwkgICAgICAKKwkgICAgICBpZiAob3B0Nl9sZW4oY2xhc3Nfb3B0KSA+PSA2KSAKKwkJZm9yIChlbmNfb3B0ID0gb3B0Nl9wdHIoY2xhc3Nfb3B0LCA0KTsgZW5jX29wdDsgZW5jX29wdCA9IG9wdDZfbmV4dChlbmNfb3B0LCBlbmNfZW5kKSkKKwkJICB7CisJCSAgICBsZWFzZS0+dmVuZG9yY2xhc3NfY291bnQrKzsKKwkJICAgIGxlYXNlX2FkZF9leHRyYWRhdGEobGVhc2UsIG9wdDZfcHRyKGVuY19vcHQsIDApLCBvcHQ2X2xlbihlbmNfb3B0KSwgMCk7CisJCSAgfQorCSAgICB9CisJICAKKwkgIGxlYXNlX2FkZF9leHRyYWRhdGEobGVhc2UsICh1bnNpZ25lZCBjaGFyICopc3RhdGUtPmNsaWVudF9ob3N0bmFtZSwgCisJCQkgICAgICBzdGF0ZS0+Y2xpZW50X2hvc3RuYW1lID8gc3RybGVuKHN0YXRlLT5jbGllbnRfaG9zdG5hbWUpIDogMCwgMCk7CQkJCQorCSAgCisJICAvKiBzcGFjZS1jb25jYXQgdGFnIHNldCAqLworCSAgaWYgKCF0YWdpZiAmJiAhY29udGV4dC0+bmV0aWQubmV0KQorCSAgICBsZWFzZV9hZGRfZXh0cmFkYXRhKGxlYXNlLCBOVUxMLCAwLCAwKTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGlmIChjb250ZXh0LT5uZXRpZC5uZXQpCisJCWxlYXNlX2FkZF9leHRyYWRhdGEobGVhc2UsICh1bnNpZ25lZCBjaGFyICopY29udGV4dC0+bmV0aWQubmV0LCBzdHJsZW4oY29udGV4dC0+bmV0aWQubmV0KSwgdGFnaWYgPyAnICcgOiAwKTsKKwkgICAgICAKKwkgICAgICBpZiAodGFnaWYpCisJCXsKKwkJICBzdHJ1Y3QgZGhjcF9uZXRpZCAqbjsKKwkJICBmb3IgKG4gPSB0YWdpZjsgbjsgbiA9IG4tPm5leHQpCisJCSAgICB7CisJCSAgICAgIHN0cnVjdCBkaGNwX25ldGlkICpuMTsKKwkJICAgICAgLyoga2lsbCBkdXBlcyAqLworCQkgICAgICBmb3IgKG4xID0gbi0+bmV4dDsgbjE7IG4xID0gbjEtPm5leHQpCisJCQlpZiAoc3RyY21wKG4tPm5ldCwgbjEtPm5ldCkgPT0gMCkKKwkJCSAgYnJlYWs7CisJCSAgICAgIGlmICghbjEpCisJCQlsZWFzZV9hZGRfZXh0cmFkYXRhKGxlYXNlLCAodW5zaWduZWQgY2hhciAqKW4tPm5ldCwgc3RybGVuKG4tPm5ldCksIG4tPm5leHQgPyAnICcgOiAwKTsgCisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgCisJICBpZiAoc3RhdGUtPmxpbmtfYWRkcmVzcykKKwkgICAgaW5ldF9udG9wKEFGX0lORVQ2LCBzdGF0ZS0+bGlua19hZGRyZXNzLCBkYWVtb24tPmFkZHJidWZmLCBBRERSU1RSTEVOKTsKKwkgIAorCSAgbGVhc2VfYWRkX2V4dHJhZGF0YShsZWFzZSwgKHVuc2lnbmVkIGNoYXIgKilkYWVtb24tPmFkZHJidWZmLCBzdGF0ZS0+bGlua19hZGRyZXNzID8gc3RybGVuKGRhZW1vbi0+YWRkcmJ1ZmYpIDogMCwgMCk7CisJICAKKwkgIGlmICgoY2xhc3Nfb3B0ID0gb3B0Nl9maW5kKHN0YXRlLT5wYWNrZXRfb3B0aW9ucywgc3RhdGUtPmVuZCwgT1BUSU9ONl9VU0VSX0NMQVNTLCAyKSkpCisJICAgIHsKKwkgICAgICB2b2lkICplbmNfb3B0LCAqZW5jX2VuZCA9IG9wdDZfcHRyKGNsYXNzX29wdCwgb3B0Nl9sZW4oY2xhc3Nfb3B0KSk7CisJICAgICAgZm9yIChlbmNfb3B0ID0gb3B0Nl9wdHIoY2xhc3Nfb3B0LCAwKTsgZW5jX29wdDsgZW5jX29wdCA9IG9wdDZfbmV4dChlbmNfb3B0LCBlbmNfZW5kKSkKKwkJbGVhc2VfYWRkX2V4dHJhZGF0YShsZWFzZSwgb3B0Nl9wdHIoZW5jX29wdCwgMCksIG9wdDZfbGVuKGVuY19vcHQpLCAwKTsKKwkgICAgfQorCX0KKyNlbmRpZgkKKyAgICAgIAorICAgIH0KK30KKwkJCSAgCisJCQkKKwkKK3N0YXRpYyB2b2lkIGxvZzZfb3B0cyhpbnQgbmVzdCwgdW5zaWduZWQgaW50IHhpZCwgdm9pZCAqc3RhcnRfb3B0cywgdm9pZCAqZW5kX29wdHMpCit7CisgIHZvaWQgKm9wdDsKKyAgY2hhciAqZGVzYyA9IG5lc3QgPyAibmVzdCIgOiAic2VudCI7CisgIAorICBpZiAoIW9wdGlvbl9ib29sKE9QVF9MT0dfT1BUUykgfHwgc3RhcnRfb3B0cyA9PSBlbmRfb3B0cykKKyAgICByZXR1cm47CisgIAorICBmb3IgKG9wdCA9IHN0YXJ0X29wdHM7IG9wdDsgb3B0ID0gb3B0Nl9uZXh0KG9wdCwgZW5kX29wdHMpKQorICAgIHsKKyAgICAgIGludCB0eXBlID0gb3B0Nl90eXBlKG9wdCk7CisgICAgICB2b2lkICppYV9vcHRpb25zID0gTlVMTDsKKyAgICAgIGNoYXIgKm9wdG5hbWU7CisgICAgICAKKyAgICAgIGlmICh0eXBlID09IE9QVElPTjZfSUFfTkEpCisJeworCSAgc3ByaW50ZihkYWVtb24tPm5hbWVidWZmLCAiSUFJRD0ldSBUMT0ldSBUMj0ldSIsCisJCSAgb3B0Nl91aW50KG9wdCwgMCwgNCksIG9wdDZfdWludChvcHQsIDQsIDQpLCBvcHQ2X3VpbnQob3B0LCA4LCA0KSk7CisJICBvcHRuYW1lID0gImlhLW5hIjsKKwkgIGlhX29wdGlvbnMgPSBvcHQ2X3B0cihvcHQsIDEyKTsKKwl9CisgICAgICBlbHNlIGlmICh0eXBlID09IE9QVElPTjZfSUFfVEEpCisJeworCSAgc3ByaW50ZihkYWVtb24tPm5hbWVidWZmLCAiSUFJRD0ldSIsIG9wdDZfdWludChvcHQsIDAsIDQpKTsKKwkgIG9wdG5hbWUgPSAiaWEtdGEiOworCSAgaWFfb3B0aW9ucyA9IG9wdDZfcHRyKG9wdCwgNCk7CisJfQorICAgICAgZWxzZSBpZiAodHlwZSA9PSBPUFRJT042X0lBQUREUikKKwl7CisJICBpbmV0X250b3AoQUZfSU5FVDYsIG9wdDZfcHRyKG9wdCwgMCksIGRhZW1vbi0+YWRkcmJ1ZmYsIEFERFJTVFJMRU4pOworCSAgc3ByaW50ZihkYWVtb24tPm5hbWVidWZmLCAiJXMgUEw9JXUgVkw9JXUiLCAKKwkJICBkYWVtb24tPmFkZHJidWZmLCBvcHQ2X3VpbnQob3B0LCAxNiwgNCksIG9wdDZfdWludChvcHQsIDIwLCA0KSk7CisJICBvcHRuYW1lID0gImlhYWRkciI7CisJICBpYV9vcHRpb25zID0gb3B0Nl9wdHIob3B0LCAyNCk7CisJfQorI2lmZGVmIE9QVElPTjZfUFJFRklYX0NMQVNTCisgICAgICBlbHNlIGlmICh0eXBlID09IE9QVElPTjZfUFJFRklYX0NMQVNTKQorCXsKKwkgIG9wdG5hbWUgPSAicHJlZml4LWNsYXNzIjsKKwkgIHNwcmludGYoZGFlbW9uLT5uYW1lYnVmZiwgImNsYXNzPSV1Iiwgb3B0Nl91aW50KG9wdCwgMCwgMikpOworCX0KKyNlbmRpZgorICAgICAgZWxzZSBpZiAodHlwZSA9PSBPUFRJT042X1NUQVRVU19DT0RFKQorCXsKKwkgIGludCBsZW4gPSBzcHJpbnRmKGRhZW1vbi0+bmFtZWJ1ZmYsICIldSAiLCBvcHQ2X3VpbnQob3B0LCAwLCAyKSk7CisJICBtZW1jcHkoZGFlbW9uLT5uYW1lYnVmZiArIGxlbiwgb3B0Nl9wdHIob3B0LCAyKSwgb3B0Nl9sZW4ob3B0KS0yKTsKKwkgIGRhZW1vbi0+bmFtZWJ1ZmZbbGVuICsgb3B0Nl9sZW4ob3B0KSAtIDJdID0gMDsKKwkgIG9wdG5hbWUgPSAic3RhdHVzIjsKKwl9CisgICAgICBlbHNlCisJeworCSAgLyogYWNjb3VudCBmb3IgZmxhZyBieXRlIG9uIEZRRE4gKi8KKwkgIGludCBvZmZzZXQgPSB0eXBlID09IE9QVElPTjZfRlFETiA/IDEgOiAwOworCSAgb3B0bmFtZSA9IG9wdGlvbl9zdHJpbmcoQUZfSU5FVDYsIHR5cGUsIG9wdDZfcHRyKG9wdCwgb2Zmc2V0KSwgb3B0Nl9sZW4ob3B0KSAtIG9mZnNldCwgZGFlbW9uLT5uYW1lYnVmZiwgTUFYRE5BTUUpOworCX0KKyAgICAgIAorICAgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgIiV1ICVzIHNpemU6JTNkIG9wdGlvbjolM2QgJXMgICVzIiwgCisJCXhpZCwgZGVzYywgb3B0Nl9sZW4ob3B0KSwgdHlwZSwgb3B0bmFtZSwgZGFlbW9uLT5uYW1lYnVmZik7CisgICAgICAKKyAgICAgIGlmIChpYV9vcHRpb25zKQorCWxvZzZfb3B0cygxLCB4aWQsIGlhX29wdGlvbnMsIG9wdDZfcHRyKG9wdCwgb3B0Nl9sZW4ob3B0KSkpOworICAgIH0KK30JCSAKKyAKK3N0YXRpYyB2b2lkIGxvZzZfcXVpZXQoc3RydWN0IHN0YXRlICpzdGF0ZSwgY2hhciAqdHlwZSwgc3RydWN0IGluNl9hZGRyICphZGRyLCBjaGFyICpzdHJpbmcpCit7CisgIGlmIChvcHRpb25fYm9vbChPUFRfTE9HX09QVFMpIHx8ICFvcHRpb25fYm9vbChPUFRfUVVJRVRfREhDUDYpKQorICAgIGxvZzZfcGFja2V0KHN0YXRlLCB0eXBlLCBhZGRyLCBzdHJpbmcpOworfQorCitzdGF0aWMgdm9pZCBsb2c2X3BhY2tldChzdHJ1Y3Qgc3RhdGUgKnN0YXRlLCBjaGFyICp0eXBlLCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIGNoYXIgKnN0cmluZykKK3sKKyAgaW50IGNsaWRfbGVuID0gc3RhdGUtPmNsaWRfbGVuOworCisgIC8qIGF2b2lkIGJ1ZmZlciBvdmVyZmxvdyAqLworICBpZiAoY2xpZF9sZW4gPiAxMDApCisgICAgY2xpZF9sZW4gPSAxMDA7CisgIAorICBwcmludF9tYWMoZGFlbW9uLT5uYW1lYnVmZiwgc3RhdGUtPmNsaWQsIGNsaWRfbGVuKTsKKworICBpZiAoYWRkcikKKyAgICB7CisgICAgICBpbmV0X250b3AoQUZfSU5FVDYsIGFkZHIsIGRhZW1vbi0+ZGhjcF9idWZmMiwgMjU1KTsKKyAgICAgIHN0cmNhdChkYWVtb24tPmRoY3BfYnVmZjIsICIgIik7CisgICAgfQorICBlbHNlCisgICAgZGFlbW9uLT5kaGNwX2J1ZmYyWzBdID0gMDsKKworICBpZihvcHRpb25fYm9vbChPUFRfTE9HX09QVFMpKQorICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sICIldSAlcyglcykgJXMlcyAlcyIsCisJICAgICAgc3RhdGUtPnhpZCwgCisJICAgICAgdHlwZSwKKwkgICAgICBzdGF0ZS0+aWZhY2VfbmFtZSwgCisJICAgICAgZGFlbW9uLT5kaGNwX2J1ZmYyLAorCSAgICAgIGRhZW1vbi0+bmFtZWJ1ZmYsCisJICAgICAgc3RyaW5nID8gc3RyaW5nIDogIiIpOworICBlbHNlCisgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgIiVzKCVzKSAlcyVzICVzIiwKKwkgICAgICB0eXBlLAorCSAgICAgIHN0YXRlLT5pZmFjZV9uYW1lLCAKKwkgICAgICBkYWVtb24tPmRoY3BfYnVmZjIsCisJICAgICAgZGFlbW9uLT5uYW1lYnVmZiwKKwkgICAgICBzdHJpbmcgPyBzdHJpbmcgOiAiIik7Cit9CisKK3N0YXRpYyB2b2lkICpvcHQ2X2ZpbmQgKHZvaWQgKm9wdHMsIHZvaWQgKmVuZCwgdW5zaWduZWQgaW50IHNlYXJjaCwgdW5zaWduZWQgaW50IG1pbnNpemUpCit7CisgIHUxNiBvcHQsIG9wdF9sZW47CisgIHZvaWQgKnN0YXJ0OworICAKKyAgaWYgKCFvcHRzKQorICAgIHJldHVybiBOVUxMOworICAgIAorICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBpZiAoZW5kIC0gb3B0cyA8IDQpIAorCXJldHVybiBOVUxMOworICAgICAgCisgICAgICBzdGFydCA9IG9wdHM7CisgICAgICBHRVRTSE9SVChvcHQsIG9wdHMpOworICAgICAgR0VUU0hPUlQob3B0X2xlbiwgb3B0cyk7CisgICAgICAKKyAgICAgIGlmIChvcHRfbGVuID4gKGVuZCAtIG9wdHMpKQorCXJldHVybiBOVUxMOworICAgICAgCisgICAgICBpZiAob3B0ID09IHNlYXJjaCAmJiAob3B0X2xlbiA+PSBtaW5zaXplKSkKKwlyZXR1cm4gc3RhcnQ7CisgICAgICAKKyAgICAgIG9wdHMgKz0gb3B0X2xlbjsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkICpvcHQ2X25leHQodm9pZCAqb3B0cywgdm9pZCAqZW5kKQoreworICB1MTYgb3B0X2xlbjsKKyAgCisgIGlmIChlbmQgLSBvcHRzIDwgNCkgCisgICAgcmV0dXJuIE5VTEw7CisgIAorICBvcHRzICs9IDI7CisgIEdFVFNIT1JUKG9wdF9sZW4sIG9wdHMpOworICAKKyAgaWYgKG9wdF9sZW4gPj0gKGVuZCAtIG9wdHMpKQorICAgIHJldHVybiBOVUxMOworICAKKyAgcmV0dXJuIG9wdHMgKyBvcHRfbGVuOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG9wdDZfdWludCh1bnNpZ25lZCBjaGFyICpvcHQsIGludCBvZmZzZXQsIGludCBzaXplKQoreworICAvKiB0aGlzIHdvcnJpZXMgYWJvdXQgdW5hbGlnbmVkIGRhdGEgYW5kIGJ5dGUgb3JkZXIgKi8KKyAgdW5zaWduZWQgaW50IHJldCA9IDA7CisgIGludCBpOworICB1bnNpZ25lZCBjaGFyICpwID0gb3B0Nl9wdHIob3B0LCBvZmZzZXQpOworICAKKyAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKyAgICByZXQgPSAocmV0IDw8IDgpIHwgKnArKzsKKyAgCisgIHJldHVybiByZXQ7Cit9IAorCit2b2lkIHJlbGF5X3Vwc3RyZWFtNihzdHJ1Y3QgZGhjcF9yZWxheSAqcmVsYXksIHNzaXplX3Qgc3osIHN0cnVjdCBpbjZfYWRkciAqcGVlcl9hZGRyZXNzLCB1MzIgc2NvcGVfaWQpCit7CisgIC8qIC0+bG9jYWwgaXMgc2FtZSB2YWx1ZSBmb3IgYWxsIHJlbGF5cyBvbiAtPmN1cnJlbnQgY2hhaW4gKi8KKyAgCisgIHN0cnVjdCBhbGxfYWRkciBmcm9tOworICB1bnNpZ25lZCBjaGFyICpoZWFkZXI7CisgIHVuc2lnbmVkIGNoYXIgKmluYnVmZiA9IGRhZW1vbi0+ZGhjcF9wYWNrZXQuaW92X2Jhc2U7CisgIGludCBtc2dfdHlwZSA9ICppbmJ1ZmY7CisgIGludCBob3Bjb3VudDsKKyAgc3RydWN0IGluNl9hZGRyIG11bHRpY2FzdDsKKyAgdW5zaWduZWQgaW50IG1hY2xlbiwgbWFjdHlwZTsKKyAgdW5zaWduZWQgY2hhciBtYWNbREhDUF9DSEFERFJfTUFYXTsKKworICBpbmV0X3B0b24oQUZfSU5FVDYsIEFMTF9TRVJWRVJTLCAmbXVsdGljYXN0KTsKKyAgZ2V0X2NsaWVudF9tYWMocGVlcl9hZGRyZXNzLCBzY29wZV9pZCwgbWFjLCAmbWFjbGVuLCAmbWFjdHlwZSk7CisKKyAgLyogc291cmNlIGFkZHJlc3MgPT0gcmVsYXkgYWRkcmVzcyAqLworICBmcm9tLmFkZHIuYWRkcjYgPSByZWxheS0+bG9jYWwuYWRkci5hZGRyNjsKKyAgICAKKyAgLyogR2V0IGhvcCBjb3VudCBmcm9tIG5lc3RlZCByZWxheWVkIG1lc3NhZ2UgKi8gCisgIGlmIChtc2dfdHlwZSA9PSBESENQNlJFTEFZRk9SVykKKyAgICBob3Bjb3VudCA9ICooKHVuc2lnbmVkIGNoYXIgKilpbmJ1ZmYrMSkgKyAxOworICBlbHNlCisgICAgaG9wY291bnQgPSAwOworCisgIC8qIFJGQyAzMzE1IEhPUF9DT1VOVF9MSU1JVCAqLworICBpZiAoaG9wY291bnQgPiAzMikKKyAgICByZXR1cm47CisKKyAgc2F2ZV9jb3VudGVyKDApOworCisgIGlmICgoaGVhZGVyID0gcHV0X29wdDYoTlVMTCwgMzQpKSkKKyAgICB7CisgICAgICBpbnQgbzsKKworICAgICAgaGVhZGVyWzBdID0gREhDUDZSRUxBWUZPUlc7CisgICAgICBoZWFkZXJbMV0gPSBob3Bjb3VudDsKKyAgICAgIG1lbWNweSgmaGVhZGVyWzJdLCAgJnJlbGF5LT5sb2NhbC5hZGRyLmFkZHI2LCBJTjZBRERSU1opOworICAgICAgbWVtY3B5KCZoZWFkZXJbMThdLCBwZWVyX2FkZHJlc3MsIElONkFERFJTWik7CisgCisgICAgICAvKiBSRkMtNjkzOSAqLworICAgICAgaWYgKG1hY2xlbiAhPSAwKQorCXsKKwkgIG8gPSBuZXdfb3B0NihPUFRJT042X0NMSUVOVF9NQUMpOworCSAgcHV0X29wdDZfc2hvcnQobWFjdHlwZSk7CisJICBwdXRfb3B0NihtYWMsIG1hY2xlbik7CisJICBlbmRfb3B0NihvKTsKKwl9CisgICAgICAKKyAgICAgIG8gPSBuZXdfb3B0NihPUFRJT042X1JFTEFZX01TRyk7CisgICAgICBwdXRfb3B0NihpbmJ1ZmYsIHN6KTsKKyAgICAgIGVuZF9vcHQ2KG8pOworICAgICAgCisgICAgICBmb3IgKDsgcmVsYXk7IHJlbGF5ID0gcmVsYXktPmN1cnJlbnQpCisJeworCSAgdW5pb24gbXlzb2NrYWRkciB0bzsKKwkgIAorCSAgdG8uc2Euc2FfZmFtaWx5ID0gQUZfSU5FVDY7CisJICB0by5pbjYuc2luNl9hZGRyID0gcmVsYXktPnNlcnZlci5hZGRyLmFkZHI2OworCSAgdG8uaW42LnNpbjZfcG9ydCA9IGh0b25zKERIQ1BWNl9TRVJWRVJfUE9SVCk7CisJICB0by5pbjYuc2luNl9mbG93aW5mbyA9IDA7CisJICB0by5pbjYuc2luNl9zY29wZV9pZCA9IDA7CisKKwkgIGlmIChJTjZfQVJFX0FERFJfRVFVQUwoJnJlbGF5LT5zZXJ2ZXIuYWRkci5hZGRyNiwgJm11bHRpY2FzdCkpCisJICAgIHsKKwkgICAgICBpbnQgbXVsdGljYXN0X2lmYWNlOworCSAgICAgIGlmICghcmVsYXktPmludGVyZmFjZSB8fCBzdHJjaHIocmVsYXktPmludGVyZmFjZSwgJyonKSB8fAorCQkgIChtdWx0aWNhc3RfaWZhY2UgPSBpZl9uYW1ldG9pbmRleChyZWxheS0+aW50ZXJmYWNlKSkgPT0gMCB8fAorCQkgIHNldHNvY2tvcHQoZGFlbW9uLT5kaGNwNmZkLCBJUFBST1RPX0lQVjYsIElQVjZfTVVMVElDQVNUX0lGLCAmbXVsdGljYXN0X2lmYWNlLCBzaXplb2YobXVsdGljYXN0X2lmYWNlKSkgPT0gLTEpCisJCW15X3N5c2xvZyhNU19ESENQIHwgTE9HX0VSUiwgXygiQ2Fubm90IG11bHRpY2FzdCB0byBESENQdjYgc2VydmVyIHdpdGhvdXQgY29ycmVjdCBpbnRlcmZhY2UiKSk7CisJICAgIH0KKwkJCisJICBzZW5kX2Zyb20oZGFlbW9uLT5kaGNwNmZkLCAwLCBkYWVtb24tPm91dHBhY2tldC5pb3ZfYmFzZSwgc2F2ZV9jb3VudGVyKDApLCAmdG8sICZmcm9tLCAwKTsKKwkgIAorCSAgaWYgKG9wdGlvbl9ib29sKE9QVF9MT0dfT1BUUykpCisJICAgIHsKKwkgICAgICBpbmV0X250b3AoQUZfSU5FVDYsICZyZWxheS0+bG9jYWwsIGRhZW1vbi0+YWRkcmJ1ZmYsIEFERFJTVFJMRU4pOworCSAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgJnJlbGF5LT5zZXJ2ZXIsIGRhZW1vbi0+bmFtZWJ1ZmYsIEFERFJTVFJMRU4pOworCSAgICAgIG15X3N5c2xvZyhNU19ESENQIHwgTE9HX0lORk8sIF8oIkRIQ1AgcmVsYXkgJXMgLT4gJXMiKSwgZGFlbW9uLT5hZGRyYnVmZiwgZGFlbW9uLT5uYW1lYnVmZik7CisJICAgIH0KKworCSAgLyogU2F2ZSB0aGlzIGZvciByZXBsaWVzICovCisJICByZWxheS0+aWZhY2VfaW5kZXggPSBzY29wZV9pZDsKKwl9CisgICAgfQorfQorCit1bnNpZ25lZCBzaG9ydCByZWxheV9yZXBseTYoc3RydWN0IHNvY2thZGRyX2luNiAqcGVlciwgc3NpemVfdCBzeiwgY2hhciAqYXJyaXZhbF9pbnRlcmZhY2UpCit7CisgIHN0cnVjdCBkaGNwX3JlbGF5ICpyZWxheTsKKyAgc3RydWN0IGluNl9hZGRyIGxpbms7CisgIHVuc2lnbmVkIGNoYXIgKmluYnVmZiA9IGRhZW1vbi0+ZGhjcF9wYWNrZXQuaW92X2Jhc2U7CisgIAorICAvKiBtdXN0IGhhdmUgYXQgbGVhc3QgbXNnX3R5cGUraG9wY291bnQrbGlua19hZGRyZXNzK3BlZXJfYWRkcmVzcyttaW5pbWFsIHNpemUgb3B0aW9uCisgICAgIHdoaWNoIGlzICAgICAgICAgICAgICAgMSAgICsgICAgMSAgICsgICAgMTYgICAgICArICAgICAxNiAgICAgKyAyICsgMiA9IDM4ICovCisgIAorICBpZiAoc3ogPCAzOCB8fCAqaW5idWZmICE9IERIQ1A2UkVMQVlSRVBMKQorICAgIHJldHVybiAwOworICAKKyAgbWVtY3B5KCZsaW5rLCAmaW5idWZmWzJdLCBJTjZBRERSU1opOyAKKyAgCisgIGZvciAocmVsYXkgPSBkYWVtb24tPnJlbGF5NjsgcmVsYXk7IHJlbGF5ID0gcmVsYXktPm5leHQpCisgICAgaWYgKElONl9BUkVfQUREUl9FUVVBTCgmbGluaywgJnJlbGF5LT5sb2NhbC5hZGRyLmFkZHI2KSAmJgorCSghcmVsYXktPmludGVyZmFjZSB8fCB3aWxkY2FyZF9tYXRjaChyZWxheS0+aW50ZXJmYWNlLCBhcnJpdmFsX2ludGVyZmFjZSkpKQorICAgICAgYnJlYWs7CisgICAgICAKKyAgc2F2ZV9jb3VudGVyKDApOworCisgIGlmIChyZWxheSkKKyAgICB7CisgICAgICB2b2lkICpvcHQsICpvcHRzID0gaW5idWZmICsgMzQ7CisgICAgICB2b2lkICplbmQgPSBpbmJ1ZmYgKyBzejsKKyAgICAgIGZvciAob3B0ID0gb3B0czsgb3B0OyBvcHQgPSBvcHQ2X25leHQob3B0LCBlbmQpKQorCWlmIChvcHQ2X3R5cGUob3B0KSA9PSBPUFRJT042X1JFTEFZX01TRyAmJiBvcHQ2X2xlbihvcHQpID4gMCkKKwkgIHsKKwkgICAgaW50IGVuY2FwX3R5cGUgPSAqKCh1bnNpZ25lZCBjaGFyICopb3B0Nl9wdHIob3B0LCAwKSk7CisJICAgIHB1dF9vcHQ2KG9wdDZfcHRyKG9wdCwgMCksIG9wdDZfbGVuKG9wdCkpOworCSAgICBtZW1jcHkoJnBlZXItPnNpbjZfYWRkciwgJmluYnVmZlsxOF0sIElONkFERFJTWik7IAorCSAgICBwZWVyLT5zaW42X3Njb3BlX2lkID0gcmVsYXktPmlmYWNlX2luZGV4OworCSAgICByZXR1cm4gZW5jYXBfdHlwZSA9PSBESENQNlJFTEFZUkVQTCA/IERIQ1BWNl9TRVJWRVJfUE9SVCA6IERIQ1BWNl9DTElFTlRfUE9SVDsKKwkgIH0KKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3NsYWFjLmMgYi9zcmMvc2xhYWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTFkNjgwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3NsYWFjLmMKQEAgLTAsMCArMSwyMDkgQEAKKy8qIGRuc21hc3EgaXMgQ29weXJpZ2h0IChjKSAyMDAwLTIwMTQgU2ltb24gS2VsbGV5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIGRhdGVkIEp1bmUsIDE5OTEsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMyBkYXRlZCAyOSBKdW5lLCAyMDA3LgorIAorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAiZG5zbWFzcS5oIgorCisjaWZkZWYgSEFWRV9ESENQNgorCisjaW5jbHVkZSA8bmV0aW5ldC9pY21wNi5oPgorCitzdGF0aWMgaW50IHBpbmdfaWQgPSAwOworCit2b2lkIHNsYWFjX2FkZF9hZGRycyhzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2UsIHRpbWVfdCBub3csIGludCBmb3JjZSkKK3sKKyAgc3RydWN0IHNsYWFjX2FkZHJlc3MgKnNsYWFjLCAqb2xkLCAqKnVwOworICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0OworICBpbnQgZG5zX2RpcnR5ID0gMDsKKyAgCisgIGlmICghKGxlYXNlLT5mbGFncyAmIExFQVNFX0hBVkVfSFdBRERSKSB8fCAKKyAgICAgIChsZWFzZS0+ZmxhZ3MgJiAoTEVBU0VfVEEgfCBMRUFTRV9OQSkpIHx8CisgICAgICBsZWFzZS0+bGFzdF9pbnRlcmZhY2UgPT0gMCB8fAorICAgICAgIWxlYXNlLT5ob3N0bmFtZSkKKyAgICByZXR1cm4gOworICAKKyAgb2xkID0gbGVhc2UtPnNsYWFjX2FkZHJlc3M7CisgIGxlYXNlLT5zbGFhY19hZGRyZXNzID0gTlVMTDsKKworICBmb3IgKGNvbnRleHQgPSBkYWVtb24tPmRoY3A2OyBjb250ZXh0OyBjb250ZXh0ID0gY29udGV4dC0+bmV4dCkgCisgICAgaWYgKChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfUkFfTkFNRSkgJiYgCisJIShjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfT0xEKSAmJgorCWxlYXNlLT5sYXN0X2ludGVyZmFjZSA9PSBjb250ZXh0LT5pZl9pbmRleCkKKyAgICAgIHsKKwlzdHJ1Y3QgaW42X2FkZHIgYWRkciA9IGNvbnRleHQtPnN0YXJ0NjsKKwlpZiAobGVhc2UtPmh3YWRkcl9sZW4gPT0gNiAmJgorCSAgICAobGVhc2UtPmh3YWRkcl90eXBlID09IEFSUEhSRF9FVEhFUiB8fCBsZWFzZS0+aHdhZGRyX3R5cGUgPT0gQVJQSFJEX0lFRUU4MDIpKQorCSAgeworCSAgICAvKiBjb252ZXJ0IE1BQyBhZGRyZXNzIHRvIEVVSS02NCAqLworCSAgICBtZW1jcHkoJmFkZHIuczZfYWRkcls4XSwgbGVhc2UtPmh3YWRkciwgMyk7CisJICAgIG1lbWNweSgmYWRkci5zNl9hZGRyWzEzXSwgJmxlYXNlLT5od2FkZHJbM10sIDMpOworCSAgICBhZGRyLnM2X2FkZHJbMTFdID0gMHhmZjsKKwkgICAgYWRkci5zNl9hZGRyWzEyXSA9IDB4ZmU7CisJICB9CisjaWYgZGVmaW5lZChBUlBIUkRfRVVJNjQpCisJZWxzZSBpZiAobGVhc2UtPmh3YWRkcl9sZW4gPT0gOCAmJgorCQkgbGVhc2UtPmh3YWRkcl90eXBlID09IEFSUEhSRF9FVUk2NCkKKwkgIG1lbWNweSgmYWRkci5zNl9hZGRyWzhdLCBsZWFzZS0+aHdhZGRyLCA4KTsKKyNlbmRpZgorI2lmIGRlZmluZWQoQVJQSFJEX0lFRUUxMzk0KSAmJiBkZWZpbmVkKEFSUEhSRF9FVUk2NCkKKwllbHNlIGlmIChsZWFzZS0+Y2xpZF9sZW4gPT0gOSAmJiAKKwkJIGxlYXNlLT5jbGlkWzBdID09ICBBUlBIUkRfRVVJNjQgJiYKKwkJIGxlYXNlLT5od2FkZHJfdHlwZSA9PSBBUlBIUkRfSUVFRTEzOTQpCisJICAvKiBmaXJld2lyZSBoYXMgRVVJLTY0IGlkZW50aWZpZXIgYXMgY2xpZCAqLworCSAgbWVtY3B5KCZhZGRyLnM2X2FkZHJbOF0sICZsZWFzZS0+Y2xpZFsxXSwgOCk7CisjZW5kaWYKKwllbHNlCisJICBjb250aW51ZTsKKwkKKwlhZGRyLnM2X2FkZHJbOF0gXj0gMHgwMjsKKwkKKwkvKiBjaGVjayBpZiB3ZSBhbHJlYWR5IGhhdmUgdGhpcyBvbmUgKi8KKwlmb3IgKHVwID0gJm9sZCwgc2xhYWMgPSBvbGQ7IHNsYWFjOyBzbGFhYyA9IHNsYWFjLT5uZXh0KQorCSAgeworCSAgICBpZiAoSU42X0FSRV9BRERSX0VRVUFMKCZhZGRyLCAmc2xhYWMtPmFkZHIpKQorCSAgICAgIHsKKwkJKnVwID0gc2xhYWMtPm5leHQ7CisJCS8qIHJlY2hlY2sgd2hlbiBESENQdjQgZ29lcyB0aHJvdWdoIGluaXQtcmVib290ICovCisJCWlmIChmb3JjZSkKKwkJICB7CisJCSAgICBzbGFhYy0+cGluZ190aW1lID0gbm93OworCQkgICAgc2xhYWMtPmJhY2tvZmYgPSAxOworCQkgICAgZG5zX2RpcnR5ID0gMTsKKwkJICB9CisJCWJyZWFrOworCSAgICAgIH0KKwkgICAgdXAgPSAmc2xhYWMtPm5leHQ7CisJICB9CisJICAgIAorCS8qIE5vLCBtYWtlIG5ldyBvbmUgKi8KKwlpZiAoIXNsYWFjICYmIChzbGFhYyA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IHNsYWFjX2FkZHJlc3MpKSkpCisJICB7CisJICAgIHNsYWFjLT5waW5nX3RpbWUgPSBub3c7CisJICAgIHNsYWFjLT5iYWNrb2ZmID0gMTsKKwkgICAgc2xhYWMtPmFkZHIgPSBhZGRyOworCSAgICAvKiBEbyBSQSdzIHRvIHByb2QgaXQgKi8KKwkgICAgcmFfc3RhcnRfdW5zb2xpY3RlZChub3csIGNvbnRleHQpOworCSAgfQorCQorCWlmIChzbGFhYykKKwkgIHsKKwkgICAgc2xhYWMtPm5leHQgPSBsZWFzZS0+c2xhYWNfYWRkcmVzczsKKwkgICAgbGVhc2UtPnNsYWFjX2FkZHJlc3MgPSBzbGFhYzsKKwkgIH0KKyAgICAgIH0KKyAgCisgIGlmIChvbGQgfHwgZG5zX2RpcnR5KQorICAgIGxlYXNlX3VwZGF0ZV9kbnMoMSk7CisgIAorICAvKiBGcmVlIGFueSBubyByZXVzZWQgKi8KKyAgZm9yICg7IG9sZDsgb2xkID0gc2xhYWMpCisgICAgeworICAgICAgc2xhYWMgPSBvbGQtPm5leHQ7CisgICAgICBmcmVlKG9sZCk7CisgICAgfQorfQorCisKK3RpbWVfdCBwZXJpb2RpY19zbGFhYyh0aW1lX3Qgbm93LCBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2VzKQoreworICBzdHJ1Y3QgZGhjcF9jb250ZXh0ICpjb250ZXh0OworICBzdHJ1Y3QgZGhjcF9sZWFzZSAqbGVhc2U7CisgIHN0cnVjdCBzbGFhY19hZGRyZXNzICpzbGFhYzsKKyAgdGltZV90IG5leHRfZXZlbnQgPSAwOworICAKKyAgZm9yIChjb250ZXh0ID0gZGFlbW9uLT5kaGNwNjsgY29udGV4dDsgY29udGV4dCA9IGNvbnRleHQtPm5leHQpCisgICAgaWYgKChjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfUkFfTkFNRSkgJiYgIShjb250ZXh0LT5mbGFncyAmIENPTlRFWFRfT0xEKSkKKyAgICAgIGJyZWFrOworCisgIC8qIG5vdGhpbmcgY29uZmlndXJlZCAqLworICBpZiAoIWNvbnRleHQpCisgICAgcmV0dXJuIDA7CisKKyAgd2hpbGUgKHBpbmdfaWQgPT0gMCkKKyAgICBwaW5nX2lkID0gcmFuZDE2KCk7CisKKyAgZm9yIChsZWFzZSA9IGxlYXNlczsgbGVhc2U7IGxlYXNlID0gbGVhc2UtPm5leHQpCisgICAgZm9yIChzbGFhYyA9IGxlYXNlLT5zbGFhY19hZGRyZXNzOyBzbGFhYzsgc2xhYWMgPSBzbGFhYy0+bmV4dCkKKyAgICAgIHsKKwkvKiBjb25maXJtZWQgb3IgZ2l2ZW4gdXA/ICovCisJaWYgKHNsYWFjLT5iYWNrb2ZmID09IDAgfHwgc2xhYWMtPnBpbmdfdGltZSA9PSAwKQorCSAgY29udGludWU7CisJCisJaWYgKGRpZmZ0aW1lKHNsYWFjLT5waW5nX3RpbWUsIG5vdykgPD0gMC4wKQorCSAgeworCSAgICBzdHJ1Y3QgcGluZ19wYWNrZXQgKnBpbmc7CisJICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKKyAKKwkgICAgc2F2ZV9jb3VudGVyKDApOworCSAgICBwaW5nID0gZXhwYW5kKHNpemVvZihzdHJ1Y3QgcGluZ19wYWNrZXQpKTsKKwkgICAgcGluZy0+dHlwZSA9IElDTVA2X0VDSE9fUkVRVUVTVDsKKwkgICAgcGluZy0+Y29kZSA9IDA7CisJICAgIHBpbmctPmlkZW50aWZpZXIgPSBwaW5nX2lkOworCSAgICBwaW5nLT5zZXF1ZW5jZV9ubyA9IHNsYWFjLT5iYWNrb2ZmOworCSAgICAKKwkgICAgbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisJICAgIGFkZHIuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwkgICAgYWRkci5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworCSAgICBhZGRyLnNpbjZfcG9ydCA9IGh0b25zKElQUFJPVE9fSUNNUFY2KTsKKwkgICAgYWRkci5zaW42X2FkZHIgPSBzbGFhYy0+YWRkcjsKKwkgICAgCisJICAgIGlmIChzZW5kdG8oZGFlbW9uLT5pY21wNmZkLCBkYWVtb24tPm91dHBhY2tldC5pb3ZfYmFzZSwgc2F2ZV9jb3VudGVyKDApLCAwLAorCQkgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCAgc2l6ZW9mKGFkZHIpKSA9PSAtMSAmJgorCQllcnJubyA9PSBFSE9TVFVOUkVBQ0gpCisJICAgICAgc2xhYWMtPnBpbmdfdGltZSA9IDA7IC8qIEdpdmUgdXAgKi8gCisJICAgIGVsc2UKKwkgICAgICB7CisJCXNsYWFjLT5waW5nX3RpbWUgKz0gKDEgPDwgKHNsYWFjLT5iYWNrb2ZmIC0gMSkpICsgKHJhbmQxNigpLzIxNzg1KTsgLyogMCAtIDMgKi8KKwkJaWYgKHNsYWFjLT5iYWNrb2ZmID4gNCkKKwkJICBzbGFhYy0+cGluZ190aW1lICs9IHJhbmQxNigpLzQwMDA7IC8qIDAgLSAxNSAqLworCQlpZiAoc2xhYWMtPmJhY2tvZmYgPCAxMikKKwkJICBzbGFhYy0+YmFja29mZisrOworCSAgICAgIH0KKwkgIH0KKwkKKwlpZiAoc2xhYWMtPnBpbmdfdGltZSAhPSAwICYmCisJICAgIChuZXh0X2V2ZW50ID09IDAgfHwgZGlmZnRpbWUobmV4dF9ldmVudCwgc2xhYWMtPnBpbmdfdGltZSkgPj0gMC4wKSkKKwkgIG5leHRfZXZlbnQgPSBzbGFhYy0+cGluZ190aW1lOworICAgICAgfQorCisgIHJldHVybiBuZXh0X2V2ZW50OworfQorCisKK3ZvaWQgc2xhYWNfcGluZ19yZXBseShzdHJ1Y3QgaW42X2FkZHIgKnNlbmRlciwgdW5zaWduZWQgY2hhciAqcGFja2V0LCBjaGFyICppbnRlcmZhY2UsIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZXMpCit7CisgIHN0cnVjdCBkaGNwX2xlYXNlICpsZWFzZTsKKyAgc3RydWN0IHNsYWFjX2FkZHJlc3MgKnNsYWFjOworICBzdHJ1Y3QgcGluZ19wYWNrZXQgKnBpbmcgPSAoc3RydWN0IHBpbmdfcGFja2V0ICopcGFja2V0OworICBpbnQgZ290b25lID0gMDsKKyAgCisgIGlmIChwaW5nLT5pZGVudGlmaWVyID09IHBpbmdfaWQpCisgICAgZm9yIChsZWFzZSA9IGxlYXNlczsgbGVhc2U7IGxlYXNlID0gbGVhc2UtPm5leHQpCisgICAgICBmb3IgKHNsYWFjID0gbGVhc2UtPnNsYWFjX2FkZHJlc3M7IHNsYWFjOyBzbGFhYyA9IHNsYWFjLT5uZXh0KQorCWlmIChzbGFhYy0+YmFja29mZiAhPSAwICYmIElONl9BUkVfQUREUl9FUVVBTChzZW5kZXIsICZzbGFhYy0+YWRkcikpCisJICB7CisJICAgIHNsYWFjLT5iYWNrb2ZmID0gMDsKKwkgICAgZ290b25lID0gMTsKKwkgICAgaW5ldF9udG9wKEFGX0lORVQ2LCBzZW5kZXIsIGRhZW1vbi0+YWRkcmJ1ZmYsIEFERFJTVFJMRU4pOworCSAgICBpZiAoIW9wdGlvbl9ib29sKE9QVF9RVUlFVF9ESENQNikpCisJICAgICAgbXlfc3lzbG9nKE1TX0RIQ1AgfCBMT0dfSU5GTywgIlNMQUFDLUNPTkZJUk0oJXMpICVzICVzIiwgaW50ZXJmYWNlLCBkYWVtb24tPmFkZHJidWZmLCBsZWFzZS0+aG9zdG5hbWUpOyAKKwkgIH0KKyAgCisgIGxlYXNlX3VwZGF0ZV9kbnMoZ290b25lKTsKK30KKwkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3RhYmxlcy5jIGIvc3JjL3RhYmxlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZGVmNzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGFibGVzLmMKQEAgLTAsMCArMSwxNzMgQEAKKy8qIHRhYmxlcy5jIGlzIENvcHlyaWdodCAoYykgMjAxNCBTdmVuIEZhbGVtcGluICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBBdXRob3IncyBlbWFpbDogc2ZhbGVtcGluQGNpdHlwYXNzZW5nZXIuY29tIAorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworI2lmIGRlZmluZWQoSEFWRV9JUFNFVCkgJiYgZGVmaW5lZChIQVZFX0JTRF9ORVRXT1JLKQorCisjaWZuZGVmIF9fRnJlZUJTRF9fCisjaW5jbHVkZSA8YnNkL3N0cmluZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKworI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxuZXQvcGZ2YXIuaD4KKworI2luY2x1ZGUgPGVyci5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2RlZmluZSBVTlVTRUQoeCkgKHZvaWQpKHgpCisKK3N0YXRpYyBjaGFyICpwZl9kZXZpY2UgPSAiL2Rldi9wZiI7CitzdGF0aWMgaW50IGRldiA9IC0xOworCitzdGF0aWMgY2hhciAqcGZyX3N0cmVycm9yKGludCBlcnJudW0pCit7CisgIHN3aXRjaCAoZXJybnVtKSAKKyAgICB7CisgICAgY2FzZSBFU1JDSDoKKyAgICAgIHJldHVybiAiVGFibGUgZG9lcyBub3QgZXhpc3QiOworICAgIGNhc2UgRU5PRU5UOgorICAgICAgcmV0dXJuICJBbmNob3Igb3IgUnVsZXNldCBkb2VzIG5vdCBleGlzdCI7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBzdHJlcnJvcihlcnJudW0pOworICAgIH0KK30KKworc3RhdGljIGludCBwZnJfYWRkX3RhYmxlcyhzdHJ1Y3QgcGZyX3RhYmxlICp0YmwsIGludCBzaXplLCBpbnQgKm5hZGQsIGludCBmbGFncykKK3sKKyAgc3RydWN0IHBmaW9jX3RhYmxlIGlvOworICAKKyAgaWYgKHNpemUgPCAwIHx8IChzaXplICYmIHRibCA9PSBOVUxMKSkgCisgICAgeworICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICByZXR1cm4gKC0xKTsKKyAgICB9CisgIGJ6ZXJvKCZpbywgc2l6ZW9mIGlvKTsKKyAgaW8ucGZyaW9fZmxhZ3MgPSBmbGFnczsKKyAgaW8ucGZyaW9fYnVmZmVyID0gdGJsOworICBpby5wZnJpb19lc2l6ZSA9IHNpemVvZigqdGJsKTsKKyAgaW8ucGZyaW9fc2l6ZSA9IHNpemU7CisgIGlmIChpb2N0bChkZXYsIERJT0NSQUREVEFCTEVTLCAmaW8pKQorICAgIHJldHVybiAoLTEpOworICBpZiAobmFkZCAhPSBOVUxMKQorICAgICpuYWRkID0gaW8ucGZyaW9fbmFkZDsKKyAgcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludCBmaWxsX2FkZHIoY29uc3Qgc3RydWN0IGFsbF9hZGRyICppcGFkZHIsIGludCBmbGFncywgc3RydWN0IHBmcl9hZGRyKiBhZGRyKSB7CisgIGlmICggIWFkZHIgfHwgIWlwYWRkcikKKyAgICB7CisgICAgICBteV9zeXNsb2coTE9HX0VSUiwgXygiZXJyb3I6IGZpbGxfYWRkciBtaXNzdXNlZCIpKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIGJ6ZXJvKGFkZHIsIHNpemVvZigqYWRkcikpOworI2lmZGVmIEhBVkVfSVBWNgorICBpZiAoZmxhZ3MgJiBGX0lQVjYpIAorICAgIHsKKyAgICAgIGFkZHItPnBmcmFfYWYgPSBBRl9JTkVUNjsKKyAgICAgIGFkZHItPnBmcmFfbmV0ID0gMHg4MDsKKyAgICAgIG1lbWNweSgmKGFkZHItPnBmcmFfaXA2YWRkciksICYoaXBhZGRyLT5hZGRyKSwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworICAgIH0gCisgIGVsc2UgCisjZW5kaWYKKyAgICB7CisgICAgICBhZGRyLT5wZnJhX2FmID0gQUZfSU5FVDsKKyAgICAgIGFkZHItPnBmcmFfbmV0ID0gMHgyMDsKKyAgICAgIGFkZHItPnBmcmFfaXA0YWRkci5zX2FkZHIgPSBpcGFkZHItPmFkZHIuYWRkcjQuc19hZGRyOworICAgIH0KKyAgcmV0dXJuIDE7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBpcHNldF9pbml0KHZvaWQpIAoreworICBkZXYgPSBvcGVuKCBwZl9kZXZpY2UsIE9fUkRXUik7CisgIGlmIChkZXYgPT0gLTEpCisgICAgeworICAgICAgZXJyKDEsICIlcyIsIHBmX2RldmljZSk7CisgICAgICBkaWUgKF8oImZhaWxlZCB0byBhY2Nlc3MgcGYgZGV2aWNlczogJXMiKSwgTlVMTCwgRUNfTUlTQyk7CisgICAgfQorfQorCitpbnQgYWRkX3RvX2lwc2V0KGNvbnN0IGNoYXIgKnNldG5hbWUsIGNvbnN0IHN0cnVjdCBhbGxfYWRkciAqaXBhZGRyLAorCQkgICAgICBpbnQgZmxhZ3MsIGludCByZW1vdmUpCit7CisgIHN0cnVjdCBwZnJfYWRkciBhZGRyOworICBzdHJ1Y3QgcGZpb2NfdGFibGUgaW87CisgIHN0cnVjdCBwZnJfdGFibGUgdGFibGU7CisgIGludCBuID0gMCwgcmMgPSAwOworCisgIGlmICggZGV2ID09IC0xICkgCisgICAgeworICAgICAgbXlfc3lzbG9nKExPR19FUlIsIF8oIndhcm5pbmc6IG5vIG9wZW5lZCBwZiBkZXZpY2VzICVzIiksIHBmX2RldmljZSk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGJ6ZXJvKCZ0YWJsZSwgc2l6ZW9mKHN0cnVjdCBwZnJfdGFibGUpKTsKKyAgdGFibGUucGZydF9mbGFncyB8PSBQRlJfVEZMQUdfUEVSU0lTVDsKKyAgaWYgKCBzdHJsZW4oc2V0bmFtZSkgPj0gUEZfVEFCTEVfTkFNRV9TSVpFICkKKyAgICB7CisgICAgICBteV9zeXNsb2coTE9HX0VSUiwgXygiZXJyb3I6IGNhbm5vdCB1c2UgdGFibGUgbmFtZSAlcyIpLCBzZXRuYW1lKTsKKyAgICAgIGVycm5vID0gRU5BTUVUT09MT05HOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgCisgIGlmICggc3RybGNweSh0YWJsZS5wZnJ0X25hbWUsIHNldG5hbWUsCisgICAgICAgICAgICAgICBzaXplb2YodGFibGUucGZydF9uYW1lKSkgPj0gc2l6ZW9mKHRhYmxlLnBmcnRfbmFtZSkpIAorICAgIHsKKyAgICAgIG15X3N5c2xvZyhMT0dfRVJSLCBfKCJlcnJvcjogY2Fubm90IHN0cmxjcHkgdGFibGUgbmFtZSAlcyIpLCBzZXRuYW1lKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIAorICBpZiAoKHJjID0gcGZyX2FkZF90YWJsZXMoJnRhYmxlLCAxLCAmbiwgMCkpKSAKKyAgICB7CisgICAgICBteV9zeXNsb2coTE9HX1dBUk5JTkcsIF8oIndhcm5pbmc6IHBmcl9hZGRfdGFibGVzOiAlcyglZCkiKSwKKwkJcGZyX3N0cmVycm9yKGVycm5vKSxyYyk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICB0YWJsZS5wZnJ0X2ZsYWdzICY9IH5QRlJfVEZMQUdfUEVSU0lTVDsKKyAgaWYgKG4pCisgICAgbXlfc3lzbG9nKExPR19JTkZPLCBfKCJpbmZvOiB0YWJsZSBjcmVhdGVkIikpOworICAKKyAgZmlsbF9hZGRyKGlwYWRkcixmbGFncywmYWRkcik7CisgIGJ6ZXJvKCZpbywgc2l6ZW9mKGlvKSk7CisgIGlvLnBmcmlvX2ZsYWdzID0gMDsKKyAgaW8ucGZyaW9fdGFibGUgPSB0YWJsZTsKKyAgaW8ucGZyaW9fYnVmZmVyID0gJmFkZHI7CisgIGlvLnBmcmlvX2VzaXplID0gc2l6ZW9mKGFkZHIpOworICBpby5wZnJpb19zaXplID0gMTsKKyAgaWYgKGlvY3RsKGRldiwgKCByZW1vdmUgPyBESU9DUkRFTEFERFJTIDogRElPQ1JBRERBRERSUyApLCAmaW8pKSAKKyAgICB7CisgICAgICBteV9zeXNsb2coTE9HX1dBUk5JTkcsIF8oIndhcm5pbmc6IERJT0NSJXNBRERSUzogJXMiKSwgKCByZW1vdmUgPyAiREVMIiA6ICJBREQiICksIHBmcl9zdHJlcnJvcihlcnJubykpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgCisgIG15X3N5c2xvZyhMT0dfSU5GTywgXygiJWQgYWRkcmVzc2VzICVzIiksCisgICAgICAgICAgICBpby5wZnJpb19uYWRkLCAoIHJlbW92ZSA/ICJyZW1vdmVkIiA6ICJhZGRlZCIgKSk7CisgIAorICByZXR1cm4gaW8ucGZyaW9fbmFkZDsKK30KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy90ZnRwLmMgYi9zcmMvdGZ0cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1Mjc5MTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGZ0cC5jCkBAIC0wLDAgKzEsNzY5IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE0IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImRuc21hc3EuaCIKKworI2lmZGVmIEhBVkVfVEZUUAorCitzdGF0aWMgc3RydWN0IHRmdHBfZmlsZSAqY2hlY2tfdGZ0cF9maWxlcGVybShzc2l6ZV90ICpsZW4sIGNoYXIgKnByZWZpeCk7CitzdGF0aWMgdm9pZCBmcmVlX3RyYW5zZmVyKHN0cnVjdCB0ZnRwX3RyYW5zZmVyICp0cmFuc2Zlcik7CitzdGF0aWMgc3NpemVfdCB0ZnRwX2VycihpbnQgZXJyLCBjaGFyICpwYWNrZXQsIGNoYXIgKm1lc3MsIGNoYXIgKmZpbGUpOworc3RhdGljIHNzaXplX3QgdGZ0cF9lcnJfb29wcyhjaGFyICpwYWNrZXQsIGNoYXIgKmZpbGUpOworc3RhdGljIHNzaXplX3QgZ2V0X2Jsb2NrKGNoYXIgKnBhY2tldCwgc3RydWN0IHRmdHBfdHJhbnNmZXIgKnRyYW5zZmVyKTsKK3N0YXRpYyBjaGFyICpuZXh0KGNoYXIgKipwLCBjaGFyICplbmQpOworc3RhdGljIHZvaWQgc2FuaXRpc2UoY2hhciAqYnVmKTsKKworI2RlZmluZSBPUF9SUlEgIDEKKyNkZWZpbmUgT1BfV1JRICAyCisjZGVmaW5lIE9QX0RBVEEgMworI2RlZmluZSBPUF9BQ0sgIDQKKyNkZWZpbmUgT1BfRVJSICA1CisjZGVmaW5lIE9QX09BQ0sgNgorCisjZGVmaW5lIEVSUl9OT1RERUYgMAorI2RlZmluZSBFUlJfRk5GICAgIDEKKyNkZWZpbmUgRVJSX1BFUk0gICAyCisjZGVmaW5lIEVSUl9GVUxMICAgMworI2RlZmluZSBFUlJfSUxMICAgIDQKKwordm9pZCB0ZnRwX3JlcXVlc3Qoc3RydWN0IGxpc3RlbmVyICpsaXN0ZW4sIHRpbWVfdCBub3cpCit7CisgIHNzaXplX3QgbGVuOworICBjaGFyICpwYWNrZXQgPSBkYWVtb24tPnBhY2tldDsKKyAgY2hhciAqZmlsZW5hbWUsICptb2RlLCAqcCwgKmVuZCwgKm9wdDsKKyAgdW5pb24gbXlzb2NrYWRkciBhZGRyLCBwZWVyOworICBzdHJ1Y3QgbXNnaGRyIG1zZzsKKyAgc3RydWN0IGlvdmVjIGlvdjsKKyAgc3RydWN0IGlmcmVxIGlmcjsKKyAgaW50IGlzX2VyciA9IDEsIGlmX2luZGV4ID0gMCwgbXR1ID0gMDsKKyAgc3RydWN0IGluYW1lICp0bXA7CisgIHN0cnVjdCB0ZnRwX3RyYW5zZmVyICp0cmFuc2ZlcjsKKyAgaW50IHBvcnQgPSBkYWVtb24tPnN0YXJ0X3RmdHBfcG9ydDsgLyogbWF5IGJlIHplcm8gdG8gdXNlIGVwaGVtZXJhbCBwb3J0ICovCisjaWYgZGVmaW5lZChJUF9NVFVfRElTQ09WRVIpICYmIGRlZmluZWQoSVBfUE1UVURJU0NfRE9OVCkKKyAgaW50IG10dWZsYWcgPSBJUF9QTVRVRElTQ19ET05UOworI2VuZGlmCisgIGNoYXIgbmFtZWJ1ZmZbSUZfTkFNRVNJWkVdOworICBjaGFyICpuYW1lID0gTlVMTDsKKyAgY2hhciAqcHJlZml4ID0gZGFlbW9uLT50ZnRwX3ByZWZpeDsKKyAgc3RydWN0IHRmdHBfcHJlZml4ICpwcmVmOworICBzdHJ1Y3QgYWxsX2FkZHIgYWRkcmE7CisjaWZkZWYgSEFWRV9JUFY2CisgIC8qIENhbiBhbHdheXMgZ2V0IHJlY3ZkIGludGVyZmFjZSBmb3IgSVB2NiAqLworICBpbnQgY2hlY2tfZGVzdCA9ICFvcHRpb25fYm9vbChPUFRfTk9XSUxEKSB8fCBsaXN0ZW4tPmZhbWlseSA9PSBBRl9JTkVUNjsKKyNlbHNlCisgIGludCBjaGVja19kZXN0ID0gIW9wdGlvbl9ib29sKE9QVF9OT1dJTEQpOworI2VuZGlmCisgIHVuaW9uIHsKKyAgICBzdHJ1Y3QgY21zZ2hkciBhbGlnbjsgLyogdGhpcyBlbnN1cmVzIGFsaWdubWVudCAqLworI2lmZGVmIEhBVkVfSVBWNgorICAgIGNoYXIgY29udHJvbDZbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IGluNl9wa3RpbmZvKSldOworI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX05FVFdPUkspCisgICAgY2hhciBjb250cm9sW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpbl9wa3RpbmZvKSldOworI2VsaWYgZGVmaW5lZChIQVZFX1NPTEFSSVNfTkVUV09SSykKKyAgICBjaGFyIGNvbnRyb2xbQ01TR19TUEFDRShzaXplb2YodW5zaWduZWQgaW50KSldOworI2VsaWYgZGVmaW5lZChJUF9SRUNWRFNUQUREUikgJiYgZGVmaW5lZChJUF9SRUNWSUYpCisgICAgY2hhciBjb250cm9sW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9kbCkpXTsKKyNlbmRpZgorICB9IGNvbnRyb2xfdTsgCisKKyAgbXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNvbnRyb2xfdSk7CisgIG1zZy5tc2dfY29udHJvbCA9IGNvbnRyb2xfdS5jb250cm9sOworICBtc2cubXNnX2ZsYWdzID0gMDsKKyAgbXNnLm1zZ19uYW1lID0gJnBlZXI7CisgIG1zZy5tc2dfbmFtZWxlbiA9IHNpemVvZihwZWVyKTsKKyAgbXNnLm1zZ19pb3YgPSAmaW92OworICBtc2cubXNnX2lvdmxlbiA9IDE7CisKKyAgaW92Lmlvdl9iYXNlID0gcGFja2V0OworICBpb3YuaW92X2xlbiA9IGRhZW1vbi0+cGFja2V0X2J1ZmZfc3o7CisKKyAgLyogd2Ugb3Zlcndyb3RlIHRoZSBidWZmZXIuLi4gKi8KKyAgZGFlbW9uLT5zcnZfc2F2ZSA9IE5VTEw7CisKKyAgaWYgKChsZW4gPSByZWN2bXNnKGxpc3Rlbi0+dGZ0cGZkLCAmbXNnLCAwKSkgPCAyKQorICAgIHJldHVybjsKKworICAvKiBDYW4gYWx3YXlzIGdldCByZWN2ZCBpbnRlcmZhY2UgZm9yIElQdjYgKi8KKyAgaWYgKCFjaGVja19kZXN0KQorICAgIHsKKyAgICAgIGlmIChsaXN0ZW4tPmlmYWNlKQorCXsKKwkgIGFkZHIgPSBsaXN0ZW4tPmlmYWNlLT5hZGRyOworCSAgbXR1ID0gbGlzdGVuLT5pZmFjZS0+bXR1OworCSAgbmFtZSA9IGxpc3Rlbi0+aWZhY2UtPm5hbWU7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIHdlJ3JlIGxpc3RlbmluZyBvbiBhbiBhZGRyZXNzIHRoYXQgZG9lc24ndCBhcHBlYXIgb24gYW4gaW50ZXJmYWNlLAorCSAgICAgYXNrIHRoZSBrZXJuZWwgd2hhdCB0aGUgc29ja2V0IGlzIGJvdW5kIHRvICovCisJICBzb2NrbGVuX3QgdGNwX2xlbiA9IHNpemVvZih1bmlvbiBteXNvY2thZGRyKTsKKwkgIGlmIChnZXRzb2NrbmFtZShsaXN0ZW4tPnRmdHBmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCAmdGNwX2xlbikgPT0gLTEpCisJICAgIHJldHVybjsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgc3RydWN0IGNtc2doZHIgKmNtcHRyOworCisgICAgICBpZiAobXNnLm1zZ19jb250cm9sbGVuIDwgc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSkKKyAgICAgICAgcmV0dXJuOworICAgICAgCisgICAgICBhZGRyLnNhLnNhX2ZhbWlseSA9IGxpc3Rlbi0+ZmFtaWx5OworICAgICAgCisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX05FVFdPUkspCisgICAgICBpZiAobGlzdGVuLT5mYW1pbHkgPT0gQUZfSU5FVCkKKwlmb3IgKGNtcHRyID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY21wdHI7IGNtcHRyID0gQ01TR19OWFRIRFIoJm1zZywgY21wdHIpKQorCSAgaWYgKGNtcHRyLT5jbXNnX2xldmVsID09IElQUFJPVE9fSVAgJiYgY21wdHItPmNtc2dfdHlwZSA9PSBJUF9QS1RJTkZPKQorCSAgICB7CisJICAgICAgdW5pb24geworCQl1bnNpZ25lZCBjaGFyICpjOworCQlzdHJ1Y3QgaW5fcGt0aW5mbyAqcDsKKwkgICAgICB9IHA7CisJICAgICAgcC5jID0gQ01TR19EQVRBKGNtcHRyKTsKKwkgICAgICBhZGRyLmluLnNpbl9hZGRyID0gcC5wLT5pcGlfc3BlY19kc3Q7CisJICAgICAgaWZfaW5kZXggPSBwLnAtPmlwaV9pZmluZGV4OworCSAgICB9CisgICAgICAKKyNlbGlmIGRlZmluZWQoSEFWRV9TT0xBUklTX05FVFdPUkspCisgICAgICBpZiAobGlzdGVuLT5mYW1pbHkgPT0gQUZfSU5FVCkKKwlmb3IgKGNtcHRyID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY21wdHI7IGNtcHRyID0gQ01TR19OWFRIRFIoJm1zZywgY21wdHIpKQorCSAgeworCSAgICB1bmlvbiB7CisJICAgICAgdW5zaWduZWQgY2hhciAqYzsKKwkgICAgICBzdHJ1Y3QgaW5fYWRkciAqYTsKKwkgICAgICB1bnNpZ25lZCBpbnQgKmk7CisJICAgIH0gcDsKKwkgICAgcC5jID0gQ01TR19EQVRBKGNtcHRyKTsKKwkgICAgaWYgKGNtcHRyLT5jbXNnX2xldmVsID09IElQUFJPVE9fSVAgJiYgY21wdHItPmNtc2dfdHlwZSA9PSBJUF9SRUNWRFNUQUREUikKKwkgICAgYWRkci5pbi5zaW5fYWRkciA9ICoocC5hKTsKKwkgICAgZWxzZSBpZiAoY21wdHItPmNtc2dfbGV2ZWwgPT0gSVBQUk9UT19JUCAmJiBjbXB0ci0+Y21zZ190eXBlID09IElQX1JFQ1ZJRikKKwkgICAgaWZfaW5kZXggPSAqKHAuaSk7CisJICB9CisgICAgICAKKyNlbGlmIGRlZmluZWQoSVBfUkVDVkRTVEFERFIpICYmIGRlZmluZWQoSVBfUkVDVklGKQorICAgICAgaWYgKGxpc3Rlbi0+ZmFtaWx5ID09IEFGX0lORVQpCisJZm9yIChjbXB0ciA9IENNU0dfRklSU1RIRFIoJm1zZyk7IGNtcHRyOyBjbXB0ciA9IENNU0dfTlhUSERSKCZtc2csIGNtcHRyKSkKKwkgIHsKKwkgICAgdW5pb24geworCSAgICAgIHVuc2lnbmVkIGNoYXIgKmM7CisJICAgICAgc3RydWN0IGluX2FkZHIgKmE7CisJICAgICAgc3RydWN0IHNvY2thZGRyX2RsICpzOworCSAgICB9IHA7CisJICAgIHAuYyA9IENNU0dfREFUQShjbXB0cik7CisJICAgIGlmIChjbXB0ci0+Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQICYmIGNtcHRyLT5jbXNnX3R5cGUgPT0gSVBfUkVDVkRTVEFERFIpCisJICAgICAgYWRkci5pbi5zaW5fYWRkciA9ICoocC5hKTsKKwkgICAgZWxzZSBpZiAoY21wdHItPmNtc2dfbGV2ZWwgPT0gSVBQUk9UT19JUCAmJiBjbXB0ci0+Y21zZ190eXBlID09IElQX1JFQ1ZJRikKKwkgICAgICBpZl9pbmRleCA9IHAucy0+c2RsX2luZGV4OworCSAgfQorCSAgCisjZW5kaWYKKworI2lmZGVmIEhBVkVfSVBWNgorICAgICAgaWYgKGxpc3Rlbi0+ZmFtaWx5ID09IEFGX0lORVQ2KQorICAgICAgICB7CisgICAgICAgICAgZm9yIChjbXB0ciA9IENNU0dfRklSU1RIRFIoJm1zZyk7IGNtcHRyOyBjbXB0ciA9IENNU0dfTlhUSERSKCZtc2csIGNtcHRyKSkKKyAgICAgICAgICAgIGlmIChjbXB0ci0+Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQVjYgJiYgY21wdHItPmNtc2dfdHlwZSA9PSBkYWVtb24tPnY2cGt0aW5mbykKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmM7CisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW42X3BrdGluZm8gKnA7CisgICAgICAgICAgICAgICAgfSBwOworICAgICAgICAgICAgICAgIHAuYyA9IENNU0dfREFUQShjbXB0cik7CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhZGRyLmluNi5zaW42X2FkZHIgPSBwLnAtPmlwaTZfYWRkcjsKKyAgICAgICAgICAgICAgICBpZl9pbmRleCA9IHAucC0+aXBpNl9pZmluZGV4OworICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgCisgICAgICBpZiAoIWluZGV4dG9uYW1lKGxpc3Rlbi0+dGZ0cGZkLCBpZl9pbmRleCwgbmFtZWJ1ZmYpKQorCXJldHVybjsKKworICAgICAgbmFtZSA9IG5hbWVidWZmOworICAgICAgCisgICAgICBhZGRyYS5hZGRyLmFkZHI0ID0gYWRkci5pbi5zaW5fYWRkcjsKKworI2lmZGVmIEhBVkVfSVBWNgorICAgICAgaWYgKGxpc3Rlbi0+ZmFtaWx5ID09IEFGX0lORVQ2KQorCWFkZHJhLmFkZHIuYWRkcjYgPSBhZGRyLmluNi5zaW42X2FkZHI7CisjZW5kaWYKKworICAgICAgaWYgKGRhZW1vbi0+dGZ0cF9pbnRlcmZhY2VzKQorCXsKKwkgIC8qIGRlZGljYXRlZCB0ZnRwIGludGVyZmFjZSBsaXN0ICovCisJICBmb3IgKHRtcCA9IGRhZW1vbi0+dGZ0cF9pbnRlcmZhY2VzOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKKwkgICAgaWYgKHRtcC0+bmFtZSAmJiB3aWxkY2FyZF9tYXRjaCh0bXAtPm5hbWUsIG5hbWUpKQorCSAgICAgIGJyZWFrOworCisJICBpZiAoIXRtcCkKKwkgICAgcmV0dXJuOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBEbyB0aGUgc2FtZSBhcyBESENQICovCisJICBpZiAoIWlmYWNlX2NoZWNrKGxpc3Rlbi0+ZmFtaWx5LCAmYWRkcmEsIG5hbWUsIE5VTEwpKQorCSAgICB7CisJICAgICAgaWYgKCFvcHRpb25fYm9vbChPUFRfQ0xFVkVSQklORCkpCisJCWVudW1lcmF0ZV9pbnRlcmZhY2VzKDApOyAKKwkgICAgICBpZiAoIWxvb3BiYWNrX2V4Y2VwdGlvbihsaXN0ZW4tPnRmdHBmZCwgbGlzdGVuLT5mYW1pbHksICZhZGRyYSwgbmFtZSkgJiYKKwkJICAhbGFiZWxfZXhjZXB0aW9uKGlmX2luZGV4LCBsaXN0ZW4tPmZhbWlseSwgJmFkZHJhKSApCisJCXJldHVybjsKKwkgICAgfQorCSAgCisjaWZkZWYgSEFWRV9ESENQICAgICAgCisJICAvKiBhbGxvd2VkIGludGVyZmFjZXMgYXJlIHRoZSBzYW1lIGFzIGZvciBESENQICovCisJICBmb3IgKHRtcCA9IGRhZW1vbi0+ZGhjcF9leGNlcHQ7IHRtcDsgdG1wID0gdG1wLT5uZXh0KQorCSAgICBpZiAodG1wLT5uYW1lICYmIHdpbGRjYXJkX21hdGNoKHRtcC0+bmFtZSwgbmFtZSkpCisJICAgICAgcmV0dXJuOworI2VuZGlmCisJfQorCisgICAgICBzdHJuY3B5KGlmci5pZnJfbmFtZSwgbmFtZSwgSUZfTkFNRVNJWkUpOworICAgICAgaWYgKGlvY3RsKGxpc3Rlbi0+dGZ0cGZkLCBTSU9DR0lGTVRVLCAmaWZyKSAhPSAtMSkKKwltdHUgPSBpZnIuaWZyX210dTsgICAgICAKKyAgICB9CisgIAorICBpZiAobmFtZSkKKyAgICB7CisgICAgICAvKiBjaGVjayBmb3IgcGVyLWludGVyZmFjZSBwcmVmaXggKi8gCisgICAgICBmb3IgKHByZWYgPSBkYWVtb24tPmlmX3ByZWZpeDsgcHJlZjsgcHJlZiA9IHByZWYtPm5leHQpCisJaWYgKHN0cmNtcChwcmVmLT5pbnRlcmZhY2UsIG5hbWUpID09IDApCisJICBwcmVmaXggPSBwcmVmLT5wcmVmaXg7ICAKKyAgICB9CisKKyAgaWYgKGxpc3Rlbi0+ZmFtaWx5ID09IEFGX0lORVQpCisgICAgeworICAgICAgYWRkci5pbi5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgICAgICBhZGRyLmluLnNpbl9sZW4gPSBzaXplb2YoYWRkci5pbik7CisjZW5kaWYKKyAgICB9CisjaWZkZWYgSEFWRV9JUFY2CisgIGVsc2UKKyAgICB7CisgICAgICBhZGRyLmluNi5zaW42X3BvcnQgPSBodG9ucyhwb3J0KTsKKyAgICAgIGFkZHIuaW42LnNpbjZfZmxvd2luZm8gPSAwOworICAgICAgYWRkci5pbjYuc2luNl9zY29wZV9pZCA9IDA7CisjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKyAgICAgIGFkZHIuaW42LnNpbjZfbGVuID0gc2l6ZW9mKGFkZHIuaW42KTsKKyNlbmRpZgorICAgIH0KKyNlbmRpZgorCisgIGlmICghKHRyYW5zZmVyID0gd2hpbmVfbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGZ0cF90cmFuc2ZlcikpKSkKKyAgICByZXR1cm47CisgIAorICBpZiAoKHRyYW5zZmVyLT5zb2NrZmQgPSBzb2NrZXQobGlzdGVuLT5mYW1pbHksIFNPQ0tfREdSQU0sIDApKSA9PSAtMSkKKyAgICB7CisgICAgICBmcmVlKHRyYW5zZmVyKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIAorICB0cmFuc2Zlci0+cGVlciA9IHBlZXI7CisgIHRyYW5zZmVyLT50aW1lb3V0ID0gbm93ICsgMjsKKyAgdHJhbnNmZXItPmJhY2tvZmYgPSAxOworICB0cmFuc2Zlci0+YmxvY2sgPSAxOworICB0cmFuc2Zlci0+YmxvY2tzaXplID0gNTEyOworICB0cmFuc2Zlci0+b2Zmc2V0ID0gMDsKKyAgdHJhbnNmZXItPmZpbGUgPSBOVUxMOworICB0cmFuc2Zlci0+b3B0X2Jsb2Nrc2l6ZSA9IHRyYW5zZmVyLT5vcHRfdHJhbnNpemUgPSAwOworICB0cmFuc2Zlci0+bmV0YXNjaWkgPSB0cmFuc2Zlci0+Y2FycnlsZiA9IDA7CisgCisgIHByZXR0eXByaW50X2FkZHIoJnBlZXIsIGRhZW1vbi0+YWRkcmJ1ZmYpOworICAKKyAgLyogaWYgd2UgaGF2ZSBhIG5haWxlZC1kb3duIHJhbmdlLCBpdGVyYXRlIHVudGlsIHdlIGZpbmQgYSBmcmVlIG9uZS4gKi8KKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgaWYgKGJpbmQodHJhbnNmZXItPnNvY2tmZCwgJmFkZHIuc2EsIHNhX2xlbigmYWRkcikpID09IC0xIHx8CisjaWYgZGVmaW5lZChJUF9NVFVfRElTQ09WRVIpICYmIGRlZmluZWQoSVBfUE1UVURJU0NfRE9OVCkKKwkgIHNldHNvY2tvcHQodHJhbnNmZXItPnNvY2tmZCwgSVBQUk9UT19JUCwgSVBfTVRVX0RJU0NPVkVSLCAmbXR1ZmxhZywgc2l6ZW9mKG10dWZsYWcpKSA9PSAtMSB8fAorI2VuZGlmCisJICAhZml4X2ZkKHRyYW5zZmVyLT5zb2NrZmQpKQorCXsKKwkgIGlmIChlcnJubyA9PSBFQUREUklOVVNFICYmIGRhZW1vbi0+c3RhcnRfdGZ0cF9wb3J0ICE9IDApCisJICAgIHsKKwkgICAgICBpZiAoKytwb3J0IDw9IGRhZW1vbi0+ZW5kX3RmdHBfcG9ydCkKKwkJeyAKKwkJICBpZiAobGlzdGVuLT5mYW1pbHkgPT0gQUZfSU5FVCkKKwkJICAgIGFkZHIuaW4uc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKKyNpZmRlZiBIQVZFX0lQVjYKKwkJICBlbHNlCisJCSAgICAgYWRkci5pbjYuc2luNl9wb3J0ID0gaHRvbnMocG9ydCk7CisjZW5kaWYKKwkJICBjb250aW51ZTsKKwkJfQorCSAgICAgIG15X3N5c2xvZyhNU19URlRQIHwgTE9HX0VSUiwgXygidW5hYmxlIHRvIGdldCBmcmVlIHBvcnQgZm9yIFRGVFAiKSk7CisJICAgIH0KKwkgIGZyZWVfdHJhbnNmZXIodHJhbnNmZXIpOworCSAgcmV0dXJuOworCX0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgCisgIHAgPSBwYWNrZXQgKyAyOworICBlbmQgPSBwYWNrZXQgKyBsZW47CisKKyAgaWYgKG50b2hzKCooKHVuc2lnbmVkIHNob3J0ICopcGFja2V0KSkgIT0gT1BfUlJRIHx8CisgICAgICAhKGZpbGVuYW1lID0gbmV4dCgmcCwgZW5kKSkgfHwKKyAgICAgICEobW9kZSA9IG5leHQoJnAsIGVuZCkpIHx8CisgICAgICAoc3RyY2FzZWNtcChtb2RlLCAib2N0ZXQiKSAhPSAwICYmIHN0cmNhc2VjbXAobW9kZSwgIm5ldGFzY2lpIikgIT0gMCkpCisgICAgeworICAgICAgbGVuID0gdGZ0cF9lcnIoRVJSX0lMTCwgcGFja2V0LCBfKCJ1bnN1cHBvcnRlZCByZXF1ZXN0IGZyb20gJXMiKSwgZGFlbW9uLT5hZGRyYnVmZik7CisgICAgICBpc19lcnIgPSAxOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChzdHJjYXNlY21wKG1vZGUsICJuZXRhc2NpaSIpID09IDApCisJdHJhbnNmZXItPm5ldGFzY2lpID0gMTsKKyAgICAgIAorICAgICAgd2hpbGUgKChvcHQgPSBuZXh0KCZwLCBlbmQpKSkKKwl7CisJICBpZiAoc3RyY2FzZWNtcChvcHQsICJibGtzaXplIikgPT0gMCkKKwkgICAgeworCSAgICAgIGlmICgob3B0ID0gbmV4dCgmcCwgZW5kKSkgJiYgIW9wdGlvbl9ib29sKE9QVF9URlRQX05PQkxPQ0spKQorCQl7CisJCSAgdHJhbnNmZXItPmJsb2Nrc2l6ZSA9IGF0b2kob3B0KTsKKwkJICBpZiAodHJhbnNmZXItPmJsb2Nrc2l6ZSA8IDEpCisJCSAgICB0cmFuc2Zlci0+YmxvY2tzaXplID0gMTsKKwkJICBpZiAodHJhbnNmZXItPmJsb2Nrc2l6ZSA+ICh1bnNpZ25lZClkYWVtb24tPnBhY2tldF9idWZmX3N6IC0gNCkKKwkJICAgIHRyYW5zZmVyLT5ibG9ja3NpemUgPSAodW5zaWduZWQpZGFlbW9uLT5wYWNrZXRfYnVmZl9zeiAtIDQ7CisJCSAgLyogMzIgYnl0ZXMgZm9yIElQLCBVRFAgYW5kIFRGVFAgaGVhZGVycyAqLworCQkgIGlmIChtdHUgIT0gMCAmJiB0cmFuc2Zlci0+YmxvY2tzaXplID4gKHVuc2lnbmVkKW10dSAtIDMyKQorCQkgICAgdHJhbnNmZXItPmJsb2Nrc2l6ZSA9ICh1bnNpZ25lZCltdHUgLSAzMjsKKwkJICB0cmFuc2Zlci0+b3B0X2Jsb2Nrc2l6ZSA9IDE7CisJCSAgdHJhbnNmZXItPmJsb2NrID0gMDsKKwkJfQorCSAgICB9CisJICBlbHNlIGlmIChzdHJjYXNlY21wKG9wdCwgInRzaXplIikgPT0gMCAmJiBuZXh0KCZwLCBlbmQpICYmICF0cmFuc2Zlci0+bmV0YXNjaWkpCisJICAgIHsKKwkgICAgICB0cmFuc2Zlci0+b3B0X3RyYW5zaXplID0gMTsKKwkgICAgICB0cmFuc2Zlci0+YmxvY2sgPSAwOworCSAgICB9CisJfQorCisgICAgICAvKiBjb3BlIHdpdGggYmFja3NsYXNoZXMgZnJvbSB3aW5kb3dzIGJveGVuLiAqLworICAgICAgZm9yIChwID0gZmlsZW5hbWU7ICpwOyBwKyspCisJaWYgKCpwID09ICdcXCcpCisJICAqcCA9ICcvJzsKKwllbHNlIGlmIChvcHRpb25fYm9vbChPUFRfVEZUUF9MQykpCisJICAqcCA9IHRvbG93ZXIoKnApOworCQkKKyAgICAgIHN0cmNweShkYWVtb24tPm5hbWVidWZmLCAiLyIpOworICAgICAgaWYgKHByZWZpeCkKKwl7CisJICBpZiAocHJlZml4WzBdID09ICcvJykKKwkgICAgZGFlbW9uLT5uYW1lYnVmZlswXSA9IDA7CisJICBzdHJuY2F0KGRhZW1vbi0+bmFtZWJ1ZmYsIHByZWZpeCwgKE1BWEROQU1FLTEpIC0gc3RybGVuKGRhZW1vbi0+bmFtZWJ1ZmYpKTsKKwkgIGlmIChwcmVmaXhbc3RybGVuKHByZWZpeCktMV0gIT0gJy8nKQorCSAgICBzdHJuY2F0KGRhZW1vbi0+bmFtZWJ1ZmYsICIvIiwgKE1BWEROQU1FLTEpIC0gc3RybGVuKGRhZW1vbi0+bmFtZWJ1ZmYpKTsKKworCSAgaWYgKG9wdGlvbl9ib29sKE9QVF9URlRQX0FQUkVGKSkKKwkgICAgeworCSAgICAgIHNpemVfdCBvbGRsZW4gPSBzdHJsZW4oZGFlbW9uLT5uYW1lYnVmZik7CisJICAgICAgc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKwkgICAgICAKKwkgICAgICBzdHJuY2F0KGRhZW1vbi0+bmFtZWJ1ZmYsIGRhZW1vbi0+YWRkcmJ1ZmYsIChNQVhETkFNRS0xKSAtIHN0cmxlbihkYWVtb24tPm5hbWVidWZmKSk7CisJICAgICAgc3RybmNhdChkYWVtb24tPm5hbWVidWZmLCAiLyIsIChNQVhETkFNRS0xKSAtIHN0cmxlbihkYWVtb24tPm5hbWVidWZmKSk7CisJICAgICAgCisJICAgICAgLyogcmVtb3ZlIHVuaXF1ZS1kaXJlY3RvcnkgaWYgaXQgZG9lc24ndCBleGlzdCAqLworCSAgICAgIGlmIChzdGF0KGRhZW1vbi0+bmFtZWJ1ZmYsICZzdGF0YnVmKSA9PSAtMSB8fCAhU19JU0RJUihzdGF0YnVmLnN0X21vZGUpKQorCQlkYWVtb24tPm5hbWVidWZmW29sZGxlbl0gPSAwOworCSAgICB9CisJCQorCSAgLyogQWJzb2x1dGUgcGF0aG5hbWVzIE9LIGlmIHRoZXkgbWF0Y2ggcHJlZml4ICovCisJICBpZiAoZmlsZW5hbWVbMF0gPT0gJy8nKQorCSAgICB7CisJICAgICAgaWYgKHN0cnN0cihmaWxlbmFtZSwgZGFlbW9uLT5uYW1lYnVmZikgPT0gZmlsZW5hbWUpCisJCWRhZW1vbi0+bmFtZWJ1ZmZbMF0gPSAwOworCSAgICAgIGVsc2UKKwkJZmlsZW5hbWUrKzsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UgaWYgKGZpbGVuYW1lWzBdID09ICcvJykKKwlkYWVtb24tPm5hbWVidWZmWzBdID0gMDsKKyAgICAgIHN0cm5jYXQoZGFlbW9uLT5uYW1lYnVmZiwgZmlsZW5hbWUsIChNQVhETkFNRS0xKSAtIHN0cmxlbihkYWVtb24tPm5hbWVidWZmKSk7CisKKyAgICAgIC8qIGNoZWNrIHBlcm1pc3Npb25zIGFuZCBvcGVuIGZpbGUgKi8KKyAgICAgIGlmICgodHJhbnNmZXItPmZpbGUgPSBjaGVja190ZnRwX2ZpbGVwZXJtKCZsZW4sIHByZWZpeCkpKQorCXsKKwkgIGlmICgobGVuID0gZ2V0X2Jsb2NrKHBhY2tldCwgdHJhbnNmZXIpKSA9PSAtMSkKKwkgICAgbGVuID0gdGZ0cF9lcnJfb29wcyhwYWNrZXQsIGRhZW1vbi0+bmFtZWJ1ZmYpOworCSAgZWxzZQorCSAgICBpc19lcnIgPSAwOworCX0KKyAgICB9CisgIAorICB3aGlsZSAoc2VuZHRvKHRyYW5zZmVyLT5zb2NrZmQsIHBhY2tldCwgbGVuLCAwLCAKKwkJKHN0cnVjdCBzb2NrYWRkciAqKSZwZWVyLCBzYV9sZW4oJnBlZXIpKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisgIAorICBpZiAoaXNfZXJyKQorICAgIGZyZWVfdHJhbnNmZXIodHJhbnNmZXIpOworICBlbHNlCisgICAgeworICAgICAgdHJhbnNmZXItPm5leHQgPSBkYWVtb24tPnRmdHBfdHJhbnM7CisgICAgICBkYWVtb24tPnRmdHBfdHJhbnMgPSB0cmFuc2ZlcjsKKyAgICB9Cit9CisgCitzdGF0aWMgc3RydWN0IHRmdHBfZmlsZSAqY2hlY2tfdGZ0cF9maWxlcGVybShzc2l6ZV90ICpsZW4sIGNoYXIgKnByZWZpeCkKK3sKKyAgY2hhciAqcGFja2V0ID0gZGFlbW9uLT5wYWNrZXQsICpuYW1lYnVmZiA9IGRhZW1vbi0+bmFtZWJ1ZmY7CisgIHN0cnVjdCB0ZnRwX2ZpbGUgKmZpbGU7CisgIHN0cnVjdCB0ZnRwX3RyYW5zZmVyICp0OworICB1aWRfdCB1aWQgPSBnZXRldWlkKCk7CisgIHN0cnVjdCBzdGF0IHN0YXRidWY7CisgIGludCBmZCA9IC0xOworCisgIC8qIHRyaWNrIHRvIGJhbiBtb3Zpbmcgb3V0IG9mIHRoZSBzdWJ0cmVlICovCisgIGlmIChwcmVmaXggJiYgc3Ryc3RyKG5hbWVidWZmLCAiLy4uLyIpKQorICAgIGdvdG8gcGVybTsKKyAgCisgIGlmICgoZmQgPSBvcGVuKG5hbWVidWZmLCBPX1JET05MWSkpID09IC0xKQorICAgIHsKKyAgICAgIGlmIChlcnJubyA9PSBFTk9FTlQpCisJeworCSAgKmxlbiA9IHRmdHBfZXJyKEVSUl9GTkYsIHBhY2tldCwgXygiZmlsZSAlcyBub3QgZm91bmQiKSwgbmFtZWJ1ZmYpOworCSAgcmV0dXJuIE5VTEw7CisJfQorICAgICAgZWxzZSBpZiAoZXJybm8gPT0gRUFDQ0VTKQorCWdvdG8gcGVybTsKKyAgICAgIGVsc2UKKwlnb3RvIG9vcHM7CisgICAgfQorICAKKyAgLyogc3RhdCB0aGUgZmlsZSBkZXNjcmlwdG9yIHRvIGF2b2lkIHN0YXQtPm9wZW4gcmFjZXMgKi8KKyAgaWYgKGZzdGF0KGZkLCAmc3RhdGJ1ZikgPT0gLTEpCisgICAgZ290byBvb3BzOworICAKKyAgLyogcnVubmluZyBhcyByb290LCBtdXN0IGJlIHdvcmxkLXJlYWRhYmxlICovCisgIGlmICh1aWQgPT0gMCkKKyAgICB7CisgICAgICBpZiAoIShzdGF0YnVmLnN0X21vZGUgJiBTX0lST1RIKSkKKwlnb3RvIHBlcm07CisgICAgfQorICAvKiBpbiBzZWN1cmUgbW9kZSwgbXVzdCBiZSBvd25lZCBieSB1c2VyIHJ1bm5pbmcgZG5zbWFzcSAqLworICBlbHNlIGlmIChvcHRpb25fYm9vbChPUFRfVEZUUF9TRUNVUkUpICYmIHVpZCAhPSBzdGF0YnVmLnN0X3VpZCkKKyAgICBnb3RvIHBlcm07CisgICAgICAKKyAgLyogSWYgd2UncmUgZG9pbmcgbWFueSB0cmFuZmVycyBmcm9tIHRoZSBzYW1lIGZpbGUsIG9ubHkgCisgICAgIG9wZW4gaXQgb25jZSB0aGlzIHNhdmVzIGxvdHMgb2YgZmlsZSBkZXNjcmlwdG9ycyAKKyAgICAgd2hlbiBtYXNzLWJvb3RpbmcgYSBiaWcgY2x1c3RlciwgZm9yIGluc3RhbmNlLiAKKyAgICAgQmUgY29uc2VydmF0aXZlIGFuZCBvbmx5IHNoYXJlIHdoZW4gaW5vZGUgYW5kIG5hbWUgbWF0Y2gKKyAgICAgdGhpcyBrZWVwcyBlcnJvciBtZXNzYWdlcyBzYW5lLiAqLworICBmb3IgKHQgPSBkYWVtb24tPnRmdHBfdHJhbnM7IHQ7IHQgPSB0LT5uZXh0KQorICAgIGlmICh0LT5maWxlLT5kZXYgPT0gc3RhdGJ1Zi5zdF9kZXYgJiYgCisJdC0+ZmlsZS0+aW5vZGUgPT0gc3RhdGJ1Zi5zdF9pbm8gJiYKKwlzdHJjbXAodC0+ZmlsZS0+ZmlsZW5hbWUsIG5hbWVidWZmKSA9PSAwKQorICAgICAgeworCWNsb3NlKGZkKTsKKwl0LT5maWxlLT5yZWZjb3VudCsrOworCXJldHVybiB0LT5maWxlOworICAgICAgfQorICAKKyAgaWYgKCEoZmlsZSA9IHdoaW5lX21hbGxvYyhzaXplb2Yoc3RydWN0IHRmdHBfZmlsZSkgKyBzdHJsZW4obmFtZWJ1ZmYpICsgMSkpKQorICAgIHsKKyAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgZ290byBvb3BzOworICAgIH0KKworICBmaWxlLT5mZCA9IGZkOworICBmaWxlLT5zaXplID0gc3RhdGJ1Zi5zdF9zaXplOworICBmaWxlLT5kZXYgPSBzdGF0YnVmLnN0X2RldjsKKyAgZmlsZS0+aW5vZGUgPSBzdGF0YnVmLnN0X2lubzsKKyAgZmlsZS0+cmVmY291bnQgPSAxOworICBzdHJjcHkoZmlsZS0+ZmlsZW5hbWUsIG5hbWVidWZmKTsKKyAgcmV0dXJuIGZpbGU7CisgIAorIHBlcm06CisgIGVycm5vID0gRUFDQ0VTOworICAqbGVuID0gIHRmdHBfZXJyKEVSUl9QRVJNLCBwYWNrZXQsIF8oImNhbm5vdCBhY2Nlc3MgJXM6ICVzIiksIG5hbWVidWZmKTsKKyAgaWYgKGZkICE9IC0xKQorICAgIGNsb3NlKGZkKTsKKyAgcmV0dXJuIE5VTEw7CisKKyBvb3BzOgorICAqbGVuID0gIHRmdHBfZXJyX29vcHMocGFja2V0LCBuYW1lYnVmZik7CisgIGlmIChmZCAhPSAtMSkKKyAgICBjbG9zZShmZCk7CisgIHJldHVybiBOVUxMOworfQorCit2b2lkIGNoZWNrX3RmdHBfbGlzdGVuZXJzKGZkX3NldCAqcnNldCwgdGltZV90IG5vdykKK3sKKyAgc3RydWN0IHRmdHBfdHJhbnNmZXIgKnRyYW5zZmVyLCAqdG1wLCAqKnVwOworICBzc2l6ZV90IGxlbjsKKyAgCisgIHN0cnVjdCBhY2sgeworICAgIHVuc2lnbmVkIHNob3J0IG9wLCBibG9jazsKKyAgfSAqbWVzcyA9IChzdHJ1Y3QgYWNrICopZGFlbW9uLT5wYWNrZXQ7CisgIAorICAvKiBDaGVjayBmb3IgYWN0aXZpdHkgb24gYW55IGV4aXN0aW5nIHRyYW5zZmVycyAqLworICBmb3IgKHRyYW5zZmVyID0gZGFlbW9uLT50ZnRwX3RyYW5zLCB1cCA9ICZkYWVtb24tPnRmdHBfdHJhbnM7IHRyYW5zZmVyOyB0cmFuc2ZlciA9IHRtcCkKKyAgICB7CisgICAgICB0bXAgPSB0cmFuc2Zlci0+bmV4dDsKKyAgICAgIAorICAgICAgcHJldHR5cHJpbnRfYWRkcigmdHJhbnNmZXItPnBlZXIsIGRhZW1vbi0+YWRkcmJ1ZmYpOworICAgICAKKyAgICAgIGlmIChGRF9JU1NFVCh0cmFuc2Zlci0+c29ja2ZkLCByc2V0KSkKKwl7CisJICAvKiB3ZSBvdmVyd3JvdGUgdGhlIGJ1ZmZlci4uLiAqLworCSAgZGFlbW9uLT5zcnZfc2F2ZSA9IE5VTEw7CisJICAKKwkgIGlmICgobGVuID0gcmVjdih0cmFuc2Zlci0+c29ja2ZkLCBkYWVtb24tPnBhY2tldCwgZGFlbW9uLT5wYWNrZXRfYnVmZl9zeiwgMCkpID49IChzc2l6ZV90KXNpemVvZihzdHJ1Y3QgYWNrKSkKKwkgICAgeworCSAgICAgIGlmIChudG9ocyhtZXNzLT5vcCkgPT0gT1BfQUNLICYmIG50b2hzKG1lc3MtPmJsb2NrKSA9PSAodW5zaWduZWQgc2hvcnQpdHJhbnNmZXItPmJsb2NrKSAKKwkJeworCQkgIC8qIEdvdCBhY2ssIGVuc3VyZSB3ZSB0YWtlIHRoZSAocmUpdHJhbnNtaXQgcGF0aCAqLworCQkgIHRyYW5zZmVyLT50aW1lb3V0ID0gbm93OworCQkgIHRyYW5zZmVyLT5iYWNrb2ZmID0gMDsKKwkJICBpZiAodHJhbnNmZXItPmJsb2NrKysgIT0gMCkKKwkJICAgIHRyYW5zZmVyLT5vZmZzZXQgKz0gdHJhbnNmZXItPmJsb2Nrc2l6ZSAtIHRyYW5zZmVyLT5leHBhbnNpb247CisJCX0KKwkgICAgICBlbHNlIGlmIChudG9ocyhtZXNzLT5vcCkgPT0gT1BfRVJSKQorCQl7CisJCSAgY2hhciAqcCA9IGRhZW1vbi0+cGFja2V0ICsgc2l6ZW9mKHN0cnVjdCBhY2spOworCQkgIGNoYXIgKmVuZCA9IGRhZW1vbi0+cGFja2V0ICsgbGVuOworCQkgIGNoYXIgKmVyciA9IG5leHQoJnAsIGVuZCk7CisJCSAgCisJCSAgLyogU2FuaXRpc2UgZXJyb3IgbWVzc2FnZSAqLworCQkgIGlmICghZXJyKQorCQkgICAgZXJyID0gIiI7CisJCSAgZWxzZQorCQkgICAgc2FuaXRpc2UoZXJyKTsKKwkJICAKKwkJICBteV9zeXNsb2coTVNfVEZUUCB8IExPR19FUlIsIF8oImVycm9yICVkICVzIHJlY2VpdmVkIGZyb20gJXMiKSwKKwkJCSAgICAoaW50KW50b2hzKG1lc3MtPmJsb2NrKSwgZXJyLCAKKwkJCSAgICBkYWVtb24tPmFkZHJidWZmKTsJCisJCSAgCisJCSAgLyogR290IGVyciwgZW5zdXJlIHdlIHRha2UgYWJvcnQgKi8KKwkJICB0cmFuc2Zlci0+dGltZW91dCA9IG5vdzsKKwkJICB0cmFuc2Zlci0+YmFja29mZiA9IDEwMDsKKwkJfQorCSAgICB9CisJfQorICAgICAgCisgICAgICBpZiAoZGlmZnRpbWUobm93LCB0cmFuc2Zlci0+dGltZW91dCkgPj0gMC4wKQorCXsKKwkgIGludCBlbmRjb24gPSAwOworCisJICAvKiB0aW1lb3V0LCByZXRyYW5zbWl0ICovCisJICB0cmFuc2Zlci0+dGltZW91dCArPSAxICsgKDE8PHRyYW5zZmVyLT5iYWNrb2ZmKTsKKwkgIAkgIAorCSAgLyogd2Ugb3Zlcndyb3RlIHRoZSBidWZmZXIuLi4gKi8KKwkgIGRhZW1vbi0+c3J2X3NhdmUgPSBOVUxMOworCSAKKwkgIGlmICgobGVuID0gZ2V0X2Jsb2NrKGRhZW1vbi0+cGFja2V0LCB0cmFuc2ZlcikpID09IC0xKQorCSAgICB7CisJICAgICAgbGVuID0gdGZ0cF9lcnJfb29wcyhkYWVtb24tPnBhY2tldCwgdHJhbnNmZXItPmZpbGUtPmZpbGVuYW1lKTsKKwkgICAgICBlbmRjb24gPSAxOworCSAgICB9CisJICAvKiBkb24ndCBjb21wbGFpbiBhYm91dCB0aW1lb3V0IHdoZW4gd2UncmUgYXdhaXRpbmcgdGhlIGxhc3QKKwkgICAgIEFDSywgc29tZSBjbGllbnRzIG5ldmVyIHNlbmQgaXQgKi8KKwkgIGVsc2UgaWYgKCsrdHJhbnNmZXItPmJhY2tvZmYgPiA3ICYmIGxlbiAhPSAwKQorCSAgICB7CisJICAgICAgZW5kY29uID0gMTsKKwkgICAgICBsZW4gPSAwOworCSAgICB9CisKKwkgIGlmIChsZW4gIT0gMCkKKwkgICAgd2hpbGUoc2VuZHRvKHRyYW5zZmVyLT5zb2NrZmQsIGRhZW1vbi0+cGFja2V0LCBsZW4sIDAsIAorCQkJIChzdHJ1Y3Qgc29ja2FkZHIgKikmdHJhbnNmZXItPnBlZXIsIHNhX2xlbigmdHJhbnNmZXItPnBlZXIpKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisJICAKKwkgIGlmIChlbmRjb24gfHwgbGVuID09IDApCisJICAgIHsKKwkgICAgICBzdHJjcHkoZGFlbW9uLT5uYW1lYnVmZiwgdHJhbnNmZXItPmZpbGUtPmZpbGVuYW1lKTsKKwkgICAgICBzYW5pdGlzZShkYWVtb24tPm5hbWVidWZmKTsKKwkgICAgICBteV9zeXNsb2coTVNfVEZUUCB8IExPR19JTkZPLCBlbmRjb24gPyBfKCJmYWlsZWQgc2VuZGluZyAlcyB0byAlcyIpIDogXygic2VudCAlcyB0byAlcyIpLCBkYWVtb24tPm5hbWVidWZmLCBkYWVtb24tPmFkZHJidWZmKTsKKwkgICAgICAvKiB1bmxpbmsgKi8KKwkgICAgICAqdXAgPSB0bXA7CisJICAgICAgaWYgKGVuZGNvbikKKwkJZnJlZV90cmFuc2Zlcih0cmFuc2Zlcik7CisJICAgICAgZWxzZQorCQl7CisJCSAgLyogcHV0IG9uIHF1ZXVlIHRvIGJlIHNlbnQgdG8gc2NyaXB0IGFuZCBkZWxldGVkICovCisJCSAgdHJhbnNmZXItPm5leHQgPSBkYWVtb24tPnRmdHBfZG9uZV90cmFuczsKKwkJICBkYWVtb24tPnRmdHBfZG9uZV90cmFucyA9IHRyYW5zZmVyOworCQl9CisJICAgICAgY29udGludWU7CisJICAgIH0KKwl9CisKKyAgICAgIHVwID0gJnRyYW5zZmVyLT5uZXh0OworICAgIH0gICAgCit9CisKK3N0YXRpYyB2b2lkIGZyZWVfdHJhbnNmZXIoc3RydWN0IHRmdHBfdHJhbnNmZXIgKnRyYW5zZmVyKQoreworICBjbG9zZSh0cmFuc2Zlci0+c29ja2ZkKTsKKyAgaWYgKHRyYW5zZmVyLT5maWxlICYmICgtLXRyYW5zZmVyLT5maWxlLT5yZWZjb3VudCkgPT0gMCkKKyAgICB7CisgICAgICBjbG9zZSh0cmFuc2Zlci0+ZmlsZS0+ZmQpOworICAgICAgZnJlZSh0cmFuc2Zlci0+ZmlsZSk7CisgICAgfQorICBmcmVlKHRyYW5zZmVyKTsKK30KKworc3RhdGljIGNoYXIgKm5leHQoY2hhciAqKnAsIGNoYXIgKmVuZCkKK3sKKyAgY2hhciAqcmV0ID0gKnA7CisgIHNpemVfdCBsZW47CisKKyAgaWYgKCooZW5kLTEpICE9IDAgfHwgCisgICAgICAqcCA9PSBlbmQgfHwKKyAgICAgIChsZW4gPSBzdHJsZW4ocmV0KSkgPT0gMCkKKyAgICByZXR1cm4gTlVMTDsKKworICAqcCArPSBsZW4gKyAxOworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzYW5pdGlzZShjaGFyICpidWYpCit7CisgIHVuc2lnbmVkIGNoYXIgKnEsICpyOworICBmb3IgKHEgPSByID0gKHVuc2lnbmVkIGNoYXIgKilidWY7ICpyOyByKyspCisgICAgaWYgKGlzcHJpbnQoKGludCkqcikpCisgICAgICAqKHErKykgPSAqcjsKKyAgKnEgPSAwOworCit9CisKK3N0YXRpYyBzc2l6ZV90IHRmdHBfZXJyKGludCBlcnIsIGNoYXIgKnBhY2tldCwgY2hhciAqbWVzc2FnZSwgY2hhciAqZmlsZSkKK3sKKyAgc3RydWN0IGVycm1lc3MgeworICAgIHVuc2lnbmVkIHNob3J0IG9wLCBlcnI7CisgICAgY2hhciBtZXNzYWdlW107CisgIH0gKm1lc3MgPSAoc3RydWN0IGVycm1lc3MgKilwYWNrZXQ7CisgIHNzaXplX3QgcmV0ID0gNDsKKyAgY2hhciAqZXJyc3RyID0gc3RyZXJyb3IoZXJybm8pOworICAKKyAgc2FuaXRpc2UoZmlsZSk7CisKKyAgbWVzcy0+b3AgPSBodG9ucyhPUF9FUlIpOworICBtZXNzLT5lcnIgPSBodG9ucyhlcnIpOworICByZXQgKz0gKHNucHJpbnRmKG1lc3MtPm1lc3NhZ2UsIDUwMCwgIG1lc3NhZ2UsIGZpbGUsIGVycnN0cikgKyAxKTsKKyAgbXlfc3lzbG9nKE1TX1RGVFAgfCBMT0dfRVJSLCAiJXMiLCBtZXNzLT5tZXNzYWdlKTsKKyAgCisgIHJldHVybiAgcmV0OworfQorCitzdGF0aWMgc3NpemVfdCB0ZnRwX2Vycl9vb3BzKGNoYXIgKnBhY2tldCwgY2hhciAqZmlsZSkKK3sKKyAgLyogTWF5IGhhdmUgPjEgcmVmcyB0byBmaWxlLCBzbyBwb3RlbnRpYWxseSBtYW5nbGUgYSBjb3B5IG9mIHRoZSBuYW1lICovCisgIHN0cmNweShkYWVtb24tPm5hbWVidWZmLCBmaWxlKTsKKyAgcmV0dXJuIHRmdHBfZXJyKEVSUl9OT1RERUYsIHBhY2tldCwgXygiY2Fubm90IHJlYWQgJXM6ICVzIiksIGRhZW1vbi0+bmFtZWJ1ZmYpOworfQorCisvKiByZXR1cm4gLTEgZm9yIGVycm9yLCB6ZXJvIGZvciBkb25lLiAqLworc3RhdGljIHNzaXplX3QgZ2V0X2Jsb2NrKGNoYXIgKnBhY2tldCwgc3RydWN0IHRmdHBfdHJhbnNmZXIgKnRyYW5zZmVyKQoreworICBpZiAodHJhbnNmZXItPmJsb2NrID09IDApCisgICAgeworICAgICAgLyogc2VuZCBPQUNLICovCisgICAgICBjaGFyICpwOworICAgICAgc3RydWN0IG9hY2ttZXNzIHsKKwl1bnNpZ25lZCBzaG9ydCBvcDsKKwljaGFyIGRhdGFbXTsKKyAgICAgIH0gKm1lc3MgPSAoc3RydWN0IG9hY2ttZXNzICopcGFja2V0OworICAgICAgCisgICAgICBwID0gbWVzcy0+ZGF0YTsKKyAgICAgIG1lc3MtPm9wID0gaHRvbnMoT1BfT0FDSyk7CisgICAgICBpZiAodHJhbnNmZXItPm9wdF9ibG9ja3NpemUpCisJeworCSAgcCArPSAoc3ByaW50ZihwLCAiYmxrc2l6ZSIpICsgMSk7CisJICBwICs9IChzcHJpbnRmKHAsICIlZCIsIHRyYW5zZmVyLT5ibG9ja3NpemUpICsgMSk7CisJfQorICAgICAgaWYgKHRyYW5zZmVyLT5vcHRfdHJhbnNpemUpCisJeworCSAgcCArPSAoc3ByaW50ZihwLCJ0c2l6ZSIpICsgMSk7CisJICBwICs9IChzcHJpbnRmKHAsICIldSIsICh1bnNpZ25lZCBpbnQpdHJhbnNmZXItPmZpbGUtPnNpemUpICsgMSk7CisJfQorCisgICAgICByZXR1cm4gcCAtIHBhY2tldDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBzZW5kIGRhdGEgcGFja2V0ICovCisgICAgICBzdHJ1Y3QgZGF0YW1lc3MgeworCXVuc2lnbmVkIHNob3J0IG9wLCBibG9jazsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbXTsKKyAgICAgIH0gKm1lc3MgPSAoc3RydWN0IGRhdGFtZXNzICopcGFja2V0OworICAgICAgCisgICAgICBzaXplX3Qgc2l6ZSA9IHRyYW5zZmVyLT5maWxlLT5zaXplIC0gdHJhbnNmZXItPm9mZnNldDsgCisgICAgICAKKyAgICAgIGlmICh0cmFuc2Zlci0+b2Zmc2V0ID4gdHJhbnNmZXItPmZpbGUtPnNpemUpCisJcmV0dXJuIDA7IC8qIGZpbmlzaGVkICovCisgICAgICAKKyAgICAgIGlmIChzaXplID4gdHJhbnNmZXItPmJsb2Nrc2l6ZSkKKwlzaXplID0gdHJhbnNmZXItPmJsb2Nrc2l6ZTsKKyAgICAgIAorICAgICAgbWVzcy0+b3AgPSBodG9ucyhPUF9EQVRBKTsKKyAgICAgIG1lc3MtPmJsb2NrID0gaHRvbnMoKHVuc2lnbmVkIHNob3J0KSh0cmFuc2Zlci0+YmxvY2spKTsKKyAgICAgIAorICAgICAgaWYgKGxzZWVrKHRyYW5zZmVyLT5maWxlLT5mZCwgdHJhbnNmZXItPm9mZnNldCwgU0VFS19TRVQpID09IChvZmZfdCktMSB8fAorCSAgIXJlYWRfd3JpdGUodHJhbnNmZXItPmZpbGUtPmZkLCBtZXNzLT5kYXRhLCBzaXplLCAxKSkKKwlyZXR1cm4gLTE7CisgICAgICAKKyAgICAgIHRyYW5zZmVyLT5leHBhbnNpb24gPSAwOworICAgICAgCisgICAgICAvKiBNYXAgJ1xuJyB0byBDUi1MRiBpbiBuZXRhc2NpaSBtb2RlICovCisgICAgICBpZiAodHJhbnNmZXItPm5ldGFzY2lpKQorCXsKKwkgIHNpemVfdCBpOworCSAgaW50IG5ld2NhcnJ5bGY7CisKKwkgIGZvciAoaSA9IDAsIG5ld2NhcnJ5bGYgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCSAgICBpZiAobWVzcy0+ZGF0YVtpXSA9PSAnXG4nICYmICggaSAhPSAwIHx8ICF0cmFuc2Zlci0+Y2FycnlsZikpCisJICAgICAgeworCQl0cmFuc2Zlci0+ZXhwYW5zaW9uKys7CisKKwkJaWYgKHNpemUgIT0gdHJhbnNmZXItPmJsb2Nrc2l6ZSkKKwkJICBzaXplKys7IC8qIHJvb20gaW4gdGhpcyBibG9jayAqLworCQllbHNlICBpZiAoaSA9PSBzaXplIC0gMSkKKwkJICBuZXdjYXJyeWxmID0gMTsgLyogZG9uJ3QgZXhwYW5kIExGIGFnYWluIGlmIGl0IG1vdmVzIHRvIHRoZSBuZXh0IGJsb2NrICovCisJCSAgCisJCS8qIG1ha2Ugc3BhY2UgYW5kIGluc2VydCBDUiAqLworCQltZW1tb3ZlKCZtZXNzLT5kYXRhW2krMV0sICZtZXNzLT5kYXRhW2ldLCBzaXplIC0gKGkgKyAxKSk7CisJCW1lc3MtPmRhdGFbaV0gPSAnXHInOworCQkKKwkJaSsrOworCSAgICAgIH0KKwkgIHRyYW5zZmVyLT5jYXJyeWxmID0gbmV3Y2FycnlsZjsKKwkgIAorCX0KKworICAgICAgcmV0dXJuIHNpemUgKyA0OworICAgIH0KK30KKworCitpbnQgZG9fdGZ0cF9zY3JpcHRfcnVuKHZvaWQpCit7CisgIHN0cnVjdCB0ZnRwX3RyYW5zZmVyICp0cmFuc2ZlcjsKKworICBpZiAoKHRyYW5zZmVyID0gZGFlbW9uLT50ZnRwX2RvbmVfdHJhbnMpKQorICAgIHsKKyAgICAgIGRhZW1vbi0+dGZ0cF9kb25lX3RyYW5zID0gdHJhbnNmZXItPm5leHQ7CisjaWZkZWYgSEFWRV9TQ1JJUFQKKyAgICAgIHF1ZXVlX3RmdHAodHJhbnNmZXItPmZpbGUtPnNpemUsIHRyYW5zZmVyLT5maWxlLT5maWxlbmFtZSwgJnRyYW5zZmVyLT5wZWVyKTsKKyNlbmRpZgorICAgICAgZnJlZV90cmFuc2Zlcih0cmFuc2Zlcik7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy91dGlsLmMgYi9zcmMvdXRpbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MjlmMzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdXRpbC5jCkBAIC0wLDAgKzEsNjU4IEBACisvKiBkbnNtYXNxIGlzIENvcHlyaWdodCAoYykgMjAwMC0yMDE0IFNpbW9uIEtlbGxleQorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBkYXRlZCBKdW5lLCAxOTkxLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMgZGF0ZWQgMjkgSnVuZSwgMjAwNy4KKyAKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKy8qIFRoZSBTVVJGIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIHdhcyB0YWtlbiBmcm9tIGRqYmRucy0xLjA1LCBieSAKKyAgIERhbmllbCBKIEJlcm5zdGVpbiwgd2hpY2ggaXMgcHVibGljIGRvbWFpbi4gKi8KKworCisjaW5jbHVkZSAiZG5zbWFzcS5oIgorCisjaWZkZWYgSEFWRV9CUk9LRU5fUlRDCisjaW5jbHVkZSA8c3lzL3RpbWVzLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoTE9DQUxFRElSKSB8fCBkZWZpbmVkKEhBVkVfSUROKQorI2luY2x1ZGUgPGlkbmEuaD4KKyNlbmRpZgorCisvKiBTVVJGIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICovCisKK3N0YXRpYyB1MzIgc2VlZFszMl07CitzdGF0aWMgdTMyIGluWzEyXTsKK3N0YXRpYyB1MzIgb3V0WzhdOworc3RhdGljIGludCBvdXRsZWZ0ID0gMDsKKwordm9pZCByYW5kX2luaXQoKQoreworICBpbnQgZmQgPSBvcGVuKFJBTkRGSUxFLCBPX1JET05MWSk7CisgIAorICBpZiAoZmQgPT0gLTEgfHwKKyAgICAgICFyZWFkX3dyaXRlKGZkLCAodW5zaWduZWQgY2hhciAqKSZzZWVkLCBzaXplb2Yoc2VlZCksIDEpIHx8CisgICAgICAhcmVhZF93cml0ZShmZCwgKHVuc2lnbmVkIGNoYXIgKikmaW4sIHNpemVvZihpbiksIDEpKQorICAgIGRpZShfKCJmYWlsZWQgdG8gc2VlZCB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3I6ICVzIiksIE5VTEwsIEVDX01JU0MpOworICAKKyAgY2xvc2UoZmQpOworfQorCisjZGVmaW5lIFJPVEFURSh4LGIpICgoKHgpIDw8IChiKSkgfCAoKHgpID4+ICgzMiAtIChiKSkpKQorI2RlZmluZSBNVVNIKGksYikgeCA9IHRbaV0gKz0gKCgoeCBeIHNlZWRbaV0pICsgc3VtKSBeIFJPVEFURSh4LGIpKTsKKworc3RhdGljIHZvaWQgc3VyZih2b2lkKQoreworICB1MzIgdFsxMl07IHUzMiB4OyB1MzIgc3VtID0gMDsKKyAgaW50IHI7IGludCBpOyBpbnQgbG9vcDsKKworICBmb3IgKGkgPSAwO2kgPCAxMjsrK2kpIHRbaV0gPSBpbltpXSBeIHNlZWRbMTIgKyBpXTsKKyAgZm9yIChpID0gMDtpIDwgODsrK2kpIG91dFtpXSA9IHNlZWRbMjQgKyBpXTsKKyAgeCA9IHRbMTFdOworICBmb3IgKGxvb3AgPSAwO2xvb3AgPCAyOysrbG9vcCkgeworICAgIGZvciAociA9IDA7ciA8IDE2OysrcikgeworICAgICAgc3VtICs9IDB4OWUzNzc5Yjk7CisgICAgICBNVVNIKDAsNSkgTVVTSCgxLDcpIE1VU0goMiw5KSBNVVNIKDMsMTMpCisgICAgICBNVVNIKDQsNSkgTVVTSCg1LDcpIE1VU0goNiw5KSBNVVNIKDcsMTMpCisgICAgICBNVVNIKDgsNSkgTVVTSCg5LDcpIE1VU0goMTAsOSkgTVVTSCgxMSwxMykKKyAgICB9CisgICAgZm9yIChpID0gMDtpIDwgODsrK2kpIG91dFtpXSBePSB0W2kgKyA0XTsKKyAgfQorfQorCit1bnNpZ25lZCBzaG9ydCByYW5kMTYodm9pZCkKK3sKKyAgaWYgKCFvdXRsZWZ0KSAKKyAgICB7CisgICAgICBpZiAoISsraW5bMF0pIGlmICghKytpblsxXSkgaWYgKCErK2luWzJdKSArK2luWzNdOworICAgICAgc3VyZigpOworICAgICAgb3V0bGVmdCA9IDg7CisgICAgfQorICAKKyAgcmV0dXJuICh1bnNpZ25lZCBzaG9ydCkgb3V0Wy0tb3V0bGVmdF07Cit9CisKK3UzMiByYW5kMzIodm9pZCkKK3sKKyBpZiAoIW91dGxlZnQpIAorICAgIHsKKyAgICAgIGlmICghKytpblswXSkgaWYgKCErK2luWzFdKSBpZiAoISsraW5bMl0pICsraW5bM107CisgICAgICBzdXJmKCk7CisgICAgICBvdXRsZWZ0ID0gODsKKyAgICB9CisgIAorICByZXR1cm4gb3V0Wy0tb3V0bGVmdF07IAorfQorCit1NjQgcmFuZDY0KHZvaWQpCit7CisgIHN0YXRpYyBpbnQgb3V0bGVmdCA9IDA7CisKKyAgaWYgKG91dGxlZnQgPCAyKQorICAgIHsKKyAgICAgIGlmICghKytpblswXSkgaWYgKCErK2luWzFdKSBpZiAoISsraW5bMl0pICsraW5bM107CisgICAgICBzdXJmKCk7CisgICAgICBvdXRsZWZ0ID0gODsKKyAgICB9CisgIAorICBvdXRsZWZ0IC09IDI7CisKKyAgcmV0dXJuICh1NjQpb3V0W291dGxlZnQrMV0gKyAoKCh1NjQpb3V0W291dGxlZnRdKSA8PCAzMik7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfbmFtZShjaGFyICppbikKK3sKKyAgLyogcmVtb3ZlIHRyYWlsaW5nIC4gCisgICAgIGFsc28gZmFpbCBlbXB0eSBzdHJpbmcgYW5kIGxhYmVsID4gNjMgY2hhcnMgKi8KKyAgc2l6ZV90IGRvdGdhcCA9IDAsIGwgPSBzdHJsZW4oaW4pOworICBjaGFyIGM7CisgIGludCBub3doaXRlID0gMDsKKyAgCisgIGlmIChsID09IDAgfHwgbCA+IE1BWEROQU1FKSByZXR1cm4gMDsKKyAgCisgIGlmIChpbltsLTFdID09ICcuJykKKyAgICB7CisgICAgICBpbltsLTFdID0gMDsKKyAgICAgIG5vd2hpdGUgPSAxOworICAgIH0KKworICBmb3IgKDsgKGMgPSAqaW4pOyBpbisrKQorICAgIHsKKyAgICAgIGlmIChjID09ICcuJykKKwlkb3RnYXAgPSAwOworICAgICAgZWxzZSBpZiAoKytkb3RnYXAgPiBNQVhMQUJFTCkKKwlyZXR1cm4gMDsKKyAgICAgIGVsc2UgaWYgKGlzYXNjaWkoKHVuc2lnbmVkIGNoYXIpYykgJiYgaXNjbnRybCgodW5zaWduZWQgY2hhciljKSkgCisJLyogaXNjbnRybCBvbmx5IGdpdmVzIGV4cGVjdGVkIHJlc3VsdHMgZm9yIGFzY2lpICovCisJcmV0dXJuIDA7CisjaWYgIWRlZmluZWQoTE9DQUxFRElSKSAmJiAhZGVmaW5lZChIQVZFX0lETikKKyAgICAgIGVsc2UgaWYgKCFpc2FzY2lpKCh1bnNpZ25lZCBjaGFyKWMpKQorCXJldHVybiAwOworI2VuZGlmCisgICAgICBlbHNlIGlmIChjICE9ICcgJykKKwlub3doaXRlID0gMTsKKyAgICB9CisKKyAgaWYgKCFub3doaXRlKQorICAgIHJldHVybiAwOworCisgIHJldHVybiAxOworfQorCisvKiBIb3N0bmFtZXMgaGF2ZSBhIG1vcmUgbGltaXRlZCB2YWxpZCBjaGFyc2V0IHRoYW4gZG9tYWluIG5hbWVzCisgICBzbyBjaGVjayBmb3IgbGVnYWwgY2hhciBhLXogQS1aIDAtOSAtIF8gCisgICBOb3RlIHRoYXQgdGhpcyBtYXkgcmVjZWl2ZSBhIEZRRE4sIHNvIG9ubHkgY2hlY2sgdGhlIGZpcnN0IGxhYmVsIAorICAgZm9yIHRoZSB0aWdodGVyIGNyaXRlcmlhLiAqLworaW50IGxlZ2FsX2hvc3RuYW1lKGNoYXIgKm5hbWUpCit7CisgIGNoYXIgYzsKKyAgaW50IGZpcnN0OworCisgIGlmICghY2hlY2tfbmFtZShuYW1lKSkKKyAgICByZXR1cm4gMDsKKworICBmb3IgKGZpcnN0ID0gMTsgKGMgPSAqbmFtZSk7IG5hbWUrKywgZmlyc3QgPSAwKQorICAgIC8qIGNoZWNrIGZvciBsZWdhbCBjaGFyIGEteiBBLVogMC05IC0gXyAuICovCisgICAgeworICAgICAgaWYgKChjID49ICdBJyAmJiBjIDw9ICdaJykgfHwKKwkgIChjID49ICdhJyAmJiBjIDw9ICd6JykgfHwKKwkgIChjID49ICcwJyAmJiBjIDw9ICc5JykpCisJY29udGludWU7CisKKyAgICAgIGlmICghZmlyc3QgJiYgKGMgPT0gJy0nIHx8IGMgPT0gJ18nKSkKKwljb250aW51ZTsKKyAgICAgIAorICAgICAgLyogZW5kIG9mIGhvc3RuYW1lIHBhcnQgKi8KKyAgICAgIGlmIChjID09ICcuJykKKwlyZXR1cm4gMTsKKyAgICAgIAorICAgICAgcmV0dXJuIDA7CisgICAgfQorICAKKyAgcmV0dXJuIDE7Cit9CisgIAorY2hhciAqY2Fub25pY2FsaXNlKGNoYXIgKmluLCBpbnQgKm5vbWVtKQoreworICBjaGFyICpyZXQgPSBOVUxMOworI2lmIGRlZmluZWQoTE9DQUxFRElSKSB8fCBkZWZpbmVkKEhBVkVfSUROKQorICBpbnQgcmM7CisjZW5kaWYKKworICBpZiAobm9tZW0pCisgICAgKm5vbWVtID0gMDsKKyAgCisgIGlmICghY2hlY2tfbmFtZShpbikpCisgICAgcmV0dXJuIE5VTEw7CisgIAorI2lmIGRlZmluZWQoTE9DQUxFRElSKSB8fCBkZWZpbmVkKEhBVkVfSUROKQorICBpZiAoKHJjID0gaWRuYV90b19hc2NpaV9seihpbiwgJnJldCwgMCkpICE9IElETkFfU1VDQ0VTUykKKyAgICB7CisgICAgICBpZiAocmV0KQorCWZyZWUocmV0KTsKKworICAgICAgaWYgKG5vbWVtICYmIChyYyA9PSBJRE5BX01BTExPQ19FUlJPUiB8fCByYyA9PSBJRE5BX0RMT1BFTl9FUlJPUikpCisJeworCSAgbXlfc3lzbG9nKExPR19FUlIsIF8oImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkiKSk7CisJICAqbm9tZW0gPSAxOworCX0KKyAgICAKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyNlbHNlCisgIGlmICgocmV0ID0gd2hpbmVfbWFsbG9jKHN0cmxlbihpbikrMSkpKQorICAgIHN0cmNweShyZXQsIGluKTsKKyAgZWxzZSBpZiAobm9tZW0pCisgICAgKm5vbWVtID0gMTsgICAgCisjZW5kaWYKKworICByZXR1cm4gcmV0OworfQorCit1bnNpZ25lZCBjaGFyICpkb19yZmMxMDM1X25hbWUodW5zaWduZWQgY2hhciAqcCwgY2hhciAqc3ZhbCkKK3sKKyAgaW50IGo7CisgIAorICB3aGlsZSAoc3ZhbCAmJiAqc3ZhbCkKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyICpjcCA9IHArKzsKKyAgICAgIGZvciAoaiA9IDA7ICpzdmFsICYmICgqc3ZhbCAhPSAnLicpOyBzdmFsKyssIGorKykKKwkqcCsrID0gKnN2YWw7CisgICAgICAqY3AgID0gajsKKyAgICAgIGlmICgqc3ZhbCkKKwlzdmFsKys7CisgICAgfQorICByZXR1cm4gcDsKK30KKworLyogZm9yIHVzZSBkdXJpbmcgc3RhcnR1cCAqLwordm9pZCAqc2FmZV9tYWxsb2Moc2l6ZV90IHNpemUpCit7CisgIHZvaWQgKnJldCA9IG1hbGxvYyhzaXplKTsKKyAgCisgIGlmICghcmV0KQorICAgIGRpZShfKCJjb3VsZCBub3QgZ2V0IG1lbW9yeSIpLCBOVUxMLCBFQ19OT01FTSk7CisgICAgIAorICByZXR1cm4gcmV0OworfSAgICAKKwordm9pZCBzYWZlX3BpcGUoaW50ICpmZCwgaW50IHJlYWRfbm9ibG9jaykKK3sKKyAgaWYgKHBpcGUoZmQpID09IC0xIHx8IAorICAgICAgIWZpeF9mZChmZFsxXSkgfHwKKyAgICAgIChyZWFkX25vYmxvY2sgJiYgIWZpeF9mZChmZFswXSkpKQorICAgIGRpZShfKCJjYW5ub3QgY3JlYXRlIHBpcGU6ICVzIiksIE5VTEwsIEVDX01JU0MpOworfQorCit2b2lkICp3aGluZV9tYWxsb2Moc2l6ZV90IHNpemUpCit7CisgIHZvaWQgKnJldCA9IG1hbGxvYyhzaXplKTsKKworICBpZiAoIXJldCkKKyAgICBteV9zeXNsb2coTE9HX0VSUiwgXygiZmFpbGVkIHRvIGFsbG9jYXRlICVkIGJ5dGVzIiksIChpbnQpIHNpemUpOworCisgIHJldHVybiByZXQ7Cit9CisKK2ludCBzb2NrYWRkcl9pc2VxdWFsKHVuaW9uIG15c29ja2FkZHIgKnMxLCB1bmlvbiBteXNvY2thZGRyICpzMikKK3sKKyAgaWYgKHMxLT5zYS5zYV9mYW1pbHkgPT0gczItPnNhLnNhX2ZhbWlseSkKKyAgICB7IAorICAgICAgaWYgKHMxLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCAmJgorCSAgczEtPmluLnNpbl9wb3J0ID09IHMyLT5pbi5zaW5fcG9ydCAmJgorCSAgczEtPmluLnNpbl9hZGRyLnNfYWRkciA9PSBzMi0+aW4uc2luX2FkZHIuc19hZGRyKQorCXJldHVybiAxOworI2lmZGVmIEhBVkVfSVBWNiAgICAgIAorICAgICAgaWYgKHMxLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYgJiYKKwkgIHMxLT5pbjYuc2luNl9wb3J0ID09IHMyLT5pbjYuc2luNl9wb3J0ICYmCisJICBJTjZfQVJFX0FERFJfRVFVQUwoJnMxLT5pbjYuc2luNl9hZGRyLCAmczItPmluNi5zaW42X2FkZHIpKQorCXJldHVybiAxOworI2VuZGlmCisgICAgfQorICByZXR1cm4gMDsKK30KKworaW50IHNhX2xlbih1bmlvbiBteXNvY2thZGRyICphZGRyKQoreworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgIHJldHVybiBhZGRyLT5zYS5zYV9sZW47CisjZWxzZQorI2lmZGVmIEhBVkVfSVBWNgorICBpZiAoYWRkci0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KQorICAgIHJldHVybiBzaXplb2YoYWRkci0+aW42KTsKKyAgZWxzZQorI2VuZGlmCisgICAgcmV0dXJuIHNpemVvZihhZGRyLT5pbik7IAorI2VuZGlmCit9CisKKy8qIGRvbid0IHVzZSBzdHJjYXNlY21wIGFuZCBmcmllbmRzIGhlcmUgLSB0aGV5IG1heSBiZSBtZXNzZWQgdXAgYnkgTE9DQUxFICovCitpbnQgaG9zdG5hbWVfaXNlcXVhbChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKQoreworICB1bnNpZ25lZCBpbnQgYzEsIGMyOworICAKKyAgZG8geworICAgIGMxID0gKHVuc2lnbmVkIGNoYXIpICphKys7CisgICAgYzIgPSAodW5zaWduZWQgY2hhcikgKmIrKzsKKyAgICAKKyAgICBpZiAoYzEgPj0gJ0EnICYmIGMxIDw9ICdaJykKKyAgICAgIGMxICs9ICdhJyAtICdBJzsKKyAgICBpZiAoYzIgPj0gJ0EnICYmIGMyIDw9ICdaJykKKyAgICAgIGMyICs9ICdhJyAtICdBJzsKKyAgICAKKyAgICBpZiAoYzEgIT0gYzIpCisgICAgICByZXR1cm4gMDsKKyAgfSB3aGlsZSAoYzEpOworICAKKyAgcmV0dXJuIDE7Cit9CisgICAgCit0aW1lX3QgZG5zbWFzcV90aW1lKHZvaWQpCit7CisjaWZkZWYgSEFWRV9CUk9LRU5fUlRDCisgIHN0cnVjdCB0bXMgZHVtbXk7CisgIHN0YXRpYyBsb25nIHRwcyA9IDA7CisKKyAgaWYgKHRwcyA9PSAwKQorICAgIHRwcyA9IHN5c2NvbmYoX1NDX0NMS19UQ0spOworCisgIHJldHVybiAodGltZV90KSh0aW1lcygmZHVtbXkpL3Rwcyk7CisjZWxzZQorICByZXR1cm4gdGltZShOVUxMKTsKKyNlbmRpZgorfQorCitpbnQgbmV0bWFza19sZW5ndGgoc3RydWN0IGluX2FkZHIgbWFzaykKK3sKKyAgaW50IHplcm9fY291bnQgPSAwOworCisgIHdoaWxlICgweDAgPT0gKG1hc2suc19hZGRyICYgMHgxKSAmJiB6ZXJvX2NvdW50IDwgMzIpIAorICAgIHsKKyAgICAgIG1hc2suc19hZGRyID4+PSAxOworICAgICAgemVyb19jb3VudCsrOworICAgIH0KKyAgCisgIHJldHVybiAzMiAtIHplcm9fY291bnQ7Cit9CisKK2ludCBpc19zYW1lX25ldChzdHJ1Y3QgaW5fYWRkciBhLCBzdHJ1Y3QgaW5fYWRkciBiLCBzdHJ1Y3QgaW5fYWRkciBtYXNrKQoreworICByZXR1cm4gKGEuc19hZGRyICYgbWFzay5zX2FkZHIpID09IChiLnNfYWRkciAmIG1hc2suc19hZGRyKTsKK30gCisKKyNpZmRlZiBIQVZFX0lQVjYKK2ludCBpc19zYW1lX25ldDYoc3RydWN0IGluNl9hZGRyICphLCBzdHJ1Y3QgaW42X2FkZHIgKmIsIGludCBwcmVmaXhsZW4pCit7CisgIGludCBwZmJ5dGVzID0gcHJlZml4bGVuID4+IDM7CisgIGludCBwZmJpdHMgPSBwcmVmaXhsZW4gJiA3OworCisgIGlmIChtZW1jbXAoJmEtPnM2X2FkZHIsICZiLT5zNl9hZGRyLCBwZmJ5dGVzKSAhPSAwKQorICAgIHJldHVybiAwOworCisgIGlmIChwZmJpdHMgPT0gMCB8fAorICAgICAgKGEtPnM2X2FkZHJbcGZieXRlc10gPj4gKDggLSBwZmJpdHMpID09IGItPnM2X2FkZHJbcGZieXRlc10gPj4gKDggLSBwZmJpdHMpKSkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworLyogcmV0dXJuIGxlYXN0IHNpZ25pZ2ljYW50IDY0IGJpdHMgaWYgSVB2NiBhZGRyZXNzICovCit1NjQgYWRkcjZwYXJ0KHN0cnVjdCBpbjZfYWRkciAqYWRkcikKK3sKKyAgaW50IGk7CisgIHU2NCByZXQgPSAwOworCisgIGZvciAoaSA9IDg7IGkgPCAxNjsgaSsrKQorICAgIHJldCA9IChyZXQgPDwgOCkgKyBhZGRyLT5zNl9hZGRyW2ldOworCisgIHJldHVybiByZXQ7Cit9CisKK3ZvaWQgc2V0YWRkcjZwYXJ0KHN0cnVjdCBpbjZfYWRkciAqYWRkciwgdTY0IGhvc3QpCit7CisgIGludCBpOworCisgIGZvciAoaSA9IDE1OyBpID49IDg7IGktLSkKKyAgICB7CisgICAgICBhZGRyLT5zNl9hZGRyW2ldID0gaG9zdDsKKyAgICAgIGhvc3QgPSBob3N0ID4+IDg7CisgICAgfQorfQorCisjZW5kaWYKKyAKKworLyogcmV0dXJucyBwb3J0IG51bWJlciBmcm9tIGFkZHJlc3MgKi8KK2ludCBwcmV0dHlwcmludF9hZGRyKHVuaW9uIG15c29ja2FkZHIgKmFkZHIsIGNoYXIgKmJ1ZikKK3sKKyAgaW50IHBvcnQgPSAwOworICAKKyNpZmRlZiBIQVZFX0lQVjYKKyAgaWYgKGFkZHItPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorICAgIHsKKyAgICAgIGluZXRfbnRvcChBRl9JTkVULCAmYWRkci0+aW4uc2luX2FkZHIsIGJ1ZiwgQUREUlNUUkxFTik7CisgICAgICBwb3J0ID0gbnRvaHMoYWRkci0+aW4uc2luX3BvcnQpOworICAgIH0KKyAgZWxzZSBpZiAoYWRkci0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KQorICAgIHsKKyAgICAgIGNoYXIgbmFtZVtJRl9OQU1FU0laRV07CisgICAgICBpbmV0X250b3AoQUZfSU5FVDYsICZhZGRyLT5pbjYuc2luNl9hZGRyLCBidWYsIEFERFJTVFJMRU4pOworICAgICAgaWYgKGFkZHItPmluNi5zaW42X3Njb3BlX2lkICE9IDAgJiYKKwkgIGlmX2luZGV4dG9uYW1lKGFkZHItPmluNi5zaW42X3Njb3BlX2lkLCBuYW1lKSAmJgorCSAgc3RybGVuKGJ1ZikgKyBzdHJsZW4obmFtZSkgKyAyIDw9IEFERFJTVFJMRU4pCisJeworCSAgc3RyY2F0KGJ1ZiwgIiUiKTsKKwkgIHN0cmNhdChidWYsIG5hbWUpOworCX0KKyAgICAgIHBvcnQgPSBudG9ocyhhZGRyLT5pbjYuc2luNl9wb3J0KTsKKyAgICB9CisjZWxzZQorICBzdHJjcHkoYnVmLCBpbmV0X250b2EoYWRkci0+aW4uc2luX2FkZHIpKTsKKyAgcG9ydCA9IG50b2hzKGFkZHItPmluLnNpbl9wb3J0KTsgCisjZW5kaWYKKyAgCisgIHJldHVybiBwb3J0OworfQorCit2b2lkIHByZXR0eXByaW50X3RpbWUoY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgdCkKK3sKKyAgaWYgKHQgPT0gMHhmZmZmZmZmZikKKyAgICBzcHJpbnRmKGJ1ZiwgXygiaW5maW5pdGUiKSk7CisgIGVsc2UKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgeCwgcCA9IDA7CisgICAgICAgaWYgKCh4ID0gdC84NjQwMCkpCisJcCArPSBzcHJpbnRmKCZidWZbcF0sICIlZGQiLCB4KTsKKyAgICAgICBpZiAoKHggPSAodC8zNjAwKSUyNCkpCisJcCArPSBzcHJpbnRmKCZidWZbcF0sICIlZGgiLCB4KTsKKyAgICAgIGlmICgoeCA9ICh0LzYwKSU2MCkpCisJcCArPSBzcHJpbnRmKCZidWZbcF0sICIlZG0iLCB4KTsKKyAgICAgIGlmICgoeCA9IHQlNjApKQorCXAgKz0gc3ByaW50ZigmYnVmW3BdLCAiJWRzIiwgeCk7CisgICAgfQorfQorCisKKy8qIGluIG1heSBlcXVhbCBvdXQsIHdoZW4gbWF4bGVuIG1heSBiZSAtMSAoTm8gbWF4IGxlbikuIAorICAgUmV0dXJuIC0xIGZvciBleHRyYW5lb3VzIG5vLWhleCBjaGFycyBmb3VuZC4gKi8KK2ludCBwYXJzZV9oZXgoY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwgaW50IG1heGxlbiwgCisJICAgICAgdW5zaWduZWQgaW50ICp3aWxkY2FyZF9tYXNrLCBpbnQgKm1hY190eXBlKQoreworICBpbnQgbWFzayA9IDAsIGkgPSAwOworICBjaGFyICpyOworICAgIAorICBpZiAobWFjX3R5cGUpCisgICAgKm1hY190eXBlID0gMDsKKyAgCisgIHdoaWxlIChtYXhsZW4gPT0gLTEgfHwgaSA8IG1heGxlbikKKyAgICB7CisgICAgICBmb3IgKHIgPSBpbjsgKnIgIT0gMCAmJiAqciAhPSAnOicgJiYgKnIgIT0gJy0nICYmICpyICE9ICcgJzsgcisrKQorCWlmICgqciAhPSAnKicgJiYgIWlzeGRpZ2l0KCh1bnNpZ25lZCBjaGFyKSpyKSkKKwkgIHJldHVybiAtMTsKKyAgICAgIAorICAgICAgaWYgKCpyID09IDApCisJbWF4bGVuID0gaTsKKyAgICAgIAorICAgICAgaWYgKHIgIT0gaW4gKQorCXsKKwkgIGlmICgqciA9PSAnLScgJiYgaSA9PSAwICYmIG1hY190eXBlKQorCSAgIHsKKwkgICAgICAqciA9IDA7CisJICAgICAgKm1hY190eXBlID0gc3RydG9sKGluLCBOVUxMLCAxNik7CisJICAgICAgbWFjX3R5cGUgPSBOVUxMOworCSAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgICpyID0gMDsKKwkgICAgICBpZiAoc3RyY21wKGluLCAiKiIpID09IDApCisJCXsKKwkJICBtYXNrID0gKG1hc2sgPDwgMSkgfCAxOworCQkgIGkrKzsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIGludCBqLCBieXRlcyA9ICgxICsgKHIgLSBpbikpLzI7CisJCSAgZm9yIChqID0gMDsgaiA8IGJ5dGVzOyBqKyspCisJCSAgICB7IAorCQkgICAgICBjaGFyIHNhdiA9IHNhdjsKKwkJICAgICAgaWYgKGogPCBieXRlcyAtIDEpCisJCQl7CisJCQkgIHNhdiA9IGluWyhqKzEpKjJdOworCQkJICBpblsoaisxKSoyXSA9IDA7CisJCQl9CisJCSAgICAgIG91dFtpXSA9IHN0cnRvbCgmaW5baioyXSwgTlVMTCwgMTYpOworCQkgICAgICBtYXNrID0gbWFzayA8PCAxOworCQkgICAgICBpKys7CisJCSAgICAgIGlmIChqIDwgYnl0ZXMgLSAxKQorCQkJaW5bKGorMSkqMl0gPSBzYXY7CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKyAgICAgIGluID0gcisxOworICAgIH0KKyAgCisgIGlmICh3aWxkY2FyZF9tYXNrKQorICAgICp3aWxkY2FyZF9tYXNrID0gbWFzazsKKworICByZXR1cm4gaTsKK30KKworLyogcmV0dXJuIDAgZm9yIG5vIG1hdGNoLCBvciAobm8gbWF0Y2hlZCBvY3RldHMpICsgMSAqLworaW50IG1lbWNtcF9tYXNrZWQodW5zaWduZWQgY2hhciAqYSwgdW5zaWduZWQgY2hhciAqYiwgaW50IGxlbiwgdW5zaWduZWQgaW50IG1hc2spCit7CisgIGludCBpLCBjb3VudDsKKyAgZm9yIChjb3VudCA9IDEsIGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSwgbWFzayA9IG1hc2sgPj4gMSkKKyAgICBpZiAoIShtYXNrICYgMSkpCisgICAgICB7CisJaWYgKGFbaV0gPT0gYltpXSkKKwkgIGNvdW50Kys7CisJZWxzZQorCSAgcmV0dXJuIDA7CisgICAgICB9CisgIHJldHVybiBjb3VudDsKK30KKworLyogX25vdGVfIG1heSBjb3B5IGJ1ZmZlciAqLworaW50IGV4cGFuZF9idWYoc3RydWN0IGlvdmVjICppb3YsIHNpemVfdCBzaXplKQoreworICB2b2lkICpuZXc7CisKKyAgaWYgKHNpemUgPD0gKHNpemVfdClpb3YtPmlvdl9sZW4pCisgICAgcmV0dXJuIDE7CisKKyAgaWYgKCEobmV3ID0gd2hpbmVfbWFsbG9jKHNpemUpKSkKKyAgICB7CisgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICBpZiAoaW92LT5pb3ZfYmFzZSkKKyAgICB7CisgICAgICBtZW1jcHkobmV3LCBpb3YtPmlvdl9iYXNlLCBpb3YtPmlvdl9sZW4pOworICAgICAgZnJlZShpb3YtPmlvdl9iYXNlKTsKKyAgICB9CisKKyAgaW92LT5pb3ZfYmFzZSA9IG5ldzsKKyAgaW92LT5pb3ZfbGVuID0gc2l6ZTsKKworICByZXR1cm4gMTsKK30KKworY2hhciAqcHJpbnRfbWFjKGNoYXIgKmJ1ZmYsIHVuc2lnbmVkIGNoYXIgKm1hYywgaW50IGxlbikKK3sKKyAgY2hhciAqcCA9IGJ1ZmY7CisgIGludCBpOworICAgCisgIGlmIChsZW4gPT0gMCkKKyAgICBzcHJpbnRmKHAsICI8bnVsbD4iKTsKKyAgZWxzZQorICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICAgIHAgKz0gc3ByaW50ZihwLCAiJS4yeCVzIiwgbWFjW2ldLCAoaSA9PSBsZW4gLSAxKSA/ICIiIDogIjoiKTsKKyAgCisgIHJldHVybiBidWZmOworfQorCit2b2lkIGJ1bXBfbWF4ZmQoaW50IGZkLCBpbnQgKm1heCkKK3sKKyAgaWYgKGZkID4gKm1heCkKKyAgICAqbWF4ID0gZmQ7Cit9CisKK2ludCByZXRyeV9zZW5kKHZvaWQpCit7CisgIC8qIExpbnV4IGtlcm5lbHMgY2FuIHJldHVybiBFQUdBSU4gaW4gcGVycGV0dWl0eSB3aGVuIGNhbGxpbmcKKyAgICAgc2VuZG1zZygpIGFuZCB0aGUgcmVsZXZhbnQgaW50ZXJmYWNlIGhhcyBnb25lLiBIZXJlIHdlIGxvb3AKKyAgICAgcmV0cnlpbmcgaW4gRUFHQUlOIGZvciAxIHNlY29uZCBtYXgsIHRvIGF2b2lkIHRoaXMgaGFuZ2luZyAKKyAgICAgZG5zbWFzcS4gKi8KKworICBzdGF0aWMgaW50IHJldHJpZXMgPSAwOworICBzdHJ1Y3QgdGltZXNwZWMgd2FpdGVyOworCisgICBpZiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVXT1VMREJMT0NLKQorICAgICB7CisgICAgICAgd2FpdGVyLnR2X3NlYyA9IDA7CisgICAgICAgd2FpdGVyLnR2X25zZWMgPSAxMDAwMDsKKyAgICAgICBuYW5vc2xlZXAoJndhaXRlciwgTlVMTCk7CisgICAgICAgaWYgKHJldHJpZXMrKyA8IDEwMDApCisJIHJldHVybiAxOworICAgICB9CisKKyAgIHJldHJpZXMgPSAwOworICAgCisgICBpZiAoZXJybm8gPT0gRUlOVFIpCisgICAgIHJldHVybiAxOworICAgCisgICByZXR1cm4gMDsKK30KKworaW50IHJlYWRfd3JpdGUoaW50IGZkLCB1bnNpZ25lZCBjaGFyICpwYWNrZXQsIGludCBzaXplLCBpbnQgcncpCit7CisgIHNzaXplX3QgbiwgZG9uZTsKKyAgCisgIGZvciAoZG9uZSA9IDA7IGRvbmUgPCBzaXplOyBkb25lICs9IG4pCisgICAgeworICAgIHJldHJ5OgorICAgICAgaWYgKHJ3KQorICAgICAgICBuID0gcmVhZChmZCwgJnBhY2tldFtkb25lXSwgKHNpemVfdCkoc2l6ZSAtIGRvbmUpKTsKKyAgICAgIGVsc2UKKyAgICAgICAgbiA9IHdyaXRlKGZkLCAmcGFja2V0W2RvbmVdLCAoc2l6ZV90KShzaXplIC0gZG9uZSkpOworCisgICAgICBpZiAobiA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICAgIGVsc2UgaWYgKG4gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAocmV0cnlfc2VuZCgpIHx8IGVycm5vID09IEVOT01FTSB8fCBlcnJubyA9PSBFTk9CVUZTKQorICAgICAgICAgICAgZ290byByZXRyeTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKyAgcmV0dXJuIDE7Cit9CisKKy8qIEJhc2ljYWxseSBtYXRjaCBhIHN0cmluZyB2YWx1ZSBhZ2FpbnN0IGEgd2lsZGNhcmQgcGF0dGVybi4gICovCitpbnQgd2lsZGNhcmRfbWF0Y2goY29uc3QgY2hhciogd2lsZGNhcmQsIGNvbnN0IGNoYXIqIG1hdGNoKQoreworICB3aGlsZSAoKndpbGRjYXJkICYmICptYXRjaCkKKyAgICB7CisgICAgICBpZiAoKndpbGRjYXJkID09ICcqJykKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgIGlmICgqd2lsZGNhcmQgIT0gKm1hdGNoKQorICAgICAgICByZXR1cm4gMDsgCisKKyAgICAgICsrd2lsZGNhcmQ7CisgICAgICArK21hdGNoOworICAgIH0KKworICByZXR1cm4gKndpbGRjYXJkID09ICptYXRjaDsKK30KKworLyogVGhlIHNhbWUgYnV0IGNvbXBhcmluZyBhIG1heGltdW0gb2YgTlVNIGNoYXJhY3RlcnMsIGxpa2Ugc3RybmNtcC4gICovCitpbnQgd2lsZGNhcmRfbWF0Y2huKGNvbnN0IGNoYXIqIHdpbGRjYXJkLCBjb25zdCBjaGFyKiBtYXRjaCwgaW50IG51bSkKK3sKKyAgd2hpbGUgKCp3aWxkY2FyZCAmJiAqbWF0Y2ggJiYgbnVtKQorICAgIHsKKyAgICAgIGlmICgqd2lsZGNhcmQgPT0gJyonKQorICAgICAgICByZXR1cm4gMTsKKworICAgICAgaWYgKCp3aWxkY2FyZCAhPSAqbWF0Y2gpCisgICAgICAgIHJldHVybiAwOyAKKworICAgICAgKyt3aWxkY2FyZDsKKyAgICAgICsrbWF0Y2g7CisgICAgICAtLW51bTsKKyAgICB9CisKKyAgcmV0dXJuICghbnVtKSB8fCAoKndpbGRjYXJkID09ICptYXRjaCk7Cit9CmRpZmYgLS1naXQgYS90cnVzdC1hbmNob3JzLmNvbmYgYi90cnVzdC1hbmNob3JzLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZkYTUxOAotLS0gL2Rldi9udWxsCisrKyBiL3RydXN0LWFuY2hvcnMuY29uZgpAQCAtMCwwICsxLDkgQEAKKyMgVGhlIHJvb3QgRE5TU0VDIHRydXN0IGFuY2hvciwgdmFsaWQgYXMgYXQgMzAvMDEvMjAxNAorCisjIE5vdGUgdGhhdCB0aGlzIGlzIGEgRFMgcmVjb3JkIChpZSBhIGhhc2ggb2YgdGhlIHJvb3QgWm9uZSBTaWduaW5nIEtleSkgCisjIElmIHdhcyBkb3dubG9hZGVkIGZyb20gaHR0cHM6Ly9kYXRhLmlhbmEub3JnL3Jvb3QtYW5jaG9ycy9yb290LWFuY2hvcnMueG1sCisKK3RydXN0LWFuY2hvcj0uLDE5MDM2LDgsMiw0OUFBQzExRDdCNkY2NDQ2NzAyRTU0QTE2MDczNzE2MDdBMUE0MTg1NTIwMEZEMkNFMUNEREUzMkYyNEU4RkI1CisKKworCg==