ICAgICAgX19fXyAgICAgICAgICAgICAgICAgICAgICAgIF8gICAgICBfCiAgICAgLyBfX198X19fXyBfICAgXyBfX19fICAgX19fX3wgfF9fICB8IHwKICAgIHwgfCAgIC8gX19ffCB8IHwgfCAgXyAgXC8gX19ffCAgXyAgXHwgfAogICAgfCB8X19ffCB8ICB8IHxffCB8IHwgfCB8IHxfX198IHwgfCB8fF98CiAgICAgXF9fX198X3wgIFxfX19fX3xffCB8X3xcX19fX3xffCB8X3woXykgTWVkaWEgYmVuY2htYXJrcwogICAgICAgICAgICAgICAgICAgICAgCiAgICAgqSAyMDA2LCBJbnRlbCBDb3Jwb3JhdGlvbiwgbGljZW5zZWQgdW5kZXIgQXBhY2hlIDIuMCAKICAgICAKCkJvZHkgVHJhY2tpbmcgYmVuY2htYXJrIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBiZW5jaG1hcmsgdHJhY2tzIHRoZSAzRCBwb3NlIG9mIGEgaHVtYW4gYm9keSB0aHJvdWdoIGFuIGltYWdlIHNlcXVlbmNlCnVzaW5nIG11bHRpcGxlIGNhbWVyYXMuICBUaGlzIHdvcmsgaXMgYmFzZWQgdXBvbiB0aGUgZm9sbG93aW5nIHdvcmtzIDogCgpBcnRpY3VsYXRlZCBCb2R5IE1vdGlvbiBDYXB0dXJlIGJ5IFN0b2NoYXN0aWMgU2VhcmNoCkpvbmF0aGFuIERldXRzY2hlciBhbmQgSWFuIFJlaWQKSW50ZXJuYXRpb25hbCBKb3VybmFsIG9mIENvbXB1dGVyIFZpc2lvbiA2MSgyKSwgMTg1LTIwNSwgMjAwNQpodHRwOi8vd3d3LnNwcmluZ2VybGluay5jb20vY29udGVudC9rODQyMjc1Nzc0NTk3NTMwLwoKQS4gQmFsYW4sIEwuIFNpZ2FsIGFuZCBNLiBCbGFjay4gCkEgUXVhbnRpdGF0aXZlIEV2YWx1YXRpb24gb2YgVmlkZW8tYmFzZWQgM0QgUGVyc29uIFRyYWNraW5nLiAKSUVFRSBXb3Jrc2hvcCBvbiBWUy1QRVRTLCAzNDktMzU2LCAyMDA1LgpodHRwOi8vd3d3LmNzLmJyb3duLmVkdS9+YWxiL3NvZnR3YXJlLmh0bQoKClRoZSBhbGdvcml0aG0gdXNlcyBhbiBhbm5lYWxlZCBwYXJ0aWNsZSBmaWx0ZXIgdG8gdHJhY2sgdGhlIGJvZHkgcG9zZSB1c2luZyAKZWRnZXMgYW5kIGZvcmVncm91bmQgc2VnbWVudGF0aW9uIGFzIGltYWdlIGZlYXR1cmVzLCBiYXNlZCBvbiBhIDEwIHNlZ21lbnQKM0Qga2luZW1hdGljIHRyZWUgYm9keSBtb2RlbC4gVGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgYW5kIGFubmVhbGluZyBsYXllcnMgYXJlIApzdXBwbGllZCBhcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgoKClVzYWdlIGFuZCBGaWxlIFN0cnVjdHVyZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpjb21tYW5kIGxpbmUgdXNhZ2UgOiAKClRyYWNraW5nQmVuY2htYXJrIChEYXRhc2V0IFBhdGgpICgjIG9mIGNhbWVyYXMpICgjIG9mIGZyYW1lcyB0byBwcm9jZXNzKSAKICAgICAgICAgICAgICAgICAgKCMgb2YgcGFydGljbGVzKSAoIyBvZiBhbm5lYWxpbmcgbGF5ZXJzKQogICAgICAgICAgICAgICAgICBbdGhyZWFkIG1vZGVsXSBbIyBvZiB0aHJlYWRzXSBbd3JpdGUgLmJtcCBvdXRwdXQgKG5vbnplcm8gPSB5ZXMpXQoKRXhhbXBsZSA6IFRyYWNraW5nQmVuY2htYXJrIGM6XHRyYWNraW5nXHNlcXVlbmNlQiA0IDI2MCAzMDAwIDgKCiAgICAgICAgICBUaGlzIHdpbGwgcnVuIDI2MCBmcmFtZXMgYXQgdGhlIGdpdmVuIHBhdGggd2l0aCAzMDAwIHBhcnRpY2xlcyBhbmQgCiAgICAgICAgICA4IGFubmVhbGluZyBsYXllcnMuCiAgICAgICAgICAKICAgICAgICAgIFRyYWNraW5nQmVuY2htYXJrIGM6XHRyYWNraW5nXHNlcXVlbmNlQiA0IDI2MCAzMDAwIDggMSA4IDEKCiAgICAgICAgICBUaGlzIHdpbGwgcnVuIDI2MCBmcmFtZXMgYXQgdGhlIGdpdmVuIHBhdGggd2l0aCAzMDAwIHBhcnRpY2xlcyBhbmQgCiAgICAgICAgICA4IGFubmVhbGluZyBsYXllcnMgdXNpbmcgT3Blbk1QIHdpdGggOCB0aHJlYWRzLCBzYXZpbmcgYm1wIG91dHB1dCBmb3IKICAgICAgICAgIGVhY2ggZnJhbWUuCiAgICAgICAgICAKVGhlIHRocmVhZCBtb2RlbCBhbmQgIyBvZiB0aHJlYWRzIGFyZSBvcHRpb25hbCBwYXJhbWV0ZXJzLiAgSWYgbm8gdGhyZWFkIG1vZGVsIAppcyBzdXBwbGllZCBpdCB3aWxsIGRlZmF1bHQgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUuCgpUaGUgd3JpdGUgQk1QIG91dHB1dCBwYXJhbWV0ZXIgZGVmYXVsdHMgdG8gdHJ1ZS4gSWYgdHJ1ZSwgaXQgc2F2ZXMgYSBiaXRtYXAKcmVwcmVzZW50YXRpb24gb2YgdGhlIHBvc2Ugb3ZlcmxhaWQgb250byB0aGUgb3JpZ2luYWwgY2FtZXJhIGltYWdlcyBmb3IgZWFjaApmcmFtZS4gCgpUaGUgT3Blbk1QIHRocmVhZCBtb2RlbCBkZWZhdWx0cyB0byAjIHRocmVhZHMgPSAjIHByb2Nlc3NvcnMgaWYgbm8gYXJndW1lbnQgaXMgCmdpdmVuIGZvciB0aGUgbnVtYmVyIG9mIHRocmVhZHMuICAgICAgICAgICAKCgpUaGUgZGF0YXNldCBmb2xkZXIgbXVzdCBjb250YWluIHRoZSBmb2xsb3dpbmcgZmlsZSBzdHJ1Y3R1cmUgOiAKCjxEYXRhc2V0Pgp8CnwtPENBTTE+ICAgICAgICAgIENBTTEgLSBDQU1OIGNvbnRhaW4gdGhlIHJhdyBpbWFnZXMgZm9yIGVhY2ggY2FtZXJhIDEgdG8gTi4gIAp8LTxDQU0yPiAgICAgICAgICAgICAgSW1hZ2VzIHdpdGhpbiB0aGVzZSBkaXJlY3RvcmllcyBtdXN0IGJlIEJXIC5ibXAgZmlsZXMgCnwgIC4uLiAgICAgICAgICAgICAgICBuYW1lZCBpbWFnZTAwMDAuYm1wLCBpbWFnZTAwMDEuYm1wLCAuLi4gaW4gc2VxdWVuY2UuCnwtPENBTU4+CnwKfC08RkcxPiAgICAgICAgICAgRkcxIC0gRkdOIGNvbnRhaW4gdGhlIGZvcmVncm91bmQgc2VnbWVudGF0aW9uIGltYWdlcyBmb3IgZWFjaCAKfC08RkcyPiAgICAgICAgICAgICAgY2FtZXJhIDEgdG8gTi4gIEltYWdlcyB3aXRoaW4gdGhlc2UgZGlyZWN0b3JpZXMgbXVzdCBiZSBCVyAKfCAgLi4uICAgICAgICAgICAgICAuYm1wIGZpbGVzIGJpbmFyaXplZCB0byBwaXhlbCB2YWx1ZXMgb2YgZWl0aGVyIDAgb3IgMjU1LiAKfC08RkdOPgp8IAp8LTxDQUxJQj4gICAgICAgICBDQUxJQiBjb250YWlucyB0aGUgY2FtZXJhIGNhbGlicmF0aW9uIGZpbGVzIGZvciBlYWNoIGNhbWVyYS4KfCAgfC1DYW1lcmExLmNhbCAgICAgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZm9ybWF0IG9mIHRoaXMgZmlsZSBjYW4gYmUgZm91bmQgCnwgIHwtQ2FtZXJhMi5jYWwgICAgIGhlcmUgOiBodHRwOi8vd3d3LnZpc2lvbi5jYWx0ZWNoLmVkdS9ib3VndWV0ai9jYWxpYl9kb2MKfCAgfC4uLgp8ICB8LUNhbWVyYU4uY2FsCnwKfC1Cb2R5U2hhcGVQYXJhbWV0ZXJzLnR4dAp8LVBvc2VQYXJhbWV0ZXJzLnR4dAp8LUluaXRpYWxQb3NlLnR4dAoKCkJvZHlTaGFwZVBhcmFtZXRlcnMudHh0IGNvbnRhaW5zIHRoZSBkYXRhIG9uIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBsaW1icyBvZiB0aGUgCiAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3QgaW4gdGhlIHNlcXVlbmNlIChsZW5ndGgsIHRvcCBhbmQgYm90dG9tIHJhZGlpKS4KClBvc2VQYXJhbWV0ZXJzLnR4dCBjb250YWlucyBzdGF0aXN0aWNzIG9uIHRoZSBtb3Rpb24gb2YgdGhlIGtpbmVtYXRpYyB0cmVlIG1vZGVsLgoJCQkJICAgICAgICBzZWUgQm9keVBvc2UuaC4KCkluaXRpYWxQb3NlLnR4dCBjb250YWlucyB0aGUgaW5pdGlhbCBwb3NlIG9mIHRoZSBib2R5IG1vZGVsIChqb2ludCBhbmdsZXMgYW5kIAogICAgICAgICAgICAgICAgICAgICAgICBhbmNob3IgaW4gd29ybGQgc3BhY2UpLiAgCiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAKT3V0cHV0cwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGhlIGNvZGUgd2lsbCBnZW5lcmF0ZSB0aGUgZm9sbG93aW5nIGZpbGVzIDogCgo8RGF0YXNldFBhdGg+L3Bvc2VzLnR4dCAgICAtICAgIHRoaXMgY29udGFpbnMgdGhlIHBvc2UgZm9yIGVhY2ggdHJhY2tlZCBmcmFtZQoKPERhdGFzZXRQYXRoPi9SZXN1bHQwMDAwLmJtcCAgLSB0aGVzZSB2aXN1YWxpemUgdGhlIHJlc3VsdCB3aXRoIHRoZSB0cmFja2VkIAo8RGF0YXNldFBhdGg+L1Jlc3VsdDAwMDEuYm1wICAgIGdlb21ldHJ5IG92ZXJsYWlkIG9udG8gYWxsIGNhbWVyYSBpbWFnZXMKLi4uLgo8RGF0YXNldFBhdGg+L1Jlc3VsdE5OTk4uYm1wCgoKQnVpbGRpbmcgdGhlIENvZGUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCm5vdGU6IHRoZSBjb2RlIGlzIGJlc3Qgdmlld2VkIHdpdGggYSB0YWIgc3BhY2luZyBvZiA0CgpXaW5kb3dzIDogCkEgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gOCBTb2x1dGlvbiBmaWxlIGlzIHByb3ZpZGVkLgpUbyBlbmFibGUgdGhlIHRocmVhZGluZyBtb2RlbHMsIGFkZCB0aGUgZm9sbG93aW5nIGxpbmVzIGluIG1haW4uY3BwLApvciBhZGQgdGhlIGRlZmluZXMgdG8gdGhlIHByb2plY3QgOiAKCiNkZWZpbmUgVVNFX09QRU5NUAkJCQkvL2VuYWJsZSBvbmUgb2YgdGhlc2UgdG8gYnVpbGQgbXVsdGl0aHJlYWRlZCBjb2RlCiNkZWZpbmUgVVNFX1RIUkVBRFMJCQkJLy9pZiB5b3VyIGVudmlyb25tZW50IHN1cHBvcnRzIHRoZW0KCi5pY3Byb2ogZmlsZXMgYXJlIGFsc28gaW5jbHVkZWQgZm9yIHVzZSB3aXRoIHRoZSBpbnRlbCB2ZWN0b3JpemluZyBjb21waWxlci4gVGhlc2UgCmNhbiBiZSBzZWxlY3RlZCBieSB1c2luZyB0aGUgY29tcGlsZXIgSURFIGludGVncmF0aW9uIHNlbGVjdGluZyAiQ29udmVydCB0byB1c2UgCkludGVsIEMrKyBwcm9qZWN0IHN5c3RlbSIgdW5kZXIgdGhlIHByb2plY3QgcHJvcGVydGllcy4KClVuaXggOgpBIGJ1aWxkIHN5c3RlbSBiYXNlZCBvbiB0aGUgR05VIGF1dG90b29scyBpcyBwcm92aWRlZCB0byBidWlsZCB0aGUgcHJvZ3JhbQpvbiBVbml4LiBJdCBpcyByZWNvbW1lbmRlZCB0byBidWlsZCB0aGUgYmVuY2htYXJrIGluIGEgc2VwYXJhdGUgZGlyZWN0b3J5IHdoaWNoCmRvZXMgbm90IGNvbnRhaW4gdGhlIHNvdXJjZXMuCgpGaXJzdCwgY3JlYXRlIGEgbmV3IGRpcmVjdG9yeSBmb3IgeW91ciBidWlsZCBhbmQgcnVuIHRoZSBjb25maWd1cmUgc2NyaXB0OgoKbWtkaXIgb2JqZGlyCmNkIG9iamRpcgovcGF0aC90by9zcmNkaXIvY29uZmlndXJlIFtBUkdVTUVOVFMuLi5dCgpPcGVuTVAgYW5kIHJlZ3VsYXIgdGhyZWFkaW5nIGNhbiBiZSBlbmFibGVkIGJ5IHBhc3NpbmcgLS1lbmFibGUtb3Blbm1wIHJlc3AuCi0tZW5hYmxlLXRocmVhZHMgdG8gdGhlIHNjcmlwdCwgdGhlIGNvcnJlY3QgbWFjcm9zIHdpbGwgYmUgYXV0b21hdGljYWxseQpkZWZpbmVkLiBUbyBzZWUgYSBjb21wbGV0ZSBsaXN0IHdpdGggYWxsIHN1cHBvcnRlZCBvcHRpb25zLCB0aGUgYXJndW1lbnQgLS1oZWxwCmNhbiBiZSB1c2VkLgoKY29uZmlndXJlIHdpbGwgZ2VuZXJhdGUgYWxsIG5lY2Vzc2FyeSBNYWtlZmlsZXMgdG8gY29tcGlsZSBhbmQgbGluayB0aGUKcHJvZ3JhbS4gT25jZSBpdCBoYXMgZmluaXNoZWQsIHRoZSBwcm9ncmFtIGNhbiBiZSBidWlsdCBhbmQgaW5zdGFsbGVkIGFzCmZvbGxvd3M6CgptYWtlCm1ha2UgaW5zdGFsbAoK