VmVyc2lvbiAyLjEKLS0tLS0tLS0tLS0KCi0gTmV3IG1haW50YWluZXIKCi0gRGF0ZXV0aWwgbm93IHdvcmtzIG9uIFB5dGhvbiAyLjYsIDIuNyBhbmQgMy4yIGZyb20gc2FtZSBjb2RlYmFzZSAod2l0aCBzaXgpCgotICM3MDQwNDc6IElzbWFlbCBDYXJuYWxlcycgcGF0Y2ggZm9yIGEgbmV3IHRpbWUgZm9ybWF0CgotIFNtYWxsIGJ1ZyBmaXhlcywgdGhhbmtzIGZvciByZXBvcnRlcnMhCgoKVmVyc2lvbiAyLjAKLS0tLS0tLS0tLS0KCi0gUG9ydGVkIHRvIFB5dGhvbiAzLCBieSBCcmlhbiBKb25lcy4gIElmIHlvdSBuZWVkIGRhdGV1dGlsIGZvciBQeXRob24gMi5YLAogIHBsZWFzZSBjb250aW51ZSB1c2luZyB0aGUgMS5YIHNlcmllcy4KCi0gVGhlcmUncyBubyBzdWNoIHRoaW5nIGFzIGEgIlBTRiBMaWNlbnNlIi4gIFRoaXMgc291cmNlIGNvZGUgaXMgbm93CiAgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIFNpbXBsaWZpZWQgQlNEIGxpY2Vuc2UuICBTZWUgTElDRU5TRSBmb3IKICBkZXRhaWxzLgoKVmVyc2lvbiAxLjUKLS0tLS0tLS0tLS0KCi0gQXMgcmVwb3J0ZWQgYnkgTWF0aGlldSBCcmlkb24sIHJydWxlcyB3ZXJlIG1hdGNoaW5nIHRoZSBieXNlY29uZCBydWxlcwogIGluY29ycmVjdGx5IGFnYWluc3QgYnltaW51dGUgaW4gc29tZSBjaXJjdW1zdGFuY2VzIHdoZW4gdGhlIFNFQ09ORExZCiAgZnJlcXVlbmN5IHdhcyBpbiB1c2UsIGR1ZSB0byBhIGNvcHkgJiBwYXN0ZSBidWcuICBUaGUgcHJvYmxlbSBoYXMgYmVlbgogIHVuaXR0ZXN0ZWQgYW5kIGNvcnJlY3RlZC4KCi0gQWRhbSBSeWFuIHJlcG9ydGVkIGEgcHJvYmxlbSBpbiB0aGUgcmVsYXRpdmVkZWx0YSBpbXBsZW1lbnRhdGlvbiB3aGljaAogIGFmZmVjdGVkIHRoZSB5ZWFyZGF5IHBhcmFtZXRlciBpbiB0aGUgbW9udGggb2YgSmFudWFyeSBzcGVjaWZpY2FsbHkuCiAgVGhpcyBoYXMgYmVlbiB1bml0dGVzdGVkIGFuZCBmaXhlZC4KCi0gVXBkYXRlZCB0aW1lem9uZSBpbmZvcm1hdGlvbi4KCgpWZXJzaW9uIDEuNC4xCi0tLS0tLS0tLS0tLS0KCi0gVXBkYXRlZCB0aW1lem9uZSBpbmZvcm1hdGlvbi4KCgpWZXJzaW9uIDEuNAotLS0tLS0tLS0tLQoKLSBGaXhlZCBhbm90aGVyIHBhcnNlciBwcmVjaXNpb24gcHJvYmxlbSBvbiBjb252ZXJzaW9uIG9mIGRlY2ltYWwgc2Vjb25kcwogIHRvIG1pY3Jvc2Vjb25kcywgYXMgcmVwb3J0ZWQgYnkgRXJpayBCcm93bi4gIE5vdyB0aGVzZSBpc3N1ZXMgYXJlIGdvbmUKICBmb3IgcmVhbCBzaW5jZSBpdCdzIG5vdCB1c2luZyBmbG9hdGluZyBwb2ludCBhcml0aG1ldGljIGFueW1vcmUuCgotIEZpeGVkIGNhc2Ugd2hlcmUgdHpyYW5nZS51dGNvZmZzZXQgYW5kIHR6cmFuZ2UuZHN0KCkgbWlnaHQgZmFpbCBkdWUKICB0byBhIGRhdGUgYmVpbmcgdXNlZCB3aGVyZSBhIGRhdGV0aW1lIHdhcyBleHBlY3RlZCAocmVwb3J0ZWQgYW5kIGZpeGVkCiAgYnkgTGVubmFydCBSZWdlYnJvKS4KCi0gUHJldmVudCB0enN0ciBmcm9tIGludHJvZHVjaW5nIGRheWxpZ2h0IHRpbWluZ3MgaW4gc3RyaW5ncyB0aGF0IGRpZG4ndAogIHNwZWNpZnkgdGhlbSAocmVwb3J0ZWQgYnkgTGVubmFydCBSZWdlYnJvKS4KCi0gQ2FsbHMgbGlrZSBnZXR0eigiR01UKzMiKSBhbmQgZ2V0dHooIlVUQy0yIikgd2lsbCBub3cgcmV0dXJuIHRoZQogIGV4cGVjdGVkIHZhbHVlcywgaW5zdGVhZCBvZiB0aGUgVFogdmFyaWFibGUgYmVoYXZpb3IuCgotIEZpeGVkIERTVCBzaWduYWwgaGFuZGxpbmcgaW4gem9uZWluZm8gZmlsZXMuICBSZXBvcnRlZCBieQogIE5pY2hvbGFzIEYuIEZhYnJ5IGFuZCBKb2huLU1hcmsgR3VybmV5LgoKClZlcnNpb24gMS4zCi0tLS0tLS0tLS0tCgotIEZpeGVkIHByZWNpc2lvbiBwcm9ibGVtIG9uIGNvbnZlcnNpb24gb2YgZGVjaW1hbCBzZWNvbmRzIHRvCiAgbWljcm9zZWNvbmRzLCBhcyByZXBvcnRlZCBieSBTa2lwIE1vbnRhbmFyby4KCi0gRml4ZWQgYnVnIGluIGNvbnN0cnVjdG9yIG9mIHBhcnNlciwgYW5kIGNvbnZlcnRlZCBwYXJzZXIgY2xhc3NlcyB0bwogIG5ldy1zdHlsZSBjbGFzc2VzLiAgT3JpZ2luYWwgcmVwb3J0IGFuZCBwYXRjaCBieSBNaWNoYWVsIEVsc2T2cmZlci4KCi0gSW5pdGlhbGl6ZSB0emlkIGFuZCBjb21wcyBpbiB0ei5weSwgdG8gcHJldmVudCB0aGUgY29kZSBmcm9tIGV2ZXIKICByYWlzaW5nIGEgTmFtZUVycm9yIChldmVuIHdpdGggYnJva2VuIGZpbGVzKS4gIEpvaGFuIERhaGxpbiBzdWdnZXN0ZWQKICB0aGUgZml4IGFmdGVyIGEgcHlmbGFrZXMgcnVuLgoKLSBWZXJzaW9uIGlzIG5vdyBwdWJsaXNoZWQgaW4gZGF0ZXV0aWwuX192ZXJzaW9uX18sIGFzIHJlcXVlc3RlZAogIGJ5IERhcnJlbiBEYWxlLgoKLSBBbGwgY29kZSBpcyBjb21wYXRpYmxlIHdpdGggbmV3LXN0eWxlIGRpdmlzaW9uLgoKClZlcnNpb24gMS4yCi0tLS0tLS0tLS0tCgotIE5vdyB0emZpbGUgd2lsbCByb3VuZCB0aW1lem9uZXMgdG8gZnVsbC1taW51dGVzIGlmIG5lY2Vzc2FyeSwKICBzaW5jZSBQeXRob24ncyBkYXRldGltZSBkb2Vzbid0IHN1cHBvcnQgc3ViLW1pbnV0ZSBvZmZzZXRzLgogIFRoYW5rcyB0byBJbHBvIE55eXNz9m5lbiBmb3IgcmVwb3J0aW5nIHRoZSBpc3N1ZS4KCi0gUmVtb3ZlZCBiYXJlIHN0cmluZyBleGNlcHRpb25zLCBhcyByZXBvcnRlZCBhbmQgZml4ZWQgYnkKICBXaWxmcmVkbyBT4W5jaGV6IFZlZ2EuCgotIEZpeCBidWcgaW4gbGVhcCBjb3VudCBwYXJzaW5nIChyZXBvcnRlZCBhbmQgZml4ZWQgYnkgRXVnZW5lIE9kZW4pLgoKClZlcnNpb24gMS4xCi0tLS0tLS0tLS0tCgotIEZpeGVkIHJydWxlIGJ5eWVhcmRheSBoYW5kbGluZy4gQWJyYW1vIEJhZ25hcmEgcG9pbnRlZCBvdXQgdGhhdAogIFJGQzI0NDUgYWxsb3dzIG5lZ2F0aXZlIG51bWJlcnMuCgotIEZpeGVkIC0tcHJlZml4IGhhbmRsaW5nIGluIHNldHVwLnB5IChieSBTaWRuZWkgZGEgU2lsdmEpLgoKLSBOb3cgdHouZ2V0dHooKSByZXR1cm5zIGEgdHpsb2NhbCBpbnN0YW5jZSB3aGVuIG5vdCBnaXZlbiBhbnkKICBhcmd1bWVudHMgYW5kIG5vIG90aGVyIHRpbWV6b25lIGluZm9ybWF0aW9uIGlzIGZvdW5kLgoKLSBVcGRhdGluZyB0aW1lem9uZSBpbmZvcm1hdGlvbiB0byB2ZXJzaW9uIDIwMDVxLgoKClZlcnNpb24gMS4wCi0tLS0tLS0tLS0tCgotIEZpeGVkIHBhcnNpbmcgb2YgWFhoWFhtIGZvcm1hdHRlZCB0aW1lIGFmdGVyIGRheS9tb250aC95ZWFyCiAgaGFzIGJlZW4gcGFyc2VkLgoKLSBBZGRlZCBwYXRjaCBieSBKZWZmcmV5IEhhcnJpcyBvcHRpbWl6aW5nIHJydWxlLl9fY29udGFpbnNfXy4KCgpWZXJzaW9uIDAuOQotLS0tLS0tLS0tLQoKLSBGaXhlZCBwaWNrbGluZyBvZiB0aW1lem9uZSB0eXBlcywgYXMgcmVwb3J0ZWQgYnkKICBBbmRyZWFzIEv2aGxlci4KCi0gSW1wbGVtZW50ZWQgaW50ZXJuYWwgdGltZXpvbmUgaW5mb3JtYXRpb24gd2l0aCBiaW5hcnkKICB0aW1lem9uZSBmaWxlcyBbMV0uIGRhdGF1dGlsLnR6LmdldHR6KCkgZnVuY3Rpb24gd2lsbCBub3cKICB0cnkgdG8gdXNlIHRoZSBzeXN0ZW0gdGltZXpvbmUgZmlsZXMsIGFuZCBmYWxsYmFjayB0bwogIHRoZSBpbnRlcm5hbCB2ZXJzaW9ucy4gSXQncyBhbHNvIHBvc3NpYmxlIHRvIGFzayBmb3IKICB0aGUgaW50ZXJuYWwgdmVyc2lvbnMgZGlyZWN0bHkgYnkgdXNpbmcKICBkYXRldXRpbC56b25laW5mby5nZXR0eigpLgoKLSBOZXcgdHp3aW4gdGltZXpvbmUgdHlwZSwgYWxsb3dpbmcgYWNjZXNzIHRvIFdpbmRvd3MKICBpbnRlcm5hbCB0aW1lem9uZXMgKGNvbnRyaWJ1dGVkIGJ5IEplZmZyZXkgSGFycmlzKS4KCi0gRml4ZWQgcGFyc2luZyBvZiB1bmljb2RlIGRhdGUgc3RyaW5ncy4KCi0gQWNjZXB0IHBhcnNlcmluZm8gaW5zdGFuY2VzIGFzIHRoZSBwYXJzZXIgY29uc3RydWN0b3IKICBwYXJhbWV0ZXIsIGJlc2lkZXMgcGFyc2VyaW5mbyAoc3ViKWNsYXNzZXMuCgotIENoYW5nZWQgd2Vla2RheSB0byBzcGVsbCB0aGUgbm90LXNldCBuIHZhbHVlIGFzIE5vbmUKICBpbnN0ZWFkIG9mIDAuCgotIEZpeGVkIG90aGVyIHJlcG9ydGVkIGJ1Z3MuCgpbMV0gaHR0cDovL3d3dy50d2luc3VuLmNvbS90ei90ei1saW5rLmh0bQoKClZlcnNpb24gMC41Ci0tLS0tLS0tLS0tCgotIFJlbW92ZWQgRlJFUV8gcHJlZml4IGZyb20gcnJ1bGUgZnJlcXVlbmN5IGNvbnN0YW50cwogIFdBUk5JTkc6IHRoaXMgYnJlYWtzIGNvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91cyB2ZXJzaW9ucy4KCi0gRml4ZWQgcnJ1bGUuYmV0d2VlbigpIGZvciBjYXNlcyB3aGVyZSAiYWZ0ZXIiIGlzIGFjaGlldmVkCiAgYmVmb3JlIGV2ZW4gc3RhcnRpbmcsIGFzIHJlcG9ydGVkIGJ5IEFuZHJlYXMgS/ZobGVyLgoKLSBGaXhlZCB0d28gZGlnaXQgemVyby15ZWFyIHBhcnNpbmcgKHN1Y2ggYXMgMzEtRGVjLTAwKSwgYXMKICByZXBvcnRlZCBieSBKaW0gQWJyYW1zb24sIGFuZCBpbmNsdWRlZCB0ZXN0IGNhc2UgZm9yIHRoaXMuCgotIFNvcnQgZXhkYXRlIGFuZCByZGF0ZSBiZWZvcmUgaXRlcmF0aW5nIG92ZXIgdGhlbSwgc28gdGhhdAogIGl0J3Mgbm90IG5lY2Vzc2FyeSB0byBzb3J0IHRoZW0gYmVmb3JlIGFkZGluZyB0byB0aGUgcnJ1bGVzZXQsCiAgYXMgcmVwb3J0ZWQgYnkgTmljaG9sYXMgUGlwZXIuCgo=