TGlzdCBvZiBrbm93biBGcmVlVHlwZSAyIEJ1Z3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiJJZGVudGlmaWVyIiBpcyBhIHN0cmluZyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGUgYnVnLiAgQSBtb3JlIGRldGFpbGVkCmRlc2NyaXB0aW9uIG9mIHRoZSBidWcgaXMgZm91bmQgYmVsb3cgdGhlIHRhYmxlIG9mIG9wZW5lZCBidWdzLgoKIkRhdGUiIGlzIHRoZSBkYXRlIHdoZW4gdGhlIGJ1ZyB3YXMgZmlyc3QgcmVwb3J0ZWQgb3IgZW50ZXJlZCBpbiB0aGlzCmRvY3VtZW50LiAgRGF0ZXMgYXJlIGluIF9FdXJvcGVhbl8gZm9ybWF0LCBpLmUgZGF5L21vbnRoL3llYXIuCgoiT3BlbmVkIEJ5IiBpcyB0aGUgbmFtZSBvZiB0aGUgcGVyc29uIHdobyBmaXJzdCBzcG90dGVkIHRoZSBidWcuIE5vdGUgdGhhdAp3ZSBjYW4gdXNlIGFiYnJldmlhdGlvbnMgaGVyZSwgbGlrZToKCiAgIkRhdmlkIiBmb3IgRGF2aWQgVHVybmVyCiAgIldlcm5lciIgZm9yIFdlcm5lciBMZW1iZXJnCiAgZXRjLgoKIlJlcHJvZHVjZWFibGUiIGluZGljYXRlcyB3aGV0aGVyIHRoZSBidWcgY291bGQgYmUgcmVwcm9kdWNlZCBieSB0aGUKZGV2ZWxvcG1lbnQgdGVhbSBvciBub3QgKGl0IGNhbiBiZSBzcGVjaWZpYyB0byBhIGdpdmVuIHBsYXRmb3JtKSwgd2hldGhlciBpdAphbHdheXMgaGFwcGVucywgb3Igb25seSBzcG9yYWRpY2FsbHksIGV0Yy4KCgoKSS4gT3BlbmVkIGJ1Z3MKPT09PT09PT09PT09PT0KCgpJZGVudGlmaWVyICAgICAgICAgICAgICAgICBEYXRlICAgICAgIE9wZW5lZCBieSAgICAgICAgICAgICAgICBSZXByb2R1Y2VhYmxlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpOTy1DSUQtQ01BUFMgICAgICAgICAgICAxMy0wOS0yMDAxICAgICBEYXZpZCAgICAgICAgICAgICAgICAgICAgIGFsd2F5cwpCQUQtVFQtUkVOREVSSU5HICAgICAgICAxMi0wOS0yMDAxICAgICBQYXVsIFBlZHJpYW5hICAgICAgICAgICAgID8KQkFELVRISU4tTElORVMgICAgICAgICAgMTMtMDktMjAwMSAgICAgRGF2aWQgICAgICAgICAgICAgICAgICAgICA/Ck5PVC1XSU5ET1dTLU1FVFJJQ1MgICAgIDA3LTEwLTIwMDEgICAgIERhdmlkICAgICAgICAgICAgICAgICAgICAgYWx3YXlzCkFEVkFOQ0VELUNPTVBPU0lURVMgICAgIDI1LTEwLTIwMDEgICAgIEdlb3JnZSBXaWxsaWFtcyAgICAgICAgICAgYWx3YXlzCgotLS0tLS0tLS0tLS0tLS0tLS0tLUVORC1PRi1PUEVORUQtQlVHUy1UQUJMRS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgoKSUkuIFRhYmxlIG9mIGNsb3NlZCBidWdzCj09PT09PT09PT09PT09PT09PT09PT09PQoKCklkZW50aWZpZXIgICAgICAgICAgICAgICAgRGF0ZSAgICAgICAgIENsb3NlZCBieSAgICAgICAgICAgICAgICBDbG9zdXJlIGRhdGUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkJBRC1UVE5BTUVJRC5IICAgICAgICAgIDEyLTA5LTIwMDEgICAgIEFudG9pbmUgICAgICAgICAgICAgICAgICAgTi9BCkJBRC1UMS1DSEFSTUFQICAgICAgICAgIDE1LTA2LTIwMDEgICAgIERhdmlkICAgICAgICAgICAgICAgICAgICAgMi4wLjUKQkFELVVOSVhYWFgtTkFNRVMgICAgICAgMzAtMDctMjAwMSAgICAgRGF2aWQgICAgICAgICAgICAgICAgICAgICAyLjAuNQpHTFlQSF9UT19CSVRNQVAtQlVHICAgICAwNS0xMi0yMDAxICAgICBEYXZpZCAgICAgICAgICAgICAgICAgICAgIDA1LTEyLTIwMDEKQVVUT0hJTlQtTk8tU0JJVFMgICAgICAgMTMtMDktMjAwMSAgICAgRGF2aWQgICAgICAgICAgICAgICAgICAgICAyLjAuNgpUVC1HTFlQSC1DUkFTSCAgICAgICAgICAwMS0wMS0yMDAyICAgICBEYXZpZCAgICAgICAgICAgICAgICAgICAgIDIuMC42ClQxLUZPTlQtQ1JBU0ggICAgICAgICAgIDAxLTAxLTIwMDIgICAgIERhdmlkICAgICAgICAgICAgICAgICAgICAgMi4wLjYKQkFELUFEVkFOQ0VTICAgICAgICAgICAgMzAtMTEtMjAwMSAgICAgRGF2aWQgICAgICAgICAgICAgICAgICAgICAyLjAuNgpHTFlQSC1UTy1CSVRNQVAtQlVHICAgICAxNS0xMi0yMDAxICAgICBEYXZpZCAgICAgICAgICAgICAgICAgICAgIDIuMC42Ci0tLS0tLS0tLS0tLS0tLS0tLS0tRU5ELU9GLUNMT1NFRC1CVUdTLVRBQkxFLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCgpJSUkuIEJ1ZyBkZXNjcmlwdGlvbnMKPT09PT09PT09PT09PT09PT09PT09CgotLS0gU1RBUlQgT0YgT1BFTkVEIEJVR1MgLS0tCgoKTk8tQ0lELUNNQVBTCgogIE5vdCBleGFjdGx5IGEgYnVnLCBidXQgdGhlIENGRiBmb250IGRyaXZlciBkb2Vzbid0IGJ1aWxkIGEgVW5pY29kZSBjaGFybWFwCiAgZnJvbSB0aGUgY29udGVudHMgb2YgZm9udCBmaWxlcywgd2hpY2ggcHJldmVudHMgZWZmaWNpZW50bHkgdXNpbmcgZm9udHMgaW4KICB0aGlzIGZvcm1hdC4KCgoKQkFELVRULVJFTkRFUklORwoKICBBY2NvcmRpbmcgdG8gUGF1bCBQZWRyaWFuYSA8UFBlZHJpYW5hQG1heGlzLmNvbT4sIHRoZXJlIGlzIGEgcmF0aGVyCiAgaW1wb3J0YW50IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcmVuZGVyaW5nIG9mIFRydWVUeXBlLWhpbnRlZCBnbHlwaHMgb2YKICBjdXJyZW50IEZUMiBhbmQgb2xkIGJldGFzLgoKICBUZXN0cyBhbmQgY29tcGFyaXNvbnMgc2hvdyBhIF9tYWpvcl8gZGlzY3JlcGFuY3kgb2YgbW9ub2Nocm9tZSB0cnVldHlwZQogIGJ5dGVjb2RlLWhpbnRlZCBnbHlwaHMhICBTb21ldGhpbmcgc2VlbXMgdG8gYmUgcmVhbGx5IGJyb2tlbiBoZXJlIQoKICBTb21lIG9mIHRoaXMgaGFzIGJlZW4gZml4ZWQgaW4gMi4wLjY7IHRoZXJlIHdhcyBhIGJ1ZyBpbiB0aGUgVHJ1ZVR5cGUKICBsb2FkZXIgdGhhdCBwcmV2ZW50ZWQgaXQgZnJvbSBsb2FkaW5nIGNvbXBvc2l0ZXMgY29ycmVjdGx5LiAgSG93ZXZlciwKICB0aGVyZSBhcmUgc3RpbGwgX3N1YnRsZV8gZGlmZmVyZW5jZXMgYmV0d2VlbiBGVDEgYW5kIEZUMiB3aGVuIGl0IGNvbWVzIHRvCiAgbW9ub2Nocm9tZSBUcnVlVHlwZS1oaW50ZWQgZ2x5cGhzICh0aGUgbWFqb3IgZGlmZmVyZW5jZXMgYXJlIGdvbmUgdGhvdWdoICEhKQoKCgpCQUQtVEhJTi1MSU5FUwoKICBJdCBzZWVtcyB0aGF0IHRoZSBhbnRpLWFsaWFzZWQgcmVuZGVyZXIgaW4gRnJlZVR5cGUgaGFzIHByb2JsZW1zIHJlbmRlcmluZwogIGV4dHJlbWVseSB0aGluIHN0cmFpZ2h0IGxpbmVzIGNvcnJlY3RseSwgYXQgbGVhc3Qgd2hlbiB1c2luZyB0aGUKICBGVF9PdXRsaW5lX1JlbmRlcigpIGZ1bmN0aW9uLgoKCgpOT1QtV0lORE9XUy1NRVRSSUNTCgogIEZyZWVUeXBlIGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZSBtZXRyaWNzIGFzIFdpbmRvd3MgZm9yIGFzY2VuZGVyLAogIGRlc2NlbmRlciwgYW5kIHRleHQgaGVpZ2h0LCBkZXBlbmRpbmcgb24gY2hhcmFjdGVyIHBpeGVsIHNpemVzLiAgQSBsb3Qgb2YKICB0ZXN0aW5nIG9uIFdpbmRvd3MgaXMgbmVlZGVkIHRvIGRlYnVnIHRoaXMgcHJvcGVybHkuICBJdCBtaWdodCBiZSBkdWUgdG8gYQogIHJvdW5kaW5nIGJ1ZyB3aGVuIGNvbXB1dGluZyB0aGUgInhfc2NhbGUiIGFuZCAieV9zY2FsZSIgdmFsdWVzLgoKCgpBRFZBTkNFRC1DT01QT1NJVEVTCgogIFByb3ZpZGVkIGJ5IEdlb3JnZSBXaWxsaWFtcyA8cGZhZWRpdEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+OgoKICAgIEkgbm90aWNlIHRoYXQgdHJ1ZXR5cGUvdHRnbG9hZC5jIG9ubHkgc3VwcG9ydHMgQXBwbGUncyBkZWZpbml0aW9uIG9mCiAgICBvZmZzZXRzIGZvciBjb21wb3NpdGUgZ2x5cGhzLiAgQXBwbGUgYW5kIE1pY3Jvc29mdCBiZWhhdmUgZGlmZmVyZW50bHkgaWYKICAgIHRoZXJlIGlzIGEgc2NhbGUgZmFjdG9yLiAgT3BlblR5cGUgZGVmaW5lcyBzb21lIGJpdHMgdG8gZGlzYW1iaWd1YXRlLgogICAgCiAgICAoQSBwcm9ibGVtIGluIGJvdGggMi4wLjQgYW5kIDIuMC41LikKICAgIAogICAgQXBwbGUgc2F5cyAoaHR0cDovL2ZvbnRzLmFwcGxlLmNvbS9UVFJlZk1hbi9STTA2L0NoYXA2Z2x5Zi5odG1sKSB0aGF0IGlmCiAgICBmbGFncyZBUkdTX0FSRV9YWSBpcyBzZXQgdGhlbiB0aGUgb2Zmc2V0cyBzaG91bGQgYmUgc2NhbGVkIGJ5IHRoZSBzY2FsZQogICAgZmFjdG9ycyAoYXMgeW91IGhhdmUgZG9uZSksIGJ1dCB0aGV5IGFsc28gc2F5IHNvbWV0aGluZyB2ZXJ5IGNyeXB0aWMKICAgIGFib3V0IHdoYXQgaGFwcGVucyB3aGVuIHRoZSBjb21wb25lbnQgaXMgcm90YXRlZCBhdCA0NbAgKHdoaWNoIHlvdSBkbwogICAgbm90IHN1cHBvcnQpIC0tIFNlZSB0aGUgIkltcG9ydGFudCIgbm90ZSBhdCB0aGUgYm90dG9tLgogICAgCiAgICBUaGUgb2xkIHRydWV0eXBlIHNwZWMgZnJvbSBNaWNyb3NvZnQgZGlkIG5vdCBtZW50aW9uIHRoaXMuICBUaGUgT3BlblR5cGUKICAgIHNwZWMgKGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L290c3BlYy9nbHlmLmh0bSwKICAgIGh0dHA6Ly9wYXJ0bmVycy5hZG9iZS5jb20vYXNuL2RldmVsb3Blci9vcGVudHlwZS9nbHlmLmh0bWwpIGRlZmluZXMgdHdvCiAgICBuZXcgYml0cyB0byBkaXNhbWJpZ3VhdGU6CgogICAgICBTQ0FMRURfQ09NUE9ORU5UX09GRlNFVCAxMSAKICAgICAgQ29tcG9zaXRlIGRlc2lnbmVkIHRvIGhhdmUgdGhlIGNvbXBvbmVudCBvZmZzZXQgc2NhbGVkIChkZXNpZ25lZCBmb3IKICAgICAgQXBwbGUgcmFzdGVyaXplcikKCiAgICAgIFVOU0NBTEVEX0NPTVBPTkVOVF9PRkZTRVQgMTIgCiAgICAgIENvbXBvc2l0ZSBkZXNpZ25lZCBub3QgdG8gaGF2ZSB0aGUgY29tcG9uZW50IG9mZnNldCBzY2FsZWQgKGRlc2lnbmVkCiAgICAgIGZvciB0aGUgTWljcm9zb2Z0IFRydWVUeXBlIHJhc3Rlcml6ZXIpCiAgICAKICAgIFBlcmhhcHMgeW91IGNvdWxkIGFkZCBhIGxvYWRfZmxhZyB0byBhbGxvdyB0aGUgdXNlciB0byBkZWZpbmUgdGhlCiAgICBkZWZhdWx0IHNldHRpbmc/CgogIERhdmlkIHNheXM6CiAgCiAgICBXb3csIEkgd2FzIG5vdCBldmVuIGF3YXJlIG9mIHRoaXMsIGl0IHdpbGwgcHJvYmFibHkgdGFrZSBhIGxpdHRsZSB0aW1lCiAgICB0byBpbXBsZW1lbnQgc2luY2UgSSBkb24ndCBoYXZlIGFueSBmb250IHRoYXQgaW1wbGVtZW50IHRoZXNlCiAgICAiZmVhdHVyZXMiLCBhbmQgYWxzbyBiZWNhdXNlIEkgYmVsaWV2ZSB0aGF0IHdlJ3JlIHJ1bm5pbmcgb3V0IG9mIGJpdHMKICAgIGZvciAibG9hZF9mbGFnIiwgc29tZSBvdGhlciB3YXkgdG8gc2V0IHByZWZlcmVuY2VzIGlzIHByb2JhYmx5IG5lZWRlZC4KCgoKLS0tIEVORCBPRiBPUEVORUQgQlVHUyAtLS0KCgpCQUQtVFROQU1FSUQuSAoKICBUaGUgZmlsZSAidHRuYW1laWQuaCIgY29udGFpbnMgdmFyaW91cyBjb25zdGFudCBtYWNybyBkZWZpbml0aW9ucwogIGNvcnJlc3BvbmRpbmcgdG8gaW1wb3J0YW50IHZhbHVlcyBkZWZpbmVkIGJ5IHRoZSBUcnVlVHlwZSBzcGVjaWZpY2F0aW9uLgoKICBKb2UgTWFuIDx0cm1ldGFsQHlhaG9vLmNvbS5oaz4gcmVwb3J0cyB0aGF0OgoKICAgIEFjY29yZGluZyB0byB0aGUgaW5mb3JtYXRpb24gZnJvbSBUcnVlVHlwZSB2MS42NjoKCiAgICAgIFBsYXRmb3JtIElEID0gMyAoTWljcm9zb2Z0KQogICAgICB0aGUgRW5jb2RpbmcgSUQgb2YgR0IyMzEyID0gNAogICAgICB0aGUgRW5jb2RpbmcgSUQgb2YgYmlnNSA9IDMKCiAgICBIb3dldmVyLCBJIGhhdmUgZm91bmQgdGhhdCBpbiB0dG5hbWVpZC5oOgoKICAgICAgVFRfTVNfSURfR0IyMzEyID0gMwogICAgICBUVF9NU19JRF9CSUdfNSA9IDQKCiAgICBXaGljaCBvbmUgaXMgY29ycmVjdD8KCiAgQW50b2luZSByZXBsaWVkIHRoYXQgdGhpcyB3YXMgYSBidWcgaW4gdGhlIFRUIDEuNjYgc3BlY2lmaWNhdGlvbiwgYW5kIHRoYXQKICBGcmVlVHlwZSBmb2xsb3dlZCB0aGUgbW9zdCByZWNlbnQgVHJ1ZVR5cGUvT3BlblR5cGUgc3BlY2lmaWNhdGlvbiBoZXJlLgoKCkFVVE9ISU5ULVNCSVRTCgogIFdoZW4gdHJ5aW5nIHRvIGxvYWQgYSBnbHlwaCwgd2l0aCB0aGUgYXV0by1oaW50ZXIgYWN0aXZhdGVkIChpLmUuLCB3aGVuCiAgdXNpbmcgRlRfTE9BRF9GT1JDRV9BVVRPSElOVCwgb3Igd2hlbiB0aGUgZm9udCBkcml2ZXIgZG9lc24ndCBwcm92aWRlIGl0cwogIG93biBoaW50ZXIpLCBlbWJlZGRlZCBiaXRtYXBzIGFyZSBfbmV2ZXJfIGxvYWRlZCwgdW5saWtlIHRoZSBkZWZhdWx0CiAgYmVoYXZpb3VyIGRlc2NyaWJlZCBieSB0aGUgQVBJIHNwZWNpZmljYXRpb24uCgogIFRoaXMgc2VlbXMgdG8gYmUgYSBidWcgaW4gRlRfTG9hZF9HbHlwaCgpLCBidXQgdGhlcmUgaXMgbm8gd2F5IHRvIHNvbHZlIGl0CiAgZWZmaWNpZW50bHkgd2l0aG91dCBtYWtpbmcgYSBmZXcgaW1wb3J0YW50IGludGVybmFsIGNoYW5nZXMgdG8gdGhlCiAgbGlicmFyeSdzIGRlc2lnbiAobW9yZSBpbXBvcnRhbnRseSwgdG8gdGhlIGZvbnQgZHJpdmVyIGludGVyZmFjZSkuCgogIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkIHdpdGggYSBoYWNrIGluIEZUX0xvYWRfR2x5cGgoKS4gIE1vcmUgaW1wb3J0YW50CiAgaW50ZXJuYWwgY2hhbmdlcyBzaG91bGQgaGVscCBnZXQgcmlkIG9mIGl0IHdpdGggYSBjbGVhbiBzb2x1dGlvbiBpbiBhCiAgZnVydGhlciByZWxlYXNlIGxpa2UgRnJlZVR5cGUgMi4xLgoKCkJBRC1UMS1DSEFSTUFQCgogIFR5cGUxIGRyaXZlciBkb2Vzbid0IHJlYWQgImNhY3V0ZSIgYW5kICJsc2xhc2giIGNoYXJhY3RlcnMgZnJvbSBpc284ODU5LTIKICBjaGFyc2V0LiAgVGhvc2UgY2hhcmFjdGVycyBhcmUgbWFwcGVkIGFzIE1BQy1vbmUgaW4gZ2xuYW1lcy5weSwgc28gdGhleQogIGNhbm5vdCBiZSBzaG93biBpbiBBZG9iZSBUeXBlMSBmb250cy4KCiAgKFRoaXMgd2FzIGR1ZSB0byBhIGJ1ZyBpbiB0aGUgImdsbmFtZXMucHkiIHNjcmlwdCB1c2VkIHRvIGdlbmVyYXRlIHRoZQogIHRhYmxlIG9mIGdseXBoIG5hbWVzIGluICdzcmMvcHNhdXgvcHN0YWJsZXMuaCcuKQoKCkJBRC1VTklYWFhYLU5BTUVTCgogIEdseXBoIG5hbWVzIGxpa2UgdW5pWFhYWCBhcmUgbm90IHJlY29nbml6ZWQgYXMgdGhleSBzaG91bGQgYmUuICBJdCBzZWVtcwogIHRoYXQgY29kZSBpbiBwc21vZHVsZS5jIGZvciB1bmlYWFhYIGdseXBoIG5hbWVzIHdhcyBuZXZlciB0ZXN0ZWQuICBUaGUKICBwYXRjaCBpcyB2ZXJ5IHNpbXBsZS4KICAKICAoQSBzaW1wbGUgYnVnIHRoYXQgd2FzIGxlZnQgdW4tbm90aWNlZCBkdWUgdG8gdGhlIGZhY3QgdGhhdCBJIGRvbid0IGhhdmUKICBhbnkgUG9zdHNjcmlwdCBmb250IHRoYXQgdXNlIHRoaXMgY29udmVudGlvbiwgdW5mb3J0dW5hdGVseS4pCgoKR0xZUEhfVE9fQklUTUFQLUJVRwoKICBDYWxsaW5nIEZUX0dseXBoX1RvX0JpdG1hcCgpIHNvbWV0aW1lcyBtb2RpZmllcyB0aGUgb3JpZ2luYWwgZ2x5cGgKICBvdXRsaW5lLCBjcmVhdGluZyB3ZWlyZCBhbGlnbm1lbnQgYXJ0ZWZhY3RzLgogIAogIFRoaXMgc3VidGxlIGJ1ZyB3YXMgcmVhbGx5IGluIHRoZSBmaWxlIGBzcmMvc21vb3RoL2Z0c21vb3RoLmMnLiAKICBCYXNpY2FsbHksIHRoZSBvdXRsaW5lIHdhcyBzaGlmdGVkIGJlZm9yZSByZW5kZXJpbmcgaXQgaW50byBhIG5ldyBiaXRtYXAKICBidWZmZXIuICBIb3dldmVyLCBpdCB3YXNuJ3QgcHJvcGVybHkgdW4tc2hpZnRlZCBhZnRlciB0aGF0IG9wZXJhdGlvbi4KCiAgVGhpcyB3YXMgb25seSBub3RpY2VhYmxlIHdpdGggY2VydGFpbiBnbHlwaHMgb3IgY2VydGFpbiBmb250czsgaXQgY3JlcHQgaW4KICBhIGxvbmcgdGltZSBhZ28uCiAgICAgICAgICAgICAgICAgIAogIFRoZSBzYW1lIGJ1ZyBoYXMgYmVlbiBmaXhlZCBpbiBzcmMvcmFzdGVyL2Z0cmVuZGVyMS5jIGFsc28uCiAgICAgICAgICAgICAgICAgIAoKClRULUdMWVBILUNSQVNICgogIFRoZSBsaWJyYXJ5IGNyYXNoZWQgd2hlbiB0cnlpbmcgdG8gbG9hZCBjZXJ0YWluIGdseXBocyBmcm9tIGFuCiAgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgVHJ1ZVR5cGUgZmlsZSAodHQxMDk1bV8udHRmIHN1Ym1pdHRlZCBieQogIFNjb3R0IExvbmcpLgogIAogIEl0IHR1cm5lZCBvdXQgdGhhdCB0aGUgZm9udCBjb250YWluZWQgaW52YWxpZCBnbHlwaCBkYXRhIChpLmUuIHdhcyBicm9rZW4pLAogIGJ1dCB0aGUgVHJ1ZVR5cGUgZ2x5cGggbG9hZGVyIGluIEZyZWVUeXBlIHdhc24ndCBwYXJhbm9pZCBlbm91Z2gsIHdoaWNoCiAgcmVzdWx0ZWQgaW4gbmFzdHkgbWVtb3J5IG92ZXJ3cml0ZXMgYWxsIG92ZXIgdGhlIHBsYWNlLgoKCgpUMS1GT05ULUNSQVNICgogIFRoZSBsaWJyYXJ5IGNyYXNoZWQgd2hlbiB0cnlpbmcgdG8gbG9hZCB0aGUgIlN0YWxpbmdyYWQgUmVndWxhciIgZmFjZQogIGZyb20gdGhlICJzYWRuLnBmYiIgZm9udCBmaWxlIHByb3ZpZGVkIGJ5IEFudGhvbnkgRm9rIChhbmQgdGhlIEdub21lLVByaW50CiAgdGVhbSBJIGJlbGlldmUpLgogIAogIFRoaXMgd2FzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHRoZSBmb250IG1pc3NlZCBhIGZ1bGwgZm9udCBuYW1lIGVudHJ5LAogIHRob3VnaCBib2FzdGVkIGEgZmFtaWx5IG5hbWUgYW5kIHBvc3RzY3JpcHQgbmFtZS4gVGhlIFR5cGUgMSBmYWNlIGxvYWRlcgogIGRpZG4ndCBjaGVjayBmb3IgdGhlc2UgcGF0aGV0aWMgY2FzZXMgYW5kIHNlZy1mYXVsdGVkLi4KCgoKQkFELUFEVkFOQ0VTCgogIEFsbCBzY2FsYWJsZSBmb250IGRyaXZlcnMgcmV0dXJuZWQgdW4tZml0dGVkIGdseXBoIGFkdmFuY2VzIHdoZW4KICBGVF9MT0FEX0RFRkFVTFQgd2FzIHVzZWQsIHdoaWNoIHdhcyBpbmNvcnJlY3QuIFRoaXMgcHJvYmxlbSB3YXMgcHJldHR5CiAgb2xkIGJ1dCBoYWRuJ3QgYmVlbiBzcG90dGVkIGJlY2F1c2UgYWxsIHRlc3QgcHJvZ3JhbXMgYWN0dWFsbHkKICBleHBsaWNpdGVseSBvciBpbXBsaWNpdGVseSAoaS5lLiB0aHJvdWdoIHRoZSBjYWNoZSkgcm91bmRlZCB0aGUgYWR2YW5jZQogIHdpZHRocyBvZiBnbHlwaHMuLgogIAogIFRoaXMgcmVzdWx0ZWQgaW4gcG9vciByZW5kZXJpbmcgb2YgYSBudW1iZXIgb2YgY2xpZW50IGFwcGxpY2F0aW9ucwogIGhvd2V2ZXIgKGl0J3Mgc3RyYW5nZSB0byBzZWUgdGhleSB0b29rIHNvIGxvbmcgdG8gbm90aWNlIHRoZSBkZXZlbCB0ZWFtID8pCgoKCkdMWVBILVRPLUJJVE1BUC1CVUcKCiAgdGhlIEZUX0dseXBoX1RvQml0bWFwIGRpZCBpbmNvcnJlY3RseSBtb2RpZnkgdGhlIHNvdXJjZSBnbHlwaCBpbiBjZXJ0YWluCiAgY2FzZXMsIHdoaWNoIHJlc3VsdGVkIGluIHJhbmRvbSBiZWhhdmlvdXIgYW5kIGJhZCB0ZXh0IHJlbmRlcmluZy4gVGhpcyB3YXMKICBzcG90dGVkIHRvIGJ1Z3MgaW4gYm90aCB0aGUgbW9ub2Nocm9tZSBhbmQgc21vb3RoIHJhc3Rlcml6ZXIuLgoKCj09PSBlbmQgb2YgZmlsZSA9PT0K