ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZWxvZwoKVmVyc2lvbiA3LjI1LjAgKDIyIE1hciAyMDEyKQoKRGFuaWVsIFN0ZW5iZXJnICgyMiBNYXIgMjAxMikKLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCBiOGIyY2Y2MTJiMgoKWWFuZyBUc2UgKDIyIE1hciAyMDEyKQotIHRlc3RzICMxNDAwICMxNDAxOiBhZGQgbWlzc2luZyBrZXl3b3JkcwoKLSBodHRwX3Byb3h5Lmg6IGZpeCBidWlsZHMgd2l0aCBwcm94eSBvciBodHRwIGRpc2FibGVkCgotIHBhcnNlZGF0ZS5jOiBmaXggYSBudW1lcmljIG92ZXJmbG93CgpEYW5pZWwgU3RlbmJlcmcgKDIyIE1hciAyMDEyKQotIFtBbmRyZWkgQ2lwdSBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBjb29raWVzOiBzdHJpcCB0aGUgbnVtZXJpY2FsIGlwdjYgaG9zdCBwcm9wZXJseQogIAogIFRoZSBjb21taXQgZTY1MGRiZGU4NmQ0IHRoYXQgc3RyaXBwZWQgb2ZmIFticmFja2V0c10gZnJvbSBpcHY2LW9ubHkgaG9zdAogIGhlYWRlcnMgZm9yIHRoZSBzYWtlIG9mIGNvb2tpZSBwYXJzaW5nIHdyb25nbHkgaW5jcmVtZW50ZWQgdGhlIGhvc3QKICBwb2ludGVyIHdoaWNoIHdvdWxkIGNhdXNlIGEgYmFkIGZyZWUoKSBjYWxsIGxhdGVyIG9uLgoKWWFuZyBUc2UgKDIyIE1hciAyMDEyKQotIHRlc3QgIzU5ODogYWRkIHRvIE1ha2VmaWxlLmFtCgotIHRlc3QgIzU5ODogT09NIGhhbmRsaW5nIGZpeGVzCgotIGZpeCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzCgpEYW5pZWwgU3RlbmJlcmcgKDIyIE1hciAyMDEyKQotIENPTk5FQ1Q6IGZpeCBtdWx0aSBpbnRlcmZhY2UgcmVncmVzc2lvbgogIAogIFRoZSByZWZhY3RvcmluZyBvZiBIVFRQIENPTk5FQ1QgaGFuZGxpbmcgaW4gY29tbWl0IDQxYjAyMzc4MzQyMzIgdGhhdAogIG1hZGUgaXQgcHJvdG9jb2wgaW5kZXBlbmRlbnQgYnJva2UgaXQgZm9yIHRoZSBtdWx0aSBpbnRlcmZhY2UuIFRoaXMgZml4CiAgbm93IGludHJvZHVjZSBhIGJldHRlciBzdGF0ZSBoYW5kbGluZyBhbmQgbW92ZWQgc29tZSBsb2dpYyB0byB0aGUKICBodHRwX3Byb3h5LmMgc291cmNlIGZpbGUuCiAgCiAgUmVwb3J0ZWQgYnk6IFlhbmcgVHNlCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTItMDMvMDE2Mi5odG1sCgotIFNXUzogcmVmdXNlIHRvIHNlcnZlIENPTk5FQ1QgdW5sZXNzIHJ1bm5pbmcgYXMgcHJveHkKCllhbmcgVHNlICgyMSBNYXIgMjAxMikKLSBjdXJsLWZ1bmN0aW9ucy5tNDogdXBkYXRlIGRldGVjdGlvbiBsb2dpYyBvZiBnZXRhZGRyaW5mbygpIHRocmVhZC1zYWZlbmVzcwogIAogIFRha2UgaW4gYWNjb3VudCB0aGF0IFBPU0lYIHN0YW5kYXJkIElzc3VlIDcgZHJvcHMgaF9lcnJubyBzdXBwb3J0LiBOb3csIHdlIGFsc28KICBjb25zaWRlciBnZXRhZGRyaW5mbygpIHRvIGJlIHRocmVhZC1zYWZlIHdoZW4gKF9QT1NJWF9DX1NPVVJDRSA+PSAyMDA4MDlMKSBvcgogIChfWE9QRU5fU09VUkNFID49IDcwMCkgaW5kZXBlbmRlbnRseSBvZiB3aGV0aGVyIGhfZXJybm8gZXhpc3RzIG9yIG5vdC4KCi0gZml4IHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MKCi0gdGVzdHMgMTQwWDogZml4IC0tbGliY3VybCBnZW5lcmF0ZWQgc291cmNlIGZpbGUgcmVhZGluZyBtb2RlIGZvciBNU1lTIGJ1aWxkcwoKLSB0b29sX2Vhc3lzcmMuYzogZml4IC0tbGliY3VybCBvcHRpb24gb3V0cHV0IGZpbGUgdGV4dCB0cmFuc2xhdGlvbiBtb2RlCiAgCiAgVXNlIGZvcGVuKCkgd2l0aCAidyIgbW9kZSBpbnN0ZWFkIG9mICJ3dCIgdG8gZml4IGN5Z3dpbiBidWlsZHMuCgotIGJ1aWxkOiByZW1vdmUgdG9vbF9jYl9za3QuW2NoXSByZWZlcmVuY2VzCgpEYW5pZWwgU3RlbmJlcmcgKDE4IE1hciAyMDEyKQotIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIGFkNzc0MjBhYzc2MWIKICAKICAzIG1vcmUgYnVncywgMSBtb3JlIGNvbnRyaWJ1dG9yCgotIGx3aXA6IGJhc2ljIGNoZWNrcyBhbmQgbWFjcm9zIGZvciBjb21wYXRpYmxpdHkKCllhbmcgVHNlICgxNyBNYXIgMjAxMikKLSB0b29sX3NldG9wdC5jOiBtb3JlIE9PTSBoYW5kbGluZyBmaXhlcwoKRGFuaWVsIFN0ZW5iZXJnICgxNiBNYXIgMjAxMikKLSBjbWFrZTogbGlzdF9zcGFjZXNfYXBwZW5kX29uY2UgZmFpbHMgd2l0aCBzcGFjZXMgaW4gZmlsZW5hbWUKICAKICBXaW5kb3dzIHN0YW5kYXJkIGxpYnJhcmllcyBhcmUgbG9jYXRlZCBpbiBDOi9Qcm9ncmFtIEZpbGVzL01pY3Jvc29mdAogIFNES3MvWy4uLl0uIFRoZXkgYXJlIGFscmVhZHkgaW5jbHVkZWQgaW4gdGhlIGRlZmF1bHQgTVNWQwogIExJQlBBVEguIEhlbmNlLCBmaW5kX2xpYnJhcnkoV1NPQ0szMl9MSUJSQVJZIHdzb2NrMzIpIGFuZAogIGZpbmRfbGlicmFyeShXUzJfMzJfTElCUkFSWSB3czJfMzIpIGFyZSBub3QgbmVlZGVkLiBUaGV5IHJldHVybiB0aGUgZnVsbAogIHBhdGggdG8gdGhlIGxpYnJhcmllcyBpbmNsdWRpbmcgc3BhY2VzLiBPZiBjb3Vyc2UsCiAgbGlzdF9zcGFjZXNfYXBwZW5kX29uY2Ugd2lsbCBtYW5nbGUgdGhlIHJlc3VsdCBhbmQgdGhlIGJ1aWxkIGZhaWxzLgogIAogIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MzQ5NDk2OAoKWWFuZyBUc2UgKDE2IE1hciAyMDEyKQotIGh0dHBfcHJveHkuYzogZml4IE9PTSBoYW5kbGluZwoKLSB0b29sX3NldG9wdC5jOiBmaXggT09NIGhhbmRsaW5nCgotIGZpeCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzCgotIGZpeCBzb21lIGNvbXBpbGVyIHdhcm5pbmdzCgpEYW5pZWwgU3RlbmJlcmcgKDEzIE1hciAyMDEyKQotIFtNYXhpbSBQcm9ob3JvdiBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICByZXNvbHZlIHdpdGggYy1hcmVzOiBkb24ndCByZXNvbHZlIElQdjYgd2hlbiBub3Qgd29ya2luZwogIAogIElmIHRoZSBDdXJsX2lwdjZ3b3JrcygpIGZ1bmN0aW9uIHNheXMgbm8sIHRoZXJlIGlzIG5vIHJlYXNvbiB0byB0cnkgQUFBQQogIG5hbWVzIGV2ZW4gaWYgbGliY3VybCB3YXMgYnVpbHQgd2l0aCBJUHY2IHN1cHBvcnQgZW5hYmxlZC4KICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMi0wMy8wMDQ1Lmh0bWwKCnVua25vd24gKDEwIE1hciAyMDEyKQotIFtTdGV2ZSBIb2xtZSBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBzbXRwLmM6IENoYW5nZWQgdGhlIGN1cmwgZXJyb3IgY29kZSBmb3IgRUhMTyBhbmQgSEVMTyByZXNwb25zZXMKICAKICBDaGFuZ2VkIHRoZSByZXR1cm5lZCBjdXJsIGVycm9yIGNvZGVzIGZvciBFSExPIGFuZCBIRUxPIHJlc3BvbnNlcyBmcm9tCiAgQ1VSTEVfTE9HSU5fREVOSUVEIHRvIENVUkxFX1JFTU9URV9BQ0NFU1NfREVOSUVEIGFzIGEgbmVnYXRpdmUgcmVzcG9uc2UKICBmcm9tIHRoZXNlIGNvbW1hbmRzIHJlcHJlc2VudHMgbm8gc2VydmljZSBhcyBvcHBvc2VkIHRvIGEgbG9naW4gZXJyb3IuCgpEYW5pZWwgU3RlbmJlcmcgKDEwIE1hciAyMDEyKQotIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIGU2NTBkYmRlODYKICAKICBOZXc6IDEyIGJ1Z3MsIDMgY2hhbmdlcywgNiBjb250cmlidXRvcnMgYW5kIHVwZGF0ZWQgY291bnRlcnMgYXQgdGhlIHRvcAoKLSBbQW5kcmVpIENpcHUgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgQ3VybF9odHRwOiBzdHJpcCBvZmYgW2JyYWNrZXRzXSBmcm9tIGlwdjYtb25seSBob3N0IGhlYWRlcnMKICAKICBTaW5jZSB0aGUgaG9zdCBuYW1lIGlzIHBhc3NlZCBpbiB0byB0aGUgY29va2llIGVuZ2luZSBpdCB3aWxsIG5vdCB3b3JrCiAgY29ycmVjdGx5IGlmIHRoZSBicmFja2V0cyBhcmUgbGVmdCBpbiB0aGUgbmFtZS4KICAKICBCdWc6aHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDEyLTAzLzAwMzYuaHRtbAoKLSBbQXJtZWwgQXNzZWxpbiBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBDVVJMU1NIX09QVF9BVVRIOiBkb2N1bWVudGVkIGl0IGhhcyBubyBlZmZlY3QKCi0gW0pvaG4gSm9zZXBoIEJhY2hpciBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBtay1jYS1idW5kbGUucGw6IHVzZSBMV1A6OlVzZXJBZ2VudCB3aXRoIHByb3BlciBodHRwcyB2ZXJpZnkgYmVoYXZpb3IuCiAgCiAgQW4gYWx0ZXJuYXRpdmUgd291bGQgYmU6CiAgCiAgMS4gc3BlY2lmeSBIVFRQU19DQV9ESVIgYW5kL29yIEhUVFBTX0NBX0ZJTEUKICAyLiBlbnN1cmUgdGhhdCBOZXQ6OlNTTCBpcyBiZWluZyB1c2VkLCBhbmQgSU86OlNvY2tldDo6U1NMIGlzIE5PVCBiZWluZwogICAgIHVzZWQKICAKICBUaGlzIHF1ZXN0aW9uIGFuZCBhbnN3ZXIgZXhwbGFpbjoKICBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc0MzU4LwoKLSBbSm9obiBKb3NlcGggQmFjaGlyIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIGFjY2VzcyB0aGUgQ0Egc291cmNlIGZpbGUgdXNpbmcgSFRUUFMKCi0gaW5jbHVkZXM6IHJlbW92ZSBpbmNsdXNpb24gb2YgdW51c2VkIGZpbGUgaHR0cF9wcm94eS5oCgotIENPTk5FQ1Q6IG1hZGUgZ2VuZXJpY2FsbHkgbm90IHBlci1wcm90b2NvbAogIAogIEN1cmxfcHJvdG9jb2xfY29ubmVjdCgpIG5vdyBkb2VzIHRoZSB0dW5uZWxpbmcgdGhyb3VnaCB0aGUgSFRUUCBwcm94eSBpZgogIHJlcXVlc3RlZCBpbnN0ZWFkIG9mIGxldHRpbmcgZWFjaCBwcm90b2NvbCBzcGVjaWZpYyBjb25uZWN0aW9uIGZ1bmN0aW9uCiAgZG8gaXQuCgotIHNzaF9jb25uZWN0OiB0dW5uZWwgdGhyb3VnaCBIVFRQIHByb3h5IGlmIHJlcXVlc3RlZAoKLSBMV0lQOiBkb24ndCBjb25zaWRlciBIQVZFX0VSUk5PX0ggdG8gYmUgd2luc29jawogIAogIFRoZSBjaGVjayBmb3IgV2luc29jayBkZWZpbml0aW9uIHdhcyBhIGJpdCB0b28gYnJvYWQKICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMi0wMy8wMDQ2Lmh0bWwKCi0gW0RhdmUgUmVpc25lciBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBjdXJsLWNvbmZpZzogb25seSBwcm92aWRlIGxpYnJhcmllcyB3aXRoIC0tbGlicwogIAogIEluIGxpbmUgd2l0aCB0aGUgbWFucGFnZSwgY3VybC1jb25maWcgLS1saWJzIHNob3VsZCBvbmx5IHByb3ZpZGUgdGhlIG5lY2Vzc2FyeQogIGxpYnJhcnkgZmxhZ3MgZm9yIHRoZSBsaW5rZXIgaW4gb3JkZXIgdG8gY29tcGlsZSBzb2Z0d2FyZSB3aXRoIGxpYmN1cmwuIEFsc28KICB3aXRoIHRoaXMgY2hhbmdlLCB3ZSBtYXRjaCB3aGF0IHRoZSBwa2ctY29uZmlnIGZpbGUgcHJvdmlkZXMuCgotIENPTlRSSUI6IFBsZWFzZSBkb24ndCBzZW5kIHB1bGwgcmVxdWVzdHMKCi0gbGliY3VybCBkb2NzOiB2ZXJzaW9uIGNvcnJlY3Rpb25zCiAgCiAgQ29ycmVjdCBzb21lIGluY29uc2lzdGVuY2llcyBpbiB3aGljaCB2ZXJzaW9uIHNvbWUgdGhpbmdzIHdlcmUgYWRkZWQuCiAgCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zNDk0MDkxCiAgUmVwb3J0ZWQgYnk6ICJjdXJseWJ1Z3MiCgotIENPTk5FQ1Q6IGZpeCBpcHY2IGFkZHJlc3MgaW4gdGhlIFJlcXVlc3QtTGluZQogIAogIENvbW1pdCA0NjYxNTBiYzY0ZCBmaXhlZCB0aGUgSG9zdDogaGVhZGVyIHdpdGggQ09OTkVDVCwgYnV0IEkgdGhlbgogIGZvcmdvdCB0aGUgcHJlY2VlZGluZyByZXF1ZXN0LWxpbmUuIE5vdyB0aGlzIHRvbyB1c2VzIFticmFja2V0c10KICBwcm9wZXJseSBpZiBhIGlwdjYgbnVtZXJpY2FsIGFkZHJlc3Mgd2FzIGdpdmVuLgogIAogIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MzQ5MzEyOQogIFJlcG9ydGVkIGJ5OiAiQmxhY2F0IgoKLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgU01UUDogQWRkZWQgc3VwcG9ydCBmb3IgcmV0dXJuaW5nIFNNVFAgcmVzcG9uc2UgY29kZXMKICAKICBTZXQgdGhlIGNvbm4tPmRhdGEtPmluZm8uaHR0cGNvZGUgdmFyaWFibGUgaW4gc210cF9zdGF0ZW1hY2hfYWN0KCkgdG8KICBhbGxvdyBDdXJsX2dldGluZm8oKSB0byByZXR1cm4gdGhlIFNNVFAgcmVzcG9uc2UgY29kZSB2aWEgdGhlCiAgQ1VSTElORk9fUkVTUE9OU0VfQ09ERSBhY3Rpb24uCgotIGN1cmwuMTogdXBkYXRlZCAtLWxpYmN1cmwKICAKICBXaXRoIENvbGluIEhvZ2JlbidzIHJlY2VudCB3b3JrLCAtLWxpYmN1cmwgbm93IGFsc28gd29ya3Mgd2l0aCAtRiBhbmQKICBtb3JlLiBSZW1vdmUgdGhlIHByZXZpb3VzIGNhdmVhdC4KCi0gdGVzdDogLS1saWJjdXJsIGZpeGVzCiAgCiAgVGhlIGxpbmUgZW5kaW5ncyBicm9rZSB3aGVuIEkgc2F2ZWQgdGhlIHRocmVlIHJlY2VudCBwYXRjaGVzIChteSBmYXVsdCwKICBub3QgQ29saW4ncykgdG8gJ2dpdCBhbScgdGhlbS4KICAKICBBZGp1c3RlZCB0aGUgc3RyaXBwaW5nIG9mIHRoZSB0ZXN0IHByb2dyYW0gZm9yIGNvbXBhcmluZyB0byBhbHNvIGV4Y2x1ZGUKICB0aGUgU1NIIGtleSBmaWxlIG5hbWUgYXMgdGhhdCB3aWxsIGRpZmZlciBhbmQgdXNlIGEgbG9jYWwgcGF0aCBuYW1lLgoKLSBbQ29saW4gSG9nYmVuIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIEFkZCBoZWxwZXIgc2NyaXB0IGNvbnZzcmN0ZXN0LnBsIHRvIG1hbmlwdWxhdGUgLS1saWJjdXJsIHRlc3RzLgogIAogIFRoZSBpbnRlbnRpb24gaXMgdG8gdGFrZSB0aGUgb3V0cHV0IG9mIGN1cmwncyAtLWxpYmN1cmwgb3B0aW9uLAogIGFzIGV4ZXJjaXNlZCBpbiB0ZXN0IDE0eHgsIGFuZCBnZW5lcmF0ZSBhIGNvcnJlc3BvbmRpbmcgdGVzdDE1eHgKICBpbiB3aGljaCB0aGUgZ2VuZXJhdGVkIGNvZGUgaXMgY29tcGlsZWQgYW5kIHJ1bi4gIFRoaXMgd2lsbCB2ZXJpZnkKICB0aGF0IHRoZSBnZW5lcmF0ZWQgY29kZSBiZWhhdmVzIGVxdWl2YWxlbnRseSB0byB0aGUgb3JpZ2luYWwKICBpbnZvY2F0aW9uIG9mIHRoZSBjdXJsIGNvbW1hbmQuCiAgCiAgVGhlIHNjcmlwdCBpcyBub3QgeWV0IGludGVncmF0ZWQgaW50byB0aGUgY29uZmlndXJlIC8gbWFrZWZpbGUKICBtYWNoaW5lcnkuCgotIFtDb2xpbiBIb2diZW4gYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgQWRkIHRlc3RzIGZvciBjdXJsJ3MgLS1saWJjdXJsIG91dHB1dC4KICAKICBUaGVzZSB0ZXN0cyBjaGVjayB0aGUgb3V0cHV0IG9mIHRoZSAtLWxpYmN1cmwgb3B0aW9uIG9mIGN1cmwsCiAgaW5jbHVkaW5nIHRoZSBpbXByb3ZlZCBvcHRpb24gaGFuZGxpbmcgYWRkZWQgaW4gYSByZWxhdGVkIHBhdGNoLgoKLSBbQ29saW4gSG9nYmVuIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIEdlbmVyYXRlIGxpc3RzIGFuZCB1c2Ugc3ltYm9scyBpbiAtLWxpYmN1cmwgY29kZSBvdXRwdXQuCiAgCiAgVGhpcyBwYXRjaCBpbXByb3ZlcyB0aGUgb3V0cHV0IG9mIGN1cmwncyAtLWxpYmN1cmwgb3B0aW9uIGJ5CiAgZ2VuZXJhdGluZyBjb2RlIHdoaWNoIGJ1aWxkcyBjdXJsX2h0dHBwb3N0IGFuZCBjdXJsX3NsaXN0IGxpc3RzLCBhbmQKICB1c2VzIHN5bWJvbGljIG5hbWVzIGZvciBlbnVtIGFuZCBmbGFnIHZhbHVlcy4gIFZhcmlhbnRzIG9mIHRoZQogIG15X3NldG9wdCBtYWNybyBpbiB0b29sX3NldG9wdC5oIGFyZSBhZGRlZCBpbiBvcmRlciB0byBwYXNzIGV4dHJhIHR5cGUKICBpbmZvcm1hdGlvbiB0byB0aGUgY29kZS1nZW5lcmF0aW9uIHN0ZXAgaW4gdG9vbF9zZXRvcHQuYy4KICAKICBJZiBjdXJsIGlzIGNvbmZpZ3VyZWQgd2l0aCAtLWRpc2FibGUtbGliY3VybC1vcHRpb24gdGhlbiB0aGUgbWFjcm9zCiAgY2FsbCBjdXJsX2Vhc3lfc2V0b3B0IGRpcmVjdGx5LgoKLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgc210cC5jOiBGaXhlZCBhbiBpc3N1ZSB3aXRoIHdyaXRpbmcgcG9zdGRhdGEKICAKICBGaXhlZCBhIHByb2JsZW0gaW4gc210cF9kb25lKCkgd2hlbiB3cml0aW5nIG91dCB0aGUgcG9zdGRhdGEgYXMKICBDdXJsX3dyaXRlKCkgd291bGQgcGVyaW9kaWNhbGx5IHJldHVybiB6ZXJvIGJ5dGVzIHdyaXR0ZW4uCgotIENVUkxPUFRfTUFJTF9BVVRIOiBhZGRlZCBpbiA3LjI1LjAKICAKICBCcm91Z2h0IGluIGNvbW1pdCAwY2YwYWI2ZjMwMAoKLSBwb3AzIHRlc3Qgc2VydmVyOiBzZW5kIHRlcm1pbmF0aW5nICIuQ1JMRiIgb25seQogIAogIFdpdGggY29tbWl0IDAzNWVmMDZiZGE3IGFwcGxpZWQsIHRoZSB0ZXN0IHBvcDMgc2VydmVyIG5lZWRzIHRvIHNlbmQKICAiLlxyXG4iIGFzIHRoZSBib2R5IHRlcm1pbmF0aW5nIHNlcXVlbmNlIGFuZCB0aGVyZSBuZWVkcyB0byBiZSBhIGZpbmFsCiAgQ1JMRiBpbiB0aGUgYWN0dWFsIGJvZHkgaW4gdGhlIHRlc3QgZGF0YSBmaWxlLgoKLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgcG9wMy5jOiBGaXhlZCBkcm9wIG9mIGZpbmFsIENSTEYgaW4gRU9CIGNoZWNraW5nCiAgCiAgQ3VybF9wb3AzX3dyaXRlKCkgd291bGQgZHJvcCB0aGUgZmluYWwgQ1JMRiBvZiBhIG1lc3NhZ2UgYXMgaXQgd2FzCiAgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBFT0IgYXMgb3Bwb3NlZCB0byBwYXJ0IG9mIHRoZSBtZXNzYWdlLiBXaGlsc3QKICB0aGUgRU9CIHNlcXVlbmNlIG5lZWRzIHRvIGJlIHNlYXJjaGVkIGZvciBieSB0aGUgZnVuY3Rpb24gb25seSB0aGUKICBmaW5hbCAzIGNoYXJhY3RlcnMgc2hvdWxkIGJlIHJlbW92ZWQgYXMgcGVyIFJGQy0xOTM5IHNlY3Rpb24gMy4KICAKICBSZXBvcnRlZCBieTogUmljaCBHcmF5CiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTItMDIvMDA1MS5odG1sCgotIFtTdGV2ZSBIb2xtZSBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBzbXRwLmM6IEZpeGVkIGFuIGlzc3VlIHdpdGggdGhlIEVPQiBjaGVja2luZwogIAogIEN1cmxfc210cF9lc2NhcGVfZW9iKCkgd291bGQgbGVhdmUgb2ZmIGZpbmFsIENSTEZzIGZyb20gZW1haWxzIGVuZGluZwogIGluIG11bHRpcGxlIGJsYW5rIGxpbmVzIGFkZGl0aW9uYWxseSBsZWF2aW5nIHRoZSBzbXRwYy0+ZW9iIHZhcmlhYmxlCiAgd2l0aCB0aGUgY2hhcmFjdGVyIGNvdW50IGluLCB3aGljaCB3b3VsZCBjYXVzZSBwcm9ibGVtcyBmb3IgYWRkaXRpb25hbAogIGVtYWlscyB3aGVuIHNlbnQgdGhyb3VnaCBtdWx0aXBsZSBjYWxscyB0byBjdXJsX2Vhc3lfcGVyZm9ybSgpIGFmdGVyIGEKICBDVVJMT1BUX0NPTk5FQ1RfT05MWS4KCi0gQ1VSTEVfRlRQX1BSRVRfRkFJTEVEOiBsaXN0ZWQgdHdpY2UKICAKICBNYWtlIHN1cmUgaXQgaXMgbWVudGlvbmVkIG9uY2UgYW5kIHdpdGggdGhlIGNvcnJlY3QgZGVzY3JpcHRpb24KCi0gLS1tYWlsLWF1dGggZG9jdW1lbnRlZAoKLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgU01UUDogQ29kZSBwb2xpY2luZyBhbmQgdGlkeSB1cAoKLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgY3VybDogQWRkZWQgc3VwcG9ydCBmb3IgLS1tYWlsLWF1dGgKICAKICBBZGRlZCBhbiBleHRyYSBjb21tYW5kLWxpbmUgYXJndW1lbnQgdG8gc3VwcG9ydCB0aGUgb3B0aW9uYWwgQVVUSAogIHBhcmFtZXRlciBpbiBTTVRQcyBNQUlMIEZST00gY29tbWFuZC4KCkthbWlsIER1ZGthICgxNiBGZWIgMjAxMikKLSBkb2NzOiBtZW50aW9uIHRoYXQgTlRMTSB3b3JrcyB3aXRoIE5TUywgdG9vCgpEYW5pZWwgU3RlbmJlcmcgKDE1IEZlYiAyMDEyKQotIFtTdGV2ZSBIb2xtZSBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBET0NTOiBBZGRlZCBpbmZvcm1hdGlvbiBmb3IgQ1VSTE9QVF9NQUlMX0FVVEguCiAgCiAgQWRkZWQgaW5mb3JtYXRpb24gcmVsYXRpbmcgdG8gdGhlIG5ldyBDVVJMT1BUX01BSUxfQVVUSCBwYXJhbWV0ZXIgYW5kCiAgcmV3b3JrZWQgQ1VSTE9QVF9NQUlMX0ZST00gYW5kIENVUkxPUFRfTUFJTF9SQ1BUIHRvIGJlIGEgY2xlYXJlci4KICAKICBGaXhlZCBpbmNvbnNpc3RlbmNpZXMgb2YgInZvY2FsaXNhdGlvbiBvZiB0aGUgYWJicmV2aWF0aW9uIiB2ZXJzdXMKICAidm9jYWxpc2F0aW9uIG9mIHRoZSBmaXJzdCB3b3JkIiBmb3IgYWxsIGFiYnJldmlhdGlvbnMuCiAgCiAgQ29ycmVjdGVkIGEgdHlwbyBpbiBDVVJMT1BUX05PUFJPWFkuCgotIFtTdGV2ZSBIb2xtZSBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBzbXRwLmM6IEZpeGVkIHVzZSBvZiBhbmdsZWQgYnJhY2tldHMgaW4gQVVUSCBwYXJhbWV0ZXIuCiAgCiAgRml4ZWQgdGhlIHVzZSBvZiBhbmdsZWQgYnJhY2tldHMgIjw+IiBpbiB0aGUgb3B0aW9uYWwgQVVUSCBwYXJhbWV0ZXIgYXMKICBwZXIgUkZDLTI1NTQgc2VjdGlvbiA1LiBUaGUgYWRkcmVzcyBzaG91bGQgbm90IGluY2x1ZGUgdGhlbSBidXQgYW4KICBlbXB0eSBhZGRyZXNzIHNob3VsZCBiZSByZXBsYWNlZCBieSB0aGVtLgoKLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgc210cF9tYWlsOiBBZGRlZCBzdXBwb3J0IHRvIE1BSUwgRlJPTSBmb3IgdGhlIG9wdGlvbmFsIEFVVEggcGFyYW1ldGVyCiAgCiAgQWRkZWQgYSBuZXcgQ1VSTE9QVF9NQUlMX0FVVEggb3B0aW9uIHRoYXQgYWxsb3dzIHRoZSBjYWxsaW5nIHByb2dyYW0gdG8KICBzZXQgdGhlIG9wdGlvbmFsIEFVVEggcGFyYW1ldGVyIGluIHRoZSBNQUlMIEZST00gY29tbWFuZC4KICAKICBXaGVuIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCBhbmQgYW4gYXV0aGVudGljYXRpb24gbWVjaGFuaXNtIGlzIHVzZWQKICB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBtYWlsIHNlcnZlciB0aGVuIHRoZSBBVVRIIHBhcmFtZXRlciB3aWxsIGJlCiAgaW5jbHVkZWQgaW4gdGhlIE1BSUwgRlJPTSBjb21tYW5kLiBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgd2hlbiB0aGUKICBjYWxsaW5nIHByb2dyYW0gaXMgYWN0aW5nIGFzIGEgcmVsYXkgaW4gYSB0cnVzdGVkIGVudmlyb25tZW50IGFuZAogIHBlcmZvcm1pbmcgc2VydmVyIHRvIHNlcnZlciBjb21tdW5pY2F0aW9uLCBhcyBpdCBhbGxvd3MgdGhlIHJlbGF5aW5nCiAgc2VydmVyIHRvIHNwZWNpZnkgdGhlIGFkZHJlc3Mgb2YgdGhlIG1haWxib3ggdGhhdCB3YXMgdXNlZCB0bwogIGF1dGhlbnRpY2F0ZSBhbmQgc2VuZCB0aGUgb3JpZ2luYWwgZW1haWwuCgotIFt0b2Rkb3Vza2EgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgY3lhc3NsOiB1cGRhdGUgdG8gQ3lhU1NMIDIuMC54IEFQSQogIAogIE1vZGlmeSBjb25maWd1cmUuYWMgdG8gdGVzdCBmb3IgbmV3IEN5YVNTTCBJbml0IGZ1bmN0aW9uIGFuZCByZW1vdmUKICBkZWZhdWx0IGluc3RhbGwgcGF0aCB0byBzeXN0ZW0uICBDaGFuZ2UgdG8gQ3lhU1NMIE9wZW5TU0wgaGVhZGVyIGFuZAogIHByb3BlciBJbml0IGluIGNvZGUgYXMgd2VsbC4KICAKICBOb3RlIHRoYXQgdGhpcyBubyBsb25nZXIgZGV0ZWN0cyBvciB3b3JrcyB3aXRoIEN5YVNTTCBiZWZvcmUgdjIKCi0gTElCQ1VSTF9WRVJTSU9OX05VTTogMHgwNzE5MDAKICAKICBJIGFjY2lkZW50YWxseSBsZWZ0IHRoZSBsb3dlc3QgYml0cyAwMSBiZWZvcmUKCi0gW1N0ZXZlIEhvbG1lIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIFNNVFA6IEZpeGVkIGVycm9yIHdoZW4gdXNpbmcgQ1VSTE9QVF9DT05ORUNUX09OTFkKICAKICBGaXhlZCBpbmNvcnJlY3QgYmVoYXZpb3IgaW4gc210cF9kb25lKCkgd2hpY2ggd291bGQgY2F1c2UgdGhlIGVuZCBvZgogIGJsb2NrIGRhdGEgdG8gYmUgc2VudCB0byB0aGUgU01UUCBzZXJ2ZXIgaWYgbGliY3VybCB3YXMgb3BlcmF0aW5nIGluCiAgY29ubmVjdCBvbmx5IG1vZGUuIFRoaXMgd291bGQgY2F1c2UgdGhlIHNlcnZlciB0byByZXR1cm4gYW4gZXJyb3IgYXMKICBkYXRhIHdvdWxkIG5vdCBiZSBleHBlY3RlZCB3aGljaCBpbiB0dXJuIGNhdXNlZCBsaWJjdXJsIHRvIHJldHVybgogIENVUkxFX1JFQ1ZfRVJST1IuCgotIHMvNy4yNC4xLzcuMjUuMAogIAogIFdlIHdpbGwgZ28gc3RyYWlnaHQgdG8gNy4yNS4wIGR1ZSB0byB0aGUgbmV3IGFkZGl0aW9ucwoKLSBjdXJsdmVyLmg6IGJ1bXBlZCB0byA3LjI1LjAKICAKICBhbmQgdXBkYXRlZCB0aGUgZW5kIHllYXIgaW4gdGhlIGdlbmVyaWMgY29weXJpZ2h0IHN0cmluZwoKLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCAyYjI2ZWI5ODUKICAKICA5IGJ1ZyBmaXhlcywgNCBjaGFuZ2VzIGFuZCBudW1lcm91cyBjb250cmlidXRvcnMKICAKICBCdW1wZWQgcmVsZWFzZSB2ZXJzaW9uIGFuZCBvcHRpb24gY291bnRlcnMKCi0gW0NvbGluIEhvZ2JlbiBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBjb25maWd1cmU6IGFkZCBvcHRpb24gZGlzYWJsZSAtLWxpYmN1cmwgb3V0cHV0CgotIFtBbGVzc2FuZHJvIEdoZWRpbmkgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgY3VybCB0b29sOiBhbGxvdyBuZWdhdGl2ZSBudW1iZXJzIGFzIG9wdGlvbiB2YWx1ZXMKICAKICBGaXggdGhlIHN0cjJudW0oKSBmdW5jdGlvbiB0byBub3QgY2hlY2sgaWYgdGhlIGlucHV0IHN0cmluZyBzdGFydHMgd2l0aCBhCiAgZGlnaXQsIHNpbmNlIHN0cnRvbCgpIHN1cHBvcnRzIG51bWJlcnMgcHJlcGVuZGVkIHdpdGggJy0nIChhbmQgJysnKSB0b28uCiAgVGhpcyBtYWtlcyB0aGUgLS1tYXgtcmVkaXJzIG9wdGlvbiB3b3JrIGFzIGRvY3VtZW50ZWQuCgotIHBhcnNlX3Byb3h5OiBzaW1wbHkgbWVtb3J5IGhhbmRsaW5nCiAgCiAgLi4uIGJ5IG1ha2luZyBzdXJlIHRoYXQgdGhlIHN0cmluZyBpcyBhbHdheXMgZnJlZWQgYWZ0ZXIgdGhlIGludm9rZSBhcwogIHBhcnNlX3Byb3h5IHdpbGwgYWx3YXlzIGNvcHkgdGhlIGRhdGEgYW5kIHRoaXMgd2F5IHRoZXJlJ3MgYSBzaW5nbGUKICBmcmVlKCkgaW5zdGVhZCBvZiBtdWx0aXBsZSBvbmVzLgoKLSBwYXJzZV9wcm94eTogYmFpbCBvdXQgb24gemVyby1sZW5ndGggcHJveHkgbmFtZXMhCiAgCiAgVGhlIHByb3h5IHBhcnNlciBmdW5jdGlvbiBzdHJpcHMgb2ZmIHRyYWlsaW5nIHNsYXNoZXMgb2ZmIHRoZSBwcm94eSBuYW1lCiAgd2hpY2ggY291bGQgbGVhZCB0byBhIG1pc3Rha2VuIHplcm8gbGVuZ3RoIHByb3h5IG5hbWUgd2hpY2ggd291bGQgYmUKICB0cmVhdGVkIGFzIG5vIHByb3h5IGF0IGFsbCBieSBzdWJzZXF1ZW50IGZ1bmN0aW9ucyEKICAKICBUaGlzIGlzIG5vdyBkZXRlY3RlZCBhbmQgYW4gZXJyb3IgaXMgcmV0dXJuZWQuIFZlcmlmaWVkIGJ5IHRoZSBuZXcgdGVzdAogIDEzMjkuCiAgCiAgUmVwb3J0ZWQgYnk6IENoYW5kcmFrYW50IEJhZ3VsCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTItMDIvMDAwMC5odG1sCgpLYW1pbCBEdWRrYSAoOSBGZWIgMjAxMikKLSBuc3M6IGFkZCBzdXBwb3J0IGZvciB0aGUgQ1VSTFNTTE9QVF9BTExPV19CRUFTVCBvcHRpb24KICAKICAuLi4gYW5kIGZpeCBzb21lIHR5cG9zIGZyb20gdGhlIDYyZDE1ZjEgY29tbWl0LgoKRGFuaWVsIFN0ZW5iZXJnICg5IEZlYiAyMDEyKQotIFtSb2IgV2FyZCBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBjb25maWd1cmU6IGRvbid0IG1vZGlmeSBMRF9MSUJSQVJZX1BBVEggZm9yIGNyb3NzIGNvbXBpbGVzCgotIC0tc3NsLWFsbG93LWJlYXN0IGFkZGVkCiAgCiAgVGhpcyBuZXcgb3B0aW9uIHRlbGxzIGN1cmwgdG8gbm90IHdvcmsgYXJvdW5kIGEgc2VjdXJpdHkgZmxhdyBpbiB0aGUKICBTU0wzIGFuZCBUTFMxLjAgcHJvdG9jb2xzLiBJdCB1c2VzIHRoZSBuZXcgbGliY3VybCBvcHRpb24KICBDVVJMT1BUX1NTTF9PUFRJT05TIHdpdGggdGhlIENVUkxTU0xPUFRfQUxMT1dfQkVBU1QgYml0IHNldC4KCi0gQ1VSTE9QVF9TU0xfT1BUSU9OUzogYWRkZWQKICAKICBBbGxvdyBhbiBhcHBsaWN0aW9uIHRvIHNldCBsaWJjdXJsIHNwZWNpZmljIFNTTCBvcHRpb25zLiBUaGUgZmlyc3QgYW5kCiAgb25seSBvcHRpb25zIHN1cHBvcnRlZCByaWdodCBub3cgaXMgQ1VSTFNTTE9QVF9BTExPV19CRUFTVC4KICAKICBJdCB3aWxsIG1ha2UgbGliY3VybCB0byBkaXNhYmxlIGFueSB3b3JrLWFyb3VuZHMgdGhlIHVuZGVybHlpbmcgU1NMCiAgbGlicmFyeSBtYXkgaGF2ZSB0byBhZGRyZXNzIGEga25vd24gc2VjdXJpdHkgZmxhdyBpbiB0aGUgU1NMMyBhbmQgVExTMS4wCiAgcHJvdG9jb2wgdmVyc2lvbnMuCiAgCiAgVGhpcyBpcyBhIHJlYWN0aW9uIHRvIHVzIHVuY29uZGl0aW9uYWxseSByZW1vdmluZyB0aGF0IGJlaGF2aW9yIGFmdGVyCiAgdGhpcyBzZWN1cml0eSBhZHZpc29yeToKICAKICBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvYWR2XzIwMTIwMTI0Qi5odG1sCiAgCiAgLi4uIGl0IGRpZCBob3dldmVyIGNhdXNlIGEgbG90IG9mIHByb2dyYW1zIHRvIGZhaWwgYmVjYXVzZSBvZiBvbGQKICBzZXJ2ZXJzIG5vdCBsaWtpbmcgdGhpcyB3b3JrLWFyb3VuZC4gTm93IHByb2dyYW1zIGNhbiBvcHQgdG8gZGVjcmVhc2UKICB0aGUgc2VjdXJpdHkgaW4gb3JkZXIgdG8gaW50ZXJvcGVyYXRlIHdpdGggb2xkIHNlcnZlcnMgYmV0dGVyLgoKLSBbRGF2ZSBSZWlzbmVyIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIGN1cmw6IHVzZSBuZXcgbGlicmFyeS1zaWRlIFRDUF9LRUVQQUxJVkUgb3B0aW9ucwogIAogIFVzZSB0aGUgbmV3IGxpYnJhcnkgQ1VSTE9QVF9UQ1BfS0VFUEFMSVZFIHJhdGhlciB0aGFuIGRpc2FibGluZyB0aGlzIHZpYQogIHRoZSBzb2Nrb3B0IGNhbGxiYWNrLiBJZiAtLWtlZXBhbGl2ZS10aW1lIGlzIHVzZWQsIGFwcGx5IHRoZSB2YWx1ZSB0bwogIENVUkxPUFRfVENQX0tFRVBJRExFIGFuZCBDVVJMT1BUX1RDUF9LRUVQSU5UVkwuCgotIFtEYXZlIFJlaXNuZXIgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgYWRkIGxpYnJhcnkgc3VwcG9ydCBmb3IgdHVuaW5nIFRDUF9LRUVQQUxJVkUKICAKICBUaGlzIGFkZHMgdGhyZWUgbmV3IG9wdGlvbnMgdG8gY29udHJvbCB0aGUgYmVoYXZpb3Igb2YgVENQIGtlZXBhbGl2ZXM6CiAgCiAgLSBDVVJMT1BUX1RDUF9LRUVQQUxJVkU6IGVuYWJsZS9kaXNhYmxlIHByb2JlcwogIC0gQ1VSTE9QVF9UQ1BfS0VFUElETEU6IGlkbGUgdGltZSBiZWZvcmUgc2VuZGluZyBmaXJzdCBwcm9iZQogIC0gQ1VSTE9QVF9UQ1BfS0VFUElOVFZMOiBkZWxheSBiZXR3ZWVuIHN1Y2Nlc3NpdmUgcHJvYmVzCiAgCiAgV2hpbGUgbm90IGFsbCBvcGVyYXRpbmcgc3lzdGVtcyBzdXBwb3J0IHRoZSBUQ1BfS0VFUElETEUgYW5kCiAgVENQX0tFRVBJTlRWTCBrbm9icywgdGhlIGxpYnJhcnkgd2lsbCBzdGlsbCBhbGxvdyB0aGVzZSBvcHRpb25zIHRvIGJlCiAgc2V0IGJ5IGNsaWVudHMsIHNpbGVudGx5IGlnbm9yaW5nIHRoZSB2YWx1ZXMuCgotIGN1cmxfZWFzeV9yZXNldDogcmVzZXQgdGhlIHJlZmVyZXIgc3RyaW5nCiAgCiAgV2hlbiBDVVJMT1BUX1JFRkVSRVIgaGFzIGJlZW4gdXNlZCwgY3VybF9lYXN5X3Jlc2V0KCkgZGlkIG5vdCBwcm9wZXJseQogIGNsZWFyIGl0LgogIAogIFZlcmlmaWVkIHdpdGggdGhlIG5ldyB0ZXN0IDU5OAogIAogIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MzQ4MTU1MQogIFJlcG9ydGVkIGJ5OiBNaWNoYWVsIERheQoKWWFuZyBUc2UgKDcgRmViIDIwMTIpCi0gY3VybCB0b29sOiBhbGxvdyBnbG9iLWxvb3BzIHRvIGFib3J0IGFnYWluIHVwb24gY3JpdGljYWwgZXJyb3JzCiAgCiAgVGhpcyBwcmV2ZW50cyBjbG9iYmVyaW5nIG9mIG5vbiByZWNvdmVyYWJsZSBlcnJvciByZXR1cm4gY29kZXMgd2hpbGUKICByZXRhaW5pbmcgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSBvZiBjb21taXQgNjUxMDNlZmUKCkRhbmllbCBTdGVuYmVyZyAoNiBGZWIgMjAxMikKLSBjdXJsIHRvb2w6IGRvbid0IGFib3J0IGdsb2ItbG9vcCBkdWUgdG8gZmFpbHVyZXMKICAKICBXZSB3YW50IHRvIGNvbnRpbnVlIHRvIHRoZSBuZXh0IFVSTCB0byB0cnkgZXZlbiBvbiBmYWlsdXJlcyByZXR1cm5lZAogIGZyb20gbGliY3VybC4gVGhpcyBtYWtlcyAtZiB3aXRoIHJhbmdlcyBzdGlsbCBnZXQgc3Vic2VxdWVudCBVUkxzIGV2ZW4KICBpZiBvY2Nhc2lvbmFsIG9uZXMgcmV0dXJuIGVycm9yLiBUaGlzIHdhcyBhIHJlZ3Jlc3Npb24gYXMgaXQgdXNlZCB0bwogIHdvcmsgYW5kIGJyb2tlIGluIHRoZSA3LjIzLjAgcmVsZWFzZS4KICAKICBBZGRlZCB0ZXN0IGNhc2UgMTMyOCB0byB2ZXJpZnkgdGhlIGZpeC4KICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTM0ODEyMjMKICBSZXBvcnRlZCBieTogSnVhbiBCYXJyZXRvCgotIENPTk5FQ1Q6IHNlbmQgY29ycmVjdCBIb3N0OiB3aXRoIElQdjYgbnVtZXJpY2FsIGFkZHJlc3MKICAKICBXaGVuIHRoZSB0YXJnZXQgaG9zdCB3YXMgZ2l2ZW4gYXMgYSBJUHY2IG51bWVyaWNhbCBhZGRyZXNzLCBpdCB3YXMgbm90CiAgcHJvcGVybHkgcHV0IHdpdGhpbiBzcXVhcmUgYnJhY2tldHMgZm9yIHRoZSBIb3N0OiBoZWFkZXIgaW4gdGhlIENPTk5FQ1QKICByZXF1ZXN0LiBUaGUgIm5vcm1hbCIgcmVxdWVzdCBkaWQgZmluZS4KICAKICBSZXBvcnRlZCBieTogInpvb2xvbyIKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTM0ODIwOTMKCi0gW01hcnRpbiBTdG9yc2pvIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIEV4cGxpY2l0bHkgbGluayB0byB0aGUgbmV0dGxlL2djcnlwdCBsaWJyYXJpZXMKICAKICBXaGVuIHN1cHBvcnQgZm9yIG5ldHRsZSB3YXMgYWRkZWQgaW4gNjRmMzI4Yzc4N2FiLCBJIG92ZXJsb29rZWQKICB0aGUgZmFjdCB0aGF0IEFDX0NIRUNLX0xJQiBkb2Vzbid0IGFkZCB0aGUgdGVzdGVkIGxpYiB0byBMSUJTCiAgaWYgdGhlIGNoZWNrIHN1Y2NlZWRlZCwgaWYgYSBjdXN0b20gc3VjY2VzcyBjb2RlIGJsb2NrIHdhcyBwcmVzZW50LgogIChUaGUgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgY2hlY2sgaGFkIGFuIGVtcHR5IGJsb2NrIGZvcgogIHN1Y2Nlc3NmdWwgY2hlY2tzLCBhZGRpbmcgdGhlIGxpYiB0byBMSUJTIGltcGxpY2l0bHkuKQogIAogIFRoZXJlZm9yZSwgZXhwbGljaXRseSBhZGQgZWl0aGVyIG5ldHRsZSBvciBnY3J5cHQgdG8gTElCUywgYWZ0ZXIKICBkZWNpZGluZyB3aGljaCBvbmUgdG8gdXNlLiBFdmVuIGlmIHRoZXkgY2FuIGJlIGxpbmtlZCBpbgogIHRyYW5zaXRpdmVseSwgaXQgaXMgc2FmZXIgdG8gYWN0dWFsbHkgbGluayBleHBsaWNpdGx5IHRvIHRoZW0uCiAgCiAgVGhpcyBmaXhlcyBidWlsZGluZyB3aXRoIGdudXRscyB3aXRoIGxpbmtlcnMgdGhhdCBkb24ndCBhbGxvdwogIGxpbmtpbmcgdHJhbnNpdGl2ZWx5LCBzdWNoIGFzIGZvciB3aW5kb3dzLgoKLSBbUGllcnJlIFluYXJkIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIG1vcmUgcmVzaWxpZW50IGNvbm5lY3Rpb24gdGltZXMgYW1vbmcgSVAgYWRkcmVzc2VzCiAgCiAgV2hlbiBjb25uZWN0aW5nIHRvIGEgZG9tYWluIHdpdGggbXVsdGlwbGUgSVAgYWRkcmVzc2VzLCBhbGxvdyBkaWZmZXJlbnQsCiAgZGVjcmVhc2luZyBjb25uZWN0aW9uIHRpbWVvdXQgdmFsdWVzLiBUaGlzIHNob3VsZCBndWFyYW50ZWUgc29tZQogIGNvbm5lY3Rpb25zIGF0dGVtcHRzIHdpdGggc3VmZmljaWVudGx5IGxvbmcgdGltZW91dHMsIHdoaWxlIHN0aWxsCiAgcHJvdmlkaW5nIGZhbGxiYWNrLgoKLSBbUGllcnJlIFluYXJkIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIHJlbW92ZSB3cml0ZS1vbmx5IHZhcmlhYmxlCgpQaWVycmUgSm95ZSAoMjYgSmFuIDIwMTIpCi0gTWVyZ2UgYnJhbmNoICdtYXN0ZXInIG9mIGdpdGh1Yi5jb206YmFnZGVyL2N1cmwKCi0gLSBmaXggSVBWNiBhbmQgSUROIG9wdGlvbnMKCllhbmcgVHNlICgyNSBKYW4gMjAxMikKLSBUT0RPLVJFTEVBU0U6IGFkZGVkIGl0ZW0gIzMwOAoKRGFuaWVsIFN0ZW5iZXJnICgyNSBKYW4gMjAxMikKLSBUSEFOS1M6IGltcG9ydGVkIGNvbnRyaWJ1dG9ycyBmcm9tIDcuMjQuMCBSRUxFQVNFLU5PVEVTCgpZYW5nIFRzZSAoMjUgSmFuIDIwMTIpCi0gdGVzdCBoYXJuZXNzOiB1cGRhdGUgc3R1bm5lbC5wZW0gRGlmZmllLUhlbGxtYW4gcGFyYW1ldGVycyBmcm9tIDUxMiB0byAxMDI0IGJpdAoKLSB2ZXJzaW9uOiBzdGFydCB3b3JraW5nIG9uIDcuMjQuMS1ERVYKCkRhbiBGYW5kcmljaCAoMjQgSmFuIDIwMTIpCi0gY3VybF9lYXN5X3NldG9wdC4zOiBGaXhlZCBTRUVLREFUQSAmIENMT1NFU09DS0VUREFUQSBkZXNjcmlwdGlvbnMKClZlcnNpb24gNy4yNC4wICgyNCBKYW4gMjAxMikKCkRhbmllbCBTdGVuYmVyZyAoMjQgSmFuIDIwMTIpCi0gUkVMRUFTRS1OT1RFUzogc3luY2VkIHdpdGggNzBmNzFiYjk5ZjdlZDkKClZlcnNpb24gNy4yNC4wICgyNCBKYW4gMjAxMikKICAKClZlcnNpb24gNy4yNC4wICgyNCBKYW4gMjAxMikKICBTeW5jZWQgYW5kIHByZXBhcmVkIGZvciA3LjI0LjAgcmVsZWFzZS4gVHdvIHNlY3VyaXR5IHByb2JsZW1zLCBvbmUgYnVnIGZpeCwKClZlcnNpb24gNy4yNC4wICgyNCBKYW4gMjAxMikKICB0d28gbW9yZSBjb250cmlidXRvcnMuCgotIGdudXRsczogZW5mb3JjZWQgdXNlIG9mIFNTTHYzCiAgCiAgV2l0aCBhZHZpY2UgZnJvbSBOaWtvcyBNYXZyb2dpYW5ub3BvdWxvcywgY2hhbmdlZCB0aGUgcHJpb3JpdHkgc3RyaW5nIHRvCiAgYWRkICJhY3R1YWwgcHJpb3JpdGllcyIgYW5kIGZhdm91ciBBUkNGT1VSLiBUaGlzIG1ha2VzIGxpYmN1cmwgd29yawogIGJldHRlciB3aGVuIGVuZm9yY2luZyBTU0x2MyB3aXRoIEdudVRMUy4gQm90aCBpbiB0aGUgc2Vuc2UgdGhhdCB0aGUKICBsaWJtaWNyb2h0dHBkIHRlc3QgaXMgbm93IHdvcmtpbmcgYWdhaW4gYnV0IGFsc28gdGhhdCBpdCBtaXRpZ2F0ZXMgYQogIHdlYWtuZXNzIGluIHRoZSBvbGRlciBTU0wvVExTIHByb3RvY29scy4KICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMi0wMS8wMjI1Lmh0bWwKICBSZXBvcnRlZCBieTogQ2hyaXN0aWFuIEdyb3Rob2ZmCgotIHRlc3RzOiB0ZXN0IENSTEYgaW4gVVJMcwogIAogIFJlbGF0ZWQgdG8gdGhlIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHk6IENWRS0yMDEyLTAwMzYKICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9hZHZfMjAxMjAxMjQuaHRtbAoKLSBVUkwgc2FuaXRpemU6IHJlamVjdCBVUkxzIGNvbnRhaW5pbmcgYmFkIGRhdGEKICAKICBQcm90b2NvbHMgKElNQVAsIFBPUDMgYW5kIFNNVFApIHRoYXQgdXNlIHRoZSBwYXRoIHBhcnQgb2YgYSBVUkwgaW4gYQogIGRlY29kZWQgbWFubmVyIG5vdyB1c2UgdGhlIG5ldyBDdXJsX3VybGRlY29kZSgpIGZ1bmN0aW9uIHRvIHJlamVjdCBVUkxzCiAgd2l0aCBlbWJlZGRlZCBjb250cm9sIGNvZGVzIChhbnl0aGluZyB0aGF0IGlzIG9yIGRlY29kZXMgdG8gYSBieXRlIHZhbHVlCiAgbGVzcyB0aGFuIDMyKS4KICAKICBVUkxzIGNvbnRhaW5pbmcgc3VjaCBjb2RlcyBjb3VsZCBlYXNpbHkgb3RoZXJ3aXNlIGJlIHVzZWQgdG8gZG8gaGFybSBhbmQKICBhbGxvdyB1c2VycyB0byBkbyB1bmludGVuZGVkIGFjdGlvbnMgd2l0aCBvdGhlcndpc2UgaW5ub2NlbnQgdG9vbHMgYW5kCiAgYXBwbGljYXRpb25zLiBMaWtlIGZvciBleGFtcGxlIHVzaW5nIGEgVVJMIGxpa2UKICBwb3AzOi8vcG9wMy5leGFtcGxlLmNvbS8xJTBkJTBhREVMRSUyMDEgd2hlbiB0aGUgYXBwIHdhbnRzIGEgVVJMIHRvIGdldAogIGEgbWFpbCBhbmQgaW5zdGVhZCB0aGlzIHdvdWxkIGRlbGV0ZSBvbmUuCiAgCiAgVGhpcyBmbGF3IGlzIGNvbnNpZGVyZWQgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5OiBDVkUtMjAxMi0wMDM2CiAgCiAgU2VjdXJpdHkgYWR2aXNvcnkgYXQ6IGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9hZHZfMjAxMjAxMjQuaHRtbAogIAogIFJlcG9ydGVkIGJ5OiBEYW4gRmFuZHJpY2gKCi0gT3BlblNTTDogZG9uJ3QgZGlzYWJsZSBzZWN1cml0eSB3b3JrLWFyb3VuZAogIAogIE9wZW5TU0wgYWRkZWQgYSB3b3JrLWFyb3VuZCBmb3IgYSBTU0wgMy4wL1RMUyAxLjAgQ0JDIHZ1bG5lcmFiaWxpdHkKICAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+Ym9kby90bHMtY2JjLnR4dCkuIEluIDAuOS42ZSB0aGV5IGFkZGVkIGEgYml0CiAgdG8gU1NMX09QX0FMTCB0aGF0IF9kaXNhYmxlc18gdGhhdCB3b3JrLWFyb3VuZCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQKICBTU0xfT1BfQUxMIGlzIGRvY3VtZW50ZWQgdG8gZG8gInJhdGhlciBoYXJtbGVzcyIgd29ya2Fyb3VuZHMuCiAgCiAgVGhlIGxpYmN1cmwgY29kZSB1c2VzIHRoZSBTU0xfT1BfQUxMIGRlZmluZSBhbmQgdGh1cyBsb2dpY2FsbHkgYWx3YXlzCiAgZGlzYWJsZXMgdGhlIE9wZW5TU0wgZml4LgogIAogIEluIG9yZGVyIHRvIGtlZXAgdGhlIHNlY3VyZSB3b3JrLWFyb3VuZCB3b3JrZGluZywgdGhlCiAgU1NMX09QX0RPTlRfSU5TRVJUX0VNUFRZX0ZSQUdNRU5UUyBiaXQgbXVzdCBub3QgYmUgc2V0IGFuZCB0aGlzIGNoYW5nZQogIG1ha2VzIHN1cmUgb2YgdGhpcy4KICAKICBSZXBvcnRlZCBieTogcHJvZHVjdC1zZWN1cml0eSBhdCBBcHBsZQoKLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCA2ZTJmZDJjOWVhCiAgCiAgMyBtb3JlIGJ1Z2ZpeGVzLCAzIG1vcmUgY29udHJpYnV0b3JzCgotIENVUkxPUFRfQUNDRVBUVElNRU9VVF9NUzogc3BlbGxmaXgKCkRhbiBGYW5kcmljaCAoMjAgSmFuIDIwMTIpCi0gZXhhbXBsZXM6IHVwZGF0ZWQgUkVBRE1FIHdpdGggdHdvIG5ldyBleGFtcGxlIHByb2dyYW1zCgpEYW5pZWwgU3RlbmJlcmcgKDIwIEphbiAyMDEyKQotIFVSTCBwYXJzZTogdXNlciBuYW1lIHdpdGggaXB2NiBudW1lcmljYWwgYWRkcmVzcwogIAogIFVzaW5nIGEgVVJMIHdpdGggZW1iZWRkZWQgdXNlciBuYW1lIGFuZCBwYXNzd29yZCBkaWRuJ3Qgd29yayBpZiB0aGUgaG9zdAogIHdhcyBnaXZlbiBhcyBhIG51bWVyaWNhbCBJUHY2IHN0cmluZywgbGlrZSBmdHA6Ly91c2VyOnBhc3N3b3JkQFs6OjFdLwogIAogIFJlcG9ydGVkIGJ5OiBCcmFuZG9uIFdhbmcKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9hcmNoaXZlLTIwMTItMDEvMDA0Ny5odG1sCgpZYW5nIFRzZSAoMjAgSmFuIDIwMTIpCi0gdGVsbmV0LmM6IGZpeCBPT00gdHJpZ2dlcmVkIHNlZ2ZhdWx0CgotIHRlc3R0cmFjZS5jOiBmaXggY29tcGlsZXIgd2FybmluZwoKLSBPcGVuU1NMOiBmb2xsb3ctdXAgZm9yIGNvbW1pdCBhMjBkYWY5MGUzCiAgCiAgYXZvaWQgY2hlY2tpbmcgcHJlcHJvY2Vzc29yIGRlZmluaXRpb24gb2ZmaWNpYWwgdmFsdWUKClBpZXJyZSBKb3llICgxOSBKYW4gMjAxMikKLSAtIHMsIHVzZSwgZW5hYmxlLCBmb3Igb3B0aW9ucyBuYW1lLCBhdm9pZGluZyBjb25mbGljdHMgd2l0aCB0aGUgbmFtZXMgdXNlZCBpbiB0aGUgbWFrZWZpbGUKCkRhbmllbCBTdGVuYmVyZyAoMTkgSmFuIDIwMTIpCi0gY3VybC4xOiBpbXByb3ZlIC0tc3RkZXJyIHdvcmRpbmcKICAKICBBcyBpcyBwb2ludGVkIG91dCBpbiB0aGlzIGJ1ZyByZXBvcnQsIHRoZXJlIGNhbiBpbmRlZWQgYmUgc2l0dWF0aW9uCiAgd2hlcmUgLS1zdGRlcnIgaGFzIGEgcG9pbnQgZXZlbiB3aGVuIHRoZSAicmVhbCIgc3RkZXJyIGNhbiBiZQogIHJlZGlyZWN0ZWQuIFJlbW92ZSB0aGUgc3VwZXJmbHVvdXMgYW5kIHdyb25nIGNvbW1lbnQuCiAgCiAgYnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zNDc2MDIwCgotIEtOT1dOX0JVR1M6IGNhbid0IHJlY2VpdmUgemVybyBieXRlcyBmaWxlIHByb3Blcmx5CiAgCiAgaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MzQzODM2MgoKWWFuZyBUc2UgKDE4IEphbiAyMDEyKQotIHNzbCBzZXNzaW9uIGNhY2hpbmc6IGZpeCBjb21waWxlciB3YXJuaW5ncwoKRGFuaWVsIFN0ZW5iZXJnICgxOCBKYW4gMjAxMikKLSBwb2xhcnNzbDogc2hvdyBjaXBoZXIgc3VpdGUgbmFtZSBjb3JyZWN0bHkgd2l0aCAxLjEuMAogIAogIEFwcGFyZW50bHkgc3NsX2dldF9jaXBoZXJzdWl0ZSgpIGlzIG5lZWRlZCB0byBnZXQgdGhlIG5hbWUgb2YgdGhlIHVzZWQKICBjaXBoZXIgc3VpdGUuCgotIHBvbGFyc3NsOiBzaG93IGVycm9yIGNvZGUgY29ycmVjdGx5CiAgCiAgVGhlIHZhbHVlIHdhcyB0dXJuZWQgbmVnYXRpdmUgd2hlbiBpdCBzaG91bGRuJ3QgaGF2ZSBiZWVuCgotIHBvbGFyc3NsOiBoYXZlZ2VfcmFuZCBpcyBub3QgcHJlc2VudCBpbiB2ZXJzaW9uIDEuMS4wCiAgCiAgLi4uIGl0IGlzIG5vdyBuYW1lZCBoYXZlZ2VfcmFuZG9tIQogIAogIFJlcG9ydGVkIGJ5OiBSb2JlcnQgU2NodW1hbm4KICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMi0wMS8wMTc4Lmh0bWwKCi0gUkVMRUFTRS1OT1RFUzogc3luY2VkIHdpdGggNWQ3MGE2MWI5NDYwNAogIAogIDUgbW9yZSBidWcgZml4ZXMsIDEgbW9yZSBjb250cmlidXRvcgoKLSBbQ29saW4gSG9nYmVuIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIEFkZCB0d28gdGVzdHMgZm9yIHRlbG5ldDogVVJMcwogIAogIEFkZCBzaW1wbGUgdGVsbmV0IHRlc3RzIHdoaWNoIChhYil1c2UgdGhlIGh0dHAgc2VydmVyLgogIFRoZSBzZWNvbmQgdGVzdCBjaGVja3MgZm9yIGFuIGlucHV0IGZpbGUgaGFuZGxpbmcgYnVnLgoKLSBbQ29saW4gSG9nYmVuIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIFJlbW92ZSBib2d1cyBvcHRpbWlzYXRpb24gb2YgdGVsbmV0IHVwbG9hZC4KICAKICBSZW1vdmUgd3JvbmdseSBpbXBsZW1lbnRlZCBvcHRpbWlzYXRpb24gb2YgdGVsbmV0IHVwbG9hZCwgYXBwYXJlbnRseQogIGludGVuZGVkIHRvIGFsbG93IHRoZSBsaWJyYXJ5IHRvIGF2b2lkIG1hbnVhbGx5IHBvbGxpbmcgZm9yIGlucHV0LgoKLSBbQ29saW4gSG9nYmVuIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIFVzZSBjb3JyZWN0IGZpbGUgZGVzY3JpcHRvciBmb3IgdGVsbmV0IHVwbG9hZC4KICAKICBGaXggYSBidWcgd2hlcmUgaW5wdXQgd2FzIHJlYWQgZnJvbSBzdGRpbiBldmVuIHdoZW4gYSBkaWZmZXJlbnQgRklMRSAqCiAgaGFkIGJlZW4gY29uZmlndXJlZCB2aWEgQ1VSTE9QVF9SRUFEREFUQQoKWWFuZyBUc2UgKDE4IEphbiAyMDEyKQotIE9wZW5MREFQOiBmaXggTERBUCBjb25uZWN0aW9uIHBoYXNlIG1lbW9yeSBsZWFrCiAgCiAgYnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zNDc0MzA4CgotIFtKb2hhbm5lcyBCYXVlciBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBPcGVuU1NMOiBmaXggUEtDUyMxMiBjZXJ0aWZpY2F0ZSBwYXJzaW5nIHJlbGF0ZWQgbWVtb3J5IGxlYWsKICAKICBMZWFrIHRyaWdnZXJlZCB3aGVuIENVUkxPUFRfU1NMQ0VSVFRZUEUgYW5kIENVUkxPUFRfU1NMS0VZVFlQRSBzZXQgdG8gUDEyCiAgYW5kIGJvdGggQ1VSTE9QVF9TU0xDRVJUIGFuZCBDVVJMT1BUX1NTTEtFWSBwb2ludCB0byB0aGUgc2FtZSBQS0NTIzEyIGZpbGUuCgotIE9wZW5TU0w6IFNTTF9PUF9ORVRTQ0FQRV9SRVVTRV9DSVBIRVJfQ0hBTkdFX0JVRyBvcHRpb24gaXMgbm8gbG9uZ2VyIGVuYWJsZWQKICAKICBTU0xfT1BfTkVUU0NBUEVfUkVVU0VfQ0lQSEVSX0NIQU5HRV9CVUcgb3B0aW9uIGVuYWJsaW5nIGFsbG93ZWQgc3VjY2Vzc2Z1bGwKICBpbnRlcm9wZXJhYmlsaXR5IHdpdGggd2ViIHNlcnZlciBOZXRzY2FwZSBFbnRlcnByaXNlIFNlcnZlciAyLjAuMSByZWxlYXNlZAogIGJhY2sgaW4gMTk5NiBtb3JlIHRoYW4gMTUgeWVhcnMgYWdvLgogIAogIER1ZSB0byBDVkUtMjAxMC00MTgwLCBvcHRpb24gU1NMX09QX05FVFNDQVBFX1JFVVNFX0NJUEhFUl9DSEFOR0VfQlVHIGhhcwogIGJlY29tZSBpbmVmZmVjdGl2ZSBhcyBvZiBPcGVuU1NMIDAuOS44cSBhbmQgMS4wLjBjLiBJbiBvcmRlciB0byBtaXRpZ2F0ZQogIENWRS0yMDEwLTQxODAgd2hlbiB1c2luZyBwcmV2aW91cyBPcGVuU1NMIHZlcnNpb25zIHdlIG5vIGxvbmdlciBlbmFibGUKICB0aGlzIG9wdGlvbiByZWdhcmRsZXNzIG9mIE9wZW5TU0wgdmVyc2lvbiBhbmQgU1NMX09QX0FMTCBkZWZpbml0aW9uLgoKLSB0ZXN0czogZW5hYmxlIHRpbWUgdHJhY2luZyBvbiB0ZXN0cyA1MDAsIDU3MyBhbmQgNTg1CgotIHRlc3RzOiB0ZXN0dHJhY2UuW2NoXSBwcm92aWRlcyBkZWJ1ZyBjYWxsYmFjayBmb3IgbGlidGVzdCB1c2FnZQogIAogIEFsbG93cyB0ZXN0cyBmcm9tIHRoZSBsaWJ0ZXN0IHN1YmRpciB0byBnZW5lcmF0ZSBsb2cgdHJhY2VzCiAgc2ltaWxhciB0byB0aG9zZSBvZiBjdXJsIHdpdGggLS10cmFjZXRpbWUgYW5kIC0tdHJhY2UtYXNjaWkKICBvcHRpb25zIGJ1dCB3aXRoIG91dHB1dCBnb2luZyB0byBzdGRlcnIuCgotIHN3cy5jOiBmaXggcHJveHkgbW9kZSBzZWNvbmRhcnkgY29ubmVjdGlvbiBtb25pdG9yaW5nIGNvbmRpdGlvbgoKLSBhZGQgTEYgdGVybWluYXRpb24gdG8gaW5mb2YoKSB0cmFjZSBzdHJpbmcKCi0gc3dzLmM6IGltcHJvdmUgcHJveHkgbW9kZSB0b3J0dXJlIHRlc3Rpbmcgc3VwcG9ydCAtIGZvbGxvd3VwIHRvIDE4YzZjOGE1CgpEYW5pZWwgU3RlbmJlcmcgKDE2IEphbiAyMDEyKQotIHVybDJmaWxlOiBuZXcgc2ltcGxlIGV4YW1wbGUKICAKICBKdXN0IHNob3dpbmcgaG93IHRvIGRvd25sb2FkIHRoZSBjb250ZW50cyBvZiBhIGdpdmVuIFVSTCBpbnRvIGEgbG9jYWwKICBmaWxlLgogIAogIEJhc2VkIG9uIGEgc3VnZ2VzdGlvbiBhbmQgZXhhbXBsZSBjb2RlIGJ5IEdlb3JnIFBvdHRoYXN0CgotIGltYXAuYzogYSBkZWFkIHNpbXBsZSBpbWFwIGV4YW1wbGUKICAKICBKdXN0IHRvIHNob3cgdGhhdCBJTUFQIGlzIHVzZWQganVzdCBsaWtlIG90aGVyIHByb3RvY29scwoKWWFuZyBUc2UgKDE2IEphbiAyMDEyKQotIHN3cy5jOiBpbXByb3ZlIHByb3h5IG1vZGUgdG9ydHVyZSB0ZXN0aW5nIHN1cHBvcnQgLSBmb2xsb3d1cCB0byBjNzMxZmM1OAoKLSBzd3MuYzogaW1wcm92ZSBwcm94eSBtb2RlIHRvcnR1cmUgdGVzdGluZyBzdXBwb3J0IC0gZm9sbG93dXAgdG8gZDRiZjg3ZGMKCi0gQ3VybF9wcm94eUNPTk5FQ1QoKSB0cmFjZSBrbm93biBidWcgIzM5CgpEYW5pZWwgU3RlbmJlcmcgKDE0IEphbiAyMDEyKQotIHRlc3Q6IHZlcmlmeSBIVFRQIHJlc3BvbnNlIGNvZGUgMzA4CiAgCiAgVGhpcyBuZXdseSBzcGVjZWQgSFRUUCBzdGF0dXMgY29kZSBhbHJlYWR5IHdvcmtzIGFzIGludGVuZGVkIGluIHRoZSBuZXcKICBzcGVjOgogIGh0dHA6Ly9ncmVlbmJ5dGVzLmRlL3RlY2gvd2ViZGF2L2RyYWZ0LXJlc2Noa2UtaHR0cC1zdGF0dXMtMzA4LTAyLmh0bWwKICAKICBUZXN0IDEzMjUgaXMgYWRkZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIG1ldGhvZCBpcyBrZXB0IGFmdGVyIHRoZSByZWRpcmVjdAoKWWFuZyBUc2UgKDEzIEphbiAyMDEyKQotIGh0dHBfbmVnb3RpYXRlX3NzcGkuYzogZml4IGNvbXBpbGVyIHdhcm5pbmcKCi0gc3NoLmM6IGZpeCBjb21waWxlciB3YXJuaW5nCgotIHN3cy5jOiBpbXByb3ZlIHByb3h5IG1vZGUgdG9ydHVyZSB0ZXN0aW5nIHN1cHBvcnQKCkRhbmllbCBTdGVuYmVyZyAoMTIgSmFuIDIwMTIpCi0gUkVMRUFTRS1OT1RFUzogc3luY2VkIHdpdGggOWYyMDM3OWZlNAogIAogIDUgYnVnIGZpeGVzLCAzIG1vcmUgY29udHJpYnV0b3JzCgotIGhvc3RpcDogYXZvaWQgZ2V0YWRkcmluZm8gd2hlbiBjLWFyZXMgaXMgdXNlZAogIAogIFNvbWUgZnVuY3Rpb25zIHVzaW5nIGdldGFkZHJpbmZvIGFuZCBnZXRob3N0YnluYW1lIHdlcmUgc3RpbGwKICBtaXN0YWtpbmdseSBiZWluZyB1c2VkL2xpbmtlZCBldmVuIGlmIGMtYXJlcyB3YXMgc2VsZWN0ZWQgYXMgcmVzb2x2ZXIKICBiYWNrZW5kLgogIAogIFJlcG9ydGVkIGJ5OiBBcnRodXIgTXVycmF5CiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTItMDEvMDE2MC5odG1sCgpZYW5nIFRzZSAoOSBKYW4gMjAxMikKLSBzd3MuYzogcmVwbGFjZSBzbGVlcCgpIHVzYWdlIHdpdGggd2FpdF9tcygpCgpEYW5pZWwgU3RlbmJlcmcgKDkgSmFuIDIwMTIpCi0gW2dzZW5ndW4gYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgRlRQOiBDVVJMRV9QQVJUSUFMX0ZJTEUgc2hvdWxkIG5vdCBjYXVzZSBjb250cm9sIGNvbm5lY3Rpb24gdG8gYmUgY2xvc2VkCiAgCiAgVGVzdCAxNjEgdXBkYXRlZCBhY2NvcmRpbmdseQoKWWFuZyBUc2UgKDggSmFuIDIwMTIpCi0gc3dzLmM6IHNvbWUgY29tcGlsZXIgd2FybmluZyBmaXhlcwoKLSBsaWIvc2V0dXAuaDogcG9ydGFibGUgc3ltYm9saWMgbmFtZXMgZm9yIFdpbnNvY2sgc2h1dGRvd24oKSBtb2RlIGZsYWdzCgotIHN3cy5jOiA4MTJmYTczMDU3IGZvbGxvdy11cAoKLSBzd3MuYzogc29tZSBJUHY2IHByb3h5IG1vZGUgcGVwYXJhdG9yeSBhZGp1c3RtZW50cwoKRGFuaWVsIFN0ZW5iZXJnICg1IEphbiAyMDEyKQotIGN1cmwuaDogcHJvdmlkZSBiYWNrd2FyZHMgY29tcGF0aWJsZSBzeW1ib2xzCiAgCiAgSW4gY29tbWl0IGM4MzQyMTNhZDUyIHdlIHJlLXVzZWQgc29tZSBvYnNvbGV0ZSBlcnJvciBjb2RlcywgYW5kIGhlcmUgYXJlCiAgdHdvIGRlZmluZXMgdGhhdCBtYWtlcyBzdXJlIGV4aXN0aW5nIHNvdXJjZSBjb2RlcyB0aGF0IGhhcHBlbiB0byB1c2UgYW55CiAgb2YgdGhlc2UgZGVwcmVjYXRlZCBvbmVzIHdpbGwgc3RpbGwgY29tcGlsZS4KICAKICBBcyB1c3VhbCwgZGVmaW5lIENVUkxfTk9fT0xESUVTIHRvIGF2b2lkIGdldHRpbmcgdGhlc2UgInByZWNhdXRpb24KICBkZWZpbmVzIi4KCi0gd2luMzItdGhyZWFkZWQtcmVzb2x2ZXI6IHN0b3AgdXNpbmcgYSBkdW1teSBzb2NrZXQKICAKICBQcmV2aW91c2x5IHRoZSBjb2RlIHdvdWxkIGNyZWF0ZSBhIGR1bW15IHNvY2tldCB3aGlsZSByZXNvbHZpbmcganVzdCB0bwogIGhhdmUgY3VybF9tdWx0aV9mZHNldCgpIHJldHVybiBzb21ldGhpbmcgYnV0IHRoZSBub24td2luMzIgdmVyc2lvbgogIGRvZXNuJ3QgZG8gaXQgdGhpcyB3YXkgYW5kIHRoZSBjcmVhdGlvbiBhbmQgdXNlIG9mIGEgc29ja2V0IHRoYXQgaXNuJ3QKICBtYWRlIHdpdGggdGhlIGNvbW1vbiBjcmVhdGUtc29ja2V0IGNhbGxiYWNrIGNhbiBiZSBjb25mdXNpbmcgdG8gYXBwcwogIHVzaW5nIHRoZSBtdWx0aV9zb2NrZXQgQVBJIGV0Yy4KICAKICBUaGlzIGNoYW5nZSByZW1vdmVzIHRoZSBkdW1teSBzb2NrZXQgYW5kIHRodXMgd2lsbCBjYXVzZQogIGN1cmxfbXVsdGlfZmRzZXQoKSB0byByZXR1cm4gd2l0aCBtYXhmZCA9PSAtMSBtb3JlIG9mdGVuLgoKLSBbUGV0ZXIgU3lsdmVzdGVyIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIE9wZW5TU0w6IHJlbW92ZSByZWZlcmVuY2UgdG8gb3BlbnNzbCBpbnRlcm5hbCBzdHJ1Y3QKICAKICBXaXRoIHRoaXMgY2hhbmdlLCBjdXJsIGNvbXBpbGVzIHdpdGggdGhlIG5ldyBPUEVOU1NMX05PX1NTTF9JTlRFUk4KICBjZmxhZy4gVGhpcyBmbGFnIG1pZ2h0IGJlY29tZSB0aGUgZGVmYXVsdCBpbiBzb21lIGRpc3RhbnQgZnV0dXJlLgoKWWFuZyBUc2UgKDQgSmFuIDIwMTIpCi0gdGVzdDEzMjAgdGVzdDEzMjE6IGF2b2lkIFVzZXItQWdlbnQgY29tcGFyaXNvbgoKLSBodHRwc2VydmVyLnBsOiByZW9yZGVyIHN3cyBjb21tYW5kIGxpbmUgb3B0aW9ucwogIAogIG1ha2UgJ3BpZGZpbGUnIGFuZCAnbG9nZmlsZScgb3B0aW9ucyBhcHBlYXIgZmlyc3Qgb24gY29tbWFuZCBsaW5lIGluIG9yZGVyCiAgdG8gZW5zdXJlIHRoYXQgcHJvY2Vzc2luZyBvZiBvdGhlciBvcHRpb25zIHdoaWNoIHdyaXRlIHRvIGxvZ2ZpbGUgZG8gdGhpcwogIHRvIGludGVuZGVkIGZpbGUgYW5kIG5vdCB0aGUgZGVmYXVsdCBvbmUuCgotIHN3cy5jOiBmaXggcHJveHkgbW9kZSBzZWdmYXVsdAoKLSB0b29sX2Zvcm1wYXJzZS5jOiBmaXggY29tcGlsZXIgd2FybmluZzogZW51bWVyYXRlZCB0eXBlIG1peGVkIHdpdGggYW5vdGhlciB0eXBlCgotIGtyYjUuYzogZml4IGNvbXBpbGVyIHdhcm5pbmc6IHZhcmlhYmxlIHNldCBidXQgbm90IHVzZWQKCkRhbmllbCBTdGVuYmVyZyAoNCBKYW4gMjAxMikKLSBLTk9XTl9CVUdTOiAjNzcgQ1VSTE9QVF9GT1JCSURfUkVVU0Uga2lsbHMgTlRMTQoKLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgRml4ZWQgdXNlIG9mIENVUkxVU0VTU0xfVFJZIGZvciBQT1AzIGFuZCBJTUFQIGJhc2VkIGNvbm5lY3Rpb25zLgogIAogIEZpeGVkIGEgcHJvYmxlbSBpbiBQT1AzIGFuZCBJTUFQIHdoZXJlIGEgY29ubmVjdGlvbiB3b3VsZCBmYWlsIHdoZW4KICBDVVJMVVNFU1NMX1RSWSB3YXMgc3BlY2lmaWVkIGZvciBhIHNlcnZlciB0aGF0IGRpZG4ndCBzdXBwb3J0CiAgU1NML1RMUyBjb25uZWN0aW9ucyByYXRoZXIgdGhhbiBjb250aW51aW5nLgoKLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgRml4ZWQgaW5jb3JyZWN0IGVycm9yIGNvZGUgYmVpbmcgcmV0dXJuZWQgaW4gU1RBUlRUTFMKICAKICBUaGUgU1RBUlRUTFMgcmVzcG9uc2UgY29kZSBpbiBTTVRQLCBQT1AzIGFuZCBJTUFQIHdvdWxkIHJldHVybgogIENVUkxFX0xPR0lOX0RFTklFRCByYXRoZXIgdGhhbiBDVVJMRV9VU0VfU1NMX0ZBSUxFRCB3aGVuIFNTTC9UTFMKICB3YXMgbm90IGF2YWlsYWJsZSBvbiB0aGUgc2VydmVyLgogIAogIFJlcG9ydGVkIGJ5OiBHb2toYW4gU2VuZ3VuCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTItMDEvMDAxOC5odG1sCgotIGN1cmxfZWFzeV9zZXRvcHQ6IHJlZmVyIHRvIHRoZSBtb3N0IHJlY2VudCBVUkkgUkZDCgotIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIDJmNGE0ODdhNjgKICAKICBUd28gYnVnZml4ZXMsIHR3byBtb3JlIGNvbnRyaWJ1dG9ycwoKLSB0ZXN0czogdGVzdCBJTUFQLCBQT1AzIGFuZCBTTVRQIG92ZXIgSFRUUCBwcm94eSB0dW5uZWwKCi0gdGVzdCBwcm94eSBzdXBwb3J0cyBDT05ORUNUCiAgCiAgVGhlcmUncyBhIG5ldyAnaHR0cC1wcm94eScgc2VydmVyIGZvciB0ZXN0cyB0aGF0IHJ1bnMgb24gYSBzZXBhcmF0ZSBwb3J0CiAgYW5kIGxldHMgY2xpZW50cyBkbyBIVFRQIENPTk5FQ1QgdG8gb3RoZXIgcG9ydHMgb24gdGhlIHNhbWUgaG9zdCB0bwogIGFsbG93IHVzIHRvIHRlc3QgSFRUUCAidHVubmVsaW5nIiBwcm9wZXJseS4KICAKICBUZXN0IGNhc2VzIG5vdyBoYXZlIGEgPHByb3h5PiBzZWN0aW9uIGluIDx2ZXJpZnk+IHRvIGNoZWNrIHRoYXQgdGhlCiAgcHJveHkgcHJvdG9jb2wgcGFydCBtYXRjaGVzIGNvcnJlY3RseS4KICAKICBUZXN0IGNhc2UgODAsIDgzLCA5NSwgMjc1LCA1MDMgYW5kIDEwNzggaGF2ZSBiZWVuIGNvbnZlcnRlZC4gVGVzdCAxMzE2CiAgd2FzIGFkZGVkLgoKLSBjdXJsX2Vhc3lfc3RyZXJyb3IuMzogbWlub3Igc3lub3BzaXMgZWRpdCBvZiB0aGUgbG9vawoKWWFuZyBUc2UgKDIgSmFuIDIwMTIpCi0gaG9zdGlwLmM6IGZpeCBwb3RlbnRpYWwgd3JpdGUgcGFzdCB0aGUgZW5kIG9mIHN0cmluZyBidWZmZXIKCi0gaG9zdGlwLmM6IGZpeCBDdXJsX2xvYWRob3N0cGFpcnMoKSBPT00gaGFuZGxpbmcKCi0gcnVudGVzdHMucGw6IG9uIHRlc3QgZmFpbHVyZSwgZG9uJ3Qgc2hvdyB0cmFjZSBsb2cgZmlsZXMgb2Ygb3RoZXIgdGVzdHMKCkRhbmllbCBTdGVuYmVyZyAoMSBKYW4gMjAxMikKLSBDdXJsX2lucHV0X25lZ290aWF0ZTogdXNlIHRoZSBjb3JyZWN0IGJ1ZmZlciBmb3IgaW5wdXQKICAKICBVbmZvcnR1bmF0ZWx5IHdlIGhhdmUgbm8gdGVzdCBjYXNlcyBmb3IgdGhpcyBhbmQgSSBoYXZlIG5vIFNTUEkgYnVpbGQgb3IKICBzZXJ2ZXIgdG8gdmVyaWZ5IHRoaXMgd2l0aC4gVGhlIGNoYW5nZSBzZWVtcyBzaW1wbGUgZW5vdWdoIHRob3VnaC4KICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTM0NjY0OTcKICBSZXBvcnRlZCBieTogUGF0cmljZSBHdWVyaW4KCi0gcnVudGVzdHM6IHB1dCB0cmFjZSBvdXRwdXRzIGluIGxvZy90cmFjZVtudW1dIGZvciBhbGwgdGVzdHMKCi0ganVzdCBhIHN0dXBpZCB0eXBvCgotIFNGVFAgZGlyOiBpbmNyZWFzZSBidWZmZXIgc2l6ZSBjb3VudGVyCiAgCiAgV2hlbiB0aGUgYnVmZmVyIGdldHMgcmVhbGxvY2VkIHRvIGhvbGQgdGhlIGZpbGUgbmFtZSBpbiB0aGUKICBTU0hfU0ZUUF9SRUFERElSX0xJTksgc3RhdGUsIHRoZSBjb3VudGVyIHdhcyBub3QgYnVtcGVkIGFjY29yZGluZ2x5LgogIAogIFJlcG9ydGVkIGJ5OiBBcm1lbCBBc3NlbGluCiAgUGF0Y2ggYnk6IEFybWVsIEFzc2VsaW4KICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0xMi8wMjQ5Lmh0bWwKCi0gUkVMRUFTRS1OT1RFUzogc3luY2VkIHdpdGggODFlYmRkOWUyODcKICAKICA2IG1vcmUgYnVnZml4ZXMsIDMgbW9yZSBjb250cmlidXRvcnMKCi0gY3JlYXRlX2hvc3RjYWNoZV9pZDogdXNlIHRoZSBrZXkgbG93ZXIgY2FzZWQKICAKICAuLi4gdG8gbWFrZSBzdXJlIHRoZSBETlMgY2FjaGUgaXMgcHJvcGVybHkgY2FzZSBpbnNlbnNpdGl2ZQoKLSBjaGFuZ2VkIGNhc2U6IHVzZSBuZXcgaG9zdCBuYW1lIGZvciBzdWJzZXF1ZW50IEhUVFAgcmVxdWVzdHMKICAKICBXaGVuIGEgSFRUUCBjb25uZWN0aW9uIGlzIHJlLXVzZWQgZm9yIGEgc3Vic2VxdWVudCByZXF1ZXN0IHdpdGhvdXQKICBwcm94eSwgaXQgd291bGQgYWx3YXlzIHJlLXVzZSB0aGUgSG9zdDogaGVhZGVyIG9mIHRoZSBmaXJzdCByZXF1ZXN0LiBBcwogIGhvc3QgbmFtZXMgYXJlIGNhc2UgaW5zZW5zaXRpdmUgaXQgd291bGQgbWFrZSBjdXJsIHNlbmQgYW5vdGhlciBob3N0CiAgbmFtZSBjYXNlIHRoYXQgd2hhdCB0aGUgcGFydGljdWxhciByZXF1ZXN0IHVzZWQuCiAgCiAgTm93IGl0IHdpbGwgaW5zdGVhZCBhbHdheXMgdXNlIHRoZSBtb3N0IHJlY2VudCBob3N0IG5hbWUgdG8gYWx3YXlzIHVzZQogIHRoZSBkZXNpcmVkIGNhc2luZy4KICAKICBBZGRlZCB0ZXN0IGNhc2UgMTMxOCB0byB2ZXJpZnkuCiAgCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMTIvMDMxNC5odG1sCiAgUmVwb3J0ZWQgYnk6IEFsZXggVmlubmlrCgotIENVUkxPUFRfUkVTT0xWRTogYXZvaWQgYWRkaW5nIGFscmVhZHkgcHJlc2VudCBob3N0IG5hbWVzCiAgCiAgVGhlIGxvYWQgaG9zdCBuYW1lcyB0byBETlMgY2FjaGUgZnVuY3Rpb24gd2FzIG1vdmVkIHRvIGhvc3RpcC5jIGFuZCBpdAogIG5vdyBtYWtlcyBzdXJlIHRvIG5vdCBhZGQgaG9zdCBuYW1lcyB0aGF0IGFscmVhZHkgYXJlIHByZXNlbnQgaW4gdGhlCiAgY2FjaGUuIEl0IHdvdWxkIHByZXZpb3VzbHkgbGVhZCB0byBtZW1vcnkgbGVha3Mgd2hlbiBmb3IgZXhhbXBsZSB1c2luZwogIHRoZSAtLXJlc29sdmUgYW5kIG11bHRpcGxlIFVSTHMgb24gdGhlIGNvbW1hbmQgbGluZS4KCkRhbiBGYW5kcmljaCAoMzEgRGVjIDIwMTEpCi0gcnVudGVzdHMucGw6IFVzZSBsb2dtc2cgbW9yZSBjb25zaXN0ZW50bHkKCkRhbmllbCBTdGVuYmVyZyAoMzAgRGVjIDIwMTEpCi0gW0FsZXNzYW5kcm8gR2hlZGluaSBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBleGFtcGxlczogdXBkYXRlIFJFQURNRSwgTWFrZWZpbGUuaW5jIGFuZCBnaXRpZ25vcmUgd2l0aCBwb3AzcyBleGFtcGxlcwoKLSBbQWxlc3NhbmRybyBHaGVkaW5pIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIGV4YW1wbGVzOiBhZGQgYSBjb3VwbGUgb2Ygc2ltcGxlIHBvcDNzIGV4YW1wbGVzCiAgCiAgVGhlc2UgZXhhbXBsZXMgc2hvdyBob3cgdG8gZmV0Y2ggYSBzaW5nbGUgbWVzc2FnZSAoUkVUUiBjb21tYW5kKSBhbmQgaG93IHRvCiAgbGlzdCBhbGwgdGhlIG1lc3NhZ2VzIGluIGEgZ2l2ZW4gbWFpbGJveCAoTElTVCBjb21tYW5kKSwgd2l0aCBhdXRoZW50aWNhdGlvbgogIHZpYSBTU0wuCiAgCiAgVGhleSB3ZXJlIGJvdGggYmFzZWQgb24gdGhlIGh0dHBzLmMgZXhhbXBsZS4KCllhbmcgVHNlICgzMCBEZWMgMjAxMSkKLSByZW1vdmVkIGV4ZWN1dGUgZmlsZSBwZXJtaXNzaW9uCgotIHJlbW92ZWQgdHJhaWxpbmcgd2hpdGVzcGFjZQoKLSBmdHBzZXJ2ZXIucGw6IGFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHNwbGl0dGluZyBhbW9uZyBUQ1AgcGFja2V0cyBbSUldCiAgCiAgVGFrZSBpbiBhY2NvdW50IHRoYXQgJ3Bpbmdwb25nJyBzZXJ2ZXIgY29tbWFuZHMgbWF5IGFycml2ZSBzcGxpdHRlZCBhbW9uZwogIHNldmVyYWwgc29ja2ZpbHQgJ0RBVEEnIFBEVSdzLgoKLSBmdHBzZXJ2ZXIucGw6IGFyYml0cmFyeSBhcHBsaWNhdGlvbiBkYXRhIHNwbGl0dGluZyBhbW9uZyBUQ1AgcGFja2V0cyBbSV0KICAKICBJbml0aWFsIHN0ZXAgaW4gb3JkZXIgdG8gYWxsb3cgb3VyIHBpbmdwb25nIHNlcnZlciB0byBiZXR0ZXIgc3VwcG9ydCBhcmJpdHJhcnkKICBhcHBsaWNhdGlvbiBkYXRhIHNwbGl0dGluZyBhbW9uZyBUQ1AgcGFja2V0cy4gVGhpcyBmaXJzdCBjb21taXQgb25seSBhZGRyZXNzZXMKICByZWFzZW1ibHkgb2YgZGF0YSB0aGF0IHNvY2tmaWx0ZXIgcHJvY2Vzc2VzIHJlYWRzIGZyb20gc29vY2tldHMgYW5kIHBpbmdwb25nCiAgc2VydmVyIGxhdGVyIHJlYWRzIGZyb20gc29ja2ZpbHRlcnMgc3Rkb3V0LgoKLSB0ZXN0Y3VybC5wbDogODJjMzQ0YTMgZm9sbG93LXVwCgotIHRlc3RjdXJsLnBsOiBsb2cgQUNMT0NBTF9GTEFHUwoKLSB0ZXN0Y3VybC5wbDogdGhpcmQgcGFydHkgbTQgd2FybmluZ3MgZmlsdGVyaW5nIGFkanVzdG1lbnQKICAKICBNYWtlIHRlc3RjdXJsLnBsIGlnbm9yZSBtZXNzYWdlcyBwZXJ0YWluaW5nIHRvIHRoaXJkIHBhcnR5IG00IGZpbGVzIHdlIGRvbid0CiAgY2FyZSBub3IgdXNlIG9uIGEgZmlsZSBiYXNpcyBwb2xpY3kgd2hpbGUgcmV0YWluaW5nIGFsbCBvdGhlciB3YXJuaW5ncy4KICAKICBUaGlzIGNsb3NlcyB0ZW1wb3JhcnkgY29tbWl0IGU3MWUyMjZmCgpLYW1pbCBEdWRrYSAoMjUgRGVjIDIwMTEpCi0gdHJhbnNmZXI6IGF2b2lkIHVubmVjZXNzYXJ5IHRpbWVvdXQgZXZlbnQgd2hlbiB3YWl0aW5nIGZvciAxMDAtY29udGludWUKICAKICBUaGUgY29tbWl0IDlkZDg1YmMgdW5pbnRlbnRpb25hbGx5IGNoYW5nZWQgdGhlIHdheSB3ZSBjb21wdXRlIHRoZSB0aW1lCiAgc3BlbnQgd2FpdGluZyBmb3IgMTAwLWNvbnRpbnVlLiAgSW4gcGFydGljdWxhciwgd2hlbiB1c2luZyBhIFNTTCBjbGllbnQKICBjZXJ0aWZpY2F0ZSwgdGhlIHRpbWUgc3BlbnQgYnkgU1NMIGhhbmRzaGFrZSB3YXMgaW5jbHVkZWQgYW5kIGNvdWxkCiAgY2F1c2UgdGhlIENVUkxfVElNRU9VVF9FWFBFQ1RfMTAwIHRpbWVvdXQgdG8gYmUgbWlzdGFrZW5seSBmaXJlZCB1cC4KICAKICBCdWc6IGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS83Njc0OTAKICBSZXBvcnRlZCBieTogTWFtb3J1IFRhc2FrYQoKWWFuZyBUc2UgKDI1IERlYyAyMDExKQotIHRyYW5zZmVyLmM6IG1vdmUgYSBsb2dnaW5nIHN0YXRlbWVudCBwbGFjZW1lbnQKCi0gaGFzaC5jOiBmaXggT09NIHRyaWdnZXJlZCBzZWdmYXVsdAoKRGFuaWVsIFN0ZW5iZXJnICgyNCBEZWMgMjAxMSkKLSBmdHBfZG9fbW9yZTogZG9uJ3QgcmV0dXJuIHN1Y2Nlc3MgdW50aWwgYWxsIGlzIGRvbmUKICAKICBmdHBfZG9fbW9yZSgpIHJldHVybnMgYWZ0ZXIgYWNjZXB0aW5nIHRoZSBzZXJ2ZXIgY29ubmVjdCBob3dldmVyIGl0CiAgbmVlZHMgdG8gZmFsbCB0aHJvdWdoIGFuZCBzZXQgIipjb21wbGV0ZSIgdG8gVFJVRSBiZWZvcmUgZXhpdCBmcm9tIHRoZQogIGZ1bmN0aW9uLgogIAogIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTEyLzAyNTAuaHRtbAogIFJlcG9ydGVkIGJ5OiBHb2toYW4gU2VuZ3VuCgotIEN1cmxfZG9fbW9yZTogZml4IHR5cG8gbG9naWMKICAKICBJbiB0aGUgcmVjZW50IGRvX21vcmUgZml4IHRoZSBuZXcgbG9naWMgd2FzIG1pc3Rha2VubHkgY2hlY2tpbmcgdGhlCiAgcG9pbnRlciBpbnN0ZWFkIG9mIHdoYXQgaXQgcG9pbnRzIHRvLgogIAogIFJlcG9ydGVkIGJ5OiBHb2toYW4gU2VuZ3VuCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMTIvMDI1MC5odG1sCgotIFNGVFAgbWtkaXI6IHVzZSBjb3JyZWN0IHBlcm1pc3Npb24KICAKICBXaGVuIHNlbmRpbmcgcXVvdGUgY29tbWFuZCB0byBhIFNGVFAgc2VydmVyIGFuZCAnbWtkaXInIHdhcyB1c2VkLCBpdAogIHdvdWxkIHNlbmQgZml4ZWQgcGVybWlzc2lvbnMgYW5kIG5vdCB1c2UgdGhlIENVUkxPUFRfTkVXX0RJUkVDVE9SWV9QRVJNUwogIGFzIGl0IHNob3VsZC4KICAKICBSZXBvcnRlZCBieTogQXJtZWwKICBQYXRjaCBieTogQXJtZWwKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0xMi8wMjQ5Lmh0bWwKCllhbmcgVHNlICgyMyBEZWMgMjAxMSkKLSBidWlsZGNvbmY6IG1pbm9yIHR3ZWFrcyBjb21taXQgNDMwNTI3YTEgZm9sbG93LXVwCgpEYW5pZWwgU3RlbmJlcmcgKDIzIERlYyAyMDExKQotIFtDb2xpbiBIb2diZW4gYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgUmVxdWlyZSBhIGxlc3MgYW5jaWVudCB2ZXJzaW9uIG9mIHBlcmwKICAKICBUaGUgSU5URVJOQUxTIGRvY3VtZW50IHN1Z2dlc3RlZCB0aGF0IGNvbXBhdGliaWxpdHkgc2hvdWxkIGJlCiAgbWFpbnRhaW5lZCB3aXRoIHBlcmwgdmVyc2lvbiA0LCBidXQgdGhpcyB3YXMgdW50cnVlIC0gc2NyaXB0cyBzdWNoIGFzCiAgY2hrc291cmNlLnBsIGFuZCBydW50ZXN0cy5wbCB1c2UgcGVybDUtaXNtcy4KCi0gcmVzb2x2ZTogZG9uJ3QgbGVhayBwcmUtcG9wdWxhdGVkIGRucyBlbnRyaWVzCiAgCiAgQ1VSTE9QVF9SRVNPTFZFIHBvcHVsYXRlcyB0aGUgRE5TIGNhY2hlIHdpdGggZW50cmllcyB0aGF0IGFyZSBtYXJrZWQgYXMKICBldGVybmFsbHkgaW4gdXNlLiBUaG9zZSBlbnRyaWVzIG5lZWQgdG8gYmUgdGFrZW4gY2FyZSBvZiB3aGVuIHRoZSBjYWNoZQogIGlzIGtpbGxlZCBvZmYuCiAgCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zNDYzMTIxCiAgUmVwb3J0ZWQgYnk6ICJ0dzg0NDUyODUyIgoKLSBuZXcgdGVzdDogdmVyaWZ5IC0tcmVzb2x2ZQogIAogIFRlc3QgMTMxNyB2ZXJpZmllcyAtLXJlc29sdmUgKGxlYWtlZCBtZW1vcnkpCiAgCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zNDYzMTIxCiAgUmVwb3J0ZWQgYnk6ICJ0dzg0NDUyODUyIgoKWWFuZyBUc2UgKDIzIERlYyAyMDExKQotIHRlc3RjdXJsLnBsOiB0ZW1wb3JhcnkgY2hhbmdlCiAgCiAgQWxsb3cgYXV0b2J1aWxkcyB0byBydW4gYSBjb3VwbGUgb2YgZGF5cyB3aXRob3V0IGZpbHRlcmluZyBvdXQgYWNsb2NhbAogIHVuZGVycXVvdGVkIGRlZmluaXRpb24gd2FybmluZ3MuCgpEYW5pZWwgU3RlbmJlcmcgKDIxIERlYyAyMDExKQotIG9wZXJhdGU6IHJlbW92ZWQgYSBzaW5nbGUgdHJhaWxpbmcgc3BhY2UKCkRhbiBGYW5kcmljaCAoMjEgRGVjIDIwMTEpCi0gLS1yZXRyeTogUmV0cnkgdHJhbnNmZXJzIG9uIHRpbWVvdXQgYW5kIEROUyBlcnJvcnMKCllhbmcgVHNlICgyMSBEZWMgMjAxMSkKLSBidWlsZGNvbmY6IG1pbm9yIHR3ZWFrcwoKLSBmb3JtZGF0YS5jOiBPT00gaGFuZGxpbmcgZml4ZXMKCkRhbmllbCBTdGVuYmVyZyAoMjEgRGVjIDIwMTEpCi0gVE9ETzogMS43IEhhcHB5IEV5ZWJhbGwgZHVhbCBzdGFjayBjb25uZWN0CgpEYW4gRmFuZHJpY2ggKDIwIERlYyAyMDExKQotIHJ1bnRlc3RzLnBsOiBGaXhlZCBwZXJsIHdhcm5pbmcgd2hlbiB1c2luZyB0aGUgLWwgb3B0aW9uCgpEYW5pZWwgU3RlbmJlcmcgKDIwIERlYyAyMDExKQotIFJFTEVBU0UtTk9URVM6IGFkZGVkIHR3byByZWZlcmVuY2VzCgotIEN1cmxfc29ja2V0X2NoZWNrOiBlbmxhcmdlIHBvbGwgc3RydWN0IGFycmF5IHRvIDMKICAKICBUaGlzIGZ1bmN0aW9uIHdhcyBpbnRyb2R1Y2VkIGluIGNvbW1pdCA1NTI3NDE3YWZhZTAgYW5kIGFzIHBvaW50ZWQgb3V0CiAgYnkgR29raGFuIFNlbmd1biwgdGhlIGFycmF5IHdpdGggcG9sbCBzdHJ1Y3RzIG11c3QgbGFyZ2UgZW5vdWdoIHRvIGhvbGQKICAzIHNvY2tldHMgc2luY2UgdGhhdCBpcyB3aGF0IHRoZSBmdW5jdGlvbiBjYW4gYWNjZXB0LiBJdCBjb3VsZCBiZSBub3RlZAogIHRoYXQgaGUgaGFkIHRoaXMgZml4ZWQgaW4gaGlzIHBhdGNoIGFzIHBvc3RlZCBpbgogIGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0xMi8wMTc5Lmh0bWwKICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0xMi8wMjI4Lmh0bWwKICBSZXBvcnRlZCBieTogR29raGFuIFNlbmd1bgoKLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCAzODBiYWRlNzc3CiAgCiAgNSBuZXcgYnVnZml4ZXMsIDIgbmV3IGNoYW5nZXMgYW5kIDQgbmV3IGNvbnRyaWJ1dG9ycwoKLSBUT0RPOiByZW1vdmUgYWN0aXZlIEZUUCBmcm9tIHNlY3Rpb24gMi4xCiAgCiAgSXQgaXMgbm8gbG9uZ2VyIGRvbmUgYmxvY2tpbmcgaW4gdGhlIG11bHRpIGludGVyZmFjZQoKLSBsaWJjdXJsIGRvY3M6IGFkZCB0aGUgbmV3IEZUUCBhY2NlcHQgb3B0aW9uICsgZXJyb3JzCgotIHRpbWVsZWZ0X2FjY2VwdDogYWNrIGdsb2JhbCB0aW1lb3V0LCBtb3ZlZCB0byBmdHAuYwogIAogIEZpcnN0IG9mZiB0aGUgdGltZW91dCBmb3IgYWNjZXB0aW5nIGEgc2VydmVyIGNvbm5lY3QgYmFjayBtdXN0IG9mIGNvdXJzZQogIHJlc3BlY3QgYSBnbG9iYWwgdGltZW91dC4gVGhlbiB0aGUgdGltZWxlZnQgZnVuY3Rpb24gaXMgb25seSB1c2VkIGJ5IGZ0cAogIGNvZGUgc28gaXQgd2FzIG1vdmVkIHRvIGZ0cC5jIGFuZCBtYWRlIHN0YXRpYy4KCi0gbGliY3VybC10dXRvcmlhbC4zOiBjdXJsIGRvZXNuJ3Qgc2VudCBwcmFnbWEgbm8tY2FjaGUKICAKICBJdCBkaWQgYSBsb25nIHRpbWUgYWdvCgotIGxpYmN1cmwtbXVsdGkuMzogYWN0aXZlIEZUUCBpcyBubyBsb25nZXIgYmxvY2tpbmchCgotIEZUUDogbW92ZSBGVFAtc3BlY2lmaWMgc3RydWN0IGZpZWxkIHRvIGZ0cGNfY29ubgogIAogICJ3YWl0X2RhdGFfY29ubiIgd2FzIGFkZGVkIHRvIHRoZSBjb25uZWN0aW9uYml0cyBpbiBjb21taXQgYzgzNDIxM2FkNSBmb3IKICBoYW5kbGluZyBhY3RpdmUgRlRQIGNvbm5lY3Rpb25zIGJ1dCBhcyBpdCBpcyBwdXJlbHkgRlRQIHNwZWNpZmljIGFuZCBub3cKICBvbmx5IGV2ZXIgYWNjZXNzZWQgYnkgZnRwLmMgSSBtb3ZlZCBpdCBpbnRvIHRoZSBGVFAgY29ubmVjdGlvbiBzdHJ1Y3QuCgotIG5vbi1ibG9ja2luZyBhY3RpdmUgRlRQOiBjbGVhbnVwIG11bHRpIHN0YXRlIHVzYWdlCiAgCiAgQmFja3BlZGFsZWQgb3V0IHRoZSBmdW5ueSBkb3VibGUtY2hhbmdlIG9mIHN0YXRlIGluIHRoZSBtdWx0aSBzdGF0ZQogIG1hY2hpbmUgYnkgYWRkaW5nIGEgbmV3IGFyZ3VtZW50IHRvIHRoZSBkb19tb3JlKCkgZnVuY3Rpb24gdG8gc2lnbmFsCiAgY29tcGxldGlvbi4gVGhpcyB3YXkgaXQgY2FuIHJlbWFpbiBpbiB0aGUgRE9fTU9SRSBzdGF0ZSBwcm9wZXJseSB1bnRpbAogIGRvbmUuIExvbmcgdGVybSwgdGhlIGVudGlyZSBET19NT1JFIGxvZ2ljIHNob3VsZCBiZSBtb3ZlZCBpbnRvIHRoZSBGVFAKICBjb2RlIGFuZCBiZSBoaWRkZW4gZnJvbSB0aGUgbXVsdGkgY29kZSBhcyB0aGUgbG9naWMgaXMgb25seSB1c2VkIGZvcgogIEZUUC4KCi0gW0dva2hhbiBTZW5ndW4gYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgRlRQOiBwZXJmb3JtIGFjdGl2ZSBjb25uZWN0aW9ucyBub24tYmxvY2tpbmcKICAKICAxLSBUd28gbmV3IGVycm9yIGNvZGVzIGFyZSBpbnRyb2R1Y2VkLgogIAogIENVUkxFX0ZUUF9BQ0NFUFRfRkFJTEVEIHRvIGJlIHNldCB3aGVuZXZlciBBQ0NFUFRpbmcgZmFpbHMgYmVjYXVzZSBvZgogIEZUUCBzZXJ2ZXIgY29ubmVjdGVkLgogIAogIENVUkxFX0ZUUF9BQ0NFUFRfVElNRU9VVCB0byBiZSBzZXQgd2hlbmV2ZXIgQUNDRVBUaW5nIHRpbWVvdXRzLgogIAogIE5laXRoZXIgb2YgdGhlc2UgZXJyb3JzIGFyZSBjb25zaWRlcmVkIGZhdGFsIGFuZCBjb250cm9sIGNvbm5lY3Rpb24KICByZW1haW5zIE9LIGJlY2F1c2UgaXQgY291bGQganVzdCBiZSBhIGZpcmV3YWxsIGJsb2NraW5nIHNlcnZlciB0bwogIGNvbm5lY3QgdG8gdGhlIGNsaWVudC4KICAKICAyLSBPbmUgbmV3IHNldG9wdCBvcHRpb24gd2FzIGludHJvZHVjZWQuCiAgCiAgQ1VSTE9QVF9BQ0NFUFRUSU1FT1VUX01TCiAgCiAgSXQgc2V0cyB0aGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSBGVFAgY2xpZW50IGlzIGdvaW5nIHRvIHdhaXQgZm9yIGEKICBzZXJ2ZXIgdG8gY29ubmVjdC4gSW50ZXJuYWwgZGVmYXVsdCBhY2NlcHQgdGltZW91dCBpcyA2MCBzZWNvbmRzLgoKLSBzb2NrZXRzOiBuZXcgQ3VybF9zb2NrZXRfY2hlY2soKSBjYW4gd2FpdCBmb3IgMyBzb2NrZXRzCiAgCiAgVGhpcyBvZmZlcnMgYW4gYWx0ZXJuYXRpdmUgdG8gdGhlIGV4aXN0aW5nIEN1cmxfc29ja2V0X3JlYWR5KCkgQVBJIHdoaWNoCiAgb25seSBjaGVja3Mgb25lIHNvY2tldCBmb3IgcmVhZCBhbmQgb25lIGZvciB3cml0ZS4KCi0gW0NlzIFkcmljIERlbHRoZWlsIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIGN1cmwuaDogYWRkIF9fQU5EUk9JRF9fIG1hY3JvIGNoZWNrCiAgCiAgV2hlbiB3b3JraW5nIHdpdGggdGhlIEFuZHJvaWQgU3RhbmRhbG9uZSBUb29sY2hhaW4gdGhlIGNvbXBpbGVyIGRlZmluZXMKICB0aGlzIG1hY3JvOgogIAogICAgL3BhdGgvdG8vYXJtLWxpbnV4LWFuZHJvaWRlYWJpLWdjYyAtRSAtZE0gLSA8IC9kZXYvbnVsbCBcCiAgICB8IGdyZXAgLWkgYW5kcm9pZAogICAgI2RlZmluZSBfX0FORFJPSURfXyAxCiAgCiAgV2UgcmVhbGx5IG5lZWQgdG8gY2hlY2sgYm90aCBBTkRST0lEIGFuZCBfX0FORFJPSURfXyBzaW5jZSBJJ3ZlIG9ic2VydmVkCiAgdGhhdDoKICAKICAqIGlmIHlvdSB1c2UgQW5kcm9pZC5tayBmaWxlKHMpIGFuZCB0aGUgJ25kay1idWlsZCcgc2NyaXB0IChha2EgdmFuaWxsYQogIHdheSksIEFORFJPSUQgaXMgcHJlZGVmaW5lZCAoc2VlIC1EQU5EUk9JRCBleHRyYSBDIGZsYWcpLAogIAogICogaWYgeW91IHVzZSB0aGUgQW5kcm9pZCBTdGFuZGFsb25lIFRvb2xjaGFpbiwgdGhlbiBfX0FORFJPSURfXyBpcwogIHByZWRlZmluZWQgYXMgc3RhdGVkIGJ5IHRoZSBjb21waWxlcgoKLSBsaWI1MDA6IHZlcmlmeSB0aW1lcnMgcmVsYXRpdmUgZWFjaCBvdGhlcgogIAogIEFzIGNvbW1pdCBjZTg5Njg3NWY4IGZpeGVkIGEgdGltZXIgdGhhdCBhY2NpZGVudGFsbHkgaGFkIGJlZW4gbW92ZWQgaW4KICBjb2RlIGFuZCB0aGVuIHJldHVybmVkIGEgYmFkIHRpbWVyLCB0aGUgbGliNTAwLmMgY29kZSAodXNlZCBpbiB0ZXN0IDUwMAogIGFuZCBzb21lIG90aGVycykgbm93IHZlcmlmaWVzIDUgdGltZXJzIGFnYWluc3QgZWFjaCBvdGhlciB0byB2ZXJpZnkgdGhhdAogIHRoZXkgaGF2ZSB0aGUgY29ycmVjdCByZWxhdGl2ZSB2YWx1ZXMuIFdlIGNhbm5vdCBjb21wYXJlIGFnYWluc3QKICBhYnNvbHV0ZSB2YWx1ZXMgYXMgdGhlIHRpbWluZ3Mgd2lsbCB2YXJ5IGEgbG90LgoKLSBDdXJsX3BncnNUaW1lOiBzdG9yZSBub3cgaW4gYW4gYXV0byB2YXJpYWJsZQogIAogIEl0IG1ha2VzIGl0IGVhc2llciB0byBpbnRyb2R1Y2UgZGVidWcgb3V0cHV0cyBpbiB0aGlzIGZ1bmN0aW9uLCBhbmQKICBldmVyeXRoaW5nIGluIHRoZSBmdW5jdGlvbiBpcyB1c2luZyB0aGUgdmFsdWUgYW55d2F5IHNvIGl0IG1pZ2h0IGV2ZW4gYmUKICBtb3JlIGVmZmljaWVudC4KCi0gdGltZXI6IHJlc3RvcmUgUFJFVFJBTlNGRVIgdGltaW5nCiAgCiAgUmVncmVzc2lvbiBpbnRyb2R1Y2VkIGluIDcuMjMuMCB3aXRoIGNvbW1pdCA5ZGQ4NWJjZS4gVGhlIGZ1bmN0aW9uIGluCiAgd2hpY2ggdGhlIFBSRVRSQU5TRkVSIHRpbWUgc3RhbXAgd2FzIHJlY29yZGVkIHdhcyBtb3ZlZCBpbiB0aW1lIGNhdXNpbmcKICBpdCBiZSBzdG9yZWQgdmVyeSBxdWlja2x5IGFmdGVyIHRoZSBzdGFydCB0aW1lc3RhbXAuIE9uIG1vc3Qgc3lzdGVtcwogIHNob3J0ZXIgdGhhbiAxIG1pbGxpc2Vjb25kIGFuZCB0aHVzIGl0IHdvdWxkbid0IGV2ZW4gc2hvdyB3aXRoIC13CiAgIiV7dGltZV9wcmV0cmFuc2Zlcn0iIHVzaW5nIHRoZSBjb21tYW5kIGxpbmUgdG9vbC4KICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9hcmNoaXZlLTIwMTEtMTIvMDAyMi5odG1sCiAgUmVwb3J0ZWQgYnk6IFRvbmkgTW9yZW5vCgotIFtCZXJuaGFyZCBSZXV0bmVyLUZpc2NoZXIgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgbGliY3VybC5tNDogRml4IHF1b3RpbmcgYXJndW1lbnRzIG9mIEFDX0xBTkdfUFJPR1JBTQogIAogIFBhcmFtZXRlcnMgd2VyZSB1bmRlcnF1b3RlZCwgcmVzdWx0aW5nIGluCiAgd2FybmluZzogQUNfTEFOR19DT05GVEVTVDogbm8gQUNfTEFOR19TT1VSQ0UgY2FsbCBkZXRlY3RlZCBpbiBib2R5CiAgCiAgU2lnbmVkLW9mZi1ieTogQmVybmhhcmQgUmV1dG5lci1GaXNjaGVyIDxyZXAuZG90Lm5vcEBnbWFpbC5jb20+CgotIGdpdGlnbm9yZTogaWdub3JlIHRoZSBzeW1ib2wgdmVyc2lvbmluZyBmaWxlCgotIHR1dG9yaWFsOiByZW1vdmUgQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNIGFkZCBzaGFyaW5nCiAgCiAgVGhlIENVUkxNX0NBTExfTVVMVElfUEVSRk9STSByZWZlcmVuY2UgaXMgYW4gb2xkIGxlZnRvdmVyIEkgaGFkIHRvCiAgcmVtb3ZlLgogIAogIEkgYWxzbyBhZGRlZCBzb21lIGJsdXJiIHRvIHRoZSBwcmV2aW91c2x5IGJsYW5rICJzaGFyaW5nIiBzZWN0aW9uLgoKLSBbQWxlc3NhbmRybyBHaGVkaW5pIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIGNvbmZpZ3VyZTogYWRkIHN5bWJvbHMgdmVyc2lvbmluZyBvcHRpb24KICAKICBBbGxvdywgYXQgY29uZmlndXJlIHRpbWUsIHRoZSBwcm9kdWN0aW9uIG9mIHZlcnNpb25lZCBzeW1ib2xzLiBUaGUKICBzeW1ib2xzIHdpbGwgbG9vayBsaWtlICJDVVJMXzxGTEFWT1VSPl88VkVSU0lPTj4gPFNZTUJPTD4iLCB3aGVyZQogIDxGTEFWT1VSPiByZXByZXNlbnRzIHRoZSBTU0wgZmxhdm91ciAoZS5nLiBPUEVOU1NMLCBHTlVUTFMsIE5TUywgLi4uKSwKICA8VkVSU0lPTj4gaXMgdGhlIG1ham9yIFNPTkFNRSB2ZXJzaW9uIGFuZCA8U1lNQk9MPiBpcyB0aGUgYWN0dWFsIHN5bWJvbAogIG5hbWUuIElmIG5vIFNTTCBsaWJyYXJ5IGlzIGVuYWJsZWQgdGhlIHN5bWJvbHMgd2lsbCBiZSBqdXN0CiAgIkNVUkxfPFZFUlNJT04+IDxTWU1CT0w+Ii4KCi0gW1N2ZW4gV2VnZW5lciBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBVc2UgQ3VybF9zc2xfY29ubmVjdCBmb3Igbm9uLWJsb2NraW5nIGNvbm5lY3QgZmFsbGJhY2sKICAKICBUaGlzIGdldHMgdGhlIGFwcGNvbm5lY3QgdGltZSByaWdodCBmb3Igc3NsIGJhY2tlbmRzLCB3aGljaCBkb24ndAogIHN1cHBvcnQgbm9uLWJsb2NraW5nIGNvbm5lY3RzLgogIAogIFNpZ25lZC1vZmYtYnk6IFN2ZW4gV2VnZW5lciA8c3Zlbi53ZWdlbmVyQHN0ZWFsZXIubmV0PgoKLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCBhZjliYzE2MDRjMQogIAogIE9uZSBuZXcgZmVhdHVyZSwgb25lIGJ1ZyBmaXguIEludHJvZHVjZWQgcmVmZXJlbmNlcyBpbiB0aGlzIGZpbGUgZm9yCiAgbWVudGlvbmVkIGlzc3VlcyBhZnRlciB0aGlzIGRpc2N1c3Npb246CiAgaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTEyLzAxODcuaHRtbAogIAogIFRoZSBwbGFuIGlzIHRvIGxldCB0aGUgcmVmZXJlbmNlcyBnZXQgbW92ZWQgb3ZlciB0byB0aGUgY2hhbmdlcy5odG1sCiAgZmlsZSBhdCByZWxlYXNlLXRpbWUKCi0gY3VybC4xOiBtaW5vciB3aGl0ZSBzcGFjZSBjbGVhbnVwCgotIFtBbGVzc2FuZHJvIEdoZWRpbmkgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgZG9jczogaW1wcm92ZSBkZXNjcmlwdGlvbiBvZiB0aGUgLS1jYXBhdGggb3B0aW9uCiAgCiAgRG9jdW1lbnQgdGhlIHBvc3NpYmlsaXR5IG9mIHByb3ZpZGluZyBtdWx0aXBsZSB2YWx1ZXMgdXNpbmcgdGhlICI6IgogIHNlcGFyYXRvciwgYW5kIHRoZSBmYWN0IHRoYXQgdGhlIGRlZmF1bHQgdmFsdWUgd2lsbCBiZSBpZ25vcmVkIGlmIHRoZQogIG9wdGlvbiBpcyB1c2VkLgoKLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgRE9DUzogQWRkZWQgU01UUCBpbmZvcm1hdGlvbiB0byBDVVJMT1BUX0lORklMRVNJWkUKCi0gQ3VybF9wcm94eUNPTk5FQ1Q6IHVzZSBuZXdsaW5lcyBpbiBkZWJ1ZyBvdXRwdXQKCi0gY3VybCAtRjogZml4IG11bHRpcGxlIGZpbGUgdXBsb2FkIHdpdGggY3VzdG9tIHR5cGUKICAKICBUZXN0IGNhc2UgMTMxNSB3YXMgYWRkZWQgdG8gdmVyaWZ5IHRoaXMgZnVuY3Rpb25hbGl0eS4gV2hlbiBwYXNzaW5nIGluCiAgbXVsdGlwbGUgZmlsZXMgdG8gYSBzaW5nbGUgLUYsIHRoZSBwYXJzZXIgd291bGQgZ2V0IGFsbCBjb25mdXNlZCBpZiBvbmUKICBvZiB0aGUgc3BlY2lmaWVkIGZpbGVzIGhhZCBhIGN1c3RvbSB0eXBlPSBhc3NpZ25lZC4KICAKICBSZXBvcnRlZCBieTogQ29saW4gSG9nYmVuCgotIFtDb2xpbiBIb2diZW4gYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgTmV3IHRlc3QgZm9yIG11bHRpcGxlIGZpbGUgdXBsb2FkCiAgCiAgdGVzdCAxMzE1IGNoZWNrcyBjb3JyZWN0IGJlaGF2aW91ciB3aGVuIHVwbG9hZGluZyBtdWx0aXBsZSBmaWxlcy4KICBCdWdneSBiZWhhdmlvdXIgaGFzIGJlZW4gc2VlbiB3aGVyZSBvbmx5IHR3byBhdHRhY2htZW50cyBhcmUgc2VudC4KCllhbmcgVHNlICgxNSBEZWMgMjAxMSkKLSBjb25maWd1cmU6IGxpYnRvb2wgMS41IHR3ZWFrcwoKRGFuaWVsIFN0ZW5iZXJnICgxNSBEZWMgMjAxMSkKLSBbQ29saW4gSG9nYmVuIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIENvcnJlY3Qgc3Vic3RpdHV0aW9uIHZhciBuYW1lcwogIAogIFR3byB2YXJpYWJsZSBuYW1lcyB3ZXJlIHdyb25nIGluIHRoZSBkb2N1bWVudGF0aW9uLgoKLSBbQ29saW4gSG9nYmVuIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIENvcnJlY3QgZGVmYXVsdCB1cGxvYWQgbWltZXR5cGUgaW4gbWFudWFsCiAgCiAgVGhlIGRlZmF1bHQgY29udGVudC10eXBlIGZvciBmaWxlIHVwbG9hZHMgaXMgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtLAogIG5vdCB0ZXh0L3BsYWluIGFzIHN0YXRlZCBpbiB0aGUgTUFOVUFMLgoKLSBbQWxlc3NhbmRybyBHaGVkaW5pIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIGRvY3M6IGZpeCB0eXBvIGluIGN1cmxfZWFzeV9zZXRvcHQgbWFucGFnZQoKWWFuZyBUc2UgKDEzIERlYyAyMDExKQotIGlmMmlwLltjaF06IGZpeCBjb21waWxhdGlvbiB3aXRoIE1pbkdXCiAgCiAgQXZvaWQgJ2ludGVyZmFjZScgbGl0ZXJhbCB0aGF0IHNvbWUgTWluR1cgdmVyc2lvbnMgZGVmaW5lIGFzIGEgbWFjcm8KCi0gY29ubmVjdC5jOiBmaXggY29tcGlsZXIgd2FybmluZyAnZW51bWVyYXRlZCB0eXBlIGlzIG1peGVkIHdpdGggYW5vdGhlciB0eXBlJwoKLSBpZjJpcC5jOiBmaXggY29tcGlsZXIgd2FybmluZyAndW51c2VkIHBhcmFtZXRlcicKCi0gcG9wMy5jOiBmaXggY29tcGlsZXIgd2FybmluZyB2YXJpYWJsZSBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkCgotIGlmMmlwLmM6IGZpeCBjb21waWxlciB3YXJuaW5nICdlbnVtZXJhdGVkIHR5cGUgaXMgbWl4ZWQgd2l0aCBhbm90aGVyIHR5cGUnCgpEYW5pZWwgU3RlbmJlcmcgKDEyIERlYyAyMDExKQotIFtKYXNvbiBHbGFzZ293IGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIENVUkxPUFRfSU5URVJGQUNFOiBhdm9pZCByZXNvbHZpbmcgaW50ZXJmYWNlcyBuYW1lcwogIAogIERvIG5vdCB0cnkgdG8gcmVzb2x2ZSBpbnRlcmZhY2VzIG5hbWVzIHZpYSBETlMgYnkgcmVjb2duaXppbmcgaW50ZXJmYWNlCiAgbmFtZXMgaW4gYSBmZXcgd2F5cy4gIElmIHRoZSBpbnRlcmZhY2Ugb3B0aW9uIGFyZ3VtZW50IGhhcyBhIHByZWZpeCBvZgogICJpZiEiIHRoZW4gdHJlYXQgdGhlIGFyZ3VtZW50IGFzIG9ubHkgYW4gaW50ZXJmYWNlLiAgU2ltaWxhcmx5LCBpZiB0aGUKICBpbnRlcmZhY2UgYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgYW4gaW50ZXJmYWNlIChldmVuIGlmIGl0IGRvZXMgbm90IGhhdmUKICBhbiBJUCBhZGRyZXNzIGFzc2lnbmVkKSwgdHJlYXQgaXQgYXMgYW4gaW50ZXJmYWNlIG5hbWUuICBGaW5hbGx5LCBpZiB0aGUKICBpbnRlcmZhY2UgYXJndW1lbnQgaXMgcHJlZml4ZWQgYnkgImhvc3QhIiB0cmVhdCBpdCBhcyBhIGhvc3RuYW1lIHRoYXQKICBtdXN0IGJlIHJlc29sdmVkIGJ5IC9ldGMvaG9zdHMgb3IgRE5TLgogIAogIFRoZXNlIGNoYW5nZXMgYWxsb3cgYSBjbGllbnQgdXNpbmcgdGhlIG11bHRpIGludGVyZmFjZXMgdG8gYXZvaWQKICBibG9ja2luZyBvbiBuYW1lIHJlc29sdXRpb24gaWYgdGhlIGludGVyZmFjZSBsb3NlcyBpdHMgSVAgYWRkcmVzcyBvcgogIGRpc2FwcGVhcnMuCgotIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIDEyNTljY2Y3NDc0CiAgCiAgNSBtb3JlIGJ1Z2ZpeGVzLCA1IG1vcmUgY29udHJpYnV0b3JzCgotIFtTdGV2ZSBIb2xtZSBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBDb25uZWN0aW9uRXhpc3RzOiBGaXggcmV1c2UgZm9yIFRMUyB1cGdyYWRlZCBjb25uZWN0aW9ucwogIAogIEZpeGVkIHRoZSBjb25uZWN0aW9uIHJldXNlIGRldGVjdGlvbiBpbiBDb25uZWN0aW9uRXhpc3RzKCkgd2hlbgogIGNvbXBhcmluZyBhIG5ldyBjb25uZWN0aW9uIHRoYXQgaXMgbm9uLVNTTCBiYXNlZCBhZ2FpbnN0IHRoYXQgb2YgYSBTU0wKICBiYXNlZCBjb25uZWN0aW9uIHRoYXQgaGFzIGJlY29tZSBzbyBieSBiZWluZyB1cGdyYWRlZCB2aWEgVExTLgoKLSBjcmVhdGVfY29ubjogZG9uJ3Qgc3dpdGNoIHRvIEhUVFAgcHJvdG9jb2wgaWYgdHVubmVsaW5nIGlzIGVuYWJsZWQKICAKICBUaGlzIGlzIGEgcmVncmVzc2lvbiBzaW5jZSB3aG8ga25vd3Mgd2hlbi4gV2hlbiBzcG90dGluZyB0aGF0IGEgSFRUUAogIHByb3h5IGlzIHVzZWQgd2UgbXVzdCBub3QgdW5jb25kaXRpdGlvbmFsbHkgZW5hYmxlIHRoZSBIVFRQIHByb3RvY29sCiAgc2luY2UgaWYgd2UgZG8gdHVubmVsaW5nIHRocm91Z2ggdGhlIHByb3h5IHdlJ3JlIHN0aWxsIHVzaW5nIHRoZSB0YXJnZXQKICBwcm90b2NvbC4KICAKICBSZXBvcnRlZCBieTogTmF2ZWVuIENoYW5kcmFuCgotIEZBUTogYWRkIC0tcmVzb2x2ZSBkZXRhaWxzIHRvIHF1ZXN0aW9uIDMuMTkKCi0gW0dva2hhbiBTZW5ndW4gYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgQ3VybF9jbG9zZXNvY2tldDogY2xlYXIgc29ja19hY2NlcHRlZCBvbiBjbG9zZQogIAogIEFzIGEgZm9sbG93LXVwIGZyb20gY29tbWl0IGQ1YjVmNjRiY2UzYTgsIGNsZWFyIHRoZSBzb2NrX2FjY2VwdGVkIHN0YXR1cwogIHdoZW4gc3VjaCBhIHNvY2tldCBpcyBjbG9zZWQgdG8gYXZvaWQgYSByZS11c2VkIGNvbm5lY3Rpb24gdG8gcmV0YWluIHRoZQogIHN0YXRlIHdyb25nbHkuCiAgCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMTIvMDA3OS5odG1sCgotIHN0YXRpYyBTU0wgd2luZG93cyBidWlsZHM6IGFkZCBtb3JlIGxpYnMgdG8gdGhlIGxpbmsKICAKICBTdGFydGluZyB3aXRoIHNvbWUgcmVjZW50IE9wZW5TU0wgdmVyc2lvbnMgKDEuMC4wZSB3YXMgbWVudGlvbmVkKQogIGxpbmtpbmcgd2l0aCBhIHN0YXRpYyBvcGVuc3NsIHJlcXVpcmVzIGEgc2V0IG9mIG1vcmUgbGlicyB0byBiZSBsaW5rZWQKICBvbiBXaW5kb3dzLgogIAogIFRoYW5rcyBhbHNvIHRvIFN0ZXZlIEhvbG1lIGFuZCBNYXJ0aW4gU3RvcnNq9iBmb3IgYWRkaXRpb25hbCBmZWVkYmFjay4KICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0xMi8wMDYzLmh0bWwKICBSZXBvcnRlZCBieTogV2FyZCBXaWxsYXRzCgotIFtHb2toYW4gU2VuZ3VuIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIG11bHRpIGludGVyZmFjZTogZml4IGJsb2NrIHdoZW4gQ09OTkVDVF9PTkxZIG9wdGlvbiBpcyB1c2VkCgpEYW4gRmFuZHJpY2ggKDYgRGVjIDIwMTEpCi0gQWRkZWQgc29tZSBpbmNsdWRlIGZpbGVzIGluIGEgY291cGxlIG9mIGV4YW1wbGUgcHJvZ3JhbXMKICAKICBUaGlzIGltcHJvdmVzIHBvcnRhYmlsaXR5IG9mIHRoZSBleGFtcGxlcy4gIFRoaXMgcGF0Y2ggd2FzCiAgc3VibWl0dGVkIHRvIHRoZSBPcGVuQlNEIHBvcnRzIGNvbGxlY3Rpb24gYnkgbmFkZHkuCgpEYW5pZWwgU3RlbmJlcmcgKDYgRGVjIDIwMTEpCi0gTWFrZWZpbGVCdWlsZDogZml4IHRoZSBzdGF0aWMgYnVpbGQKICAKICBUaGlzIGlzIGEgbGVmdC1vdmVyIGZpeCBmcm9tIGNvbW1pdCBiN2UyNDJkZTBlIHRoYXQgVG9tIFdyaWdodAogIHN1Z2dlc3RlZC4KICAKICBSZXBvcnRlZCBieTogV2FyZCBXaWxsYXRzCgotIE9wZW5TU0w6IGNoZWNrIGZvciB0aGUgU1NMdjIgZnVuY3Rpb24gaW4gY29uZmlndXJlCiAgCiAgSWYgbm8gU1NMdjIgd2FzIGRldGVjdGVkIGluIE9wZW5TU0wgYnkgY29uZmlndXJlLCB0aGVuIHdlIGVuZm9yY2UgdGhlCiAgT1BFTlNTTF9OT19TU0wyIGRlZmluZSBhcyBpdCBzZWVtcyBzb21lIHBlb3BsZSByZXBvcnQgaXQgbm90IGJlaW5nCiAgZGVmaW5lZCBwcm9wZXJseSBpbiB0aGUgT3BlblNTTCBoZWFkZXJzLgoKLSBDVVJMT1BUX0NPTk5FQ1RUSU1FT1VUOiBkZWZhdWx0IGlzIDMwMCBzZWNvbmRzCiAgCiAgSWYgdGhlIG9wdGlvbiBpcyBzZXQgdG8gMCwgdGhlIGRlZmF1bHQgdGltZW91dCB3aWxsIGJlIHVzZWQgLSB3aGljaCBpbgogIG1vZGVybiBsaWJjdXJsIHZlcnNpb25zIGVxdWFscyAzMDAgc2Vjb25kcyAoPT0gNSBtaW51dGVzKS4KICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0xMi8wMDUxLmh0bWwKICBSZXBvcnRlZCBieTogVmxhZGltaXIgR3Jpc2hjaGVua28KCi0gW1JvYiBXYXJkIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIHByb2dyZXNzIGZ1bmN0aW9uIGV4YW1wbGU6IGluY2x1ZGUgdGltZWQgaW50ZXJ2YWwKICAKICBBZGRzIGEgdGltZXIgYmFzZWQgb2ZmIG9mIENVUkxJTkZPX1RPVEFMX1RJTUUgdGhhdCBpcyB1c2VkIHRvIHBlcmZvcm0KICBjZXJ0YWluIGFjdGlvbnMgYWZ0ZXIgYSBtaW5pbXVtIGFtb3VudCBvZiB0aW1lIGhhcyBwYXNzZWQgdXNpbmcgdGhlCiAgcHJvZ3Jlc3MgZnVuY3Rpb24uIEFzIGEgY29uc2VxdWVuY2UgdGhlIGN1cmwgaGFuZGxlIGlzIG5vdyBhbHNvIHBhc3NlZAogIGludG8gdGhlIHByb2dyZXNzIGZ1bmN0aW9uLiBQcm9ncmVzcyBleGFtcGxlIG5vdyBhbHNvIGluY2x1ZGVzIGFuCiAgZXhhbXBsZSBvZiBob3cgdG8gcmV0cmVpdmUgdGhlIFRPVEFMX1RJTUUgYW5kIHByaW50IGl0IG91dC4KCi0gUkVMRUFTRS1OT1RFUzogc3luY2VkIHdpdGggMzQ3Zjk1MWMzOTAKICAKICA4IG1vcmUgYnVncywgNSBtb3JlIGNvbnRyaWJ1dG9ycwoKLSBTU0g6IGZpeCBDVVJMT1BUX1NTSF9IT1NUX1BVQkxJQ19LRVlfTUQ1CiAgCiAgV2hlbiBhIDMyIGRpZ2l0IGhleCBrZXkgaXMgZ2l2ZW4gYXMgYSBob3N0a2V5IG1kNSBjaGVja3N1bSwgdGhlIGNvZGUKICB3b3VsZCBzdGlsbCBydW4gaXQgYWdhaW5zdCB0aGUga25vd25ob3N0IGNoZWNrIGFuZCBub3QgcHJvcGVybHkKICBhY2tub3dsZWRnZSB0aGF0IHRoZSBtZDUgc2hvdWxkIHRoZW4gYmUgdGhlIHNvbGUgZ3VpZGUgZm9yLgogIAogIFRoZSB2ZXJib3NlIG91dHB1dCBub3cgaW5jbHVkZXMgdGhlIGV2YWx1YXRlZCBNRDUgaG9zdGtleSBjaGVja3N1bS4KICAKICBTb21lIHJlbGF0ZWQgc291cmNlIGNvZGUgY29tbWVudHMgd2VyZSBhbHNvIHVwZGF0ZWQuCiAgCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zNDUxNTkyCiAgUmVwb3J0ZWQgYnk6IFJlemEgQXJiYWIKCi0gQ3VybF9yZXNvbHZlcl9pc19yZXNvbHZlZDogZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGhvc3QvcHJveHkgZXJyb3JzCiAgCiAgQXMgdGhlcmUgYXJlIGRpZmZlcmVudCByZXR1cm4gY29kZXMgZm9yIGhvc3QgdnMgcHJveHkgZXJyb3JzLCB0aGlzIGZ1bmN0aW9uCiAgbm93IHByb3Blcmx5IHJldHVybnMgdGhlIGNvZGUgcHJvcGVybHkgZGVwZW5kaW5nIG9uIHdoYXQgd2FzIGF0dGVtcHRlZCB0byBnZXQKICByZXNvbHZlZC4KICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9hcmNoaXZlLTIwMTEtMTIvMDAxMC5odG1sCiAgUmVwb3J0ZWQgYnk6IEphc29uIExpdQoKLSBjLWFyZXM6IHJldHVybiBwcm94eSBmYWlsdXJlIGZvciBhbGwgcHJveHkgdHlwZXMKICAKICBXaGVuIG1ha2luZyBhIGRpc3RpbmN0aW9uIHdoaWNoIHJldHVybiBjb2RlIHRvIHJldHVybiwgdGhlIGNvZGUgcHJldmlvdXNseQogIG9ubHkgcmVnYXJkZWQgSFRUUCBwcm94aWVzIHRvIGJlIHByb3hpZXMgYW5kIHRodXMgcmV0dXJuIGhvc3QtcmVsYXRlZCBlcnJvcnMKICBmb3IgZmFpbHVyZXMgb24gb3RoZXIgcHJveHkgdHlwZXMgdGhhbiBIVFRQLiBOb3cgYWxsIHByb3h5IHR5cGVzIHdpbGwgYmUKICBjb25zaWRlcmVkIHByb3hpZXMuLi4KCi0gRlRQOiBjbG9zZSBjYWxsYmFjayBmaXgKICAKICBLZWVwIHRyYWNrIG9mIHdoaWNoIHNvY2tldHMgdGhhdCBhcmUgdGhlIHJlc3VsdCBvZiBhY2NlcHQoKSBjYWxscyBhbmQKICByZWZ1c2UgdG8gY2FsbCB0aGUgY2xvc2Vzb2NrZXQgY2FsbGJhY2sgZm9yIHRob3NlIHNvY2tldHMuIFRlc3QgY2FzZSA1OTYKICBub3cgdmVyaWZpZXMgdGhhdCB0aGUgb3BlbiBzb2NrZXQgY2FsbGJhY2sgaXMgY2FsbGVkIHRoZSBzYW1lIG51bWJlciBvZgogIHRpbWVzIGFzIHRoZSBjbG9zZWQgc29ja2V0IGNhbGxiYWNrIGZvciBhY3RpdmUgRlRQIGNvbm5lY3Rpb25zLgogIAogIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTEyLzAwMTguaHRtbAogIFJlcG9ydGVkIGJ5OiBHb2toYW4gU2VuZ3VuCgotIEZUUDogY2FsbCBvcGVuc29ja2V0IGNhbGxiYWNrIHByb3Blcmx5CiAgCiAgV2hlbiB0aGUgbmV3IHNvY2tldCBpcyBjcmVhdGVkIGZvciBhbiBhY3RpdmUgY29ubmVjdGlvbiwgaXQgaXMgbm93IGRvbmUKICB1c2luZyB0aGUgb3BlbiBzb2NrZXQgY2FsbGJhY2suCiAgCiAgVGVzdCBjYXNlIDU5NiB3YXMgbW9kaWZpZWQgdG8gcnVuIGZpbmUsIGFsdGhvdWdoIGl0IGhpZGVzIHRoZSBmYWN0IHRoYXQKICB0aGUgY2xvc2UgY2FsbGJhY2sgaXMgc3RpbGwgY2FsbGVkIHRvbyBtYW55IHRpbWVzLCBhcyBpdCBhbHNvIGdldHMKICBjYWxsZWQgZm9yIGNsb3Npbmcgc29ja2V0cyB0aGF0IHdlcmUgY3JlYXRlZCB3aXRoIGFjY2VwdCgpLgoKLSBDdXJsX3NvY2tldDogaW50ZXJuYWwgcmVwbGFjZW1lbnQgZm9yIHNvY2tldCgpCiAgCiAgTW92ZWQgb3V0IGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byB3b3JrIGFzIGEgImdlbmVyaWMiIHNvY2tldCgpCiAgcmVwbGFjZW1lbnQuCgotIHRlc3Q6IHZlcmlmeSB0aGUgb3BlbnNvY2tldCBjYWxsYmFjayBmb3IgRlRQCiAgCiAgdGVzdCA1OTU6IGZvciBwYXNzaXZlIEZUUAogIHRlc3QgNTk2OiBmb3IgYWN0aXZlIEZUUAoKLSBbSmFzb24gR2xhc2dvdyBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBDVVJMT1BUX0ROU19TRVJWRVJTOiBzZXQgbmFtZSBzZXJ2ZXJzIGlmIHBvc3NpYmxlIChmaXgpCiAgCiAgRW5zdXJlIHRoYXQgQ1VSTEVfT0sgaXMgcmV0dXJuZWQgaWYgc2V0dGluZyB0aGUgbmFtZSBzZXJ2ZXJzIGlzIHN1Y2Nlc3NmdWxsLgoKLSBtdWx0aSBpbnRlcmZhY2U6IG9ubHkgdXNlIG5vbi1OVUxMIGZ1bmN0aW9uIHBvaW50ZXIhCiAgCiAgSWYgdGhlIHNvY2tldCBjYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyIGhhc24ndCBiZWVuIHNldCwgd2UgbXVzdCBub3QKICBhdHRlbXB0IHRvIHVzZSBpdC4gQ29tbWl0IGFkYzg4Y2EyMCBtYWRlIGl0IG1vcmUgbGlrZWx5IHRvIG9jY3VyLgoKLSBbSmFzb24gR2xhc2dvdyBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBtdWx0aTogaGFuZGxlIHRpbWVvdXRzIG9uIEROUyBzZXJ2ZXJzIGJ5IGNoZWNraW5nIGZvciBuZXcgc29ja2V0cwogIAogIElmIHRoZSBmaXJzdCBuYW1lIHNlcnZlciBpcyBub3QgYXZhaWxhYmxlLCB0aGUgbXVsdGkgaW50ZXJmYWNlIGRvZXMKICBub3QgaW52b2tlIHRoZSBzb2NrZXRfY2Igd2hlbiB0aGUgRE5TIHJlcXVlc3QgdG8gdGhlIGZpcnN0IG5hbWUgc2VydmVyCiAgdGltZXNvdXQuICBFbnN1cmUgdGhhdCB0aGUgbGlzdCBvZiBzb2NrZXRzIGFyZSBhbHdheXMgdXBkYXRlZCBhZnRlcgogIGNhbGxpbmcgQ3VybF9yZXNvbHZlcl9pc19yZXNvbHZlZC4KICAKICBUaGlzIGJ1ZyBjYW4gYmUgcmVwcm9kdWNlZCBpZiBDdXJsIGlzIGNvbXBsaWVkIHdpdGggLS1lbmFibGVfYXJlcyBhbmQKICB5b3VyIGNvZGUgdXNlcyB0aGUgbXVsdGkgc29ja2V0IGludGVyZmFjZXMgYW5kIHRoZQogIENVUkxNT1BUX1NPQ0tFVEZVTkNUSU9OIG9wdGlvbi4gIFRvIHRlc3QgdHJ5OgogICAgaXB0YWJsZXMgLUkgSU5QVVQgXAogICAgICAgICAgICAgLXMgJChzZWQgLW4gLWUgJy9uYW1lL3tzLy4qIC8vcDtxfScgL2V0Yy9yZXNvbHYuY29uZikvMzIgXAogICAgICAgICAgICAgLWogUkVKRUNUCiAgYW5kIHRoZW4gcnVuIGEgcHJvZ3JhbSB3aGljaCB1c2VzIHRoZSBtdWx0aS1pbnRlcmZhY2UuCgotIHRlc3QgODE1OiB2ZXJpZnkgUE9QMyBkb3QtZmlyc3Qtb24tbGluZSB1bmVzY2FwaW5nCgotIFtTdGV2ZSBIb2xtZSBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBQT1AzOiBmaXhlZCBlc2NhcGVkIGRvdCBub3QgYmVpbmcgc3RyaXBlZCBvdXQKICAKICBDaGFuZ2VkIHRoZSBlb2IgZGV0ZWN0aW9uIHRvIHdvcmsgYWNyb3NzIHRoZSB3aG9sZSBvZiB0aGUgYnVmZmVyIHNvIHRoYXQKICBsaW5lcyB0aGF0IGJlZ2luIHdpdGggYSBkb3QgKHdoaWNoIHRoZSBzZXJ2ZXIgd2lsbCBoYXZlIGVzY2FwZWQpIGFyZQogIHBhc3NlZCB0byB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIGNvcnJlY3RseS4KCllhbmcgVHNlICgzMCBOb3YgMjAxMSkKLSBidWlsZGNvbmY6IGZvbGxvdy11cCBmb3IgY29tbWl0IDdlMDJmN2ZkCgotIGJ1aWxkY29uZjogZml4IGxpYnRvb2wgMS41Lnggd2FybmluZ3MgdHJpZ2dlcmVkIHdpdGggYXV0b2NvbmYgMi42eCBvciBsYXRlcgogIAogIFVzaW5nIGxpYnRvb2wgMS41LnggKHggPCAyNikgd2l0aCBhdXRvY29uZiAyLjZ4IG9yIGxhdGVyIGdlbmVyYXRlcyB3YXJuaW5ncwogIGR1ZSB0byBzb21lIGxpYnRvb2wgdmFyaWFibGVzIG5vdCBmb2xsb3dpbmcgbmFtaW5nIGNvbnZlbnRpb24gZm9yIHZhcmlhYmxlcwogIHRoYXQgd2lsbCBiZSBjYWNoZWQuCiAgCiAgVGhpcyBpcyBhZGRyZXNzZWQgcmVuYW1pbmcgYSBjb3VwbGUgb2YgdmFyaWFibGVzIHRvIG1ha2UgdGhlc2UgZm9sbG93IGV4cGVjdGVkCiAgbmFtaW5nIGNvbnZlbnRpb24uCgpEYW5pZWwgU3RlbmJlcmcgKDMwIE5vdiAyMDExKQotIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIDEwMzhkMGFhMQogIAogIDUgYnVnZml4ZXMgYW5kIDEgbmV3IGNvbnRyaWJ1dG9yCgpZYW5nIFRzZSAoMjkgTm92IDIwMTEpCi0gcG9wMy5jOiBmaXggY29tcGlsZXIgd2FybmluZwoKLSBjb25maWd1cmU6IGF2b2lkIHVzYWdlIG9mIG1hY3JvIFBLR19DSEVDS19NT0RVTEVTCiAgCiAgbGliaWRuIG9wdGlvbiBhZGp1c3RlZCBpbiBvcmRlciB0byB1c2UgcGtnLWNvbmZpZyBpbmZvIHdoZW4gYXZhaWxhYmxlCiAgaW4gYSBzaW1pbGFyIHdheSBhcyB3ZSBhbHJlYWR5IGRvIGZvciBvdGhlciBsaWJyYXJpZXMuCgpEYW5pZWwgU3RlbmJlcmcgKDI5IE5vdiAyMDExKQotIFBPUDM6IGRldGVjdCB3aGVuIExJU1QgcmV0dXJucyBubyBtYWlscwogIAogIEJ5IG1ha2luZyBzdXJlIHRoZSBmdW5jdGlvbiBjYW4gZGV0ZWN0IGFuICJlbmQgb2YgYm9keSIgc2VxdWVuY2UKICBpbW1lZGlhdGVseSBvbiB0aGUgZmlyc3QgbGluZSwgdGVzdCA4MTEgaXMgbm93IGVuYWJsZWQuCgotIGZ0cHNlcnZlcjogb3V0cHV0IENSTEYgaW4gbG9ncwogIAogIFByZXZpb3VzbHkgdGhlIGxvZyBmdW5jdGlvbiB3b3VsZCBqdXN0IGZpbHRlciBvdXQgYWxsIENSIGFuZCBMRgogIG9jY3VyYW5jZXMgZnJvbSB0aGUgbG9nIHRvIG1ha2UgaXQgbW9yZSByZWFkYWJsZS4gVGhpcyBoYWQgdGhlIGRvd25zaWRlCiAgdGhhdCBpdCBtYWRlIGl0IHZlcnkgaGFyZCB0byBzZWUgQ1IgTEZzIHdoZW4gdGhleSBhY3R1YWxseSBtYXR0ZXJzLgogIAogIE5vdywgdGhleSdyZSBpbnN0ZWFkIGNvbnZlcnRlZCB0byAiW0NSXSIgYW5kICJbTFJdIiBpbiB0aGUgbG9nIHRvIGJlY29tZQogIGFwcGFyZW50IHRvIHJlYWRlcnMuCgotIFBPUDM6IGZpeCBlbmQgb2YgYm9keSBkZXRlY3Rpb24KICAKICBDdXJsX3BvcDNfd3JpdGUoKSBub3cgaGFzIGEgc3RhdGUgbWFjaGluZSB0aGF0IHNjYW5zIGZvciB0aGUgZW5kIG9mIGEKICBQT1AzIGJvZHkgc28gdGhhdCB0aGUgQ1IgTEYgJy4nIENSIExGIHNlcXVlbmNlIGNhbiBjb21lIGluIGV2ZXJ5dGhpbmcKICBmcm9tIG9uZSB1cCB0byBmaXZlIHN1YnNlcXVlbnQgcGFja2V0cy4KICAKICBUZXN0IGNhc2UgODEwIGlzIG1vZGlmaWVkIHRvIHVzZSBTTE9XRE9XTiB3aGljaCBtYWtlcyB0aGUgc2VydmVyIHBhdXNlCiAgYmV0d2VlbiBlYWNoIHNpbmdsZSBieXRlIGFuZCB0aHVzIG1ha2VzIHRoZSBQT1AzIGJvZHkgZ2V0IHNlbnQgdG8gY3VybAogIGJhc2ljYWxseSBvbmUgYnl0ZSBhdCBhIHRpbWUuCgotIHRlc3Q6IGFkZGVkIFBPUDMgdGVzdCB3aXRoIGRvdC1wcmVmaXhlZCBsaW5lCiAgCiAgVGVzdCA4MTUgaXMgZGlzYWJsZWQgZm9yIG5vdyBzaW5jZSBsaWJjdXJsIGN1cnJlbnRseSBkb2Vzbid0IHVuZXNjYXBlCiAgc3VjaCBsaW5lcyB0aGUgd2F5IGl0IHNob3VsZC4gU2VlIG1haWw6CiAgCiAgaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTExLzAzMjQuaHRtbAoKLSBjb25maWd1cmU6IGZpeCB0byBtYWtlIG9sZGVyIHBrZy1jb25maWcgcGxheSB3ZWxsCiAgCiAgY29uZmlndXJlLmFjOjEzNDk6IGVycm9yOiBwb3NzaWJseSB1bmRlZmluZWQgbWFjcm86IFBLR19DT05GSUdfTElCRElSCiAgCiAgT2J2aW91c2x5IHRoaXMgaXMgbm90IGEgcHJvYmxlbSB3aXRoIHBrZy1jb25maWcgMC4yNiBidXQgb2xkZXIgdmVyc2lvbnMKICBzZWVtIHRvIHNob3cgdGhpcy4KICAKICBGaXggc3VnZ2VzdGVkIGJ5OiBLYW1pbCBEdWRrYQogIFJlcG9ydGVkIGJ5OiBHdWVudGVyCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMTEvMDI5OC5odG1sCgotIHRlc3QgMTIxMTogRlRQIHRlc3QgdG8gcmVwZWF0IGJ1ZyAjMzQyOTI5OQogIAogICJBY3RpdmUgRlRQIGhhbmdzIGlmIHNlcnZlciBkb2VzIG5vdCBvcGVuIGRhdGEgY29ubmVjdGlvbiIKICAKICBUaGUgc2VydmVyIGZpcnN0IHNlbmRzIGEgMTUwIGFuZCB0aGVuIHdoZW4gbGliY3VybCB3YWl0cyBmb3IgdGhlIGRhdGEKICB0cmFuc2ZlciwgdGhlIHNlcnZlciBzZW5kcyBhIDQyNS4KCi0gW01hcmsgQnJhbmQgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgY29uZmlndXJlOiBhZGQgc3VwcG9ydCBmb3IgcGtnLWNvbmZpZyBkZXRlY3Rpb24gb2YgbGliaWRuCgotIEZUUCB0ZXN0cyAxMjA2IC0gMTIwOTogZG9uJ3QgZXhwZWN0IFFVSVQKICAKICBUaGUgcHJvdG9jb2wgcGFydHMgZm9yIHRoZXNlIHRlc3RzIGRvIG5vdCBpbmNsdWRlIFFVSVQgc2ltcGx5IGJlY2F1c2UKICB0aGUgZXJyb3IgaXMgQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUICgyOCkgd2hpY2ggaXMgYSBnZW5lcmljIHRpbWVvdXQKICBlcnJvciB3aXRob3V0IHNwZWNpZmljbHkgc2F5aW5nIGZvciB3aGljaCBjb25uZWN0aW9uIGl0IGNvbmNlcm5zLCBhbmQKICBmb3IgdGltZW91dHMgbGliY3VybCBtYXJrcyB0aGUgY29udHJvbCBjaGFubmVsIGFzICJpbnZhbGlkIi4gQXMgdGhpcwogIHRlc3QgY2FzZSB0aW1lcyBvdXQgZm9yIHRoZSBkYXRhIGNvbm5lY3Rpb24gaXQgY291bGQgc3RpbGwgdXNlIHRoZQogIGNvbnRyb2wgY2hhbm5lbC4KCllhbmcgVHNlICgyNSBOb3YgMjAxMSkKLSBDeWFTU0wgMi4wKyBsaWJyYXJ5IGluaXRpYWxpemF0aW9uIGFkanVzdG1lbnQKCkRhbmllbCBTdGVuYmVyZyAoMjUgTm92IDIwMTEpCi0gW0pvbmFzIFNjaG5lbGxpIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIHJlY3RpZnkgY29tbWVudAoKLSBTU0xTRVNTSU9OX1NIQVJFRDogbmV3IG1hY3JvIHRvIGNoZWNrIGlmIHNlc3Npb24gaXMgc2hhcmVkCiAgCiAgQWRkZWQgY29udmVuaWVuY2UgbWFjcm8gdG8gdXNlIHRvIGNoZWNrIGlmIGEgaGFuZGxlIGlzIHVzaW5nIGEgc2hhcmVkCiAgU1NMIHNlc3Npb24sIGFuZCBmaXhlZCBzbyB0aGF0IEN1cmxfc3NsX2Nsb3NlX2FsbCgpIGRvZXNuJ3QgbG9jayB3aGVuCiAgdGhlIHNlc3Npb24gaXNuJ3Qgc2hhcmVkLgoKWWFuZyBUc2UgKDI1IE5vdiAyMDExKQotIHRlbG5ldC5jOiBmaXggTVNWQyBjb21waWxlciB3YXJuaW5nCgotIHR2ZGlmZl9zZWNzKCk6IHN1Yi16ZXJvIHRpbWUgZGlmZmVyZW5jZSBhZGp1c3RtZW50CiAgCiAgU2tpcCBhIGZsb2F0aW5nIHBvaW50IGFkZGl0aW9uIG9wZXJhdGlvbiB3aGVuIGludGVncmFsIHBhcnQgb2YgdGltZSBkaWZmZXJlbmNlCiAgaXMgemVyby4gVGhpcyBhdm9pZHMgcG90ZW50aWFsIGZsb2F0aW5nIHBvaW50IGFkZGl0aW9uIHJvdW5kaW5nIHByb2JsZW1zIHdoaWxlCiAgcHJlc2VydmluZyBkZWNpbWFsIHBhcnQgdmFsdWUuCgpEYW5pZWwgU3RlbmJlcmcgKDI1IE5vdiAyMDExKQotIHRlbG5ldDogZml4IG1hY3JvcyB0byBhbGxvdyBwcm9wZXIgc2VtaWNvbG9uIHVzZQogIAogIE1hY3JvcyB0aGF0IGxvb2sgbGlrZSBmdW5jdGlvbiBjYWxscyBuZWVkIHRvIGJlIG1hZGUgc28gdGhhdCB3ZSBjYW4gdXNlCiAgc2VtaWNvbG9ucyBwcm9wZXJseSBmb3IgaW5kZW50YXRpb24gYW5kIGZvciByZWR1Y2luZyB0aGUgcmlzayBmb3IKICBtaXN0YWtlcyB3aGVuIHVzaW5nIHRoZW0uCgotIFtMYXVyZW50IFJhYnJldCBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBURUxORVQ6IGltcHJvdmVkIHRyZWF0bWVudCBvZiBvcHRpb25zCiAgCiAgMSkgZW5hYmxlcyB0aGUgV2luZG93IFNpemUgb3B0aW9uCiAgMikgYWxsb3dzIHRoZSBzZXJ2ZXIgdG8gZW5hYmxlIHRoZSBlY2hvIG1vZGUKICAzKSBhbGxvd3MgYW4gYXBwIHVzaW5nIGxpYmN1cmwgdG8gZGlzYWJsZSB0aGUgZGVmYXVsdCBiaW5hcnkgbW9kZQogIAogIFNpZ25lZC1vZmYtYnk6IExhdXJlbnQgUmFicmV0CgotIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIDJjOTA1ZmQxZjgyCgotIFtKb25hcyBTY2huZWxsaSBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBxdWVyeS1wYXJ0OiBpZ25vcmUgdGhlIFVSSSBwYXJ0IGZvciBnaXZlbiBwcm90b2NvbHMKICAKICBCeSBzZXR0aW5nIFBST1RPUFRfTk9VUkxRVUVSWSBpbiB0aGUgcHJvdG9jb2wgaGFuZGxlciBzdHJ1Y3QsIHRoZQogIHByb3RvY29sIHdpbGwgZ2V0IHRoZSAicXVlcnkgcGFydCIgb2YgdGhlIFVSTCBjdXQgb2ZmIGJlZm9yZSB0aGUgZGF0YSBpcwogIGhhbmRsZWQgYnkgdGhlIHByb3RvY29sLXNwZWNpZmljIGNvZGUuIFRoaXMgbWFrZXMgbGliY3VybCBhZGhlcmUgdG8KICBSRkMzOTg2IHNlY3Rpb24gMi4yLgogIAogIFRlc3QgMTIyMCBpcyBhZGRlZCB0byB2ZXJpZnkgYSBmaWxlOi8vIFVSTCB3aXRoIHF1ZXJ5LXBhcnQuCgotIHN5bWJvbHMucGw6IHByb3ZpZGUgTElCQ1VSTF9IQVMgbWFjcm8gZm9yIGFwcHMKICAKICBFeHBlcmllbmNlIGhhcyBzaG93biB0aGF0IHRoZSBzeW1ib2xzLWluLXZlcnNpb25zIGZpbGUgaXMgdmVyeSB1c2VmdWwgdG8KICBhcHBsaWNhdGlvbnMgdGhhdCB3YW50IHRvIGJ1aWxkIHdpdGggYSB3aWRlIHJhbmdlIG9mIGxpYmN1cmwgdmVyc2lvbnMuCiAgSXQgaXMgaG93ZXZlciBlYXN5IHRvIGdldCBpdCB3cm9uZyBhbmQgdGhlIHNvdXJjZSBnZXRzIGEgYml0IG1lc3N5IHdpdGgKICBhbGwgdGhlIGZpeGVkIG51bWVyaWNhbCBjb21wYXJpc2lvbnMuCiAgCiAgVGhlIHBvaW50IG9mIHRoaXMgc2NyaXB0IGlzIHRvIHByb3ZpZGUgYW4gZWFzeS10by11c2UgbWFjcm8gZm9yIGxpYmN1cmwtCiAgdXNpbmcgYXBwbGljYXRpb25zIHRvIGRvIHByZXByb2Nlc3NvciBjaGVja3MgZm9yIHNwZWNpZmljIGxpYmN1cmwKICBkZWZpbmVzLCBhbmQgeWV0IG1ha2UgdGhlIGNvZGUgY2xlYXJseSBzaG93IHdoYXQgdGhlIG1hY3JvIGlzIHVzZWQgZm9yLgoKWWFuZyBUc2UgKDI0IE5vdiAyMDExKQotIGxpYjU3My5jOiBmaXggZG91YmxlIGRhdGEgdHlwZSB2YXJpYWJsZSBjb21wYXJpc29uIHdpdGggemVybwoKLSBnZXRpbmZvLmM6IHJlc2V0IGFwcCBjb25uZWN0IHRpbWUgd2hlbiBjbGVhcmluZyBzZXNzaW9uLWluZm8gdGltZSB2YXJpYWJsZXMKCi0gRml4IHVucmVsZWFzZWQgcmVncmVzc2lvbiB3aGVuIHVzaW5nIHdpbmRvd3MgZ251dGxzIHZlcnNpb25zIG9sZGVyIHRoYW4gMi44CgpEYW5pZWwgU3RlbmJlcmcgKDIzIE5vdiAyMDExKQotIFtNYXJrIEJyYW5kIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIGdudXRsczogb25seSB0cmFuc2xhdGUgd2luc29jayBlcnJvcnMgZm9yIG9sZCB2ZXJzaW9ucwogIAogIEJ1Z2ZpeDogaHR0cHMgaGFuZHNoYWtlIGZhaWxzIHVzaW5nIGdudXRscyAzIG9uIHdpbmRvd3MKICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvaW5kZXgucGhwP2Z1bmM9ZGV0YWlsJmFpZD0zNDQxMDg0Jmdyb3VwX2lkPTk3NiZhdGlkPTEwMDk3NgogIAogIE5ldyBnbnV0bHMgdmVyc2lvbnMgaGF2ZSBhbiBlcnJvciBoYW5kbGVyIHRoYXQga25vd3MgYWJvdXQgV2luc29jawogIGVycm9ycywgd2hpY2ggaXMgd2h5IGdudXRsc190cmFuc3BvcnRfc2V0X2dsb2JhbF9lcnJubygpIHdhcyBkZXByZWNhdGVkCiAgYW5kIHRoZW4gcmVtb3ZlZC4KICAKICBUaGlzIGlzIGEgY29ycmVjdGlvbiBvZiBjb21taXQgZjViYjM3MCAoYmxhbWUgbWUpIHdoaWNoIG1lYW50IHRvCiAgcmVpbXBsZW1lbnQgZ251dGxzX3RyYW5zcG9ydF9zZXRfZ2xvYmFsX2Vycm5vKCksIHdoaWNoIGlzIG5vdCBuZWNlc3NhcnkuCgotIHByb3RvY29sX2Nvbm5lY3Q6IHNob3cgdmVyYm9zZSBjb25uZWN0IGFuZCBzZXQgY29ubmVjdCB0aW1lCiAgCiAgUmVncmVzc2lvbjogY29tbWl0IGI5OThkOTViIChzaGlwcGVkIGZpcnN0IGluIHJlbGVhc2UgNy4yMi4wKSBtYWRlIHRoZQogIGNvbmRpdGlvbiBhbHdheXMgZXF1YWwgZmFsc2UgdGhhdCBzaG91bGQgcmVzZXQgdGhlIFRJTUVSX0NPTk5FQ1QgdGltZXIKICBhbmQgY2FsbCB0aGUgQ3VybF92ZXJib3NlY29ubmVjdCgpIGZ1bmN0aW9uLgogIAogIFJlcG9ydGVkIGJ5OiAiQ2FwdGFpbiBCYXNpbCIKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9hcmNoaXZlLTIwMTEtMTEvMDAzNS5odG1sCgotIC1KIC1POiB1c2UgLU8gbmFtZSBpZiBubyBDb250ZW50LURpc3Bvc2l0aW9uIGhlYWRlciBjb21lcyEKICAKICBBIHJlZ3Jlc3Npb24gYmV0d2VlbiA3LjIyLjAgYW5kIDcuMjMuMCAtLSBkb3dubG9hZGluZyBhIGZpbGUgd2l0aCB0aGUKICBmbGFncyAtTyBhbmQgLUogcmVzdWx0cyBpbiB0aGUgY29udGVudCBiZWluZyB3cml0dGVuIHRvIHN0ZG91dCBpZiBhbmQKICBvbmx5IGlmIHRoZXJlIHdhcyBubyBDb250ZW50LURpc3Bvc2l0aW9uIGhlYWRlciBpbiB0aGUgaHR0cCByZXNwb25zZS4gSWYKICB0aGVyZSBpcyBhIEMtRCBoZWFkZXIgd2l0aCBhIGZpbGVuYW1lIGF0dHJpYnV0ZSwgdGhlIG91dHB1dCBpcyBjb3JyZWN0bHkKICB3cml0dGVuLgogIAogIFJlcG9ydGVkIGJ5OiBEYXZlIFJlaXNuZXIKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9hcmNoaXZlLTIwMTEtMTEvMDAzMC5odG1sCgotIFtNYXJ0aW4gU3RvcnNqbyBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBBZGQgc3VwcG9ydCBmb3IgdXNpbmcgbmV0dGxlIGluc3RlYWQgb2YgZ2NyeXB0IGFzIGdudXRscyBiYWNrZW5kCgotIFtKb25hcyBTY2huZWxsaSBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICB0ZXN0OiBTRlRQIHF1b3RlIGNvbW1hbmRzIHdpdGggKiBwcmVmaXgKICAKICBSZWxhdGVkIHRvIHRoZSBmNjQ4MTJjYTYzIGNvbW1pdAoKLSBDVVJMT1BUX1FVT1RFOiBTRlRQIHN1cHBvcnRzIHRoZSAnKictcHJlZml4IG5vdwoKLSBbSm9uYXMgU2NobmVsbGkgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgU0ZUUDogc3VwcG9ydCAnKicgcHJlZml4IGZvciBxdW90ZSBvcGVyYXRpb25zCiAgCiAgcHJlZml4aW5nIGEgY29tbWFuZCB3aXRoICcqJyBtZWFucyBpdCBpcyBhbGxvd2VkIHRvIGZhaWwgd2l0aG91dAogIGFib3J0aW5nIHRoZSBjaGFpbiBhY3Rpb25zCgotIGdldHNlc3Npb25pZDogZG9uJ3QgZXZlciByZXR1cm4gd2hpbGUgbG9ja2VkCiAgCiAgQWxzbywgY2hlY2sgZm9yIHRoZSBzZXNzaW9uIHNoYXJpbmcgYml0IGluc3RlYWQgb2YgY29tcGFyaW5nIHBvaW50ZXJzCgotIEN1cmxfc3NsX2dldHNlc3Npb25pZDogaW5jcmVhc2UgdGhlIHZhbHVlLCBub3QgdGhlIHBvaW50ZXIKCi0gVEhBTktTOiBvbmUgbmV3IGNvbnRyaWJ1dG9yIGluIDcuMjMuMQoKLSBbQWxlamFuZHJvIEFsdmFyZXogQXlsbG9uIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIFNTTCBzZXNzaW9uIHNoYXJlOiBtb3ZlIHRoZSBhZ2UgY291bnRlciB0byB0aGUgc2hhcmUgb2JqZWN0CiAgCiAgUHJldmlvdXNseSB0aGUgYWdlIGNvdW50ZXIgd291bGQgYmUgY291bnRlZCBpbmRpdmlkdWFsbHkgaW4gZWFjaCBlYXN5CiAgaGFuZGxlIHRoYXQgc2hhcmVkIFNTTCBzZXNzaW9ucyEKCi0gW0FsZWphbmRybyBBbHZhcmV6IEF5bGxvbiBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBsaWJ0ZXN0IGJ1aWxkOiBhZGQgdGhlIG1pc3NpbmcgbGliNTg2CgotIFtKYXNvbiBHbGFzZ293IGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIENVUkxPUFRfRE5TX1NFUlZFUlM6IHNldCBuYW1lIHNlcnZlcnMgaWYgcG9zc2libGUKCi0gUkVMRUFTRS1OT1RFUzogY29ycmVjdCB0aGUgcmVsZWFzZSBhbmQgY29udHJpYnV0b3IgbnVtYmVycwoKVmVyc2lvbiA3LjIzLjEgKDE3IE5vdiAyMDExKQoKRGFuaWVsIFN0ZW5iZXJnICgxNyBOb3YgMjAxMSkKLSBGaW5kV2luMzJDQUNlcnQ6IHJldHVybiBPSyBldmVuIGlmIENBIGNlcnQgaXNuJ3QgZm91bmQKClZlcnNpb24gNy4yMy4xICgxNyBOb3YgMjAxMSkKICAKClZlcnNpb24gNy4yMy4xICgxNyBOb3YgMjAxMSkKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0xMS8wMTgwLmh0bWwKClZlcnNpb24gNy4yMy4xICgxNyBOb3YgMjAxMSkKICBSZXBvcnRlZCBieTogTWFyayBCcmFuZAoKRGFuIEZhbmRyaWNoICgxNiBOb3YgMjAxMSkKLSBjdXJsIGhhcyBiZWVuIGJ1aWx0IG9uIG1hbnkgQW5kcm9pZCB2ZXJzaW9ucwoKRGFuaWVsIFN0ZW5iZXJnICgxNSBOb3YgMjAxMSkKLSA3LjI0LjA6IHN0YXJ0IHRoZSB3b3JrCgotIFRIQU5LUzogYWRkZWQgMTggbmV3IGNvbnRyaWJ1dG9ycyBmcm9tIDcuMjMuMAoKVmVyc2lvbiA3LjIzLjAgKDE0IE5vdiAyMDExKQoKRGFuIEZhbmRyaWNoICgxNCBOb3YgMjAxMSkKLSBjdXJsX2Vhc3lfc2V0b3B0IGFyZ3VtZW50cyBzaG91bGQgYmUgb2YgdHlwZSBsb25nIGluIHRoZSBleGFtcGxlcwoKRGFuaWVsIFN0ZW5iZXJnICgxMiBOb3YgMjAxMSkKLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCAxMDEyMGU2YQogIAogIG9uZSBtb3JlIGJ1ZyBmaXggYW5kIGNvbnRyaWJ1dG9yCgotIHByb2dyZXNzX2NiOiBhdm9pZCBidWZmZXIgb3ZlcmZsb3cKICAKICBUaGUgcHJvZ3Jlc3MgYmFyIG91dHB1dCBmdW5jdGlvbiB3b3VsZCBibGluZGx5IHVzZSB0aGUgdGVybWluYWwgd2lkdGgKICB3aXRob3V0IGJvdW5kcyBjaGVja2luZy4gV2hlbiB1c2luZyBhIHZlcnkgd2lkZSB0ZXJtaW5hbCB0aGF0IGNhdXNlZCBhCiAgYnVmZmVyIG92ZXJmbG93IGFuZCBzZWdmYXVsdC4KICAKICBXZSBub3cgbGltaXQgdGhlIG1heCBiYXIgd2l0aCB0byAyNTUgY29sdW1ucywgYW5kIEkgc2ltcGxpZmllZCB0aGUgY29kZQogIHRvIGF2b2lkIGFuIGV4dHJhIHNucHJpbnRmIGFuZCBidWZmZXIuCiAgCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zNDM1NzEwCiAgUmVwb3J0ZWQgYnk6IEFsZXhleSBaYWtobGVzdGluCgpZYW5nIFRzZSAoMTEgTm92IDIwMTEpCi0gQWN0aXZlIG1vZGUgRlRQIHRlc3QgY2FzZXMgd2l0aCBzZXJ2ZXIgbm90IGVzdGFibGlzaGluZyBkYXRhIGNvbm5lY3Rpb24KICAKICA1OTEgLT4gRlRQIG11bHRpIFBPUlQgYW5kIDQyNSBvbiB1cGxvYWQKICA1OTIgLT4gRlRQIG11bHRpIFBPUlQgYW5kIDQyMSBvbiB1cGxvYWQKICA1OTMgLT4gRlRQIG11bHRpIFBPUlQgdXBsb2FkLCBubyBkYXRhIGNvbm4gYW5kIG5vIHRyYW5zaWVudCBuZWcuIHJlcGx5CiAgNTk0IC0+IEZUUCBtdWx0aSBQT1JUIHVwbG9hZCwgbm8gZGF0YSBjb25uIGFuZCBubyBwb3NpdGl2ZSBwcmVsaW0uIHJlcGx5CiAgCiAgMTIwNiAtPiBGVFAgUE9SVCBhbmQgNDI1IG9uIGRvd25sb2FkCiAgMTIwNyAtPiBGVFAgUE9SVCBhbmQgNDIxIG9uIGRvd25sb2FkCiAgMTIwOCAtPiBGVFAgUE9SVCBkb3dubG9hZCwgbm8gZGF0YSBjb25uIGFuZCBubyB0cmFuc2llbnQgbmVnYXRpdmUgcmVwbHkKICAxMjA5IC0+IEZUUCBQT1JUIGRvd25sb2FkLCBubyBkYXRhIGNvbm4gYW5kIG5vIHBvc2l0aXZlIHByZWxpbWluYXJ5IHJlcGx5CgpHdWVudGVyIEtuYXVmICg4IE5vdiAyMDExKQotIEZpeCB0byBza2lwIHVudHJ1c3RlZCBjZXJ0cy4KCkRhbmllbCBTdGVuYmVyZyAoNiBOb3YgMjAxMSkKLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCBlMzE2NmRmMWJiMwogIAogIDQgbmV3IGJ1Z2ZpeGVzLCAyIG1vcmUgY29udHJpYnV0b3JzCgotIGZ0cCBQT1JUOiBkb24ndCBoYW5nIGlmIGJpbmQoKSBmYWlscwogIAogIFdoZW4gdGhlIHVzZXIgcmVxdWVzdHMgUE9SVCB3aXRoIGEgc3BlY2lmaWMgcG9ydCBvciBwb3J0IHJhbmdlLCB0aGUgY29kZQogIGNvdWxkIGxvY2sgdXAgaW4gYW4gZW5kbGVzcyBsb29wLiBUaGVyZSdzIG5vdyBhbiBleHRyYSBjb25kaXRpb25hbCB0aGF0CiAgbWFrZXMgc3VyZSB0byBzcGVjaWFsIHRyZWF0IHRoZSBlcnJvciBhbmQgdHJ5IHRoZSBsb2NhbCBhZGRyZXNzIG9ubHkKICBvbmNlIHNvIGEgc2Vjb25kIGZhaWx1cmUgd2lsbCBhYm9ydCB0aGUgbG9vcCBjb3JyZWN0bHkuCiAgCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zNDMzOTY4CiAgUmVwb3J0ZWQgYnk6IEdva2hhbiBTZW5ndW4KCi0gcGluZ3Bvbmc6IGNoYW5nZSB0d28gY29tbWVudHMgd3JvbmdseSByZWZlcnJpbmcgIkZUUCIKICAKICBKdXN0IGEgc2lnbiBvZiB3aGVyZSB0aGUgY29kZSBvcmlnaW5hbGx5IHdhcyByaXBwZWQgb3V0IGZyb20uIE5vdyBpdCBpcwogIGdlbmVyaWMgInBpbmdwb25nIi4KCi0gdGVzdCA1OTA6IHZlcmlmeSB0aGUgYnVnIGZpeCBpbiA0ODUxZGFmY2YxCiAgCiAgVGhpcyB0ZXN0IGlzIGNyZWF0ZWQgdG8gdmVyaWZ5IFJlbmUgQmVybmhhcmR0J3MgcGF0Y2ggd2hpY2ggbWFrZXMgc3VyZQogIGxpYmN1cmwgcHJvcGVybHkgX25vdF8gZGVhbHMgd2l0aCBOZWdvdGlhdGUgaWYgbm90IGFza2VkIHRvIGV2ZW4gaWYgdGhlCiAgcHJveHkgc2F5cyBpdCBjYW4gc2VydmUgaXQuCgotIFtSZW5lIEJlcm5oYXJkdCBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBIVFRQIGF1dGg6IGZpeCBwcm94eSBOZWdvdGlhdGUgYnVnCiAgCiAgSWYgYSBwcm94eSBvZmZlcnMgc2V2ZXJhbCBBdXRoZW50aWNhdGlvbiBzY2hlbWVzIHdoZXJlIE5UTE0gYW5kCiAgTmVnb3RpYXRlIGFyZSBvZmZlcmVkIGJ5IHRoZSBwcm94eSBhbmQgeW91IHRlbGwgbGliY3VybCBub3QgdG8gdXNlIHRoZQogIE5lZ290aWF0ZSBzY2hlbWUgdGhlbiB0aGUgcmVxdWVzdCBuZXZlciByZXR1cm5zIHdoZW4gdGhlIHByb3h5IGFuc3dlcnMKICB3aXRoIGl0cyBIVFRQIDQwNyByZXBseS4KICAKICBJdCBpcyByZXByb2R1Y2libGUgYnkgdGhlIGZvbGxvd2luZyBzdGVwczoKICAKICAtIFVzZSBhIHByb3h5IHRoYXQgb2ZmZXJzIE5UTE0gYW5kIE5lZ290aWF0ZSAoIENVUkxPUFRfUFJPWFkgYW5kCiAgQ1VSTE9QVF9QUk9YWVBPUlQgKQogIAogIC0gVGVsbCBsaWJjdXJsIE5PVCB0byB1c2UgTmVnb3RpYXRlIENVUkxfRUFTWV9TRVRPUFQoQ1VSTE9QVF9QUk9YWUFVVEgsCiAgQ1VSTEFVVEhfQkFTSUMgfCBDVVJMQVVUSF9ESUdFU1QgfCBDVVJMQVVUSF9OVExNICkKICAKICAtIFN0YXJ0IHRoZSByZXF1ZXN0CiAgCiAgVGhlIGNhbGwgdG8gQ1VSTF9FQVNZX1BFUkZPUk0gbmV2ZXIgcmV0dXJucy4gSWYgeW91IHN3aXRjaCBvbiBkZWJ1ZwogIGxvZ2dpbmcgeW91IGNhbiBzZWUgdGhhdCBsaWJjdXJsIGlzc3VlcyBhIG5ldyByZXF1ZXN0IEFzIHNvb24gYXMgaXQKICByZWNlaXZlZCB0aGUgNDA3IHJlcGx5LiBJbnN0ZWFkIGl0IHNob3VsZCByZXR1cm4gYW5kIHNldCB0aGUgcmVzcG9uc2UKICBjb2RlIHRvIDQwNy4KICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0xMC8wMzIzLmh0bWwKCllhbmcgVHNlICg0IE5vdiAyMDExKQotIHNzbHVzZS5jOiBmaXggY2FsbGluZyBvZiBPcGVuU1NMJ3MgRVJSX3JlbW92ZV9zdGF0ZSgwKQogIAogIE1vdmUgY2FsbGluZyBvZiBFUlJfcmVtb3ZlX3N0YXRlKDApIGEuay5hIEVSUl9yZW1vdmVfdGhyZWFkX3N0YXRlKE5VTEwpCiAgZnJvbSBDdXJsX29zc2xfY2xvc2VfYWxsKCkgdG8gQ3VybF9vc3NsX2NsZWFudXAoKS4KICAKICBJbiB0aGlzIHdheSBFUlJfcmVtb3ZlX3N0YXRlKDApIGlzIG5vdyBvbmx5IGNhbGxlZCBpbiBsaWJjdXJsIGJ5CiAgY3VybF9nbG9iYWxfY2xlYW51cCgpLiBQcmV2aW91c2x5IGl0IHdvdWxkIGdldCBjYWxsZWQgYnkgZnVuY3Rpb25zCiAgY3VybF9lYXN5X2NsZWFudXAoKSwgY3VybF9tdWx0aV9jbGVhbnVwIGFuZCBwb3RlbnRpYWxseSBlYWNoIHRpbWUgYQogIGNvbm5lY3Rpb24gd2FzIHJlbW92ZWQgZnJvbSBhIGNvbm5lY3Rpb24gY2FjaGUgbGVhZGluZyB0byBwcmVtYXR1cmUKICBkZXN0cnVjdGlvbiBvZiBPcGVuU1NMJ3MgdGhyZWFkIGxvY2FsIHN0YXRlIGhhc2guCiAgCiAgTXVsdGktdGhyZWFkZWQgYXBwcyB1c2luZyBPcGVuU1NMIGVuYWJsZWQgbGliY3VybCBzaG91bGQgc3RpbGwgY2FsbAogIGZ1bmN0aW9uIEVSUl9yZW1vdmVfc3RhdGUoMCkgb3IgRVJSX3JlbW92ZV90aHJlYWRfc3RhdGUoTlVMTCkgYXQgdGhlCiAgdmVyeSBlbmQgZW5kIG9mIHRocmVhZHMgdGhhdCBkbyBub3QgY2FsbCBjdXJsX2dsb2JhbF9jbGVhbnVwKCkuCgotIHRvb2xfY2Jfd3J0LmM6IGRpc2FtYmlndWF0ZSB3YXJuaW5nIG1lc3NhZ2UKCi0gdG9vbF9jZmdhYmxlLmM6IHBlbmRpbmcgY2hlY2sgZG9uZQoKLSB1cmwuYyBhbmQgZmlsZS5jOiBmaXggT09NIHRyaWdnZXJlZCBzZWdmYXVsdAoKRGFuaWVsIFN0ZW5iZXJnICgzIE5vdiAyMDExKQotIHJlbmFtZSBmdHBfc3NsOiB0aGUgc3RydWN0IGZpZWxkIGlzIHVzZWQgZm9yIG1hbnkgcHJvdG9jb2xzCiAgCiAgTm93IGNhbGxlZCAndXNlX3NzbCcgaW5zdGVhZCwgd2hpY2ggYmV0dGVyIG1hdGNoZXMgdGhlIGN1cnJlbnQgQ1VSTE9QVAogIG5hbWUgYW5kIHNpbmNlIHRoZSBvcHRpb24gaXMgdXNlZCBmb3IgYWxsIHBpbmdwb25nIHByb3RvY29scyAoYXQgbGVhc3QpCiAgaXQgbWFrZXMgc2Vuc2UgdG8gbm90IHVzZSAnZnRwJyBpbiB0aGUgbmFtZS4KCllhbmcgVHNlICgyIE5vdiAyMDExKQotIFtEYW5pZWwgU3RlbmJlcmcgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgZ3Rsc19jb25uZWN0X3N0ZXAxOiByZW1vdmUgdXNlIG9mIGRlcHJlY2F0ZWQgZnVuY3Rpb25zCiAgCiAgVXNlIGdudXRsc19wcmlvcml0eV9zZXRfZGlyZWN0KCkgaW5zdGVhZCBvZiBnbnV0bHNfcHJvdG9jb2xfc2V0X3ByaW9yaXR5KCkuCiAgCiAgUmVtb3ZlIHRoZSBnbnV0bHNfY2VydGlmaWNhdGVfdHlwZV9zZXRfcHJpb3JpdHkoKSB1c2Ugc2luY2UgeDUwOSBpcyB0aGUKICBkZWZhdWx0IGNlcnRpZmljYXRlIHR5cGUgYW55d2F5LgogIAogIFJlcG9ydGVkIGJ5OiBWaW5jZW50IFRvcnJpCgotIHVybC5jIGFuZCB0cmFuc2Zlci5jOiBudWxsaWZ5IGNvbm5lY3Rpb24gcG9pbnRlciB3aGVuIGZyZWUoKSdlZAoKLSBGVFAgdGVzdCBzZXJ2ZXI6IE5PREFUQUNPTk4gY29tbWFuZHMgZm9sbG93LXVwCiAgCiAgTWFrZSBOT0RBVEFDT05ONDI1IGFuZCBOT0RBVEFDT05ONDIxIHJldHVybiBhIDE1MCBwb3NpdGl2ZSBwcmVsaW1pbmFyeSByZXBseQogIGJlZm9yZSA0MjUgb3IgNDIxLgogIAogIE5ldyBOT0RBVEFDT05OMTUwIHJldHVybnMgMTUwIHdpdGhvdXQgZnVydGhlciBwb3NpdGl2ZSBub3IgbmVnYXRpdmUgcmVwbHkKICAKICBOb3cgTk9EQVRBQ09OTiBkb2Vzbid0IHJlcGx5IGFueXRoaW5nIGF0IGFsbC4KCi0gbXVsdGkuYzogT09NIGhhbmRsaW5nIGZpeAoKLSBGVFAgdGVzdCBzZXJ2ZXI6IE5PREFUQUNPTk4gY29tbWFuZHMgZm9sbG93LXVwCiAgCiAgTWFrZSBOT0RBVEFDT05OIGN1c3RvbSBjb21tYW5kcyBhcHBseSB0byBib3RoIGFjdGl2ZSBhbmQgcGFzc2l2ZSBGVFAsCiAgYW5kIGVuc3VyZSA0MjUgYW5kIDQyMSBhcmUgbm90IHJldHVybmVkIHVubGVzcyBkYXRhIGNoYW5uZWwgdXNhZ2UgaXMKICBhdHRlbXB0ZWQuCgotIHRvb2xfY2Jfc2VlLmg6IGZpeCBjb21waWxlciB3YXJuaW5nCgotIHNldHVwLmg6IGZpeCBjb21waWxlciB3YXJuaW5nCgotIEZUUCB0ZXN0IHNlcnZlcjogTk9EQVRBQ09OTiBjb21tYW5kcyBjb21taXQgYzc2MWZjYjAgZm9sbG93LXVwCiAgCiAgQWRqdXN0bWVudHMgdGhhdCBtYWtlIE5PREFUQUNPTk4gY3VzdG9tIGNvbW1hbmRzIGZ1bGx5IHVzYWJsZS4KCkRhbmllbCBTdGVuYmVyZyAoMzAgT2N0IDIwMTEpCi0gW0RhdmUgUmVpc25lciBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBkb2MvY3VybC4xOiBmaXggc2VudGVuY2Ugd2l0aCBlbmRpbmcgZm9yIC0jIG9wdGlvbgogIAogIFRyeSB0byBiZSBhIGxpdHRsZSBtb3JlIGRlc2NyaXB0aXZlIGFib3V0IHRoZSBlZmZlY3Qgb2YgdGhpcyBmbGFnLAogIHJhdGhlciB0aGFuIHBhcnJvdGluZyB3aGF0IHdhcyBzYWlkIGluIHRoZSBwYXJhZ3JhcGgganVzdCBhYm92ZS4KCllhbmcgVHNlICgzMCBPY3QgMjAxMSkKLSBGVFAgdGVzdCBzZXJ2ZXI6IGZpeCBzZXJ2ZXIgdW5yZXNwb25zaXZlbmVzcwogIAogIFNvbWUgdG9ydHVyZSB0ZXN0cyBsZWZ0IEZUUCB0ZXN0IHNlcnZlciBpbiBhbiB1bnJlc3BvbnNpdmUgc3RhdGUsIHJlc3VsdGluZwogIGluIHRvcnR1cmUgdGVzdHMgdGhhdCBhY3R1YWxseSBjb21wbGV0ZWQgZm9sbG93aW5nIHVuZXhwZWN0ZWQgY29kZSBwYXRocy4KICAKICBDaGFuZ2VzIGluIHRoaXMgY29tbWl0IHNvbGVseSBhZGRyZXNzIHRoaXMgaXNzdWUgYW5kIHNvbWUgYWRqdXN0bWVudHMgZm9yCiAgZnRwc2VydmVyLnBsIGxvZ2dpbmcgcmVsYXRpdmUgdG8gZGF0YSBjaGFubmVsIGVzdGFibGlzaG1lbnQgYW5kIHRlYXIgZG93bi4KICBQZW5kaW5nIE5PREFUQUNPTk4gcmVsYXRpdmUgYWRqdXN0bWVudHMgcmVzZXJ2ZWQgZm9yIGEgZnVydGhlciBjb21taXQuCgotIHJ1bnRlc3RzLnBsOiBydW5uaW5nIHNlcnZlciBjaGVja3MgLSBjb21taXQgNDQ2NDU4M2EgZm9sbG93LXVwCiAgCiAgRW5zdXJlIHZlcmlmaWNhdGlvbiB0YWtlcyBwbGFjZSB3aXRoIG5vIHNlcnZlciBjb21tYW5kcyBmaWxlLgogIElnbm9yZSB2ZXJib3NlIHNldHRpbmcgZm9yIHJ1bm5pbmcgc2VydmVyIHByZWNoZWNrLgogIFR3ZWFrIHVucmVzcG9uc2l2ZSBzZXJ2ZXIgbWVzc2FnZSwgdG8gYWxsb3cgZGV0ZWN0aW9uIGJ5IGhheHguc2Ugc2NyaXB0cy4KCi0gZ3Rscy5jOiBnbnV0bHNfdHJhbnNwb3J0X3NldF9nbG9iYWxfZXJybm8oKSBkZXByZWNhdGVkIGluIHZlcnNpb24gMi4xMi4zCgotIHJ1bnRlc3RzLnBsOiBydW5uaW5nIHNlcnZlciBjaGVja3MgLSBjb21taXQgMzY3NmVjOTYgZm9sbG93LXVwCiAgCiAgRml4IGNhbGxlZCBzdWIgd2hlbiBjaGVja2luZyBURlRQIHNlcnZlciwgYW5kIGFkanVzdCBtZXNzYWdlLgoKLSBydW50ZXN0cy5wbDogcnVubmluZyBzZXJ2ZXIgY2hlY2tzIC0gY29tbWl0IDQ0NjQ1ODNhIGZvbGxvdy11cAogIAogIEV4dGVuZGVkIHNlcnZlciBjaGVja3MgdG8gb3RoZXJzIGluIGFkZGl0aW9uIHRvIHBpbmdwb25nIHdoZW4gdG9ydHVyZSB0ZXN0aW5nLgoKLSBsaWI1ODkuYzogYWRkIENVUkxPUFRfUkVBRERBVEEgbWlzc2luZyBzdHVmZgoKLSBmdHBzZXJ2ZXIucGw6IHRocmVlIG5ldyBjdXN0b20gRlRQIHNlcnZlciBjb21tYW5kcyB0byBkaXNhYmxlIGRhdGEgY2hhbm5lbAogIAogIE5PREFUQUNPTk40MjE6IGFwcGxpZXMgb25seSB0byBhY3RpdmUgRlRQIG1vZGUsIGluc3RydWN0cyBzZXJ2ZXIgdG8gbm90CiAgZXN0YWJsaXNoIGRhdGEgY29ubmVjdGlvbiBiYWNrIHRvIGNsaWVudCBhbmQgcmVwbHkgd2l0aCBGVFAgNDIxLgogIAogIE5PREFUQUNPTk40MjU6IGFwcGxpZXMgb25seSB0byBhY3RpdmUgRlRQIG1vZGUsIGluc3RydWN0cyBzZXJ2ZXIgdG8gbm90CiAgZXN0YWJsaXNoIGRhdGEgY29ubmVjdGlvbiBiYWNrIHRvIGNsaWVudCBhbmQgcmVwbHkgd2l0aCBGVFAgNDI1LgogIAogIE5PREFUQUNPTk46IGFwcGxpZXMgdG8gYm90aCBhY3RpdmUgYW5kIHBhc3NpdmUgRlRQIG1vZGVzLCBpbnN0cnVjdHMgc2VydmVyCiAgdG8gbm90IGVzdGFibGlzaCBub3IgYWNjZXB0IGEgZGF0YSBjaGFubmVsIGFuZCBmb29sIGNsaWVudCBpbnRvIGJlbGlldmluZwogIHRoYXQgdGhlIGRhdGEgY2hhbm5lbCBjb25uZWN0aW9uIGlzIHBvc3NpYmxlLgogIAogIFNvbWUgcG9saXNoaW5nIHByb2JhYmx5IHJlcXVpcmVkLgoKLSBtdWx0aS5jOiBPT00gaGFuZGxpbmcgZml4CiAgCiAgRml4IGN1cmxfbXVsdGlfY2xlYW51cCgpIHNlZ2ZhdWx0IHdoZW4gdXNpbmcgd2VpcmQgY2xlYW51cCBzZXF1ZW5jZS4KCkRhbmllbCBTdGVuYmVyZyAoMjcgT2N0IDIwMTEpCi0gbXVsdGk6IHN0YXJ0IGZ0cCBzdGF0ZSBtYWNoaW5lIHdoZW4gc3dpdGNoaW5nIHRvIERPX01PUkUKICAKICBUaGlzIGV4dGVuZHMgdGhlIGZpeCBmcm9tIGNvbW1pdCBkNzkzNGI4YmQ0OTEKICAKICBXaGVuIHRoZSBtdWx0aSBzdGF0ZSBpcyBjaGFuZ2VkIHdpdGhpbiB0aGUgbXVsdGlfcnVuc2luZ2xlIGZyb20gRE9JTkcgdG8KICBET19NT1JFLCB3ZSBkaWRuJ3QgaW1tZWRpYXRlbHkgc3RhcnQgdGhlIEZUUCBzdGF0ZSBtYWNoaW5lIGFnYWluLiBUaGF0CiAgdGhlbiBsZWZ0IHRoZSBGVFAgc3RhdGUgaW4gRlRQX1NUT1AuIFdoZW4gY3VybF9tdWx0aV9mZHNldCgpIHdhcwogIHN1YnNlcXVlbnRseSBjYWxsZWQsIHRoZSBmdHBfZG9tb3JlX2dldHNvY2soKSBmdW5jdGlvbiB3b3VsZCByZXR1cm4gdGhlCiAgd3JvbmcgZmQgaW5mby4KICAKICBSZXBvcnRlZCBieTogR29raGFuIFNlbmd1bgoKLSBsaWJjdXJsLW11bHRpLjM6IHVwZGF0ZSB0aGUgbGlzdCBvZiBhcmVhcyBzdGlsbCBibG9ja2luZwoKWWFuZyBUc2UgKDI2IE9jdCAyMDExKQotIHRlc3QgNTg5OiBhY3RpdmUgRlRQIHVwbG9hZCB1c2luZyBtdWx0aSB0aW1lb3V0IGFuZCBFUFJUIGRpc2FibGVkIHNlcnZlcgoKLSBtdWx0aSB0ZXN0czogT09NIGhhbmRsaW5nIGZpeGVzIC0gY29tbWl0IDYyOWQyZTM0IGZvbGxvdy11cAoKUGF0cmljayBNb25uZXJhdCAoMjYgT2N0IDIwMTEpCi0gLSBQcmVwYXJlIHRoZSBJTEUvUlBHIGJpbmRpbmcgYW5kIE9TNDAwIGRvY3VtZW50YXRpb24gZm9yIHRoZSB1cGNvbWluZyByZWxlYXNlCgpEYW5pZWwgU3RlbmJlcmcgKDI1IE9jdCAyMDExKQotIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIDQ0NjQ1ODNhNmVkCiAgCiAgNSBtb3JlIGJ1ZyBmaXhlcywgNCBhZGRpdGlvbmFsIGNvbnRyaWJ1dG9ycwoKWWFuZyBUc2UgKDI1IE9jdCAyMDExKQotIHJ1bnRlc3RzLnBsOiBydW5uaW5nIHNlcnZlciBjaGVja3MKICAKICBXaGVuIHJ1bm5pbmcgdG9ydHVyZSB0ZXN0cywgdmVyaWZ5IGJlZm9yZSBlYWNoIHRlc3QgY2FzZSB0aGF0IHJlcXVpcmVkCiAgcGluZ3Bvbmcgc2VydmVycyB3aGljaCBhcmUgc3VwcG9zZWQgdG8gYmUgYWxpdmUgYXJlIGFjdHVhbGx5IHJlc3BvbnNpdmUuCiAgSWYgZm91bmQgbm90IHJlc3BvbnNpdmUgdGhlbiByZXN0YXJ0IHRoZW0uCgpEYW5pZWwgU3RlbmJlcmcgKDI0IE9jdCAyMDExKQotIGRpc3Q6IGFkZCB0ZXN0IDU4NwogIAogIEkgY3JlYXRlZCB0ZXN0IDU4NyBpbiBjb21taXQgODQwZWZmNDRmMmIgYnV0IGZvcmdvdCB0byBhZGQgdGhlIGZpbGUgdG8KICB0aGUgdGFyYmFsbC4gQWRkZWQgbm93LgoKLSB0ZXN0IDU4ODogdmVyaWZ5IGFjdGl2ZSBGVFAgd2l0aCBtdWx0aSBpbnRlcmZhY2Ugd2l0aG91dCBFUFJUCiAgCiAgVGhpcyBpcyB1c2luZyB0aGUgdmVyYmF0aW0gNTI1IHRlc3QgY29kZSBidXQgaXQgZGlzYWJsZXMgRVBSVCBpbiB0aGUKICBzZXJ2ZXIgYW5kIHRoaXMgc2hvdWxkIHdvcmsganVzdCBhcyB3ZWxsIGFueXdheS4KCi0gRlRQIHNlcnZlcjogYWxsb3cgRVBSVCBieSBkZWZhdWx0CiAgCiAgRVBSVCBpcyBub3cgc3VwcG9ydGVkIGJ5IGRlZmF1bHQgYnkgdGhlIHNlcnZlci4gVG8gZGlzYWJsZSBpdCwgdXNlIHRoZQogIGdlbmVyaWMgUkVQTFkgaW5zdHJ1Y3Rpb24gaW4gdGhlIDxzZXJ2ZXJjbWQ+IHRhZy4gVGVzdCAxMTYgbm93IGhhcyBpdAogIGRpc2FibGVkLiBBbGwgb3RoZXIgZXhpc3RpbmcgYWN0aXZlIEZUUCBwb3J0IHRlc3RzIHN0cmlwIG91dCB0aGUgcG9ydAogIGNvbW1hbmRzIGZyb20gdGhlIGxvZ3MgYWxyZWFkeSBzbyB0aGUgY2hhbmdlIG9mIHRoZSBzZXJ2ZXIgaXNuJ3QgdGhhdAogIG5vdGljYWJsZS4KCllhbmcgVHNlICgyNCBPY3QgMjAxMSkKLSBmdHAuYzogc29tZSBPT00gaGFuZGxpbmcgZml4ZXMKCi0gZnRwc2VydmVyLnBsOiBlbnN1cmUgaW50ZWdyYWwgbnVtYmVyIHVzYWdlIGZvciBwYXNzaXZlIG1vZGUgc3RyaW5nCgpEYW5pZWwgU3RlbmJlcmcgKDI0IE9jdCAyMDExKQotIGxhcmdlIGhlYWRlcnM6IGhhdmUgY3VybCBhY2NlcHQgPjE2SyBoZWFkZXJzCiAgCiAgQXMgY29tbWl0IDU4NTBjYzQ4MDhhYiBjbGFyaWZpZXMsIGxpYmN1cmwgY2FuIGRlbGl2ZXIgaGVhZGVyIGxpbmVzIHRoYXQKICBhcmUgbG9uZ2VyIHRoYW4gQ1VSTF9NQVhfV1JJVEVfU0laRSwgb25seSBib2R5IGRhdGEgaXMgbGltaXRlZCB0byB0aGF0CiAgc2l6ZS4gVGhlIGN1cmwgdG9vbCBoYXMgY2hlY2sgKHdoZW4gYnVpbHQgZGVidWctZW5hYmxlZCkgdGhhdCBtYWRlIHRoZQogIHdyb25nIGNoZWNrcyBhbmQgdGhpcyBuZXcgdGVzdCAxMjA1IHZlcmlmaWVzIHRoYXQgbGFyZ2VyIGhlYWRlcnMgd29yay4KCi0gY3VybF9lYXN5X3NldG9wdC4zOiBoZWFkZXJzIGNhbiBiZSBDVVJMX01BWF9IVFRQX0hFQURFUiBieXRlcwogIAogIE1lbnRpb24gdGhpcyBtYXhpbXVtIGhlYWRlciBzaXplIGZvciB0aGUgaGVhZGVyIGNhbGxiYWNrIGNhc2VzCgotIE1lcmdlIHB1bGwgcmVxdWVzdCAjMjUgZnJvbSB0cnRvbS9tYXN0ZXIKICAKICBtYWtlIHN1cmUgdGhlIHN0YXRpYyBidWlsZCB1c2VzIHRoZSBzdGF0aWMgYnVpbGQgb3B0aW9uIQoKLSBjdXJsX2Vhc3lfc2V0b3B0LjM6IGZpeCB0eXBvCiAgCiAgc2hvb3QsIERhbiBGYW5kcmljaCBhbHJlYWR5IGhhZCB0aGlzIHBvaW50ZWQgb3V0Li4uCgotIFtTdGV2ZSBIb2xtZSBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBjdXJsX2Vhc3lfc2V0b3B0OiBBZGRlZCBwb3AzIHRvIENVUkxPUFRfVVJMLgogIAogIEFkZGVkIHBvcDMgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGV4YW1wbGUgYXMgd2VsbCBhcyBhbiBleHBsYW5hdGlvbiBvZgogIGhvdyBwYXRoIHBhcnQgb2YgdGhlIFVSTCBpcyB1c2VkIHVuZGVyIHBvcDMuCiAgCiAgQWRkaXRpb25hbGx5IGhhdmUgY29ycmVjdGVkIGEgY291cGxlIG9mIHR5cG9zLgoKWWFuZyBUc2UgKDIyIE9jdCAyMDExKQotIHRvb2xfb3BlcmF0ZS5jOiBPT00gaGFuZGxpbmcgZml4CiAgCiAgTW92ZSBjdXJsX2Vhc3lfcGVyZm9ybSBzb3VyY2UgY29kZSBnZW5lYXJ0aW9uIG91dCBvZiBjdXJsX2Vhc3lfcGVyZm9ybSdzIGxvb3AKICBmb3IgcHJvcGVyIE9PTSBoYW5kbGluZyBhbmQgc291cmNlIGNvZGUgZ2VuZWFydGlvbi4KCkRhbmllbCBTdGVuYmVyZyAoMjEgT2N0IDIwMTEpCi0gY3VybF9tdWx0aV9mZHNldDogY29ycmVjdCBmZHNldCB3aXRoIEZUUCBQT1JUIHVzZQogIAogIEFmdGVyIGEgUE9SVCBoYXMgYmVlbiBpc3N1ZWQsIGFuZCB0aGUgbXVsdGkgaGFuZGxlIHdvdWxkIHN3aXRjaCB0byB0aGUKICBDVVJMTV9TVEFURV9ET19NT1JFIHN0YXRlICh3aGljaCBpcyB1bmlxdWUgZm9yIEZUUCksIGxpYmN1cmwgd291bGQKICByZXR1cm4gdGhlIHdyb25nIGZkc2V0IHRvIHdhaXQgZm9yIHdoZW4gY3VybF9tdWx0aV9mZHNldCgpIGlzCiAgY2FsbGVkLiBUaGUgY29kZSB3b3VsZCBibGluZGx5IGFzc3VtZSB0aGF0IGl0IHdhcyB3YWl0aW5nIGZvciBhIGNvbm5lY3QKICBvZiB0aGUgc2Vjb25kIGNvbm5lY3Rpb24sIHdoaWxlIHRoYXQgaXNuJ3QgdHJ1ZSBpbW1lZGlhdGVseSBhZnRlciB0aGUKICBQT1JUIGNvbW1hbmQuCiAgCiAgQWxzbywgdGhlIGZ1bmN0aW9uIG11bHRpLmM6ZG9tb3JlX2dldHNvY2soKSB3YXMgaGlnaGx5IEZUUC1jZW50cmljIGFuZAogIHRoZXJlZm9yZSB1Z2x5IHRvIGtlZXAgaW4gcHJvdG9jb2wtYWdub3N0aWMgY29kZS4gSSBzb2x2ZWQgdGhpcyBwcm9ibGVtCiAgYnkgaW50cm9kdWNpbmcgYSBuZXcgZnVuY3Rpb24gcG9pbnRlciBpbiB0aGUgQ3VybF9oYW5kbGVyIHN0cnVjdCBjYWxsZWQKICBkb21vcmVfZ2V0c29jaygpIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGR1cmluZyB0aGUgRE9NT1JFIHN0YXRlIGZvcgogIHByb3RvY29scyB0aGF0IHNldCB0aGF0IHBvaW50ZXIuCiAgCiAgVGhlIG5ldyBmdHAuYzpmdHBfZG9tb3JlX2dldHNvY2soKSBmdW5jdGlvbiBub3cgcmV0dXJucyBmZHNldCBpbmZvIGFib3V0CiAgdGhlIGNvbnRyb2wgY29ubmVjdGlvbidzIGNvbW1hbmQvcmVzcG9uc2UgaGFuZGxpbmcgd2hpbGUgc3VjaCBhIHN0YXRlIGlzCiAgaW4gdXNlLCBhbmQgZ29lcyBvdmVyIHRvIHdhaXRpbmcgZm9yIGEgd3JpdGFibGUgc2Vjb25kIGNvbm5lY3Rpb24gZmlyc3QKICBvbmNlIHRoZSBjb21tYW5kcyBhcmUgZG9uZS4KICAKICBUaGUgb3JpZ2luYWwgcHJvYmxlbSBjb3VsZCBiZSBzZWVuIGJ5IHJ1bm5pbmcgdGVzdCA1MjUgYW5kIGNoZWNraW5nIHRoZQogIHRpbWUgc3RhbXBzIGluIHRoZSBGVFAgc2VydmVyIGxvZy4gSSBjYW4gdmVyaWZ5IHRoYXQgdGhpcyBmaXggYXQgbGVhc3QKICBmaXhlcyB0aGlzIHByb2JsZW0uCiAgCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMTAvMDI1MC5odG1sCiAgUmVwb3J0ZWQgYnk6IEdva2hhbiBTZW5ndW4KCkRhbiBGYW5kcmljaCAoMjEgT2N0IDIwMTEpCi0gQWRkZWQgc29tZSBtaXNzaW5nIHRlc3QgY2FzZSBYTUwgdGFncyBhbmQga2V5d29yZHMKCllhbmcgVHNlICgyMSBPY3QgMjAxMSkKLSBmaWxlLmM6IE9PTSBoYW5kbGluZyBmaXgKICAKICBmaWxlX2Rpc2Nvbm5lY3QoKSBmcmVlJ3MgcmVzb3VyY2VzIGZvciBtdWx0aSBBUEkKCi0gbXVsdGkuYzogZml4IHNlZ2ZhdWx0CgotIHJ1bnRlc3RzLnBsOiBmaXggcHJpbnRpbmcgb2YgbXVsdGl2YWx1ZWQgZXJyb3IgY29kZXMKCi0gbXVsdGkgdGVzdHM6IE9PTSBoYW5kbGluZyBmaXhlcwogIAogIEFkZGl0aW9uYWxseSwgaW1wcm92ZWQgZXJyb3IgY2hlY2tpbmcgYW5kIGxvZ2dpbmcuCgpEYW4gRmFuZHJpY2ggKDIwIE9jdCAyMDExKQotIEZpeGVkIGNvbXBpbGF0aW9uIHdoZW4gSFRUUCBvciBjb29raWVzIGFyZSBkaXNhYmxlZAoKRGFuaWVsIFN0ZW5iZXJnICgyMCBPY3QgMjAxMSkKLSBLTk9XTl9CVUdTOiAjNzQgZml4ZWQKICAKICBNdWx0aXBsZSBhdXRocyBpbiB0aGUgc2FtZSBXV1ctQXV0aGVudGljYXRlIGhlYWRlcgogIAogIEZpeGVkIGluIGNvbW1pdCA3ZDgxZTNmNzE5M2I4YwoKLSBDdXJsX2h0dHBfaW5wdXRfYXV0aDogaGFuZGxlIG11bHRpcGxlIGF1dGhzIGluIFdXVy1BdXRoZW50aWNhdGUKICAKICBUaGUgZml4IGlzIHByZXR0eSBtdWNoIHRoZSBvbmUgTmljayBaaXR6bWFubiBwcm92aWRlZCwganVzdCBlZGl0ZWQgdG8gZG8KICB0aGUgcmlnaHQgaW5kZW50IGxldmVscyBhbmQgd2l0aCB0ZXN0IGNhc2UgMTIwNCBhZGRlZCB0byB2ZXJpZnkgdGhlIGZpeC4KICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0xMC8wMTkwLmh0bWwKICBSZXBvcnRlZCBieTogTmljayBaaXR6bWFubgoKLSBDdXJsX3NtdHBfZXNjYXBlX2VvYjogZmlyc3QgYnl0ZSBpcyBpbmRleCAwLi4uCiAgCiAgRml4IGEgYnVnIHdpdGggd2l0aCBjb21taXQgMjYyMWRkNDJhNGQgdGhhdCBoYXBwZW5lZCBkdWUgdG8gbXkgbGFzdAogIHNlY29uZCBwcmUtY29tbWl0IGNsZWFudXAgb2YgdGhlIGNoYW5nZSB3aXRob3V0IHByb3BlciB0ZXN0aW5nCiAgYWZ0ZXJ3YXJkcyEKCi0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNOiByZW1vdmUgbWVudGlvbgogIAogIFRoaXMgcmV0dXJuIGNvZGUgaGFzIG5vdCBiZWVuIHVzZWQgc2luY2UgNy4yMC4wIHNvIHdlIGNhbiBzdG9wCiAgbWVudGlvbmluZyBpdCBmb3IgY3VycmVudCBsaWJjdXJsLgoKRGFuIEZhbmRyaWNoICgxOSBPY3QgMjAxMSkKLSBTaWxlbmNlZCBhIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgYW4gdW51c2VkIHZhcmlhYmxlCgpEYW5pZWwgU3RlbmJlcmcgKDIwIE9jdCAyMDExKQotIFtUaW0gSGFyZGVyIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIGd0bHM6IG9ubHkgY2FsbCBnbnV0bHNfdHJhbnNwb3J0X3NldF9sb3dhdCB3aXRoIDxnbnV0bHMtMi4xMi4wCiAgCiAgVGhlIGRlZmF1bHQgbG93YXQgbGV2ZWwgZm9yIGdudXRscy0yLjEyKiBpcyBzZXQgdG8gemVybyB0byBhdm9pZAogIHVubmVjZXNzYXJ5IHN5c3RlbSBjYWxscyBhbmQgdGhlIGdudXRsc190cmFuc3BvcnRfc2V0X2xvd2F0IGZ1bmN0aW9uIGhhcwogIGJlZW4gdG90YWxseSByZW1vdmVkIGluID49Z251dGxzLTMgd2hpY2ggY2F1c2VzIGJ1aWxkIGZhaWx1cmVzLgogIAogIFRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9uIHNob3VsZG4ndCBiZSB1c2VkIGV4Y2VwdCBmb3IgdmVyc2lvbnMgdGhhdAogIHJlcXVpcmUgaXQsIDxnbnV0bHMtMi4xMi4wLgoKLSBDdXJsX3NtdHBfZXNjYXBlX2VvYjogZml4IEVPQiBlc2NhcGluZwogIAogIEFzIHRoZSBFT0Igc3RyaW5nIGNhbiBjb21lIGJ5dGUgYnkgYnl0ZSBvdmVyIGEgc2VyaWVzIG9mIHdyaXRlcyB3ZSBtdXN0CiAgbWF0Y2ggYnl0ZS13aXNlLgogIAogIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTEwLzAxNzIuaHRtbAoKLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCBlY2JiMDhjZWEzY2Q2CgotIHNpbmdsZWlwY29ubmVjdDogdW5zdGljayB0aGUgaXB2Ni1jb25uZWN0aW9uIGJvb2xlYW4KICAKICBQcmV2aW91c2x5IHRoZSBiaXQgd2FzIHNldCBiZWZvcmUgdGhlIGNvbm5lY3Rpb24gd2FzIGZvdW5kIHdvcmtpbmcgc28gaWYKICBpdCB3b3VsZCBmaXJzdCBmYWlsIHRvIGFuIGlwdjYgYWRkcmVzcyBhbmQgdGhlbiBjb25uZWN0IGZpbmUgdG8gYSBJUHY0CiAgYWRkcmVzcyB0aGUgdmFyaWFibGUgd291bGQgc3RpbGwgYmUgVFJVRS4KICAKICBSZXBvcnRlZCBieTogVGhvbWFzIEwuIFNoaW5uaWNrCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zNDIxOTEyCgpLYW1pbCBEdWRrYSAoMTcgT2N0IDIwMTEpCi0gbnNzOiBhdm9pZCBhIFNJR1NFR1Ygd2l0aCBpbW1hdHVyZSB2ZXJzaW9uIG9mIE5TUwogIAogIEJ1ZzogaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tLzczMzY4NQoKLSBuc3M6IGJpZyBjbGVhbnVwIGluIG5zc19sb2FkX2NlcnQoKSBhbmQgY2VydF9zdHVmZigpCgotIG5zczogcmVmYWN0b3IgZm10X25pY2tuYW1lKCkgLT4gZHVwX25pY2tuYW1lKCkKICAKICBEbyBub3QgdXNlIGFydGlmaWNpYWwgbmlja25hbWVzIGZvciBjZXJ0aWZpY2F0ZXMgZnJvbSBmaWxlcy4KCi0gbnNzOiBzZWxlY3QgY2xpZW50IGNlcnRpZmljYXRlcyBieSBERVIKICAKICAuLi4gaW5zdGVhZCBvZiBuaWNrbmFtZXMsIHdoaWNoIGFyZSBub3QgdW5pcXVlLgoKRGFuaWVsIFN0ZW5iZXJnICgxNyBPY3QgMjAxMSkKLSAtLWVwc3Y6IGZpeCB0eXBvCiAgCiAgUmVwb3J0ZWQgYnk6IFRob21hcyBMLiBTaGlubmljawoKLSAtLXNob3ctZXJyb3I6IHBvc2l0aW9uIGluZGVwZGVuZW50CiAgCiAgUHJldmlvdXNseSB3ZSByZXF1aXJlZCB0aGF0IC1TLy0tc2hvdy1lcnJvciB3YXMgdXNlZCBfYWZ0ZXJfCiAgLXMvLS1zaWxlbnQuIFRoaXMgd2FzIHNsaWdodGx5IGNvbmZ1c2luZyBzaW5jZSB3ZSBzdHJpdmUgdG8gbWFrZQogIGFyZ3VtZW50cyBhcyBwb3NpdGlvbiBpbmRlcGVuZGVudCBhcyBwb3NzaWJsZS4KICAKICBOb3csIHlvdSBjYW4gdXNlIHRoZW0gaW4gYW55IG9yZGVyIGFuZCB0aGUgcmVzdWx0IHNob3VsZCBzdGlsbCBiZSB0aGUKICBzYW1lLgogIAogIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MzQyNDI4NgogIFJlcG9ydGVkIGJ5OiBBbmRyZWFzIE9sc3NvbgoKLSBjdXJsX211bHRpX2Zkc2V0OiBjbGFyaWZ5IHRoZSBtYXhfZmQgPT0gLTEgY2FzZQogIAogIEVsYWJvcmF0ZSB3aGF0IG1heF9mZCA9PSAtMSBtZWFucwogIAogIFJlbW92ZSB0aGUgcmVmZXJlbmNlIHRvIENVUkxNX0NBTExfTVVMVElfUEVSRk9STSBhcyBtb2Rlcm4gbGliY3VybAogIHZlcnNpb25zIGRvbid0IGV2ZXIgcmV0dXJuIHRoYXQuCgotIGZvcm1kYXRhOiBhY2sgcmVhZCBjYWxsYmFjayBhYm9ydAogIAogIFdoZW4gZG9pbmcgYSBtdWx0aXBhcnQgZm9ybXBvc3Qgd2l0aCBhIHJlYWQgY2FsbGJhY2ssIGFuZCB0aGF0IGNhbGxiYWNrCiAgcmV0dXJucyBDVVJMX1JFQURGVU5DX0FCT1JULCB0aGF0IHJldHVybiBjb2RlIG11c3QgYmUgcHJvcGVybHkKICBwcm9wYWdhdGVkIGJhY2sgYW5kIGhhbmRsZWQgYWNjb3JkaW5nbHkuIFByZXZpb3VzbHkgaXQgd291bGQgYmUgaGFuZGxlZAogIGFzIGEgemVybyBieXRlIHJlYWQgd2hpY2ggd291bGQgY2F1c2UgYSBoYW5nIQogIAogIEFkZGVkIHRlc3QgY2FzZSA1ODcgdG8gdmVyaWZ5LiBJdCB1c2VzIHRoZSBsaWI1NTQuYyBzb3VyY2UgY29kZSB3aXRoIGEKICBzbWFsbCBpZmRlZi4KICAKICBSZXBvcnRlZCBieTogQW50b24gQnljaGtvdgogIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTEwLzAwOTcuaHRtbAoKLSBUT0RPOiBoYXZlIGZvcm0gZnVuY3Rpb25zIHVzZSBDVVJMIGhhbmRsZSBhcmd1bWVudAoKLSBbRGF2ZSBSZWlzbmVyIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIHR5cGVjaGVjazogYWxsb3cgTlVMTCB0byB1bnNldCBDVVJMT1BUX0VSUk9SQlVGRkVSCiAgCiAgVGhlcmUgbWlnaHQgYmUgc2l0dWF0aW9ucyB3aGVyZSBhIHVzZXIgd291bGQgd2FudCB0byB1bnNldCB0aGlzIG9wdGlvbi4KICBBdm9pZCBmb3JjaW5nIGhpbS9oZXIgdG8gY2FzdCB0aGUgTlVMTCBhcmd1bWVudCB0byAoY2hhciAqKSBpbiBvcmRlciB0bwogIGdldCBwYXN0IHRoZSBjb21waWxlIHRpbWUgdHlwZWNoZWNrLgoKLSBzaW5nbGVpcGNvbm5lY3Q6IGRvbid0IGNsb2JiZXIgZXJybm8KICAKICBTYXZlIHRoZSBlcnJubyB2YWx1ZSBpbW1lZGlhdGVseSBhZnRlciBhIGNvbm5lY3QoKSBmYWlsdXJlIHNvIHRoYXQgaXQKICB3b24ndCBnZXQgcmVzZXQgdG8gc29tZXRoaW5nIGVsc2UgYmVmb3JlIHdlIHJlYWQgaXQuCiAgCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMTAvMDA2Ni5odG1sCiAgUmVwb3J0ZWQgYnk6IEZyYW5rIFZhbiBVZmZlbGVuIGFuZCBGYWJpYW4gSGllcm5hdXgKCi0gW01pY2hhbCBNYXJlayBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBkb2NzOiAtLXhhdHRyCgpZYW5nIFRzZSAoMTQgT2N0IDIwMTEpCi0gZmlsZS5jOiBmaXggY29tcGlsZXIgd2FybmluZwoKLSB1cmwuYzogZml4IGVuZGxlc3MgbG9vcCB1cG9uIHRyYW5zcG9ydCBjb25uZWN0aW9uIHRpbWVvdXQKICAKICBKZXJyeSBXdSBkZXRlY3RlZCBhbmQgcHJvdmlkZWQgZGV0YWlsZWQgaW5mbyBhYm91dCB0aGlzIGlzc3VlLgoKLSBzd3MuYzogSFRUUCBhbmQgR09QSEVSIHRlc3Qgc2VydmVyLXNpZGUgY29ubmVjdGlvbiBjbG9zaW5nIGFkanVzdG1lbnQKICAKICBXaGVuLCBmb3IgYSBnaXZlbiB0ZXN0LCBzZXJ2ZXIgaXMgaW5zdHJ1Y3RlZCB0byBjbG9zZSBjb25uZWN0aW9uIGFmdGVyCiAgc2VydmVyIHJlcGx5IHdlIG5vdyB3YWl0IGEgdmVyeSBzbWFsbCBhbW91bnQgb2YgdGltZSAoNTBtcykgYmVmb3JlIGRvaW5nCiAgc28uIFRoaXMgaXMgZG9uZSB0byBhbGxvdyBjbGllbnQgdG8sIGF0IGxlYXN0IHBhcnRpYWxseSwgcmVhZCBzZXJ2ZXIKICByZXBseSBiZWZvcmUgZ2V0dGluZyBhbiBFQ09OTlJFU0VULgogIAogIFRoZSBhYm92ZSBpcyByZXF1aXJlZCB0byBtYWtlIHRlc3QgY2FzZXMgMTA3MCwgMTIwMCwgMTIwMSBhbmQgMTIwMiBwYXNzCiAgd2l0aCBDeWd3aW4gMS41Llggb24gVzJLLgogIAogIEdPUEhFUiB0ZXN0IHNlcnZlciBjbG9zZXMgY29ubmVjdGlvbiBhZnRlciBfZXZlcnlfIHNlcnZlci1yZXBseSwgYXMgc3VjaCwKICBhdCBzb21lIHBvaW50IGl0IGNvdWxkIHJlcXVpcmUgYSBiaWdnZXIgdGltZSBvciB1c2luZyBzaHV0ZG93bigpIGJlZm9yZQogIGEgc2VydmVyLXNpZGUgaW5pdGlhdGVkIGRpc2Nvbm5lY3Rpb24uCgotIGN1cmxfZ2V0aG9zdG5hbWUuYzogZml4IHNpZ25lZC91bnNpZ25lZCBjb21wYXJpc29uIGFuZCBhdm9pZCBhIGRvdWJsZSBjb3B5CiAgCiAgYm90aCBpbnRyb2R1Y2VkIGluIDQyYmUyNGFmCgotIGN1cmxfbnRsbV9tc2dzLmM6IGZpeCB2YXJpYWJsZSBzaGFkb3dpbmcgZGVjbGFyYXRpb24gaW50cm9kdWNlZCBpbiAxODVlZDM0MAoKLSBbTWFyY2luIEFkYW1za2kgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgdGZ0cC5jOiBURlRQIHRpbWVvdXQgYW5kIHVuZXhwZWN0ZWQgYmxvY2sgYWRqdXN0bWVudHMKICAKICBTZXQgQUNLIHRpbWVvdXQgdG8gNSBzZWNvbmRzLgogIAogIElmIHdlIGFyZSB3YWl0aW5nIGZvciBibG9jayBYIGFuZCByZWNlaXZlIGJsb2NrIFkgdGhhdCBpcyB0aGUgZXhwZWN0ZWQgb25lLCB3ZQogIHNob3VsZCBzZW5kIEFDSyBhbmQgaW5jcmVhc2UgWCAod2hpY2ggaXMgYWxyZWFkeSBpbXBsZW1lbnRlZCkuIE90aGVyd2lzZSBkcm9wCiAgdGhlIHBhY2tldCBhbmQgZG9uJ3QgaW5jcmVhc2UgcmV0cnkgY291bnRlci4KCi0gbXVsdGkuYzogT09NIGhhbmRsaW5nIGZpeGVzCiAgCiAgUHJldmVudCBtb2RpZmljYXRpb24gb2YgZWFzeSBoYW5kbGUgYmVpbmcgYWRkZWQgd2l0aCBjdXJsX211bHRpX2FkZF9oYW5kbGUoKQogIHVubGVzcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IHN1Y2VlZHMuCiAgCiAgUnVuIEN1cmxfcG9zdHRyYW5zZmVyKCkgdG8gYWxsb3cgcmVzdG9yaW5nIG9mIFNJR1BJUEUgaGFuZGxlciB3aGVuCiAgQ3VybF9jb25uZWN0KCkgZmFpbHMgZWFybHkgaW4gbXVsdGlfcnVuc2luZ2xlKCkuCgotIHVybC5jOiBtYWtlIGxpbmUgc2hvcnRlciB0aGFuIDgwIGNoYXJzCgotIE9PTSBoYW5kbGluZy9jbGVhbnVwIHNsaWdodCBhZGp1c3RtZW50cwoKLSBPT00gaGFuZGxpbmcvY2xlYW51cCBzbGlnaHQgYWRqdXN0bWVudHMKCi0gbGliNTQwLmM6IE9PTSBoYW5kbGluZyBmaXhlcyBtYWtpbmcgdGVzdCA1NDAgcGFzcyB0b3J0dXJlIHRlc3RpbmcKCkRhbiBGYW5kcmljaCAoOCBPY3QgMjAxMSkKLSBSRUxFQVNFLU5PVEVTOiBGaXhlZCBhIGNvdXBsZSBvZiB0eXBvcwoKWWFuZyBUc2UgKDggT2N0IDIwMTEpCi0gdGVsbmV0LmM6IGZpeCBjb21waWxlciB3YXJuaW5nCgotIGxpYmN1cmw6IHNvbWUgT09NIGhhbmRsaW5nIGZpeGVzCgotIG11bHRpLmM6IE9PTSBoYW5kbGluZyBmaXhlcyBtYWtpbmcgdG9ydHVyZSB0ZXN0cyA1NjAgNTgwIDU4MSBwYXNzCgotIHRlc3QgaGFybmVzczogbm9uLXN0dW5uZWwgaHR0cHMgc2VydmVyIGludGVncmF0aW9uIG92ZXJoYXVsCgotIGN1cmwgdG9vbDogcmV2aWV3ZWQgY29kZSBtb3ZlZCB0byB0b29sXyouW2NoXSBmaWxlcwoKLSBidWlsZGNvbmY6IHdhcm4gYWJvdXQgYXV0b2NvbmYgMi42NyBhbmQgMi42OCBnZW5lcmF0aW5nIGJhZC91bnVzYWJsZSBzY3JpcHRzCgotIGN1cmwgdG9vbDogZml4IGNvbXBpbGVyIHdhcm5pbmcKCi0gY3VybCB0b29sOiBPT00gaGFuZGxpbmcgZml4ZXMKCi0gY3VybCB0b29sOiByZXZpZXdlZCBjb2RlIG1vdmVkIHRvIHRvb2xfKi5bY2hdIGZpbGVzCgotIGN1cmwgdG9vbDogT09NIGhhbmRsaW5nIGZpeGVzCgotIGN1cmwgdG9vbDogT09NIGhhbmRsaW5nIGZpeGVzCgotIGN1cmwgdG9vbDogT09NIGhhbmRsaW5nIGZpeGVzCgotIGN1cmwgdG9vbDogaGVhZGVyIGluY2x1c2lvbiBhZGp1c3RtZW50CgotIGN1cmwgdG9vbDogc3ltYm9sIGNoZWNrIGFkanVzdG1lbnQKCi0gY3VybCB0b29sOiBoZWFkZXIgaW5jbHVzaW9uIGFkanVzdG1lbnQKCi0gY3VybCB0b29sOiBjb2RlIG1vdmVkIHRvIHRvb2xfKi5bY2hdIGZpbGVzCgpEYW5pZWwgU3RlbmJlcmcgKDQgT2N0IDIwMTEpCi0gY3VybF9zaGFyZV9jbGVhbnVwOiBhdm9pZCBjb21waWxlciB3YXJuaW5nCiAgCiAgTW92ZSB0aGUgdmFyaWFibGUgZGVjbGFyYXRpb24gdG8gd2l0aGluIHRoZSAjaWZkZWYKCi0gc3RydWN0IEN1cmxfc2hhcmU6IHByb3ZpZGUgc3Nsc2Vzc2lvbiB1bmNvbmRpdGlvbmFsbHkKICAKICBJdCBtYWtlcyBtdWNoIG5pY2VyIGFuZCBsZXNzIGNvbnZ1bHV0ZWQgY29kZSBldmVyeXdoZXJlIGlmIHRoaXMgc3RydWN0CiAgbWVtYmVyIGlzIGFsd2F5cyBwcmVzZW50IGV2ZW4gd2hlbiBsaWJjdXJsIGlzIGJ1aWx0IHdpdGhvdXQgU1NMIHN1cHBvcnQuCiAgCiAgVGhpcyByZXZlcnRzIHBhcnRzIG9mIGNvbW1pdCAxNWUzZTQ1MTcwMjM5NmUKCi0gZnRwOiBpbXByb3ZlZCB0aGUgZmFpbGVkIFBPUlQgaG9zdCBuYW1lIHJlc29sdmVkIGVycm9yIG1lc3NhZ2UKCi0gY29kZXBvbGljaW5nCgotIHNzcGkgYnVpbGQgZml4CiAgCiAgZGVmaW5lIGF3YXkgQ3VybF9udGxtX3NzcGlfY2xlYW51cCgpIHdoZW4gbm8gd2luZG93cyBTU1BJIGJ1aWxkCgotIFtTdGV2ZSBIb2xtZSBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBzbXRwOiBBZGRlZCBzdXBwb3J0IGZvciBOVExNIGF1dGhlbnRpY2F0aW9uCiAgCiAgTW9kaWZpZWQgc210cF9lbmRvZnJlc3AoKSB0byBkZXRlY3QgTlRMTSBmcm9tIHRoZSBzZXJ2ZXIgc3BlY2lmaWVkIGxpc3QKICBvZiBzdXBwb3J0ZWQgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcy4KICAKICBNb2RpZmllZCBzbXRwX2F1dGhlbnRpY2F0ZSgpIHRvIHN0YXJ0IHRoZSBzZW5kaW5nIG9mIHRoZSBOVExNIGRhdGEuCiAgCiAgQWRkZWQgc210cF9hdXRoX250bG1fdHlwZTFfbWVzc2FnZSgpIHdoaWNoIGNyZWF0ZXMgYSBOVExNIHR5cGUtMQogIG1lc3NhZ2UuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBhdXRoZW50aWNhdGUoKSB0byBzdGFydCB0aGUgc2VuZGluZwogIG9mIGRhdGEgYW5kIGJ5IHNtdHBfc3RhdGVfYXV0aF9udGxtX3Jlc3AoKSB3aGVuIHRoZSBBVVRIIGNvbW1hbmQKICBkb2Vzbid0IGNvbnRhaW4gdGhlIHR5cGUtMSBtZXNzYWdlIGFzIHBhcnQgb2YgdGhlIGluaXRpYWwgcmVzcG9uc2UuCiAgVGhpcyBsYWNrIG9mIGluaXRpYWwgcmVzcG9uc2UgY2FuIGhhcHBlbiBpZiBhbiBPT00gZXJyb3Igb2NjdXJzIG9yIHRoZQogIHR5cGUtMSBtZXNzYWdlIGlzIGxvbmdlciB0aGFuIDUwNCBjaGFyYWN0ZXJzLiBBcyB0aGUgbWFpbiBBVVRIIGNvbW1hbmQKICBpcyBsaW1pdGVkIHRvIDUxMiBjaGFyYWN0ZXIgdGhlIGRhdGEgaGFzIHRvIGJlIHRyYW5zbWl0dGVkIGluIHR3bwogIHBhcnRzOyBvbmUgY29udGFpbmluZyB0aGUgQVVUSCBOVExNIGFuZCB0aGUgc2Vjb25kIGNvbnRhaW5pbmcgdGhlCiAgdHlwZS0xIG1lc3NhZ2UuCiAgCiAgQWRkZWQgc210cF9zdGF0ZV9hdXRoX250bG1fdHlwZTJtc2dfcmVzcCgpIHdoaWNoIGhhbmRsZXMgdGhlIGluY29taW5nCiAgdHlwZS0yIG1lc3NhZ2UgYW5kIHNlbmRzIGFuIG91dGdvaW5nIHR5cGUtMyBtZXNzYWdlLiBUaGlzIHR5cGUtMgogIG1lc3NhZ2UgaXMgc2VudCBieSB0aGUgc2VydmVyIGluIHJlc3BvbnNlIHRvIG91ciB0eXBlLTEgbWVzc2FnZS4KICAKICBNb2RpZmllZCBzbXRwX3N0YXRlX2F1dGhfcmVzcCgpIHRvIGhhbmRsZSB0aGUgcmVzcG9uc2UgdG86IHRoZSBBVVRICiAgTlRMTSB3aXRob3V0IHRoZSBpbml0aWFsIHJlc3BvbnNlIGFuZCB0aGUgdHlwZS0yIHJlc3BvbnNlLgogIAogIE1vZGlmaWVkIHNtdHBfZGlzY29ubmVjdCgpIHRvIGNsZWFudXAgdGhlIE5UTE0gU1NQSSBzdGFjay4KCi0gW1N0ZXZlIEhvbG1lIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIEN1cmxfbnRsbV9jcmVhdGVfdHlwZVhfbWVzc2FnZTogQWRkZWQgdGhlIG91dGxlbiBwYXJhbWV0ZXIKICAKICBBZGRlZCB0aGUgb3V0cHV0IG1lc3NhZ2UgbGVuZ3RoIGFzIGEgcGFyYW1ldGVyIHRvIGJvdGgKICBDdXJsX250bG1fY3JlYXRlX3R5cGUxX21lc3NhZ2UoKSBhbmQgQ3VybF9udGxtX2NyZWF0ZV90eXBlM19tZXNzYWdlKCkKICBmb3IgdXNlIGJ5IGZ1dHVyZSBmdW5jdGlvbnMgdGhhdCByZXF1aXJlIGl0LgogIAogIFVwZGF0ZWQgY3VybF9udGxtLmMgdG8gY2F0ZXIgZm9yIHRoZSBleHRyYSBwYXJhbWV0ZXIgb24gdGhlc2UgdHdvCiAgZnVuY3Rpb25zLgoKLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgc210cDogR2VuZXJhbCB0aWR5IHVwIHJlYWR5IGZvciBhZGRpbmcgTlRMTSBzdXBwb3J0CiAgCiAgQ2hhbmdlZCB0aGUgbmFtZSBvZiB2YXJpYWJsZSBsLCBpbiBzZXZlcmFsIGZ1bmN0aW9ucywgd2hpY2ggcmVwcmVzZW50cwogIHRoZSBsZW5ndGggb2Ygc3RyaW5ncyBiZWluZyBzZW50IHRvIHRoZSBzZXJ2ZXIsIHRvIGxlbiB3aGljaCBpcyBtb3JlCiAgbWVhbmluZ2Z1bCBhbmQgY29uc2lzdGVudCB3aXRoIG90aGVyIGNvZGUgaW4gc210cC5jIGFuZCBlbHNld2hlcmUuCiAgCiAgUmV3b3JrZWQgc210cF9hdXRoZW50aWNhdGUoKSB0byBiZSBzaW1wbGVyIGFuZCBlYXNpZXIgdG8gZm9sbG93LgogIFZhcmlhYmxlcyBhbmQgbm93IGluaXRpYWxpc2VkIGluIHRoZWlyIGRlZmluaXRpb25zIGFuZCBpZiBubyB1c2VybmFtZQogIGFuZCBwYXNzd29yZCBhcmUgc3BlY2lmaWVkIHRoZSBmdW5jdGlvbiBzZXRzIHRoZSBzdGF0ZSB0byBTTVRQX1NUT1AgYW5kCiAgcmV0dXJucyBpbW1lZGlhdGVseSwgcmF0aGVyIHRoYW4gYmVpbmcgcGFydCBvZiBhIGh1Z2UgaWYgc3RhdGVtZW50LgoKWWFuZyBUc2UgKDMgT2N0IDIwMTEpCi0gY3VybCB0b29sOiByZXZpZXdlZCBjb2RlIG1vdmVkIHRvIHRvb2xfKi5bY2hdIGZpbGVzCgpEYW5pZWwgU3RlbmJlcmcgKDMgT2N0IDIwMTEpCi0gW1N0ZXZlIEhvbG1lIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIHNtdHBfbWFpbDogZml4ZWQgYW5vdGhlciBtZW1vcnkgbGVhawogIAogIC4uLiBpbnRyb2R1Y2VkIGluIDdmMzA0YWI4NGY1NjBjCgotIFtEb21pbmlxdWUgTGV1ZW5iZXJnZXIgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgbTQ6IFVzZSB4IGluIG9yZGVyIHRvIGF2b2lkIHZhcmlhYmxlICd4JyBzZXQgYnV0IG5vdCB1c2VkIFstV2Vycm9yPXVudXNlZC1idXQtc2V0LXZhcmlhYmxlXQogIAogIFRoaXMgZXJyb3IgY291bGQgYmUgY2F1c2VkIGJ5IGNvbmZpZ3VyZSBzY3JpcHRzIGJlaW5nIHJ1biB3aXRoIC1XZXJyb3IKICAtV2FsbCwgd2hpY2ggd291bGQgbGVhZCB0byBsaWJjdXJsIGJlaW5nIGRldGVjdGVkIGFzIHVudXNhYmxlLgoKLSBzaGFyZTogZG9uJ3QgdXNlIFNTTCB1bmxlc3MgZW5hYmxlZAogIAogIERvbid0IGV2ZW4gZGVjbGFyZSB0aGUgc3RydWN0IG1lbWJlcnMgZm9yIGRpc2FibGVkIGZlYXR1cmVzCiAgCiAgSW50cm9kdWNpbmcgdGhlIENVUkxTSEVfTk9UX0JVSUxUX0lOIHJldHVybiBjb2RlIGZvciB0aGUgc2hhcmUgaW50ZXJmYWNlCiAgd2hlbiB0cnlpbmcgdG8gc2V0IGEgc2hhcmluZyBvcHRpb24gdGhhdCBoYXMgYmVlbiBkaXNhYmxlZCAob3Igbm90CiAgZW5hYmxlZCkgaW4gdGhlIGxpYnJhcnkuCgotIG11bHRpOiBwcm9ncmVzcyBmdW5jdGlvbiBhYm9ydCBtdXN0IGNsb3NlIGNvbm5lY3Rpb24KICAKICBXaGVuIHRoZSBwcm9ncmVzcyBmdW5jdGlvbiByZXR1cm5zIHRvIGNhbmNlbCB0aGUgcmVxdWVzdCwgd2UgbXVzdCBtYXJrCiAgdGhlIGNvbm5lY3Rpb24gdG8gZ2V0IGNsb3NlZCBhbmQgaXQgbXVzdCBkbyB0byB0aGUgRE9ORSBzdGF0ZS4KICAKICBkb19pbml0KCkgbXVzdCBiZSBjYWxsZWQgYXMgZWFybHkgYXMgcG9zc2libGUgc28gdGhhdCBzdGF0ZSB2YXJpYWJsZXMKICBmb3IgbmV3IGNvbm5lY3Rpb25zIGFyZSByZXNldCBlYXJseS4gV2UgY291bGQgb3RoZXJ3aXNlIHNlZSB0aGF0IHRoZSBvbGQKICB2YWx1ZXMgd2VyZSBzdGlsbCB0aGVyZSB3aGVuIGEgY29ubmVjdGlvbiB3YXMgdG8gYmUgZGlzY29ubmVjdGVkIHZlcnkKICBlYXJseSBhbmQgaXQgd291bGQgbWFrZSBpdCBiZWhhdmUgd3JvbmdseS4KICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0xMC8wMDA2Lmh0bWwKICBSZXBvcnRlZCBieTogVmxhZGltaXIgR3Jpc2hjaGVua28KCi0gdHV0b3JpYWw6IGNsYXJpZnkgdGhlIGhhbmRsZSBzaGFyaW5nIHdoZW4gdHJlYWRlZAogIAogIFByZXZpb3VzbHkgdGhlcmUgd2FzIHdvcmRpbmcgdGhhdCBtYWRlIHBlb3BsZSB1bmNlcnRhaW4gb2YgdGhlIGV4YWN0CiAgcnVsZXMuCiAgCiAgRmVlZGJhY2sgYnk6IEp1bGllbiBSb3llciBhbmQgR2VvcmcgTGlwcGl0c2NoCiAgVVJMOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMDkvMDM1Ny5odG1sCgotIG11bHRpX3J1bnNpbmdsZTogY2hhbmdlIHN0YXRlIG9uIGNhbGxiYWNrIGFib3J0CiAgCiAgUmVwb3J0ZWQgYnk6IE1hcmNpbiBBZGFtc2tpCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMDkvMDMyOS5odG1sCgpZYW5nIFRzZSAoMzAgU2VwIDIwMTEpCi0gY3VybCB0b29sOiBmaXggc29tZSBtb3JlIE9PTSBoYW5kbGluZwoKLSBGaXggU1NMIGRpc2FibGVkIGJ1aWxkcyBicm9rZW4gd2l0aCAnU1NMIHNlc3Npb24gc2hhcmluZycgY29tbWl0IDU3OTNiYzM3CgpEYW5pZWwgU3RlbmJlcmcgKDI5IFNlcCAyMDExKQotIHNtdHBfbWFpbDogZml4IG1lbW9yeSBsZWFrCiAgCiAgLi4uIGludHJvZHVjZWQgaW4gN2YzMDRhYjg0ZjU2MGMKCi0gW1N0ZXZlIEhvbG1lIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIHNtdHBfbWFpbDogQWRkZWQgc3VwcG9ydCB0byBNQUlMIEZST00gZm9yIHRoZSBvcHRpb25hbCBTSVpFIHBhcmFtZXRlcgogIAogIFRoZSBzaXplIG9mIHRoZSBlbWFpbCBjYW4gbm93IGJlIHNldCB2aWEgQ1VSTE9QVF9JTkZJTEVTSVpFLiBUaGlzCiAgYWxsb3dzIHRoZSBlbWFpbCB0byBiZSByZWplY3RlZCBieSB0aGUgc2VydmVyLCBpZiBzdXBwb3J0ZWQsIGFuZCB0aGUKICBtYXhpbXVtIHNpemUgaGFzIGJlZW4gY29uZmlndXJlZCBvbiB0aGUgc2VydmVyLgoKLSBjdXJsdmVyaC5oOiBuZXh0IHJlbGVhc2Ugd2lsbCBiZSA3LjIzLjAKCi0gUkVMRUFTRS1OT1RFUzogc3luY2VkIHdpdGggNTg5OGE2YTA5YjIxMWZjN2UyCiAgCiAgQnVtcGVkIG5leHQgcmVsZWFzZSB2ZXJzaW9uIHRvIGJlY29tZSA3LjIzLjAgZm9yIHRoZSBjaGFuZ2VzCgpEYW4gRmFuZHJpY2ggKDI4IFNlcCAyMDExKQotIGN1cmxfZWFzeV9zZXRvcHQ6IEFkZGVkIHNjcCBhbmQgc2Z0cCB0byB0aGUgVVJMIHNlY3Rpb24KCkRhbmllbCBTdGVuYmVyZyAoMjggU2VwIDIwMTEpCi0gW1N0ZXZlIEhvbG1lIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIGN1cmxfZWFzeV9zZXRvcHQ6IEEgYnJpZWYgdGlkeSB1cAogIAogIFNsaWdodCByZXdvcmRpbmcgb2YgdGhlIENVUkxPUFRfVVJMIFNNVFAgc3ViLXNlY3Rpb24uCiAgCiAgQ29ycmVjdGVkIHRoZSBpbmNvcnJlY3QgdXNlIG9mIGh5cGhlbnMgb24gdGhlIHRocmVlIHVzZXMgb2YKICAiemVyby10ZXJtaW5hdGVkIiB3aXRoICJ6ZXJvIHRlcm1pbmF0ZWQiIHRvIG1hdGNoIHRoZSByZXN0IG9mIHRoZQogIGRvY3VtZW50LgogIAogIENvcnJlY3RlZCB0aGUgdXNlIG9mIGFuIG91dCBvZiBwbGFjZSBoeXBoZW4gaW4gQ1VSTE9QVF9OT1BST1hZIHNlY3Rpb24uCgotIGNvbmZpZ3VyZSBvcGVuc3NsIHZlcnNpb24gY2hlY2s6IGhhbmRsZSBsYWNrIG9mIEwgc3VmZml4CiAgCiAgSXQgc2VlbXMgc29tZSB2ZXJzaW9ucyBvZiB0aGUgT3BlblNTTCB2ZXJzaW9uIGRlZmluZXMgZG9uJ3QgY29tZSB3aXRoIEwKICBhcHBlbmRlZCB0byB0aGUgbnVtYmVyLCBzbyBsZXQncyBkZWFsIHdpdGggdGhhdCBuaWNlbHkuCgotIFtBbGVqYW5kcm8gQWx2YXJleiBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBTU0wgc2Vzc2lvbiBzaGFyaW5nIHN1cHBvcnQgYWRkZWQKICAKICBXaXRoIGxvY2tpbmcsIHBsdXMgdGVzdCwgcGx1cyBkb2N1bWVudGF0aW9uCgpZYW5nIFRzZSAoMjggU2VwIDIwMTEpCi0gY3VybCB0b29sOiBhZGp1c3QgaGVhZGVyIGNhbGxiYWNrIHNpbmdsZSBjYWxsIHdyaXRlIGxpbWl0IHdhcm5pbmcKICAKICBNYXhpbXVtIGFtb3VudCBvZiBkYXRhIGEgaGVhZGVyIGNhbGxiYWNrIGlzIHN1cHBvc2VkIHRvIGdldCBpbgogIGEgc2luZ2xlIGNhbGwgZnJvbSBsaWJjdXJsIGlzIGxpbWl0ZWQgYnkgdGhlIGxvd2VzdCB2YWx1ZSBvZgogIENVUkxfTUFYX1dSSVRFX1NJWkUgYW5kIENVUkxfTUFYX0hUVFBfSEVBREVSLgoKRGFuaWVsIFN0ZW5iZXJnICgyOCBTZXAgMjAxMSkKLSBtdWx0aSBkb2NzOiBleHRlbmRlZCB0aGUgbXVsdGlfc29ja2V0IEFQSSBkZXNjcmlwdGlvbgoKLSB0ZXN0cy9SRUFETUU6IGV4dGVuZGVkIGFuZCByZWZvcm1hdHRlZAoKWWFuZyBUc2UgKDI3IFNlcCAyMDExKQotIFtBbGJlcnQgQ2hpbiBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBjb25maWd1cmUgLSBtNDogbWFrZSBDVVJMX0NIRUNLX0RFRiBpZ25vcmUgbGVhZGluZyB3aGl0ZXNwYWNlIG9uIHN5bWJvbCBkZWYKICAKICBXaGVuIHVzaW5nIFN1biBDIGNvbXBpbGVyIHRoZSBwcmVwcm9jZXNzb3Igc29tZWhvdyBpbnNlcnRzIGFuIGV4dHJhIHNwYWNlCiAgaW4gZnJvbnQgb2YgcmVwbGFjZWQgc3ltYm9sLCBicmVha2luZyBDVVJMX0NIRUNLX0RFRiBtYWNyby4gVG8gd29ya2Fyb3VuZAogIHRoaXMsIG1hY3JvIENVUkxfQ0hFQ0tfREVGIG5vdyBpZ25vcmVzIGFsbCBsZWFkaW5nIHdoaXRlc3BhY2UgaW4gZnJvbnQgb2YKICBzeW1ib2wgc3Vic3RpdHV0aW9uIHJlc3VsdC4KCkd1ZW50ZXIgS25hdWYgKDI3IFNlcCAyMDExKQotIEFkZGVkIFNQTkVHTyB0byBOZXRXYXJlIGJ1aWxkLgoKWWFuZyBUc2UgKDI2IFNlcCAyMDExKQotIGN1cmwgdG9vbDogZml4IGEgY29tcGlsZXIgd2FybmluZwoKLSBjdXJsIHRvb2w6IGZpeCBzb21lIE9PTSBoYW5kbGluZyAtIGY0ODUzZGI1IGZvbGxvdy11cAoKLSBjdXJsIHRvb2w6IGZpeCBzb21lIE9PTSBoYW5kbGluZwoKLSByZW1vdmUgc2hvcnQtbGl2ZWQgQ1VSTF9XUklURUZVTkNfT1VUX09GX01FTU9SWQoKR3VlbnRlciBLbmF1ZiAoMjYgU2VwIDIwMTEpCi0gQWRkZWQgdW5zaWduZWQgY2hhciogdG8gX2N1cmxfaXNfZGVidWdfY2IuCgpEYW5pZWwgU3RlbmJlcmcgKDI2IFNlcCAyMDExKQotIFtTdGV2ZSBIb2xtZSBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBzbXRwX2Nvbm5lY3Q6IHVzZSBkZWZpbmVkIGJ1ZmZlciBsZW5ndGggZm9yIGhvc3RuYW1lCgotIFtTdGV2ZSBIb2xtZSBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBDdXJsX250bG1fY3JlYXRlX3R5cGUzX21lc3NhZ2U6IFRpZGllZCB1cCB0aGUgdXNlIG9mIEN1cmxfZ2V0aG9zdG5hbWUuCiAgCiAgUmVtb3ZlZCB0aGUgY29kZSB0aGF0IHN0cmlwZWQgb2ZmIHRoZSBkb21haW4gbmFtZSB3aGVuIEN1cmxfZ2V0aG9zdG5hbWUKICByZXR1cm5lZCB0aGUgZnVsbHkgcXVhbGlmaWVkIGRvbWFpbiBuYW1lIGFzIHRoZSBmdW5jdGlvbiBoYXMgYmVlbgogIHVwZGF0ZWQgdG8gcmV0dXJuIHRoZSB1bi1xdWFsaWZpZWQgaG9zdCBuYW1lLgogIAogIFJlcGxhY2VkIHRoZSB1c2Ugb2YgSE9TVE5BTUVfTUFYIGFzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgaW4gdGhlIGNhbGwKICB0byBDdXJsX2dldGhvc3RuYW1lIHdpdGggc2l6ZW9mKGhvc3QpIGFzIHRoaXMgaXMgc2FmZXIgc2hvdWxkIHRoZSBidWZmZXIKICBzaXplIGV2ZXIgYmUgY2hhbmdlZC4KCi0gW1N0ZXZlIEhvbG1lIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIEhPU1ROQU1FX01BWDogTW92ZWQgdG8gY3VybF9nZXRob3N0bmFtZS5oCiAgCiAgTW92ZWQgSE9TVE5BTUVfTUFYICNkZWZpbmUgaW50byBjdXJsX2dldGhvc3RuYW1lLmggcmF0aGVyIHRoYW4gYmVpbmcKICBsb2NhbGx5IGRlZmluZWQgaW4gY3VybF9nZXRob3N0bmFtZS5jLCBjdXJsX250bG1fbXNncy5jIGFuZCBzbXRwLmMuCgotIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIGQyYTQ3MDIxYzBhNgoKWWFuZyBUc2UgKDI1IFNlcCAyMDExKQotIFEmRCBmaXggaGVhZGVyIGluY2x1c2lvbiBvcmRlcgoKLSBhbGxvdyB3cml0ZSBjYWxsYmFja3MgdG8gaW5kaWNhdGUgT09NIHRvIGxpYmN1cmwKICAKICBBbGxvdyAoKmN1cmxfd3JpdGVfY2FsbGJhY2spIHdyaXRlIGNhbGxiYWNrcyB0byByZXR1cm4KICBDVVJMX1dSSVRFRlVOQ19PVVRfT0ZfTUVNT1JZIHRvIHByb3Blcmx5IGluZGljYXRlIGxpYmN1cmwgb2YgT09NIGNvbmRpdGlvbnMKICBpbnNpZGUgdGhlIGNhbGxiYWNrIGl0c2VsZi4KCkd1ZW50ZXIgS25hdWYgKDI1IFNlcCAyMDExKQotIENoYW5nZWQgc29tZSBtYWluIG1ha2VmaWxlIHRhcmdldHMuCgpEYW5pZWwgU3RlbmJlcmcgKDI1IFNlcCAyMDExKQotIGN1cmxfbXVsdGlfZmRzZXQ6IGF2b2lkIEZEX1NFVCBvdXQgb2YgYm91bmRzCiAgCiAgSWYgYSBzb2NrZXQgaXMgbGFyZ2VyIHRoYW4gRkRfU0VUU0laRSwgYXZvaWQgdXNpbmcgRkRfU0VUKCkgb24gdGhlCiAgcGxhdGZvcm1zIHdoZXJlIHRoaXMgaXMgcG9zc2libGUuCiAgCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zNDEzMjc0CiAgUmVwb3J0ZWQgYnk6IFRpbSBTdGFybGluZwoKR3VlbnRlciBLbmF1ZiAoMjUgU2VwIDIwMTEpCi0gRml4ZWQgTWluR1cgZXhhbXBsZXMgbWFrZWZpbGUuCgotIE5ldFdhcmUgbWFrZWZpbGUgdHdlYWtzIHRvIHNlbGVjdCBkaWZmZXJlbnQgYnVpbGRzLgoKRGFuaWVsIFN0ZW5iZXJnICgyNSBTZXAgMjAxMSkKLSBQT1NUOiBhbHdheXMgc2V0IHBvc3RmaWVsZHNpemUKICAKICBXaGVuIHdlIHVzZSBiaW5hcnkgcG9zdHMgYW5kIHJlZ3VsYXIgb25lcyBpbnRlcm1peGVkIG9uIGEgc2luZ2xlIGNvbW1hbmQKICBsaW5lLCB3ZSBjYW5ub3QgZG8gc3RybGVuKCkgZXRjIG9uIHRoZSBkYXRhIHRvIGZpZ3VyZSBvdXQgdGhlIGxlbmd0aAogICh3aGVuIGluc2VydGluZyAnJicgYW5kIG1vcmUpLiBXZSBtdXN0IHRoZXJlZm9yZSBrZWVwIHRyYWNrIG9mIHRoZSBwb3N0CiAgZGF0YSBsZW5ndGguIFRoZW4gd2UgYWxzbyBlbmQgdXAgc2V0dGluZyB0aGUgbGliY3VybCBvcHRpb24gd2l0aCB0aGUKICBrbm93biBzaXplLCBzbyB0aGF0IHdlIGRvbid0IHJpc2sgdGhhdCBsaWJjdXJsIHdpbGwgZG8gc3RybGVuKCkgb24gdGhlCiAgZGF0YS4KICAKICBUaGlzIGhhcyB0aGUgbWlub3Igc2lkZS1lZmZlY3QgdGhhdCAtLWxpYmN1cmwgc291cmNlIGNvZGVzIG5vdyBhbHdheXMKICB3aWxsIHVzZSBDVVJMT1BUX1BPU1RGSUVMRFNJWkUgYnV0IEkgZG9uJ3QgY29uc2lkZXIgdGhhdCB0ZXJyaWJseQogIGRhbWFnaW5nLgogIAogIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MzQxMzE4MQogIFJlcG9ydGVkIGJ5OiBUYW5lbGkgVuRo5GthbmdhcwoKWWFuZyBUc2UgKDI0IFNlcCAyMDExKQotIGN1cmwgdG9vbDogZml4IGEgY29tcGlsZXIgd2FybmluZwoKLSBjdXJsIHRvb2w6IHJldmlld2VkIGNvZGUgbW92ZWQgdG8gdG9vbF8qLltjaF0gZmlsZXMKCkd1ZW50ZXIgS25hdWYgKDI0IFNlcCAyMDExKQotIEFkZGVkIGhlYWRlciB0byBiZSBpbmNsdWRlZCBieSBkaXN0IHNjcmlwdC4KICAKICBQcm9iYWJseSB0aGUgd3JvbmcgcGxhY2UsIGJ1dCBJIGRvbnQga25vdyBiZXR0ZXIuCgpZYW5nIFRzZSAoMjQgU2VwIDIwMTEpCi0gY3VybCB0b29sOiBmaXggc29tZSBPT00gaGFuZGxpbmcgaXNzdWVzCgpEYW5pZWwgU3RlbmJlcmcgKDI0IFNlcCAyMDExKQotIGh0dHAgaGVhZGVyOiBhbGxvdyBDb250ZW50LUxlbmd0aCB0byBiZSByZXBsYWNlZAogIAogIEluIHNvbWUgY2FzZXMgQ29udGVudC1MZW5ndGg6IGNvdWxkbid0IGJlIHJlcGxhY2VkIGJ5IGFuIGFwcGxpY2F0aW9uCiAgCiAgQWxzbywgaW5kZW50ZWQgc29tZSBjb2RlIHByb3Blcmx5CgpHdWVudGVyIEtuYXVmICgyMyBTZXAgMjAxMSkKLSBNaW5HVzY0IGhhcyB0aGlzIHByb3RvdHlwZSBhbHJlYWR5LgoKLSBGaXhlZCBzY2FuZiBmb3JtYXQgZm9yIFdPUkQgPSB1bnNpZ25lZCBzaG9ydC4KCi0gQWRkZWQgV2luMzItb25seSBzYW1wbGVzLgoKLSBBZGRlZCBhIHdvcmthcm91bmQgZm9yIHByaW50aW5nIHNpemVfdC4KCkRhbmllbCBTdGVuYmVyZyAoMjIgU2VwIDIwMTEpCi0gQ3VybF9wZ3JzU3RhcnROb3c6IGtlZXAgSEVBREVSU19PVVQgc2V0CiAgCiAgVG8gYXZvaWQgdGhhdCB0aGUgcHJvZ3Jlc3MgbWV0ZXIgaGVhZGVycyBnZXQgb3V0cHV0IGJldHdlZW4gZWFjaAogIHRyYW5zZmVyLCBtYWtlIHN1cmUgdGhlIGJpdHMgZ2V0cyBrZXB0IHdoZW4gKHJlLSlpbml0ZWQuCiAgCiAgUmVwb3J0ZWQgYnk6IENocmlzdG9waGVyIFN0b25lCgpZYW5nIFRzZSAoMjIgU2VwIDIwMTEpCi0gY3VybCB0b29sOiBmaXggc29tZSBPT00gaGFuZGxpbmcgaXNzdWVzCgotIGN1cmwgdG9vbDogcmV2aWV3ZWQgY29kZSBtb3ZlZCB0byB0b29sXyouW2NoXSBmaWxlcwogIAogIG15X3NldG9wdCBhbmQgbXlfc2V0b3B0X3N0ciBubyBsb25nZXIgaWdub3JlcyBjdXJsX2Vhc3lfc2V0b3B0IHJlc3VsdC4KICAKICBGaXhlZCBzb21lIE9PTSBoYW5kbGluZyBpc3N1ZXMuCgpHdWVudGVyIEtuYXVmICgyMiBTZXAgMjAxMSkKLSBBZGRlZCBOZXRXYXJlIGV4YW1wbGVzIG1ha2VmaWxlLgoKWWFuZyBUc2UgKDIyIFNlcCAyMDExKQotIE5UTE1fV0I6IGZpeCBkaXNhYmxpbmcgb2YgTlRMTV9XQiB3aGVuIE5UTE0gaXMgZGlzYWJsZWQKCkRhbmllbCBTdGVuYmVyZyAoMjEgU2VwIDIwMTEpCi0gdGVzdCA4MTQ6IHNtdHAgd2l0aG91dCAtLW1haWwtZnJvbQogIAogIFZlcmlmaWVzIHRoZSBmaXggZnJvbSBjb21taXQgMzIyZjNkNWFmNzA5MwoKLSBbR2lzbGUgVmFuZW0gYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgc210cDogd2l0aG91dCBhIE1BSUxfRlJPTSwgc2VuZCBibGFuayBNQUlMIEZST00KICAKICBJIHRoaW5rIGN1cmwgc2hvdWxkIGlnbm9yZSB0aGlzIGNhc2UgYW5kIHNtdHAuYyBzaG91bGQgdGVzdCBmb3IgdGhpcy4KICBTaW5jZSBSRkMtMjgyMSBzZWVtcyB0byBhbGxvdyBhICJudWxsIHJldmVyc2UtcGF0aCIuIFJlZi4gICJNQUlMCiAgRlJPTTo8PiIgaW4gc2VjdGlvbiAzLjcsIHBhZ2UgMjUuCgotIFtEYXZlIFJlaXNuZXIgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgbGliL2h0dHA6IGFkZCBtaXNzaW5nIHdoaXRlc3BhY2UgaW4gdmVyYm9zZSBvdXRwdXQKICAKICBFeGFtcGxlOgogICogdXBsb2FkIGNvbXBsZXRlbHkgc2VudCBvZmY6IDM1b3V0IG9mIDM1IGJ5dGVzCiAgCiAgU2hvdWxkIGJlOgogICogdXBsb2FkIGNvbXBsZXRlbHkgc2VudCBvZmY6IDM1IG91dCBvZiAzNSBieXRlcwoKR3VlbnRlciBLbmF1ZiAoMjEgU2VwIDIwMTEpCi0gQW5vdGhlciBNaW5HVyBleGFtcGxlIG1ha2VmaWxlIHR3ZWFrLgoKLSBGaXhlZCBzYW1wbGUgdG8gY29tcGlsZSBmb3IgV2luZG93cyBwbGF0Zm9ybS4KCllhbmcgVHNlICgyMSBTZXAgMjAxMSkKLSBjdXJsIHRvb2w6IG1ha2UgbXlfc2V0b3B0IGlnbm9yZSBjdXJsX2Vhc3lfc2V0b3B0IHJlc3VsdCBhZ2Fpbi4KICAKICBSZWxhdGVkIGNvZGUgbm90IHJlYWR5IHlldCBmb3IgdGhpcyBraW5kIG9mIGNoZWNrcy4KCkd1ZW50ZXIgS25hdWYgKDIxIFNlcCAyMDExKQotIENoYW5nZWQgc3VmZml4IHJ1bGVzIHRvIHBhdHRlcm4gcnVsZXMuCiAgCiAgU3VmZml4IHJ1bGVzIGNhbm5vdCBoYXZlIGFueSBwcmVyZXF1aXNpdGVzIG9mIHRoZWlyIG93bi4KCi0gQWRkZWQgZGVwZW5kZW5jeSBzbyB0aGF0IGN1cmxidWlsZC5oIGlzIGNyZWF0ZWQuCgotIFNvbWUgbW9yZSBNaW5HVyBidWlsZCB0d2Vha3MuCiAgCiAgQWRkZWQgZW52dmFycyB0byBzcGVjaWZ5IE9wZW5TU0wgaW5jbHVkZSwgbGlicGF0aCBhbmQgbGliLgogIEFkZGVkIHJ1bGUgdG8gY3JlYXRlIGN1cmxidWlsZC5oIGZyb20gY3VybGJ1aWxkLmguZGlzdC4KCllhbmcgVHNlICgyMSBTZXAgMjAxMSkKLSBjdXJsIHRvb2w6IHJldmlld2VkIGNvZGUgbW92ZWQgdG8gdG9vbF8qLltjaF0gZmlsZXMKICAKICBteV9zZXRvcHQgYW5kIG15X3NldG9wdF9zdHIgbm8gbG9uZ2VyIGlnbm9yZXMgY3VybF9lYXN5X3NldG9wdCByZXN1bHQuCiAgCiAgRml4ZWQgc29tZSBPT00gaGFuZGxpbmcgaXNzdWVzLgoKLSBjdXJsIHRvb2w6IHJldmlld2VkIGNvZGUgbW92ZWQgdG8gdG9vbF8qLltjaF0gZmlsZXMKICAKICBPdmVyaGF1bGVkIEZpbmRXaW4zMkNBQ2VydCgpCgpHdWVudGVyIEtuYXVmICgyMCBTZXAgMjAxMSkKLSBBIGJ1bmNoIG9mIE1pbkdXIGJ1aWxkIHR3ZWFrcy4KICAKICBBbGwgcGF0aHMgdG8gZGVwZW5kZW5jaWVzIG5vdyBxdW90ZWQ7IHN5bmNlZCBleGFtcGxlcyBtYWtlZmlsZS4KCi0gQ2hhbmdlZCBXaW5kb3dzIDY0Yml0IE9TIGRlZmluZSB0byB4ODZfNjQuCiAgCiAgQWxzbyBhZGRlZCBjaGVjayBmb3IgX194ODZfNjRfXyBkZWZpbmUgc2luY2UgTWluR1c2NCBzZWVtcyB0byBkZWZpbmUKICB0aGUgX01fWDY0IG1hY3JvIHRocm91Z2ggYSBoZWFkZXIgbm90IGF2YWlsYWJsZSBmb3IgY29uZmlnLXdpbjMyLmguCgotIEFsc28gc2tpcCBjZXJ0cyBtYXNrZWQgYXMgQ0tUX05TU19UUlVTVF9VTktOT1dOLgogIAogIEZpeCBwb3N0ZWQgYnkgVG9tYXMgSG9nZXIgPHRob2dlciByZWRoYXQgY29tPi4KCi0gQWRkZWQgX1dJTjMyX1dJTk5UIGRlZmluZSBmb3IgSVB2NiBidWlsZHMuCgpEYW5pZWwgU3RlbmJlcmcgKDIwIFNlcCAyMDExKQotIEN1cmxfZm9sbG93OiBoYW5kbGUgcmVkaXJlY3RzIHRvICIvL2hvc3RuYW1lL3BhdGgiCgpZYW5nIFRzZSAoMTkgU2VwIDIwMTEpCi0gY3VybCB0b29sOiB0cnVseSBmaXggY29tcGlsZXIgd2FybmluZwoKLSBjdXJsIHRvb2w6IGZpeCBjb21waWxlciB3YXJuaW5nCgotIGN1cmwgdG9vbDogcmV2aWV3ZWQgY29kZSBtb3ZlZCB0byB0b29sXyouW2NoXSBmaWxlcwoKRGFuaWVsIFN0ZW5iZXJnICgxOCBTZXAgMjAxMSkKLSBDVVJMT1BUX1VSTCBkb2NzOiBubyBuZWVkIHRvIG1lbnRpb24gZnVuY3Rpb24gbmFtZXMKCi0gW1N0ZXZlIEhvbG1lIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIENVUkxPUFRfVVJMOiBFeHBhbmRlZCBVUkwgZGVzY3JpcHRpb24KICAKICBFeHBhbmRlZCB0aGUgc2VjdGlvbiBhYm91dCBDVVJMT1BUX1VSTCB0byBpbmNsdWRlIHRoZSBmb3JtYXQgb2YgdGhlIFVSTAogIGFuZCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZXMgcmVsYXRpbmcgdG8gc3BlY2lmaWMgcHJvdG9jb2xzLgoKLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgQ3VybF9nZXRob3N0bmFtZTogcmV0dXJuIHVuLXF1YWxpZmllZCBtYWNoaW5lIG5hbWUKICAKICBGaXhlZCBDdXJsX2dldGhvc3RuYW1lKCkgc28gdGhhdCBpdCBhbHdheXMgcmV0dXJucyB0aGUgdW4tcXVhbGlmaWVkCiAgbWFjaGluZSBuYW1lIHJhdGhlciB0aGFuIGJlaW5nIGRlcGVuZGVudCBvbiB0aGUgc29ja2V0IHByb3ZpZGVyLgogIAogIE5vdGU6IFRoZSByZXR1cm4gb2YgZ2V0ZW52KCJDVVJMX0dFVEhPU1ROQU1FIikgaXMgYWxzbyBwYXJzZWQgaW4gY2FzZQogIHRoZSBkZXZlbG9wZXIgLyB0ZXN0IGhhcm5lc3MgcHJvdmlkZWQgYSBmdWxseSBxdWFsaWZpZWQgZG9tYWluIG5hbWUgYXMKICBpdCdzIHZhbHVlIGFzIHdlbGwuCgpZYW5nIFRzZSAoMTggU2VwIDIwMTEpCi0gY3VybCB0b29sOiBjcmVhdGUgdG9vbF9teWZ1bmMuW2NoXSB3aGljaCBsYXRlciBvbiB3aWxsIGhvbGQgbXlfKiBmdW5jdGlvbnMKICAKICBBZGRpdGlvbmFsbHkgZnVuY3Rpb24gbXlfdXNlcmFnZW50KCkgbm93IHByb3ZpZGVzIGRlZmF1bHQgVXNlci1BZ2VudCBzdHJpbmcKCi0gY3VybCB0b29sOiByZW9yZGVyIGZyZWVfY29uZmlnX2ZpZWxkcygpIGZpZWxkIGhhbmRsaW5nCiAgCiAgUmVvcmRlciBoYW5kbGluZyBvZiBmaWVsZHMgdG8gbWF0Y2ggc2FtZSBvcmRlciBhcyB0aGUgb25lIGdpdmVuIGJ5IGN1cnJlbnQKICBkZWZpbml0aW9uIG9yZGVyIG9mICdDb25maWd1cmFibGUnIHN0cnVjdCBmaWVsZHMuIEZpZWxkcyBjdXJyZW50bHkgbm90IGhhbmRsZWQKICBtYXJrZWQgZm9yIGZ1cnRoZXIgaW5zcGVjdGlvbi4KCkd1ZW50ZXIgS25hdWYgKDE3IFNlcCAyMDExKQotIEZpeGVkIE1pbkdXIFdpbklETiBsaWIgZGVwZW5kZW5jeS4KCllhbmcgVHNlICgxNyBTZXAgMjAxMSkKLSB0b29sX2NvbnZlcnQuYzogZml4IG5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKCi0gY3VybCB0b29sOiBhZGQgbmV3IGZpbGVzIHRvIFN5bWJpYW4ncyAubW1wIHByb2plY3QgZmlsZQoKLSBjdXJsIHRvb2w6IG1vdmUgJ0NvbmZpZ3VyYWJsZScgYW5kIGZyZWVfY29uZmlnX2ZpZWxkcygpIHRvIHRvb2xfY2ZnYWJsZS5bY2hdCiAgCiAgUmV2aWV3aW5nIGZpZWxkcyBiZWluZyBmcmVlJ2QgaW4gZnJlZV9jb25maWdfZmllbGRzKCkgc3RpbGwgcGVuZGluZwoKLSBzcmMvc2V0dXAuaDogYWRkIGNvbmRpdGlvbmFsIGluY2x1ZGUgb2YgYXNzZXJ0LmgKCi0gY3VybCB0b29sOiBtb3ZlIHNvIGNhbGxlZCAnbXVsdGlfZmlsZXMnIHN0dWZmIGludG8gdG9vbF9tZmlsZXMuW2NoXQogIAogIEFkZGl0aW9uYWxseSBzb21lIGNvZGUgcmVvcmdhbml6YXRpb24gYW5kIGRpcmVjdCBPT00gaGFuZGxpbmcgZml4ZXMsCiAganVzdCBhbm90aGVyIHN0ZXAgdG93YXJkcyBmaXhpbmcgY3VybCB0b29sIGlzc3VlcyB1bmNvdmVyZWQgMjAxMS0wOS0xNQoKLSBjdXJsIHRvb2w6IG1vdmUgY29udmVydF8qIGZ1bmN0aW9ucyBpbnRvIHRvb2xfY29udmVydC5bY2hdCiAgCiAgQWRkaXRpb25hbGx5IGZpeCBkYXRhIHR5cGUgb2YgcmVzdWx0IHZhcnMgZm9yIGljb252KCkgY2FsbHMKCi0gbWFpbi5jOiBjb252ZXJ0IEdldFN0cigpIGludG8gYSBtYWNybyB0byBlYXNlIGxlYWsgZGVidWdnaW5nCgotIG1haW4uYzogZGUtb2JmdXNjYXRlIGEgY291cGxlIGZvci1sb29wIGV4aXQgY29uZGl0aW9ucwoKLSBjdXJsIHRvb2w6IGZpeCBhIGJ1bmNoIG9mIGRvdWJsZSBmcmVlJ3MgdW5jb3ZlcmVkIDIwMTEtMDktMTUKICAKICBSZS1lbmFibGluZyBNZW1vcnlUcmFja2luZyBjYXBhYmlsaXR5IG9uICdzcmMnIHN1YmRpcmVjdG9yeSBmaWxlcyBhbmQgdG9ydHVyZQogIHRlc3RzIGhhdmUgdW5jb3ZlcmVkIG1hbnkgaXNzdWVzIHdoaWNoIHdlcmUgZ29pbmcgdW5ub3RpY2VkIGluIGN1cmwgdG9vbC4gU28KICBoZXJlIHdlIGdvIGZpeGluZyBzb21lIG9mIHRoZW0uIE90aGVycyBzdGlsbCByZW1haW4gYW5kIHNob3VsZCBiZSBhZGRyZXNzZWQKICBBU0FQLCBnaXZlbiB0aGF0IGN1cmwgdG9vbCBpcyB1c2VkIGluIG91ciB0ZXN0IGhhcm5lc3MgYWxzbyBmb3IgdGVzdCBzZXJ2ZXIKICBzdGFydCB2ZXJpZmljYXRpb24gcHVycG9zZXMuIFRoZXJlIGFyZSBldmVuIG5vbi1zb2NrZXQgZmlsZSBkZXNjcmlwdG9yIGxlYWtzLgoKLSBNYWtlIEN1cmxfc2FmZWZyZWUoKSBtYWNybyBhc3NpZ24gTlVMTCB0byBnaXZlbiBwb2ludGVyIHdoZW4gZnJlZSdkCgotIGN1cmwgTVNWQyBwcm9qZWN0IGZpbGVzOiBhZGp1c3QgcmVzb3VyY2UgY29tcGlsZXIgaW5jbHVkZSBwYXRoCgotIHNyYy9NYWtlZmlsZS52YzY6IGFkanVzdCByZXNvdXJjZSBjb21waWxlciBpbmNsdWRlIHBhdGgKCi0gY3VybCB0b29sOiByZS1lbmFibGUgTWVtb3J5VHJhY2tpbmcgY2FwYWJpbGl0eSBvbiAnc3JjJyBzdWJkaXJlY3RvcnkgZmlsZXMuCiAgCiAgVXNlIHNhbWUgcHJlcHJvY2Vzc29yIGxvZ2ljIGZvciBjdXJsIHRvb2wgTWVtb3J5VHJhY2tpbmcgYWN0aXZhdGlvbiBpbiBzb3VyY2UKICBmaWxlcyBsb2NhdGVkIGluICdzcmMnIHN1YmRpcmVjdG9yeSBhcyB0aGUgb25lIHVzZWQgZm9yIGxpYmN1cmwgc291cmNlcy4KCi0gZnRwLmM6IGFkZCBhIGNvdXBsZSBvZiBmYWlsdXJlIG1lc3NhZ2VzCgpEYW4gRmFuZHJpY2ggKDEzIFNlcCAyMDExKQotIFt3YXJwIGthd2FkYSBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBDdXJsX2FkZF9jdXN0b21faGVhZGVyczogc3VwcG9ydCBoZWFkZXJzIHdpdGggbm8gZGF0YQogIAogIEEgY3VzdG9tIEhUVFAgaGVhZGVyIGVuZGluZyBpbiBhIHNlbWljb2xvbiBpbnN0ZWFkIG9mIGEgY29sb24KICB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBoZWFkZXIgdG8gYmUgYWRkZWQgd2l0aG91dCBhbnkgZGF0YQogIHBvcnRpb24uCgpEYW5pZWwgU3RlbmJlcmcgKDEzIFNlcCAyMDExKQotIHByb2dyZXNzZnVuYzogYSBzaW1wbGUgQ1VSTE9QVF9QUk9HUkVTU0ZVTkNUSU9OIGV4YW1wbGUKCi0gNy4yMi4xOiBzdGFydCB3b3JraW5nCgotIFRIQU5LUzogMTYgbmV3IGNvbnRyaWJ1dG9ycyBmcm9tIDcuMjIuMAoKVmVyc2lvbiA3LjIyLjAgKDEzIFNlcCAyMDExKQoKRGFuaWVsIFN0ZW5iZXJnICgxMyBTZXAgMjAxMSkKLSBSRUxFQVNFLU5PVEVTOiByZWFkeSBmb3IgNy4yMi4wCgotIGNvZGVzdHlsZTogbWlub3Igd2hpdGVzcGFjZSBmaXgKCi0gW0plZmYgUG9obG1leWVyIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIHBvbGFyc3NsOiBidWlsZCB3aXRoIFBvbGFyU1NMLTEuMC4wCiAgCiAgV2l0aCB0aGlzIGZpeCwgaXQgc2hvdWxkIHdvcmsgZm9yIFBvbGFyU1NMLTEuMC4wIChhbmQgU1ZOLTEwOTEgdHJ1bmspCiAgYW5kIHJldGFpbiBjb21wYXRpYmlsaXR5IHdpdGggZWFybGllciB2ZXJzaW9ucy4gKFRlc3RlZCB3aXRoIDAuMTQuMSkKICAKICBQb2xhclNTTCBzdGlsbCBkb2Vzbid0IHBsYXkgbmljZWx5IHdpdGggY3VybCdzIENBIGJ1bmRsZSAod2UgZGlzY3Vzc2VkCiAgdGhpcyBiZWZvcmUpIGJ1dCBJIHdhcyBhdCBsZWFzdCBhYmxlIHRvIHJldHJpZXZlIHRoZQogIGh0dHBzOi8vd3d3LmdtYWlsLmNvbS8gbG9naW4gcGFnZSB1c2luZyBhIG1vZGlmaWVkIGNhLWNlcnRpZmljYXRlcy5jcnQKICBmaWxlIHdpdGggYWxsIDMgdmVyc2lvbnMgb2YgUG9sYXJTU0wuCgotIEJVR1M6IHNwZWxsZml4ZWQsIHNsaWdodGx5IHJlZm9ybWF0dGVkIGZvciB3ZWIgbG9va3MKICAKICBSZXBvcnRlZCBieTogSmVmZiBQb2hsbWV5ZXIKCkRhbiBGYW5kcmljaCAoMTIgU2VwIDIwMTEpCi0gRG9jdW1lbnQgTlRMTSB3aW5iaW5kIG9wdGlvbnMgKGFuZCBjYXZlYXRzKQoKRGFuaWVsIFN0ZW5iZXJnICgxMiBTZXAgMjAxMSkKLSBCVUdTOiByZW51bWJlcmVkIHRvIGxvb2sgYmV0dGVyIGluIHRoZSB3ZWIgdmVyc2lvbgoKLSBCVUdTOiByZXZhbXBlZCBidWcgcmVwb3J0IGRvY3VtZW50YXRpb24KCllhbmcgVHNlICgxMiBTZXAgMjAxMSkKLSBNZW50aW9uIHRoYXQgQlNELXN0eWxlIGx3SVAgVENQL0lQIHN0YWNrIHN1cHBvcnQgb24gV2luZG93cyBpcyBleHBlcmltZW50YWwuCgotIGZ0cC5jOiBmaXggc29ja2V0IGxlYWsgdG9ydHVyZSB0ZXN0cyBkZXRlY3RlZCAyMDExLTA4LTMwCiAgCiAgQWxzbyBmaXggaW5hcHByb3ByaWF0ZSBlcnJvciBoYW5kbGluZyB3aGVuIHNlbmRpbmcgZnRwIEVQUlQgb3IgUE9SVCBjb21tYW5kcy4KCkRhbmllbCBTdGVuYmVyZyAoMTEgU2VwIDIwMTEpCi0gVE9ETzogcmVtb3ZlIDQgZW50cmllcywgYWRkIG9uZSBuZXcKICAKICBaZXJvLWNvcHkgYW5kICJBdm9pZCBoYXZpbmcgdG8gcmVtb3ZlL3JlYWRkIGhhbmRsZXMiIGFyZSBub3QgcmVhbGx5CiAgZmVhdHVyZXMgd2UgdGhpbmsgYXJlIHdvcnRod2hpbGUgdG8gYWRkLiBSZW1vdmVkLgogIAogIFNSUCBmZWF0dXJlcyBoYXZlIGJlZW4gYWRkZWQgYWxyZWFkeSwgcmVtb3ZlZC4KICAKICAxMS45IElQdjYgYWRkcmVzc2VzIHdpdGggZ2xvYmJpbmcgYWRkZWQKCi0gc3BlbGwtY2hlY2tlZCBjb21tZW50cwoKLSBUT0RPLVJFTEVBU0U6IHBvc3Rwb25lIHRoZSByZW1haW5kZXJzCiAgCiAgVGhlcmUncyB0aHJlZSBwZW5kaW5nIGJ1ZyBmaXhlcyBidXQgdGhlcmUncyBubyB0aW1lIGxlZnQgc28gbGV0J3MKICB0cnkgdG8gZ2V0IHRoZW0gZml4ZWQgZm9yIG5leHQgcmVsZWFzZS4uLgoKR3VlbnRlciBLbmF1ZiAoMTEgU2VwIDIwMTEpCi0gVXBkYXRlZCBtYWtlZmlsZXMgdG8gbGF0ZXN0IGxpYnNzaDIuCgpZYW5nIFRzZSAoMTAgU2VwIDIwMTEpCi0gdXJsZ2xvYi5jOiBmaXggT09NIGhhbmRsaW5nCgotIGZ0cC5jOiBmaXggZnRwIGFjdGl2ZSBjb25uZWN0cyB3aGljaCBnb3QgYnJva2VuIHdpdGggY29tbWl0IGZkZjE1N2FiZGYKCi0gcnVudGVzdHMucGw6IHJlcGxhY2UgVEFCIHdpdGggc3BhY2VzCgotIHRlc3QgaGFybmVzczogcmV2ZXJ0IG5lZWRsZXNzIGNvbW1pdCAwYTViYmIyYWMxCiAgCiAgaHR0cHMsIGZ0cHMgYW5kIHNzaCBzZXJ2ZXJzIGFsbG93ZWQgc3RhcnQgdXAgdGltZSBiYWNrIHRvIHByZXZpb3VzIHZhbHVlcwoKLSBzc2guYzogcmV2ZXJ0IG5lZWRsZXNzIGNvbW1pdCA3YjdjNDU4NzllCgpEYW5pZWwgU3RlbmJlcmcgKDkgU2VwIDIwMTEpCi0gUkVMRUFTRS1OT1RFUzogc3luY2VkIHdpdGggMzAzYzkwMDc0ZDRjCiAgCiAgRml2ZSBtb3JlIGJ1Z2ZpeGVzLCBvbmUgbW9yZSBjb250cmlidXRvcgoKLSB0Y3Bub2RlbGF5OiByZW5hbWUgdmFyaWFibGUKICAKICBSZW5hbWVkIHRoZSB2YXJpYWJsZSBmcm9tICdwcm90bycgdG8gJ2xldmVsJyBzaW1wbHkgYmVjYXVzZSBpdCBpcyBub3QKICBwcm90b2NvbCB5b3Ugc2V0IGJ1dCBsZXZlbCBhbmQgdGhhdCBpcyB0aGUgbmFtZSBvZiB0aGUgYXJndW1lbnQgdXNlZCBpbgogIG1hbiBwYWdlcyBhbmQgdGhlIFBPU0lYIGRvY3VtZW50YXRpb24gb2YgdGhlIHNldHNvY2tvcHQgZnVuY3Rpb24uCgpHdWVudGVyIEtuYXVmICg4IFNlcCAyMDExKQotIEF2b2lkIGZ0cnVuY2F0ZSgpIHN0YXRpYyBkZWZpbmUgd2l0aCBNaW5HVzY0LgoKWWFuZyBUc2UgKDggU2VwIDIwMTEpCi0gbGlic3NoMjogdXNlIGNhbGxvYyBhcyBhbGxvYyBmdW5jdGlvbiBmb3IgbGlic3NoMiB2ZXJzaW9ucyBvbGRlciB0aGFuIDEuMwogIAogIFRoaXMgd29ya2Fyb3VuZHMgb2xkIGxpYnNzaDIgdmVyc2lvbnMgbm90IHByb3Blcmx5IGluaXRpYWxpemluZwogIHNvbWUgc3NoIHNlc3Npb24gdmFyaWFibGVzLCB3aGljaCB3b3VsZCB0cmlnZ2VyIG1lbW9yeSBkZWJ1Z2dlcnMKICB3YXJuaW5ncyBvbiBtZW1vcnkgYmVpbmcgdXNlZCB3aXRob3V0IGhhdmluZyBiZWVuIGluaXRpYWxpemVkLgoKRGFuaWVsIFN0ZW5iZXJnICg4IFNlcCAyMDExKQotIFtBZHJpYW5vIE1laXJlbGxlcyBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBDdXJsX3NwZWVkY2hlY2s6IGRvbid0IG1pc3Rha2VubHkgY2xlYXIgQ3VybF9leHBpcmUoKQogIAogIFRoZSBjdXJyZW50IHZlcnNpb24gb2Ygc3BlZWRjaGVjay5jIG1heSBkaXNhYmxlIHRpbWVvdXQgYnkgc2V0dGluZyB6ZXJvCiAgdG8gQ3VybF9leHBpcmUuIFdoaWNoIGlzIGZpbmUgdXNpbmcgdGhlIGN1cmxfbXVsdGlfcGVyZm9ybSwgYmVjYXVzZSBpdAogIHJlY2hlY2sgYWxsIHRpbWVvdXQgaW50ZXJuYWxzLCBidXQgd2hlbiB1c2luZyBjdXN0b20gZXZlbnQgcG9sbGVyIChsaWtlCiAgaGlwZXJmaWZvLmMpIGl0IG1heSBrZWVwIHN0YWxsZSBjb25uZWN0aW9uIGZvcmV2ZXIuCgpZYW5nIFRzZSAoOCBTZXAgMjAxMSkKLSBsaWI1ODIuYzogZml4IHNlZ2ZhdWx0IHRyaWdnZXJlZCB3aGVuIHRvcnR1cmUgdGVzdGluZyB0ZXN0IGNhc2UgNTgyCgpEYW5pZWwgU3RlbmJlcmcgKDcgU2VwIDIwMTEpCi0gZnRwX3N0YXRlX3VzZV9wb3J0OiBtaW5vciBjb2RlIGluZGVudCBmaXgKCi0gY2hlY2tzcmM6IGRldGVjdCAifWVsc2UiIHVzZXMgYXMgd2VsbAoKLSBnZXRpbm1lbW9yeS5jOiB1c2UgYmV0dGVyIGFyZ3VtZW50IG5hbWVzIGZvciB3cml0ZSBjYWxsYmFjawoKWWFuZyBUc2UgKDcgU2VwIDIwMTEpCi0gc3NoLmM6IGZpeCBtZW1vcnkgbGVha3MgdHJpZ2dlcmVkIHVwb24gT09NIG9yIG90aGVyIGZhaWx1cmVzCgotIHRlc3QgY2FzZSA1ODM6IGVuc3VyZSB0aGF0IHRlc3QgZmFpbHVyZXMgZG9uJ3QgZ28gdW5ub3RpY2VkIC0gZm9sbG93LXVwCgotIHRlc3Qgc3VpdGU6IGxpYnRlc3QgaGVhZGVyIGluY2x1c2lvbiBjbGVhbnVwIC0gZm9sbG93LXVwCiAgCiAgQWRqdXN0IHRlc3RzL2xpYnRlc3QvTWFrZWZpbGUuaW5jIGFuZCByZW1vdmUgYSBjb3VwbGUgb2YgdW51c2VkIGhlYWRlcnMgZnJvbQogIHRlc3RzL2xpYnRlc3QvbGliNTgzLmMKCi0gdGVzdCBjYXNlIDU4MzogZW5zdXJlIHRoYXQgdGVzdCBmYWlsdXJlcyBkb24ndCBnbyB1bm5vdGljZWQKCi0gdGVzdCBzdWl0ZTogbGlidGVzdCBoZWFkZXIgaW5jbHVzaW9uIGNsZWFudXAKICAKICBBZGRlZCBtaXNzaW5nIG1lbW9yeVRyYWNraW5nIHRvIHRlc3QgY2FzZXMgNTYwIGFuZCA1ODMuIElmIHRoaXMgdHJpZ2dlcnMKICBsZWFrIGRldGVjdGlvbiBvbiB0aGVzZSwgaXQgb25seSBtZWFucyB0aGF0IHByZXZpb3VzbHkgaXQgd2FzIGdvaW5nIHVubm90aWNlZC4KCi0gZml4IGJvb2wgdmFyaWFibGVzIGNoZWNraW5nIGFuZCBhc3NpZ25tZW50CgotIHBpbmdwb25nLmM6IGF2b2lkIGEgbWVtbW92ZSBjYWxsIGluIGZ1bmN0aW9uIEN1cmxfcHBfdnNlbmRmCgotIGZpeCBib29sIHZhcmlhYmxlcyBjaGVja2luZyBhbmQgYXNzaWdubWVudAoKLSB0ZXN0IHN1aXRlOiB1c2UgdGVzdCBjYXNlIHNwZWNpZmljIG5ldHJjIGZpbGUgbmFtZXMKCkd1ZW50ZXIgS25hdWYgKDQgU2VwIDIwMTEpCi0gRml4ZWQgZmluYWwgbWVzc2FnZSBvdXRwdXQuCgpEYW5pZWwgU3RlbmJlcmcgKDQgU2VwIDIwMTEpCi0gVE9ETy1SRUxFQVNFOiBkZWxldGVpbmcgZml2ZSBpc3N1ZXMgZHVlIHRvIG5vIHJlc3BvbnNlCiAgCiAgTm8gZmVlZGJhY2sgYW5kIG5vIHVwZGF0ZXMsIHJlbW92aW5nIHRoZXNlIGlzc3VlcwoKWWFuZyBUc2UgKDQgU2VwIDIwMTEpCi0gc2V0dXBfb25jZS5oIGNsZWFudXAgYW5kIHN5bmMKCkd1ZW50ZXIgS25hdWYgKDQgU2VwIDIwMTEpCi0gRml4IHRvIHNraXAgdW50cnVzdGVkIGNlcnRzLgoKLSBBZGRlZCBTUE5FR08gdG8gTWluR1cgbWFrZWZpbGVzLgoKWWFuZyBUc2UgKDQgU2VwIDIwMTEpCi0gTlRMTSBXQjogZml4IGZpbGUgZGVzY3JpcHRvciBsZWFrIHVwb24gT09NIGNvbmRpdGlvbgoKLSByZXZlcnQgY2hhbmdlcyBub3QgaW50ZW5kZWQgdG8gYmUgcHVzaGVkIHdpdGggY29tbWl0IDZiNzVkMmMyCgotIGZpeCBhIGJ1bmNoIG9mIE1TVkMgY29tcGlsZXIgd2FybmluZ3MKCkd1ZW50ZXIgS25hdWYgKDMgU2VwIDIwMTEpCi0gVXBkYXRlZCBkZXBlbmRlY2llcyB2ZXJzaW9ucy4KCi0gU29tZSBNaW5HVyBtYWtlZmlsZSB0d2Vha3MgZm9yIE1pbkdXNjQuCgotIENoYW5nZWQgTWluR1cgdG8gdXNlIG93biB3aW5pZG4gcHJvdG90eXBlcy4KCkRhbiBGYW5kcmljaCAoMiBTZXAgMjAxMSkKLSBGaXggTlRMTSB3aW5iaW5kIHN1cHBvcnQgdG8gcGFzcyB0aGUgdG9ydHVyZSB0ZXN0cwogIAogIENhbGxpbmcgc2Nsb3NlKCkgYm90aCBpbiB0aGUgY2hpbGQgYW5kIHRoZSBwYXJlbnQgZm9vbHMgdGhlCiAgc29ja2V0IGxlYWsgZGV0ZWN0b3IgaW50byB0aGlua2luZyBpdCdzIGJlZW4gY2xvc2VkIHR3aWNlLgogIENhbGxpbmcgY2xvc2UoKSBpbiB0aGUgY2hpbGQgaW5zdGVhZCBvdmVyY29tZXMgdGhpcyBwcm9ibGVtLiBJdCdzCiAgbm90IGFzIHBvcnRhYmxlIGFzIHRoZSBzY2xvc2UoKSBtYWNybywgYnV0IHRoaXMgY29kZSBpcyBoaWdobHkKICBQT1NJWC1zcGVjaWZpYywgYW55d2F5LgoKWWFuZyBUc2UgKDIgU2VwIDIwMTEpCi0gTWVtb3J5VHJhY2tpbmc6IGZpeCBsb2dnaW5nIG9mIGZyZWUoKSBjYWxscyBkb25lIHdoZXJlIEN1cmxfc2FmZWZyZWUgaXMgY2FsbGVkCiAgCiAgSnVzdCBpbnRlcm5hbCBzdHVmZi4uLgogIAogIEN1cmxfc2FmZWZyZWUgaXMgbm93IGEgbWFjcm8gZGVmaW5lZCBpbiBtZW1kZWJ1Zy5oIGluc3RlYWQgb2YgYSBmdW5jdGlvbgogIHByb3RvdHlwZWQgaW4gdXJsLmggYW5kIGltcGxlbWVudGVkIGluIHVybC5jLCBzbyBpbmNsdXNpb24gb2YgdXJsLmggaXMgbm8KICBsb25nZXIgcmVxdWlyZWQgaW4gb3JkZXIgdG8gc2ltcGx5IHVzZSBDdXJsX3NhZmVmcmVlLgogIAogIFByb3ZpZGUgZGVmaW5pdGlvbiBvZiBtYWNybyBXSElMRV9GQUxTRSBpbiBzZXR1cF9vbmNlLmggaW4gb3JkZXIgdG8gYWxsb3cKICBvdGhlciBtYWNyb3Mgc3VjaCBhcyBERUJVR0YgYW5kIERFQlVHQVNTRVJULCBhbmQgY29kZSB1c2luZyBpdCwgdG8gY29tcGlsZQogIHdpdGhvdXQgJ2NvbmRpdGlvbmFsIGV4cHJlc3Npb24gaXMgY29uc3RhbnQnIHdhcm5pbmdzLgogIAogIFRoZSBXSElMRV9GQUxTRSBzdHVmZiBmaXhlcyAxNTArIE1TVkMgY29tcGlsZXIgd2FybmluZ3MuCgotIHRyYW5zZmVyLmM6IGZpeCBwYXJlbnRoZXNlcy9icmFjZXMgcGxhY2VtZW50IGZvciB2aS9lbWFjcyBkZWxpbWl0ZXIgbWF0Y2hpbmcKCi0gdHJhbnNmZXIuYzogZml4IGxvYWRob3N0cGFpcnMoKSBPT00gaGFuZGxpbmcKCi0gdGVzdCBoYXJuZXNzOiBodHRwcywgZnRwcyBhbmQgc3NoIHNlcnZlcnMgYWxsb3dlZCBzdGFydCB1cCB0aW1lIGluY3JlYXNlZCAzMyUKCi0gaG9zdGlwLmM6IHJldHVybiBpbW1lZGlhdGVseSBmcm9tIEN1cmxfcmVzb2x2X3RpbWVvdXQoKSB1cG9uIGV4cGlyZWQgdGltZW91dC4KICAKICBFbnN1cmUgZXhpc3RpbmcgbG9naWMgaW4gQ3VybF9yZXNvbHZfdGltZW91dCgpIGlzIG5vdCBzdWJ2ZXJ0ZWQgdXBvbiBnZXR0aW5nIGEKICBuZWdhdGl2ZSB0aW1lb3V0IGZyb20gcmVzb2x2ZV9zZXJ2ZXIoKS4gVGhlIHRpbWVvdXQgaW4gcmVzb2x2ZV9zZXJ2ZXIoKSBjb3VsZAogIGJlIGNoZWNrZWQgdG8gYXZvaWQgY2FsbGluZyBDdXJsX3Jlc29sdl90aW1lb3V0KCkgd2l0aCBhbiBleHBpcmVkIHRpbWVvdXQsIGJ1dAogIGZpeGluZyB0aGlzIGluIHRoaXMgd2F5IGFsbG93cyBleGlzdGluZyBsb2dpYyBpbiByZXNvbHZlX3NlcnZlcigpIHRvIGJlIGtlcHQKICB1bmNoYW5nZWQuCgotIGZ0cC5jOiBmaXggc29tZSBsZWFrcyB0b3J0dXJlIHRlc3RzIGRldGVjdGVkIDIwMTEtMDgtMzAgLSBmb2xsb3ctdXAKICAKICBmb2xsb3ctdXAgZm9yIGNvbW1pdCBkMjA0MDhlOAoKLSB0ZXN0IGhhcm5lc3M6IGZpeCBkZXRlY3Rpb24gb2YgdGVzdCBoYXJuZXNzIGNsaWVudCBrbm93bmhvc3RzIGZpbGUKICAKICBSZWdlbmVyYXRlIGN1cmwncyB0ZXN0cyBjbGllbnQga25vd25ob3N0cyBmaWxlIGFsc28gd2hlbiwgc29tZWhvdywKICB0aGlzIGZpbGUgaXMgZW1wdHkuCgotIHRlc3QgaGFybmVzczogZml4IGRldGVjdGlvbiBvZiB0ZXN0IGhhcm5lc3MgaG9zdCBhbmQgY2xpZW50IGtleSBmaWxlcwogIAogIFJlZ2VuZXJhdGUgY3VybCdzIHRlc3RzIGhvc3QgYW5kIGNsaWVudCBrZXkgZmlsZXMgYWxzbyB3aGVuLCBzb21laG93LAogIGFueSBvZiB0aGVzZSBmaWxlcyBhcmUgZW1wdHkuCgotIHNzaC5jOiBmaXggcmVhbGxvYygpIE9PTSBoYW5kbGluZwoKLSBmdHAuYzogZml4IHNvbWUgbGVha3MgdG9ydHVyZSB0ZXN0cyBkZXRlY3RlZCAyMDExLTA4LTMwIC0gZm9sbG93LXVwCiAgCiAgZm9sbG93LXVwIGZvciBjb21taXQgYzA2ZGUyMDAKCi0gZml4IHNvbWUgbGVha3MgdG9ydHVyZSB0ZXN0cyBkZXRlY3RlZCAyMDExLTA4LTMwCgotIGZpeCBzb21lIGxlYWtzIHRvcnR1cmUgdGVzdHMgZGV0ZWN0ZWQgMjAxMS0wOC0zMAoKRGFuaWVsIFN0ZW5iZXJnICgyOSBBdWcgMjAxMSkKLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCAzNDQ1ZmEyZTNmCgpLYW1pbCBEdWRrYSAoMjkgQXVnIDIwMTEpCi0gdGVzdHM6IGJyZWFrIGJ1c3kgbG9vcHMgaW4gdGVzdHMgNTAyLCA1NTUsIGFuZCA1NzMKCllhbmcgVHNlICgyOSBBdWcgMjAxMSkKLSBwaW5ncG9uZy5jOiBmaXggQ3VybF9wcF92c2VuZGYoKSBhcmJpdHJhcnkgcmVzdHJpY3Rpb25zIG9uIGNvbW1hbmQgbGVuZ3RoCiAgCiAgVGhpcyByZW1vdmVzIGNvbW1hbmQgbGVuZ3RoIHJlc3RyaWN0aW9ucyBvbiBjYWxsaW5nIGZ1bmN0aW9ucy4KCi0gTlRMTTogaGVhZGVyIGluY2x1c2lvbiBjbGVhbnVwIGZvbGxvdy11cAoKLSBOVExNOiBoZWFkZXIgaW5jbHVzaW9uIGNsZWFudXAKCi0gTlRMTTogRU5EIG9mIHJlZmFjdG9yaW5nL3NwbGl0dGluZy9tb3ZpbmcKICAKICBGaXJzdDoKICAKICBGaWxlIGN1cmxfbnRsbS5oIHJlbmFtZWQgY3VybF9udGxtX21zZ3MuaAogIEZpbGUgY3VybF9udGxtLmMgcmVuYW1lZCBjdXJsX250bG1fbXNncy5jCiAgCiAgQWZ0ZXJ3YXJkczoKICAKICBGaWxlIGh0dHBfbnRsbS5jIHJlbmFtZWQgY3VybF9udGxtLmMKICBGaWxlIGh0dHBfbnRsbS5oIHJlbmFtZWQgY3VybF9udGxtLmgKCi0gTlRMTTogbW92ZSBOVExNIGNvcmUgc3BlY2lmaWNzIGludG8gY3VybF9udGxtX2NvcmUuW2NoXQoKLSBOVExNX1dCOiBtb3ZlIE5UTE1fV0Igc3BlY2lmaWNzIGludG8gY3VybF9udGxtX3diLltjaF0KCi0gTlRMTV9XQjogZmluYWwgY29uZ3J1ZW5jeSBuYW1pbmcgYWRqdXN0bWVudHMKICAKICBDb25maWd1cmUgc2NyaXB0IG9wdGlvbiAtLWVuYWJsZS13Yi1udGxtLWF1dGggcmVuYW1lZCB0byAtLWVuYWJsZS1udGxtLXdiCiAgQ29uZmlndXJlIHNjcmlwdCBvcHRpb24gLS1kaXNhYmxlLXdiLW50bG0tYXV0aCByZW5hbWVkIHRvIC0tZGlzYWJsZS1udGxtLXdiCiAgCiAgUHJlcHJvY2Vzc29yIHN5bWJvbCBXSU5CSU5EX05UTE1fQVVUSF9FTkFCTEVEIHJlbmFtZWQgdG8gTlRMTV9XQl9FTkFCTEVECiAgUHJlcHJvY2Vzc29yIHN5bWJvbCBXSU5CSU5EX05UTE1fQVVUSF9GSUxFIHJlbmFtZWQgdG8gTlRMTV9XQl9GSUxFCiAgCiAgVGVzdCBoYXJuZXNzIGVudiB2YXIgQ1VSTF9OVExNX0FVVEggcmVuYW1lZCB0byBDVVJMX05UTE1fV0JfRklMRQogIAogIFN0YXRpYyBmdW5jdGlvbiB3Yl9udGxtX2Nsb3NlIHJlbmFtZWQgdG8gbnRsbV93Yl9jbGVhbnVwCiAgU3RhdGljIGZ1bmN0aW9uIHdiX250bG1faW5pdGlhdGUgcmVuYW1lZCB0byBudGxtX3diX2luaXQKICBTdGF0aWMgZnVuY3Rpb24gd2JfbnRsbV9yZXNwb25zZSByZW5hbWVkIHRvIG50bG1fd2JfcmVzcG9uc2UKCi0gTlRMTSBzaW5nbGUtc2lnbiBvbiBhZGp1c3RtZW50cyAoWEkpCiAgCiAgRmVhdHVyZSBzdHJpbmcgbGl0ZXJhbCBOVExNX1NTTyByZW5hbWVkIHRvIE5UTE1fV0IuCiAgUHJlcHJvY2Vzc29yIHN5bWJvbCBVU0VfTlRMTV9TU08gcmVuYW1lZCB0byBXSU5CSU5EX05UTE1fQVVUSF9FTkFCTEVELgogIGN1cmwncyAnbG9uZycgb3B0aW9uICdudGxtLXNzbycgcmVuYW1lZCB0byAnbnRsbS13YicuCiAgRml4IHNvbWUgY29tbWVudHMgdG8gbWFrZSBjbGVhciB0aGF0IHRoaXMgaXMgYWN0dWFsbHkgYSBOVExNIGRlbGVnYXRpb24uCgpEYW5pZWwgU3RlbmJlcmcgKDI2IEF1ZyAyMDExKQotIC0tY29va2llLWphcjogYWN0aXZhdGVzIHRoZSBjb29raWUgZW5naW5lCgotIEN1cmxfcmVhZF9wbGFpbjogaW5kZW50IGNvZGUKCllhbmcgVHNlICgyNiBBdWcgMjAxMSkKLSBOVExNIHNpbmdsZS1zaWduIG9uIGFkanVzdG1lbnRzIChYKQogIAogIEZ1bmN0aW9ucyByZW5hbWVkOgogIAogIEN1cmxfb3V0cHV0X250bG1fc3NvIC0+IEN1cmxfb3V0cHV0X250bG1fd2IKICBzc29fbnRsbV9jbG9zZSAtPiB3Yl9udGxtX2Nsb3NlCiAgc3NvX250bG1fcmVzcG9uc2UgLT4gd2JfbnRsbV9yZXNwb25zZQogIHNzb19udGxtX2luaXRpYXRlIC0+IHdiX250bG1faW5pdGlhdGUKICAKICBQcmVwcm9jZXNzb3Igc3ltYm9scyByZW5hbWVkOgogIAogIENVUkxBVVRIX05UTE1fU1NPIC0+IENVUkxBVVRIX05UTE1fV0IKICBDVVJMX1ZFUlNJT05fTlRMTV9TU08gLT4gQ1VSTF9WRVJTSU9OX05UTE1fV0IKCkRhbmllbCBTdGVuYmVyZyAoMjUgQXVnIDIwMTEpCi0gVE9ETzogcHJvZ3Jlc3MgY2FsbGJhY2sgd2l0aG91dCBkb3VibGVzCgpZYW5nIFRzZSAoMjUgQXVnIDIwMTEpCi0gW1N0ZXZlIEhvbG1lIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIGh0dHAgTlRMTTogcmVmYWN0b3JpbmcgZm9sbG93dXAKICAKICBPdXRwdXQgb2YgQ3VybF9udGxtX2NyZWF0ZV90eXBlMV9tZXNzYWdlKCkgYW5kIEN1cmxfbnRsbV9jcmVhdGVfdHlwZTNfbWVzc2FnZSgpCiAgZnVuY3Rpb25zIGlzIG5vdyBhbHJlYWR5IGJhc2U2NCBlbmNvZGVkLgoKS2FtaWwgRHVka2EgKDI0IEF1ZyAyMDExKQotIGRvY3M6IHRoZSBuZXh0IHJlbGVhc2UgaXMgZ29pbmcgdG8gYmUgNy4yMi4wCgpZYW5nIFRzZSAoMjQgQXVnIDIwMTEpCi0gaW5jbHVkZSBsaW1pdHMuaCBmb3IgSU5UX01BWAoKLSBhZGQgbWlzc2luZyBzZW1pY29sb25zCgpEYW5pZWwgU3RlbmJlcmcgKDI0IEF1ZyAyMDExKQotIGFkZCBtaXNzaW5nIHNlbWljb2xvbnMKCi0gc2FmZWZyZWUgdXNlOiBmaXggY29tcGlsZXIgd2FybmluZwogIAogIGluY2x1ZGUgdGhlIHByb3RvdHlwZSBoZWFkZXIKCllhbmcgVHNlICgyNCBBdWcgMjAxMSkKLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgU01UUCBhdXRoZW50aWNhdGlvbjogZml4IG9yZGVyaW5nIG9mIHByZWZlcnJlZCBhdXRoZW50aWNhdGlvbiBtZXRob2QKICAKICBGaXhlZCB0aGUgb3JkZXIgb2YgdGhlIHByZWZlcnJlZCBTTVRQIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCB0bzoKICBBVVRIIENSQU0tTUQ1LCBBVVRIIExPR0lOIHRoZW4gQVVUSCBQTEFJTi4KICAKICBBVVRIIFBMQUlOIHNob3VsZCBiZSB0aGUgbGFzdCBhcyBpdCBzbGlnaHRseSBtb3JlIGluc2VjdXJlIHRoYW4gQVVUSCBMT0dJTgogIGFzIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgYXJlIHNlbnQgdG9nZXRoZXIgLSB0aGVyZSBpcyBubyBoYW5kc2hha2luZwogIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgc2VydmVyIGxpa2UgdGhlcmUgaXMgd2l0aCBBVVRIIExPR0lOLgoKLSBiYXNlNjQ6IGZpeCBDdXJsX2Jhc2U2NF9lbmNvZGUgYW5kIEN1cmxfYmFzZTY0X2RlY29kZSBpbnRlcmZhY2VzCiAgCiAgUHJldmlvdXMgaW50ZXJmYWNlcyBmb3IgdGhlc2UgbGliY3VybCBpbnRlcm5hbCBmdW5jdGlvbnMgZGlkIG5vdCBhbGxvdyB0byB0ZWxsCiAgYXBhcnQgYSBsZWdpdGltYXRlIHplcm8gc2l6ZSByZXN1bHQgZnJvbSBhbiBlcnJvciBjb25kaXRpb24uIFRoZXNlIGZ1bmN0aW9ucwogIG5vdyByZXR1cm4gYSBDVVJMY29kZSBpbmRpY2F0aW5nIGZ1bmN0aW9uIHN1Y2Nlc3Mgb3Igb3RoZXJ3aXNlIHNwZWNpZmljIGVycm9yLgogIE91dHB1dCBzaXplIGlzIHJldHVybmVkIHVzaW5nIGEgcG9pbnRlciBhcmd1bWVudC4KICAKICBBbGwgdXNhZ2Ugb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucywgYW5kIG90aGVycyBjbG9zZWx5IHJlbGF0ZWQsIGhhcyBiZWVuIGFkYXB0ZWQKICB0byB0aGUgbmV3IGludGVyZmFjZXMuIFJlbGF0aXZlIGVycm9yIGFuZCBPT00gaGFuZGxpbmcgYWRhcHRlZCBvciBhZGRlZCB3aGVyZQogIG1pc3NpbmcuIFVuaXQgdGVzdCAxMzAyIGFsc28gYWRhcHRlZC4KCkRhbmllbCBTdGVuYmVyZyAoMjMgQXVnIDIwMTEpCi0gcmVzb2x2ZS5jOiBuZXcgZXhhbXBsZSBzaG93aW5nIG9mZiBDVVJMT1BUX1JFU09MVkUKCi0gZXh0ZXJuYWxzb2NrZXQuYzogbmV3IGV4YW1wbGUKCllhbmcgVHNlICgyMiBBdWcgMjAxMSkKLSBbU3RldmUgSG9sbWUgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgaHR0cCBOVExNOiByZW1haW5pbmcgYml0cyBmcm9tIDAwMDEtTW92ZWQtbnRsbS1bLi4uXS1jdXJsX250bG0tbW9kXzMucGF0Y2gKICAKICAqIEFkZGVkIGZ1bmN0aW9uIGNvbW1lbnRzOgogICAgICAtIEN1cmxfbnRsbV9kZWNvZGVfdHlwZTJfbWVzc2FnZQogICAgICAtIEN1cmxfbnRsbV9jcmVhdGVfdHlwZTFfbWVzc2FnZQogICAgICAtIEN1cmxfbnRsbV9jcmVhdGVfdHlwZTNfbWVzc2FnZQogIAogICogTW9kaWZpY2F0aW9uIG9mIG50bG0gcHJvY2Vzc2luZyBzdGF0ZSB0byBOVExNU1RBVEVfVFlQRTIgaXMgbm93IGRvbmUKICAgIG9ubHkgd2hlbiBDdXJsX250bG1fZGVjb2RlX3R5cGUyX21lc3NhZ2UoKSBoYXMgZnVsbHkgc3VjY2VlZGVkLgoKLSBydW50ZXN0cy5wbDogb3B0aW9uIC1ndyBmb3Igc2luZ2xlIHRlc3Qgd2luZG93ZWQgZGVidWdnaW5nICh3aGVyZSBwb3NzaWJsZSkKCi0gemxpYjogZW5zdXJlIHVzZXIgcHJvdmlkZWQgbWVtb3J5IGZ1bmN0aW9ucyBhcmUgdXNlZCBieSB6bGliLCB3aGVuIGdpdmVuCiAgCiAgQXMgYSBib251cywgdGhpcyBsZXRzIG91ciBNZW1vcnlUcmFja2luZyBzdWJzeXN0ZW0gdHJhY2sgemxpYiBvcGVyYXRpb25zLgogIEFuZCBhbHNvIGZpeGVzIGEgc2hvcnRjdXQgc29tZSB6bGliIDEuMi54IHZlcnNpb25zIHRvb2sgdXNpbmcgbWFsbG9jKCkKICBpbnN0ZWFkIG9mIGNhbGxvYygpLCB3aGljaCB3b3VsZCB0cmlnZ2VyIG1lbW9yeSBkZWJ1Z2dlcnMgd2FybmluZ3Mgb24KICBtZW1vcnkgYmVpbmcgdXNlZCB3aXRob3V0IGhhdmluZyBiZWVuIGluaXRpYWxpemVkLgoKRGFuaWVsIFN0ZW5iZXJnICgyMSBBdWcgMjAxMSkKLSBtYWluOiBmaXggc2VnZmF1bHQKICAKICBGb2xsb3ctdXAgdG8gY29tbWl0IDVlYjIzOTZjZCBhcyB0aGF0IHdhc24ndCBjb21wbGV0ZS4KICAKICBBdCB0aW1lcyBIRUFERVJGVU5DVElPTitIRUFERVJEQVRBIHdhcyBzZXQgb25seSB0byBoYXZlIG9ubHkgSEVBREVSREFUQQogIHNldCBpbiB0aGUgc3Vic2VxdWVudCBsb29wIHdoaWNoIGNvdWxkIGNhdXNlIGEgTlVMTCB0byBnZXQgc2VudCBhcwogIHVzZXJkYXRhIHRvICdoZWFkZXJfY2FsbGJhY2snIHdoaWNoIHdhc24ndCBtYWRlIHRvIGhhbmRsZSB0aGF0LgogIAogIE5vdyBIRUFERVJGVU5DVElPTiBpcyBleHBsaWNpdGx5IHNldCB0byBOVUxMIGlmIGl0IGlzbid0IHNldCB0byB0aGUKICBjYWxsYmFjay4KCllhbmcgVHNlICgyMSBBdWcgMjAxMSkKLSBNZW1vcnlUcmFja2luZzogYWRqdXN0IGluaXRpYWxpemF0aW9uIGNhbGxpbmcgLSBmb2xsb3d1cAogIAogIEZpeCBtYWNybyBkZWZpbml0aW9uCgotIE1lbW9yeVRyYWNraW5nOiBhZGp1c3QgaW5pdGlhbGl6YXRpb24gY2FsbGluZwogIAogIENhbGxpbmcgb2YgY3VybF9tZW1kZWJ1ZygpIHdhcyBzdGlsbCBkb25lIHdpdGggYSBwZW5kaW5nIGZyZWUoKQoKRGFuaWVsIFN0ZW5iZXJnICgxOSBBdWcgMjAxMSkKLSB0Y3Bjb25uZWN0OiBmb2xsb3ctdXAgY29tbWl0IGFmdGVyIGI5OThkOTViCiAgCiAgQXMgSSBtb2RpZmllZCBjb25uLT5iaXRzLnRjcGNvbm5lY3QgdG8gYmVjb21lIGFuIGFycmF5IHRoYXQgaG9sZHMgb25lCiAgYm9vbCBmb3IgZWFjaCBwb3RlbnRpYWwgY29ubmVjdGlvbiBhbGwgdXNlcyBvZiB0aGF0IHN0cnVjdCBmaWVsZCBtdXN0CiAgaW5kZXggaXQgY29ycmVjdGx5LgoKWWFuZyBUc2UgKDE5IEF1ZyAyMDExKQotIHNzaC5jOiBhZGQgUEFUSF9NQVggZGVmaW5pdGlvbiBmb3IgV0lOMzIKCkRhbmllbCBTdGVuYmVyZyAoMTkgQXVnIDIwMTEpCi0gY29ubmVjdDogc2V0IFRJTUVSX0NPTk5FQ1QKICAKICBXaGVuIGNvbm5lY3RpbmcsIG1ha2Ugc3VyZSBUSU1FUl9DT05ORUNUIGlzIHNldC4KCi0gdGVzdDU3MzogZml4IHRoZSBrZXl3b3JkcwoKLSBGVFA6IGZpeCBwcm94eSBjb25uZWN0IHJhY2UgY29uZGl0aW9uCiAgCiAgV2hlbiB1c2luZyB0aGUgbXVsdGkgaW50ZXJmYWNlLCBhIFNPQ0tTIHByb3h5LCBhbmQgYSBjb25uZWN0aW9uIHRoYXQKICB3b3VsZG4ndCBpbW1lZGlhdGVseSBjb25zaWRlciBpdHNlbGYgY29ubmVjdGVkICh3aGljaCBteSBMaW51eCB0ZXN0cyBkbwogIGJ5IGRlZmF1bHQpLCBsaWJjdXJsIHdvdWxkIGJlIHRyaWNrZWQgaW50byBkb2luZyBfdHdvXyBjb25uZWN0cyB0byB0aGUKICBTT0NLUyBwcm94eSB3aGVuIGl0IHNldHVwIHRoZSBkYXRhIGNvbm5lY3Rpb24gYW5kIHRoZW4gb2YgY291cnNlIHRoZQogIHNlY29uZCBhdHRlbXB0IHdvdWxkIGZhaWwgbWlzZXJhYmx5IGFuZCBjYXVzZSBlcnJvci4KICAKICBUaGlzIHByb2JsZW0gaXMgYSByZWdyZXNzaW9uIHRoYXQgd2FzIGludHJvZHVjZWQgYnkgY29tbWl0CiAgNGE0MmU1Y2RhYTM0NDc1NSB0aGF0IHdhcyBpbnRyb2R1Y2VkIGluIHRoZSA3LjIxLjcgcmVsZWFzZS4KICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0wOC8wMTk5Lmh0bWwKICBSZXBvcnRlZCBieTogRmFiaWFuIEtlaWwKCi0gQ3VybF9TT0NLUzQ6IG1pbm9yIGNvZGUgY29tcHJlc3Npb24KCllhbmcgVHNlICgxOCBBdWcgMjAxMSkKLSB6bGliOiBlbmZvcmNlIGZ1bGwgaW5pdGlhbGl6YXRpb24gb2Ygb3VyIGRhdGEgc3BhY2Ugel9zdHJlYW0gc3RydWN0cwoKRGFuaWVsIFN0ZW5iZXJnICgxNyBBdWcgMjAxMSkKLSBWQyBtYWtlZmlsZXM6IGZpeGVkIHZhcmlhYmxlIG5hbWUgbWlzdGFrZQoKWWFuZyBUc2UgKDE3IEF1ZyAyMDExKQotIE1lbW9yeVRyYWNraW5nOiBhZGp1c3QgY3VybF9kb21hbGxvYygpIGFuZCBjdXJsX2RvZnJlZSgpIG1lbW9yeSBmaWxsaW5nCiAgCiAgVW50aWwgMjAxMS0wOC0xNyBsaWJjdXJsJ3MgTWVtb3J5IFRyYWNraW5nIGZlYXR1cmUgYWxzbyBwZXJmb3JtZWQKICBhdXRvbWF0aWMgbWFsbG9jIGFuZCBmcmVlIGZpbGxpbmcgb3BlcmF0aW9ucyB1c2luZyAweEE1IGFuZCAweDEzCiAgdmFsdWVzLiBPdXIgb3duIHByZWluaXRpYWxpemF0aW9uIG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBtZW1vcnkKICBtaWdodCBiZSB1c2VmdWwgd2hlbiBub3QgdXNpbmcgdGhpcmQgcGFydHkgbWVtb3J5IGRlYnVnZ2VycywgYnV0CiAgb24gdGhlIG90aGVyIGhhbmQgdGhpcyB3b3VsZCBmb29sIG1lbW9yeSBkZWJ1Z2dlcnMgaW50byB0aGlua2luZwogIHRoYXQgYWxsIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBtZW1vcnkgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuCiAgCiAgQXMgYSBkZWZhdWx0IHNldHRpbmcsIGxpYmN1cmwncyBNZW1vcnkgVHJhY2tpbmcgZmVhdHVyZSBubyBsb25nZXIKICBwZXJmb3JtcyBwcmVpbml0aWFsaXphdGlvbiBvZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGl0cwogIG93bi4gSWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLCBhbmQgcmVhbGx5IHdhbnQgdG8gcmV0YWluIG9sZAogIGJlaGF2aW9yLCB5b3UgY2FuIGFjaGlldmUgdGhpcyBjb21waWxpbmcgd2l0aCBwcmVwcm9jZXNzb3Igc3ltYm9scwogIENVUkxfTVRfTUFMTE9DX0ZJTEwgYW5kIENVUkxfTVRfRlJFRV9GSUxMIGRlZmluZWQgd2l0aCBhcHByb3ByaWF0ZQogIHZhbHVlcy4KCi0gTWVtb3J5VHJhY2tpbmc6IG1ha2UgY3VybF9kb2NhbGxvYygpIGNhbGwgY2FsbG9jKCkgYXZvaWRpbmcgb3VyIHplcm8gZmlsbAoKRGFuaWVsIFN0ZW5iZXJnICgxNSBBdWcgMjAxMSkKLSBNU1ZDIG1ha2VmaWxlczogcHJvdmlkZSBTU0ggYnVpbGQgdGFyZ2V0cwogIAogICJyZWxlYXNlLXNzbC1zc2gyLXpsaWIiIGFuZCAiZGVidWctc3NsLXNzaDItemxpYiIgYXJlIHR3byBuZXcgbWFrZWZpbGUKICB0YXJnZXRzIHRoYXQgYnVpbGQgbGliY3VybCB3aXRoIE1TVkMgYW5kIGxpbmsgd2l0aCBsaWJzc2gyCiAgCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zMzg4OTIwCiAgUmVwb3J0ZWQgYnk6ICJrZGVra2VyIgoKLSB0ZXN0NTcyOiBmaXhlZAogIAogIFR3byBwcm9ibGVtcyB3ZXJlIGZpeGVkOgogIAogIEdFVF9QQVJBTUVURVIgcmVzcG9uc2VzIHRoYXQgaGF2ZSBubyBib2R5IG11c3QgYmUgMjA0IHJlc3BvbnNlIG9yCiAgcHJvcGVybHkgc2V0IGxlbmd0aCB0byAwLgogIAogIE9uZSBvZiB0aGUgPGRhdGE+IHNlY3Rpb25zIGhhZCB0aGUgd3JvbmcgY29udGVudC1sZW5ndGggZm9yIGl0cwogIEdFVF9QQVJBTUVURVIgcmVzcG9uc2UuCiAgCiAgRW5hYmxlZCB0ZXN0IDU3MiBhZ2Fpbi4KCi0gQ3VybF9wZ3JzU3RhcnROb3c6IGNsZWFyIGFsbCBmbGFncyBidXQgSElERQogIAogIEFzIGJ1ZyAzMzg1MjU4IHBvaW50ZWQgb3V0IGJ1dCBJIG1pc3NlZCB1cCB0aGUgZml4IGZvci4gVGhpcyBpcyBhbm90aGVyCiAgdGFrZSBhdCBhIGZpeC4KICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTMzOTIxMDEKICBSZXBvcnRlZCBieTogV3UgWW9uZ3poZW5nCgpZYW5nIFRzZSAoMTUgQXVnIDIwMTEpCi0gdW5pdHRlc3RzOiBkaXNhYmxlIHVuaXQgdGVzdHMgZm9yIHNvbWUgYXV0b2J1aWxkIGNvbmZpZ3VyYXRpb25zCiAgCiAgSVJJWCA2LjUuMjQgZ2NjIDMuMyBhdXRvYnVpbGRzIGZhaWwgdW5pdHRlc3RzIGxpYnJhcnkgY29tcGlsYXRpb24gZHVlIHRvIGEKICBwcm9ibGVtIHJlbGF0ZWQgd2l0aCBPcGVuU1NMIGhlYWRlcnMgYW5kIGxpYnJhcnkgdmVyc2lvbnMgbm90IG1hdGNoaW5nLgogIAogIEFsbCBBSVggYXV0b2J1aWxkcyBmYWlscyB1bml0IHRlc3RzIGxpbmtpbmcgYWdhaW5zdCB1bml0dGVzdHMgbGlicmFyeSBkdWUgdG8KICB1bml0dGVzdHMgbGlicmFyeSBiZWluZyBidWlsdCB3aXRoIG5vIHN5bWJvbHMgb3IgbWVtYmVycy4gTGlidG9vbCA/CgpLYW1pbCBEdWRrYSAoMTUgQXVnIDIwMTEpCi0gbnNzOiBzdGFydCB3aXRoIG5vIGRhdGFiYXNlIGlmIHRoZSBzZWxlY3RlZCBkYXRhYmFzZSBpcyBicm9rZW4KICAKICBCdWc6IGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS83Mjg1NjIKCllhbmcgVHNlICgxNSBBdWcgMjAxMSkKLSBodHRwIE5UTE06IHJlaW5zdGF0ZSAibnNzZy5oIiAiY3VybF9zc3BpLmgiIGhlYWRlciBpbmNsdXNpb25zCgotIHRlc3RzOiBkaXNhYmxlICM1NzIKCkRhbmllbCBTdGVuYmVyZyAoMTQgQXVnIDIwMTEpCi0gVE9ETy1SRUxFQVNFOiBzeW5jZWQKICAKICBBZGRlZCBjb21tZW50cyB0byBzb21lIHJlbWFpbmluZyBpc3N1ZXMKCi0gdGVsbmV0OiBhbGxvdyBwcm9ncmFtYXRpYyB1c2Ugb24gV2luZG93cwogIAogIFN1bW1hcnkgb2YgdGhlIGlzc3VlIGNhbiBiZSBmb3VuZCBhdDoKICBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTAtMDQvMDM2Ny5odG1sCiAgCiAgVGhhdCBwYXRjaCBvbmx5IHVwZGF0ZWQgdGhlIHVuaXggc29ja2V0cyBjb2RlIC0gdGhlIHdpbnNvY2sgY29kZSB3YXMgbm90CiAgdXBkYXRlZCBhbmQgbm8gbG9uZ2VyIHdvcmtzIHRoZSBzYW1lIHdhcyBhcyB0aGUgdW5peCBjb2RlLiBUaGlzIGNoYW5nZQogIHVwZGF0ZXMgdGhlIHdpbmRvd3MgY29kZSBhY2NvcmRpbmdseS4KICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTMxNjMxMTgKCi0gVE9ETy1SRUxFQVNFOiBmaXhlZCBpc3N1ZSAjMjkxCiAgCiAgMjkxIC0gYnVnIDMzODM2OTIgIkdFVCBQQVJBTUVURVIgcmVxdWVzdCBhbmQgYm9keSBpbiByZXNwb25zZSIKCllhbmcgVHNlICgxNCBBdWcgMjAxMSkKLSBodHRwIE5UTE06IHJlaW5zdGF0ZSAibWVtZGVidWcuaCIgaGVhZGVyIGluY2x1c2lvbgogIAogIEluY2x1c2lvbiBvZiBoZWFkZXIgIm1lbWRlYnVnLmgiIGluIGh0dHBfbnRsbS5jIGdvdCBsb3N0IGluIGNvbW1pdCA5OGZiMGVmNy4KCkRhbmllbCBTdGVuYmVyZyAoMTQgQXVnIDIwMTEpCi0gUlRTUDogR0VUX1BBUkFNRVRFUiByZXF1ZXN0cyBoYXZlIGEgYm9keQogIAogIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MzM4MzY5MgoKLSBDdXJsX291dHB1dF9udGxtOiByZW1vdmUgdW51c2VkIHZhcmlhYmxlCgpZYW5nIFRzZSAoMTQgQXVnIDIwMTEpCi0gaHR0cCBOVExNOiBhZGQgY3VybF9udGxtLmMgdG8gU3ltYmlhbidzIGxpYmN1cmwubW1wCgotIGh0dHAgTlRMTTogZml4IDggY29tcGlsZXIgd2FybmluZ3MKICAKICBTdHJpY3Qgc3BsaXR0aW5nIG9mIGh0dHBfbnRsbS5bY2hdIG1heSB0cmlnZ2VyIDggY29tcGlsZXIgd2FybmluZ3Mgd2hlbgogIGJ1aWxkaW5nIHdpdGggc29tZSBjb21waWxlcnMgYW5kIHN0cmljdCBjb21waWxlciB3YXJuaW5ncyBlbmFibGVkLCBkZXBlbmRpbmcKICBvbiBvdGhlciBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgc29tZSBjb3VsZCBnZXQgdHJpZ2dlcmVkIG9yIG5vdC4KICAKICBTZXZlbiBhcmUgcmVsYXRlZCB3aXRoICd1bnVzZWQgZnVuY3Rpb24gcGFyYW1ldGVycycgYW5kIGFub3RoZXIgb25lIHdpdGgKICAndmFyIG1heSBiZSB1c2VkIGJlZm9yZSBpdHMgdmFsdWUgaXMgc2V0Jy4KCi0gaHR0cCBOVExNOiBzcGxpdCBodHRwX250bG0uW2NoXSBiZXR3ZWVuIGh0dHBfbnRsbS5bY2hdIGFuZCBjdXJsX250bG0uW2NoXQogIAogIEZvciBtb2R1bGFyaXR5IHB1cnBvc2VzLCBodWdlIGNodW5rcyBvZiBOVExNIGV4aXN0aW5nIGNvZGUgaXMgdHJhbnNmb3JtZWQgaW50bwogIGZ1bmN0aW9ucyB0byBhbGxvdyBmdXR1cmUgaW50ZXJuYWwgY29kZSByZXVzZS4KICAKICBSZXN1bHRpbmcgdGhyZWUgbmV3IGxpYmN1cmwgcHJpdmF0ZSBmdW5jdGlvbnM6CiAgCiAgIC0gQ3VybF9udGxtX2NyZWF0ZV90eXBlMV9tZXNzYWdlKCkKICAgLSBDdXJsX250bG1fY3JlYXRlX3R5cGUzX21lc3NhZ2UoKQogICAtIEN1cmxfbnRsbV9kZWNvZGVfdHlwZTJfbWVzc2FnZSgpCiAgCiAgQ2hhbmdpbmcgc3RhdGljIG50bG1fc3NwaV9jbGVhbnVwKCkgaW50byBub24tc3RhdGljIEN1cmxfbnRsbV9zc3BpX2NsZWFudXAoKQogIAogIFRoaXMgJ3JlZmFjdG9yaW5nJyBoYXMgYmVlbiBwcmVwYXJlZCBieSBwcmV2aW91cyBjb21taXRzIHRvIGFsbG93IHRoYXQgdGhpcwogIHNwZWNpZmljIG9uZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGNoYW5nZSB0byBleGlzdGluZyBjb2RlLiBBbGwgZXhpc3RpbmcKICBnb29kbmVzcyBhbmQgYmFkbmVzcyBwcmV2aW91cyB0byB0aGlzIGNvbW1pdCBzaG91bGQgcmVtYWluIHRoZSBzYW1lIG9uY2UgaXQgaXMKICBhcHBsaWVkLCB0aGUgb25seSBkaWZmZXJlbmNlIHNob3VsZCBiZSB0aGF0IGV4aXN0aW5nIGNvZGUgaXMgbW92ZWQgaW50bwogIGZ1bmN0aW9ucy4KICAKICBHaXZlbiB0aGUgcXVpdGUgYmlnIHBvcnRpb25zIG9mIGNvZGUgYmVpbmcgbW92ZWQgYXJvdW5kLCBhbmQgdGhlIGltcG9ydGFuY2Ugb2YKICBjaGFuZ2UgdHJhY2VhYmlsaXR5LCB0aGlzIGNvbW1pdCBoYXMgYmVlbiBkb25lIGluIHN1Y2ggYSB3YXkgdGhhdCBpdCBpcwogIHBvc3NpYmxlIHRvIHBlcmZvcm0gYSB0aHJlZS13YXkgZGlmZiBmcm9tIGluaXRpYWwgaHR0cF9udGxtLltjaF0gdG8gcmVzdWx0aW5nCiAgaHR0cF9udGxtLltjaF0gYW5kIGN1cmxfbnRsbS5bY2hdIHRvIGFjdHVhbGx5IHZlcmlmeSB0aGF0IG5vIGZ1bmN0aW9uYWwgY2hhbmdlCiAgaXMgaW50cm9kdWNlZCBoZXJlLgogIAogIE5vdGljZSB0aGF0IFN0ZXZlIEhvbG1lIGhhcyBwcm92aWRlZCBzZXZlcmFsIHBhdGNoZXMsIGJ1dCB0aGVzZSBpbmNsdWRlZCB0aGlzCiAgcmVmYWN0b3JpbmcgYWxvbmcgd2l0aCAnZXh0cmEnIGZpeGVzLiBJIHJlYWxseSB3YW50ZWQgdGhpcyAnY2xlYW4nIHJlZmFjdG9yaW5nCiAgZG9uZSBmaXJzdCwgaW4gb3JkZXIgdG8gYWxsb3cgZGlzY3Vzc2lvbiBvciBjb21taXR0aW5nIG9mICdleHRyYScgZml4ZXMgb24gYQogIGNhc2UgYnkgY2FzZSBiYXNpcywgc28sIEkgaGFkIHRvIGJpdGUgdGhlIGJ1bGxldCA7LSkKICAKICBDb21tZW50cywgbGluZSBhZGp1c3RtZW50cywgY29tcGlsZXIgd2FybmluZyBmaXhlcywgd2hhdGV2ZXIsIG1heSBmb2xsb3cKICBhZnRlcndhcmRzLgoKLSBodHRwX25lZ290aWF0ZV9zc3BpLmM6IGZpeCBjb21waWxlciB3YXJuaW5nCiAgCiAgd2FybmluZyBDNDcwNjogYXNzaWdubWVudCB3aXRoaW4gY29uZGl0aW9uYWwgZXhwcmVzc2lvbgoKLSBodHRwIE5UTE06IGNoYW5nZSByZXR1cm4gdHlwZSBvZiBDdXJsX2lucHV0X250bG0oKSB0byBDVVJMY29kZQogIAogIFJlbW92ZSBDVVJMbnRsbSBlbnVtLCBubyBsb25nZXIgcmVxdWlyZWQuCgpEYW5pZWwgU3RlbmJlcmcgKDEzIEF1ZyAyMDExKQotIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIGEzMGVkZTg2OGFiNjQKICAKICBUaHJlZSBtb3JlIGJ1Z3MgZml4ZWQsIHRocmVlIG1vcmUgY29udHJpYnV0b3JzIG1lbnRpb25lZAoKLSBWQzYgbWFrZWZpbGVzOiBhZGRlZCBlbWJlZGRlZCBkb2N1bWVudGF0aW9uCiAgCiAgSnVzdCBhIG5vdGUgYWJvdXQgdGhlIGZhY3QgdGhhdCBhbGwgVkNbNi84LzkvMTBdIG1ha2VmaWxlcyBhcmUgZ2VuZXJhdGVkCiAgZnJvbSB0aGUgVkM2IG9uZSBhcyBzb3VyY2UuCgotIGNtYWtlOiBmaW5kIHdpbnNvY2sgd2hlbiBidWlsZGluZyBvbiB3aW5kb3dzCiAgCiAgV2hlbiBidWlsZGluZyBvbiBXaW5kb3dzLCB3aXRoIENNYWtlIGFuZCBtaW5ndywgY3VybCBmYWlscyB0byBjb21waWxlCiAgYmVjYXVzZSB0aGUgQ01ha2UgYnVpbGQgc3lzdGVtIGlzIG5vdCBwcm9wZXJseSBsb29raW5nIGZvciB0aGUgV2luc29jawogIGxpYnJhcmllcwogIAogIFBhdGNoIGJ5OiBQYXUgR2FyY2lhIGkgUXVpbGVzCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zMzg5MjMxCgotIEN1cmxfcmV0cnlfcmVxdWVzdDogY2hlY2sgcmV0dXJuIGNvZGUhCiAgCiAgQ3VybF9yZWFkcmV3aW5kKCkgd2FzIGNhbGxlZCB3aXRob3V0IGNoZWNraW5nIGl0cyByZXR1cm4gY29kZSwgd2hpY2gKICBjb3VsZCBsZWFkIHRvIGJhZG5lc3MuCiAgCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zMzQ5MjI3CgotIGlnbm9yZSBydHNwCgpZYW5nIFRzZSAoMTMgQXVnIDIwMTEpCi0gaHR0cCBOVExNOiB1cGRhdGUgTlRMTSB0eXBlLSogbWVzc2FnZSBzdHJ1Y3R1cmUgZGVzY3JpcHRpb25zIC0gZm9sbG93dXAKCkRhbmllbCBTdGVuYmVyZyAoMTIgQXVnIDIwMTEpCi0gZG9jczogLS1kZWxlZ2F0aW9uCgotIGFkZGVkIC0tZGVsZWdhdGlvbgogIAogIFVzaW5nIHRoaXMgb3B0aW9uIHdpdGggYW4gYXJndW1lbnQgYmVpbmcgc2V0IHRvIG9uZSBvZgogIG5vbmUvcG9saWN5L2Fsd2F5cyBpbnN0cnVjdHMgbGliY3VybCBob3cgdG8gZGVhbCB3aXRoIEdTUwogIGNyZWRlbnRpYWxzLiBPciByYXRoZXIgaG93IGl0IHRlbGxzIHRoZSBzZXJ2ZXIgdGhhdCBkZWxlZ2F0aW9uIGlzIGZpbmUKICBvciBub3QuCgpZYW5nIFRzZSAoMTIgQXVnIDIwMTEpCi0gaHR0cCBOVExNOiBmaXggaW5jbHVzaW9uIG9mIGN1cmxfbnRsbS5oCgotIGh0dHAgTlRMTTogdXBkYXRlIE5UTE0gbWVzc2FnZSBzdHJ1Y3R1cmUgbm90ZXMKCi0gW1N0ZXZlIEhvbG1lIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIGh0dHAgTlRMTTogbW92ZSBwb3J0aW9ucyBvZiBodHRwX250bG0uaCBpbnRvIG5ldyBjdXJsX250bG0uaAoKLSBodHRwIE5UTE06IG1vcmUgYWRqdXN0bWVudHMgaW4gcHJlcGFyYXRpb24gb2YgY29kZSByZWZhY3RvcmluZwogIAogIFVzZSBwcmVwcm9jZXNzb3Igc3ltYm9sIE5UTE1fQlVGU0laRSB0byBkZWZpbmUgcHJpdmF0ZSBOVExNIGJ1ZmZlciBmaXhlZCBzaXplLgogIAogIFVzZSBhIFNlc3Npb25IYW5kbGUgJ2RhdGEnIHBvaW50ZXIgdmFyaWFibGUgdG8gZWFzZSByZWZhY3RvcmluZy4KICAKICBVcGRhdGUgTlRMTSB0eXBlLSogbWVzc2FnZSBzdHJ1Y3R1cmUgZGVzY3JpcHRpb25zLgogIAogIEZpeCBzb21lIG1vcmUgc3BhY2luZyBhbmQgdHlwb3MgKFN0ZXZlIEhvbG1lKS4KCkRhbmllbCBTdGVuYmVyZyAoMTEgQXVnIDIwMTEpCi0gY3VybF9lYXN5X2NsZWFudXA6IGNsYXJpZnkgdGhlIGNhbGxiYWNrIHNpdHVhdGlvbgoKWWFuZyBUc2UgKDExIEF1ZyAyMDExKQotIGh0dHAgTlRMTTogZml4IGNvbXBpbGVyIHdhcm5pbmcKCi0gW1N0ZXZlIEhvbG1lIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIGh0dHAgTlRMTTogVGlkaWVkIHVwIG1vcmUgaW5jb25zaXN0ZW50IHNwYWNpbmcuCiAgCiAgTW92ZWQgTlRMTVNTUF9TSUdOQVRVUkUsIEhPU1ROQU1FX01BWCwgU0hPUlRQQUlSIGFuZCBMT05HUVVBUlRFVCBkZWZpbml0aW9ucyBpbiByZWFkeSBmb3IgbW92ZSB0byBjdXJsX250bG0uYy4KICAKICBVc2VkIHNlcGFyYXRlIHZhcmlhYmxlcyBmb3IgV2luZG93cyBTU1BJIGFuZCBuYXRpdmUgY29kZSB0byBlYXNlIG1vdmluZyBvZiBjb2RlIHRvIGN1cmxfbnRsbS5jLgogIAogIEZpeGVkIHR5cG9ncmFwaGljYWwgZXJyb3Mgd2hlcmUgU1BQSSBzaG91bGQgYmUgU1NQSS4KICAKICBGaXhlZCBjb21waWxhdGlvbiB3YXJuaW5ncyBvbiA2NC1iaXQgYnVpbGRzIHdoZW4gY2FsbGluZyBXaW5kb3dzIFNTUEkgZnVuY3Rpb25zLgoKRGFuaWVsIFN0ZW5iZXJnICgxMCBBdWcgMjAxMSkKLSBydHNwLmM6IGNvbnZlcnRlZCB0byBDCiAgCiAgVHJpbW1lZCB0aGUgbmV3bGluZXMgdG8gYmUgTEYtb25seS4gQ29udmVydGVkIHRoZSBzb3VyY2UgdG8gcGxhaW4gQywgdG8KICB1c2UgY3VybCBzdHlsZSBpbmRlbnRzLCB0byBjb21waWxlIHdhcm5pbmctZnJlZSB3aXRoIHBpY2t5IG9wdGlvbnMgYW5kCiAgZml4ZWQgdGhlIG1pbm9yIGZwcmludGYoKSBidWcgb24gbGluZSAyNDUuIEFkZGVkIHRvIG1ha2VmaWxlLgoKLSBbSmltIEhvbGxpbmdlciBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBydHNwLmM6IG5ldyBleGFtcGxlCiAgCiAgQ29kZSBmcm9tCiAgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3J0c3ByZXF1ZXN0L3NvdXJjZS9icm93c2UvdHJ1bmsvcnRzcHJlcXVlc3QuY3BwCgotIFRPRE86IHJlbW92ZSBjdXJsX2Zvcm1wb3N0IGluIGEgZnV0dXJlIHZlcnNpb24KICAKICAxNS44IHJlbW92ZSAnY3VybF9odHRwcG9zdCcgZnJvbSBwdWJsaWMKCllhbmcgVHNlICg5IEF1ZyAyMDExKQotIGh0dHAgTlRMTTogRnVydGhlciB0aWRpbmcgdXAgdG8gbGliY3VybCBzdGFuZGFyZHMKCi0gW1N0ZXZlIEhvbG1lIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIGh0dHAgTlRMTTogVGlkaWVkIHVwIGh0dHBfbnRsbSBwcmlvciB0byBzcGxpdHRpbmcgdGhlIG50bG0gc3BlY2lmaWMgY29kZQoKRGFuaWVsIFN0ZW5iZXJnICg5IEF1ZyAyMDExKQotIFRPRE8tUkVMRUFTRTogaXNzdWUgIzI4OSBpcyBmaXhlZAogIAogIDI4OSAtIGJ1ZyAzMzQ5MjI3ICJzZWN1cmUgYXR0cmlidXRlIGluIGNvb2tpZSBkb2VzIG5vdCB3b3JrIHdpdGggZXF1YWxzIHNpZ24iCgotIGNvb2tpZSBwYXJzZXI6IGhhbmRsZSAnc2VjdXJlPScKICAKICBUaGVyZSBhcmUgdHdvIGtleXdvcmRzIGluIGNvb2tpZSBoZWFkZXJzIHRoYXQgZG9uJ3QgZm9sbG93IHRoZSByZWd1bGFyCiAgbmFtZT12YWx1ZSBzdHlsZTogc2VjdXJlIGFuZCBodHRwb25seS4gU3RpbGwgd2UgbXVzdCBzdXBwb3J0IHRoYXQgdGhleQogIGFyZSB3cml0dGVuIGxpa2UgJ3NlY3VyZT0nIGFuZCB0aGVuIHRyZWF0IHRoZW0gYXMgaWYgdGhleSB3ZXJlIHdyaXR0ZW4KICAnc2VjdXJlJy4gVGVzdCBjYXNlIDMxIHdhcyBtdWNoIGV4dGVuZGVkIGJ5IFJvYiBXYXJkIHRvIHRlc3QgdGhpcy4KICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTMzNDkyMjcKICBSZXBvcnRlZCBieTogImdub21iYXQiCgotIGN1cmwuaDogbWFyayBkZXByZWNhdGVkIENVUkxPUFRfIG9wdGlvbnMgb24gc2FtZSBsaW5lCiAgCiAgVGhpcyBpcyB0byBhaWQgZWFzaWVyIG1hY2hpbmUgcGFyc2luZyBhbmQgdG8gbWFrZSBzdXJlIG5vYm9keSB3aG8gcmVhZHMKICB0aGVzZSBoZWFkZXIgbGluZXMgY2FuIG1pc3MgdGhlIGluZm8uCgotIFJFTEVBU0UtTk9URVM6IHJlY291bnRlZCBhbmQgdXBkYXRlZCBzb21lIG51bWJlcnMKCi0gcHJveHkgcHJvdG9jb2wgZG9jczogcmVwaHJhc2VkIGFuZCB1cGRhdGVkCgotIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIDQ1ZDg4M2Q4OGRmNwogIAogIE1lbnRpb24gNSBidWdpeGVzIGFuZCAxIGNoYW5nZSBtb3JlCgotIENVUkxGT1JNX0JVRkZFUjogaW5zZXJ0IGZpbGVuYW1lIGFzIGRvY3VtZW50ZWQKICAKICBBIHJlZ3Jlc3Npb24gd2hlcmUgQ1VSTEZPUk1fQlVGRkVSIHN0b3BwZWQgdG8gcHJvcGVybHkgaW5zZXJ0IHRoZSBmaWxlCiAgbmFtZSBwYXJ0IGluIHRoZSBmb3JtcGFydC4gQnVnIGludHJvZHVjZWQgaW4gY29tbWl0IGY4NTFmNzY4NTc4ZGMwOTYuCiAgCiAgQWRkZWQgQ1VSTEZPUk1fQlVGRkVSIHVzZSB0byB0ZXN0IDU1NCB0byB2ZXJpZnkgdGhpcy4KICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0wNy8wMTc2Lmh0bWwKICBSZXBvcnRlZCBieTogSGVucnkgTHVkZW1hbm4KCllhbmcgVHNlICg4IEF1ZyAyMDExKQotIGN1cmwtY29tcGlsZXJzLm00OiBzZXJpYWwgbnVtYmVyIGJ1bXAKCi0gY3VybC1jb21waWxlcnMubTQ6IENVUkxfQ09OVkVSVF9JTkNMVURFX1RPX0lTWVNURU0gYWRqdXN0bWVudHM6CiAgCiAgQWRkIENVUkxfQ0hFQ0tfQ09NUElMRVIgYXMgYSByZXF1aXJlbWVudC4KICAKICBFbnN1cmUgbWFjcm8gZG9lcyBub3RoaW5nIHVubGVzcyBHTlVfQyBvciBDTEFORyBjb21waWxlciBpcyB1c2VkLgogIAogIFRoaXMgc2hvdWxkIGFsbG93IHVzYWdlIG9mIHRoaXMgbWFjcm8gaW4gdW5mb3Jlc2VlbiBwbGFjZW1lbnRzLgoKRGFuaWVsIFN0ZW5iZXJnICg4IEF1ZyAyMDExKQotIFNPQ0tTOiBmaXggdGhlIGNvbm5lY3QgdGltZW91dAogIAogIFRoZSBjb25uZWN0IHRpbWVvdXQgbG9naWMgd2hlbiB1c2luZyBTT0NLUyB3YXMgZG9uZSB3cm9uZwogIAogIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTA3LzAxNzcuaHRtbAogIFJlcG9ydGVkIGJ5OiAiU3Bvb24gTWFuIgoKLSBmdHBfZG9pbmc6IGJhaWwgb3V0IG9uIGVycm9yIHByb3Blcmx5CiAgCiAgV2hlbiBhIGZhaWx1cmUgaGFzIGJlZW4gZGV0ZWN0ZWQgd2UgbXVzdCBhYm9ydCBpbW1kaWF0ZWx5LgogIAogIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTA3LzAxNzcuaHRtbAogIFJlcG9ydGVkIGJ5OiAiU3Bvb24gTWFuIgoKLSBzLzcuMjEuOC83LjIyLjAKCi0gdmVyc2lvbiBidW1wOiBuZXh0IHJlbGVhc2UgaXMgNy4yMi4wCgotIFZFUlNJT05TOiBjbGFyaWZ5IG91ciB2ZXJzaW9uaW5nIGNvbmNlcHQKICAKICBEcm9wIHRoZSBwcmUtcmVsZWFzZSBwYXJ0IGZyb20gdGhpcyB0ZXh0IGFzIHdlIGRvbid0IHVzZSB0aGF0IGluCiAgcHJhY3Rpc2Ugc2luY2UgbWFueSB5ZWFycy4KICAKICBVcGRhdGUgdGhlIHBocmFzaW5nIHRvIHJlZmxlY3Qgb3VyIG1vcmUgc3RyaWN0IGludGVycHJldGF0aW9uOgogIGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0wOC8wMDY0Lmh0bWwKCi0gW0NyaXN0aWFuIFJvZHLDrWd1ZXogYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgT3BlblNTTDogVXNlIFNTTF9NT0RFX1JFTEVBU0VfQlVGRkVSUyBpZiBhdmFpbGFibGUsIHJlZHVjZXMgbWVtb3J5IHVzZQogIAogIFNlZSBhbHNvIDoKICBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL2RvY3Mvc3NsL1NTTF9DVFhfc2V0X21vZGUuaHRtbAogIGh0dHA6Ly93d3cuaW1wZXJpYWx2aW9sZXQub3JnLzIwMTAvMDYvMjUvb3ZlcmNsb2NraW5nLXNzbC5odG1sCiAgCiAgU2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4gUm9kcsOtZ3VleiA8Y3Jyb2RyaWd1ZXpAb3BlbnN1c2Uub3JnPgoKLSBUT0RPLVJFTEVBU0U6IGNsb3NlIGlzc3VlICMyOTIKICAKICBGaXhlZDoKICAyOTIgLSBidWcgMzM4NTI1OCAiQWRkZW5kdW0gdG8gMzM3MDg5NSIKICAKICBCYXNpY2FsbHkgYnJ1c2hpbmcgdXAgY29tbWl0IDI3Yjg4MTQwMTdhMTkKCi0gQ3VybF9wZ3JzU3RhcnROb3c6IGNsZWFyIGFsbCBiaXRzIGV4Y2VwdCBISURFCiAgCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zMzg1MjU4CiAgUmVwb3J0ZWQgYnk6IEJlbiBXaW5zbG93CgotIHJlYWR3cml0ZV9kYXRhOiBpbXByb3ZlZCBDLUUgZGVjb2RpbmcgZXJyb3IgbWVzc2FnZQoKWWFuZyBUc2UgKDcgQXVnIDIwMTEpCi0gQlNELXN0eWxlIGx3SVAgVENQL0lQIHN0YWNrIHN1cHBvcnQgLSBmb2xsb3d1cAogIAogIGx3SVAgbGlicmFyeSBpbml0aWFsaXphdGlvbi4KCi0gTlRMTSBzaW5nbGUtc2lnbiBvbiBhZGp1c3RtZW50cyAoSVgpCiAgCiAgVXNlIHN3cml0ZS9zcmVhZCBpbnN0ZWFkIG9mIHdyaXRlL3JlYWQgdG8gYXZvaWQgU0lHUElQRQoKLSBjb25maWctd2luMzIuaDogY29tbWVudHMgYWRqdXN0bWVudHMKCkRhbmllbCBTdGVuYmVyZyAoNiBBdWcgMjAxMSkKLSBUT0RPLVJFTEVBU0U6IGNvbW1pdHRlZCBpc3N1ZSAjMzA0CiAgCiAgMzA0IC0gIkFzeW5jLUROUy1yZXNvbHZlLXRocmVhZCBnZXRzIHN0YXJ0ZWQgZXZlbiB3aGVuIGEgZG90dGVkIElQIGlzCiAgICAgICAgcHJvdmlkZWQiIGJ5IENocmlzdGlhbiBIPEU0PmdlbGUKICAgICAgICBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMDgvMDAwOS5odG1sCgotIFtDaHJpc3RpYW4gSMOkZ2VsZSBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBhc3luLXRocmVhZDogY2hlY2sgZm9yIGRvdHRlZCBhZGRyZXNzZXMgYmVmb3JlIHRocmVhZCBzdGFydHMKCi0gVE9ETy1SRUxFQVNFOiBBZGQgIzMwNyB0d28gaXNzdWVzIGJ5ICJTcG9vbiBNYW4iCgpZYW5nIFRzZSAoNSBBdWcgMjAxMSkKLSBjaGVja3NyYy5wbDogYWRkIHF1b3RlcyB0byB2YXIKCi0ga2VlcCBhIHNpbmdsZSBjb3B5IG9mIGNvbmZpZy13aW4zMi5oIGluIHZlcnNpb24gY29udHJvbCByZXBvc2l0b3J5IC0gZm9sbG93dXAKICAKICBBbGxvdyBjb25maWd1cmUgYnVpbGRzIHRvIGdlbmVyYXRlIHNyYy9jb25maWctd2luMzIuaAogIAogIFNraXAgY2hlY2tzcmMgb24gc3JjL2NvbmZpZy13aW4zMi5oIGNvbnRlbnRzIGFscmVhZHkgY2hlY2tlZCBhdCBsaWIvY29uZmlnLXdpbjMyLmgKICAKICBBbGxvdyBtdWx0aXBsZSAtVyBpbiBjaGVja3NyYy5wbAoKLSBCU0Qtc3R5bGUgbHdJUCBUQ1AvSVAgc3RhY2sgc3VwcG9ydCAtIGRvY3MvSU5TVEFMTCBibHVyYgoKLSBCU0Qtc3R5bGUgbHdJUCBUQ1AvSVAgc3RhY2sgc3VwcG9ydCAtIGZvbGxvd3VwCgotIGdpdCBpZ25vcmUgc3JjL2NvbmZpZy13aW4zMi5oCgotIGtlZXAgYSBzaW5nbGUgY29weSBvZiBjb25maWctd2luMzIuaCBpbiB2ZXJzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS4KICAKICBtYWtldGd6IGFuZCBidWlsZGNvbmYuYmF0IHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGlzLgoKRGFuaWVsIFN0ZW5iZXJnICg1IEF1ZyAyMDExKQotIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIGFmZTg4ZDg1ZjQwZTEKCi0gdGVzdDcxMDogdmVyaWZ5IHRoYXQgLS1wcm94eSBzb2NrczU6Ly9ob3N0bmFtZSB3b3JrcwoKLSBjcmVhdGVfY29ubjogbWFyayBub24tSFRUUCBwcm94aWVzIGFjY29yZGluZ2x5CiAgCiAgQSBwcm94eSBjb3VsZCBiZSBtYXJrZWQgJ2h0dHBwcm94eScgd3JvbmdseSBiZWZvcmUgaWYgc2V0IHdpdGggYW4KICBlbnZpcm9ubWVudCB2YXJpYWJsZSBvciB3aXRoIHRoZSBDVVJMT1BUX1BST1hZIG9wdGlvbiB3aXRoIGEgc29ja3MqOi8vCiAgcHJlZml4IG9yIHNpbWlsYXIuCiAgCiAgQWRkZWQgdGVzdCA3MTAgdG8gdmVyaWZ5CiAgCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMDcvMDE5NC5odG1sCgotIHRlc3Q3MDk6IEhUVFAgR0VUIHZpYSBTT0NLUzUgc2V0IGluIGVudmlyb25tZW50CgotIFRPRE8tUkVMRUFTRTogaXNzdWUgIzI5MyBpcyBkb25lCiAgCiAgRml4ZWQ6CiAgMjkzIC0gZnJvbSBodHRwOi8vYnVnemlsbGEucmVkaGF0LmNvbS83MjMwNzUgImN1cmwgc2VnZmF1bHRzIgoKLSBzZWdmYXVsdCBmaXhlZAogIAogIFdoZW4gdXNpbmcgYm90aCAtSiBhbmQgYSBzaW5nbGUgLU8gd2l0aCBtdWx0aXBsZSBVUkxzLCBhIG1pc3NpbmcgaW5pdAogIGNvdWxkIGNhdXNlIGJhZG5lc3MuCiAgCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMDcvMDEyNi5odG1sIGFuZAogICAgICAgaHR0cDovL2J1Z3ppbGxhLnJlZGhhdC5jb20vNzIzMDc1CiAgUmVwb3J0ZWQgYnk6IFBhdWwgSG93YXJ0aCBhbmQgR2FycmV0dCBIb2xtc3Ryb20KCi0gdGVzdDEzMTM6IHRlc3QgY29udGVudC1kaXNwb3NpdGlvbiB3aXRoIHVuZXZlbiBxdW90ZXMKCi0gcGFyc2VfZmlsZW5hbWU6IGRlYWwgd2l0aCBlc2NhcGVkIHF1b3RlcwoKWWFuZyBUc2UgKDQgQXVnIDIwMTEpCi0gQlNELXN0eWxlIGx3SVAgVENQL0lQIHN0YWNrIHN1cHBvcnQ6CiAgCiAgQWxsb3cgY29tcGlsYXRpb24gb2YgbGliY3VybCBhbmQgY3VybCB1c2luZyBCU0Qtc3R5bGUgbHdJUCBvbiBXaW4zMi4KICAKICBJbiBvcmRlciB0byBjb21waWxlIGxpYmN1cmwgYW5kIGN1cmwgd2l0aCB0aGlzIHN1cHBvcnQgaXQgaXMgbmVjZXNzYXJ5CiAgdG8gZWRpdCBmaWxlcyBsaWIvY29uZmlnLXdpbjMyLmggYW5kIHNyYy9jb25maWctd2luMzIuaCBhbmQgdW5jb21tZW50CiAgYSBsaW5lIHRvIG1ha2UgZGVmaW5pdGlvbiBvZiBwcmVwcm9jZXNzb3Igc3ltYm9sIFVTRV9MV0lQU09DSyB2aXNpYmxlLgogIAogIEFmdGVyd2FyZHMgeW91IGNhbiBjb21waWxlIGFzIHVzdWFsLgogIAogIEluIG9yZGVyIHRvIHVzZSBjb21waWxlZCBsaWJyYXJ5IHdpdGggQlNELXN0eWxlIGx3SVAgVENQL0lQIHN0YWNrIGluCiAgeW91ciBwcm9ncmFtIGl0IGlzIG1hbmRhdG9yeSB0aGF0IHlvdSBpbmNsdWRlIGx3SVAgaGVhZGVyIGZpbGUgPGx3aXAvb3B0Lmg+CiAgYmVmb3JlIGluY2x1ZGluZyA8Y3VybC9jdXJsLmg+IG9yIDxjdXJsL211bHRpLmg+CiAgCiAgQ29tcGlsYXRpb24gaGFzIGJlZW4gdmVyaWZpZWQgd2l0aCBsd0lQIDEuNC4wIGFuZCBjb250cmliLTEuNC4wIGZyb206CiAgCiAgaHR0cDovL2Rvd25sb2FkLnNhdmFubmFoLmdudS5vcmcvcmVsZWFzZXMvbHdpcC9sd2lwLTEuNC4wLnppcAogIGh0dHA6Ly9kb3dubG9hZC5zYXZhbm5haC5nbnUub3JnL3JlbGVhc2VzL2x3aXAvY29udHJpYi0xLjQuMC56aXAKICAKICBIYXZlIGZ1biEKCi0gY3VybC5oOiB1bnRhbmdsZSBhIHByZXByb2Nlc3NvciBibG9jaywgcmVtb3ZpbmcgZHVwbGljYXRlIHN5cy90eXBlcy5oIGluY2x1c2lvbgoKRGFuaWVsIFN0ZW5iZXJnICg0IEF1ZyAyMDExKQotIFRPRE8tUkVMRUFTRTogaXNzdWUgIzI5MCBmaXhlZAogIAogIENsb3NlZCB0aGlzIGVudHJ5OgogIDI5MCAtIGJ1ZyAzMzc1NjAzICJjdXJsIGhhcyBwcm9ibGVtIHdpdGggcmVtb3RlIG5hbWVzIGNvbnRhaW5pbmcgJzsnIgoKLSAtSjogc3VwcG9ydCAnOycgaW4gcXVvdGVkIGZpbGUgbmFtZXMKICAKICBDb250ZW50LWRpc3Bvc2l0aW9uIGhlYWRlcnMgY2FuIHByb3ZpZGUgZmlsZSBuYW1lcyB3aXRoIHNlbWljb2xvbnMgd2hpY2gKICBwcmV2aW91c2x5IHdvdWxkIGJlIGN1dCBvZmYgYXQgdGhhdCBwb2ludC4KICAKICBBZGRlZCB0ZXN0IGNhc2UgMTMxMSBhbmQgMTMxMiB0byB2ZXJpZnkgLUouCiAgCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zMzc1NjAzCiAgUmVwb3J0ZWQgYnk6IFBldGVyIEhqYWxtYXJzc29uCgotIGdldHBhcnQucG06IHdoZW4gbm8gcGFydCBtYXRjaCwgcmV0dXJuIGJsYW5rIHdoZW4gc2VjdGlvbiBlbmRzCgotIHJ1bnRlc3RzLnBsOiBzdXBwb3J0IG9wdGlvbj1uby1pbmNsdWRlCgotIFRPRE8tUkVMRVNFOiAjMzA2IC0gU1NMIFNlc3Npb25zIHNoYXJlZAoKLSBUT0RPLVJFTEVBU0U6IHVwZGF0ZWQgd2l0aCBjdXJyZW50IGlzc3VlcwoKS2FtaWwgRHVka2EgKDMgQXVnIDIwMTEpCi0gY3VybF9nc3NhcGk6IGFkZCBhIG1pc3NpbmcgaW5jbHVkZSBvZiBzZW5kZi5oCiAgCiAgLi4uIHRvIGF2b2lkIGJ1aWxkIGZhaWx1cmUgd2hlbiBHU1NfQ19ERUxFR19QT0xJQ1lfRkxBRyBpcyBub3QgZGVmaW5lZC4KICAKICBSZXBvcnRlZCBieTogUGF1bCBIb3dhcnRoCgotIGN1cmxfZ3NzYXBpOiByZWZpbmUgdGhlIGhhbmRsaW5nIG9mIENVUkxPUFRfR1NTQVBJX0RFTEVHQVRJT04KICAKICBTdWdnZXN0ZWQgYnkgUmljaGFyZCBTaWx2ZXJtYW4uCgotIFtBZGFtIFRrYWMgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgQWRkIG5ldyBDVVJMT1BUX0dTU0FQSV9ERUxFR0FUSU9OIG9wdGlvbi4KICAKICBDdXJsX2dzc19pbml0X3NlY19jb250ZXh0IGdvdCBuZXcgcGFyYW1ldGVyIC0gU2Vzc2lvbkhhbmRsZS4KICAKICBTaWduZWQtb2ZmLWJ5OiBBZGFtIFRrYWMgPGF0a2FjQHJlZGhhdC5jb20+CgpZYW5nIFRzZSAoMzEgSnVsIDIwMTEpCi0gY29uZmlndXJlOiBhZGQgY2hlY2sgZm9yIDxzeXMvd2FpdC5oPgoKLSBOVExNIHNpbmdsZS1zaWduIG9uIGFkanVzdG1lbnRzIChWSUlJKQogIAogIFVzZSBwcmVwcm9jZXNzb3Igc3ltYm9scyBXSU5CSU5EX05UTE1fQVVUSF9FTkFCTEVEIGFuZCBXSU5CSU5EX05UTE1fQVVUSF9GSUxFCiAgZm9yIFNhbWJhJ3Mgd2luYmluZCBkYWVtb24gbnRsbV9hdXRoIGhlbHBlciBjb2RlIGltcGxlbWVudGF0aW9uIGFuZCBmaWxlbmFtZS4KICAKICBSZXRhaW4gcHJlcHJvY2Vzc29yIHN5bWJvbCBVU0VfTlRMTV9TU08gZm9yIE5UTE0gc2luZ2xlLXNpZ24tb24gZmVhdHVyZQogIGF2YWlsYWJpbGl0eSBpbXBsZW1lbnRhdGlvbiBpbmRlcGVuZGVudC4KICAKICBGb3IgdGVzdCBoYXJuZXNzLCBwcmVmaXggTlRMTV9BVVRIIGVudmlyb25tZW50IHZhcnMgd2l0aCBDVVJMXwogIAogIFJlZmFjdG9yIGFuZCByZW5hbWUgY29uZmlndXJlIG9wdGlvbiAtLXdpdGgtbnRsbS1hdXRoIHRvIC0tZW5hYmxlLXdiLW50bG0tYXV0aFs9RklMRV0KCkRhbiBGYW5kcmljaCAoMjkgSnVsIDIwMTEpCi0gUmVudW1iZXJlZCB0ZXN0MjAwNSB0byB0ZXN0MTMxMAogIAogIFRoZSAyMHh4IHJhbmdlIGlzIGZvciBtdWx0aXBsZSBzZXF1ZW50aWFsIHRlc3RzLgoKWWFuZyBUc2UgKDI5IEp1bCAyMDExKQotIGN1cmwtZnVuY3Rpb25zLm00IHNlcmlhbCAjIGJ1bXAKCi0gUmV2ZXJ0ICJjb25maWd1cmU6IGFkZGl0aW9uYWwgZmxhZyBjaGVja3MgZm9yIGZjbnRsKCkgc29ja2V0KCkgYW5kIHNvY2tldHBhaXIoKSIKICAKICBUaGlzIHJldmVydHMgY29tbWl0IGJjNmU2YTQ2NWFkMGI5Zjk3NTdjNDM4NTY5OGZlNWYyNTVkZDEyNWIuCgotIGNvbmZpZ3VyZTogYWRkaXRpb25hbCBmbGFnIGNoZWNrcyBmb3IgZmNudGwoKSBzb2NrZXQoKSBhbmQgc29ja2V0cGFpcigpCgotIE5UTE0gc2luZ2xlLXNpZ24gb24gYWRqdXN0bWVudHMgKFZJSSkKICAKICBJbml0aWFsaXplIHZhcmlhYmxlcyB3aGVuIGNvbm5lY3RkYXRhIG9iamVjdCBpcyBjcmVhdGVkLgoKLSBzb2NrZXRwYWlyKCkgdXNhZ2UgdHJhY2tpbmcgdG8gYWxsb3cgZmQgbGVhayBkZXRlY3Rpb24KCi0gZml4IGNvbXBpbGVyIHdhcm5pbmcKCkRhbiBGYW5kcmljaCAoMjggSnVsIDIwMTEpCi0gQXZvaWQgYSAic2hhZG93cyBnbG9iYWwgZGVjbGFyYXRpb24iIHdhcm5pbmcgb24gb2xkIE1JVCBLZXJiZXJvcwogIAogIERlZmluaW5nIE5DT01QQVQgZWxpbWluYXRlcyB0aGUgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgbWFjcm9zCiAgdGhhdCBhcmUgdGhlIHNvdXJjZSBvZiB0aGUgcHJvYmxlbSBhbmQgd2hpY2ggd2UgZG9uJ3QgbmVlZCwKICBhbnl3YXkuCgpZYW5nIFRzZSAoMjggSnVsIDIwMTEpCi0gTlRMTSBzaW5nbGUtc2lnbiBvbiBhZGp1c3RtZW50cyAoVkkpCiAgCiAgRml4IGNvbXBpbGVyIHdhcm5pbmcKCkRhbiBGYW5kcmljaCAoMjggSnVsIDIwMTEpCi0gR2l2ZSB0aGUgTlRMTSBTU08gaGVscGVyIGEgbW9tZW50IHRvIGNsZWFubHkgc2h1dCBkb3duIGlmIG5lZWRlZAoKLSBSZW1vdmVkIGFuIGV4dHJhbmVvdXMgXG4gdGhhdCB2aW9sYXRlZCB0aGUgU1NPIGRhZW1vbiBwcm90b2NvbAogIAogIFRoaXMgY2F1c2VkIGZha2VfbnRsbSB0byBhYm9ydCBkdWUgdG8gYW4gaW52YWxpZCBjb21tYW5kCiAgY2F1c2luZyBzcG9yYWRpYyB0ZXN0IDIwMDUgZmFpbHVyZXMuCgpZYW5nIFRzZSAoMjggSnVsIDIwMTEpCi0gTlRMTSBzaW5nbGUtc2lnbiBvbiBhZGp1c3RtZW50cyAoVikKICAKICBFbmhhbmNlIHRlc3QgaGFybmVzcyBmYWtlX250bG0gbG9nZ2luZyB1cG9uIGludmFsaWQgaW5wdXQuCgpEYW4gRmFuZHJpY2ggKDI3IEp1bCAyMDExKQotIEZpeGVkIGEgY291cGxlIG9mIG1lbW9yeSBsZWFrcyBpbiBOVExNIFNTTyBzdXBwb3J0CgpZYW5nIFRzZSAoMjcgSnVsIDIwMTEpCi0gTlRMTSBzaW5nbGUtc2lnbiBvbiBhZGp1c3RtZW50cyAoSVYpCiAgCiAgRml4IGNvbXBpbGVyIHdhcm5pbmcKCi0gTlRMTSBzaW5nbGUtc2lnbiBvbiBhZGp1c3RtZW50cyAoSUlJKQogIAogIFByb3ZpZGUgc29tZSBlcnJvciB0cmFjaW5nIGFuZCBmaXggZXhlY2woKSBjYWxsaW5nLgoKLSBOVExNIHNpbmdsZS1zaWduIG9uIGFkanVzdG1lbnRzIChJSSkKICAKICBFbnN1cmUgdGVzdCBoYXJuZXNzIGZha2VfbnRsbSBtYWluIGZ1bmN0aW9uIGNhbiBwcm9wZXJseSBoYW5kbGUgYXJndW1lbnRzLgoKLSBOVExNIHNpbmdsZS1zaWduIG9uIGFkanVzdG1lbnRzIChJKQogIAogIFVzZSBmYWtlX250bG0gYWJzb2x1dGUgZmlsZW5hbWUgaW4gTlRMTV9BVVRIIGVudmlyb25tZW50IHZhcmlhYmxlIGZvciB0ZXN0CiAgMjAwNSBkZWZpbml0aW9uLgoKRGFuIEZhbmRyaWNoICgyNiBKdWwgMjAxMSkKLSBGaXhlZCB0ZXN0IDIwMDUgdG8gd29yayBpbiBvdXQtb2YtdHJlZSBidWlsZHMKICAKICBBbHNvLCBzZXQgdGhlIHRlc3QgbnVtYmVyIGluIHRoZSB0ZXN0IGRhdGEgZmlsZSBzbyBmYWtlX250bG0gY2FuCiAgYmUgcmV1c2VkIGluIGZ1dHVyZSB0ZXN0cy4KCllhbmcgVHNlICgyNiBKdWwgMjAxMSkKLSBmaXggY29tcGlsZXIgd2FybmluZwoKLSBmaXggY29tcGlsZXIgd2FybmluZwoKLSBzdGRpby5oLCBzdGRsaWIuaCwgc3RyaW5nLmgsIHN0ZGFyZy5oIGFuZCBjdHlwZS5oIGluY2x1c2lvbiBkb25lIGluIHNldHVwX29uY2UuaAoKLSBXSU4zMiBpby5oIGFuZCBmY250bC5oIGluY2x1c2lvbiBkb25lIGluIHNldHVwX29uY2UuaAoKLSB0aW1lLmggYW5kIHN5cy90aW1lLmggaW5jbHVzaW9uIGNvbmRpdGlvbmFsbHkgZG9uZSBpbiBzZXR1cF9vbmNlLmgKCi0gZXJybm8uaCBpbmNsdXNpb24gY29uZGl0aW9uYWxseSBkb25lIGluIHNldHVwX29uY2UuaCAtIGZvbGxvd3VwCgotIGVycm5vLmggaW5jbHVzaW9uIGNvbmRpdGlvbmFsbHkgZG9uZSBpbiBzZXR1cF9vbmNlLmgKCkRhbmllbCBTdGVuYmVyZyAoMjIgSnVsIDIwMTEpCi0gW0JlbiBXaW5zbG93IGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIHByb2dyZXNzOiByZXNldCBmbGFncyBhdCB0cmFuc2ZlciBzdGFydAogIAogIFdoZW4gYW4gZWFzeSBoYW5kbGUgaXMgdXNlZCB0byBkb3dubG9hZCBhbiBVUkkgd2hpY2ggaGFzIG5vCiAgQ29udGVudC1MZW5ndGggaGVhZGVyIChvciBlcXVpdmFsZW50KSBhZnRlciBkb3dubG9hZGluZyBhbiBVUkkgd2hpY2gKICBkb2VzLCB0aGUgdmFsdWUgZnJvbSB0aGUgcHJldmlvdXMgdHJhbnNmZXIgaXMgcmV1c2VkIGFuZCByZXR1cm5lZCBieQogIENVUkxJTkZPX0NPTlRFTlRfTEVOR1RIX0RPV05MT0FELiBUaGlzIGlzIGJlY2F1c2UgdGhlIHByb2dyZXNzIGZsYWdzCiAgKHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgc3VjaCBhIGhlYWRlciB3YXMgcmVjZWl2ZWQpIGFyZSBub3QgcmVzZXQKICBiZXR3ZWVuIHRyYW5zZmVycy4KICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTMzNzA4OTUKCi0gUkVMRUFTRS1OT1RFUzogSFRUUCBlcnJvciBoYW5kbGluZyBvbiByZXF1ZXN0IGJvZHkgc2VuZAoKLSBodHRwIGVycm9yIHJlc3BvbnNlOiBzdG9wIHNlbmRpbmcgd2hlbiBlcnJvciBpcyByZWNlaXZlZAogIAogIFdoZW4gbGliY3VybCBoYXMgc2FpZCB0byB0aGUgc2VydmVyIHRoYXQgdGhlcmUncyBhIFBPU1Qgb3IgUFVUIGNvbWluZwogICh3aXRoIGEgY29udGVudC1sZW5ndGggYW5kIGFsbCkgaXQgaGFzIHRvIGVpdGhlciBkZWxpdmVyIHRoYXQgYW1vdW50IG9mCiAgZGF0YSBvciBpdCBuZWVkcyB0byBjbG9zZSB0aGUgY29ubmVjdGlvbiBiZWZvcmUgdHJ5aW5nIGEgc2Vjb25kIHJlcXVlc3QuCiAgCiAgQWRkcyB0ZXN0IGNhc2UgMTEyOSwgMTEzMCBhbmQgMTEzMQogIAogIFRoZSBidWcgcmVwb3J0IGlzIGFib3V0IHdoZW4gdXNlZCB3aXRoIDEwMC1jb250aW51ZSwgYnV0IHRoZSBjaGFuZ2UgaXMKICBtb3JlIGdlbmVyaWMuCiAgCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMDYvMDE5MS5odG1sCiAgUmVwb3J0ZWQgYnk6IFN0ZXZlbiBQYXJrZXMKCi0gW01pY2hhZWwgTXVlbGxlciBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBzc29fbnRsbV9pbml0aWF0ZTogdW5hc3NpZ25lZCB2YXJpYWJsZQogIAogIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTA3LzAxMDkuaHRtbAoKLSB0ZXN0MjAwNTogcmVxdWlyZSBhIGRlYnVnIGJ1aWxkCgotIHJ1bnRlc3RzOiBhZGQgJ2RlYnVnJyBhcyBhIGZlYXR1cmUgYSB0ZXN0IGNhbiByZXF1aXJlCgotIGNvbmZpZ3VyZTogYXZvaWQgInRlc3QgLWUiCiAgCiAgInRlc3QgLWUiIGlzIFBPU0lYIGJ1dCBjbGVhcmx5IHdhcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBTdW5PUyBzaAogIHZlcnNpb24sIC1mIGlzIHN1cHBvcnRlZCBhbmQgc2hvdWxkIGJlIGEgZGVjZW50IGVxdWl2YWxlbnQKICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTMzNzE1NzQKCi0gc3ltYm9scy1pbi12ZXJzaW9uczogYWRkIE5UTE1fU1NPIHN5bWJvbHMKCi0gZ2l0aWdub3JlOiBpZ25vcmUgZmFrZV9udGxtCgotIFtNYW5keSBXdSBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICB0ZXN0MjAwNTogdmVyaWZ5IG50bG0gc2luZ2xlLXNpZ25vbgoKLSBbTWFuZHkgV3UgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgTlRMTSBzaW5nbGUtc2lnbiBvbiBzdXBwb3J0ZWQKICAKICBXaXRoIHRoZSB1c2Ugb2YgdGhlICdudGxtX2F1dGgnIHRvb2wgZnJvbSB0aGUgU2FtYmEgcHJvamVjdAoKLSBzd3M6IGRvbid0IGVuYWJsZSBwaXBlbGluaW5nIGZvciByZXF1ZXN0cyB3aXRoIGNvbnRlbnQtbGVuZ3RoCiAgCiAgTG9nIHRleHRzIGFsc28gbW9kaWZpZWQgYW5kIHNvbWUgd2hpdGUgc3BhY2UgZWRpdHMKClBhdHJpY2sgTW9ubmVyYXQgKDE0IEp1bCAyMDExKQotIEZpeCBPUzQwMCBzY3JpcHRzIHRvIG1ha2UgaXQgY29tcGlsYWJsZSBhZ2Fpbi4KICBVcGdyYWRlIElMRS9SUEcgYmluZGluZyB0byA3LjIxLjcuCiAgVXBkYXRlIE9TNDAwIGRvY3VtZW50YXRpb24gYWNjb3JkaW5nbHkuCgpEYW5pZWwgU3RlbmJlcmcgKDE0IEp1bCAyMDExKQotIHJ1bnRlc3RzOiBpZ25vcmUgdGhlICdhbGxfcHJveHknIGVudmlyb25tZW50IHZhcmlhYmxlIGFzIHdlbGwKICAKICBXZSBzaG91bGQgcHJvYmFibHkgYWxzbyBtYWtlIHN1cmUgdGhhdCBbcHJvdG9jb2xdX3Byb3h5IGZvciBhbGwgcG9zc2libGUKICBwcm90b2NvbHMgbGliY3VybCBzdXBwb3J0cyBhcmUgdW5zZXQuCgpKdWxpZW4gQ2hhZmZyYWl4ICgxMyBKdWwgMjAxMSkKLSBjdXJsX2dzc2FwaTogR3VhcmQgZmlsZXMgd2l0aCBIQVZFX0dTU0FQSS4KICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0wNy8wMDc0Lmh0bWwKICBSZXBvcnRlZCBhbmQgZml4IHN1Z2dlc3RlZCBieTogQmVuIEdyZWVhcgoKRGFuaWVsIFN0ZW5iZXJnICgxMyBKdWwgMjAxMSkKLSBnc3NhcGk6IHJlbmFtZSBvdXIgZmlsZXMgdG8gYXZvaWQgY29uZmxpY3RzCiAgCiAgZ3NzYXBpLmggaXMgdXNlZCBhcyBhIGhlYWRlciBuYW1lIGJ5IEhlaW1kYWwtc3R5bGUgR1NTQVBJIHNvIGl0IHdvdWxkCiAgY29uZmxpY3Qgd2l0aCBhIHByaXZhdGUgaGVhZGVyIHVzaW5nIHRoYXQgbmFtZSwgYW5kIHdoaWxlIHJlbmFtaW5nIHRoZQogIGhlYWRlciBJIGZpZ3VyZWQgd2Ugc2hvdWxkIG5hbWUgdGhlIC5jIGZpbGUgYWNjb3JkaW5nbHkgYXMgd2VsbC4KICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0wNy8wMDcxLmh0bWwKICBSZXBvcnRlZCBieTogQmVuIEdyZWVhcgoKLSBzaWxlbmNlIHBpY2t5IGNvbXBpbGVyczogbWFyayB1bnVzZWQgcGFyYW1ldGVycwogIAogIE1vZGVybiBnY2MgdmVyc2lvbnMgKDQuNi5YKSBnZXQgbW9yZSBwaWNreSBieSBkZWZhdWx0IGFuZCBoYXZlIHN0YXJ0ZWQKICB0byB3YXJuIGZvciB1bnVzZWQgcGFyYW1ldGVycywgYnV0IGx1Y2tpbHkgZ2NjIGFsc28gYWxsb3dzIHVzIHRvIG1hcmsKICB0aGVtIGFzIHVudXNlZCBzbyB0aGF0IHdlIGNhbiBhdm9pZCB0aGUgd2FybmluZ3MuCgpKdWxpZW4gQ2hhZmZyYWl4ICgxMiBKdWwgMjAxMSkKLSBnc3NhcGkuYzogU2ltcGxpZmllZCB0aGUgZnVuY3Rpb24uCiAgCiAgUmVtb3ZlZCB0aGUgcGFyYW1ldGVycyB0aGF0IHdlcmUgY29tbW9uIHRvIGFsbCBvdXIgaW52b2NhdGlvbi4KCi0gQWRkZWQgQ3VybF9nc3NfaW5pdF9zZWNfY29udGV4dC4KICAKICBUaGlzIGZ1bmN0aW9uIHdyYXBzIG91ciBjYWxscyB0byBnc3NfaW5pdF9zZWNfY29udGV4dCBzbyB0aGF0IHdlCiAgaGF2ZSBhIHVuaWZpZWQgd2F5IHRvIHRhbGsgdG8gR1NTQVBJLgoKLSBodHRwX25lZ29jaWF0ZTogQmUgY29uc2lzdGVudCBpbiBnc3NfaW5pdF9zZWNfY29udGV4dCBhdHRyaWJ1dGVzLgogIAogIFRoaXMgY2hhbmdlIG1ha2VzIHRoaXMgY2FsbHNpdGUgbWF0Y2ggdGhlIHJlc3Qgb2YgdGhlIGNvZGUuCgpEYW5pZWwgU3RlbmJlcmcgKDQgSnVsIDIwMTEpCi0gY29kZSBzdHlsZTogc3BhY2UgYmV0d2VlbiBjbG9zZSBwYXJlbiBhbmQgb3BlbiBicmFjZQoKLSBjaGVja3NyYzogZGV0ZWN0IG9wZW4gYnJhY2Ugd2l0aG91dCBzcGFjZQogIAogIFdlIHVzZSAiaWYoY29uZGl0aW9uKSB7IiB3aXRoIGEgc3BhY2UgYmV0d2VlbiB0aGUgY2xvc2UgcGFyZW4gYW5kIHRoZQogIG9wZW4gYnJhY2UuCgotIHBvbGFyc3NsLmg6IHJlbW92ZSBDVlMgbGVmdG92ZXIKCi0gaGVscCBvdXRwdXQ6IG1vcmUgZ251IGxpa2Ugb3V0cHV0CiAgCiAgRmlyc3QsIHRoZSAtSi8tLXJlbW90ZS1oZWFkZXItbmFtZSB3YXMgd3JvbmdseSBzb3J0ZWQgaW4gdGhlIC0taGVscAogIG91dHB1dCBhcyBwb2ludGVkIG91dCBpbiBidWcgcmVwb3J0ICMzMzQ5MjcxLgogIAogIFRoZW4sIEkgY2hhbmdlZCB0aGUgZm9ybWF0IG9mIHRoZSB0ZXh0cyB0byBmb2xsb3cgdGhlIG1hbiBwYWdlIGJldHRlciBpbgogIHRoYXQgaXQgbm93IHVzZXMgIi1BLCAtLWxvbmciIGludGVhZCBvZiAiLUEvLS1sb25nIi4gSSBhbHNvIG1hZGUgYWxsCiAgYWRkaXRpb25hbCBhcmd1bWVudHMgZ2V0IHdyaXR0ZW4gYXMgaW4gIi1BLCAtLWxvbmcgRklMRU5BTUUiIGluc3RlYWQgb2YKICB0aGUgcHJldmlvdXMgIjxmaWxlbmFtZT4iIHN0eWxlLgogIAogIFJlcG9ydGVkIGJ5OiBIZXJ2ZSBBbWJsYXJkCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zMzQ5MjcxCgotIHN3czogYWxsb3cgbXVsdGlwbGUgY29tbWFuZHMgaW4gPHNlcnZlcmNtZD4KCi0gQ3VybF9odHRwX3JlYWR3cml0ZV9oZWFkZXJzOiBtaW5vciBpbmRlbnQgZml4CgotIGdpdGlnbm9yZTogY29uZmlnLmNhY2hlCgotIGRvY3M6IEZUUCBxdW90ZXMgc3VwcG9ydCAnKicgcHJlZml4IHRvIGlnbm9yZSBlcnJvcnMKICAKICBCeSBkZWZhdWx0IGxpYmN1cmwgc3RvcHMgcHJvY2Vzc2luZyBxdW90ZSBjb21tYW5kcyBvbiBmYWlsdXJlcy4KCi0gVEhBTktTOiBuZXcgY29udHJpYnV0b3JzIGZyb20gNy4yMS43CgotIGdldF9nc3NfbmFtZTogcHJveHkgYXV0aCB3aXRob3V0IHByb3h5IHNldCBlcXVhbHMgZXJyb3IKICAKICBQcmV2aW91c2x5IGl0IHdvdWxkIGFjY2VzcyBhIE5VTEwgcG9pbnRlciBhbmQgZGllLgogIAogIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTA2LzAxNzAuaHRtbAogIFJlcG9ydGVkIGJ5OiBDaHJpc3RpYW4gSGFnZWxlCgotIGV4YW1wbGVzOiBjbGVhbnVwIGN1cmwgaW5jbHVkZXMKICAKICBPbmx5IDxjdXJsL2N1cmwuaD4gaXMgbmVlZGVkIHR5cGljYWxseSBhbmQgY3VybC90eXBlcy5oIGhhcyBiZWVuIHJlbW92ZWQKCi0gbGlidGVzdHM6IHN0b3AgY2hlY2tpbmcgZm9yIENVUkxNX0NBTExfTVVMVElfUEVSRk9STQogIAogIENVUkxNX0NBTExfTVVMVElfUEVSRk9STSBzdG9wcGVkIGJlaW5nIGEgdmFsaWQgcmV0dXJuIGNvZGUgZnJvbQogIGN1cmxfbXVsdGlfcGVyZm9ybSBiYWNrIGluIDcuMjAuMC4gQWxsIHRoZSBsaWJjdXJsIHRlc3RzIGFyZSBhanVzdGVkIHRvCiAgdGhpcyBhbmQgbm8gbG9uZ2VyIGNoZWNrIGZvciB0aGlzIHJldHVybiBjb2RlLiBNYWtlcyB0aGVtIHNpbXBsZXIuCgpEYW4gRmFuZHJpY2ggKDI0IEp1biAyMDExKQotIEZpeGVkIHRlc3QgMTMwMCB0byBwYXNzIHRoZSBtZW1vcnkgdG9ydHVyZSB0ZXN0CgpUb20gV3JpZ2h0ICgyNCBKdW4gMjAxMSkKLSBsb29rcyBsaWtlIHRoaXMgc2hvdWxkIGJlIHN0YXRpYywgbm90IGRsbAoKRGFuIEZhbmRyaWNoICgyMyBKdW4gMjAxMSkKLSBEaXNwbGF5IG5vdGVzIGZyb20gc2V0dXAgZmlsZSBpbiB0ZXN0Y3VybC5wbAogIAogIEF1dG9idWlsZCBzdWJtaXR0ZXJzIGNhbiB1c2UgdGhpcyB0byBhZGQgc29tZSB0ZXh0IHRvIHRoZWlyCiAgc2V0dXAgZmlsZXMgdG8gZGVzY3JpYmUgaXNzdWVzIHRoZXkndmUgZm91bmQgd2l0aCB0aGUgYnVpbGQKICBvciB0ZXN0cy4gVGhpcyBjb3VsZCBpbmNsdWRlIGxheWluZyBibGFtZSBvbiB0ZXN0IGZhaWx1cmVzIG9uCiAgbmV0d29yayBpc3N1ZXMgb3IgZGVwZW5kZW50IGxpYnJhcmllcywgZXhwbGFpbmluZyBhd2F5IGNvbXBpbGVyCiAgd2FybmluZ3Mgb3IgcHJvdmlkaW5nIGFueSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRoYXQgY291bGQgYmUKICB1c2VmdWwgdG8gcGVvcGxlIHJldmlld2luZyBhbmQgaW52ZXN0aWdhdGluZyBwcm9ibGVtcyB3aXRoIHRoZQogIHB1YmxpY2x5IGF2YWlsYWJsZSBhdXRvYnVpbGQgbG9ncy4gIE5vdGUgdGhhdCBwZXJzaXN0ZW50IHRlc3QKICBmYWlsdXJlcyB0aGF0IGFyZSBub3QgaXNzdWVzIHdpdGggY3VybCBpdHNlbGYgc2hvdWxkIG5vcm1hbGx5IGJlCiAgZml4ZWQgYnkgZXhjbHVkaW5nIHRoZW0gZnJvbSB0aGUgdGVzdCBydW4gaW5zdGVhZC4KICAKICBUaGlzIGlzIGFuIGVudGlyZWx5IG9wdGlvbmFsIGZpZWxkIHRoYXQgaXMgbm90IGVudGVyZWQgYnkgdGhlCiAgdXNlciB0aGUgZmlyc3QgdGltZSBhIG5ldyBidWlsZCBpcyBjcmVhdGVkLgoKLSBBZGRlZCBhIGxlYXAgc2Vjb25kIHRlc3QgdG8gdGVzdDUxNwoKRGFuaWVsIFN0ZW5iZXJnICgyMyBKdW4gMjAxMSkKLSBydW50ZXN0cy5wbDogd2FybiBpZiBhIHRlc3QgaXMgZXhwbGljaXRseSBkaXNhYmxlZAogIAogIEp1c3QgdG8gbWFrZSBzdXJlIGEgdXNlciBpcyBhd2FyZSBvZiBpdC4KCi0gYnVtcCByZWxlYXNlOiBzdGFydCB3b3JraW5nIHRvd2FyZHMgNy4yMS44CgotIHBhcnNlZGF0ZTogZGV0ZWN0IG1vcmUgaW52YWxpZCBkYXRlcyBiZXR0ZXIKClZlcnNpb24gNy4yMS43ICgyMyBKdW4gMjAxMSkKCkRhbmllbCBTdGVuYmVyZyAoMjMgSnVuIDIwMTEpCi0gY3VybF9mb3JtZnJlZTogY2xhcmlmeSB3aGljaCBwb2ludGVyIHRvIGZyZWUKCi0gUkVMRUFTRS1OT1RFUzogbWVudGlvbiBzZWN1cml0eSBpc3N1ZSAyMDExMDYyMwogIAogIGxpYmN1cmwgaW5hcHByb3ByaWF0ZSBHU1NBUEkgZGVsZWdhdGlvbi4gRnVsbCBkZXRhaWxzIGF0CiAgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2Fkdl8yMDExMDYyMy5odG1sCgotIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIDkwMTY5NThhYTg5ODkKCi0gQ3VybF9pbnB1dF9uZWdvdGlhdGU6IGRvIG5vdCBkZWxlZ2F0ZSBHU1NBUEkgY3JlZGVudGlhbHMKICAKICBUaGlzIGlzIGEgc2VjdXJpdHkgZmxhdy4gU2VlIGN1cmwgYWR2aXNvcnkgMjAxMTA2MjMgZm9yIGRldGFpbHMuCiAgCiAgUmVwb3J0ZWQgYnk6IFJpY2hhcmQgU2lsdmVybWFuCgotIFtKb3N1ZSBBbmRyYWRlIEdvbWVzIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIHdpbmRvd3MgYnVpbGQ6IHVzZSBjb3JyZWN0IE1TIENSVAoKLSBNZXJnZSBwdWxsIHJlcXVlc3QgIzIzIGZyb20gc2FsdHktaG9yc2UvcG9wM19saXN0X3NwYWNlCiAgCiAgW3BvcDNdIHJlbW92ZSBleHRyYSBzcGFjZSBpbiBMSVNUIGNvbW1hbmQKCk9yaSBBdnRhbGlvbiAoMjEgSnVuIDIwMTEpCi0gW3BvcDNdIHJlbW92ZSBleHRyYSBzcGFjZSBpbiBMSVNUIGNvbW1hbmQKICAKICBTb21lIHNlcnZlcnMsIGUuZy4gbWFpbC5iZXplcWludC5uZXQ6MTEwLCBjb25zaWRlciBpdCBhIHN5bnRheCBlcnJvcgoKWWFuZyBUc2UgKDIxIEp1biAyMDExKQotIGh0dHA6IGZpeCBjb21waWxlciB3YXJuaW5nCiAgCiAgY29tcGlsZXIgd2FybmluZzogY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBpcyBjb25zdGFudAoKLSBhc3luLXRocmVhZDogZml4IGNvbXBpbGVyIHdhcm5pbmcKICAKICBjb21waWxlciB3YXJuaW5nOiB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCBidXQgbm90IHJlZmVyZW5jZWQKCi0gY21ha2U6IHJlbW92ZSBzcHVyaW91cyBkZWZpbml0aW9uCgpEYW5pZWwgU3RlbmJlcmcgKDIxIEp1biAyMDExKQotIEZBUTogbW9yZSBibHVyYiBvbiBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zCgpZYW5nIFRzZSAoMjEgSnVuIDIwMTEpCi0geGMtdHJhbnNsaXQubTQgZml4IHF1b3RpbmcKCkRhbmllbCBTdGVuYmVyZyAoMjAgSnVuIDIwMTEpCi0gSU5TVEFMTDogbWVudGlvbiB0aGUgR0lULUlORk8gZmlsZQoKRGFuIEZhbmRyaWNoICgyMCBKdW4gMjAxMSkKLSBBZGRlZCBMT0NBTF9NT0RVTEVfVEFHUyB0byBzdXBwb3J0IEFuZHJvaWQgZ2luZ2VyYnJlYWQKCkRhbmllbCBTdGVuYmVyZyAoMTkgSnVuIDIwMTEpCi0gW0FtciBTaGFoaW4gYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgdW5pdHRlc2V0OiBDdXJsX2xsaXN0X21vdmUKICAKICBhZGRpbmcgdW5pdCB0ZXN0IGZvciBDdXJsX2xsaXN0X21vdmUsIGRvY3VtZW50aW5nIHVuaXQtdGVzdGVkIGZ1bmN0aW9ucwogIGluIGxsaXN0LmMsIGNoYW5naW5nIHVuaXQtdGVzdCB0byB1bml0dGVzdCwgcmVwbGFjaW5nIGFzc2VydCBjYWxscyB3aXRoCiAgYWJvcnRfdW5sZXNzIGNhbGxzCgotIENVUkxGT1JNX1NUUkVBTTogYWNrbm93bGVkZ2UgQ1VSTEZPUk1fRklMRU5BTUUKICAKICBUaGUgQ1VSTEZPUk1fU1RSRUFNIGlzIGRvY3VtZW50ZWQgdG8gb25seSBpbnNlcnQgYSBmaWxlIG5hbWUgKGFuZCB0aHVzCiAgbG9vayBsaWtlIGEgZmlsZSB1cGxvYWQpIGluIHRoZSBwYXJ0IGlmIENVUkxGT1JNX0ZJTEVOQU1FIGlzIHNldCwgYnV0IGluCiAgcmVhbGl0eSBpdCBhbHdheXMgaW5zZXJ0ZWQgYSBmaWxlbmFtZT0iIiBhbmQgaWYgQ1VSTEZPUk1fRklMRU5BTUUgd2Fzbid0CiAgc2V0LCBpdCB3b3VsZCBpbnNlcnQgaW5zZXJ0IHJ1YmJpc2ggKG9yIHBvc3NpYmx5IGNyYXNoKS4KICAKICBUaGlzIGlzIG5vdyBmaXhlZCB0byB3b3JrIGFzIGRvY3VtZW50ZWQsIGFuZCB0ZXN0IDU1NCBoYXMgYmVlbiBleHRlbmRlZAogIHRvIHZlcmlmeSB0aGlzLgogIAogIFJlcG9ydGVkIGJ5OiBTYXNjaGEgU3dpZXJjeQogIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTA2LzAwNzAuaHRtbAoKWWFuZyBUc2UgKDE3IEp1biAyMDExKQotIGNvbmZpZ3VyZTogYXZvaWQgZGlyZWN0IHVzYWdlIG9mIEFTX1RSXyogbWFjcm9zCgotIHhjLXRyYW5zbGl0Lm00IHByb3ZpZGVzIHRyYW5zbGl0ZXJhdGlvbiBtYWNyb3Mgd2l0aCB3ZWxsIGRlZmluZWQgYmVoYXZpb3IuCgpEYW5pZWwgU3RlbmJlcmcgKDE0IEp1biAyMDExKQotIFJFTEVBU0UtTk9URVM6IGFkZCBtb3JlIGNvbnRyaWJ1dG9ycyBmb3IgdGhpcyByZWxlYXNlCgotIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIDBhZWRjY2MxOGEzM2E3Nzg1MzUKCi0gY3VybF9mb3JtZ2V0OiBmaXggRklMRSAqIGxlYWsKICAKICBQcm9wZXJseSBkZWFsIHdpdGggdGhlIGZhY3QgdGhhdCB0aGUgbGFzdCBmcmVhZCgpIGNhbGwgbW9zdCBwcm9iYWJseSBpcwogIGEgc2hvcnQgcmVhZCwgYW5kIHdoZW4gdXNpbmcgY2FsbGJhY2tzIGluIGZhY3QgYWxsIGNhbGxzIGNhbiBiZSBzaG9ydAogIHJlYWRzLiBObyBsb25nZXIgY29uc2lkZXIgYSBmaWxlIHJlYWQgZG9uZSB1bnRpbCBpdCByZXR1cm5zIGEgMCBmcm9tIHRoZQogIHJlYWQgZnVuY3Rpb24uCiAgCiAgUmVwb3J0ZWQgYnk6IEFhcm9uIE9yZW5zdGVpbgogIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTA2LzAwNDguaHRtbAoKLSBjdXJsX2Zvcm1nZXQ6IHRyZWF0IENVUkxGT1JNX1NUUkVBTSBiZXR0ZXIKICAKICBJZiBhIHBpZWNlIGlzIHNldCB0byB1c2UgYSBjYWxsYmFjayB0byBnZXQgdGhlIGRhdGEsIGl0IHNob3VsZCBub3QgYmUKICB0cmVhdGVkIGFzIGRhdGEuIEl0IHVuZm9ydHVuYXRlbHkgYWxzbyByZXF1aXJlcyB0aGF0IGN1cmxfZWFzeV9wZXJmb3JtKCkKICBvciBzaW1pbGFyIGhhcyBiZWVuIHVzZWQgYXMgb3RoZXJ3aXNlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBoYXNuJ3QgYmVlbgogIGZpZ3VyZWQgb3V0IGFuZCBjdXJsX2Zvcm1nZXQgd29uJ3Qga25vdyBob3cgdG8gZ2V0IHRoZSBjb250ZW50LgoKLSBjdXJsX2Zvcm1nZXQuMzogQ1VSTEZPUk1fU1RSRUFNIGhhcyBpdHMgZHJhd2JhY2tzCiAgCiAgRHVlIHRvIGEgZGVzaWduIGZsYXcsIHRoZSBDVVJMRk9STV9TVFJFQU0gb3B0aW9uIGRvZXNuJ3QgcmVhbGx5IHdvcmsKICB3aXRoIGN1cmxfZm9ybWdldCB1bnRpbCBhZnRlciBjdXJsX2Vhc3lfcGVyZm9ybSAob3Igc2ltaWxhcikuCgotIEZBUTogYmluZGluZyBjbGFyaWZpY2F0aW9uCiAgCiAgV2UgZG9uJ3QgYXV0aG9yIHRoZSBiaW5kaW5ncywgdGhleSBhcmUgY3JlYXRlZCBvdXRzaWRlIHRoZSBtYWluIHByb2plY3QuCgpEYW4gRmFuZHJpY2ggKDExIEp1biAyMDExKQotIEFkZGVkIGh0dHAgYXMgYSBkZXBlbmRlbmN5IG9mIHRlc3QgMTMwOAoKRGFuaWVsIFN0ZW5iZXJnICgxMiBKdW4gMjAxMSkKLSB0ZXN0MTMwOTogYWRkZWQgdG8gdGhlIGRpc3QKCi0gd3JpdGU6IGFkZCByZXR1cm4gY29kZSBjaGVja3Mgd2hlbiB1c2VkCiAgCiAgVGhlc2Ugd2VyZSBqdXN0IHdhcm5pbmdzIGluIHRlc3QgY29kZSBidXQgaXQgc3RpbGwgbWFrZXMgaXQgbmljZXIgdG8gbm90CiAgZ2VuZXJhdGUgdGhlbS4KCi0gbG9uZy9pbnQgbWVzcwogIAogIFR5cGVjYXN0IHdoZW4gY29udmVydGluZyB0byBpbnQgZnJvbSBsb25nIHRvIGF2b2lkIHNvbWUgY29tcGlsZXIgd2FybmluZ3MKCllhbmcgVHNlICgxMSBKdW4gMjAxMSkKLSBjb25maWd1cmU6IE9wZW5TU0wgQVBJIGRldGVjdGlvbiBjbGVhbnVwCgpEYW4gRmFuZHJpY2ggKDExIEp1biAyMDExKQotIEZpeGVkIHRlc3QgMTMwOSB0byBwYXNzIHRoZSB0b3J0dXJlIHRlc3QKICAKICBSZW1vdmluZyBkeW5hbWljIGFsbG9jYXRpb25zIGFsc28gc2ltcGxpZmllcyB0aGUgdGVzdC4KCkRhbmllbCBTdGVuYmVyZyAoMTAgSnVuIDIwMTEpCi0gc3BsYXk6IGFkZCB1bml0IHRlc3RzCiAgCiAgVGhlIHRlc3QgY29kZSB0aGF0IHdhcyAjaWZkZWYnZWQgaW4gdGhlIGNvZGUgd2FzIGNvbnZlcnRlZCBpbnRvIHVuaXQKICB0ZXN0cyBpbiB0ZXN0IGNhc2UgMTMwOS4gSSBhbHNvIHJlbW92ZWQgdGhlICNpZiAwJ2VkIGNvZGUgZnJvbSBzcGxheS5jCgotIHVuaXR0ZXN0OiBtYXJrIGFsbCB1bml0IHRlc3RlZCBmdW5jdGlvbnMKICAKICBXaXRoICJAdW5pdHRlc3Q6IFtudW1dIiBpbiB0aGUgaGVhZGVyIGNvbW1lbnQgZm9yIGVhY2ggdGVzdGVkIGZ1bmN0aW9uLgogIFNob3dzIHdlIGhhdmUgYSBsb2cgd2F5IHRvIGdvIHN0aWxsLi4uCgotIENVUkxPUFRfV1JJVEVIRUFERVI6IGNsYXJpZnkgdGhlIGRvY3MKCi0gdW5pdCB0ZXN0IGZvcm1wb3N0OiBhZGRlZCB0ZXN0IGNhc2UgMTMwOAogIAogIFRoaXMgaXMgYSBmZXcgZmlyc3QgcmF0aGVyIGJhc2ljIHRlc3RzIG9mIGN1cmxfZm9ybWFkZCgpIGFuZAogIGN1cmxfZm9ybWdldCgpLiBTaG91bGQgc2VydmUgYXMgYnVpbGRpbmcgYmxvY2tzIHRvIGFkZCBtb3JlIHZhcmlhdGlvbnMKICB0byB0aGUgdGVzdC4KCllhbmcgVHNlICg5IEp1biAyMDExKQotIGNvbmZpZ3VyZTogd2FybiBpZiBPcGVuU1NMIGhlYWRlcnMgYW5kIGxpYnJhcnkgdmVyc2lvbnMgZG9uJ3QgbWF0Y2gKCi0gY29uZmlndXJlOiBnZXQgQVBJIGluZm8gZm9yIGEgY291cGxlIG9mIE9wZW5TU0wgZnVuY3Rpb25zIChmb2xsb3d1cCAyKQoKLSBjb25maWd1cmU6IGdldCBBUEkgaW5mbyBmb3IgYSBjb3VwbGUgb2YgT3BlblNTTCBmdW5jdGlvbnMgKGZvbGxvd3VwIDEpCgotIGNvbmZpZ3VyZTogZml4IHJlY3Zmcm9tIDV0aCBhcmcgdHlwZSBxdWFsaWZpZXIgZGV0ZWN0aW9uIChmb2xsb3d1cCkKCi0gY29uZmlndXJlOiBmaXggcmVjdmZyb20gNXRoIGFyZyB0eXBlIHF1YWxpZmllciBkZXRlY3Rpb24KCkthbWlsIER1ZGthICg4IEp1biAyMDExKQotIGRpc2Nvbm5lY3Q6IHdpcGUgb3V0IHRoZSBrZWVwc19zcGVlZCB0aW1lIHN0YW1wCiAgCiAgV2hlbiBjbG9zaW5nIGEgY29ubmVjdGlvbiwgdGhlIHNwZWVkY2hlY2tlcidzIHRpbWVzdGFtcCBpcyBub3cgZGVsZXRlZAogIHNvIHRoYXQgaXQgY2Fubm90IGFjY2lkZW50YWxseSBiZSB1c2VkIGJ5IGEgZnJlc2ggY29ubmVjdGlvbiBvbiB0aGUgc2FtZQogIGhhbmRsZSB3aGVuIGV4YW1pbmluZyB0aGUgdHJhbnNmZXIgc3BlZWQuCiAgCiAgQnVnOiBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vNjc5NzA5CgpZYW5nIFRzZSAoNyBKdW4gMjAxMSkKLSB1cmxkYXRhOiB1c2UgdW5pZm9ybSBpbmNsdXNpb24gc3R5bGUgZm9yIE9wZW5TU0wgaGVhZGVycwoKRGFuaWVsIFN0ZW5iZXJnICg3IEp1biAyMDExKQotIEhUVFAgdGltZSBjb25kaXRpb246IGZvcmNlIGNsb3N1cmUgZm9yIDIwMCBPSwogIAogIFdoZW4gYSB0aW1lIGNvbmRpdGlvbiBpc24ndCBtZXQsIHNvIHRoYXQgbm8gYm9keSBpcyBkZWxpdmVyZWQgdG8gdGhlCiAgYXBwbGljYXRpb24gZXZlbiB0aG91Z2ggYSAyeHggcmVzcG9uc2UgaXMgYmVpbmcgcmVhZCBmcm9tIHRoZSBzZXJ2ZXIsIHdlCiAgbXVzdCBjbG9zZSB0aGUgY29ubmVjdGlvbiB0byBhdm9pZCBhIHJlLXVzZSBvZiB0aGUgY29ubmVjdGlvbiB0byBiZQogIGNvbXBsZXRlbHkgdHJpY2tlZC4KICAKICBBZGRlZCB0ZXN0IDExMjggdG8gdmVyaWZ5LgoKLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCBiNzcyZjNhMzIxNDZkN2QKCllhbmcgVHNlICg2IEp1biAyMDExKQotIGNvbmZpZ3VyZTogZ2V0IEFQSSBpbmZvIGZvciBhIGNvdXBsZSBvZiBPcGVuU1NMIGZ1bmN0aW9ucwoKRGFuaWVsIFN0ZW5iZXJnICg1IEp1biAyMDExKQotIHdhaXRfbXM6IHRha2VzIGFuIGludCBhcmd1bWVudAogIAogIFR5cGVjYXN0cyBhZGRlZCBzaW5jZSBJIGNoYW5nZWQgbW9yZSBjb2RlIHRvIHVzZSBsb25nIGZvciB0aW1lb3V0cwoKLSBDdXJsX3NvY2tldF9yZWFkeTogbWFrZSB0aW1lb3V0IGEgJ2xvbmcnCiAgCiAgSXQgd2FzIG1vc3RseSB0eXBlY2FzdGVkIHRvIGludCBhbGwgb3ZlciB0aGUgY29kZSBzbyBzd2l0Y2hpbmcgdG8gbG9uZwogIGluc3RlYWQgYWxsIG92ZXIgc2hvdWxkIGJlIGEgbmV0IGdhaW4uCgpZYW5nIFRzZSAoNCBKdW4gMjAxMSkKLSB4bGM6IGF2b2lkIHByZXByb2Nlc3NvciBkZWZpbml0aW9uIHVzYWdlIHdoZW4gbGlua2luZwoKLSB1bml0IHRlc3RzOiBkaXNhYmxlIHVuaXQgdGVzdHMgZm9yIGEgZ2l2ZW4gY3Jvc3MtY29tcGlsYXRpb24gY29uZmlndXJhdGlvbi4KICAKICBjcm9zcy1jb21waWxhdGlvbiBvZiB1bml0IHRlc3RzIHN0YXRpYyBsaWJyYXJ5L3Byb2dyYW1zIGZhaWxzIHdoZW4KICBsaWJjdXJsIHNoYXJlZCBsaWJyYXJ5IGlzIGFsc28gYnVpbHQuIFRoaXMgbWlnaHQgYmUgZHVlIHRvIGEgbGlidG9vbCBvcgogIGF1dG9tYWtlIGlzc3VlLiBJbiB0aGlzIGNhc2Ugd2UgZGlzYWJsZSB1bml0IHRlc3RzLgoKRGFuaWVsIFN0ZW5iZXJnICgzIEp1biAyMDExKQotIGNvb2tpZV9vdXRwdXQ6IG1hZGUgcHJpdmF0ZQoKLSBkaWdlc3RfY2xlYW51cF9vbmU6IG1hZGUgcHJpdmF0ZQoKLSBwcml2YXRpc2U6IG1ha2UgcHJpdmF0ZSBmdW5jdGlvbnMgc3RhdGljCgotIEN1cmxfZmlsZWluZm9fZHVwOiByZW1vdmVkLCBub3QgdXNlZAoKLSBwYXJzZWRhdGU6IHR1cm4gcHJpdmF0ZSBhbmQgc3RhdGljCiAgCiAgSSByZW1vdmVkIHRoZSBwcmVmaXggYXMgd2VsbCBhY2NvcmRpbmdseS4KCkRhbiBGYW5kcmljaCAoMiBKdW4gMjAxMSkKLSBjdXJsIGhhc24ndCBzZW50IGEgUHJhZ21hOiBoZWFkZXIgYnkgZGVmYXVsdCBmb3IgYSB3aGlsZQoKWWFuZyBUc2UgKDIgSnVuIDIwMTEpCi0gdW5pdCB0ZXN0czogYXR0ZW1wdCB0byBmaXggbGlua2FnZSBpc3N1ZQoKLSB1cmxnbG9iOiBmaXggemVybyBzaXplIG1hbGxvYwoKLSBSZW1vdmUgdW5uZWNlc3NhcnkgdHlwZWNhc3QKCi0gY29tcGlsZXIgd2FybmluZzogZml4CiAgCiAgRml4IGNvbXBpbGVyIHdhcm5pbmc6IGNhc3QgaW5jcmVhc2VzIHJlcXVpcmVkIGFsaWdubWVudAoKLSB1bml0IHRlc3RzOiBtYWtlIHVuaXQgdGVzdHMgYnVpbGRpbmcgYWN0dWFsbHkgZGVwZW5kIG9uIC0tZW5hYmxlLWRlYnVnIG9wdGlvbi4KCi0gT3BlblNTTCBlbmFibGVkOiByZXF1aXJlIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgZGVmaW5pdGlvbiBiZWZvcmUgdXNhZ2UuCgotIHVuaXQgdGVzdHM6IG1vcmUgYnVpbGQgYWRqdXN0bWVudHMKCkRhbmllbCBTdGVuYmVyZyAoMSBKdW4gMjAxMSkKLSBDVVJMT1BUX1dJTERDQVJETUFUQ0g6IG1pbm9yIHN0eWxlIGVkaXQKICAKICBEdWUgdG8gc29tZSBmbGF3IGluIHJvZmZpdCBJIHJlbW92ZWQgc29tZSBzdHlsZSBjaGFuZ2VzIHRvIG1ha2UgdGhlIHdlYgogIHBhZ2UgbG9vayBiZXR0ZXIuCgpZYW5nIFRzZSAoMSBKdW4gMjAxMSkKLSBtYWtlZmlsZTogYXZvaWQgcHJlcHJvY2Vzc29yIGRlZmluaXRpb24gdXNhZ2Ugd2hlbiBsaW5raW5nCgotIHdhcm5sZXNzOiBpY2MgOS4xIHdvcmthcm91bmQKCkRhbmllbCBTdGVuYmVyZyAoMzEgTWF5IDIwMTEpCi0gdGVzdGN1cmwucGw6IGFsbG93IGNvbmZpZ3VyZSBhcmdzIHRvIHVzZSAnPScKCllhbmcgVHNlICgzMCBNYXkgMjAxMSkKLSBNYWtlZmlsZS5hbTogZml4IHNwdXJpb3VzIENGTEFHUyBkdXBsaWNhdGlvbgoKRGFuIEZhbmRyaWNoICgzMCBNYXkgMjAxMSkKLSBSZW1vdmVkIHR5cGVzLmggZnJvbSBBbmRyb2lkIG1ha2VmaWxlCgpEYW5pZWwgU3RlbmJlcmcgKDMwIE1heSAyMDExKQotIGNvbmZpZ3VyZS5hYzogc2tpcCAvZGV2L3VyYW5kb20gY2hlY2sgd2hlbiBjcm9zcy1jb21waWxpbmcKICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTMzMDc4MzUKCllhbmcgVHNlICgyOSBNYXkgMjAxMSkKLSBtYWluOiBmaXggaGVhZGVyIGluY2x1c2lvbiBvcmRlcgogIAogIEN1cnJlbnRseSwgV2luZG93cyBjcm9zcy1jb21waWxlZCBhdXRvYnVpbGRzIHJlcXVpcmUgaW5jbHVzaW9uIG9mIHNldHVwLmgKICBiZWZvcmUgY3VybC5oIHRvIGdldCBkZWZpbml0aW9ucyBvZiBDVVJMX1NUQVRJQ0xJQiBhbmQgQlVJTERJTkdfTElCQ1VSTC4KCi0gbWFpbjogZml4IGhlYWRlciBpbmNsdXNpb24gb3JkZXIKCi0gZGlzdHJpYnV0aW9uOiBGaXggRVhUUkFfRElTVCBsZXR0ZXIgY2FzZQoKRGFuaWVsIFN0ZW5iZXJnICgyNyBNYXkgMjAxMSkKLSBjdXJsX2Vhc3lfc2V0b3B0LjM6IE5PUFJPR1JFU1MgYWxzbyBhZmZlY3RzIHRoZSBjYWxsYmFjawoKWWFuZyBUc2UgKDI3IE1heSAyMDExKQotIHdhcm5sZXNzOiBoZWFkZXIgaW5jbHVzaW9uIGZpeAoKLSBNYWtlIGNoZWNrc3JjLnBsIHdvcmsgb24gbW9yZSBvdXQtb2YtdHJlZSBidWlsZHMKICAKICBTb3VyY2UgZmlsZXMgZ2l2ZW4gd2l0aCByZWxhdGl2ZSBwYXRocyBkbyBub3QgaGF2ZSB0aGUKICAtRCBkaXJlY3Rvcnkgc3BlY2lmaWVyIHByZXBlbmRlZC4KCi0gY29tcGlsZXIgd2FybmluZzogZml4CiAgCiAgRml4IGNvbXBpbGVyIHdhcm5pbmc6IGNvbnZlcnNpb24gbWF5IGxvc2Ugc2lnbmlmaWNhbnQgYml0cwoKLSBzb2NrczogZml4IHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzCgotIGNvbXBpbGVyIHdhcm5pbmc6IGZpeAogIAogIEZpeCBjb21waWxlciB3YXJuaW5nOiB2YXJpYWJsZSB3YXMgc2V0IGJ1dCBuZXZlciB1c2VkCiAgCiAgRml4IGNvbXBpbGVyIHdhcm5pbmc6IGNsb2JiZXIgaWdub3JlZAoKLSB1bml0IHRlc3RzOiBidWlsZCBhZGp1c3RtZW50CiAgCiAgQWxzbyBkZWZpbmUgVU5JVFRFU1RTIG1hY3JvIHdoZW4gYnVpbGRpbmcgdW5pdCB0ZXN0IHNvdXJjZXMuCiAgCiAgRml4aW5nIGNvbXBpbGVyIHdhcm5pbmc6IGV4dGVybmFsIGRlZmluaXRpb24gd2l0aCBubyBwcmlvciBkZWNsYXJhdGlvbgoKRGFuaWVsIFN0ZW5iZXJnICgyNSBNYXkgMjAxMSkKLSBjcmVhdGVfY29ubjogb25seSBzd2l0Y2ggcHJvdG9jb2wgaGFuZGxlciBpZiBuZWNlc3NhcnkKICAKICBXaGVuIHN3aXRjaGluZyB0byBIVFRQIGJlY2F1c2UgYSBIVFRQIHByb3h5IGlzIGJlaW5nIHVzZWQsIHRoZSBleGlzdGluZwogIGhhbmRsZXIgaXMgbm93IGNoZWNrZWQgaWYgaXQgYWxyZWFkeSBpcyAiY29tcGF0aWJsZSIuIFRoaXMgYWxsb3dzIHRoZSBodHRwcwogIGhhbmRsZXIgcmVtYWluIHdoaWxlIG90aGVyIG5vbi1odHRwIGhhbmRsZXJzIHdpbGwgYmUgcmVkaXJlY3RlZC4KICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0wNS8wMjE0Lmh0bWwKICBSZXBvcnRlZCBieTogSmVyb21lIFJvYmVydAoKLSBzZXRvcHQuMzogcmVtb3ZlIGxlZnRvdmVyIHN0eWxlIGNoYW5nZQoKLSBzZXRvcHQuMzogQ1VSTE9QVF9XUklURUZVTkNUSU9OIGhhZCB3cm9uZyBmdW5jdGlvbiBwcm90bwoKWWFuZyBUc2UgKDI1IE1heSAyMDExKQotIGNvbXBpbGVyIHdhcm5pbmc6IGZpeCBmb2xsb3d1cAogIAogIEZpeCBjb21waWxlciB3YXJuaW5nOiB2YXJpYWJsZSB3YXMgc2V0IGJ1dCBuZXZlciB1c2VkCiAgCiAgRml4IGNvbXBpbGVyIHdhcm5pbmc6IGNsb2JiZXIgaWdub3JlZAoKLSB1bml0IHRlc3RzOiBSRUFETUUsIGFkanVzdCBoZWFkZXIgaW5jbHVzaW9uIG9yZGVyCgotIGNvbXBpbGVyIHdhcm5pbmc6IGZpeAogIAogIEZpeCBjb21waWxlciB3YXJuaW5nOiB2YXJpYWJsZSB3YXMgc2V0IGJ1dCBuZXZlciB1c2VkCiAgCiAgRml4IGNvbXBpbGVyIHdhcm5pbmc6IGNsb2JiZXIgaWdub3JlZAoKLSBjb21waWxlciB3YXJuaW5nOiBmaXgKICAKICBGaXggY29tcGlsZXIgd2FybmluZzogZXh0ZXJuYWwgZGVmaW5pdGlvbiB3aXRoIG5vIHByaW9yIGRlY2xhcmF0aW9uCgotIGNvbXBpbGVyIHdhcm5pbmc6IGZpeAogIAogIEZpeCBjb21waWxlciB3YXJuaW5nOiBleHRlcm5hbCBkZWZpbml0aW9uIHdpdGggbm8gcHJpb3IgZGVjbGFyYXRpb24KCi0gY29tcGlsZXIgd2FybmluZzogZml4CiAgCiAgRml4IGNvbXBpbGVyIHdhcm5pbmc6IGFyZ3VtZW50IGlzIGluY29tcGF0aWJsZSB3aXRoIGNvcnJlc3BvbmRpbmcgZm9ybWF0CiAgc3RyaW5nIGNvbnZlcnNpb24KCi0gYnVpbGQ6IGluY2x1c2lvbiBndWFyZAogIAogIEVuY2xvc2UgaGVhZGVyIGZpbGUgaW4gYW4gaW5jbHVzaW9uIGd1YXJkCgotIGNvbXBpbGVyIHdhcm5pbmc6IGZpeAogIAogIEZpeCBjb21waWxlciB3YXJuaW5nOiBleHByZXNzaW9uIGhhcyBubyBlZmZlY3QKCi0gY29tcGlsZXIgd2FybmluZzogZml4CiAgCiAgRml4IGNvbXBpbGVyIHdhcm5pbmc6IGBrZXljaGVjaycgbWlnaHQgYmUgdXNlZCB1bmluaXRpYWxpemVkIGluIHRoaXMgZnVuY3Rpb24uCiAgRml4IGNvbXBpbGVyIHdhcm5pbmc6IGBrZXliaXQnIG1pZ2h0IGJlIHVzZWQgdW5pbml0aWFsaXplZCBpbiB0aGlzIGZ1bmN0aW9uLgoKLSBjb21waWxlciB3YXJuaW5nOiBmaXgKICAKICBGaXggdmFyaWFibGUgZGVjbGFyYXRpb24gcGxhY2VtZW50CgotIGNvbXBpbGVyIHdhcm5pbmc6IGZpeAogIAogIEZpeCBtaXNzaW5nIHNlbWljb2xvbgoKLSBjb21waWxlciB3YXJuaW5nOiBmaXgKICAKICBGaXggY29tcGlsZXIgd2FybmluZzogZXhwcmVzc2lvbiBoYXMgbm8gZWZmZWN0CiAgCiAgRml4IE9PTSBoYW5kbGluZwoKLSBjb21waWxlciB3YXJuaW5nOiBmaXgKICAKICBGaXggY29tcGlsZXIgd2FybmluZzogZXhwcmVzc2lvbiBoYXMgbm8gZWZmZWN0CgotIGNvbXBpbGVyIHdhcm5pbmc6IGZpeAogIAogIEZpeCBjb21waWxlciB3YXJuaW5nOiB1bnVzZWQgdmFyaWFibGUgJ2RhdGEnCgotIGNvbXBpbGVyIHdhcm5pbmc6IGZpeAogIAogIEZpeCBjb21waWxlciB3YXJuaW5nOiBlbnVtZXJhdGVkIHR5cGUgbWl4ZWQgd2l0aCBhbm90aGVyIHR5cGUKCi0gY29tcGlsZXIgd2FybmluZzogZml4CiAgCiAgRml4IGNvbXBpbGVyIHdhcm5pbmc6IGVudW1lcmF0ZWQgdHlwZSBtaXhlZCB3aXRoIGFub3RoZXIgdHlwZQoKLSBjb21waWxlciB3YXJuaW5nOiBmaXgKICAKICBGaXggY29tcGlsZXIgd2FybmluZzogZW51bWVyYXRlZCB0eXBlIG1peGVkIHdpdGggYW5vdGhlciB0eXBlCgotIGNvbXBpbGVyIHdhcm5pbmc6IGZpeAogIAogIEZpeCBjb21waWxlciB3YXJuaW5nOiBlbnVtZXJhdGVkIHR5cGUgbWl4ZWQgd2l0aCBhbm90aGVyIHR5cGUKCi0gY29tcGlsZXIgd2FybmluZzogZml4CiAgCiAgRml4IGNvbXBpbGVyIHdhcm5pbmc6IGVudW1lcmF0ZWQgdHlwZSBtaXhlZCB3aXRoIGFub3RoZXIgdHlwZQoKLSBjb21waWxlciB3YXJuaW5nOiBmaXgKICAKICBGaXggY29tcGlsZXIgd2FybmluZzogZW1wdHkgYm9keSBpbiBhbiBpZi1zdGF0ZW1lbnQKCi0gdW5pdCB0ZXN0czogYWRqdXN0IGhlYWRlciBpbmNsdXNpb24gb3JkZXIKICAKICBBZGRpdGlvbmFsbHksIHByZXZlbnQgbXVsdGlwbGUgaW5jbHVzaW9ucyBvZiBjdXJsX2NvbmZpZy5oCgpEYW5pZWwgU3RlbmJlcmcgKDIwIE1heSAyMDExKQotIE1lcmdlIHB1bGwgcmVxdWVzdCAjMTkgZnJvbSBwaWVycmVqb3llL21hc3RlcgogIAogIHdpbmJ1aWxkOiB0eXBvIGluIGRvY3MKCi0gW09sYSBNb3JrIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIGN5YXNzbDogYnVpbGQgd2l0aG91dCBmaWxlc3lzdGVtCiAgCiAgR2V0IGN5YXNzbCdzIE5PX0ZJTEVTWVNURU0gdG8gd29yayB3aXRoIGxpYmN1cmwuIE90aGVyd2lzZSBJJ2QgZ2V0IGxpbmtlcgogIGVycm9ycyBmb3IgdGhlIG1pc3NpbmcgIlNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zIiBmdW5jdGlvbnMuCgpQaWVycmUgSm95ZSAoMjAgTWF5IDIwMTEpCi0gLSB0eXBvCgpEYW5pZWwgU3RlbmJlcmcgKDE5IE1heSAyMDExKQotIHR5cG86IGNsb3NlIGlzIGluIG1hbiBwYWdlIHNlY3Rpb24gMwoKWWFuZyBUc2UgKDE5IE1heSAyMDExKQotIHRlc3RzOiB2ZXJpZnkgT1BFTi9DTE9TRVNPQ0tFVEZVTkNUSU9OCiAgCiAgVGVzdCA1ODU6IEZpeCBvcGVuc29ja2V0IHJldHVybiB0eXBlLCBhbmQgYXZvaWQgZnVuY3Rpb24gbmFtZSBjbGFzaC4KCi0gdmVyc2lvbjogbGlua2FnZSBmaXgKICAKICBGaXggbGlua2FnZSBvbiBjLWFyZXMgZW5hYmxlZCBXaW5kb3dzIHN0YXRpYyBidWlsZHMKCkRhbmllbCBTdGVuYmVyZyAoMTggTWF5IDIwMTEpCi0gY3VybF9lYXN5X3NldG9wdC4zOiBkb2N1bWVudCBDTE9TRVNPQ0tFVCogb3B0aW9ucwoKLSB0ZXN0czogdmVyaWZ5IE9QRU4vQ0xPU0VTT0NLRVRGVU5DVElPTgogIAogIFRlc3QgNTg1IGFuZCA1ODYgd2VyZSBhZGRlZC4gVXNpbmcgYSBtb2RpZmllZCBsaWI1MDAuYwoKLSBzeW1ib2xzLWluLXZlcnNpb25zOiBhZGQgQ0xPU0VTT0NLRVQqCgotIENMT1NFU09DS0VURlVOQ1RJT046IHVzZSB0aGUgY2FsbGJhY2sKICAKICBGaXggdGhlIHJldHVybiB0eXBlIG9mIHRoZSBjYWxsYmFjayB0byBtYXRjaCBjbG9zZSgpIGFuZCBtYWtlIHVzZSBvZiBpdC4KCi0gQ0xPU0VTT0NLRVRGVU5DVElPTjogYWRkZWQKICAKICBJbnRyb2R1Y2VkIHRoZSBpbml0aWFsIHNldHVwIHRvIGFsbG93IGNsb3Nlc29ja2V0IGNhbGxiYWNrcyBieSBtYWtpbmcKICBzdXJlIHNjbG9zZSgpIGlzIG9ubHkgZXZlciBjYWxsZWQgZnJvbSBvbmUgcGxhY2UgaW4gdGhlIGxpYmN1cmwgc291cmNlCiAgYW5kIHN0aWxsIHJ1biBhbGwgdGVzdCBjYXNlcyBmaW5lLgoKLSBHbnVUTFMgaGFuZHNoYWtlOiBmaXggdGltZW91dAogIAogIENvbW1pdCBjYmY0OTYxYmYzZSBnYXJibGVkIHRoZSB0aW1lb3V0IGhhbmRsaW5nIHdoaWxlIGRvaW5nIFNTTAogIGhhbmRzaGFraW5nIChpbiBhbiBhdHRlbXB0IGF0IGZpeGluZyBhbm90aGVyIGJ1ZykuIFRoaXMgcHV0cyBzYW5pdHkKICBiYWNrLgogIAogIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTA1LzAxNjcuaHRtbAogIFJlcG9ydGVkIGJ5OiBFdGhhbiBHbGFzc2VyIENhbXAKCi0gY2hlY2tzcmM6IHRyYWlsaW5nIHdoaXRlc3BhY2UgZGV0ZWN0aW9uIGZpeAoKLSBbTWFyY2VsIFJvZWxvZnMgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgbmVnb3RpYXRlIHNzcGk6IGZpeCBzZXF1ZW50aWFsIHJlcXVlc3RzCgotIHRlc3RzOiBhZGRlZCBIVFRQIElmLU1vZGlmaWVkLVNpbmNlIHRlc3RzCiAgCiAgQWRkZWQgdGVzdCAxMTI2IGFuZCAxMTI3IHRvIHZlcmlmeSBjdXJsJ3MgYmVoYXZpb3VyIHdoZW4gSWYtTW9kaWZpZWQtU2luY2UKICBpcyB1c2VkIGFuZCBhIDIwMCBpcyByZXR1cm5lZC4KICAKICBUaGUgbGlzdCBvZiB0ZXN0IGNhc2VzIGluIE1ha2VmaWxlLmFtIGlzIG5vdyBzb3J0ZWQgbnVtZXJpY2FsbHkuCgotIGluY2x1ZGU6IGNsZWFudXAKICAKICBNYWRlIHRoZSBwdWJsaWMgaGVhZGVycyBjaGVja3NyYyBjb21wbGlhbnQKICAKICBSZW1vdmVkIHR5cGVzLmggKGl0J3MgYmVlbiB1bnVzZWQgc2luY2UgQXByaWwgMjAwNCkKICAKICBNYWRlIHRoZSByb290IG1ha2VmaWxlIGRvIG1ha2UgaW4gaW5jbHVkZSBieSBkZWZhdWx0IGFzIHdlbGwsIHNvIHRoYXQKICBUQUdTIGFuZCB0aGUgY2hlY2tzcmMgd2lsbCB3b3JrIGJldHRlci4KCkRhbiBGYW5kcmljaCAoNiBNYXkgMjAxMSkKLSBGaXhlZCBjb21waWxhdGlvbiB3aGVuIFJUU1AgaXMgZGlzYWJsZWQKCi0gRml4ZWQgTERBUCBhZnRlciBSVFNQIHJlYWR3cml0ZSBjaGFuZ2UKCkRhbmllbCBTdGVuYmVyZyAoNiBNYXkgMjAxMSkKLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCAzMjAwMWFjNDE0OWIyMDYKCi0gc2V0X3VzZXJwYXNzOiBjb252ZXJ0IGZyb20gcHJvdG9jb2wtc3BlY2lmaWMgdG8gZ2VuZXJpYwogIAogIFRoZSBwcm90b2NvbCBoYW5kbGVyJ3MgZmxhZ3MgZmllbGQgbm93IGNhbiBzZXQgdGhhdCB0aGUgcHJvdG9jb2wKICByZXF1aXJlcyBhIHBhc3N3b3JkLCBzbyB0aGF0IHRoZSBzZXRfdXNlcnBhc3MgZnVuY3Rpb24gZG9lc24ndCBoYXZlIHRvCiAgaGF2ZSB0aGUgc3BlY2lmaWMga25vd2xlZGdlIG9mIHdoaWNoIHByb3RvY29scyB0aGF0IGRvLgoKLSBSVFNQOiBjbGVhbnVwcwogIAogIE1hZGUgc2V2ZXJhbCBmdW5jdGlvbnMgc3RhdGljCiAgCiAgTWFkZSBvbmUgZnVuY3Rpb24gZGVmaW5lZCB0byBub3RoaW5nIHdoZW4gUlRTUCBpcyBkaXNhYmxlZCB0byBhdm9pZAogIHRoZSAjaWZkZWZzIGluIGNvZGUuCiAgCiAgUmVtb3ZlZCBleHBsaWNpdCBydHNwLmggaW5jbHVkZXMKCi0gUlRTUDogY29udmVydCBwcm90b2NvbC1zcGVjaWZpYyBjaGVja3MgdG8gZ2VuZXJpYwogIAogIEFkZCBhICdyZWFkd3JpdGUnIGZ1bmN0aW9uIHRvIHRoZSBwcm90b2NvbCBoYW5kbGVyIHN0cnVjdCBhbmQgdXNlIHRoYXQKICBmb3IgdGhlIGV4dHJhIHJlYWR3cml0ZSBmdW5jdGlvbmFsaXR5IFJUU1AgbmVlZHMuCgotIFNTTDogY2hlY2sgZm9yIFNTTCwgbm90IHNwZWNpZmljIHByb3RvY29scwogIAogIENvZGUgY2xlYW51cCB0byBjaGVjayBsZXNzIGZvciBwcm90b2NvbHMgYW5kIG1vcmUgZm9yIHRoZSBzcGVjaWZpYwogIHJlbGV2YW50IGZlYXR1cmUuIExpa2UgaWYgU1NMIGlzIHJlcXVpcmVkLgoKLSBodHRwX3BlcmhhcHNyZXdpbmQ6IHJlbW92ZSBIVFRQIGNoZWNrCiAgCiAgTm8gbmVlZCB0byBjaGVjayBmb3IgSFRUUCBhcyB0aGlzIGlzIG5vdyBhIEhUVFAtc3BlY2lmaWMgZnVuY3Rpb24KCi0gaHR0cF9wZXJoYXBzcmV3aW5kOgogIAogIG1ha2UgaXQgc3RhdGljLCByZW1vdmUgQ3VybF8gcHJlZml4CgotIHJlbW92ZSBGSUxFIHByb3RvY29sLXNwZWNpZmljIGNoZWNrcwogIAogIEFsc28sIGNvbnZlcnQgdGhlIEJBTlBST1hZIGZsYWcgaW50byBOT05FVFdPUksgZm9yIHRoZSBwcm90b2NvbHMKICAoZmlsZTovLyBvbmx5IGF0bSkgdGhhdCBkb24ndCB3b3JrIG92ZXIgbmV0d29ya3MuCgotIGN1cmwuMTogLS1zb2Nrcyogb3B0aW9ucyBubyBsb25nZXIgbmVlZGVkCiAgCiAgQXMgd2Ugbm93IGNhbiBzcGVjaWZ5IGFsbCB0aGUgc29ja3MgcHJveHkgdHlwZXMgd2l0aCB0aGUgcmVndWxhciAtLXByb3h5CiAgb3B0aW9uIHVzaW5nIHByb3RvY29sIHByZWZpeC4KCi0gc29ja3MgcHJveHk6IGFsbG93IHNvY2tzNWg6Ly8gcHJlZml4IHRvbwogIAogIFVzaW5nICdzb2NrczVoJyBhcyBwcm94eSBwcm90b2NvbCB3aWxsIG1ha2UgaXQgYQogIENVUkxQUk9YWV9TT0NLUzVfSE9TVE5BTUUgcHJveHkgd2hpY2ggaXMgU09DS1M1IGFuZCBhc2tpbmcgdGhlIHByb3h5IHRvCiAgcmVzb2x2ZSBob3N0IG5hbWVzLiBJIGZvdW5kIG5vICJzdGFuZGFyZCIgcHJvdG9jb2wgbmFtZSBmb3IgdGhpcy4KCi0gY3VybC4xOiBtaW5vciBlZGl0IG9mIC0tZnRwLXNzbCoKCi0gW0phcmkgQWFsdG8gYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgY3VybC4xOiB1c2UgR05VIHN0eWxlIGFuZCBzb3J0IG9wdGlvbnMKICAKICBGb2xsb3cgc3R5bGUgb2YgR05VIGxheW91dCAoY3AsIG12IC4uLikgd2hlcmUgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIHdpdGgKICBjb21tYTogLW8sIC0tb3B0aW9uCiAgCiAgT3JkZXIgaXRlbSBhbHBoYWJldGljYWxseSAoYnkgbGVuZ3RoIGFsc28pOiAtbywgLU8sIC0tb3B0aW9uCiAgCiAgRm9sbG93IHN0eWxlIG9mIEdOVSBsYXlvdXQgYnkgbW92aW5nIGhlbHAgcmVsYXRlZCBvcHRpb25zIHRvIHRoZSBlbmQ6CiAgLS1oZWxwLCAtTSwgLS12ZXJzaW9uCgotIENvcnJlY3RlZCBjb21tZW50cwogIAogIGNsb3NlcG9saWN5IGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIHVudXNlZCBmb3IgeWVhcnMKCi0gQ29ubmVjdGlvblN0b3JlOiByZW1vdmUgdW51c2VkIHJldHVybiBjb2RlCgotIGluZGVudCBjb3JyZWN0bHkKCi0gY3VybF9lYXN5X2dldGluZm8uMzogY2xhcmlmeSBzb21lIHRpbWluZyBpbmZvCgotIGN1cmxfZWFzeV9zZXRvcHQuMzogY2xhcmlmeSB0aGUgU1NIIEtFWUZJTEUgb3B0aW9ucyB1c2FnZQogIAogIFRoZSBpbnRlcm5hbCBkZWZhdWx0cyBhcmUgaW1wb3J0YW50IGluZm8KCi0gZG9jczogbWVudGlvbiB0aGUgcHJvdG9jb2w6Ly8gc3VwcG9ydCBpbiBwcm94eSBzdHJpbmdzCgotIC0tZGF0YS1hc2NpaTogYWRkIG1lbnRpb24KICAKICBBcyBpdCBpcyBhIHNlcGFyYXRlIG9wdGlvbiBpdCBzaG91bGQgaGF2ZSBhIC5JUCB0aXRsZQoKLSB1cmwgZW5jb2RlIGRvY3M6IG1lbnRpb24gJy0nLCAnLicsICdfJyBhbmQgJ34nCiAgCiAgQ2xhcmlmeSB0aGF0IHRoZSAnLScsICcuJywgJ18nIG9yICd+JyBsZXR0ZXJzIGFyZSBhbHNvIG5vdCBlc2NhcGVkIHNpbmNlCiAgdGhleSBzaG91bGRuJ3QgYWNjb3JkaW5nIHRvIFJGQzM5ODYgc2VjdGlvbiAyLjMuCiAgCiAgVGhpcyBpcyBob3cgdGhpcyBmdW5jdGlvbiBoYXMgYmVoYXZlZCBzaW5jZSBzZXAgMjAxMCwgY29tbWl0CiAgNWRmMTNjMzE3MzVmYTAuCgotIFNTSDogc2V0IG5vbi1ibG9ja2luZyBlYXJsaWVyCiAgCiAgSW50cm9kdWNlIGFuIElOSVQgc3RhdGUgZm9yIHRoZSBTU0ggc3RhdGUgbWFjaGluZSBhbmQgc2V0IGxpYnNzaDIKICBub24tYmxvY2tpbmcgaW4gdGhhdCBzbyB0aGF0IGl0IGlzIHNldCBwcm9wZXJseSBiZWZvcmUKICBsaWJzc2gyX3Nlc3Npb25fc3RhcnR1cCgpIGlzIGNhbGxlZC4KICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9hcmNoaXZlLTIwMTEtMDUvMDAwMS5odG1sCgotIGN1cmxfZm9ybWZyZWUuMzogbWVudGlvbiBhcmd1bWVudCBtYXkgYmUgTlVMTAogIAogIEFzIHRoZSBjb2RlIGFscmVhZHkgY2hlY2tzIGZvciBpdCB3ZSBjYW4ganVzdCBhcyB3ZWxsIG1ha2UgaXQgb2ZmaWNpYWwhCgotIENvbm5lY3Rpb25FeGlzdHM6IGF2b2lkIE5VTEwgZGVyZWZlcmVuY2UKICAKICBXaGVuIGNoZWNraW5nIGZvciBjb25uZWN0aW9ucyB0aGF0IGFyZSBib3VuZCB0byBhIHBhcnRpY3VsYXIgZGV2aWNlIHdlCiAgbXVzdCBtYWtlIHN1cmUgd2UgZG9uJ3QgY29tcGFyZSB3aXRoIGEgTlVMTCBwb2ludGVyLgoKLSByZXNvbHZlcl9lcnJvcjogcmVtb3ZlIGJhZCBzZW1pY29sb24KCi0gUkVMRUFTRS1OT1RFUzogc3luY2VkIHdpdGggYzRiYzFkNDczZjMyNAoKLSBhbnlhdXRocHV0LmM6IHN0ZGludC5oIG11c3Qgbm90IGJlIGluY2x1ZGVkIHVuY29uZGl0aW9uYWxseQogIAogIEFzIGl0IGlzIGFscmVhZHkgaW5jbHVkZWQgYnkgY3VybGJ1aWxkLmggaWYgaXQgZXhpc3RzIG9uIHRoZSBwbGF0Zm9ybSBpdAogIHdhcyBpbmNsdWRlZCBoZXJlIHN1cGVyZmx1b3VzbHkgYW55d2F5LgogIAogIFJlcG9ydGVkIGJ5OiBEYWdvYmVydCBNaWNoZWxzZW4KICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTMyOTQ1MDkKCi0gZ2FpX3N0cmVycm9yOiBwcm92aWRlIHByaXZhdGUgaW1wbGVtZW50YXRpb24KICAKICBUaGVyZSBhcmUgc3lzdGVtcyAobGlrZSBOZXRXYXJlKSB3aXRob3V0IGl0cyBvd24gZ2FpX3N0cmVycm9yKCkKICBmdW5jdGlvbi4KCi0gdHJlYWRlZC1yZXNvbHZlcjogYmV0dGVyIGVycm9yIG1lc3NhZ2VzCiAgCiAgTm93IHVzZSBnYWlfc3RyZXJyb3IoKSB0byBnZXQgcHJvcGVyIGVycm9yIG1lc3NhZ2VzIHdoZW4gZ2V0YWRkcmluZm8oKQogIGhhcyBmYWlsZWQuIERldGVjdCB0aGUgZnVuY3Rpb24gaW4gY29uZmlndXJlLgogIAogIENvZGUgYmFzZWQgb24gd29yayBhbmQgc3VnZ2VzdGlvbnMgYnkgSmVmZiBQb2hsbWV5ZXIgYW5kIEd1ZW50ZXIgS25hdWYKCi0gcHJveHk6IGFsbG93IHNvY2tzOi8vIHByZWZpeCBpbiBwcm94eSBzdHJpbmcKICAKICBJbnNwaXJlZCBieSBhIHBhdGNoIGZyb20gT0IuQ29uc2VpbC4gQWRkZWQgdGVzdCBjYXNlIDcwOCB0byB2ZXJpZnkuCgotIFtabWV5IFBldHJvZmYgYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgQ01ha2U6IGltcHJvdmUgbGlicmFyeSBzZWFyY2gsIGltcGxlbWVudCBpbnN0YWxsLgogIAogIEltcHJvdmVkIGxpYnJhcnkgc2VhcmNoIGJ5IGNoZWNrX2Z1bmN0aW9uX2V4aXN0c19jb25jYXQoKSBtYWNybzoKICBpdCBkb2VzIG5vdCByZXZlcnQgdGhlIGxpc3Qgb2YgbGlicmFyaWVzIGFueSBtb3JlLgogIAogIEltcHJvdmVkIE9wZW5TU0wgbGlicmFyeSBzZWFyY2g6IGZpcnN0IGZpbmQgemxpYiwgdGhlbiBzZWFyY2ggZm9yCiAgb3BlbnNzbCBsaWJyYXJpZXMgdGhhdCBtYXkgZGVwZW5kIG9uIHpsaWIuCiAgCiAgRm9yIFVuaXg6IG9wZW5zc2wgbGlicmFyaWVzIGNhbiBub3cgYmUgZGV0ZWN0ZWQgaW4gbm9uc3RhbmRhcmQKICBsb2NhdGlvbnMuIFN1cHBseSBDTUFLRV9MSUJSQVJZX1BBVEggdG8gQ01ha2Ugb24gY29tbWFuZCBsaW5lLgogIAogIEFkZGVkIGluc3RhbGxhdGlvbiBjYXBhYmlsaXR5ICh2ZXJ5IGJhc2ljIG9uZSB5ZXQpLgoKLSBtdWx0aS1zb2NrczogZml4IGNvbm5lY3QgdG8gcHJveHkKICAKICBXaGVuIGNvbm5lY3RpbmcgdG8gYSBzb2NrcyBvciBzaW1pbGFyIHByb3h5IHdlIGRvIHRoZSBwcm94eSBoYW5kc2hha2UgYXQKICBvbmNlIHdoZW4gd2Uga25vdyB0aGUgVENQIGNvbm5lY3QgaXMgY29tcGxldGVkIGFuZCB3ZSBvbmx5IGNvbnNpZGVyIHRoZQogICJjb25uZWN0aW9uIiBjb21wbGV0ZSBhZnRlciB0aGUgcHJveHkgaGFuZHNoYWtlLiBUaGlzIGZpeGVzIHRlc3QgNTY0CiAgd2hpY2ggaXMgbm93IG5vIGxvbmdlciBjb25zaWRlcmVkIGRpc2FibGVkLgogIAogIFJlcG9ydGVkIGJ5OiBEbWl0cmkgU2h1YmluCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMDQvMDEyNy5odG1sCgotIGNsZWFudXA6IHJlbW92ZSBvbGQgdW51c2VkIGRlYnVnIGNvZGUKCkRhbiBGYW5kcmljaCAoMjcgQXByIDIwMTEpCi0gTWFrZSBjaGVja3NyYy5wbCB3b3JrIG9uIG91dC1vZi10cmVlIGJ1aWxkcwogIAogIFNvdXJjZSBmaWxlcyBnaXZlbiB3aXRoIGFic29sdXRlIHBhdGhzIGRvIG5vdCBoYXZlIHRoZQogIC1EIGRpcmVjdG9yeSBzcGVjaWZpZXIgcHJlcGVuZGVkLgoKRGFuaWVsIFN0ZW5iZXJnICgyNyBBcHIgMjAxMSkKLSBtYWtlOiBhZGQgY2hlY2tzcmMucGwgdG8gZGlzdAoKLSBtYWtlOiBhZGQgJ2NoZWNrc3JjJyBhcyB0YXJnZXQgdG8gY2hlY2sgY29kZSBzdHlsZQogIAogIFRoZSBtYWtlIHRhcmdldCBjaGVja3NyYyBub3cgd29ya3MgaW4gdGhlIHJvb3QgbWFrZWZpbGUgYW5kIGluIGJvdGggdGhlCiAgc3JjIGFuZCBsaWIgZGlyZWN0b3JpZXMuCiAgCiAgSXQgaXMgYWxzbyBydW4gYXV0b21hdGljYWxseSBvbiAiYWxsIiBpZiBjb25maWd1cmUgLS1lbmFibGUtZGVidWcgd2FzCiAgdXNlZC4KCi0gY2hlY2tzcmM6IHdoaXRlc3BhY2UgYW5kIGNvZGUgc3R5bGUgY2xlYW51cAogIAogIE1ha2UgZXZlcnl0aGluZyBhZGhlcmUgdG8gdGhlIHN0YW5kYXJkcyB1cGhlbGQgYnkgY2hlY2tzcmMucGwgYW5kIG5vdwogIHJ1biBjaGVja3NyYyBmcm9tIHRoZSBtYWtlZmlsZSBvbiBkZWJ1ZyBidWlsZHMuCgotIGNoZWNrc3JjOiBhZGQgLVcgdG8gYWxsb3cgYSBmaWxlIHRvIGJlIHdoaXRlbGlzdGVkCiAgCiAgVXNlZnVsIHdoZW4gYSBrbm93biBmaWxlIGp1c3QgZG9lc24ndCBjb21wbHkgYW5kIHRoZXJlJ3Mgbm8gaW50ZW50aW9uIHRvCiAgbWFrZSBpdCBkbyBzby4KCi0gd2hpdGVzcGFjZSBjbGVhbnVwOiBubyBzcGFjZSBmaXJzdCBpbiBjb25kaXRpb25hbHMKICAKICAiaWYoYSkiIGlzIG91ciBzdHlsZSwgbm90ICJpZiggYSApIgoKLSBsaWIvbWFrZTogcnVuIGNoZWNrc3JjLnBsIG9uY2UgZm9yIGFsbCBmaWxlcwogIAogIFNpbmNlIGl0IG5vdyBzdXBwb3J0cyBtdWx0aXBsZSBmaWxlcyB0aGlzIHdpbGwgYmUgZmFzdGVyIGFuZCB3aWxsIHNob3cKICBwcm9ibGVtcyBmb3IgbW9yZSBmaWxlIHRoYW4gb25lIGF0IGEgdGltZSAtIG1vcmUgY29udmVuaWVudC4KCi0gY2hlY2tzcmM6IHNjYW4gbWFueSBmaWxlcywgbW9yZSBjaGVja3MKICAKICBJdCBub3cgc2NhbnMgbXVsdGlwbGUgZmlsZXMgYW5kIG91dHB1dHMgYW4gZXJyb3Ird2FybmluZyBjb3VudCBzdW1tYXJ5CiAgYXQgdGhlIGVuZCBpbiBjYXNlIGF0IGxlYXN0IG9uZSB3YXMgZGV0ZWN0ZWQuCiAgCiAgLUQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBpbiB3aGljaCBkaXIgdGhlIGZpbGVzIGFyZSBsb2NhdGVkCiAgCiAgVGhlIHNjcmlwdCBub3cgc2NhbnMgZm9yIGNvbmRpdGlvbnMgdGhhdCBzdGFydHMgd2l0aCBhIHNwYWNlIGZvcgogIGlmL3doaWxlL2ZvciBsaW5lcy4KCi0gTWFrZWZpbGU6IHJ1biBjaGVja3NyYyBpZiBkZWJ1ZyBlbmFibGVkCiAgCiAgQW5kIG1ha2UgdGhlIGJ1aWxkIGZhaWwgaWYgYSB3YXJuaW5nIG9yIGVycm9yIHdhcyBkZXRlY3RlZAoKLSBjaGVja3NyYzogZXhpdCBlcnJvciBjb2RlIGlmIHdhcm5pbmdzIG9yIGVycm9ycwoKLSBTU0g6IG1vdmUga25vd25ob3N0IGxvZ2ljIHRvIHNlcGFyYXRlIGZ1bmN0aW9uCgotIHNvdXJjZSBjbGVhbnVwOiB1bmlmeSBsb29rLCBzdHlsZSBhbmQgaW5kZW50IGxldmVscwogIAogIEJ5IHRoZSB1c2Ugb2YgYSB0aGUgbmV3IGxpYi9jaGVja3NyYy5wbCBzY3JpcHQgdGhhdCBjaGVja3MgdGhhdCBvdXIKICBiYXNpYyBzb3VyY2Ugc3R5bGUgcnVsZXMgYXJlIGZvbGxvd2VkLgoKR3VlbnRlciBLbmF1ZiAoMjcgQXByIDIwMTEpCi0gV2luZG93cyBuYXRpdmUgSUROIGZpeGVzLgogIAogIEZvciBub3cgcHJvdmlkZSBwcm90b3R5cGVzIGluc3RlYWQgb2YgaW5jbHVkaW5nIHRoZQogIG5vbi1zdGFuZGFyZCBub3JtYWxpc2F0aW9uLmggd2hpY2ggaXMgb25seSBhdmFpbGFibGUgaW4gdGhlCiAgIkludGVybmF0aW9uYWxpemVkIERvbWFpbiBOYW1lcyBNaXRpZ2F0aW9uIEFQSXMiIGRvd25sb2FkLgoKRGFuIEZhbmRyaWNoICgyNSBBcHIgMjAxMSkKLSBGaXhlZCBjb21waWxlciB3YXJuaW5nIGluIFdpbmRvd3MgU1NQSSBjYXNlCgotIEZpeGVkIGNvbXBpbGF0aW9uIHdoZW4gdGhlIHN5bmNocm9ub3VzIHJlc29sdmVyIGlzIHVzZWQKCi0gQWRkZWQgbmV3IHJlc29sdmVyIHNvdXJjZXMgdG8gU3ltYmlhbiBhbmQgVkM2IGJ1aWxkIGZpbGVzCgpEYW5pZWwgU3RlbmJlcmcgKDI1IEFwciAyMDExKQotIGhvc3RpcDogY29tbWVudCBmaXhlZCB0byBzdGF0ZSBjdXJyZW50IHNpdHVhdGlvbgoKLSBhc3luYyByZXNvbHZlcnM6IGZ1cnRoZXIgY2xlYW51cHMKICAKICBhc3luLWFyZXMuYyBhbmQgYXN5bi10aHJlYWQuYyBhcmUgdHdvIHNlcGFyYXRlIGJhY2tlbmRzIHRoYXQgaW1wbGVtZW50CiAgdGhlIHNhbWUgKGludGVybmFsKSBhc3luYyByZXNvbHZlciBBUEkgZm9yIGxpYmN1cmwgdG8gdXNlLiBCYWNrZW5kIGlzCiAgc3BlY2lmaWVkIGF0IGJ1aWxkIHRpbWUuCiAgCiAgVGhlIGludGVybmFsIHJlc29sdmVyIEFQSSBpcyBkZWZpbmVkIGluIGFzeW4uaCBmb3IgYXN5bmNoIHJlc29sdmVycy4KCi0gYXN5bmNoIHJlc29sdmVyczogY2xlYW51cAogIAogIEZpeGVkIGluZGVudHMsIGNvZGluZyBjb252ZW50aW9ucyBhbmQgd2hpdGUgc3BhY2UgZWRpdHMuCiAgCiAgTW9kaWZpZWQgdGhlIGMtYXJlcyBjb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGFnYWluIE5PVCByZWFkIHRoZQogIGNvbm4gZGF0YSB3aGVuIHRoZSBhcmVzIGhhbmRsZSBpcyBiZWluZyB0YWtlbiBkb3duIGFzIHRoZW4gaXQgbWF5IGhhdmUKICBiZWVuIGZyZWVkIGFscmVhZHkuCgotIFtWc2V2b2xvZCBOb3Zpa292IGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIGFzeW5jaCByZXNvbHZlcnM6IHVuaWZpZWQKICAKICBJbnRyb2R1Y2luZyBhbiBpbnRlcm5hbCBBUEkgZm9yIGhhbmRsaW5nIG9mIGRpZmZlcmVudCBhc3luYyByZXNvbHZlcgogIGJhY2tlbmRzLgoKR3VlbnRlciBLbmF1ZiAoMjQgQXByIDIwMTEpCi0gRW5hYmxlZCBPcGVuV2F0Y29tIG5hdGl2ZSBXaW5kb3dzIElETiBidWlsZC4KICAKICBGb3Igbm93IHdlIGRpcmVjdGx5IGltcG9ydCB0aGUgSWRuKiBzeW1ib2xzIHdpdGggdGhlIGxpbmtlcjsKICBhbiB1cGNvbWluZyByZWxlYXNlIG9mIE9XQyB3aWxsIGhhdmUgdGhlc2UgYWRkZWQgdG8gdGhlIGltcG9ydAogIGxpYiBub3JtYWxpei5saWIsIGFuZCBwcm90b3R5cGVzIGFyZSBhZGRlZCB0byB3aW5ubmxzLmguCgpEYW5pZWwgU3RlbmJlcmcgKDIyIEFwciAyMDExKQotIE5UTE06IHdvcmsgd2l0aCB1bmljb2RlCiAgCiAgUmV3cml0dGVuIGNvZGUgZnJvbSBhIHBhdGNoIGJyb3VnaHQgYnkgTWF0dGVvIFJvY2NvLgoKLSBidW1wIHZlcnNpb246IHdvcmsgdG93YXJkcyA3LjIxLjcKCi0gVEhBTktTOiBjb250cmlidXRvcnMgZnJvbSA3LjIxLjYKClZlcnNpb24gNy4yMS42ICgyMiBBcHIgMjAxMSkKCkRhbmllbCBTdGVuYmVyZyAoMjIgQXByIDIwMTEpCi0gUkVMRUFTRS1OT1RFUzogdHdvIG1vcmUgY29udHJpYnV0b3JzCgpEYW4gRmFuZHJpY2ggKDIxIEFwciAyMDExKQotIEZpeGVkIHRlc3QgMTAyMyB3aGVuIHVzaW5nIGRhaWx5IHNuYXBzaG90cwoKLSBJbmNsdWRlIHVuaXN0ZC5oIHRvIGRlY2xhcmUgY2xvc2UoKQoKSnVsaWVuIENoYWZmcmFpeCAoMjEgQXByIDIwMTEpCi0gW0ZhYmlhbiBLZWlsIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIEluIGxpYi8sIGNoYW5nZSAnd2FubmEnIHRvICd3YW50IHRvJy4KICAKICBGb3VuZCB3aXRoIGNvZGVzcGVsbC4KCi0gW0ZhYmlhbiBLZWlsIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIEZpeCBzcGVsbGluZyBlcnJvcnMgaW4gYnVpbGRjb25mCiAgCiAgRm91bmQgd2l0aCBjb2Rlc3BlbGwuCgotIFtGYWJpYW4gS2VpbCBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBGaXggc3BlbGxpbmcgZXJyb3JzIGluIHNyYy8KICAKICBGb3VuZCB3aXRoIGNvZGVzcGVsbC4KCi0gW0ZhYmlhbiBLZWlsIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIEZpeCBzcGVsbGluZyBlcnJvcnMgaW4gaW5jbHVkZS8KCi0gW0ZhYmlhbiBLZWlsIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIEZpeCBhIGNvdXBsZSBvZiBzcGVsbGluZyBlcnJvcnMgaW4gbGliLwogIAogIEZvdW5kIHdpdGggY29kZXNwZWxsLgoKLSB0cmFuc2Zlci5jOiBGaXhlZCBpbmRlbnRhdGlvbiBpbiByZWFkd3JpdGVfZGF0YS4KCkRhbiBGYW5kcmljaCAoMjAgQXByIDIwMTEpCi0gRml4ZWQgY2xvc2luZyB0ZXN0IHRhZwoKRGFuaWVsIFN0ZW5iZXJnICgyMCBBcHIgMjAxMSkKLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCAzMjQyYWJkODdhMTI2MgoKLSBTRlRQOiBjbG9zZSBmaWxlIGJlZm9yZSBwb3N0cXVvdGUKICAKICBNYWtlIHN1cmUgdGhhdCBmaWxlcyBhcmUgY2xvc2VkIGJlZm9yZSB0aGUgcG9zdCBxdW90ZSBjb21tYW5kcyBydW4gYXMgaWYKICB0aGV5IG9wZXJhdGUgb24gdGhlIGp1c3QgdHJhbnNmZXJyZWQgZmlsZSB0aGV5IGNvdWxkIG90aGVyd2lzZSBlYXNpbHkKICBmYWlsLgogIAogIFBhdGNoIGJ5OiBSYWplc2ggTmFnYW5hdGhhbiAoZWRpdGVkKQoKRGFuIEZhbmRyaWNoICgyMCBBcHIgMjAxMSkKLSBGaXhlZCB0ZXN0IDEwMjIgd2hlbiB1c2luZyBkYWlseSBzbmFwc2hvdHMKCkRhbmllbCBTdGVuYmVyZyAoMjAgQXByIDIwMTEpCi0gQ3VybF9odHRwX2Nvbm5lY3Q6IGRldGVjdCBIVFRQUyBwcm9wZXJseSBhZnRlciBDT05ORUNUCiAgCiAgbGliY3VybCBmYWlsZWQgdG8gY2hlY2sgdGhlIGNvcnJlY3Qgc3RydWN0IGZvciBIVFRQUyBhZnRlciBDT05ORUNUIHdhcwogIGlzc3VlZCB0byB0aGUgcHJveHksIHNvIGl0IGRpZG4ndCBkbyB0aGUgVExTIGhhbmRzaGFrZSBhbmQgc3Vic2VxdWVudGx5CiAgZmFpbGVkIHRoZSBjb25uZWN0aW9uLiBBIHJlZ3Jlc3Npb24gcmVsZWFzZWQgaW4gNy4yMS41IChpbnRyb2R1Y2VkCiAgYXJvdW5kIGNvbW1pdCA4ODMxMDAwYmMwN2RlKS4KICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAxMS0wNC8wMTM0Lmh0bWwKICBSZXBvcnRlZCBieTogSm9zdWUgQW5kcmFkZSBHb21lcwoKLSBjdXJsX2Vhc3lfc2V0b3B0LjM6IENVUkxPUFRfUFJPWFlUWVBFIGNsYXJpZmljYXRpb24KICAKICBXaGVuIHNldCB0byBhIEhUVFAgMS4wIHByb3h5LCB0aGF0IG9ubHkgYWZmZWN0cyB0aGUgQ09OTkVDVCByZXF1ZXN0IGFuZAogIG5vdCB0aGUgcmVndWxhciBIVFRQIHJlcXVlc3QuCgotIFtHaXNsZSBWYW5lbSBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBDVVJMX0RPRVNfQ09OVkVSU0lPTlM6IGZpeGVzCiAgCiAgTWFkZSBpdCBjb21waWxlIGFuZCB3b3JrIGFnYWluIGFmdGVyIHRoZSBjb2RlIG1vdmUuCgotIENVUkxfRE9FU19DT05WRVJTSU9OUzogY2xlYW51cAogIAogIE1hc3NpdmVseSByZWR1Y2UgI2lmZGVmcyBhbGwgb3ZlciAoMjMgI2lmZGVmIGxpbmVzIGxlc3Mgc28gZmFyKQogIE1vdmVkIGNvbnZlcnNpb24tc3BlY2lmaWMgY29kZSB0byBub24tYXNjaWkuYwoKR3VlbnRlciBLbmF1ZiAoMTkgQXByIDIwMTEpCi0gSW1wcm92ZSBNaW5HVyBzdGF0aWMgbWFrZWZpbGUgYnVpbGRzLgogIAogIEl0IGlzIG5vdyBwb3NzaWJsZSB0byB1c2UgYW55IGNvbWJpbmF0aW9uIG9mIGZlYXR1cmVzIHdpdGhvdXQKICBoYXZpbmcgdG8gMXN0IGFkZCBtYWtlZmlsZSB0YXJnZXRzIHRvIHRoZSBtYWluIG1ha2VmaWxlLiBUaGUKICBtYWluIG1ha2VmaWxlIG5vdyBwYXNzZXMgdGhlICdtaW5ndzMyLWZlYXQxLWZlYXQyJyBhcyB2YXIgQ0ZHLAogIGFuZCB0aGUgLi9bbGlifHNyY10vTWFrZWZpbGUubTMyIHBhcnNlcyB0aGUgQ0ZHIHZhciB0byBkZXRlcm1pbmUKICB0aGUgZmVhdHVyZXMgdG8gYmUgZW5hYmxlZC4KCi0gRW5hYmxlZCBNaW5HVyBuYXRpdmUgV2luZG93cyBJRE4gYnVpbGQuCgotIFdpbmRvd3MgbmF0aXZlIElETiBmaXhlcy4KICAKICBjaGFuZ2VkIHdpbmRvd3MuaCBpbmNsdWRlIHRvIHN5c3RlbSBoZWFkZXI7CiAgY2hhbmdlZCBvYnNvbGV0ZSAybmQgY2hlY2sgZm9yIHN0cl93IHRvIHN0cl91dGY4IGluIG9yZGVyIHRvIGNhdGNoCiAgbWFsbG9jKCkgZmFpbHVyZSBhbmQgYXZvaWQgYSBmcmVlKE5VTEwpOwogIGNoYW5nZWQgY2FsbHMgdG8gR2V0TGFzdEVycm9yKCkgdG8gdm9pZCB0byBraWxsIHVuc3VzZWQgdmFyIGNvbXBpbGVyCiAgd2FybmluZ3M7CiAgbW92ZWQgb25lIGNhbGwgdG8gR2V0TGFzdEVycm9yKCkgaW50byBlbHNlIGNhc2Ugc28gdGhhdCBpdHMgb25seQogIGNhbGxlZCB3aGVuIFdpZGVDaGFyVG9NdWx0aUJ5dGUoKSByZWFsbHkgZmFpbHMuCgotIFdpbmRvd3MgbmF0aXZlIElETiBmaXhlcy4KICAKICBQcm92aWRlIHByb3RvdHlwZSBmb3IgY3VybF93aW4zMl9pZG5fdG9fYXNjaWkoKTsKICByZW1vdmUgd3JvbmcgM3JkIHBhcmFtZXRlciBmcm9tIGN1cmxfd2luMzJfaWRuX3RvX2FzY2lpKCkgY2FsbC4KCkRhbmllbCBTdGVuYmVyZyAoMTkgQXByIDIwMTEpCi0gY3VybC1jb25maWc6IGZpeCB2ZXJzaW9uIG91dHB1dAogIAogIGRvIHRoZSBzL1ZFUlNJT04vQ1VSTFZFUlNJT04gcmVwbGFjZW1lbnQgZm9yIHRoZSBodW1hbiByZWRhYmxlIG91dHB1dAogIGZvciAtLWNoZWNrZm9yCiAgCiAgUmVwb3J0ZWQgYnk6IFJ5YW4gU2NobWlkdAoKLSBSRUxFQVNFLU5PVEVTOiBzeW5jZWQgd2l0aCA1YWFlM2MxM2UyCgpHdWVudGVyIEtuYXVmICgxOSBBcHIgMjAxMSkKLSBVcGRhdGVkIGRlZmF1bHQgKHJlY29tbWVuZGVkKSBkZXBlbmRlbmN5IHZlcnNpb25zLgoKLSBVcGRhdGVkIGRlZmF1bHQgKHJlY29tbWVuZGVkKSBkZXBlbmRlbmN5IHZlcnNpb25zLgoKRGFuaWVsIFN0ZW5iZXJnICgxOCBBcHIgMjAxMSkKLSB0cmFuc2Zlci1lbmNvZGluZzogZG9jdW1lbnQgdGhlIG9wdGlvbnMKICAKICBUaGUgbmV3IGxpYmN1cmwgYW5kIGNvbW1hbmQgbGluZSBvcHRpb25zIGFyZSBub3cgZGVzY3JpYmVkLgoKLSB0cmFuc2Zlci1lbmNvZGluZzogYWRkZWQgbmV3IG9wdGlvbiBhbmQgY21kbGluZQogIAogIEFkZGVkIENVUkxPUFRfVFJBTlNGRVJfRU5DT0RJTkcgYXMgdGhlIG9wdGlvbiB0byBzZXQgdG8gcmVxdWVzdCBUcmFuc2ZlcgogIEVuY29kaW5nIGluIEhUVFAgcmVxdWVzdHMgKGlmIGJ1aWx0IHpsaWIgZW5hYmxlZCkuIEkgYWxzbyByZW5hbWVkCiAgQ1VSTE9QVF9FTkNPRElORyB0byBDVVJMT1BUX0FDQ0VQVF9FTkNPRElORyAod2hpbGUga2VlcGluZyB0aGUgb2xkIG5hbWUKICBhcm91bmQpIHRvIHJlZHVjZSB0aGUgY29uZnVzaW9uIHdoZW4gd2UgaGF2ZSB0byBlbmNvZGluZyBvcHRpb25zIGZvcgogIEhUVFAuCiAgCiAgLS10ci1lbmNvZGluZyBpcyBub3cgdGhlIG5ldyBjb21tYW5kIGxpbmUgb3B0aW9uIGZvciBjdXJsIHRvIHJlcXVlc3QKICB0aGlzLCBhbmQgdGh1cyBJIHVwZGF0ZWQgdGhlIHRlc3QgY2FzZXMgYWNjb3JkaW5nbHkuCgotIENVUkxFX0JBRF9DT05URU5UX0VOQ09ESU5HOiBub3cgdXNlZCBmb3IgdHJhbnNmZXIgZW5jb2RpbmcgdG9vCgotIFRFOiBkbyB0aGUgQ29ubmVjdGlvbjogaGVhZGVyCiAgCiAgV2hlbiBURTogaXMgaW5zZXJ0ZWQgaW4gdGhlIHJlcXVlc3QsIHdlIG11c3QgYWRkIGEgIkNvbm5lY3Rpb246IFRFIiBhcwogIHdlbGwgdG8gYmUgSFRUUCAxLjEgY29tcGxpYW50LiBJZiBhIGN1c3RvbSBDb25uZWN0aW9uOiBoZWFkZXIgaXMgcGFzc2VkCiAgaW4sIHdlIG11c3QgdXNlIHRoYXQgYW5kIG9ubHkgYXBwZW5kIFRFIHRvIGl0LiBUZXN0IGNhc2UgMTEyNSB2ZXJpZmllcwogIFRFOiArIGN1c3RvbSBDb25uZWN0aW9uOi4KCi0gdGVzdDExMjQ6IHZlcmlmeSBnemlwIEFORCBjaHVua2VkIHRyYW5zZmVyLWVuY29kaW5nCgotIFRFOiByZW5hbWUgc3RydWN0IGZpZWxkIGNvbnRlbnRfZW5jb2RpbmcKICAKICBTaW5jZSB0aGlzIHN0cnVjdCBtZW1iZXIgaXMgdXNlZCBpbiB0aGUgY29kZSB0byBkZXRlcm1pbmUgd2hhdCBhbmQgaG93CiAgdG8gZGVjb2RlIGF1dG9tYXRpY2FsbHkgYW5kIHNpbmNlIGl0IGlzIG5vdyBhbHNvIHVzZWQgZm9yIGNvbXByZXNzZWQKICBUcmFuc2Zlci1FbmNvZGluZ3MsIEkgcmVuYW1lZCBpdCB0byB0aGUgbW9yZSBzdWl0YWJsZSAnYXV0b19kZWNvZGluZycKCi0gSFRUUDogYWRkIHN1cHBvcnQgZm9yIGd6aXAgYW5kIGRlZmxhdGUgVHJhbnNmZXItRW5jb2RpbmcKICAKICBUcmFuc2Zlci1FbmNvZGluZyBkaWZmZXJzIGZyb20gQ29udGVudC1FbmNvZGluZyBpbiBhIGZldyBzdWJ0bGUgd2F5cywKICBidXQgcHJpbWFyaWx5IGl0IGNvbmNlcm5zIHRoZSB0cmFuc2ZlciBvbmx5IGFuZCBub3QgdGhlIGNvbnRlbnQgc28gd2hlbgogIGRpc2NvdmVyZWQgdG8gYmUgY29tcHJlc3NlZCB3ZSBrbm93IHdlIGhhdmUgdG8gdW5jb21wcmVzcyBpdC4gVGhlcmUgd2lsbAogIG9ubHkgYXJyaXZlIGNvbXByZXNzZWQgdHJhbnNmZXJzIGluIGEgcmVzcG9uc2UgYWZ0ZXIgd2UgaGF2ZSByZXF1ZXN0ZWQKICB0aGVtIHdpdGggdGhlIGFwcHJvcHJpYXRlIFRFOiBoZWFkZXIuCiAgCiAgVGVzdCBjYXNlIDExMjIgYW5kIDExMjMgdmVyaWZ5LgoKUGF0cmljayBNb25uZXJhdCAoMTggQXByIDIwMTEpCi0gT1M0MDAgcHJhZ21hIGNvbW1lbnQ6IHJlcGxhY2UgKGRhdGUpIGJ5ICh1c2VyLCBfX0RBVEVfXykgdG8gaW5jbHVkZSB5ZWFyLgoKLSBBdWdtZW50IFJQRyBiaW5kaW5nIHdpdGggIk9MRElFUyIgZGVmaW5pdGlvbnMuCiAgRml4IE9TNDAwIExEQVAgd3JhcHBlcnM6IHN0cmluZ3Mgd2VyZSBub24gbnVsbC10ZXJtaW5hdGVkLgoKRGFuaWVsIFN0ZW5iZXJnICgxOCBBcHIgMjAxMSkKLSBjdXJsLWNvbmZpZzogZml4IC0tdmVyc2lvbgogIAogIGN1cmwtY29uZmlnIC0tdmVyc2lvbiBkaWRuJ3Qgb3V0cHV0IHRoZSBjb3JyZWN0IHZlcnNpb24gc3RyaW5nIChidWcKICBpbnRyb2R1Y2VkIGluIGNvbW1pdCAwMzU1ZTMzYjVmN2IyMzRjZjMpLCBhbmQgdW5mb3J0dW5hdGVseSB0aGUgdGVzdAogIGNhc2UgMTAyMiB0aGF0IHdhcyBzdXBwb3NlZCB0byBjaGVjayBmb3IgdGhpcyB3YXMgYnJva2VuLgogIAogIFRoaXMgY2hhbmdlIGZpeGVzIHRoZSB0ZXN0IHRvIGRldGVjdCB0aGlzIHByb2JsZW0gYW5kIGl0IGZpeGVzIHRoZQogIG91dHB1dC4KICAKICBCdWc6IGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTMyODg3MjcKCi0gUkVMRUFTRS1OT1RFUzogdXBkYXRlZCBjb250cmlidXRvciBhbW91bnQKCi0gVEhBTktTOiAxMSBuZXcgY29udHJpYnV0b3JzIGZyb20gNy4yMS41CgotIDcuMjEuNjogbmV4dCBwbGFubmVkIHJlbGVhc2UgbnVtYmVyCgpWZXJzaW9uIDcuMjEuNSAoMTcgQXByIDIwMTEpCgpEYW5pZWwgU3RlbmJlcmcgKDE3IEFwciAyMDExKQotIGJhc2U2NC5jOiByZW1vdmVkIHdyb25nIGNvbW1lbnQKCi0gSU5URVJOQUxTOiBjbGVhbiB1cAogIAogIENsYXJpZmllZCB0aGUgcmVsZWFzZSBwcm9jZWR1cmUKCi0gVE9ETy1SRUxFQVNFOiBwdXNoIHRoZSByZW1haW5pbmcgb25lcyB0byBuZXh0IHJlbGVhc2UKICAKICBBcyB3ZSdyZSBjbG9zaW5nIGluIG9uIHRoZSByZWxlYXNlLCBJIGdpdmUgdXAgb24gdGhlIHJlbWFpbmluZyBvbmVzIGJ1dAogIEkgbGVhdmUgdGhlbSBpbiBoZXJlIGZvciBub3cgdG8gdHJ5IHRvIGZpeCBmb3IgbmV4dCByZWxlYXNlLgogIAogIEkgcmVtb3ZlZCB0aGUgMjgxIGlzc3VlIGFib3V0IHdhcm5pbmdzIGZyb20gdGhlIHN0YXRpY2FsIGFuYWx5emVyIHNjYW5zLAogIGFzIHRoZXkgc2VlbSB0byBiZSBtb3N0bHkgZmFsc2UgcG9zaXRpdmVzIGF0IHRoaXMgcG9pbnQuCgotIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIGMyNDZmNjNhNzEKCi0gQ3VybF9zc2xfc2h1dGRvd246IHJlc3RvcmUgc2VuZC9yZWN2IHBvaW50ZXJzCiAgCiAgV2hlbiBnb2luZyBiYWNrIGZyb20gU1NMLCBwdXQgdGhlIHNlbmQvcmVjdiBmdW5jdGlvbiBwb2ludGVycyBiYWNrIHRvCiAgdGhlIHBsYWluIHZlcnNpb25zLgogIAogIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDExLTA0LzAwNzAuaHRtbAogIFJlcG9ydGVkIGJ5OiBNZWhtZXQgQm96a3VydAoKR3VlbnRlciBLbmF1ZiAoMTYgQXByIDIwMTEpCi0gQ2hhbmdlZCBlbWFpbCBwZXIgR2lzbGUncyByZXF1ZXN0LgoKRGFuaWVsIFN0ZW5iZXJnICgxNCBBcHIgMjAxMSkKLSBjdXJsLjE6IGVycm9yIGNvZGUgdXBkYXRlCiAgCiAgRXJyb3IgNCBoYXMgZ290IGEgbWVhbmluZwogIAogIEVycm9yIDQ4IGhhcyBnb3QgYSBzbGlnaHRseSBkaWZmZXJlbnQgbWVhbmluZyBub3cKCi0gRkFROiBjLWFyZXMgZG9lcyBpcHY2IHByZXR0eSB3ZWxsIG5vdwoKLSBbQW5kcmVpIEJlbmVhIGJyb3VnaHQgdGhpcyBjaGFuZ2VdCgogIEZpeCBhIGJ1ZmZlciBvdmVyZmxvdyBpbiBwdWJrZXlfc2hvdygpLgoKR3VlbnRlciBLbmF1ZiAoMTQgQXByIDIwMTEpCi0gUmVwbGFjZWQgdmFyIG1hbmlwdWxhdGlvbnMgd2l0aCBwZXJsaXNoIGhhY2tzLgoKRGFuIEZhbmRyaWNoICgxMiBBcHIgMjAxMSkKLSBVcGRhdGVkIG1pbmltdW0gYmluYXJ5IHNpemVzCgpEYW5pZWwgU3RlbmJlcmcgKDEyIEFwciAyMDExKQotIGNvbmZpZ3VyZTogbGlic3NoMiBsaW5rIGZpeCB3aXRob3V0IHBrZy1jb25maWcKICAKICBUaGUgc2NyaXB0IGRpZG4ndCBwcm9wZXJseSBhZGQgdGhlIC1sc3NoMiBsaW5rIG9wdGlvbiB3aGVuIGl0IGVuYWJsZWQKICBsaWJzc2gyIGxpbmtpbmcgd2hlcmUgcGtnLWNvbmZpZyBpc24ndCBmb3VuZC4KICAKICBSZXBvcnRlZCBieTogU2FxaWIgQWxpCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMTEtMDQvMDA1NC5odG1sCgotIFJFTEVBU0UtTk9URVM6IHN5bmNlZCB3aXRoIGYwMWRmMTk3OTgxCgotIGNoZWNrY29ubmVjdGlvbjogZG9uJ3QgY2FsbCB3aXRoIE5VTEwgcG9pbnRlcgogIAogIFdoZW4gY2hlY2tpbmcgaWYgYW4gZXhpc3RpbmcgUlRTUCBjb25uZWN0aW9uIGlzIGFsaXZlIG9yIG5vdCwgdGhlCiAgY2hlY2tjb25uZWN0aW9uIGZ1bmN0aW9uIG1pZ2h0IGJlIGNhbGxlZCB3aXRoIGEgU2Vzc2lvbkhhbmRsZSBwb2ludGVyCiAgYmVpbmcgTlVMTCBhbmQgdGhlbiByZWZlcmVuY2VkIGNhdXNpbmcgYSBjcmFzaC4gVGhpcyBoYXBwZW5lZCBvbmx5IHVzaW5nCiAgdGhlIG11bHRpIGludGVyZmFjZS4KICAKICBSZXBvcnRlZCBieTogVGludXMgdmFuIGRlbiBCZXJnCiAgCiAgQnVnOiBodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0zMjgwNzM5CgotIGN1cmwuMTogc3BlbGwgb3V0IHRoZSAtTyB0YXJnZXQgZGlyZWN0b3J5CiAgCiAgV2hlbiB1c2luZyAtTyB0aGUgZmlsZSB3aWxsIGJlIHNhdmVkIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgYW5kIHRoaXMKICBpcyBub3cgc3BlbGxlZCBvdXQgY2xlYXJseS4KCi0gT3BlblNTTDogbm8tc3NsdjIgYXdhcmUKICAKICBBbGxvdyBvcGVuU1NMIHdpdGhvdXQgU1NMMiB0byBiZSB1c2VkLiBUaGlzIGZpeCBpcyBpbnNwaXJlZCBieSB0aGUgZml4CiAgcHJvdmlkZWQgYnkgQ3Jpc3RpYW4gUm9kcu1ndWV6LgogIAogIFJlcG9ydGVkIGJ5OiBDcmlzdGlhbiBSb2Ry7Wd1ZXoKCi0gY3VybF9lYXN5X3NldG9wdC4zOiBDVVJMT1BUX1JFU09MVkUgdHlwbyB2ZXJzaW9uCiAgCiAgUmVwb3J0ZWQgYnk6IEhvbmdsaSBMYWkKCkthbWlsIER1ZGthICg4IEFwciAyMDExKQotIG5zczogYWxsb3cgdG8gdXNlIG11bHRpcGxlIGNsaWVudCBjZXJ0aWZpY2F0ZXMgZm9yIGEgc2luZ2xlIGhvc3QKICAKICBJbiBjYXNlIGEgY2xpZW50IGNlcnRpZmljYXRlIGlzIHVzZWQsIGludmFsaWRhdGUgU1NMIHNlc3Npb24gY2FjaGUKICBhdCB0aGUgZW5kIG9mIGEgc2Vzc2lvbi4gIFRoaXMgZm9yY2VzIE5TUyB0byBhc2sgZm9yIGEgbmV3IGNsaWVudAogIGNlcnRpZmljYXRlIHdoZW4gY29ubmVjdGluZyBzZWNvbmQgdGltZSB0byB0aGUgc2FtZSBob3N0LgogIAogIEJ1ZzogaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tLzY4OTAzMQoKRGFuaWVsIFN0ZW5iZXJnICg3IEFwciAyMDExKQotIG1rLWNhLWJ1bmRsZS5wbDogc2hvdyBmdWxsIFVSTCBpbiBvdXRwdXQKICAKICBXaGVuIEkgZGVjaWRlZCB0byBzZWFyY2ggZm9yIGEgcG90ZW50aWFsIGVycm9yIHdpdGggdGhlIGNhY2VydCBidW5kbGUgaXQKICBzdHJ1Y2sgbWUgSSB3YW50ZWQgdG8gc2VlIHRoZSBmdWxsIHNvdXJjZSBVUkwgaW4gdGhlIG91dHB1dC4uLgoKRGFuIEZhbmRyaWNoICg3IEFwciAyMDExKQotIEFkZGVkIG1lbnRpb24gb2YgRlRQIHByb3hpZXMKCkRhbmllbCBTdGVuYmVyZyAoNyBBcHIgMjAxMSkKLSBbR2lzbGUgVmFuZW0gYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgc3JjL01ha2VmaWxlLmIzMjogdXBkYXRlcwogIAogICogUmVuYW1lIHRoZSBvYmplY3Qgb2JqZWN0IGRpcmVjdG9yeSBmcm9tICdvYmpzJyB0byAnQkNDX29iaicgdG8gYmUgaW4KICAgc3luYyB3aXRoIG15IHByZXZpb3VzIHBhdGNoIGZvciBsaWIvTWFrZWZpbGUuYjMyLgogIAogICogVHVybiBvZmYgdGhlc2Ugd2FybmluZ3MgdG8ga2VlcCB0aGUgYnVpbGQgdG90YWxseSBzaWxlbnQgKHdpdGggQ0J1aWxkZXItNgogICB0aGF0IGlzKS4KICAgIC13LWlubCAgICA4MDI2IEZ1bmN0aW9ucyBYIGFyZSBub3QgZXhwYW5kZWQgaW5saW5lLgogICAgLXctcGlhICAgODA2MCBQb3NzaWJseSBpbmNvcnJlY3QgYXNzaWdubWVudAogICAgLXctcGluICA4MDYxIEluaXRpYWxpemF0aW9uIGlzIG9ubHkgcGFydGlhbGx5IGJyYWNrZXRlZAogICAoc2FtZSBhZGRlZCBpbiBzcmMvTWFrZWZpbGUuYjMyKQogIAogICogJChNS0RJUikgYW5kICQoUk1ESVIpIGhhdmUgYmVlbiByZXBsYWNlZCB3aXRoIHRoZSBzaGVsbC1jb21tYW5kcyAnbWQnCiAgIGFuZCAncmQnLiBXaGVuIGhhdmluZyBNaW5nVy9Nc3lzIHByb2dyYW1zICdta2Rpci5leGUnIGFuZCAncm1kaXIuZXhlJyBpbgogICRQQVRILCB0aGlzIGNvbmZ1c2VzIEJvcmxhbmQncyBtYWtlIGFuZCB0aGUgcmVzdWx0ICh0aGUgY2xlYW5pbmcgZXRjLikgd291bGQKICAgbm90IGJlIGFzIGV4cGVjdGVkLgogIAogICogUmVtb3ZlZCB0aGUgcHJlcHJvY2Vzc2luZyBzdGVwOyBubyBuZWVkIGZvciBQUF9DTUQgYW5kIHRoZSAuaW50IGZpbGVzLgogICBjdXJsLmV4ZSBidWlsZHMgZmluZSB3L28gYW5kIHRoZSBtYWtlZmlsZSBnZXRzIHNpbXBsZXIuCiAgCiAgKiBBZGRlZCBhIHRhcmdldCBmb3IgY3JlYXRpbmcgYSBjb21wcmVzc2VkIGh1Z2VoZWxwLmMgaWYgV0lUSF9aTElCIGlzICBkZWZpbmVkLgogIEl0IGFzc3VtZXMgZ3JvZmYsIGd6aXAgYW5kIHBlcmwgaXMgYXZhaWxhYmxlIGlmIHN1Y2ggYW4gImFkdmFuY2VkIiAgdXNlcnMKICByZXF1ZXN0cyBpdC4gT2theT8gQlRXLiBNeSBncm9mZiBhbmQgUGVybCBuZWVkcyB1bml4LXNsYXNoZXMgKCcvJykuCiAgIE90aGVyIHBlcmxzIHNob3VsZCBoYW5kbGUgYm90aCBmb3JtcyAoJy8nIGFuZCAnXCcpLgoKLSBbR2lzbGUgVmFuZW0gYnJvdWdodCB0aGlzIGNoYW5nZV0KCiAgbGliL01ha2VmaWxlLmIzMjogdXBkYXRlcwogIAogICogUmVuYW1lIHRoZSBvYmplY3Qgb2JqZWN0IGRpcmVjdG9yeSBmcm9tICdvYmpzJyB0byAnQkNDX29iaicuIEkgZmVlbAogICBpdCBzaG91bGQgYmUgbmFtZWQgcHJvcGVybHkuIFJlZi4gTWFrZWZpbGUuV2F0Y29tIHdoZXJlIGl0J3MgY2FsbGVkCiAgICdXQ19XaW4zMi5vYmonLgogIAogICogVHVybiBvZmYgdGhlc2Ugd2FybmluZ3MgdG8ga2VlcCB0aGUgYnVpbGQgdG90YWxseSBzaWxlbnQgKHdpdGggQ0J1aWxkZXItNgogICB0aGF0IGlzKS4KICAgIC13LWlubCAgICA4MDI2IEZ1bmN0aW9ucyBYIGFyZSBub3QgZXhwYW5kZWQgaW5saW5lLgogICAgLXctcGlhICAgODA2MCBQb3NzaWJseSBpbmNvcnJlY3QgYXNzaWdubWVudAogICAgLXctcGluICA4MDYxIEluaXRpYWxpemF0aW9uIGlzIG9ubHkgcGFydGlhbGx5IGJyYWNrZXRlZAogIAogIEknbSBzdXJlIHRoZSB3YXJuaW5ncyBjb3VsZCBiZSBmaXhlZCB0aGUgInByb3BlciIgd2F5IG9yIHdpdGggc29tZSBhZGRlZAogICIjcHJhZ21hIiBzdGF0ZW1lbnRzLiBCdXQgdGhhdCBqdXN0IGNsdXR0ZXJzIHRoZSBzb3VyY2VzIElNSE8uCiAgCiAgKiAkKE1LRElSKSBhbmQgJChSTURJUikgaGF2ZSBiZWVuIHJlcGxhY2VkIHdpdGggdGhlIHNoZWxsLWNvbW1hbmRzICdtZCcKICAgYW5kICdyZCcuIFdoZW4gaGF2aW5nIE1pbmdXL01zeXMgcHJvZ3JhbXMgJ21rZGlyLmV4ZScgYW5kICdybWRpci5leGUnIGluCiAgJFBBVEgsIHRoaXMgY29uZnVzZXMgQm9ybGFuZCdzIG1ha2UgYW5kIHRoZSByZXN1bHQgKHRoZSBjbGVhbmluZyBldGMuKSB3b3VsZAogICBub3QgYmUgYXMgZXhwZWN0ZWQuCiAgCiAgKiBBZGRlZCBhICIucGF0aC5pbnQgPSAkKE9CSkRJUikiIHRvIHRlbGwgbWFrZSB3aGVyZSB0aGUgJChQUkVQUk9DRVNTRUQpCiAgIGZpbGVzIGFyZS4gV2h5IHdlIG5lZWQgdGhlIHByZXByb2Nlc3Mgc3RlcCBpbiB0aGUgZmlzdCBwbGFjZSBpcyBiZXlvbmQgbWUKICAoWWFuZz8pLiBCdXQgSSdsbCBsZWF2ZSB0aGF0IGZvciBub3cuCgotIFtHaXNsZSBWYW5lbSBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBleGFtcGxlcy9tYWtlZmlsZS5kajogdXBkYXRlIGVtYWlsCgotIFRPRE8tUkVMRUFTRTogZGVsZXRlZCA0IGlzc3VlcwogIAogIFRoZXNlIHByb2JsZW1zIGhhdmUgZ290dGVuIG5vIGludGVyZXN0L2ZlZWRiYWNrIGZyb20gdXNlcnM6CiAgCiAgLTI3NSAtIEludHJvZHVjZSBhIHdheSB0byBhdm9pZCBzZW5kaW5nIFVTRVIgZm9yIEZUUCBjb25uZWN0aW9ucwogIC0yODggLSBidWcgMzIxOTk5NyBjdXJsIHJ0bXAgcmVxdWVzdCBjdXJsOiAoNTUpIHNlbGVjdC9wb2xsIHJldHVybmVkIGVycm9yCiAgCiAgVGhpcyBwcm9ibGVtIGlzIHJhdGhlciBhbiBhdXRvY29uZiBidWcgd2l0aCBsaXR0bGUgdXNlciBpbnRlcmVzdCBhbmQgaXQKICBjYW4gYmUgd29ya2VkIGFyb3VuZCB3aXRoIGFuIG9sZGVyIGF1dG9jb25mOgogIAogIC0yNzggLSAiQ29uZmlndXJlICAkYXNfZWNobyBkb2VzIG5vdCB3b3JrIgogIAogIFRoaXMgcHJvYmxlbSBpcyBub3QgZml4ZWQ6CiAgCiAgLTI4NiAtIGJ1ZyAzMjE0MjIzIFBpcGVsaW5lZCBIVFRQIHJlcXVlc3RzIHdpdGggYSB6ZXJvLWxlbmd0aCBib2R5IGJyb2tlbgoKLSBbQ2hyaXMgU21vd3RvbiBicm91Z2h0IHRoaXMgY2hhbmdlXQoKICBIVFRQIHBpcGVsaW5pbmc6IEZpeCBoYW5kbGluZyBvZiB6ZXJvLWxlbmd0aCByZXNwb25zZXMKICAKICBBbHNvIGFkZCB0ZXN0IGNhc2UgNTg0IGZvciB0aGUgc2FtZQogIAogIEJ1ZzogaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MzIxNDIyMwoKLSBsaWJjdXJsLnBjOiB2ZXJzaW9uIG51bWJlciBmaXgKICAKICBUaGlzIGhhc24ndCBzaG93IHRoZSB2ZXJzaW9uIG51bWJlciBjb3JyZWN0bHkgc2luY2UgdGhlICRWRVJTSU9OIGNoYW5nZQogIGluIHRoZSBjb25maWd1cmUsIGFuZCBub3cgaXQgd29ya3MgYWdhaW4uCgpEYW4gRmFuZHJpY2ggKDUgQXByIDIwMTEpCi0gQ2hhbmdlZCBzb21lIG5vbnBvcnRhYmxlIHR5cGVzCgotIERvbid0IGxpc3QgTlRMTSBpbiBjdXJsLWNvbmZpZyB3aGVuIEhUVFAgaXMgZGlzYWJsZWQKICAKICBBbHNvLCBmaXhlZCBDdXJsX3Byb3h5Q09OTkVDVCgpIHN0dWIgd2l0aCBIVFRQIGRpc2FibGVkLgo=