LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgTWF5ICA4IDE4OjM5OjA1IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiB0b29scy93aW5lY29uZi5saWJzL2F1dG9jb25mLmVuZywgdG9vbHMvd2luZWNvbmYubGlicy9hdXRvY29uZi50Y2wsIHRvb2xzL3dpbmVjb25mLmxpYnMvYnJvd3NlcnMuZW5nLCB0b29scy93aW5lY29uZi5saWJzL2RpcmJyb3dzZXIudGNsLCB0b29scy93aW5lY29uZi5saWJzL2dlbmVyYWwuZW5nLCB0b29scy93aW5lY29uZi5saWJzL2dldGZpbGVuYW1lLnRjbCwgdG9vbHMvd2luZWNvbmYubGlicy9tZXNzYWdlLnRjbCwgdG9vbHMvd2luZWNvbmYubGlicy9tZXNzYWdlMi50Y2wsIHRvb2xzL3dpbmVjb25mLmxpYnMvc2F2ZVJDLnRjbCwgdG9vbHMvd2luZWNvbmYubGlicy93aW5lLWhhbGYuZ2lmLCB0b29scy93aW5lY29uZi5saWJzL3dpbmVjb25mLmVuZywgdG9vbHMvd2luZWNvbmYubGlicy93aW5lY29uZi50Y2wsIHRvb2xzL3dpbmVjb25mLmxpYnMvd2luZWNvbmYxLnRjbCwgdG9vbHMvd2luZWNvbmYudGNsOgoJSmVhbi1Mb3VpcyBUaGlyb3QgPHRoaXJvdEB1bml2LWJyZXN0LmZyPgoJQWRkZWQgZ3JhcGhpY2FsIGNvbmZpZ3VyYXRpb24gdG9vbCB3aW5lY29uZi50Y2wuCgoJKiB3aW4zMi9jb25zb2xlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJSWdub3JlIEVTQ1slZGMgcmVwb3J0cyBnZW5lcmF0ZWQgYnkgOGJpdCBjb250cm9sIGNvZGVzLgoJT3BlbiBjb25zb2xlIGV2ZW4gaWYgd2UgYWxyZWFkeSBoYXZlIG9uZSBpbiB0aGUgcHJvY2Vzcy4KCgkqIGZpbGVzL3Byb2ZpbGUuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglGaXhlZCBvZmYgYnkgMSBlcnJvciBpbiBzZWN0aW9uIGNvZGUgKGRpZCBub3QgcmV0dXJuIGxlbi0yIG9uIGJ1ZmZlcgoJb3ZlcmZsb3cgaW4gc29tZSBjYXNlcywgYnV0IGxlbi0xKS4KCgkqIGRsbHMvY29tY3RsMzIvcHJvcHNoZWV0LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRml4ZWQgd2FybmluZy4KCgkqIGdyYXBoaWNzL3gxMWRydi9wYWxldHRlLmM6IFBhdmVsIFJvc2tpbiA8cGF2ZWxfcm9za2luQGdlb2NpdGllcy5jb20+CglGaXhlZCBwYWxldHRlIGhhbmRsaW5nIGZvciB0cnVlL2hpZ2gtY29sb3IgWDExLgoKCSogbG9hZGVyL25lL21vZHVsZS5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJRml4ZWQgZXh0ZW5zaW9uIGhhbmRsaW5nIGluIExvYWRMaWJyYXJ5MTYuCgoJKiB3aW5kb3dzL2RjZS5jLCB3aW5kb3dzL3BhaW50aW5nLmMsIHdpbmRvd3Mvd2luLmMsIHdpbmRvd3Mvd2lucG9zLmMsIHdpbmRvd3MveDExZHJ2L2V2ZW50LmMsIGluY2x1ZGUvd2luLmgsIG9iamVjdHMvcmVnaW9uLmM6CglBbGV4IEtvcm9ia2EgPGFsZXhAYWlrZWEuYW1zLnN1bnlzYi5lZHU+CglSZWFycmFuZ2VkIFBBSU5UX1JlZHJhd1dpbmRvdygpIHNvIHRoYXQgaXQgZmlyc3QgcmVjdXJzaXZlbHkgdXBkYXRlcwoJaW52YWxpZCByZWdpb25zIGFuZCBvbmx5IHRoZW4gc3RhcnRzIHNlbmRpbmcgb3V0IG1lc3NhZ2VzLiBUaGlzIHNob3VsZAoJaGVscCB3aXRoIHJlZW50cmFuY3kgZHVyaW5nIG1lc3NhZ2UgcHJvY2Vzc2luZyBhbmQgbm93IGl0IG5lZWRzIGp1c3QKCW9uZSAob3Igbm9uZSkgc2NyYXRjaCByZWdpb24gZm9yIGFsbCB0aGVyZSBpcyB0byBkby4gQWxzbywgc21hbGwgZml4ZXMKCWZvciBTZXRXaW5kb3dQb3MoKS4KCgkqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOiBBZGRlZCBjaGVjayBmb3IgbWlzc2luZyBfX2kzODZfXyBkZWZpbml0aW9uLgoKCSogaW5jbHVkZS9jb25maWcuaC5pbiwgc2NoZWR1bGVyL2NsaWVudC5jLCBzZXJ2ZXIvc29ja2V0LmMsIHNlcnZlci90cmFjZS5jLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgdG9vbHMvd3JjL3BhcnNlci55LCBvbGUvZGF0YWNhY2hlLmMsIG9sZS9kZWZhdWx0aGFuZGxlci5jLCBvbGUvaGdsb2JhbHN0cmVhbS5jLCBvbGUvbWVtbG9ja2J5dGVzLmMsIHNjaGVkdWxlci9zeXNkZXBzLmMsIHRvb2xzL2J1aWxkLmMsIG1pc2Mvd3NwcmludGYuYywgbWlzY2VtdS9pbnN0ci5jLCBtc2Rvcy9pb3BvcnRzLmMsIGlmMTYzMi9zbm9vcC5jLCBpbmNsdWRlL3NlcnZlci5oLCBpbmNsdWRlL3N0YWNrZnJhbWUuaCwgaXBjL2JpdF9hcnJheS5jLCBjb250cm9scy9lZGl0LmMsIGNvbnRyb2xzL21lbnUuYywgZGVidWdnZXIvZGJnLnksIGdyYXBoaWNzL3gxMWRydi94Zm9udC5jOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglBTlNJIEMgZml4ZXMuCgoJKiBkbGxzL2NvbWN0bDMyL3Byb3BzaGVldC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVBhc3MgUFJPUFNIRUVUUEFHRSB0byBwcm9wZXJ0eXBhZ2UgZGlhbG9nIGFzIGxQYXJhbS4KCgkqIG1pc2Mvd2luc29jay5jLCBtdWx0aW1lZGlhL2Rzb3VuZC5jLCBvYmplY3RzL2JydXNoLmMsIG9iamVjdHMvZW5obWV0YWZpbGUuYywgaXBjL2RkZV9hdG9tLmMsIGlwYy9nZW5lcmljX2hhc2guYywgaXBjL3NobV9ibG9jay5jLCBpcGMvc2htX21haW5fYmxrLmMsIGlwYy9zaG1fc2VtYXBoLmMsIGxvYWRlci9kb3MvZG9zbW9kLmMsIGxvYWRlci9zaWduYWwuYywgbWVtb3J5L2xkdC5jLCBncmFwaGljcy9wc2Rydi9pbml0LmMsIGluY2x1ZGUvZHBsYXkuaCwgaW5jbHVkZS9kcGxvYmJ5LmgsIGluY2x1ZGUvaGVhcC5oLCBpbmNsdWRlL21ldGFmaWxlLmgsIGluY2x1ZGUvbW1zeXN0ZW0uaCwgaW5jbHVkZS9wc2Rydi5oLCBpbmNsdWRlL3NoZWxsYXBpLmgsIGluY2x1ZGUvc2lnX2NvbnRleHQuaCwgaW5jbHVkZS93aW5zb2NrLmgsIGRsbHMvbnRkbGwvdGltZS5jLCBkbGxzL3NoZWxsMzIvZm9sZGVycy5jLCBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmMsIGdyYXBoaWNzL2RkcmF3LmMsIGdyYXBoaWNzL2RkcmF3X3ByaXZhdGUuaCwgZ3JhcGhpY3MvZGlzcGRpYi5jLCBkbGxzL2NvbWN0bDMyL3BhZ2VyLmMsIGRsbHMvY29tY3RsMzIvcmViYXIuYywgZGxscy9jb21jdGwzMi9zdGF0dXMuYywgZGxscy9jb21jdGwzMi90b29sYmFyLmMsIGRsbHMvY29tY3RsMzIvdG9vbHRpcHMuYywgZGxscy9jb21jdGwzMi90cmVldmlldy5jLCBkbGxzL2NvbW1kbGcvZm9udGRsZy5jLCBkZWJ1Z2dlci9tc2MuYywgZGxscy9jb21jdGwzMi9jb21ib2V4LmMsIGRsbHMvY29tY3RsMzIvaGVhZGVyLmMsIGRsbHMvY29tY3RsMzIvaG90a2V5LmMsIGRsbHMvY29tY3RsMzIvbGlzdHZpZXcuYzoKCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJQU5TSSBDIGZpeGVzLgoKCSogd2luZG93cy9jYXJldC5jLCBpbmNsdWRlL3dpbmUvd2luZ2RpMTYuaCwgaW5jbHVkZS93aW5lL3dpbnVzZXIxNi5oLCBtaXNjL3ByaW50ZHJ2LmMsIG9iamVjdHMvZm9udC5jLCBvYmplY3RzL2xpbmVkZGEuYywgb2JqZWN0cy9yZWdpb24uYywgZ3JhcGhpY3Mvd2luMTZkcnYvZm9udC5jLCBpbmNsdWRlL2dkaS5oLCBpbmNsdWRlL3dpbmRlZi5oLCBpbmNsdWRlL3dpbmdkaS5oLCBpbmNsdWRlL3dpbnVzZXIuaCwgZ3JhcGhpY3MvcHNkcnYvZm9udC5jOgoJSHV3IEQgTSBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94LmFjLnVrPgoJU3BsaXQgb2ZmIHdpbmdkaTE2LmggZnJvbSB3aW5nZGkuaC4gIEFkZCBtYW55IG1vcmUgI2RlZmluZXMvdHlwZWRlZnMKCXRvIGJyaW5nIHdpbmdkaS5oIGFsbW9zdCB1cHRvIGEgY29tcGxldGUgTlQ0LjAgaW50ZXJmYWNlLgoJRml4IHJldHVybiB2YWx1ZSBvZiBTZXRSZWN0UmduKCkuCgoJKiB3aW5kb3dzL2Rpc3BsYXkuYywgd2luZG93cy9mb2N1cy5jLCB3aW5kb3dzL25vbmNsaWVudC5jLCB3aW5kb3dzL3R0eWRydi9tb3VzZS5jLCB3aW5kb3dzL3dpbi5jLCB3aW5kb3dzL3dpbnBvcy5jLCBpbmNsdWRlL3R0eWRydi5oLCBpbmNsdWRlL3dpbnBvcy5oOgoJTWljaGFlbCBWZWtzbGVyIDxtdmVrc2xlckB0ZWNodW5peC50ZWNobmlvbi5hYy5pbD4KCVJlbW92ZWQgI2luY2x1ZGUgIndpbmUvd2ludXNlcjE2LmgiIGFuZCB1c2UgInN0cnVjdCB0YWc/Pz8/IiBpbnN0ZWFkLgoKCSogZGVidWdnZXIvc3RhY2suYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglJbXByb3ZlZCBXaW5lIGRlYnVnZ2VyIGJhY2t0cmFjZS4gTmV3IGZlYXR1cmVzOgoJLSBEaXNwbGF5cyBlYnAsIGluIGNhc2UgeW91IHdhbnQgdG8gY2hlY2sgc3RhY2tmcmFtZXMgbWFudWFsbHkKCS0gRGV0ZWN0cyBmYXIgY2FsbHMgZXZlbiB3aGVuIHdpbmRvd3MgYXBwcyBkb24ndCBtYXJrIHRoZW0KCS0gVHJhY2tzIENhbGxGcm9tMTYvQ2FsbFRvMTYgcmVsYXlpbmcgKHRodW5raW5nKQoKCSogbG9hZGVyL2VsZmRsbC5jOiBVbHJpY2ggQ3pla2FsbGEgPHVscmljaGNAY29yZWwuY2E+CglCdWdmaXg6IGdldF9zb2Jhc2VuYW1lIHdhcyBvZmYgYnkgb25lIHBvaW50ZXIgaW5jcmVtZW50LgoKCSogbXVsdGltZWRpYS9pbml0LmM6IEtldmluIEhvbGJyb29rIDxrd2hAbmVvc29mdC5jb20+CglGaXhlZCBpbXBsaWNpdCB0eXBlIHdhcm5pbmcuCgoJKiBjb250cm9scy9saXN0Ym94LmM6IEdlcmFyZCBQYXRlbCA8Zy5wYXRlbEB3YW5hZG9vLmZyPgoJVmFsdWVzIHJldHVybmVkIGZyb20gUHRJblJlY3QgYW5kIExCX0lURU1GUk9NUE9JTlQgYXJlIHJldmVyc2VkLgoKCSogb2xlL2RhdGFjYWNoZS5jLCBvbGUvZGVmYXVsdGhhbmRsZXIuYywgb2xlL29sZTIuYywgb2xlL29sZTJzdHVicy5jLCBvbGUvb2xlb2JqLmM6CglGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglTZWNvbmQgcGFydCBvZiB0aGUgT0xFIGRhdGFjYWNoZSBpbXBsZW1lbnRhdGlvbi4KCgkqIG1zZG9zL01ha2VmaWxlLmluLCBtc2Rvcy9kZXZpY2VzLmMsIG1zZG9zL2Rvc21lbS5jLCBtc2Rvcy9pbnQyMS5jLCBpbmNsdWRlL2Rvc2V4ZS5oLCBpbmNsdWRlL21pc2NlbXUuaCwgaW5jbHVkZS9tc2Rvcy5oOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglNb3ZlZCBET1MgTGlzdCBvZiBMaXN0cyBpbml0aWFsaXphdGlvbiwgYW5kIGFkZGVkIHRoZSBiZWdpbm5pbmdzIG9mCgl0aGUgRE9TIGRldmljZSBzdHJ1Y3R1cmVzLgoKCSogcHJvZ3JhbXMvcmVnYXBpL3JlZ2FwaS5jLCBpbmNsdWRlL3dpbnJlZy5oLCBtaXNjL3JlZ2lzdHJ5LmM6CglOb29tZW4gSGFtemEgPG5vb21lbkBtYWNhZGFtaWFuLmNvbT4KCUJ1ZyBmaXhlcy4KCgkqIG9sZS9oZ2xvYmFsc3RyZWFtLmMsIHJlbGF5MzIvb2xlMzIuc3BlYzoKCVRodXkgTmd1eWVuIDx0aHV5QG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50ZWQgR2V0SEdsb2JhbEZyb21TdHJlYW0uCgoJKiBpbmNsdWRlL3RocmVhZC5oLCBzY2hlZHVsZXIvdGhyZWFkLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUNhbGwgVEhSRUFEX0ZyZWVUSERCIGFzIHNlcnZpY2UgdGhyZWFkIGNhbGxiYWNrLgoKCSogaW5jbHVkZS9tZXNzYWdlLmgsIGxvYWRlci90YXNrLmMsIHdpbmRvd3MvdGltZXIuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJUmVtb3ZlZCBUSU1FUl9Td2l0Y2hRdWV1ZS4KCgkqIGRlYnVnZ2VyL21lbW9yeS5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJRm9ybWF0IG91dHB1dCBpbiBERUJVR19FeGFtaW5lTWVtb3J5IGZvciAiZCIgYW5kICJ4IiBub3QgdG8gZXhjZWVkIDgwCgljaGFycy4KCgkqIGxvYWRlci9zaWduYWwuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglTdG9wIHdpbmVsaWIgcHJvZ3JhbXMgb24gZmF1bHQgaW5zdGVhZCBvZiBlbmRsZXNzIGZhdWx0bG9vcGluZy4KCgkqIE1ha2VmaWxlLmluOiBKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CglSdW4gbGRjb25maWcgaW4gbWFrZSBpbnN0YWxsIGlmIHVzaW5nIC0tZW5hYmxlLWRsbC4KCUNsZWFuZWQgdXAgdW5pbnN0YWxsX2xpYiBhcyB3ZWxsLgoKCSogb2xlL3N0b3JhZ2UuYywgb2xlL3N0b3JhZ2UzMi5jLCBvbGUvc3RvcmFnZTMyLmgsIHJlbGF5MzIvb2xlMzIuc3BlYywgb2xlL3N0Z19iaWdibG9ja2ZpbGUuYywgaW5jbHVkZS93aW5lL29ial9zdG9yYWdlLmgsIG9sZS9tZW1sb2NrYnl0ZXMuYzoKCVRodXkgTmd1eWVuIDx0aHV5QG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50YXRpb24gb2YgSVN0b3JhZ2Ugc3VwcG9ydGVkIGJ5IGFuIGltcGxlbWVudGF0aW9uIG9mCglJTG9ja0J5dGVzIG9uIHRvcCBvZiBhbiBIR0xPQkFMLgoKCSogZmlsZXMvcHJvZmlsZS5jLCByZWxheTMyL2tlcm5lbDMyLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVJldHVybiB0aGUgY29ycmVjdCB2YWx1ZSBmcm9tIEdldFByaXZhdGVQcm9maWxlU2VjdGlvbkEuCglDb3B5L2NvbnZlcnQgYmFjayB0aGUgYnVmZmVyIGluIEdldFByaXZhdGVQcm9maWxlU2VjdGlvblcuCglSZXBsYWNlIHNvbWUgb3V0cHV0IHBvaW50ZXJzIHN0ci93c3RyLT5wdHIgaW4ga2VybmVsMzIuc3BlYy4KCgkqIGxvYWRlci90YXNrLmMsIHNjaGVkdWxlci9wcm9jZXNzLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVNvbWUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgYnVnZml4ZXM6CgktIEluaXRpYWxpemUgcHJvY2VzcyBjcnN0IGZvciAxNi1iaXQgcHJvY2Vzc2VzLgoJLSBEb24ndCBjcmFzaCBkdWUgdG8gdW5pbml0aWFsaXplZCBzdGFjayBmcmFtZXMgaW4gV2luZUxpYi4KCS0gTWFwIHN5c3RlbSBETExzIGJlZm9yZSBjYWxsaW5nIFVzZXJTaWduYWxQcm9jLgoJLSBTaWduYWwgVVNJR19QUk9DRVNTX0NSRUFURSBvbmx5ICphZnRlciogdGhlIGVudl9kYiBpcyBmaWxsZWQuCgoJKiBpZjE2MzIvdGh1bmsuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglDYWxsIENhbGxvdXQgcm91dGluZXMgZGlyZWN0bHkgd2hlbiB1c2luZyBidWlsdGluIFVTRVIuCgoJKiBsb2FkZXIvcGVfaW1hZ2UuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiBhbGwgUEUgbW9kdWxlcyB3ZXJlIG1hcmtlZCAnaW50ZXJuYWwnLgoKCSogaW5jbHVkZS9kY2UuaCwgb2JqZWN0cy9kYy5jLCB3aW5kb3dzL2RjZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglDaGVjayBmb3IgYnVzeSBEQ0UgbW92ZWQgdG8gRENIb29rMTYoKS4KCgkqIGluY2x1ZGUvd2luLmgsIGxvYWRlci9tYWluLmMsIHdpbmRvd3Mvd2luLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUluaXRpYWxpemUgV0lOX0NyaXRTZWN0aW9uIGVhcmxpZXIuCgoJKiBkbGxzL2NvbWN0bDMyL3RyYWNrYmFyLmMsIGluY2x1ZGUvdHJhY2tiYXIuaDoKCUx1YyBUb3VyYW5nZWF1IDxsdWNAbWFjYWRhbWlhbi5jb20+CglSZW1vdmVkIHRoZSB0aW1lciB0aGF0IHdhcyB1c2VkIHRvIHF1ZXVlIFRSQUNLQkFSX1JlZnJlc2ggY2FsbHMuCglSZW1vdmVkIGFsbCBkaXJlY3QgY2FsbHMgdG8gVFJBQ0tCQVJfUmVmcmVzaCAoZXhjZXB0IGZyb20gd2l0aGluIHRoZQoJV01fUEFJTlQgaGFuZGxpbmcgc2VjdGlvbikgYW5kIHJlcGxhY2VkIHRoZW0gYnkgY2FsbHMgdG8KCUludmFsaWRhdGVSZWN0LgoJRml4ZWQgYSBidWcgaW4gdGhlIFRSQUNLQkFSX1NldFBvcyBmdW5jdGlvbi4KCUZpeGVkIHRoZSBiZWhhdmlvciBmb3IgZGlmZmVyZW50IHR5cGVzIG9mIG1vdXNlIGlucHV0LgoKCSogZGxscy9jb21jdGwzMi90b29sYmFyLmM6IFl1eGkgWmhhbmcgPHl1eGl6QGNvcmVsLmNhPgoJSW1wbGVtZW50ZWQgdG9vbGJhciBtdWx0aXJvdyBidXR0b24gbGF5b3V0LgoKCSogZGxscy9jb21jdGwzMi90b29sdGlwcy5jOiBGcmFuY29pcyBCb2lzdmVydCA8ZnJhbmNvaXNAbWFjYWRhbWlhbi5jb20+CglJbXBsZW1lbnRhdGlvbiBvZiBXTV9HRVRURVhUIGFuZCBXTV9HRVRURVhUTEVOR1RIIGluIHRvb2x0aXBzLgoKCSogb2xlL29sZTJkaXNwLmM6IFRodXkgTmd1eWVuIDx0aHV5QG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50ZWQgT2xlVHJhbnNsYXRlQ29sb3IuCgoJKiBpbmNsdWRlL3dpbnVzZXIuaCwgd2luZG93cy9pbnB1dC5jOgoJRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJQ2hhbmdlZCB0aGUgcmV0dXJuIHZhbHVlIG9mIEdldEtleWJvYXJkU3RhdGUgYW5kIFNldEtleWJvYXJkU3RhdGUgZnJvbQoJVk9JRCB0byBCT09MLgoKCSogY29udHJvbHMvbGlzdGJveC5jOiBGcmFuY29pcyBCb2lzdmVydCA8ZnJhbmNvaXNAbWFjYWRhbWlhbi5jb20+CglQcmV2ZW50ZWQgTElTVEJPWF9SZXBhaW50SXRlbSBmcm9tIHJlcGFpbnRpbmcgYSBub24gdmlzaWJsZSBpdGVtLgoKCSogcmVsYXkzMi9idWlsdGluMzIuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglGaXhlZCB0eXBvLgoKCSogd2luZG93cy9jbGFzcy5jOiBIdXcgRCBNIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3guYWMudWs+CglCdWdmaXggZm9yIFRSQUNFIGluIFVucmVnaXN0ZXJDbGFzcy4KCldlZCBNYXkgIDUgMTM6MjA6NTAgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvQXR0aWMvcHJvcHNoZWV0Lmg6IE5vIGxvbmdlciBuZWNlc3NhcnkuCgpUdWUgTWF5ICA0IDE2OjU1OjIzIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBvYmplY3RzL2RjLmMsIHdpbmRvd3MvZGNlLmMsIGluY2x1ZGUvZGNlLmg6CglGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglDaGVjayBpZiBEQyBpcyBidXN5IGJlZm9yZSBkZWxldGluZyBpdC4KCgkqIHdpbjMyL25ld2Zucy5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJR2V0TWFpbHNsb3RJbmZvIGlzIHN1cHBvc2VkIHRvIGNoZWNrIGZvciBwb2ludGVyIHZhbGlkaXR5LgoKCSogc2VydmVyL3NlbGVjdC5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVBvc3NpYmxlIGNyYXNoIGluIHNlbGVjdF9sb29wKCkgZml4ZWQuCgoJKiBpbmNsdWRlL3NlcnZpY2VzLmgsIGxvYWRlci90YXNrLmMsIHNjaGVkdWxlci9zZXJ2aWNlcy5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglGaXhlZCB2YXJpb3VzIHN0dXBpZCBidWdzIGluIHNlcnZpY2VzIHRocmVhZCByb3V0aW5lcy4KCUFkZGVkIFNFUlZJQ0VfRXhpdCByb3V0aW5lIHRvIGtpbGwgdGhlIHNlcnZpY2VzIHRocmVhZC4KCgkqIG1pc2MvbWFpbi5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUludmVydGVkIGNsYXNzL2NoYW5uZWwgaW4gX18oU0VUfEdFVClfREVCVUdHSU5HIG1hY3Jvcy4KCgkqIHdpbmRvd3MvcXVldWUuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglDb3JyZWN0IGltcGxlbWVudGF0aW9uIG9mIEdldFdpbmRvd1RocmVhZFByb2Nlc3NJZCgpLgoKCSogaWYxNjMyL21tc3lzdGVtLnNwZWMsIG11bHRpbWVkaWEvbW1zeXN0ZW0uYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWRkZWQgUGxheVNvdW5kMTYsIHNuZFBsYXlTb3VuZDE2LgoKCSogaWYxNjMyL3RodW5rLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJRml4ZXMgd2lucHJvYyBkZWFkbG9jayBmb3Igd2luMTYuCgpNb24gTWF5ICAzIDA5OjQ0OjU3IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiB3aW5kb3dzL3F1ZXVlLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJRml4ZWQgc29tZSBkZWFkbG9jayhzKSBpbiBtZXNzYWdlIHNlbmRpbmcuCgoJKiBtdWx0aW1lZGlhL21tc3lzdGVtLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJY2xlYW5lZCB1cCBkZWJ1ZyBjaGFubmVscyB0byB1c2UgZGVmYXVsdCBvbmUgKG1tc3lzKQoJbW9yZSBjb252ZXJzaW9ucyBmcm9tIG1peGVyWFhYVyBhbmQgbWl4ZXJYWFhYMTYgdG8gbWl4ZXJYWFhYQQoJZml4ZWQgY2FsbGJhY2sgYnVnIGluIG1pZGlTdHJlYW0gZnVuY3Rpb25zCglmaXhlZCBjb21waWxhdGlvbiBidWcgd2l0aCBlZ2NzCgljaGFuZ2VkIHRvIHRoZSBuZXcgZGVidWcgY2hhbm5lbCBpbnRlcmZhY2UKCgkqIG11bHRpbWVkaWEvbW1hdXguYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglzbWFsbCByYW5nZSBmaXhlcyBmb3IgT1NTIGRyaXZlcgoJY2hhbmdlZCB0byB0aGUgbmV3IGRlYnVnIGNoYW5uZWwgaW50ZXJmYWNlCgoJKiBtdWx0aW1lZGlhL21peGVyLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJZmlyc3QgKHdvcmtpbmcpIHNob3QgYXQgT1NTIG1peGVyIGxvdyBsZXZlbCBpbnRlcmZhY2UKCWNoYW5nZWQgdG8gdGhlIG5ldyBkZWJ1ZyBjaGFubmVsIGludGVyZmFjZQoKCSogbWlzYy9uZXR3b3JrLmMsIHJlbGF5MzIvbXByLnNwZWM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUZpeGVkIG9mZi1ieS1vbmUgb3JkaW5hbHMgaW4gTVBSLgoJQWRkZWQgTVBSX0FsbG9jL1JlQWxsb2MvRnJlZSAoTVBSLjIyLTI0KS4KCgkqIGxvYWRlci9tb2R1bGUuYywgaWYxNjMyL3JlbGF5LmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogcmVsZWFzZSBXaW4xNkxvY2sgaW4gV2luRXhlYzE2LCBDYWxsUHJvY1tFeF0zMldfMTYuCgoJKiBsb2FkZXIvbWFpbi5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUxvYWQgc3lzdGVtIERMTHMgaW50byBXaW5lTGliIGFwcGxpY2F0aW9ucy4KCgkqIGdyYXBoaWNzL3BzZHJ2L3BzLmM6IEh1dyBEIE0gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veC5hYy51az4KCVNtYWxsIHVwZGF0ZSB0byB0aGUgUG9zdFNjcmlwdCBlbmNvZGluZyB2ZWN0b3IuCgoJKiBsb2FkZXIvbW9kdWxlLmMsIGxvYWRlci90YXNrLmM6IEJ1ZyBmaXhlcy4KClN1biBNYXkgIDIgMTk6MTA6NTcgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHNjaGVkdWxlci9wcm9jZXNzLmM6CglNb3ZlZCBhIGZldyBtb3JlIGluaXRpYWxpc2F0aW9ucyB0byB0aGUgbmV3IHByb2Nlc3MgY29udGV4dC4KCgkqIGxvYWRlci90YXNrLmM6IERvbid0IGluaXRpYWxpc2UgdGhlIHN0YWNrcyBmb3IgMzItYml0IHByb2Nlc3Nlcy4KCgkqIG1pc2NlbXUvbWFpbi5jOiBPbmx5IGNoZWNrIG51bWJlciBvZiB0YXNrcyBhZnRlciBmaXJzdCBtZXNzYWdlLgoJVXNlIGEgMTYtYml0IG1vZHVsZSBmb3IgY3JlYXRpbmcgdGhlIGluaXRpYWwgdGFzay4KCgkqIGluY2x1ZGUvYXV0aG9ycy5oLCBBVVRIT1JTOgoJVXBkYXRlZCBhdXRob3JzIGxpc3QgZnJvbSB0aGUgQ2hhbmdlbG9nLiBQbGVhc2UgbGV0IG1lIGtub3cgaWYgeW91CgloYXZlIGJlZW4gbGVmdCBvdXQuCgoJKiBsb2FkZXIvdGFzay5jLCBzY2hlZHVsZXIvcHJvY2Vzcy5jOgoJQ29udmVydGVkIHRvIHRoZSBuZXcgZGVidWdnaW5nIGludGVyZmFjZSAoZG9uZSB3aXRoIHRoZSBoZWxwIG9mIHRoZQoJc2NyaXB0IHdyaXR0ZW4gYnkgUGF0cmlrIFN0cmlkdmFsbCkuCglTb21lIGNoYW5nZXMgdG8gdGhlIGluaXRpYWxpc2F0aW9uIHNlcXVlbmNlIGZvciAzMi1iaXQgcHJvY2Vzc2VzLgoKCSogKi8qLmM6CglDb252ZXJ0ZWQgdG8gdGhlIG5ldyBkZWJ1Z2dpbmcgaW50ZXJmYWNlIChkb25lIHdpdGggdGhlIGhlbHAgb2YgdGhlCglzY3JpcHQgd3JpdHRlbiBieSBQYXRyaWsgU3RyaWR2YWxsKS4KCgkqIHRvb2xzL21ha2VfZGVidWcsIGluY2x1ZGUvZGVidWdkZWZzLmgsIGluY2x1ZGUvZGVidWd0b29scy5oLCBtaXNjL21haW4uYzoKCU1pc2MgZml4ZXMgYW5kIGltcHJvdmVtZW50cy4KCgkqIGluY2x1ZGUvY29uZmlnLmguaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgoJQWRkZWQgY2hlY2sgZm9yIC1sbW1hcCBmb3IgT1MvMi4KCgkqIGluY2x1ZGUvZGVidWdkZWZzLmgsIG9sZS9oZ2xvYmFsc3RyZWFtLmMsIG9sZS9zdGdfc3RyZWFtLmMsIG9sZS9zdG9yYWdlMzIuYzoKCUZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCUZpeGVkIGEgZmV3IGJ1Z3MgaW4gdGhlIE9MRSBzdG9yYWdlIGltcGxlbWVudGF0aW9uLCBhZGRlZCBhIG5ldyBzZXQgb2YKCXRyYWNlIHN0YXRlbWVudHMgZm9yIHRoZSBPTEUgc3RvcmFnZSByZWxhdGVkIG1ldGhvZHMgYW5kIGludHJvZHVjZWQgYQoJbmV3IGRlYnVnIGNoYW5uZWwgZm9yIHRoZSBzdG9yYWdlIHN1YnN5c3RlbS4KCgkqIG11bHRpbWVkaWEvdGltZS5jLCBvYmplY3RzL2RpYi5jLCBvYmplY3RzL3BhbGV0dGUuYywgaW5jbHVkZS93aW5lL3dpbnVzZXIxNi5oLCBtaXNjL3Nwb29sZXIuYzoKCU1pY2hhZWwgVmVrc2xlciA8bXZla3NsZXJAdGVjaHVuaXgudGVjaG5pb24uYWMuaWw+CglSZW1vdmVkIHJlZHVuZGFudCBpbmNsdWRlIG9mIHdpbmJhc2UuaCBmcm9tIHdpbnVzZXIxNi5oLgoJTW92ZWQgdHlwZXMgZnJvbSB3aW5iYXNlLmggdG8gd2ludXNlcjE2LmggLgoKCSogaW5jbHVkZS93aW51c2VyLmg6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJLSBkZWZhdWx0IGl0ZW0gaGFuZGxpbmcKCS0gc21hbGwgZHJhd2luZyBmaXhlcwoKCSogZGxscy9jb21tZGxnL2NkbGdfRW4ucmMsIGRsbHMvY29tbWRsZy9wcmludGRsZy5jOgoJS2xhYXMgdmFuIEdlbmQgPGtsYWFzQHZhbmdlbmQuZGVtb24ubmw+CglNb3JlIGltcGxlbWVudGF0aW9uIG9mIFByaW50RGxnQS4KCUNvbnZlcnNpb24gb2YgcmVzb3VyY2UgaWRlbnRpZmllcnMgb2YgUHJpbnQzMiB3aW5kb3cgdG8gY29tcGx5IHRvIHRoZQoJTSQgbnVtYmVyaW5nLgoKCSogc2VydmVyL3RocmVhZC5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCURvbid0IGNyYXNoIGlmIHF1ZXVpbmcgYW4gQVBDIG9uIGEgdGhyZWFkIHRoYXQgZG9lc24ndCB3YWl0LgoKCSogd2luZG93cy90aW1lci5jLCB3aW5kb3dzL3gxMWRydi9ldmVudC5jLCBpbmNsdWRlL21lc3NhZ2UuaDoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJVXNlIFNFUlZJQ0VTIGNhbGxiYWNrIHRvIGltcGxlbWVudCBXaW5kb3dzIHRpbWVycy4KCVRpbWVyIGV4cGlyYXRpb24gaGFuZGxpbmcgcmVtb3ZlZCBmcm9tIEVWRU5UX1dhaXROZXRFdmVudCBsb29wLgoKCSogbWVtb3J5L2hlYXAuYzogSHV3IEQgTSBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94LmFjLnVrPgoJQ2FsbCBTZXRMYXN0RXJyb3IgaW4gSGVhcENvbXBhY3QoKS4KCgkqIGluY2x1ZGUvd2luYmFzZS5oOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUFkZGVkIHByb3RvdHlwZSBmb3IgVHJ5RW50ZXJDcml0aWNhbFNlY3Rpb24uCgoJKiBpbmNsdWRlL2NvbW1kbGcuaDogS2xhYXMgdmFuIEdlbmQgPGtsYWFzQHZhbmdlbmQuZGVtb24ubmw+CglNYWtlIGFsbCBzdHJ1Y3R1cmVzIHBhY2tlZCBhbmQgcmVtb3ZhbCBvZiBzb21lIFdJTkVfUEFDS0VELgoKCSogY29udHJvbHMvYnV0dG9uLmM6IFBhdmVsIFJvc2tpbiA8cGF2ZWxfcm9za2luQGdlb2NpdGllcy5jb20+CglQdXNoYnV0dG9ucyBzaG91bGQgb25seSBiZSByb3VuZGVkIGluIFdpbjMxIGxvb2suCgoJKiBjb250cm9scy9tZW51LmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJLSBkZWZhdWx0IGl0ZW0gaGFuZGxpbmcKCS0gc21hbGwgZHJhd2luZyBmaXhlcwoKCSogd2luZG93cy93aW5wb3MuYzogTm9lbCBCb3J0aHdpY2sgPG5vZWxAbWFjYWRhbWlhbi5jb20+CglGaXhlZCBhbiB1bmJhbGFuY2VkIHdpbmRvd3MgbG9jay91bmxvY2sgc2VxdWVuY2UgaW4KCVdJTlBPU19BY3RpdmF0ZU90aGVyV2luZG93LgoKCSogaW5jbHVkZS9kZWJ1Z2RlZnMuaDogZW5obWV0YWZpbGUgYWRkZWQKCgkqIHJlbGF5MzIvLmN2c2lnbm9yZSwgcmVsYXkzMi9NYWtlZmlsZS5pbiwgcmVsYXkzMi9idWlsdGluMzIuYywgcmVsYXkzMi9tY2lhbmltLnNwZWMsIHJlbGF5MzIvbWNpYXZpLnNwZWMsIHJlbGF5MzIvbWNpY2RhLnNwZWMsIHJlbGF5MzIvbWNpc2VxLnNwZWMsIHJlbGF5MzIvbWNpd2F2ZS5zcGVjLCByZWxheTMyL3dpbm1tLnNwZWMsIGluY2x1ZGUvbXVsdGltZWRpYS5oLCBsb2FkZXIvbWFpbi5jLCBtdWx0aW1lZGlhL2F1ZGlvLmMsIG11bHRpbWVkaWEvaW5pdC5jLCBtdWx0aW1lZGlhL21jaS5jLCBtdWx0aW1lZGlhL21jaWFuaW0uYywgbXVsdGltZWRpYS9tY2lhdmkuYywgbXVsdGltZWRpYS9tY2ljZGEuYywgbXVsdGltZWRpYS9tY2ltaWRpLmMsIG11bHRpbWVkaWEvbWNpc3RyaW5nLmMsIG11bHRpbWVkaWEvbWNpd2F2ZS5jLCBtdWx0aW1lZGlhL21tc3lzdGVtLmMsIGRvY3VtZW50YXRpb24vc3RhdHVzL211bHRpbWVkaWEsIGlmMTYzMi9tbXN5c3RlbS5zcGVjLCB3aW5lLmluaToKCUVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJLSBnb3QgcmlkIG9mIGFsbCB0aGUgaW50ZXJuYWwgTU0gdHdlYWtzIHRvIGxvYWQgYnVpbHRpbiBNQ0kKCSAgZHJpdmVycy4gVGhleSBhcmUgYWxsIHNlZW4gYXMgZHJpdmVycywgbG9hZGVkIGFzIERMTHMgYW5kIHN0YW5kYXJkCgkgIG1vZHVsZSBsb2Fkb3JkZXIgaXMgdXNlZCB0byBrbm93IHdoaWNoIHR5cGUgdG8gdXNlIChidWlsdGluIHZzCgkgIG5hdGl2ZSkuCgktIGZpcnN0IGZ1bGwgd29ya2luZyBpbXBsZW1lbnRhdGlvbiBvZiBtbVRocmVhZD8/PyBmdW5jdGlvbnMgKHRvCgkgIHN1cHBvcnQgZ3JhY2VmdWxseSBuYXRpdmUgTUNJIGRyaXZlcnMpLgoJLSBzdXBwb3J0IG9mIG1tU2hvd01NQ1BMUHJvcGVydHlTaGVldC4KCS0gZml4IG9mIHNvbWUgaGVhcCB2YWxpZGF0ZSBidWdzICh0aGFua3MgdG8gVWxyaWNoIGZvciByZXBvcnRpbmcgdGhlbSkuCgoJKiBsb2FkZXIvbW9kdWxlLmM6IEd1eSBBbGJlcnRlbGxpIDxnYWxiZXJ0ZUBuZW8ubHJ1bi5jb20+CglGaXggQ3JlYXRlUHJvY2Vzc0EgdG8gaW1wbGVtZW50IGNvcnJlY3QgYWN0aW9ucyBvbiBhbWJpZ3VvdXMgY29tbWFuZAoJbGluZSBuYW1lcyAodHJ5IGxvbmdlciBhbmQgbG9uZ2VyIHN0cmluZ3MpLgoKCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBncmFwaGljcy9lbmhtZXRhZmlsZWRydi8uY3ZzaWdub3JlLCBncmFwaGljcy9lbmhtZXRhZmlsZWRydi9NYWtlZmlsZS5pbiwgZ3JhcGhpY3MvZW5obWV0YWZpbGVkcnYvZGMuYywgZ3JhcGhpY3MvZW5obWV0YWZpbGVkcnYvZ3JhcGhpY3MuYywgZ3JhcGhpY3MvZW5obWV0YWZpbGVkcnYvaW5pdC5jLCBncmFwaGljcy9lbmhtZXRhZmlsZWRydi9tYXBwaW5nLmMsIGdyYXBoaWNzL2VuaG1ldGFmaWxlZHJ2L29iamVjdHMuYywgZ3JhcGhpY3MvbWV0YWZpbGVkcnYvaW5pdC5jLCBpbmNsdWRlL2VuaG1ldGFmaWxlZHJ2Lmg6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVN0YXJ0ZWQgaW1wbGVtZW50aW5nIEVuaGFuY2VkIE1ldGFGaWxlIGRyaXZlci4KCgkqIGluY2x1ZGUvb2xlMi5oLCBpbmNsdWRlL3dpbmUvb2JqX29sZW9iai5oLCBpbmNsdWRlL3dpbmUvb2JqX29sZXZpZXcuaCwgb2xlL01ha2VmaWxlLmluLCBvbGUvZGF0YWNhY2hlLmMsIG9sZS9kZWZhdWx0aGFuZGxlci5jLCBvbGUvb2xlMi5jLCBvbGUvb2xlMnN0dWJzLmMsIG9sZS9vbGVvYmouYywgcmVsYXkzMi9vbGUzMi5zcGVjLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jOgoJRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50ZWQgdGhlIE9MRSBvYmplY3QgZGVmYXVsdCBoYW5kbGVyIGFuZCBkYXRhIGNhY2hlLgoKCSogaW5jbHVkZS9lbmhtZXRhZmlsZS5oLCBpbmNsdWRlL3dpbmdkaS5oLCBvYmplY3RzL2VuaG1ldGFmaWxlLmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVNldmVyYWwgaW1wcm92ZW1lbnRzIHRvIEVuaGFuY2VkIE1ldGFGaWxlIHBsYXliYWNrLgoKCSogbG9hZGVyL25lL21vZHVsZS5jOiBCZXJ0aG8gU3R1bHRpZW5zIDxiZXJ0aG9AcGFudGVyLnNvY2kuYWF1LmRrPgoJT25seSB0cnkgdG8gYXBwZW5kICIuZGxsIiBpZiBhIGxpYnJhcnkgaXMgbG9hZGVkIGltcGxpY2l0ZWx5LgoKCSogZGxscy9zaGVsbDMyL3NoZWxsb3JkLmM6CglNaWNoYWVsIFZla3NsZXIgPG12ZWtzbGVyQHRlY2h1bml4LnRlY2huaW9uLmFjLmlsPgoJRml4IFRSQUNFIGZvcm1hdHRpbmcgd2FybmluZ3MuCgoJKiBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglGaXhlZCBhIHNtYWxsIHN5bnRheCBwcm9ibGVtLgoKCSogd2luZG93cy93aW5wb3MuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CgktIGJldHRlciBzdHVicyBmb3IgR2V0L1NldCBzcGVjaWFsIChQcm9nbWFuL1Rhc2ttYW4pIHdpbmRvdyBmdW5jdGlvbnMKCgkqIHJlbGF5MzIvdXNlcjMyLnNwZWMsIHdpbmRvd3MvbWVzc2FnZS5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CgktIG5ldyBTZW5kTWVzc2FnZUNhbGxiYWNrVwoJLSBzb21lIGZpeG1lJ3MgZm9yIG1pc3NpbmcgQTwtPlcgY29udmVyc2lvbgoKCSogd2luZG93cy9kaWFsb2cuYzogTm9lbCBCb3J0aHdpY2sgPG5vZWxAbWFjYWRhbWlhbi5jb20+CglGaXhlZCBhbiB1bmJhbGFuY2VkIHdpbmRvd3MgbG9jay91bmxvY2sgc2VxdWVuY2UgaW4gR2V0TmV4dERsZ1RhYkl0ZW0uCgoJKiBtaXNjL3ByaW50ZHJ2LmM6IEtsYWFzIHZhbiBHZW5kIDxrbGFhc0B2YW5nZW5kLmRlbW9uLm5sPgoJQnVnZml4IGZvciBFbnVtUHJpbnRlcnMgbGV2ZWwgMi4KCgkqIHdpbmRvd3MveDExZHJ2L2tleWJvYXJkLmM6IEd1eSBBbGJlcnRlbGxpIDxnYWxiZXJ0ZUBuZW8ubHJ1bi5jb20+CglDb3JyZWN0IGxvZ2ljIGluIEdldEtleU5hbWVUZXh0LgoKCSogZG9jdW1lbnRhdGlvbi9idWdyZXBvcnRzOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJUmVtb3ZlZCArc25vb3AgZnJvbSBkb2N1bWVudGF0aW9uL2J1Z3JlcG9ydHMuCgpTYXQgTWF5ICAxIDEwOjQxOjAyIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBvYmplY3RzL2JpdG1hcC5jOiBQYXZlbCBSb3NraW4gPHBhdmVsX3Jvc2tpbkBnZW9jaXRpZXMuY29tPgoJTG9hZEltYWdlVyBmaXhlZCBmb3IgaGljb2xvciBkaXNwbGF5cy4KCgkqIGluY2x1ZGUvbW1zeXN0ZW0uaCwgaW5jbHVkZS9tdWx0aW1lZGlhLmgsIG11bHRpbWVkaWEvbW1zeXN0ZW0uYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJTUNJX0FOSU1fT1BFTl9QQVJNU1cgc2hvdWxkIGJlIExQQ1dTVFIsIE1DSV9EZWZZaWVsZFByb2Mgc2hvdWxkIGJlIFdJTkFQSS4KCgkqIGRsbHMvY29tY3RsMzIvaGVhZGVyLmM6IENocmlzIE1vcmdhbiA8Y21vcmdhbkB3cGkuZWR1PgoJSmFtZXMgQWJiYXRpZWxsbyA8YWJiZXlqQHdwaS5lZHU+CglGaXhlZCBIRUFERVJfSW5zZXJ0SXRlbUEgYW5kIEhFQURFUl9JbnNlcnRJdGVtVyBudWxsIHBvaW50ZXIgY2hlY2tpbmcKCXRvIGhhbmRsZSB3aWRlIGNoYXJhY3RlciBzdHJpbmdzIHByb3Blcmx5LiAgRml4IG9mIG91ciBwcmV2aW91cyBwYXRjaAoJZm9yIG51bGwgcG9pbnRlciBjaGVja2luZy4KCgkqIG9sZS9NYWtlZmlsZS5pbiwgb2xlL21lbWxvY2tieXRlcy5jLCBvbGUvb2xlMnN0dWJzLmM6CglUaHV5IE5ndXllbiA8dGh1eUBtYWNhZGFtaWFuLmNvbT4KCUltcGxlbWVudGVkIENyZWF0ZUlMb2NrQnl0ZXNPbkhHbG9iYSwgR2V0SEdsb2JhbEZyb21JTG9ja0J5dGVzIGFuZAoJdGhlIElMb2NrQnl0ZXMgaW50ZXJmYWNlIGJhc2VkIG9uIGFuIEhHTE9CQUwuCgoJKiBvbGUvY29tcG9iai5jOiBGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglGaXhlZCBhIGJ1ZyBpbiBDb1JlZ2lzdGVyQ2xhc3NPYmplY3QuCgoJKiBkbGxzL2NvbWN0bDMyL3Rvb2xiYXIuYzogTHVjIFRvdXJhbmdlYXUgPGx1Y0BtYWNhZGFtaWFuLmNvbT4KCVJlbW92ZWQgc29tZSBmbGlja2VyaW5nIHdoZW4gaW5zZXJ0aW5nIG9yIGRlbGV0aW5nIGJ1dHRvbnMuCgoJKiBkbGxzL2NvbWN0bDMyL2xpc3R2aWV3LmM6IENocmlzIE1vcmdhbiA8Y21vcmdhbkB3cGkuZWR1PgoJSmFtZXMgQWJiYXRpZWxsbyA8YWJiZXlqQHdwaS5lZHU+CglGaXhlZCBMSVNUVklFV19HZXRJdGVtQ2hhbmdlcygpIHRvIHBlcmZvcm0gYSBtb3JlIGNvbXBsZXRlIGNvbXBhcmlzb24KCWJldHdlZW4gbHBJdGVtIGFuZCBscExWSXRlbS4gIE5vdyBjb21wYXJlcyB0aGUgcHN6VGV4dCBzdHJpbmcgb2YgdGhlCglscEl0ZW0gYW5kIGxwTFZJdGVtIHN0cnVjdHMuICBGaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgb2xkIGFuZCBuZXcgaXRlbQoJaGF2ZSB0aGUgc2FtZSBhdHRyaWJ1dGVzIGJ1dCB0aGVpciB0ZXh0IGRpZmZlcnMgYW5kIEdldEl0ZW1DaGFuZ2VzKCkKCWNvbXBhcmVzIHRoZW0gYXMgZXF1YWwuCgoJKiBkbGxzL2NvbWN0bDMyL3Byb3BzaGVldC5jLCBkbGxzL2NvbWN0bDMyL3Byb3BzaGVldC5oLCBkbGxzL2NvbWN0bDMyL3JzcmMucmMsIGRsbHMvY29tY3RsMzIvdGFiLmM6CglUaHV5IE5ndXllbiA8dGh1eUBtYWNhZGFtaWFuLmNvbT4KCUFkZGVkIHN1cHBvcnQgZm9yIGFkZGluZyBhbmQgcmVtb3ZpbmcgcGFnZXMgZHluYW1pY2FsbHkgZnJvbSBhCglwcm9wZXJ0eSBzaGVldC4KCgkqIGNvbnRyb2xzL2J1dHRvbi5jLCBjb250cm9scy9jb21iby5jLCBjb250cm9scy9kZXNrdG9wLmMsIGNvbnRyb2xzL2xpc3Rib3guYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJUmVtb3ZlZCB0aGUgZ290b3MgZnJvbSB0aGUgV25kUHJvY3MsIGFsd2F5cyB1c2UgYSBzbWFsbCB3cmFwcGVyIHRoYXQKCWxvY2tzIHRoZSB3aW5kb3csIGNhbGxzIHRoZSByZWFsIHduZHByb2MsIHVubG9ja3MgdGhlIHdpbmRvdy4KCgkqIGRsbHMvc2hlbGwzMi9jb250bWVudS5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlZCBkZWZhdWx0IG1lbnUgaXRlbS4KCgkqIHdpbjMyL2NvZGVfcGFnZS5jLCBtaXNjL2RkZW1sLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUZpeGVkIHR5cG8uCgoJKiB3aW5kb3dzL3F1ZXVlLmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBZGRlZCBhIG1pc3NpbmcgTGVhdmVDcml0aWNhbFNlY3Rpb24uCgoJKiB3aW5kb3dzL21kaS5jOiBGcmFuY29pcyBCb2lzdmVydCA8ZnJhbmNvaXNAbWFjYWRhbWlhbi5jb20+CglGaXhlZCBhIHdyb25nIHVzYWdlIG9mIFdJTl9GaW5kV25kUHRyL1dJTl9SZWxlYXNlV25kUHRyIGluCglUcmFuc2xhdGVNRElTeXNBY2NlbDE2LgoKCSogbWlzYy9jb21tLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJRml4ZWQgb2ZmLWJ5LW9uZSBidWcgaW4gYXN5bmMgb3V0cHV0IGJ1ZmZlcnMuCgoJKiBvbGUvb2xlMi5jOiBGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglGaXhlZCBhIGxpdHRsZSBEcmFnIGFuZCBEcm9wIGJ1Zy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTW9uIEFwciAyNiAxNDo1ODo1OSAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS9jb25maWcuaC5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW46CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFkZGVkIGF1dG9jb25mIGNoZWNrIGZvciAiaW5saW5lIi4gWW91IGNhbiBub3cgdXNlIGl0LCBpdCB3aWxsIGJlCglkZWZpbmVkIHRvIChlbXB0eSkgZm9yIGNvbXBpbGVycyB0aGF0IGRvIG5vdCBoYXZlIGl0LgoKCSogdG9vbHMvd3JjL3BhcnNlci55OiBHZXJhbGQgUGZlaWZlciA8cGZlaWZlckBkYmFpLnR1d2llbi5hYy5hdD4KCURvbid0IGluY2x1ZGUgYWxsb2NhLmguCgoJKiBSRUFETUUsIGRvY3VtZW50YXRpb24vd2luZS5tYW46IEphbWVzIEp1cmFuIDxqcmoxMjBAcHN1LmVkdT4KCVVwZGF0ZSB0byByZWZsZWN0IHJlY2VudCBjaGFuZ2VzIGFuZCBkaXNjdXNzaW9ucy4KCgkqIGxvYWRlci9sb2Fkb3JkZXIuYzogQmVydGhvIFN0dWx0aWVucyA8YmVydGhvQHBhbnRlci5zb2NpLmFhdS5kaz4KCVRoZSBsb2FkIG9yZGVyIHBhcnNlciBzaG91bGQgbm90IGFsd2F5cyBjb21wbGFpbiBhYm91dCBleHRlbnNpb25zLgoKCSogY29udHJvbHMvbWVudS5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCS0gYWxpZ24gbWFnaWMgYnV0dG9ucyByaWdodAoJLSBzaG9ydGN1dHMgYWxpZ25tZW50IHdvcmtpbmcgYWdhaW4KCgkqIGxvYWRlci9uZS9tb2R1bGUuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglGaXhlZCBsb2FkaW5nIG9mIG5hdGl2ZSBORSBkbGxzLgoKU3VuIEFwciAyNSAxOTowNDo0MiAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogbWVtb3J5L2hlYXAuYzogRml4ZWQgX19idWlsdGluX3JldHVybl9hZGRyZXNzIGFyZy4KCgkqICovKjoKCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJRml4ZWQgQU5TSSBjb21wYWJpbGxpdHkuCgoJKiAqLyo6CglCZXJ0aG8gU3R1bHRpZW5zIDxiZXJ0aG9AcGFudGVyLnNvY2kuYWF1LmRrPgoJQnVpbHQtaW4gZGxscyBub3cgaGF2ZSByZXNvdXJjZXMgYXR0YWNoZWQgdmlhIHRoZSBQRS1oZWFkZXIgbGlrZQoJbm9ybWFsIGRsbHMuIFRoaXMgZW5hYmxlcyB0aGUgdXNlIG9mIHRoZSByZXNvdXJjZSBBUEkuCgoJKiBtaXNjL3JlZ2lzdHJ5LmM6CglVc2UgJEhPTUUgaW5zdGVhZCBvZiBnZXRwd3VpZCBmb3IgdXNlcidzIGhvbWUgZGlyZWN0b3J5LgoJRml4ZWQgbWVzc2VkIHVwIGluZGVudGF0aW9uLgoKCSogZ3JhcGhpY3MveDExZHJ2L3hmb250LmM6CglVc2UgJEhPTUUgaW5zdGVhZCBvZiBnZXRwd3VpZCBmb3IgdXNlcidzIGhvbWUgZGlyZWN0b3J5LgoKCSogKi8qLmg6CglQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCSNwcmFnbWEgcGFjayg/KSBjaGFuZ2VkIHRvICNpbmNsdWRlICIqcGFjayouaCIKCgkqIHRvb2xzL2J1aWxkLmMsIGluY2x1ZGUvY29tbWN0cmwuaCwgaW5jbHVkZS9jb21tZGxnLmgsIGluY2x1ZGUvZG9jb2JqLmgsIGluY2x1ZGUvaGVhcC5oLCBpbmNsdWRlL3NoZWxsYXBpLmgsIGluY2x1ZGUvd2luYmFzZS5oLCBpbmNsdWRlL3dpbmRlZi5oLCBpbmNsdWRlL3dpbmUvb2JqX29sZWF1dC5oLCBpbmNsdWRlL3dpbmUvb2JqX3N0b3JhZ2UuaCwgaW5jbHVkZS93aW5lcnJvci5oLCBpbmNsdWRlL3dpbmdkaS5oLCBpbmNsdWRlL3dpbm5ldHdrLmgsIGluY2x1ZGUvd2lubmxzLmgsIGluY2x1ZGUvd2ludXNlci5oOgoJSmltIEFzdG9uIDxqaW1hQGNvcmVsLmNhPgoJQWRkZWQgc29tZSBtaXNzaW5nICNkZWZpbmVzIEkndmUgcnVuIGFjcm9zcy4KCgkqIGZpbGVzL2Rvc19mcy5jOiBBbmRyZWFzIE1vaHIgPGNpcGFtODk1QGNpcDEuaW5kLnVuaS1zdHV0dGdhcnQuZGU+CglJZ25vcmUgdHJhaWxpbmcgZG90cyBvbiBmaWxlIG5hbWVzLgoKCSogaW5jbHVkZS9kZWJ1Z2dlci5oLCBkZWJ1Z2dlci9kYmcueSwgZGVidWdnZXIvZGVidWcubCwgZGVidWdnZXIvZGlzcGxheS5jLCBkZWJ1Z2dlci9lZGl0bGluZS5jLCBkZWJ1Z2dlci9leHByLmMsIGRlYnVnZ2VyL2hhc2guYywgZGVidWdnZXIvbXNjLmMsIGRlYnVnZ2VyL3NvdXJjZS5jLCBkZWJ1Z2dlci9zdGFicy5jLCBkZWJ1Z2dlci9zdGFjay5jLCBkZWJ1Z2dlci90eXBlcy5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglBZGRlZCBhIHBvc3NpYmlsaXR5IHRvIGxldCB0aGUgaW50ZXJuYWwgZGVidWdnZXIgdXNlIGEgc2VwYXJhdGUKCWhlYXAuIE5vdCBlbmFibGVkIGJ5IGRlZmF1bHQsIGNoYW5nZSAjaWYgaW4gaW5jbHVkZS9kZWJ1Z2dlci5oIHRvIHVzZQoJdGhpcyAodGhlIGhlYXAgYWxsb2NhdG9yIGlzIHZlcnkgc2xvdykuCgoJKiBsb2FkZXIvbG9hZG9yZGVyLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJd2luZS5jb25mIHNob3VsZCBub3Qgb3ZlcnJ1bGUgY29udGVudCBvZiBidXJuZWQgaW4gZGF0YSBpbgoJbG9hZG9yZGVyLmMuCgoJKiBncmFwaGljcy9tYXBwaW5nLmM6IEthcmwgTGVzc2FyZCA8a2FybGxAY29yZWwuY29tPgoJU2V0TWFwTW9kZSBzaG91bGQgbm90IHJlc2V0IHRoZSB3aW5kb3cgYW5kIHZpZXdwb3J0IG9yaWdpbnMgdG8gMC4KCgkqIHRvb2xzL3dpbmVjb25mOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUFsbG93IHRvIGF1dG9tYXRpY2FsbHkgY29weSBwYXJ0IG9mIHdpbmUuaW5pIGludG8gZ2VuZXJhdGVkIGZpbGUuCglTbWFsbCBwZXJsIGVuaGFuY2VtZW50ICh3b3JrIGluIHN0cmljdCBtb2RlKS4KCVNtYWxsIHVwZGF0ZXMgaW4gaGV1cmlzdGljcy4KCgkqIHdpbmUuaW5pOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCVVwZ3JhZGVkIHRvIGhhdmUgYSBkZWNlbnQgbXVsdGltZWRpYSBETExzIGNvbmZpZ3VyYXRpb24uCgoJKiB0b29scy93cmMvd3JjLmgsIHRvb2xzL3dyYy93cml0ZXJlcy5jLCB0b29scy93cmMvQ0hBTkdFUzoKCUJlcnRobyBTdHVsdGllbnMgPGJlcnRob0Bha2hwaGQuYXUuZGs+CgktIEZpeGVkIGEgY291bnRpbmcgYnVnIGluIHRoZSB3aW4zMiBjb3VudCBhbmQgc29ydCByb3V0aW5lLgoJLSBGaXhlZCBzb3J0IG9yZGVyIG9mIHJlc291cmNlcyAobXVzdCBiZSBuYW1lIGJlZm9yZSBvcmRpbmFsKS4KCS0gU2h1ZmZsZWQgYSBjb3VwbGUgb2YgZ2xvYmFsIHZhcmlhYmxlcyBzbyB0aGF0IGJ1aWx0LWluIGRsbHMgbm93IGNhbgoJICBsb2FkIHJlc291cmNlcyB0aHJvdWdoIHRoZSBwcm9wZXIgUEUgaW50ZXJmYWNlLgoKCSogaW5jbHVkZS93aW5kZWYuaCwgaW5jbHVkZS93aW5yZWcuaDoKCUFkcmlhbiBUaHVyc3RvbiA8YWRyaWFudEBjb3JlbC5jYT4KCUFkZGVkIHN1cHBvcnQgZm9yIHN0cmljdCBoYW5kbGVzLiBPbmx5IHdvcmtzIG9uIG1hY2hpbmVzIHdoZXJlCglzaXplb2YoVUlOVCkgPT0gc2l6ZW9mKHZvaWQqKS4KCgkqIHNjaGVkdWxlci9wcm9jZXNzLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUluaXRpYWxpemUgcHJvY2VzcyBjcml0aWNhbCBzZWN0aW9uIGluIHRoZSBjb3JyZWN0IHByb2Nlc3MgY29udGV4dC4KCgkqIHNjaGVkdWxlci9jcml0c2VjdGlvbi5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglXYXJuIGlmIHdyb25nIHByb2Nlc3MgdHJpZXMgdG8gZW50ZXIgY3JpdGljYWwgc2VjdGlvbi4KCUJldHRlciBpbXBsZW1lbnRhdGlvbiBvZiBSZWluaXRpYWxpemUvVW5pbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uCgkoc3RpbGwgbm90IHF1aXRlIGNvcnJlY3QpLgoKCSogbG9hZGVyL2xvYWRvcmRlci5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCWRlYnVnLmggbXVzdCBiZSBsYXN0IGluIGxpc3Qgb2YgaW5jbHVkZXMuCgoJKiBsb2FkZXIvbmUvbW9kdWxlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVJldHVybiAzMi1iaXQgbW9kdWxlIGluIEdldE1vZHVsZUhhbmRsZTE2KCkgaWYgYXBwcm9wcmlhdGUuCgoJKiBtc2Rvcy9pbnQyZi5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUZpeGVkIGNyYXNoIHdoZW4gc3RhdHVzIHdhcyByZWFkIHdpdGggY2Qtcm9tIHRyYXkgb3Blbi4KCgkqIHdpbmRvd3MvZHJpdmVyLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJRml4ZWQgYSBidWcgaW4gbXNnIGNvbnZlcnNpb24uCgoJKiBkbGxzL2NvbWN0bDMyL3RyYWNrYmFyLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJUHJldmVudCBjcmFzaCB3aGVuIG5NaW5SYW5nZSA+IG5NYXhSYW5nZS4KCgkqIGluY2x1ZGUvd2ludXNlci5oOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUFkZGVkIHNvbWUgbWlzc2luZyBtYW5pZmVzdCBjb25zdGFudHMgZm9yIFF1ZXVlIFN0YXR1cyBmdW5jdGlvbnMgKFFTXz8/Pz8pLgoKCSogY29udHJvbHMvYnV0dG9uLmMsIGNvbnRyb2xzL2VkaXQuYywgd2luZG93cy9tZGkuYzoKCUVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJQWRkZWQgbWlzc2luZyBXSU5fUmVsZWFzZVduZFB0ci4KCgkqIGdyYXBoaWNzL3gxMWRydi94Zm9udC5jOiBDaHJpcyBNb3JnYW4gPGNtb3JnYW5Ad3BpLmVkdT4KCUphbWVzIEFiYmF0aWVsbG8gPGFiYmV5akB3cGkuZWR1PgoJTW9yZSBhcHByb3ByaWF0ZSBkZWZhdWx0IHNpemUgZm9yIGZvbnRzIHdpdGggaW52YWxpZCBzaXplcy4KCgkqIGRsbHMvY29tY3RsMzIvbGlzdHZpZXcuYzogQ2hyaXMgTW9yZ2FuIDxjbW9yZ2FuQHdwaS5lZHU+CglKYW1lcyBBYmJhdGllbGxvIDxhYmJleWpAd3BpLmVkdT4KCUltcGxlbWVudGVkIFNldENvbHVtbldpZHRoIGZvciBMaXN0VmlldyBjb250cm9sLgoKCSogZG9jdW1lbnRhdGlvbi9jb25maWc6IEFkYW0gU2FjYXJueSA8bWFnaWNib3hAYmVzdHdlYi5uZXQ+CglBZGRlZCBuZXcgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KCgkqIG1pc2MvdmVyc2lvbi5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJSW1wcm92ZWQgVkVSU0lPTl9HZXRWZXJzaW9uLgoKCSogd2luZG93cy94MTFkcnYva2V5Ym9hcmQuYzogUGV0ZXIgQm9ydGFzIDxwZXRlckBpZG9uZXguc2U+CglBZGRlZCBTd2VkaXNoIGtleWJvYXJkIGxheW91dC4KCgkqIGluY2x1ZGUvZ2RpLmgsIGluY2x1ZGUvbWV0YWZpbGVkcnYuaCwgaW5jbHVkZS93aW5nZGkuaCwgb2JqZWN0cy9jbGlwcGluZy5jLCBvYmplY3RzL2RjLmMsIG9iamVjdHMvZGN2YWx1ZXMuYywgb2JqZWN0cy9mb250LmMsIG9iamVjdHMvZ2Rpb2JqLmMsIG9iamVjdHMvbWV0YWZpbGUuYywgZ3JhcGhpY3MvbWV0YWZpbGVkcnYvTWFrZWZpbGUuaW4sIGdyYXBoaWNzL21ldGFmaWxlZHJ2L2RjLmMsIGdyYXBoaWNzL21ldGFmaWxlZHJ2L2dyYXBoaWNzLmMsIGdyYXBoaWNzL21ldGFmaWxlZHJ2L2luaXQuYywgZ3JhcGhpY3MvbWV0YWZpbGVkcnYvb2JqZWN0cy5jLCBncmFwaGljcy9wYWludGluZy5jLCBncmFwaGljcy9wc2Rydi9SRUFETUUsIGdyYXBoaWNzL3BzZHJ2L2luaXQuYywgZ3JhcGhpY3Mvd2luMTZkcnYvaW5pdC5jLCBncmFwaGljcy94MTFkcnYvaW5pdC5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglHZW5lcmFsIHRpZHkgdXAgb2YgdGhlIE1ldGFGaWxlIGRyaXZlciAtIG1ha2Ugc3VyZSB0aGF0IGV2ZXJ5dGhpbmcKCWdvZXMgdGhyb3VnaCB0aGUgRENGdW5jcyB0YWJsZS4KCgkqIG1pc2MvdG9vbGhlbHAuYywgaWYxNjMyL2tlcm5lbC5zcGVjOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJQWRkIGEgc3R1YiBmb3IgR2xvYmFsTWFzdGVySGFuZGxlLgoKCSogdG9vbHMvYnVnX3JlcG9ydC5wbDogQWRhbSBTYWNhcm55IDxtYWdpY2JveEBiZXN0d2ViLm5ldD4KCU11Y2ggbmljZXIgd2F5IHRvIHNlbGVjdCB3aW5lJ3MgbG9jYXRpb24uCglPcHRpb24gdG8gZGlzYWJsZSBjcmVhdGlvbiBvZiBkZWJ1Z2dpbmcgb3V0cHV0LgoJRGVidWdnaW5nIG91dHB1dCBpcyBub3cgY3JlYXRlZCBpbiBkaXJlY3Rvcnkgc2NyaXB0IHdhcyBzdGFydGVkIGluLgoKCSogd2luZG93cy94MTFkcnYvd25kLmM6IE5vZWwgQm9ydGh3aWNrIDxub2VsQG1hY2FkYW1pYW4uY29tPgoJRml4ZWQgYSBwcm9ibGVtIHdpdGggbWFuYWdlZCBtb2RlLCB3aGVyZSBwb3B1cCB3aW5kb3dzIHdpdGggYSBXU19ETEdGUkFNRQoJc3R5bGUgd2VyZSBhcHBlYXJpbmcgd2l0aCBhIHRpdGxlIGJhci4gQWNjb3JkaW5nIHRvIHRoZSBkb2NzIGZvcgoJV1NfRExHRlJBTUUgYSB3aW5kb3cgd2l0aCB0aGlzIHN0eWxlIGNhbm5vdCBoYXZlIGEgdGl0bGUgYmFyLgoKCSogbG9hZGVyL2xvYWRvcmRlci5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVVzZSBEbGxPdmVycmlkZXMgZnJvbSB3aW5lLmluaSBhcyBkZWZhdWx0cyBhbHNvIGluCglsb2Fkb3JkZXIuYyAobWVyZ2VkIGluIHNvbWUgTU0gZGxscyBsaW5lcyBmcm9tIEVyaWMgUG9ldWNoKS4KCgkqIHdpbmRvd3MvdGltZXIuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglGaXhlZCBzb21lIGJvZ3VzIGluZmluaXRlIGV4cGlyYXRpb24gdGltZS4KCgkqIHdpbmRvd3MveDExZHJ2L2V2ZW50LmM6IERhdmlkIEx1eWVyIDxsdXllckB1Y3MudXdhLmVkdS5hdT4KCS0gY29uc29saWRhdGUgYm90aCBjYXNlcyBvZiAhcGVuZGluZyBpbiBXYWl0TmV0RXZlbnQKCS0gc2VsZWN0KCkgcmV0dXJucyAtMSBub3QgMCBvbiBlcnJvciBpbiBXYWl0TmV0RXZlbnQKCgkqIG1lbW9yeS9oZWFwLmMsIGluY2x1ZGUvaGVhcC5oOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCU1hZGUgSGVhcFZhbGlkYXRlIHRocmVhZHNhZmUsIGFuZCBhZGRlZCBzb21lIG1hY3JvcyB0byB0cmFjayBjYWxsZXJFSVAKCWEgbGl0dGxlIGJldHRlci4KCUFkZGVkIEhFQVBfeHJlYWxsb2MuCgpTYXQgQXByIDI0IDEyOjAyOjE1IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBsb2FkZXIvbG9hZG9yZGVyLmMsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL2FjY29uZmlnLmgsIGluY2x1ZGUvY29uZmlnLmguaW4sIGluY2x1ZGUvZWxmZGxsLmgsIGxvYWRlci9lbGYuYywgbG9hZGVyL2VsZmRsbC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglhdXRvY29uZiBmaXhlcyBhbmQgY2xlYW51cHMgKGNoZWNrIGZvciBkbG9wZW4oKSBpbiBsaWJjIHRvbykuCgoJKiBvbGUvTWFrZWZpbGUuaW4sIG9sZS9oZ2xvYmFsc3RyZWFtLmMsIG9sZS9vbGUyc3R1YnMuYywgb2xlL3N0Z19zdHJlYW0uYzoKCUZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCUltcGxlbWVudGVkIENyZWF0ZVN0cmVhbU9uSEdMT0JBTC4KCgkqIG9sZS9jb21wb2JqLmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglMZXQgQ29TZXRTdGF0ZSgpIGFjY2VwdCBzdGF0ZSA9PSBOVUxMLgoKCSogZGxscy9zaGVsbDMyL3BpZGwuYywgZGxscy9zaGVsbDMyL3BpZGwuaDoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTWFkZSBpbnRlcm5hbCBmb3JtYXQgbW9yZSBjb21wYXRpYmxlLgoKCSogZGxscy9zaGVsbDMyL3NobGZvbGRlci5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTbWFsbCBmaXhlcy4KCgkqIHdpbmRvd3MvY2xhc3MuYywgd2luZG93cy9kY2UuYywgY29udHJvbHMvY29tYm8uYzoKCUd1eSBBbGJlcnRlbGxpIDxnYWxiZXJ0ZUBuZW8ubHJ1bi5jb20+CglGaXggbG9ja2luZyB3aXRoIHByb3BlciBjYWxscyB0byBXSU5fUmVsZWFzZVduZFB0ci4KCgkqIG11bHRpbWVkaWEvZHNvdW5kLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJRG9uJ3QgbWFsbG9jL2ZyZWUgZm9yIGV2ZXJ5IG1peGluZyBvcGVyYXRpb24sIHVzZSB0aGUgc2FtZSBidWZmZXIgb3ZlcgoJaW5zdGVhZC4uLgoKCSogZGxscy9jb21jdGwzMi9oZWFkZXIuYzogQ2hyaXMgTW9yZ2FuIDxjbW9yZ2FuQHdwaS5lZHU+CglKYW1lcyBBYmJhdGllbGxvIDxhYmJlanlAd3BpLmVkdT4KCUhFQURFUl9JbnNlcnRJdGVtQSBhbmQgSEVBREVSX0luc2VydEl0ZW1XIG5vdyB0cmVhdCBudWxsIHBvaW50ZXJzIHRvCgl0ZXh0IHN0cmluZ3MgYXMgbnVsbCBzdHJpbmdzLCBhcyBXaW5kb3dzIGRvZXMuICBGaXhlcyB3aW5lIGNyYXNoIG9uCglzdGFydHVwIG9mIEN1dGVGVFAuCgoJKiBtaXNjL3JlZ2lzdHJ5LmM6IE5vb21lbiBIYW16YSA8bm9vbWVuQG1hY2FkYW1pYW4uY29tPgoJU2V0ICh3aGVuIHJlZ2lzdHJ5IGxvYWRlZCkgZGF0YSB0byAiXDAiIGFuZCBsZW5ndGggdG8gMiBpbiBlbXB0eQoJc3RyaW5nIHZhbHVlIGNhc2UsIGluIHBsYWNlIG9mIHNldHRpbmcgZGF0YSB0byBOVUxMIGFuZCBsZW5ndGggdG8gMCwKCWFuZCB0aGlzIGlzIHdpdGhvdXQgaW5pdGlhbGl6aW5nIG91dHB1dCBidWZmZXIgcGFyYW1ldGVyIG9mCglSZWdRdWVyeVZhbHVlKi4KCgkqIGluY2x1ZGUvd2luZ2RpLmg6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJQWRkZWQgUGFub3NlIGRlZmluZXMgYW5kIEVYVExPR0ZPTlRbQXxXXS4KClRodSBBcHIgMjIgMTY6Mjc6NTMgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqICovKjoKCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJRml4ZWQgQU5TSSBjb21wYWJpbGxpdHkuCgoJKiBtdWx0aW1lZGlhL21jaWF2aS5jLCBtdWx0aW1lZGlhL21jaW1pZGkuYywgbXVsdGltZWRpYS9tY2l3YXZlLmMsIG11bHRpbWVkaWEvbWlkaS5jLCBvYmplY3RzL3RleHQuYywgd2luZG93cy9jYXJldC5jLCB3aW5kb3dzL3JlY3QuYywgZGxscy92ZXJzaW9uL2luZm8uYywgaWYxNjMyL3RodW5rLmMsIGluY2x1ZGUvd2luZS93aW51c2VyMTYuaCwgbWVtb3J5L2F0b20uYywgbWVtb3J5L3N0cmluZy5jLCBtaXNjL2xzdHIuYywgbXVsdGltZWRpYS9tY2lhbmltLmMsIGNvbnRyb2xzL3VpdG9vbHMuYywgZGxscy9jb21tZGxnL2ZpbmRkbGcuYywgZGxscy9zaGVsbDMyL2Jyc2ZvbGRlci5jOgoJTWljaGFlbCBWZWtzbGVyIDxtdmVrc2xlckB0ZWNodW5peC50ZWNobmlvbi5hYy5pbD4KCVJlbW92ZWQgc29tZSBpbmNsdWRlcyBvZiAxNiBiaXQgQVBJLgoKCSogZGxscy9zaGVsbDMyL3BpZGwuYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5oLCBpbmNsdWRlL29sZW9iai5oLCBpbmNsdWRlL3NobG9iai5oLCBkbGxzL3NoZWxsMzIvZGF0YW9iamVjdC5jOgoJQWRyaWFuIFRodXJzdG9uIDxhZHJpYW50QGNvcmVsLmNhPgoJSUNPTWl6YXRpb24gb2YgcmVtYWluaW5nIGludGVyZmFjZXMuCgoJKiBkbGxzL2NvbWN0bDMyL3Rvb2x0aXBzLmM6IE5vZWwgQm9ydGh3aWNrIDxub2VsQG1hY2FkYW1pYW4uY29tPgoJRml4ZWQgYnVnIHdpdGggdG9vbHRpcHMgc3RlYWxpbmcgZm9jdXMgd2hlbmV2ZXIgYSB0b29sdGlwIHdhcyBjcmVhdGVkLAoJc2hvd24sIGhpZGRlbiBvciB0cmFja2VkLiBUaGUgU2V0V2luZG93UG9zIGNhbGxzIG5lZWRlZCB0byBoYXZlIHRoZQoJU1dQX05PQUNUSVZBVEUgZmxhZyBzZXQgYWRkaXRpb25hbGx5LgoKCSogb2JqZWN0cy9jbGlwcGluZy5jOiBLYXJsIExlc3NhcmQgPGthcmxsQGNvcmVsLmNvbT4KCUZpeGVkIGNvb3JkaW5hdGVzIGNvbnZlcnNpb24gaW4gT2Zmc2V0Q2xpcFJnbi4KCgkqIGluY2x1ZGUvb2JqYmFzZS5oOiBBZHJpYW4gVGh1cnN0b24gPGFkcmlhbnRAY29yZWwuY2E+CglDbGVhbiB1cCBvYmpiYXNlLmguIE1ha2VzIHRoZSBTVERNRVRIT0Qgc2V0IG9mIG1hY3JvcyBhdmFpbGFibGUgdG8gdGhlIHdpbmVsaWIgdXNlci4KCgkqIHJlbGF5MzIva2VybmVsMzIuc3BlYywgc2NoZWR1bGVyL2hhbmRsZS5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglDcmVhdGVTb2NrZXRIYW5kbGUsR2V0SGFuZGxlQ29udGV4dCxTZXRIYW5kbGVDb250ZXh0IHN0dWJzIGFkZGVkLgoKCSogZGxscy9zaGVsbDMyL2Jyc2ZvbGRlci5jLCBkbGxzL3NoZWxsMzIvaWNvbmNhY2hlLmMsIGRsbHMvc2hlbGwzMi9yZWdzdHJlYW0uYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgaW5jbHVkZS9zaGVsbC5oLCBpbmNsdWRlL3NoZWxsYXBpLmgsIGluY2x1ZGUvc2hsb2JqLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1vdmVkIHN0dWZmIHRvIHRoZSByaWdodCBwbGFjZS4KCgkqIHdpbmRvd3Mvc3lzY29sb3IuYzogR2VyYXJkIFBhdGVsIDxnLnBhdGVsQHdhbmFkb28uZnI+CglGaXhlZCBzeXNjb2xvcnMgZm9yIHdpbiAzLjEuCgoJKiBmaWxlcy9wcm9maWxlLmMsIGlmMTYzMi9rZXJuZWwuc3BlYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWRkZWQgbWlzc2luZyBwcm9maWxlIEtFUk5FTCByb3V0aW5lcyAoY2FsbCAzMi1iaXQgdmVyc2lvbnMpLgoKCSogaWYxNjMyL2J1aWx0aW4uYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IEJVSUxUSU5fR2V0RW50cnlQb2ludDE2IGRpZG4ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRoZSBuZXcKCWVudHJ5IHRhYmxlIGxheW91dC4KCgkqIGluY2x1ZGUvd2luZ2RpLmg6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJQWRkIEVuaGFuY2VkIE1ldGFGaWxlIHJlY29yZCBzdHJ1Y3R1cmVzLgoKCSogZGxscy9jb21jdGwzMi9jb21tY3RybC5jLCBkbGxzL2NvbWN0bDMyL3Byb3BzaGVldC5jLCBpbmNsdWRlL3Jlc291cmNlLmgsIHJlc291cmNlcy9zeXNyZXNfRW4ucmM6CglUaHV5IE5ndXllbiA8dGh1eUBtYWNhZGFtaWFuLmNvbT4KCUZpcnN0IHBhdGNoIGltcGxlbWVudGluZyBwcm9wZXJ0eSBzaGVldHMuCgoJKiByZWxheTMyL2dkaTMyLnNwZWM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogR0RJMzIuMTAwLTEwNCBhcmUgb3JkaW5hbC1vbmx5IHJvdXRpbmVzLgoJQWRkZWQgc3R1YnMgZm9yIHNvbWUgV2luOTggR0RJMzIgcm91dGluZS4KCVJlLW51bWJlcmVkIGFsbCBuYW1lZCBleHBvcnRzIChsZXhpY29ncmFwaGljYWxseSkuCgoJKiBncmFwaGljcy9kcml2ZXIuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWRkZWQgcHJvdG90eXBlcyAoc3R1YnMpIGZvciBHREkzMi4xMDAtMTA0LgoKCSogZGxscy9zaGVsbDMyL2ZvbGRlcnMuYywgZGxscy9zaGVsbDMyL2ljb25jYWNoZS5jLCBkbGxzL3NoZWxsMzIvcGlkbC5jLCBkbGxzL3NoZWxsMzIvcGlkbC5oLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmgsIGRsbHMvc2hlbGwzMi9zaGVsbGxpbmsuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJLSBtb3JlIGNoZWNrcyBmb3IgdmFsaWQgcGlkbCBmb3JtYXRzCgoJKiByZWxheTMyL3NoZWxsMzIuc3BlYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIGluY2x1ZGUvc2hsb2JqLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCS0gY29ycmVjdGVkIHBhcmFtZXRlciBjb3VudCBmb3IgU0hHZXRTZXR0aW5ncwoJLSBzdHViIFNIVmFsaWRhdGVVTkMKCgkqIGxvYWRlci9lbGYuYzogR2VyYWxkIFBmZWlmZXIgPHBmZWlmZXJAZGJhaS50dXdpZW4uYWMuYXQ+CgkjZWxzZSBicmFuY2ggY29tcGlsZSBmaXguCgoJKiBpbmNsdWRlL2VsZmRsbC5oLCBsb2FkZXIvZWxmZGxsLmMsIGxvYWRlci9sb2Fkb3JkZXIuYzoKCUJlcnRobyBTdHVsdGllbnMgPGJlcnRob0BwYW50ZXIuc29jaS5hYXUuZGs+CglDaGFuZ2Ugd2luZSdzIGRsb3BlbiBzZWFyY2gtcGF0Y2ggc3RyYXRlZ3kgbm90IHVzaW5nIHRoZSBlbnZpcm9ubWVudAoJYW5kIGFkZGVkICNpZjpzIHRvIHNlcGVyYXRlIHRoZSBjb2RlIG91dCBpZiBsaWJkbCBpc24ndCBhdmFpbGJsZS4KCgkqIG9sZS9jb21wb2JqLmM6IEZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCUFkZGVkIGEgY2hlY2sgZm9yIGEgTlVMTCBwb2ludGVyIGluIENvRnJlZVVudXNlZExpYnJhcmllcy4KCgkqIHJlbGF5MzIvYnVpbHRpbjMyLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQHN0dWQuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbmNsdWRlIGRlYnVnLmggbGFzdCAoRVJSKCkgbWFjcm8gcHJvYmxlbSBvbiBTb2xhcmlzKS4KCgkqIGNvbnRyb2xzL2NvbWJvLmM6IEZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCUZpeGVkIGEgc2l6aW5nIGJ1ZyBpbiB0aGUgY29tYm9ib3ggY29udHJvbC4KCgkqIHRvb2xzL2J1aWxkLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiBJbnRlcm5hbCBORSBlbnRyeSBwb2ludCB0YWJsZXMgd2VyZSBiYWQgKG9uZSBodWdlIGJ1bmRsZSkuCgoJKiBtaXNjL3JlZ2lzdHJ5LmM6IE5vb21lbiBIYW16YSA8bm9vbWVuQG1hY2FkYW1pYW4uY29tPgoJSW5pdGlhbGl6ZSB0aGUgb3V0cHV0IGJ1ZmZlciBwYXJhbWV0ZXJzIHRvIDAgaW4gUmVnUXVlcnlWYWx1ZSoKCWZ1bmN0aW9ucy4gVGhpcyBpcyBpbXBvcnRhbnQgc3BlY2lhbGx5IHdoZW4gdGhlcmUncyBubyBkYXRhIHRvIHJldHVybi4KCgkqIGxvYWRlci9tb2R1bGUuYzogQmVydGhvIFN0dWx0aWVucyA8YmVydGhvQHBhbnRlci5zb2NpLmFhdS5kaz4KCURvIG5vdCBpbmNyZW1lbnQgbW9kdWxlIHJlZkNvdW50IGlmIHNlbGYgaXMgbG9hZGVkIGZyb20gd2l0aGluCglEbGxFbnRyeVBvaW50IGR1cmluZyB0aGUgYXR0YWNoIG5vdGlmaWNhdGlvbi4KCldlZCBBcHIgMjEgMTQ6Mjc6MzcgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGNvbnRyb2xzL21lbnUuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CgktIHByb3RlY3QgVFJBQ0UgYWdhaW5zdCBOVUxMLXB0cgoJLSByZXdyb3RlIEdldE1lbnVJdGVtSUQvR2V0U3ViTWVudSB0byB1c2UgTUVOVV9GaW5kSXRlbSAoaG1lbnU9MHhmZmZmIGZpeCkuCgoJKiBkbGxzL2NvbWN0bDMyL3Rvb2xiYXIuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJRml4ZWQgdHlwby4KCgkqIGxvYWRlci9uZS9tb2R1bGUuYzogQmVydGhvIFN0dWx0aWVucyA8YmVydGhvQHBhbnRlci5zb2NpLmFhdS5kaz4KCVJlaW1wbGVtZW50YXRpb24gb2YgR2V0TW9kdWxlSGFuZGxlMTYgYWNjb3JkaW5nIHRvIGhvdyB3aW45NSBoYW5kbGVzCglpdCAodGhhbmtzIHRvIE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPikuCgoJKiBpZjE2MzIvYnVpbHRpbi5jOiBCZXJ0aG8gU3R1bHRpZW5zIDxiZXJ0aG9AcGFudGVyLnNvY2kuYWF1LmRrPgoJQ29ycmVjdGVkIHdyb25nIHJldHVybiB2YWx1ZXMgb2YgYnVpbHQtaW4gbG9hZGVyIHRvIHdvcmsgd2l0aCB0aGUKCWxvYWRvcmRlciBzdHVmZi4KCk1vbiBBcHIgMTkgMTY6NDU6MjQgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGdyYXBoaWNzL21ldGFmaWxlZHJ2L2JpdGJsdC5jLCBncmFwaGljcy9tZXRhZmlsZWRydi9pbml0LmMsIGluY2x1ZGUvYml0bWFwLmgsIGluY2x1ZGUvbWV0YWZpbGVkcnYuaCwgb2JqZWN0cy9kaWIuYywgb2JqZWN0cy9tZXRhZmlsZS5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglJbXBsZW1lbnRlZCByZWNvcmRpbmcgb2YgU3RyZXRjaERJQml0cyBhbmQgU2V0RElCaXRzVG9EZXZpY2UgYW5kCglwbGF5YmFjayBvZiBTZXRESUJpdHNUb0RldmljZS4gQ2xlYW5lZCB1cCBQbGF5TWV0YUZpbGVSZWNvcmQgYSBiaXQuCgoJKiBpbmNsdWRlL2VsZmRsbC5oLCBsb2FkZXIvZWxmLmMsIGxvYWRlci9lbGZkbGwuYywgbG9hZGVyL2xvYWRvcmRlci5jOgoJQmVydGhvIFN0dWx0aWVucyA8YmVydGhvQHBhbnRlci5zb2NpLmFhdS5kaz4KCVJlbW92ZWQgbm9uLXBvcnRhYmxlIGhhY2tzIGFuZCByZXBsYWNlZCB0aGVtIHdpdGggbW9yZSBnZW5lcmFsCgl2ZXJzaW9ucy4KCgkqIHdpbmRvd3MvZGNlLmM6IFBhdWwgTWlsbGFyIDxwYXVsbUBhc3Ryby5nbGEuYWMudWs+CglDb2RlIGFkZGVkIHRvIHJlLWV2YWx1YXRlIHN0YWxlIERDIGluZm9ybWF0aW9uIGluIERDRSBjYWNoZS4KCgkqIGxvYWRlci9tb2R1bGUuYzogQmVydGhvIFN0dWx0aWVucyA8YmVydGhvQHBhbnRlci5zb2NpLmFhdS5kaz4KCUF0dGFjaCBub3RpZmljYXRpb25zIG11c3QgYmUgc2VuZCBhZnRlciBhbGwgcmVjdXJzaXZlIGRlcGVuZGVuY2llcyBhcmUKCWxvYWRlZCBhbmQgbm90IGJlZm9yZS4KCgkqIGdyYXBoaWNzL3gxMWRydi9wYWxldHRlLmM6IFBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJRml4ZWQgdHlwby4KCgkqIG11bHRpbWVkaWEvbWNpY2RhLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJRml4ZWQgcGxheWluZyBwb3NpdGlvbiB3aGVuIHJlcXVpcmVkIGJ5IHRyYWNrIG51bWJlci4KCgkqIHdpbjMyL2RldmljZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFkZGVkIE1NREVWTERSIERldmljZUlvY3RsKDUpIHN0dWIgKG1zYWNtMzIgaXMgYSBiaXQgaGFwcGllciBub3cpLgoKCSogd2luZS5pbmk6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJTmF0aXZlIHRvb2xoZWxwIHdpbGwgbm90IHdvcmsgKG1pc3NpbmcgR0xPQkFMTUFTVEVSSEFORExFKS4KCgkqIEJVR1MsIFJFQURNRTogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglVcGRhdGVkLgoKCSogY29udHJvbHMvZWRpdC5jOiBHZXJhcmQgUGF0ZWwgPGcucGF0ZWxAd2FuYWRvby5mcj4KCVRlc3QgZm9yIHN0YXRpYyB3YXMgcmV2ZXJzZWQuCgoJKiAqLyo6CglQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCU5ldyBkZWJ1ZyBzY2hlbWUgd2l0aCBleHBsaWNpdCBkZWJ1ZyBjaGFubmVscyBkZWNsYXJhdGlvbi4KClN1biBBcHIgMTggMTQ6NDQ6MjYgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGxvYWRlci9uZS9tb2R1bGUuYzogUmVtb3ZlZCBleHRyYSBjYWxsIHRvIFRBU0tfU3RhcnRUYXNrLgoKCSogaW5jbHVkZS9hY2NvbmZpZy5oLCBpbmNsdWRlL2NvbmZpZy5oLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKCVJlbW92ZWQgY2hlY2sgZm9yIHVuaW9uIHNlbXVuOyBjbGVhbmVkIHVwIGEgYml0LgoKCSogaW5jbHVkZS9zZXJ2ZXIuaCwgc2VydmVyL3Byb2Nlc3MuYywgc2VydmVyL3RyYWNlLmMsIHRvb2xzL21ha2VfcmVxdWVzdHM6CglBZGRlZCBlbnYgcHRyIHRvIG5ld19wcm9jZXNzIHJlcXVlc3QKCgkqIHJlbGF5MzIvdXNlcjMyLnNwZWMsIHdpbmRvd3MvbWRpLmMsIGNvbnRyb2xzL21lbnUuYywgaW5jbHVkZS9tZW51LmgsIGluY2x1ZGUvd2ludXNlci5oOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CgktIHVzZSBmb250cy9mb250c2l6ZXMgZ2l2ZW4gYnkgU3lzdGVtUGFyYW1ldGVyc0luZm8KCS0gZHJhd2luZy9hbGlnbm1lbnQgZml4ZXMsIHdpbjk4IHN0eWxlIGZvciBtZW51YmFyCgktIG93bmVyZHJhd24gbWVudXMgYXJlIHdvcmtpbmcgbm93IGZvciB0aGUgZmlyc3QgdGltZQoJLSBjb21wbGV0ZSBjb25zdGFudHMgbWFnaWMgaXRlbXMKCS0gdXNlIHJpZ2h0IG93bmVyIGZvciBwb3B1cG1lbnVzCgktIG5ldzogR2V0L1NldE1lbnVJbmZvCgktIGltcGxlbWVudGVkOiBHZXQvU2V0TWVudUNvbnRleHRIZWxwSWQKCS0gbW9yZSBmbGFncyBmb3IgR2V0L1NldE1lbnVJdGVtSW5mbwoKCSogZmlsZXMvZG9zX2ZzLmM6IHJvYmVydCB3IGhhbGwgPGJvYmhAbi1jYW50cmVsbC5kZW1vbi5jby51az4KCU1ha2UgRE9TRlNfTWF0Y2hMb25nIG1hdGNoIGEgc2VhcmNoIHN0cmluZyBlbmRpbmcgaW4gJyouJyB0byBhIHplcm8KCWV4dGVuc2lvbiBmaWxlIG5hbWUsIGFsbG93aW5nIE1hdGhjYWQgdG8gcnVuLgoKCSogbG9hZGVyL2xvYWRvcmRlci5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUZpeGVkIG1lbW9yeSBmcmVlaW5nLgoKCSogcHJvZ3JhbXMvY21kbGd0c3QvQXR0aWMvY21kbGdyLmgsIHByb2dyYW1zL2NtZGxndHN0L2NtZGxnci5yYywgcHJvZ3JhbXMvY21kbGd0c3QvY21kbGd0c3QuYywgcHJvZ3JhbXMvY21kbGd0c3QvY21kbGd0c3QuaDoKCVJlbmFtZWQgY21kbGdyLmggdG8gY21kbGd0c3QuaC4KCgkqIHNjaGVkdWxlci9jcml0c2VjdGlvbi5jOiBBZGRlZCB0aW1lb3V0IHRvIGNyaXRpY2FsIHNlY3Rpb24gd2FpdGluZy4KCgkqIGluY2x1ZGUvdGhyZWFkLmgsIHNjaGVkdWxlci9zeXNkZXBzLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCU1lcmdlZCBMaW51eC9GcmVlQlNEIHJlZW50cmFudCBlcnJubyBoYW5kbGVyLCBhZGRlZCBTb2xhcmlzLgoJUHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgU29sYXJpcyBsb3ctbGV2ZWwgdGhyZWFkcyAoTFdQcykgYWRkZWQuCgoJKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9hY2NvbmZpZy5oLCBpbmNsdWRlL2NvbmZpZy5oLmluOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglSZWVudHJhbnQgbGliYyBjaGVjayBmb3IgU29sYXJpcyBhZGRlZC4KCUZpeGVkIHJlZW50cmFudCBYMTEgY2hlY2sgZm9yIEZyZWVCU0QgYW5kIFNvbGFyaXMuCglBZGRlZCBjaGVjayBmb3IgU29sYXJpcyBsb3ctbGV2ZWwgdGhyZWFkIHJvdXRpbmVzLgoKCSogbG9hZGVyL25lL21vZHVsZS5jOgoJRml4ZWQgdG9vbGhlbHAgcm91dGluZXMgdXNhZ2UgaW4gR2V0TW9kdWxlRnJvbVBhdGggKHJlcG9ydGVkIGJ5IEJlcnRobwoJU3R1bHRpZW5zKS4KCgkqIHRvb2xzL3dpbmVpbnN0YWxsOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUF1dG9tYXRpYyBpbnN0YWxsIHNjcmlwdCwgd2hpY2ggYXV0b21hdGljYWxseSBjb25maWd1cmVzIGFuZCBjb21waWxlcwoJd2luZSBhbmQgcmVnYXBpLCBydW5zIHRvb2xzL3dpbmVjb25mIHRvIGdlbmVyYXRlIGEgY29uZmlndXJhdGlvbiBmaWxlCglpZiBvbmUgZG9lcyBub3QgYWxyZWFkeSBleGlzdCwgYW5kIHVzZXMgcmVnYXBpIHRvIGluc3RhbGwgdGhlIGRlZmF1bHQKCXJlZ2lzdHJ5LgoKCSogZG9jdW1lbnRhdGlvbi9ndWksIHdpbmRvd3Mvd2luLmMsIHdpbmRvd3Mvd2lucG9zLmM6CglFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCVByb3Blcmx5IGhhbmRsaW5nIGNhc2VzIGxpa2UgY2FsbGluZyBTZXRXaW5kb3dQb3Mgd2hpbGUgcHJvY2Vzc2luZwoJV01fTkNDUkVBVEUuCgoJKiBncmFwaGljcy94MTFkcnYvZGliLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJRml4ZWQgYSBmZXcgYnVncyAodHlwb3MgZnJvbSBjdXQgJiBwYXN0ZSAmIGludmFsaWQgaGVhcCBibG9jawoJZnJlZWluZykuCgoJKiBtaXNjL3dzcHJpbnRmLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJQnVnIGZpeCBpbiBHZXRMZW4uCgoJKiBsb2FkZXIvbmUvbW9kdWxlLmMsIGxvYWRlci9wZV9pbWFnZS5jLCBtZW1vcnkvZ2xvYmFsLmMsIG1pc2MvbWFpbi5jLCBtaXNjZW11L21haW4uYywgcmVsYXkzMi9idWlsdGluMzIuYywgc2NoZWR1bGVyL3Byb2Nlc3MuYywgc2NoZWR1bGVyL3RocmVhZC5jLCBpZjE2MzIvYnVpbHRpbi5jLCBpbmNsdWRlL2J1aWx0aW4zMi5oLCBpbmNsdWRlL21vZHVsZS5oLCBpbmNsdWRlL3BlX2ltYWdlLmgsIGluY2x1ZGUvd2luZXJyb3IuaCwgbG9hZGVyL01ha2VmaWxlLmluLCBsb2FkZXIvZWxmLmMsIGxvYWRlci9tYWluLmMsIGxvYWRlci9tb2R1bGUuYzoKCUJlcnRobyBTdHVsdGllbnMgPGJlcnRob0BwYW50ZXIuc29jaS5hYXUuZGs+CglSZW9yZ2FuaXphdGlvbiBvZiB0aGUgbG9hZGVyIHRvIGNvcnJlY3RseSBsb2FkIGFuZCBmcmVlIGxpYnJhcmllcyBhbmQKCWltcGxlbWVudGF0aW9uIG9mIGxvYWQgb3JkZXIgdG8gbG9hZCBkaWZmZXJlbnQgdHlwZXMgb2YgbGlicmFyaWVzLgoKCSogZG9jdW1lbnRhdGlvbi93aW5lLm1hbjogQmVydGhvIFN0dWx0aWVucyA8YmVydGhvQHBhbnRlci5zb2NpLmFhdS5kaz4KCVVwZGF0ZWQgY29tbWFuZGxpbmUgY2hhbmdlcyBvZiAtZGxsIG9wdGlvbiBhbmQgd2luZS5jb25mIGVudHJpZXMuCgoJKiB3aW5lLmluaTogQmVydGhvIFN0dWx0aWVucyA8YmVydGhvQHBhbnRlci5zb2NpLmFhdS5kaz4KCVVwZGF0ZWQgdGhlIGV4YW1wbGUgd2l0aCB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gZW50cmllcy4KCgkqIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uYzoKCUJlcnRobyBTdHVsdGllbnMgPGJlcnRob0BwYW50ZXIuc29jaS5hYXUuZGs+CglCdWdmaXg6IGZyZWUgbG9hZGVkIGxpYnJhcnkgbm90IGJlZm9yZSBleGl0LgoKCSogaW5jbHVkZS9lbGZkbGwuaCwgaW5jbHVkZS9sb2Fkb3JkZXIuaCwgbG9hZGVyL2VsZmRsbC5jLCBsb2FkZXIvbG9hZG9yZGVyLmM6CglCZXJ0aG8gU3R1bHRpZW5zIDxiZXJ0aG9AcGFudGVyLnNvY2kuYWF1LmRrPgoJTmV3IGZpbGVzIHRvIHN1cHBvcnQgbG9hZCBvcmRlciBhbmQgcGFydGlhbCBzdHVicyBmb3IgZWxmZGxscy4KCgkqIGdyYXBoaWNzL21ldGFmaWxlZHJ2L29iamVjdHMuYywgZ3JhcGhpY3MveDExZHJ2L2RpYi5jLCBpbmNsdWRlL2JpdG1hcC5oLCBvYmplY3RzL2JydXNoLmMsIG9iamVjdHMvY3Vyc29yaWNvbi5jLCBvYmplY3RzL2RpYi5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglGaXhlcyBmb3IgdXBzaWRlLWRvd24gRElCcy4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IExpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJQ2hhbmdlZCAnR2V0RGlzcGxheU1vZGUnIHRvIHJldHVybiB0aGUgbW9kZSBwcmV2aW91c2x5IHNldCBieQoJJ1NldERpc3BsYXlNb2RlJyAoYW5kIG5vdCB0aGUgY3VycmVudCBtb25pdG9yIG1vZGUpLgoKCSogaW5jbHVkZS90YWIuaCwgZGxscy9jb21jdGwzMi90YWIuYzoKCUx1YyBUb3VyYW5nZWF1IDxsdWNAbWFjYWRhbWlhbi5jb20+CgktSW1wbGVtZW50ZWQgVENTX0JVVFRPTlMsIFRDU19GSVhFRFdJRFRILCBUQ01fR0VUSVRFTVJFQ1QsCglUQ01fU0VUSVRFTVNJWkUgYW5kIFRDTV9ERUxFVEVJVEVNLgoKCSogb2JqZWN0cy9jdXJzb3JpY29uLmM6IFBhdmVsIFJvc2tpbiA8cGF2ZWxfcm9za2luQGdlb2NpdGllcy5jb20+CglMb29rdXBJY29uSWRGcm9tRGlyZWN0b3J5RXgxNigpIGZpeGVkOiBpZiBHZXRTeXN0ZW1QYWxldHRlRW50cmllcygpCglyZXR1cm5zIDAsIGl0IGlzIGludGVycHJldGVkIGFzIGlmIGl0IHdlcmUgMjU2LgoKCSogbG9hZGVyL21vZHVsZS5jLCBzY2hlZHVsZXIvcHJvY2Vzcy5jOgoJS2V2aW4gSG9sYnJvb2sgPGt3aEBuZW9zb2Z0LmNvbT4KCUZpeCBhbWJpZ3VvdXMgZWxzZSB3YXJuaW5nLgoKCSogd2luZG93cy9zeXNjb2xvci5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUxvYWRpbmcgY29sb3IgdmFsdWVzIGZyb20gdGhlIHJlZ2lzdHJ5IGZpeGVkLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogQnJpYW4gR2Vyc3QgPGJnZXJzdEBxdWFyay52cHBsdXMuY29tPgoJLSBSZW1vdmVkIGFsbCBmbG9hdGluZyBwb2ludCBtYXRoLgoJLSBJbXBsZW1lbnRlZCBzdHJldGNoaW5nIGluIFggYW5kIFkgZGlyZWN0aW9ucyBmb3IgOCwgMTYsIGFuZCAzMiBiaXQgY29sb3IuCgktIEltcGxlbWVudGVkIHNvdXJjZSBhbmQgZGVzdCBjb2xvci1rZXlpbmcgZm9yIDgsIDE2LCBhbmQgMzIgYml0IGNvbG9yLgoJLSBJbXBsZW1lbnRlZCBzb21lIHRyaXZpYWwgcmFzdGVyIG9wZXJhdGlvbnMuCgktIE1pbmltaXplZCBpbm5lciBsb29wcyBmb3IgbWF4aW11bSBzcGVlZC4KCS0gVXNlIG1lbWNweSB3aGVuZXZlciBwb3NzaWJsZS4KCgkqIG11bHRpbWVkaWEvYXVkaW8uYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglSZWR1Y2VkIGZyYWdtZW50IHNpemUuCglSZW9yZ2FuaXplZCB3b2RPcGVuICh3aXRoIHN1cHBvcnQgZm9yIFdBVkVfUVVFUllfRk9STUFUKS4KCUZpeGVkIGJ1ZmZlciB1bmRlcnJ1biByZWNvdmVyeS4KCUZpeGVkIGJ1ZyBpbiB3b2RSZXNldCgpL3dvZENsb3NlKCkuCgoJKiBvbGUvc3RvcmFnZTMyLmM6IE1pY2hhZWwgVmVrc2xlciA8bXZla3NsZXJAdGVjaHVuaXgudGVjaG5pb24uYWMuaWw+CglTaW1wbGlmeSBwcm9wZXJ0eU5hbWVDbXAoKSBhbmQgZml4IGEgd2FybmluZyBpbiB0aGUgd2F5IGJ5IHJlbW92aW5nCglDUlRETExfX3djc3VwcigpIGNhbGxzLgoKCSogbWlzYy9kZGVtbC5jOiBLZWl0aCBNYXR0aGV3cyA8a2VpdGhfbUBzd2VlbmV5LmRlbW9uLmNvLnVrPgoJRGRlTmFtZVNlcnZpY2U6IGV4cGFuc2lvbiBvZiBzdHViIHRvIHRyYXAgdW51c2VkIGluc3RhbmNlaWRzIGF0IHN0YXJ0IG9mIHJ1bi4KCURkZUdldExhc3RFcnJvcjogY2F0Y2ggJ25vdCBpbml0aWFsaXplZCcgc2l0dWF0aW9uIGFuZCByZXR1cm4gY29ycmVjdCByZXNwb25zZS4KCURkZUZyZWVTdHJpbmdIYW5kbGU6IGNvbXBsZXRlIHRlc3QgZm9yIGVycm9yIHNldCBieSBwcmV2aW91cyBjYWxsIG9mCglzb21ldGhpbmcgYW5kIGlnbm9yZSBpdCwgYWxzbyByZWxlYXNlIGhhbmRsZSB0YWJsZSBtdXRleCBvbiBub3JtYWwgZXhpdC4KCURkZVF1ZXJ5U3RyaW5nQSwgRGRlUXVlcnlTdHJpbmdXLCBEZGVDcmVhdGVTdHJpbmdIYW5kbGVXOiBSZWxlYXNlCgloYW5kbGUgdGFibGUgbXV0ZXggb24gbm9ybWFsIGV4aXQuCgoJKiBpbmNsdWRlL3duZXQuaCwgbWlzYy9uZXR3b3JrLmM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglEb24ndCBhbm5vdW5jZSB0aGUgV05ldERpcmVjdG9yeU5vdGlmeSBjYXBhYmlsaXR5IFdOZXRHZXRDb25uZWN0aW9uLgoJQ2hhbmdlIHRoZSByZXR1cm4gdmFsdWUgZm9yIGxvY2FsIGZpbGVzLgoKCSogd2luZG93cy9tb3VzZS5jOiBNaWNoYWVsIFZla3NsZXIgPG12ZWtzbGVyQHRlY2h1bml4LnRlY2huaW9uLmFjLmlsPgoJQWRkICJ3aW4uaCIgdG8gZml4IGltcGxpY2l0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uIHdhcm5pbmdzLgoKCSogY29uc29sZS9pbnRlcmZhY2UuYywgaW5jbHVkZS9jb25zb2xlLmg6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCU9ubHkgZGVjbGFyZSBjb25zb2xlICJkcml2ZXIiIG9uY2UsIHVzZSBleHRlcm5hbCByZWZzIGVsc2V3aGVyZS4KCgkqIGNvbnRyb2xzL2xpc3Rib3guYzogTHVjIFRvdXJhbmdlYXUgPGx1Y0BtYWNhZGFtaWFuLmNvbT4KCVdoZW4gdGhlIHZlcnRpY2FsIHNjcm9sbGJhciBpcyByZW1vdmVkLCB0aGUgYmFja2dyb3VuZCB3YXMgbm90Cglwcm9wZXJseSByZXBhaW50ZWQuCgoJKiBsb2FkZXIvc2lnbmFsLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRGlzYWJsZSBBQyBiaXQgb24gcmVjZWl2aW5nIGFsaWdubWVudCBleGNlcHRpb25zLgoKCSogbWlzYy9tYWluLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3lzdGVtUGFyYW1ldGVyc0luZm8gU1BJX0dFVE5PTkNMSUVOVE1FVFJJQ1M6IGltcGxlbWVudGVkIG1lbnUgcGFydC4KCgkqIHdpbmRvd3MveDExZHJ2L2V2ZW50LmM6IE5vZWwgQm9ydGh3aWNrIDxub2VsQG1hY2FkYW1pYW4uY29tPgoJV2hpbGUgaGFuZGxpbmcgdGhlIFdNX0RFTEVURVdJTkRPVyBjbGllbnQgbWVzc2FnZSBjaGVjayBpZiBhIHdpbmRvdwoJaGFzIGJlZW4gZGlzYWJsZWQgYW5kIGlmIHNvIHByZXZlbnQgYW4gU0NfQ0xPU0UgbWVzc2FnZSBmcm9tIGJlaW5nCglzZW50LgoKCSogd2luZG93cy9kY2UuYzogTm9lbCBCb3J0aHdpY2sgPG5vZWxAbWFjYWRhbWlhbi5jb20+CglNYWtlIGFjY2VzcyB0byB0aGUgRENFIGxpc3QgdGhyZWFkIHNhZmUgYnkgZW5zdXJpbmcgd2UgaGF2ZSBhY3F1aXJlZAoJdGhlIFdpbmRvd3MgbG9jayBiZWZvcmUgdXNpbmcgaXQuCgpGcmkgQXByIDE2IDE1OjE5OjE0IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiByZXNvdXJjZXMvLmN2c2lnbm9yZTogQ2hhbmdlZCBmb3IgcmVuYW1lZCBmaWxlcwoKCSogbWlzYy93aW5zb2NrX2FzeW5jLmMsIG1zZG9zL2Rvc2NvbmYuYywgd2luZG93cy91c2VyLmM6CglNaWNoYWVsIFZla3NsZXIgPG12ZWtzbGVyQHRlY2h1bml4LnRlY2huaW9uLmFjLmlsPgoJRml4ZWQgd2FybmluZ3MuCgoJKiBvbGUvbmxzL3dhbC5ubHMsIG9sZS9vbGUybmxzLmMsIHJlc291cmNlcy9BdHRpYy9zeXNyZXNfQ3oucmMsIHJlc291cmNlcy9BdHRpYy9zeXNyZXNfUG8ucmMsIHJlc291cmNlcy9BdHRpYy9zeXNyZXNfU3cucmMsIHJlc291cmNlcy9NYWtlZmlsZS5pbiwgcmVzb3VyY2VzL3N5c3Jlcy5jLCByZXNvdXJjZXMvc3lzcmVzX0NzLnJjLCByZXNvdXJjZXMvc3lzcmVzX1B0LnJjLCByZXNvdXJjZXMvc3lzcmVzX1N2LnJjLCByZXNvdXJjZXMvc3lzcmVzX1dhLnJjLCB3aW5kb3dzL3gxMWRydi9rZXlib2FyZC5jLCBkb2N1bWVudGF0aW9uL3dpbmUubWFuLCBpbmNsdWRlL29wdGlvbnMuaCwgaW5jbHVkZS93aW5ubHMuaCwgbWlzYy9tYWluLmM6CglQYWJsbyBTYXJhdHhhZ2EgPHBhYmxvLnNhcmFjaGFnYUBwaW5nLmJlPgoJQWRkZWQgd2Fsb24gbGFuZ3VhZ2Ugc3VwcG9ydCAoSSBhbHNvIG1vdmVkIEN6IC0+IENzLCBTdyAtPiBTdiwgYW5kIFBvCgktPiBQdDsgdG8gY29uZm9ybSB0byBzdGFuZGFyZCBuYW1lcyBmb3IgdGhvc2UgbGFuZ3VhZ2VzKS4KCgkqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCByZWxheTMyL01ha2VmaWxlLmluOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGQgLWZuby1idWlsdGluIHdoZW4gY29tcGlsaW5nIHdpdGggZ2NjIGluIHJlbGF5MzIvIHN1YmRpci4KCgkqIGluY2x1ZGUvbW9kdWxlLmgsIGxvYWRlci9uZS9tb2R1bGUuYywgbG9hZGVyL25lL3NlZ21lbnQuYywgdG9vbHMvYnVpbGQuYywgaWYxNjMyL2J1aWx0aW4uYzoKCUFuZHJlYXMgTW9ociA8Y2lwYW04OTVAY2lwMS5pbmQudW5pLXN0dXR0Z2FydC5kZT4KCS0gSW1wbGVtZW50ZWQgcHJvcGVyICgicmVhbCIsIGNvbXByZXNzZWQpIFdpbjE2IGVudHJ5IHRhYmxlcy4KCS0gRml4ZWQgTXlBbGxvYyAoQUtBIE5FX0FsbG9jYXRlU2VnbWVudCkuCgktIEltcGxlbWVudGVkIFBhdGNoQ29kZUhhbmRsZTE2LgoKCSogdG9vbHMvQXR0aWMvbWFrZV9vczIuc2gsIHRvb2xzL21ha2Vfb3MyLmNtZCwgZ3JhcGhpY3MvcGF0aC5jLCBncmFwaGljcy9wc2Rydi9ncmFwaGljcy5jLCBpbmNsdWRlL3NpZ19jb250ZXh0Lmg6CglSb2JlcnQgUG91bGlvdCA8a3J5bm9zQGNsaWMubmV0PgoJQSBmZXcgcGF0Y2hlcyB0byBoZWxwIFdpbmUgdG8gY29tcGlsZSBvbiBPUy8yLgoKVGh1IEFwciAxNSAxNjo0Njo1MSAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZ3JhcGhpY3MvbWV0YWZpbGVkcnYvYml0Ymx0LmMsIGdyYXBoaWNzL21ldGFmaWxlZHJ2L2dyYXBoaWNzLmMsIGdyYXBoaWNzL21ldGFmaWxlZHJ2L2luaXQuYywgZ3JhcGhpY3MvbWV0YWZpbGVkcnYvbWFwcGluZy5jLCBncmFwaGljcy9tZXRhZmlsZWRydi9vYmplY3RzLmMsIGdyYXBoaWNzL21ldGFmaWxlZHJ2L3RleHQuYywgaW5jbHVkZS9tZXRhZmlsZS5oLCBpbmNsdWRlL21ldGFmaWxlZHJ2LmgsIG9iamVjdHMvY2xpcHBpbmcuYywgb2JqZWN0cy9kYy5jLCBvYmplY3RzL2RjdmFsdWVzLmMsIG9iamVjdHMvbWV0YWZpbGUuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJQ2hhbmdlICgzMiBiaXQpIEhNRVRBRklMRXMgdG8gR0RJIG9iamVjdHMgKEhNRVRBRklMRTE2cyByZW1haW4gYXMKCWdsb2JhbCBtZW1vcnkgaGFuZGxlcykuICBGaXhlZCBkaXNrLWJhc2VkIE1ldGFGaWxlcy4gIEJldHRlcgoJc2VwYXJhdGlvbiBiZXR3ZWVuIE1ldGFGaWxlIHBsYXliYWNrIGFuZCB0aGUgbWV0YWZpbGVkcnYuCgoJKiBtaXNjL2NydGRsbC5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCV9DSXBvdyBhcmd1bWVudCBvcmRlciB3YXMgY29uZmlybWVkIHdpdGggU3RhcmNyYWZ0IHYxLjA1LgoKCSogZG9jdW1lbnRhdGlvbi9rZXlib2FyZDogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglDbGFyaWZpZWQgYSBmZXcgcG9pbnRzLgoKCSogbXNkb3MvaW50MjEuYzogQmVydGhvIFN0dWx0aWVucyA8YmVydGhvQHBhbnRlci5zb2NpLmFhdS5kaz4KCUFkZGVkIElPQ1RMIGZ1bmN0aW9uIDB4NDQwZC8weDcyLgoKCSogcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCBzY2hlZHVsZXIvY3JpdHNlY3Rpb24uYzoKCUJlcnRobyBTdHVsdGllbnMgPGJlcnRob0BwYW50ZXIuc29jaS5hYXUuZGs+CglVbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uIHBhcnRpYWwgc3R1YiBpbXBsZW1lbnRhdGlvbi4KCgkqIGluY2x1ZGUvd2luYmFzZS5oOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUFkZGVkIG1pc3NpbmcgcHJvdG8gZm9yIEdldEV4aXRDb2RlVGhyZWFkLgoKCSogaW5jbHVkZS9kcml2ZXIuaCwgaW5jbHVkZS93aW5lL2tleWJvYXJkMTYuaDoKCU1pY2hhZWwgVmVrc2xlciA8bXZla3NsZXJAdGVjaHVuaXgudGVjaG5pb24uYWMuaWw+CglBZGRlZCBtaXNzaW5nIHdpbmRlZi5oIGluY2x1ZGVzLgoKCSogd2luZG93cy9pbnB1dC5jLCBpbmNsdWRlL3dpbnVzZXIuaDoKCVp5Z28gQmxheGVsbCA8dWoyMmtmYmNAdW1haWwuZnVycnl0ZXJyb3Iub3JnPgoJUmVsZWFzZUNhcHR1cmUoKSBpcyBzdXBwb3NlZCB0byByZXR1cm4gYSBCT09MIHZhbHVlLgoKCSogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvY29uZmlnLmguaW4sIGxvYWRlci9zaWduYWwuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRnJlZUJTRCAzIG11bHRpdGhyZWFkaW5nIGZpbmFsIGZpeC4gRG8gbm90IHVzZSBsaWJjX3IsIGxpYmMgaXMganVzdCBhcwoJcmVlbnRyYW50IGNvbmNlcm5pbmcgZXJybm8uIFJldmVydCB1bm5lZWRlZCBGcmVlQlNEIGhhY2sgdG8KCWxvYWRlci9zaWduYWwuYyBmcm9tIGxhc3QgcGF0Y2guCgoJKiB3aW5kb3dzL3gxMWRydi9rZXlib2FyZC5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglpbmRleCA9PSAzIGNvcnJlc3BvbmRzIHRvIEFsdC1HciArIFNoaWZ0LgoKCSogbWlzYy9kZGVtbC5jOiBLZWl0aCBNYXR0aGV3cyA8a2VpdGhfbUBzd2VlbmV5LmRlbW9uLmNvLnVrPgoJTW9yZSBvZiBEZGVDcmVhdGVTdHJpbmdIYW5kbGVBLCBEZGVGcmVlU3RyaW5nSEFuZGxlLCBEZGVRdWVyeVN0cmluZ0EKCWFuZCBEZGVDcmVhdGVTdHJpbmdIYW5kbGVXIGFuZCB0aWR5IHVwIG9mIFJlbW92ZUhTWk5vZGVzLCBhbmQKCURkZUNyZWF0ZVN0cmluZ0hhbmRsZUEuCgoJKiB3aW5kb3dzL3gxMWRydi9tYWluLmMsIGdyYXBoaWNzL3gxMWRydi9iaXRibHQuYywgZ3JhcGhpY3MveDExZHJ2L3BhbGV0dGUuYywgaW5jbHVkZS94MTFkcnYuaDoKCVBhdmVsIFJvc2tpbiA8cGF2ZWxfcm9za2luQGdlb2NpdGllcy5jb20+CglGaXhlZCB1Z2x5IGRpc2FibGVkIGNvbnRyb2xzIGFuZCBibGFjayBiYWNrZ3JvdW5kIGluIFdyaXRlIGFuZCBMb3R1cwoJTm90ZXMuCgoJKiBjb250cm9scy9idXR0b24uYywgaW5jbHVkZS9idXR0b24uaCwgaW5jbHVkZS93aW51c2VyLmg6CglQYXNjYWwgTGVzc2FyZCA8cGFzY2FsQG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50IHRoZSBidXR0b24gd2l0aCBiaXRtYXBzLgoKCSogaW5jbHVkZS93aW5lL29ial9zdG9yYWdlLmgsIG9sZS9zdGdfc3RyZWFtLmMsIG9sZS9zdG9yYWdlMzIuYzoKCVN0ZXBoYW5lIEx1c3NpZXIgPHN0ZXBoYW5lQG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50YXRpb24gb2YgSVN0b3JhZ2U6OkNvcHlUbyBhbmQgSVN0cmVhbTo6Q29weVRvLgoKCSogbG9hZGVyL3Rhc2suYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IEFsd2F5cyByZWxlYXNlIHRoZSBXaW4xNkxvY2sgaW4gVEFTS19SZXNjaGVkdWxlLgoKCSogd2luZG93cy94MTFkcnYvZXZlbnQuYzogRnJhbmNvaXMgQm9pc3ZlcnQ8ZnJhbmNvaXNAbWFjYWRhbWlhbi5jb20+CglTb2x2ZWQgYSBkZWFkbG9jayBiZXR3ZWVuIGdsb2JhbCBsb2NrIGFuZCB3bmQgbG9jayBpbiBldmVudC5jLgoKCSogZGxscy9zaGVsbDMyL2ljb25jYWNoZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVR5cG8gdGhhdCBicm9rZSBTb2xhcmlzIGNvbXBpbGUgZml4ZWQuCgoJKiBjb250cm9scy9kZXNrdG9wLmM6IEZyYW5jb2lzIEJvaXN2ZXJ0PGZyYW5jb2lzQG1hY2FkYW1pYW4uY29tPgoJQWRkIGEgV0lOX1JlbGVhc2VEZXNrdG9wIGluIERFU0tUT1BfSXNTaW5nbGVXaW5kb3cuCgoJKiB3aW5kb3dzL3gxMWRydi9rZXlib2FyZC5jOiBHdXkgQWxiZXJ0ZWxsaSA8Z2FsYmVydGVAbmVvLmxydW4uY29tPgoJRml4IHNjYW5jb2RlcyBmb3IgTnVtTG9jayBhbmQgTnVtLS8uCglGaXggTWFwVmlydHVhbEtleSgpIChtYXB0eXBlPTIpIHRvIHJldHVybiBwcm9wZXIgYXNjaWkgY29kZS4KCVJld29ya2VkIEdldEtleU5hbWVUZXh0KCkgYWdhaW4uCgoJKiBncmFwaGljcy9wc2Rydi9mb250LmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUxpbWl0IGxhc3RDaGFyIHRvIDB4ZmYgaW4gUFNEUlZfR2V0Q2hhcldpZHRoLgoKCSogd2luZG93cy91c2VyLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJTWlzc2luZyBXSU5BUEkgZm9yIFJlZ2lzdGVyU3lzdGVtVGhyZWFkLgoKU3VuIEFwciAxMSAxODo0ODoxNyAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogbXNkb3MvaW50MTAuYzogQW5kcmVhcyBNb2hyIDxjaXBhbTg5NUBjaXAxLmluZC51bmktc3R1dHRnYXJ0LmRlPgoJRml4ZWQgIkRpc3BsYXkgQ29tYmluYXRpb24iIGNhbGwuCgoJKiBtaXNjL2NvbW0uYzogQW5kcmVhcyBNb2hyIDxjaXBhbTg5NUBjaXAxLmluZC51bmktc3R1dHRnYXJ0LmRlPgoJRml4ZWQgYSBjcmFzaCBkdWUgdG8gaW52YWxpZCBPcGVuQ29tbSByZXR1cm4gdmFsdWUgZm9yIGJ1c3kgY29tbSBwb3J0LgoJQ2xlYW5lZCB1cC9maXhlZCBzZXZlcmFsIHRoaW5ncy4KCgkqIHdpbmRvd3Mvd2luLmM6IEZyYW5jb2lzIEJvaXN2ZXJ0PGZyYW5jb2lzQG1hY2FkYW1pYW4uY29tPgoJRW5hYmxlZCB0aHJlYWQgc2FmZW5lc3MgZm9yIHduZCBzdHJ1Y3R1cmUgY29kZS4KCgkqIGRlYnVnZ2VyL2RiZy55OiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVVzZSBDTElFTlRfRGVidWdnZXJSZXF1ZXN0IHRvIGZyZWV6ZS91bmZyZWV6ZSB0aHJlYWRzLgoKCSogc2VydmVyL3JlcXVlc3QuYywgc2VydmVyL3RocmVhZC5jLCBzZXJ2ZXIvdHJhY2UuYywgaW5jbHVkZS9zZXJ2ZXIuaCwgaW5jbHVkZS9zZXJ2ZXIvcmVxdWVzdC5oLCBpbmNsdWRlL3NlcnZlci90aHJlYWQuaCwgc2NoZWR1bGVyL2NsaWVudC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBZGRlZCBuZXcgQ0xJRU5UX0RlYnVnZ2VyUmVxdWVzdCByb3V0aW5lLCBpbXBsZW1lbnRlZCBzdXBwb3J0IGZvcgoJREVCVUdHRVJfRlJFRVpFX0FMTC9ERUJVR0dFUl9VTkZSRUVaRV9BTEwgcmVxdWVzdHMuCglSdW4gd2luZSBzZXJ2ZXIgaW4gdGhlIG1haW4gd2luZSBwcm9jZXNzLgoJQnVnZml4OiBuZXZlciBmcmVlIGluaXRpYWwgdGhyZWFkIQoKCSogc2NoZWR1bGVyL3Byb2Nlc3MuYywgaW5jbHVkZS9wcm9jZXNzLmg6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCU5vbi1mdW5jdGlvbmFsIFBST0NFU1NfU3VzcGVuZC9SZXN1bWVPdGhlclRocmVhZHMgcmVtb3ZlZC4KCgkqIHdpbmRvd3MvdGltZXIuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglUZWFjaGVkIFRJTUVSX0dldE5leHRFeHBpcmF0aW9uIHRoYXQgYSB0aW1lciB0aGF0IGhhcyBhbHJlYWR5IGV4cGlyZWQKCShidXQgbm90IHByb2Nlc3NlZCB5ZXQpIEhBUyBhbHJlYWR5IGV4cGlyZWQuLi4KCgkqIHdpbmVkZWZhdWx0LnJlZzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglEZWZhdWx0IHZhbHVlcyBmb3IgcmVnaXN0cnkuCgoJKiBncmFwaGljcy94MTFkcnYvZGliLmM6IEthcmwgTGVzc2FyZCA8a2FybGxAY29yZWwuY2E+CglPcHRpbWl6ZWQgY29kZSBmb3IgU2V0SW1hZ2VCaXRzX1gsIG1ha2luZyBiaXRtYXAgY3JlYXRpb24gZmFzdGVyLgoKCSogY29udHJvbHMvbWVudS5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVRoZSBNRUFTVVJFSVRFTVNUUlVDVCBhbmQgRFJBV0lURU1TVFJVQ1Qgd2VyZSBmaWxsZWQgd3JvbmcuCgoJKiBjb25maWd1cmUuaW4sIGluY2x1ZGUvY29uZmlnLmguaW4sIGluY2x1ZGUvc2lnX2NvbnRleHQuaCwgbG9hZGVyL3NpZ25hbC5jLCBzY2hlZHVsZXIvc3lzZGVwcy5jLCBjb25maWd1cmU6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCS0gU3RhcnRlZCBtdWx0aXRocmVhZGluZyBmb3IgRnJlZUJTRCAoaW5jb21wbGV0ZSwgYnV0IHNvbWUKCSAgYXBwbGljYXRpb25zIG5vdyBhdCBsZWFzdCBzdGFydCB1cCBhZ2FpbikuCgktIFVzZSBfdGhyZWFkX3N5c19zaWdhY3Rpb24vX3RocmVhZF9zeXNfc2lnYWx0c3RhY2suCgktIENSMiBvbiBwYWdlZmF1bHQgZ2V0cyBwYXNzZWQgaW4gc2NfZXJyIChzb21lIGtpbmQgb2Yga2x1ZGdlIGluCgkgIEZyZWVCU0Qgb3ducyBmYXVsdCBoYW5kbGluZyB3ZSBjYW4gdXNlKQoKCSogaW5jbHVkZS9zZWxlY3RvcnMuaCwgbWVtb3J5L2dsb2JhbC5jLCBtZW1vcnkvc2VsZWN0b3IuYzoKCU1hZGUgU0VMRUNUT1JfUmVhbGxvY0Jsb2NrIHByZXNlcnZlIHRoZSBjdXJyZW50IHNlbGVjdG9yIGFjY2VzcyByaWdodHMKCShwcm9ibGVtIHJlcG9ydGVkIGJ5IEFuZHJlYXMgTW9ocikuCgoJKiBtaXNjL3N5c3RlbS5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVVzZSBzZXJ2aWNlcyB0aHJlYWQgaW5zdGVhZCBvZiB0aW1lciBzaWduYWxzLgoKCSogc2VydmVyL3RocmVhZC5jLCBzY2hlZHVsZXIvc3luY2hyby5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBbGxvdyB1c2VyIEFQQ3Mgd2l0aCBOVUxMICdmdW5jJyAoanVzdCB3YWtlIHVwIHRoZSB0aHJlYWQpLgoKCSogaW5jbHVkZS9zZXJ2aWNlcy5oLCBsb2FkZXIvbWFpbi5jLCBzY2hlZHVsZXIvTWFrZWZpbGUuaW4sIHNjaGVkdWxlci9zZXJ2aWNlcy5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRlZCAna2VybmVsIHNlcnZpY2VzIHRocmVhZCcuCgoJKiBpbmNsdWRlL3dpbnNwb29sLmgsIG1pc2MvcHJpbnRkcnYuYywgcmVsYXkzMi93aW5zcG9vbC5zcGVjOgoJS2xhYXMgdmFuIEdlbmQgPGtsYWFzQHZhbmdlbmQuZGVtb24ubmw+CglBZGRlZCBzdHViIGZvciBQcmludGVyUHJvcGVydGllcy4KCgkqIGRsbHMvbnRkbGwvcnRsc3RyLmMsIGluY2x1ZGUvbnRkZGsuaCwgcmVsYXkzMi9udGRsbC5zcGVjLCBkbGxzL250ZGxsL250LmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUltcGxlbWVudGVkIE50VGVybWluYXRlUHJvY2VzcyBhbmQgTnREaXNwbGF5U3RyaW5nLgoKCSogbG9hZGVyL21vZHVsZS5jOiBCZXJ0aG8gU3R1bHRpZW5zIDxiZXJ0aG9AcGFudGVyLnNvY2kuYWF1LmRrPgoJRnJlZUxpYnJhcnkgcGFydGlhbCBpbXBsZW1lbnRhdGlvbi4KCgkqIG1pc2MvY3J0ZGxsLmMsIHJlbGF5MzIvY3J0ZGxsLnNwZWM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJTWFkZSBfZnRvbCB0YWtlIGFyZ3VtZW50IGZyb20gRlBVIHN0YWNrLiBTdGFyY3JhZnQgdjEuMDQgKCpub3QqIEJyb29kCglXYXJzKSBub3cgd29ya3MgcGVyZmVjdGx5IHdpdGggV2luZSdzIGNydGRsbC4gV3JvdGUgYSB0ZXN0CglpbXBsZW1lbnRhdGlvbiBvZiBfQ0lwb3cgdG9vLCB3aGljaCB0aG9zZSB3aG8gZG8gaGF2ZSBCcm9vZCBXYXJzIGNhbgoJcmVwb3J0IG9uLCBzbyBpdCBjYW4gYmUgaW1wbGVtZW50ZWQgY29ycmVjdGx5LgoKCSogd2luZG93cy94MTFkcnYva2V5Ym9hcmQuYzogR3V5IEFsYmVydGVsbGkgPGdhbGJlcnRlQG5lby5scnVuLmNvbT4KCVBhcnRpYWwgaW1wbGVtZW50YXRpb24gZm9yIEdldEtleU5hbWVUZXh0IGZvciBuZXcga2V5Ym9hcmQgc3RydWN0dXJlLgoKCSogZGxscy90YXBpMzIvcGhvbmUuYzogS2V2aW4gSG9sYnJvb2sgPGt3aEBuZW9zb2Z0LmNvbT4KCUZpeGVkIHdhcm5pbmcuCgoJKiBpbmNsdWRlL3dpbmUvb2JqX3N0b3JhZ2UuaDogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCBtaXNzaW5nIFJlYWRDbGFzc1N0ZyBwcm90b3R5cGUuCgoJKiBtaXNjL3dzcHJpbnRmLmM6IE1pY2hhZWwgVmVrc2xlciA8bXZla3NsZXJAdGVjaHVuaXgudGVjaG5pb24uYWMuaWw+CgktIEZpeCBjb21tZW50cyBhZnRlciB0aGUgYmlnIHJlbmFtaW5nICh4eHh4MzJ5IC0tPiB4eHh4eSkuCgktIERlY2xhcmUgdGhlIFdQUklOVEZfREFUQSB1bmlvbiwgYW5kIHVzZSBpdCBpbnN0ZWFkIG9mIExQQ1ZPSUQgYW5kIFdPUkQuCgkgIEF2b2lkIHVnbHkgdHlwZSBjYXN0aW5nLCBhbmQgZml4IGNvbXBpbGF0aW9uIHdhcm5pbmdzIG9mIHdzcHJpbnRmLmMKCgkqIGRvY3VtZW50YXRpb24vc3RhdHVzL2RkZToKCUtlaXRoIE1hdHRoZXdzIDxrZWl0aF9tQHN3ZWVuZXkuZGVtb24uY28udWs+CglTdGF0dXMgZG9jdW1lbnQgZm9yIERERS9EZGVtbC4KCgkqIG11bHRpbWVkaWEvbW1zeXN0ZW0uYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglBZGRlZCBldmVudCBjYWxsYmFjayBtZWNoYW5pc20uCglJbnRyb2R1Y3Rpb24gb2YgTUNJIHlpZWxkIHByb2NzLgoJVXBkYXRlZCAocHJlcGFyZXx1bnByZXBhcmUpaGVhZGVyIGZ1bmN0aW9ucyAod2F2ZSwgbWlkaSkgdG8gYWxsb3cKCWNvcnJlY3QgY2FsbGJhY2sgbWVjaGFuaXNtcy4KCU1hZGUgbWlkaVN0cmVhbVhYWCBmdW5jdGlvbnMgd29ya2luZy4KCUZpcnN0IHRyeSBhdCBtbVRocmVhZFhYWCBmdW5jdGlvbnMuCgoJKiBtdWx0aW1lZGlhL21pZGkuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglVcGRhdGVkIChwcmVwYXJlfHVucHJlcGFyZSloZWFkZXIgZnVuY3Rpb25zIHRvIGFsbG93IGNvcnJlY3QgY2FsbGJhY2sKCW1lY2hhbmlzbXMuCgoJKiBtdWx0aW1lZGlhL21jaW1pZGkuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglTbWFsbCBlbmhhbmNlbWVudC4KCgkqIG11bHRpbWVkaWEvbWNpLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJTmV3IG1ldGhvZCBmb3Igc3RydWN0dXJlIGNvbnZlcnNpb24gKDE2IDwtPiAzMikuCglNb3JlIE1DSSBzdHJ1Y3R1cmVzIGNvcnJlY3RseSBtYXBwZWQuCglJbnRyb2R1Y3Rpb24gb2YgTUNJIHlpZWxkIHByb2MgYW5kIGJyZWFrIGZhY2lsaXR5LgoKCSogbXVsdGltZWRpYS9hdWRpby5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCVVwZGF0ZWQgKHByZXBhcmV8dW5wcmVwYXJlKWhlYWRlciBmdW5jdGlvbnMgdG8gYWxsb3cgY29ycmVjdCBjYWxsYmFjawoJbWVjaGFuaXNtcy4gIEltcGxlbWVudGVkIHdhdmVPdXQgcGxheWJhY2sgYXMgYXN5bmNocm9ub3VzLgoKCSogaW5jbHVkZS9tdWx0aW1lZGlhLmg6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJU3RhcnRlZCBpbXBsZW1lbnRhdGlvbiBvZiBtbVRocmVhZFhYWCBmdW5jdGlvbnMuCgoJKiBpbmNsdWRlL21tc3lzdGVtLmg6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJQWRkZWQgYSBmZXcgbWlzc2luZyBkZWZpbmVzIChNSURJLCBXQVZFLCBjYWxsYmFja3MpLgoJU3RydWN0dXJlcyBmb3IgbWlkaVN0cmVhbVhYWCBmdW5jdGlvbnMuCgoJKiBpZjE2MzIvbW1zeXN0ZW0uc3BlYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglVcGRhdGVkIChwcmVwYXJlfHVucHJlcGFyZSloZWFkZXIgZnVuY3Rpb25zICh3YXZlLCBtaWRpKSB0byBhbGxvdwoJY29ycmVjdCBjYWxsYmFjayBtZWNoYW5pc21zLiBBZGRlZCB3aW5lIHNwZWNpZmljIGVudHJ5IGZvciBtbVRocmVhZFhYWAoJZnVuY3Rpb25zIHRocmVhZCBzdGFydGluZyBwb2ludC4KCgkqIGluY2x1ZGUvd2luZS9vYmpfc3RvcmFnZS5oOgoJTWljaGFlbCBWZWtzbGVyIDxtdmVrc2xlckB0ZWNodW5peC50ZWNobmlvbi5hYy5pbD4KCUludHJvZHVjZSBTVEFUU1RHMTYgLSBhIDE2IGJpdCB2YXJpYW50IG9mIFNUQVRTVEcuCgoJKiBvbGUvc3RvcmFnZS5jOiBNaWNoYWVsIFZla3NsZXIgPG12ZWtzbGVyQHRlY2h1bml4LnRlY2huaW9uLmFjLmlsPgoJRml4IElTdG9yYWdlMTZfZm5TdGF0KCkgdG8gdXNlIFNUQVRTVEcxNiAoaXQgaXMgYSAxNiBiaXQgaW50ZXJmYWNlKS4KCgkqIGNvbnRyb2xzL21lbnUuYzogUGF1bCBNaWxsYXIgPHBhdWxtQGFzdHJvLmdsYS5hYy51az4KCUZpeGVkIG1lbnUgdHlwZSBzZXR0aW5nIGluIFNldE1lbnVJdGVtSW5mbzMyX2NvbW1vbigpLgoKCSogaW5jbHVkZS9wcm9jZXNzLmgsIGxvYWRlci9uZS9tb2R1bGUuYywgbG9hZGVyL3Rhc2suYywgc2NoZWR1bGVyL3Byb2Nlc3MuYywgc2NoZWR1bGVyL3RocmVhZC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglTZW5kIFVTSUdfUFJPQ0VTU19DUkVBVEUgc2lnbmFsLgoJQnVnZml4OiBHZXRQcm9jZXNzRHdvcmQgb2Zmc2V0IC04IHNob3VsZCByZXR1cm4gcGFyZW50IHByb2Nlc3MgSUQuCgoJKiByZWxheTMyL3VzZXIzMi5zcGVjLCB3aW5kb3dzL3VzZXIuYzoKCUJlcnRobyBTdHVsdGllbnMgPGJlcnRob0BwYW50ZXIuc29jaS5hYXUuZGs+CglBZGRlZCBSZWdpc3RlclN5c3RlbVRocmVhZCBzdHViLgoKCSogaW5jbHVkZS93aW5lL29ial9taXNjLmgsIG9sZS9jb21wb2JqLmMsIHJlbGF5MzIvb2xlMzIuc3BlYywgaW5jbHVkZS93aW5lcnJvci5oOgoJRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50ZWQgdGhlIENvQ3JlYXRlSW5zdGFuY2VFeCBtZXRob2QuCgoJKiBtaXNjL3JlZ2lzdHJ5LmM6IERhdmlkIEdheSA8ZGdheUBDUy5CZXJrZWxleS5FRFU+CglGaXhlZCBjcmFzaCBkdWUgdG8gYSB2YWx1ZSBvZiBuYW1lIGxlbmd0aCAwLCB2YWx1ZSBsZW5ndGggMCBhdCB0aGUgZW5kCglvZiB0aGUgcmVnaXN0cnkuCgoJKiB3aW5kb3dzL3dpbnBvcy5jOiBGcmFuY29pcyBCb2lzdmVydCA8ZnJhbmNvaXNAbWFjYWRhbWlhbi5jb20+CglDaGVjayBpZiBwVGVtcEFjdGl2ZVdpbmRvdyBpbiBXSU5QT1NfU2V0V2luZG93UG9zIGlzIHZhbGlkIGFmdGVyIHRoZQoJUVVFVUVfTG9jay4KCgkqIG11bHRpbWVkaWEvZHBsYXkuYzogRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CgktIHVwZGF0ZWQgYmVjYXVzZSBvZiB0aGUgc3BsaXR0aW5nIG9mIGludGVyZmFjZS9pbXBsZW1lbnRhdGlvbgoJLSB1cGRhdGVkIHRvIHVzZSBJQ09NX1RISVMKCgkqIGluY2x1ZGUvZHBsYXkuaCwgaW5jbHVkZS9kcGxvYmJ5LmgsIG9sZS9ndWlkLmM6CglGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCS0gdXNlIHRoZSBsYXRlc3QgSUNPTSBtYWNyb3MKCS0gbW92ZWQgdGhlIElEaXJlY3RQbGF5TG9iYnkgaW50ZXJmYWNlIHRvIGRwbG9iYnkuaAoJLSByZW1vdmVkIGFsbCB0aGUgaW1wbGVtZW50YXRpb24gYXNwZWN0cyBzaW5jZSB0aGV5IG5lZWQgdG8gYmUKCXNlcGFyYXRlCgoJKiBpbmNsdWRlL2Rzb3VuZC5oLCBtdWx0aW1lZGlhL2Rzb3VuZC5jOgoJRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglJQ09NaXNhdGlvbiBvZiB0aGUgRGlyZWN0U291bmQgQVBJLgoKCSogZGxscy9zaGVsbDMyL2ZvbGRlcnMuYywgZGxscy9zaGVsbDMyL2ljb25jYWNoZS5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmMsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uaCwgaW5jbHVkZS9zaGxvYmouaDoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJLSByZW9yZ2FuaXNlZCBpY29uIGV4dHJhY2luZyBmcm9tIGZpbGVzCgktIG1hZGUgZXh0cmFjdGluZyBmcm9tIG5lIGFuZCBpY28gZmlsZXMgd29ya2luZwoJLSBJUGVyc2lzdEZpbGUgaW50ZXJmYWNlIGZvciBJRXh0cmFjdEljb24KCgkqIG1pc2Mvc2hlbGwuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlZCBidWZmZXIgb3ZlcnJ1bi4KCgkqIGluY2x1ZGUvY3Vyc29yaWNvbi5oLCBvYmplY3RzL2N1cnNvcmljb24uYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQ2hhbmdlZCByZXNzb3VyY2UgZGlyIHN0cnVjdHVyZXMuCglBZGFwdGVkIEZpbmRCZXN0SWNjb24vRmluZEJlc3RDdXJzb3IuCgoJKiB3aW5kb3dzL3N5c2NvbG9yLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTG9hZGluZyB0aGUgY29sb3Igc2NoZW1hIGZvciByZWdpc3RyeS4KClNhdCBBcHIgMTAgMTY6NTg6NTUgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvd2luc29jay5oLCBtaXNjL0F0dGljL3dpbnNvY2tfZG5zLmMsIG1pc2MvTWFrZWZpbGUuaW4sIG1pc2Mvd2luc29jay5jLCBtaXNjL3dpbnNvY2tfYXN5bmMuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJUmVpbXBsZW1lbnRlZCB3aW5zb2NrIGFzeW5jaHJvbm91cyBETlMgc2VydmljZXMuIE5vIGxvbmdlciB1c2UgYQoJZm9yaygpZWQgcHJvY2VzcywgYnV0IGVpdGhlciBhIHNlcnZpY2UgdGhyZWFkIG9yIGlubGluZSBibG9ja2luZyBjYWxscwoJZm9yIG5vbi10aHJlYWRpbmcgYXJjaGl0ZWN0dXJlcy4gKE1ha2VzIEZyZWUgQWdlbnQxNiB3b3JrIGFnYWluLikKCgkqIHByb2dyYW1zL2NtZGxndHN0L0F0dGljL2NtZGxnci5oLCBwcm9ncmFtcy9jbWRsZ3RzdC9jbWRsZ3IucmMsIHByb2dyYW1zL2NtZGxndHN0L2NtZGxndHN0LmM6Cgk8ZXdpbGxAbmNhbC52ZXJpby5jb20+CgktIGNvbG9yIGFuZCBmb250IGRpYWxvZ3Mgbm93IGFjdHVhbGx5IGRvIHNvbWV0aGluZyBpbnRlcmVzdGluZywKCSAgYW5kIGZvcmNlIGEgcmVkcmF3IHdoZW4gc3VjY2Vzc2Z1bC4gIEJhY2tncm91bmQgY29sb3IgaXMgYWRqdXN0YWJsZS4KCSAgVGV4dCBjb2xvciBpcyBhbHNvIGFkanVzdGFibGUsIGJ1dCB0aGUgdXNlciBoYXMgdG8gc2V0IHRoZSBDRl9FRkZFQ1RTCgkgIGZsYWcgZmlyc3QuCgktIHRleHQgaXMgb3V0cHV0IGxlZnQtcmlnaHQgY2VudGVyZWQsIGJhc2VsaW5lLCBhdCB0aGUgbWlkZGxlCgkgIG9mIHRoZSB3aW5kb3csIGFuZCBtb3ZlcyB3aXRoIHRoZSB3aW5kb3cuICBUZXh0IGZvbnQgaXMgYWRqdXN0YWJsZS4KCS0gU3VjY2VzcyBhbmQgZmFpbHVyZSBNZXNzYWdlQm94IGNhbGxzIGZvciBDb2xvciwgRm9udCwgT3BlbiwKCSAgYW5kIFNhdmUgaGF2ZSBiZWVuIHJlbW92ZWQgb3Igc3VwcHJlc3NlZC4gIFRoZXkgYW5ub3llZCBtZSBhZnRlcgoJICBhd2hpbGUsIGFuZCBJIHN1c3BlY3QgdGhleSBhbm5veWVkIG90aGVycywgdG9vLiAgVXNlIG15IHRvb2whIDotKQoJLSBjbWRsZ3RzdCBub3cgaGFzIHRoZSBmdWxsIHBhdGhuYW1lIGluIHRoZSB1cHBlciBsZWZ0IGNvcm5lcjsgd2hpY2ggbWF5CgkgIGFzc2lzdCBpbiBkZWJ1Z2dpbmcgY2VydGFpbiBwcm9ibGVtcyAtLSBvciBpdCBtYXkgbm90LiA6LSkKCS0gdXNhZ2UgZGlhbG9nIGFkZGVkCgoJKiBvbGUvb2xlMm5scy5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUNvcnJlY3RlZCBkZWJ1ZyBvdXRwdXQuCgoJKiB3aW5kb3dzL2RyaXZlci5jLCByZWxheTMyL3dpbm1tLnNwZWM6CglFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUJldHRlciBlcnJvciBoYW5kbGluZyA7IGEgZmV3IGJ1ZyBmaXhlcyA7IG5vdyBPcGVuRHJpdmVyMTYgY2FuIGxvYWQgMzIKCWJpdCBkcml2ZXJzLgoJQWRkZWQgc3R1YiBmb3IgR2V0RHJpdmVyRmxhZ3MuCgoJKiB3aW5kb3dzL3VzZXIuYywgcmVsYXkzMi91c2VyMzIuc3BlYzoKCVNlcmdleSBUdXJjaGFub3YgPHR1cmNoYW5vdkB1c2EubmV0PgoJU3R1YnMgZm9yIENsb3NlRGVza3RvcCBhbmQgQ2xvc2VXaW5kb3dTdGF0aW9uLgoKCSogbG9hZGVyL25lL21vZHVsZS5jOiBCZXJ0aG8gU3R1bHRpZW5zIDxiZXJ0aG9AcGFudGVyLnNvY2kuYWF1LmRrPgoJR2V0TW9kdWxlRnJvbVBhdGggbm93IGNoZWNrcyBmb3IgbG9hZGVkIG1vZHVsZXMgdmlhIGZpbGVuYW1lcyB3aGljaAoJd2VyZSBzcGVjaWZpZWQgd2l0aG91dCBhIHBhdGguCgoJKiBtaXNjL3JlZ2lzdHJ5LmMsIGluY2x1ZGUvd2lucmVnLmg6CglTeWx2YWluIFN0Lkdlcm1haW4gPHN5bHZhaW5AbWFjYWRhbWlhbi5jb20+CglJbXBsZW1lbnRhdGlvbiBvZiBIS1Uga2V5IHNhdmluZyBhbmQgbG9hZGluZy4gQWRkIG5ldyBzdXBwb3J0ZWQgZGF0YQoJdHlwZSBpbiBkZWJ1Z19wcmludF92YWx1ZS4KCgkqIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmMsIGluY2x1ZGUvZG9jb2JqLmgsIG9sZS9ndWlkLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBpbnRlcmZhY2VzIGZvciBJT2xlQ29tbWFuZFRhcmdldCwgSURyb3BUYXJnZXQsIElWaWV3T2JqZWN0LgoJU21hbGwgY2hhbmdlIGhvdyB0byBnZXQgaWNvbnMgZm9yIGxpc3R2aWV3LgoKCSogaW5jbHVkZS9zaGxvYmouaCwgcmVsYXkzMi9zaGVsbDMyLnNwZWM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUlMTG9hZEZyb21TdHJpbmcgYW5kIFNIR2V0U2V0dGluZ3MgaW1wbGVtZW50ZWQuCgoJKiBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU0hHZXRTZXR0aW5ncyBpbXBsZW1lbnRlZC4KCUV4aXRXaW5kb3dzRGlhbG9nKCkgc2ltdWxhdGVkIGJ5IE1lc3NhZ2Vib3guCgoJKiBkbGxzL3NoZWxsMzIvcGlkbC5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUlMTG9hZEZyb21TdHJpbmcgaW1wbGVtZW50ZWQuCgoJKiBncmFwaGljcy94MTFkcnYvaW5pdC5jLCBncmFwaGljcy90dHlkcnYvaW5pdC5jLCBncmFwaGljcy90dHlkcnYvcGFsZXR0ZS5jOgoJUmljaGFyZCBNb3J0aW1lciA8cmVtaXRyb21AbXktZGVqYW5ld3MuY29tPgoJQWRkZWQgbWlzc2luZyAqSXNEYXJrIGVudHJpZXMgaW50byBQQUxFVFRFX0RyaXZlciBpbnN0YW5jZQoJaW5pdGlhbGlzYXRpb24uCgoJKiB3aW5kb3dzL3gxMWRydi9tb3VzZS5jOiBCcmlhbiBHZXJzdCA8YmdlcnN0QHF1YXJrLnZwcGx1cy5jb20+CglGaXhlZCBYMTFEUlZfTU9VU0VfV2FycFBvaW50ZXIgaW5pdGlhbCB2YWx1ZS4KCgkqIG9iamVjdHMvYml0bWFwLmM6IEx1YyBUb3VyYW5nZWF1IDxsdWNAbWFjYWRhbWlhbi5jb20+CglFbnN1cmUgdGhhdCB0aGUgYml0bWFwIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIHdoZW4gY3JlYXRlZCB3aXRoIHRoZQoJTFJfQ1JFQVRFRElCU0VDVElPTiBmbGFnLgoKCSogZGxscy9jb21jdGwzMi90cmVldmlldy5jOiBTeWx2YWluIFN0Lkdlcm1haW4gPHN5bHZhaW5AbWFjYWRhbWlhbi5jb20+CglGaXhlZCB0aGUgbWVzc2FnaW5nIHByb2JsZW0gb2YgdGhlIGVkaXQgYm94IGZvciBub2RlIGxhYmVsIGVkaXRpb24uCglTdWJzdGl0dXRlZCBXTV9QQUlOVCBmb3IgSW52YWxpZGF0ZVJlY3QuCglTb21lIGdyYXBoaWNhbCBmaXhlcy4KCgkqIG1pc2MvbWFpbi5jOiBKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CglDaGVjayBmb3IgZHJpdmVycz09TlVMTCBiZWZvcmUgdHJ5aW5nIHRvIGRlbGV0ZSB0aGVtIGF0IGV4aXQuICBUaGlzCgljb3VsZCBoYXBwZW4gaWYgdGhlIGVtdWxhdG9yIGluaXRpYWxpemF0aW9uIGZhaWxlZCBmb3Igc29tZSByZWFzb24gYW5kCgl0aGUgZHJpdmVycyBoYWRuJ3QgYmVlbiBpbml0aWFsaXplZCB5ZXQuCgoJKiBpZjE2MzIvdGh1bmsuYywgaW5jbHVkZS9jYWxsYmFjay5oLCBtaXNjL2NhbGxiYWNrLmMsIG1pc2NlbXUvbWFpbi5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglDYWxsIEluaXRBcHAxNiAodXNpbmcgQ2FsbG91dCkgZm9yIGluaXRpYWwgcHJvY2Vzcy4KCgkqIG1pc2NlbXUvaW5zdHIuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglDbGVhciBpbnZhbGlkIHNlbGVjdG9ycyBhbHNvIGluIENhbGxUbzE2IHJlbGF5IGNvZGUuCgoJKiBwcm9ncmFtcy9ub3RlcGFkL0VzLnJjOgoJSm9zZSBNYXJjb3MgTPNwZXogQ2FyYXZhY2EgPGpvc2UubG9wZXpAdXBjbmV0LnVwYy5lcz4KCVJldmlzZWQgU3BhbmlzaCByZXNvdXJjZXMuCgoJKiB3aW5kb3dzL21kaS5jOiBHZXJhcmQgUGF0ZWwgPGcucGF0ZWxAd2FuYWRvby5mcj4KCUZpeGVkIHdpbmRvdyBsb2NraW5nIGJ1ZyBpbiBDYWxjQ2hpbGRTY3JvbGwuCgoJKiBtdWx0aW1lZGlhL3RpbWUuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglGaXhlZCBmYWtlIG11bHRpbWVkaWEgdGltZXJzLiBHcmltIEZhbmRhbmdvIGlzIG5vdyBhYmxlIHRvIHN0YXJ0IHVwCgl3aGVuIHVuZGVyIGZhdm9yYWJsZSBjb25kaXRpb25zLiBUaGUgcHJldmlldyBtb3ZpZSBvbiB0aGUgQnJvb2QgV2FycwoJZGlzYyBub3cgcGxheXMsIHRvby4KCgkqIG1pc2MvcHJpbnRkcnYuYzogS2xhYXMgdmFuIEdlbmQgPGtsYWFzQHZhbmdlbmQuZGVtb24ubmw+CglCdWdmaXggRW51bVByaW50ZXJzQTogbHBiUHJpbnRlcnM9TlVMTCBvciBjYkJ1Zj0wIHdvdWxkIGNyYXNoIFdpbmUsCglpbnN0ZWFkIG9mIHJldHVybmluZyB0aGUgcmlnaHQgYnVmZmVyc2l6ZS4KClR1ZSBBcHIgIDYgMDc6MTQ6MDkgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGZpbGVzL2RpcmVjdG9yeS5jOiBnYWxiZXJ0ZSA8Z2FsYmVydGVAbmVvLnJyLmNvbT4KCUZpeGVkIFNlYXJjaFBhdGhBIHJldHVybiB2YWx1ZS4KCgkqIGdyYXBoaWNzL2QzZF9wcml2YXRlLmgsIGdyYXBoaWNzL2QzZHRleHR1cmUuYywgZ3JhcGhpY3MvZGRyYXcuYywgZ3JhcGhpY3MvZGRyYXdfcHJpdmF0ZS5oOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CgktIGNsZWFuLXVwIG9mIHRleHR1cmUgJ2xvYWRpbmcnCgktIGFkZGVkIFNldENvbG9yS2V5IGNhbGxiYWNrIGZvciBhbHJlYWR5IGxvYWRlZCB0ZXh0dXJlcwoKCSogaW5jbHVkZS93aW5lL29ial9zdG9yYWdlLmg6IEZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJRml4ZWQgYSBwcm9ibGVtIHBvaW50ZWQgb3V0IGJ5IEtldmluIEhvbGJyb29rLgoKCSogaW5jbHVkZS9jb21tY3RybC5oOiBGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCWNvbW1jdHJsLmggbXVzdCBpbmNsdWRlIHByc2h0LmguCgoJKiBpbmNsdWRlL3dpbmUvb2JqX29sZWF1dC5oOiBGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCVdhcm5pbmcgZml4LgoKCSogaW5jbHVkZS93aW5lL29ial9iYXNlLmg6IEZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJQWRkZWQgYSBuZXcgaW1wbGVtZW50YXRpb24gb2YgdGhlIElDT00gbWFjcm9zIHRoYXQgdXNlIE1pY3Jvc29mdCBzdHlsZQoJdmlydHVhbCBtZXRob2RzIHRvIGltcGxlbWVudCB0aGUgQ09NIGludGVyZmFjZXMgaW4gQysrLgoKCSogbWlzYy9kZGVtbC5jOiBLZWl0aCBNYXR0aGV3cyA8a2VpdGhfbUBzd2VlbmV5LmRlbW9uLmNvLnVrPgoJQ29ycmVjdGlvbiBvZiBNdXRleCBoYW5kbGluZyBpbiBEZGVJbml0aWFsaXplVyBmb3IgY2FzZXMgb3RoZXIgdGhhbgoJMXN0IGNhbGwuIEFkZGl0aW9uIG9mIGluc3RhbmNlIGhhbmRsaW5nIHRvIERkZUNyZWF0ZVN0cmluZ0hhbmRsZUEsCglEZGVDcmVhdGVTdHJpbmdIYW5kbGVXLCBSZW1vdmVIU1pOb2RlcywgRnJlZUFuZFJlbW92ZUhTWk5vZGVzLiAgMXN0CgljdXQgaW1wbGVtZW50YXRpb24gb2YgRGRlVW5pdGlhbGl6ZSwgbW92ZSBvZiBpbnRlcm5hbCBzdHJ1Y3R1cmUgZGVmcwoJaW4gZnJvbSBkZGVtbC5oLiBSZW1vdmVkIG5vbi1BTlNJIGNvbW1lbnQuCgoJKiBpbmNsdWRlL2RkZW1sLmg6IEtlaXRoIE1hdHRoZXdzIDxrZWl0aF9tQHN3ZWVuZXkuZGVtb24uY28udWs+CglNb3ZlZCBpbnRlcm5hbCBzdHJ1Y3R1cmVzIHRvIGRkZW1sLmMsIGFsc28gcmVtb3ZlZCBub24tQU5TSSBjb21tZW50cywKCWFuZCBhZGRlZCBzcGVjIGZvciBEZGVRdWVyeUNvbmZJbmZvIGFuZCBEZGVRdWVyeUNvbnZJbmZvMTYuCgoJKiBtdWx0aW1lZGlhL21tc3lzdGVtLmM6IENocmlzIE1vcmdhbiA8Y21vcmdhbkB3cGkuZWR1PgoJSmFtZXMgQWJiYXRpZWxsbyA8YWJiZXlqQHdwaS5lZHU+CglGaXhlZCBtZW1vcnkgbGVha3MgaW4gbWl4ZXJPcGVuMTYvbWl4ZXJDbG9zZSwKCW1pZGlPdXRPcGVuMTYvbWlkaU91dENsb3NlMTYsIHdhdmVJbk9wZW4xNi93YXZlSW5DbG9zZTE2LAoJbWlkaUluT3BlbjE2L21pZGlJbkNsb3NlMTYuCgoJKiB0b29scy9idWdfcmVwb3J0LnBsOiBBZGFtIFNhY2FybnkgPG1hZ2ljYm94QGJlc3R3ZWIubmV0PgoJQWRkZWQgc2FuaXR5IGNoZWNrIGZvciB3aGl0ZXNwYWNlIGluIGZpbGUgbmFtZXMsIHZhcmlvdXMgb3RoZXIgZml4dXBzLgoKU3VuIEFwciAgNCAxMjo0ODoyMSAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogY29udHJvbHMvbGlzdGJveC5jOiBMdWMgVG91cmFuZ2VhdSA8bHVjQG1hY2FkYW1pYW4uY29tPgoJV01fTU9VU0VNT1ZFIGltcGxlbWVudGF0aW9uIGJ1ZyBmaXguCgoJKiB3aW5kb3dzL3gxMWRydi9rZXlib2FyZC5jOgoJSm9z6SBNYXJjb3MgTPNwZXogPGpvc2UubG9wZXpAdXBjbmV0LnVwYy5lcz4KCUFkZGVkIFNwYW5pc2gga2V5Ym9hcmQgbGF5b3V0LgoKCSogbWlzYy9jb21tLmM6IExhd3NvbiBXaGl0bmV5IDxsYXdzb25fd2hpdG5leUBqdW5vLmNvbT4KCUZpeGVkIHRoZSBtb2RlbSBjb250cm9sIHBhcnQgb2YgRXNjYXBlQ29tbUZ1bmN0aW9uMTYuCgoJKiBjb250cm9scy9jb21iby5jOiBHZXJhcmQgUGF0ZWwgPGcucGF0ZWxAd2FuYWRvby5mcj4KCUFkZGVkIG1pc3NpbmcgZ290by4KCgkqIG9sZS9vbGUybmxzLmMsIHJlbGF5MzIva2VybmVsMzIuc3BlYywgaW5jbHVkZS93aW5ubHMuaDoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRW51bUNhbGVuZGFySW5mb0Egc3R1Yi4KClNhdCBBcHIgIDMgMTY6Mjc6NTQgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHdpbmRvd3MvbW91c2UuYywgd2luZG93cy9rZXlib2FyZC5jOgoJRnJhbmNvaXMgQm9pc3ZlcnQgPGZyYW5jb2lzQG1hY2FkYW1pYW4uY29tPgoJU3VzcGVuZCB0aGUgd2luZG93IGxvY2tzIGJlZm9yZSBEZWZLZXliRXZlbnRQcm9jIGFuZAoJRGVmTW91c2VFdmVudFByb2MuCgoJKiBpbmNsdWRlL3duYXNwaTMyLmgsIHByb2dyYW1zL3ZpZXcvZ2xvYmFscy5oLCBpbmNsdWRlL2FzcGkuaCwgaW5jbHVkZS9tbXN5c3RlbS5oLCBpbmNsdWRlL3dpbmFzcGkuaCwgaW5jbHVkZS93aW5pb2N0bC5oLCBpbmNsdWRlL3dpbm50Lmg6CglKb2VyZyBNYXllciA8am1heWVyQHRlbGVzdW4yLnRlbGVtYXRpb24uZGU+CglNb3JlICNwcmFnbWEgZml4ZXMgKGlkZWEgT3ZlIEthYXZlbiwgbWlzdGFrZXMgYXJlIG1pbmUpLgoKCSogd2luZG93cy93aW4uYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglObyBsb25nZXIgc2VuZGluZyBhdG9tcyBpbiAoKENSRUFURVNUUlVDVCopbFBhcmFtKS0+bHBzek5hbWUgb2YKCVdNX0NSRUFURSBtZXNzYWdlcy4KCgkqIGxvYWRlci9tb2R1bGUuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCBzb21lIFNldExhc3RFcnJvcigpcyBpbiBHZXRQcm9jQWRkcmVzcygpIGFuZCBMb2FkTGlicmFyeSgpLgoKCSogbWlzYy9jcnRkbGwuYywgcmVsYXkzMi9jcnRkbGwuc3BlYzoKCUNocmlzdGlhbiBTY2hsYWlsZSA8dXA5bkByei51bmkta2FybHNydWhlLmRlPgoJSW1wbGVtZW50ZWQgbWFrZXBhdGgsIHJhbmQoKSByZXR1cm5zIGNvcnJlY3QgcmFuZ2UsIGZpeGVkIGZwdXRjLgoKCSogZmlsZXMvZmlsZS5jLCBpbmNsdWRlL2ZpbGUuaCwgbXNkb3MvaW50MjEuYzoKCU1hc2sgb2ZmIHVuc3VwcG9ydGVkIGF0dHJpYnV0ZXMgaW4gX2xjcmVhdCAoYnVnIHJlcG9ydGVkIGJ5IEFuZHJlYXMgTW9ocikuCglNb3ZlZCBfbGNyZWF0MTZfdW5pcSB0byBpbnQyMS5jCgoJKiBsaWJ0ZXN0L2hlbGxvMy5jLCBsaWJ0ZXN0L2hlbGxvM3Jlcy5yYywgbGlidGVzdC9oZWxsbzQuYywgbGlidGVzdC9uZXcuYywgbGlidGVzdC9yb2xleC5jLCBsaWJ0ZXN0L3ZhcnRlc3QuYywgbGlidGVzdC92b2xpbmZvLmM6CglQYXZlbCBSb3NraW4gPHBhdmVsX3Jvc2tpbkBnZW9jaXRpZXMuY29tPgoJQ2FzdHMgdG8gKFNFR1BUUikgcmVtb3ZlZC4gVGhleSBkaWQgbm90aGluZyBhbnl3YXkuCglJbmNsdWRlcyBhZGRlZCBvciByZW1vdmVkIHdoZXJlIG5lY2Vzc2FyeS4KCVdpbjE2IGZ1bmN0aW9ucyByZXBsYWNlZCB3aXRoIHRoZWlyIFdpbjMyIGNvdW50ZXJwYXJ0cy4gQ29tbWVudHMgYWRkZWQKCXdoZXJlIGl0IHdhcyBpbXBvc3NpYmxlLgoJQ0FMTEJBQ0sgYWRkZWQgd2hlcmUgbmVjZXNzYXJ5LiBTb21lIGRlY2xhcmF0aW9ucyBmaXhlZC4KCUNvbnN0cnVjdHMgbGlrZSAiI2lmIFdJTkRPV1MiIGNvcnJlY3RlZC4gVXNpbmcgIiNpZmRlZiBfX3VuaXhfXyIgaW5zdGVhZC4KCURsZ1Byb2MgaW4gaGVsbG8zIHVzZXMgRW5kRGlhbG9nKCkgaW5zdGVhZCBvZiBEZXN0cm95V2luZG93KCkuCglMaXN0Ym94IGVuYWJsZWQgaW4gaGVsbG8zLgoKCSogd2luZG93cy94MTFkcnYva2V5Ym9hcmQuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglVcGRhdGVkIEZyZW5jaCBrZXlib2FyZC4KCgkqIGxpYnRlc3QvaGVsbG8uYzogQWxleCBLb3JvYmthIDxhbGV4QGFpa2VhLmFtcy5zdW55c2IuZWR1PgoJRmFuY2llciB2ZXJzaW9uIG9mIGhlbGxvLmMgY291cnRlc3kgb2YgSHV3IERhdmllcy4KCgkqIHByb2dyYW1zL2NvbnRyb2wvY29udHJvbC5jOiBQYXZlbCBSb3NraW4gPHBhdmVsX3Jvc2tpbkBnZW9jaXRpZXMuY29tPgoJRml4ZWQgY29tcGlsYXRpb24gb2YgdGhlIENvbnRyb2wgcGFuZWwuCgoJKiB3aW5kb3dzL3gxMWRydi9rZXlib2FyZC5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCSdSZWFsaWduZWQnIHRoZSBsYXlvdXQgdGFibGUgYSBiaXQuIEFwcGxpZWQgdGhlIG5vbi1sYXRpbi0xIHN0dWZmIGFuZAoJdGhlIGRlYWQga2V5IG1hcHBpbmcgc3R1ZmYgdG8gdGhlIGFjdHVhbCBtYXBwaW5nIGNvZGUgdG9vLiAgUHJldHRpZWQKCXVwIHRoZSBmaXhtZSBtZXNzYWdlLiBBZGRlZCBhIGNoZWNrIHdoZXJlIGlmIHRoZSBrZXlzIG9mIHR3byBsYXlvdXRzCgltYXRjaCBleGFjdGx5LCB0aGUgb25lIHdpdGggdGhlIGJlc3QtbWF0Y2hpbmcga2V5Y29kZSBvcmRlciBpcyBjaG9zZW4sCglzbyB0aGF0IHRoZSBRV0VSVFkgYW5kIER2b3JhayBsYXlvdXRzIGNhbiBiZSBkaXN0aW5ndWlzaGVkLgoKCSogd2luMzIvZGV2aWNlLmMsIHJlbGF5MzIva2VybmVsMzIuc3BlYzoKCUVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJQWRkZWQgKGVtcHR5KSBzdHViIGZvciBPcGVuVnhESGFuZGxlLgoKCSogbXVsdGltZWRpYS9tbWlvLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJbW1pb09wZW4oKSBub3cgaGFuZGxlcyBjb3JyZWN0bHkgTU1JT19QQVJTRSBmbGFnLgoKCSogY29udHJvbHMvZWRpdC5jOiBMdWMgVG91cmFuZ2VhdSA8bHVjQG1hY2FkYW1pYW4uY29tPgoJQmFja2dyb3VuZCBjb2xvciBmaXggd2hlbiBkaXNhYmxlZCBvciByZWFkIG9ubHkuCgoJKiB3aW5kb3dzL3dpbi5jOiBGcmFuY29pcyBCb2lzdmVydCA8ZnJhbmNvaXNAbWFjYWRhbWlhbi5jb20+CglUcmFuc2ZlcmVkIHRoZSB3aW5kb3cgc3RydWN0IG1lbW9yeSByZWxlYXNlIGZyb20gV0lOX0Rlc3Ryb3lXaW5kb3cgdG8KCVdJTl9SZWxlYXNlV25kUHRyLgoKCSogaW5jbHVkZS93aW51c2VyLmg6IFRodXkgTmd1eWVuIDx0aHV5QG1hY2FkYW1pYW4uY29tPgoJRExHSVRFTVRFTVBMQVRFIHN0cnVjdHVyZSBoYWQgb25lIHRvbyBtYW55IG1lbWJlci4KCgkqIGRlYnVnZ2VyL2RiX2Rpc2FzbS5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCVByZXZlbnQgY3Jhc2ggaW4gZGVidWdnZXIuCgpGcmkgQXByICAyIDEwOjM3OjQyIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBjb250cm9scy9jb21iby5jLCBjb250cm9scy9saXN0Ym94LmMsIGluY2x1ZGUvY29tYm8uaDoKCUZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCUltcGxlbWVudGVkIHRoZSBXaW45NSBsb29rIGFuZCBmZWVsLgoKCSogd2luZG93cy9kZWZ3bmQuYzogRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJV3JvdGUgYSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgV01fUFJJTlQgbWVzc2FnZS4KCgkqIHdpbmRvd3MvZGNlLmMsIHdpbmRvd3Mvd2luLmMsIHdpbmRvd3Mvd2lucHJvYy5jLCBtaXNjL2NhbGxiYWNrLmM6CglGcmFuY29pcyBCb2lzdmVydCA8ZnJhbmNvaXNAbWFjYWRhbWlhbi5jb20+CglTdXNwZW5kIGFsbCB3aW5kb3dzIGxvY2tzIGJlZm9yZSB0aGUgY29udHJvbCBpcyBwYXNzZWQgdG8gdGhlCglhcHBsaWNhdGlvbi4KCUFsc28gZml4ZWQgc29tZSBidWdzIGluIGRjZS5jCgoJKiBNYWtlLnJ1bGVzLmluLCBNYWtlZmlsZS5pbjoKCUpvZXJnIE1heWVyIDxqbWF5ZXJAdGVsZXN1bjIudGVsZW1hdGlvbi5kZT4KCS0gUmVtb3ZlIHNvbWUgb2xkIHJjIG1ha2Ugc3R1ZmYKCS0gIm1ha2UgY2xlYW4iIG9taXR0ZWQgc29tZSBpbmNsdWRlIHN1YmRpcnMKCgkqIHJlbGF5MzIvZGRyYXcuc3BlYywgZ3JhcGhpY3MvZGRyYXcuYzoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJQWRkZWQgRGxsQ2xhc3NGYWN0b3J5IHRvIERpcmVjdERyYXcuCgpUaHUgQXByICAxIDEyOjA1OjQ0IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiB3aW5kb3dzL3gxMWRydi9rZXlib2FyZC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVNwbGl0IG9mZiBrZXlzeW0vZGVhZGNoYXIgLT4gY2hhciBtYXBwaW5nLCB1c2UgaXQgaW4gRGV0ZWN0TGF5b3V0LgoKCSogdHN4MTEvWDExX2NhbGxzLCB0c3gxMS90c194bGliLmMsIHdpbmRvd3MvY2xpcGJvYXJkLmMsIHdpbmRvd3MvbWVzc2FnZS5jLCB3aW5kb3dzL3R0eWRydi9jbGlwYm9hcmQuYywgd2luZG93cy90dHlkcnYvaW5pdC5jLCB3aW5kb3dzL3dpbi5jLCB3aW5kb3dzL3dpbnBvcy5jLCB3aW5kb3dzL3gxMWRydi9jbGlwYm9hcmQuYywgd2luZG93cy94MTFkcnYvZXZlbnQuYywgd2luZG93cy94MTFkcnYvaW5pdC5jLCB3aW5kb3dzL3gxMWRydi93bmQuYywgY29udHJvbHMvbWVudS5jLCBncmFwaGljcy94MTFkcnYvYml0bWFwLmMsIGluY2x1ZGUvY2xpcGJvYXJkLmgsIGluY2x1ZGUvdHNfeGxpYi5oLCBpbmNsdWRlL3R0eWRydi5oLCBpbmNsdWRlL3dpbi5oLCBpbmNsdWRlL3dpbnBvcy5oLCBpbmNsdWRlL3gxMWRydi5oOgoJQWxleCBLb3JvYmthIDxhbGV4QGFpa2VhLmFtcy5zdW55c2IuZWR1PgoJRml4ZXMgZm9yIGlnbm9yZWQgV1ZSX1tWSF1SRURSQVcgZmxhZ3MsIG1hZGUgbWluaW1pemF0aW9uIGluIG1hbmFnZWQKCW1vZGUgZ28gdGhyb3VnaCB3aW5kb3cgbWFuYWdlciwgc21hbGwgYnVnZml4ZXMgZm9yIG1lbnUgYW5kIHdpbmRvdwoJY29kZSwgZXh0ZW5kZWQgY2xpcGJvYXJkIGRyaXZlciBtb2RlbCB0byBoYW5kbGUgZm9ybWF0cyBvdGhlciB0aGFuCgl0ZXh0LgoKCSogY29udHJvbHMvZWRpdC5jOiBQYXZlbCBSb3NraW4gPHBhdmVsX3Jvc2tpbkBnZW9jaXRpZXMuY29tPgoJRUNfVVNFRk9OVElORk8gbWVhbnMgZXMtPmNoYXJfd2lkdGgvMywgbm90IGVzLT5jaGFyX3dpZHRoLiBUaGlzIGlzCgl0cnVlIGZvciBtdWx0aWxpbmUgY29udHJvbHMgdG9vLCBhcyBteSB0ZXN0cyBzaG93LgoKCSogZGxscy9jb21jdGwzMi9saXN0dmlldy5jLCBpbmNsdWRlL2xpc3R2aWV3Lmg6CglMdWMgVG91cmFuZ2VhdSA8bHVjQG1hY2FkYW1pYW4uY29tPgoJQWRkZWQgc3VwcG9ydCBmb3IgaWNvbiBhbmQgc21hbGxpY29uIHZpZXdzLgoKCSogbG9hZGVyL2Rvcy9kb3N2bS5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCU1hZGUgRE9TVk1fR2V0VGltZXIgc3Vydml2ZSBFQUdBSU4gZXJyb3JzLi4uCgoJKiBpbmNsdWRlL2NvbW0uaCwgbWlzYy9jb21tLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJSW1wbGVtZW50ZWQgYXN5bmMgY29tbSBidWZmZXJzIChidXQgcHJvYmFibHkgbm90IGJ1Z2ZyZWUpLCBhbmQgYWxvbmcKCXdpdGggdGhlbSwgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYXN5bmMgZXZlbnQgbm90aWZpY2F0aW9ucywgbW9uZyB0aGVtCglFbmFibGVDb21tTm90aWZpY2F0aW9uLiBSZW1vdmVkIGEgcHJldmlvdXMgaGFjayB0aGF0IHdhcyBmYWtpbmcgdGhlCglidWZmZXJzLCBzaW5jZSB3ZSBub3cgaGF2ZSByZWFsIGJ1ZmZlcnMuLi4KCgkqIGluY2x1ZGUvd2luZS93aW51c2VyMTYuaDogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglBZGRlZCBDTl8qIGZsYWdzIHVzZWQgaW4gV01fQ09NTU5PVElGWS4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IExpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJSW1wbGVtZW50IHRoZSBFbnVtQXR0YWNoZWRTdXJmYWNlIG1ldGhvZC4KCgkqIG9sZS9vbGUyLmM6IE5vZWwgQm9ydGh3aWNrIDxub2VsQG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50YXRpb24gZm9yIE9sZUNyZWF0ZU1lbnVEZXNjcmlwdG9yLCBPbGVTZXRNZW51RGVzY3JpcHRvciBhbmQKCU9sZURlc3Ryb3lNZW51RGVzY3JpcHRvciBhbG9uZyB3aXRoIGEgYnVuY2ggb2YgaW50ZXJuYWxseSB1c2VkIG1ldGhvZHMKCWFuZCBkYXRhIHN0cnVjdHVyZXMuCgoJKiBvbGUvZ3VpZC5jLCBpbmNsdWRlL2luaXRndWlkLmgsIGluY2x1ZGUvc2hsZ3VpZC5oLCBpbmNsdWRlL3dpbmUvb2JqX29sZWZvbnQuaCwgaW5jbHVkZS93dHlwZXMuaDoKCUFkcmlhbiBUaHVyc3RvbiA8YWRyaWFudEBjb3JlbC5jYT4KCWluaXRndWlkLmggc2hvdWxkIG9ubHkgY29udGFpbiB0aGUgbWFjcm8gdGhhdCBkZWZpbmVzIHRoZSBndWlkcy4KCUFkZGVkIG9sZWN0bC5oIHRvIGd1aWQuYyBzbyBzb21lIG5lZWRlZCBndWlkcyBnZXQgZGVmaW5lZC4KCU1hZGUgR1VJRF9OVUxMIGFuIGFjdHVhbCBndWlkIHNldCB0byAwLDAsMC4uLgoKCSogaWYxNjMyL2dkaS5zcGVjLCBvYmplY3RzL2dkaW9iai5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBZGRlZCBHZGlTaWduYWxQcm9jKCkgc3R1Yi4KCgkqIG1pc2MvY2FsbGJhY2suYywgcmVsYXkzMi91c2VyMzIuc3BlYywgd2luZG93cy91c2VyLmMsIGlmMTYzMi90aHVuay5jLCBpZjE2MzIvdXNlci5zcGVjLCBpbmNsdWRlL2NhbGxiYWNrLmgsIGluY2x1ZGUvdGFzay5oLCBpbmNsdWRlL3VzZXIuaCwgbG9hZGVyL21haW4uYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWRkZWQgVVNFUjMyLlVzZXJTaWduYWxQcm9jIHRvIENhbGxvdXQgdGFibGUuCglJbXBsZW1lbnRlZCBidWlsdC1pbiBVc2VyU2lnbmFsUHJvYygpLgoJRG9uJ3QgYW5ub3VuY2UgV2luMy4xLXN0eWxlIFVTRVIgaGFuZGxlciBhbnkgbW9yZS4KCgkqIHdpbjMyL29yZGluYWxzLmMsIGluY2x1ZGUvcHJvY2Vzcy5oLCBsb2FkZXIvbmUvbW9kdWxlLmMsIGxvYWRlci9uZS9zZWdtZW50LmMsIGxvYWRlci90YXNrLmMsIHNjaGVkdWxlci9wcm9jZXNzLmMsIHNjaGVkdWxlci90aHJlYWQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgUFJPQ0VTU19DYWxsVXNlclNpZ25hbFByb2MoKS4KCVNlbmQgVVNFUiBzaWduYWxzIGF0IHZhcmlvdXMgYXBwcm9wcmlhdGUgcGxhY2VzLgoJTW92ZWQgW0dTXWV0UHJvY2Vzc0R3b3JkKCkgdG8gc2NoZWR1bGVyL3Byb2Nlc3MuYy4KCgkqIGRsbHMvc2hlbGwzMi9NYWtlZmlsZS5pbiwgZGxscy9zaGVsbDMyL2Jyc2ZvbGRlci5jLCBkbGxzL3NoZWxsMzIvcGlkbC5jLCBkbGxzL3NoZWxsMzIvc2hlbGxsaW5rLmMsIGRsbHMvc2hlbGwzMi9zaGxtZW51LmMsIGluY2x1ZGUvc2hsb2JqLmgsIHJlbGF5MzIvc2hlbGwzMi5zcGVjOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglBbGwgMTkgRmlsZU1lbnVfKiBmdW5jdGlvbnMsIHNvbWUgYXMgc3R1YnMsIHNvbWUgaW1wbGVtZW50ZWQuCgoJKiBkbGxzL3NoZWxsMzIvc2hlbGxvbGUuYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVNIQ0xTSURGcm9tU3RyaW5nLCBTdHJUb09sZVN0ciBpbXBsZW1lbnRlZC4KCVJMQnVpbGRMaXN0T2ZQYXRocyBzdHViLgoKCSogZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCURsbEdldFZlcnNpb24gKG5vdCB5ZXQgZXhwb3J0ZWQpLgoJU21hbGwgY2hhbmdlIHRvIFNIQXBwQmFyTWVzc2FnZS4KCgkqIHJlbGF5MzIvd2lubW0uc3BlYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglBZGRlZCBEcnZDbG9zZSwgRHJ2RGVmRHJpdmVyUHJvYywgRHJ2T3BlbiwgRHJ2T3BlbkEsIERydlNlbmRNZXNzYWdlLgoKCSogaWYxNjMyL21tc3lzdGVtLnNwZWM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJQWRkZWQgU3RhY2tFbnRlcigpIGFuZCBTdGFja0xlYXZlKCkgc3R1YnMKCgkqIG11bHRpbWVkaWEvbWNpLmMsIG11bHRpbWVkaWEvbW1zeXN0ZW0uYzoKCUVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJU3RhcnRpbmcgaW1wbGVtZW50YXRpb24gb2YgTUNJIGNyZWF0b3IgdGFza3MKCUZpeGVkIGJ1ZyBpbiBNQ0lfT1BFTiBoYW5kbGluZyAodGhhbmtzIHRvIEFkYW0gZm9yIHJlcG9ydGluZyB0aGlzIG9uZSkKCUJldHRlciBpbXBsZW1lbnRhdGlvbiBvZiBtbVRhc2tDcmVhdGUxNgoKCSogaW5jbHVkZS9tdWx0aW1lZGlhLmg6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJQWRkZWQgY3JlYXRvciB0YXNrIHRvIE1DSSBzdHJ1Y3QuCgoJKiBkbGxzL2NvbW1kbGcvZmlsZWRsZy5jOiBQYXZlbCBSb3NraW4gPHBhdmVsX3Jvc2tpbkBnZW9jaXRpZXMuY29tPgoJUmVwbGFjZWQgMHhDMDAwIGJ5IHN5bWJvbGljIGNvbnN0YW50cy4KCgkqIGRsbHMvY29tY3RsMzIvaW1hZ2VsaXN0LmM6IEZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCUZpeGVkIHNtYWxsID09LCAhPSBtaXh1cC4KCgkqIHdpbmRvd3MvZGVmZGxnLmMsIHdpbmRvd3MvZGVmd25kLmM6CglMdWMgVG91cmFuZ2VhdSA8bHVjQG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50ZWQgV01fTk9USUZZRk9STUFULgoKCSogbG9hZGVyL2VsZi5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BtdWQuZGU+CgkiZm9vIiB3YXMgbm90IHRyYW5zbGF0ZWQgdG8gImZvby5zbyIgaW4gZWxmIGxvYWRlci4KCgkqIGluY2x1ZGUvYml0bWFwLmgsIG9iamVjdHMvYml0bWFwLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUxvYWRCaXRtYXAxNigpL0xvYWRJbWFnZTE2KCkgY2FsbGluZyBzZXF1ZW5jZSBzaW1wbGlmaWVkLgoKCSogbG9hZGVyL21vZHVsZS5jLCBsb2FkZXIvbmUvcmVzb3VyY2UuYywgbWlzYy9jYWxsYmFjay5jLCBpZjE2MzIvd3Byb2NzLnNwZWM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFsbG93IE5VTEwgTkUgcmVzb3VyY2UgaGFuZGxlcjsgY2FsbCB0aGUgZGVmYXVsdCBoYW5kbGVyIGRpcmVjdGx5LgoJUmVtb3ZlZCBXUFJPQ1MgLyBDYWxsYmFja3Mgc3VwcG9ydCBmb3IgV2luZUxpYiByZXNvdXJjZSBoYW5kbGVycy4KCgkqIGluY2x1ZGUvcHJvY2Vzcy5oLCByZWxheTMyL3V0dGh1bmsuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJTWFkZSBVbml2ZXJzYWwgVGh1bmsgbGlzdCBwZXItcHJvY2Vzcywgbm90IHN5c3RlbSBnbG9iYWwuCgoJKiBpbmNsdWRlL2NvbW1jdHJsLmg6IFBhdWwgUXVpbm4gPHBhdWxxQGNvcmVsLmNhPgoJQWRkaXRpb25hbCBtYWNybyBkZWZpbml0aW9ucy4KCgkqIGRsbHMvY29tY3RsMzIvdGFiLmM6IEZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCUltcGxlbWVudGVkIFRDTV9BREpVU1RSRUNULgoKCSogbXNkb3MvaW50MDkuYywgbXNkb3MvaW9wb3J0cy5jOgoJTWljaGFlbCBWZWtzbGVyIDxtdmVrc2xlckB0ZWNodW5peC50ZWNobmlvbi5hYy5pbD4KCVJlbW92ZWQgImltcGxpY2l0IGRlY2xhcmF0aW9uIiB3YXJuaW5ncy4KCgkqIGdyYXBoaWNzL2QzZF9wcml2YXRlLmg6IExpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJRml4ZWQgT3BlbkdMIGRldmljZXMgaW1wbGVtZW50YXRpb24uCgoJKiB3aW5kb3dzL3F1ZXVlLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJSW4gVXNlcllpZWxkMTYsIHdoZW4gY3VycmVudCB0aHJlYWQgaXMgYSAzMiBiaXQgb25lIHdoaWNoIGhvbGQgdGhlCglXaW4xNkxvY2ssIG11c3QgdGFrZSBjYXJlIG9mIGEgTG9ja0NvdW50ID4gMS4KCgkqICovKi5jOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglNb3JlIGNvZGUgbW92ZWQgdG8gdGhlIFgxMSBkcml2ZXIgKGJpdG1hcCBhbmQgcGFsZXR0ZSBhbmQgbWlzYykuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBNYXIgMjggMTU6MjA6MDAgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvd2luYmFzZS5oLCBpbmNsdWRlL3dpbmdkaS5oOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglNb3ZlIERNKiBkZWZpbmVzIGZyb20gd2luYmFzZS5oIC0+IHdpbmdkaS5oLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglGaXhlZCBRdWVyeUludGVyZmFjZSBmdW5jdGlvbnMgZm9yIElEaXJlY3QzRCAxIGFuZCAyLgoKCSogb2xlL25scy9BdHRpYy9kbmsubmxzOiBBcHBhcmVudGx5IG5vIGxvbmdlciBuZWVkZWQuCgoJKiBjb250cm9scy9tZW51LmMsIGNvbnRyb2xzL3VpdG9vbHMuYywgZGxscy9jb21jdGwzMi9jb21ib2V4LmMsIGdyYXBoaWNzL3gxMWRydi9icnVzaC5jLCBncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuYywgaW5jbHVkZS9kZWJ1Zy5oLCBpbmNsdWRlL2RlYnVnZGVmcy5oLCBtZW1vcnkvZ2xvYmFsLmMsIG1pc2MvZGRlbWwuYywgd2luZG93cy94MTFkcnYvZXZlbnQuYzoKCURpbWl0cmllIE8uIFBhdW4gPGRpbWlAY3MudG9yb250by5lZHU+CglDaGFuZ2VkIHNvbWUgZGVidWcgbWVzc2FnZXMgZnJvbSBvbmUgY2hhbm5lbCB0byBhbm90aGVyLCB0byBjbGVhbiB1cCBhCgliaXQgdGhlIGRlYnVnIGNoYW5uZWwgdXNhZ2UuCgoJKiBsb2FkZXIvbW9kdWxlLmM6IEplc3MgSGFhcyA8cGFyYW5vaWQwN0Bob3RtYWlsLmNvbT4KCUZpeGVkIENyZWF0ZVByb2Nlc3NBIHNvIGl0IGNhbiBoYW5kbGUgY29tbWFuZGxpbmVzIHdpdGggYXJndW1lbnRzIGFuZAoJbm8gLmV4ZS4KCgkqIGxvYWRlci9uZS9tb2R1bGUuYzogSmVzcyBIYWFzIDxwYXJhbm9pZDA3QGhvdG1haWwuY29tPgoJRml4ZWQgR2V0TW9kdWxlSGFuZGxlMTYuCgoJKiB3aW5kb3dzL3gxMWRydi9rZXlib2FyZC5jOiBQYXZlbCBSb3NraW4gPHBhdmVsX3Jvc2tpbkBnZW9jaXRpZXMuY29tPgoJQWRkZWQgUnVzc2lhbiBrZXlib2FyZCBzdXBwb3J0LgoKCSogaW5jbHVkZS93aW51c2VyLmgsIHJlbGF5MzIvdXNlcjMyLnNwZWMsIHdpbmRvd3MvdXNlci5jOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglBZGRlZCBzdHViIGZvciBTZXRTeXN0ZW1DdXJzb3IuCgoJKiB3aW4zMi9maWxlLmM6IFN0ZWZmZW4gTW9lbGxlciA8bW9lbGxlckBlYmkuYWMudWs+CglTZXRGaWxlQXR0cmlidXRlc0E6ICJpbXBsZW1lbnRlZCIgc2V0dGluZyBvZiBkaXJlY3RvcnkgZmxhZyBhcyB0ZXN0IG9mCgljb21wYXRpYmlsaXR5LgoKCSogd2luZG93cy94MTFkcnYva2V5Ym9hcmQuYzogUGF2ZWwgUm9za2luIDxwYXZlbF9yb3NraW5AZ2VvY2l0aWVzLmNvbT4KCUNoYW5nZXMgaW4gWDExRFJWX0tFWUJPQVJEX0RldGVjdExheW91dCBpbiBvcmRlciB0byBpbXBsZW1lbnQgUnVzc2lhbgoJa2V5Ym9hcmQgc3VwcG9ydC4KCgkqIGluY2x1ZGUvd2luZS9vYmpfc3RvcmFnZS5oLCBvbGUvTWFrZWZpbGUuaW4sIG9sZS9vbGUyLmMsIG9sZS9vbGUyc3R1YnMuYywgb2xlL3N0b3JhZ2UuYywgb2xlL3ZhcmlhbnQuYywgcmVsYXkzMi9vbGUzMi5zcGVjLCByZWxheTMyL29sZWF1dDMyLnNwZWMsIHJlbGF5MzIvdXNlcjMyLnNwZWMsIHdpbmRvd3MvaW5wdXQuYywgaW5jbHVkZS9vbGUyLmgsIGluY2x1ZGUvb2xlYXV0by5oLCBpbmNsdWRlL29sZWN0bC5oLCBpbmNsdWRlL3dpbnVzZXIuaDoKCVBhdWwgUXVpbm4gPHBhdWxxQGNvcmVsLmNhPgoJQWFyb24gQmFybmVzIDxhYXJvbmJAY29yZWwuY2E+CglBZHJpYW4gVGh1cnN0b24gPGFkcmlhbnRAY29yZWwuY2E+CglCdW5kbGUgb2YgbmV3IHN0dWJzLgoKCSogbWlzYy9jcnRkbGwuYywgbWlzYy9kZGVtbC5jLCBvbGUvb2xlMmRpc3AuYzoKCUFuZHJlYXMgTW9ociA8Y2lwYW04OTVAY2lwMS5pbmQudW5pLXN0dXR0Z2FydC5kZT4KCUFkZGVkIG1pc3NpbmcgV0lOQVBJcy4KCgkqIHJlbGF5MzIva2VybmVsMzIuc3BlYywgd2luMzIvbmV3Zm5zLmM6CglBbmRyZWFzIE1vaHIgPGNpcGFtODk1QGNpcDEuaW5kLnVuaS1zdHV0dGdhcnQuZGU+CglBZGRlZCBDcmVhdGVJb0NvbXBsZXRpb25Qb3J0IHN0dWIuCgoJKiB3aW5kb3dzL3F1ZXVlLmMsIHdpbmRvd3MvbWVzc2FnZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglDYWxsIEVWRU5UX1BlbmRpbmcoKSB0byBmbHVzaCBYMTEgb3V0cHV0IHF1ZXVlIGJlZm9yZSBibG9ja2luZyBpbgoJTXNnV2FpdEZvck11bHRpcGxlT2JqZWN0cygpLgoJRG9uJ3QgY2FsbCBFVkVOVF9XYWl0TmV0RXZlbnQgaW4gTVNHX1BlZWtIYXJkd2FyZU1zZy4KCVByb3RlY3Qgc3lzdGVtIHF1ZXVlIGFjY2VzcyBpbiBoYXJkd2FyZV9ldmVudCgpLgoKCSogd2luZG93cy91c2VyLmMsIHdpbmRvd3Mvd2luLmMsIHdpbmRvd3Mvd2lucG9zLmMsIHdpbmRvd3MveDExZHJ2L2V2ZW50LmMsIHdpbmRvd3MveDExZHJ2L3duZC5jLCBjb250cm9scy9tZW51LmMsIHdpbmRvd3MvZGNlLmMsIHdpbmRvd3MvZGlhbG9nLmMsIHdpbmRvd3MvZm9jdXMuYywgd2luZG93cy9tZGkuYywgd2luZG93cy9tZXNzYWdlLmMsIHdpbmRvd3Mvbm9uY2xpZW50LmM6CglGcmFuY29pcyBCb2lzdmVydDxmcmFuY29pc0BtYWNhZGFtaWFuLmNvbT4KCUZpeGVkIHNvbWUgYnVncyBpbiB0aHJlYWQgc2FmZW5lc3MgZm9yIHduZCBzdHJ1Y3QuCgoJKiBsaWJ0ZXN0L01ha2VmaWxlLmluLCBsaWJ0ZXN0L2hlbGxvMy5jLCBsaWJ0ZXN0L2hlbGxvM3Jlcy5yYzoKCVBhdmVsIFJvc2tpbiA8cGF2ZWxfcm9za2luQGdlb2NpdGllcy5jb20+CglNYWRlIGxpYnRlc3QvaGVsbG8zIHdvcmsgYWdhaW4sIG5vdyB3aXRoIFdpbmRvd3MtY29tcGF0aWJsZSByZXNvdXJjZQoJbG9hZGluZy4KCgkqIGluY2x1ZGUvaW1tLmgsIGluY2x1ZGUvbW1zeXN0ZW0uaCwgaW5jbHVkZS9tc2FjbS5oLCBpbmNsdWRlL3dpbmRlZi5oLCBpbmNsdWRlL3d0eXBlcy5oOgoJSml1bWluZyBMdW8gPGppdW1pbmdfbHVvQHlhaG9vLmNvbT4KCU1vdmVkIG1hY3JvIERFQ0xBUkVfSEFORExFKCkgKGluIG1zYWNtLmggYW5kIHd0eXBlcy5oKSB0byB3aW5kZWYuaCwKCXRoZW4gZGVsZXRlZCB0aGUgZHVwbGljYXRlZCB0eXBlZGVmcyAoaW4gaW1tLmggYW5kIG1tc3lzdGVtLmgpLgoKCSogbWlzYy9wcmludGRydi5jOiBLbGFhcyB2YW4gR2VuZCA8a2xhYXNAdmFuZ2VuZC5kZW1vbi5ubD4KCVJld3JvdGUgRW51bVByaW50ZXJzQSwgYWRkZWQgQ3JpdGljYWxTZWN0aW9uIGFyb3VuZCBSZWdpc3RyeSByZWFkcyBhbmQKCWltcGxlbWVudGVkIFBSSU5URVJfSU5GT18yIHJlcXVlc3QuCgoJKiB3aW5kb3dzL3gxMWRydi9rZXlib2FyZC5jOiBKb25hdGhhbiBOYXlsb3IgPGc0a2x4QHBvcC5hZ3JpLmNoPgoJQWRkZWQgU3dpc3MgR2VybWFuIGtleWJvYXJkIGxheW91dC4KCgkqIGRsbHMvc2hlbGwzMi9jb250bWVudS5jLCBkbGxzL3NoZWxsMzIvZGF0YW9iamVjdC5jLCBkbGxzL3NoZWxsMzIvZm9sZGVycy5jLCBkbGxzL3NoZWxsMzIvaWNvbmNhY2hlLmMsIGRsbHMvc2hlbGwzMi9waWRsLmMsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uaCwgZGxscy9zaGVsbDMyL3NobHZpZXcuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJLSBhZGp1c3RlZCBwcmludGluZyBvZiByZWZjb3VudHMgdG8gYmUgZXF1YWwKCS0gY2xlYW5pbmcgdXAgaWNvbiBjYWNoZSBvbiBQUk9DRVNTX0RFVEFDSAoJLSBmaXhlZCBhc2NpaS91bmljb2RlIHVzZSBpbiBTSC9JTENyZWF0ZUZyb21QYXRoCgktIGZpeGVkIHNtYWxsIG1lbW9yeSBsZWFrIGluIHNoZWxsdmlldwoKCSogbG9hZGVyL2Rvcy9kb3N2bS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUVtcHR5IERPU1ZNX1F1ZXVlRXZlbnQgZm9yICFNWl9TVVBQT1JURUQuCgoJKiBwcm9ncmFtcy9jbWRsZ3RzdC9jbWRsZ3RzdC5jOgoJUGF2ZWwgUm9za2luIDxwYXZlbF9yb3NraW5AZ2VvY2l0aWVzLmNvbT4KCUZpeGVkIHdhcm5pbmdzLgoKCSogaW5jbHVkZS9jb21tZGxnLmg6IFBhdmVsIFJvc2tpbiA8cGF2ZWxfcm9za2luQGdlb2NpdGllcy5jb20+CglDaGFuZ2VkIENIT09TRUNPTE9SW0FXXS5GbGFncyBmcm9tIFVJTlQgdG8gRFdPUkQuCgoJKiB3aW5kb3dzL3BhaW50aW5nLmMsIHdpbmRvd3Mvc2Nyb2xsLmMsIHdpbmRvd3MvdHR5ZHJ2L2luaXQuYywgd2luZG93cy90dHlkcnYvd25kLmMsIHdpbmRvd3Mvd2luLmMsIHdpbmRvd3Mvd2lucG9zLmMsIHdpbmRvd3MveDExZHJ2L2V2ZW50LmMsIHdpbmRvd3MveDExZHJ2L2luaXQuYywgd2luZG93cy94MTFkcnYvd25kLmMsIGNvbnRyb2xzL21lbnUuYywgaW5jbHVkZS9yZWdpb24uaCwgaW5jbHVkZS90c194Zjg2dm1vZGUuaCwgaW5jbHVkZS90c194dXRpbC5oLCBpbmNsdWRlL3R0eWRydi5oLCBpbmNsdWRlL3dpbi5oLCBpbmNsdWRlL3gxMWRydi5oLCBvYmplY3RzL3JlZ2lvbi5jLCB0b29scy9tYWtlX1gxMXdyYXBwZXJzLCB0c3gxMS9YMTFfY2FsbHMsIHRzeDExL3RzX3hmODZ2bW9kZS5jLCB0c3gxMS90c194dXRpbC5jLCB3aW5kb3dzL2RjZS5jLCB3aW5kb3dzL25vbmNsaWVudC5jOgoJQWxleCBLb3JvYmthIDxhbGV4QGFpa2VhLmFtcy5zdW55c2IuZWR1PgoJTW92ZWQgaHJnblVwZGF0ZSBmcm9tIGNsaWVudCB0byB3aW5kb3cgY29vcmRpbmF0ZXMsIG1hZGUgbm9uY2xpZW50CglwYWludGluZyBkZXBlbmQgb24gdGhlIHVwZGF0ZSByZWdpb24sIHJld29ya2VkIFNldFdpbmRvd1BvcygpIGFuZAoJUmVkcmF3V2luZG93KCkgdG8gc3BlZWQgdXAgdXBkYXRlIHJlZ2lvbiBjYWxjdWxhdGlvbiwgbWFkZSAtZGVza3RvcAoJd29yayBwcm9wZXJseSwgYWRkZWQgV01fQ0FOQ0VMTU9ERSBoZXJlIGFuZCB0aGVyZSwgZml4ZWQgc2V2ZXJhbAoJd2luZG93IGFjdGl2YXRpb24gYnVncyB0aGF0IGNyZXB0IGluIHNpbmNlIHRoZSBsYXN0IHRpbWUuCgoJKiB3aW5kb3dzL21lc3NhZ2UuYzogQWxleCBLb3JvYmthIDxhbGV4QGFpa2VhLmFtcy5zdW55c2IuZWR1PgoJRml4ZWQgb2NjYXNpb25hbCBsb3NzIG9mIFNlbmRNZXNzYWdlKCkgcmV0dXJuIHZhbHVlLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglBZGRlZCBpbml0aWFsaXNhdGlvbiBvZiB0aGUgcGl4bWFwX2RlcHRoIGZpZWxkIGluCglYbGliX0RpcmVjdERyYXdDcmVhdGUuCgoJKiBtc2Rvcy9pb3BvcnRzLmM6IEplc3MgSGFhcyA8cGFyYW5vaWQwN0Bob3RtYWlsLmNvbT4KCUZpeGVkIGEgd2FybmluZy4KCgkqIG1zZG9zL2ludDJmLmM6IEplc3MgSGFhcyA8cGFyYW5vaWQwN0Bob3RtYWlsLmNvbT4KCUFkZGVkIHN0dWIgZm9yIGludDJmIDRiLgoKCSogbXVsdGltZWRpYS9tbXN5c3RlbS5jOiBDaHJpcyBNb3JnYW4gPGNtb3JnYW5Ad3BpLmVkdT4KCUphbWVzIEFiYmF0aWVsbG8gPGFiYmV5akB3cGkuZWR1PgoJRml4ZWQgbWVtb3J5IGxlYWsgaW4gd2F2ZU91dE9wZW4vd2F2ZU91dENsb3NlLgoKCSogZ3JhcGhpY3MvcHNkcnYvZXNjYXBlLmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCU1vcmUgRXNjYXBlcyBmb3IgdGhlIFBvc3RTY3JpcHQgZHJpdmVyLgoKU2F0IE1hciAyNyAxNjo1NjoxMyAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZ3JhcGhpY3MvZDNkY29tbW9uLmMsIGdyYXBoaWNzL2QzZGRldmljZXMuYywgZ3JhcGhpY3MvZDNkZXhlY3V0ZWJ1ZmZlci5jLCBncmFwaGljcy9kM2RsaWdodC5jLCBncmFwaGljcy9kM2RtYXRlcmlhbC5jLCBncmFwaGljcy9kM2R0ZXh0dXJlLmMsIGdyYXBoaWNzL2QzZHZpZXdwb3J0LmMsIGdyYXBoaWNzL2RkcmF3LmM6CglGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCUFkYXB0ZWQgdG8gdGhlIGludGVyZmFjZS9pbXBsZW1lbnRhdGlvbiBzZXBhcmF0aW9uLgoJTm93IHVzZXMgSUNPTV9USElTIHRvIGFjY2VzcyB0aGUgaW1wbGVtZW50YXRpb24gc3RydWN0dXJlcy4KCVJlcGxhY2VkICd0aGlzJyB3aXRoICdUaGlzJyBmb3IgSUNPTV9USElTLgoJRGlyZWN0IGFjY2VzcyB0byB0aGUgdmlydHVhbCB0YWJsZSBoYXMgYmVlbiBlbGltaW5hdGVkIHRvby4KCgkqIGdyYXBoaWNzL2QzZF9wcml2YXRlLmgsIGdyYXBoaWNzL2RkcmF3X3ByaXZhdGUuaDoKCUZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJVXBkYXRlZCB0byBpbmNsdWRlIGFsbCB0aGUgaW1wbGVtZW50YXRpb24gYXNwZWN0cyB0aGF0IHdlcmUgcHJldmlvdXNseQoJaW4gdGhlIHB1YmxpYyBpbmNsdWRlcy4KCgkqIGdyYXBoaWNzL3ZnYS5jOiBGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCVJlbW92ZWQgZGlyZWN0IGFjY2VzcyB0byB0aGUgdmlydHVhbCB0YWJsZQoKCSogaW5jbHVkZS9kM2QuaCwgaW5jbHVkZS9kZHJhdy5oOiBGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCVJlbW92ZWQgYWxsIGltcGxlbWVudGF0aW9uIGFzcGVjdHMuCglNb2RpZmllZCB0byB1c2UgdGhlIGxhdGVzdCBJQ09NIG1hY3Jvcy4KCUFkZGVkIHRoZSBtYWNyb3MgZm9yIHVzZSBpbiBDLgoJQWRkZWQgdGhlIG1ldGhvZCBwYXJhbWV0ZXIgbmFtZXMgKHdoZW4gSSBoYWQgdGhlbSkuCgoJKiBpbmNsdWRlL21vZHVsZS5oLCBpbmNsdWRlL3BlX2ltYWdlLmgsIGluY2x1ZGUvdGhyZWFkLmgsIGxvYWRlci9tb2R1bGUuYywgbG9hZGVyL3BlX2ltYWdlLmMsIHNjaGVkdWxlci9wcm9jZXNzLmMsIHNjaGVkdWxlci90aHJlYWQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJRml4ZWQgc2VxdWVuY2Ugb2YgRExMX1BST0NFU1NfREVUQUNIIG5vdGlmaWNhdGlvbiBjYWxscy4KCU1vdmVkIFBFX01PRFJFRiBmbGFncyB0byBXSU5FX01PRFJFRiBsZXZlbC4KCUJldHRlciBoYW5kbGluZyBvZiBMb2FkTGlicmFyeUV4IGZsYWdzLgoJUEVfSW5pdFRscygpIGNoYW5nZWQgdG8gd29yayBvbmx5IG9uIHRoZSBjdXJyZW50IHRocmVhZC4KCgkqIGluY2x1ZGUvc2VydmVyLmgsIHNjaGVkdWxlci9wcm9jZXNzLmMsIHNlcnZlci90cmFjZS5jOgoJQWRkZWQgY21kIGxpbmUgaW4gbmV3X3Byb2Nlc3MgcmVxdWVzdC4KCgkqIHNjaGVkdWxlci90aHJlYWQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWxsIHRocmVhZHMgY3JlYXRlZCB3aXRoIENyZWF0ZVRocmVhZCBhcmUgMzItYml0IHRocmVhZHMuCgoJKiBkbGxzL3NoZWxsMzIvTWFrZWZpbGUuaW4sIGRsbHMvc2hlbGwzMi9yZWdzdHJlYW0uYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVJlYWRpbmcgb2YgYmluYXJ5IHN0cmVhbXMgaW1wbGVtZW50ZWQgKFNIT3BlblJlZ1N0cmVhbSkuCgoJKiBtc2Rvcy9pbnQyNS5jLCBtc2Rvcy9pbnQyNi5jOgoJQW5kcmVhcyBNb2hyIDxjaXBhbTg5NUBjaXAxLmluZC51bmktc3R1dHRnYXJ0LmRlPgoJRml4ZWQgaW50MjUgJiBpbnQyNiBlcnJvciBjb2RlLgoKCSogbG9hZGVyL3Rhc2suYywgd2luZG93cy9xdWV1ZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBbGxvdyBVc2VyWWllbGQxNiB0byBiZSBjYWxsZWQgZnJvbSAzMi1iaXQgdGhyZWFkLgoKCSogaW5jbHVkZS9vbGVkbGcuaCwgaW5jbHVkZS93aW5iYXNlLmg6CglBbGJlcnQgRGVuIEhhbm4gPGFsYmVydGRAY29yZWwuY2E+CglBZGRpdGlvbmFsIG1hY3JvIGRlZmluaXRpb25zLgoKCSogZ3JhcGhpY3MveDExZHJ2L2JpdG1hcC5jLCBpbmNsdWRlL2JpdG1hcC5oLCBvYmplY3RzL2JpdG1hcC5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglGaXhlZCB7U3xHfWV0Qml0bWFwQml0cyBpbiB4MTFkcnYuICBSZW1vdmVkIEJJVE1BUF9HZXRQYWRkaW5nLgoKCSogb2JqZWN0cy9tZXRhZmlsZS5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUZpeGVkIG1ldGFmaWxlIHJlY29yZGluZyBvZiBDcmVhdGVQYXR0ZXJuQnJ1c2guCgpUaHUgTWFyIDI1IDE2OjQyOjI4IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBkbGxzL2NvbWN0bDMyL2ltYWdlbGlzdC5jLCBkbGxzL2NvbWN0bDMyL3Rvb2xiYXIuYywgaW5jbHVkZS9jb21tY3RybC5oLCBpbmNsdWRlL3Rvb2xiYXIuaCwgZGxscy9jb21jdGwzMi9jb21tY3RybC5jOgoJUGFzY2FsIExlc3NhcmQgPHBhc2NhbEBtYWNhZGFtaWFuLmNvbT4KCUNoYW5nZSB0aGUgQWRkQml0bWFwIGZ1bmN0aW9uLiBJbXBsZW1lbnQgZmxhdCB0b29sYmFyLiBDaGFuZ2UKCUNyZWF0ZVRvb2xiYXJFeC4gSW1wbGVtZW50IHBhcnRpYWxseSB0aGUgaG90IGJ1dHRvbnMgZm9yIHRvb2xiYXIuCgoJKiBtc2Rvcy9pbnQxNi5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJSW1wbGVtZW50ZWQgR2V0IFNoaWZ0IEZsYWdzIGZ1bmN0aW9uLgoKCSogZGxscy9jb21jdGwzMi90cmVldmlldy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCU1pc3NpbmcgV0lOQVBJLgoKCSogZ3JhcGhpY3MvcGFpbnRpbmcuYzogRGF2aWQgTHV5ZXIgPGx1eWVyQHVjcy51d2EuZWR1LmF1PgoJQ2hhbmdlZCBzdGRsaWIuaCB0byBzdHJpbmcuaC4KCgkqIGRsbHMvbnRkbGwvdGltZS5jOiBEYXZpZCBMdXllciA8bHV5ZXJAdWNzLnV3YS5lZHUuYXU+CglBZGRlZCBzdHJpbmcuaC4KCgkqIG1pc2MvZGRlbWwuYywgbXVsdGltZWRpYS9tc3ZpZGVvLmMsIG9sZS9zYWZlYXJyYXkuYywgcHJvZ3JhbXMvYXZpdG9vbHMvYXZpaW5mby5jLCBwcm9ncmFtcy9hdml0b29scy9hdmlwbGF5LmMsIHByb2dyYW1zL2F2aXRvb2xzL2ljaW5mby5jLCB3aW4zMi9jb25zb2xlLmM6CglEYXZpZCBMdXllciA8bHV5ZXJAdWNzLnV3YS5lZHUuYXU+CglDaGFuZ2VkICJzdHJpbmdzLmgiIHRvICJzdHJpbmcuaCIuCgoJKiBncmFwaGljcy94MTFkcnYvYml0Ymx0LmMsIHdpbmRvd3Mvbm9uY2xpZW50LmM6CglSYW5keSBXZWVtcyA8cndlZW1zQGhvbWUuY29tPgoJRml4ZWQgb2ZmLWJ5LW9uZSBlcnJvciBpZiBiaXRibHQgd2lkdGggb3IgaGVpZ2h0IGlzIG5lZ2F0aXZlLgoKCSogZGxscy9jb21jdGwzMi90YWIuYywgaW5jbHVkZS90YWIuaDoKCUZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCUltcGxlbWVudGVkOgoJLSBzaG93aW5nIHRoZSBzZWxlY3RlZCB0YWIgYXMgaGlnaGxpZ2h0ZWQKCS0gc3VwcG9ydCBmb3IgZHJhd2luZyB0aGUgZm9jdXMgcmVjdGFuZ2xlCgktIGJhc2ljIGtleWJvYXJkIHN1cHBvcnQKCS0gc3VwcG9ydCBmb3IgYSB0YWIgd2l0aCBob3Jpem9udGFsIHNjcm9sbGluZy4KCgkqIGZpbGVzL3Byb2ZpbGUuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglUaHJlYWQtc2FmZSBpbXBsZW1lbnRhdGlvbiBvZiBwcm9maWxlIGZ1bmN0aW9ucyAoV2luZG93cyBhbmQgV2luZSkuCgoJKiBpbmNsdWRlL21lc3NhZ2UuaCwgbG9hZGVyL21haW4uYywgd2luZG93cy90aW1lci5jOgoJU3RlcGhhbmUgTHVzc2llciA8c3RlcGhhbmVAbWFjYWRhbWlhbi5jb20+CglNYWRlIHRoZSB0aW1lciBjb2RlIHRocmVhZCBzYWZlLgoKCSogd2luZG93cy9kaWFsb2cuYzogRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJRml4ZWQgcG9zc2libGUgZW5kbGVzcyBsb29wLgoKCSogY29udHJvbHMvbGlzdGJveC5jOiBGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglGaXhlZCBMQl9HRVRDVVJTRUwgbWVzc2FnZSB0byByZXR1cm4gTEJfRVJSIG9uIGVtcHR5IGxpc3QuCgoJKiBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmgsIGRsbHMvc2hlbGwzMi9zaGVsbG9sZS5jLCBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmMsIGluY2x1ZGUvc2hsZ3VpZC5oLCBpbmNsdWRlL3NobG9iai5oLCBpbmNsdWRlL3dpbmUvb2JqX2Jhc2UuaCwgaW5jbHVkZS93aW5lL29ial9jb21tZGxnYnJvd3Nlci5oLCBpbmNsdWRlL3dpbmUvb2JqX2NvbnRleHRtZW51LmgsIGluY2x1ZGUvd2luZS9vYmpfZG9ja2luZ3dpbmRvd2ZyYW1lLmgsIGluY2x1ZGUvd2luZS9vYmpfZXh0cmFjdGljb24uaCwgaW5jbHVkZS93aW5lL29ial9zaGVsbGJyb3dzZXIuaCwgaW5jbHVkZS93aW5lL29ial9zaGVsbGV4dGluaXQuaCwgaW5jbHVkZS93aW5lL29ial9zaGVsbGZvbGRlci5oLCBpbmNsdWRlL3dpbmUvb2JqX3NoZWxsdmlldy5oLCBkbGxzL3NoZWxsMzIvYnJzZm9sZGVyLmMsIGRsbHMvc2hlbGwzMi9jb250bWVudS5jLCBkbGxzL3NoZWxsMzIvZm9sZGVycy5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVVzZSB0aGUgbmV3IGhlYWRlciBmb3IgQ09NIGRlZmluaXRpb25zLgoKCSogZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIHJlbGF5MzIvc2hlbGwzMi5zcGVjOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgc3R1YiBzaGVsbF82NTQuCgoJKiBpbmNsdWRlL3RyZWV2aWV3LmgsIGRsbHMvY29tY3RsMzIvdHJlZXZpZXcuYzoKCVN5bHZhaW4gU3QuR2VybWFpbiA8c3lsdmFpbkBtYWNhZGFtaWFuLmNvbT4KCUltcGxlbWVudGF0aW9uIG9mIFRWTV9TT1JUQ0hJTERSRU5DQi4KCUltcGxlbWVudGF0aW9uIG9mIFRWSV9TT1JUIGluc2VydGlvbi4KCUZpeCBkaXNwbGF5IHByb2JsZW0gd2hlbiBUVklGX0lNQUdFfFRWSUZfU0VMRUNURURJTUFHRSB3ZXJlIG5vdCBzZXQuCglGaXggcHJvYmxlbXMgcmVsYXRlZCB0byBUVklTX0VYUEFOREVET05DRS4KCgkqIGRsbHMvY29tY3RsMzIvY29tY3RsMzJ1bmRvYy5jOgoJU3lsdmFpbiBTdC5HZXJtYWluIDxzeWx2YWluQG1hY2FkYW1pYW4uY29tLmVwZmwuY2g+CglGaXggcHJvYmxlbSBpbiBEUEFfUXVpY2tTb3J0IHdoZXJlIHRoZSBzb3J0IG9yZGVyIHdhcyBpbnZlcnRlZC4KCgkqIGluY2x1ZGUvZG9zZXhlLmgsIGluY2x1ZGUvd2luYmFzZS5oLCBsb2FkZXIvZG9zL2Rvc3ZtLmMsIGxvYWRlci9kb3MvbW9kdWxlLmM6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUFkZGVkIGluZnJhc3RydWN0dXJlIGFuZCBkZWZpbml0aW9ucyBmb3IgZ2VuZXJhbC1wdXJwb3NlIGV2ZW50IGFuZCBJUlEKCWhhbmRsaW5nIGZvciB0aGUgV2luZSBkb3MgYm94LiBSZW1vdmVkIHRoZSBvYnNvbGV0ZSBNWl9UaWNrLiBBZGRlZAoJZXZlbnQgbWVzc2FnZSBsb29wLCBtZXNzYWdlIGhhbmRsaW5nLCBDTEkvU1RJIGhhbmRsaW5nLCBhbmQgbWluaW1hbAoJUElDIHN1cHBvcnQuCgoJKiBsb2FkZXIvZG9zL2Rvc21vZC5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUFkZGVkIGhhbmRsaW5nIG9mIFNJR1VTUjIgZm9yIHRoZSBuZXcgZXZlbnQgaW50ZXJydXB0aW9uIGhhbmRsaW5nLAoJYnVtcGluZyB1cCB0aGUgcHJvdG9jb2wgcmV2aXNpb24uIE1hZGUgc29tZSBkZWJ1ZyBtZXNzYWdlcyBub3QgYmUKCW91dHB1dCB3aGVuIGl0J3Mgbm90IG5lY2Vzc2FyeS4KCgkqIG1zZG9zL2lvcG9ydHMuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglBZGRlZCBwb3J0IDB4NjAgZm9yIGludCAweDA5LCBhbmQgcG9ydCAweDIwIGZvciBQSUMgaGFuZGxpbmcuCgoJKiBpbmNsdWRlL21pc2NlbXUuaCwgbXNkb3MvTWFrZWZpbGUuaW4sIG1zZG9zL2ludGVycnVwdHMuYzoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJQWRkZWQgaW50IDB4MDkgYW5kIGludCAweDMzLgoKCSogbXNkb3MvaW50MzMuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglJbXBsZW1lbnRlZCBhIGludCAweDMzIGhhbmRsZXIsIHdpdGggYSBtaW5pbWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZQoJbW91c2Ugcm91dGluZXMsIGluY2x1ZGluZyBjYWxsYmFja3MuCgoJKiBtc2Rvcy9pbnQwOS5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUltcGxlbWVudGVkIGEgaW50IDB4MDkgaGFuZGxlciwgYW5kIGEgc2NhbmNvZGUgcXVldWUgdGhhdCBzaW11bGF0ZXMKCUlSUSAxIGluIHRoZSBkb3MgYm94LgoKCSogaW5jbHVkZS9kb2NvYmouaDogUGF1bCBRdWlubiA8cGF1bHFAY29yZWwuY2E+CglDcmVhdGlvbiBvZiBkb2NvYmouaC4KCgkqIG9iamVjdHMvZGliLmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJQWxsb3cgZGVwdGggb2YgRElCIHRvIGRpZmZlciBmcm9tIGRlcHRoIG9mIGJpdG1hcCBpbiBHZXRESUJpdHMuCgpXZWQgTWFyIDI0IDE1OjA3OjIwIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBkZWJ1Z2dlci9lZGl0bGluZS5jOiBBYm9ydCBvbiBpbnB1dCBlcnJvci4KCgkqIGluY2x1ZGUvb2xlZGxnLmg6IEFkcmlhbiBUaHVyc3RvbiA8YWRyaWFudEBjb3JlbC5jYT4KCVBvcHVsYXRpb24gb2Ygb2xlZGxnLgoKCSogd2luZG93cy94MTFkcnYvZXZlbnQuYywgd2luZG93cy9wYWludGluZy5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBZGQgSXNXaW5kb3coKSBjaGVja3MgYWZ0ZXIgU2VuZE1lc3NhZ2UoKSByZXR1cm5zLgoKCSogbXNkb3MvaW50MTAuYzogSmVzcyBIYWFzIDxwYXJhbm9pZDA3QGhvdG1haWwuY29tPgoJRml4ZWQgYSBzbWFsbCBidWcgaW4gaW50MTAuCgoJKiBjb250cm9scy9jb21iby5jOiBQYXNjYWwgTGVzc2FyZCA8cGFzY2FsQG1hY2FkYW1pYW4uY29tPgoJQ09NQk9fU2l6ZTogbWFpbnRhaW4gdGhlIGhlaWdodCBvZiB0aGUgUmVjdENvbWJvIHdoZW4gdGhlIHdpbmRvdyBpcwoJcmVzaXplZC4KCgkqIGluY2x1ZGUvaG9vay5oLCBpbmNsdWRlL3dpbnVzZXIuaDogQWRyaWFuIFRodXJzdG9uIDxhZHJpYW50QGNvcmVsLmNhPgoJUGF1bCBRdWlubiA8cGF1bHFAY29yZWwuY2E+CglBZGRlZCB2YXJpb3VzIGRlZmluaXRpb25zLgoJTW92ZWQgQ1dQU1RSVUNUIGZyb20gaG9vay5oIHRvIHdpbnVzZXIuaCB0byBjb25mb3JtIHRvIHRoZSBTREsuCgoJKiBpbmNsdWRlL3dpbmRlZi5oOiBKaW0gQXN0b24gPGppbWFAY29yZWwuY2E+CglBZGRlZCBhIGZldyBlbXB0eSBtYWNyb3MuCgoJKiBpbmNsdWRlL2N1cnNvcmljb24uaCwgb2JqZWN0cy9jdXJzb3JpY29uLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNVUlNPUklDT05fRGVzdHJveTogbWlzc2luZyBXSU5BUEkgYWRkZWQuCgoJKiBtaXNjL3dpbnNvY2suYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCB0cmFuc2xhdGlvbiBmb3IgU09fUkNWVElNRU8gKGFzIHNlZW4gYnkgSUU0KS4KClR1ZSBNYXIgMjMgMTc6MDQ6MTAgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHNlcnZlci9wcm9jZXNzLmM6IENyZWF0ZSBzdGFydHVwIGluZm8gZm9yIHRoZSBpbml0aWFsIHByb2Nlc3MuCgoJKiBpbmNsdWRlL3NlcnZlci5oLCBzY2hlZHVsZXIvY2xpZW50LmMsIHNjaGVkdWxlci9wcm9jZXNzLmMsIHNjaGVkdWxlci9zeXNkZXBzLmMsIHNjaGVkdWxlci90aHJlYWQuYywgc2VydmVyL3JlcXVlc3QuYywgc2VydmVyL3RyYWNlLmM6CglBZGRlZCBzZXJ2ZXIgcGlkIGFuZCB0aWQgaW4gaW5pdF90aHJlYWQgcmVxdWVzdCwgYW5kIHVzZSB0aGVtIGluCglDTElFTlRfSW5pdFRocmVhZC4KCgkqIGluY2x1ZGUvY29tcG9iai5oLCBpbmNsdWRlL29iamJhc2UuaCwgaW5jbHVkZS9vbGUyLmgsIGluY2x1ZGUvd2luZS9vYmpfYmFzZS5oLCBpbmNsdWRlL3dpbmUvb2JqX2lucGxhY2UuaCwgaW5jbHVkZS93aW5lL29ial9tb25pa2VyLmgsIGluY2x1ZGUvd2luZXJyb3IuaCwgaW5jbHVkZS93dHlwZXMuaCwgb2xlL01ha2VmaWxlLmluLCBvbGUvYW50aW1vbmlrZXIuYywgb2xlL2JpbmRjdHguYywgb2xlL2NvbXBvYmouYywgb2xlL2NvbXBvc2l0ZW1vbmlrZXIuYywgb2xlL2ZpbGVtb25pa2VyLmMsIG9sZS9pdGVtbW9uaWtlci5jLCBvbGUvbW9uaWtlci5jLCBvbGUvc3RvcmFnZTMyLmMsIHJlbGF5MzIvb2xlMzIuc3BlYzoKCU5vb21lbiBIYW16YSA8bm9vbWVuQG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50ZWQ6CgktIElNb25pa2VyIGludGVyZmFjZSBmb3IgRmlsZU1vbmlrZXIsSXRlbU1vbmlrZXIsQW50aU1vbmlrZXIgYW5kCgkgIEdlbmVyaWNDb21wb3NpdGVNb25pa2VyCgktIElSdW5uaW5nT2JqZWN0VGFibGUgaW50ZXJmYWNlLCBhbmQKCS0gSUJpbmRDdHggaW50ZXJmYWNlLgoKCSogZ3JhcGhpY3MvcHNkcnYvYml0bWFwLmMsIGdyYXBoaWNzL3BzZHJ2L3BzLmMsIGluY2x1ZGUvcHNkcnYuaDoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJQWRkZWQgU3RyZXRjaERJQml0cyBmb3IgdGhlIFBvc3RTY3JpcHQgZHJpdmVyLgoKCSogaW5jbHVkZS9taXNjZW11Lmg6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJQWRkZWQgbWlzc2luZyBlbmRpbmcgcHJhZ21hIHBhY2suCgoJKiBtaXNjL2NvbW0uYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUNvcnJlY3RlZCBzbWFsbCBidWcgaW4gR2V0Q29tbVN0YXRlMTYuIFBhcml0eSBjaGVjayBjYW4gYmUgZGlzYWJsZWQKCWV2ZW4gd2hlbiBhIHBhcml0eSBiaXQgaXMgdXNlZC4gU2V0Q29tbVN0YXRlMTYoKSBjYW4gb3ZlcnJpZGUgYmF1ZHJhdGUKCXNldHRpbmcgaW4gd2luZS5jb25mLgoKTW9uIE1hciAyMiAxNzo0NzozNiAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogbG9hZGVyL21vZHVsZS5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogY29wZSB3aXRoIHF1b3RlZCBhcmd1bWVudHMgZm9yIENyZWF0ZVByb2Nlc3MoKS4KCgkqIGxvYWRlci9yZXNvdXJjZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglGaXhlZCB0eXBvIGluIFNpemVvZlJlc291cmNlKCkuCgoJKiBtZW1vcnkvc3RyaW5nLmM6IEFuZHJlYXMgTW9ociA8Y2lwYW04OTVAY2lwMS5pbmQudW5pLXN0dXR0Z2FydC5kZT4KCWxzdHJjcHlBIGNhbid0IHVzZSBzdHJjcHkuCgoJKiByZWxheTMyL2J1aWx0aW4zMi5jLCBpZjE2MzIvYnVpbHRpbi5jLCBpbmNsdWRlL21vZHVsZS5oLCBtaXNjL21haW4uYywgbWlzY2VtdS9tYWluLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFkZGVkIC1kbGwgb3B0aW9uIGZvciB3aW5lbGliIHByb2dyYW1zLiAoTm90ZTogd2lsbCBub3QgcHJpbnQgd2FybmluZ3MKCW9uIGZhaWx1cmUgY3VycmVudGx5KS4KCgkqIHJlbGF5MzIvbnRkbGwuc3BlYzogQW5kcmVhcyBNb2hyIDxjaXBhbTg5NUBjaXAxLmluZC51bmktc3R1dHRnYXJ0LmRlPgoJQWRkZWQgc3RybHdyLgoKCSogbG9hZGVyL3BlX2ltYWdlLmMsIG1zZG9zL2ludDIxLmM6CglBbmRyZWFzIE1vaHIgPGNpcGFtODk1QGNpcDEuaW5kLnVuaS1zdHV0dGdhcnQuZGU+CglDb3NtZXRpY3MuCgoJKiBpZjE2MzIvbW1zeXN0ZW0uc3BlYywgcmVsYXkzMi93aW5tbS5zcGVjOgoJRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglBZGRlZCBuZXcgc3R1YnMgKG1tVGFza1hYWCwgbW1UaHJlYWRYWFgsIG1jaUV4ZWN1dGUpLgoKCSogbXVsdGltZWRpYS9tbXN5c3RlbS5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCVN0YXJ0ZWQgY2FsbGluZyBtaXhlciBhcyBhIDMyIGJpdCBsb3cgbGV2ZWwgZHJpdmVyIChubyBsb25nZXIgMTYgYml0KQoJQWRkZWQgc3VwcG9ydCBmb3IgeWllbGQgcHJvYyBpbiBtY2kgc3RydWN0CglBZGRlZCBtbVRhc2tYWFgxNiBhbmQgbW1UaHJlYWRYWFgxNiBmdW5jdGlvbnMKCVJlZnJlc2hlZCBpbXBsZW1lbnRhdGlvbiBvZiAxNiBiaXQgbmF0aXZlICYgYXN5bmNocm9ub3VzIE1DSSBkcml2ZXIKCWNvbW1hbmQgKHRocm91Z2ggbW10YXNrLnRzaykuCgoJKiBtdWx0aW1lZGlhL21peGVyLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJRml4ZWQgYSBmZXcgYnVncy4gU3RhcnRlZCBpbXBsZW1lbnRpbmcgbWl4ZXJNZXNzYWdlIGFzIGEgMzIgYml0CglmdW5jdGlvbiAobm8gbG9uZ2VyIDE2IGJpdCkuCgoJKiBtdWx0aW1lZGlhL21jaXN0cmluZy5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUltcGxlbWVudGVkIG1jaUV4ZWN1dGUuCgoJKiBpbmNsdWRlL211bHRpbWVkaWEuaCwgbXVsdGltZWRpYS9tY2kuYzoKCUVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJQWRkZWQgeWllbGQgcHJvYyBtZW1iZXJzIHRvIG1jaSBzdHJ1Y3QuCgoJKiBpbmNsdWRlL21tc3lzdGVtLmg6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJQWRkZWQgbWl4ZXIgc3BlY2ZpYyBlcnJvciBjb2RlcywgZml4ZWQgdHlwZSBpbiBmdW5jdGlvbiBuYW1lLgoKCSogd2luZG93cy9kcml2ZXIuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglGaXhlZCByZXR1cm4gY29kZXMgZm9yIGRlZmF1bHQgZHJpdmVyIHByb2MuCgoJKiBjb250cm9scy9saXN0Ym94LmM6IExhd3NvbiBXaGl0bmV5IDxsYXdzb25fd2hpdG5leUBqdW5vLmNvbT4KCU1hZGUgTEJfR0VUQ1VSU0VMIHJldHVybiBmb2N1c19pdGVtIGlmIG5vIGl0ZW0gaGFzIGJlZW4gc2VsZWN0ZWQuCgoJKiB3aW5kb3dzL3gxMWRydi9rZXlib2FyZC5jOgoJS2FsZXZpIEogSGF1dGFuaWVtaSA8b2gzZmdAb2gzdHIuZWxlLnR1dC5maT4KCUFkZGVkIEZpbm5pc2gga2V5Ym9hcmQgbGF5b3V0LgoKCSogbWlzYy9tYWluLmMsIHdpbmRvd3MveDExZHJ2L2NsaXBib2FyZC5jLCB3aW5kb3dzL3gxMWRydi9rZXlib2FyZC5jLCBncmFwaGljcy93aW5nLmMsIGdyYXBoaWNzL3gxMWRydi94Zm9udC5jLCBpbmNsdWRlL3dpbmUvd2ludXNlcjE2LmgsIGluY2x1ZGUvd2ludXNlci5oLCBpbmNsdWRlL3gxMWRydi5oOgoJVmVrc2xlciBNaWNoYWVsIDxtdmVrc2xlckB0ZWNodW5peC50ZWNobmlvbi5hYy5pbD4KCVJlbW92ZWQgd2ludXNlcjE2LmggZnJvbSB4MTFkcnYuaC4KCgkqIGluY2x1ZGUvd2luc3Bvb2wuaCwgbWlzYy9wcmludGRydi5jOgoJS2xhYXMgdmFuIEdlbmQgPGtsYWFzQHZhbmdlbmQuZGVtb24ubmw+CglJbXBsZW1lbnRhdGlvbiBvZiBFbnVtUHJpbnRlcnNBLCBpbmZvIGxldmVsIDQgYW5kIDUuCgoJKiB0b29scy9idWdfcmVwb3J0LnBsOiBBZGFtIFNhY2FybnkgPG1hZ2ljYm94QGJlc3R3ZWIubmV0PgoJQ2hlY2sgaWYgdGhlIGJ1aWxkIGlzIHN0cmlwcGVkLCBhbmQgZGllIGlmIGl0IGlzLgoJQ2hlY2sgZm9yIEJhc2ggMi4wLCBhbmQgaWYgc28gdXNlIGRpZmZlcmVudCBTVERFUlItPlNURE9VVCByZWRpcmN0b3IKCSh0aGFua3MgUnlhbiBDdW1taW5nISkuCgoJKiB3aW5kb3dzL21kaS5jOiBWZWtzbGVyIE1pY2hhZWwgPG12ZWtzbGVyQHRlY2h1bml4LnRlY2huaW9uLmFjLmlsPgoJRml4ZWQgInJlYWNoZWQgZW5kIG9mIG5vbiB2b2lkLi4uIiB3YXJuaW5ncy4KCgkqIGRvY3VtZW50YXRpb24vZGVidWdnaW5nOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCU1lc3NhZ2VCb3gzMkEgLT4gTWVzc2FnZUJveEEKCgkqIGxvYWRlci9tb2R1bGUuYywgcmVsYXkzMi9rZXJuZWwzMi5zcGVjOgoJU2VyZ2V5IFR1cmNoYW5vdiA8dHVyY2hhbm92QHVzYS5uZXQ+CglJbXBsZW1lbnRhdGlvbiBmb3IgRnJlZUxpYnJhcnlBbmRFeGl0VGhyZWFkLgoJTWFkZSBHZXRCaW5hcnlUeXBlID0gR2V0QmluYXJ5VHlwZUEuCgoJKiBpbmNsdWRlL3Rhc2suaCwgbG9hZGVyL3Rhc2suYywgc2NoZWR1bGVyL3Byb2Nlc3MuYywgc2NoZWR1bGVyL3RocmVhZC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglSdW4gV2luMzIgcHJvY2Vzc2VzIGluIHRoZWlyIG93biB0aHJlYWRzLgoJUHJvY2VzcyBleGl0IHNlcXVlbmNlIGFkYXB0ZWQuCgpTdW4gTWFyIDIxIDE5OjI2OjI2IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBzY2hlZHVsZXIvc3lzZGVwcy5jLCBzY2hlZHVsZXIvdGhyZWFkLmMsIGluY2x1ZGUvdGhyZWFkLmgsIGxvYWRlci9tb2R1bGUuYywgc2NoZWR1bGVyL2NsaWVudC5jLCBzY2hlZHVsZXIvcHJvY2Vzcy5jOgoJQ2hhbmdlZCBwcm9jZXNzIGluaXRpYWxpc2F0aW9uIHRvIHVzZSB0aGUgbmV3IHNlcnZlciByZXF1ZXN0cy4KCVN0YXJ0ZWQgdG8gbW92ZSB0aGUgcHJvY2VzcyBpbml0IHRvIHRoZSByaWdodCBjb250ZXh0LCBub3QgZmluaXNoZWQgeWV0LgoKCSogaW5jbHVkZS9zZXJ2ZXIvb2JqZWN0LmgsIGluY2x1ZGUvc2VydmVyL3Byb2Nlc3MuaCwgaW5jbHVkZS9zZXJ2ZXIvcmVxdWVzdC5oLCBpbmNsdWRlL3NlcnZlci90aHJlYWQuaCwgc2VydmVyL21haW4uYywgc2VydmVyL3Byb2Nlc3MuYywgc2VydmVyL3JlcXVlc3QuYywgc2VydmVyL3NvY2tldC5jLCBzZXJ2ZXIvdGhyZWFkLmMsIHNlcnZlci90cmFjZS5jLCBpbmNsdWRlL3NlcnZlci5oOgoJQWRkZWQgbmV3X3Byb2Nlc3MgYW5kIGluaXRfcHJvY2VzcyByZXF1ZXN0LgoJU3BsaXQgb3V0IHByb2Nlc3MgY3JlYXRpb24gZnJvbSB0aHJlYWQgY3JlYXRpb24uCglDaGFuZ2VkIHNlcnZlciBpbml0aWFsaXNhdGlvbiB0byBlbnN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIGN1cnJlbnQKCXRocmVhZC4KCgkqIHdpbmRvd3MveDExZHJ2L2tleWJvYXJkLmM6IFJvYmVydCBQb3VsaW90IDxrcnlub3NAY2xpYy5uZXQ+CglPbmUgc21hbGwgZXJyb3IgY29ycmVjdGVkIGFuZCB0aGUgMTAydGgga2V5Li4uCgoJKiBtaXNjL2NvbW0uYywgaW5jbHVkZS9jb21tLmg6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJTWFkZSBjb21tZXJyb3IgYW5kIGV2ZW50bWFzayBsb2NhbCB0byBlYWNoIHBvcnQgKGZvciB3aW4xNiksIG1hZGUgdGhlCgl3aW4xNiByb3V0aW5lcyB1c2UgcG9ydCBpbmRpY2VzIGluc3RlYWQgb2YgVU5JWCBmZHMgKHRoaXMgc2hvdWxkIG1ha2UKCXNvbWUgVmlzdWFsIEJhc2ljIHN0dWZmIGFuZCBzaW1pbGFyIGdhcmJhZ2Ugc3RhcnQgd29ya2luZyksIG1vdmVkIHNvbWUKCXN0dWZmIGFyb3VuZCAod2luMTYgcm91dGluZXMgYXQgdG9wIG9mIGZpbGUsIHdpbjMyIHJvdXRpbmVzIGF0Cglib3R0b20pLCBtYWRlIGEgY291cGxlIG9mIHdpbjMyIHJvdXRpbmVzIHVzZSB3aW4zMiBoYW5kbGVzLCBhbmQgYWRkZWQKCWEgZmV3IGhpbnRzIGFzIHRvIGhvdyB0byBpbXBsZW1lbnQgYXN5bmNocm9ub3VzIGJ1ZmZlcnMsIGJhc2VkIG9uCgl3aGljaCBFbmFibGVDb21tTm90aWZpY2F0aW9uIGNhbiBldmVudHVhbGx5IGJlIGltcGxlbWVudGVkLgoKCSogaW5jbHVkZS93aW51c2VyLmg6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJRml4ZWQgcHJvdG90eXBlcyBvZiBhIGNvdXBsZSBvZiBjb21tIHJvdXRpbmVzLgoKCSogbG9hZGVyL25lL21vZHVsZS5jOiBBbmRyZWFzIE1vaHIgPGNpcGFtODk1QGNpcDEuaW5kLnVuaS1zdHV0dGdhcnQuZGU+CglGaXhlZCB0eXBvLgoKCSogd2luZG93cy93aW4uYzogRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJQ2xlYXIgdXBkYXRlIHJlZ2lvbiBiZWZvcmUgV01fTkNERVNUUk9ZLgoKCSogaW5jbHVkZS9oZWFwLmgsIG1lbW9yeS9oZWFwLmMsIHJlbGF5MzIvdXR0aHVuay5jLCB3aW5kb3dzL3F1ZXVlLmM6CglHb3QgcmlkIG9mIFNZU1RFTV9MT0NLIG1hY3Jvcy4KClNhdCBNYXIgMjAgMDc6MTg6MjYgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG1pc2MvbWFpbi5jOiBObyBsb25nZXIgbmVlZCB0byBkZWxldGUgc3lzdGVtIGhlYXAgY3JpdGljYWwgc2VjdGlvbi4KCkZyaSBNYXIgMTkgMTc6MDQ6MjUgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uYzogRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJQWRkZWQgYSBjaGVjayBmb3IgZGVza3RvcCBpbiBTSEdldEZpbGVJbmZvLgoKCSogbXVsdGltZWRpYS9tY2kuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglGaXhlZCBzb21lIGJ1Z3MgaW4gTUNJIG1lc3NhZ2UgbWFwcGluZyAoMzJBID0+IDE2KS4KCgkqIHdpbmRvd3Mvd2luLmM6IFBhdmVsIFJvc2tpbiA8cGF2ZWxfcm9za2luQGdlb2NpdGllcy5jb20+CglGaXhlZCBXSU5fU2VuZERlc3Ryb3lNc2cuCgoJKiBpbmNsdWRlL3dpbnNvY2suaDogUGF2ZWwgUm9za2luIDxwYXZlbF9yb3NraW5AZ2VvY2l0aWVzLmNvbT4KCVJlbW92ZWQgZGVmaW5pdGlvbnMgZm9yIEZJT05SRUFEIGFuZCBGSU9OQklPLgoKCSogd2luZG93cy9kcml2ZXIuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglGaXhlcyBzb21lIHJldHVybiB2YWx1ZXMgZm9yIERlZkRyaXZlclByb2MuCgoJKiBwcm9ncmFtcy9yZWdhcGkvcmVnRml4ZXIucGw6CglTeWx2YWluIFN0Lkdlcm1haW4gPHN5bHZhaW5AbWFjYWRhbWlhbi5jb20+CglSZW1vdmVkIHRoZSBjaG9wIGNvbW1hbmQgdGhhdCB3YXMgdGhlcmUgdG8gZ2V0IHJpZCBvZiBkb3MgXk0uCglUaGUgc2NyaXB0IG5vdyBwcm9jZXNzIG9ubHkgdW5peCBmaWxlIGZvcm1hdC4KCgkqIHdpbmRvd3MvZGlhbG9nLmM6IEFuZHJlYXMgTW9ociA8Y2lwYW04OTVAY2lwMS5pbmQudW5pLXN0dXR0Z2FydC5kZT4KCUhpZGUgZGlhbG9nIHdpbmRvd3MgY3JlYXRlZCBieSBDcmVhdGVEaWFsb2cqIGluIEVuZERpYWxvZyBqdXN0IGFzCglXaW5kb3dzIGRvZXMuCgoJKiBvbGUvdmFyaWFudC5jOiBTdGVwaGFuZSBMdXNzaWVyIDxzdGVwaGFuZUBtYWNhZGFtaWFuLmNvbT4KCVNldCB0eXBlIG9mIGRlc3RpbmF0aW9uIHZhcmlhbnQgaW4gVmFyaWFudENoYW5nZVR5cGVFeCBmdW5jdGlvbi4KCgkqIHdpbmRvd3MveDExZHJ2L2tleWJvYXJkLmM6CglCZXJ0aG8gU3R1bHRpZW5zIDxiZXJ0aG9AcGFudGVyLnNvY2kuYWF1LmRrPgoJRml4ZWQgRGFuaXNoIGtleWJvYXJkIGxheW91dC4KClRodSBNYXIgMTggMTc6Mzk6NTggMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG9sZS9pdGVtbW9uaWtlci5jLCBvbGUvb2xlMi5jLCBvbGUvb2xlZm9udC5jLCB3aW5kb3dzL2RpbnB1dC5jLCB3aW5kb3dzL2lucHV0LmMsIHdpbmRvd3Mva2V5Ym9hcmQuYywgd2luZG93cy9tZXNzYWdlLmMsIHdpbmRvd3MvcGFpbnRpbmcuYywgd2luZG93cy9xdWV1ZS5jLCB3aW5kb3dzL3N5c2NvbG9yLmMsIHdpbmRvd3Mvc3lzbWV0cmljcy5jLCB3aW5kb3dzL3VzZXIuYywgZGxscy9zaGVsbDMyL2ljb25jYWNoZS5jLCBmaWxlcy9kb3NfZnMuYywgZ3JhcGhpY3MvZGRyYXcuYywgZ3JhcGhpY3MvZm9udGVuZ2luZS5jLCBpbmNsdWRlL3dpbi5oLCBsb2FkZXIvbWFpbi5jLCBsb2FkZXIvcmVzb3VyY2UuYywgbWlzYy9semV4cGFuZC5jLCBtaXNjL3JlZ2lzdHJ5LmMsIG1zZG9zL2ludDEwLmMsIG11bHRpbWVkaWEvaW5pdC5jLCBvYmplY3RzL2VuaG1ldGFmaWxlLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUxvdHMgb2Ygd2FybmluZyBmaXhlZCwgb25lIG1pc3NpbmcgV0lOQVBJIGluIGRkcmF3LmMgYWRkZWQuCgoJKiBkbGxzL2NvbWN0bDMyL3RyZWV2aWV3LmM6IFN5bHZhaW4gU3QuR2VybWFpbiA8c3lsdmFpbkBtYWNhZGFtaWFuLmNvbT4KCUltcGxlbWVudHMgKy8tLCBQZ1VwL1BnRG93biwgSG9tZS9FbmQsIExlZnQvUmlnaHQsIFVwL0Rvd24uCgoJKiByZWxheTMyL21zdmZ3MzIuc3BlYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+Cgltc3ZmdzMyLnNwZWMgYnJvdWdodCB1cCB0byBkYXRlIChmb3Jnb3QgaXQgaW4gbGFzdCBtc3ZmdzMyIHBhdGNoKS4KCgkqIHJlbGF5MzIva2VybmVsMzIuc3BlYywgbWlzYy90b29saGVscC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCBNb2R1bGUzMiogc3R1YnMuCgpXZWQgTWFyIDE3IDE1OjU0OjQ0IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiB3aW5kb3dzL3gxMWRydi9rZXlib2FyZC5jOgoJQnJ1bm8gQWZvbnNvIDxicnVuby5hZm9uc29AY2Ftb2VzLnJubC5pc3QudXRsLnB0PgoJQWRkZWQgUG9ydHVndWVzZSBrZXl0YWJsZS4KCgkqIHdpbmRvd3MveDExZHJ2L2tleWJvYXJkLmM6IFJvYmVydCBQb3VsaW90IDxrcnlub3NAY2xpYy5uZXQ+CglBZGRlZCBDYW5hZGlhbiBGcmVuY2gga2V5Ym9hcmQgbGF5b3V0LgoKCSogd2luZG93cy94MTFkcnYva2V5Ym9hcmQuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJQWRkZWQgVUsga2V5Ym9hcmQgbGF5b3V0LgoKCSogbXNkb3MvaW50MTAuYywgbXNkb3MvaW50MTYuYywgbXNkb3MvaW50MjEuYywgbXNkb3MvaW50MmYuYzoKCTxwYXJhbm9pZDA3QGhvdG1haWwuY29tPgoJRml4ZWQvaW1wbGVtZW50ZWQgdmFyaW91cyBpbnRlcnJ1cHQgZnVuY3Rpb25zLgoKCSogY29udHJvbHMvbWVudS5jLCBkbGxzL3NoZWxsMzIvZGF0YW9iamVjdC5jLCBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmMsIGdyYXBoaWNzL21ldGFmaWxlZHJ2L3RleHQuYywgaW5jbHVkZS93aW5pb2N0bC5oLCB3aW4zMi9rZXJuZWwzMi5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglGaXhlZCBzb21lIHdhcm5pbmdzLiByZW1vdmVkIHNvbWUgdW5uZWNjZXNzYXJ5IGluY2x1ZGVzLCByZW1vdmVkIG9uZQoJZGlyZWN0IFdORCogYWNjZXNzIGluIGNvbnRyb2xzL21lbnUuYy4KCgkqIHdpbmRvd3Mvd2luLmM6IEZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCUltcGxlbWVudGVkIGEgbW9yZSBkZWZlbnNpdmUgdmVyc2lvbiBvZiBXSU5fU2VuZERlc3Ryb3lNc2cuCgoJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBBbGV4YW5kZXIgVi4gTHVreWFub3YgPGxhdkBsb25nLnlhci5ydT4KCUluc3RhbGwgaGVhZGVycyBmcm9tICQoU1JDRElSKS4KCgkqIGluY2x1ZGUvd2luZS9vYmpfYmFzZS5oOiBGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCVJlbW92ZWQgdGhlIG9ic29sZXRlIElDT00gbWFjcm9zLgoKCSogaW5jbHVkZS92ZncuaDogRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglNb3ZlZCB0aGUgQVBJcyBjbG9zZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcgQ09NIGludGVyZmFjZSwgcmVtb3ZlZCB0d28KCWR1cGxpY2F0ZXMgYW5kIGFkZGVkIDItMyBtYWNyb3MgZm9yIEEvVyBBUElzLgoKCSogbXNkb3MvaW50MTUuYzogPHBhcmFub2lkMDdAaG90bWFpbC5jb20+CglBZGRlZCBzb21lIHN0dWJzIGZvciBpbnQxNSBmdW5jdGlvbnMuCgoJKiB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy9xdWV1ZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbnRlci10aHJlYWQgU2VuZE1lc3NhZ2UoKSBidWdmaXhlczoKCS0gSW5zZXJ0IG5ldyBtZXNzYWdlIHRvIGJlIHJlY2VpdmVkIGF0IHRoZSAqZW5kKiBvZiB0aGUgU01fUEVORElOR19MSVNULgoJLSBEbyAqbm90KiBwcm9jZXNzIHJlY2VpdmVkIG1lc3NhZ2VzIGluIFJlcGx5TWVzc2FnZSgpLgoJLSBDbGVhciB0aGUgUVNfU01SRVNVTFQgZmxhZyBvbmx5IGltbWVkaWF0ZWRseSBiZWZvcmUgd2FpdGluZy4KCgkqIG9sZS9zdG9yYWdlMzIuYzogVGh1eSBOZ3V5ZW4gPHRodXlAbWFjYWRhbWlhbi5jb20+CglSZXR1cm4gZXJyb3IgaWYgbm90IGEgdmFsaWQgT0xFIGNvbXBvdW5kIGZpbGUuCgoJKiBkbGxzL3ZlcnNpb24vaW5zdGFsbC5jOiBEb3VnbGFzIFJpZGd3YXkgPHJpZGd3YXlAd2luZWhxLmNvbT4KCUZpeCBjcmFzaCBpZiBscHVDdXJEaXJMZW4gb3IgbHB1RGVzdERpckxlbj09MC4KCgkqIG1pc2MvY2Ryb20uYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglNYWtlIGNkcm9tLmMgY29tcGlsZSBvbiBGcmVlQlNEIChGcmVlQlNEIGRvZXMgbm90IHNlZW0gdG8gaGF2ZSAqU0VFSywKCXN0cmFuZ2UpLgoKVHVlIE1hciAxNiAxNjoyOToyNiAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS9kb3NleGUuaCwgaW5jbHVkZS9tb2R1bGUuaCwgaW5jbHVkZS9wZV9pbWFnZS5oLCBsb2FkZXIvZG9zL21vZHVsZS5jLCBsb2FkZXIvbW9kdWxlLmMsIGxvYWRlci9uZS9tb2R1bGUuYywgbG9hZGVyL3BlX2ltYWdlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVBhc3MgQ3JlYXRlUHJvY2VzcygpIFNFQ1VSSVRZX0FUVFJJQlVURVMgdGhyb3VnaCB0byBQUk9DRVNTX0NyZWF0ZSgpLgoKCSogaW5jbHVkZS9wcm9jZXNzLmgsIGluY2x1ZGUvdGhyZWFkLmgsIHNjaGVkdWxlci9wcm9jZXNzLmMsIHNjaGVkdWxlci90aHJlYWQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJUGFzcyBuZXcgYXJndW1lbnRzIChzdXNwZW5kL2luaGVyaXQpIHRvIHRoZSBzZXJ2ZXIuCgoJKiBpbmNsdWRlL3NlcnZlci5oLCBpbmNsdWRlL3NlcnZlci90aHJlYWQuaCwgc2NoZWR1bGVyL2NsaWVudC5jLCBzZXJ2ZXIvcmVxdWVzdC5jLCBzZXJ2ZXIvdGhyZWFkLmMsIHNlcnZlci90cmFjZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglIYW5kbGUgc3VzcGVuZC9yZXN1bWVfdGhyZWFkIHJlcXVlc3RzIGluIHBoYXNlIFNUQVJUSU5HIGNvcnJlY3RseS4KCVNldCBpbml0aWFsIHN1c3BlbmQgY291bnQgZm9yIHRocmVhZHMgY3JlYXRlZCB3aXRoIENSRUFURV9TVVNQRU5ERUQuCglTZXQgJ2luaGVyaXRhYmxlJyBmbGFnIGZvciBwcm9jZXNzL3RocmVhZCBoYW5kbGVzLgoKCSogZGxscy9jb21jdGwzMi9tb250aGNhbC5jLCBkbGxzL2NvbWN0bDMyL25hdGl2ZWZvbnQuYywgZGxscy9jb21jdGwzMi9wYWdlci5jLCBkbGxzL2NvbWN0bDMyL3Byb2dyZXNzLmMsIGRsbHMvY29tY3RsMzIvcHJvcHNoZWV0LmMsIGRsbHMvY29tY3RsMzIvcmViYXIuYywgZGxscy9jb21jdGwzMi9zdGF0dXMuYywgZGxscy9jb21jdGwzMi90YWIuYywgZGxscy9jb21jdGwzMi90b29sYmFyLmMsIGRsbHMvY29tY3RsMzIvdG9vbHRpcHMuYywgZGxscy9jb21jdGwzMi90cmFja2Jhci5jLCBkbGxzL2NvbWN0bDMyL3RyZWV2aWV3LmMsIGRsbHMvY29tY3RsMzIvdXBkb3duLmMsIGRsbHMvY29tY3RsMzIvYW5pbWF0ZS5jLCBkbGxzL2NvbWN0bDMyL2NvbWJvZXguYywgZGxscy9jb21jdGwzMi9jb21tY3RybC5jLCBkbGxzL2NvbWN0bDMyL2RhdGV0aW1lLmMsIGRsbHMvY29tY3RsMzIvZmxhdHNiLmMsIGRsbHMvY29tY3RsMzIvaGVhZGVyLmMsIGRsbHMvY29tY3RsMzIvaG90a2V5LmMsIGRsbHMvY29tY3RsMzIvaXBhZGRyZXNzLmMsIGRsbHMvY29tY3RsMzIvbGlzdHZpZXcuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJUmVtb3ZlZCBubyBsb25nZXIgbmVjZXNzYXJ5IHdpbi5oIGluY2x1ZGUsIGFkZGVkIG5vdyBuZWNlc3Nhcnkgb3RoZXIKCWluY2x1ZGVzICh3aW4uaCB1c2VkIG9ubHkgYnkgVVBET1dOIG5vdykuCgoJKiBtaXNjL2NvbW0uYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglkZWJ1Zy5oIG11c3QgYmUgbGFzdCwgb3Igd2UgZ2V0IEVSUigpIG1hY3JvIHByb2JsZW1zIGFnYWluLgoKCSogZGxscy9jb21jdGwzMi90b29sdGlwcy5jOiBGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglGaXhlZCBhIHNsaWdodCBidWcgdGhhdCB3YXMgaW5jbHVkZWQgaW4gdGhlIGNoYW5nZSBmcm9tIFdORCBwdHIgdG8KCWh3bmQgbGFzdCB3ZWVrLgoKCSogbG9hZGVyL21haW4uYywgbWlzYy9jYWxsYmFjay5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglGaXggY29tcGlsZXIgd2FybmluZ3MuCgoJKiBkbGxzL2NvbWN0bDMyL2ltYWdlbGlzdC5jLCBkbGxzL2NvbWN0bDMyL3RyZWV2aWV3LmMsIGluY2x1ZGUvdHJlZXZpZXcuaDoKCVN5bHZhaW4gU3QuR2VybWFpbiA8c3lsdmFpbkBtYWNhZGFtaWFuLmNvbT4KCUZpeGVkIHNvbWUgZ3JhcGhpY2FsIHByb2JsZW1zIG9mIHRoZSB0cmVldmlldyBhbmQgYWRkZWQgc3VwcG9ydCBMTUIKCWNsaWNrIG9uICsvLSBzaWduIHRvIG9wZW4gYW5kIGNsb3NlLgoJRml4ZWQgYSBidWcgaW4gaW1hZ2VsaXN0IHdoZXJlIHRoZSBsYXN0IGltYWdlIGNvdWxkIG5vdCBiZSBkaXNwbGF5ZWQuCgoJKiB3aW5kb3dzL3gxMWRydi9ldmVudC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBdm9pZCB1bm5lY2Vzc2FyeSBlcnJvciBtZXNzYWdlcy4KCgkqIHdpbmRvd3MvaG9vay5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUlnbm9yZSBISVdPUkQgb2YgYm9vbGVhbiByZXR1cm4gdmFsdWVzIG9mIDE2LWJpdCBob29rIHByb2NlZHVyZXMsIHRvCgltYXRjaCBidWdneSBXaW5kb3dzIGJlaGF2aW91ci4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IExpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJQ29ycmVjdGVkIGJ1ZyBpbiBlbnVtZXJhdGlvbiBmdW5jdGlvbi4KCgkqIHdpbmRvd3Mvd2luLmM6IFBhdmVsIFJvc2tpbiA8cGF2ZWxfcm9za2luQGdlb2NpdGllcy5jb20+CglGaXhlZCBidWcgaW50cm9kdWNlZCBpbiBXSU5fRmluZFdpbmRvdy4KCgkqIGRsbHMvY29tY3RsMzIvdGFiLmM6IFRodXkgTmd1eWVuIDx0aHV5QG1hY2FkYW1pYW4uY29tPgoJMCBpcyBhIHZhbGlkIGluZGV4IGZvciBhIHRhYiBpdGVtLgoJQ3JlYXRlU29saWRCcnVzaCB0YWtlcyBhIENPTE9SUkVGIGFzIGEgcGFyYW1ldGVyLgoJVGFiIGNvbnRyb2xzIHdlcmUgYWx3YXlzIGRpc3BsYXllZCBpbiB0aGUgdG9wIGxlZnQgY29ybmVyLgoKTW9uIE1hciAxNSAxNjoxNToxNyAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS93aW5lL29ial9kcmFnZHJvcC5oLCBpbmNsdWRlL3dpbmUvb2JqX2lucGxhY2UuaDoKCUZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJVXBkYXRlZCB0aGUgaW50ZXJmYWNlcyB0byB1c2UgdGhlIGxhdGVzdCBJQ09NIG1hY3Jvcy4KCgkqIGRvY3VtZW50YXRpb24vc3RhdHVzL211bHRpbWVkaWE6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJVXBkYXRlZC4KCgkqIGlmMTYzMi9tbXN5c3RlbS5zcGVjLCBpbmNsdWRlL21tc3lzdGVtLmgsIGluY2x1ZGUvbXVsdGltZWRpYS5oLCBtdWx0aW1lZGlhL01ha2VmaWxlLmluLCBtdWx0aW1lZGlhL21jaS5jLCBtdWx0aW1lZGlhL21jaXN0cmluZy5jLCBtdWx0aW1lZGlhL21tc3lzdGVtLmMsIHJlbGF5MzIvd2lubW0uc3BlYzoKCUVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJTW92ZWQgYWxsIE1DSSBpbnRlcm5hbCBmdW5jdGlvbnMvdmFyaWFibGVzL21hY3JvcyB0byBtY2kuYy4KCUNoYW5nZWQgc29tZSBpbnRlcmZhY2UgbmFtZXMuCgoJKiBpbmNsdWRlL2RpZ2l0YWx2LmgsIG11bHRpbWVkaWEvbWNpYXZpLmM6CglFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCU1ha2UgdXNlIG9mIGRpZ2l0YWx2LmggZmlsZS4KCgkqIG11bHRpbWVkaWEvaW5pdC5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUNoYW5nZWQgaG93IGxpc3Qgb2YgbG9hZGFibGUgTUNJIGRyaXZlcnMgaXMgb2J0YWluZWQuCgoJKiBkb2N1bWVudGF0aW9uL2tleWJvYXJkOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCURlc2NyaWJlcyBpbiBuZXdiaWUgdGVybXMgaG93IHRvIGFkZCBuZXcga2V5Ym9hcmQgbGF5b3V0cy4KCgkqIHdpbmRvd3MveDExZHJ2L2tleWJvYXJkLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJQmV0dGVyIGNvbW1lbnRzLCBhbmQgYWRkZWQgQU5TSSBjb2RlcGFnZXMgaW4gdGFibGUuCglVUyBrZXlib2FyZCBjb250cmlidXRlZCBieSBVd2UgQm9ubmVzLgoJRnJlbmNoIGtleWJvYXJkIGNvbnRyaWJ1dGVkIGJ5IEVyaWMgUG91ZWNoLgoJR2VybWFuIGtleWJvYXJkIGNvbnRyaWJ1dGVkIGJ5IFVscmljaCBXZWlnYW5kLgoJRGFuaXNoIGtleWJvYXJkIGNvbnRyaWJ1dGVkIGJ5IEJlcnRobyBTdHVsdGllbnMuCgoJKiBkbGxzL2NvbW1kbGcvY29sb3JkbGcuYywgZGxscy9jb21tZGxnL2ZpbGVkbGcuYywgZGxscy9jb21tZGxnL2ZpbmRkbGcuYywgZGxscy9jb21tZGxnL2ZvbnRkbGcuYywgZGxscy9jb21tZGxnL2dlbmVyaWMuYywgZGxscy9jb21tZGxnL3ByaW50ZGxnLmMsIGluY2x1ZGUvY29tbWRsZy5oOgoJS2xhYXMgdmFuIEdlbmQgPGtsYWFzQHZhbmdlbmQuZGVtb24ubmw+CgktIFJlaW1wbGVtZW50YXRpb24gb2YgdGhlIENvbW1EbGcgRXh0ZW5kZWRFcnJvciBtZWNoYW5pc20gdXNpbmcgVExTLgoJLSBTb21lIGhlYWRlciBpbmNsdXNpb24gY2xlYW51cC4KCgkqIG11bHRpbWVkaWEvbWNpbWlkaS5jLCBtdWx0aW1lZGlhL21jaXdhdmUuYywgbXVsdGltZWRpYS9tbWlvLmM6CglFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUNvc21ldGljIGZpeGVzLgoKCSogbXVsdGltZWRpYS9tY2ljZGEuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglNYWtlcyB1c2Ugb2YgbmV3IENEQVVESU9fU2VlaygpIGZ1bmN0aW9uLgoKCSogbXNkb3MvaW50MmYuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglWYXJpb3VzIGZpeGVzIGZvciBNU0NERVggdHJhcHMuCgoJKiBtaXNjL2Nkcm9tLmMsIGluY2x1ZGUvY2Ryb20uaDogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglBZGRlZCBuZXcgZnVuY3Rpb24gQ0RBVURJT19TZWVrKCkuCgoJKiBpbmNsdWRlL2RyaXZlci5oLCB3aW5kb3dzL2RyaXZlci5jOgoJRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglCZXR0ZXIgMTYvMzIgYml0IGRyaXZlciBtZXNzYWdlcyBtYXBwaW5nIGFuZCBoYW5kbGluZy4KCUJldHRlciBwcm90ZWN0aW9uIGFnYWluc3QgYmFkIGhhbmRsZXMuCgoJKiBpbmNsdWRlL3BlZXhlLmgsIGxvYWRlci9yZXNvdXJjZS5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglVc2UgTUVTU0FHRV9SRVNPVVJDRV8qIGRlZmluZXMgZnJvbSBTREsgaGVhZGVycywgdXBkYXRlZCBMb2FkTWVzc2FnZSoKCWNvZGUuCgoJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBOaWVscyBLcmlzdGlhbiBCZWNoIEplbnNlbiA8bmtiakBpbWFnZS5kaz4KCUZpeGVkIG1ha2UgaW5zdGFsbC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE1hciAxNCAxNzoyNTozMyAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS93aW4uaCwgaXBjL2RkZV9wcm9jLmMsIG1pc2Mvc3B5LmMsIHdpbmRvd3MvY2xhc3MuYywgd2luZG93cy9kY2UuYywgd2luZG93cy9kZWZkbGcuYywgd2luZG93cy9kZWZ3bmQuYywgd2luZG93cy9kaWFsb2cuYywgd2luZG93cy9kaW5wdXQuYywgd2luZG93cy9mb2N1cy5jLCB3aW5kb3dzL2lucHV0LmMsIHdpbmRvd3MvbWRpLmMsIHdpbmRvd3Mvbm9uY2xpZW50LmMsIHdpbmRvd3MvcGFpbnRpbmcuYywgd2luZG93cy9wcm9wZXJ0eS5jLCB3aW5kb3dzL3F1ZXVlLmMsIHdpbmRvd3Mvc2Nyb2xsLmMsIHdpbmRvd3Mvd2luLmMsIHdpbmRvd3Mvd2lucG9zLmMsIHdpbmRvd3Mvd2lucHJvYy5jLCB3aW5kb3dzL3gxMWRydi9jbGlwYm9hcmQuYywgd2luZG93cy94MTFkcnYvZXZlbnQuYywgd2luZG93cy94MTFkcnYvbW91c2UuYywgd2luZG93cy94MTFkcnYvd25kLmMsIGNvbnRyb2xzL2J1dHRvbi5jLCBjb250cm9scy9jb21iby5jLCBjb250cm9scy9kZXNrdG9wLmMsIGNvbnRyb2xzL2VkaXQuYywgY29udHJvbHMvaWNvbnRpdGxlLmMsIGNvbnRyb2xzL2xpc3Rib3guYywgY29udHJvbHMvbWVudS5jLCBjb250cm9scy9zY3JvbGwuYywgY29udHJvbHMvc3RhdGljLmMsIGRsbHMvY29tY3RsMzIvdXBkb3duLmMsIGdyYXBoaWNzL2RkcmF3LmMsIGlmMTYzMi90aHVuay5jOgoJRnJhbmNvaXMgQm9pc3ZlcnQgPGZyYW5jb2lzQG1hY2FkYW1pYW4uY29tPgoJTWFkZSBhY2Nlc3MgdG8gdGhlIHduZCBzdHJ1Y3QgdGhyZWFkLXNhZmUuCgoJKiAqLyo6IEppbSBBc3RvbiA8YXN0bzAwMDFAYWxnb25xdWluYy5vbi5jYT4KCVJlbmFtZWQgd2ludHlwZXMuaCB0byB3aW5kZWYuaC4KCgkqIG1lbW9yeS9oZWFwLmM6IE1ha2UgdGhlIHN5c3RlbSBoZWFwIGNyaXRpY2FsIHNlY3Rpb24gZ2xvYmFsLgoKCSogTWFrZS5ydWxlcy5pbjoKCUZpeGVkIE1ha2VmaWxlIHVwLXRvLWRhdGUgY2hlY2sgdG8gYXZvaWQgcmVsaW5raW5nIGFsbCB0aGUgb2JqZWN0CglmaWxlcy4KCgkqIHdpbmRvd3MvZGlucHV0LmM6IFBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJUmVpbXBsZW1lbnRlZCBzb21lIGNvZGUgd2l0aG91dCB1c2luZyBYMTEuCgoJKiBncmFwaGljcy9kZHJhdy5jLCByZWxheTMyL2RkcmF3LnNwZWM6CglQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCUFkZGVkIGZ1bmN0aW9ucyBEaXJlY3REcmF3RW51bWVyYXRlVyBhbmQgRGlyZWN0RHJhd0VudW1lcmF0ZUV4Vy4KCgkqIGluY2x1ZGUvcGVleGUuaCwgbG9hZGVyL3BlX2ltYWdlLmM6IFRoZW9kb3JlIFMuIEhldGtlIDx0c2hAZ3RlLm5ldD4KCUFkZGVkIHRyYWNpbmcgZm9yIGRlbGF5ZWQgaW1wb3J0cyBhbmQgcmVtb3ZlZCB0aGUgZml4bWUuCgoJKiBmaWxlcy9kb3NfZnMuYzogUGV0ZXIgR2FudGVuIDxnYW50ZW5AdW5pLWJyZW1lbi5kZT4KCUJldHRlciBpbXBsZW1lbnRhdGlvbiBvZiBHZXRTaG9ydFBhdGhOYW1lQS9XLgoKCSogbWlzYy9yZWdpc3RyeS5jLCB3aW5lLmluaTogTmF0aGFuIFpvcmljaCA8d2ZpbGFyZG9AZnVzZS5uZXQ+CglBbGxvdyB0aGUgZmlsZSBuYW1lcyBhbmQgcGF0aHMgZm9yIHRoZSByZWdpc3RyeSBmaWxlcyAodXNlci5yZWcgYW5kCglzeXN0ZW0ucmVnKSB0byBiZSBzcGVjaWZpZWQgaW4gYSBbUmVnaXN0cnldIHNlY3Rpb24gb2Ygd2luZS5pbmkgb3IKCW90aGVyIGNvbmZpZyBmaWxlLgoKCSogbWVtb3J5L3N0cmluZy5jOiBHZXJhcmQgUGF0ZWwgPGcucGF0ZWxAd2FuYWRvby5mcj4KCUZpeCBPZW1Ub0Fuc2lCdWZmIGZvciByZWFsIFdpbjMxIGJlaGF2aW9yLgoKCSogd2luZG93cy94MTFkcnYva2V5Ym9hcmQuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglGaXJzdCBhdHRlbXB0IGF0IHN1cHBvcnRpbmcgZGlmZmVyZW50IGtleWJvYXJkIGxheW91dHMgd2l0aCB0aGVpcgoJY29ycmVjdCBzY2FuY29kZSBtYXBwaW5nLgoKCSogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIHByb2dyYW1zL01ha2VmaWxlLmluLCBwcm9ncmFtcy9yZWdhcGkvLmN2c2lnbm9yZSwgcHJvZ3JhbXMvcmVnYXBpL01ha2VmaWxlLmluLCBwcm9ncmFtcy9yZWdhcGkvUkVBRE1FLCBwcm9ncmFtcy9yZWdhcGkvcmVnRml4ZXIucGwsIHByb2dyYW1zL3JlZ2FwaS9yZWdSZXN0b3Jlci5wbCwgcHJvZ3JhbXMvcmVnYXBpL3JlZ1NldC5zaCwgcHJvZ3JhbXMvcmVnYXBpL3JlZ2FwaS5jOgoJU3lsdmFpbiBTdC5HZXJtYWluIDxzeWx2YWluQG1hY2FkYW1pYW4uY29tPgoJQWRkZWQgY29tbWFuZCBsaW5lIHRvb2wgdG8gYWNjZXNzIHRoZSByZWdpc3RyeS4KCgkqIHJjL3dpbmVyYy5jOiBGaXhlZCBjb21waWxhdGlvbi4KCgkqIHJjLy5jdnNpZ25vcmU6IFBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJSWdub3JlIGdlbmVyYXRlZCBmaWxlcy4KCgkqIHByb2dyYW1zL25vdGVwYWQvbGNjLmg6IEZpeGVkIG1ha2UgZGVwZW5kLgoKCSogb2xlL29sZTIuYywgb2xlL29sZWZvbnQuYywgaW5jbHVkZS9vbGUuaCwgaW5jbHVkZS9vbGUyLmgsIGluY2x1ZGUvb2xlYXV0by5oLCBpbmNsdWRlL29sZWN0bC5oLCBpbmNsdWRlL3dpbmUvb2JqX2NvbnRyb2wuaCwgaW5jbHVkZS93aW5lL29ial9kYXRhb2JqZWN0LmgsIGluY2x1ZGUvd2luZS9vYmpfZHJhZ2Ryb3AuaCwgaW5jbHVkZS93aW5lL29ial9pbnBsYWNlLmgsIGluY2x1ZGUvd2luZS9vYmpfbW9uaWtlci5oLCBpbmNsdWRlL3dpbmUvb2JqX29sZWF1dC5oLCBpbmNsdWRlL3dpbmUvb2JqX29sZWZvbnQuaCwgaW5jbHVkZS93aW5lL29ial9vbGVvYmouaCwgaW5jbHVkZS93aW5lL29ial9vbGV1bmRvLmgsIGluY2x1ZGUvd2luZS9vYmpfb2xldmlldy5oLCBpbmNsdWRlL3dpbmUvb2JqX3BpY3R1cmUuaCwgaW5jbHVkZS93aW5lL29ial9zaGVsbGxpbmsuaCwgaW5jbHVkZS93aW5lL29ial9zdG9yYWdlLmgsIGluY2x1ZGUvd2luZXJyb3IuaCwgaW5jbHVkZS93aW5nZGkuaCwgaW5jbHVkZS93aW5zb2NrLmgsIGluY2x1ZGUvd2ludXNlci5oLCBpbmNsdWRlL3d0eXBlcy5oOgoJUGF1bCBRdWlubiA8cGF1bHFAbGludXhtYXN0ZXIuaHVuZ3J5Y2F0cy5vcmc+CglNYW55IG5ldyBkZWZpbmVzLCBhbmQgc3RydWN0cyB0byBoZWxwIGNvbXBpbGUgTUZDLiBBcyB3ZWxsIGFzIGEgZmV3CglPTEUgY29ycmVjdGlvbnMgZnJvbSBlYXJsaWVyLgoKCSogbG9hZGVyL25lL21vZHVsZS5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJTWFrZSBHZXRNb2R1bGVIYW5kbGUxNiBvbmx5IGxvb2sgZm9yIG1vZHVsZSBuYW1lcywgbm90IHBhdGggbmFtZXMuCgoJKiBtc2Rvcy9pbnQxMC5jOiBKZXNzIEhhYXMgPGRlc21va2VAaG90bWFpbC5jb20+CglBZGRlZCBzb21lIG1vcmUgdmdhIHZpZGVvIG1vZGVzLgoKCSogd2luZG93cy94MTFkcnYvd25kLmM6IFBhdmVsIFJvc2tpbiA8cGF2ZWxfcm9za2luQGdlb2NpdGllcy5jb20+CglQcmV2ZW50IFgxMSBlcnJvcnMgd2hlbiBYQ3JlYXRlV2luZG93IGlzIGNhbGxlZCB3aXRoIHplcm8gd2lkdGggb3IKCWhlaWdodC4KCgkqIG9iamVjdHMvbWV0YWZpbGUuYzogQ2FvbGFuIE1jTmFtYXJhIDxDYW9sYW4uTWNOYW1hcmFAdWwuaWU+CglBZGRlZCBtZXRhZmlsZSBzdXBwb3J0IGZvciBFeHRGbG9vZEZpbGwuCgoJKiBjb250cm9scy9idXR0b24uYzoKCURpcmsgVGhpZXJiYWNoIDx0aGllcmJhY2hAbWF0aGVtYXRpay50dS1kYXJtc3RhZHQuZGU+CglQYWludCBncmF5IHRleHQgb24gZ3JheSBiYWNrZ3JvdW5kIGluIGNoZWNrYm94ZXMvcmFkaW9idXR0b25zIGJ5CglzdGlwcGxpbmcuIEFsc28gY2hhbmdlZCB0aGUgYnJ1c2ggdXNlZCBpbiB0aGlzIGNhc2UgdG8gZ2l2ZSBiZXR0ZXIKCXJlYWRhYmlsaXR5IHdpdGggWCBmb250cy4KCgkqIGluY2x1ZGUvZGVidWdkZWZzLmgsIGluY2x1ZGUvdGFwaS5oLCBtaXNjL0F0dGljL3RhcGkzMi5jLCBtaXNjL01ha2VmaWxlLmluLCByZWxheTMyL3RhcGkzMi5zcGVjLCBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRsbHMvTWFrZWZpbGUuaW4sIGRsbHMvdGFwaTMyLy5jdnNpZ25vcmUsIGRsbHMvdGFwaTMyL01ha2VmaWxlLmluLCBkbGxzL3RhcGkzMi9hc3Npc3RlZC5jLCBkbGxzL3RhcGkzMi9saW5lLmMsIGRsbHMvdGFwaTMyL3Bob25lLmMsIGluY2x1ZGUvZGVidWcuaDoKCUFuZHJlYXMgTW9ociA8Y2lwYW04OTVAY2lwMS5pbmQudW5pLXN0dXR0Z2FydC5kZT4KCUltcGxlbWVudGVkIChuZWFybHkpIGFsbCBUQVBJIGZ1bmN0aW9ucyBhcyBzdHVicy4KCgkqIGluY2x1ZGUvd2luZS93aW51c2VyMTYuaCwgbWlzYy9jb21tLmMsIGZpbGVzL2Rvc19mcy5jLCBpbmNsdWRlL3dpbmJhc2UuaDoKCU1pY2hhZWwgTWNDb3JtYWNrIDxNaWNoYWVsLk1jQ29ybWFja0BhbGNhdGVsLmNvbS5hdT4KCUJhc2ljIHN1cHBvcnQgZm9yIFdJTjMyIHNlcmlhbCBjb21tdW5pY2F0aW9ucyBBUEkuCglNb2RpZnkgRE9TRlNfT3BlbkRldmljZSB0byBhbGxvdyBvcGVuaW5nIG9mIENPTSBwb3J0cy4KCUNoYW5nZSBXaW4zMiBjb21tIGZ1bmN0aW9ucyB0byBhY2NlcHQgZmlsZSBoYW5kbGUuCglBZGQgZGVjbGFyYXRpb24gb2YgQ09NU1RBVDMyIHN0cnVjdHVyZS4KCgkqIGdyYXBoaWNzL3ZnYS5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUZpeGVkIGEgc2lsbHkgVkdBLWVtdWxhdGlvbiBwYWxldHRlIGJ1Zy4KCgkqIG1zZG9zL2ludDEwLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJRml4ZWQgYSBjb3VwbGUgb2YgdWdseSB3YXJuaW5ncyAoY2F1c2VkIGJ5IHVnbHkgZXJyb3JzKS4KCgkqIG1zZG9zL2Rvc21lbS5jOiBBbmRyZWFzIE1vaHIgPGNpcGFtODk1QGNpcDEuaW5kLnVuaS1zdHV0dGdhcnQuZGU+CglCdWcgZml4LgoKCSogZGxscy9zaGVsbDMyL2Jyc2ZvbGRlci5jLCBkbGxzL3NoZWxsMzIvY29udG1lbnUuYywgZGxscy9zaGVsbDMyL2RhdGFvYmplY3QuYywgZGxscy9zaGVsbDMyL2VudW1pZGxpc3QuYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5oLCBkbGxzL3NoZWxsMzIvc2hlbGxndWlkLmMsIGRsbHMvc2hlbGwzMi9zaGxmb2xkZXIuYywgaW5jbHVkZS9zaGxndWlkLmgsIGluY2x1ZGUvc2hsb2JqLmgsIGluY2x1ZGUvd2luZS9vYmpfZW51bWlkbGlzdC5oLCBpbmNsdWRlL3dpbmUvb2JqX3NoZWxsZm9sZGVyLmgsIG9sZS9ndWlkLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCS0gSVNoZWxsRm9sZGVyIGFuZCBJRW51bUlETGlzdCBhcmUgdXNpbmcgdGhlIG5ldyBDT00gaGVhZGVycwoJLSBmaXhlZCBzb3J0IG9yZGVyIGZvciBmb2xkZXJzIGFuZCBkcml2ZXMKCgkqIFJFQURNRTogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglDb3JyZWN0ZWQgbG9jYXRpb24gb2YgRkFRLgoKCSogbXNkb3MvaW50MjEuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglGdWxseSBpbXBsZW1lbnRlZCBEaXJlY3QgQ29uc29sZSBJbnB1dC4KClNhdCBNYXIgMTMgMTg6MjA6MjcgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHdpbmRvd3MvcXVldWUuYywgZGxscy9zaGVsbDMyL3NobGZvbGRlci5jLCBpZjE2MzIvdGh1bmsuYywgc2NoZWR1bGVyL3N5c2RlcHMuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRml4ZWQgbmV3bHkgaW50cm9kdWNlZCBhbmQgc29tZSBsZWZ0b3ZlciB3YXJuaW5ncy4KCgkqIGluY2x1ZGUvd2luZ2RpLmg6IEZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJSXQgaXMgbm93IHBvc3NpYmxlIHRvIHVzZSB0aGUgc3RhbmRhcmQgbWFjcm9zIGZvciBHZXRUZXh0RXh0ZW50UG9pbnQKCWFuZCBHZXRUZXh0RXh0ZW50UG9pbnQzMi4KCgkqIGluY2x1ZGUvcHJzaHQuaDogRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglGaXhlZCBzb21lIFNlbmRNZXNzYWdlMzJBIHRoYXQgZXNjYXBlZCB0aGUgcmVuYW1pbmcuCgoJKiBpbmNsdWRlL29sZTIuaDogRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglPbiB3aW5kb3dzIG9sZTIuaCBpbmNsdWRlcyBvbGVhdXRvLmggYW5kIHNvbWUgcHJvZ3JhbXMgZGVwZW5kIG9uIHRoaXMuCgoJKiBpbmNsdWRlL29sZWF1dG8uaCwgb2xlL29sZTJkaXNwLmM6IEZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJRml4ZXMgaW4gdGhlIFN5c0FsbG9jU3RyaW5nIGZ1bmN0aW9ucyBwcm90b3R5cGVzLiBJdCdzIG1vc3RseSAnY29uc3QnCglwcm9ibGVtcyB0aGF0IHByZXZlbnQgcmVndWxhciBjb2RlIGZyb20gY29tcGlsaW5nLgoKCSogZGxscy9jb21tZGxnL2ZpbGVkbGcuYywgZ3JhcGhpY3MveDExZHJ2L29lbWJpdG1hcC5jLCBpbmNsdWRlL2JpdG1hcHMvQXR0aWMvb2JtX2Nkcm9tLCBpbmNsdWRlL2JpdG1hcHMvQXR0aWMvb2JtX2RyaXZlLCBpbmNsdWRlL2JpdG1hcHMvQXR0aWMvb2JtX2ZvbGRlciwgaW5jbHVkZS9iaXRtYXBzL0F0dGljL29ibV9mb2xkZXIyLCBpbmNsdWRlL2JpdG1hcHMvQXR0aWMvb2JtX2hhcmRkaXNrLCBpbmNsdWRlL2JpdG1hcHMvb2ljX2Nkcm9tLCBpbmNsdWRlL2JpdG1hcHMvb2ljX2Zsb3BweSwgaW5jbHVkZS9iaXRtYXBzL29pY19mb2xkZXIsIGluY2x1ZGUvYml0bWFwcy9vaWNfZm9sZGVyMiwgaW5jbHVkZS9iaXRtYXBzL29pY19oZGlzaywgaW5jbHVkZS9iaXRtYXBzL29pY19uZXR3b3JrLCBpbmNsdWRlL3dpbnVzZXIuaDoKCVBhdmVsIFJvc2tpbiA8cGF2ZWxfcm9za2luQGdlb2NpdGllcy5jb20+CglGaWxlIG9wZW4gZGlhbG9nIG5vdyB1c2VzIGljb25zIGluc3RlYWQgb2YgYml0bWFwcy4KCgkqIGluY2x1ZGUvdmZ3Lmg6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJVXBkYXRlZCBBVkkqIGNsYXNzIGludGVyZmFjZSB0byBuZXcgSUNPTV8gbWV0aG9kcy4KCgkqIG11bHRpbWVkaWEvbXN2aWRlby5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVNvbWUgZml4ZXMgYW5kIGFkZGl0aW9ucy4KCgkqIGRsbHMvYXZpZmlsMzIvLmN2c2lnbm9yZSwgZGxscy9hdmlmaWwzMi9NYWtlZmlsZS5pbiwgZGxscy9hdmlmaWwzMi9hdmlmaWxlLmMsIGluY2x1ZGUvZGVidWcuaCwgaW5jbHVkZS9kZWJ1Z2RlZnMuaCwgcmVsYXkzMi9hdmlmaWwzMi5zcGVjLCBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRsbHMvTWFrZWZpbGUuaW46CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVN0YXJ0ZWQgb24gYXZpZmlsMzIgaW1wbGVtZW50YXRpb24gKG9ubHkgc3R1YnMgY3VycmVudGx5KS4KCgkqIGdyYXBoaWNzL3BhaW50aW5nLmM6IFBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJUmVpbXBsZW1lbnRlZCBEcmF3Rm9jdXNSZWN0IHdpdGhvdXQgdXNpbmcgWDExLgoKCSogaW5jbHVkZS9taXNjZW11LmgsIG1zZG9zL2Rvc21lbS5jLCBtc2Rvcy9pbnQxMC5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJSW1wbGVtZW50ZWQgbW9kZSBzZXR0aW5nIHRoaW5ncyBhcyB3ZWxsIGFzIFZFU0EgYWRkaXRpb25zIGFuZCBvdGhlcgoJdGhpbmdzLiBDbGVhbmVkIHVwIERPU01FTV9CaW9zRGF0YSBoYW5kbGluZy4KCgkqIGluY2x1ZGUvd2luZS9vYmpfb2xlZm9udC5oLCBvbGUvb2xlZm9udC5jOgoJRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50ZWQgdGhlIElQZXJzaXN0U3RyZWFtIGludGVyZmFjZSBvbiB0aGUgT0xFIGZvbnQgb2JqZWN0LgoKCSogbWlzY2VtdS9lbXVsYXRlLmM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglNYWtlIGZ1bmN0aW9uIEJYPTYgcm91bmQgU1QwIHRvIGludGVnZXIuCgoJKiBpbmNsdWRlL2NvbW1jdHJsLmgsIGluY2x1ZGUvd2luZ2RpLmg6IFBhdWwgUXVpbm4gPHBhdWxxQGNvcmVsLmNhPgoJQWRyaWFuIFRodXJzdG9uIDxhZHJpYW50QGNvcmVsLmNhPgoJLSBDaGFuZ2VkIExWTV9TRVRJVEVNUE9TSVRJT04gLT4gTFZNX1NFVElURU1QT1NJVElPTjMyCgkgICAgICAgICAgTFZNX1NFVElURU1QT1NJVElPTjE2IC0+IExWTV9TRVRJVEVNUE9TSVRJT04KCS0gQWRkZWQgc29tZSBtaXNzaW5nIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIHRvIHdpbmdkaS5oCgktIEFkZGVkIHByb3BlciBkZWZpbmVzIGZvciBHZXRDaGFyV2lkdGhzWFhYCgktIEFkZGVkIGMrKyBwcm90ZWN0aW9uIHRvIHdpbmdkaS5oCgoJKiBkbGxzL3NoZWxsMzIvaWNvbmNhY2hlLmMsIGRsbHMvc2hlbGwzMi9waWRsLmMsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5oLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgZGxscy9zaGVsbDMyL3NoZWxscGF0aC5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jLCBpbmNsdWRlL3NoZWxsLmgsIHJlbGF5MzIvc2hlbGwzMi5zcGVjOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CgktIG1vc3RseSBjbGVhbnVwIGFmdGVyIHRoZSByZW5hbWluZwoJLSBpbXBsZW1lbnRlZCBTSElMQ3JlYXRlRnJvbVBhdGgKCS0gc21hbGwgY2hhbmdlZCB0byBTSEdldEZpbGVJbmZvCgoJKiBpbmNsdWRlL3Byc2h0LmgsIGluY2x1ZGUvd2ludXNlci5oOgoJQmVydGhvIFN0dWx0aWVucyA8YmVydGhvQHBhbnRlci5zb2NpLmFhdS5kaz4KCUNoYW5nZWQgdGhlIERMR1RFTVBMQVRFIGFuZCBETEdJVEVNVEVNUExBVEUgdHlwZXMgdG8gYWRoZXJlIHRvIHRoZSBBVwoJc3RydWN0dXJlIGZvciBjb21wYXRpYmlsaXR5LgoKCSogZGxscy9jb21tZGxnL3ByaW50ZGxnLmMsIGluY2x1ZGUvY2RlcnIuaCwgaW5jbHVkZS9jb21tZGxnLmgsIGRsbHMvY29tbWRsZy9jb2xvcmRsZy5jLCBkbGxzL2NvbW1kbGcvZmlsZWRsZy5jLCBkbGxzL2NvbW1kbGcvZm9udGRsZy5jOgoJQmVydGhvIFN0dWx0aWVucyA8YmVydGhvQHBhbnRlci5zb2NpLmFhdS5kaz4KCU1vdmVkIGVycm9yIGNvZGVzIHRvIGNkZXJyLmguCgoJKiBsb2FkZXIvbW9kdWxlLmM6IFBldGVyIEdhbnRlbiA8Z2FudGVuQHVuaS1icmVtZW4uZGU+CglGaXggQ3JlYXRlUHJvY2VzcyB0byBoYW5kbGUgbHBDb21tYW5kbGluZSBiZXR0ZXIuCgoJKiB3aW4zMi9pbml0LmM6IFBldGVyIEdhbnRlbiA8Z2FudGVuQHVuaS1icmVtZW4uZGU+CglDaGFuZ2UgR2V0U3RhcnR1cEluZm9BL1cgdG8gcmV0dXJuIHRoZSByZWFsIFN0YXJ0dXBJbmZvLgoKCSogd2luZG93cy9tZGkuYzogR3V5IEFsYmVydGVsbGkgIDw8Z2FsYmVydGVAbmVvLmxydW4uY29tPj4KCUhhbmRsZSBudWxsIHduZFB0ciBmb3IgbWRpIHdpbmRvdy4KCgkqIGluY2x1ZGUvd2luYmFzZS5oOiBEYXZlIFBpY2tsZXMgPGRhdmVwQG51Z2F0ZS5kZW1vbi5jby51az4KCUZpeGVkIGEgY291cGxlIG9mIG1pc3NpbmcgI2RlZmluZXMgZm9yIFdpbjMyIEFQSSBmdW5jdGlvbnMgd2l0aAoJQVNDSUkvVW5pY29kZSB2ZXJzaW9ucy4KCgkqIHdpbjMyL25ld2Zucy5jLCBpZjE2MzIva2VybmVsLnNwZWMsIGlmMTYzMi90aHVuay5jLCBpZjE2MzIvd3Byb2NzLnNwZWMsIGluY2x1ZGUvY2FsbGJhY2suaCwgbWlzYy9jYWxsYmFjay5jLCByZWxheTMyL01ha2VmaWxlLmluLCByZWxheTMyL3V0dGh1bmsuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgVVRSZWdpc3RlciBhbmQgVVRVblJlZ2lzdGVyLgoKCSogaWYxNjMyL2RkZW1sLnNwZWMsIGluY2x1ZGUvZGRlbWwuaCwgaW5jbHVkZS93aW5udC5oLCBtaXNjL2RkZW1sLmMsIHJlbGF5MzIvdXNlcjMyLnNwZWM6Cgk8a2VpdGhfbUBzd2VlbmV5LmRlbW9uLmNvLnVrPgoJQWRkZWQgY29kZWQgc3R1YnMgZm9yIERkZVF1ZXJ5Q29udkluZm8gKDE2ICYgMzIgYml0KSwgRGRlQWRkRGF0YSAoMzIKCWJpdCksIERkZUFiYW5kb25UcmFuc2FjdGlvbiAoMzIgYml0KSwgRGRlSW1wZXJzb25hdGVDbGllbnQgKDMyKQoJRGRlU2V0UXVhbGl0eU9mU2VydmljZSwgRGRlU2V0VXNlckhhbmRsZS4KCUNvcnJlY3RlZCBoZWFwIGhhbmRsaW5nIGluIERkZUluaXRpYWxpemVXLCByZWZpbmVkIENyZWF0ZU11dGV4IGVycm9yCgloYW5kbGluZy4KCUdlbmVyYWwgdGlkeWluZy4KCgkqIGlmMTYzMi9vbGVjbGkuc3BlYywgaW5jbHVkZS9vbGUuaCwgb2xlL29sZWNsaS5jOgoJUGF2ZWwgUm9za2luIDxwYXZlbF9yb3NraW5AZ2VvY2l0aWVzLmNvbT4KCUFkZGVkIHByb3RvdHlwZXMgZm9yIE9sZVF1ZXJ5TGlua0Zyb21DbGlwLCBPbGVRdWVyeUNyZWF0ZUZyb21DbGlwLAoJT2xlQ3JlYXRlTGlua0Zyb21DbGlwLCBPbGVDcmVhdGVGcm9tQ2xpcCwgT2xlUXVlcnlUeXBlLAoJT2xlUmV2ZXJ0Q2xpZW50RG9jLCBPbGVFbnVtT2JqZWN0cy4KCgkqIHJlbGF5MzIvb2xlY2xpMzIuc3BlYzogUGF2ZWwgUm9za2luIDxwYXZlbF9yb3NraW5AZ2VvY2l0aWVzLmNvbT4KCURlZmluaXRpb24gZm9yIE9sZUNyZWF0ZUxpbmtGcm9tQ2xpcCB3YXMgaW5jb3JyZWN0LgoKCSogbG9hZGVyL3Jlc291cmNlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJTWFzayBvdXQgdGhlIHVwcGVyIDEyIGJpdHMgZnJvbSB0aGUgcmVzb3VyY2VpZCwganVzdCBsaWtlIHdpbjk1IGRvZXMuCgoJKiBCVUdTOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCVVwZGF0ZWQgYnVnIGxpc3QgYnkgbXkga25vd2xlZGdlIG9mIHRoZW0uCgoJKiBvbGUvc3RvcmFnZTMyLmM6IFRodXkgTmd1eWVuIDx0aHV5QG1hY2FkYW1pYW4uY29tPgoJU3RnQ3JlYXRlRG9jZmlsZSBhY2NlcHRzIE5VTEwgYXMgYSBmaWxlIG5hbWUuCgoJKiBvYmplY3RzL21ldGFmaWxlLmM6IENhb2xhbiBNY05hbWFyYSA8Q2FvbGFuLk1jTmFtYXJhQHVsLmllPgoJQWRkZWQgc3VwcG9ydCBmb3IgYWx0ZXJuYXRlIERJQkJJVEJMVCBsYXlvdXQuCgoJKiBkZWJ1Z2dlci9tc2MuYzogU2VyZ2V5IFR1cmNoYW5vdiA8dHVyY2hhbm92QHVzYS5uZXQ+CglCdWZmZXIgc2l6ZSBidWcgaW4gTG9jYXRlRGVidWdJbmZvRmlsZS4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IEFuZHJlYXMgTW9ociA8Y2lwYW04OTVAY2lwMS5pbmQudW5pLXN0dXR0Z2FydC5kZT4KCUltcHJvdmVkICJlcnJvciIgbWVzc2FnZSByZWFkYWJpbGl0eS4KCgkqIHNlcnZlci9wcm9jZXNzLmM6IEZpeGVkIHByb2Nlc3Nfc2lnbmFsZWQgKHRoYW5rcyB0byBVd2UgQm9ubmVzKS4KCgkqIGRsbHMvY29tY3RsMzIvbGlzdHZpZXcuYzogRml4ZWQgbWFrZSBkZXBlbmQKCkZyaSBNYXIgMTIgMTc6NDI6NTAgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGRsbHMvY29tY3RsMzIvYW5pbWF0ZS5jLCBkbGxzL2NvbWN0bDMyL2NvbWJvZXguYywgZGxscy9jb21jdGwzMi9kYXRldGltZS5jLCBkbGxzL2NvbWN0bDMyL2ZsYXRzYi5jLCBkbGxzL2NvbWN0bDMyL2hlYWRlci5jLCBkbGxzL2NvbWN0bDMyL2hvdGtleS5jLCBkbGxzL2NvbWN0bDMyL2lwYWRkcmVzcy5jLCBkbGxzL2NvbWN0bDMyL21vbnRoY2FsLmMsIGRsbHMvY29tY3RsMzIvbmF0aXZlZm9udC5jLCBkbGxzL2NvbWN0bDMyL3BhZ2VyLmMsIGRsbHMvY29tY3RsMzIvcmViYXIuYywgZGxscy9jb21jdGwzMi9zdGF0dXMuYywgZGxscy9jb21jdGwzMi90b29sYmFyLmMsIGRsbHMvY29tY3RsMzIvdG9vbHRpcHMuYywgZGxscy9jb21jdGwzMi90cmFja2Jhci5jLCBpbmNsdWRlL2lwYWRkcmVzcy5oLCBpbmNsdWRlL3VwZG93bi5oOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCVJlcGxhY2VkIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIFdORCBzdHJ1Y3R1cmUgYnkgY29ycmVzcG9uZGluZyBjYWxscyB0bwoJV2luMzIgZnVuY3Rpb25zLgoKCSogZGxscy9jb21jdGwzMi9jb21tY3RybC5jLCBkbGxzL2NvbWN0bDMyL3Byb2dyZXNzLmMsIGRsbHMvY29tY3RsMzIvdXBkb3duLmMsIGluY2x1ZGUvY29tbWN0cmwuaDoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlZCBzb21lIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGUgYXV0b21hdGVkIHJlbmFtaW5nLgoKCSogcmVzb3VyY2VzLy5jdnNpZ25vcmU6IEFkZGVkIHN5c3Jlc19SdS5zCgoJKiBkbGxzL2NvbWN0bDMyL2hlYWRlci5jLCBkbGxzL2NvbWN0bDMyL2xpc3R2aWV3LmMsIGluY2x1ZGUvY29tbWN0cmwuaCwgaW5jbHVkZS9saXN0dmlldy5oOgoJTHVjIFRvdXJhbmdlYXUgPGx1Y0BtYWNhZGFtaWFuLmNvbT4KCUNoYW5nZWQgdGhlIGxpc3R2aWV3IGNvbnRyb2wgdG8gYWRkIHRoZSByZXBvcnQgdmlldyBhbmQgZml4IHNvbWUgYnVncwoJZm9yIHRoZSBsaXN0IHZpZXcuCgoJKiBtaXNjL3NoZWxsLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJUmVtb3ZlZCB1c2Ugb2YgV05EIHN0cnVjdC4KCgkqIGRsbHMvbnRkbGwvcnRsc3RyLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkZWQgI2lmZGVmIEhBVkVfV0NUWVBFX0guCgoJKiBkbGxzL2NvbWN0bDMyL3RhYi5jOiBUaHV5IE5ndXllbiA8dGh1eUBtYWNhZGFtaWFuLmNvbT4KCVJlbW92ZWQgZGlyZWN0IGFjY2VzcyB0byB0aGUgV05EIHN0cnVjdC4KCgkqIHdpbmRvd3Mvd2lucHJvYy5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1lc3NhZ2UgdHJhbnNsYXRpb24gZm9yIFdNX1dJTklOSUNIQU5HRS4KCgkqIHdpbmRvd3Mvbm9uY2xpZW50LmM6IFBhdmVsIFJvc2tpbiA8cGF2ZWxfcm9za2luQGdlb2NpdGllcy5jb20+CglvYm1fY2xvc2VkXzk1IHNob3VsZCBub3QgYmUgZHJhd24gaW52ZXJ0ZWQuCgoJKiBkbGxzL2NvbWN0bDMyL3RyZWV2aWV3LmM6IFN5bHZhaW4gU3QuR2VybWFpbiA8c3lsdmFpbkBtYWNhZGFtaWFuLmNvbT4KCVJlbW92ZWQgZGlyZWN0IGFjY2VzcyB0byB0aGUgV05EIHN0cnVjdC4KCgkqIG9sZS9zdGdfYmlnYmxvY2tmaWxlLmMsIG9sZS9zdG9yYWdlMzIuYywgb2xlL3N0b3JhZ2UzMi5oOgoJVGh1eSBOZ3V5ZW4gPHRodXlAbWFjYWRhbWlhbi5jb20+CglJbXByb3ZlZCBwZXJmb3JtYW5jZS4KCgkqIHdpbmRvd3MvZGNlLmM6IFN0ZXBoYW5lIEx1c3NpZXIgPFN0ZXBoYW5lQG1hY2FkYW1pYW4uY29tPgoJQ3JlYXRlIGEgbmV3IERDIGluIEdldERDRXggd2hlbiBub25lIGFyZSBhdmFpbGFibGUuCgoJKiBvbGUvb2xlMmRpc3AuYywgb2xlL3ZhcmlhbnQuYywgcmVsYXkzMi9vbGVhdXQzMi5zcGVjOgoJU3RlcGhhbmUgTHVzc2llciA8c3RlcGhhbmVAbWFjYWRhbWlhbi5jb20+CglJbXBsZW1lbnRlZCBEb3NEYXRlVGltZVRvVmFyaWFudCgpIGFuZCBTeXNBbGxvY1N0cmluZ0J5dGVMZW4oKSBmdW5jdGlvbnMuCgoJKiBjb250cm9scy9jb21iby5jOiBQYXZlbCBSb3NraW4gPHBhdmVsX3Jvc2tpbkBnZW9jaXRpZXMuY29tPgoJQ2hhbmdlZCB0aGUgYnV0dG9uIHN0YXRlIHRvICJ1cCIgYXMgc29vbiBhcyBpdCBpcyBrbm93biB0aGF0IHRoZQoJc2VsZWN0aW9uIGhhcyBiZWVuIGNhbmNlbGxlZCwgc28gdGhlIGJ1dHRvbiBpcyByZWRyYXduIGluIHRoZSAidXAiCglzdGF0ZS4KCgkqIG1pc2NlbXUvaW5zdHIuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglFbXVsYXRlICh3ZWxsLCBpZ25vcmUpIG1vdiBjcjAsZWF4IGFuZCBtb3YgZWF4LGNyMC4KCldlZCBNYXIgMTAgMTg6MDM6NTQgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvd2luZS9vYmpfaW5wbGFjZS5oLCBpbmNsdWRlL3dpbmUvb2JqX29sZWF1dC5oLCBpbmNsdWRlL3dpbmUvb2JqX29sZW9iai5oLCBpbmNsdWRlL3dpbmUvb2JqX29sZXVuZG8uaCwgaW5jbHVkZS93aW5lL29ial9vbGV2aWV3LmgsIGluY2x1ZGUvd2luZS9vYmpfcGljdHVyZS5oLCBpbmNsdWRlL3dpbmUvb2JqX3Byb3BlcnR5LmgsIG9sZS9jb21wb2JqLmMsIG9sZS9ndWlkLmMsIG9sZS9vbGUyZGlzcC5jLCBvbGUvb2xlY2xpLmMsIG9sZS9vbGVkbGcuYywgb2xlL29sZW9iai5jLCBkbGxzL3NoZWxsMzIvZGF0YW9iamVjdC5jLCBkbGxzL3NoZWxsMzIvcGlkbC5jLCBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmMsIGluY2x1ZGUvQXR0aWMvd2ludHlwZXMuaCwgaW5jbHVkZS9jb21tZGxnLmgsIGluY2x1ZGUvaW1tLmgsIGluY2x1ZGUvb2FpZGwuaCwgaW5jbHVkZS9vYmpiYXNlLmgsIGluY2x1ZGUvb2NpZGwuaCwgaW5jbHVkZS9vbGUuaCwgaW5jbHVkZS9vbGUydmVyLmgsIGluY2x1ZGUvb2xlYXV0by5oLCBpbmNsdWRlL29sZWN0bC5oLCBpbmNsdWRlL29sZWlkbC5oLCBpbmNsdWRlL3NobGd1aWQuaCwgaW5jbHVkZS9zaGxvYmouaCwgaW5jbHVkZS93aW5iYXNlLmgsIGluY2x1ZGUvd2luZS9vYmpfYmFzZS5oLCBpbmNsdWRlL3dpbmUvb2JqX2NvbnRyb2wuaCwgaW5jbHVkZS93aW5lL29ial9kYXRhb2JqZWN0LmgsIGluY2x1ZGUvd2luZS9vYmpfZHJhZ2Ryb3AuaCwgaW5jbHVkZS93aW5udC5oLCBpbmNsdWRlL3d0eXBlcy5oOgoJUGF1bCBRdWlubiA8cGF1bHFAY29yZWwuY2E+CglBZGRlZCBhIGxvdCBvZiBuZXcgT0xFIGludGVyZmFjZXMuCgoJKiBkb2N1bWVudGF0aW9uL2xhbmd1YWdlcywgZG9jdW1lbnRhdGlvbi93aW5lLm1hbiwgaW5jbHVkZS9vcHRpb25zLmgsIG1pc2MvbWFpbi5jLCBvbGUvb2xlMm5scy5jLCByZXNvdXJjZXMvTWFrZWZpbGUuaW4sIHJlc291cmNlcy9zeXNyZXMuYywgcmVzb3VyY2VzL3N5c3Jlc19SdS5yYzoKCUFsZXhhbmRlciBLYW5hdmluIDxha0BjYXZlLmhvcC5zdHUubmV2YS5ydT4KCUFkZGVkIHN1cHBvcnQgZm9yIFJ1c3NpYW4gbGFuZ3VhZ2UuCgoJKiBpZjE2MzIvdGh1bmsuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglUZW1wb3JhcnkgZml4OiBBY3RpdmF0ZSAxNi1iaXQgc3lzdGVtIHRpbWVyIGNhbGxiYWNrIHJvdXRpbmVzLCBidXQKCXNraXAgY2FsbGluZyB0aGVtIGlmIHRpbWVyIHNpZ25hbCBvY2N1cmVkIHdoaWxlIGN1cnJlbnQgdGhyZWFkIHdhcwoJaG9sZGluZyB0aGUgV2luMTZMb2NrICh0byBwcmV2ZW50IDE2LWJpdCBzdGFjayBjb3JydXB0aW9uKS4KCgkqIGluY2x1ZGUvc3lzbGV2ZWwuaCwgc2NoZWR1bGVyL3N5c2xldmVsLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGVkIF9Db25maXJtV2luMTZMb2NrIChLRVJORUwzMi45NikuCgoJKiBncmFwaGljcy9kZHJhdy5jLCBpbmNsdWRlL2RkcmF3Lmg6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCS0gc29tZSBjbGVhbiB1cCBpbiBoYW5kbGluZyBvZiBkZXB0aAoJLSBtb3JlIGRlcHRoIGNvbnZlcnNpb24gcm91dGluZXMgZm9yIFgxMSAoMTUsIDE2IGFuZCAzMiAtPiA4KQoKCSogaW5jbHVkZS9xdWV1ZS5oLCB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy9xdWV1ZS5jOgoJU3RlcGhhbmUgTHVzc2llciA8c3RlcGhhbmVAbWFjYWRhbWlhbi5jb20+CglJbXBsZW1lbnRlZCBTZW5kTWVzc2FnZVRpbWVvdXQoKSBmdW5jdGlvbnMuCgoJKiBwcm9ncmFtcy9ub3RlcGFkL0NoYW5nZUxvZywgcHJvZ3JhbXMvbm90ZXBhZC9NYWtlZmlsZS5pbiwgcHJvZ3JhbXMvbm90ZXBhZC9zZWFyY2guYzoKCU1hcmNlbCBCYXVyIDxtYmF1ckBnMjYuZXRoei5jaD4KCUFkZGVkIEJveWVyLU1vb3JlIHRleHQgc2VhcmNoLgoKCSogaWYxNjMyL3RodW5rLmMsIGlmMTYzMi91c2VyLnNwZWMsIGluY2x1ZGUvY2FsbGJhY2suaCwgbWlzYy9jYWxsYmFjay5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBZGRlZCBVU0VSLkRlc3Ryb3lJY29uMzIgdG8gQ2FsbG91dCBzdHJ1Y3QuCgoJKiBpbmNsdWRlL21vZHVsZS5oLCBsb2FkZXIvbmUvY29udmVydC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglEZWxldGVkIE5FX0ZyZWVQRVJlc291cmNlKCkuCgoJKiBpbmNsdWRlL3VzZXIuaCwgbG9hZGVyL21haW4uYywgbG9hZGVyL21vZHVsZS5jLCB3aW5kb3dzL3VzZXIuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWRhcHRlZCB0byBjdXJzb3IvaWNvbiBoYW5kbGluZyBjaGFuZ2VzLgoKCSogbG9hZGVyL25lL3Jlc291cmNlLmMsIGxvYWRlci9yZXNvdXJjZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBbGxvdyBhY2Nlc3NpbmcgYm90aCBORSBhbmQgUEUgcmVzb3VyY2VzIHdpdGggYm90aCAxNi0gYW5kIDMyLWJpdCBBUEkuCglIb29rIGN1cnNvci9pY29uIGRlc3RydWN0aW9uIGludG8gRnJlZVJlc291cmNlIChsaWtlIFdpbjk1KS4KCgkqIGluY2x1ZGUvY3Vyc29yaWNvbi5oLCBvYmplY3RzL2N1cnNvcmljb24uYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgV2luOTUtc3R5bGUgc2hhcmVkIGN1cnNvci9pY29uIGNhY2hlLgoJTWVyZ2VkIE5FIGFuZCBQRSByZXNvdXJjZSBoYW5kbGluZy4KCgkqIGdyYXBoaWNzL3gxMWRydi9vZW1iaXRtYXAuYywgaW5jbHVkZS9iaXRtYXBzL0F0dGljL29ibV9mb2xkZXIsIGluY2x1ZGUvYml0bWFwcy9BdHRpYy9vYm1fZm9sZGVyMjoKCVBhdmVsIFJvc2tpbiA8cGF2ZWxfcm9za2luQGdlb2NpdGllcy5jb20+CglGaXhlZCBmb2xkZXIgYml0bWFwIGNvbG9ycyBmb3IgOGJwcC4KCgkqIGdyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jOiBDYW9sYW4gTWNOYW1hcmEgPENhb2xhbi5NY05hbWFyYUB1bC5pZT4KCVdpbmRvd3MgZG9lc250IGFsbG93IGRhc2hlZCBhbmQgZG90dGVkIGxpbmVzID4gMS4KCgkqIG9sZS9jb21wb2JqLmM6IEZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCUZpeGVkIGEgcmVmZXJlbmNlLWNvdW50aW5nIHByb2JsZW0gaW4gdGhlIGV4dGVybmFsIGxvY2sgbWVjaGFuaXNtLgoKCSogZGxscy9zaGVsbDMyL2RhdGFvYmplY3QuYzogRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJRml4ZWQgYSBzaW1wbGUgYnVnIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2hlbGxWaWV3IG9iamVjdHMuCgoJKiBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmMsIGluY2x1ZGUvc2hlbGwuaDoKCVNlcmdleSBUdXJjaGFub3YgPHR1cmNoYW5vdkB1c2EubmV0PgoJQWRkZWQgc29tZSBleHRyYSBDU0lETHMuCgoJKiBsb2FkZXIvbW9kdWxlLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiBBbGxvdyBscENvbW1hbmRMaW5lID09IE5VTEwgaW4gQ3JlYXRlUHJvY2VzcygpLgoKCSogd2luZG93cy94MTFkcnYva2V5Ym9hcmQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiBUb0FzY2lpIHNob3VsZCBub3QgZ2VuZXJhdGUgQVNDSUkgY29kZSB3aGVuIGtleS11cCBmbGFnIGlzIHNldC4KCgkqIGdyYXBoaWNzL3gxMWRydi9iaXRibHQuYywgZ3JhcGhpY3MveDExZHJ2L2JpdG1hcC5jLCB3aW5kb3dzL3gxMWRydi9ldmVudC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBdm9pZCB1bm5lY2Vzc2FyeSBHcmFwaGljc0V4cG9zZSBldmVudHMuCgoJKiBvbGUvc2FmZWFycmF5LmM6IEZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCUZpeGVkIGluZGV4IGNhbGN1bGF0aW9ucyBvZiB0aGUgdXBwZXIgYW5kIGxvd2VyIGJvdW5kcyBvZiBhIHNhZmVhcnJheS4KCUZpeGVkIGEgd3JvbmcgaW5pdGlhbGl6YXRpb24gb2YgdGhlIFZUIHNpemVzIGFycmF5LgoKCSogb2xlL29sZTIuYywgcmVsYXkzMi9vbGUzMi5zcGVjOgoJRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50YXRpb24gb2YgdGhlIFJlbGVhc2VTdGdNZWRpdW0gbWV0aG9kLgoKVHVlIE1hciAgOSAxNzo0Nzo1MSAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZGxscy9udGRsbC9NYWtlZmlsZS5pbiwgZGxscy9udGRsbC9maWxlLmMsIGRsbHMvbnRkbGwvbnQuYywgZGxscy9udGRsbC9vbS5jLCBkbGxzL250ZGxsL3JlZy5jLCBkbGxzL250ZGxsL3J0bC5jLCBkbGxzL250ZGxsL3J0bHN0ci5jLCBkbGxzL250ZGxsL3NlYy5jLCBkbGxzL250ZGxsL3N5bmMuYywgZGxscy9udGRsbC90aW1lLmMsIHJlbGF5MzIvYWR2YXBpMzIuc3BlYywgcmVsYXkzMi9udGRsbC5zcGVjOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CgktIHNvcnRlZCBBUEkgYnkgZ3JvdXBzCgktIG5ldyBzdHViczogIE50UXVlcnlEaXJlY3RvcnlGaWxlLCAgWndRdWVyeURpcmVjdG9yeUZpbGUKCS0gaW1wbC46IFJ0bEFsbG9jYXRlSGVhcCwgUnRsQ3JlYXRlSGVhcCwgUnRsRGVzdHJveUhlYXAsIFJ0bEZyZWVIZWFwLAoJICBSdGxHZXREYWNsU2VjdXJpdHlEZXNjcmlwdG9yLCBSdGxHZXRTYWNsU2VjdXJpdHlEZXNjcmlwdG9yCgktIGltcGwuIGJ5IFJleCBKb2xsaWZmIChyZXhAbHZjYWJsZW1vZGVtLmNvbSk6IFJ0bFRpbWVUb1RpbWVGaWVsZHMsCgkgIFJ0bFRpbWVGaWVsZHNUb1RpbWUKCgkqIGluY2x1ZGUvbnRkZGsuaCwgaW5jbHVkZS9udGRlZi5oLCBpbmNsdWRlL3dpbm50Lmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1hbnkgbmV3IHByb3RvdHlwZXMuCgoJKiBsb2FkZXIvcmVzb3VyY2UuYywgaW5jbHVkZS9tb2R1bGUuaDoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJRml4IHVzZSBvZiB3cm9uZyBwcm90b3R5cGUgZnJvbSBudGRsbC5oLgoKCSogZGxscy9hZHZhcGkzMi9zZWN1cml0eS5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglNYWtlIG1vcmUgZnVuY3Rpb25zIGp1c3QgY2FsbGluZyBkb3duIHRvIG50ZGxsLgoJTmV3OiBHZXRTZWN1cml0eURlc2NyaXB0b3JTYWNsLgoKCSogZ3JhcGhpY3MvcHNkcnYvYWZtLmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUFjY2VwdCAiTm9ybWFsIiBhcyBhIHZhbGlkIEFGTSB3ZWlnaHQuCgoJKiBvbGUvc3RvcmFnZTMyLmMsIG9sZS9zdG9yYWdlMzIuaDogVGh1eSBOZ3V5ZW4gPHRodXlAbWFjYWRhbWlhbi5jb20+CglTbWFydGVyIHdheSBvZiBzZWFyY2hpbmcgZm9yIGEgZnJlZSBibG9jay4KCgkqIHdpbmRvd3MvbWVzc2FnZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IERpcmVjdGVkWWllbGQoKSBvbmx5IHRvIDE2LWJpdCB0YXNrcyBpbiBSZXBseU1lc3NhZ2UoKS4KCgkqIGxpYnRlc3QvaGVsbG81LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQ29ycmVjdGVkIGNhc3Qgc28gaGVsbG81IGNvbXBpbGVzIGFnYWluLgoKCSogZGxscy9jb21tZGxnL2ZpbGVkbGcuYzogTm9ybWFuIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJRG9uJ3QgY29weSBscHN0ckZpbGVUaXRsZSBpZiBnaXZlbiBOVUxMIHBvaW50ZXIgZm9yIHRoaXMuCglEZWxwaGkgMi4wIHBhc3NlcyBOVUxMIGZvciBscHN0ckZpbGVUaXRsZSB0byBHZXRPcGVuL1NhdmVGaWxlTmFtZS4KCgkqIG1pc2Mvd2luc29jay5jLCBpbmNsdWRlL3dpbnNvY2suaDoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRml4IGJyb2tlbiBfY29udmVydF9zb2Nrb3B0IGZvciBJUFBST1RPX1RDUCBjYXNlcywgYWRkZWQgVENQX05PREVMQVkuCgoJKiBtc2Rvcy9kcG1pLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJX19hc21fXyBmaXggYXMgc3VnZ2VzdGVkIGJ5IDxkYW5pZWxAbWF0LnV0ZnNtLmNsPiBEYW5pZWwgU2VycGVsbCwKCXJlbW92ZWQgYWRkaXRpb25hbCAiZWF4IiBmcm9tIGNsb2JiZXIgbGlzdCwgc28gZWdjcy1jdXJyZW50IGxpa2VzIGl0LgoKCSogbWVtb3J5L3ZpcnR1YWwuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglDcmVhdGVGaWxlTWFwcGluZyBTZXRMYXN0RXJyb3IoMClzIG9uIG5ld2x5IGNyZWF0ZWQgbWFwcGluZ3MuCgpTdW4gRmViIDI4IDIwOjA1OjEyIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBkbGxzL2NvbW1kbGcvLmN2c2lnbm9yZSwgZGxscy9jb21tZGxnL01ha2VmaWxlLmluLCBkbGxzL2NvbW1kbGcvY29sb3JkbGcuYywgZGxscy9jb21tZGxnL2ZpbGVkbGcuYywgZGxscy9jb21tZGxnL2ZpbmRkbGcuYywgZGxscy9jb21tZGxnL2ZvbnRkbGcuYywgZGxscy9jb21tZGxnL2dlbmVyaWMuYywgZGxscy9jb21tZGxnL3ByaW50ZGxnLmMsIG1pc2MvQXR0aWMvY29tbWRsZy5jLCBtaXNjL01ha2VmaWxlLmluLCBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRsbHMvTWFrZWZpbGUuaW46CglLbGFhcyB2YW4gR2VuZCA8S2xhYXNAdmFuZ2VuZC5kZW1vbi5ubD4KCUNyZWF0ZSBhIG5ldyBzdWJkaXJlY3RvcnkgZm9yIHRoZSBjb21tb24gZGlhbG9nIGJveCBETEwgYW5kIG1vdmUgYWxsCgljb2RlIGZyb20gL21pc2MvY29tbWRsZy5jIHRvIHRoaXMgZGlyZWN0b3J5LiAgQWxzbyBtYWRlIGEgc3RhcnQgaW4KCWRvY3VtZW50aW5nIHRoZSBBUEkgY2FsbHMuCgoJKiBtaXNjL3dpbnNvY2suYywgZGVidWdnZXIvYnJlYWsuYywgZGVidWdnZXIvZGJnLnksIGRlYnVnZ2VyL2RiZ21haW4uYywgZGVidWdnZXIvZWRpdGxpbmUuYywgZGVidWdnZXIvZXhwci5jLCBkZWJ1Z2dlci9oYXNoLmMsIGRlYnVnZ2VyL2luZm8uYywgZGVidWdnZXIvbWVtb3J5LmMsIGRlYnVnZ2VyL21zYy5jLCBkZWJ1Z2dlci9yZWdpc3RlcnMuYywgZGVidWdnZXIvc291cmNlLmMsIGRlYnVnZ2VyL3N0YWNrLmMsIGRlYnVnZ2VyL3R5cGVzLmMsIGluY2x1ZGUvQXR0aWMvd2ludHlwZXMuaDoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJTW9yZSBpbmNsdWRlIG9wdGltaXphdGlvbnMuCgoJKiB3aW5kb3dzL2RyaXZlci5jLCB3aW5kb3dzL3dpbnByb2MuYywgZGxscy9jb21jdGwzMi90b29sYmFyLmMsIGRsbHMvY29tY3RsMzIvdHJlZXZpZXcuYywgbG9hZGVyL3BlX2ltYWdlLmMsIG1zZG9zL2RwbWkuYywgbXVsdGltZWRpYS9hdWRpby5jLCBtdWx0aW1lZGlhL21tc3lzdGVtLmMsIG9iamVjdHMvZGMuYywgb2xlL3N0b3JhZ2UzMi5jLCBjb250cm9scy9tZW51LmMsIGRsbHMvY29tY3RsMzIvaG90a2V5LmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUZpeGVkIGEgbG90IG9mIHdhcm5pbmdzIHVzaW5nIFdJTkVfVU5VU0VELCBjYXN0cywgY29tbWVudGluZyBvdXQgYW5kCglhZGRpdGlvbmFsIHt9LiBSZXdyb3RlIEdldENyZWF0aW9uTW9kZUZyb21TVEdNIHNvIHdlIGRvbid0IGdldAoJInBvc3NpYmxlIHVzZSBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIi4KCgkqIGluY2x1ZGUvbW1zeXN0ZW0uaCwgaW5jbHVkZS9tdWx0aW1lZGlhLmg6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCU1DSV9PUEVOX0RSSVZFUl9QQVJNUyAtIEFkZCB3aW4zMiB2ZXJzaW9uIG9mIHN0cnVjdHVyZS4KCgkqIGZpbGVzL2RpcmVjdG9yeS5jLCBtc2Rvcy9pbnQyMS5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglDaGFuZ2VkIENyZWF0ZURpcmVjdG9yeSBMYXN0RXJyb3IgcmV0dXJucyB0byBtYXRjaCBXaW4zMiAoZm91bmQgb3V0IGJ5CglleHBlcmltZW50KS4gQWRhcHRlZCBpbnQyMSBDcmVhdGVEaXJlY3RvcnkgY2FsbCB0byBzdGlsbCByZXR1cm4gdGhlCgljb3JyZWN0IERPUyBlcnJvciBjb2RlcyBhY2NvcmRpbmcgdG8gUmFscGggQnJvd24uCgoJKiBncmFwaGljcy9kZHJhdy5jLCByZWxheTMyL2RkcmF3LnNwZWM6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCS0gYWRkZWQgZnVuY3Rpb24gRGlyZWN0RHJhd0VudW1lcmF0ZUV4CgktIGFkZGVkIChvciBjb3JyZWN0ZWQpIGNoZWNrIGZvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBlbnVtZXJhdGlvbiBmdW5jdGlvbnMKCgkqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOiBMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUJldHRlciBkZXRlY3Rpb24gb2Ygb2xkIChpLmUuIG5vbiBPcGVuR0wgMS4yIGNvbXBsaWFudCkgdmVyc2lvbiBvZiBNZXNhLgoKCSogbXVsdGltZWRpYS9tY2ljZGEuYzoKCU1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25Ac3R1ZC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFkZGVkIG1pc3NpbmcgPHN5cy90eXBlcy5oPi4KCgkqIGluY2x1ZGUvd2ludXNlci5oOiBLbGFhcyB2YW4gR2VuZCA8a2xhYXNAdmFuZ2VuZC5kZW1vbi5ubD4KCUFkZGVkIHRoZSBidXR0b24gc3RhdGVzIGFzIHJldHVybmVkIGJ5IElzRGxnQnV0dG9uQ2hlY2tlZCgpLgoKCSogbG9hZGVyL21vZHVsZS5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJQWRkZWQgc3VwcG9ydCBmb3IgcXVvdGVkIGZpbGUgbmFtZXMgaW4gQ3JlYXRlUHJvY2VzcygpLgoKCSogZmlsZXMvZmlsZS5jLCBzY2hlZHVsZXIvY2xpZW50LmMsIHNjaGVkdWxlci9ldmVudC5jLCBzY2hlZHVsZXIvbXV0ZXguYywgc2NoZWR1bGVyL3NlbWFwaG9yZS5jLCBzZXJ2ZXIvZmlsZS5jLCB3aW4zMi9jb25zb2xlLmM6CglDTElFTlRfV2FpdFJlcGx5OiBkb24ndCBjbGVhciBsYXN0IGVycm9yIG9uIHN1Y2Nlc3M7IGZpeGVkIGNhbGxlcnMKCWFjY29yZGluZ2x5IChiYXNlZCBvbiBhIHBhdGNoIGJ5IEp1ZXJnZW4gU2NobWllZCkuCgoJKiBtc2Rvcy9pbnQxMC5jOiBKZXNzIEhhYXMgPGRlc21va2VAaG90bWFpbC5jb20+CglBZGRlZCBzb21lIHN1cHBvcnQgYW5kIHN0dWJzIGZvciBWRVNBIHRvIG1zZG9zL2ludDEwLmMuCgoJKiBvbGUvYmluZGN0eC5jLCBvbGUvZmlsZW1vbmlrZXIuYywgb2xlL2lmcy5jLCBvbGUvaXRlbW1vbmlrZXIuYywgb2xlL21vbmlrZXIuYywgb2xlL29sZTIuYywgb2xlL29sZTJkaXNwLmMsIG9sZS9vbGUybmxzLmMsIG9sZS9vbGVjbGkuYywgb2xlL29sZWRsZy5jLCBvbGUvb2xlZm9udC5jLCBvbGUvb2xlb2JqLmMsIG9sZS9vbGVzdnIuYywgb2xlL3NhZmVhcnJheS5jLCBvbGUvc3RnX2JpZ2Jsb2NrZmlsZS5jLCBvbGUvc3RnX3N0cmVhbS5jLCBvbGUvc3RvcmFnZS5jLCBvbGUvc3RvcmFnZTMyLmMsIG9sZS90eXBlbGliLmMsIG9sZS92YXJpYW50LmMsIHRvb2xzL2ZudDJiZGYuYywgd2luZG93cy9kaXNwbGF5LmMsIGRsbHMvc2hlbGwzMi9kYXRhb2JqZWN0LmMsIGRsbHMvc2hlbGwzMi9zaGxmb2xkZXIuYywgaW5jbHVkZS9vbGVvYmouaCwgaW5jbHVkZS9zaGxvYmouaCwgaW5jbHVkZS93aW5lL29ial9jaGFubmVsLmgsIGluY2x1ZGUvd2luZS9vYmpfY2xpZW50c2VydmVyLmgsIGluY2x1ZGUvd2luZS9vYmpfY29udHJvbC5oLCBpbmNsdWRlL3dpbmUvb2JqX2RhdGFvYmplY3QuaCwgaW5jbHVkZS93aW5lL29ial9kcmFnZHJvcC5oLCBpbmNsdWRlL3dpbmUvb2JqX2lucGxhY2UuaCwgaW5jbHVkZS93aW5lL29ial9tYXJzaGFsLmgsIGluY2x1ZGUvd2luZS9vYmpfbWlzYy5oLCBpbmNsdWRlL3dpbmUvb2JqX21vbmlrZXIuaCwgaW5jbHVkZS93aW5lL29ial9vbGVhdXQuaCwgaW5jbHVkZS93aW5lL29ial9vbGVmb250LmgsIGluY2x1ZGUvd2luZS9vYmpfcHJvcGVydHlzdG9yYWdlLmgsIGluY2x1ZGUvd2luZS9vYmpfc3RvcmFnZS5oLCBpbmNsdWRlL3dpbmUvd2ludXNlcjE2LmgsIGxpYnJhcnkvd2luZXN0dWIuYywgbWVtb3J5L3N0cmluZy5jLCBtaXNjL3NvdW5kLmMsIG11bHRpbWVkaWEvbW1zeXN0ZW0uYywgY29udHJvbHMvbWVudS5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglNb3JlIGluY2x1ZGUgb3B0aW1pc2F0aW9ucyBhbmQgZml4ZXMuCgoJKiBzZXJ2ZXIvcHJvY2Vzcy5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCW9wZW5fb2JqZWN0IHNob3VsZCByZXR1cm4gRVJST1JfRklMRV9OT1RfRk9VTkQgd2hlbiB0aGUgbmFtZWQgb2JqZWN0CglpcyBub3QgZm91bmQuCgoJKiBmaWxlcy9kaXJlY3RvcnkuYzogQW5kcmVhcyBNb2hyIDxjaXBhbTg5NUBjaXAxLmluZC51bmktc3R1dHRnYXJ0LmRlPgoJQmV0dGVyIGVycm9yIG1lc3NhZ2UuCgoJKiBzY2hlZHVsZXIvQXR0aWMvazMyb2JqLmMsIHNjaGVkdWxlci9NYWtlZmlsZS5pbiwgc2NoZWR1bGVyL2NsaWVudC5jLCBzY2hlZHVsZXIvY3JpdHNlY3Rpb24uYywgc2NoZWR1bGVyL2V2ZW50LmMsIHNjaGVkdWxlci9oYW5kbGUuYywgc2NoZWR1bGVyL211dGV4LmMsIHNjaGVkdWxlci9waXBlLmMsIHNjaGVkdWxlci9wcm9jZXNzLmMsIHNjaGVkdWxlci9zZW1hcGhvcmUuYywgc2NoZWR1bGVyL3N5bmNocm8uYywgc2NoZWR1bGVyL3N5c2RlcHMuYywgc2NoZWR1bGVyL3RocmVhZC5jLCB3aW4zMi9jb25zb2xlLmMsIHdpbjMyL2RldmljZS5jLCBmaWxlcy9jaGFuZ2UuYywgZmlsZXMvZG9zX2ZzLmMsIGZpbGVzL2ZpbGUuYywgaW5jbHVkZS9BdHRpYy9rMzJvYmouaCwgaW5jbHVkZS9maWxlLmgsIGluY2x1ZGUvcHJvY2Vzcy5oLCBpbmNsdWRlL3RocmVhZC5oLCBsb2FkZXIvdGFzay5jLCBtZW1vcnkvdmlydHVhbC5jLCBtaXNjL3Rvb2xoZWxwLmM6CglVc2Ugc2VydmVyIGhhbmRsZXMgZGlyZWN0bHkgZm9yIFdpbjMyIGhhbmRsZXMuIFJlbW92ZWQgdXNlIG9mIEszMk9CSi4KCgkqIHdpbmRvd3MvZGVmd25kLmMsIHdpbmRvd3MvbXNnYm94LmMsIHdpbmRvd3MveDExZHJ2L21vbml0b3IuYywgb2JqZWN0cy9icnVzaC5jLCBvYmplY3RzL2NsaXBwaW5nLmMsIG9iamVjdHMvcGVuLmMsIG9iamVjdHMvcmVnaW9uLmMsIG9iamVjdHMvdGV4dC5jLCBvbGUvb2xlZm9udC5jLCBvbGUvb2xlb2JqLmMsIHNjaGVkdWxlci9BdHRpYy9rMzJvYmouYywgc2NoZWR1bGVyL2V2ZW50LmMsIHNjaGVkdWxlci9tdXRleC5jLCBzY2hlZHVsZXIvc2VtYXBob3JlLmMsIHNlcnZlci9maWxlLmMsIHNlcnZlci9yZXF1ZXN0LmMsIGRlYnVnZ2VyL2RiZy55LCBkZWJ1Z2dlci9yZWdpc3RlcnMuYywgZ3JhcGhpY3MvZDNkZGV2aWNlcy5jLCBncmFwaGljcy9kM2RleGVjdXRlYnVmZmVyLmMsIGdyYXBoaWNzL2QzZHRleHR1cmUuYywgZ3JhcGhpY3MvZXNjYXBlLmMsIGdyYXBoaWNzL3dpbjE2ZHJ2L2ZvbnQuYywgbG9hZGVyL25lL2NvbnZlcnQuYywgbWlzYy9uZXR3b3JrLmMsIG1pc2MvcG9ydC5jLCBtaXNjZW11L21haW4uYywgbXVsdGltZWRpYS9hdWRpby5jLCBtdWx0aW1lZGlhL2RwbGF5LmMsIG11bHRpbWVkaWEvaW5pdC5jLCBtdWx0aW1lZGlhL21jaXdhdmUuYywgbXVsdGltZWRpYS9taXhlci5jLCBtdWx0aW1lZGlhL21tYXV4LmMsIGNvbnNvbGUveHRlcm0uYywgY29udHJvbHMvbGlzdGJveC5jOgoJRGF2aWQgTHV5ZXIgPGx1eWVyQHVjcy51d2EuZWR1LmF1PgoJLSBmaXhlZCBtaXNzaW5nIHN0ZGxpYi5oIGFuZCBzdHJpbmcuaCBpbmNsdWRlcyBldmVyeXdoZXJlCgktIHJlbW92ZWQgYSBjb3VwbGUgb2YgdW5uZWVkZWQgc3RkbGliLmggYW5kIHN0ZGlvLmggaW5jbHVkZXMKCgkqIGluY2x1ZGUvcHJvY2Vzcy5oLCBpbmNsdWRlL3RocmVhZC5oLCBsb2FkZXIvdGFzay5jLCBzY2hlZHVsZXIvcHJvY2Vzcy5jLCBzY2hlZHVsZXIvc3lzZGVwcy5jLCBzY2hlZHVsZXIvdGhyZWFkLmMsIHdpbmRvd3MvcXVldWUuYywgd2luZG93cy93aW4uYywgd2luZG93cy93aW5wcm9jLmM6CglQcm9jZXNzIGFuZCB0aHJlYWQgaWQgbm93IHVzZSB0aGUgc2VydmVyLXNpZGUgaWQgaW5zdGVhZCBvZiBhbgoJb2JmdXNjYXRlZCBwb2ludGVyLgoKCSogbGlidGVzdC9ndWl0ZXN0LmMsIGxpYnRlc3QvZ3VpdGVzdC5yYywgbGlidGVzdC9ndWl0ZXN0LnJoOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglUaGUgV2luZG93cyBHVUkgYmVoYXZpb3VyIHRlc3RlciB1c2VkIG9uIHRoZSBXaW5kb3dzIGNvbXB1dGVyLiAgSXQgd2FzCgl1c2VkIHdpdGggQm9ybGFuZCBDKysgNC41MiwgYnV0IHNob3VsZCBiZSBlYXN5IHRvIGFkYXB0IHRvIFdpbmVsaWIgYnkKCXdob2V2ZXIgZmVlbHMgbGlrZSBpdDsgSSBoYXZlbid0LCBJIGp1c3QgcmVsZWFzZWQgdGhpcyB1c2VmdWwgdGVzdCBhcHAKCWluIGNhc2UgaXQgd291bGQgYmVuZWZpdCBvdGhlciBkZXZlbG9wZXJzLgoKCSogZG9jdW1lbnRhdGlvbi9ndWk6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJVGhpcyBmaWxlIGRldGFpbHMgdGhlIHJlc3VsdHMgKG1lc3NhZ2UgdHJhY2VzKSB0aGUgR1VJIGJlaGF2aW91cgoJdGVzdGVyIGFwcCBnYXZlIHVuZGVyIHJlYWwgV2luZG93cyBmb3IgdmFyaW91cyBldmVudHMuIEl0IHdhcyB1c2VmdWwKCWZvciBzb21lIG9mIG15IGRlYnVnZ2luZyBhdCBsZWFzdCwgcGVyaGFwcyBpdCBjb3VsZCBiZSBvZiBzb21lIHVzZSB0bwoJb3RoZXIgV2luZSBHVUkgZGVidWdnZXJzIGFzIHdlbGwuCgoJKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9jb25maWcuaC5pbiwgaW5jbHVkZS9zaWdfY29udGV4dC5oLCBpbmNsdWRlL3dpbm5scy5oLCBtaXNjL3dpbnNvY2suYywgbWlzYy93aW5zb2NrX2Rucy5jLCBtdWx0aW1lZGlhL2Rzb3VuZC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBzdHVkLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJU29tZSBTb2xhcmlzIGZpeGVzLiA8cmVzb2x2Lmg+IG5lZWRzIDxhcnBhL25hbWVzZXIuaD4sIHNpZ19jb250ZXh0LmgKCW5lZWRzIHRvIGRlZmluZSBIQU5ETEVSX0NPTlRFWFQsIHdjdHlwZS5oIGRvZXMgbm90IGxpa2UgJ3dzcHJpbnRmJwoJZGVmaW5lZCwgbXNkb3MvZHBtaS5jIG5lZWRzICJzdGFja2ZyYW1lLmgiIHRvbywgYW5kIG11bHRpbWVkaWEvZHNvdW5kLmMKCW5lZWRzICJ3aW51c2VyLmgiLgoKCSogd2luMzIva2VybmVsMzIuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglHZXRCaW5hcnlUeXBlW0FXXSBtb3ZlZCB0byBsb2FkZXIvbW9kdWxlLmMsIG1vZGlmaWVkIHRvIHJlY29nbml6ZSAuQ09NCglhbmQgLlBJRiBmaWxlcy4KCgkqIGxvYWRlci9kb3MvbW9kdWxlLmMsIG1pc2NlbXUvbWFpbi5jLCBtc2Rvcy9kcG1pLmMsIGluY2x1ZGUvZG9zZXhlLmgsIGluY2x1ZGUvcGVfaW1hZ2UuaCwgbG9hZGVyL21haW4uYywgbG9hZGVyL3BlX2ltYWdlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFkYXB0ZWQgdG8gQ3JlYXRlUHJvY2VzcyBjaGFuZ2VzLgoKCSogbG9hZGVyL25lL21vZHVsZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglORSBtb2R1bGVzIGFkYXB0ZWQgdG8gQ3JlYXRlUHJvY2VzcyBjaGFuZ2VzLgoJTG9hZE1vZHVsZTE2L0xvYWRMaWJyYXJ5MTYgcmVvcmdhbml6YXRpb24uCgoJKiBpbmNsdWRlL21vZHVsZS5oLCBpbmNsdWRlL3Rhc2suaCwgbG9hZGVyL21vZHVsZS5jLCBsb2FkZXIvdGFzay5jLCBzY2hlZHVsZXIvcHJvY2Vzcy5jLCBzY2hlZHVsZXIvdGhyZWFkLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVByb2Nlc3MgY3JlYXRpb24gc2VxdWVuY2UgcmVvcmdhbml6ZWQ6CgktIFJlbW92ZWQgaW5zdGFuY2UgZGF0YSBzZWdtZW50IGZvciBhbGwgYnV0IE5FIG1vZHVsZXMuCgktIENoZWNrIGJpbmFyeSB0eXBlIGluIENyZWF0ZVByb2Nlc3MgYmVmb3JlIGxvYWRpbmcgbW9kdWxlLgoJLSBVbml4IHByb2Nlc3MgY3JlYXRpb24gbW92ZWQgZnJvbSBXaW5FeGVjIHRvIENyZWF0ZVByb2Nlc3MuCgktIEJ1Z2ZpeDogZmlsbCBpbiB0aGRiLT50ZWIuaHRhc2sxNiBtZW1iZXIgY29ycmVjdGx5LgoKCSogd2luZG93cy9pbnB1dC5jOiBHdXkgQWxiZXJ0ZWxsaSA8Z2FsYmVydGVAbmVvLmxydW4uY29tPgoJLSBDb2RlIHRvIHJldHVybiBkZWZhdWx0IGxhbmd1YWdlIGNvZGUgYXMga2V5Ym9hcmQgbGF5b3V0LgoJLSBJbXBsZW1lbnRlZCBvdGhlciBzdHVicyBhc3NvY2lhdGVkIHdpdGgga2V5Ym9hcmQgbGF5b3V0OgoJICBHZXRLZXlib2FyZExheW91dE5hbWVBLCBBY3RpdmF0ZUtleWJvYXJkTGF5b3V0LAoJICBMb2FkS2V5Ym9hcmRMYXlvdXRbQVddLCBHZXRLZXlib2FyZExheW91dExpc3QuCgoJKiBpbmNsdWRlL2NvbW1kbGcuaCwgaW5jbHVkZS9yZXNvdXJjZS5oLCBtaXNjL0F0dGljL2NvbW1kbGcuYywgcmVzb3VyY2VzL3N5c3Jlc19Fbi5yYzoKCUtsYWFzIHZhbiBHZW5kIDxrbGFhc0B2YW5nZW5kLmRlbW9uLm5sPgoJUHJlbGltaW5hcnkgaW1wbGVtZW50YXRpb24gb2YgdGhlIFByaW50RGxnQSBzdHViLgoKCSogb2xlL25scy9ubGQubmxzOiBLbGFhcyB2YW4gR2VuZCA8a2xhYXNAdmFuZ2VuZC5kZW1vbi5ubD4KCU5vdyBjb21wbGlhbnQgdG8gdGhlIER1dGNoIHN0YW5kYXJkcy4KCgkqIHdpbmRvd3Mvd2luLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJRklORF9XbmRQdHIgc2hvdWxkIG5vdCBzZXQgRVJST1JfSU5WQUxJRF9XSU5ET1dfSEFORExFIHdoZW4gaFduZD0wLgoKCSogbXNkb3MvZG9zbWVtLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJRml4ZWQgYSBjb3VwbGUgb2YgZG9zbWVtIGJsb2NrIHJlc2l6ZSBidWdzLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CgktIG5vIG1vcmUgM0QgY2FwYWJpbGl0aWVzIGlmIERpcmVjdDNEIHN1cHBvcnQgaXMgbm90IGNvbXBpbGVkIGluCgktIHNvbWUgZGVidWcgbWVzc2FnZXMgY2xlYW4tdXAgKHJlcGxhY2VkIGZwcmludGZzIGJ5IERVTVBzKQoKCSogbWlzYy9tYWluLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJV2UgZ290IHBhc3NlZCBhIE5VTEwgRGlhbGVjdCBwdHIgYW5kIGFjY2Vzc2VkIGl0IHVucHJvdGVjdGVkLgoKCSogc2VydmVyL2ZpbGUuYywgc2VydmVyL21hcHBpbmcuYywgaW5jbHVkZS9zZXJ2ZXIvb2JqZWN0LmgsIG1lbW9yeS92aXJ0dWFsLmM6CglBZGRlZCBzdXBwb3J0IGZvciBtYXBwaW5ncyB3aXRoIG5vIGFzc29jaWF0ZWQgZmlsZS4KCgkqIGluY2x1ZGUvc2VydmVyLmgsIGluY2x1ZGUvc2VydmVyL3Byb2Nlc3MuaCwgc2NoZWR1bGVyL2NsaWVudC5jLCBzZXJ2ZXIvcHJvY2Vzcy5jLCBzZXJ2ZXIvcmVxdWVzdC5jLCBzZXJ2ZXIvdHJhY2UuYzoKCVJlbW92ZWQgZHN0X2hhbmRsZSBpbiBkdXBsaWNhdGVfaGFuZGxlIHJlcXVlc3QuCglBZGRlZCBpbmhlcml0IGZsYWcgaW4gY3JlYXRlX21hcHBpbmcgcmVxdWVzdC4KCgkqIGluY2x1ZGUvb2FpZGwuaCwgaW5jbHVkZS93aW5lL29ial9vbGVhdXQuaCwgb2xlL3NhZmVhcnJheS5jLCBvbGUvdmFyaWFudC5jOgoJRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50ZWQgc3VwcG9ydCBmb3IgYXJyYXlzIGFuZCBzYWZlIGFycmF5cyBpbiBWQVJJQU5UIGRhdGEKCXN0cnVjdHVyZXMuIEFsc28gbW92ZWQgdGhlIFNBRkVBUlJBWSBkZWZpbml0aW9uICh5ZXQgYWdhaW4pIHRvIHRoZQoJb2JqX29sZWF1dC5oIGZpbGUuCgoJKiB3aW5lLmluaTogQW5kcmVhcyBNb2hyIDxjaXBhbTg5NUBjaXAxLmluZC51bmktc3R1dHRnYXJ0LmRlPgoJRml4ZWQgRmlsZXN5c3RlbSBkb2N1bWVudGF0aW9uLgoKCSogaW5jbHVkZS9iaXRtYXBzL0F0dGljL29ibV9mb2xkZXIsIGluY2x1ZGUvYml0bWFwcy9BdHRpYy9vYm1fZm9sZGVyMjoKCVBhdmVsIFJvc2tpbiA8cGF2ZWxfcm9za2luQGdlb2NpdGllcy5jb20+CglNYWRlIGZvbGRlciBpY29ucyBncmF5LXllbGxvdyBpbnN0ZWFkIG9mIGJsdWUuCgoJKiB3aW5kb3dzL21lc3NhZ2UuYzogRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJT3JkZXIgb2Ygc2VuZCBtZXNzYWdlIHByb2Nlc3Npbmcgd2FzIG5vdCByZXNwZWN0ZWQgYW5kIHRoZSBtZXNzYWdlCglzdGFja2VkIGxhc3QgZmluaXNoZWQgYWZ0ZXIgdGhlIG1lc3NhZ2Ugc3RhY2tlZCBmaXJzdC4KCgkqIHdpbmRvd3Mvd2lucG9zLmM6IEZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCUFkZGVkIGNoZWNrcyB0byBndWFyZCBhZ2FpbnN0IE5VTEwgYWN0aXZlIHdpbmRvdy4KCgkqIHdpbmRvd3MvZGlhbG9nLmM6IE5vcm1hbiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCURvbid0IGNoZWNrIGNoaWxkcmVuIG9mIGRpc2FibGVkIG9yIGludmlzaWJsZSBjb250cm9scyBmb3IgZGlhbG9nCglrZXlib2FyZCBhY2NlbGVyYXRvcnMuIEZpeGVzIHByb2JsZW1zIHdpdGggZGlhbG9ncyB3aXRoIHRhYiBib3hlcy4KCgkqIG9sZS9jb21wb2JqLmMsIHJlbGF5MzIvb2xlMzIuc3BlYzoKCUZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCUltcGxlbWVudGVkIHRoZSBDb1Rhc2tNZW1SZWFsbG9jIEFQSS4gQWxzbyBjbGVhbi11cCBhcm91bmQgdGhhdCBBUEkKCWNhbGwuCgoJKiBvbGUvc3RvcmFnZTMyLmM6IFRodXkgTmd1eWVuIDx0aHV5QG1hY2FkYW1pYW4uY29tPgoJQWRkZWQgYSBtaXNzaW5nIFJlbGVhc2UuCglTVEdNX0NSRUFURSBzaG91bGQgdHJhbnNsYXRlIHRvIENSRUFURV9BTFdBWVMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZyaSBGZWIgMjYgMTI6MzM6MjEgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIERFVkVMT1BFUlMtSElOVFM6IFVwZGF0ZWQgZm9yIG5ldyBuYW1pbmcgY29udmVudGlvbnMuCgoJKiAqLyo6IExhcmdlLXNjYWxlIHJlbmFtaW5nIG9mIGFsbCBXaW4zMiBmdW5jdGlvbnMgYW5kIHR5cGVzIHRvCiAJdXNlIHRoZSBzdGFuZGFyZCBXaW5kb3dzIG5hbWVzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaHUgRmViIDI1IDE4OjExOjQwIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBtaXNjL21haW4uYzogQWxiZXJ0IGRlbiBIYWFuIDxhbGJlcnRkQGNvcmVsLmNhPgoJRm9yIHZhcmlvdXMgcmVhc29ucyBzb21lIG9mIG91ciBsaWJ3aW5lIGV4ZWN1dGFibGVzIG11c3QgaGF2ZSBhICIuIiBpbgoJdGhlaXIgZmlsZSBuYW1lcy4gVGhlICIuIiBjYXVzZXMgdHJvdWJsZSB3aGVuIHRoZSBmaWxlIG5hbWUgaXMgdXNlZCBhcwoJdGhlIGNsYXNzIG5hbWUgZm9yIGFuIFggcmVzb3VyY2UgYXMgd2luZSBkb2VzIGZvciBjb21tYW5kIGxpbmUgcGFyc2luZwoJdW5kZXIgWC4KCgkqIHdpbmRvd3Mvd2luLmM6CglNYWtlIEdldFdpbmRvd0xvbmcoR1dMX0hXTkRQQVJFTlQpIHJldHVybiB0aGUgc2FtZSB0aGluZyBhcwoJR2V0UGFyZW50MzI7IHN1Z2dlc3RlZCBieSBEYXZlIFBpY2tsZXMgPGRhdmVwQG51Z2F0ZS5kZW1vbi5jby51az4uCgoJKiBpbmNsdWRlL2dkaS5oLCBpbmNsdWRlL2hlYXAuaCwgaW5jbHVkZS93aW50eXBlcy5oOgoJRGF2aWQgTHV5ZXIgPGx1eWVyQHVjcy51d2EuZWR1LmF1PgoJQWRkZWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpIG9uIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGRlY2xhcmVkIGluCgloZWFkZXIgZmlsZXMuCgoJKiBkb2N1bWVudGF0aW9uL2J1Z3JlcG9ydHM6IEFkYW0gdGhlIEphenogR3V5IDxtYWdpY2JveEBiZXN0d2ViLm5ldD4KCUFkZGVkICJUaGUgRWFzeSBXYXkiIGFuZCAiVGhlIEhhcmQgV2F5IiwgbGFyZ2VseSBmYXZvcmluZyB0aGUgZWFzeSB3YXksCgl3aGljaCB1c2VzIG15IGJ1Z19yZXBvcnQucGwgc2NyaXB0LgoJQWRkZWQgaW5mbyBvbiBhIGNvbW1hbmQgdGhhdCBjYW4gYmUgcnVuIG9uIGFsbCBzaGVsbHMgdG8gcHJpbnQgZGVidWcKCW1zZ3MgdG8gYSBmaWxlIGFuZCBub3QgdG8geHRlcm0uCgoJKiBtc2Rvcy9kcG1pLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQHN0dWQuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglOZWVkcyB0aHJlYWQuaCBmb3Igbm9uLUxpbnV4LgoKCSogaW5jbHVkZS93aW4uaCwgd2luZG93cy93aW4uYzoKCUZyYW5jb2lzIEJvaXN2ZXJ0IDxmcmFuY29pc0BtYWNhZGFtaWFuLmNvbT4KCUFkZGluZyBvZiBuZXcgZnVuY3Rpb25zIHRvIG1ha2UgdGhlIHduZCBzdHJ1Y3QgdGhyZWFkIHNhZmUuIEFkZGluZyBvZgoJaXJlZkNvdW50IGluIHduZCBzdHJ1Y3QuCgoJKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgY29uc29sZS9uY3Vyc2VzLmMsIGluY2x1ZGUvYWNjb25maWcuaCwgaW5jbHVkZS9jb25maWcuaC5pbjoKCU1pY2hhZWwgVmVrc2xlciA8bXZla3NsZXJAdGVjaHVuaXgudGVjaG5pb24uYWMuaWw+CglBZGRlZCBjb25maWd1cmUgY2hlY2sgZm9yIGdldGJrZ2QgYW5kIGRlZmluZSBIQVZFX0dFVEJLR0QuCgoJKiBpbmNsdWRlL29jaWRsLmgsIGluY2x1ZGUvb2xlMi5oLCBpbmNsdWRlL29sZWlkbC5oLCBpbmNsdWRlL3dpbmUvb2JqX2NhY2hlLmgsIGluY2x1ZGUvd2luZS9vYmpfY29ubmVjdGlvbi5oLCBpbmNsdWRlL3dpbmUvb2JqX2NvbnRyb2wuaCwgaW5jbHVkZS93aW5lL29ial9pbnBsYWNlLmgsIGluY2x1ZGUvd2ludHlwZXMuaCwgb2xlL29sZWZvbnQuYzoKCVBhdWwgUXVpbm4gPHBhdWxxQGNvcmVsLmNhPgoJTWFueSBpbnRlcmZhY2UgZGVjbGFyYXRpb25zIHRoYXQgb3JpZ2luYXRlZCBmcm9tIG9sZWlkbC5oLCBvYWlkbC5oIGFuZAoJb2NpZGwuaCBzZXBhcmF0ZWQgaW50byBzb21ld2hhdCByZWxldmFudCBvYmpfKiBmaWxlcy4KCgkqIGZpbGVzL2RyaXZlLmMsIG9sZS9jb21wb2JqLmMsIHJlc291cmNlcy9zeXNyZXMuYzoKCU1pY2hhZWwgVmVrc2xlciA8bXZla3NsZXJAdGVjaHVuaXgudGVjaG5pb24uYWMuaWw+CglGaXhlZCB3YXJuaW5nIGFuZCBjb21waWxhdGlvbiBlcnJvcnMuCgoJKiBpbmNsdWRlL3dpbmRvd3MuaDogTWljaGFlbCBWZWtzbGVyIDxtdmVrc2xlckB0ZWNodW5peC50ZWNobmlvbi5hYy5pbD4KCVJlbW92ZWQgaW5jbHVkZXMgb2Ygd2luZS8qIGhlYWRlcnMuCgoJKiBsb2FkZXIvcmVzb3VyY2UuYzogUGF2ZWwgUm9za2luIDxwYXZlbF9yb3NraW5AZ2VvY2l0aWVzLmNvbT4KCU1hZGUgbWVzc2FnZSAiUmVzb3VyY2Ugbm90IGZvdW5kIiBXQVJOLgoKCSogZGxscy9zaGVsbDMyL2NvbnRtZW51LmMsIGluY2x1ZGUvc2hsb2JqLmg6CglBZHJpYW4gVGh1cnN0b24gPGFkcmlhbnRAQ09SRUwuQ0E+CgktIFVzZSB0aGUgbmV3IENPTSBkZWZpbml0aW9uIG1hY3JvcyBpbiB0aGUgaGVhZGVyLgoJLSBQdXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBvYmplY3QgaW4gdGhlIGNvbnRtZW51LmMuCgktIE1ha2UgYXBwcm9wcmlhdGUgbmFtZSBjaGFuZ2VzIGluIGNvbnRtZW51LmMuCgoJKiBtaXNjL3JlZ2lzdHJ5LmMsIGluY2x1ZGUvd2lucmVnLmg6IFBhdWwgUXVpbm4gPHBhdWxxQGNvcmVsLmNhPgoJWnlnbyBCbGF4ZWxsIDx6eWdvYkBjb3JlbC5jYT4KCU1vZGlmaWVzIHBhcmFtZXRlciBsaXN0IG9mIGEgY291cGxlIG9mIGZ1bmN0aW9ucyB0byBjb21wbHkgd2l0aCBTREsuCgoJKiB3aW5kb3dzL3Njcm9sbC5jOiBQYXNjYWwgTGVzc2FyZCA8cGFzY2FsQG1hY2FkYW1pYW4uY29tPgoJU2Nyb2xsREMzMiBtb2RpZmllZCB0byByZXR1cm4gcmVjdCBpbiBsb2dpY2FsIGNvb3JkaW5hdGUuCgoJKiBpbmNsdWRlL3dpbmUvb2JqX29sZWF1dC5oOiBBZHJpYW4gVGh1cnN0b24gPGFkcmlhbnRAQ09SRUwuQ0E+CglBZGRzIEMrKyBuYW1lbGVzcyB1bmlvbiBzdXBwb3J0IHRvIHRhZ1ZBUklBTlQuCgoJKiBpbmNsdWRlL21tc3lzdGVtLmgsIGluY2x1ZGUvb2FpZGwuaCwgaW5jbHVkZS9vbGVhdXRvLmg6CglBZHJpYW4gVGh1cnN0b24gPGFkcmlhbnRAQ09SRUwuQ0E+CglNb3ZlZCBzb21lIGRlZmluaXRpb25zIG91dCBvZiBvbGVhdXRvLmggYW5kIGludG8gb2FpZGwuaCB0byBjb25mb3JtIHRvIHRoZSBTREsuCglSZW1vdmVkIGEgcmVkdW5kYW50IGluY2x1ZGUuCglBZGRlZCBzb21lIGMrKyBwcm90ZWN0aW9uLgoKV2VkIEZlYiAyNCAxNTo1ODo1MSAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZGxscy9zaGVsbDMyL2VudW1pZGxpc3QuYywgZGxscy9zaGVsbDMyL3BpZGwuYywgZGxscy9zaGVsbDMyL3BpZGwuaCwgZGxscy9zaGVsbDMyL3NobGZvbGRlci5jLCBpbmNsdWRlL3NobG9iai5oOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglDaGFuZ2VkIHBpZGwgc3RydWN0dXJlIHRvIG1hdGNoIHRoZSBwaWRsJ3MgdXNlZCBpbiBsbmstZmlsZXMuCgoJKiBkbGxzL3NoZWxsMzIvc2hlbGxsaW5rLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUltcGxlbWVudGVkIHJlYWRpbmcgb2YgKi5sbmstZmlsZXMuCgoJKiBpbmNsdWRlL3dpbmUvb2JqX3NoZWxsbGluay5oOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CgluZXcgZmlsZSwgaW5jbHVkaW5nIHRoZSBJU2hlbGxMaW5rIGRlZmluaXRpb24uCgoJKiBpbmNsdWRlL21vZHVsZS5oLCBpbmNsdWRlL3BlX2ltYWdlLmgsIGxvYWRlci9lbGYuYywgbG9hZGVyL21haW4uYywgbG9hZGVyL21vZHVsZS5jLCBsb2FkZXIvcGVfaW1hZ2UuYywgbG9hZGVyL3BlX3Jlc291cmNlLmMsIGxvYWRlci9yZXNvdXJjZS5jLCBsb2FkZXIvdGFzay5jLCBzY2hlZHVsZXIvdGhyZWFkLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCU1vZGlmaWVkIHByb2Nlc3MgY3JlYXRpb24gc2VxdWVuY2U6IGNhbGwgUEVfQ3JlYXRlTW9kdWxlIGluIHRoZQoJY29udGV4dCBvZiB0aGUgbmV3IHByb2Nlc3MgKGluIFRBU0tfQ2FsbFRvU3RhcnQpLgoJQ2hhbmdlZCBhbGwgUEUvTW9kdWxlIHJvdXRpbmVzIHNvIGFzIHRvIGFsd2F5cyBvcGVyYXRlIG9uIHRoZSBjdXJyZW50Cglwcm9jZXNzOyBhZGFwdGVkIGFsbCBjYWxsZXJzLgoKCSogbXNkb3MvZG9zY29uZi5jLCBtc2Rvcy9kb3NtZW0uYywgbXNkb3MvZHBtaS5jLCBtc2Rvcy9pbnQxNi5jLCBtc2Rvcy9pbnQyMS5jLCBtc2Rvcy9pbnQyYS5jLCBtc2Rvcy9pbnRlcnJ1cHRzLmMsIG1zZG9zL2lvcG9ydHMuYywgbXNkb3MvdnhkLmMsIG1zZG9zL3htcy5jLCBvbGUvc3RvcmFnZS5jLCBvbGUvdHlwZWxpYi5jLCBwcm9ncmFtcy9hdml0b29scy9pY2luZm8uYywgcmVsYXkzMi9yZWxheTM4Ni5jLCB0b29scy9idWlsZC5jLCB3aW5kb3dzL2NsaXBib2FyZC5jLCB3aW5kb3dzL2lucHV0LmMsIGRsbHMvc2hlbGwzMi9jb250bWVudS5jLCBkbGxzL3NoZWxsMzIvZW51bWlkbGlzdC5jLCBkbGxzL3NoZWxsMzIvZm9sZGVycy5jLCBkbGxzL3NoZWxsMzIvc2hlbGxsaW5rLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9sZS5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jLCBncmFwaGljcy9kM2RkZXZpY2VzLmMsIGdyYXBoaWNzL2QzZGV4ZWN1dGVidWZmZXIuYywgZ3JhcGhpY3MvZDNkbGlnaHQuYywgZ3JhcGhpY3MvZDNkbWF0ZXJpYWwuYywgZ3JhcGhpY3MvZDNkdGV4dHVyZS5jLCBncmFwaGljcy9kM2R2aWV3cG9ydC5jLCBncmFwaGljcy9kZHJhdy5jLCBsb2FkZXIvbWFpbi5jLCBtZW1vcnkvYXRvbS5jLCBtaXNjL2xzdHIuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJT3B0aW1pemVkIGF3YXkgbW9yZSBpbmNsdWRlcywgcmVhZGRlZCBzb21lICNpbmNsdWRlcyBmb3IgbmVjZXNzYXJ5Cglwcm90b3R5cGVzLgoKCSogbXNkb3MvaW50MmYuYzogPHNtaWxAbWVjaGF0cm9uaWthLmh1PgoJQWRkZWQgbG93LWxldmVsIE5ldHdhcmUgaW5zdGFsbGF0aW9uIGNoZWNrLgoKCSogaW5jbHVkZS9jb25zb2xlLmgsIGNvbnNvbGUvaW50ZXJmYWNlLmMsIGNvbnNvbGUvbmN1cnNlcy5jOgoJSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglBZGRlZCBHZXRCYWNrZ3JvdW5kQ29sb3IgY2FsbCB0byB0aGUgY29uc29sZSBzdHJ1Y3QuIFdpbGwgYmUgdXNlZAoJbGF0ZXIuCgoJKiBtc2Rvcy9pbnQxMC5jOiBKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCUJ1Z2ZpeGVzIGZvciBJTlQgMTAvMEIgKFNldEJhY2tncm91bmRDb2xvcikgdG8gd29yayBwcm9wZXJseS4KCShJbnRlcnJ1cHQgbGlzdCBkaWQgbm90IGhhdmUgY29ycmVjdC4pCgoJKiB3aW5kb3dzL2RpbnB1dC5jOiBMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUFkZGVkIHN0dWJzIGZvciB0d28gbWlzc2luZyBtZXRob2RzIG9mIERJbnB1dC4KCgkqIG9sZS9zdGdfYmlnYmxvY2tmaWxlLmM6IFRodXkgTmd1eWVuIDx0aHV5QG1hY2FkYW1pYW4uY29tPgoJRml4ZWQgYSBidWcuCgoJKiBvbGUvc3RvcmFnZTMyLmMsIG9sZS9zdG9yYWdlMzIuaDogVGh1eSBOZ3V5ZW4gPHRodXlAbWFjYWRhbWlhbi5jb20+CglBZGRlZCBzdXBwb3J0IGZvciBsYXJnZXIgZmlsZXMuCgoJKiBvYmplY3RzL2RpYi5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUZpeGVzIGJ1ZmZlciBvdmVycnVuIHByb2JsZW1zIHdpdGggR2V0RElCaXRzLgoKCSogd2luZG93cy9tZXNzYWdlLmM6IFN0ZXBoYW5lIEx1c3NpZXIgPHN0ZXBoYW5lQG1hY2FkYW1pYW4uY29tPgoJRml4ZWQgc29tZSBTZW5kTWVzc2FnZSBidWdzLgoKCSogb2xlL2NvbXBvYmouYzogU3lsdmFpbiBTdC5HZXJtYWluIDxzeWx2YWluQG1hY2FkYW1pYW4uY29tPgoJRml4IENPTV9FeHRlcm5hbExvY2tGcmVlTGlzdCB0byBkbyBub3QgZmFpbCB3aXRoIGFuIGVtcHR5IGxpc3QuCgpNb24gRmViIDIyIDEwOjIxOjU2IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBtaXNjL01ha2VmaWxlLmluLCBtaXNjL3N0cmluZy5jOgoJWnlnbyBCbGF4ZWxsIDx6YmxheGVsbEBmdXJyeXRlcnJvci5vcmc+CglJbXBsZW1lbnRlZCBzb21lIENSVERMTCBzdHJpbmcgZnVuY3Rpb25zLgoKCSogb2JqZWN0cy9lbmhtZXRhZmlsZS5jLCBvYmplY3RzL2xpbmVkZGEuYywgb2JqZWN0cy9tZXRhZmlsZS5jLCBvYmplY3RzL3RleHQuYywgd2luZG93cy9jYXJldC5jLCB3aW5kb3dzL2NsaXBib2FyZC5jLCB3aW5kb3dzL2RpYWxvZy5jLCB3aW5kb3dzL2RyaXZlci5jLCB3aW5kb3dzL2hvb2suYywgd2luZG93cy9pbnB1dC5jLCB3aW5kb3dzL2tleWJvYXJkLmMsIHdpbmRvd3MvbWRpLmMsIHdpbmRvd3MvbW91c2UuYywgd2luZG93cy9tdWx0aW1vbi5jLCB3aW5kb3dzL3JlY3QuYywgd2luZG93cy9zY3JvbGwuYywgd2luZG93cy90aW1lci5jLCB3aW5kb3dzL3VzZXIuYywgd2luZG93cy93aW5wcm9jLmMsIGluY2x1ZGUvbWVudS5oLCBpbmNsdWRlL21tc3lzdGVtLmgsIGluY2x1ZGUvc3lzbWV0cmljcy5oLCBpbmNsdWRlL3Zmdy5oLCBtdWx0aW1lZGlhL2F1ZGlvLmMsIG11bHRpbWVkaWEvZHBsYXkuYywgbXVsdGltZWRpYS9kc291bmQuYywgbXVsdGltZWRpYS9pbml0LmMsIG11bHRpbWVkaWEvam95c3RpY2suYywgbXVsdGltZWRpYS9tY2lhbmltLmMsIG11bHRpbWVkaWEvbWNpY2RhLmMsIG11bHRpbWVkaWEvbWNpbWlkaS5jLCBtdWx0aW1lZGlhL21jaXN0cmluZy5jLCBtdWx0aW1lZGlhL21jaXdhdmUuYywgbXVsdGltZWRpYS9taWRpLmMsIG11bHRpbWVkaWEvbWl4ZXIuYywgbXVsdGltZWRpYS9tbWF1eC5jLCBtdWx0aW1lZGlhL21taW8uYywgbXVsdGltZWRpYS9tbXN5c3RlbS5jLCBtdWx0aW1lZGlhL3RpbWUuYywgb2JqZWN0cy9jdXJzb3JpY29uLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVNvbWUgbW9yZSByZWN1cnNpdmUgaW5jbHVkZSBmaXhlcy9vcHRpbWl6YXRpb25zLgoKCSogZGxscy9zaGVsbDMyL2NvbnRtZW51LmMsIGRsbHMvc2hlbGwzMi9lbnVtaWRsaXN0LmMsIGRsbHMvc2hlbGwzMi9pY29uY2FjaGUuYywgZGxscy9zaGVsbDMyL3BpZGwuaCwgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CgktIGVsaW1pbmF0ZWQgb25lIGVsZW1lbnQgb2YgdGhlIHBpZGwgc3RydWN0IChkd1NGR0FPKQoJLSBjaGFuZ2VkIHNvbWUgc3VwZXJmbG91cyBGSVhNRQoKCSogZGxscy9zaGVsbDMyL3NobGZvbGRlci5jLCBpbmNsdWRlL3dpbmUvb2JqX2RyYWdkcm9wLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCS0gaGVhZGVyIHVzZXMgdGhlIGxhc3QgbWFjcm9zIG5vdwoJLSByZXdyb3RlIElEcm9wVGFyZ2V0IGFjY29yZGluZyB0byB0aGUgbmV3IENPTSBoZWFkZXJzCgkgICh3YXMgbG9jYWwgZGVjbGFyZWQgbm90IHVzaW5nIHRoZSBhbHJlYWR5IHdyaXR0ZW4gcHJvdG90eXBlcykKCS0gY29ycmVjdGVkIERyb3AgbWV0aG9kICh3cm9uZyBwYXJhbWV0ZXIgY291bnQpCgoJKiB3aW5kb3dzL2RpbnB1dC5jOiBGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCVVwZGF0ZWQgdG8gdXNlIHRoZSBsYXRlc3QgQ09NIG1hY3JvcywgSUNPTV9WVEFCTEUgYW5kIElDT01fVEhJUy4KCUFkZGVkIHRoZSBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24gc3RydWN0dXJlcy4KCUkgcmVtZW1iZXJlZCBmcm9tIGFuIGVtYWlsIHRoYXQgZXZlbiB3aGVuIGFza2VkIGZvciBhCglJRGlyZWN0SW5wdXREZXZpY2VBIHdoYXQgd2FzIHJldHVybmVkIHdhcyBhbiBJRGlyZWN0SW5wdXREZXZpY2UyQSBzbyBJCgljb25zaWRlcmVkIHRoYXQgd2Ugd291bGQgb25seSBpbXBsZW1lbnQgdGhlIGxhdHRlci4gVGhlCglJRGlyZWN0SW5wdXREZXZpY2VBX3h4eCBtZXRob2RzIGhhdmUgYmVlbiByZW5hbWVkIHRvCglJRGlyZWN0SW5wdXREZXZpY2UyQV94eHgsIGFuZCB3ZSBhbHdheXMgcmV0dXJuIG91ciBJRGlyZWN0SW5wdXREZXZpY2UyQQoJaW1wbGVtZW50YXRpb24gYXMgYmVmb3JlLgoJUmVuYW1lZCB0aGUgaW1wbGVtZW50YXRpb24gc3RydWN0dXJlcyB0byBYeHhJbXBsLgoKCSogaW5jbHVkZS9kaW5wdXQuaDogRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglVc2UgbGF0ZXN0IENPTSBtYWNyb3MKCURlZmluZWQgdGhlIElEaXJlY3RJbnB1dERldmljZUEgaW50ZXJmYWNlIGluZGVwZW5kZW50bHkgZnJvbQoJSURpcmVjdElucHV0RGV2aWNlMkEuCglSZW1vdmVkIHRoZSAzMiBzdWZmaXggb2YgdGhlIGludGVyZmFjZXMuIEhvcGVmdWxseSB0aGlzIHdpbGwgbm90CgljYXVzZSBhbnkgcHJvYmxlbSB3aXRoIHRoZSByZW5hbWluZy4KCU1vdmVkIHRoZSBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBzdHVmZiB0byBkaW5wdXQuYyAod2VsbCwgdGhlCglpbnRlcmZhY2VzIGF0IGxlYXN0KS4KClN1biBGZWIgMjEgMTg6MzU6MjggMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHNjaGVkdWxlci9wcm9jZXNzLmMsIHNjaGVkdWxlci9zeXNkZXBzLmMsIGluY2x1ZGUvcHJvY2Vzcy5oLCBpbmNsdWRlL3RocmVhZC5oOgoJQ2hhbmdlZCBpbml0aWFsIHByb2Nlc3MgY3JlYXRpb24gdG8gYXZvaWQgbWVtb3J5IGFsbG9jYXRpb25zLgoJUmVtb3ZlZCBhIGZldyB1bnVzZWQgZmllbGRzIGluIFBEQiBhbmQgVEhEQi4KCgkqIHNjaGVkdWxlci9jbGllbnQuYywgc2NoZWR1bGVyL3RocmVhZC5jOgoJUmVtb3ZlZCB0aHJlYWQgcXVldWUgZnVuY3Rpb25zLgoJQ2hhbmdlZCBpbml0aWFsIHRocmVhZCBjcmVhdGlvbiB0byBhdm9pZCBtZW1vcnkgYWxsb2NhdGlvbnMuCglNb3ZlZCBzZXJ2ZXIgc3RhcnR1cCB0byBUSFJFQURfQ3JlYXRlSW5pdGlhbFRocmVhZC4KCgkqIHNjaGVkdWxlci9zeW5jaHJvLmM6CglSZW1vdmVkIHVzZSBvZiBwZXItdGhyZWFkIHdhaXRfc3RydWN0LCBjbGVhbmVkIHVwIGEgYml0LgoKCSogc2NoZWR1bGVyL2szMm9iai5jLCBtZW1vcnkvdmlydHVhbC5jOiBSZW1vdmVkIE1FTV9NQVBQRURfRklMRV9PcHMuCgoJKiBpbmNsdWRlL3dpbm50Lmg6IEFkZGVkIGEgZmV3IGV4Y2VwdGlvbiBjb2Rlcy4KCgkqIHdpbmRvd3Mvd2luLmMsIGluY2x1ZGUvbW1zeXN0ZW0uaCwgaW5jbHVkZS9wYXRoLmgsIGluY2x1ZGUvcHJvZ3Jlc3MuaCwgaW5jbHVkZS9xdWV1ZS5oLCBpbmNsdWRlL3Jlc291cmNlLmgsIGluY2x1ZGUvc3RydWN0MzIuaCwgaW5jbHVkZS91cGRvd24uaCwgaW5jbHVkZS93aW5kb3dzLmgsIGluY2x1ZGUvd2lucG9zLmgsIGxvYWRlci9tYWluLmMsIG1pc2MvY29tbWRsZy5jLCBtaXNjL3dpbnNvY2tfZG5zLmMsIG11bHRpbWVkaWEvbW1zeXN0ZW0uYywgaW5jbHVkZS9jdXJzb3JpY29uLmgsIGluY2x1ZGUvZGRlX2F0b20uaCwgaW5jbHVkZS9kZHJhdy5oLCBpbmNsdWRlL2Rpc3BkaWIuaCwgaW5jbHVkZS9kb3NleGUuaCwgaW5jbHVkZS9kc291bmQuaCwgY29udHJvbHMvbWVudS5jOgoJTWljaGFlbCBWZWtzbGVyIDxtdmVrc2xlckB0ZWNodW5peC50ZWNobmlvbi5hYy5pbD4KCS0gRml4IGhlYWRlcnMgdG8gaW5jbHVkZSBsZXNzIG9yIHNtYWxsZXIgaGVhZGVyIGZpbGVzLgoJLSBGaXggaGVhZGVyIGFuZCBzb3VyY2UgZmlsZXMgdG8gaW5jbHVkZSBtaXNzaW5nIGhlYWRlciBmaWxlcyB0byBhdm9pZAoJICB3YXJuaW5ncyBhbmQgZXJyb3JzLgoKCSogbG9hZGVyL3NpZ25hbC5jLCBtZW1vcnkvbGR0LmMsIG1pc2MvcG9ydC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglDaGFuZ2UgImciIChnZW5lcmFsIHJlZ3MpIGludG8gInIiIChoYXJkcmVncykgaW4gY2xvbmUgLyBtb2RpZnlfbGR0IC8KCXdpbmVfc2lnYWN0aW9uIF9fUElDX18gY2FzZXMsIHNpbmNlICJnIiB3aWxsIG5vdCB3b3JrIHdpdGgKCS1mb21pdC1mcmFtZS1wb2ludGVyICgiZyIgaXMgcmVmZXJlbmNlZCB1c2luZyAlZXNwIHdoaWNoIHdhcwoJaW52YWxpZGF0ZWQgYmVmb3JlKS4gQnVnIGZvdW5kIGFuZCAob3RoZXIpIGZpeCBzdWdnZXN0ZWQgYnkKCTxkYW5pZWxAbWF0LnV0ZnNtLmNsPiBEYW5pZWwgU2VycGVsbC4KCgkqIG9sZS9vbGVmb250LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkZWQgbWlzc2luZyBXSU5BUElzLgoKCSogd2luZG93cy94MTFkcnYvZXZlbnQuYywgd2luZG93cy94MTFkcnYvaW5pdC5jLCBsb2FkZXIvdGFzay5jLCB3aW5kb3dzL2V2ZW50LmMsIHdpbmRvd3MvdHR5ZHJ2L2V2ZW50LmMsIHdpbmRvd3MvdHR5ZHJ2L2luaXQuYywgaW5jbHVkZS9tZXNzYWdlLmgsIGluY2x1ZGUvdHR5ZHJ2LmgsIGluY2x1ZGUveDExZHJ2Lmg6CglTdGVwaGFuZSBMdXNzaWVyIDxzdGVwaGFuZUBtYWNhZGFtaWFuLmNvbT4KCUZpeCBwcm9ibGVtIHdoZXJlIHlvdSBuZWVkIG1vdXNlIGFjdGl2aXR5IHRvIHVubG9jayBzb21lIDE2IGJpdHMKCXRocmVhZCB3aXRoIG11bHRpLXRocmVhZGVkIGFwcHMuCgpTYXQgRmViIDIwIDE2OjQ4OjU0IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiByZWxheTMyL29sZWF1dDMyLnNwZWMsIGluY2x1ZGUvQXR0aWMvaW50ZXJmYWNlcy5oLCBpbmNsdWRlL29haWRsLmgsIGluY2x1ZGUvb2NpZGwuaCwgaW5jbHVkZS9vbGUuaCwgaW5jbHVkZS9vbGVhdXRvLmgsIGluY2x1ZGUvb2xlY3RsLmgsIGluY2x1ZGUvd2luZS9vYmpfb2xlYXV0LmgsIGluY2x1ZGUvd2luZS9vYmpfb2xlZm9udC5oLCBpbmNsdWRlL3d0eXBlcy5oLCBvbGUvTWFrZWZpbGUuaW4sIG9sZS9ndWlkLmMsIG9sZS9vbGUyZGlzcC5jLCBvbGUvb2xlZm9udC5jLCBvbGUvdHlwZWxpYi5jOgoJRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50ZWQgdGhlIE9sZUNyZWF0ZUZvbnRJbmRpcmVjdCBtZXRob2QgYW5kIHRoZSBhc3NvY2lhdGVkIENPTQoJb2JqZWN0LiBUaGF0IG9iamVjdCBzdXBwb3J0cyB0aGUgSUZvbnQgYW5kIElEaXNwYXRjaCBpbnRlcmZhY2VzLgoKCSogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvY29uZmlnLmguaW4sIG1pc2MvcG9ydC5jLCBtaXNjL3dpbnNvY2suYywgbWlzYy93aW5zb2NrX2Rucy5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglQcm9ibGVtcyByZXBvcnRlZCBieSBEb25hbGQgUGFnZSwgUFIgMTA1LTEwNy4KCgkqIGNvbnNvbGUvbmN1cnNlcy5jOiBKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCU1vcmUgY29tbWVudGluZywgYmV0dGVyIGRlYnVnZ2luZyBvZiBjb2xvciBwcm9ibGVtcywgYW5kIHN1cHBvcnQgZm9yCgl0aGUgbmV3IFRlcm1pbmFsVHlwZSBvcHRpb24gaW4gd2luZS5pbmkuIFRoaXMgYWxsb3dzIHVzIHRvIHNlbGVjdAoJd2hpY2ggdGVybWluYWwgdHlwZSB3ZSBhcmUgcmVhbGx5IHVzaW5nIHNvIHRoYXQgd2UgY2FuLCBmb3IgZXhhbXBsZSwKCXVzZSBpdHMgY29sb3IgY2FwYWJpbGl0aWVzLgoKCSogY29uc29sZS9pbnRlcmZhY2UuYywgaW5jbHVkZS9jb25zb2xlLmg6CglKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCVN1cHBvcnQgZm9yIHRoZSBuZXcgSW5pdGlhbFJvd3MgYW5kZiBJbml0aWFsQ29sdW1ucyBvcHRpb25zIGluIHdpbmUuaW5pCgkoR2VuZXJpYyByZXBsYWNlbWVudCBmb3IgWHRlcm1SZXNvbHV0aW9uIG9wdGlvbi4uLikKCgkqIG1zZG9zL2ludDEwLmM6IEpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJRml4ICpEVUgqIHByb2JsZW0gY2F1c2luZyBsb3RzIGFuZCBsb3RzIG9mIHVubmVjZXNzYXJ5IEFsbG9jQ29sb3IgZXJyb3JzLgoKCSogY29uc29sZS94dGVybS5jOiBKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCVJlbW92YWwgb2Ygb2Jzb2xldGUgWHRlcm1SZXNvbHV0aW9uIG9wdGlvbi4KCgkqIGRvY3VtZW50YXRpb24vY29uc29sZSwgd2luZS5pbmk6CglKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCUFkZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbmV3IHdpbmUuY29uZiBvcHRpb25zLgoKCSogZGVidWdnZXIvc3RhY2suYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglGaXhlZCBiYWNrdHJhY2sgaXNzdWUgb24gMTZiaXQgY29kZS4KCgkqIGRlYnVnZ2VyL21zYy5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUNoYW5nZWQgTG9jYXRlRGVidWdJbmZvRmlsZSB0byByZWR1Y2Ugc3RhY2sgY29uc3VtcHRpb24gKGZyb20gMTNrIHRvIDJrICEhKQoKCSogZGVidWdnZXIvaW5mby5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUZpeGVkIGNvbW1lbnQgZm9yIFdpbmUgZG9jdW1lbnRhdGlvbi4KCgkqIGluY2x1ZGUvc2VydmVyLmgsIGluY2x1ZGUvc2VydmVyL3JlcXVlc3QuaCwgc2VydmVyL3JlcXVlc3QuYywgc2VydmVyL3RyYWNlLmM6CglBZGRlZCBnZXQvc2V0X2hhbmRsZV9pbmZvIHJlcXVlc3QuCgoJKiBncmFwaGljcy94MTFkcnYvZGliLmM6CglGaXhlZCBlbmQtb2YtbGluZSBidWcgaW4gWDExRFJWX0RJQl9TZXRJbWFnZUJpdHNfUkxFNC4KCgkqIHRvb2xzL3dyYy9DSEFOR0VTLCB0b29scy93cmMvZ2VucmVzLmMsIHRvb2xzL3dyYy9uZXdzdHJ1Yy5jLCB0b29scy93cmMvcGFyc2VyLnksIHRvb2xzL3dyYy93cmMuaCwgdG9vbHMvd3JjL3dyY3R5cGVzLmgsIHRvb2xzL3dyYy93cml0ZXJlcy5jOgoJQmVydGhvIFN0dWx0aWVucyA8YmVydGhvQHBhbnRlci5zb2NpLmFhdS5kaz4KCUZpeCBhIGNvdXBsZSBvZiA2NGJpdCBwbGF0Zm9ybSBwcm9ibGVtcyBhbmQgc3BlZWQgdXAgY29tcGlsYXRpb24uIFNlZQoJdG9vbHMvd3JjL0NIQU5HRVMgZm9yIGRldGFpbHMuCgoJKiBtdWx0aW1lZGlhL21taW8uYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CgltbWlvRGVzY2VuZDogZGVidWdvdXRwdXQgZW5oYW5jZWQsIEZJTkRMSVNUL0ZJTkRSSUZGIHNob3VsZCBDaGVjayB0aGUKCWNvcnJlY3QgY2tpZCAoTElTVC9SSUZGKSB0b28uICh2ZXJpZmllZCBhZ2FpbnN0IG1jaWF2aTMyLmRsbCkKCgkqIE1ha2VmaWxlLmluOiBaeWdvIEJsYXhlbGwgPHpibGF4ZWxsQGZ1cnJ5dGVycm9yLm9yZz4KCUFkZGVkIGEgY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2Ygd2luZS5zeW0gYmVmb3JlIGluc3RhbGxpbmcgaXQuCgoJKiBpbmNsdWRlL29sZTIuaCwgb2xlL29sZTIuYywgcmVsYXkzMi9vbGUzMi5zcGVjOgoJRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJQWRkZWQgc29tZSBuZXcgc3R1YnMgZm9yIHRoZSBPTEUgbWVudSBkZXNjcmlwdG9yIG1ldGhvZHMuCgpGcmkgRmViIDE5IDE2OjUwOjI0IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiB3aW5kb3dzL3F1ZXVlLmM6IE1hcnRpbiBXYWxrZXIgPG13YWxrZXJAY2FjaS5jby51az4KCUZpeGVkIG1lc3NhZ2UgZmlsdGVyaW5nIGNoZWNrLgoKCSogcmVsYXkzMi9hZHZhcGkzMi5zcGVjLCBkbGxzL2FkdmFwaTMyL3NlY3VyaXR5LmMsIGRsbHMvbnRkbGwvbnQuYywgZGxscy9udGRsbC9ydGwuYywgaW5jbHVkZS9udGRkay5oLCBpbmNsdWRlL250ZGVmLmgsIGluY2x1ZGUvbnRkbGwuaCwgaW5jbHVkZS9xdWV1ZS5oLCBpbmNsdWRlL3dpbmJhc2UuaCwgaW5jbHVkZS93aW5udC5oLCBpbmNsdWRlL3dpbnJlZy5oLCBvbGUvb2xlb2JqLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCS0gbWFkZSB0aGUgc2VjdXJpdHkgZnVuY3Rpb25zIGNvbnNpc3RlbnQuIGFkdmFwaSBjYWxscyBkb3duIHRvIG50ZGxsIG5vdwoJLSBuZXcgU2V0U2VjdXJpdHlEZXNjcmlwdG9yR3JvdXAsICBTZXRTZWN1cml0eURlc2NyaXB0b3JPd25lciwKCSAgU2V0U2VjdXJpdHlEZXNjcmlwdG9yU2FjbCwgR2V0U2VjdXJpdHlEZXNjcmlwdG9yRGFjbAoJLSBudC1oZWFkZXIgY2xlYW51cAoKCSogZGxscy9udGRsbC9ydGwuYywgaWYxNjMyL2J1aWx0aW4uYywgbWlzYy9jcHUuYywgd2luMzIva2VybmVsMzIuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJRml4ZWQgYSBmZXcgYnJva2VuIGluY2x1ZGVzLgoKCSogd2luZG93cy9ub25jbGllbnQuYzogUmV2ZXJ0ZWQgYnJva2VuIGNsb3NlIGJ1dHRvbiBjaGFuZ2UuCgoJKiBkbGxzL2NvbWN0bDMyL2hlYWRlci5jLCBkbGxzL2NvbWN0bDMyL3JlYmFyLmMsIGRsbHMvY29tY3RsMzIvdGFiLmMsIGRsbHMvY29tY3RsMzIvdG9vbGJhci5jLCBkbGxzL2NvbWN0bDMyL3Rvb2x0aXBzLmMsIGRsbHMvY29tY3RsMzIvdXBkb3duLmMsIGRsbHMvc2hlbGwzMi9jb250bWVudS5jLCBkbGxzL3NoZWxsMzIvZGF0YW9iamVjdC5jLCBncmFwaGljcy9wYXRoLmMsIGdyYXBoaWNzL3BzZHJ2L2luaXQuYywgdG9vbHMvd3JjL25ld3N0cnVjLmMsIGNvbnRyb2xzL2J1dHRvbi5jLCBjb250cm9scy9lZGl0LmMsIGNvbnRyb2xzL3dpZGdldHMuYywgZGxscy9hZHZhcGkzMi9hZHZhcGkuYywgZGxscy9hZHZhcGkzMi9zZWN1cml0eS5jOgoJSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPgoJQWRkZWQgbWlzc2luZyBzdHJpbmcuaCBpbmNsdWRlLgoKCSogbG9hZGVyL25lL21vZHVsZS5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJT25seSBhcHBlbmQgLmRsbCBpZiBubyBleHRlbnNpb24geWV0LgoKCSogd2luZG93cy9tZXNzYWdlLmM6IEZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCVRlbXBvcmFyeSBmaXggc3VnZ2VzdGVkIGJ5IFVscmljaCB0byBhbGxvdyB0aGUKCU1zZ1dhaXRGb3JNdWx0aXBsZU9iamVjdCBtZXRob2QgdG8gYmUgY2FsbGVkIGZyb20gMTYgYml0IHRocmVhZHMuCgoJKiB3aW5kb3dzL3dpbnByb2MuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglJbml0aWFsaXplZCByZXR1cm4gdmFsdWUgb2YgMTYtPjMyIGNvbnZlcnNpb24gb2YgV01fTURJR0VUQUNUSVZFIGluCgljYXNlIGl0J3Mgc2VudCB0byBhIHdpbmRvdyB0aGF0IGRvZXNuJ3QgaGFuZGxlIGl0IChpLmUuIG5vdCBNREkKCWNsaWVudCkuCgoJKiBpbmNsdWRlL2RjZS5oLCB3aW5kb3dzL2RjZS5jLCB3aW5kb3dzL3dpbnBvcy5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglBZGRlZCBleHRyYSBjaGlsZCBhcmd1bWVudHMgdG8gRENFX0dldFZpc1JnbigpIHRvIGJlIGFibGUgdG8gaGFuZGxlCglQQVJFTlREQyBjbGFzcyBzdHlsZSBjb21iaW5lZCB3aXRoIENMSVBDSElMRFJFTiB3aW5kb3cgc3R5bGUsIHRvCglwcmV2ZW50IG1pcy1yZWRyYXdzIGluIEZyZWUgQWdlbnQgMTYtYml0LgoKCSogZGxscy92ZXJzaW9uL2luZm8uYzogTGF3c29uIEEuIFdoaXRuZXkgPGxhd3Nvbl93aGl0bmV5QGp1bm8uY29tPgoJRG9uJ3QgaGFuZyBvbiB0aGUgbGFzdCBjaGlsZCBpZiBpdCdzIG5vdCB3YW50ZWQuCgoJKiB3aW4zMi9rZXJuZWwzMi5jLCByZWxheTMyL2tlcm5lbDMyLnNwZWM6IElhbiBTY2htaWR0IDxpcnNtYW5AaWFnLm5ldD4KCVBhcnRpYWwgc3R1YiBpbXBsZW1lbnRhdGlvbiBvZiB1bmRvY3VtZW50ZWQgS0VSTkVMIHJvdXRpbmUgUEsxNkZORiwKCW5lZWRlZCBieSBXaW45OCBFWFBMT1JFUi4gVGhhbmtzIHRvIFVscmljaCBXZWlnYW5kIGZvciBpbmZvcm1hdGlvbi4KCgkqIG1pc2MvY29tbWRsZy5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUZpeCByZWRyYXcgcHJvYmxlbXMgZm9yIENob29zZUNvbG9yIGRpYWxvZy4KCgkqICovKi5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVJlbW92ZWQgYSBsb3Qgb2Ygb2NjdXJlbmNlcyBvZiB3aW5kb3dzLmggKGFuZCBhZGRlZCBuZWNlc3Nhcnkgb3RoZXIKCWluY2x1ZGVzKS4KCgkqIGluY2x1ZGUvb2JqaWRsLmgsIGluY2x1ZGUvd2luZS9vYmpfbW9uaWtlci5oLCBvbGUvY29tcG9iai5jLCBkbGxzL3NoZWxsMzIvZGF0YW9iamVjdC5jLCBkbGxzL3NoZWxsMzIvZW51bWlkbGlzdC5jOgoJRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglTbWFsbCBmaXhlcy4KCgkqIGluY2x1ZGUvZHNvdW5kLmgsIG11bHRpbWVkaWEvZHNvdW5kLmM6CglGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCUNoYW5nZWQgdGhlIGZpcnN0IHBhcmFtZXRlciBmcm9tIExQR1VJRCAoV2luZG93cyBoZWFkZXJzKSB0byBSRUZHVUlELgoJVGhpcyBtYWtlcyBpdCBhICdjb25zdCBHVUlEKicgd2hpY2ggbWVhbnMgRGlyZWN0U291bmRDcmVhdGUgbXVzdCBub3QKCWNoYW5nZSBpdC4KCgkqIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uaDogRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglSZW1vdmVkIHJlZHVuZGFudCBkZWZpbml0aW9ucyBvZiBJc0VxdWFsSUlEIGFuZCBJc0VxdWFsQ0xTSUQgKHNlZQoJaW5jbHVkZS93aW5lL29ial9iYXNlLmgpCgpUaHUgRmViIDE4IDE3OjM0OjEwIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiByZWxheTMyL3VzZXIzMi5zcGVjLCB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy9xdWV1ZS5jLCB3aW5kb3dzL3VzZXIuYywgaW5jbHVkZS9xdWV1ZS5oOgoJU3RlcGhhbmUgTHVzc2llciA8c3RlcGhhbmVAbWFjYWRhbWlhbi5jb20+CgktIE5ldyBpbXBsZW1lbnRhdGlvbiBvZiBTZW5kTWVzc2FnZSwgUmVjZWl2ZU1lc3NhZ2UsIFJlcGx5TWVzc2FnZSBmdW5jdGlvbnMKCSAgdG8gc3VwcG9ydCB0aHJlYWQtc2FmZW5lc3MsIGFuZCBuZXN0ZWQgU2VuZE1lc3NhZ2UuCgktIEFkZGl0aW9uIG9mIFJlcGx5TWVzc2FnZTMyLgoKCSogd2luZG93cy94MTFkcnYvd25kLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogQ29wZSB3aXRoIE5VTEwgcERyaXZlckRhdGEgaW4gWDExRFJWX1dORF9HZXRYV2luZG93LgoKCSogbWlzYy9jb21tZGxnLmMsIHJlc291cmNlcy9zeXNyZXNfRW4ucmM6CglQYXNjYWwgTGVzc2FyZCA8cGFzY2FsQG1hY2FkYW1pYW4uY29tPgoJQXBwbGllZCB0aGUgY2hhbmdlcyBvZiB0aGUgcmVzdWx0aW5nIGNvbG9yIG9mIHRoZSBjaG9vc2UgY29sb3IgZGlhbG9nLgoJSW5pdGlhbGl6ZSB2YWx1ZXMgaW4gdGhlIGNob29zZSBjb2xvciBkaWFsb2cuCgoJKiBpbmNsdWRlL3dpbmUvb2JqX2Jhc2UuaCwgaW5jbHVkZS93aW5lL29ial9tYXJzaGFsLmg6CglGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCVJlbW92ZWQgcmVmZXJlbmNlcyB0byBJQ09NX0lOSEVSSVRTLgoKCSogb2xlL3N0Z19iaWdibG9ja2ZpbGUuYywgb2xlL3N0b3JhZ2UzMi5jLCBvbGUvc3RvcmFnZTMyLmg6CglUaHV5IE5ndXllbiA8dGh1eUBtYWNhZGFtaWFuLmNvbT4KCUZpeGVkIGJ1ZyB3aXRoIHJlYWQtb25seSBmaWxlcy4KCgkqIG11bHRpbWVkaWEvbWNpYXZpLmMsIG11bHRpbWVkaWEvbWNpbWlkaS5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglSZW1vdmVkIHN1cGVyZmxvdXMgV0lOQVBJIChtaXNtYXRjaCB3aXRoIHByb3RvdHlwZSkgaW4gKl9Ecml2ZXJQcm9jMzIuCgoJKiBpbmNsdWRlL2Rvc2V4ZS5oOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCWRvc2V4ZS5oIGRlcGVuZHMgb24gd2luYmFzZS5oIChmb3IgTFBTVEFSVFVQSU5GTzMyQSkKCgkqIGRsbHMvc2hlbGwzMi9zaGVsbGxpbmsuYywgb2xlL2JpbmRjdHguYywgb2xlL2ZpbGVtb25pa2VyLmMsIG9sZS9pdGVtbW9uaWtlci5jLCBvbGUvc3RnX3N0cmVhbS5jLCBvbGUvc3RvcmFnZTMyLmMsIG9sZS9zdG9yYWdlMzIuaDoKCUZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJTW9kaWZpZWQgc28gdGhhdCB0aGV5IGRvIG5vdCB1c2UgdGhlIFZUQUJMRV9GVU5DIG1hY3JvcyB0aGF0IHBlcmZvcm1lZAoJY2FzdHMgb2YgYWxsIG1ldGhvZHMgcHV0IGluIHRoZSBqdW1wIHRhYmxlLiBJIGZpbmQgaXQgdG9vIHJpc2t5IHRvIHVzZQoJc3VjaCBtYWNyb3MgYmVjYXVzZSBub3RoaW5nIGd1YXJhbnRlZXMgdGhhdCB5b3UgYWN0dWFsbHkgcHV0IHRoZSByaWdodAoJbWV0aG9kIGF0IHRoZSByaWdodCBwbGFjZSBvciB0aGF0IHRoZSBwcm90b3R5cGUgaXMgcmlnaHQuCgoJKiBpbmNsdWRlL3dpbmUvb2JqX21vbmlrZXIuaCwgaW5jbHVkZS93aW5lL29ial9zdG9yYWdlLmgsIG9sZS9zdG9yYWdlLmM6CglGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCVVwZGF0ZWQgdG8gdXNlIHRoZSBsYXRlc3QgQ09NIG1hY3Jvcy4gRGVmaW5lZCBtb3JlIGludGVyZmFjZXMgYW5kIEFQSQoJZnVuY3Rpb25zLgoKCSogY29udHJvbHMvbWVudS5jLCBncmFwaGljcy94MTFkcnYvb2VtYml0bWFwLmMsIGluY2x1ZGUvd2ludXNlci5oLCB3aW5kb3dzL25vbmNsaWVudC5jOgoJRnJhbmNvaXMgQm9pc3ZlcnQ8ZnJhbmNvaXNAbWFjYWRhbWlhbi5jb20+CglJbXBsZW1lbnRhdGlvbiBvZiB0aGUgcHVzaGVkIGNsb3NlIGJ1dHRvbi4KCldlZCBGZWIgMTcgMTc6NDU6NTQgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvbWFwaWRlZnMuaCwgaW5jbHVkZS9vYmpiYXNlLmgsIGluY2x1ZGUvb2xlLmgsIGluY2x1ZGUvb2xlYXV0by5oLCBpbmNsdWRlL3dpbmJhc2UuaCwgaW5jbHVkZS93aW5lL29ial9tb25pa2VyLmgsIGluY2x1ZGUvd2luZS9vYmpfcHJvcGVydHlzdG9yYWdlLmgsIGluY2x1ZGUvd2lubnQuaCwgaW5jbHVkZS93aW50eXBlcy5oLCBpbmNsdWRlL3d0eXBlcy5oLCBvbGUvY29tcG9iai5jOgoJRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglNb3ZlZCBzb21lIGRlZmluaXRpb25zIHRvIHRoZWlyIHByb3BlciBpbmNsdWRlIGZpbGUuCgoJKiBpbmNsdWRlL3dpbmUvb2JqX2NsaWVudHNlcnZlci5oLCBpbmNsdWRlL3dpbmUvb2JqX21pc2MuaDoKCUZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJRml4ZWQgc29tZSBJQ09NX0lOSEVSSVQgc3R1ZmYgYW5kIGFkZGVkIG5ldyByZWxhdGVkIEFQSSBmdW5jdGlvbnMuCgoJKiBpbmNsdWRlL3dpbmUvb2JqX2Jhc2UuaDogRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglBZGRlZCBuZXcgQVBJLiBQYXJ0IG9mIGl0IHdhcyBpbiAnaW5jbHVkZS9vYmpiYXNlLmgnIGJlZm9yZSBhbmQgcGFydAoJb2YgaXQgaXMgbmV3LiBOb3cgaXQgYWxzbyBjb250YWlucyAnV0lORV9TdHJpbmdGcm9tQ0xTSUQnLiBJdCdzIG5vdAoJcGVyZmVjdCBidXQgaXQncyBiZXR0ZXIgdGhhbiBoYXZpbmcgaXQgaW4gJ2luY2x1ZGUvb2JqYmFzZS5oJy4KCgkqIGRsbHMvYWR2YXBpMzIvY3J5cHQuYywgZGxscy9udGRsbC9udC5jLCBncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuYywgc2NoZWR1bGVyL3N5bmNocm8uYywgY29udHJvbHMvc2Nyb2xsLmM6CglGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCUZpeGVkIGEgbnVtYmVyIG9mIHdhcm5pbmdzIGNvbmNlcm5pbmcgdGhlIG1hdGNoaW5nIG9mIHRoZSBwcmludGYKCWZvcm1hdCBzdHJpbmcgYW5kIHRoZSBhc3NvY2lhdGVkIHBhcmFtZXRlcnMgKGFjdHVhbGx5IGl0J3MgbW9zdGx5CglUUkFDRSBhbmQgRklYTUVzKS4KCgkqIGluY2x1ZGUvbW1zeXN0ZW0uaCwgbXVsdGltZWRpYS9tbWlvLmMsIG11bHRpbWVkaWEvbW1zeXN0ZW0uYywgcmVsYXkzMi93aW5tbS5zcGVjOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CgltbWlvRGVzY2VuZDogZml4ZWQgRklORF94eHh4LCB2ZXJpZmllZCB3aXRoIG1jaWF2aTMyLmRsbC4KCW1jaUxvYWRDb21tYW5kUmVzb3VyY2UzMjogc2Vjb25kIGFyZyBpcyB3aWRlIHN0cmluZwoJbWNpR2V0RHJpdmVyRGF0YTogc3BlYyBoYXMganVzdCBvbmUgbG9uZyBhcmd1bWVudAoKCSogb2xlL2NvbXBvYmouYywgb2xlL2lmcy5jLCBvbGUvaWZzLmgsIG9sZS9zdG9yYWdlLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9sZS5jLCBpbmNsdWRlL3dpbmUvb2JqX2Jhc2UuaCwgaW5jbHVkZS93aW5lL29ial9kYXRhb2JqZWN0LmgsIG11bHRpbWVkaWEvZHNvdW5kLmMsIGRsbHMvc2hlbGwzMi9kYXRhb2JqZWN0LmMsIGRsbHMvc2hlbGwzMi9zaGVsbGxpbmsuYzoKCUZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJQ2hhbmdlZCBJQ09NX1RISVMgZGVmaW5pdGlvbi4KCgkqIGRsbHMvdmVyc2lvbi9pbmZvLmMsIGluY2x1ZGUvdmVyLmg6CglCZXJ0aG8gU3R1bHRpZW5zIDxiZXJ0aG9AcGFudGVyLnNvY2kuYWF1LmRrPgoJUmVuYW1lZCBWU19WRVJTSU9OX0lORk94eCBzdHJ1Y3R1cmUgdG8gVlNfVkVSU0lPTl9JTkZPX1NUUlVDVHh4LgoJVGhlIFZTX1ZFUlNJT05fSU5GTyBpcyBhIHNpbXBsZSBkZWZpbmUgYW5kIHdvdWxkIGNhdXNlIGNvbmZ1c2lvbi4KCUFsc28gY29ycmVjdGVkIHRoZSBWU194eF9JTkZPIGRlZmluZXMgbm90IHRvIHVzZSBNQUtFSU5UUkVTT1VSQ0UxNiBmb3Igd2luMzIuCgoJKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjogU3RlZmZlbiBNb2VsbGVyIDxtb2VsbGVyQGViaS5hYy51az4KCSJDb25maWd1cmUgZmluaXNoZWQiIG1lc3NhZ2Ugc3VnZ2VzdHMgdG8gY2FsbCBtYWtlIHdoZW4gbWFrZSBkZXBlbmQKCXdhcyBzdWNjZXNzZnVsLgoKCSogKi8qOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCU9wdGltaXplZCBpbmNsdWRlLyouaDogKHJlY3Vyc2l2ZWx5KSBpbmNsdWRlIGFsbCBoZWFkZXJzIG5lZWRlZCBieQoJdGhpcyAuaCBmaWxlLCBidXQgb25seSB0aG9zZS4gTmVjZXNzYXJ5IGZpeGVzIHRvIGEgbG90IG9mIC5jIGZpbGVzLAoJc3RhcnRlZCBvcHRpbWl6aW5nICJ3aW5kb3dzLmgiIGF3YXkgZnJvbSBzb21lIG9mIHRoZW0uIE1vdmVkCglHZXRDdXJyZW50VGFzayBwcm90b3R5cGUgdG8gd2luZS93aW5iYXNlMTYuaC4KCgkqIGluY2x1ZGUvY29tbWN0cmwuaCwgaW5jbHVkZS9saXN0dmlldy5oLCBkbGxzL2NvbWN0bDMyL2xpc3R2aWV3LmM6CglMdWMgVG91cmFuZ2VhdSA8bHVjQG1hY2FkYW1pYW4uY29tPgoJUHJlbGltaW5hcnkgbGlzdHZpZXcgY29udHJvbCBpbXBsZW1lbnRhdGlvbi4KCgkqIGNvbnRyb2xzL21lbnUuYzogRnJhbmNvaXMgQm9pc3ZlcnQgPGZyYW5jb2lzQG1hY2FkYW1pYW4uY29tPgoJR2l2ZSB0aGUgY29udGV4dCBtZW51IGl0cyBwcm9wZXIgYmVoYXZpb3VyIGFuZCBtb2RpZnkgVHJhY2tQb3B1cE1lbnUKCXRvIGNvbXBseSB3aXRoIHdpbmRvd3MgQVBJLgoKCSogd2luZG93cy9wYWludGluZy5jOiBEYXZlIFBpY2tsZXMgPGRhdmVwQG51Z2F0ZS5kZW1vbi5jby51az4KCUdldFVwZGF0ZVJlY3Qgc2hvdWxkIHJldHVybiBjbGllbnQgY29vcmRpbmF0ZXMgdW5sZXNzIHRoZSB3aW5kb3cgd2FzCgljcmVhdGVkIHdpdGggdGhlIENTX09XTkRDIHN0eWxlIGFuZCB0aGUgbWFwcGluZyBtb2RlIGlzIG5vdCBNTV9URVhULAoJaW4gd2hpY2ggY2FzZSB0aGUgcmVzdWx0IHNob3VsZCBiZSBpbiBsb2dpY2FsIGNvb3JkaW5hdGVzLgoKCSogaW5jbHVkZS93aW5lL29ial9jaGFubmVsLmg6IEZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJQWRkZWQgdGhlIGFjdHVhbCBkZWZpbml0aW9ucyBvZiB0aGUgaW50ZXJmYWNlcy4KCgkqIGluY2x1ZGUvc2VydnByb3YuaDogRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglDb252ZXJ0ZWQgdG8gdGhlIG5ldyBDT00gZGVjbGFyYXRpb24gJ3N0YW5kYXJkJyBmb3IgYmV0dGVyCgljb21wYXRpYmlsaXR5IHdpdGggQyBjb2RlIGltcGxlbWVudGF0aW5nIHRoYXQgaW50ZXJmYWNlLgoKCSogbWlzYy93c3ByaW50Zi5jOiBGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglDaGFuZ2VkIFdQUklOVEZfRXh0cmFjdFZBUHRyIHRvIHRha2UgdGhlIGFkZHJlc3Mgb2YgdGhlIHZhX2xpc3QgdG8gYmUKCWFibGUgdG8gbW9kaWZ5IGl0LgoKCSogZGxscy9zaGVsbDMyL3NobGZvbGRlci5jOiBTeWx2YWluIFN0Lkdlcm1haW4gPHN5bHZhaW5AbWFjYWRhbWlhbi5jb20+CglEZWZpbmVkIElEcm9wVGFyZ2V0IGZvciBTaGVsbEZvbGRlci4gIEltcGxlbWVudGVkIHRoZSBDb25zdHJ1Y3RvciwKCURlc3RydWN0b3IsIEFkZFJlZiwgUmVsZWFzZSBhbmQgUXVlcnlJbnRlcmZhY2UgbWV0aG9kcy4KCgkqIG1lbW9yeS9zZWxlY3Rvci5jLCBpZjE2MzIva2VybmVsLnNwZWM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglDaGFuZ2UgdHlwZSBvZiBtb2RlIGFyZ3VtZW50IHRvIEdFVFZETVBPSU5URVIzMlcgZnJvbSBEV09SRCB0byBXb3JkCgpNb24gRmViIDE1IDE1OjI0OjIwIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpbmNsdWRlL21zYWNtLmgsIGluY2x1ZGUvd2ludXNlci5oOgoJRG91Z2xhcyBSaWRnd2F5IDxyaWRnd2F5QHdpbmVocS5jb20+CgljMm1hbiBkb2Vzbid0IGxpa2UgZXh0cmEgc2VtaWNvbG9ucy4KCgkqIHdpbmRvd3Mvd2lucG9zLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJUmVzZXR0aW5nIFggZm9jdXMgc2hvdWxkIG5vdCBiZSBkb25lIHdpdGggU2V0Rm9jdXMzMi4gQ2FsbGVkCgl0aGUgd2luZG93aW5nIChYMTEpIGRyaXZlcidzIFNldEZvY3VzIHJvdXRpbmUgZGlyZWN0bHkgaW5zdGVhZC4KCVRoaXMgYXBwYXJlbnRseSBmaXhlcyBhIGJpZyBoZWFwIG9mIHVzZXIgaW50ZXJmYWNlIHByb2JsZW1zLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gRmViIDE0IDE0OjA5OjQyIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBncmFwaGljcy9wYWludGluZy5jLCBpbmNsdWRlL3dpbnVzZXIuaCwgb2JqZWN0cy9jdXJzb3JpY29uLmMsIHdpbmRvd3MvZGlhbG9nLmMsIHdpbmRvd3MvcGFpbnRpbmcuYywgd2luZG93cy9yZWN0LmMsIHdpbmRvd3Mvd2luLmMsIHdpbmRvd3Mvd2lucG9zLmM6CglFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUNoYW5nZWQgc29tZSBmdW5jdGlvbnMgcHJvdG90eXBlcyAod2VyZSByZXR1cm5pbmcgdm9pZCkuCgoJKiBtaXNjL21haW4uYywgaW5jbHVkZS93aW51c2VyLmg6IFBhdWwgUXVpbm4gPHBhdWxxQGNvcmVsLmNhPgoJRml4ZWQgc29tZSBXaW5lbGliIG5hbWVzLgoKCSogaW5jbHVkZS9jbGlwYm9hcmQuaCwgaW5jbHVkZS9jb25zb2xlLmgsIGluY2x1ZGUvZGVza3RvcC5oLCBpbmNsdWRlL2tleWJvYXJkLmgsIGluY2x1ZGUvdHR5ZHJ2LmgsIGluY2x1ZGUveDExZHJ2Lmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUNvcnJlY3RlZCBwcm90b3R5cGVzIGZ1bmMoKSAtPmZ1bmModm9pZCkuCgoJKiBtdWx0aW1lZGlhL2luaXQuYywgbXVsdGltZWRpYS9taWRpLmMsIGRlYnVnZ2VyL21lbW9yeS5jOgoJQnJpYW4gSm9zZXBoIEN6YXBpZ2EgPHJvb3RAZ2xhY2lkLmNvbT4KCUZpeGVkIGEgZmV3ICNpZmRlZnMuCgoJKiB3aW5kb3dzL3Njcm9sbC5jLCB3aW5kb3dzL3gxMWRydi93bmQuYzoKCUplcm9tZSBWb3VpbGxvbiA8dm91aWxsb25AY2xhcmFuZXQuZnI+CglNYWtlIGEgY29ycmVjdCB1c2Ugb2YgY2xpcHBpbmcgcmVjdGFuZ2xlcy4KCgkqIGluY2x1ZGUvYml0bWFwcy9vY3JfY3Jvc3M6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBZGRlZCB3aGl0ZSBib3JkZXIuCgoJKiBkZWJ1Z2dlci9kYl9kaXNhc20uYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglJbXBsZW1lbnRlZCBiZXR0ZXIgb3V0cHV0IGZvciBpbmRpcmVjdCBjYWxscy4KCgkqIHJlbGF5MzIvd2lubW0uc3BlYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglGaXhlZCB0eXBvIGluIHdpbm1tLnNwZWMuCgoJKiBpbmNsdWRlL3dpbnR5cGVzLmgsIGluY2x1ZGUvd3JjX3JzYy5oLCBtaXNjL2xzdHIuYywgbWlzYy93c3ByaW50Zi5jLCByZWxheTMyL2J1aWx0aW4zMi5jLCByZWxheTMyL3JlbGF5Mzg2LmMsIHJlbGF5MzIvc25vb3AuYzoKCUdhdnJpZWwgU3RhdGUgPGdhdnJpZWxzQENPUkVMLkNBPgoJQSBmZXcgbm9uLXg4NiBXaW5lbGliIGZpeGVzLgoKCSogbWlzY2VtdS9tYWluLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRG8gbm90IHByaW50ICd3aW5lOiBubyBleGVjdXRlYWJsZSBmb3VuZCcgaWYgd2UgZGlkIGV4ZWN1dGUgc29tZXRoaW5nLgoKCSogcHJvZ3JhbXMvbm90ZXBhZC8qOgoJTWFyY2VsIEJhdXIgPG1iYXVyQGcyNi5ldGh6LmNoPgoJLSBBZGRlZCBuZXcgSURTX05PVFNBVkVEIHJlc3NvdXJjZSAobmVlZHMgdHJhbnNsYXRpb24gaW4gKi5yYykKCS0gSW1wcm92ZWQgcHJpbnRpbmcgc3VwcG9ydCAobm90IHlldCBjb21wbGV0ZSkKCS0gSW1wcm92ZWQgZmlsZSBkcmFnIGFuZCBkcm9wIChzaG91bGQgbm93IHdvcmspCgktIEdlbmVyYWwgY29kZSBjbGVhbnVwCgoJKiBpbmNsdWRlL211bHRpbWVkaWEuaCwgbXVsdGltZWRpYS9tY2ltaWRpLmMsIG11bHRpbWVkaWEvbWNpd2F2ZS5jLCBtdWx0aW1lZGlhL21tc3lzdGVtLmM6CglFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUZpeGVkIGJ1Z3Mgb24gTUNJIG5vdGlmaWNhdGlvbiAoY2FsbGJhY2sgaW5mbyBhcmUgY29waWVkIGJlZm9yZQoJYXN5bmNocm9ub3VzIHJldHVybikgLSBtYWtlIHVzZSBvZiBpdCBpbiBNQ0kgd2F2ZSBhbmQgbWlkaS4KCUltcGxlbWVudGVkIG1jaShTZXR8R2V0KURldmljZUlEKDE2fDMyKSBmdW5jdGlvbnMuCgoJKiB3aW5kb3dzL3gxMWRydi93bmQuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglTaW5jZSBTZXRQYXJlbnQgbm93IGhpZGVzL3Nob3dzLCBleHBsaWNpdGx5IGludmFsaWRhdGluZyBEQ3MgaW4gdGhlCglwYXJlbnQgY2hhbmdlIG9wZXJhdGlvbiBzaG91bGQgbm8gbG9uZ2VyIGJlIG5lY2Vzc2FyeS4KCgkqIHdpbmRvd3MvZGlhbG9nLmM6IEdlcmFyZCBQYXRlbCA8Ry5QYXRlbEBXYW5hZG9vLmZyPgoJRml4IGlmIEVuZERpYWxvZyBjYWxsZWQgaW4gV01fSU5JVERJQUxPRyAoRElBTE9HX0RvRGlhbG9nQm94KS4KCgkqIG1zZG9zL2lvcG9ydHMuYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCU1vdmVkIFZHQSBwb3J0IGFjY2VzcyBjaGVjayBhdCB0aGUgYmVnaW5uaW5nIGluIG9yZGVyIHRvIGltcHJvdmUKCXBlcmZvcm1hbmNlIGEgbGl0dGxlIGJpdC4KCgkqIHNlcnZlci9maWxlLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJSW1wbGVtZW50ZWQgZmxhZyBGSUxFX0ZMQUdfREVMRVRFX09OX0NMT1NFLgoKCSogbXNkb3MvaW50MTAuYzogSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglBZGRlZCBjb21tZW50cy4gVGhpbmsgSSd2ZSBmaXhlZCBJTlQgMTAvMDggKEdldCBDaGFyYWN0ZXIgYW5kCglBdHRyaWJ1dGUgYXQgQ3Vyc29yKS4KCgkqIGNvbnNvbGUveHRlcm0uYzogSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglBZGRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgWHRlcm1Qcm9ncmFtIGFuZCBYdGVybVJlc29sdXRpb24uCglGaXhlZCBhIHdhcm5pbmcuCgoJKiBkb2N1bWVudGF0aW9uL2NvbnNvbGUsIHdpbmUuaW5pOgoJSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglOZXcgZXhhbXBsZXMvZG9jdW1lbnRhdGlvbiBmb3IgY29uc29sZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgoJKiBtaXNjL21haW4uYywgd2luZG93cy94MTFkcnYvbWFpbi5jLCBjb25zb2xlL2dlbmVyaWMuYywgY29uc29sZS9pbnRlcmZhY2UuYywgY29uc29sZS9uY3Vyc2VzLmMsIGNvbnNvbGUvdHR5LmMsIGluY2x1ZGUvY29uc29sZS5oLCBpbmNsdWRlL29wdGlvbnMuaCwgbG9hZGVyL21haW4uYzoKCUpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJTW92ZWQgaW5pdGlhbGl6YXRpb24gdW50aWwgbGF0ZXIuIEFsc28gbW92ZWQgYXJvdW5kIGNvZGUgYSBiaXQgdG8gYmUKCWNvbnNpc3RhbnQuCgoJKiBpbmNsdWRlL2RlYnVnZ2VyLmg6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkZWQgcG9zc2liaWxpdHkgdG8gbG9hZCAuc3RhYnMvLnN0YWJzdHIgc2VjdGlvbnMgZnJvbSBQRSBkbGxzLgoJVW5mb3J0dW5hdGVseSBteSBzYW1wbGVzIHVzZSBjdXJyZW50bHkgdHlwZWRlZnMgd2hpY2ggd2luZS1kYmcgZG9lcwoJbm90IHVuZGVyc3RhbmQsIHNvIG5vIGFjdHVhbCBwYXJzaW5nLgoKCSogZGxscy9tc2FjbS9tc2FjbV9tYWluLmMsIGRsbHMvbXNhY20zMi9mb3JtYXQuYywgZGxscy9tc2FjbTMyL3N0cmVhbS5jLCBpbmNsdWRlL21tcmVnLmgsIGluY2x1ZGUvbW1zeXN0ZW0uaCwgaW5jbHVkZS9tc2FjbS5oLCBpbmNsdWRlL21zYWNtZHJ2LmgsIGluY2x1ZGUvd2luYmFzZS5oOgoJQmVydGhvIFN0dWx0aWVucyA8YmVydGhvQHBhbnRlci5zb2NpLmFhdS5kaz4KCUNoYW5nZSBhIGNvdXBsZSBvZiBuYW1lcyB0aGF0IHdvdWxkIGNvbmZsaWN0IGFmdGVyIGFsbCAzMltBV10gc3VmZml4ZXMKCWFyZSByZW1vdmVkLiBTdHJ1Y3R1cmVzIGRlZmluZWQgaW4gYm90aCBtbXJlZy5oIGFuZCBtbXN5c3RlbS5oIGFyZQoJcHJvdGVjdGVkIHdpdGggI2lmZGVmOnMgYXMgaW4gTVMnIGhlYWRlcnMuCgoJKiBtaXNjL2ltbS5jOiBQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCUZpeGVkIHdyb25nIHR5cGVjYXN0cy4KCgkqIHByb2dyYW1zL3Byb2dtYW4vZ3JwZmlsZS5jOiBTdGVmYW4gTGVpY2h0ZXIgPHNsZUBjYW1saW5lLmNvbT4KCUNvbXBpbGF0aW9uIGZpeC4KCgkqIGNvbmZpZ3VyZS5pbiwgY29uZmlndXJlOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUZpeCBmb3IgWDExIGluY2x1ZGVzIGRldGVjdGlvbi4KCgkqIGRlYnVnZ2VyL2hhc2guYywgZGVidWdnZXIvbXNjLmMsIGRlYnVnZ2VyL3N0YWJzLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFkZGVkIHBvc3NpYmlsaXR5IHRvIGxvYWQgLnN0YWJzLy5zdGFic3RyIHNlY3Rpb25zIGZyb20gUEUgZGxscy4KCVVuZm9ydHVuYXRlbHkgbXkgc2FtcGxlcyB1c2UgY3VycmVudGx5IHR5cGVkZWZzIHdoaWNoIHdpbmUtZGJnIGRvZXMKCW5vdCB1bmRlcnN0YW5kLCBzbyBubyBhY3R1YWwgcGFyc2luZy4KCgkqIG11bHRpbWVkaWEvZHBsYXkuYywgZG9jdW1lbnRhdGlvbi9zdGF0dXMvZGlyZWN0ZHJhdywgZ3JhcGhpY3MvZDNkdmlld3BvcnQuYywgZ3JhcGhpY3MvZGRyYXcuYywgaW5jbHVkZS9kM2QuaDoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU29tZSBkZHJhdy9kM2QgYnVnZml4ZXMsIHVwZGF0ZWQgRGlhYmxvL1dDNCBkZHJhdyBzdGF0dXMuCgoJKiBvbGUvb2xlMm5scy5jLCByZWxheTMyL2tlcm5lbDMyLnNwZWMsIGluY2x1ZGUvd2lubmxzLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUltcGxlbWVudGF0aW9uIG9mIENvbnZlcnREZWZhdWx0TG9jYWxlMzIuCgoJKiB3aW5kb3dzL21kaS5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVdJTjMxIExvb2sgc3RpbGwgbmVlZHMgYSBjbG9zZSBidXR0b24gb24gdGhlIGxlZnQgb2YgdGhlIG1lbnUgYmFyLgoKCSogd2luZG93cy93aW5wb3MuYzogRnJhbmNvaXMgQm9pc3ZlcnQgPGZyYW5jb2lzQG1hY2FkYW1pYW4uY29tPgoJQ2hhbmdlZCBTZXRXaW5kb3dQb3MzMiB0byBmb3JjZSB0aGUgdXBkYXRlIG9mIHRoZSBub24tY2xpZW50IGFyZWEuCgpTYXQgRmViIDEzIDE3OjU2OjI4IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmgsIGluY2x1ZGUvbW1zeXN0ZW0uaCwgaW5jbHVkZS9vbGUuaCwgaW5jbHVkZS93aW5nZGkuaCwgaW5jbHVkZS93aW5zb2NrLmg6CglCZXJ0aG8gU3R1bHRpZW5zIDxiZXJ0aG9AcGFudGVyLnNvY2kuYWF1LmRrPgoJRml4ZWQgYSBjb3VwbGUgb2YgZmF1bHR5IG5hbWVzIHVzZWQgaW4gd2luZSBhbmQgdHlwb3Mgc28gdGhhdCBpdCB3aWxsCgljb21waWxlIGFnYWluIGFmdGVyIGNvbnZlcnNpb24gZnJvbSAzMltBV10gbmFtaW5nIHRvIFtBV10gbmFtaW5nLgoKCSogaWYxNjMyL0F0dGljL3NpZ25hbC5jLCBpZjE2MzIvTWFrZWZpbGUuaW4sIGluY2x1ZGUvZGVidWdnZXIuaCwgaW5jbHVkZS9kb3NleGUuaCwgaW5jbHVkZS9taXNjZW11LmgsIGluY2x1ZGUvc2lnX2NvbnRleHQuaCwgbG9hZGVyL2Rvcy9kb3N2bS5jLCBsb2FkZXIvc2lnbmFsLmMsIG1pc2NlbXUvaW5zdHIuYywgbWlzY2VtdS9tYWluLmMsIGdyYXBoaWNzL2RkcmF3LmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCU1vdmVkIHRoZSBpZjE2MzIvc2lnbmFsLmMgc3R1ZmYgaW50byBsb2FkZXIvc2lnbmFsLmMsIGFkYXB0ZWQgZnVuY3Rpb24KCXBvaW50ZXJzIGZvciB3aW5lX2RlYnVnIGFuZCBJTlNUUl9FbXVsYXRlSW5zdHJ1Y3Rpb24uCgoJKiBvbGUvY29tcG9iai5jOiBGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCUFsbCBndWlkICdSRUZ4eHgnIHR5cGVzIGFscmVhZHkgaGF2ZSBhICdjb25zdCcgaW5zaWRlIHRoZW0uCgoJKiBkbGxzL2NvbWN0bDMyL2RyYWdsaXN0LmMsIGRsbHMvY29tY3RsMzIvdG9vbHRpcHMuYywgbWlzYy92ZXJzaW9uLmMsIHdpbmRvd3Mvd2lucG9zLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVNvbWUgd2FybmluZ3MgZml4ZWQsIG9uZSB1c2VsZXNzIFZFUlNJT04gd2FybmluZyByZW1vdmVkICh3aW5lbGliKS4KCgkqIG1pc2MvcmVnaXN0cnkuYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCVJlZ0ZsdXNoS2V5OiB3cm9uZyBlcnJvciBjb2RlLgoKCSogd2luMzIvZmlsZS5jOiBBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBZGRzIGEgd2FybmluZyBtZXNzYWdlIGlmIHBlcm1pc3Npb25zIG5vdCBzdWZmaWNpZW50LgoKCSogbXVsdGltZWRpYS9taXhlci5jLCBtdWx0aW1lZGlhL21tc3lzdGVtLmMsIHJlbGF5MzIvd2lubW0uc3BlYywgaW5jbHVkZS9kZWJ1Zy5oLCBpbmNsdWRlL2RlYnVnZGVmcy5oLCBpbmNsdWRlL211bHRpbWVkaWEuaCwgbXVsdGltZWRpYS9NYWtlZmlsZS5pbiwgbXVsdGltZWRpYS9tY2lhbmltLmMsIG11bHRpbWVkaWEvbWNpYXZpLmMsIG11bHRpbWVkaWEvbWNpbWlkaS5jLCBtdWx0aW1lZGlhL21jaXdhdmUuYywgbXVsdGltZWRpYS9taWRpLmM6CglFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUFkZGVkIHN1cHBvcnQgZm9yIE1DSSBBVkkgZHJpdmVyCglBZGRlZCBzb21lIGZpeGVzIG1peGVyIGZ1bmN0aW9ucwoJRml4ZWQgTUNJIHN0cmluZyBjb21wYXJpc29uICh0aGFua3MgdG8gTGlvbmVsIFVMTUVSKQoJTm8gbG9uZ2VyIHVzaW5nIDE2IGJpdCBVU0VSIGZ1bmN0aW9ucyAodXNlIHRoZWlyIDMyIGJpdCBjb3VudGVyIHBhcnQpCglSZWluZGVudGluZy4KCUFkZGVkIGZ1bmN0aW9uIHNuZFBsYXlTb3VuZDMyVwoKCSogaW5jbHVkZS9vYmpiYXNlLmgsIGluY2x1ZGUvb2JqaWRsLmgsIGluY2x1ZGUvd2luZS9vYmpfbWFyc2hhbC5oOgoJRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglBZGRlZCB0aGUgYWN0dWFsIGludGVyZmFjZSBkZWZpbml0aW9ucyB0byB0aGUgb2JqX21hcnNoYWwuaCBza2VsZXRvbgoJZmlsZS4gQWxzbyBkZWZpbmVkIHRoZSBhc3NvY2lhdGVkIEMgQVBJLgoKCSogd2luZG93cy9xdWV1ZS5jOiBTdGVwaGFuZSBMdXNzaWVyIDxzdGVwaGFuZUBtYWNhZGFtaWFuLmNvbT4KCVVzZSBnbG9iYWwgc3luY2hyb25pemF0aW9uIG9iamVjdHMsIHRvIGJlIGFibGUgdG8gdXNlIGl0IGluIGRpZmZlcmVudAoJcHJvY2Vzc2VzIChub3Qgb25seSB0aGUgcHJvY2VzcyB3aGljaCBjcmVhdGUgdGhlIHN5bmNocm8gb2JqZWN0KS4KCgkqIHdpbmRvd3MvbWRpLmM6IE5vcm1hbiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCVNldCBod25kQWN0aXZlQ2hpbGQgd2hlbiBtYXhpbWl6aW5nIGEgbWRpIGNoaWxkIHdpbmRvdyBiZWNhdXNlIGl0IGlzCglub3Qgc2V0IHdoZW4gbWF4aW1pemluZyBhIHdpbmRvdyBvdGhlciB0aGFuIHRoZSBhY3RpdmUgY2hpbGQuCgoJKiBjb250cm9scy9tZW51LmM6IFBhc2NhbCBMZXNzYXJkIDxwYXNjYWxAbWFjYWRhbWlhbi5jb20+CglDaGFuZ2UgdGhlIEdldE1lbnVJdGVtUmVjdCB0byBjb21wbHkgd2l0aCB3aW5kb3dzIEFQSS4KCgkqIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS8uY3ZzaWdub3JlLCBpbmNsdWRlL01ha2VmaWxlLmluOgoJSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgoJQ3JlYXRlZCBpbmNsdWRlL01ha2VmaWxlLmluIHRvIHNlcGFyYXRlIGhlYWRlciBmaWxlIGluc3RhbGxhdGlvbiBmcm9tCgl0aGUgdG9wLWxldmVsIE1ha2VmaWxlLgoKCSogb2xlL3N0Z19iaWdibG9ja2ZpbGUuYywgb2xlL3N0Z19zdHJlYW0uYywgb2xlL3N0b3JhZ2UzMi5jLCBvbGUvc3RvcmFnZTMyLmg6CglUaHV5IE5ndXllbiA8dGh1eUBtYWNhZGFtaWFuLmNvbT4KCS0gRml4ZWQgYSBzbWFsbCBibG9jayBkZXBvdCBidWcuCgktIEltcGxlbWVudGVkIGNvbnZlcnRpbmcgZnJvbSBzbWFsbCBibG9ja3MgdG8gYmlnIGJsb2Nrcy4KCS0gVmFsaWRhdGVkIGZpbGUgYXR0cmlidXRlcyBhbmQgZmxhZ3MuCgktIEZpeGVkIGEgYnVnIGZvciBsYXJnZXIgZmlsZXMuCgoJKiByZXNvdXJjZXMvLmN2c2lnbm9yZTogYWRkZWQgc3lzcmVzX05sCgoJKiBncmFwaGljcy94MTFkcnYvb2VtYml0bWFwLmMsIGluY2x1ZGUvb2xlMi5oLCBpbmNsdWRlL29sZWlkbC5oLCBpbmNsdWRlL3NobGd1aWQuaCwgaW5jbHVkZS9zaGxvYmouaCwgaW5jbHVkZS93aW5kZWYuaCwgaW5jbHVkZS93aW5lL29ial9kcmFnZHJvcC5oLCBpbmNsdWRlL3dpbmVycm9yLmgsIGluY2x1ZGUvd2ludHlwZXMuaCwgb2xlL29sZTIuYywgcmVsYXkzMi9vbGUzMi5zcGVjOgoJRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50ZWQgdGhlIE9MRSBEcmFnIGFuZCBEcm9wIHRhcmdldCByZWdpc3RyYXRpb24gbWVjaGFuaXNtIGFuZAoJdGhlIERvRHJhZ0Ryb3AgbG9vcCB0byBwZXJmb3JtIHRoZSBEbkQgb3BlcmF0aW9uLgoKCSogd2luZG93cy9tZGkuYywgY29udHJvbHMvbWVudS5jLCBpbmNsdWRlL21lbnUuaDoKCUZyYW5jb2lzIEJvaXN2ZXJ0IDxmcmFuY29pc0BtYWNhZGFtaWFuLmNvbT4KCUltcGxlbWVudGVkIHRoZSBXSU4zMSBMb29rIG1kaSBidXR0b25zIGFuZCBhbHNvIHNvbWUgZGVmaW5lcyBmb3IgdGhlCgltYWdpYyBtZW51IGl0ZW1zLgoKCSogZGxscy9hZHZhcGkzMi9NYWtlZmlsZS5pbiwgZGxscy9hZHZhcGkzMi9jcnlwdC5jLCBpbmNsdWRlL3dpbmNyeXB0LmgsIHJlbGF5MzIvYWR2YXBpMzIuc3BlYzoKCUlhbiBTY2htaWR0IDxpcnNtYW5AaWFnLm5ldD4KCUFkZGVkIGVudHJpZXMgZm9yIG1vc3QgQ3J5cHQqIGNhbGxzLgoJQWRkZWQgc3R1YiBmb3IgQ3J5cHRBY3F1aXJlQ29udGV4dEEuICBUaGlzIGFsbG93cyBXaW45OCBFWFBMT1JFUi5FWEUKCXRvIGdldCBmYXJ0aGVyLgoKCSogY29udHJvbHMvZWRpdC5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJQW4gYXBwIGxlZnQganVuayBpbiB0aGUgdW5kbyBidWZmZXIgb2YgYW4gZWRpdCBjb250cm9sIHVwb24gY3JlYXRpb24uCgoJKiB3aW5kb3dzL3dpbi5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUNoYW5nZWQgU2V0UGFyZW50MzIgdG8gYWRoZXJlIHRvIFdpbmRvd3MgYmVoYXZpb3VyIChtb3N0bHkpLAoJd2hpY2ggc2hvdWxkIGFsc28ga2VlcCBpdCBmcm9tIGxlYXZpbmcgZ2FyYmFnZSBhcm91bmQuCgoJKiBvbGUvY29tcG9iai5jOiBTeWx2YWluIFN0Lkdlcm1haW4gPHN5bHZhaW5AbWFjYWRhbWlhbi5jb20+CglJbXBsZW1lbnRhdGlvbiBvZiBhIHNpbXBsZSBsaW5rZWQgbGlzdCAoc3RhdGljKSB0aGF0IHN0b3JlcyBhbmQgY291bnRzCglyZWZlcmVuY2VzIHRvIENPTSBvYmplY3RzLgoKCSogaW5jbHVkZS9vYmpiYXNlLmgsIGluY2x1ZGUvd3R5cGVzLmg6CglGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCU1ha2UgdGhlIFJFRnh4eCB0eXBlcyBjb25zdCBldmVuIGluIEMuIEFsc28gYWRkIEZNVElELgoKCSogd2luZG93cy93aW5wb3MuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglEb24ndCBjYWxsIEVWRU5UX0R1bW15TW90aW9uTm90aWZ5IGZvciBoaWRkZW4gd2luZG93cy4KCgkqIHdpbmRvd3MvbWVzc2FnZS5jOiBTdGVwaGFuZSBMdXNzaWVyIDxzdGVwaGFuZUBtYWNhZGFtaWFuLmNvbT4KCUZpeCBzb21lIHRocmVhZC1zYWZlbmVzcyBwcm9ibGVtIHdoZW4gYWNjZXNzaW5nIHRoZSBzeXN0ZW0gbWVzc2FnZQoJcXVldWUuCgoJKiB3aW5kb3dzL2lucHV0LmMsIGluY2x1ZGUvd2ludXNlci5oLCByZWxheTMyL3VzZXIzMi5zcGVjOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglJbXBsZW1lbnRlZCBNYXBWaXJ0dWFsS2V5RXggKHRpY2tldCAyMSkuCglJZ25vcmUga2V5Ym9hcmQgbGF5b3V0IGZvciBub3cuCgoJKiBpbmNsdWRlL29iamlkbC5oLCBpbmNsdWRlL3dpbmUvb2JqX2NsaWVudHNlcnZlci5oOgoJRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QHBzbi5uZXQ+CglBZGRlZCB0aGUgYWN0dWFsIGludGVyZmFjZSBkZWZpbml0aW9ucyB0byB0aGUgb2JqX2NsaWVudHNlcnZlci5oCglza2VsZXRvbiBmaWxlLgoKCSogZGxscy9udGRsbC9NYWtlZmlsZS5pbiwgZGxscy9udGRsbC9udC5jLCBkbGxzL250ZGxsL3JlZy5jLCBkbGxzL250ZGxsL3J0bC5jLCByZWxheTMyL250ZGxsLnNwZWM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCS0gZG9jdW1lbnRlZCBtb3N0IG9mIHRoZSB1bmRvY3VtZW50ZWQgZnVuY3Rpb25zIGluIG50LmMKCS0gaW1wbGVtZW50ZWQgUnRsR2V0RGFjbFNlY3VyaXR5RGVzY3JpcHRvcgoJLSBzdHVicyBmb3IgTnRFbnVtZXJhdGVLZXksIE50T3BlblN5bWJvbGljTGlua09iamVjdCwgTnRRdWVyeUtleQoJLSBzdHVicyBmb3IgTnRSYWlzZUV4Y2VwdGlvbiwgUnRsUmFpc2VFeGNlcHRpb24gKHRoaXMgYm90aCB3aWxsIGNyYXNoKQoKRnJpIEZlYiAxMiAxNzo0NzowNyAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZGxscy9hZHZhcGkzMi9zZWN1cml0eS5jLCBkbGxzL2FkdmFwaTMyL3NlcnZpY2UuYywgZmlsZXMvZHJpdmUuYywgbWlzYy9yZWdpc3RyeS5jLCB3aW4zMi9uZXdmbnMuYywgd2luZG93cy91c2VyLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVNtYWxsIGZpeGVzIHRvIGNvbXBpbGUgd2l0aCB0aGUgaGVhZGVycyAobW9zdGx5IG50LXNlY3VyaXR5KS4KCgkqIGluY2x1ZGUvbnRkZGsuaCwgaW5jbHVkZS9udGRlZi5oLCBpbmNsdWRlL250ZGxsLmgsIGluY2x1ZGUvd2luYmFzZS5oLCBpbmNsdWRlL3dpbmRlZi5oLCBpbmNsdWRlL3dpbm50LmgsIGluY2x1ZGUvd2lucmVnLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1hZGUgbnQtcmVsYXRlZCB0eXBlcyBjb21wYXRpYmxlLCB0aHJvdyBvdXQgd2luZS1zcGVjaWZpYyB0eXBlcy4KCgkqIHdpbmRvd3MvbW91c2UuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglVc2UgTU9OSVRPUl8uLi4gaW5zdGVhZCBvZiBERVNLVE9QXy4uLiByb3V0aW5lcyB0byBnZXQgc2NyZWVuCglkaW1lbnNpb25zOyB0aGVzZSB3b3JrIGFsc28gd2l0aCBuYXRpdmUgVVNFUi4KCgkqIHdpbmRvd3MvZGVmd25kLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJV01fQUNUSVZBVEUgZGVmYXVsdCBwcm9jZXNzaW5nIHNob3VsZCBzZXQgd2luZG93IGZvY3VzLgoJU2hvdWxkIGZpeCBmb2N1cyBwcm9ibGVtcyBpbiBub24tbWFuYWdlZCBtb2RlLgoKVGh1IEZlYiAxMSAxNjozMjoxNyAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogb2xlL25scy9ubGQubmxzLCByZXNvdXJjZXMvTWFrZWZpbGUuaW4sIHJlc291cmNlcy9UT0RPLCByZXNvdXJjZXMvc3lzcmVzLmMsIHJlc291cmNlcy9zeXNyZXNfTmwucmMsIEFVVEhPUlMsIGRvY3VtZW50YXRpb24vbGFuZ3VhZ2VzLCBpbmNsdWRlL2F1dGhvcnMuaCwgaW5jbHVkZS9vcHRpb25zLmgsIG1pc2MvbWFpbi5jLCBvbGUvb2xlMm5scy5jOgoJS2xhYXMgdmFuIEdlbmQgPGtsYWFzQHZhbmdlbmQuZGVtb24ubmw+CglBZGRlZCBzdXBwb3J0IGZvciB0aGUgRHV0Y2ggbGFuZ3VhZ2UuCgoJKiBkbGxzL2NvbWN0bDMyL3Byb3BzaGVldC5jLCBpbmNsdWRlL2NvbW1jdHJsLmgsIGluY2x1ZGUvcHJzaHQuaCwgaW5jbHVkZS9zaGxvYmouaDoKCUFkcmlhbiBUaHVyc3RvbiA8YWRyaWFudEBjb3JlbC5jYT4KCVp5Z28gQmxheGVsbCA8emJsYXhlbGxAY29yZWwuY2E+CglNb3ZlIHByb3BlcnR5IHNoZWV0cyBmcm9tIGNvbW1jdHJsLmggaW50byBpbnRvIHByc2h0LmguCgoJKiBncmFwaGljcy9kM2RkZXZpY2VzLmMsIGdyYXBoaWNzL2QzZGV4ZWN1dGVidWZmZXIuYywgZ3JhcGhpY3MvZDNkbGlnaHQuYywgZ3JhcGhpY3MvZDNkbWF0ZXJpYWwuYywgZ3JhcGhpY3MvZDNkdGV4dHVyZS5jLCBncmFwaGljcy9kM2R2aWV3cG9ydC5jOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglBZGRlZCAnb2JqYmFzZS5oJyB0byBwcmV2ZW50IGNvbXBpbGVyIHdhcm5pbmdzLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglCZXR0ZXIgZGV0ZWN0aW9uIG9mIFhTaG0gZXJyb3JzIChzaG91bGQgbm93IHJ1biBvbiByZW1vdGUgZGlzcGxheXMpLgoKCSogbXVsdGltZWRpYS9tbXN5c3RlbS5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJRml4ZXMgbWl4ZXJHZXRJRDE2LzMyIHByb2JsZW1zL2Vycm9ycy4KCgkqIG9sZS9vbGVvYmouYywgbXVsdGltZWRpYS9kcGxheS5jOiBGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCUlzRXF1YWxHVUlEIGlzIGRlZmluZWQgaW4gJ2luY2x1ZGUvd2luZS9vYmpfYmFzZS5oJy4gQWxsIG90aGVyCglkZWNsYXJhdGlvbnMgbXVzdCBzdXJyZW5kZXIgb3IgcHJlcGFyZSB0byBiZSBtZXQgd2l0aCBkZWFkbHkgZm9yY2UgOi0pCgoJKiByZWxheTMyL29sZTMyLnNwZWM6IEZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJQWRkZWQgbmV3IGZ1bmN0aW9ucyAoZnJvbSBXaW45OCkKCUFkZGVkIGNvbW1lbnRzIHdpdGggdGhlIHBhcmFtZXRlciB0eXBlcyBmb3IgZnV0dXJlIHVzZSB3aXRoIGRsbGdsdWUKCgkqIGZpbGVzL2RyaXZlLmM6IFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCVNldCB0aGUgZmxhZ3MgZm9yIEdldFZvbHVtZUluZm9ybWF0aW9uMzJBLgoKCSogd2luZG93cy93aW4uYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaW5kV2luZG93IGZhaWxlZCBmb3IgMzIgYml0IHdpbmRvd3Mgd2l0aCBzdHlsZSAhPSBXU19DSElMRC4KCldlZCBGZWIgMTAgMDY6NTI6NTggMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvQXR0aWMvcHJpbnQuaCwgaW5jbHVkZS93aW5zcG9vbC5oLCBtaXNjL3ByaW50ZHJ2LmMsIGdyYXBoaWNzL3BzZHJ2L2RyaXZlci5jLCBncmFwaGljcy9wc2Rydi9lc2NhcGUuYywgZ3JhcGhpY3MvcHNkcnYvZm9udC5jLCBncmFwaGljcy9wc2Rydi9ncmFwaGljcy5jLCBncmFwaGljcy9wc2Rydi9pbml0LmMsIGdyYXBoaWNzL3BzZHJ2L3BwZC5jLCBncmFwaGljcy9wc2Rydi9wcy5jLCBncmFwaGljcy9wc2Rydi90ZXh0LmM6CglQYXVsIFF1aW5uIDxwYXVscUBjb3JlbC5jYT4KCUFsYmVydCBEZW4gSGFhbiA8YWxiZXJ0ZEBjb3JlbC5jYT4KCU1vdmVzIGZpbGVzIGZyb20gcHJpbnQuaCB0byB3aW5zcG9vbC5oIGZvciBiZXR0ZXIgU0RLIGhlYWRlciBjb21wbGlhbmNlCglmb3IgV2luZWxpYiBwcm9ncmFtcy4KCgkqIGluY2x1ZGUvaG9vay5oLCBpbmNsdWRlL29iamlkbC5oLCBpbmNsdWRlL29sZTIuaCwgaW5jbHVkZS90Y2hhci5oLCBpbmNsdWRlL3dpbmJhc2UuaCwgaW5jbHVkZS93aW5lL29ial9jbGllbnRzZXJ2ZXIuaCwgaW5jbHVkZS93aW5lL29ial9kYXRhb2JqZWN0LmgsIGluY2x1ZGUvd2luZS9vYmpfc3RvcmFnZS5oLCBpbmNsdWRlL3dpbmVycm9yLmgsIGluY2x1ZGUvd2ludXNlci5oLCBpbmNsdWRlL3d0eXBlcy5oOgoJQWxiZXJ0IERlbiBIYWFuIDxhbGJlcnRkQGNvcmVsLmNhPgoJQWRyaWFuIFRodXJzdG9uIDxhdGh1cnN0b0Bjb3JlbC5jYT4KCVBhdWwgUXVpbm4gPHBhdWxxQGNvcmVsLmNhPgoJWnlnbyBCbGF4ZWxsIDx6eWdvYkBjb3JlbC5jYT4KCU1pc2NlbGxhbmVvdXMgcGF0Y2hlcyB0byBoZWFkZXIgZmlsZXMuICBBbGwgb2YgdGhlc2UgYXJlIHN1cHBvc2VkbHkgdGhlcmUKCXRvIGhlbHAgYnVpbGQgV2luZWxpYiBhcHBsaWNhdGlvbnMuCgoJKiBpbmNsdWRlL3dpbnR5cGVzLmg6IEFsYmVydCBEZW4gSGFhbiA8YWxiZXJ0ZEBjb3JlbC5jYT4KCUFkcmlhbiBUaHVyc3RvbiA8YXRodXJzdG9AY29yZWwuY2E+CglQYXVsIFF1aW5uIDxwYXVscUBjb3JlbC5jYT4KCVp5Z28gQmxheGVsbCA8enlnb2JAY29yZWwuY2E+CglNb3JlIHR5cGVzIHdlIG5lZWQgZm9yIGNvbXBpbGluZyBXaW5lbGliL01GQyBhcHBsaWNhdGlvbnMuCgoJKiBpbmNsdWRlL2NvbW1jdHJsLmg6IFBhdWwgUXVpbm4gPHBhdWxxQGNvcmVsLmNhPgoJQWRyaWFuIFRodXJzdG9uIDxhZHJpYW50QGNvcmVsLmNhPgoJTW9yZSB0eXBlcyBmb3IgY29tbW9uIGNvbnRyb2xzLiAgTmVlZGVkIGZvciBXaW5lbGliLgoKCSogZGxscy9zaGVsbDMyL3NoZWxsbGluay5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvbGUuYywgaW5jbHVkZS93aW5lL29ial9iYXNlLmgsIG11bHRpbWVkaWEvZHNvdW5kLmMsIG9sZS9jb21wb2JqLmMsIG9sZS9pZnMuYzoKCUZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBwc24ubmV0PgoJQmV0dGVyIHNldCBvZiBtYWNyb3MgZm9yIGRlZmluaW5nIHRoZSBDT00gaW50ZXJmYWNlcy4KCgkqIGRsbHMvYWR2YXBpMzIvc2VjdXJpdHkuYywgcmVsYXkzMi9hZHZhcGkzMi5zcGVjOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJVHdvIEFEVkFQSTMyIHN0dWJzOiBJbXBlcnNvbmF0ZVNlbGYzMiBhbmQgQWNjZXNzQ2hlY2szMi4gU3BlbGxpbmcgZml4ZXMuCgoJKiBncmFwaGljcy9kZHJhdy5jOiBMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUZpeGVkIGRlYnVnIG91dHB1dCB0byBmb2xsb3cgJy1kZWJ1Z21zZycgZmxhZ3MuCgpUdWUgRmViICA5IDE1OjQ5OjM5IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBtc2Rvcy9pbnQyMC5jLCBvbGUvc2FmZWFycmF5LmMsIHJlbGF5MzIvYnVpbHRpbjMyLmMsIHNlcnZlci9kZXZpY2UuYywgc2VydmVyL2ZpbGUuYywgc2VydmVyL3BpcGUuYywgc2VydmVyL3RocmVhZC5jLCB3aW5kb3dzL3dpbmhlbHAuYzoKCU1pY2hhZWwgVmVrc2xlciA8bXZla3NsZXJAdGVjaHVuaXgudGVjaG5pb24uYWMuaWw+CglBZGRlZCBtaXNzaW5nIGluY2x1ZGVzIHRvIGF2b2lkIHdhcm5pbmdzL2Vycm9ycy4KCgkqIGluY2x1ZGUvZGlucHV0LmgsIGluY2x1ZGUvbHpleHBhbmQuaCwgaW5jbHVkZS9udGRsbC5oLCBpbmNsdWRlL29sZTIuaCwgaW5jbHVkZS9zaGVsbGFwaS5oLCBpbmNsdWRlL3ZnYS5oLCBpbmNsdWRlL3dpbmJhc2UuaCwgaW5jbHVkZS93aW5jb24uaCwgaW5jbHVkZS93aW5kZWYuaCwgaW5jbHVkZS93aW5kb3dzLmgsIGluY2x1ZGUvd2luZS9rZXlib2FyZDE2LmgsIGluY2x1ZGUvd2luZS9vYmpfc3RvcmFnZS5oLCBpbmNsdWRlL3dpbmUvc2hlbGwxNi5oLCBpbmNsdWRlL3dpbmUvdzMyc2tybmwuaCwgaW5jbHVkZS93aW5lL3dpbmJhc2UxNi5oLCBpbmNsdWRlL3dpbmUvd2luZXNvdW5kLmgsIGluY2x1ZGUvd2luZS93aW5lc3RyaW5nLmgsIGluY2x1ZGUvd2luZS93aW51c2VyMTYuaCwgaW5jbHVkZS93aW5uZXR3ay5oLCBpbmNsdWRlL3dpbm5scy5oLCBpbmNsdWRlL3dpbm50LmgsIGluY2x1ZGUvd2lucmVnLmgsIGluY2x1ZGUvd2ludHlwZXMuaCwgaW5jbHVkZS93aW51c2VyLmgsIGluY2x1ZGUvd2ludmVyLmg6CglNaWNoYWVsIFZla3NsZXIgPG12ZWtzbGVyQHRlY2h1bml4LnRlY2huaW9uLmFjLmlsPgoJTW92ZWQgZXZlcnl0aGluZyBvdXQgb2Ygd2luZG93cy5oLgoKCSogZ3JhcGhpY3Mvd2luZy5jLCBpZjE2MzIvZ2RpLnNwZWMsIGluY2x1ZGUvYml0bWFwLmgsIGluY2x1ZGUvcGFsZXR0ZS5oLCBpbmNsdWRlL3dpbmdkaS5oLCBvYmplY3RzL3BhbGV0dGUuYywgcmVsYXkzMi9nZGkzMi5zcGVjOgoJQnJhZCBQZXBlcnMgPGJyYWRAbGludXhjYW5hZGEuY29tPgoJV2luRyBmaXhlcy4KCgkqIGNvbnRyb2xzL21lbnUuYywgaW5jbHVkZS9tZXNzYWdlLmgsIGluY2x1ZGUvcXVldWUuaCwgd2luZG93cy9kaWFsb2cuYywgd2luZG93cy9tZXNzYWdlLmMsIHdpbmRvd3Mvbm9uY2xpZW50LmMsIHdpbmRvd3MvcXVldWUuYywgd2luZG93cy90aW1lci5jOgoJU3RlcGhhbmUgTHVzc2llciA8c3RlcGhhbmVAbWFjYWRhbWlhbi5jb20+CgktRml4ZWQgTUVTU0FHRSBmdW5jdGlvbnMgdGhhdCB3ZXJlIHRodW5raW5nIGRvd24gdG8gMTYgYml0cyBpbXBsZW1lbnRhdGlvbi4KCVNvIFBlZWtNZXNzYWdlMzIsIEdldE1lc3NhZ2UzMiwgUG9zdE1lc3NhZ2UzMiwgUG9zdFRocmVhZE1lc3NhZ2UgYXJlIGZpeGVkCgl3aXRoIHRoaXMgcGF0Y2guIFVuaWNvZGUgdmVyc2lvbiBvZiB0aG9zZSBmdW5jdGlvbnMgaXMgY3VycmVudGx5IG9ubHkKCWNhbGxpbmcgdGhlIEFTQ0lJIHZlcnNpb24uCgktRml4ZWQgcXVldWUgc2lnbmFsaW5nIHVzaW5nIGEgbmV3IEVWRU5UIG9iamVjdCBpbiB0aGUgcXVldWUgZm9yIDMyIGJpdHMKCXRocmVhZC4gTXNnV2FpdEZvck11bHRpcGxlT2JqZWN0IGhhcyBiZWVuIGZpeGVkIGFuZCBpcyBub3cgYmxvY2tpbmcgb24gdGhlCglyaWdodCBFVkVOVC4KCgkqIG9iamVjdHMvbWV0YWZpbGUuYzogSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglHZXRNZXRhRmlsZUJpdHNFeCBzaG91bGQgd29yayBpbiBieXRlcyBub3Qgd29yZHMuCgoJKiBpbmNsdWRlL3NobG9iai5oOiBGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCURsbEdldENsYXNzT2JqZWN0IHNob3VsZCB0YWtlIGEgUkVGQ0xTSUQgbm90IGFuIExQQ0xTSUQuCgoJKiBvYmplY3RzL2RpYi5jLCBpbmNsdWRlL2dsb2JhbC5oLCBtZW1vcnkvdmlydHVhbC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglDaGFuZ2UgZmF1bHQgaGFuZGxlciAnYWRkcicgYXJndW1lbnQgdG8gTFBDVk9JRC4KCgkqIGZpbGVzL2ZpbGUuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglDYWxsIFZJUlRVQUxfSGFuZGxlRmF1bHQgaWYgcmVhZC93cml0ZSByZXR1cm5zIEVGQVVMVC4KCgkqIGRsbHMvY29tY3RsMzIvdHJlZXZpZXcuYzoKCUJlcnRobyBTdHVsdGllbnMgPGJlcnRob0BwYW50ZXIuc29jaS5hYXUuZGs+CglGaXggdHlwbyB0byBtYXAgR2V0VGV4dEV4dGVudFBvaW50IHRvIHRoZSBjb3JyZWN0IDMyQSB2ZXJzaW9uLgoKCSogZG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmcsIGluY2x1ZGUvcGVleGUuaCwgaW5jbHVkZS93aW5jb24uaCwgcHJvZ3JhbXMvcmVndGVzdC9yZWd0ZXN0LmMsIHJlbGF5MzIvYWR2YXBpMzIuc3BlYywgd2luZG93cy94MTFkcnYvbWFpbi5jLCBkbGxzL2FkdmFwaTMyL3NlY3VyaXR5LmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVNvbWUgc21hbGwgYnVnZml4ZXMsIGFkZGVkIG1vcmUgUEUgcmVsb2NhdGlvbiB0eXBlcyAoZm9yIFdpbkNFIG1vc3RseSksCglzb21lIGNvbnNvbGUgcHJvdG90eXBlcywgLWRsbCBpcyB1c2VmdWwgZm9yIHdpbmVsaWIgdG9vLCByZWd0ZXN0Cgljb21waWxlIGZpeGVkLgoKCSogaW5jbHVkZS93aW5lL3dpbnVzZXIxNi5oLCBpbmNsdWRlL3dpbnVzZXIuaCwgb2JqZWN0cy9jdXJzb3JpY29uLmM6CglQYXVsIFF1aW5uIDxwYXVscUBjb3JlbC5jYT4KCUdldEN1cnNvclBvcyBpcyBhY3R1YWxseSBhIEJPT0wuCgoJKiBpbmNsdWRlL21tc3lzdGVtLmg6IFBhdWwgUXVpbm4gPHBhdWxxQGNvcmVsLmNhPgoJQWRyaWFuIFRodXJzdG9uIDxhZHJpYW50QGNvcmVsLmNhPgoJTW9yZSB0eXBlcywgQysrIHByb3RlY3Rpb24sIGFuZCBhIHR5cG8gY29ycmVjdGlvbiBmb3IgbW1zeXN0ZW0uaC4KCgkqIGluY2x1ZGUvY29tbWN0cmwuaDogWnlnbyBCbGF4ZWxsIDx1ajIya2ZiY0B1bWFpbC5mdXJyeXRlcnJvci5vcmc+CglNb3ZlIHRoZSAjZGVmaW5lIG9mIERVTU1ZVU5JT05OQU1FKiB0byBiZWZvcmUgdGhleSBhcmUgdXNlZC4KCUFkZCBhIGRlZmluaXRpb24gZm9yIERVTU1ZVU5JT05OQU1FIChhcyBvcHBvc2VkIHRvIERVTjEsIERVTjIuLi4pLgoJVXNlIHRoZSBjb3JyZWN0IFdJTkVMSUJfTkFNRV9BVyBtYWNybyBmb3IgVFZJVEVNIGFuZCByZWxhdGVkIG5hbWVzLgoJRGVmaW5lICJUVl9JVEVNIiB0byBhZ3JlZSB3aXRoIHlvdS1rbm93LXdobydzIGRvY3VtZW50YXRpb24uCgoJKiBkbGxzL3ZlcnNpb24vaW5mby5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglOVUxMIGlzIGEgdmFsaWQgYXJndW1lbnQgYXMgaGFuZGxlIGZvciBHZXRGaWxlVmVyc2lvbkluZm9TaXplMzJBLgoKCSogaW5jbHVkZS9kaW5wdXQuaCwgd2luZG93cy9kaW5wdXQuYzoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJQWRkZWQgYnVmZmVyZWQgZGV2aWNlIGFjY2VzcyBmb3IgRElucHV0J3MgbW91c2UgZHJpdmVyLgoKCSogZmlsZXMvZmlsZS5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVdyb25nIGFjY2VzcyBvbiBzZXJ2ZXIgaGFuZGxlIHdhcyBkZW1hbmRlZCAoR0VORVJJQ19SRUFEIGluc3RlYWQgb2YKCUdFTkVSSUNfV1JJVEUpLgoKCSogZGxscy9zaGVsbDMyL3NoZWxsb3JkLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUJldHRlciBpbXBsZW1lbnRhdGlvbiAodGFrZXMgc3RyaW5ncyBvciByZXMtaWQncyBub3cpLgoKCSogZGxscy92ZXJzaW9uL3Jlc291cmNlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogTlVMTCBwb2ludGVyIGNoZWNrIGZvciBvdXRwdXQgcGFyYW1ldGVycy4KCgkqIGRsbHMvc2hlbGwzMi9icnNmb2xkZXIuYzoKCVp5Z28gQmxheGVsbCA8dWoyMmtmYmNAdW1haWwuZnVycnl0ZXJyb3Iub3JnPgoJRml4ZWQgdHdvIHBvaW50ZXIvaW50ZWdlciBtaXNtYXRjaCB3YXJuaW5ncy4KCgkqIGRvY3VtZW50YXRpb24vY29uc29sZTogWnlnbyBCbGF4ZWxsIDx1ajIya2ZiY0B1bWFpbC5mdXJyeXRlcnJvci5vcmc+CglTcGVsbGluZyBmaXhlcy4KCgkqIGNvbnNvbGUveHRlcm0uYywgd2luMzIvY29uc29sZS5jOgoJWnlnbyBCbGF4ZWxsIDx1ajIya2ZiY0B1bWFpbC5mdXJyeXRlcnJvci5vcmc+Cgl3aW5lX29wZW5wdHkgaXMgbm90IHByb3Blcmx5IGRlY2xhcmVkIChlaXRoZXIgbWlzc2luZyBvciBtaXNtYXRjaGVkCglkZWNsYXJhdGlvbnMpIGluIGJvdGggcGxhY2VzIHdoZXJlIGl0IGlzIHVzZWQuCgoJKiBpbmNsdWRlL3dpbmdkaS5oLCBvYmplY3RzL2RpYi5jOgoJWnlnbyBCbGF4ZWxsIDx1ajIya2ZiY0B1bWFpbC5mdXJyeXRlcnJvci5vcmc+CglGaXggdHlwZXMgb2YgR2V0RElCaXRzIGZ1bmN0aW9ucyAoTFBTVFIgc2hvdWxkIGJlIExQVk9JRCkuCgoJKiBncmFwaGljcy94MTFkcnYvZGliLmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUZpeGVzIHNldmVyYWwgcHJvYmxlbXMgd2l0aCBTZXRESUJpdHNUb0RldmljZSBpZiB4U3JjICE9IDAuCglUaGFua3MgdG8gSWFuIFNjaG1pZHQgZm9yIHRoZSBsb2dzLgoKCSogd2luZG93cy9tZGkuYzogRnJhbmNvaXMgQm9pc3ZlcnQgPGZyYW5jb2lzQG1hY2FkYW1pYW4uY29tPgoJVGhlIHN5c3RlbXMgYnV0dG9ucyAobWluaW1pemUvcmVzdG9yZS9jbG9zZSkgbm93IGFwcGVhciBvbiB0aGUgbWVudQoJYmFyIG9mIG1kaSBhcHBsaWNhdGlvbi4KCgkqIGNvbnRyb2xzL21lbnUuYzogRnJhbmNvaXMgQm9pc3ZlcnQgPGZyYW5jb2lzQG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50ZWQgdGhlIG1hZ2ljIG1lbnUgaXRlbXMgaWQncyB1c2VkIGJ5IHdpbmRvd3Mgd2hlbiBpbnNlcnRpbmcKCXRoZSBtaW5pbWl6ZS9tYXhpbWl6ZS9jbG9zZSBidXR0b25zIGluIHRoZSBtZW51IGJhciBvZiBhbiBhcHBsaWNhdGlvbi4KCgkqIG9iamVjdHMvZW5obWV0YWZpbGUuYzogSmFzb24gTWNNdWxsYW4gPGptY2NAb250di5jb20+CglBZGRzIHN1cHBvcnQgZm9yIEVNUl9TVFJFVENIRElCSVRTIGluIEVNRnMuCgoJKiBwcm9ncmFtcy9hdml0b29scy9hdmlwbGF5LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRml4ZWQgaW1hZ2Ugc2l6ZSBhbmQgbGluZSBzaXplLCBhZGRlZCA4Yml0IGNvbG9yL3BhbGV0dGUgaGFuZGxpbmcuCgoJKiB0b29scy9idWdfcmVwb3J0LnBsOiBBZGFtIHRoZSBKYXp6IEd1eSA8bWFnaWNib3hAYmVzdHdlYi5uZXQ+CglGaXhlZCBmb3JtYXR0aW5nIG9mIGNvZGUKCU5vdyBjaGFuZ2VzIHRvIGRpcmVjdG9yeSBvZiBwcm9ncmFtIHRvIGJlIHJ1biBiZWZvcmUgc3RhcnRpbmcgd2luZQoKCSogd2luZG93cy9xdWV1ZS5jLCB3aW5kb3dzL3VzZXIuYywgaW5jbHVkZS91c2VyLmgsIHNjaGVkdWxlci90aHJlYWQuYzoKCVN0ZXBoYW5lIEx1c3NpZXIgPHN0ZXBoYW5lQG1hY2FkYW1pYW4uY29tPgoJLSBDbGVhbmVkIHVwIHRoZSBtZXNzYWdlIHF1ZXVlIHdoZW4gYSB0aHJlYWQgZXhpdCAoYnV0IG5vdCB0aGUgcHJvY2VzcykuCgktIE1vZGlmaWVkIFFVRVVFX0RlbGV0ZU1zZ1F1ZXVlIHRvIGV4aXQgZ3JhY2VmdWxseSAod2l0aG91dCBjcmFzaGluZyBXaW5lKSBpZgoJICBxdWV1ZSBsaW5rIGxpc3QgaXMgY29ycnVwdGVkLgoKCSogbXVsdGltZWRpYS9kc291bmQuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglTb3VuZHMgd2VyZSBjdXQgb2ZmIGR1ZSB0byBpbnRlZ2VyIG92ZXJmbG93LiBGaXhlZC4KCgkqIGluY2x1ZGUvd2luZG93c3guaDogUGF1bCBRdWlubiA8cGF1bHFAY29yZWwuY2E+CglBZGRlZCB3aW5kb3dzeC5oIGZvciBXaW5lbGliLgoKRnJpIEZlYiAgNSAxNzo0MDo0NyAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIHByb2dyYW1zL01ha2VmaWxlLmluLCBwcm9ncmFtcy9jbWRsZ3RzdC8uY3ZzaWdub3JlLCBwcm9ncmFtcy9jbWRsZ3RzdC9NYWtlZmlsZS5pbiwgcHJvZ3JhbXMvY21kbGd0c3QvY21kbGdyLmgsIHByb2dyYW1zL2NtZGxndHN0L2NtZGxnci5yYywgcHJvZ3JhbXMvY21kbGd0c3QvY21kbGd0c3QuYzoKCTxld2lsbEBuY2FsLnZlcmlvLmNvbT4KCUFkZGVkIGNvbW1vbiBkaWFsb2dzIHRlc3QgcHJvZ3JhbS4KCgkqIGluY2x1ZGUvbWVzc2FnZS5oLCBpbmNsdWRlL3F1ZXVlLmgsIGluY2x1ZGUvd2luLmgsIGluY2x1ZGUvd2lucG9zLmgsIHNjaGVkdWxlci90aHJlYWQuYywgd2luZG93cy9mb2N1cy5jLCB3aW5kb3dzL2lucHV0LmMsIHdpbmRvd3MvbWVzc2FnZS5jLCB3aW5kb3dzL3F1ZXVlLmMsIHdpbmRvd3Mvd2luLmMsIHdpbmRvd3Mvd2lucG9zLmM6CglOb2VsIEJvcnRod2ljayA8bm9lbEBtYWNhZGFtaWFuLmNvbT4KCUFkZGVkIG1hbmFnZW1lbnQgYW5kIGFsbG9jYXRpb24gb2YgdGhlIFBFUlFVRVVFREFUQSBzdHJ1Y3R1cmUuCgoJKiBncmFwaGljcy9kZHJhdy5jLCBncmFwaGljcy92Z2EuYywgaW5jbHVkZS9kZHJhdy5oOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CgktIGFkZGVkIGEgZHVtcCBvZiB0aGUgcGFsZXR0ZSBjcmVhdGlvbiBmbGFncwoJLSBjaGFuZ2VkIHBhbGV0dGUgY3JlYXRpb24gY29kZSBpbiB2Z2EuYyB0byBwcmV2ZW50IHVzZWxlc3MgZXJyb3IKCSAgbWVzc2FnZQoKCSogZG9jdW1lbnRhdGlvbi93aW5lLm1hbiwgZmlsZXMvZHJpdmUuYywgd2luZS5pbmk6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglVc2UgdmZhdC93aW45NSBhcyBkZWZhdWx0LgoKCSogaW5jbHVkZS92ZncuaCwgbXVsdGltZWRpYS9tc3ZpZGVvLmMsIHByb2dyYW1zL2F2aXRvb2xzLy5jdnNpZ25vcmUsIHByb2dyYW1zL2F2aXRvb2xzL01ha2VmaWxlLmluLCBwcm9ncmFtcy9hdml0b29scy9hdmlpbmZvLmMsIHByb2dyYW1zL2F2aXRvb2xzL2F2aXBsYXkuYywgcmVsYXkzMi9idWlsdGluMzIuYywgcmVsYXkzMi9tc3ZmdzMyLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVVwZGF0ZWQgbXN2aWRlbyAvIHZmdy5oLCB1c2UgYnVpbHRpbiBtc3ZmdzMyLmRsbCBieSBkZWZhdWx0LCBhZGRlZAoJYXZpaW5mbyBhbmQgYXZpcGxheSBwcm9ncmFtcy4KCgkqIHdpbjMyL2NvbnNvbGUuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglDb250aW51ZWQgaGFjayB0byB3aW4zMi9jb25zb2xlLmMsIHNvIHRoYXQgdGhlIElEQSBQcm8gRGlzYXNzZW1ibGVyCgl3b3JrcyBhZ2Fpbi4gTmVlZHMgbXVjaCBtb3JlIHdvcmsgaG93ZXZlci4KCgkqIG9sZS9zdG9yYWdlMzIuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglJbmNsdWRlIG9iamJhc2UuaCBmb3IgQ29UYXNrTWVtKiBwcm90b3R5cGVzIChvciB3ZSBnZXQgV0lOQVBJCglwcm9ibGVtcykuCgoJKiBvbGUvc3RvcmFnZTMyLmg6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkZWQgbWlzc2luZyBVTE9ORyB0byBzdGF0aWMgY29uc3QgT0ZGU0VUX3h4LgoKVGh1IEZlYiAgNCAxNjo0NTo0MCAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZG9jdW1lbnRhdGlvbi93aW5lLm1hbjogSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgoJVmFyaW91cyBtYW5wYWdlIHVwZGF0ZXMsIGluY2x1ZGluZyB0aGUgaW5jb3JyZWN0IHN0YXRlbWVudCBhYm91dCBnbGliYwoJYW5kIGNsb25lKCkuCgoJKiBkb2N1bWVudGF0aW9uL2RlYnVnZ2luZzogSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgoJRml4IHBvaW50ZXIgdG8gdGhlIFdpbmRvd3MgRGlzYXNzZW1ibGVyIDMyLiAgVGhhbmtzIHRvIEhlcmJlcnQKCVJvc21hbml0aCA8aGVycEB3aWxkc2F1Lmlkdi51bmktbGluei5hYy5hdD4gZm9yIHN1Z2dlc3RpbmcgdGhpcy4KCgkqIGRsbHMvbXNhY20zMi9kcml2ZXIuYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUFub3RoZXIgdXNhZ2Ugb2Ygbm9uLXBvcnRhYmxlIGZ1bmN0aW9ucy4uLgoKCSogbXNkb3MvZG9zbWVtLmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglTb21lIHZhbHVlcyBvZiBwQmlvc0RhdGEgYWRkZWQvZml4ZWQuCgoJKiBvYmplY3RzL3BhbGV0dGUuYywgd2luZG93cy9jbGlwYm9hcmQuYywgd2luZG93cy9kY2UuYywgd2luZG93cy9kaXNwbGF5LmMsIHdpbmRvd3MvZXZlbnQuYywgd2luZG93cy9rZXlib2FyZC5jLCB3aW5kb3dzL21vdXNlLmMsIHdpbmRvd3Mvc3lzbWV0cmljcy5jLCB3aW5kb3dzL3VzZXIuYywgd2luZG93cy93aW4uYywgd2luZG93cy93aW5wb3MuYywgY29udHJvbHMvZGVza3RvcC5jLCBjb250cm9scy93aWRnZXRzLmMsIGRlYnVnZ2VyL2RiZy55LCBncmFwaGljcy9kZHJhdy5jLCBncmFwaGljcy9wYWludGluZy5jLCBncmFwaGljcy93aW5nLmMsIGluY2x1ZGUvYml0bWFwLmgsIGluY2x1ZGUvY29sb3IuaCwgaW5jbHVkZS9kZHJhdy5oLCBpbmNsdWRlL2RlYnVnLmgsIGluY2x1ZGUvZGVidWdkZWZzLmgsIGluY2x1ZGUvZGVza3RvcC5oLCBpbmNsdWRlL2Rpc3BsYXkuaCwgaW5jbHVkZS9tYWluLmgsIGluY2x1ZGUvb3B0aW9ucy5oLCBpbmNsdWRlL3R0eWRydi5oLCBpbmNsdWRlL3dpbi5oLCBpbmNsdWRlL3gxMWRydi5oLCBtaXNjL21haW4uYywgb2JqZWN0cy9iaXRtYXAuYywgb2JqZWN0cy9jb2xvci5jLCBvYmplY3RzL2RjLmMsIG9iamVjdHMvZGliLmMsIG9iamVjdHMvZ2Rpb2JqLmM6CglQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCU1vdmVkIHNvbWUgbW9yZSBjb2RlIHRvIHRoZSBYMTEgZHJpdmVyLgoKCSogd2luZG93cy90dHlkcnYvTWFrZWZpbGUuaW4sIHdpbmRvd3MvdHR5ZHJ2L2NsaXBib2FyZC5jLCB3aW5kb3dzL3R0eWRydi9kZXNrdG9wLmMsIHdpbmRvd3MvdHR5ZHJ2L2V2ZW50LmMsIHdpbmRvd3MvdHR5ZHJ2L2luaXQuYywgd2luZG93cy90dHlkcnYva2V5Ym9hcmQuYywgd2luZG93cy90dHlkcnYvbWFpbi5jLCB3aW5kb3dzL3R0eWRydi9tb25pdG9yLmMsIHdpbmRvd3MvdHR5ZHJ2L21vdXNlLmMsIHdpbmRvd3MvdHR5ZHJ2L3duZC5jOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglUVFkgZHJpdmVyIGNoYW5nZXMuCgoJKiB3aW5kb3dzL3gxMWRydi9NYWtlZmlsZS5pbiwgd2luZG93cy94MTFkcnYvY2xpcGJvYXJkLmMsIHdpbmRvd3MveDExZHJ2L2Rlc2t0b3AuYywgd2luZG93cy94MTFkcnYvZXZlbnQuYywgd2luZG93cy94MTFkcnYvaW5pdC5jLCB3aW5kb3dzL3gxMWRydi9rZXlib2FyZC5jLCB3aW5kb3dzL3gxMWRydi9tYWluLmMsIHdpbmRvd3MveDExZHJ2L21vbml0b3IuYywgd2luZG93cy94MTFkcnYvbW91c2UuYywgd2luZG93cy94MTFkcnYvd25kLmMsIGdyYXBoaWNzL3gxMWRydi9iaXRibHQuYywgZ3JhcGhpY3MveDExZHJ2L2JpdG1hcC5jLCBncmFwaGljcy94MTFkcnYvYnJ1c2guYywgZ3JhcGhpY3MveDExZHJ2L2NsaXBwaW5nLmMsIGdyYXBoaWNzL3gxMWRydi9kaWIuYywgZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmMsIGdyYXBoaWNzL3gxMWRydi9pbml0LmMsIGdyYXBoaWNzL3gxMWRydi9vYmplY3RzLmMsIGdyYXBoaWNzL3gxMWRydi9vZW1iaXRtYXAuYywgZ3JhcGhpY3MveDExZHJ2L3Blbi5jLCBncmFwaGljcy94MTFkcnYvdGV4dC5jLCBncmFwaGljcy94MTFkcnYveGZvbnQuYzoKCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJWDExIGRyaXZlciBjaGFuZ2VzLgoKCSogdHN4MTEvdHNfeGY4NmRnYS5jLCB0c3gxMS90c194Zjg2dm1vZGUuYywgdHN4MTEvdHNfeGxpYi5jLCB0c3gxMS90c194cG0uYywgdHN4MTEvdHNfeHJlc291cmNlLmMsIHRzeDExL3RzX3hzaG0uYywgdHN4MTEvdHNfeHV0aWwuYywgaW5jbHVkZS90c194Zjg2ZGdhLmgsIGluY2x1ZGUvdHNfeGY4NnZtb2RlLmgsIGluY2x1ZGUvdHNfeGxpYi5oLCBpbmNsdWRlL3RzX3hwbS5oLCBpbmNsdWRlL3RzX3hyZXNvdXJjZS5oLCBpbmNsdWRlL3RzX3hzaG0uaCwgaW5jbHVkZS90c194dXRpbC5oLCB0b29scy9tYWtlX1gxMXdyYXBwZXJzOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglOb24tWDExIGNvbXBpbGUgZml4IGZvciBnZW5lcmF0ZWQgY29kZS4KCgkqIGluY2x1ZGUvbW9uaXRvci5oLCB3aW5kb3dzL211bHRpbW9uLmM6CglQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCUltcGxlbWVudGF0aW9uIG9mIHRoZSBuZXcgbW9uaXRvciBhYnN0cmFjdGlvbi4KCgkqIGdyYXBoaWNzL3R0eWRydi8uY3ZzaWdub3JlLCBncmFwaGljcy90dHlkcnYvTWFrZWZpbGUuaW4sIGdyYXBoaWNzL3R0eWRydi9pbml0LmMsIE1ha2VmaWxlLmluOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglOZXcgVFRZIGRyaXZlciBmb3IgR0RJLgoKCSogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvYWNjb25maWcuaCwgaW5jbHVkZS9jb25maWcuaC5pbjoKCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJLSBBZGRlZCB0aGUgZ3JhcGhpY3MvdHR5ZHJ2IGRpcmVjdG9yeS4KCS0gRG9uJ3Qgc2VhcmNoIGZvciByZWVudHJhbnQgWCB3aGVuIFggZG9lc24ndCBleGlzdC4KCS0gQWRkZWQgY29uZmlnIG9wdGlvbnMgSEFWRV9MSUJYWFBNCgktIEFkZGVkIGNoZWNrcyBpZiB0aGUgaGVhZGVyIGZpbGVzIGFsc28gZXhpc3QgZm9yIHNvbWUgbGlicmFyaWVzCgpUdWUgRmViICAyIDE2OjE0OjIzIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBkbGxzL3NoZWxsMzIvYnJzZm9sZGVyLmMsIGdyYXBoaWNzL2QzZGNvbW1vbi5jLCBncmFwaGljcy9kM2RkZXZpY2VzLmMsIGdyYXBoaWNzL2QzZGV4ZWN1dGVidWZmZXIuYywgZ3JhcGhpY3MvZDNkbGlnaHQuYywgZ3JhcGhpY3MvZDNkbWF0ZXJpYWwuYywgZ3JhcGhpY3MvZDNkdGV4dHVyZS5jLCBncmFwaGljcy9kM2R2aWV3cG9ydC5jLCBpbmNsdWRlL2ludGVyZmFjZXMuaCwgb2xlL3NhZmVhcnJheS5jLCBvbGUvc3RnX2JpZ2Jsb2NrZmlsZS5jLCBvbGUvc3RnX3N0cmVhbS5jLCBvbGUvc3RvcmFnZTMyLmM6CglGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAcHNuLm5ldD4KCVJlcGxhY2VkIHJlZmVyZW5jZXMgdG8gaW50ZXJmYWNlcy5oIGJ5IHdpbmUvb2JqX3h4eC5oIGhlYWRlcnMgaW5zdGVhZAoJc2luY2UgdGhlc2UgaGVhZGVycyBhbHJlYWR5IHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBkZWZpbml0aW9ucy4KCgkqIGluY2x1ZGUvbXNkb3MuaCwgbXNkb3MvQXR0aWMvY2Ryb20uYywgbXNkb3MvTWFrZWZpbGUuaW4sIG1zZG9zL2ludDJmLmM6CglFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCVJlbW92ZWQgcmVmZXJlbmNlcyB0byBvYnNvbGV0ZSBtc2Rvcy9jZHJvbS5jIGZpbGUuCglNYWtlIHVzZSBvZiBuZXcgV2luZSBpbnRlcm5hbCBDRCBST00gaW50ZXJmYWNlLgoKCSogbXVsdGltZWRpYS9tY2ljZGEuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglGaXhlZCB0cmFja3MgaW5kZXhpbmcgaW4gbWNpY2RhLmMKCU1ha2UgdXNlIG9mIG5ldyBXaW5lIGludGVybmFsIENEIFJPTSBpbnRlcmZhY2UuCgoJKiBpbmNsdWRlL2Nkcm9tLmgsIG1pc2MvTWFrZWZpbGUuaW4sIG1pc2MvY2Ryb20uYzoKCUVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJTmV3IFdpbmUgaW50ZXJuYWwgaW50ZXJmYWNlIGZvciBoYW5kbGluZyBDRCBSb20gKGVzcGVjaWFsbHkgYXVkaW8gQ0QKCVJPTSkuCgoJKiBpbmNsdWRlL2NvbW1jdHJsLmgsIGluY2x1ZGUvdHJlZXZpZXcuaCwgZGxscy9jb21jdGwzMi90cmVldmlldy5jOgoJWnlnbyBCbGF4ZWxsIDx1ajIya2ZiY0B1bWFpbC5mdXJyeXRlcnJvci5vcmc+CglDaGFuZ2UgYSBmZXcgdHlwZXMgdG8gbWF0Y2ggeW91LWtub3ctd2hvJ3MgZGVjbGFyYXRpb25zLgoJSFRSRUVJVEVNIGlzIGEgc3RydWN0IF9UUkVFSVRFTSBGQVIqCglHZXRESUJpdHMgcGFzc2VzIGEgTFBWT0lEIGZvciB0aGUgYml0bWFwIGRhdGEsIG5vdCBMUFNUUi4KCUFkanVzdG1lbnQgb2YgV2luZSBDIGNvZGUgdG8gbWF0Y2ggdGhlIG5ldyB0eXBlcyBpbmNsdWRlZC4KCgkqIG1pc2MvbHpleHBhbmQuYzogVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJRml4ZWQgR0VUX0xaX1NUQVRFIG1hY3JvLgoKCSogZ3JhcGhpY3MvZDNkX3ByaXZhdGUuaCwgZ3JhcGhpY3MvZDNkdGV4dHVyZS5jLCBncmFwaGljcy9kZHJhdy5jLCBpbmNsdWRlL2QzZC5oLCBpbmNsdWRlL2RkcmF3Lmg6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUFkZGVkIHN0dWJzIGZvciBuZXcgRGlyZWN0RHJhdzQgYW5kIERpcmVjdERyYXdTdXJmYWNlNCBtZXRob2RzLgoKCSogdG9vbHMvd3JjL3dyYy5oLCB0b29scy93cmMvd3JjdHlwZXMuaCwgdG9vbHMvd3JjL0NIQU5HRVM6CglBbGJlcnQgZGVuIEhhYW4gPGFsYmVydGRAY29yZWwuY2E+CglGaXhlZCB3cm9uZyBvcmRlciBvZiByZXNfaWNvIGFuZCByZXNfYm1wIHdoaWNoIG11c3QgYmUgaW4gUlRfeHh4IG9yZGVyLgoKCSogZGxscy92ZXJzaW9uL3Jlc291cmNlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJcmVzbGVuIGNvdWxkIGJlIHVzZWQgdW5pbml0aWFsaXNlZCBpbiBHZXRGaWxlUmVzb3VyY2UzMiAoZml4ZXMgc29tZQoJc3RyYW5nZSBWZXJRdWVyeVZhbHVlIGNyYXNoZXMpLgoKCSogb2xlL25scy9zdmUubmxzOiBKYW4gRC4gPEphbi5EamFydkBtYm94MjAwLnN3aXBuZXQuc2U+CglBZGRlZCBkZWZpbml0aW9uIGZvciBMT0NBTEVfU0dST1VQSU5HLCBMT0NBTEVfU01PTkdST1VQSU5HIGFuZAoJTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUy4KCgkqIG1lbW9yeS9zZWxlY3Rvci5jLCByZWxheTMyL2tlcm5lbDMyLnNwZWM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogUHJlc2VydmUgRUFYIGluIFVuTWFwU0xGaXhBcnJheSgpLgoKCSogZGxscy9jb21jdGwzMi9jb21jdGwzMnVuZG9jLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlcyBsaXR0bGUgcG9pbnRlciBidWcgaW4gRFBBX0RlbGV0ZVB0cigpLgoKCSogaWYxNjMyL2tlcm5lbC5zcGVjLCBtZW1vcnkvc3RyaW5nLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGVkIEtFUk5FTC40MzQgKFVuaWNvZGVUb0Fuc2kpLgoKCSogZmlsZXMvZHJpdmUuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglHZXREaXNrRnJlZVNwYWNlRXgzMkEgY2FuIGdldCBudWxsIHBvaW50ZXJzIGFuZCBzdGlsbCBub3QgY3Jhc2guCgoJKiBncmFwaGljcy9wc2Rydi9kcml2ZXIuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJQ2xlYXIgdXAgYXJncyB0byBQU0RSVl9BZHZhbmNlZFNldHVwRGlhbG9nLgoKCSogZ3JhcGhpY3MveDExZHJ2L3hmb250LmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVJlZHVjZSBNQVhfRk9OVF9TSVpFIHRvIDEwMDAuCgpTdW4gSmFuIDMxIDE5OjA0OjMxIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiB3aW4zMi9jb25zb2xlLmMsIGluY2x1ZGUvc2VydmVyLmgsIGluY2x1ZGUvc2VydmVyL29iamVjdC5oLCBpbmNsdWRlL3NlcnZlci9yZXF1ZXN0LmgsIGxvYWRlci9uZS9tb2R1bGUuYywgcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCBzZXJ2ZXIvY29uc29sZS5jLCBzZXJ2ZXIvcmVxdWVzdC5jLCBzZXJ2ZXIvdHJhY2UuYzoKCUFkZGVkIGlucHV0IHF1ZXVlIHRvIHNlcnZlci1zaWRlIGNvbnNvbGUgb2JqZWN0LAoJcmVhZC93cml0ZV9jb25zb2xlX2lucHV0IHJlcXVlc3RzLCBhbmQgdXNlIHRoZW0gZm9yCglSZWFkL1dyaXRlQ29uc29sZUlucHV0LgoKCSogc2NoZWR1bGVyL2NsaWVudC5jOiBHZW9mZiBDbGFyZSA8Z3djQHJvb3QuY28udWs+CglGaXggdG8gYWxsb3cgZm9yIHJlY3Ztc2coKSByZXR1cm5pbmcgbGVzcyBkYXRhIHRoYW4gaXMgbmVlZGVkLgoKCSogaW5jbHVkZS90b29saGVscC5oLCBpbmNsdWRlL3dpbmRvd3MuaDoKCUF0dGVtcHQgYXQgZml4aW5nIHRoZSBNQVhfUEFUSCBtdWx0aXBsZSBkZWZpbml0aW9uIHByb2JsZW0uCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBKYW4gMzEgMTA6MTM6NDQgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvbW9kdWxlLmgsIGxvYWRlci9uZS9yZXNvdXJjZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglNb2RpZnkgTkVfRmluZFR5cGVTZWN0aW9uIGFuZCBORV9GaW5kUmVzb3VyY2VGcm9tVHlwZSBzbyBhcyB0byBiZQoJdXNhYmxlIGJ5IHRoZSBWRVJTSU9OIGNvZGUuCgoJKiBpbmNsdWRlL3BlX2ltYWdlLmgsIGxvYWRlci9wZV9yZXNvdXJjZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBZGRlZCBHZXRSZXNEaXJFbnRyeUEgZm9yIHVzZSBieSB0aGUgVkVSU0lPTiBjb2RlLgoKCSogbWlzYy9BdHRpYy92ZXIuYywgbWlzYy9NYWtlZmlsZS5pbjoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJUmVtb3ZlZCBvbGQgVkVSLkRMTCBjb2RlLgoKCSogZGxscy92ZXJzaW9uLy5jdnNpZ25vcmUsIGRsbHMvdmVyc2lvbi9NYWtlZmlsZS5pbiwgZGxscy92ZXJzaW9uL2luZm8uYywgZGxscy92ZXJzaW9uL2luc3RhbGwuYywgZGxscy92ZXJzaW9uL3Jlc291cmNlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGF0aW9uIG9mIFZFUlNJT04uRExMLiBCYXNlZCBvbiBvbGQgbWlzYy92ZXIuYy4KCS0gQWNjZXNzaW5nIFBFIHZlcnNpb24gaW5mbyByZXNvdXJjZXMgc2hvdWxkIHdvcmsgY29ycmVjdGx5IG5vdy4KCS0gRml4ZWQgbWVtb3J5IGxlYWtzLgoJLSBDbGVhbiBzZXBhcmF0aW9uIG9mIDE2LSBhbmQgMzItYml0IHBhcnRzLgoJLSBNaW5vciBidWdmaXhlcy4KCgkqIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGxscy9NYWtlZmlsZS5pbjoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWRkIG5ldyBzdWJkaXJlY3RvcmllcyBkbGxzL3ZlciBhbmQgZGxscy92ZXJzaW9uLgoKCSogaWYxNjMyL3Zlci5zcGVjLCBkbGxzL3Zlci8uY3ZzaWdub3JlLCBkbGxzL3Zlci9NYWtlZmlsZS5pbiwgZGxscy92ZXIvdmVyMTYuYywgaW5jbHVkZS92ZXIuaDoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50YXRpb24gb2YgVkVSLkRMTC4gVGh1bmtzIHVwIHRvIFZFUlNJT04uRExMLgoKCSogbWlzYy9sc3RyLmM6IFBhc2NhbCBDdW9xIDxjdW9xQHZpc2FuLmlucmlhLmZyPgoJSXNDaGFyQWxwaGEzMkE6IHVzZSBsb29rLXVwIHRhYmxlIGZyb20gb2xlMm5scy5jLgoKCSogb2xlL29sZTJubHMuYzogUGFzY2FsIEN1b3EgPGN1b3FAdmlzYW4uaW5yaWEuZnI+CglMQ01hcFN0cmluZzMyQTogSW1wbGVtZW50ZWQgZmxhZ3MgTk9STV9JR05PUkVOT05TUEFDRSBhbmQKCU5PUk1fSUdOT1JFU1lNQk9MUyBpbiBzdHJpbmcgbWFwcGluZyBtb2RlLgoKCSogd2luZG93cy94MTFkcnYvd25kLmM6IE5GIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJQ3JlYXRlIFggd2luZG93IGZvciBjaGlsZCB3aW5kb3dzIHJlcGFyZW50ZWQgdG8gYmUgdG9wIGxldmVsIHdpbmRvd3MuCgoJKiBkbGxzL3NoZWxsMzIvc2hlbGxwYXRoLmMsIGluY2x1ZGUvc2hlbGwuaCwgcmVsYXkzMi9zaGVsbDMyLnNwZWM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVN0dWIgZm9yIFBhdGhRdWFsaWZ5MzJbQXxXXS4KCgkqIGdyYXBoaWNzL2QzZG1hdGVyaWFsLmMsIGdyYXBoaWNzL2RkcmF3LmM6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUJhYnJpYW4gVmlrdG9yIDx2QHVseXNzZXMuc2NoLmJtZS5odT4KCS0gYWRkZWQgc3VwcG9ydCBmb3IgQ29sb3JLZXlpbmcgZHVyaW5nIGJsaXRzCgktIG1pc2NlbGxhbmVvdXMgZml4ZXMKCgkqIGRsbHMvbnRkbGwvcnRsLmMsIGluY2x1ZGUvbnRkbGwuaCwgcmVsYXkzMi9udGRsbC5zcGVjOgoJQWxleCBLb3JvYmthIDxrb3JvYmthQGdhbGF4eS5hbXMuc3VueXNiLmVkdT4KCUFkZGVkIGFuIGltcGxlbWVudGF0aW9uIG9mIE1SU1cgbG9ja3MuCgoJKiBtc2Rvcy9pbnQyMS5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUFkZGVkIG1pc3NpbmcgaW5jbHVkZXMgKHRoZSBQU1AgaGFuZGxpbmcgd2FzIGluY29ycmVjdCwgYXMgdGhlCglNWl9TVVBQT1JURUQgZGVmaW5pdGlvbiB3YXMgbWlzc2luZykuIEFkZGVkIGEgc2ltcGxlIGhhbmRsZXIgZm9yCglkaXJlY3QgY29uc29sZSBpbnB1dCwgd2hpY2ggbmVlZHMgdG8gYmUgaW1wcm92ZWQuCgoJKiBjb25zb2xlL3R0eS5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCVNtYWxsIGZpeC4KCgkqIHNjaGVkdWxlci9zeW5jaHJvLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTGlzdCBoYW5kbGVzIFdhaXRGb3JNdWx0aXBsZU9iamVjdHMgaXMgd2FpdGluZyBmb3Igd2hlbiBydW5uaW5nIHdpdGgKCS1kZWJ1Z21zZyArd2luMzIuCgoJKiBkbGxzL2FkdmFwaTMyL3NlY3VyaXR5LmMsIHJlbGF5MzIvYWR2YXBpMzIuc3BlYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3R1YiBmb3IgR2V0U2VjdXJpdHlEZXNjcmlwdG9yQ29udHJvbC4KCgkqIHJlbGF5MzIvdXNlcjMyLnNwZWMsIHdpbmRvd3MvdXNlci5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTdHViIGZvciBHZXRVc2VyT2JqZWN0U2VjdXJpdHkuCgoJKiBtaXNjL3JlZ2lzdHJ5LmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJSW1wbGVtZW50ZWQgaGFuZGxpbmcgb2YgUkVHX01VTFRJX1NaIGFuZCBmaXhlZCBzbWFsbCBidWcgaW4KCVJlZ1NldFZhbHVlLgoKCSogd2luZG93cy93aW5wcm9jLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJRXZlcnkgRU1fR0VUTElORSBzZW5kIGJldHdlZW4gYSAzMlcgdG8gYSAzMkEgd2luZG93IHJldHVybmVkCglpbmNvbXBsZXRlIHZhbHVlcyBiZWZvcmUgKHRoZSBmaXJzdCAyIGNoYXJzIHdoZXJlIGN1dCBhd2F5KS4KCgkqIHdpbmRvd3Mvd2lucG9zLmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJRml4IHR5cG8gaW4gU2V0V2luZG93UG9zMzIuCgpTYXQgSmFuIDMwIDE1OjU1OjI4IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpbmNsdWRlL2J1aWx0aW4zMi5oLCBtaXNjL21haW4uYywgcmVsYXkzMi9idWlsdGluMzIuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRW5hYmxlL2Rpc2FibGUgcmVsYXkzMiBkZWJ1Z2dpbmcgb24gdGhlIGZseS4gU3RhcnQgYXBwIHdpdGgKCS1kZWJ1Z21zZyArcmVsYXkgb3Igd2FybityZWxheS4gU3VnZ2VzdGVkIGJ5IEp1ZXJnZW4gU2NobWllZC4KCgkqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBncmFwaGljcy9kM2RfcHJpdmF0ZS5oLCBpbmNsdWRlL2FjY29uZmlnLmgsIGluY2x1ZGUvY29uZmlnLmguaW4sIGluY2x1ZGUvZDNkLmgsIGluY2x1ZGUvd2luZV9nbC5oOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglBZGRlZCBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIE1lc2EncyBoZWFkZXIgZmlsZXMuCgoJKiBtdWx0aW1lZGlhL2F1ZGlvLmMsIG11bHRpbWVkaWEvZHNvdW5kLmM6CglBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglGaXhlZCBlcnJvciBtZXNzYWdlcy4KCgkqIG1pc2MvY29tbWRsZy5jOiBCZXJuZCBIZXJkIDxoZXJkQGhlcmRzb2Z0LmNvbT4KCVVzZSBwcm9wZXIgMTYtPjMyIG1lc3NhZ2UgY29udmVyc2lvbiBpbiBGSUxFRExHX0NhbGxXaW5kb3dQcm9jLgoKCSogd2luZG93cy94MTFkcnYvd25kLmM6IEJlcm5kIEhlcmQgPGhlcmRAaGVyZHNvZnQuY29tPgoJU2V0UGFyZW50IHNob3VsZCBsaW5rIHRoZSB3aW5kb3cgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaXN0LgoKCSogd2luZG93cy93aW5wb3MuYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglJbiBXaW5kb3cgU2V0V2luZG93UG9zIHdpdGggU1dQX0hJREVXSU5ET1cgZG9lcyBub3QgcmVtb3ZlCgl0aGUgZm9jdXMgZnJvbSB0aGUgZm9jdXMgd2luZG93OyBTaG93V2luZG93IHdpdGggU1dfSElERSBkb2VzLgoJU28gbW92ZSB0aGUgY29kZSB0aGF0IGRvZXMgdGhpcyBmcm9tIFNldFdpbmRvd1BvcyB0byBTaG93V2luZG93LgoKCSogbWVtb3J5L3N0cmluZy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNoZWNrIGZvciBOVUxMIGluIGxzdHJjcHkqIChXaW5kb3dzIHVzZXMgcmVhbCBleGNlcHRpb24gaGFuZGxlcnMpLgoKCSogTWFrZWZpbGUuaW46IEphbWVzIEp1cmFuIDxqdXJhbkBjc2UucHN1LmVkdT4KCURvbid0IGluc3RhbGwgaW5jbHVkZSBmaWxlcyB3aGVuIC0tZGlzYWJsZS1saWIgaXMgdXNlZC4KCgkqIHJlbGF5MzIvd2lubW0uc3BlYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUFkZGVkIFdJTk1NIGpveSogLnNwZWMgZW50cmllcy4KCgkqIG1zZG9zL3htcy5jOiBBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglYTVMgZml4LgoKCSogbXNkb3MvZG9zbWVtLmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglTcGVsbGluZyBmaXguCgoJKiBSRUFETUU6IEFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCURvYyB1cGRhdGUuCgoJKiBpbmNsdWRlL21pc2NlbXUuaCwgbXNkb3MvaW50MTAuYywgbXNkb3MvaW50MjEuYywgbXNkb3MvaW50ZXJydXB0cy5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJU29tZSBpbnRlcnJ1cHQgZW5oYW5jZW1lbnRzLgoKCSogbXNkb3MvaW9wb3J0cy5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJaW1wbGVtZW50ZWQgdGltZXIgbGF0Y2hpbmcKCXRyYWNlIG1lc3NhZ2UgZml4Cgl0ZW1wb3JhcnkgImZpeCIgZm9yIExpbnV4J3MgY29hcnNlIHRpbWVyIHJlc29sdXRpb24KCgkqIGlmMTYzMi9jb21wb2JqLnNwZWMsIGluY2x1ZGUvb2JqYmFzZS5oLCBpbmNsdWRlL3dpbmVycm9yLmgsIG9sZS9jb21wb2JqLmMsIG9sZS9vbGUyLmMsIHJlbGF5MzIvb2xlMzIuc3BlYzoKCUZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCUltcGxlbWVudGVkIHRoZSBzdGFydHVwLXNodXRkb3duIG1lY2hhbmlzbSBmb3IgdGhlIENPTSBzdWJzeXN0ZW0uCglJbXBsZW1lbnRlZCB0aGUgQ2xhc3Mgb2JqZWN0IHJlZ2lzdHJhdGlvbiBtZWNoYW5pc20uCgoJKiBwcm9ncmFtcy9jbG9jay8uY3ZzaWdub3JlLCBwcm9ncmFtcy9ub3RlcGFkLy5jdnNpZ25vcmU6IEFkZGVkIEZpLnMKCgkqIGluY2x1ZGUvd2luZS9vYmpfc3RvcmFnZS5oLCBvbGUvTWFrZWZpbGUuaW4sIG9sZS9zdGdfYmlnYmxvY2tmaWxlLmMsIG9sZS9zdGdfc3RyZWFtLmMsIG9sZS9zdG9yYWdlLmMsIG9sZS9zdG9yYWdlMzIuYywgb2xlL3N0b3JhZ2UzMi5oLCByZWxheTMyL29sZTMyLnNwZWM6CglGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglBZGRlZCBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgT0xFIHN0cnVjdHVyZWQgc3RvcmFnZS4gVGhlIG1haW4KCWZlYXR1cmVzIG9mIHRoaXMgaW1wbGVtZW50YXRpb24gYXJlOgoJLSBDYW4gb3BlbiBzdG9yYWdlcyBjcmVhdGVkIGluIFdpbmRvd3MuCgktIENhbiBjcmVhdGUgbmV3IHN0b3JhZ2VzIHRoYXQgdGhlIHdpbmRvd3MgbGlicmFyaWVzIGNhbgoJICByZWFkLgoJLSBQcm92aWRlcyBhbGwgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY3JlYXRlL29wZW4vcmVtb3ZlIGFuZAoJICByZW5hbWUgc3RyZWFtcyBhbmQgc3RvcmFnZXMgaW5zaWRlIHRoZSBtYWluIHN0b3JhZ2Ugb2JqZWN0LgoKCSogaW5jbHVkZS9taXNjZW11LmgsIG1pc2NlbXUvbWFpbi5jLCBncmFwaGljcy9kZHJhdy5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglEZWZpbmVkIFJFU1RPUkVfU0lHTkFMUyBieSBkZWZhdWx0IGFuZCBjYWxsIFNJR05BTF9FbXVsYXRvckluaXQKCXRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyIGluc3RlYWQuIEFkZGVkIGEgZmV3IHRyYWNlcy4gRml4ZWQgdGhlCgkiTWVtb3J5IGNvcnJ1cHRpb24gISIgbWVzc2FnZSBpbiBER0EgbW9kZS4gQ29tbWVudGVkIG91dCBhbgoJdW5uZWNlc3NhcnkgVFNYRjg2VmlkTW9kZVNldFZpZXdQb3J0IHRoYXQgY2F1c2VkIG15IFggc2VydmVyIHRvCglhY3QgdXAsIHJlbHlpbmcgb24gVFNYRjg2REdBU2V0Vmlld1BvcnQgaW5zdGVhZC4KCgkqIGdyYXBoaWNzL3BzZHJ2L3RleHQuYywgbXNkb3MvaW50MmYuYywgcHJvZ3JhbXMvd2luaGVscC9obHAyc2dtbC5jLCBkbGxzL2NvbWN0bDMyL2NvbWN0bDMydW5kb2MuYywgZmlsZXMvZmlsZS5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglTb21lIG1vcmUgd2FybmluZ3MgYW5kIGJ1Z3MgZml4ZWQuCgoJKiBkbGxzL2NvbWN0bDMyL3RhYi5jLCBpbmNsdWRlL3RhYi5oOiBBbGV4IFByaWVtIDxhbGV4cEBzY2kua3VuLm5sPgoJU21hbGwgdXBkYXRlLgoKCSogaW5jbHVkZS9jb21tY3RybC5oLCBpbmNsdWRlL3RyZWV2aWV3LmgsIGRsbHMvY29tY3RsMzIvdHJlZXZpZXcuYywgZGxscy9zaGVsbDMyL2Jyc2ZvbGRlci5jOgoJQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KCS0gVGhlIHVzdWFsIGJ1Z2ZpeGVzLgoJLSBCZXR0ZXIgdW5pY29kZSBzdXBwb3J0IChvbmx5IGRlZmluZXMsIGN1cnJlbnRseSkKCS0gRHJhZyAmIGRyb3AgaW1wbGVtZW50ZWQuCgktIExQU1RSX1RFWFRDQUxMQkFDSyBzaG91bGQgd29yayBub3cuCgktIEZpcnN0IHN0YXJ0IGF0IGN1c3RvbSBkcmF3IGNvZGUuCgoJKiB3aW5kb3dzL3gxMWRydi9ldmVudC5jOiBGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglNYWtlIHN1cmUgdGhhdCB0aGUga2V5c3RhdGUgcmVjZWl2ZWQgYnkgdGhlIFdNX1hCVVRUT05VUCBhbmQKCVdNX1hCVVRUT05ET1dOIG1hdGNoZXMgdGhlIG1lc3NhZ2UuIEluIFgsIHRoZSBrZXlzdGF0ZSBpcyBjaGFuZ2VkCglhZnRlciB0aGUgbWVzc2FnZSBpcyBwcm9jZXNzZWQuICBJbiBXaW5kb3dzLCBpdCBpcyBjaGFuZ2VkIGJlZm9yZS4KCgkqIGRsbHMvYWR2YXBpMzIvc2VjdXJpdHkuYywgZGxscy9hZHZhcGkzMi9zZXJ2aWNlLmM6CglNYXR0aGV3IEJlY2tlciA8bWJlY2tlckBnbGFzc2NpdHkubmV0PgoJRG9jIHVwZGF0ZXMuCgoJKiB3aW4zMi9maWxlLmM6IEJlcmVuZCBSZWl0c21hIDxiZXJlbmQgYXQgYXNzZXQtY29udHJvbC5jb20+CglTZXRGaWxlQXR0cmlidXRlczMyQSBjaGFuZ2VkIHRvIG1ha2UgZmlsZSB3cml0ZWFibGUgd2hlbgoJRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkgaXMgbm90IHNldC4KCgkqIGNvbnNvbGUvaW50ZXJmYWNlLmMsIGNvbnNvbGUvbmN1cnNlcy5jLCBpbmNsdWRlL2NvbnNvbGUuaCwgbXNkb3MvaW50MTAuYzoKCUpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJUHJlbGltaW5hcnkgY29sb3IgY29uc29sZSBzdXBwb3J0LgoKCSogZG9jdW1lbnRhdGlvbi9sYW5ndWFnZXMsIHByb2dyYW1zL2Nsb2NrL0NoYW5nZUxvZywgcHJvZ3JhbXMvY2xvY2svRmkucmMsIHByb2dyYW1zL2Nsb2NrL01ha2VmaWxlLmluLCBwcm9ncmFtcy9jbG9jay9tYWluLmMsIHByb2dyYW1zL25vdGVwYWQvQ2hhbmdlTG9nLCBwcm9ncmFtcy9ub3RlcGFkL0ZpLnJjLCBwcm9ncmFtcy9ub3RlcGFkL01ha2VmaWxlLmluLCBwcm9ncmFtcy9ub3RlcGFkL21haW4uYywgcmVzb3VyY2VzL3N5c3Jlc19GaS5yYzoKCUp1a2thLVBla2thIElpdm9uZW4gPGppaXZvbmVuQHBvc2VpZG9uLmNzLmh1dC5maT4KCVVwZGF0ZWQgRmlubmlzaCBsYW5ndWFnZSBzdXBwb3J0LgoKRnJpIEphbiAyOSAxNToxMjoxMSAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS92ZncuaCwgaW5jbHVkZS93aW5lcnJvci5oLCBpbmNsdWRlL3dpbnR5cGVzLmgsIG11bHRpbWVkaWEvbXN2aWRlby5jLCBvbGUvZ3VpZC5jLCBwcm9ncmFtcy9NYWtlZmlsZS5pbiwgcHJvZ3JhbXMvYXZpdG9vbHMvLmN2c2lnbm9yZSwgcHJvZ3JhbXMvYXZpdG9vbHMvTWFrZWZpbGUuaW4sIHByb2dyYW1zL2F2aXRvb2xzL2ljaW5mby5jLCByZWxheTMyL21zdmZ3MzIuc3BlYywgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvZGVidWcuaCwgaW5jbHVkZS9kZWJ1Z2RlZnMuaCwgaW5jbHVkZS9vbGVhdXRvLmg6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVVwZGF0ZWQgbXN2aWRlby4gTmV3IHByb2dyYW0gJ2ljaW5mbyBbLWFib3V0XSBbLWNvbmZpZ3VyZV0nIHRvCglxdWVyeSBpbnN0YWxsZWQgKHdpbjMyKSBjb21wcmVzc29ycy4gU3RhcnRlZCBvbiBBVklGSUxFIHN1cHBvcnQuCgpUaHUgSmFuIDI4IDE3OjU2OjE0IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpbmNsdWRlL3dpbmUvb2JqX21pc2MuaCwgaW5jbHVkZS93aW5lL29ial9tb25pa2VyLmgsIGluY2x1ZGUvd2luZS9vYmpfc3RvcmFnZS5oLCBvbGUvTWFrZWZpbGUuaW4sIG9sZS9iaW5kY3R4LmMsIG9sZS9maWxlbW9uaWtlci5jLCBvbGUvaXRlbW1vbmlrZXIuYywgb2xlL21vbmlrZXIuYywgb2xlL29sZTIuYzoKCU5vb21lbiBIYW16YSA8bm9vbWVuQG1hY2FkYW1pYW4uY29tPgoJQWRkZWQgYSBzdHViIGltcGxlbWVudGF0aW9uIGZvciBGaWxlTW9uaWtlciwgSXRlbU1vbmlrZXIgYW5kIEJpbmRDdHgKCWNsYXNzZXMuCgoJKiBkZWJ1Z2dlci9kYmcueSwgZGVidWdnZXIvZGVidWcubDoKCU5GIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJSW1wbGVtZW50ZWQgdGhlIHN5bWJvbGZpbGUgY29tbWFuZCAoYXMgbWVudGlvbmVkIGJ5IHRoZSBoZWxwCgljb21tYW5kKS4gVGhpcyByZWFkcyBhIHN5bWJvbCBmaWxlIGluIHRoZSBmb3JtYXQgZ2VuZXJhdGVkIGJ5IG5tLgoKCSogbXVsdGltZWRpYS9kcGxheS5jOiBQZXRlciBIdW5uaXNldHQgPGh1bm5pc2VAbm9ydGVsbmV0d29ya3MuY29tPgoJLSBTbWFsbCBidWcgZml4LgoJLSBBZGRlZCBkaXJlY3QgcGxheSBhc2NpaSBpbnRlcmZhY2VzLgoJLSBGaXhlZCB1cCB0aGUgUXVlcnlJbnRlcmZhY2UgZm9yIGRwbGF5IGFuZCBkcGxheWxvYmJ5IHRvIGhhbmRsZSBhbGwgY2FzZXMuCgoJKiBtZW1vcnkvdmlydHVhbC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUZpeGVkIEZJTEVfVklFVyBzdHJ1Y3QgaW5pdGlhbGlzYXRpb24uCgoJKiBpbmNsdWRlL2Rvc2V4ZS5oOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJRml4ZWQgbm9uLWkzODYgY29tcGlsZS4KCgkqIGdyYXBoaWNzL3ZnYS5jLCBtc2Rvcy9kcG1pLmMsIG11bHRpbWVkaWEvZHBsYXkuYywgbXVsdGltZWRpYS9tbWlvLmMsIGRsbHMvY29tY3RsMzIvYW5pbWF0ZS5jLCBkbGxzL2NvbWN0bDMyL2NvbWJvZXguYywgZGxscy9jb21jdGwzMi9jb21jdGwzMnVuZG9jLmMsIGRsbHMvY29tY3RsMzIvaG90a2V5LmMsIGRsbHMvY29tY3RsMzIvaXBhZGRyZXNzLmMsIGRsbHMvY29tY3RsMzIvbGlzdHZpZXcuYywgZGxscy9jb21jdGwzMi9wYWdlci5jLCBkbGxzL2NvbWN0bDMyL3Byb3BzaGVldC5jLCBkbGxzL2NvbWN0bDMyL3JlYmFyLmMsIGRsbHMvY29tY3RsMzIvdGFiLmMsIGRsbHMvY29tY3RsMzIvdG9vbGJhci5jLCBkbGxzL2NvbWN0bDMyL3RyZWV2aWV3LmM6CglKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CglDb21tZW50ZWQgb3V0IHVudXNlZCB2YXJpYWJsZXMgdG8gcHJldmVudCBuZWVkbGVzcyBjb21waWxlciB3YXJuaW5ncy4KCgkqIGluY2x1ZGUvZGRlbWwuaCwgbWlzYy9kZGVtbC5jOgoJS2VpdGggTWF0dGhld3MgPGtlaXRoX21Ac3dlZW5leS5kZW1vbi5jby51az4KCTFzdCBjdXQgaW1wbGVtZW50YXRpb24gb2YgRGRlSW5pdGlhbGl6ZTMyVyBhbmQgc3VwcG9ydGluZyBjb2RlLgoKCSogZGxscy9hZHZhcGkzMi9hZHZhcGkuYywgZGxscy9hZHZhcGkzMi9ldmVudGxvZy5jLCBkbGxzL2FkdmFwaTMyL3NlY3VyaXR5LmMsIGRsbHMvYWR2YXBpMzIvc2VydmljZS5jOgoJTWF0dGhldyBCZWNrZXIgPG1iZWNrZXJAZ2xhc3NjaXR5Lm5ldD4KCURvY3VtZW50YXRpb24gc3RhbmRhcmRpemF0aW9ucy4KCgkqIGluY2x1ZGUvcXVldWUuaCwgd2luZG93cy9ob29rLmMsIHdpbmRvd3MvbWVzc2FnZS5jLCB3aW5kb3dzL3F1ZXVlLmMsIHdpbmRvd3Mvd2luLmMsIHdpbmRvd3Mvd2lucG9zLmM6CglTdGVwaGFuZSBMdXNzaWVyIDxzdGVwaGFuZUBtYWNhZGFtaWFuLmNvbT4KCS0gTWFkZSB0aGUgbWVzc2FnZSBxdWV1ZSBhY2Nlc3MgdG8gYmUgdGhyZWFkIHNhZmUuIChVc2luZyB0d28gbmV3CgkgIGZ1bmN0aW9ucyB0byBhY2Nlc3MgdGhlIG1lc3NhZ2UgcXVldWUsIFFVRVVFX0xvY2soKSwgUVVFVUVfVW5sb2NrKCkKCSAgaW5zdGVhZCBvZiBHbG9iYWxMb2NrMTYoKSkuCgktIEZpeGVkIFFVRVVFX0R1bXBRdWV1ZSAodXNlZCBieSAiaW5mbyBxdWV1ZSA8aGFuZGxlPiIgd2l0aCB0aGUKCSAgd2luZS1kZWJ1Z2dlcikuCgoJKiBtdWx0aW1lZGlhL2Rzb3VuZC5jLCBtdWx0aW1lZGlhL21tc3lzdGVtLmMsIG9iamVjdHMvdGV4dC5jLCB3aW5kb3dzL2RpYWxvZy5jLCB3aW5kb3dzL2RpbnB1dC5jLCB3aW5kb3dzL21kaS5jLCB3aW5kb3dzL21zZ2JveC5jLCB3aW5kb3dzL3dpbi5jLCB3aW5kb3dzL3dpbnByb2MuYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmgsIGdyYXBoaWNzL2QzZG1hdGVyaWFsLmMsIGdyYXBoaWNzL21ldGFmaWxlZHJ2L2luaXQuYywgaWYxNjMyL3JlbGF5LmMsIGluY2x1ZGUvd2luY29uLmgsIGxvYWRlci9yZXNvdXJjZS5jLCBtaXNjL2ltbS5jLCBtaXNjL2x6ZXhwYW5kLmMsIG1zZG9zL2ludDIxLmMsIGRsbHMvY29tY3RsMzIvcHJvcHNoZWV0LmMsIGRsbHMvbnRkbGwvcnRsLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUZpeGVkIGEgbG90IG9mIHdhcm5pbmdzIGZvciBwb3NzaWJsZSBwcm9ibGVtcy4KCgkqIG1pc2MvY29tbS5jOiBIZXJiZXJ0IFJvc21hbml0aCA8aGVycEB3aWxkc2F1Lmlkdi51bmktbGluei5hYy5hdD4KCUZpeGVkIHR5cG8uCgoJKiB0b29scy9idWdfcmVwb3J0LnBsOiBBZGFtIHRoZSBKYXp6IEd1eSA8bWFnaWNib3hAYmVzdHdlYi5uZXQ+CglGaXhlZCB2YXJpb3VzIGJ1Z3MuCglNYWRlIG5ld2JpZSBtb2RlIGVhc2llci4KCgkqIG9iamVjdHMvY3Vyc29yaWNvbi5jLCBkbGxzL2NvbWN0bDMyL2ltYWdlbGlzdC5jLCBpZjE2MzIvdXNlci5zcGVjLCBpbmNsdWRlL3dpbmUvd2ludXNlcjE2LmgsIGluY2x1ZGUvd2ludXNlci5oOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglGaXhlZCBHZXRJY29uSW5mbzE2ICguc3BlYyxJQ09OSU5GTyBzdHJ1Y3QgaXMgZGlmZmVyZW50IGZvciBXaW4xNi9XaW4zMikuCgoJKiBjb25zb2xlL25jdXJzZXMuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglTd2l0Y2ggbmN1cnNlcy5oL2N1cnNlcy5oIGluY2x1ZGUgKHdvcmtzIGJldHRlciBmb3IgRnJlZUJTRCkuCgoJKiB3aW5kb3dzL2RyaXZlci5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUZpeGVkIGxvYWRpbmcgb2Ygd2luMzIgZHJpdmVycy4KClR1ZSBKYW4gMjYgMTc6Mjk6NDkgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGZpbGVzL3Byb2ZpbGUuYzogRG9uJ3QgYWJvcnQgUFJPRklMRV9HZXRTZWN0aW9uIG9uIGVtcHR5IGtleXMuCgoJKiBkbGxzL21zYWNtMzIvaW50ZXJuYWwuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglUZW1wb3JhcnkgI2lmIDAnZWQgcGFydCBmb3IgYnVpbHRpbiBtb2R1bGVzIGluIE1TQUNNIHRvIG1ha2UgaXQKCWNvbXBpbGUgd2l0aCB0aGUgcGF0Y2ggZm9yIGxvYWRhYmxlIGRyaXZlcnMuCgoJKiBpbmNsdWRlL2RyaXZlci5oLCByZWxheTMyL3dpbm1tLnNwZWMsIHdpbmRvd3MvZHJpdmVyLmM6CglFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUFkZGVkIHN1cHBvcnQgZm9yIGxvYWRpbmcgZHJpdmVycyBpbiBXaW5lLgoKCSogdG9vbHMvYnVnX3JlcG9ydC5wbDogQWRhbSB0aGUgSmF6eiBHdXkgPG1hZ2ljYm94QGJlc3R3ZWIubmV0PgoJQSBwZXJsIHNjcmlwdCB0byBwcm9kdWNlIGEgYnVnIHJlcG9ydCB3aXRoIGxpdHRsZSBoYXNzbGUuCgoJKiBncmFwaGljcy9kaXNwZGliLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJQWRkZWQgKGR1bW15KSBEZWF0aC9SZXN1cnJlY3Rpb24gY2FsbHMgdG8gRGlzcGxheURpYi4KCgkqIG1pc2MvbHpleHBhbmQuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBbGxvY2F0ZSBhIERPUyBoYW5kbGUgaWYgd2Ugb3BlbiBhIG5vcm1hbCBmaWxlIHdpdGggTFpPcGVuRmlsZTE2LgoKCSogZ3JhcGhpY3MvZGRyYXcuYywgaW5jbHVkZS9kZHJhdy5oOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CgktIGFkZGVkIGRlcHRoIGNvbnZlcnNpb24gcm91dGluZXMgKG9ubHkgOGJwcCAtPiAxNiBicHAgZm9yIG5vdykKCS0gYWRkZWQgc3VwcG9ydCBvZiBERVBUSF9GSUxMIGZvciBCbGl0cwoJLSBhZGRlZCBzb21lIGZsYWdzIGluIEdldENhcHMgdG8gZ2V0IHNvbWUgZ2FtZXMgd29ya2luZwoKCSogaWYxNjMyL3VzZXIuc3BlYywgaW5jbHVkZS93aW5lL3dpbnVzZXIxNi5oLCBpbmNsdWRlL3dpbnVzZXIuaCwgb2JqZWN0cy9jdXJzb3JpY29uLmMsIHJlbGF5MzIvdXNlcjMyLnNwZWMsIGRsbHMvY29tY3RsMzIvaW1hZ2VsaXN0LmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglJbXBsZW1lbnRlZCBHZXRJY29uSW5mbzE2IC0+IGNhbGwgdG8gR2V0SWNvbkluZm8zMi4KCgkqIHNjaGVkdWxlci9jbGllbnQuYzogQ29tbWVudGVkIG91dCBFWEVDX1NFUlZFUgoKCSogZGxscy9jb21jdGwzMi9kcmFnbGlzdC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCTMgbWlzc2luZyBXSU5BUEkgYWRkZWQuCgoJKiBkbGxzL3NoZWxsMzIvZW51bWlkbGlzdC5jLCBkbGxzL3NoZWxsMzIvaWNvbmNhY2hlLmMsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5oLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgZGxscy9zaGVsbDMyL3NobGZvbGRlci5jLCBkbGxzL3NoZWxsMzIvc2hyZXMucmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVNtYWxsIGZpeGVzLgoKCSogZGxscy9jb21jdGwzMi90cmVldmlldy5jLCBpbmNsdWRlL2NvbW1jdHJsLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUNoYW5nZWQgc29tZSB0cmVldmlldyByZWxhdGVkIGRlZmluaXRpb25zLgoKCSogZGxscy9zaGVsbDMyL01ha2VmaWxlLmluLCBkbGxzL3NoZWxsMzIvYnJzZm9sZGVyLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUltcGxlbWVudGVkIFNIQnJvd3NlRm9yRm9sZGVyKCkgZGlhbG9nLgoKCSogZGVidWdnZXIvbXNjLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJRml4ZWQgdHlwbyBpbiB0eXBlIChyZW1vdmVkIHF1aXRlIGEgZmV3IHdhcm5pbmdzKS4KCgkqIGRsbHMvYWR2YXBpMzIvc2VjdXJpdHkuYywgcmVsYXkzMi9hZHZhcGkzMi5zcGVjOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCBHZXRTZWN1cml0eURlc2NyaXB0b3JPd25lci9Hcm91cCwgUmV2ZXJ0VG9TZWxmIHN0dWJzLgoJUmV0dXJuIE5VTEwgZnJvbSBPcGVuVGhyZWFkVG9rZW4uCgoJKiB3aW4zMi9jb25zb2xlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRG8gbm90IGVuZGxlc3NseSBsb29wIGluIENPTlNPTEVfZ2V0X2lucHV0IGFmdGVyIEVPRi4KCUNyZWF0ZSB4dGVybSBldmVuIGlmIHN0ZGluIGlzIG5vdCBhIHRlcm1pbmFsaGFuZGxlLgoJU2V0Q29uc29sZUN1cnNvclBvc2l0aW9uOiBPbmx5IG1ha2UgY29tcGxleCBjb25zb2xlIG9uIHJvdyBjaGFuZ2UsCglpZ25vcmUgaW50ZXJsaW5lIHBvc2l0aW9uaW5nIChzbyB0aGUgY3lnd2luIGNtZGxpbmUgdG9vbHMgZG8gbm90CgljcmVhdGUgeHRlcm1zIHVubmVjZXNzYXJ5KQoKCSogbWlzYy9wcmludGRydi5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCU1ha2Ugc3VyZSBEcnZHZXRQcmludGVyRGF0YSByZXR1cm5zIHRoZSBjb3JyZWN0IGRhdGEgaWYgY2JEYXRhIDw9IDEKCgkqIGluY2x1ZGUvcXVldWUuaCwgd2luZG93cy9tZXNzYWdlLmMsIHdpbmRvd3MvcXVldWUuYywgd2luZG93cy93aW4uYzoKCVN0ZXBoYW5lIEx1c3NpZXIgPHN0ZXBoYW5lQG1hY2FkYW1pYW4uY29tPgoJLSBDaGFuZ2luZyBNRVNTQUdFUVVFVUUgc3RydWN0dXJlIGFjY29yZGluZyB0byBVbHJpY2ggcHJvcG9zaXRpb24uCgktIE9uZSBtZXNzYWdlIHF1ZXVlIGZvciBldmVyeSB0aHJlYWQgbmVlZGluZyBpdC4KCS0gTWVzc2FnZXMgaW4gdGhlIG1lc3NhZ2UgcXVldWUgYXJlIG5vdyBzdG9yZWQgaW4gYSBsaW5rZWQgbGlzdAoJLSBNZXNzYWdlcyBhcmUgYWxsb2NhdGVkIGluIHRoZSBzeXN0ZW0gaGVhcC4KCS0gTWVzc2FnZXMgaW4gdGhlIG1lc3NhZ2UgcXVldWUgYXJlIDMyIGJpdHMgKE1TRzMyKS4KCS0gQWxsIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyByZWdhcmRpbmcgbWVzc2FnZXMgaW4gdGhlIG1lc3NhZ2UgcXVldWUgYXJlCgkgIHRocmVhZCBzYWZlLgoKU3VuIEphbiAyNCAxOToxNDo1OCAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZGxscy9jb21jdGwzMi9jb21tY3RybC5jLCBkbGxzL2NvbWN0bDMyL2ZsYXRzYi5jLCBkbGxzL2NvbWN0bDMyL2ltYWdlbGlzdC5jLCBkbGxzL2NvbWN0bDMyL2xpc3R2aWV3LmMsIGRsbHMvY29tY3RsMzIvcHJvcHNoZWV0LmMsIGRsbHMvY29tY3RsMzIvc3RhdHVzLmMsIGluY2x1ZGUvZmxhdHNiLmg6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJRml4ZWQgc2V2ZXJhbCBidWdzIGFuZCB0eXBvcy4KCgkqIGRvY3VtZW50YXRpb24vY29tbW9uX2NvbnRyb2xzOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJVXBkYXRlcyBhbmQgZml4ZXMuCgoJKiBkbGxzL2NvbWN0bDMyL01ha2VmaWxlLmluLCBkbGxzL2NvbWN0bDMyL2RyYWdsaXN0LmMsIGluY2x1ZGUvY29tbWN0cmwuaCwgcmVsYXkzMi9jb21jdGwzMi5zcGVjOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCU5ldyBkcmFnIGxpc3QgY29udHJvbC4KCgkqIGRsbHMvY29tY3RsMzIvY29tY3RsMzJ1bmRvYy5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJRml4ZWQgcG9pbnRlciBidWdzIGluIERQQV9JbnNlcnRQdHIoKSBhbmQgRFBBX0RlbGV0ZVB0cigpLgoKCSogZGxscy9jb21jdGwzMi9wcm9ncmVzcy5jLCBpbmNsdWRlL3Byb2dyZXNzLmg6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgV01fW0cvU11FVEZPTlQgaGFuZGxpbmcuCgoJKiBkbGxzL2NvbWN0bDMyL3BhZ2VyLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBXTV9DT01NQU5EIGFuZCBXTV9OT1RJRlkgaGFuZGxpbmcuCgoJKiBkbGxzL2NvbWN0bDMyL3Rvb2x0aXBzLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlZCByZWRyYXcgYnVnIGZvciB0cmFja2luZyB0b29sdGlwcy4KCgkqIGRsbHMvY29tY3RsMzIvcmViYXIuYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIHNvbWUgbWVzc2FnZXMgdG8gdGhlIHJlYmFyIGNvbnRyb2wuCgoJKiBtdWx0aW1lZGlhL21jaWNkYS5jOiBHZW9mZiBDbGFyZSA8Z3djQHJvb3QuY28udWs+CglTZXZlcmFsIGludGVybmFsIGZ1bmN0aW9ucyB3b24ndCBjb21waWxlIHdoZW4gdGhlIGNvbmRpdGlvbmFsCgkjaWYgZGVmaW5lZChsaW51eCkgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKQoJY29tZXMgb3V0IGZhbHNlLiAgSSBtb3ZlZCB0aGUgY29uZGl0aW9uYWxzIGFyb3VuZCBzbyB0aGF0Cgl0aGUgZmlsZSB3b3VsZCBhdCBsZWFzdCBjb21waWxlLiAgTm90IHN1cmUgaWYgaXQgZG9lcyB0aGUKCXJpZ2h0IHRoaW5nIG9uIG5vbi1saW51eC9GcmVlQlNEL05ldEJTRCBzeXN0ZW1zLgoKCSogbWlzYy90b29saGVscC5jOiBHZW9mZiBDbGFyZSA8Z3djQHJvb3QuY28udWs+CglNb3ZlZCBwcm9jZXNzLmggaGlnaGVyIHVwIHRoZSBpbmNsdWRlIGxpc3QsIHRvIGF2b2lkIGEgcHJvYmxlbSB3aXRoCgkiRVJSIiBiZWluZyByZWRlZmluZWQgaW4gc3lzL3JlZ3NldC5oLgoKCSogbWlzYy9jb21tLmM6IEdlb2ZmIENsYXJlIDxnd2NAcm9vdC5jby51az4KCVRoZSBCNTc2MDAgYW5kIEIxMTUyMDAgc3ltYm9scyBhcmUgbm90IGRlZmluZWQgaW4gVW5peHdhcmUuCgoJKiBjb250cm9scy9saXN0Ym94LmM6IE5GIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJQ2hhbmdlIFNXXz8/PyBvcHRpb25zIG9uIGxpc3QgYm94IHNjcm9sbGluZyBzbyB0aGF0IHRoZXkgbWF0Y2ggd2hhdAoJV2luZG93cyBkb2VzLgoKCSogbG9hZGVyL2Rvcy9kb3N2bS5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCU1vdmVkIERPUyBoYW5kbGUgYWxsb2NhdGlvbiBzbGlnaHRseSwgdG8gZml4IHBvdGVudGlhbCBtZW1vcnkKCWxlYWtzIGFuZCBsb3N0IGhhbmRsZXMuIEFsc28gcmVtb3ZlZCBzb21lIHVzZWxlc3MgaW5pdCBjb2RlLgoKCSogZ3JhcGhpY3MvcHNkcnYvYWZtLmMsIGdyYXBoaWNzL3BzZHJ2L3RleHQuYywgaWYxNjMyL2R1bW15LmMsIGlmMTYzMi9nZGkuc3BlYywgbWlzYy9wcmludGRydi5jOgoJTmljayBIb2xsb3dheSA8Tmljay5Ib2xsb3dheUBhbGZpZS5kZW1vbi5jby51az4KCUludGVybmFsIFBvc3RTY3JpcHQgcHJpbnRlciBkcml2ZXIgaW1wcm92ZW1lbnRzLgoKCSogY29udHJvbHMvZWRpdC5jOiBHZXJhcmQgUGF0ZWwgPEcuUGF0ZWxAd2FuYWRvby5mcj4KCUNoYW5nZWQgRURJVF9FTV9DaGFyRnJvbVBvcyB0byByZXR1cm4gbGluZSBudW1iZXIuCgoJKiB3aW5kb3dzL3gxMWRydi93bmQuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglGcmVlIHRoZSBwcml2YXRlIGRhdGEgcG9pbnRlciwgVEhFTiBzZXQgaXQgdG8gTlVMTC4KCgkqIHdpbmRvd3MvbWVzc2FnZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCU1pc3NpbmcgV0lOQVBJLgoKCSogaW5jbHVkZS9vbGVhdXRvLmgsIGluY2x1ZGUvd2luZXJyb3IuaCwgb2xlL01ha2VmaWxlLmluLCBvbGUvc2FmZWFycmF5LmMsIHJlbGF5MzIvb2xlYXV0MzIuc3BlYzoKCVN5bHZhaW4gU3QuR2VybWFpbiA8c3lsdmFpbkBtYWNhZGFtaWFuLmNvbT4KCUltcGxlbWVudGF0aW9uIG9mIHRoZSBTYWZlQXJyYXkgZmFtaWx5IGZ1bmN0aW9ucy4KCgkqIGluY2x1ZGUvd2luZG93cy5oLCByZWxheTMyL2tlcm5lbDMyLnNwZWMsIHNjaGVkdWxlci90aHJlYWQuYzoKCUd1eSBBbGJlcnRlbGxpIDxnYWxiZXJ0ZUBuZW8ubHJ1bi5jb20+CglBZGRlZCBzdHViIGZvciBTZXRUaHJlYWRMb2NhbGUuCgoJKiBvYmplY3RzL3RleHQuYzogR3V5IEFsYmVydGVsbGkgPGdhbGJlcnRlQG5lby5scnVuLmNvbT4KCUZpbmlzaGVkIEdldFRleHRDaGFyc2V0SW5mbyByb3V0aW5lLgoKCSogb2xlL25scy9lbnUubmxzLCBvbGUvb2xlMm5scy5jOgoJR3V5IEFsYmVydGVsbGkgPGdhbGJlcnRlQG5lby5scnVuLmNvbT4KCUZpeGVkIEZJWE1FIGluIEVudW1UaW1lRm9ybWF0czMyVwoJQWRkZWQgc3VwcG9ydCBmb3IgRk9OVFNJR05BVFVSRSBpbiBHZXRMb2NhbGVJbmZvMzJBIGFuZCB1cGRhdGVkCglHZXRMb2NhbGVJbmZvMzJXLgoKCSogZG9jdW1lbnRhdGlvbi9pbnRlcm5hbC1kbGwsIGRvY3VtZW50YXRpb24vc2hlbGwzMiwgZG9jdW1lbnRhdGlvbi93aW5lLm1hbjoKCVBhc2NhbCBDdW9xIDxQYXNjYWwuQ3VvcUBpbnJpYS5mcj4KCUZpeGVkIHR5cG9zLgoKCSogZGVidWdnZXIvbXNjLmM6IFNlcmdleSBUdXJjaGFub3YgPHR1cmNoYW5vdkB1c2EubmV0PgoJRml4ZWQgc291cmNlIGxpbmUgbWF0Y2hpbmcgZm9yIGZ1bmN0aW9ucyBpbiBERUJVR19Qcm9jZXNzQ29mZkRlYnVnOwoJc2VhcmNoaW5nIGZvciBEQkcgYW5kIFBEQiBmaWxlcy4KCgkqIGRlYnVnZ2VyL2hhc2guYzogU2VyZ2V5IFR1cmNoYW5vdiA8dHVyY2hhbm92QHVzYS5uZXQ+CglGaXggZm9yIGZpbGVzIHdoaWNoIGRvIG5vdCBjb250YWluIGV4cG9ydHMgKGZnLCBFWEUpIHRvIGdldCBwcm9jZXNzZWQKCWZvciBkZWJ1ZyBpbmZvcm1hdGlvbi4KCgkqIGlmMTYzMi9rZXJuZWwuc3BlYywgaWYxNjMyL3JlbGF5LmMsIGlmMTYzMi90aHVuay5jLCB0b29scy9idWlsZC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRlZCBLRVJORUwuNjIxIChDQkNsaWVudFRodW5rU0xFeCkuCgoJKiBkZWJ1Z2dlci9kYmcueSwgZGVidWdnZXIvZGVidWcubCwgZGVidWdnZXIvaW5mby5jLCBpbmNsdWRlL21haW4uaCwgbWlzYy9tYWluLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFsbG93IHN3aXRjaGluZyBvZmYvb24gb2YgZGVidWdtc2dzIGluIHRoZSBkZWJ1Z2dlci4KCgkqIGxvYWRlci9tYWluLmMsIG1pc2NlbXUvaW5zdHIuYywgbXNkb3MvZG9zbWVtLmMsIG1zZG9zL2ludDE1LmMsIGluY2x1ZGUvbWlzY2VtdS5oOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJSW1wbGVtZW50ZWQgSW50IDB4MTUvMHhjMDogQklPUyAtIEdFVCBDT05GSUcgYW5kIHNvbWUgb3RoZXIgQklPUwoJZGF0YS4KClNhdCBKYW4gMjMgMTQ6MTU6MTcgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGdyYXBoaWNzL3BhaW50aW5nLmMsIGlmMTYzMi91c2VyLnNwZWMsIGluY2x1ZGUvd2luZS93aW51c2VyMTYuaCwgbG9hZGVyL3BlX2ltYWdlLmMsIG1pc2MvbHN0ci5jLCB3aW5kb3dzL2hvb2suYywgd2luZG93cy9tZXNzYWdlLmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglJbXBsZW1lbnRlZCBXSU4xNl9DYWxsTXNnRmlsdGVyMzIsIFdJTjE2X0Rpc3BhdGNoTWVzc2FnZTMyLAoJRHJhd0FuaW1hdGVkUmVjdHMxNiAoc3R1YiksIEZvcm1hdE1lc3NhZ2UxNiwgV0lOMTZfR2V0TWVzc2FnZTMyLAoJV0lOMTZfUGVla01lc3NhZ2UzMiBhbmQgV0lOMTZfVHJhbnNsYXRlTWVzc2FnZTMyLgoKCSogZGxscy9zaGVsbDMyL01ha2VmaWxlLmluLCBkbGxzL3NoZWxsMzIvY2xhc3Nlcy5jLCBkbGxzL3NoZWxsMzIvY29udG1lbnUuYywgZGxscy9zaGVsbDMyL2RhdGFvYmplY3QuYywgZGxscy9zaGVsbDMyL2VudW1pZGxpc3QuYywgZGxscy9zaGVsbDMyL2ZvbGRlcnMuYywgZGxscy9zaGVsbDMyL2ljb25jYWNoZS5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmMsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uaCwgZGxscy9zaGVsbDMyL3NoZWxsZ3VpZC5jLCBkbGxzL3NoZWxsMzIvc2hlbGxsaW5rLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9sZS5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgZGxscy9zaGVsbDMyL3NoZWxscGF0aC5jLCBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmMsIGluY2x1ZGUvaW50ZXJmYWNlcy5oLCBpbmNsdWRlL3NobGd1aWQuaCwgaW5jbHVkZS9zaGxvYmouaCwgaW5jbHVkZS93aW5kb3dzLmgsIG1pc2Mvc2hlbGwuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJLSBzb21lIGZpeGVzLCBjbGVhbmVkIHVwIGluY2x1ZGVzLCBmaXhlZCBsZWFrcwoJLSBjbGVhbiBEbGxSZWZlcmVuY2VDb3VudCwgYmV0dGVyIERsbE1haW4oKQoJLSBkeW5hbWljYWxseSBsaW5raW5nIExvb2t1cEljb25JZEZyb21EaXJlY3RvcnlFeDMyIGFuZAoJICBDcmVhdGVJY29uRnJvbVJlc291cmNlRXgzMiB0byBVU0VSMzIKCS0gbW92ZWQgZ3VpZCdzIGluc3RhbmNlcyB0byBuZXcgZmlsZSBzaGVsbGd1aWQuYwoJLSBpbXBsZW1lbnRlZCAgU2hlbGxFeGVjdXRlRXgzMlcKCgkqIG9sZS9NYWtlZmlsZS5pbiwgb2xlL2NvbXBvYmouYywgb2xlL2d1aWQuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTW92ZWQgdGhlIGluc3RhbmNlIGNyZWF0aW9uIG9mIEdVSUQncyB0byBhIG5ldyBmaWxlLgoJU2l6ZSBvZiBjb21wb2JqLm8gZ29lcyBkb3duIHRvIDEvMzsgc2hvdWxkIHByZXZlbnQgbW9yZSBzaWcxMSdzLgoKCSogaW5jbHVkZS9pbml0Z3VpZC5oOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBmaWxlIHRvIGluc3RhbnRpYXRlIEdVSUQncyBtcy1saWtlLgoKCSogd2luZG93cy94MTFkcnYvd25kLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU2V0IHByaXZhdGUgZGF0YSBzdHJ1Y3QgdG8gTlVMTCB0byBleHBvc2UgcHJvYmxlbXMgaW4gb3RoZXIgY29kZQoJYmV0dGVyLiBGaXhlcyB0aGUgWFVubWFwV2luZG93IHByb2JsZW1zIHJlcG9ydGVkIGJ5IHJlcGxhY2luZyB0aGVtCgl3aXRoIE5VTEwgcHRyIGRlcmVmZXJlbmNlcy4KCgkqIGRvY3VtZW50YXRpb24vZGVidWctbXNncywgZG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmcsIGRvY3VtZW50YXRpb24vaW50ZXJuYWwtZGxsLCBkb2N1bWVudGF0aW9uL2lvcG9ydC10cmFjZS1oaW50cywgZG9jdW1lbnRhdGlvbi93aW5lX29zMjoKCVp5Z28gQmxheGVsbCA8dWoyMmtmYmNAdW1haWwuZnVycnl0ZXJyb3Iub3JnPgoJRml4ZWQgdHlwb3MuCgoJKiBmaWxlcy9maWxlLmMsIGluY2x1ZGUvZmlsZS5oLCBsb2FkZXIvZG9zL2Rvc3ZtLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCURPUyBwcm9ncmFtcyB1c2UgaGFuZGxlcyAwLTQgd2l0aG91dCBvcGVuaW5nL2Nsb3NpbmcgYW55IG9mIHRob3NlCgloYW5kbGVzIGZpcnN0LiBTcGxpdCB1cCBJbml0IGZyb20gQWxsb2NEb3NIYW5kbGUgYW5kIGNhbGwgaXQgZnJvbQoJdGhlIERPU1ZNLgoKCSogTWFrZWZpbGUuaW46IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJUmVtb3ZlIGNvbmZpZ3VyZS5pbi0+Y29uZmlndXJlIHJ1bGUgKHdlIG1pZ2h0IG5vdCBoYXZlIGF1dG9jb25mKS4KCgkqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUFkZGVkICJ1c2VyLWZyaWVuZGx5IiB3YXJuaW5nIGZvciBtaXNzaW5nIFguCgoJKiBpbmNsdWRlL29sZS5oOiBGaXhlZCBHZXRPYmplY3QgbWFjcm8gcHJvYmxlbS4KCgkqIGRvY3VtZW50YXRpb24vc3RhdHVzL2RpcmVjdDNEOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CgktIHVwZGF0ZWQgZG9jdW1lbnRhdGlvbiB0byBiZSBpbiBzeW5jIHdpdGggY3VycmVudCBjb2RlCgoJKiBncmFwaGljcy9kM2RtYXRlcmlhbC5jLCBncmFwaGljcy9kM2R2aWV3cG9ydC5jOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CgktIHZhcmlvdXMgd2FybmluZyBhbmQgYnVnIGZpeGVzCgoJKiBncmFwaGljcy9kM2RkZXZpY2VzLmMsIGdyYXBoaWNzL2QzZHRleHR1cmUuYzoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJLSBhZGRlZCBtb3JlIHRleHR1cmUgZm9ybWF0cyB1c2luZyBPcGVuR0wncyBwYWNrZWQgcGl4ZWwgZm9ybWF0cwoKCSogZ3JhcGhpY3MvZDNkZXhlY3V0ZWJ1ZmZlci5jLCBpbmNsdWRlL2QzZC5oOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CgktIGJldHRlciBzdXBwb3J0IGZvciBFeGVjdXRlQnVmZmVycwoKCSogZ3JhcGhpY3MvZGRyYXcuYzogTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CgktIGNvcnJlY3RlZCBidWcgaW4gWiBCdWZmZXIgYWxsb2NhdGlvbgoJLSBwdXQgVklERU9NRU1PUlkgZmxhZyBmb3IgYWxsIHByaW1hcnkgc3VyZmFjZXMKCS0gcHV0IHNvbWV0aGluZyBpbiBhIHN1cmZhY2UgYWZ0ZXIgYSBSZWxlYXNlREMKCgkqIG1pc2MvcHJpbnRkcnYuYzogTW9ydGVuIFdlbGluZGVyIDx0ZXJyYUBkaWt1LmRrPgoJTWlzc2luZyBXSU5BUEkuCgoJKiBjb250cm9scy9zdGF0aWMuYzogTmljbGFzIEthcmxzc29uIDxua2FybHNzb0ByYS5hYm8uZmk+CglSZW1vdmVkIERUX1NJTkdMRUxJTkUgYW5kIERUX05PQ0xJUCBzdHlsZXMgZm9yIFNTX0xFRlROT1dPUkRXUkFQLgoKCSogb2JqZWN0cy9lbmhtZXRhZmlsZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNoZWNrIG9wZW5lZCBlbmhtZXRhZmlsZSBmb3IgbWFnaWMgdmFsdWVzLgoKCSogaW5jbHVkZS9kc291bmQuaCwgbXVsdGltZWRpYS9kc291bmQuYzogUm9iIFJpZ2dzIDxycmlnZ3NAdGVzc2VyLmNvbT4KCUZpeGVkIGR1cGxpY2F0ZSBzb3VuZCBidWZmZXIgaGFuZGxpbmcuIFVwZGF0ZWQgc3RhdHVzLgoKCSogbWlzYy9yZWdpc3RyeS5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBmdW5jdGlvbnMgIGxtZW1jcHluQXRvVyBhbmQgIGxtZW1jcHluV3RvQSBmb3IgY29udmVydGluZwoJUkVHX01VTFRJX1NaIChpbmNsdWRpbmcgXDB4MDApCglCZXR0ZXIgZGVidWcgb3V0cHV0IGZvciBSRUdfQklOQVJZIGFuZCBSRUdfTVVMVElfU1oKCVJld3JpdHRlbiBSZWdRdWVyeVZhbHVlRXgzMltBfFddCgoJKiBvYmplY3RzL3BhbGV0dGUuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglJbXBsZW1lbnRlZCBDcmVhdGVIYWxmdG9uZVBhbGV0dGUuCglGaXhlZCAzIGNyYXNoZXMgKDEgcmVhbCwgMiBwb3RlbnRpYWwpLgoKCSogZGxscy9zaGVsbDMyL2ljb25jYWNoZS5jLCBpZjE2MzIvc2hlbGwuc3BlYywgaW5jbHVkZS9zaGVsbC5oLCBtaXNjL3NoZWxsLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUltcGxlbWVudGVkIEV4dHJhY3RJY29uRXgxNiwgYWRkZWQgc29tZSBjb25zdHMgdG8gRXh0cmFjdEljb25FeCouCgoJKiBvbGUvb2xlMi5jLCBvbGUvb2xlY2xpLmMsIHJlbGF5MzIvb2xlMzIuc3BlYywgaW5jbHVkZS93aW5lcnJvci5oOgoJU3lsdmFpbiBTdC5HZXJtYWluIDxzeWx2YWluQG1hY2FkYW1pYW4uY29tPgoJRG9EcmFnRHJvcCBhbmQgT2xlSXNDdXJyZW50Q2xpcGJvYXJkIHN0dWIgaW1wbGVtZW50YXRpb24uCgoJKiBvbGUvdHlwZWxpYi5jOiBGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglNYWtlIExvYWRUeXBlTGliIHN0dWIgcmV0dXJuIGZhaWx1cmUgaW5zdGVhZCBvZiBzdWNjZXNzLgoKRnJpIEphbiAyMiAxNzowOTo0NiAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZG9jdW1lbnRhdGlvbi9hY2NlbGVyYXRvcnMsIGluY2x1ZGUvd2ludXNlci5oLCBsb2FkZXIvcmVzb3VyY2UuYywgd2luZG93cy9pbnB1dC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglGaXhlZCBhY2NlbGVyYXRvciBoYW5kbGluZy4gQUNDRUwxNiB1c2VkIGludGVybmFsLCBBQ0NFTDMyIGZvciBXaW4zMgoJQVBJLCBQRV9BQ0NFTCBmb3IgUEUgQWNjZWxlcmF0b3JzLiBTZWUgZG9jdW1lbnRhdGlvbi9hY2NlbGVyYXRvcnMuCgpUaHUgSmFuIDIxIDE0OjA1OjExIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpbmNsdWRlL2RkZW1sLmgsIG1pc2MvZGRlbWwuYywgcmVsYXkzMi91c2VyMzIuc3BlYzoKCUZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCVRoZXJlIHdlcmUgdHdvIGNvcGllcyBvZiB0aGUgRGRlQ21wU3RyaW5nSGFuZGxlcyAoQSBhbmQgVykgYW5kIHRoYXQKCUFQSSBkb2VzIG5vdCBoYXZlIDIgdmVyc2lvbnMuIFJlbW92ZWQgdGhlIGV4dHJhIHZlcnNpb24uCgpXZWQgSmFuIDIwIDE0OjU0OjAxIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBncmFwaGljcy94MTFkcnYveGZvbnQuYzogUGFibG8gU2FyYXR4YWdhIDxwYWJsby5zYXJhY2hhZ2FAcGluZy5iZT4KCVNtYWxsIHBhdGNoLgoKCSogd2luMzIvY29uc29sZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVdpbjMyIGNvbnNvbGUgbmVlZHMgU1lOQ0hST05JWkUgYWNjZXNzLgoKCSogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGNvbnNvbGUvbmN1cnNlcy5jLCBkZWJ1Z2dlci9zdGFicy5jLCBpbmNsdWRlL2NvbmZpZy5oLmluLCBpbmNsdWRlL2NvbnNvbGUuaCwgbWlzYy9wb3J0LmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCWF1dG9jb25mOiBhZGRlZCBjaGVja3MgZm9yIGxpYmlvLmgsIGVsZi5oLCBjdXJzZXMuaCxuY3Vyc2VzLmggYW5kCglmaXhlZCBpbmNsdWRlcnMuCgoJKiBvbGUvb2xlMm5scy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUxDTWFwU3RyaW5nQTogaWYgZHN0bGVuIGlzIGluc3VmZmljaWVudCwgcmV0dXJuCglFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSICh2ZXJpZmllZCkuCgoJKiBvYmplY3RzL2VuaG1ldGFmaWxlLmMsIHJlbGF5MzIvZ2RpMzIuc3BlYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU29tZSBzbWFsbCBmaXhlcyB0byBlbmhtZXRhZmlsZXMuCgoJKiBjb250cm9scy9saXN0Ym94LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRG8gbm90IGNhbGwgb3duZXJkcmF3IGZvciBpbnZhbGlkIGl0ZW1zIChlbXB0eSBmb2N1c3JlY3RzKS4KCUZpeGVzIEV1ZG9yYSAxNmJpdCBlbXB0eSBJbmJveCBwcm9ibGVtLgoKCSogd2luZG93cy9ub25jbGllbnQuYzogTm9vbWVuIEhhbXphIDxub29tZW5AbWFjYWRhbWlhbi5jb20+CglGaXhlZCB0aGUgTkNfRHJhd01heEJ1dHRvbjk1IGFuZCBOQ19EcmF3TWluQnV0dG9uOTUgZnVuY3Rpb25zLiBSZXdyb3RlCgl0aGVzZSBmdW5jdGlvbnMgd2l0aCB0aGUgc2FtZSBsb2dpYyBhcyB0aGUgTkNfRHJhd0Nsb3NlQnV0dG9uIGZ1bmN0aW9uLgoKCSogd2luZG93cy93aW4uYzogTm9lbCBCb3J0aHdpY2sgPG5vZWxAbWFjYWRhbWlhbi5jb20+CglSZXBhcmVudGluZyBhIHdpbmRvdyB3aXRoIFNldFBhcmVudCBpbiBXaW5kb3dzIHNob3VsZCBjYXVzZSB0aGUgY2hpbGQKCXdpbmRvdyBiZWluZyByZS1wYXJlbnRlZCB0byBiZSBtb3ZlZCB1cCB0byB0aGUgdG9wbW9zdCBpbiB0aGUgei1vcmRlciwKCWFuZCBXTV9XSU5ET1dQT1NDSEFOR0lORyBhbmQgV01fV0lORE9XUE9TQ0hBTkdFRCBtZXNzYWdlcyB0byBiZSBzZW50LgoKCSogcmVsYXkzMi9idWlsdGluMzIuYzogUm9iZXJ0IFJpZ2dzIDxycmlnZ3NAdGVzc2VyLmNvbT4KCVVzZSBleHRlcm5hbCBEaXJlY3RQbGF5IERMTHMgYnkgZGVmYXVsdC4KCgkqIGxvYWRlci90YXNrLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWxsb3cgcGFzc2luZyB0YXNrIGhhbmRsZXMgdG8gR2V0VGhyZWFkUXVldWUoKSBhbmQgU2V0RmFzdFF1ZXVlKCkuCgoJKiB3aW5kb3dzL3VzZXIuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglIYW5kbGUgKGNvbnNvbGUpIGFwcGxpY2F0aW9ucyB0aGF0IG5ldmVyIGNyZWF0ZWQgYSBxdWV1ZSBjb3JyZWN0bHkKCWluIFVTRVJfQXBwRXhpdCgpOyBjYWxsIEluaXRUaHJlYWRJbnB1dCgpIGluIEluaXRBcHAoKS4KCgkqIHdpbmRvd3MvaG9vay5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCS0gRml4ZWQgY3JlYXRpb24gb2YgbWVzc2FnZSBxdWV1ZSBpbiBob29rIEFQSSByb3V0aW5lcy4KCS0gU29tZSBwcmVwYXJhdGlvbnMgZm9yIHRocmVhZC1sb2NhbCBtZXNzYWdlIHF1ZXVlcy4KCgkqIGxvYWRlci9uZS9tb2R1bGUuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQ2hlY2sgbW9kdWxlIG5hbWUgbGVuZ3RoIGluIE1vZHVsZU5leHQoKS4KCgkqIHdpbmRvd3MveDExZHJ2L2V2ZW50LmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVVzZSBDYWxsb3V0IHRvIGNhbGwgUmVkcmF3V2luZG93MzIuCgoJKiBtc2Rvcy9pbnQyMS5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUNsZWFyIERPUyBleHRlbmRlZCBlcnJvciBvbmx5IGZvciBmdW5jcyA+PTB4MmYgKHRoYW5rcyB0byBEYXZlCglQaWNrbGVzKS4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJVW5pZmllZCBwYWxldHRlIGNyZWF0ZSwgZG8gYWxsb2NhdGUgY29sb3JjZWxscyBvbiBpbml0IGZvciBER0EuCgpUdWUgSmFuIDE5IDE3OjQ4OjI1IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBzY2hlZHVsZXIvc3luY2hyby5jLCBzY2hlZHVsZXIvdGhyZWFkLmMsIHNlcnZlci9jb25zb2xlLmMsIHNlcnZlci9maWxlLmMsIHNlcnZlci9wcm9jZXNzLmMsIHNlcnZlci9yZXF1ZXN0LmMsIHNlcnZlci90aHJlYWQuYywgc2VydmVyL3RyYWNlLmMsIHdpbjMyL2NvbnNvbGUuYywgd2luMzIvZGV2aWNlLmMsIHdpbjMyL3Byb2Nlc3MuYywgaW5jbHVkZS9maWxlLmgsIGluY2x1ZGUvcHJvY2Vzcy5oLCBpbmNsdWRlL3NlcnZlci5oLCBpbmNsdWRlL3NlcnZlci9vYmplY3QuaCwgaW5jbHVkZS9zZXJ2ZXIvcmVxdWVzdC5oLCBpbmNsdWRlL3NlcnZlci90aHJlYWQuaCwgaW5jbHVkZS90aHJlYWQuaCwgaW5jbHVkZS93aW5iYXNlLmgsIGluY2x1ZGUvd2luZG93cy5oLCBpbmNsdWRlL3dpbnR5cGVzLmgsIG1lbW9yeS92aXJ0dWFsLmMsIG1zZG9zL2ludDIxLmMsIG1zZG9zL3Z4ZC5jLCByZWxheTMyL2tlcm5lbDMyLnNwZWMsIHNjaGVkdWxlci9jbGllbnQuYywgc2NoZWR1bGVyL2hhbmRsZS5jLCBzY2hlZHVsZXIvazMyb2JqLmMsIHNjaGVkdWxlci9wcm9jZXNzLmMsIGZpbGVzL2NoYW5nZS5jLCBmaWxlcy9kb3NfZnMuYywgZmlsZXMvZmlsZS5jLCBpbmNsdWRlL2RldmljZS5oOgoJSGFja2VkIHNlcnZlci1zaWRlIGRldmljZSBzdXBwb3J0CglBZGRlZCB1c2VyIEFQQ3Mgc3VwcG9ydC4KCU1hbnkgY2hhbmdlcyB0byB0aGUgeHRlcm0gY29uc29sZSB0byBtYWtlIHVzZSBvZiB0aGUgc2VydmVyIChub3QKCWZpbmlzaGVkIHlldCkuCglNb3ZlZCBzb21lIG90aGVyIHNtYWxsIHN0dWZmIHRvIHRoZSBzZXJ2ZXIuCgoJKiB0b29scy9tYWtlX3JlcXVlc3RzOiBBZGRlZCBsb25nIHR5cGUgZm9ybWF0LgoKCSogc2VydmVyL01ha2VmaWxlLmluLCBzZXJ2ZXIvZGV2aWNlLmM6CglBZGRlZCBzZXJ2ZXItc2lkZSBkZXZpY2Ugc3VwcG9ydCAob25seSBhIGhhY2sgZm9yIG5vdykuCgpTdW4gSmFuIDE3IDE3OjQ4OjQ4IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBDaGFuZ2VMb2c6CglSZWNvdmVyZWQgbG9nIGVudHJpZXMgZnJvbSBDVlMgbWFpbGluZyBsaXN0LgoKCSogcmVsYXkzMi9udGRsbC5zcGVjLCBkbGxzL250ZGxsL3J0bC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglJbXBsZW1lbnRlZCBfYWxsb2NhX3Byb2JlIGFuZCBfY2hrc3RrIChtb3N0bHkgZG9uZSBieSBVbHJpY2ggV2VpZ2FuZCkuCgoJKiBmaWxlcy9maWxlLmMKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJSGFuZGxlIEVSUk9SX1dSSVRFX1BST1RFQ1QgdG9vIGluIHJlYWRvbmx5IGZhbGxiYWNrIG9wZW4uCgoJKiBkbGxzL2FkdmFwaTMyL3NlY3VyaXR5LmMsIHJlbGF5MzIvYWR2YXBpMzIuc3BlYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkZWQgR2V0U2VjdXJpdHlEZXNjcmlwdG9yTGVuZ3RoIHN0dWIgZm9yIHJlZ2VkdDMyLmV4ZS4KCgkqIGRlYnVnZ2VyL01ha2VmaWxlLmluLCBmaWxlcy9NYWtlZmlsZS5pbjoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkICIiIGFyb3VuZCAtRCBkZWZpbmVzIGZvciBwYXRocyB3aXRoIHNwYWNlcyBpbiB0aGVtLgoKCSogZ3JhcGhpY3MvZDNkdGV4dHVyZS5jLCBncmFwaGljcy9kZHJhdy5jLCBpbmNsdWRlL2RkcmF3Lmg6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUNsZWFuZWQgdXAgQ29sb3JLZXkgaGFuZGxpbmcuCgoJKiBvYmplY3RzL21ldGFmaWxlLmM6CglQYXVsIFF1aW5uIDxwYXVscUBDT1JFTC5DQT4KCU1FVEFSRUNPUkQgbWVtYmVyIHJkUGFyYW0gc2hvdWxkIGJlIHJkUGFybSAoaW4gd2luMzIgc2RrKQoJbG90cyBvZiBjaGFuZ2VzIGluIHRoaXMgc291cmNlIGZpbGUgdG8gcmVmbGVjdCB0aGlzIGNoYW5nZS4KCgkqIGdyYXBoaWNzL2VzY2FwZS5jLCBncmFwaGljcy9wYWludGluZy5jLCBncmFwaGljcy9tZXRhZmlsZWRydi9pbml0LmMsIGluY2x1ZGUvY29tbWN0cmwuaCwgaW5jbHVkZS9jb21tZGxnLmgsIGluY2x1ZGUvZ2RpLmgsIGluY2x1ZGUvdGNoYXIuaCwgaW5jbHVkZS93aW5kb3dzLmgsIGluY2x1ZGUvd2luZ2RpLmgsIGluY2x1ZGUvd2ludHlwZXMuaCwgaW5jbHVkZS93aW51c2VyLmgsIG1pc2Mvc3Bvb2xlci5jLCBvYmplY3RzL2dkaW9iai5jLAoJcmVsYXkzMi9nZGkzMi5zcGVjOgoJUGF1bCBRdWlubiA8cGF1bHFAQ09SRUwuQ0E+CglGaXhlZCBiYWQgZGVmaW5lcywgYWRkZWQgYSBmZXcgdHlwZXMgJ24gZGVmaW5lcy4KCgkqIHdpbmRvd3MvZGlucHV0LmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCURpc2FibGUgYnJva2VuIGNhbGxiYWNrcyB3aGljaCBsZWFkIHRvIGNyYXNoZXMuCgoJKiBtdWx0aW1lZGlhL21jaXN0cmluZy5jOgoJRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglGaXhlZCBJRCB1c2FnZSAoYW5kIHJlbHkgbGVzcyBoZWF2aWx5IG9uIG11bHRpbWVkaWEvbW1zeXN0ZW0uYwoJaW50ZXJuYWwgc3RydWN0dXJlcykuCgoJKiBtaXNjL3Rvb2xoZWxwLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCWRlYnVnLmggbmVlZHMgdG8gYmUgaW5jbHVkZWQgbGFzdCBzaW5jZSBpdCAjdW5kZWZzIEVSUiBmb3IgU29sYXJpcy4KCgkqIGRlYnVnZ2VyL2RlYnVnLmwsIGRlYnVnZ2VyL21lbW9yeS5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCAvdSBmb3JtYXQgdG8gZGVidWdnZXIgZGlzcGxheSBmb3IgVU5JQ09ERSBzdHJpbmdzLgoKCSogbG9hZGVyL3BlX2ltYWdlLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVJlbW92ZSBpcnJpdGF0aW5nIEZJWE1FIGxpbmUgbm8gbG9uZ2VyIG5lZWRlZC4KCgkqIG1zZG9zL2ludDJmLmM6CglFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUFkZGVkIG1pc3NpbmcgJ1xuJyBpbiBGSVhNRSBtZXNzYWdlLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzoKCVJvYmVydCBSaWdncyA8cnJpZ2dzQHRlc3Nlci5jb20+CglvYmpiYXNlLmggbmVlZGVkIGZvciBXSU5FX1N0cmluZ0Zyb21DTFNJRCgpLCBmaXggQyBmdW5jdGlvbgoJZGVjbGFyYXRpb25zLCBpbnN0YWxsIGEgY29sb3JtYXAgaWYgd2UgYXJlIG5vdCBtYW5hZ2VkLCByZWxlYXNlCgliYWNrYnVmZmVycyBpbiBER0EgbW9kZSwgZml4IHZpZGVvIG1vZGUgc3dpdGNoaW5nIGxvZ2ljIHRvIGF2b2lkCglwb3NzaWJsZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuCgoJKiBtc2Rvcy9kcG1pLmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglTbWFsbCBmaXguCgoJKiBmaWxlcy9maWxlLmMsIGluY2x1ZGUvZmlsZS5oLCBpbmNsdWRlL3Byb2Nlc3MuaCwgbG9hZGVyL3Jlc291cmNlLmMsIGxvYWRlci9kb3MvbW9kdWxlLmMsIGxvYWRlci9uZS9zZWdtZW50LmMsIG1pc2MvbHpleHBhbmQuYywgbXNkb3MvaW50MjEuYyB2eGQuYywgbXVsdGltZWRpYS9tbWlvLmMsIHdpbjMyL2tlcm5lbDMyLmM6CglCZXR0ZXIgRE9TIGZpbGUgaGFuZGxlIG1hbmFnZW1lbnQuCgoJKiBkb2N1bWVudGF0aW9uL2NvbW1vbl9jb250cm9sczoKCUZyYW5jaXMgQmVhdWRldCA8ZnJhbmNpc0BtYWNhZGFtaWFuLmNvbT4KCVRoaXMgc2hvdWxkIGhlbHAgcHJldmVudCBkdXBsaWNhdGUgd29yay4KCgkqIGlmMTYzMi9nZGkuc3BlYywgaW5jbHVkZS93aW5nZGkuaCwgb2JqZWN0cy9kYy5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJSW1wbGVtZW50ZWQgRGVhdGgoKSBhbmQgUmVzdXJyZWN0aW9uKCksIHR3byBmdW5jdGlvbnMgbmVlZGVkIGJ5IHNvbWUKCVRQV2luICg/KSBjb21tYW5kIGxpbmUgdG9vbC4KCgkqIHdpbmRvd3Mvd2lucHJvYy5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglBZGRlZCAzMi0+MTYgdHJhbnNsYXRpb24gZm9yIFdNX0FDVElWQVRFQVBQLgoKCSogZGxscy9zaGVsbDMyL3BpZGwuYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIGRsbHMvc2hlbGwzMi9zaGVsbHBhdGguYywgZGxscy9zaGVsbDMyL3NobGZvbGRlci5jLCByZWxheTMyL3NoZWxsMzIuc3BlYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IHN0dWJzOiBTaGVsbE1lc3NhZ2VCb3hXLCBSdW5ETExfQ2FsbEVudHJ5MTYuCglJbXBsZW1lbnRhdGlvbiBmb3IgU0hHZXRTcGVjaWFsRm9sZGVyUGF0aDMyW0F8V10uCglNYW55IGJ1Z2ZpeGVzLgoKCSogY29uc29sZS94dGVybS5jLCBtaXNjL3BvcnQuYywgd2luMzIvY29uc29sZS5jOgoJSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglDaGFuZ2UgYWxsIFdpbmUgb3BlbnB0eSgpIGltcGxlbWVudGF0aW9ucyB0byBtYXRjaCB0aGUgInN0YW5kYXJkIiBhbmQKCXRoZW4gbWFrZSB0aGVtIGJvdGggY2FsbCB0aGUgc2FtZSBjb2RlIGxlYXZpbmcgdGhlIG9wdGlvbiB0byBjaGFuZ2UKCXRoYXQgY29kZSB0byBjYWxsIHRoZSAic3RhbmRhcmQiIG9wZW5wdHkoKSBhdCBhIGxhdGVyIGRhdGUuCgoJKiByZWxheTMyL2tlcm5lbDMyLnNwZWMsIHNjaGVkdWxlci9wcm9jZXNzLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFkZGVkIFNldFByb2Nlc3NBZmZpbml0eU1hc2sgc3R1Yi4KCgkqIGdyYXBoaWNzL2RkcmF3LmMsIGluY2x1ZGUvZGRyYXcuaDoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRml4ZWQgdGhlIG90aGVyIHVuaW9uIG1pc3VzZSB0b28gKG9uZSBsZXNzIG1lbSBjb3JydXB0aW9uKQoJUmUtYWRkZWQgWEluc3RhbGxDb2xvcm1hcCAob3Igbm9uIG1hbmFnZWQgZG9lcyBub3QgY2hhbmdlIHBhbGV0dGUpCgoJKiBpZjE2MzIva2VybmVsLnNwZWMsIHNjaGVkdWxlci9zeW5jaHJvLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFkZGVkIGFuIGltcGxlbWVudGF0aW9uIGZvciBLRVJORUwuNDk1LgoKCSogZG9jdW1lbnRhdGlvbi9zdGF0dXMsIGRvY3VtZW50YXRpb24vZGlyZWN0M0QsIGdyYXBoaWNzL2QzZF9wcml2YXRlLmgsIGdyYXBoaWNzL2QzZGNvbW1vbi5jLCBncmFwaGljcy9kM2RkZXZpY2VzLmMsIGdyYXBoaWNzL2QzZGV4ZWN1dGVidWZmZXIuYywgZ3JhcGhpY3MvZDNkdGV4dHVyZS5jLCBncmFwaGljcy9kM2R2aWV3cG9ydC5jLCBncmFwaGljcy9kZHJhdy5jLCBpbmNsdWRlL2QzZC5oLCBpbmNsdWRlL2RkcmF3Lmg6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCS0gYWRkZWQgYml0bWFzayB0byBzdG9yZSB3aGljaCBDb2xvcktleSBzdHJ1Y3R1cmVzIGFyZSB2YWxpZAoJLSBoYW5kbGUgbWFueSBuZXcgcmVuZGVyaW5nIHN0YXRlcywgc29tZSBvcHRpbWl6YXRpb25zIGluIHN0YXRlIGNoYW5nZXMKCS0gOGJpdCBwYWxldHRpemVkIHRleHR1cmVzIG5vdyBzdXBwb3J0IENvbG9yS2V5aW5nCgktIHNvbWUgbWlzY2VsbGFuZW91cyBidWcgZml4ZXMgYW5kIGNvZGUgcmV3cml0ZQoKCSogY29udHJvbHMvbWVudS5jOgoJTm9vbWVuIEhhbXphIDxub29tZW5AbWFjYWRhbWlhbi5jb20+CglGaXhlZCB0aGUgbG9vayBvZiB0aGUgbWVudSBzbyBpdCB3b3VsZCBiZSBjb21wbGlhbnQgd2l0aCBXaW45NTogbW9kaWZpZWQKCXRoZSBtb3VzZSB0cmFja2luZyBjb2RlIHNvIGl0IHdvdWxkIGNoYW5nZSB0aGUgc2VsZWN0aW9uIGV2ZXJ5IHRpbWUgdGhlCgltb3VzZSBtb3ZlZCBvdmVyIGEgbWVudSBpdGVtLgoKCSogZG9jdW1lbnRhdGlvbi9ob3ctdG8tcG9ydDoKCU1pa2UgQ2FzdGxlIDxkYWxnb2RhQHNoZWxsLnJ0NjYuY29tPgoJU21hbGwgZml4LgoKCSogZGxscy9jb21jdGwzMi91cGRvd24uYzoKCU5vZWwgQm9ydGh3aWNrIDxub2VsQG1hY2FkYW1pYW4uY29tPgoJRml4ZWQgYnVnczoKCS0gV2hlbiBhbiBlZGl0IGNvbnRyb2wgYnVkZHkgd2FzIHVzZWQgc2luZ2xlIGRpZ2l0IHZhbHVlcyB3ZXJlIG5vdAoJYmVpbmcgZGlzcGxheWVkLgoJLSBDb21tYSB2YWx1ZXMgd2VyZSBub3QgZGlzcGxheWVkIGNvcnJlY3RseSB3aGVuIHRob3VzYW5kcyBzZXBhcmF0aW9uCgl3YXMgcmVxdWVzdGVkLgoKCSogd2luMzIvbmV3Zm5zLmM6CglUb20gQmVjaCA8dG9tYkBpaS51aWIubm8+CglXaGlsZSB0aGUgZGVidWcgZXZlbnQgbWVzc2FnZXMgYXJlIG5vdCBpbXBsZW1lbnRlZCwgV2FpdEZvckRlYnVnRXZlbnQKCXNob3VsZCByZXR1cm4gRkFMU0UuCgoJKiBpZjE2MzIvdXNlci5zcGVjLCBvYmplY3RzL2JpdG1hcC5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJSW1wbGVtZW50ZWQgQ29weUltYWdlMTYuCgoJKiBkb2N1bWVudGF0aW9uL2J1Z3JlcG9ydHMgCglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglTbWFsbCBmaXguCgoJKiBjb25zb2xlL2dlbmVyaWMuYywgbXNkb3MvaW50MjEuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQ2hhbmdlZCAweDAxIHRvIHVzZSBnZW5lcmljIGNvbnNvbGUsIGZpeGVkIDB4MGIuCglGaXhlZCBDT05TT0xFX0dldENoYXJhY3RlciAodHdvIGFyZ3Mgc3dhcHBlZCkuCgoJKiBpbmNsdWRlL21vZHVsZS5oLCBsb2FkZXIvbWFpbi5jLCBsb2FkZXIvbW9kdWxlLmMsIGxvYWRlci9kb3MvbW9kdWxlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFsbG93IHNwZWNpZnlpbmcgbW9kdWxlIG5hbWUgZm9yIE5FIGR1bW15IG1vZHVsZS4KCgkqIGxvYWRlci9wZV9pbWFnZS5jIAoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglTZXQgbW9kdWxlIG5hbWUgb2YgZHVtbXkgbW9kdWxlIGVxdWFsIHRvIG1vZHVsZSBuYW1lIG9mIFBFIG1vZHVsZS4KCgkqIGNvbnRyb2xzL3Njcm9sbC5jLCBjb250cm9scy91aXRvb2xzLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCU1pc3NpbmcgaW5jbHVkZSB3aW5lL3dpbnVzZXIxNi5oIGFkZGVkLgoKCSogZ3JhcGhpY3MvdmdhLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNyZWF0ZSBhbiBhY3R1YWwgcHJpbWFyeSBzdXJmYWNlIGZvciBzY3JlZW5idWZmZXIuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBKYW4gMTAgMTQ6NDA6MzQgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvbWlzY2VtdS5oLCBpbmNsdWRlL21zZG9zLmgsIGxvYWRlci9tYWluLmMsIG1zZG9zL01ha2VmaWxlLmluLCBtc2Rvcy9kb3Njb25mLmMsIG1zZG9zL2ludDIxLmM6CglBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglBZGRlZCBjb25maWcuc3lzIHBhcnNlci4KCgkqIGNvbnRyb2xzL2xpc3Rib3guYzogUGFzY2FsIEN1b3EgPFBhc2NhbC5DdW9xQGlucmlhLmZyPgoJU21hbGwgY2hhbmdlIGluIExCX1NFVENVUlNFTDMyIGhhbmRsaW5nICh0aGUgY2FyZXQgc2hvdWxkIGJlIG1vdmVkIGFzCgl3ZWxsKS4KCgkqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBmaWxlcy9hc3luYy5jLCBpbmNsdWRlL2NvbmZpZy5oLmluLCBtaXNjL3dpbnNvY2tfZG5zLmMsIG1zZG9zL2ludDIxLmMsIG9sZS9jb21wb2JqLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVVzZSBhdXRvY29uZiBjaGVjayBmb3IgcHJlc2VuY2Ugb2Ygc3lzL2ZpbGUuaC4KCgkqIGRsbHMvbnRkbGwvcnRsLmMsIHJlbGF5MzIvbnRkbGwuc3BlYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJSW1wbGVtZW50ZWQgRGJnUHJpbnQsIGFkZGVkIHVsdG9hLgoKCSogd2luMzIvY29uc29sZS5jOiBQZXRlciBIdW5uaXNldHQgPGh1bm5pc2VAbm9ydGVsbmV0d29ya3MuY29tPgoJUGVla0NvbnNvbGVJbnB1dCAmIFJlYWRDb25zb2xlSW5wdXQgbmVlZCB0byByZXR1cm4gMCByZWNvcmRzIHJlYWQgaW4KCXRoZSBjYXNlIG9mIGFuIGludmFsaWQgaGFuZGxlLgoKCSogY29uc29sZS9uY3Vyc2VzLmMsIGxvYWRlci9tYWluLmM6CglKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCU1vcmUgdmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0LgoJUmVtb3ZlIGNvbXBpbGF0aW9uIHdhcm5pbmcuCgoJKiBtc2Rvcy9pbnQxMC5jOiBKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCUZpeCB1cCBzb21lIGludGVycnVwdCBjYWxscyB0byByZXR1cm4gYXQgdGhlIGRhdGEgdGhhdCB0aGV5IGFyZSBzdXBwb3NlZAoJdG8uIEFsc28gaW5jcmVhc2UgY29tbWVudCB2ZXJib3NpdHkgdG8gaGVscCBkZWJ1ZyB0aGluZ3MgbGF0ZXIuCgoJKiBpbmNsdWRlL29wdGlvbnMuaCwgbWlzYy9tYWluLmMsIG1pc2MvdmVyc2lvbi5jOgoJQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJQWRkZWQgc3dpdGNoIC1kb3N2ZXIuCglDbGVhbnVwIGZvciBPYUJ1aWxkVmVyc2lvbigpLgoKCSogbGlidGVzdC8uY3ZzaWdub3JlOiBBZGRlZCB2YXJ0ZXN0IGFuZCB2b2xpbmZvCgoJKiBkbGxzL3NoZWxsMzIvY29udG1lbnUuYywgZGxscy9zaGVsbDMyL3BpZGwuYywgZGxscy9zaGVsbDMyL3BpZGwuaCwgZGxscy9zaGVsbDMyL3NoZWxsbGluay5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgZGxscy9zaGVsbDMyL3NobGZvbGRlci5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jLCBpbmNsdWRlL3NoZWxsLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1hbnkgYnVnZml4ZXMsIGNvZGUgY2xlYW51cC4KCVJlbW92ZWQgYSBmZXcgZ2xpdGNoZXMgZnJvbSB0aGUgQ09NIHBhdGNoLgoKCSogd2luZG93cy9kaWFsb2cuYzogTGF3c29uIFdoaXRuZXkgPGxhd3Nvbl93aGl0bmV5QGp1bm8uY29tPgoJT25seSBkZXN0cm95IHdpbmRvdyBvbmNlLgoKCSogZ3JhcGhpY3MvZGRyYXcuYywgaW5jbHVkZS9kZHJhdy5oOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CgktIG1vdmVkIGRyYXdhYmxlIHRvIGNvbW1vbiBzaW5jZSBpdCBpcyB1c2VkIGJ5IGJvdGggREdBIGFuZCBYbGliLgoJICAoZml4ZXMgb25lIGJhZCBtZW1vcnkgY29ycnVwdGlvbiBidWcgaW4gREdBIChTdGFyQ3JhZnQgYW5kIERpYWJsbykKCS0gYWRkZWQgQmx0RmFzdCBzYW5pdHkgY2hlY2tzLgoKCSogd2luZG93cy9xdWV1ZS5jLCBsb2FkZXIvdGFzay5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbml0QXBwKCkgY2FsbCByZW1vdmVkIGZyb20gMzItYml0IGFwcGxpY2F0aW9uIHN0YXJ0dXA7CgljcmVhdGUgdGFzayBtZXNzYWdlIHF1ZXVlIGluIEluaXRUaHJlYWRJbnB1dCgpIGluc3RlYWQuCgoJKiBsb2FkZXIvbmUvY29udmVydC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBZGRlZCBhY2NlbGVyYXRvciB0YWJsZSBQRS0+TkUgcmVzb3VyY2UgY29udmVyc2lvbi4KCgkqIGRlYnVnZ2VyL2VkaXRsaW5lLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVJlc3RhcnQgcmVhZCgpIGluIGNhc2Ugb2YgRUlOVFIgaW4gVFRZZ2V0KCkuCgoJKiBkbGxzL3NoZWxsMzIvc2hlbGxvbGUuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglQdHIgcmVmIHdyb25nLgoKCSogdG9vbHMvd3JjL0NIQU5HRVMsIHRvb2xzL3dyYy9kdW1wcmVzLmMsIHRvb2xzL3dyYy9nZW5yZXMuYywgdG9vbHMvd3JjL25ld3N0cnVjLmMsIHRvb2xzL3dyYy9uZXdzdHJ1Yy5oLCB0b29scy93cmMvcGFyc2VyLmwsIHRvb2xzL3dyYy9wYXJzZXIueSwgdG9vbHMvd3JjL3JlYWRyZXMuYywgdG9vbHMvd3JjL3V0aWxzLmMsIHRvb2xzL3dyYy91dGlscy5oLCB0b29scy93cmMvd3JjLmgsIHRvb2xzL3dyYy93cmN0eXBlcy5oLCB0b29scy93cmMvd3JpdGVyZXMuYzoKCUJlcnRobyBTdHVsdGllbnMgPGJlcnRob0BwYW50ZXIuc29jaS5hYXUuZGs+CglXcmMgdmVyc2lvbiAxLjAuOC4gVG9vbGJhciByZXNvdXJjZXMgYXJlIG5vdyBzdXBwb3J0ZWQuIEEgY291cGxlIG9mCglvdGhlciBmaXhlcyBhcmUgYWxzbyBpbmNsdWRlZC4gU2VlIGZpbGUgdG9vbHMvd3JjL0NIQU5HRVMgZm9yIGRldGFpbHMuCgoJKiBvbGUvY29tcG9iai5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCU1pc3NpbmcgV0lOQVBJLgoKCSogaW5jbHVkZS94MTFkcnYuaCwgbG9hZGVyL2Rvcy9tb2R1bGUuYywgb2JqZWN0cy9kYy5jLCByZWxheTMyL2J1aWx0aW4zMi5jLCByZWxheTMyL3JlbGF5Mzg2LmMsIHNjaGVkdWxlci9rMzJvYmouYywgZmlsZXMvYXN5bmMuYywgaWYxNjMyL3JlbGF5LmMsIGluY2x1ZGUvbWFpbi5oLCBpbmNsdWRlL211bHRpbWVkaWEuaCwgaW5jbHVkZS93aW5kb3dzLmg6CglKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CglBZGQgbWlzc2luZyAjaW5jbHVkZXMgYW5kIHByb3RvdHlwZXMgdG8gZWxpbWluYXRlIHNvbWUgaW1wbGljaXQKCWZ1bmN0aW9uIGRlY2xhcmF0aW9uIHdhcm5pbmdzIGFuZCAnZXh0ZXJuJ3MgaW4gLmMgZmlsZXMuCgoJKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgY29uc29sZS9uY3Vyc2VzLmMsIGluY2x1ZGUvYWNjb25maWcuaCwgaW5jbHVkZS9jb25maWcuaC5pbjoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJQ2hlY2sgZm9yIHJlc2l6ZXRlcm0gaW4gbmN1cnNlcy4KCgkqIGxpYnRlc3QvTWFrZWZpbGUuaW4sIGxpYnRlc3QvdmFydGVzdC1XaW4zMi5sb2csIGxpYnRlc3QvdmFydGVzdC5jLCBsaWJ0ZXN0L3ZhcnRlc3QucmVhZG1lOgoJRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJTmV3IHRlc3QgcHJvZ3JhbSBmb3IgVkFSSUFOVCBmdW5jdGlvbnMuCgoJKiBkZWJ1Z2dlci9tc2MuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglTb21lIGRlYnVnIGluZm9ybWF0aW9uIChQREIpIHdhcyBub3QgbWFwcGVkIHdoZW4gbG9hZGluZyBhIG1vZHVsZSwKCXdoaWNoIGNhdXNlZCBhIGNvcmUgaW4gdGhlIGRlYnVnZ2VyIHdoZW4gaXQgdHJpZWQgdG8gYWNjZXNzIGl0LgoKCSogTWFrZWZpbGUuaW46IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJTGlua3MgbGlid2luZS5zby4xLjAgdG8gbGlid2luZS5zbyBpbiBXaW5lJ3MgbWFpbiBkaXJlY3RvcnkuCglNYWtlcyBXaW5lIGNvbXBpbGUgd2l0aCAtLWVuYWJsZS1kbGwgYWdhaW4uCgpTYXQgSmFuICA5IDA5OjEyOjQwIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiByZWxheTMyL29sZTMyLnNwZWMsIHdpbmRvd3MvZGlucHV0LmMsIGluY2x1ZGUvc3RvcmFnZS5oLCBpbmNsdWRlL3Vua253bi5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgaW5jbHVkZS93aW5lL29ial9iYXNlLmgsIGluY2x1ZGUvd2luZS9vYmpfY2hhbm5lbC5oLCBpbmNsdWRlL3dpbmUvb2JqX2NsaWVudHNlcnZlci5oLCBpbmNsdWRlL3dpbmUvb2JqX2RhdGFvYmplY3QuaCwgaW5jbHVkZS93aW5lL29ial9tYXJzaGFsLmgsIGluY2x1ZGUvd2luZS9vYmpfbWlzYy5oLCBpbmNsdWRlL3dpbmUvb2JqX21vbmlrZXIuaCwgaW5jbHVkZS93aW5lL29ial9wcm9wZXJ0eXN0b3JhZ2UuaCwgaW5jbHVkZS93aW5lL29ial9zdG9yYWdlLmgsIGluY2x1ZGUvd2luZXJyb3IuaCwgaW5jbHVkZS93dHlwZXMuaCwgbWlzYy9zaGVsbC5jLCBtdWx0aW1lZGlhL2RwbGF5LmMsIG11bHRpbWVkaWEvZHNvdW5kLmMsIG9iamVjdHMvZm9udC5jLCBvbGUvY29tcG9iai5jLCBvbGUvaWZzLmMsIG9sZS9tb25pa2VyLmMsIG9sZS9vbGUyLmMsIG9sZS9vbGUyZGlzcC5jLCBvbGUvb2xlZGxnLmMsIG9sZS9vbGVvYmouYywgb2xlL3N0b3JhZ2UuYywgb2xlL3R5cGVsaWIuYywgZGxscy9zaGVsbDMyL2RhdGFvYmplY3QuYywgZGxscy9zaGVsbDMyL2VudW1pZGxpc3QuYywgZGxscy9zaGVsbDMyL2ZvbGRlcnMuYywgZGxscy9zaGVsbDMyL3BpZGwuYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jLCBkbGxzL3NoZWxsMzIvc2hlbGxsaW5rLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9sZS5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgZGxscy9zaGVsbDMyL3NobGZvbGRlci5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jLCBncmFwaGljcy9kZHJhdy5jLCBncmFwaGljcy92Z2EuYywgaWYxNjMyL2NvbXBvYmouc3BlYywgaW5jbHVkZS9jb21wb2JqLmgsIGluY2x1ZGUvZGRyYXcuaCwgaW5jbHVkZS9kaW5wdXQuaCwgaW5jbHVkZS9kcGxheS5oLCBpbmNsdWRlL2Rzb3VuZC5oLCBpbmNsdWRlL2ludGVyZmFjZXMuaCwgaW5jbHVkZS9vYmpiYXNlLmgsIGluY2x1ZGUvb2JqaWRsLmgsIGluY2x1ZGUvb2xlLmgsIGluY2x1ZGUvb2xlMi5oLCBpbmNsdWRlL29sZW9iai5oLCBpbmNsdWRlL3NlcnZwcm92LmgsIGluY2x1ZGUvc2hlbGwuaCwgaW5jbHVkZS9zaGxndWlkLmgsIGluY2x1ZGUvc2hsb2JqLmgsIGRsbHMvY29tY3RsMzIvaW1hZ2VsaXN0LmMsIGRsbHMvc2hlbGwzMi9jb250bWVudS5jOgoJRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QG11bHRpbWFuaWEuY29tPgoJQWRkZWQgYSBsb3Qgb2YgQ09NIGludGVyZmFjZXMgZGVmaW5pdGlvbnMuCglSZXN0cnVjdHVyZWQgQ09NIGhlYWRlciBmaWxlcyBmb3IgYmV0dGVyIGNvbXBhdGliaWxpdHkgYW5kIGNsYXJpdHkuCgpGcmkgSmFuICA4IDE2OjM3OjAzIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBmaWxlcy9maWxlLmM6IFNldCBHRU5FUklDX1JFQUR8R0VORVJJQ19XUklURSBhY2Nlc3MgZm9yIE9GX0NSRUFURS4KCU1ha2UgR2V0RmlsZVR5cGUgd29yayBmb3IgYWxsIGhhbmRsZSB0eXBlcy4KCgkqIHdpbjMyL2RldmljZS5jOiBBdm9pZCBjcmFzaCBvbiBOVUxMIGRldi0+aW5mby4KCgkqIGluY2x1ZGUvZmxhdHNiLmgsIHJlbGF5MzIvY29tY3RsMzIuc3BlYywgZGxscy9jb21jdGwzMi9NYWtlZmlsZS5pbiwgZGxscy9jb21jdGwzMi9jb21tY3RybC5jLCBkbGxzL2NvbWN0bDMyL2ZsYXRzYi5jLCBpbmNsdWRlL2NvbW1jdHJsLmg6CglBbGV4IFByaWVtIDxhbGV4cEBzY2kua3VuLm5sPgoJQWRkZWQgc3R1YnMgYW5kIGRlZmluZXMgZm9yIHRoZSBmbGF0IHNjcm9sbGJhciBjb21tb24gY29udHJvbC4KCgkqIGluY2x1ZGUvY29tbWN0cmwuaCwgZGxscy9jb21jdGwzMi9kYXRldGltZS5jOgoJQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KCUFkZGVkIHNvbWUgZGVmaW5lcyBuZWVkZWQgZm9yIGN1c3RvbSBkcmF3J2luZyBhbmQgZGF0ZXRpbWUgY29tbW9uCgljb250cm9scy4KCgkqIGRsbHMvc2hlbGwzMi9pY29uY2FjaGUuYzogRWRkaWUgQ2FycGVudGVyIDxlY2FycGVudGVyQGl0ZXguY28uemE+CglGaXhlZCBhIHNtYWxsIGJ1ZyBpbiBmdW5jdGlvbiBFeHRyYWN0SWNvbkV4MzJBLgoKCSogd2luZG93cy93aW5wcm9jLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJSFRBU0sxNiAtPiB0aHJlYWRJRCBtYXBwaW5nIG9mIFdNX0FDVElWQVRFQVBQLgoKCSogZmlsZXMvZmlsZS5jOiBCZXJ0aG8gU3R1bHRpZW5zIDxiZXJ0aG9AcGFudGVyLnNvY2kuYWF1LmRrPgoJTWFrZSBEZWxldGVGaWxlIGZhaWwgZm9yIGVtcHR5IHBhdGguCgoJKiBtc2Rvcy9pb3BvcnRzLmM6IEdlcmFsZCBQZmVpZmVyIDxwZmVpZmVyQGRiYWkudHV3aWVuLmFjLmF0PgoJRml4IGR1bW15X2N0ciBzdHVmZiB0byB3b3JrIGV2ZW4gd2l0aG91dCBESVJFQ1RfSU9fQUNDRVNTLgoKCSogbG9hZGVyL25lL3NlZ21lbnQuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglGaXhlZCB3cm9uZyBidWZmZXIgd2hpY2ggY2F1c2VkIGZpeHVwcyB0byBmYWlsLgoKCSogZ3JhcGhpY3MvZDNkY29tbW9uLmMsIGdyYXBoaWNzL2QzZGRldmljZXMuYywgZ3JhcGhpY3MvZDNkdGV4dHVyZS5jLCBpbmNsdWRlL2QzZC5oOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CgktIGFkZGVkIGFsbCB0aGUgRGlyZWN0M0QgZXJyb3IgY29kZXMKCS0gYWRkZWQgOGJpdCBwYWxldHRpemVkIHRleHR1cmUgc3VwcG9ydAoKCSogbXNkb3MvY2Ryb20uYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglpZmRlZnMgZm9yIGRlZmluZXMgbm90IGluIGxpbnV4IDIuMC4KCgkqIHJlbGF5MzIvd2luc3Bvb2wuc3BlYywgbWlzYy9wcmludGRydi5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJQWRkZWQgdHdvIHN0dWJzIGZvciBBZGRQcmludGVyRHJpdmVyLgoKCSogaW5jbHVkZS9kb3NleGUuaCwgbG9hZGVyL2Rvcy9kb3Ntb2QuYywgbG9hZGVyL2Rvcy9kb3Ntb2QuaCwgbG9hZGVyL2Rvcy9kb3N2bS5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglRdWV1ZSBTSUdBTFJNIHRvIHJlZHVjZSB0aGUgInNpZ25hbCAxNCBsb3N0IiBjb21wbGFpbnRzLgoJQWRkZWQgc3VwcG9ydCBmb3IgcmVwcm9ncmFtbWluZyB0aGUgRE9TIHRpbWVyLCBhbmQgcmVhZGluZyBiYWNrIHRoZQoJY3VycmVudCB2YWx1ZS4KCgkqIG1pc2MvcmVnaXN0cnkuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglXaW5lIGhhbmdzIHdoZW4gcmVnaXN0cnkgKGNvcnJ1cHRlZCkgaGFzIGxvbmUgXCBhdCBlbmQgb2YgZmlsZS4KCgkqIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uaCwgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jOgoJS29zdHlhIEl2YW5vdiA8a29zdHlhQHdhcm1jYXQuZXhjb20uc3BiLnN1PgoJU21hbGwgcGF0Y2ggdGhhdCBlbmFibGVzIENsYXJpb24gZm9yIFdpbmRvd3Mgbm90IHRvIHRyYXAgd2hpbGUKCWxvYWRpbmcuCgoJKiBvbGUvdmFyaWFudC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVJlcGxhY2UgdHJvdWJsZXNvbWUgYXNzaWdubWVudHMgYnkgbWVtc2V0IGZvciB3aG9sZSBzdHJ1Y3QuCgoJKiBncmFwaGljcy9kZHJhdy5jOiBMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUFkZGVkIGhhbmRsaW5nIG9mIHRoZSAncGFsZW50JyBmaWVsZCBvZiB0aGUgQ3JlYXRlUGFsZXR0ZSBwcm9jZWR1cmUuCgoJKiBkb2N1bWVudGF0aW9uL3dpbmUubWFuOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJQWRkZWQgZGVzY3JpcHRpb24gYWJvdXQgaW5jbHVkaW5nL2V4Y2x1ZGluZyBmdW5jdGlvbnMgZnJvbSByZWxheQoJdHJhY2UuCgoJKiB3aW4zMi9jb25zb2xlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJUmVhZCBhdCBsZWFzdCAxIGlucHV0IHJlY29yZCBpbiBSZWFkQ29uc29sZUlucHV0QS4KCgkqIG1lbW9yeS92aXJ0dWFsLmM6CglGaXhlZCBDcmVhdGVNYXBwaW5nIHdoZW4gYSBtYXBwaW5nIHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cy4KCldlZCBKYW4gIDYgMTA6Mzc6MjkgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHNlcnZlci9maWxlLmM6IEZpeGVkIGZpbGUgZGVzdHJ1Y3Rpb24gd2hlbiBmaWxlIGhhcyBubyBuYW1lLgoKVHVlIEphbiAgNSAxODozODo1OSAxOTk5ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogbWlzYy9tYWluLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJV2FybnMgdXNlciBpZiBtdWx0aXBsZSAtZGxsIHN3aXRjaGVzIGFyZSB1c2VkIG9uIGNvbW1hbmQgbGluZS4KCgkqIGRsbHMvY29tY3RsMzIvdHJhY2tiYXIuYzogQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KCUZpeGVkIGEgbGVmdG92ZXIgSGVhcEZyZWUgaW4gdGhlIHRyYWNrYmFyIGNvbW1vbiBjb250cm9sLgoKCSogaW5jbHVkZS9jb21tY3RybC5oLCBpbmNsdWRlL2RlYnVnLmgsIGluY2x1ZGUvZGVidWdkZWZzLmgsIGluY2x1ZGUvdGFiLmgsIGRsbHMvY29tY3RsMzIvdGFiLmM6CglBbGV4IFByaWVtIDxhbGV4cEBzY2kua3VuLm5sPgoJRml4ZWQgc29tZSBwcm9ibGVtcyB3aXRoIHRoZSB0YWIgY29tbW9uIGNvbnRyb2wgKHdpdGggdGhhbmtzIHRvIEFuZGVycwoJQ2FybHNzb24gPGFuZGVycy5jYXJsc3NvbkBsaW51eC5udT4pLgoKCSogZGxscy9jb21jdGwzMi9jb21tY3RybC5jLCBkbGxzL2NvbWN0bDMyL3Byb3BzaGVldC5jLCBpbmNsdWRlL2NvbW1jdHJsLmgsIGluY2x1ZGUvcHJvcHNoZWV0LmgsIHJlbGF5MzIvY29tY3RsMzIuc3BlYzoKCUFsZXggUHJpZW0gPGFsZXhwQHNjaS5rdW4ubmw+CglBZGRlZCBhIG1pc3NpbmcgUHJvcGVydHlTaGVldDMyQVcgYW5kIENyZWF0ZVByb3BlcnR5U2hlZXRQYWdlIHN0dWIsCglhbmQgc29tZSBtaXNzaW5nIGRlZmluZXMuCgoJKiBtaXNjL21haW4uYywgc2NoZWR1bGVyL3N5c2xldmVsLmMsIGdyYXBoaWNzL3ZnYS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglVc2UgTWFrZUNyaXRpY2FsU2VjdGlvbkdsb2JhbCBvbiBhbGwgY3JpdGljYWwgc2VjdGlvbnMgdXNlZCBhY3Jvc3MKCXByb2Nlc3MgYm91bmRhcmllcy4KCgkqIGluY2x1ZGUvd2luYmFzZS5oLCBpbmNsdWRlL3dpbmRvd3MuaDoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWRkZWQgcHJvdG90eXBlcyBmb3IgTWFrZUNyaXRpY2FsU2VjdGlvbkdsb2JhbCwgQ29udmVydFRvR2xvYmFsSGFuZGxlLgoKCSogZG9jdW1lbnRhdGlvbi93aW5lLm1hbjoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUFkZGVkIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiB0aGUgbWFuIHBhZ2UuCgoJKiBsb2FkZXIvZG9zL21vZHVsZS5jOiBHZXJhbGQgUGZlaWZlciA8cGZlaWZlckBkYmFpLnR1d2llbi5hYy5hdD4KCUZpeGVkIGFyZ3Mgb2YgTVpfQ3JlYXRlUHJvY2Vzcy4KCgkqIHByb2dyYW1zL2Nsb2NrL2xhbmd1YWdlLmMsIHByb2dyYW1zL25vdGVwYWQvbGFuZ3VhZ2UuYywgcHJvZ3JhbXMvcHJvZ21hbi9tYWluLmM6CglBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglGaXhlZCBzdHJpbmcgYnVnIGluIHByb2dyYW1zLy4KCgkqIG1zZG9zL2lvcG9ydHMuYzogQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJQWRkZWQgc3R1cGlkICJhY3Rpb24iIGVtdWxhdGlvbiBmb3IgaGFyZHdhcmUgdGltZXJzIGluIGlvcG9ydHMuYy4KCgkqIGRsbHMvd2luYXNwaS93aW5hc3BpMTYuYzogQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJQWdhaW4gYSBzbWFsbCBET1NBU1BJIHBhdGNoLgoKCSogZG9jdW1lbnRhdGlvbi9idWdyZXBvcnRzLCBkb2N1bWVudGF0aW9uL2ZvbnRzLCB3aW5kb3dzL3N5c21ldHJpY3MuYywgd2luZG93cy93aW4uYywgd2luZG93cy93aW5wb3MuYzoKCUFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KCURvY3VtZW50YXRpb24gdXBkYXRlcy4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IExpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJLSBjaGVjayBpZiBwYWxldHRlIGlzIG5vdCBudWxsIHdoZW4gc2V0dGluZyBhIHBhbGV0dGUKCS0gY2hlY2sgaWYgd2luZG93IGhhbmRsZSBpcyB2YWxpZCBiZWZvcmUgZ2V0dGluZyBpdHMgJ2RyYXdhYmxlJwoKCSogZ3JhcGhpY3MveDExZHJ2L3hmb250LmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJUHJldmVudCBjb3JlIGR1bXAgd2l0aCBzb21lIFRURiAod2hlbiBYMTEgcnVucyB3aXRoIGEgdHJ1ZSB0eXBlCglzZXJ2ZXIpLgoKCSogc2VydmVyL2NvbnNvbGUuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglVc2Ugc3Rkb3V0IGZvciBkZWZhdWx0IGNvbnNvbGUgb3V0cHV0LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gSmFuICAzIDE3OjAwOjIwIDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBncmFwaGljcy9kM2RleGVjdXRlYnVmZmVyLmMsIGdyYXBoaWNzL2QzZGxpZ2h0LmMsIGdyYXBoaWNzL2QzZG1hdGVyaWFsLmMsIGdyYXBoaWNzL2QzZHRleHR1cmUuYywgZ3JhcGhpY3MvZDNkdmlld3BvcnQuYywgZ3JhcGhpY3MvZGRyYXcuYywgaW5jbHVkZS9hY2NvbmZpZy5oLCBpbmNsdWRlL2NvbmZpZy5oLmluLCBpbmNsdWRlL2QzZC5oLCBpbmNsdWRlL3dpbmVfZ2wuaCwgbXVsdGltZWRpYS9kc291bmQuYywgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRvY3VtZW50YXRpb24vc3RhdHVzL2RpcmVjdDNELCBkb2N1bWVudGF0aW9uL3N0YXR1cy9kaXJlY3RkcmF3LCBncmFwaGljcy9NYWtlZmlsZS5pbiwgZ3JhcGhpY3MvZDNkX3ByaXZhdGUuaCwgZ3JhcGhpY3MvZDNkY29tbW9uLmMsIGdyYXBoaWNzL2QzZGRldmljZXMuYzoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJLSBiZWdpbm5pbmcgb2YgaW1wbGVtZW50YXRpb24gb2YgRGlyZWN0M0QyIChEWCA1LjApIGFuZCBhc3NvY2lhdGVkIGNsYXNzZXMKCS0gc29tZSBiYXNpYyBjb2RlIGZvciBEaXJlY3QzRCBhbmQgRGlyZWN0M0RFeGVjdXRlQnVmZmVyIChEWCAzLjApCgktIGFkZGVkIHN0cmV0Y2hpbmcgdG8gQmx0IGZ1bmN0aW9uCgoJKiBtaXNjL3ZlcnNpb24uYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglUcnkgdG8gYXV0b2RldGVjdCBOVDQuCgoJKiB3aW4zMi9jb25zb2xlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJMCBtZWFucyBzdWNjZXNzLCBhbGwgZWxzZSBmYWlsdXJlIGZvciBXYWl0Rm9yU2luZ2xlT2JqZWN0LgoKCSogbXNkb3MvaW50MTAuYzogSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglEbyBub3QgYWR2YW5jZSB0aGUgY3Vyc29yIGluIGNlcnRhaW4gcm91dGluZXMuIFRoaXMgY2xlYW5lZCB1cCB0aGUKCWltcGxlbWVudGF0aW9uIHF1aXRlIGEgYml0LgoKCSogbG9hZGVyL21haW4uYzogSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglTZXQgY29uc29sZSB2aWRlbyBtb2RlIHdoZW4gbG9hZGluZyBET1MgYXBwLiAoRXZlbnR1YWxseSwgSSB3YW50IHRvCgltaW1pYyBXaW5kb3dzIDl4J3MgYmVoYXZpb3IgYnkgc2V0dGluZyB0aGUgdmlkZW8gbW9kZSBvbmx5IHdoZW4gbm9uCglJTlQgMjEgY2FsbHMgYXJlIHVzZWQgdG8gYWxsb3cgZm9yIGFyYml0cmFyeS1zaXplZCBjb25zb2xlcykuCgoJKiBjb25zb2xlL2ludGVyZmFjZS5jLCBjb25zb2xlL3h0ZXJtLmM6CglKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCVh0ZXJtIGRyaXZlciBjYW4gbm93IHJlc2l6ZSB0aGUgdGVybWluYWwgd2hlbiBhIG1vZGUgY2hhbmdlIGlzCglkZXRlY3RlZC4KCgkqIGNvbnNvbGUvZ2VuZXJpYy5jOiBKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCUxvbmcgc3RhbmRpbmcgc2Nyb2xsIGJ1ZyBmaXhlZCEKCgkqIGNvbnNvbGUvbmN1cnNlcy5jLCBpbmNsdWRlL2FjY29uZmlnLmgsIGluY2x1ZGUvY29uZmlnLmguaW4sIGluY2x1ZGUvY29uc29sZS5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKCUpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJUmV3cml0ZSBvZiBjb25maWd1cmF0aW9uIHN5c3RlbSB0byBzdXBwb3J0ICJyZWd1bGFyIiBjdXJzZXMgYXMgd2VsbCBhcwoJZWxpbWluYXRpbmcgdGhlIC0td2l0aC1uY3Vyc2VzIG9wdGlvbi4gTm93LCBuY3Vyc2VzIHN1cHBvcnQgd2lsbCBiZQoJYnVpbHQgaW4gaWYgYSBjb21wYXRpYmxlIGxpYnJhcnkgaXMgZGV0ZWN0ZWQuCgoJKiBpbmNsdWRlL3dpbnR5cGVzLmgsIHdpbmRvd3MvZGVmZGxnLmM6CglORiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCUZpeCB0aGUgcmV0dXJuIHR5cGUgb2YgRExHUFJPQyB0eXBlIGFuZCBtYXNrIG91dCB0aGUgdW5zZXQgaGlnaHdvcmQgb2YKCXRoZSByZXR1cm4gd2hlbiBhIDE2IGJpdCBkaWFsb2cgcHJvYyBpcyBjYWxsZWQuCgoJKiBpbmNsdWRlL2ludGVyZmFjZXMuaDogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUFkZCBpbnRlcmZhY2UgSUQncyBmb3IgdXBjb21pbmcgSVR5cGVMaWIgaW1wbGVtZW50YXRpb24uCgoJKiBmaWxlcy9kb3NfZnMuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglCdWdmaXggZm9yIHRyYWlsaW5nIHNsYXNoZXMsIHJlcGV0aXRpb24gb2YgJy8nIG9yICdcJyBhbmQKCVNldExhc3RFcnJvcigpIGluIEdldEZ1bGxQYXRobmFtZS4KCgkqIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGxscy9NYWtlZmlsZS5pbiwgZGxscy9hZHZhcGkzMi8uY3ZzaWdub3JlLCBkbGxzL2FkdmFwaTMyL01ha2VmaWxlLmluLCBkbGxzL2FkdmFwaTMyL2FkdmFwaS5jLCBkbGxzL2FkdmFwaTMyL2V2ZW50bG9nLmMsIGRsbHMvYWR2YXBpMzIvc2VjdXJpdHkuYywgZGxscy9hZHZhcGkzMi9zZXJ2aWNlLmMsIHJlbGF5MzIvYWR2YXBpMzIuc3BlYywgd2luMzIvQXR0aWMvYWR2YXBpLmMsIHdpbjMyL0F0dGljL3NlY3VyaXR5LmMsIHdpbjMyL01ha2VmaWxlLmluLCB3aW4zMi9pbml0LmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1vdmVkIEFEVkFQSTMyIGZpbGVzIHRvIGRsbHMvYWR2YXBpMzIuCglBZGRlZCBzdHVicyBmb3IgZXZlbnRsb2cgZnVuY3Rpb25zLgoKCSogcmVsYXkzMi9zaGVsbDMyLnNwZWMsIGRsbHMvc2hlbGwzMi9zaGVsbGxpbmsuYywgZGxscy9zaGVsbDMyL3NoZWxsb2xlLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBkbGxzL3NoZWxsMzIvc2hlbGxwYXRoLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmMsIGluY2x1ZGUvc2hsb2JqLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBzdHVicyBOVFNIQ2hhbmdlTm90aWZ5UmVnaXN0ZXIsIE5UU0hDaGFuZ2VOb3RpZnlEZXJlZ2lzdGVyLgoJQ2xlYW51cCwgc29tZSBtb3JlIGZ1bmN0aW9ucyBVTklDT0RFIHJlYWR5LgoKCSogZGxscy9zaGVsbDMyL3BpZGwuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTSENsb25lU3BlY2lhbElETGlzdCBpbXBsZW1lbnRlZC4KCVNIR2V0RGF0YUZyb21JRExpc3RBIGNvcnJlY3RlZC4KCgkqIGRsbHMvc2hlbGwzMi9pY29uY2FjaGUuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU2hlbGxfR2V0Q2FjaGVkSW1hZ2VJbmRleDMyW0F8V10gaW1wbGVtZW50ZWQuCgoJKiBtc2Rvcy9pbnQyMS5jLCBtc2Rvcy9pbnQyNS5jLCBtc2Rvcy9pbnQyNi5jLCBmaWxlcy9kcml2ZS5jLCBpbmNsdWRlL2RyaXZlLmg6CglBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglJbXBsZW1lbnRlZCByYXcgZGV2aWNlIGFjY2VzcyBjYWxscyBmb3IgaW9jdGxHZW5lcmljQmxrRGV2UmVxKCkKCWFuZCB0aGVyZWZvcmUgbW92ZWQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBvZiBpbnQyWzU2XS5jIGludG8gZmlsZXMvZHJpdmUuYy4KCgkqIG1zZG9zL2lvcG9ydHMuYzogQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJQWRkZWQgYXV0b21hdGljIENNT1MgUkFNIGNoZWNrc3VtIGNhbGN1bGF0aW9uLgoKCSogZGxscy93aW5hc3BpL3dpbmFzcGkxNi5jLCBkbGxzL3duYXNwaTMyL3dpbmFzcGkzMi5jLCBkb2N1bWVudGF0aW9uL2FzcGksIHJlbGF5MzIvd25hc3BpMzIuc3BlYzoKCUFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KCVNlbmRBU1BJMzJDb21tYW5kMzIgaGFzIHRvIGJlIF9fY2RlY2wuCglVcGRhdGVkIGRvY3VtZW50YXRpb24vYXNwaSBhbmQgcmV2ZXJ0ZWQgYW4gRVJSIGJhY2sgdG8gV0FSTi4KCgkqIGRvY3VtZW50YXRpb24vYnVncmVwb3J0czogSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgoJT2YgY291cnNlIHdlIHdhbnQgdGhlIGxhc3QgMTAwIGxpbmVzLCBub3QgdGhlIGZpcnN0IDEwMCBsaW5lcy4KCVVzZSAndGFpbCcgaW5zdGVhZCBvZiAnaGVhZCcuIEFsc28gZml4IHRleHQgYWxpZ25tZW50IGZyb20KCXByZXZpb3VzIHBhdGNoLgoKCSogbXVsdGltZWRpYS9qb3lzdGljay5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCVJlYWRpbmcgam95c3RpY2sgNSB3aGVuIHdlIG9ubHkgc3VwcG9ydCA0IHNob3VsZCBmYWlsIGluc3RlYWQgb2YKCWhhbmcuCgoJKiBtdWx0aW1lZGlhL21jaWNkYS5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCVBsYXlpbmcgYSBub24tZXhpc3RlbnQgQ0Qgc2hvdWxkIGZhaWwgaW5zdGVhZCBvZiBjcmFzaC4KCgkqIE1ha2UucnVsZXMuaW4sIE1ha2VmaWxlLmluOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNoZWNrIGZvciBuZWNlc3NhcnkgY29uZmlndXJlIHJlcnVucyBmb3IgTWFrZWZpbGUgYW5kIE1ha2UucnVsZXMKCWdlbmVyYXRpb24uCgoJKiBtaXNjZW11L2luc3RyLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJRW11bGF0ZXMgaW5zL291dHMgY29ycmVjdGx5IGZvciBET1MgcHJvZ3JhbXMuCgoJKiBvbGUvc3RvcmFnZS5jLCBzY2hlZHVsZXIvcHJvY2Vzcy5jLCBzZXJ2ZXIvY2hhbmdlLmMsIHNlcnZlci9jb25zb2xlLmMsIHNlcnZlci9ldmVudC5jLCBzZXJ2ZXIvZmlsZS5jLCBzZXJ2ZXIvbWFwcGluZy5jLCBzZXJ2ZXIvbXV0ZXguYywgc2VydmVyL29iamVjdC5jLCBzZXJ2ZXIvcGlwZS5jLCBzZXJ2ZXIvcHJvY2Vzcy5jLCBzZXJ2ZXIvcmVxdWVzdC5jLCBzZXJ2ZXIvc2VtYXBob3JlLmMsIHNlcnZlci90aHJlYWQuYywgc2VydmVyL3RyYWNlLmMsIHdpbjMyL2RldmljZS5jLCB3aW4zMi9maWxlLmMsIGZpbGVzL2Rvc19mcy5jLCBmaWxlcy9maWxlLmMsIGluY2x1ZGUvZGV2aWNlLmgsIGluY2x1ZGUvZmlsZS5oLCBpbmNsdWRlL3NlcnZlci5oLCBpbmNsdWRlL3NlcnZlci9vYmplY3QuaCwgaW5jbHVkZS9zZXJ2ZXIvcmVxdWVzdC5oLCBsb2FkZXIvbmUvbW9kdWxlLmMsIGxvYWRlci9wZV9pbWFnZS5jLCBtaXNjL2NydGRsbC5jLCBtc2Rvcy9pbnQyMS5jLCBtc2Rvcy92eGQuYzoKCUltcGxlbWVudGVkIGZpbGUgc2hhcmluZyBjaGVja3MgaW4gdGhlIHNlcnZlci4KCUFkZGVkIHNldCBmaWxlIHRpbWUgc2VydmVyIHJlcXVlc3QuCglPdmVyYWxsIGNsZWFuIHVwIG9mIHRoZSBmaWxlIGhhbmRsaW5nIChET1MgZGV2aWNlIGhhbmRsaW5nIGlzIG5vdwoJYnJva2VuLCBzaG91bGQgYmUgcmVkb25lKS4KClNhdCBKYW4gIDIgMDg6MjI6MzQgMTk5OSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG1lbW9yeS92aXJ0dWFsLmM6CglGaXhlZCBidWcgaW4gQ3JlYXRlRmlsZU1hcHBpbmcgd2hlbiBuYW1lIGlzIG5vdCBOVUxMLgoKCSogc2VydmVyL3JlcXVlc3QuYzogRml4ZWQgQ0hFQ0tfU1RSSU5HIGRpc3BsYXkuCgpGcmkgSmFuICAxIDE5OjUxOjI1IDE5OTkgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpZjE2MzIva2VybmVsLnNwZWMsIG1lbW9yeS9sb2NhbC5jOgoJUmljaGFyZCBBIExvdWdoIDxyYWxvdWdoLmNlZEBkbmV0LmNvLnVrPgoJUHV0IHJldHVybiB2YWx1ZSBvZiBMb2NhbEFsbG9jIGluIENYIHRvby4KCgkqIGluY2x1ZGUvcHNkcnYuaDogRGltaXRyaWUgTy4gUGF1biA8ZGltaUBjcy50b3JvbnRvLmVkdT4KCVByb3RlY3QgYWdhaW5zdCBtdWx0aXBsZSBpbmNsdWRlcy4KCgkqIGRsbHMvc2hlbGwzMi9pY29uY2FjaGUuYzogVXNlIHByb3BlciBzeXN0ZW0gZGlyZWN0b3J5LgoKCSogc2NoZWR1bGVyL3Byb2Nlc3MuYzogR290IHJpZCBvZiBDTElFTlRfR2V0UHJvY2Vzc0luZm8uCgoJKiB3aW5kb3dzL2NsYXNzLmMsIHdpbmRvd3MvZGNlLmMsIHdpbmRvd3MvZGVmZGxnLmMsIHdpbmRvd3MvZGVmd25kLmMsIHdpbmRvd3MvZHJpdmVyLmMsIHdpbmRvd3MvbXNnYm94LmMsIHdpbmRvd3MvcGFpbnRpbmcuYywgd2luZG93cy91c2VyLmMsIHdpbmRvd3Mvd2luaGVscC5jLCBpbmNsdWRlL3dpbmUvd2ludXNlcjE2LmgsIGluY2x1ZGUvd2lucmVnLmgsIGluY2x1ZGUvd2ludXNlci5oLCBsb2FkZXIvbW9kdWxlLmMsIG1pc2MvY29tbS5jLCBtaXNjL3NoZWxsLmMsIG1pc2Mvc3Bvb2xlci5jLCBtaXNjL3NweS5jLCBtaXNjL3dpbnNvY2suYywgbXVsdGltZWRpYS9hdWRpby5jLCBtdWx0aW1lZGlhL21jaWFuaW0uYywgbXVsdGltZWRpYS9tY2ljZGEuYywgbXVsdGltZWRpYS9tY2ltaWRpLmMsIG11bHRpbWVkaWEvbWNpd2F2ZS5jLCBtdWx0aW1lZGlhL21pZGkuYywgbXVsdGltZWRpYS9tbXN5c3RlbS5jLCBvYmplY3RzL2NsaXBwaW5nLmMsIG9sZS9vbGVvYmouYywgY29udHJvbHMvYnV0dG9uLmMsIGNvbnRyb2xzL2Rlc2t0b3AuYywgY29udHJvbHMvaWNvbnRpdGxlLmMsIGNvbnRyb2xzL3N0YXRpYy5jLCBkZWJ1Z2dlci9kYmcueSwgZGxscy9zaGVsbDMyL2ljb25jYWNoZS5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmMsIGdyYXBoaWNzL3BzZHJ2L2VzY2FwZS5jLCBpZjE2MzIvdGh1bmsuYywgaW5jbHVkZS9jYWxsYmFjay5oLCBpbmNsdWRlL2Rpc3BsYXkuaCwgaW5jbHVkZS9pbWFnZWxpc3QuaCwgaW5jbHVkZS9vbGUuaCwgaW5jbHVkZS9xdWV1ZS5oLCBpbmNsdWRlL3NoZWxsLmgsIGluY2x1ZGUvc3RvcmFnZS5oLCBpbmNsdWRlL3N0cnVjdDMyLmgsIGluY2x1ZGUvd2luYmFzZS5oLCBpbmNsdWRlL3dpbmRvd3MuaDoKCU1pY2hhZWwgVmVrc2xlciA8bXZla3NsZXJAdGVjaHVuaXgudGVjaG5pb24uYWMuaWw+CglNb3ZlcyBtb3JlIHN0dWZmIGZyb20gd2luZG93cy5oLgoJLSBpbmNsdWRlL3dpbnVzZXIuaCAtIGludGVyZmFjZSByZWxldmFudCB0byB1c2VyMzIuc3BlYwoJLSBpbmNsdWRlL3dpbmUvd2ludXNlcjE2LmggLSB0aGUgb2xkIDE2IGJpdCBpbnRlcmZhY2UgKGludGVybmFsIHVzZSkKCS0gaW5jbHVkZS93aW5iYXNlLmggLSBzb21lIG1pbm9yIHVwZGF0ZXMgdG8ga2VlcCB0aGluZ3MgY29oZXJlbnQuCgktIExvdCBvZiBvdGhlciBmaWxlcyBtYWRlIHRvIGluY2x1ZGUgd2luZS93aW51c2VyMTYuaCwgd2hpY2ggaXMgbm8KCSAgbG9uZ2VyIGluY2x1ZGVkIGZyb20gd2luZG93cy5oCgoJKiBzY2hlZHVsZXIvaGFuZGxlLmM6IEZpeGVkIENsb3NlSGFuZGxlKCkgb24gZ2xvYmFsIGhhbmRsZXMuCgoJKiBSRUFETUUsIGRvY3VtZW50YXRpb24vYnVncmVwb3J0cywgZG9jdW1lbnRhdGlvbi93aW45NWxvb2ssIGRvY3VtZW50YXRpb24vd2luZS5tYW46CglKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CglBZGQgc29tZSBpbmZvcm1hdGlvbiB0byB0aGUgbWFuIHBhZ2UgYW5kIFJFQURNRSBmaWxlLgoJTWFrZSBkb2N1bWVudGF0aW9uL3dpbjk1bG9vayBzYXkgW1R3ZWFrLkxheW91dF0gaW5zdGVhZCBvZgoJW1R3ZWFrcy5MYXlvdXRdLgoJRml4IGluY29ycmVjdCBjb21tYW5kIGdpdmVuIGluIGRvY3VtZW50YXRpb24vYnVncmVwb3J0cy4KCVN0YW5kYXJkIGVycm9yIHdhcyBub3QgYmVpbmcgcmVkaXJlY3RlZCwgc28gbW9zdCBvZiB0aGUKCW91dHB1dCB3YXMgbG9zdC4KCgkqIG9iamVjdHMvYml0bWFwLmM6IE5GIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJRGVscGhpIDIuMCBuZWVkcyB0byBhbGxvY2F0ZSBhIGJpdG1hcCBiaWdnZXIgdGhhbiA0MDk2IGJpdHMgd2lkZS4KCgkqIG1pc2MvcHJpbnRkcnYuYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglJbml0aWFsaXplIGxwZHdOZWVkZWQuCgoJKiBpZjE2MzIvc25vb3AuYzoKCU1hcmN1cyBNZWlzc25lciA8TWFyY3VzLk1laXNzbmVyQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW5jbHVkZSBzdHVmZiBldmVuIGlmIG5vdCBvbiBfX2kzODZfXyBmb3IgZGVidWcgZGVmaW5lcy4KCgkqIG9sZS92YXJpYW50LmM6CglNYXJjdXMgTWVpc3NuZXIgPE1hcmN1cy5NZWlzc25lckBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFub3RoZXIgLy8gY29tbWVudCBmaXhlZC4KCgkqIHNlcnZlci9maWxlLmM6CglNYXJjdXMgTWVpc3NuZXIgPE1hcmN1cy5NZWlzc25lckBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCU5lZWQgPGVycm5vLmg+IGZvciBlcnJubyBkZWNsLiBvbiBTb2xhcmlzLgoKCSogaW5jbHVkZS93aW5nZGkuaCwgaW5jbHVkZS94MTFmb250LmgsIG9iamVjdHMvZm9udC5jOgoJRG91Z2xhcyBSaWRnd2F5IDxyaWRnd2F5QHdpbmVocS5jb20+CglJbXBsZW1lbnQgVHJhbnNsYXRlQ2hhcnNldEluZm8sIGNoYW5nZSBjaGFyc2V0IHR5cGUgdG8gQllURS4KCgkqIGNvbnRyb2xzL2NvbWJvLmMsIGNvbnRyb2xzL2xpc3Rib3guYywgaW5jbHVkZS9jb21iby5oOgoJQWxleCBLb3JvYmthIDxrb3JvYmthQGdhbGF4eS5hbXMuc3VueXNiLmVkdT4KCUJldHRlciBDQl9TRVRDVVJTRUwgbWVzc2FnZSBoYW5kbGluZy4KCgkqIGluY2x1ZGUvcXVldWUuaCwgaW5jbHVkZS90aHJlYWQuaCwgc2NoZWR1bGVyL3N5bmNocm8uYywgc2NoZWR1bGVyL3RocmVhZC5jLCB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy9xdWV1ZS5jOgoJTW92ZWQgTXNnV2FpdEZvck11bHRpcGxlT2JqZWN0IGltcGxlbWVudGF0aW9uIHRvIFVTRVIgcm91dGluZXMsIHVzaW5nCglhIG5vcm1hbCBXaW4zMiBldmVudC4KCgkqIHRvb2xzL21ha2VfcmVxdWVzdHM6IFNlbmQgZGVidWdnaW5nIG91dHB1dCB0byBzdGRlcnIuCgoJKiBmaWxlcy9jaGFuZ2UuYywgZmlsZXMvZG9zX2ZzLmMsIGZpbGVzL2ZpbGUuYywgaW5jbHVkZS9maWxlLmgsIHNjaGVkdWxlci9jbGllbnQuYywgc2NoZWR1bGVyL2V2ZW50LmMsIHNjaGVkdWxlci9rMzJvYmouYywgc2NoZWR1bGVyL211dGV4LmMsIHNjaGVkdWxlci9waXBlLmMsIHNjaGVkdWxlci9zZW1hcGhvcmUuYywgd2luMzIvY29uc29sZS5jOgoJQ2xlYW5lZCB1cCBhbmQgcmVtb3ZlZCBzb21lIG5vIGxvbmdlciB1c2VkIGNvZGUuCgoJKiBtZW1vcnkvdmlydHVhbC5jOiBVc2Ugc2VydmVyIGZpbGUgbWFwcGluZyBvYmplY3RzLgoKCSogaW5jbHVkZS9zZXJ2ZXIvb2JqZWN0LmgsIGluY2x1ZGUvc2VydmVyL3JlcXVlc3QuaCwgaW5jbHVkZS9zZXJ2ZXIvdGhyZWFkLmgsIHNlcnZlci9NYWtlZmlsZS5pbiwgc2VydmVyL2NvbnNvbGUuYywgc2VydmVyL2ZpbGUuYywgc2VydmVyL21haW4uYywgc2VydmVyL21hcHBpbmcuYywgc2VydmVyL29iamVjdC5jLCBzZXJ2ZXIvcGlwZS5jLCBzZXJ2ZXIvcmVxdWVzdC5jLCBzZXJ2ZXIvdGhyZWFkLmMsIHNlcnZlci90cmFjZS5jLCBpbmNsdWRlL3NlcnZlci5oOgoJQWRkZWQgc2VydmVyLXNpZGUgZmlsZSBtYXBwaW5nIG9iamVjdCBzdXBwb3J0LgoKCSogbWlzYy9jcnRkbGwuYzoKCUhhY2tlZCBzdGRpbyBmdW5jdGlvbnMgdG8gdXNlIFdpbjMyIGZpbGUgaGFuZGxlcy4gU3RpbGwgbmVlZHMgYSBwcm9wZXIKCXN0ZGlvIGVtdWxhdGlvbi4KCgkqIGxvYWRlci9uZS9tb2R1bGUuYywgbG9hZGVyL25lL3Jlc291cmNlLmMsIGxvYWRlci9uZS9zZWdtZW50LmM6CglVc2UgV2luMzIgZmlsZSBoYW5kbGVzIGluc3RlYWQgb2YgVW5peCBvbmVzLgoKCSogaW5jbHVkZS9tb2R1bGUuaCwgaW5jbHVkZS9wZV9pbWFnZS5oLCBpbmNsdWRlL3Byb2Nlc3MuaCwgbG9hZGVyL2Rvcy9tb2R1bGUuYywgbG9hZGVyL21vZHVsZS5jLCBsb2FkZXIvcGVfaW1hZ2UuYywgc2NoZWR1bGVyL3Byb2Nlc3MuYywgaW5jbHVkZS9kb3NleGUuaDoKCVRha2UgaW50byBhY2NvdW50IGhhbmRsZSBpbmhlcml0YW5jZSBmbGFnLgoKVGh1IERlYyAzMSAxNTo1NToxOSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogZGVidWdnZXIvZGJfZGlzYXNtLmM6CglDaGFuZ2VkIGRiX3Rhc2tfcHJpbnRzeW0gdG8gYWx3YXlzIHByaW50IGEgZnVsbCBhZGRyZXNzLCBubyBtYXR0ZXIKCXdoYXQgdGhlIG9wZXJhbmQgc2l6ZSBpcy4KCgkqIHNjaGVkdWxlci9jcml0c2VjdGlvbi5jOiBSZS1pbXBsZW1lbnRlZCB1c2luZyBhIHJlYWwgc2VtYXBob3JlLgoKCSogd2luZG93cy9xdWV1ZS5jLCBmaWxlcy9jaGFuZ2UuYywgZmlsZXMvZmlsZS5jLCBpbmNsdWRlL2szMm9iai5oLCBpbmNsdWRlL3Byb2Nlc3MuaCwgaW5jbHVkZS90aHJlYWQuaCwgbG9hZGVyL3NpZ25hbC5jLCBtZW1vcnkvdmlydHVhbC5jLCBtaXNjL3Rvb2xoZWxwLmMsIHNjaGVkdWxlci9jbGllbnQuYywgc2NoZWR1bGVyL2V2ZW50LmMsIHNjaGVkdWxlci9oYW5kbGUuYywgc2NoZWR1bGVyL2szMm9iai5jLCBzY2hlZHVsZXIvbXV0ZXguYywgc2NoZWR1bGVyL3BpcGUuYywgc2NoZWR1bGVyL3Byb2Nlc3MuYywgc2NoZWR1bGVyL3NlbWFwaG9yZS5jLCBzY2hlZHVsZXIvc3luY2hyby5jLCBzY2hlZHVsZXIvdGhyZWFkLmMsIHdpbjMyL2NvbnNvbGUuYywgd2luMzIvZGV2aWNlLmM6CglSZW1vdmVkIGNsaWVudC1zaWRlIHdhaXQgZnVuY3Rpb25zOyBhbGwgd2FpdGluZyBpcyBub3cgZG9uZSB0aHJvdWdoCgl0aGUgc2VydmVyLgoKCSogc2VydmVyL01ha2VmaWxlLmluLCBzZXJ2ZXIvY2hhbmdlLmMsIHNlcnZlci9wcm9jZXNzLmMsIHNlcnZlci9yZXF1ZXN0LmMsIHNlcnZlci90cmFjZS5jLCBpbmNsdWRlL3NlcnZlci5oLCBpbmNsdWRlL3NlcnZlci9vYmplY3QuaCwgaW5jbHVkZS9zZXJ2ZXIvcmVxdWVzdC5oOgoJQWRkZWQgY2hhbmdlIG5vdGlmaWNhdGlvbnMuCglBZGRlZCBnbG9iYWwgaGFuZGxlIHN1cHBvcnQuCgpXZWQgRGVjIDMwIDEyOjExOjUyIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpbmNsdWRlL3RocmVhZC5oLCBzY2hlZHVsZXIvc3luY2hyby5jOgoJQ2hhbmdlZCBzZXJ2ZXIgd2FpdCBsb2dpYyBhIGJpdC4KCgkqIHdpbjMyL2NvbnNvbGUuYzoKCUhhY2tzIHRvIHN1cHBvcnQgc2VydmVyLXNpZGUgY29uc29sZS4gU2hvdWxkIGJlIHJlZG9uZSBwcm9wZXJseQoJc29tZSBkYXkuCgoJKiBmaWxlcy9kb3NfZnMuYywgZmlsZXMvZmlsZS5jLCBpbmNsdWRlL2ZpbGUuaCwgd2luMzIvZmlsZS5jLCB3aW4zMi9uZXdmbnMuYzoKCVJlaW1wbGVtZW50ZWQgUmVhZC9Xcml0ZUZpbGUgdG8gdXNlIHNlcnZlciBmaWxlIGRlc2NyaXB0b3JzLgoJUmVtb3ZlZCBmaWxlIHBvc2l0aW9uIGhhY2sgYXMgaXQgaXMgd3JvbmcgZm9yIFdpbjMyIChzaG91bGQgYmUgcmVkb25lCglmb3IgV2luMTYgb25seSkuCgoJKiBzY2hlZHVsZXIvTWFrZWZpbGUuaW4sIHNjaGVkdWxlci9rMzJvYmouYywgc2NoZWR1bGVyL3BpcGUuYzoKCUFkZGVkIGFub255bW91cyBwaXBlIHN1cHBvcnQKCgkqIGluY2x1ZGUvc2VydmVyLmgsIGluY2x1ZGUvc2VydmVyL29iamVjdC5oLCBpbmNsdWRlL3NlcnZlci9yZXF1ZXN0LmgsIHNlcnZlci9NYWtlZmlsZS5pbiwgc2VydmVyL2NvbnNvbGUuYywgc2VydmVyL2V2ZW50LmMsIHNlcnZlci9maWxlLmMsIHNlcnZlci9tdXRleC5jLCBzZXJ2ZXIvb2JqZWN0LmMsIHNlcnZlci9waXBlLmMsIHNlcnZlci9wcm9jZXNzLmMsIHNlcnZlci9yZXF1ZXN0LmMsIHNlcnZlci9zZW1hcGhvcmUuYywgc2VydmVyL3RocmVhZC5jLCBzZXJ2ZXIvdHJhY2UuYzoKCUFkZGVkIHNldmVyYWwgZmlsZSBzZXJ2ZXIgcmVxdWVzdHMKCUFkZGVkIHNlcnZlci1zaWRlIHBpcGVzIGFuZCBjb25zb2xlcwoKU3VuIERlYyAyNyAxNToyODo1NSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogbWlzYy9jcnRkbGwuYywgbXNkb3MvaW50MjEuYywgc2NoZWR1bGVyL2NsaWVudC5jLCBzY2hlZHVsZXIvazMyb2JqLmMsIHNlcnZlci9NYWtlZmlsZS5pbiwgc2VydmVyL2V2ZW50LmMsIHNlcnZlci9maWxlLmMsIHNlcnZlci9tdXRleC5jLCBzZXJ2ZXIvcHJvY2Vzcy5jLCBzZXJ2ZXIvcmVxdWVzdC5jLCBzZXJ2ZXIvc2VtYXBob3JlLmMsIHNlcnZlci90cmFjZS5jLCB0b29scy9tYWtlX3JlcXVlc3RzLCBmaWxlcy9kb3NfZnMuYywgZmlsZXMvZmlsZS5jLCBpbmNsdWRlL2RlYnVnLmgsIGluY2x1ZGUvZGVidWdkZWZzLmgsIGluY2x1ZGUvZmlsZS5oLCBpbmNsdWRlL3NlcnZlci5oLCBpbmNsdWRlL3NlcnZlci9vYmplY3QuaCwgaW5jbHVkZS9zZXJ2ZXIvcmVxdWVzdC5oLCBsb2FkZXIvbWFpbi5jLCBtZW1vcnkvdmlydHVhbC5jOgoJQWRkZWQgYmVnaW5uaW5ncyBvZiBzZXJ2ZXItc2lkZSBmaWxlIGhhbmRsaW5nLgoJQWRkZWQgLWRlYnVnbXNnICtzZXJ2ZXIgc3VwcG9ydC4KCUJldHRlciBzZXJ2ZXIgcmVxdWVzdCBkdW1waW5nIGZvciB2YXJhcmdzIHJlcXVlc3RzLgoKCSogd2luZG93cy94MTFkcnYvd25kLmM6CglGaXhlZCBTZXRGb2N1cyB0aGF0IHdhcyBicm9rZW4gd2hlbiBtb3ZlZCB0byB4MTFkcnYuCgoJKiBpbmNsdWRlL3NlcnZlci9vYmplY3QuaCwgaW5jbHVkZS9zZXJ2ZXIvdGhyZWFkLmgsIHNjaGVkdWxlci9jbGllbnQuYywgc2VydmVyL01ha2VmaWxlLmluLCBzZXJ2ZXIvZXZlbnQuYywgc2VydmVyL21haW4uYywgc2VydmVyL211dGV4LmMsIHNlcnZlci9wcm9jZXNzLmMsIHNlcnZlci9zZWxlY3QuYywgc2VydmVyL3NlbWFwaG9yZS5jLCBzZXJ2ZXIvc29ja2V0LmMsIHNlcnZlci90aHJlYWQuYzoKCUFkZGVkIGFkZF9xdWV1ZS9yZW1vdmVfcXVldWUgdG8gc2VydmVyIG9iamVjdCBvcGVyYXRpb25zLgoJTW92ZWQgc2VsZWN0KCkgbG9vcCBmdW5jdGlvbnMgdG8gc2VsZWN0LmMuCgpTYXQgRGVjIDI2IDE5OjQ3OjAwIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBwcm9ncmFtcy9yZWd0ZXN0L3JlZ3Rlc3QuYzoKCVJlbmFtZWQgRVJSIG1hY3JvIHRvIGF2b2lkIGNvbmZ1c2luZyB0aGUgbWFrZV9kZWJ1ZyBzY3JpcHQuCgoJKiBvbGUvc3RvcmFnZS5jLCBvbGUvdHlwZWxpYi5jLCBpbmNsdWRlL2QzZC5oLCBpbmNsdWRlL21tc3lzdGVtLmgsIGluY2x1ZGUvb2xlYXV0by5oLCBpbmNsdWRlL3N0b3JhZ2UuaCwgaW5jbHVkZS93aW52ZXJzaW9uLmgsIG9sZS9jb21wb2JqLmMsIG9sZS9vbGUyLmMsIG9sZS9vbGUybmxzLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUZpeGVkIHRvbnMgb2YgaW5jb21wbGV0ZSBwcm90b3R5cGVzLCBhc3NpZ25tZW50J3Mgb2YgcG9pbnRlciB3aXRoCglkaWZmZXJlbnQgc2lnbmVkbmVzcywgc3VwZXJmbG91cyAnLCcgYW5kICc7JyBpbiBzdHJ1Y3R1cmVzLCB3cm9uZwoJcmV0dXJuLXR5cGVzLCBsb3NlIG9mIGRpZ2l0cyBhbmQgc29tZSBzbWFsbCBnbGl0Y2hlcy4KCgkqIGdyYXBoaWNzL3gxMWRydi94Zm9udC5jLCBpbmNsdWRlL3gxMWZvbnQuaDoKCUFsZXggS29yb2JrYSA8a29yb2JrYUBnYWxheHkuYW1zLnN1bnlzYi5lZHU+CglDbGVhbmVkIHVwIGZvbnQgZW5jb2RpbmcgaGFuZGxpbmcuIEFkZGVkICdJZ25vcmUjJyBvcHRpb24gdG8gdGhlCglbZm9udHNdIHNlY3Rpb24uIEFsc28sIGZpbGUgd2l0aCBjYWNoZWQgbWV0cmljcyBub3cgaGFzIHRoZSB2YWx1ZSBvZgoJJERJU1BMQVkgYXBwZW5kZWQgdG8gdGhlIGZpbGVuYW1lLgoKCSogcHJvZ3JhbXMvY2xvY2svbGFuZ3VhZ2UuYywgcHJvZ3JhbXMvY2xvY2svbWFpbi5jLCBwcm9ncmFtcy9ub3RlcGFkL2RpYWxvZy5jLCBwcm9ncmFtcy9ub3RlcGFkL2xhbmd1YWdlLmMsIHByb2dyYW1zL25vdGVwYWQvbWFpbi5jLCByYy9zeXN0ZXN0LmMsIHdpbmRvd3MvbXVsdGltb24uYywgd2luZG93cy9ub25jbGllbnQuYywgZGxscy9zaGVsbDMyL3NobHZpZXcuYywgZmlsZXMvcHJvZmlsZS5jLCBncmFwaGljcy9wYXRoLmMsIGluY2x1ZGUvY29tbWN0cmwuaCwgaW5jbHVkZS9kM2QuaCwgaW5jbHVkZS9kcGxheS5oLCBpbmNsdWRlL2Rzb3VuZC5oLCBpbmNsdWRlL29sZS5oLCBpbmNsdWRlL29sZW9iai5oLCBpbmNsdWRlL3NobG9iai5oLCBpbmNsdWRlL3Zmdy5oLCBpbmNsdWRlL3dpbmVycm9yLmgsIGluY2x1ZGUvd2luaW9jdGwuaCwgbWlzYy9tYWluLmMsIG11bHRpbWVkaWEvYXVkaW8uYywgbXVsdGltZWRpYS9kc291bmQuYywgb2xlL29sZTIuYywgZGVidWdnZXIvc3RhYnMuYywgZGxscy9jb21jdGwzMi9hbmltYXRlLmMsIGRsbHMvY29tY3RsMzIvaGVhZGVyLmMsIGRsbHMvY29tY3RsMzIvaG90a2V5LmMsIGRsbHMvY29tY3RsMzIvbGlzdHZpZXcuYywgZGxscy9jb21jdGwzMi9wYWdlci5jLCBkbGxzL2NvbWN0bDMyL3JlYmFyLmMsIGRsbHMvY29tY3RsMzIvdG9vbGJhci5jLCBkbGxzL2NvbWN0bDMyL3Rvb2x0aXBzLmMsIGRsbHMvY29tY3RsMzIvdHJhY2tiYXIuYywgZGxscy9jb21jdGwzMi90cmVldmlldy5jLCBkbGxzL3NoZWxsMzIvY29udG1lbnUuYywgZGxscy9zaGVsbDMyL2VudW1pZGxpc3QuYywgZGxscy9zaGVsbDMyL3BpZGwuYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNoYW5nZWQgLy8gY29tbWVudHMgdG8gLyogKi8gc28gV0lORSBjb21waWxlcyB3aXRoIG5vbi1nY2MgY29tcGlsZXJzCglhZ2Fpbi4KCgkqIHdpbmRvd3MvdHR5ZHJ2L2NsaXBib2FyZC5jLCB3aW5kb3dzL3R0eWRydi9ldmVudC5jLCB3aW5kb3dzL3R0eWRydi9pbml0LmMsIHdpbmRvd3MveDExZHJ2L2NsaXBib2FyZC5jLCB3aW5kb3dzL3gxMWRydi9ldmVudC5jLCB3aW5kb3dzL3gxMWRydi9pbml0LmMsIHdpbmRvd3MveDExZHJ2L21vdXNlLmMsIHdpbmRvd3MveDExZHJ2L3duZC5jLCBkZWJ1Z2dlci9kYmcueSwgZ3JhcGhpY3MvZGRyYXcuYywgZ3JhcGhpY3MveDExZHJ2L2JpdGJsdC5jLCBncmFwaGljcy94MTFkcnYvYnJ1c2guYywgZ3JhcGhpY3MveDExZHJ2L2NsaXBwaW5nLmMsIGdyYXBoaWNzL3gxMWRydi9pbml0LmMsIGluY2x1ZGUvY2xpcGJvYXJkLmgsIGluY2x1ZGUvZGRyYXcuaCwgaW5jbHVkZS9kaXNwbGF5LmgsIGluY2x1ZGUvdHR5ZHJ2LmgsIGluY2x1ZGUvd2luLmgsIGluY2x1ZGUveDExZHJ2LmgsIG9iamVjdHMvcGFsZXR0ZS5jLCB3aW5kb3dzL2RjZS5jLCB3aW5kb3dzL2RpbnB1dC5jLCB3aW5kb3dzL2Rpc3BsYXkuYywgd2luZG93cy9pbnB1dC5jLCB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy9zY3JvbGwuYywgd2luZG93cy93aW4uYywgd2luZG93cy93aW5wb3MuYzoKCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJTW92ZWQgbW9yZSB0aGluZ3MgdG8gdGhlIFgxMSBkcml2ZXIuCgoJKiBpbmNsdWRlL3dpbmdkaS5oLCBvYmplY3RzL2JydXNoLmM6CglGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAbXVsdGltYW5pYS5jb20+CglGaXhlZCB0aGUgcHJvdG90eXBlIG9mIENyZWF0ZURJQlBhdHRlcm5CcnVzaFB0CgoJKiBpbmNsdWRlL3dpbmRvd3MuaDogRnJhbmNvaXMgR291Z2V0IDxmZ291Z2V0QG11bHRpbWFuaWEuY29tPgoJUmVtb3ZlZCB0aGUgQ05feHh4IG1hY3JvcyBzaW5jZSB0aGV5IGFyZSBub3QgdXNlZCwgZG8gbm90IGNvcnJlc3BvbmQgdG8KCWFueSBXaW5kb3dzIGRlZmluZSBhbmQgY29uZmxpY3Qgd2l0aCBNRkMgZGVmaW5lcy4KCXdpbmRvd3MuaCBtdXN0IHByb3ZpZGUgYWxsIHRoZSBkZWZpbml0aW9ucyBjb250YWluZWQgaW4gd2luYmFzZS5oCglTb21lIFh4eDMyIGZ1bmN0aW9ucyBkaWQgbm90IGhhdmUgdGhlIGFzc29jaWF0ZWQgWHh4IG1hY3JvLgoKCSogaW5jbHVkZS93aW50eXBlcy5oOiBGcmFuY29pcyBHb3VnZXQgPGZnb3VnZXRAbXVsdGltYW5pYS5jb20+CglBZGRlZCBhIHR5cGVkZWYgZm9yIF9faW50NjQgd2hpY2ggaXMgYSBidWlsdGluIFZpc3VhbCBDKysgdHlwZQoJQWRkZWQgYSB0eXBlZGVmIGZvciBQVUlOVAoKCSogaW5jbHVkZS9vYmpiYXNlLmg6IEZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBtdWx0aW1hbmlhLmNvbT4KCVJFRklJRCB3YXMgbm90IGRlZmluZWQuCgoJKiBjb25maWd1cmUuaW4sIGluY2x1ZGUvYWNjb25maWcuaCwgaW5jbHVkZS9jb25maWcuaC5pbiwgaW5jbHVkZS93aW5zb2NrLmgsIG1pc2Mvd2luc29jay5jLCBjb25maWd1cmU6CglQYXZlbCBSb3NraW4gPHBhdmVsX3Jvc2tpbkBnZW9jaXRpZXMuY29tPgoJY29uZmlndXJlIGZpcnN0IGNoZWNrcyB3aGV0aGVyIGl0IGlzIHBvc3NpYmxlIHRvIGNvbXBpbGUgSVBYIGNvZGUgd2l0aAoJR2xpYmMgaGVhZGVycy4gSWYgaXQgZmFpbHMsIG5leHQgY2hlY2sgZGV0ZXJtaW5lcyB3aGV0aGVyIGRpcmVjdCBpbmNsdXNpb24KCW9mIDxsaW51eC9pcHguaD4gd29ya3MuCgoJKiBpbmNsdWRlL3RjaGFyLmg6IEZyYW5jb2lzIEdvdWdldCA8ZmdvdWdldEBtdWx0aW1hbmlhLmNvbT4KCVByb3ZpZGVzIHRoZSBtYXBwaW5ncy4gTUJDUyBhbmQgVW5pY29kZSBmdW5jdGlvbnMgYXJlIG5vdCBpbXBsZW1lbnRlZC4KCVN0YW5kYXJkIChTQkNTKSBmdW5jdGlvbnMgbWF5IGV4aXN0IG9yIG5vdCwgd2l0aCB0aGUgc2FtZSBvciBhIGRpZmZlcmVudAoJc2VtYW50aWNzLgoKCSogZGxscy9jb21jdGwzMi9pcGFkZHJlc3MuYywgaW5jbHVkZS9jb21tY3RybC5oLCBpbmNsdWRlL2lwYWRkcmVzcy5oOgoJQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KCUlQYWRkcmVzcyBjb21tb24gY29udHJvbCBpbXBsZW1lbnRhdGlvbi4gRmlyc3QgdHJ5OyBuZWVkcyBtb3JlIHdvcmsgdG8KCXJlbW92ZSBib3JpbmcgYnVncy4KCkZyaSBEZWMgMjUgMDg6NTU6MTUgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGRsbHMvc2hlbGwzMi9jb250bWVudS5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jLCBpbmNsdWRlL29sZW9iai5oLCBpbmNsdWRlL3NobG9iai5oOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlZCB0aGUgVEVYVCByZWRlZmluZWQgd2FybmluZ3MuCgoJKiBtc2Rvcy9pbnQxMC5jOiBKb3NlcGggUHJhbmV2aWNoIDxqcHJhbmV2aWNoQGx5Y29zLmNvbT4KCUhvb2sgaW50byB0aGUgKHN0dWJiZWQpIHJlc2l6ZSBjb2RlIGluIG1zZG9zIGludDEwLgoKCSogY29uc29sZS9pbnRlcmZhY2UuYywgaW5jbHVkZS9jb25zb2xlLmgsIGluY2x1ZGUvb3B0aW9ucy5oLCBsb2FkZXIvbWFpbi5jLCBtaXNjL21haW4uYzoKCUpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJQWRkIHN1cHBvcnQgZm9yIHNlbGVjdGlvbiBvZiBjb25zb2xlIG1vZGUgZHJpdmVycyB0byB1c2UgdXNpbmcgdGhlCgktY29uc29sZSBvcHRpb24uIEN1cnJlbnRseSAidHR5IiwgIm5jdXJzZXMiLCBhbmQgInh0ZXJtIiBhcmUKCXN1cHBvcnRlZC4KCUFkZCBzdHVicyBmb3IgcmVzaXppbmcgdGhlIHNjcmVlbiBvbiBtb2RlIGNoYW5nZXMuCgoJKiBpbmNsdWRlL2RkZW1sLmgsIG1pc2MvZGRlbWwuYywgcmVsYXkzMi91c2VyMzIuc3BlYzoKCUplYW4tQ2xhdWRlIENvdGUgPGplYW4tY2xhdWRlQG1hY2FkYW1pYW4uY29tPgoJUGFydGlhbCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGZvbGxvd2luZyBEREUgQVBJczoKCURkZUNtcFN0cmluZ0hhbmRsZXMsIERkZUNyZWF0ZVN0cmluZ0hhbmRsZSwgRGRlRnJlZVN0cmluZ0hhbmRsZSwKCURkZVF1ZXJ5U3RyaW5nLCBEZGVVbmluaXRpYWxpemUuCgpUaHUgRGVjIDI0IDE2OjU5OjE3IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBvbGUvTWFrZWZpbGUuaW4sIG9sZS9wYXJzZWR0LmMsIG9sZS9wYXJzZWR0LmgsIG9sZS92YXJpYW50LmM6CglKZWFuLUNsYXVkZSBDb3RlIDxqZWFuLWNsYXVkZUBtYWNhZGFtaWFuLmNvbT4KCUFkZGVkIFZhckRhdGVGcm9tU3RyIEFQSS4KCgkqIGRsbHMvY29tY3RsMzIvdHJhY2tiYXIuYywgaW5jbHVkZS90cmFja2Jhci5oOgoJQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KCS0gVG9vbHRpcCBzdXBwb3J0CgktIFZlcnRpY2FsIHRyYWNrYmFycyBzdXBwb3J0ZWQgbm93CgktIFRCU19CT1RIIHN1cHBvcnQgKGdvZXMgYWxvbmcgd2l0aCBwYXJ0aWFsIGNsZWFudXAgb2YgZHJhd2luZyBjb2RlKQoJLSBVc2UgQ09NQ1RMMzIgaGVhcCBpbnN0ZWFkIG9mIHN5c3RlbSBoZWFwCgoJKiBncmFwaGljcy9kZHJhdy5jLCBpbmNsdWRlL2RkcmF3Lmg6CglQZXRlciBIdW5uaXNldHQgPGh1bm5pc2VAbm9ydGVsbmV0d29ya3MuY29tPgoJQWRkZWQgYWxsIGNsaXBwZXImM2Qgc3R1YnMuCglTdGFydGluZyBDb2xvcktleSBzdXBwb3J0LgoJRml4ZWQgdHJhY2Ugc3RhdGVtZW50IGluIERpcmVjdERyYXdDcmVhdGUgYXMgZm9ybWF0dGluZyB3YXNuJ3QgY29ycmVjdC4KCUNoYW5nZWQgInJldHVybiAwOyIgdG8gInJldHVybiBERF9PSyIgb3IgInJldHVybiBTX09LIiBhcyBhcHByb3ByaWF0ZS4KCUFkZGVkIFN1cmZhY2VFbnVtIGR3RmxhZ3MuCgoJKiBpbmNsdWRlL2RwbGF5LmgsIG11bHRpbWVkaWEvZHBsYXkuYzoKCVBldGVyIEh1bm5pc2V0dCA8aHVubmlzZUBub3J0ZWxuZXR3b3Jrcy5jb20+CglBZGRlZCBtYWNyb3MgdG8gaGVhZGVyIGZpbGUgZm9yIGVhc2llciBmdW5jdGlvbiBjYWxsaW5nLgoJQ2hhbmdlZCBpbXBsZW1lbnRhdGlvbiBhIGxpdHRsZSBiaXQuCglBZGRlZCBzdHVicyBmb3IgZHBsYXkzLiBTdGlsbCBuZWVkIHRvIGJyZWFrIGludG8gQSBhbmQgVyB2ZXJzaW9ucy4KCgkqIHdpbjMyL2ZpbGUuYzogUGV0ZXIgSHVubmlzZXR0IDxodW5uaXNlQG5vcnRlbG5ldHdvcmtzLmNvbT4KCUNyZWF0ZUZpbGUzMkEgd2FzIG9ubHkgYWxsb3dpbmcgY29uc29sZSBvcGVucyBvbiBDT05JTiQvT1VUJC4gVGhpcwoJaGFzIGJlZW4gY2hhbmdlZCB0byBoYXZlIGEgY2FzZSBpbnNlbnNpdGl2ZSBjb21wYXJlLgoKCSogY29udHJvbHMvbGlzdGJveC5jOiBHZXJhcmQgUGF0ZWwgPGcucGF0ZWxAd2FuYWRvby5mcj4KCURvbid0IHNlbmQgT0RBX0VOVElSRSBmb3IgZW1wdHkgbGlzdGJveGVzIChMSVNUQk9YX1BhaW50KS4KCgkqIGluY2x1ZGUvd2luYmFzZS5oLCByZWxheTMyL2tlcm5lbDMyLnNwZWMsIHdpbjMyL2tlcm5lbDMyLmM6CglKZWFuLUNsYXVkZSBDb3RlIDxqZWFuLWNsYXVkZUBtYWNhZGFtaWFuLmNvbT4KCUltcGxlbWVudGVkIHRoZSBHZXRCaW5hcnlUeXBlIEFQSSBmdW5jdGlvbi4KCgkqIGxvYWRlci9kb3MvZG9zbW9kLmMsIGxvYWRlci9kb3MvZG9zbW9kLmgsIGxvYWRlci9kb3MvZG9zdm0uYywgbG9hZGVyL2Rvcy9tb2R1bGUuYzoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJQWRkZWQgc29tZSBuZXcgZG9zbW9kIGNvbW11bmljYXRpb24gcG9zc2liaWxpdGllcywgaW5jbHVkaW5nCglhY3RpdmF0aW5nIGEgZG9zbW9kLXNwZWNpZmljIHNldGl0aW1lcigpLCBhbmQgdGhlIGNhcHR1cmUgb2Ygc29tZQoJY29tbW9uIHNpZ25hbHMsIHdoaWNoIGlzIHJldHVybmVkIHRvIFdpbmUgKHByZXZpb3VzbHkgYSBTSUdJTEwKCXdvdWxkIGp1c3QgY2F1c2UgYSAiZG9zbW9kIHN5bmMgbG9zdCIgd2l0aG91dCBleHBsYW5hdGlvbiwgbm93IGl0CglpbnZva2VzIHRoZSBXaW5lIGRlYnVnZ2VyKS4gSW52b2tlcyBpbnQgMDggdXBvbiByZWNlaXB0IG9mIGRvc21vZAoJU0lHQUxSTSwgdGh1cyBzaW11bGF0aW5nIHRoZSBET1MgdGltZXIuIE1hZGUgRE9TIGludGVycnVwdCBjYWxscwoJYmUgcmVwb3J0ZWQgYnkgLWRlYnVnbXNnICtyZWxheSBpbnN0ZWFkIG9mIC1kZWJ1Z21zZyAraW50LiBBbmQKCWZpeGVkIG5vbi1pMzg2IGNvbXBpbGF0aW9uIG9mIGRvc21vZC4gKEFueXRoaW5nIGVsc2U/ISkKCgkqIGxvYWRlci9tYWluLmMsIHdpbmRvd3Mvd2luLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCURlc2t0b3Agd2luZG93IHF1ZXVlIGhhbmRsaW5nIGFkYXB0ZWQuCgoJKiB3aW5kb3dzL2NsaXBib2FyZC5jLCB3aW5kb3dzL2hvb2suYywgd2luZG93cy90aW1lci5jLCB3aW5kb3dzL3dpbnBvcy5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglRdWV1ZSBoYW5kbGluZyBhZGFwdGVkIHRvIG5ldyBxdWV1ZSByb3V0aW5lcy4KCgkqIHdpbmRvd3MvbWVzc2FnZS5jLCB3aW5kb3dzL3F1ZXVlLmMsIGlmMTYzMi91c2VyLnNwZWMsIGluY2x1ZGUvcXVldWUuaCwgaW5jbHVkZS90YXNrLmg6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGVkIHN0dWIgZm9yIEluaXRUaHJlYWRJbnB1dC4KCVVzZSBHZXRUaHJlYWRRdWV1ZS9HZXRGYXN0UXVldWUgaW5zdGVhZCBvZiBHZXRUYXNrUXVldWUuCgoJKiBsb2FkZXIvdGFzay5jLCBtaXNjZW11L21haW4uYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJVXNlIENhbGxvdXQgdGFibGUgaW5zdGVhZCBvZiBkaXJlY3QgR2V0UHJvY0FkZHJlc3MuCglVc2VyWWllbGQgbW92ZWQgdG8gVVNFUi4KCgkqIGluY2x1ZGUvY2FsbGJhY2suaCwgbWlzYy9jYWxsYmFjay5jLCBpZjE2MzIvdGh1bmsuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQ2FsbG91dCB0YWJsZSAoZm9yIEtFUk5FTC0+VVNFUiBjYWxscykgYWRkZWQuCglDYWxsYmFja3MtPkNhbGxQb3N0QXBwTWVzc2FnZVByb2MgcmVtb3ZlZC4KCgkqIG1pc2MvY2FsbGJhY2suYywgd2luZG93cy94MTFkcnYvZXZlbnQuYywgaW5jbHVkZS9jYWxsYmFjay5oLCBpbmNsdWRlL3F1ZXVlLmgsIGluY2x1ZGUvdGFzay5oLCBsb2FkZXIvdGFzay5jLCBpZjE2MzIvdGh1bmsuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSGFuZGxlIG5vbi1oYXJkd2FyZSBYIGV2ZW50cyBjb3JyZWN0bHkgd2l0aCBuYXRpdmUgVVNFUgoJKHJlbW92ZWQgcmVmZXJlbmNlIHRvIE1FU1NBR0VRVUVVRSBmcm9tIEtFUk5FTCBjb2RlKS4KCUhhbmRsZSBFeHBvc2UgZXZlbnRzIHdpdGggbmF0aXZlIFVTRVIuCgoJKiBtaXNjL2NydGRsbC5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJQmV0dGVyIF91bHRvYSgpLgoKCSogd2luMzIvdGltZS5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJRml4IHNtYWxsIHByb2JsZW0gaW4gR2V0VGltZVpvbmVJbmZvcm1hdGlvbigpLgoKCSogd2luZG93cy94MTFkcnYva2V5Ym9hcmQuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUxvd2VzdCBzY2FuIGNvZGUgc2VlbXMgdG8gYmUgMSwgbm90IHplcm8uCgoJKiBncmFwaGljcy9kZHJhdy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVN0dWJzIGZvciBJRGlyZWN0M0QoMik6OkNyZWF0ZUxpZ2h0IGFuZCBDcmVhdGVEZXZpY2UgdG8gYXZvaWQgY3Jhc2hlcy4KCgkqIGRsbHMvbnRkbGwvcnRsLmMsIHJlbGF5MzIvbnRkbGwuc3BlYywgZGxscy9udGRsbC9udC5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgc3R1YnMuCgoJKiBkbGxzL3NoZWxsMzIvaWNvbmNhY2hlLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUZpeGVzIGNyYXNoIHdoZW4gcnVubmluZyB3aXRob3V0IGV4dGVybmFsIHNoZWxsMzIuZGxsLgoKCSogd2luZG93cy93aW5wcm9jLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTW9yZSBtZXNzYWdlcyBbTEJfKixFTV8qXSB0cmFuc2xhdGVkIDMyQSBmcm9tL3RvIDMyVy4KCgkqIHJlbGF5MzIvdXNlcjMyLnNwZWM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJRGVzdCBidWZmZXIgd2FzIHByaW50ZWQgb3V0IGFzIHN0ci4KCgkqIG1pc2MvdmVyLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJR2V0dGluZyBzdHJpbmdzIHdpdGggVmVyUXVlcnlWYWx1ZTMyVyB3YXMgYnJva2VuLiBDb21wbGV0ZQoJcmVjb25zdHJ1Y3Rpb24gb2YgdGhlIGZ1bmN0aW9uLgoKCSogbWlzYy90b29saGVscC5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUZpeCBudW1iZXIgYW5kIHR5cGUgb2YgYXJncyBpbiBkZWJ1Z2dpbmcgc3RhdGVtZW50cy4KCgkqIG9sZS9zdG9yYWdlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQG11ZC5kZT4KCUlTdG9yYWdlMzIgdnRhYmxlIHdhcyBtaXNzaW5nIDMgc3R1YiBlbnRyaWVzLgoKRnJpIERlYyAxOCAxNzozODozOSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS93aW5nZGkuaCwgb2JqZWN0cy9mb250LmMsIHJlbGF5MzIvZ2RpMzIuc3BlYzoKCURvdWdsYXMgUmlkZ3dheSA8cmlkZ3dheUB3aW5laHEuY29tPgoJRG9jdW1lbnRhdGlvbiBmb3IgVHJhbnNsYXRlQ2hhcnNldEluZm8uCgoJKiBkbGxzL3duYXNwaTMyL3dpbmFzcGkzMi5jLCBpZjE2MzIvd3Byb2NzLnNwZWMsIGRsbHMvd2luYXNwaS93aW5hc3BpMTYuYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCU1ha2UgdGhlIERPU0FTUEkgcGFydCB1c2UgdGhlIGV4Y2VsbGVudCBEUE1JIFJNQ0IgaW1wbGVtZW50YXRpb24gZG9uZQoJYnkgT3ZlIEthYXZlbiwgd2hpY2ggbWFrZXMgdGhlIGNvZGUgX211Y2hfIGNsZWFuZXIuCgoJKiBNYWtlLnJ1bGVzLmluLCBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW46CglUb2RkIFZpZXJsaW5nIDx0dkBwb2JveC5jb20+CglVc2UgLWx3aW5lIGZvciBsaW5raW5nLgoKCSogd2luZG93cy9tZXNzYWdlLmMsIHdpbmRvd3MvcXVldWUuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiBhbHdheXMgY2xlYXIgUVNfLi4uIGZyb20gKmJvdGgqIGNoYW5nZUJpdHMgYW5kIHdhaXRCaXRzLgoJQnVnZml4OiBxdWV1ZS0+aFNlbmRpbmdUYXNrIGlzICpxdWV1ZSogaGFuZGxlLCBub3QgdGFzayBoYW5kbGUuCgoJKiBpZjE2MzIvc3RvcmFnZS5zcGVjLCBpbmNsdWRlL2ludGVyZmFjZXMuaCwgaW5jbHVkZS9vYmpiYXNlLmgsIGluY2x1ZGUvc3RvcmFnZS5oLCBvbGUvaWZzLmMsIG9sZS9zdG9yYWdlLmM6CglGcmFu529pcyBHb3VnZXQgPGdvdWdldEBtZXRhaW50ZWdyYXRpb24ubmV0PgoJRmlyc3Qgc3RlcCB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIGNhbGwgQ09NIGludGVyZmFjZXMgZnJvbSBDKysgY29kZSBpbgoJV2luZWxpYi4KCgkqIGRsbHMvY29tY3RsMzIvdHJlZXZpZXcuYywgaW5jbHVkZS90cmVldmlldy5oOgoJQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KCVByZWxpbWluYXJ5IHRvb2x0aXAgc3VwcG9ydC4KCVdNX1NFVEZPTlQvR0VURk9OVCBhZGRlZC4KCVNvbWUgYnVnIGZpeGVzLgoJVXNlIENPTUNUTDMyIGhlYXAgaW5zdGVhZCBvZiBzeXN0ZW0gaGVhcC4KCgkqIGdyYXBoaWNzL3BhaW50aW5nLmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJSW1wbGVtZW50ZWQgUG9seWxpbmVUby4KCgkqIHJlbGF5MzIvbnRkbGwuc3BlYzogQWRyaWFuIEhhcnZleSA8YWRyaWFuQHNlbGVjdC5jb20uYXU+CglUaGUgWncuLi4gRnVuY3Rpb25zIGluIG50ZGxsLmRsbCBhcmUganVzdCBhbHRlcm5hdGUgZW50cnkKCXBvaW50cyBmb3IgdGhlIHNhbWUgZnVuY3Rpb25zIGFzIHRoZSBOdC4uLiBmdW5jdGlvbiBvZiB0aGUKCXNhbWUgbmFtZXMuICBDaGFuZ2VkIG50ZGxsLnNwZWMgdG8gbWF0Y2ggdGhpcy4KCgkqIGluY2x1ZGUvbW9kdWxlLmgsIGluY2x1ZGUvcGVfaW1hZ2UuaCwgbG9hZGVyL21vZHVsZS5jLCBsb2FkZXIvcGVfaW1hZ2UuYywgcmVsYXkzMi9idWlsdGluMzIuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJUmVvcmdhbml6ZWQgUEUgbW9kdWxlIGxvYWRpbmcgdG8gcHJlcGFyZSBmb3IgZWxmLWRsbCBsb2FkZXIuCglXSU5FX01PRFJFRiBjcmVhdGlvbiBtb3ZlZCB0byBvbmUgY2VudHJhbCBsb2NhdGlvbi4KCUJ1Z2ZpeDogY29ycmVjdGx5IHNlbGVjdCBuYXRpdmUvYnVpbHQtaW4gdmVyc2lvbiBpZiAuRExMCglleHRlbnNpb24gaXMgbWlzc2luZyBpbiBMb2FkTGlicmFyeSBjYWxsLgoKCSogbXVsdGltZWRpYS9tbXN5c3RlbS5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUNoYW5nZWQgZXJyb3IgdmFsdWVzIE1DSV9JTlRFUk5BTCB0byB0aGVpciBjb3JyZWN0IHZhbHVlcy4KCgkqIG11bHRpbWVkaWEvbWNpd2F2ZS5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCVJlbW92ZWQgd2FybmluZy4KCgkqIG11bHRpbWVkaWEvbWNpc3RyaW5nLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJTm8gbG9uZ2VyIHNlbmRpbmcgZGlyZWN0bHkgbWVzc2FnZXMgdG8gRHJpdmVyUHJvYyBidXQgcmF0aGVyIGdvIHRocm91Z2gKCU1DSSBsYXllciAocmVxdWlyZWQgZm9yIG9wZW4vY2xvc2UpLgoKCSogbXVsdGltZWRpYS9tY2ljZGEuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglSZW1vdmVkIGluY29ycmVjdCBwYXRjaCBmb3IgTUNJX09QRU4gYW5jIE1DSV9DTE9TRSBwYXJhbWV0ZXJzICh0aGFua3MgdG8gUm9iZXJ0IFJpZ2dzCglmb3IgcG9pbnRpbmcgb3V0IHRoZSBidWcsIHNlZSB0aGUgZml4IGluIG1jaXN0cmluZy5jKQoJRml4ZWQgTUNJIHNlZWtpbmcgb24gQ0QgYXVkaW8uCgoJKiBpbmNsdWRlL3dpbmVycm9yLmg6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3R1YnMgZm9yIFdhaXROYW1lZFBpcGVbQXxXXS4KCgkqIGRsbHMvc2hlbGwzMi9jbGFzc2VzLmMsIGRsbHMvc2hlbGwzMi9kYXRhb2JqZWN0LmMsIGRsbHMvc2hlbGwzMi9pY29uY2FjaGUuYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5oLCBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmMsIGluY2x1ZGUvc2hlbGwuaCwgcmVsYXkzMi9zaGVsbDMyLnNwZWM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVNtYWxsIGZpeGVzLgoKCSogZGxscy9zaGVsbDMyL3NoZWxsb3JkLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVN0dWIgQ29udHJvbF9GaWxsQ2FjaGVfUnVuRExMLgoKCSogZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTSEdldEZpbGVJbmZvMzJBOiBnZXQgU0hHRklfU1lTSUNPTklOREVYIGltcGxlbWVudGVkLgoKCSogZGxscy9zaGVsbDMyL3BpZGwuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglJTEFwcGVuZCBzZWVtcyB0byB3b3JrIG5vdy4KCgkqIHJlbGF5MzIva2VybmVsMzIuc3BlYywgd2luMzIva2VybmVsMzIuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3R1YnMgZm9yIFdhaXROYW1lZFBpcGVbQXxXXS4KClR1ZSBEZWMgMTUgMTg6MDQ6NTggMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGZpbGVzL2RpcmVjdG9yeS5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUZpeCBHZXRUZW1wUGF0aDMyIGlmIGNvdW50PTAuCgoJKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9jb25maWcuaC5pbiwgaW5jbHVkZS9tdWx0aW1lZGlhLmgsIG11bHRpbWVkaWEvYXVkaW8uYywgbXVsdGltZWRpYS9kc291bmQuYywgbXVsdGltZWRpYS9pbml0LmMsIG11bHRpbWVkaWEvbWNpY2RhLmMsIG11bHRpbWVkaWEvbWNpbWlkaS5jLCBtdWx0aW1lZGlhL21pZGkuYywgbXVsdGltZWRpYS9taXhlci5jLCBtdWx0aW1lZGlhL21tYXV4LmM6CglUb2RkIFZpZXJsaW5nIDx0dkBwb2JveC5jb20+CgktIGFkZCAtbG9zc2F1ZGlvIGlmIG5lZWRlZCwgYW5kIGEgY2hlY2sgZm9yIDxzb3VuZGNhcmQuaD4sIHRvIGNvbmZpZ3VyZS5pbgoJICAocnVuIGF1dG9jb25mIGFmdGVyIHRoaXMpLiAgTm90ZSB0aGF0IHRoZSBjaGVjayBoYXMgYmVlbiBhbHRlcmVkIHRvIGJyZWFrCgkgIG91dCBvZiB0aGUgQUNfQ0hFQ0tfSEVBREVSUyBhZnRlciB0aGUgZmlyc3QgbWF0Y2ggLSB0aGlzIGlzIHNvCgkgIDxzeXMvc291bmRjYXJkLmg+LCBpZiBmb3VuZCBvbiBOZXRCU0QgKGEgYHJlYWwnIE9TUyksIHdpbGwgbm90IGNvbmZsaWN0CgkgIHdpdGggdGhlIGVtdWxhdGVkIG9zc2F1ZGlvLgoJLSBjaGVjayBmb3IgPHNvdW5kY2FyZC5oPiBhbG9uZyB3aXRoIHRoZSBvdGhlciB0d28gaW4gYSBtdXR1YWxseS1leGNsdXNpdmUKCSAgbWFubmVyIGluIHRoZSB2YXJpb3VzICouYyBmaWxlcyB0aGF0IG5lZWQgaXQ7IGNoYW5nZSBpbmNsdWRlIG9mCgkgICJtbXN5c3RlbS5oIiB0byAibXVsdGltZWRpYS5oIiBzbyB0aGlzIGxvZ2ljIGlzIGFsbCBpbiBvbmUgcGxhY2UKCS0gY2hhbmdlIG1jaWNkYS5jIHRvIGFsbG93IGZvciBDRCBhdWRpbyBtYW5pcHVsYXRpb24gb24gTmV0QlNELiAgVGhpcwoJICBpbmNsdWRlczoKCSAgKiBjaGFuZ2luZyBpb2N0bCgpIGNhbGxzIHRvIGJlIE5PTi1TUExJVCB3aXRoIGV4YWN0bHkgMyBhcmdzOyBvbiBOZXRCU0QKCSAgICBvc3NhdWRpbywgaW9jdGwoKSBpcyAjZGVmaW5lZCB0byBiZSBfb3NzX2lvY3RsIGJ5IDxzb3VuZGNhcmQuaD4sIGFuZAoJICAgIG5laXRoZXIgc3BsaXR0aW5nIHdpdGggIy1kaXJlY3RpdmVzIG5vciBhIHR3by1hcmcgaW9jdGwgd29yazsKCSAgKiBjaGFuZ2luZyB0aGUgI2lmIGxvZ2ljIHRvIGFsbG93IGJvdGggRnJlZUJTRCBhbmQgTmV0QlNEIHRvIHNoYXJlIHRoZQoJICAgIGFwcHJvcHJpYXRlIGNvZGUgYmxvY2tzCgktIGJsb2NrIG91dCBNSURJIGNvZGUgZm9yIE5ldEJTRCAoaW5pdC5jKSBhbmQvb3IgbWlzc2luZyBTTkRDVExfTUlESV9JTkZPCgkgIChtaWRpLmMsIG1jaW1pZGkuYykuICBOZXRCU0QncyBPU1MgZW11bGF0aW9uIGRvZXMgbm90ICh5ZXQpIHN1cHBvcnQgTUlESS4KCVRoYW5rcyBnbyB0byBteWNyb2Z0QG5ldGJzZC5vcmcgZm9yIHRoZSA5OSUgYnVsayBvZiB0aGlzIHdvcmsuCgoJKiB0c3gxMS9YMTFfY2FsbHMsIHRzeDExL3RzX3h1dGlsLmMsIHdpbmRvd3MveDExZHJ2L3duZC5jLCBpbmNsdWRlL3RzX3h1dGlsLmg6CglEaXJrIFRoaWVyYmFjaCA8dGhpZXJiYWNoQG1hdGhlbWF0aWsudHUtZGFybXN0YWR0LmRlPgoJU2V0IHRoZSBjbGFzcyBoaW50cyBmb3IgbWFuYWdlZCB3aW5kb3dzLgoKCSogZmlsZXMvZG9zX2ZzLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQnVnZml4OiBHZXRGdWxsUGF0aE5hbWUgc2V0cyBscEZpbGVQYXJ0IG9ubHkgd2hlbiB0aGUgbGFzdCBlbGVtZW50Cglkb2VzIG5vdCBlbmQgd2l0aCAnXCcuCgoJKiB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy93aW4uYywgaW5jbHVkZS9jb21tY3RybC5oLCBpbmNsdWRlL2NvbW1kbGcuaCwgaW5jbHVkZS9kZGVtbC5oLCBpbmNsdWRlL21vdXNlLmgsIGluY2x1ZGUvc2hsb2JqLmgsIGluY2x1ZGUvd2luYmFzZS5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgaW5jbHVkZS93aW5lcnJvci5oLCBpbmNsdWRlL3dpbmdkaS5oLCBpbmNsdWRlL3dpbnR5cGVzLmgsIG1pc2MvZGRlbWwuYywgb2JqZWN0cy9iaXRtYXAuYywgb2JqZWN0cy9icnVzaC5jLCBvYmplY3RzL2RjLmMsIG9iamVjdHMvZm9udC5jLCBvYmplY3RzL2dkaW9iai5jLCByZWxheTMyL2dkaTMyLnNwZWMsIHJlbGF5MzIvdXNlcjMyLnNwZWMsIGNvbnRyb2xzL21lbnUuYywgZGxscy9jb21jdGwzMi9jb21tY3RybC5jLCBncmFwaGljcy9iaXRibHQuYywgZ3JhcGhpY3MvZXNjYXBlLmMsIGdyYXBoaWNzL21ldGFmaWxlZHJ2L2luaXQuYywgZ3JhcGhpY3MvcGFpbnRpbmcuYywgZ3JhcGhpY3MvcGF0aC5jLCBpZjE2MzIvdXNlci5zcGVjOgoJUGF1bCBRdWlubiA8cGF1bHFAQ09SRUwuQ0E+CglMb3RzIG9mIG5ldyBkZWZpbmVzIGFuZCBzdHVicy4KCgkqIE1ha2UucnVsZXMuaW4sIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKCVRvZGQgVmllcmxpbmcgPHR2QHBvYm94LmNvbT4KCVRoZXNlIHBhdGNoZXMgYWRkIHN1cHBvcnQgZm9yIC0tZW5hYmxlLWRsbCBvbiBOZXRCU0QsIGFuZCBtYXkgZXZlbiBkbyBzbyBmb3IKCUZyZWVCU0QgYS5vdXQuICBOb3csIE5ldEJTRCBjYW4gdXNlIGxpYndpbmUgYXMgYSBzaGFyZWQgb2JqZWN0LiAgVGhhbmtzIHRvCglteWNyb2Z0QG5ldGJzZC5vcmcgZm9yIGRvaW5nIHRoaXMgd29yayEKCgkqIHRvb2xzL3dyYy93cml0ZXJlcy5jOiBUb2RkIFZpZXJsaW5nIDx0dkBwb2JveC5jb20+CglHbG9iYWwgY29uc3RydWN0b3JzIHVzaW5nIGAuc2VjdGlvbiAuY3RvcnMnIGFyZSBib2d1cyBmb3IgTmV0QlNEJ3MKCWFzc2VtYmxlci4gVXNlIHRoZSBhcHByb3ByaWF0ZSBgLnN0YWJzJyB3aGVuIG9uIE5ldEJTRC4KCgkqIG9sZS92YXJpYW50LmM6IFRvZGQgVmllcmxpbmcgPHR2QHBvYm94LmNvbT4KCVVuZGVmaW5lZCBDSEFSX01BWCBhbmQgQ0hBUl9NSU4gKCNkZWZpbmVkIGJ5IE5ldEJTRCdzIHN5c3RlbSBoZWFkZXJzKS4KCUZpeGVkIHNvbWUgY29uc3RhbnRzIHRoYXQgYXJlIHRvbyBiaWcgZm9yIGEgcGxhaW4gYGludCcuCgoJKiBvbGUvdmFyaWFudC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNoZWNrIGZvciBNQVhGTE9BVCBpZiBGTFRfTUFYIGlzbid0IHRoZXJlLgoKCSogZ3JhcGhpY3MvcHNkcnYvTWFrZWZpbGUuaW46IFRvZGQgVmllcmxpbmcgPHR2QHBvYm94LmNvbT4KCWdyYXBoaWNzL3BzZHJ2IGZvcmdldHMgdG8gcHVsbCBpbiBARExMRkxBR1NALCBhbmQgc28gaXMgY29tcGlsZWQgbm9uLVBJQyBpZgoJdXNpbmcgLS1lbmFibGUtZGxsLgoKCSogaW5jbHVkZS93aW5nZGkuaCwgaW5jbHVkZS93aW50eXBlcy5oLCBpbmNsdWRlL3dpbnVzZXIuaCwgaW5jbHVkZS93aW5kb3dzLmg6CglWZWtzbGVyIE1pY2hhZWwgPG12ZWtzbGVyQHRlY2h1bml4LnRlY2huaW9uLmFjLmlsPgoJTW92ZSBkZWNsYXJhdGlvbnMgZnJvbSB3aW5kb3dzLmggdG8gd2luZ2RpLmggYW5kIHdpbnVzZXIuaC4KCk1vbiBEZWMgMTQgMTg6MTU6MTEgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHdpbjMyL2NvbnNvbGUuYywgZmlsZXMvTWFrZWZpbGUuaW4sIGZpbGVzL2FzeW5jLmMsIGZpbGVzL2ZpbGUuYywgaW5jbHVkZS9hc3luYy5oLCBpbmNsdWRlL2ZpbGUuaCwgbG9hZGVyL3NpZ25hbC5jLCBtaXNjL3dpbnNvY2tfZG5zLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCU1hZGUgYXN5bmMgSU8gKFNJR0lPKSBzdHVmZiBmcm9tIFdJTlNPQ0sgZ2VuZXJpYyB1c2VhYmxlLgoJQWRkZWQgYXN5bmMgSU8gc3VwcG9ydCB0byBGSUxFIGFuZCBDT05TT0xFIG9iamVjdHMuCgoJKiBtaXNjL3dpbnNvY2suYzogU3RlcGhlbiBMYW5nYXNlayA8dm9ybG9uQGRvZGRzLm5ldD4KCVByZXZlbnQgc2VnZmF1bHQgaW4gc2V0c29ja29wdCB3aGVuIG9wdG5hbWUgaXMgU09fTElOR0VSIGFuZCBvcHR2YWwgaXMKCW51bGwuCgoJKiBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmgsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmMsIHJlbGF5MzIvc2hlbGwzMi5zcGVjOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTb21lIGNsZWFudXAuCgoJKiBkbGxzL3NoZWxsMzIvaWNvbmNhY2hlLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVNITWFwUElETFRvU3lzdGVtSW1hZ2VMaXN0SW5kZXggdHJ5J3MgdG8gZGV0ZXJtaW5lIGFuZCBsb2FkIHRoZSBleGFjdAoJaWNvbiBmb3IgZmlsZXMgKGJ5IHR5cGUpIG5vdy4KCgkqIGRsbHMvc2hlbGwzMi9jbGFzc2VzLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IEhDUl9HZXREZWZhdWx0SWNvbiAoaW50ZXJuYWwpLgoKCSogaW5jbHVkZS9kb3NleGUuaCwgbG9hZGVyL2Rvcy9kb3N2bS5jLCBsb2FkZXIvZG9zL21vZHVsZS5jLCBtc2Rvcy9kb3NtZW0uYywgbXNkb3MvZHBtaS5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglNb3ZlZCBEUE1JIHdyYXBwZXIgYWxsb2NhdGlvbiBjb2RlIHRvIGRvc21lbS5jIHRvIFJFQUxMWSBtYWtlIHRoZQoJUk1jYWxsIHNob3J0Y3V0cyBpbmRlcGVuZGVudCBvZiBkb3Ntb2QuIFNTIGhhZCBiZWVuIGxlZnQgb3V0IG9mCgl0aGUgUkVBTE1PREVDQUxMIGNvcHkgcm91dGluZXMgZm9yIHNvbWUgcmVhc29uLCBmaXhlZCBub3cuIEFsc28KCWNsZWFuZWQgdXAgYSBmZXcgY29tcGlsZXIgd2FybmluZ3MuCgoJKiBncmFwaGljcy94MTFkcnYveGZvbnQuYzogSWFuIFBpbGNoZXIgPHBpbGNoZXJAY29uY2VudHJpYy5uZXQ+CglBZGRlZCBhYmlsaXR5IHRvIHNwZWNpZnkgWCBmb250cyB1c2VkIGZvciBIZWx2IGFuZCBUbXMgUm1uIHR5cGVmYWNlcwoJd2l0aCBEZWZhdWx0U2VyaWYgYW5kIERlZmF1bHRTYW5zU2VyaWYgSU5JIGtleXMuCgoJKiB0b29scy93cmMvcGFyc2VyLnksIHRvb2xzL3dyYy93cmMuaCwgdG9vbHMvd3JjL3dyaXRlcmVzLmMsIHRvb2xzL3dyYy9DSEFOR0VTOgoJQmVydGhvIFN0dWx0aWVucyA8YmVydGhvQHBhbnRlci5zb2NpLmFhdS5kaz4KCS0gQWRkZWQgYSBnbG9iYWwgbGFiZWwgZm9yIGVsZi1kbGwgbGlua2luZyBhbmQgYSBsb25nIHdpdGggdGhlIHJlc291cmNlCgkgIHNpemUgYW5kIGEgbG9uZyB3aXRoIHRoZSBkaXJlY3Rvcnkgc2l6ZS4KCS0gS2lsbGVkIGFuIGFubm95aW5nIHdhcm5pbmcgc2luY2UgdmVyc2lvbiAxLjAuMCBpbiBwYXJzZXIueSBhYm91dCBhCgkgIHZhciBiZWluZyB1c2VkIGJlZm9yZSBpbml0LgoKCSogaW5jbHVkZS9zaGxvYmouaCwgZGxscy9zaGVsbDMyL3NoZWxsbGluay5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvbGUuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQWRkcyB0aGUgSVBlcnNpc3RGaWxlIEludGVyZmFjZSB0byBJU2hlbGxMaW5rW1ddIGFuZCBnYXZlIGJvdGggb3duCglJQ2xhc3NGYWN0b3J5cy4KCgkqIHdpbjMyL2NvbnNvbGUuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CgkoUmVhZENvbnNvbGUzMkEpOiBzbWFsbCBhbmQgc3R1cGlkIGJ1ZyBmaXhlZAoJKFdyaXRlQ29uc29sZU91dHB1dCk6IGJ1ZyBmaXhlZCAoYXR0cmlidXRlcyBtYXkgY2hhbmdlIHdpdGhpbiBsaW5lcykKCWFuZCBlbmhhbmNlZCBzcGVlZHdpc2UgYnkgdXNpbmcgYnVmZmVyaW5nLgoJKENPTlNPTEVfc3RyaW5nXzJfSVIpOiBlbmhhbmNlZCwgbm93IGdldHMgc2NhbmNvZGVzIGFuZCB2aXJ0dWFsa2V5Y29kZXMKCgkqIG1pc2MvY3J0ZGxsLmMsIHJlbGF5MzIvY3J0ZGxsLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCV91bHRvYSBpbXBsZW1lbnRlZC4KCgkqIGNvbnRyb2xzL3N0YXRpYy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVNtYWxsIGhhY2sgdG8gZ2V0IHJpZCBvZiBhbm5veWluZyBlcnI6cmVzb3VyY2U6IG1lc3NhZ2UgZm9yCglNZXNzYWdlQm94ZXMuCgoJKiByZWxheTMyL2Rzb3VuZC5zcGVjOiBJYW4gU2NobWlkdCA8aXJzbWFuQGlhZy5uZXQ+CglGaXggb2ZmLWJ5LTEgZXJyb3IgaW4gRGlyZWN0U291bmQgb3JkaW5hbHMuIFRoYW5rcyB0byBSb2JlcnQgUmlnZ3MgZm9yCgl0aGUgcG9pbnRlci4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IFN0ZXBoZW4gQ3Jvd2xleSA8Y3Jvd0BkZWJpYW4ub3JnPgoJU2F2ZSB0aGUgb3JpZ2luYWwgdmlkZW8gbW9kZSBiZWZvcmUgZ29pbmcgZnVsbHNjcmVlbiBhbmQgcmVzdG9yZSBpdAoJd2hlbiB0aGUgbGFzdCBEaXJlY3REcmF3X1JlbGVhc2UgaXMgY2FsbGVkLiBBbHNvIGZpeCBhIHByb2JsZW0gd2hlcmUKCXRoZSB2aWV3cG9ydCB3YXNuJ3Qgc2V0IHRvIDAsMC4KCgkqIGNvbnNvbGUveHRlcm0uYzogSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglNYWRlIG1vcmUgY3Jvc3MtcGxhdGZvcm0gYnkgY2hhbmdpbmcgLT5fZmlsZW5vIHRvIGZpbGVubygpLgoKCSogd2luZG93cy93aW4uYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglGaXggdGhlIFotb3JkZXIgb2YgbWF4aW1pemVkL21pbmltaXplZCBjaGlsZCB3aW5kb3dzLgoKCSogZ3JhcGhpY3MveDExZHJ2L3hmb250LmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVhMRkRzIHNob3VsZCBiZSB3ZWxsLWZvcm1lZCAoMTQgaHlwaGVucykgdG8gbWF0Y2ggc2NhbGFibGUgZm9udHMuCglTdG9wIHNsYW50IGZpZWxkIGJlY29taW5nIHdpbGRjYXJkZWQgdG9vIGVhcmx5LgoKCSogd2luZG93cy9mb2N1cy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCShGT0NVU19Td2l0Y2hGb2N1cykgY2hlY2sgZm9yIHBGb2N1c1RvID09IE5VTEwgaW5zdGVhZCBvZiBoRm9jdXNUbz09MC4KCgkqIG9sZS9vbGUybmxzLmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJSGFjayBPTEVfR2V0Rm9ybWF0KiB0byByZXR1cm4gc29tZXRoaW5nIGlmIGRhdGVsZW4gPSAwLgoJUmVtb3ZlIHVubmVjZXNzYXJ5IFdJTkFQSSdzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGcmkgRGVjIDExIDE1OjA0OjExIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpbmNsdWRlL3Byb2Nlc3MuaCwgaW5jbHVkZS90bGhlbHAzMi5oLCBpbmNsdWRlL3Rvb2xoZWxwLmgsIG1pc2MvdG9vbGhlbHAuYywgc2NoZWR1bGVyL2szMm9iai5jLCBzY2hlZHVsZXIvcHJvY2Vzcy5jOgoJUGF0cmljayBTcGlubGVyIDxzcGlubGVyLnBhdHJpY2tAbWF5by5lZHU+CglJbXBsZW1lbnRlZCBDcmVhdGVUb29saGVscDMyU25hcHNob3QsIGluY2x1ZGluZyB0d28gb2YgdGhlIHJvdXRpbmVzCgl1c2luZyBzbmFwc2hvdHMsIFByb2Nlc3MzMkZpcnN0IGFuZCBQcm9jZXNzMzJOZXh0LgoKCSogcmVsYXkzMi9vbGVhdXQzMi5zcGVjLCBpbmNsdWRlL21hcGlkZWZzLmgsIGluY2x1ZGUvb2xlYXV0by5oLCBpbmNsdWRlL3dpbjE2ZHJ2LmgsIGluY2x1ZGUvd2ludHlwZXMuaCwgb2xlL2NvbXBvYmouYywgb2xlL3ZhcmlhbnQuYzoKCUp1c3RpbiBCcmFkZm9yZCA8anVzdGluQHVrYW5zLmVkdT4KCU1vc3Qgb2YgdGhlIGN1cnJlbmN5IHZhcmlhbnQgY29udmVyc2lvbiBmdW5jdGlvbnMgaW1wbGVtZW50ZWQuCglNaW5vciBidWdmaXhlcyBhbmQgaGVhZGVyIHRpZHlpbmcuCgoJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRsbHMvcmFzYXBpMzIvTWFrZWZpbGUuaW4sIGRsbHMvcmFzYXBpMzIvcmFzYXBpLmMsIGluY2x1ZGUvZGVidWcuaCwgaW5jbHVkZS9kZWJ1Z2RlZnMuaCwgaW5jbHVkZS9yYXMuaCwgaW5jbHVkZS93aW50eXBlcy5oLCByZWxheTMyL3Jhc2FwaTMyLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFkZGVkIFJhc0VudW1Db25uZWN0aW9ucyBzdHViLgoKCSogZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5oLCBkbGxzL3NoZWxsMzIvc2hlbGxwYXRoLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUJ1Z2ZpeCBpbiBQYXRoQ29tYmluZTMyW0F8V10uCglWaWV3IG1lbnUgaW4gZXhwbG9yZXIgYW5kIG9uIHJpZ2h0IG1vdXNlIGJ1dHRvbiBpcyB3b3JraW5nIG5vdy4KCgkqIGRsbHMvc2hlbGwzMi9waWRsLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJSW1wbGVtZW50ZWQgIElMR2V0RGlzcGxheU5hbWUuCgoJKiBkbGxzL3NoZWxsMzIvY2xhc3Nlcy5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3RhcnRlZCBpbXBsZW1lbnRhdGlvbiBvZiBTaGVsbEV4ZWN1dGVFeDMyQS4KCVNtYWxsIGNoYW5nZXMuCgoJKiBkbGxzL3NoZWxsMzIvLmN2c2lnbm9yZSwgZGxscy9zaGVsbDMyL01ha2VmaWxlLmluLCBkbGxzL3NoZWxsMzIvc2hyZXMucmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1vdmVkIG1lbnUgcmVzb3VyY2VzIHRvIHJjLWZpbGUuCgoJKiBpbmNsdWRlL3BlX2ltYWdlLmgsIG9sZS9vbGUybmxzLmMsIHdpbjMyL2ZpbGUuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJVHdvIGRlYnVnIG1lc3NhZ2VzIGNsYXJpZmllZCwgb25lIHVzZWxlc3MgcHJvdG90eXBlIHJlbW92ZWQuCgoJKiBpbmNsdWRlL29sZWF1dG8uaCwgb2xlL3ZhcmlhbnQuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJMjk0IG1pc3NpbmcgV0lOQVBJIGFkZGVkLgoKCSogdG9vbHMvdGVzdHJ1bjogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglLaWxsIHN3YXBwZWQgb3V0ICh3aW5lKSBwcm9jZXNzZXMgdG9vIGFuZCB0cnVuY2F0ZSBkaWZmIGFmdGVyIHNvbWUgeHh4CglsaW5lcy4KCgkqIG9sZS9vbGUybmxzLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJRml4ZWQgU2V0TGFzdEVycm9yIHdpdGggd3JvbmcgdmFsdWUuCgoJKiBtaXNjL3ByaW50ZHJ2LmMsIG9iamVjdHMvZW5obWV0YWZpbGUuYywgZ3JhcGhpY3MvcGFpbnRpbmcuYywgaW5jbHVkZS93aW5kb3dzLmg6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUltcGxlbWVudCBBYm9ydERvYzE2LCBtb3ZlIEFib3J0RG9jMzIgYW5kIFN0YXJ0RG9jMzJXIHRvCgltaXNjL3ByaW50ZHJ2LmMgYW5kIGZpeCBhIGZldyBjb21waWxlIHdhcm5pbmdzLgoKCSogd2luMzIvb3JkaW5hbHMuYywgd2luZG93cy9kcml2ZXIuYywgd2luZG93cy9tc2dib3guYywgd2luZG93cy9tdWx0aW1vbi5jLCB3aW5kb3dzL3VzZXIuYywgZGxscy9jb21jdGwzMi9hbmltYXRlLmMsIGRsbHMvY29tY3RsMzIvY29tYm9leC5jLCBkbGxzL250ZGxsL250LmMsIGlmMTYzMi90eXBlbGliLnNwZWMsIGluY2x1ZGUvZmlsZS5oLCBsb2FkZXIvZG9zL21vZHVsZS5jLCBtc2Rvcy9pbnQyMS5jLCBvbGUvb2xlMm5scy5jLCBvbGUvdHlwZWxpYi5jOgoJQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJRml4ZWQgYSBidW5jaCBvZiBjb21waWxlciB3YXJuaW5ncy4KCgkqIGZpbGVzL2ZpbGUuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCBXaW4zMiBzeW5jaHJvIHRvIEZJTEVzICh1c2VmdWwgb25seSBmb3IgdGVybWluYWwgaGFuZGxlcykuCgpUaHUgRGVjIDEwIDE2OjA0OjUxIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBvYmplY3RzL2JpdG1hcC5jLCBvYmplY3RzL2RjLmMsIG9iamVjdHMvZW5obWV0YWZpbGUuYywgb2JqZWN0cy9mb250LmMsIG9iamVjdHMvbWV0YWZpbGUuYywgcmVsYXkzMi9jb21jdGwzMi5zcGVjLCByZWxheTMyL2dkaTMyLnNwZWMsIHJlbGF5MzIva2VybmVsMzIuc3BlYywgcmVsYXkzMi9tcHIuc3BlYywgcmVsYXkzMi9zaGVsbDMyLnNwZWMsIHJlbGF5MzIvdGFwaTMyLnNwZWMsIHJlbGF5MzIvdXNlcjMyLnNwZWMsIHJlbGF5MzIvd2luc3Bvb2wuc3BlYywgd2luMzIvY29uc29sZS5jLCB3aW4zMi9rZXJuZWwzMi5jLCB3aW4zMi90aW1lLmMsIHdpbmRvd3MvaW5wdXQuYywgd2luZG93cy9tZXNzYWdlLmMsIGdyYXBoaWNzL21ldGFmaWxlZHJ2L2luaXQuYywgaWYxNjMyL2RkZW1sLnNwZWMsIGluY2x1ZGUvY29tbWN0cmwuaCwgaW5jbHVkZS9kZGVtbC5oLCBpbmNsdWRlL3NobG9iai5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgaW5jbHVkZS93aW50eXBlcy5oLCBtZW1vcnkvc3RyaW5nLmMsIG1pc2MvZGRlbWwuYywgbWlzYy9uZXR3b3JrLmMsIG1pc2MvcHJpbnRkcnYuYywgbWlzYy90YXBpMzIuYywgY29udHJvbHMvZWRpdC5jLCBkbGxzL2NvbWN0bDMyL01ha2VmaWxlLmluLCBkbGxzL2NvbWN0bDMyL2NvbWN0bDMydW5kb2MuYywgZGxscy9jb21jdGwzMi9wcm9wc2hlZXQuYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jLCBmaWxlcy9maWxlLmMsIGdyYXBoaWNzL3BhaW50aW5nLmM6CglGcmFuY2lzIEJlYXVkZXQgPGZyYW5jaXNAbWFjYWRhbWlhbi5jb20+CglTeWx2YWluIFN0LUdlcm1haW4gPHN5bHZhaW5AbWFjYWRhbWlhbi5jb20+CglUaHV5IE5ndXllbiA8dGh1eUBtYWNhZGFtaWFuLmNvbT4KCUxvdHMgb2YgbmV3IHN0dWJzLgoKCSogbXNkb3MvdnhkLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJTGV0IHRoZSBTeXN0ZW1fVGltZV9TZWxlY3RvciBjbG9jayB0aWNrLgoKCSogbG9hZGVyL2Rvcy9tb2R1bGUuYywgbWlzY2VtdS9pbnN0ci5jLCBtc2Rvcy9kb3NtZW0uYywgZ3JhcGhpY3MvZGlzcGRpYi5jLCBncmFwaGljcy92Z2EuYywgaW5jbHVkZS9taXNjZW11LmgsIGluY2x1ZGUvdmdhLmg6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFkYXB0ZWQgdG8gQ3JlYXRlU3lzdGVtVGltZXIgaW50ZXJmYWNlIGNoYW5nZS4KCgkqIGlmMTYzMi9zeXN0ZW0uc3BlYywgaWYxNjMyL3RodW5rLmMsIGluY2x1ZGUvY2FsbGJhY2suaCwgaW5jbHVkZS93aW5kb3dzLmgsIG1pc2MvY2FsbGJhY2suYywgbWlzYy9zeXN0ZW0uYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQ2xlYW5lZCB1cCBDcmVhdGVTeXN0ZW1UaW1lciBpbnRlcmZhY2UgZm9yIHVzZSB3aXRoIDMyLWJpdCBjYWxsYmFja3MuCgkoTk9URTogMTYtYml0IGNhbGxiYWNrcyBzdGlsbCBkb24ndCB3b3JrISkKCgkqIHdpbmRvd3MvbWRpLmM6IE5GIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJLSBIYW5kbGUgV01fTURJUkVTVE9SRSBieSBjYWxsaW5nIFdNX1NZU0NPTU1BTkQgZm9yCgl0aGUgY2hpbGQgd2luZG93IHNvIHRoYXQgdGhlIHN5c3RlbSBtZW51IGlzIHNldCBjb3JyZWN0bHkuCgktIEluIE1ESUNhc2NhZGUgYW5kIE1ESVRpbGUgdXNlIFdNX01ESVJFU1RPUkUgbWVzc2FnZQoJdG8gcmVzdG9yZSBtYXhpbWl6ZWQgd2luZG93IHNvIHRoYXQgc3lzdGVtIG1lbnUgaXMKCWhhbmRsZWQgY29ycmVjdGx5LgoKCSogaW5jbHVkZS9vbGVhdXRvLmgsIGluY2x1ZGUvd2luZXJyb3IuaCwgb2xlL01ha2VmaWxlLmluLCBvbGUvdHlwZWxpYi5jLCBvbGUvdmFyaWFudC5jLCByZWxheTMyL29sZWF1dDMyLnNwZWM6CglKZWFuLUNsYXVkZSBDb3RlIDxqZWFuLWNsYXVkZUBtYWNhZGFtaWFuLmNvbT4KCUFkZGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZSBWQVJJQU5UIEFQSXMuCgoJKiBmaWxlcy9kcml2ZS5jOiBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglGaXhlZCBEUklWRV9HZXRGcmVlU3BhY2UgdG8gaGFuZGxlIHNwYWNlID4gNCBHQnl0ZS4KCgkqIGRsbHMvY29tY3RsMzIvdHJlZXZpZXcuYzogQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KCWhhbmRsZSBUVklGX1RFWFQgYnkgVFJFRVZJRVdfU2V0SXRlbSBhY2NvcmRpbmcgdG8gTVMgZG9jdW1lbnRhdGlvbi4KCWJldHRlciBoYW5kbGluZyBvZiBMUFNUUl9URVhUQ0FMTEJBQ0szMkEKCVRSRUVWSUVXX0dldE5leHR8UHJldkxpc3RJdGVtIGRpZG4ndCBkZXNjZW5kIGludG8gdmlzaWJsZSBjaGlsZCBpdGVtcy4KCgkqIGxvYWRlci9wZV9pbWFnZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVdhcm4gaWYgdHdvIC5leGVzIGNvbmZsaWN0IHdpdGggZWFjaCBvdGhlciBhbmQgdGhlIHNlY29uZCBkb2VzIG5vdAoJaGF2ZSByZWxvY2F0aW9uIHJlY29yZHMuCgoJKiBtaXNjL2NvbW1kbGcuYzogVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJRml4ZWQgR2V0RmlsZVRpdGxlMzJBIG5vdCBmaWxsaW5nIHVwIGxwVGl0bGUgaWYgbHBGaWxlIGRpZG4ndAoJY29udGFpbiAnLycsJ1xcJyBvciAnOicuCgoJKiBncmFwaGljcy9kZHJhdy5jOiBTdGVwaGVuIENyb3dsZXkgPGNyb3dAZGViaWFuLm9yZz4KCUZpeGVkIGEgcG90ZW50aWFsIGNyYXNoIGlmIGEgdXNhYmxlIHZpZGVvIG1vZGUgaXMgbm90IGRldGVjdGVkLgoKCSogdG9vbHMvbWFrZV9hdXRob3JzOiBTY3JpcHQgdG8gZ2VuZXJhdGUgYXV0aG9ycyBmaWxlcwoKCSogaW5jbHVkZS9kaW5wdXQuaCwgd2luZG93cy9kaW5wdXQuYzogUm9iZXJ0IFJpZ2dzIDxycmlnZ3NAdGVzc2VyLmNvbT4KCVN0dWJzIGZvciBJRGlyZWN0SW5wdXRFZmZlY3QgYW5kIElEaXJlY3RJbnB1dERldmljZTJBIG1ldGhvZHMsCglhcyB3ZWxsIGFzIEFkZFJlZigpLCBHZXRDYXBhYmlsaXRlcygpLCBFbnVtT2JqZWN0cygpLAoJR2V0UHJvcGVydHkoKSwgR2V0T2JqZWN0SW5mbygpLCBHZXREZXZpY2VJbmZvKCksIEluaXRpYWxpemUoKSwKCWFuZCBSdW5Db250cm9sUGFuZWwoKSBmb3IgSURpcmVjdElucHV0RGV2aWNlLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogUm9iZXJ0IFJpZ2dzIDxycmlnZ3NAdGVzc2VyLmNvbT4KCVNldCB3aW5kb3cgZm9jdXMgaW4gIF9jb21tb25fSURpcmVjdERyYXdfU2V0RGlzcGxheU1vZGUoKS4KCgkqIG11bHRpbWVkaWEvbWNpY2RhLmM6IFJvYmVydCBSaWdncyA8cnJpZ2dzQHRlc3Nlci5jb20+CglBY2NlcHQgTUNJX09QRU4gYW5kIE1DSV9DTE9TRSBtZXNzYWdlcyBpbiBNQ0lDREFVRElPX0RyaXZlclByb2MzMigpLgoKCSogaW5jbHVkZS93aW4uaCwgd2luZG93cy93aW4uYywgd2luZG93cy94MTFkcnYvZXZlbnQuYywgd2luZG93cy94MTFkcnYvd25kLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVJlbW92ZWQgZGVmZXJyZWQgRXhwb3NlIGV2ZW50cyBoYW5kbGluZy4KCgkqIHdpbmRvd3MvZGNlLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJRG9uJ3QgY2xpcCBWaXNSZ24gYWdhaW5zdCBYIGRlc2t0b3AuCgoJKiBsb2FkZXIvbW9kdWxlLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJTG9hZE1vZHVsZTMyL1dpbkV4ZWMzMiBzaG91bGQgcmV0dXJuIDE2LWJpdCBoSW5zdGFuY2UvaFRhc2suCgoJKiBncmFwaGljcy94MTFkcnYveGZvbnQuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJU2FuaXR5IGNoZWNrIG9uIGZvbnQgc2l6ZS4KCgkqIGRsbHMvY29tY3RsMzIvdHJlZXZpZXcuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglNaXNzaW5nIHBhcmVudGhlc2VzIGFkZGVkLgoKV2VkIERlYyAgOSAxNjozNzowNSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogbG9hZGVyL3Rhc2suYywgcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCB3aW4zMi9jb25zb2xlLmMsIGluY2x1ZGUvd2luY29uLmg6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUVuaGFuY2VkIFdpbjMyIENvbnNvbGUgKFhURVJNKQoJLSBpbnB1dGhhbmRsaW5nIGVuaGFuY2VkIChrZXlzIGFuZCBtb3VzZWNsaWNrcykKCS0gd2luMzIgc3luY2hyb25pemF0aW9uIChwYXJ0aWFsKQoJLSBsb3RzIG9mIGVuaGFuY2VtZW50cyB0byBkcmF3aW5nIGZ1bmN0aW9ucwoJLSBzaW1wbGUvY29tcGxleCBjb25zb2xlIChzaW1wbGUtc3RkaW4vc3Rkb3V0IC0+IGNvbXBsZXgteHRlcm0pLgoKCSogY29uc29sZS9NYWtlZmlsZS5pbiwgY29uc29sZS9nZW5lcmljLmMsIGNvbnNvbGUvaW50ZXJmYWNlLmMsIGNvbnNvbGUvbmN1cnNlcy5jLCBjb25zb2xlL3R0eS5jLCBjb25zb2xlL3h0ZXJtLmMsIGluY2x1ZGUvY29uc29sZS5oOgoJSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglBZGQgYSBkcml2ZXIgdG8gb3BlbiB1cCBhIG5ldyB4dGVybSB3aW5kb3cgd2hlbmV2ZXIgY29uc29sZSBvdXRwdXQgaXMKCW5lZWRlZC4gRGVyaXZlZCBmcm9tIGNvbnNvbGUvd2luMzIuYyBidXQgd2UgYXJlIG5vdCB5ZXQgcmVhZHkgdG8gbWVyZ2UKCXRoZSBjb2RlIGNvbXBsZXRlbHkuCgoJKiBncmFwaGljcy94MTFkcnYveGZvbnQuYywgaW5jbHVkZS93aW5kb3dzLmgsIHRvb2xzL2ZudDJiZGYuYzoKCVBhYmxvIFNhcmF0eGFnYSA8c3J0eGdAY2hhbmFlLmFscGhhbmV0LmNoPgoJSW1wcm92ZWQgdGhlIGhhbmRsaW5nIG9mIGZvbnQgZW5jb2RpbmdzLgoKCSogbXNkb3MvZHBtaS5jLCBpbmNsdWRlL21pc2NlbXUuaDogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglJbXBsZW1lbnRlZCBEUE1JIFJNQ0JzIHVzaW5nIHRoZSBET1Mgc3Vic3lzdGVtLCBhbmQgYSBmZXcgb3RoZXIKCWltcHJvdmVtZW50cy4gQWxzbywgc29tZSBzcGVjaWFsLWNhc2VkIHNob3J0Y3V0IHBhdGhzIHdpbGwgYWxsb3cgc29tZQoJY29tbW9uIHJlYWwtbW9kZSBjYWxsL1JNQ0IgY29tYmluYXRpb25zIHRvIHdvcmsgZXZlbiB3aXRob3V0IGNhbGxpbmcgdGhlCglET1Mgc3Vic3lzdGVtLCB0aHVzIGxldHRpbmcgQVBJcyBsaWtlIERPU0FTUEkgd29yayB3aXRob3V0IGFueSBkaXJ0eSBoYWNrcwoJZXZlbiBvbiBwbGF0Zm9ybXMgdGhhdCBjYW5ub3QgdXNlIGRvc21vZC4KCgkqIG11bHRpbWVkaWEvdGltZS5jLCBvbGUvY29tcG9iai5jLCBmaWxlcy9jaGFuZ2UuYywgbG9hZGVyL21vZHVsZS5jLCBtaXNjL2x6ZXhwYW5kLmMsIG1pc2MvbWFpbi5jLCBjb250cm9scy9tZW51LmMsIGNvbnRyb2xzL3Njcm9sbC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglTb21lIHVubmVjZXNzYXJ5ICNpbmNsdWRlIGFuZCBtZXNzYWdlcyByZW1vdmVkLgoKCSogb2xlL29sZTJubHMuYzogVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJU29tZSBzbWFsbCBjb3JyZWN0aW9ucyB0byBFbnVtU3lzdGVtTG9jYWxlczMyQVcKClR1ZSBEZWMgIDggMTU6MDY6MzkgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHRvb2xzL21ha2VfWDExd3JhcHBlcnMsIHRzeDExL3RzX3hmODZ2bW9kZS5jLCBncmFwaGljcy9kZHJhdy5jOgoJVHJpZWQgYW5vdGhlciBrbHVkZ2UgZm9yIHRoZSBYbWQuaCBwcm9ibGVtLgoKCSogdHN4MTEvTWFrZWZpbGUuaW4sIHRzeDExL1gxMV9jYWxscywgdHN4MTEvdHNfeGY4NnZtb2RlLmMsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBncmFwaGljcy9kZHJhdy5jLCBpbmNsdWRlL2FjY29uZmlnLmgsIGluY2x1ZGUvY29uZmlnLmguaW4sIGluY2x1ZGUvdHNfeGY4NnZtb2RlLmgsIHRvb2xzL21ha2VfWDExd3JhcHBlcnM6CglTdGVwaGVuIENyb3dsZXkgPGNyb3dAZGViaWFuLm9yZz4KCUFkZGVkIGZ1bGxzY3JlZW4gREdBIHN1cHBvcnQuCgoJKiBtaXNjL21haW4uYzogUGFibG8gU2FyYXR4YWdhIDxzcnR4Z0BjaGFuYWUuYWxwaGFuZXQuY2g+CglGaXhlZCBkdW1teSBlbnRyaWVzIGluIE1BSU5fUGFyc2VMYW5ndWFnZU9wdGlvbigpLgoKCSogaW5jbHVkZS9tbXN5c3RlbS5oLCBtdWx0aW1lZGlhL21jaWNkYS5jOgoJQnJpYW4gR2Vyc3QgPGJnZXJzdEBxdWFyay52cHBsdXMuY29tPgoJUHJvcGVybHkgaW1wbGVtZW50IE1DSV9DREFfU1RBVFVTX1RZUEVfVFJBQ0suCglGaXggYW4gb2ZmLWJ5LW9uZSBidWcgd2l0aCBNQ0lfU1RBVFVTX0xFTkdUSC4KCgkqIHdpbmRvd3MveDExZHJ2L2V2ZW50LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU3VwZXJmbG91cyBXSU5BUEkgcmVtb3ZlZC4KCgkqIGxvYWRlci9wZV9pbWFnZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVdhcm4gYWJvdXQgaW52YWxpZCBlbnRyeXBvaW50cyAoY3JlYXRlZCBieSB2aXJ1c2VzKSB3aGljaCByZXN1bHQgaW4KCVdpbmUgY3Jhc2hlcy4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQ3JlYXRlIFgxMSBwYWxldHRlIG9uIERpcmVjdERyYXdTdXJmYWNlOjpTZXRQYWxldHRlLCBub3QgYmVmb3JlICh3ZQoJbWlnaHQgbm90IGhhdmUgYW4gWDExIHdpbmRvdyB5ZXQpLgoKCSogbG9hZGVyL21haW4uYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglNb3ZlIFRXRUFLX0luaXQgZnJvbSBVU0VSIHRvIEdESUluaXQuCgoJKiBncmFwaGljcy9wYWludGluZy5jLCBpZjE2MzIvZ2RpLnNwZWMsIGluY2x1ZGUvd2luZG93cy5oLCBtaXNjL3ByaW50ZHJ2LmMsIG1pc2Mvc3Bvb2xlci5jLCByZWxheTMyL2dkaTMyLnNwZWM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUZpeCBmb3IgU2V0QWJvcnRQcm9jMTYsIHN0dWIgZm9yIFNldEFib3J0UHJvYzMyIGFuZCB0aWR5IHVwIHNvbWUgb3RoZXIKCXByaW50aW5nIGZ1bmN0aW9ucy4KCgkqIHdpbmRvd3MvZm9jdXMuYzogSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglGaXggaW5jbHVkZXMuCgoJKiBncmFwaGljcy94MTFkcnYvdGV4dC5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglGaXggWDExRFJWX0V4dFRleHRPdXQgZm9yIHJvdGF0ZWQgdGV4dCBpZiBlaXRoZXIgb2YgbHBEeCwgYnJlYWtFeHRyYQoJb3IgY2hhckV4dHJhIGFyZSBub24temVyby4KCgkqIGluY2x1ZGUvQXR0aWMvZ3JhcGhpY3MuaCwgbWlzYy9zaGVsbC5jLCB3aW5kb3dzL0F0dGljL2dyYXBoaWNzLmMsIHdpbmRvd3MvTWFrZWZpbGUuaW4sIHdpbmRvd3Mvbm9uY2xpZW50LmMsIHdpbmRvd3Mvc2Nyb2xsLmMsIGNvbnRyb2xzL2J1dHRvbi5jLCBjb250cm9scy9jb21iby5jLCBjb250cm9scy9kZXNrdG9wLmMsIGNvbnRyb2xzL2ljb250aXRsZS5jLCBjb250cm9scy9tZW51LmMsIGNvbnRyb2xzL3Njcm9sbC5jLCBkbGxzL2NvbWN0bDMyL3VwZG93bi5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBncmFwaGljcy9tZXRhZmlsZWRydi9ncmFwaGljcy5jLCBncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJUmVwbGFjZSBHUkFQSF8gZnVuY3Rpb25zIHdpdGggV2luIFNESyBlcXVpdmFsZW50cy4KCk1vbiBEZWMgIDcgMTY6MjM6NDIgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGZpbGVzL2Rvc19mcy5jOiBBbGV4YW5kZXIgTGFyc3NvbiA8YWxsYUBseXNhdG9yLmxpdS5zZT4KCVJldmVydGVkIHByZXZpb3VzIHBhdGNoLgoKCSogaW5jbHVkZS9kb3NleGUuaDogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglEb24ndCBkZWZpbmUgTVpfU1VQUE9SVEVEIG9uIG5vbi1pMzg2IHBsYXRmb3Jtcy4KCgkqIGxvYWRlci9kb3MvbW9kdWxlLmMsIG1zZG9zL2RwbWkuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglGaXhlZCBEUE1JX0NhbGxSTVByb2MgKEkgdGhpbmspLgoKCSogbWlzYy9uZXR3b3JrLmMsIHJlbGF5MzIvbXByLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVN0dWIgZm9yIE5QU0dldFByb3ZpZGVySGFuZGxlQS4KCgkqIHdpbmRvd3MveDExZHJ2L2tleWJvYXJkLmM6IEJyaWFuIEdlcnN0IDxiZ2Vyc3RAcXVhcmsudnBwbHVzLmNvbT4KCVRoZSBzY2FuY29kZSBXaW5kb3dzIHNlbmQgZm9yIGV4dGVuZGVkIGtleXMgaXMgdGhlIHNjYW5jb2RlIG9mIHRoZQoJdW5leHRlbmRlZCBlcXVpdmFsZW50IG9mIHRoZSBrZXksIHBsdXMgdGhlIGV4dGVuZGVkIGZsYWcuCgoJKiBkbGxzL3dpbmFzcGkvd2luYXNwaTE2LmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglGaXhlZCBhIHJlYWwgbW9kZSBwcm9ibGVtLgoKCSogbG9hZGVyL25lL21vZHVsZS5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJTkVfTU9EVUxFLnN0YWNrX3NpemUgd2FzIHNldCB0byBhIHJpZGljdWxvdXNseSBzbWFsbCB2YWx1ZSBvZiA1LgoJV2luZG93cyBzZXRzIDB4MTQwMCBpbiBzdWNoIGNhc2VzIGZvciBwcm9ncmFtcy4KCgkqIGNvbnRyb2xzL3N0YXRpYy5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVdlIGRvbid0IHlldCB3YW50IHRoZSBzdGF0aWMgY29udHJvbCB0byBjYWxsIERlc3Ryb3lJY29uLgoKCSogd2luZG93cy9jbGFzcy5jOiBORiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCUFkZGVkIGNhc2UgZm9yIEdDV19BVE9NIGludCBHZXRDbGFzc0xvbmczMkEuCgoJKiBtaXNjL25ldHdvcmsuYywgcmVsYXkzMi9tcHIuc3BlYzogR2FlbCBkZSBDaGFsZW5kYXIgPGdhZWxAbGltc2kuZnI+CglTdHViIGZvciBXTmV0T3BlbkVudW0zMlcuCgoJKiBtdWx0aW1lZGlhL2Rzb3VuZC5jLCByZWxheTMyL2Rzb3VuZC5zcGVjOgoJUm9iZXJ0IFJpZ2dzIDxycmlnZ3NAdGVzc2VyLmNvbT4KCU1vcmUgZ2VuZXJhbCBjb2RlIGNsZWFudXAgZm9yIHJlYWRhYmlsaXR5LgoJQSBmZXcgbW9yZSBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBjaGVja3MuCglSZXR1cm4gRFNfT0sgcmF0aGVyIHRoYW4gMCBpbiBhIG51bWJlciBvZiBmdW5jdGlvbnMuCglGaXhlZCBwcmltYXJ5IGJ1ZmZlciByZWYgY291bnQgYnVnIGluIENyZWF0ZVNvdW5kQnVmZmVyKCkuCglIYW5kbGUgMS0zIGJ5dGUgc291bmQgZnJhZ21lbnRzIHRoYXQgd291bGQgY2F1c2UgYnVmZmVyIG92ZXJydW5zLgoJQ2xlYXIgcHJpbWFyeSBidWZmZXIgd2l0aCBhIG5ldXRyYWwgdmFsdWUgaW5zdGVhZCBvZiBhbHdheXMgMAoJKGJlY2F1c2UgMTI4IGlzIG5ldXRyYWwgZm9yIDgtYml0IHNvdW5kKS4KCUZpeCBidWcgd2l0aCBtaXhpbmcgOC1iaXQgc291bmQgaW50byB0aGUgcHJpbWFyeSBidWZmZXIuCglCcm9rZSBvdXQgdGhlIG1haW4gYmxvY2sgaW4gRFNPVU5EX3RocmVhZCgpIHRvIGFub3RoZXIgZnVuY3Rpb24gZm9yCglyZWFkYWJpbGl0eS4KCUhhbmRsZSAibm8gYXVkaW8iIGFuZCAiYXVkaW8gYnVzeSIgY2FzZXMgcHJvcGVybHkgd2hlbiBpbml0aWFsaXppbmcKCWRzb3VuZC4gUmVuYW1lIERsbENhblVubG9hZE5vdygpIHRvIERTT1VORF9EbGxDYW5VbmxvYWROb3coKS4KCgkqIGRlYnVnZ2VyL2hhc2guYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglNYWRlIHZhcmlhYmxlcyBvcHRpbWl6ZWQgaW50byByZWdpc3RlcnMgYWNjZXNzaWJsZS4KCgkqIHJlbGF5MzIvdXNlcjMyLnNwZWM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglUaGUgc3BlYyBkZWZpbml0aW9uIGZvciBNb25pdG9yRnJvbVdpbmRvdyB3YXMgd3JvbmcuCgoJKiBtc2Rvcy9pbnQyMS5jOiBTdGVmYW4gTGVpY2h0ZXIgPHNsZUBjYW1saW5lLmNvbT4KCUZpbGUgaGFuZGxlIGJ1ZyBmaXguCgoJKiBkb2N1bWVudGF0aW9uL2NvbW1vbl9jb250cm9sczogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIHBhcmFncmFwaCBhYm91dCBkaWZmZXJlbnQgZGxsIHZlcnNpb25zIGFuZCBzdHJ1Y3R1cmUgc2l6ZXMuCgoJKiBpbmNsdWRlL2NvbW1jdHJsLmg6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBtaXNzaW5nIFRPT0xJTkZPIHN0cnVjdHVyZS4KCgkqIG11bHRpbWVkaWEvbW1zeXN0ZW0uYzogQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJRml4ZWQgYSBoZWFwIGJ1Zy4KCgkqIGxvYWRlci90YXNrLmMsIG1lbW9yeS9sb2NhbC5jLCBtZW1vcnkvc2VsZWN0b3IuYywgbWlzYy9jYWxsYmFjay5jLCBtc2Rvcy9kcG1pLmMsIG1zZG9zL2ludDQxLmMsIG1zZG9zL3Z4ZC5jLCBpZjE2MzIva2VybmVsLnNwZWMsIGlmMTYzMi90aHVuay5jLCBpbmNsdWRlL2NhbGxiYWNrLmgsIGluY2x1ZGUvbGR0LmgsIGluY2x1ZGUvd2luZG93cy5oOgoJQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJLSBTZXZlcmFsIGtlcm5lbC5zcGVjIHJldHVybiB0eXBlIG1pc21hdGNoIGZpeGVzCgktIFtHU11ldFNlbGVjdG9yQmFzZSBXaW4zMnMgb2Zmc2V0IHN1cHBvcnQgYnkgVWxyaWNoIFdlaWdhbmQgKHRoYW5rcyB2Lm0uICEhKQoJLSBNb3ZlIEFwcFRvV2luZS9XaW5lVG9BcHAgbWFjcm9zIGFzIFczMlNfQVBQMldJTkUgZXRjLiB0byBsZHQuaAoJLSBMb2NhbE5vdGlmeSgpIGJhc2ljIHN1cHBvcnQKCS0gRml4ZXMgZm9yIGxvY2FsIGhlYXAgaGFuZGxpbmcgd2l0aCBoZWFwIGhhbmRsZXMgY3JlYXRlZCBieSBWaXJ0dWFsKigpCgoJKiBncmFwaGljcy94MTFkcnYveGZvbnQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiAtbWljcm9zb2Z0LXN5bWJvbCBlbmNvZGluZyB3YXMgbm90IHJlY29nbml6ZWQuCgoJKiB3aW5kb3dzL3dpbi5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogV0lOX1Jlc2V0UXVldWVXaW5kb3dzIHdvdWxkIHNraXAgc29tZSB3aW5kb3dzLgoKCSogdG9vbHMvYnVpbGQuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBbGxvdyByZWN1cnNpdmVseSByZWVudGVyaW5nIENBTEwzMl9MYXJnZVN0YWNrLgoKCSogaW5jbHVkZS90dHlkcnYuaCwgd2luZG93cy90dHlkcnYvLmN2c2lnbm9yZSwgd2luZG93cy90dHlkcnYvTWFrZWZpbGUuaW4sIHdpbmRvd3MvdHR5ZHJ2L2NsaXBib2FyZC5jLCB3aW5kb3dzL3R0eWRydi9ldmVudC5jLCB3aW5kb3dzL3R0eWRydi9pbml0LmMsIHdpbmRvd3MvdHR5ZHJ2L2tleWJvYXJkLmMsIHdpbmRvd3MvdHR5ZHJ2L21vdXNlLmMsIHdpbmRvd3MvdHR5ZHJ2L3duZC5jLCBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW46CglQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCUFkZGVkIHRoZSBuZXcgVFRZIGRyaXZlci4KCgkqIGluY2x1ZGUvY2xpcGJvYXJkLmgsIGluY2x1ZGUva2V5Ym9hcmQuaCwgaW5jbHVkZS9tZXNzYWdlLmgsIGluY2x1ZGUvd2luLmgsIGluY2x1ZGUveDExZHJ2LmgsIHdpbmRvd3MvY2xpcGJvYXJkLmMsIHdpbmRvd3MvZGVmd25kLmMsIHdpbmRvd3MvZGlucHV0LmMsIHdpbmRvd3MvZGlzcGxheS5jLCB3aW5kb3dzL2V2ZW50LmMsIHdpbmRvd3MvZm9jdXMuYywgd2luZG93cy9rZXlib2FyZC5jLCB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy9ub25jbGllbnQuYywgd2luZG93cy93aW4uYywgd2luZG93cy93aW5wb3MuYywgd2luZG93cy94MTFkcnYvTWFrZWZpbGUuaW4sIHdpbmRvd3MveDExZHJ2L2NsaXBib2FyZC5jLCB3aW5kb3dzL3gxMWRydi9ldmVudC5jLCB3aW5kb3dzL3gxMWRydi9pbml0LmMsIHdpbmRvd3MveDExZHJ2L2tleWJvYXJkLmMsIHdpbmRvd3MveDExZHJ2L21vdXNlLmMsIHdpbmRvd3MveDExZHJ2L3duZC5jOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglNb3ZlZCBtb3JlIGNvZGUgdG8gdGhlIFgxMSBkcml2ZXIuCgpUaHUgRGVjICAzIDE2OjI5OjU2IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBtc2Rvcy9pbnQxMC5jLCBtc2Rvcy9pbnQxNi5jLCBtc2Rvcy9pbnQyMS5jLCBtc2Rvcy9pbnQyOS5jOgoJSm9zZXBoIFByYW5ldmljaCA8anByYW5ldmljaEBseWNvcy5jb20+CglDYWxsIHRoZSBuZXcgY29uc29sZSBkcml2ZXIgZm9yIHNvbWUgcm91dGluZXMuIFRoaXMgaXMgbm90IGNvbXBsZXRlbHkKCWRvbmUgeWV0IGFuZCBtb3JlIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgoKV2VkIERlYyAgMiAxOTo1ODowOSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogY29uZmlndXJlLmluLCBjb25zb2xlLy5jdnNpZ25vcmUsIGNvbnNvbGUvTWFrZWZpbGUuaW4sIGNvbnNvbGUvZ2VuZXJpYy5jLCBjb25zb2xlL2ludGVyZmFjZS5jLCBjb25zb2xlL25jdXJzZXMuYywgY29uc29sZS90dHkuYywgaW5jbHVkZS9hY2NvbmZpZy5oLCBpbmNsdWRlL2NvbmZpZy5oLmluLCBpbmNsdWRlL2NvbnNvbGUuaCwgaW5jbHVkZS93aW5udC5oLCBsb2FkZXIvbWFpbi5jLCBtaXNjL21haW4uYywgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZToKCUpvc2VwaCBQcmFuZXZpY2ggPGpwcmFuZXZpY2hAbHljb3MuY29tPgoJQWRkZWQgY29uc29sZSBzdXBwb3J0LgoKCSogZ3JhcGhpY3MveDExZHJ2L29lbWJpdG1hcC5jLCBpbmNsdWRlL2JpdG1hcC5oLCBpbmNsdWRlL2dkaS5oLCBpbmNsdWRlL3gxMWRydi5oLCBsb2FkZXIvbWFpbi5jLCBvYmplY3RzL0F0dGljL29lbWJpdG1hcC5jLCBvYmplY3RzL01ha2VmaWxlLmluLCBvYmplY3RzL2JpdG1hcC5jLCBvYmplY3RzL2N1cnNvcmljb24uYywgZ3JhcGhpY3MvbWV0YWZpbGVkcnYvaW5pdC5jLCBncmFwaGljcy9wc2Rydi9pbml0LmMsIGdyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuYywgZ3JhcGhpY3Mvd2luMTZkcnYvcGVuLmMsIGdyYXBoaWNzL3gxMWRydi9NYWtlZmlsZS5pbiwgZ3JhcGhpY3MveDExZHJ2L2luaXQuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJTW92ZSBPRU0gcmVzb3VyY2VzIHRvIHRoZSB4MTFkcnYuCgoJKiBmaWxlcy9kb3NfZnMuYzogQWxleGFuZGVyIExhcnNzb24gPGFsbGFAbHlzYXRvci5saXUuc2U+CglPcGVuaW5nIGEgZmlsZSBpbiBhIGRpcmVjdG9yeSB3aGljaCBkb2Vzbid0IGV4aXN0IHJldHVybnMKCUVSUk9SX0ZJTEVfTk9UX0ZPVU5EIGluc3RlYWQgb2YgRVJST1JfUEFUSF9OT1RfRk9VTkQuCgoJKiBtZW1vcnkvYXRvbS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUhhbmRsZSBhdG9tcyAiIyBub24gbnVtYmVyIiAob3JhY2xlIGNsaWVudCkuCgpUdWUgRGVjICAxIDE2OjIzOjE5IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpZjE2MzIva2VybmVsLnNwZWMsIG1pc2MvZXJyb3IuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJUmVuYW1lZCBLRVJORUwuMzI3IHRvIEhhbmRsZVBhcmFtRXJyb3IgKGFzIGluICdVbmRvYy4gV2luZG93cycpLgoJRml4ZWQgd3Jvbmcgb3JkaW5hbHMvcHJvdG90eXBlIGZvciBNYXBQcm9jZXNzSGFuZGxlL0dldE1vZHVsZUZpbGVOYW1lMzIuCglBZGRlZCBuYW1lcyBmb3Igc29tZSB1bmRvY3VtZW50ZWQgZXhwb3J0cy4KCgkqIG1lbW9yeS9nbG9iYWwuYywgaWYxNjMyL3RodW5rLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGVkIEdsb2JhbENoYW5nZUxvY2tDb3VudCAoS0VSTkVMLjM2NSkuCgoJKiBpZjE2MzIvdG9vbGhlbHAuc3BlYywgaW5jbHVkZS90b29saGVscC5oLCBtZW1vcnkvaGVhcC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRlZCBMb2NhbDMySW5mbywgc3R1YnMgZm9yIExvY2FsMzJGaXJzdC9OZXh0IChLRVJORUwuNDQ0LTQ0NikuCgoJKiBpZjE2MzIvZ2RpLnNwZWMsIG9iamVjdHMvZ2Rpb2JqLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGVkIEdkaUZyZWVSZXNvdXJjZXMgKEdESS42MDkpLgoKCSogaW5jbHVkZS9kc291bmQuaCwgbXVsdGltZWRpYS9kc291bmQuYzoKCVJvYmVydCBSaWdncyA8cnJpZ2dzQHRlc3Nlci5jb20+CglGaXhlZCA4LWJpdCBXQVYgZm9ybWF0IGhhbmRsaW5nIChpdCBpcyB1bnNpZ25lZCBkYXRhKS4KCUZpeGVkIG9mZi1ieS1vbmUgY2hlY2tzIGZvciBidWZmZXIgd3JhcC4KCUluY3JlbWVudCByZWYgY291bnQgZm9yIHByaW1hcnkgYnVmZmVyIGluIENyZWF0ZVNvdW5kQnVmZmVyKCkuCglBZGRlZCBEU0JQTl9PRkZTRVRTVE9QIHN1cHBvcnQgdG8gcG9zaXRpb24gbm90aWZpY2F0aW9uIGNvZGUuCglMb3RzIG9mIG1pbm9yIHBhcmFtZXRlciB2YWxpZGF0aW9uIGNoZWNrcy4KCVN0dWJzIGZvcjogSURpcmVjdFNvdW5kX2luaXRpYWxpemUoKSwgSURpcmVjdFNvdW5kX0NvbXBhY3QoKSwKCWFuZCBJRGlyZWN0U291bmRfR2V0U3BlYWtlckNvbmZpZygpLgoJRml4ZWQgZnJlcSBzaGlmdGluZyB3aXRoIDE2LWJpdCBkYXRhIHByb2JsZW0sIGZpeGVkIDhiaXQ8LT4xNmJpdAoJY29udmVyc2lvbi4KCUxvdHMgb2YgdGhyZWFkIGxvY2tpbmcgZm9yIERpcmVjdFNvdW5kIGJ1ZmZlcnMuCglEZWFsbG9jIHByaW1hcnkgYnVmZmVyIHdoZW4gZHNvdW5kIGlzIGRlYWxsb2NhdGVkLgoKCSogaW5jbHVkZS93aW50eXBlcy5oOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJQWRkZWQgdGhlIFRFWFQoKSBhbmQgTUFLRUxSRVNVTFQoKSBkZWZpbml0aW9ucy4KCgkqIHdpbmRvd3MvcXVldWUuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTbWFsbCBjaGFuZ2UuCgoJKiBNYWtlZmlsZS5pbjogSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgoJUmV2ZXJ0IG1pc2d1aWRlZCBjaGFuZ2UgdG8gaW5zdGFsbF9saWIgdGhhdCBicm9rZSAtZGlzYWJsZS1saWIKCWNvbmZpZ3VyZSBvcHRpb24uCgoJKiBtaXNjL21haW4uYywgaW5jbHVkZS93aW5kb3dzLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBwYXJhbWV0ZXIgU1BJX0dFVERSQUdGVUxMV0lORE9XLgoJT25lIG1pc3NpbmcgYnJlYWsgaW4gU1BJX0dFVERSQUdGVUxMV0lORE9XLgoKCSogZGxscy9zaGVsbDMyL3BpZGwuYywgcmVsYXkzMi9zaGVsbDMyLnNwZWM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBmdW5jdGlvbnMgSUxHbG9iYWxDbG9uZS9JTEdsb2JhbEZyZWUuCgoJKiBkb2N1bWVudGF0aW9uL3ByaW50aW5nOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglBZGQgYSBub3RlIGFib3V0IFdpblByaW50ZXJzLgoKCSogcmVsYXkzMi9udGRsbC5zcGVjLCByZWxheTMyL29sZTMyLnNwZWMsIHJlbGF5MzIvdXNlcjMyLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFkZGVkIHNvbWUgc3R1YnMsIHNvbWUgcHRyLT5zdHIgY29udmVyc2lvbnMuCgoJKiBncmFwaGljcy9kZHJhdy5jLCBpbmNsdWRlL2RkcmF3LmgsIHJlbGF5MzIvZGRyYXcuc3BlYzoKCUxpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJLSBhZGRlZCBkZWZpbml0aW9uIG9mIERpcmVjdERyYXdDcmVhdGVDbGlwcGVyLgoJLSBtb3JlIHZlcnNhdGlsZSBzdXBwb3J0IG9mIHN1cmZhY2VzIC8gYmV0dGVyIHN1cmZhY2UgZGVzY3JpcHRpb24gc3VwcG9ydC4KCgkqIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5oLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgZGxscy9zaGVsbDMyL3NoZWxscGF0aC5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jLCBpbmNsdWRlL3NoZWxsLmgsIHJlbGF5MzIvc2hlbGwzMi5zcGVjOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlZCB3cm9uZyBwYXJhbWV0ZXIgY291bnQgZm9yIFNIQ2hhbmdlTm90aWZ5RGVyZWdpc3RlciwgIFNIRnJlZVVudXNlZExpYnJhcmllcy4KCU5ldyBmdW5jdGlvbnMgUGFyc2VGaWVsZCwgR2V0L1NldEluc3RhbmNlRXhwbG9yZXIoKSwgUGF0aElzVU5DLCBQYXRoSXNSZWxhdGl2ZS4KCVN0dWJzIFNIV2FpdEZvckZpbGVUb09wZW4sIFBhdGhGaW5kT25QYXRoLgoKCSogcmVsYXkzMi91c2VyMzIuc3BlYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTbWFsbCBjaGFuZ2VzIHRvIHByaW50IHRoZSBzdHJpbmdzIGluIHRoZSByZWxheS10cmFjZS4KCgkqIHdpbmRvd3MvY2xhc3MuYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglUaGUgY2xhc3MgbmFtZSBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBnZXRwdHIuCgoJKiBtdWx0aW1lZGlhL21jaW1pZGkuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglGaXhlZCBtZW1vcnkvc3RhdHVzIHJlY292ZXJ5IHdoZW4gZXJyb3Igb2NjdXJlZCBpbiBNSURJX21jaU9wZW4uCglGaXhlZCBzdXBwb3J0IGZvciBSTUlEIGZpbGVzIGluIE1JRElfbWNpT3Blbi4KCUZpeGVkIGJ1ZyBmb3IgcGxheWluZyBNSURJIGZpbGVzIHdpdGggdGVtcG8gY2hhbmdlcy4gU291bmQgb3V0cHV0IGlzCglub3cgY29ycmVjdCwgYnV0IGxlbmd0aCBvZiB0cmFja3MgKGFuZCB0aGVyZWZvcmUgb2Ygd2hvbGUgZmlsZSkgaXMgbm90Cgljb3JyZWN0LgoJQ2hhbmdlZCBlcnJvciB2YWx1ZXMgKElOVEVSTkFMID0+IElOVkFMSURfRklMRSkgd2hlbiBmaWxlIGNhbm5vdCBiZSByZWFkLgoKCSogbXVsdGltZWRpYS9tY2l3YXZlLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJRml4ZWQgbWVtb3J5L3N0YXR1cyByZWNvdmVyeSB3aGVuIGVycm9yIG9jY3VyZWQgaW4gV0FWRV9tY2lPcGVuLgoJQ2hhbmdlZCBlcnJvciB2YWx1ZXMgKElOVEVSTkFMID0+IElOVkFMSURfRklMRSkgd2hlbiBmaWxlIGNhbm5vdAoJYmUgcmVhZC4KCgkqIG11bHRpbWVkaWEvbXN2aWRlby5jLCByZWxheTMyL21zdmZ3MzIuc3BlYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3R1YnMgZm9yIE1DSVduZENyZWF0ZVtBfFddLgoKCSogbWlzYy92ZXIuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglWZXJRdWVyeVZhbHVlLCBidWdmaXg6IHdlIGNhbnQgY29udmVydCBiaW5hcnkgZGF0YSB3aXRoCglIRUFQX3N0cmR1cFd0b0EgKFxWYXJGaWxlSW5mb1xUcmFuc2xhdGlvbikuCgpNb24gTm92IDMwIDE3OjQxOjE3IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiByZWxheTMyL2FkdmFwaTMyLnNwZWMsIHdpbjMyL2FkdmFwaS5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTdHVicyBmb3IgRW51bVNlcnZpY2VTdGF0dXMzMiwgc21hbGwgY2hhbmdlcy4KCgkqIG9iamVjdHMvY3Vyc29yaWNvbi5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUxvYWQgbm93IHRoZSBmaXJzdCBpY29uIGZyb20gdGhlICouYW5pIGZpbGUgaW5zdGVhZCBvZiBjcmFzaGluZy4KCgkqIG1pc2NlbXUvbWFpbi5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUZpeCB3YXJuaW5ncyBpbiBtaXNjZW11L21haW4uYy4KCgkqIGluY2x1ZGUvd2luZG93cy5oOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJLSBhZGRlZCBzb21lIGRlZmluZXMgYXJvdW5kIHRoZSBDb21tUG9ydCAoUFVSR0VfWFhYIGFuZCBNU19YWFhfT04pCgktIGFkZGVkIHRoZSBETEdURU1QTEFURSBhbmQgRExHSVRFTVRFTVBMQVRFIHN0cnVjdHVyZXMKCS0gYWRkZWQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZm9yIFN0YXJ0UGFnZSxFbmRQYWdlLEdldENvbW1NYXNrLAoJCUdldENvbW1Nb2RlbVN0YXR1cyBhbmQgUHVyZ0NvbW0sV2FpdENvbW1FdmVudC4KCgkqIHdpbmRvd3MvZGVmd25kLmM6IFBhdWwgUXVpbm4gPFBhdWxRQGNvcmVsLmNvbT4KCUZpeGVkIGFjdGl2YXRpb24vRm9jdXMgbWVzc2FnZSBvcmRlciBwcm9ibGVtIHdoZW4gY3JlYXRpbmcgYSBuZXcgSFdORC4KCgkqIHdpbmRvd3Mvd2lucG9zLmMsIGlmMTYzMi91c2VyLnNwZWMsIGluY2x1ZGUvd2luZG93cy5oLCByZWxheTMyL3VzZXIzMi5zcGVjOgoJUGF1bCBRdWlubiA8UGF1bFFAY29yZWwuY29tPgoJSW1wbGVtZW50YXRpb24gb2YgQ2hpbGRXaW5kb3dGcm9tUG9pbnRFeCBmdW5jdGlvbnMuCgoJKiBtaXNjL3JlZ2lzdHJ5LmM6IEdhdnJpZWwgU3RhdGUgPGdhdnJpZWxzQGNvcmVsLmNvbT4KCUZpeGVkIHJlZ2lzdHJ5IHF1ZXJ5IGVycm9yIHZhbHVlOiBub3cgcmV0dXJucyBFUlJPUl9GSUxFX05PVF9GT1VORC4KCgkqIG9iamVjdHMvYml0bWFwLmMsIG9iamVjdHMvY3Vyc29yaWNvbi5jLCBvYmplY3RzL2RpYi5jLCBvYmplY3RzL3BhbGV0dGUuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJR2V0U3lzdGVtUGFsZXR0ZUVudHJpZXMgcmV0dXJucyBwYWxldHRlIHNpemUgaWYgZW50cmllcz09TlVMTC4KCVVzZSB0aGlzIGluc3RlYWQgb2YgQ09MT1JfR2V0U3lzdGVtUGFsZXR0ZVNpemUuCgoJKiByZWxheTMyL2Rzb3VuZC5zcGVjLCBtdWx0aW1lZGlhL2Rzb3VuZC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglJbXBsZW1lbnRlZCBjbGFzcyBmYWN0b3J5IGZvciBkc291bmQuCgoJKiByZWxheTMyL2tlcm5lbDMyLnNwZWMsIG1pc2MvY29tbS5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJLSBmaXhlZCBhIG1pbmltYWwgZXJyb3IgaW4gR2V0Q29tbU1hc2sgZGVmaW5pdGlvbi4KCS0gYWRkcyBzdHVicyBmb3IgR2V0Q29tbU1vZGVtU3RhdHVzIGFuZCBXYWl0Q29tbUV2ZW50LgoKCSogaW5jbHVkZS94bWFsbG9jLmgsIGxpYnJhcnkvd2luZXN0dWIuYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUZpeGVzIGZvciBDKysgV2luZWxpYiBjb21waWxhdGlvbi4KCgkqIG9sZS9jb21wb2JqLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQnVnZml4OiBzZWNvbmQgUmVnT3BlbktleSBzaG91bGQgdXNlIENMU0lEa2V5IGluc3RlYWQgb2YgSEtFWV9DTEFTU0VTX1JPT1QuCgpGcmkgTm92IDI3IDE2OjA2OjA4IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBCVUdTLCBkb2N1bWVudGF0aW9uL2J1Z3JlcG9ydHMsIGRvY3VtZW50YXRpb24vZGVidWdnaW5nLCBkb2N1bWVudGF0aW9uL25vLXdpbmRvd3MsIGRvY3VtZW50YXRpb24vd2luZS5tYW46CglKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CglEb2N1bWVudGF0aW9uIHVwZGF0ZXMuCgoJKiBNYWtlZmlsZS5pbjogSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgoJRml4ZWQgJ21ha2UgaW5zdGFsbCcgdG8gcmVhbGx5IGNoZWNrIGZvciBsaWJ3aW5lLmEgYmVmb3JlIGluc3RhbGxpbmcKCWl0LgoKCSogZ3JhcGhpY3MvZGRyYXcuYywgaW5jbHVkZS9vcHRpb25zLmgsIG1pc2MvbWFpbi5jOgoJU3RlcGhlbiBDcm93bGV5IDxjcm93QGRlYmlhbi5vcmc+CglBZGRlZCBhIG5ldyBjbWRsaW5lIHN3aXRjaCB0byBkaXNhYmxlIFhGODYgREdBIEV4dGVuc2lvbnMsIC1ub2RnYS4KCgkqIGZpbGVzL2RyaXZlLmM6IEFuZHJlYXMgTW9ociA8YS5tb2hyQG1haWx0by5kZT4KCUltcHJvdmVkIEdldERpc2tGcmVlU3BhY2UzMkEoKS4KClRodSBOb3YgMjYgMTY6MzI6MDAgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHdpbmRvd3Mvd2luLmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJUmVtb3ZlIGluY2x1ZGVkIGNvbG9yLmguCgoJKiBsb2FkZXIvcGVfaW1hZ2UuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglSZW1vdmUgdW5uZWNlc3NhcnkgY2hlY2sgZm9yIGVudHJ5cG9pbnQgYWRkcmVzcyAodGVzdCBiaW5hcnkgd2FzCglpbmZlY3RlZCBieSBhIHZpcnVzIHdoaWNoIHVzZXMgaW52YWxpZCBQRSBsb2FkaW5nIHN0dWZmKS4KCgkqIGdyYXBoaWNzL3BhaW50aW5nLmMsIHJlbGF5MzIvZ2RpMzIuc3BlYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUFkZGVkIHN0dWJzIGZvciBTdGFydHBhZ2UgYW5kIEVuZFBhZ2UuCgoJKiBpZjE2MzIvdGh1bmsuYywgb2JqZWN0cy9kYy5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglSZW1vdmVkIHNvbWUgdW5uZWNlc3NhcnkgRklYTUUgb3V0cHV0cy4KCgkqIGlmMTYzMi9rZXJuZWwuc3BlYywgbG9hZGVyL3Rhc2suYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgS0VSTkVMLjYwMiBhbmQgc3R1YiBmb3IgS0VSTkVMLjQ5MC4KCgkqIG9sZS9vbGUybmxzLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiBEbyAqbm90KiB6ZXJvIG91dCBvdXRwdXQgYnVmZmVyIGluIEdldE51bWJlckZvcm1hdDMyW0FXXS4KCldlZCBOb3YgMjUgMTg6MTU6NTMgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG9sZS9ubHMvZ3JjLm5scywgb2xlL25scy9za3kubmxzLCBvbGUvbmxzL3RoYS5ubHMsIG9sZS9ubHMvdHJrLm5scywgb2xlL29sZTJubHMuYzoKCVBhYmxvIFNhcmF0eGFnYSA8c3J0eGdAY2hhbmFlLmFscGhhbmV0LmNoPgoJU21hbGwgZml4ZXMuCgoJKiBsb2FkZXIvbmUvcmVzb3VyY2UuYywgaW5jbHVkZS9tb2R1bGUuaCwgbG9hZGVyL3Jlc291cmNlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCU1vdmVkIC4uLlJlc291cmNlMTYgcm91dGluZXMgdG8gbG9hZGVyL3Jlc291cmNlLmMuCglJbXBsZW1lbnRlZCBhY2Nlc3NpbmcgUEUtZmlsZSByZXNvdXJjZXMgd2l0aCAxNi1iaXQgcmVzb3VyY2Ugcm91dGluZXMuCgoJKiBpZjE2MzIva2VybmVsLnNwZWMsIGxvYWRlci9uZS9NYWtlZmlsZS5pbiwgbG9hZGVyL25lL2NvbnZlcnQuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50YXRpb24gb2YgUEUtPk5FIHJlc291cmNlIGNvbnZlcnNpb24gcm91dGluZXMgKEtFUk5FTC42MTUtNjE4KS4KCgkqIGluY2x1ZGUvb2xlYXV0by5oLCBvbGUvb2xlMmRpc3AuYywgcmVsYXkzMi9vbGVhdXQzMi5zcGVjOgoJRnJhbmNpcyBCZWF1ZGV0IDxmcmFuY2lzQG1hY2FkYW1pYW4uY29tPgoJSW1wbGVtZW50ZWQgMyBtZXRob2RzOiBTeXNBbGxvY1N0cmluZ0xlbigpLCBTeXNSZUFsbG9jU3RyaW5nTGVuKCkKCWFuZCBTeXNTdHJpbmdMZW4oKS4gRW5zdXJlIHRoYXQgdGhlIEJTVFIgb2JqZWN0cyB3ZXJlIGFsbG9jYXRlZAoJYWNjb3JkaW5nIHRvIHRoZSBXaW5kb3dzIGRvY3VtZW50YXRpb24uCgoJKiBkbGxzL3NoZWxsMzIvTWFrZWZpbGUuaW4sIGRsbHMvc2hlbGwzMi9waWRsLmMsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIGRsbHMvc2hlbGwzMi9zaGVsbHBhdGguYywgZGxscy9zaGVsbDMyL3NobHZpZXcuYywgaW5jbHVkZS9zaGVsbC5oLCByZWxheTMyL3NoZWxsMzIuc3BlYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTW92ZWQgZXhpc3RpbmcgcGF0aCAtIGZ1bmN0aW9ucyB0byBzaGVsbHBhdGNoLmMuCglOZXc6IFBhdGhSZW1vdmVCbGFua3MzMkF8VywgIFBhdGhNYXRjaFNwZWMzMkF8VywKCVBhdGhTZXREbGdJdGVtUGF0aDMyQXxXLgoKCSogZGxscy9zaGVsbDMyL2ZvbGRlcnMuYywgZGxscy9zaGVsbDMyL3NoZWxsbGluay5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvbGUuYywgaW5jbHVkZS9zaGxvYmouaDoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTW92ZWQgZXhpc3RpbmcgSVNoZWxsTGluayBjbGFzcy4gTmV3IHN0dWJzIGZvciBJU2hlbGxMaW5rVy4KCgkqIGluY2x1ZGUvYml0bWFwLmgsIGluY2x1ZGUvY29sb3IuaCwgaW5jbHVkZS9nZGkuaCwgaW5jbHVkZS94MTFkcnYuaCwgaW5jbHVkZS94MTFmb250LmgsIG1pc2MvbWFpbi5jLCBvYmplY3RzL2JpdG1hcC5jLCBvYmplY3RzL2NvbG9yLmMsIG9iamVjdHMvZGMuYywgb2JqZWN0cy9nZGlvYmouYywgd2luZG93cy9BdHRpYy9ncmFwaGljcy5jLCB3aW5kb3dzL2RjZS5jLCB3aW5kb3dzL2Rpc3BsYXkuYywgd2luZG93cy9ldmVudC5jLCB3aW5kb3dzL2lucHV0LmMsIHdpbmRvd3MvbW91c2UuYywgd2luZG93cy9zY3JvbGwuYywgd2luZG93cy9zeXNtZXRyaWNzLmMsIHdpbmRvd3MvdXNlci5jLCBncmFwaGljcy9kZHJhdy5jLCBncmFwaGljcy9wYWludGluZy5jLCBncmFwaGljcy93aW5nLmMsIGdyYXBoaWNzL3gxMWRydi9iaXRibHQuYywgZ3JhcGhpY3MveDExZHJ2L2JpdG1hcC5jLCBncmFwaGljcy94MTFkcnYvYnJ1c2guYywgZ3JhcGhpY3MveDExZHJ2L2NsaXBwaW5nLmMsIGdyYXBoaWNzL3gxMWRydi9kaWIuYywgZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmMsIGdyYXBoaWNzL3gxMWRydi9pbml0LmMsIGdyYXBoaWNzL3gxMWRydi9wZW4uYywgZ3JhcGhpY3MveDExZHJ2L3RleHQuYywgZ3JhcGhpY3MveDExZHJ2L3hmb250LmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVJlbW92ZSBYX0RDX0lORk8gZnJvbSBEQyBhbmQgbWFrZSBpdCBiZWhhdmUgbGlrZSBhbnkgb3RoZXIgUERFVklDRS4KCgkqIGluY2x1ZGUvbWlzY2VtdS5oLCBtc2Rvcy9kcG1pLmMsIG1zZG9zL2ludDIxLmMsIG1zZG9zL2ludDI1LmMsIG1zZG9zL2ludDI2LmMsIG1zZG9zL2ludDJmLmMsIG1zZG9zL3htcy5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglDaGFuZ2VkIENUWF9TRUdfT0ZGX1RPX0xJTiB0byBhbGxvdyBsaW5lYXIgYWRkcmVzc2VzIGluIDMyLWJpdAoJcmVnaXN0ZXJzICh1c2VkIGJ5IERldmljZUlvQ29udHJvbCkuIEFkYXB0ZWQgYWxsIHVzZXJzLgoKCSogaW5jbHVkZS93aW5pb2N0bC5oLCB3aW4zMi9kZXZpY2UuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgKG1vc3QpIFZXaW4zMi5WeEQgRGV2aWNlSW9Db250cm9sIHJvdXRpbmVzLgoKVHVlIE5vdiAyNCAyMDo0NzoxNyAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS90aHJlYWQuaCwgc2NoZWR1bGVyL3RocmVhZC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IFNldCB0aGUgVEVCRl9XSU4zMiBmbGFnIGluIHRlYi5mbGFncyBmb3IgMzItYml0IHRocmVhZHMuCgoJKiBsb2FkZXIvdGFzay5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogQ2FsbCBJbml0VGhyZWFkSW5wdXQgaW4gR2V0RmFzdFF1ZXVlIHdpdGggY29ycmVjdCBwYXJhbWV0ZXIKCWZvciAzMi1iaXQgcXVldWVzLgoKCSogd2luMzIva2VybmVsMzIuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IFtRRl1UX1RodW5rIHNob3VsZCBjbGVhciBISVdPUkQoRUFYKSBvbiByZXR1cm4uCglCdWdmaXg6IGhhY2sgZm9yIHN0dXBpZCBVU0VSMzIgQ2FsbGJhY2tHbHVlTFMgcm91dGluZSBpbiBDb21tb24zMlRoa0xTLgoKCSogaWYxNjMyL3RodW5rLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiBCYWQganVtcCBnZW5lcmF0ZWQgaW4gVEhVTktfQWxsb2NMU1RodW5rbGV0LgoJQnVnZml4OiBGb3Jnb3QgdG8gY29udmVydCBzZWdwdHIgaW4gQWxsb2NMU1RodW5rbGV0Q2FsbGJhY2tFeC4KCgkqIGdyYXBoaWNzL3gxMWRydi94Zm9udC5jOiBFcmljIFdhcm5rZSA8ZXJpY0Bzbm93bW9vbi5jb20+CglEb24ndCBtYXRjaCBhZ2FpbnN0IFN5bWJvbCBvciBOaWwgZm9udHMuCgoJKiBtZW1vcnkvZ2xvYmFsLmM6IFN0ZXBoZW4gQ3Jvd2xleSA8Y3Jvd0BkZWJpYW4ub3JnPgoJUmV0dXJuIHRoZSAiYnVmZmVycyIgYW5kICJjYWNoZWQiIG1lbW9yeSBhcyBmcmVlIHNpbmNlIGl0IGlzCglkZWFsbG9jYXRlZCB3aGVuIGEgcHJvZ3JhbSBuZWVkcyBpdCBhbnl3YXkuCgoJKiB3aW5kb3dzL2RpYWxvZy5jLCBpbmNsdWRlL3dpbmRvd3MuaDoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQnVnZml4OiBTZXREbGdJdGVtVGV4dDMyIHJldHVybnMgQk9PTCBub3Qgdm9pZC4KCgkqIHJlbGF5MzIvdXNlcjMyLnNwZWMsIHdpbmRvd3MvdXNlci5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgc3R1YnMgR2V0VXNlck9iamVjdEluZm9ybWF0aW9uQXxXLgoKCSogcmVsYXkzMi9yZWxheTM4Ni5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVJlbW92ZWQgbGVmdCBvdmVyICdzaG93JyBhbmQgdXNlbGVzcyBkZWFkYmVlZiBjaGVja2luZyB3aGljaCBkb2Vzbid0Cgl3b3JrLgoKCSogbG9hZGVyL3BlX2ltYWdlLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRqdXN0IGJyb2tlbiBlbnRyeXBvaW50IGFkZHJlc3Nlcy4gKHdpbjk4IG5vdGVwYWQuZXhlKQoKCSogZG9jdW1lbnRhdGlvbi9zdGF0dXMvbXVsdGltZWRpYTogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglVcGRhdGVkIGFjY29yZGluZyB0byBkZXZlbG9wbWVudC4KCgkqIGlmMTYzMi9tbXN5c3RlbS5zcGVjLCByZWxheTMyL3dpbm1tLnNwZWM6CglFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCVNvbWUgbmV3IHN0dWJzIChtaWRpU3RyZWFtWFhYIGZ1bmN0aW9ucywgc29tZSBtY2kgZnVuY3Rpb25zLCBhbmQKCXNvbWUgbW1pbyBmdW5jdGlvbnMpLgoKCSogbXVsdGltZWRpYS9taWRpLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJTW92ZWQgTUNJIHBhcnQgdG8gbWNpbWlkaS5jIDsgYWRkZWQgRHJpdmVyUHJvYy4KCgkqIG11bHRpbWVkaWEvYXVkaW8uYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglNb3ZlZCBNQ0kgcGFydCB0byBtY2l3YXZlLmMgOyBhZGRlZCBzb21lIGVycm9yIGNoZWNraW5nIDsgYWRkZWQKCURyaXZlclByb2MKCgkqIGluY2x1ZGUvZGVidWcuaCwgaW5jbHVkZS9kZWJ1Z2RlZnMuaCwgbXVsdGltZWRpYS9NYWtlZmlsZS5pbjoKCUVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJQWRkZWQgbWNpbWlkaSBhbmQgbWNpd2F2ZS4KCgkqIG11bHRpbWVkaWEvbWNpbWlkaS5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUZpeGVkIGJ1ZyBpbiBNQ0lfSU5GTyBjb21tYW5kIDsgZml4ZWQgcGF1c2UvcmVzdW1lIGNvbW1hbmRzIDsgZml4ZWQKCXNlZWsgY29tbWFuZC4KCgkqIG11bHRpbWVkaWEvbWNpd2F2ZS5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCVN0YXJ0aW5nIHdyaXRpbmcgTUNJIHBhcnQgOyBmaXhlZCBidWcgaW4gTUNJX0lORk8gY29tbWFuZC4KCgkqIG11bHRpbWVkaWEvbW1pby5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCUFkZGVkIHNvbWUgbWlzc2luZyBzdHVicyBpbiAzMiBiaXQgcGFydC4KCgkqIG11bHRpbWVkaWEvbWNpc3RyaW5nLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJTWFkZSB1c2Ugb2YgbmV3IDE2LzMyIE1DSSBtZXNzYWdlIGhhbmRsaW5nIGluIG1tc3lzdGVtLmMuCgoJKiBpbmNsdWRlL21tc3lzdGVtLmgsIGluY2x1ZGUvbXVsdGltZWRpYS5oOgoJRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglBZGRlZCBzb21lIG5ldyBmdW5jdGlvbnMvc3RydWN0dXJlcyBkZWZpbml0aW9ucy4oSSBjb3VsZG4ndCBnZXQgYWxsCgl0aGUgbWFuaWZlc3QgY29uc3RhbnRzIHZhbHVlcyB0aGF0IE1TIHdhcyByZWZlcnJpbmcgdG8gaW4gaXRzIHNwZWNzLi4uCglpZiBzb21lb25lIGhhcyB0aGVtLi4uKQoKCSogbXVsdGltZWRpYS9tY2lhbmltLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJQWRkZWQgc29tZSBlcnJvciBjaGVja2luZyA7IG1hZGUgdXNlIG9mIG5ldyAxNi8zMiBNQ0kgbWVzc2FnZSBoYW5kbGluZwoJaW4gbW1zeXN0ZW0uYyA7IGZpeGVkIGJ1ZyBpbiBNQ0lfSU5GTyBjb21tYW5kLgoKCSogbXVsdGltZWRpYS9tY2ljZGEuYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglBZGRlZCBzb21lIGVycm9yIGNoZWNraW5nIDsgbWFkZSB1c2Ugb2YgbmV3IDE2LzMyIE1DSSBtZXNzYWdlCgloYW5kbGluZyBpbiBtbXN5c3RlbS5jLgoJQWRkZWQgV2luOTUgY29tbWFuZCB0byBoYW5kbGUgY2Qtcm9tIHdpdGggYm90aCBkYXRhIGFuZCBhdWRpbyA7IGZpeGVkCglidWcgaW4gTUNJX0lORk8gY29tbWFuZCA7IHNoYWRvd2luZyBNQ0kgc3RhdHVzIGZvciBkZXZpY2VzIHRoYXQgY2FuJ3QKCWdldCBjdXJyZW50IHN0YXR1cyA7IGZpeGVkIHN0YXR1cyBub3QgYmVpbmcgdXBkYXRlZCBvbiBjZCBjaGFuZ2UuCgoJKiBtdWx0aW1lZGlhL21tc3lzdGVtLmM6IEVyaWMgUG91ZWNoIDxFcmljLlBvdWVjaEB3YW5hZG9vLmZyPgoJRmFjdG9yaXplZCAxNi8zMiBiaXQgTUNJIGZ1bmN0aW9uIGJ5IHVzaW5nICBtZXNzYWdlIG1hcHBpbmcgZnJvbSAxNgoJdG8gMzIgYml0cyA7IGFkZGVkIHNvbWUgbmV3IHByb3RvdHlwZXMgbWNpU2VuZENvbW1hbmQsIG1jaVNlbmRTdHJpbmcsCgltY2koU2V0L0dldClZaWVsZFByb2MgOyBzdGFydGVkIHdyaXRpbmcgbWlkaVN0cmVhbVhYWCBmdW5jdGlvbnMgLSBub3QKCXlldCB3b3JraW5nLiBGaXhlZCBzb21lIGlzc3VlcyByZWdhcmRpbmcgYXN5bmNocm9ub3VzIE1DSSBjb21tYW5kcyA7CglmaXhlZCBNQ0lfU1lTSU5GTyBjb21tYW5kLgoKCSogcmVzb3VyY2VzL3N5c3Jlc19Gci5yYzogRXJpYyBQb3VlY2ggPEVyaWMuUG91ZWNoQHdhbmFkb28uZnI+CglGaXhlZCBzb21lIHF1aXJrcy4KClN1biBOb3YgMjIgMTg6Mjk6NTAgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGRsbHMvc2hlbGwzMi9jb250bWVudS5jLCBkbGxzL3NoZWxsMzIvZGF0YW9iamVjdC5jLCBkbGxzL3NoZWxsMzIvZm9sZGVycy5jLCBkbGxzL3NoZWxsMzIvaWNvbmNhY2hlLmMsIGRsbHMvc2hlbGwzMi9waWRsLmgsIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uaCwgZGxscy9zaGVsbDMyL3NobHZpZXcuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTWFueSBmaXhlcy4KCgkqIGRsbHMvc2hlbGwzMi9waWRsLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IGZ1bmN0aW9uOiBfSUxHZXRFeHRlbnNpb24uCgoJKiBkbGxzL3NoZWxsMzIvTWFrZWZpbGUuaW4sIGRsbHMvc2hlbGwzMi9jbGFzc2VzLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBmaWxlLiBIS0VZX0NMQVNTRVNfUk9PVCBoYW5kbGluZy4KCgkqIGRvY3VtZW50YXRpb24vY29tbW9uX2NvbnRyb2xzOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJVXBkYXRlZC4KCgkqIGRsbHMvY29tY3RsMzIvaGVhZGVyLmMsIGRsbHMvY29tY3RsMzIvc3RhdHVzLmMsIGRsbHMvY29tY3RsMzIvdG9vbGJhci5jLCBpbmNsdWRlL2NvbW1jdHJsLmgsIGluY2x1ZGUvaGVhZGVyLmgsIGluY2x1ZGUvbGlzdHZpZXcuaCwgaW5jbHVkZS9vbGUyLmgsIGluY2x1ZGUvcmViYXIuaCwgaW5jbHVkZS9zdGF0dXMuaCwgaW5jbHVkZS90b29sYmFyLmgsIGluY2x1ZGUvdG9vbHRpcHMuaDoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBVbmljb2RlIHN1cHBvcnQgKGF0IGxlYXN0IHBhcnRpYWxseSkuCgoJKiBvbGUvTWFrZWZpbGUuaW4sIG9sZS9jb21wb2JqLmMsIG9sZS9vbGVvYmouYywgaW5jbHVkZS9vbGVvYmouaCwgaW5jbHVkZS9zaGxvYmouaDoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBJT2xlQWR2aXNlSG9sZXIgaW50ZXJmYWNlIChzdGlsbCBhIGR1bW15KSBhbmQgZml4ZWQKCUNyZWF0ZU9sZUFkdmlzZUhvbGRlcigpLgoKCSogZGxscy9jb21jdGwzMi9jb21tY3RybC5jLCBkbGxzL2NvbWN0bDMyL3Rvb2x0aXBzLmM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgZ2xvYmFsIHN1YmNsYXNzaW5nIGF0b20sIHVzZWQgYnkgdG9vbHRpcHMgYW5kIHVwZG93biAobm90IHlldCkuCgoJKiBkbGxzL2NvbWN0bDMyL3JlYmFyLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglJbXByb3ZlZCBsYXlvdXQgY29kZS4KCgkqIGRsbHMvY29tY3RsMzIvaW1hZ2VsaXN0LmMsIHJlbGF5MzIvY29tY3RsMzIuc3BlYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlZCBJbWFnZUxpc3RfTG9hZEltYWdlKCkuCgoJKiBkbGxzL2NvbWN0bDMyL2NvbWJvZXguYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIENNRU1fU0VUSVRFTTMyQSBhbmQgbWVzc2FnZSBmb3J3YXJkaW5nIHRvIGNvbWJvYm94LgoKCSogb2xlL21vbmlrZXIuYywgcmVsYXkzMi9vbGUzMi5zcGVjOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIHN0dWIgZm9yIENyZWF0ZUl0ZW1Nb25pa2VyKCkuCgoJKiBkbGxzL2NvbWN0bDMyL2NvbWN0bDMydW5kb2MuYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUZpeGVkIHNvbWUgdW5kb2N1bWVudGVkIGZ1bmN0aW9uIG5hbWVzIGFuZCBpbXBsZW1lbnRlZCBEUEFfTWVyZ2UKCXBhcnRpYWxseS4KCgkqIGNvbnRyb2xzL2J1dHRvbi5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJRW5hYmxlZCBkb3VibGUgY2xpY2sgZm9yIGJ1dHRvbnMuCgoJKiBpbmNsdWRlL3dpbmRvd3MuaDogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIGNvbW1hbmQgYW5kIHJldHVybiBjb25zdGFudHMgdXNlZCBieSBXTV9OT1RJRllGT1JNQVQuCgoJKiBvYmplY3RzL2JydXNoLmMsIG9iamVjdHMvZGMuYywgb2JqZWN0cy9nZGlvYmouYywgb2JqZWN0cy9wZW4uYywgd2luZG93cy9BdHRpYy9ncmFwaGljcy5jLCBncmFwaGljcy9wYWludGluZy5jLCBncmFwaGljcy94MTFkcnYvYml0Ymx0LmMsIGdyYXBoaWNzL3gxMWRydi9kaWIuYywgZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmMsIGdyYXBoaWNzL3gxMWRydi90ZXh0LmMsIGluY2x1ZGUvZGMuaCwgaW5jbHVkZS94MTFkcnYuaDoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJTW92ZWQgRENfU2V0dXBHQyBmdW5jdGlvbnMgdG8gZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmMuCgoJKiBpbmNsdWRlL29wdGlvbnMuaCwgbWlzYy9tYWluLmMsIG9sZS9vbGUybmxzLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVNtYWxsIGZpeGVzIHRvIGdldCB0aGUgZGVmYXVsdCBsYW5ndWFnZSB0byBhIHNlbnNpYmxlIHZhbHVlLgoJVGhhbmtzIHRvIFBhYmxvLgoKCSogQU5OT1VOQ0UsIERFVkVMT1BFUlMtSElOVFMsIFJFQURNRSwgZG9jdW1lbnRhdGlvbi9SRUFETUUuZG9jdW1lbnRhdGlvbiwgZG9jdW1lbnRhdGlvbi9ob3ctdG8tcG9ydCwgZG9jdW1lbnRhdGlvbi93aW5lLm1hbiwgZG9jdW1lbnRhdGlvbi93aW5lLnRleGluZm86CglEb3VnbGFzIFJpZGd3YXkgPHJpZGd3YXlAd2luZWhxLmNvbT4KCU1pc2NlbGxhbmVvdXMgc21hbGwgZml4ZXMuCgoJKiBncmFwaGljcy93aW4xNmRydi9wcnRkcnYuYywgaWYxNjMyL2dkaS5zcGVjLCBpbmNsdWRlL3dpbmRvd3MuaCwgb2JqZWN0cy9tZXRhZmlsZS5jLCBvYmplY3RzL3JlZ2lvbi5jLCByZWxheTMyL2dkaTMyLnNwZWM6CglBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglBZGRlZCBXaW4xNiBpbXBsZW1lbnRhdGlvbiBmb3IgR2V0UmVnaW9uRGF0YSgpLgoKCSogb2xlL3R5cGVsaWIuYzogQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgoJRW5oYW5jZWQgT0FCdWlsZFZlcnNpb24oKSB0byByZXR1cm4gZGlmZmVyZW50IHZlcnNpb24gdmFsdWVzIGZvcgoJZGlmZmVyZW50IHdpbnZlcnMuCgoJKiBtc2Rvcy9pbnQyMS5jOiBBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglBZGRlZCBJTlQyMV9QYXJzZUZpbGVOYW1lSW50b0ZDQigpIGFuZCBzb21lIG90aGVyIHRoaW5ncyB0byBnZXQKCUNPTU1BTkQuQ09NIHdvcmtpbmcuCgoJKiByZWxheTMyL2tlcm5lbDMyLnNwZWM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQWRkZWQgbWlzc2luZyBlbnRyeSBmb3IgR2V0TnVtYmVyRm9ybWF0Vy4KCgkqIG9iamVjdHMvcGFsZXR0ZS5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUNoZWNraW5nIGZvciBOVUxMLXBvaW50ZXIuCgoJKiBvbGUvbmxzL2ZyYS5ubHMsIG9sZS9ubHMvZnJiLm5scywgb2xlL25scy9mcmMubmxzLCBvbGUvbmxzL2ZybC5ubHM6CglSb2JlcnQgUG91bGlvdCA8a3J5bm9zQGNsaWMubmV0PgoJQmV0dGVyIE9MRSBzdXBwb3J0IGluIEZyZW5jaCBsYW5ndWFnZXMuCgoJKiBsb2FkZXIvbW9kdWxlLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJSW1wbGVtZW50YXRpb24gb2YgQ3JlYXRlUHJvY2VzczMyVy4KCgkqIHdpbmRvd3MvZXZlbnQuYzogRGF2aWQgTHV5ZXIgPGx1eWVyQHVjcy51d2EuZWR1LmF1PgoJUXVldWluZyBvZiBkZWZlcnJlZCBFeHBvc2UgZXZlbnRzLgoKCSogY29udHJvbHMvbGlzdGJveC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUxCX0dFVFRFWFQ6IEhhbmRsZSBwYXNzZWQgTlVMTCBidWZmZXIuCgoJKiBjb250cm9scy9jb21iby5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUNCX0dFVFRFWFQ6IFVzZSBscEJ1ZmZlciBpbnN0ZWFkIG9mIGxwVGV4dCBmb3IgTEJfR0VUVEVYVDMyLCBoYW5kbGUgMAoJYnl0ZSBOVUxMIGJ1ZmZlci4KCgkqIG9sZS9ubHMvZnJzLm5scywgb2xlL25scy9za3kubmxzLCBvbGUvb2xlMm5scy5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglUdXJuIG1lZ2EgZG91YmxlIHN3aXRjaCBpbnRvIHN0YXRpYyB0YWJsZSAocmVkdWNlcyBjb21waWxlIHRpbWUpLgoKCSogQVVUSE9SUywgaW5jbHVkZS9hdXRob3JzLmg6IEFkZGVkIFJvYmVydCBSaWdncy4KCgkqIGluY2x1ZGUvZDNkLmg6IFJvYmVydCBSaWdncyA8cnJpZ2dzQHRlc3Nlci5jb20+CglpbmNsdWRlIGRkcmF3LmgsIHF1ZXN0aW9uYWJsZSBmaXggZm9yIHF1ZXN0aW9uYWJsZSBzdHJ1Y3QvdW5pb24KCWNvbnN0cnVjdCBpbiBNUydzIEQzRFZFQ1RPUiBkZWZpbml0aW9uLgoKCSogaW5jbHVkZS9kc291bmQuaDogUm9iZXJ0IFJpZ2dzIDxycmlnZ3NAdGVzc2VyLmNvbT4KCU1vcmUgZmxhZ3MgKERpcmVjdFggNS4yKSwgRGlyZWN0U291bmQzRExpc3RlbmVyIGFuZAoJRGlyZWN0U291bmQzREJ1ZmZlciBzdHJ1Y3R1cmVzLCBpbmNsdWRlIHNvbWUgcmVxdWlyZWQgZmlsZXMKCSh3aW5kb3dzLmgsIGNvbXBvYmouaCwgYW5kIGQzZC5oKS4KCgkqIG11bHRpbWVkaWEvZHNvdW5kLmM6IFJvYmVydCBSaWdncyA8cnJpZ2dzQHRlc3Nlci5jb20+CglEaXJlY3RTb3VuZDNETGlzdGVuZXIgYW5kIERpcmVjdFNvdW5kM0RCdWZmZXIgc3R1YnMsIG5ldyBtaXhlciBjb2RlLAoJcHJpbWFyeSBidWZmZXIgaXMgaW1wbGVtZW50ZWQgY2xvc2VyIHRvIHdoYXQgdGhlIFNESyBkb2NzIHNwZWNpZnksCglvdGhlciBTREsgZG9jdW1lbnRlZCBiZWhhdmlvdXIgZW5mb3JjZWQuIENvbXBsZXRlZCB0aGUgZGV2Y2FwcyBsaXN0LgoKCSogbWlzYy9jcnRkbGwuYywgcmVsYXkzMi9jcnRkbGwuc3BlYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IHN0dWJzIHN0cmRhdGUsIHN0cnRpbWUuCgoJKiBtZW1vcnkvc2VsZWN0b3IuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiB0eXBvIGluIFNVbk1hcExTX0lQX0VCUF84IGxlYWQgdG8gc3RhY2sgY29ycnVwdGlvbi4KCgkqIG1pc2MvY29tbS5jOiBDbGlmZiBXcmlnaHQgPGNsaWZmQHNuaXBlNDQ0Lm9yZz4KCUZpeGVkIGEgbWFzayBzZXQsIGFuZCBvdGhlciBwYXJpdHkgc2V0dGluZyBidWdzIGZvciBzZXJpYWwgcG9ydHMuCgoJKiBpbmNsdWRlL3NpZ19jb250ZXh0Lmg6IFZhc3VkZXYgTXVsY2hhbmRhbmkgPHZhc3VAdGVpbC5zb2Z0Lm5ldD4KCUFkZGVkIEJTREkgc2lnY29udGV4dCBkZWZpbml0aW9ucy4KCgkqIHdpbmRvd3MvY2xhc3MuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUZpeGVkIHR5cG8uCgoJKiByZWxheTMyL3JlbGF5Mzg2LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJUmVtb3ZlIG5vdyB1c2VsZXNzIFJFTEFZX1Nob3dEZWJ1Z21zZ3NSZWxheSBjaGVjay4KCgkqIGxvYWRlci9wZV9pbWFnZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCURvIG5vdCByZWxvY2F0ZSB0aGUgcG9pbnRlcnMgaW4gdGhlIElNQUdFX1RIUkVBRF9MT0NBTF9TVE9SQUdFCglkaXJlY3RvcnksIGZvciB0aGV5IHNlZW0gdG8gYmUgcmVsb2NhdGVkIGJ5IHRoZSBzdGFuZGFyZCByZWxvY2F0aW5nCgltZWNoYW5pc20uIChFeHBsaWNpdGx5IGNoZWNrZWQgb25lIHByb2dyYW0gdXNpbmcgaXQpCgoJKiBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgaW5jbHVkZS9zaGVsbC5oOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglQYXRoQWRkQmFja3NobGFzaCwgUGF0aFJlbW92ZUJhY2tzbGFzaDogYXJndW1lbnQgaXMgbm90IGNvbnN0YW50LgoKCSogd2luZG93cy93aW4uYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglDaGVjayB3bmRQdHIgZm9yIE5VTEwuCgoJKiBncmFwaGljcy9kZHJhdy5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUJsdEZhc3Q6IEhvbm9yIGxQaXRjaCwgTG9jay9VbmxvY2sgc3VyZmFjZXMgKHhsaWIgbmVlZHMgdW5sb2NrIHRvIGRyYXcpLgoKCSogbWlzYy9zcG9vbGVyLmMsIG1pc2MvTWFrZWZpbGUuaW4sIG1pc2NlbXUvbWFpbi5jLCBNYWtlZmlsZS5pbiwgZ3JhcGhpY3Mvd2luMTZkcnYvaW5pdC5jLCBsb2FkZXIvbWFpbi5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglUYWtlcyBwcmludCBzcG9vbGVyIGZ1bmN0aW9ucyBvdXQgb2Ygd2luMTZkcnYuCglBbGxvd3MgdGhlIFBvc3RTY3JpcHQgZHJpdmVyIHRvIGdvIGludG8gbGlid2luZS4KCgkqIGlmMTYzMi9nZGkuc3BlYywgb2JqZWN0cy9icnVzaC5jLCBvYmplY3RzL3BhbGV0dGUuYzoKCUlhbiBTY2htaWR0IDxpcnNtYW5AaWFnLm5ldD4KCUFkZGVkIHN0dWJzIGZvciB0d28gdW5kb2N1bWVudGVkIEdESSByb3V0aW5lcywgU2V0TWFnaWNDb2xvcnMgYW5kCglTZXRTb2xpZEJydXNoLiBUaGlzIGFsbG93cyBXaW45OCBuYXRpdmUgVVNFUiB0byBzdGFydCB1cC4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IFN0ZXBoZW4gQ3Jvd2xleSA8Y3Jvd0BkZWJpYW4ub3JnPgoJRml4ZWQgdGhlIERHQSBkZXRlY3Rpb24gY29kZSBpbiBkZHJhdy4gWW91IGRvbid0IG5lZWQgcm9vdCBhY2Nlc3MsCgloYXZpbmcgcit3IGFjY2VzcyB0byAvZGV2L21lbSBpcyBlbm91Z2guCgoJKiBkb2N1bWVudGF0aW9uL3N0YXR1cy9kaXJlY3RkcmF3LCBncmFwaGljcy9kZHJhdy5jLCBncmFwaGljcy93aW5nLmMsIGluY2x1ZGUvZGRyYXcuaDoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRGlyZWN0RHJhdyBzdGF0dXMgdXBkYXRlZC4KCVVzZSBjb29wZXJhdGl2ZSB3aW5kb3cgZm9yIGRyYXdpbmcgaW4geGxpYiBpbXBsZW1lbnRhdGlvbiBpZiBwb3NzaWJsZS4KCVNsaWdodGx5IHJlc3RydWN0dXJlZCBJRGlyZWN0RHJhd1N1cmZhY2U6OkJsdCBzbyBpdCBkb2Vzbid0IGNyYXNoLgoKCSogd2luZG93cy9rZXlib2FyZC5jOiBEYXZpZCBGYXVyZSA8RGF2aWQuRmF1cmVAaW5zYS1seW9uLmZyPgoJTWljcm8gcGF0Y2ggZm9yIEFsdEdyIGtleSBvbiBnZXJtYW4ga2V5Ym9hcmRzLgoKCSogZmlsZXMvZG9zX2ZzLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJRml4ZXMgZXJyb3IgaGFuZGxpbmcgKFNldExhc3RFcnJvcigpIGFuZCByZXR1cm4gdmFsdWUpLgoKCSogb2JqZWN0cy90ZXh0LmMsIGluY2x1ZGUvd2luZG93cy5oOiBHYWVsIGRlIENoYWxlbmRhciA8Z2FlbEBsaW1zaS5mcj4KCVBhcnRpYWxseSBjb21wbGV0ZSBHZXRUZXh0Q2hhcnNldEluZm8gYW5kIGNvcnJlY3RzIHJldHVybiB2YWx1ZXMgZm9yCgl0aGlzIGZhbWlseSBvZiBmdW5jdGlvbnMuCgpTdW4gTm92IDE1IDE4OjEyOjEyIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBvbGUvY29tcG9iai5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUJ1ZyBmaXguCgoJKiBvYmplY3RzL2RpYi5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJRml4ZWQgcmV0cmlldmFsIG9mIGludmFsaWQgcGFsZXR0ZSBkYXRhIGluIEdldERJQml0cygpLgoKCSogd2luZG93cy93aW5wb3MuYzogSm9obiBSaWNoYXJkc29uIDxqcmljaGFyZEB6ZWFsYW5kLm12LmNvbT4KCUFsbG93IFNXUF9ISURFV0lORE9XIHRvIGJlIGNhbGxlZCBvbiB3aW5kb3dzIHRoYXQgYXJlIGFscmVhZHkgaGlkZGVuCgl3aXRob3V0IHVubWFwcGluZyB0aGVtIGFnYWluLgoKCSogd2luZG93cy9zY3JvbGwuYzogUGltIEJvbGxlbiA8cGltQGdpbWxpLmlhZWh2Lm5sPgoJRml4ZWQgc2Nyb2xsIGJ1ZyBpbiBTY3JvbGxXaW5kb3dFeDMyIHdoaWNoIGNhdXNlZCBnYXJiYWdlIG9uIHNjcmVlbgoJb3V0c2lkZSBkZXNrdG9wIHdpbmRvdyB3aXRoIGd0d2luLmV4ZSAoRHV0Y2ggYmFua2luZyBwcm9ncmFtKS4KCgkqIGxvYWRlci9tYWluLmMsIG1lbW9yeS9hdG9tLmMsIG1pc2MvZGRlbWwuYywgd2luZG93cy9jbGFzcy5jLCB3aW5kb3dzL21lc3NhZ2UuYywgaW5jbHVkZS9BdHRpYy9hdG9tLmgsIGluY2x1ZGUvZ2xvYmFsLmg6CglTbWFsbCBhdG9tIGZpeGVzLgoKCSogb2JqZWN0cy9kaWIuYzogRGlyayBUaGllcmJhY2ggPHRoaWVyYmFjaEBtYXRoZW1hdGlrLnR1LWRhcm1zdGFkdC5kZT4KCUZpeGVkIGJ1ZyBpbiBTdHJldGNoRElCaXRzMzIgKHdyb25nIG9yaWdpbikuCgoJKiB3aW5kb3dzL3dpbnByb2MuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTbWFsbCBmaXhlcy4KCgkqIGluY2x1ZGUvZGRyYXcuaCwgaW5jbHVkZS90c194c2htLmgsIHRvb2xzL21ha2VfWDExd3JhcHBlcnMsIHRzeDExL1gxMV9jYWxscywgdHN4MTEvdHNfeHNobS5jLCBncmFwaGljcy9kZHJhdy5jOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglTb21lIGNvcnJlY3Rpb25zIHRvIHRoZSBoYW5kbGluZyBvZiBvZmYtc2NyZWVuIGJ1ZmZlcnMuCglDb3JyZWN0aW9uIHRvIHRoZSBFbnVtRGlzcGxheU1vZGVzIGZ1bmN0aW9uLgoJQWRkZWQgWFNobSBzdXBwb3J0IHRvIFhsaWIgZHJpdmVyLgoJT3BlbiBhIERpcmVjdFggd2luZG93IGV2ZW4gd2hlbiB1c2luZyB0aGUgREdBIGRyaXZlci4KCgkqIGluY2x1ZGUvc2hlbGwuaCwgaW5jbHVkZS9zaGxvYmouaCwgbWlzYy9zaGVsbC5jLCByZWxheTMyL3NoZWxsMzIuc3BlYywgZGxscy9zaGVsbDMyL01ha2VmaWxlLmluLCBkbGxzL3NoZWxsMzIvY29udG1lbnUuYywgZGxscy9zaGVsbDMyL2RhdGFvYmplY3QuYywgZGxscy9zaGVsbDMyL2ZvbGRlcnMuYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmgsIGRsbHMvc2hlbGwzMi9zaGVsbG9sZS5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgZGxscy9zaGVsbDMyL3NobGZvbGRlci5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglDbGVhbnVwLCBzbWFsbCBmaXhlcywgYSBmZXcgbmV3IHN0dWJzLgoKCSogZGxscy9zaGVsbDMyL3NobHZpZXcuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglIYW5kbGluZyBmb3IgbGlzdHZpZXdzdHlsZXMsIHZpZXcgbW9kZSBidXR0b25zIGluIGZpbGVkaWFsb2dzCgllbmFibGVkIGFuZCBoYW5kbGVkLgoJTmV3IGxpc3R2aWV3IGNvbHVtbnMgU2l6ZSwgVHlwZSwgTW9kaWZpZWQgZm9yIHJlcG9ydHZpZXcKCWNyZWF0ZWQgYW5kIGhhbmRsZWQuCgoJKiBkbGxzL3NoZWxsMzIvaWZfbWFjcm9zLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBmaWxlLCB3cmFwcGVyIGZvciBJU2hlbGxCcm93c2VyIGNsYXNzLgoKCSogZGxscy9zaGVsbDMyL2ljb25jYWNoZS5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgZmlsZSwgc29tZSBoZWxwZXIgZnVuY3Rpb25zIGZvciBpY29uIGNhY2hlLgoJSW1wbGVtZW50ZWQgRXh0cmFjdEljb25FeDsgbW92ZWQgU0hNYXBQSURMVG9TeXN0ZW1JbWFnZUxpc3RJbmRleCwKCVNoZWxsX0dldEltYWdlTGlzdCBpbiB0aGlzIGZpbGUuCgoJKiBkbGxzL3NoZWxsMzIvcGlkbC5jLCBkbGxzL3NoZWxsMzIvcGlkbC5oOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglJbXBsZW1lbnRlZDogSUxJc0VxYWwsIElMRmluZENoaWxkLCBfSUxHZXRGaWxlRGF0ZSwgX0lMR2V0RmlsZVNpemUuCgoJKiBsb2FkZXIvbW9kdWxlLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTG9hZExpYnJhcnlFeDogc2hvdyBhIHdhcm5pbmcgd2hlbiBjYWxsZWQgd2l0aCB1bmltcGxlbWVudGVkIHBhcm0uCgoJKiBtaXNjZW11L2luc3RyLmM6IENsZWFuZWQgdXAgYSBiaXQuCgoJKiBtZW1vcnkvc2VsZWN0b3IuYywgbWlzY2VtdS9pbnN0ci5jLCB0b29scy9idWlsZC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglDbGVhbiBpbnZhbGlkIHNlbGVjdG9ycyBvbiB0aGUgcG9wICV4cyBmcm9tIHRoZSBTVEFDS0ZSQU1FIGl0c2VsZgoJaW5zdGVhZCBvZiB1c2luZyBsaW5rZWQgbGlzdCBoYWNrLgoKCSogTWFrZWZpbGUuaW46IFJlbW92ZWQgZ2V0cyBtZXNzYWdlLgoKCSogb2xlL25scy90aGEubmxzOiBEYXZpZCBMdXllciA8bHV5ZXJAdWNzLnV3YS5lZHUuYXU+CglBZGRlZCBUaGFpIG5scy1yZXNvdXJjZXMuCgoJKiBvbGUvbmxzL1JFQURNRSwgb2xlL25scy9jemUubmxzLCBvbGUvbmxzL2VzZS5ubHMsIG9sZS9ubHMvZXNnLm5scywgb2xlL25scy9lc3QubmxzLCBvbGUvbmxzL2V1cS5ubHMsIG9sZS9ubHMvZm9zLm5scywgb2xlL25scy9ocnYubmxzLCBvbGUvbmxzL2h1bi5ubHMsIG9sZS9ubHMvaXNsLm5scywgb2xlL25scy9ub3IubmxzLCBvbGUvbmxzL3Bsay5ubHMsIG9sZS9ubHMvcHRnLm5scywgb2xlL25scy9yb20ubmxzLCBvbGUvbmxzL3Nsdi5ubHMsIG9sZS9ubHMvc3ZlLm5scywgb2xlL29sZTJubHMuYywgaW5jbHVkZS93aW5ubHMuaDoKCVBhYmxvIFNhcmF0eGFnYSA8c3J0eGdAY2hhbmFlLmFscGhhbmV0LmNoPgoJRGlzcGxheSB0aGUgbGFuZ3VhZ2UgaWQgZm9yICJYWFggbm90IHN1cHBvcnRlZCBmb3IgeW91ciBsYW5ndWFnZSIKCW1lc3NhZ2VzLgoJQWRkZWQgYWxsIGxhbmd1YWdlcyBhbmQgc3VibGFuZ3VhZ2VzIGZvciBsYW5ndWFnZXMgc3VwcG9ydGVkIGluCglyZXNvdXJjZXMvc3lzcmVzX1h4LgoKCSogb2xlL29sZTIuYywgcmVsYXkzMi9vbGUzMi5zcGVjOiBHYXZyaWVsIFN0YXRlIDxnYXZyaWVsc0Bjb3JlbC5jb20+CglBZGQgc3R1YnMgZm9yIEdldFJ1bm5pbmdPYmplY3RUYWJsZTMyIGFuZCBPbGVSZWdHZXRVc2VyVHlwZS4KCgkqIG9sZS9tb25pa2VyLmM6IEdhdnJpZWwgU3RhdGUgPGdhdnJpZWxzQGNvcmVsLmNvbT4KCUVuc3VyZSB0aGF0IENyZWF0ZUZpbGVNb25pa2VyIGZ1bmN0aW9ucyBkb24ndCByZXR1cm4gYSBib2d1cyBtb25pa2VyCglvYmplY3Qgb24gZmFpbHVyZS4KCgkqIGluY2x1ZGUvY2xhc3MuaCwgd2luZG93cy9jbGFzcy5jOiBHYXZyaWVsIFN0YXRlIDxnYXZyaWVsc0Bjb3JlbC5jb20+CglBZGRlZCBjb2RlIHRvIG1hbmFnZSBBc2NpaSBhbmQgV2lkZUNoYXIgY2xhc3MgbmFtZXMsIGFuZCB0byByZXR1cm4gdGhlCgluYW1lcyBpbiB0aGUgR2V0Q2xhc3NJbmZvIGZ1bmN0aW9ucy4KCgkqIGluY2x1ZGUvd2luc29jay5oOiBDb25zdGFudGluZSBTYXB1bnR6YWtpcyA8Y3NhcHVudHpAc3RhbmZvcmQuZWR1PgoJRml4IHRvIExpbnV4IElQWCBzbyBjb21waWxlcyBvbiBub24tbGludXggcGxhdGZvcm1zLgoKCSogbWlzYy9tYWluLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJT3duIFgxMSBlcnJvcmhhbmRsZXIgdG8gbG9jYXRlIFgxMSBlcnJvcnMuIFVzZWZ1bCBvbmx5IHdpdGggLXN5bmMuCgpTYXQgTm92IDE0IDE4OjU5OjMwIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBpbmNsdWRlL2NvbG9yLmgsIGluY2x1ZGUvaW1hZ2VobHAuaCwgaW5jbHVkZS9wYWxldHRlLmgsIG1lbW9yeS9nbG9iYWwuYywgbWlzYy9yZWdpc3RyeS5jLCB3aW5kb3dzL2RlZnduZC5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlZCB3YXJuaW5ncywgc29tZSBvbmx5IHZpc2libGUgd2l0aCAtV3N0cmljdC1wcm90b3R5cGVzIG9yIC1wZWRhbnRpYy4KCgkqIGluY2x1ZGUvY3Vyc29yaWNvbi5oLCBpbmNsdWRlL2Rpc3BsYXkuaCwgaW5jbHVkZS9tZXNzYWdlLmgsIG9iamVjdHMvY3Vyc29yaWNvbi5jLCB3aW5kb3dzL2Rpc3BsYXkuYywgd2luZG93cy9tb3VzZS5jLCB3aW5kb3dzL3gxMWRydi9pbml0LmMsIGlmMTYzMi9kaXNwbGF5LnNwZWM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCU1vdmVkIFgxMSBtb3VzZSBjdXJzb3IgaGFuZGxpbmcgdG8gdGhlIERJU1BMQVkgZHJpdmVyLgoKCSogaWYxNjMyL3RodW5rLmMsIGluY2x1ZGUvY2FsbGJhY2suaCwgbG9hZGVyL21haW4uYywgbG9hZGVyL3Rhc2suYywgbWlzYy9jYWxsYmFjay5jLCBtaXNjZW11L21haW4uYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJU29tZSBmaXhlcyB0byBXaW5lIHN0YXJ0dXAvdGVybWluYXRpb24gc2VxdWVuY2Ugd2l0aCBuYXRpdmUgVVNFUi4KCURvIG5vdCBjYWxsIGJ1aWx0LWluIFVTRVIgc2lnbmFsIGhhbmRsZXIgd2hlbiB1c2luZyBuYXRpdmUgVVNFUi4KCgkqIGRlYnVnZ2VyL2JyZWFrLmMsIGluY2x1ZGUvZGVidWdnZXIuaCwgaW5jbHVkZS90YXNrLmg6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogLWRlYnVnIGRpZG4ndCB3b3JrIGFueW1vcmUgYWZ0ZXIgdGhlIGxhc3Qgc3RhcnR1cCBzZXF1ZW5jZSBwYXRjaC4KCgkqIG9sZS9jb21wb2JqLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlZCBsaXN0IGluc2VydGlvbiBidWcgaW4gQ29Mb2FkTGlicmFyeSgpLgoKCSogaWYxNjMyL3dwcm9jcy5zcGVjLCBtc2Rvcy9NYWtlZmlsZS5pbiwgbXNkb3MvaW50MmYuYywgbXNkb3MvaW50NDEuYywgbXNkb3MvdnhkLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFkZGVkIHN0dWJzIGZvciBzZXZlcmFsIFZ4RHMgLyBpbnRlcnJ1cHRzLgoKCSogaWYxNjMyL3RodW5rLmMsIGluY2x1ZGUvY2FsbGJhY2suaCwgbWlzYy9jYWxsYmFjay5jLCBncmFwaGljcy93aW4xNmRydi9pbml0LmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVNob3VsZCBnZXQgd2luMTZkcnYgQWJvcnRQcm9jIHdvcmtpbmcuIEhvcGVmdWxseS4KCgkqIHdpbmRvd3MvaW5wdXQuYywgd2luZG93cy9rZXlib2FyZC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglNb3ZlZCBHZXRLZXlib2FyZExheW91dE5hbWUxNiB0byB3aW5kb3dzL2lucHV0LmMuCgoJKiBpbmNsdWRlL2ltYWdlaGxwLmgsIGluY2x1ZGUvd2lubnQuaCwgaW5jbHVkZS93aW50eXBlcy5oOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglNb3ZlZCBzb21lIGRlY2xhcmF0aW9ucyBmcm9tIGltYWdlaGxwLmggdG8gY29tbW9uIGluY2x1ZGUgZmlsZXMuCgoJKiByZWxheTMyL2tlcm5lbDMyLnNwZWMsIHdpbjMyL3RocmVhZC5jOgoJUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUFkZGVkIGltcGxlbWVudGF0aW9ucyBmb3IgSW50ZXJsb2NrZWRFeGNoYW5nZUFkZCgpIGFuZAoJSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UoKS4KCgkqIHdpbjMyL2NvbnNvbGUuYywgb2JqZWN0cy9kaWIuYywgb2JqZWN0cy9lbmhtZXRhZmlsZS5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglGaXhlcyBhIGZldyBvZiB0aGUgbWFueSBjb21waWxlciB3YXJuaW5ncy4KCgkqIG1pc2NlbXUvaW5zdHIuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglFbXVsYXRlICJtb3YgY3I0LGVheCIgKHRvbWJyYWlkZXIgMyBkZW1vKS4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRG8gbm90IGVudW1lcmF0ZSBEM0QgZGV2aWNlcyB3ZSBjYW4ndCBoYW5kbGUgYW55d2F5LgoJUmV0dXJuIGJpdG1hc2tzIGZvciBoaS90cnVlY29sb3IgZGVwdGhzIGluIEVudW1EaXNwbGF5TW9kZXMuCgoJKiBpZjE2MzIvc25vb3AuYywgaW5jbHVkZS9zbm9vcC5oLCByZWxheTMyL2J1aWx0aW4zMi5jLCByZWxheTMyL3Nub29wLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVNwZWVkIHVwIHJlbGF5MzIsIHNub29wMTYgYW5kIHNub29wMzIgaW5jbHVkZS9leGNsdWRlcyBieSBkb2luZyB0aGVtCglqdXN0IG9uY2UgYXQgY3JlYXRpb24gdGltZS4KCgkqIHJlbGF5MzIvb2xlMzIuc3BlYywgb2xlL2NvbXBvYmouYywgb2xlL29sZTIuYzoKCVBhdmVsIFJvc2tpbiA8cGF2ZWxfcm9za2luQGdlb2NpdGllcy5jb20+CglBZGRlZCBzdHVicyBmb3IgQ29SZXZva2VDbGFzc09iamVjdCBhbmQgT2xlU2V0Q2xpcGJvYXJkLgoKCSogd2luZG93cy93aW4uYzogUGVyIMVuZ3N0cvZtIDxwYW5nQG1pbmQubnU+CglFbnVtVGFza1dpbmRvd3MxNjogQmFzaW5nIHRoZSBzZWxlY3Rpb24gb24gYSB3aW5kb3cncyB0YXNrIGlzIG5vdCBvbmx5Cgltb3JlIHN0cmFpZ2h0Zm9yd2FyZCB0aGFuIGNvbXBhcmluZyBtZXNzYWdlIHF1ZXVlcywgaXQgYWxzbyB3b3JrcwoJYmV0dGVyIGZvciBXaW4zMiBhcHBsaWNhdGlvbnMuCgoJKiBtZW1vcnkvbG9jYWwuYzogSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglDaGFuZ2VkIHNvbWUgb2YgdGhlIG1lc3NhZ2UgY2xhc3Nlcy4KCgkqIHdpbmRvd3Mva2V5Ym9hcmQuYzogRGF2aWQgRmF1cmUgPERhdmlkLkZhdXJlQGluc2EtbHlvbi5mcj4KCVNwZWNpYWwgY2FzZSBoYW5kbGluZyBvZiA6IFNoaWZ0ICsgYXJyb3csIHNoaWZ0ICsgaG9tZSwgLi4uCglYIHJldHVybnMgYSBjaGFyIGZvciBpdCwgYnV0IFdpbmRvd3MgZG9lc24ndC4gSWdub3JlIFggY2hhci4KCUFsc28gYWRkZWQgc29tZSBkb2N1bWVudGF0aW9uLgoKCSogaW5jbHVkZS93aW5zb2NrLmgsIG1pc2Mvd2luc29jay5jOgoJU3RlcGhlbiBMYW5nYXNlayA8dm9ybG9uQGRvZGRzLm5ldD4KCUJ1Z2ZpeGVzIGZvciBJUFggY29kZSBhbmQgcHJlbGltaW5hcnkgZ3JvdW5kd29yayBmb3Igb3RoZXIgYWRkcmVzcwoJZmFtaWx5IHN1cHBvcnQuCgoJKiBvbGUvY29tcG9iai5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCShDb0dldENsYXNzT2JqZWN0KSBvbmUgbWlzc2luZyBDQUxMQkFDSywgZXh0cmVtZWx5IHNpbXBsaWZpZWQgY2xzaWQKCWxvb2t1cCAoUmVnaXN0cnkgaXMgY2FzZSBpbnNlbnNpdGl2ZSkuCgoJKiByZWxheTMyL250ZGxsLnNwZWMsIHdpbjMyL2FkdmFwaS5jLCBkbGxzL250ZGxsL3J0bC5jLCByZWxheTMyL2FkdmFwaTMyLnNwZWM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVN0dWJzOiBTZXRTZXJ2aWNlU3RhdHVzLCBSZWdpc3RlclNlcnZpY2VDdHJsSGFuZGxlckEvVywKCVN0YXJ0U2VydmljZUN0cmxEaXNwYXRjaGVyMzJBL1csIFJ0bFN5c3RlbVRpbWVUb0xvY2FsVGltZSwKCVJ0bFRpbWVUb1RpbWVGaWVsZHMuCgoJKiBpbmNsdWRlL3dpbmRvd3MuaCwgb2xlL29sZTJubHMuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3R1YiBmb3IgR2V0TnVtYmVyRm9ybWF0MzJXLgoKCSogbWlzYy9jcnRkbGwuYzogRGF2aWQgQS4gQ3V0aGJlcnQgPGRhY3V0QGVjZS5jbXUuZWR1PgoJZ2V0cygpIGZpeGVzLgoKCSogb2xlL25scy9ydXMubmxzOiBBbGV4YW5kZXIgVi4gTHVreWFub3YgPGxhdkBsb25nLnlhci5ydT4KCUZpeCBTQ09VTlRSWSwgU05BVElWRUNUUllOQU1FLCBTQUJCUkVWREFZTkFNRTM7IGNoYW5nZSBzb21lIFNNT05USE5BTUUqCgl0byBiZSBpbiBub21pbmF0aXZlIGNhc2UuCgoJKiB3aW5kb3dzL3F1ZXVlLmM6IFBlciDFbmdzdHL2bSA8cGFuZ0BtaW5kLm51PgoJRml4ZWQgU2V0TWVzc2FnZVF1ZXVlMzIgdG8gcmV0dXJuIEZBTFNFLCBub3QgVFJVRSwgd2hlbiBjYWxsZWQgd2l0aAoJYW4gaW52YWxpZCBzaXplIHBhcmFtZXRlci4KCgkqIG11bHRpbWVkaWEvZHNvdW5kLmM6IExpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJQWRkZWQgY29ycmVjdCBpbXBsZW1lbnRhdGlvbiBvZiBHZXRDYXBzLCBjaGFuZ2VkIFBsYXkgYW5kIFN0b3AgaGFuZGxpbmcKCW9mIHBvc2l0aW9ucyBpbmRleGVzLCBzdXBwcmVzc2VkIHdhcm5pbmdzLgoKCSogbWVtb3J5L2xvY2FsLmM6IExpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJQ29ycmVjdGVkIGJ1ZyBpbiBUUkFDRSBmdW5jdGlvbi4KCgkqIEFVVEhPUlMsIGdyYXBoaWNzL2RkcmF3LmMsIGluY2x1ZGUvYXV0aG9ycy5oLCBpbmNsdWRlL2RkcmF3Lmg6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUNvcnJlY3RlZCBidWcgaW4gRGlyZWN0RHJhd1N1cmZhY2UgY3JlYXRpb24gYW5kIGhhbmRsaW5nIGZvciBkcml2ZXIKCWJhc2VkIHVwb24gWGxpbGIuCgoJKiB3aW5kb3dzL2RpbnB1dC5jOiBMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCVdpbmUga2V5Ym9hcmQgYW5kIG1vdXNlIGhhdmUgbm93IHRoZWlyIG93biBVSURzLgoKCSogb2JqZWN0cy9icnVzaC5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUZpeCBhbGxvY2F0aW9uIHNpemUgaW4gQ3JlYXRlRElCUGF0dGVybkJydXNoKi4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE5vdiAgOCAxNjo0NDo0MSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogd2luZG93cy9kaWFsb2cuYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglGaXhlZCBrZXlzdHJva2UgYWNjZWxlcmF0b3JzIGluIGRpYWxvZ3Mgd2hpY2ggaGF2ZSBjb250cm9scyBjb250YWluaW5nCglvdGhlciBjb250cm9scyBhcyBjaGlsZCB3aW5kb3dzLgoKCSogaW5jbHVkZS93aW5wcm9jLmgsIG1pc2MvY29tbWRsZy5jLCB3aW5kb3dzL2hvb2suYywgd2luZG93cy93aW5wcm9jLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUZpeGVzOiBMQl8vQ0JfL0VNXyBtZXNzYWdlcyBmb3IgZ2V0dGluZy9zZXR0aW5nIHRleHQgYW5kIGEgYnVnIGluCgkxNi0+MzIgYml0IGNvbnZlcnNpb24uCgoJKiBvYmplY3RzL2RpYi5jOiBFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCVByZXZlbnQgQ3JlYXRlRElCU2VjdGlvbiBmcm9tIHNlZyBmYXVsdGluZyB3aGVuIG9uZSBkaW1lbnNpb24gb2YKCXNlY3Rpb24gaXMgMC4KCgkqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL2NvbmZpZy5oLmluLCBpbmNsdWRlL3dpbnNvY2suaCwgbWlzYy93aW5zb2NrLmM6CglTdGVwaGVuIExhbmdhc2VrIDx2b3Jsb25AZG9kZHMubmV0PgoJU3VwcG9ydCBmb3IgSVBYIG5ldHdvcmtpbmcgdmlhIHdpbnNvY2sgdW5kZXIgTGludXguCgoJKiByZWxheTMyL2dkaTMyLnNwZWMsIGdyYXBoaWNzL3BhaW50aW5nLmM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBZGRlZCBhIHN0dWIgZm9yIFN0YXJ0RG9jQSBhbmQgRW5kRG9jLgoKCSogcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCBzY2hlZHVsZXIvcHJvY2Vzcy5jLCB3aW4zMi9jb25zb2xlLmM6CglKYW1lcyBTdXRoZXJsYW5kIDxKYW1lc1N1dGhlcmxhbmRAZ214LmRlPgoJTW9yZSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2V0Q3RybEhhbmRsZXIoKSBmdW5jdGlvbiAoYW5kIHRoZQoJcmVsYXRlZCBjb25zb2xlIGZ1bmN0aW9ucykuCgoJKiBvYmplY3RzL2JydXNoLmMsIHJlbGF5MzIvZ2RpMzIuc3BlYzogSmVmZiBKb2hhbm4gPGpqb2hhbm5Aa2l2YS5uZXQ+CglBZGRlZCBDcmVhdGVESUJQYXR0ZXJuQnJ1c2hQdCAoR0RJMzIuMzUpIHdpdGggbWlub3IgZG9jdW1lbnRhdGlvbgoJdXBkYXRlcy4KCgkqIGdyYXBoaWNzL3ZnYS5jLCBpbmNsdWRlL3ZnYS5oLCBtc2Rvcy9pb3BvcnRzLmM6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCVNpbXVsYXRlIHRoZSBWR0EgdmVydGljYWwgcmVmcmVzaC4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IExpb25lbCBVbG1lciA8dWxtZXJAZGlyZWN0cHJvdmlkZXIubmV0PgoJQWRkZWQgc3VwcG9ydCBvZiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHJlY3RhbmdsZXMgaW4gQmxpdCBmdW5jdGlvbi4KCgkqIGluY2x1ZGUvZGlucHV0LmgsIHdpbmRvd3MvZGlucHV0LmM6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUFkZGVkIGRldmljZSB0eXBlIGNvbnN0YW50cyBhbmQgdXNlZCB0aGVtIGluIGRldmljZSBlbnVtZXJhdGlvbgoJZnVuY3Rpb24uCgoJKiBtaXNjL3JlZ2lzdHJ5LmM6IFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUFQSSBkb2N1bWVudGF0aW9uIHNheXMgdGhhdCBSZWdFbnVtS2V5RXgsIFJlZ0VudW1WYWx1ZSBhbmQKCVJlZ1F1ZXJ5SW5mb0tleSB0YWtlcyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVycyBhcyBjaGFyYWN0ZXJzLgoKCSogb2xlL2NvbXBvYmouYzogQWRkZWQgbWlzc2luZyAjaW5jbHVkZSAiY29uZmlnLmgiCgoJKiBBVVRIT1JTLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9hdXRob3JzLmgsIGluY2x1ZGUvY29uZmlnLmguaW4sIG9sZS9jb21wb2JqLmM6CglKdXN0aW4gQnJhZGZvcmQgPGp1c3RpbkB1a2Fucy5lZHU+CglSZXBsYWNlcyBDb0NyZWF0ZUd1aWQgc3R1YiB3aXRoIGFuIGltcGxlbWVudGF0aW9uIG9mIERDRSdzIFVVSUQKCXNwZWNpZmljYXRpb24uIEFsc28gcmVtb3ZlcyBzb21lIHVubmVjZXNzYXJ5IGNvZGUgZnJvbSBTdHJpbmdGcm9tQ0xTSUQuCgoJKiBpbmNsdWRlL2NvbW1jdHJsLmgsIGluY2x1ZGUvd2luYmFzZS5oLCBpbmNsdWRlL3dpbnR5cGVzLmg6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBZGRlZCBhbiBleHRlcm4gIkMiIHNhZmVndWFyZC4KCgkqIGluY2x1ZGUvY29tbWRsZy5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgd2luZG93cy9pbnB1dC5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJLSBhZGRzIEdldEV4aXRDb2RlUHJvY2VzcwoJLSBjb3JyZWN0cyB0aGUgcmV0dXJuLXR5cGUgb2YgR2V0S2V5U3RhdGUKCS0gY29ycmVjdHMgdGhlIHdpbmVsaWIgZGVmaW5pdGlvbiBvZiBJc0RpYWxvZ01lc3NhZ2UKCS0gYWRkcyB3aW5lbGliIGRlZmluaXRpb25zIGZvciBQcmludERsZwoKCSogb2JqZWN0cy9jbGlwcGluZy5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJRXh0U2VsZWN0Q2xpcFJnbiBmaXg6IFJHTl9ESUZGIGRpZCBub3Qgd29yay4KCgkqIG9iamVjdHMvY3Vyc29yaWNvbi5jLCB3aW5kb3dzL2V2ZW50LmMsIHdpbmRvd3MvbWVzc2FnZS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBZGFwdGVkIHRvIG5ldyBpbnB1dCBldmVudCBoYW5kbGluZy4KCgkqIGlmMTYzMi90aHVuay5jLCBpZjE2MzIvdXNlci5zcGVjLCBpbmNsdWRlL2lucHV0LmgsIGluY2x1ZGUvd2luZG93cy5oLCByZWxheTMyL3VzZXIzMi5zcGVjLCB3aW5kb3dzL01ha2VmaWxlLmluLCB3aW5kb3dzL2lucHV0LmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVVTRVItc2lkZSBwYXJ0IG9mIGlucHV0IGV2ZW50IGhhbmRsaW5nOiBjb250YWlucyBpbXBsZW1lbnRhdGlvbiBvZgoJa2V5YmRfZXZlbnQgYW5kIG1vdXNlX2V2ZW50LCBhbmQgVVNFUi1yZWxhdGVkIGNvZGUgcmVtb3ZlZCBmcm9tCgl3aW5kb3dzL2V2ZW50LmMgYW5kIHdpbmRvd3Mva2V5Ym9hcmQuYy4KCgkqIHdpbmRvd3MvZGlzcGxheS5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglTdHVicyBmb3IgRElTUExBWS5EUlYgcmVtb3ZlZCBmcm9tIGtleWJvYXJkLmMuCgoJKiBpZjE2MzIvbW91c2Uuc3BlYywgaW5jbHVkZS9tb3VzZS5oLCB3aW5kb3dzL21vdXNlLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGF0aW9uIG9mIE1PVVNFLkRSViAoY29udGFpbnMgc29tZSBjb2RlIHRha2VuIGZyb20KCXdpbmRvd3MvZXZlbnQuYykuCgoJKiBpZjE2MzIva2V5Ym9hcmQuc3BlYywgaW5jbHVkZS9rZXlib2FyZC5oLCB3aW5kb3dzL2tleWJvYXJkLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUltcGxlbWVudGF0aW9uIG9mIEtFWUJPQVJELkRSViAoY29kZSBtb3N0bHkgdGFrZW4gZnJvbSBwcmV2aW91cwoJd2luZG93cy9rZXlib2FyZC5jKS4KCgkqIGxvYWRlci9tYWluLmMsIGxvYWRlci90YXNrLmMsIG1pc2NlbXUvbWFpbi5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IHJlYWxseSAqZG8qIHN3aXRjaCB0byB0aGUgaW5pdGlhbCB0YXNrJ3Mgc3RhY2suCglDYWxsTGFyZ2VTdGFjayBtZWNoYW5pc20gcmUtZW5hYmxlZC4KCgkqIGluY2x1ZGUvZGVidWcuaCwgaW5jbHVkZS9kZWJ1Z2RlZnMuaDoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglOZXcgRmlsZXMuIEFkZGVkICdkYXRlIGFuZCB0aW1lIHBpY2tlcicgYW5kICdtb250aCBjYWxlbmRhcicgY29udHJvbAoJZHVtbWllcy4gVGhleSBhcmUgdXNlZCBieSBPdXRsb29rIEV4cHJlc3MuCgoJKiBvbGUvb2xlMi5jLCByZWxheTMyL29sZTMyLnNwZWM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgc3R1YiBmb3IgQ3JlYXRlQmluZEN0eCgpIGFuZCBhZGRlZCBtaXNzaW5nIENvR2V0Q2xhc3NPYmplY3QoKQoJdG8gKi5zcGVjIGZpbGUuIE1ha2VzIEludGVybmV0IEV4cGxvcmVyIDQuMDEgaGFwcHkgOy0pCgoJKiBkbGxzL2NvbWN0bDMyL3BhZ2VyLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglMaXR0bGUgaW1wcm92ZW1lbnQuCgoJKiBkbGxzL2NvbWN0bDMyL2xpc3R2aWV3LmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBwcmVsaW1pbmFyeSBoaXQgdGVzdGluZy4gTWFrZXMgcmVnZWRpdC5leGUgaGFwcHkgOy0pCgoJKiBkb2N1bWVudGF0aW9uL2NvbW1vbl9jb250cm9scywgZGxscy9jb21jdGwzMi9pbWFnZWxpc3QuYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglJbXByb3ZlZCBkb2N1bWVudGF0aW9uIGFuZCBmaXhlZCB0eXBvcy4KCgkqIGRsbHMvY29tY3RsMzIvY29tbWN0cmwuYywgcmVsYXkzMi9jb21jdGwzMi5zcGVjOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUFkZGVkIERyYXdTdGF0dXNUZXh0MzJBVygpIGFuZCBDcmVhdGVTdGF0dXNXaW5kb3czMkFXKCkuCgoJKiBkbGxzL2NvbWN0bDMyL3JlYmFyLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglJbXByb3ZlZCBkaXNwbGF5IGFuZCBsYXlvdXQgY29kZS4KCgkqIGRsbHMvY29tY3RsMzIvTWFrZWZpbGUuaW4sIGRsbHMvY29tY3RsMzIvZGF0ZXRpbWUuYywgZGxscy9jb21jdGwzMi9tb250aGNhbC5jLCBpbmNsdWRlL2NvbW1jdHJsLmgsIGluY2x1ZGUvZGF0ZXRpbWUuaCwgaW5jbHVkZS9tb250aGNhbC5oOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCU5ldyBGaWxlcy4gQWRkZWQgJ2RhdGUgYW5kIHRpbWUgcGlja2VyJyBhbmQgJ21vbnRoIGNhbGVuZGFyJyBjb250cm9sCglkdW1taWVzLiBUaGV5IGFyZSB1c2VkIGJ5IE91dGxvb2sgRXhwcmVzcy4KClNhdCBOb3YgIDcgMTI6NTY6MzIgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG9iamVjdHMvZW5obWV0YWZpbGUuYywgcmVsYXkzMi9nZGkzMi5zcGVjLCBpbmNsdWRlL3dpbmRvd3MuaDoKCUNoYXJsZXMgU3VwcmluIDxjc3VwcmluQGx5bnguZGFjLm5ldS5lZHU+CglBZGRlZCBzdHVicyBmb3IgU2V0V2luTWV0YUZpbGVCaXRzIGFuZCBHZXRFbmhNZXRhRmlsZVBhbGV0dGVFbnRyaWVzLgoKCSogZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmM6CglIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCVN0b3AgWDExRFJWX1JvdW5kUmVjdCBjYWxsaW5nIFhEcmF3QXJjIHdpdGggLXZlIHdpZHRoL2hlaWdodCBwYXJhbXMKCXdoaWNoIGl0IGRpZCBpZiBlaXRoZXIgZWxsaXBzZSBkaW1lbnNpb24gd2FzIHplcm8uCgoJKiBncmFwaGljcy9wYWludGluZy5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCU9wdGltaXplIFJvdW5kUmVjdDMyIHRvIGNhbGwgUmVjdGFuZ2xlMzIgaWYgZWl0aGVyIGVsbGlwc2UgZGltZW5zaW9uCglpcyB6ZXJvLgoKCSogcmVsYXkzMi9tcHIuc3BlYywgbWlzYy9uZXR3b3JrLmM6CglBbmRyZWFzIE1vaHIgPG1vaHJAZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBZGRlZCBzdHViIFdOZXRFbnVtQ2FjaGVkUGFzc3dvcmRzLgoKCSogbXNkb3MvaW50MjEuYywgbXNkb3MvaW50MjUuYzoKCUFuZHJlYXMgTW9ociA8bW9ockBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCU1hZGUgdGhpcyBmaWxlIERPU01PRCBmcmllbmRseS4KCgkqIGxvYWRlci9uZS9zZWdtZW50LmMsIGxvYWRlci9wZV9pbWFnZS5jOgoJQW5kcmVhcyBNb2hyIDxtb2hyQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJVW5pZmllZCAiTm8gaW1wbGVtZW50YXRpb24gZm9yLi4uIiB3YXJuaW5ncy4KCgkqIHdpbjMyL2RldmljZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCW1vbm9kZWJnLnZ4ZCB1c2VkIGJ5IHNvbWUgT3JpZ2luIHByb2dyYW1zIGltcGxlbWVudGVkLgoKCSogb2JqZWN0cy9iaXRtYXAuYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUZhaWwgaWYgbGVzcyB0aGVuIG9uZSBlbnRpcmUgbGluZSByZXF1ZXN0ZWQgaW4gR2V0Qml0bWFwQml0czMyLgoKCSogd2luZG93cy93aW5wcm9jLmM6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglBZGRlZCBXTV9HRVRETEdDT0RFIGhhbmRsaW5nIGluIChVbilNYXBNc2czMkF0bzE2LgoKCSogaWYxNjMyL2NvbXBvYmouc3BlYywgaW5jbHVkZS9vbGUuaCwgb2xlL2NvbXBvYmouYywgcmVsYXkzMi9vbGUzMi5zcGVjOgoJSm9obiBSaWNoYXJkc29uIDxqcmljaGFyZEB6ZWFsYW5kLm12LmNvbT4KCUltcGxlbWVudGF0aW9uIG9mIENvTG9hZExpYnJhcnksIENvRnJlZUFsbExpYnJhcmllcywKCUNvRnJlZVVudXNlZExpYnJhcmllcywgQ29GcmVlTGlicmFyeS4KCUZpeGVkIG1pc3NwZWxsaW5nIG9mIENvVW5pbml0aWFsaXplLgoKCSogcHJvZ3JhbXMvY2xvY2svQ2hhbmdlTG9nLCBwcm9ncmFtcy9jbG9jay9tYWluLmM6CglSb2JlcnQgUG91bGlvdCA8a3J5bm9zQGNsaWMubmV0PgoJRml4ZXMgZm9yIG90aGVyIGxhbmd1YWdlcy4KCkZyaSBOb3YgIDYgMTc6MzY6MTMgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG1pc2MvcmVnaXN0cnkuYzogSm9obiBSaWNoYXJkc29uIDxqcmljaGFyZEB6ZWFsYW5kLm12LmNvbT4KCUZpeCB3aWRlIGNoYXJhY3RlciBmdW5jdGlvbnMgdG8gcmV0dXJuIGNoYXJhY3RlciBjb3VudCBpbiBjaGFyYWN0ZXIKCXF1YW50aXRpZXMgbm90IGJ5dGUgcXVhbnRpdGllcy4gIE1ha2UgUmVnUXVlcnlJbmZvS2V5IGFuZAoJUmVnUXVlcnlJbmZvS2V5IGJlaGF2ZSBjb3JyZWN0bHkgaW4gd2luOTUgbW9kZS4KCgkqIGluY2x1ZGUvZGlucHV0LmgsIHdpbmRvd3MvZGlucHV0LmM6CglMaW9uZWwgVWxtZXIgPHVsbWVyQGRpcmVjdHByb3ZpZGVyLm5ldD4KCUNoYW5nZWQgbW91c2UgYnV0dG9uIG1hcHBpbmcgYW5kIGNoZWNrIHNpemUgb2YgcmV0dXJuIGJ1ZmZlci4KCgkqIG9iamVjdHMvY2xpcHBpbmcuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUV4dFNlbGVjdENsaXBSZ24oKSB3aXRoIFJHTl9DT1BZIGNvcGllcyB0aGUgd3JvbmcgcmVnaW9uLgoKCSogZmlsZXMvZmlsZS5jOiBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglGaXhlZCBhbiBlcnJvciBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgRklMRV9TaGFyZURlbnkuCgoJKiBzY2hlZHVsZXIvaGFuZGxlLmMsIGlmMTYzMi90aHVuay5jLCBpbmNsdWRlL2RlYnVndG9vbHMuaCwgaW5jbHVkZS9zaWdfY29udGV4dC5oLCBtdWx0aW1lZGlhL21tc3lzdGVtLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVNvbGFyaXMgcmVkZWZpbmVzIEVSUiBhbmQgQ1MsIGZpeGVkIG9jY3VyYW5jZXMuCglTb2xhcmlzIGhhcyBUUkFQTk8gaW4gaXRzIHNpZ2NvbnRleHQsIGFkZGVkIHRvIHNpZ19jb250ZXh0LmgKCgkqIGluY2x1ZGUvbW1zeXN0ZW0uaCwgbXVsdGltZWRpYS9tbWlvLmMsIHJlbGF5MzIvd2lubW0uc3BlYywgaWYxNjMyL21tc3lzdGVtLnNwZWM6CglFcmljIFBvdWVjaCA8RXJpYy5Qb3VlY2hAd2FuYWRvby5mcj4KCU1hZGUgbW1pb1NldEJ1ZmZlciBjYWxsYWJsZSBmcm9tIDE2IGFuZCAzMiBiaXQgY29kZS4KCgkqIGNvbnRyb2xzL21lbnUuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlZCB3cm9uZyBhcmcgdHlwZS4KCgkqIG9iamVjdHMvZGliLmMsIG9iamVjdHMvZ2Rpb2JqLmMsIGdyYXBoaWNzL3gxMWRydi9NYWtlZmlsZS5pbiwgZ3JhcGhpY3MveDExZHJ2L2RpYi5jLCBncmFwaGljcy94MTFkcnYvaW5pdC5jLCBpbmNsdWRlL3gxMWRydi5oOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglNb3ZlZCBYMTEgRElCIHN0dWZmIHRvIHgxMWRydi4KCgkqIHdpbjMyL2NvZGVfcGFnZS5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJVGhlIEFQSSBmb3IgV2lkZUNoYXJUb011bHRpQnl0ZSBzYXlzIHRoYXQgdGhlIHNyYy1zdHJpbmcgaGFzIG9ubHkgdG8gYmUKCXRyZWF0ZWQgYXMgTlVMTC10ZXJtaW5hdGVkIGlmIHNyY2xlbiBpcyAtMS4KCgkqIGluY2x1ZGUvd2luLmgsIHdpbmRvd3MvZXZlbnQuYywgd2luZG93cy93aW4uYzoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJTWFkZSBzdXJlIENvbmZpZ3VyZU5vdGlmeSBpcyBwcm9jZXNzZWQgYmVmb3JlIEV4cG9zZSwgZGVmZXJyaW5nIHRoZQoJRXhwb3NlIGV2ZW50IGlmIG5lY2Vzc2FyeSwgdGh1cyB3b3JraW5nIGFyb3VuZCBhIFdNIGZsYXcgd2l0aCB2aXJ0dWFsCglkZXNrdG9wIHNjcm9sbGluZyBpbiAtbWFuYWdlZCBtb2RlLgoKCSogcmVzb3VyY2VzL3N5c3Jlc19Gci5yYzogRXJpYyBQb3VlY2ggPGVyaWMucG91ZWNoQGxlbWVsLmZyPgoJVHJhbnNsYXRlZCBpbiBGcmVuY2ggKG5vdCBzbyBnb29kIGFueWhvdykgbWVzc2FnZSBmb3IgdGhlIG1hcmsgb24KCXN5c3RlbSBtZW51LgoKCSogbWlzYy9tYWluLmM6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQ2hhbmdlZCB0aGUgZGVmYXVsdCBmcm9tIDAgdG8gMHg0MDkgKGVuZy11cykuCgoJKiB3aW5kb3dzL21kaS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVR3byBtaXNzaW5nIFdJTkFQSXMuCgoJKiBpbmNsdWRlL2ludGVyZmFjZXMuaDogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlZCBvbmUgd3JvbmcgcGFyYW1ldGVyLgoKCSogY29uZmlndXJlLCBjb25maWd1cmUuaW46IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJRml4ZWQgLS1kaXNhYmxlLWxpYi4KClRodSBOb3YgIDUgMTA6MzM6MTggMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGluY2x1ZGUvY29tbWN0cmwuaDogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglDb25zdGFudHMgZm9yIGNvbnRyb2xzIGluIGNvbW1vbiBkaWFsb2dzLgoKV2VkIE5vdiAgNCAxODowODozMyAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogbWlzYy9jcnRkbGwuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglGaXhlZCBzb21lIGNvbXBpbGVyIHdhcm5pbmdzLgoKU3VuIE5vdiAgMSAxOToyNzoyNCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogd2luZG93cy9tZXNzYWdlLmMsIHdpbmRvd3Mvbm9uY2xpZW50LmMsIHdpbmRvd3MvcGFpbnRpbmcuYywgd2luZG93cy93aW5oZWxwLmMsIHdpbmRvd3Mvd2lucG9zLmMsIG1pc2MvY29tbWRsZy5jLCBtaXNjL3NoZWxsLmMsIG1pc2Mvd2luc29jay5jLCBtaXNjZW11L2luc3RyLmMsIG11bHRpbWVkaWEvYXVkaW8uYywgbXVsdGltZWRpYS9qb3lzdGljay5jLCBvYmplY3RzL2JpdG1hcC5jLCBvYmplY3RzL2NsaXBwaW5nLmMsIG9iamVjdHMvY29sb3IuYywgb2JqZWN0cy9jdXJzb3JpY29uLmMsIG9iamVjdHMvZGliLmMsIHRvb2xzL3dyYy9kdW1wcmVzLmMsIHRvb2xzL3dyYy9wYXJzZXIubCwgd2luZG93cy9jbGlwYm9hcmQuYywgd2luZG93cy9tZGkuYywgZmlsZXMvZmlsZS5jLCBncmFwaGljcy94MTFkcnYveGZvbnQuYywgbWVtb3J5L2hlYXAuYzoKCUplc3BlciBTa292IDxqc2tvdkBjeWdudXMuY28udWs+CgllZ2NzICdhbWJpZ3VvdXMgZWxzZScgd2FybmluZ3MgZml4ZXMuCgoJKiBpbmNsdWRlL3Rvb2xoZWxwLmgsIGluY2x1ZGUvd2luZG93cy5oLCBzY2hlZHVsZXIvcHJvY2Vzcy5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglHZXQgcmlkIG9mIHRoZSByZWRlZmluaXRpb24gb2YgTUFYX1BBVEggYW5kIG1vdmUgUFJPQ0VTU0VOVFJZMzIKCWRlZmluaXRpb24gdG8gdG9vbGhlbHAuaC4KCgkqIHdpbmRvd3Mvd2luLmMsIGluY2x1ZGUvcGVfaW1hZ2UuaCwgbGlicmFyeS93aW5lc3R1Yi5jLCBsb2FkZXIvZWxmLmMsIGxvYWRlci9tb2R1bGUuYywgbG9hZGVyL3Jlc291cmNlLmMsIG1pc2MvY2FsbGJhY2suYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJUnVuIFdpbmVsaWIgYXBwbGljYXRpb25zIGFzIDMyLWJpdCBwcm9jZXNzZXMgaW4gdGhlIGluaXRpYWwgdGFzay4KCVNpbXBsaWZpZWQvcmVtb3ZlZCBzZXZlcmFsIHNwZWNpYWwgJ2lmIChfX3dpbmVsaWIpJyBjYXNlcyBpbgoJV2luZSBtYWluIGNvZGUgb2Jzb2xldGVkIGJ5IHRoYXQgY2hhbmdlLgoKCSogd2luZG93cy9ldmVudC5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUNhbGwgbW91c2UgZHJpdmVyIGNhbGxiYWNrIGFsc28gaWYgd2luZG93cyBhcmUgbm90IHJlZ2lzdGVyZWQgd2l0aCBYCgkoaWYgdXNpbmcgbmF0aXZlIFVTRVIuRVhFKS4KCgkqIG1lbW9yeS9hdG9tLmMsIGluY2x1ZGUvYXRvbS5oOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBZGFwdGVkIHRvIHNlcGFyYXRpb24gYmV0d2VlbiBLRVJORUwgYW5kIFVTRVIuCgoJKiBpZjE2MzIvYnVpbHRpbi5jLCBpbmNsdWRlL21haW4uaCwgbG9hZGVyL21haW4uYywgbG9hZGVyL3Rhc2suYywgbWlzY2VtdS9tYWluLmMsIHJlbGF5MzIvZ2RpMzIuc3BlYywgcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCByZWxheTMyL3VzZXIzMi5zcGVjLCBzY2hlZHVsZXIvcHJvY2Vzcy5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRlZCBuZXcgV2luZSBzdGFydHVwIHNlcXVlbmNlLCBzZXBhcmF0aW5nIHN0YXJ0dXAgaW50bwoJS0VSTkVML1VTRVIvR0RJIHJlbGF0ZWQgcGFydHMsIGFsbG93aW5nIG5hdGl2ZSByZXBsYWNlbWVudC4KCUltcGxlbWVudGVkIGluaXRpYWwgJ2tlcm5lbCcgdGFzay4KCgkqIGluY2x1ZGUvb2xlLmgsIGluY2x1ZGUvd2luZXJyb3IuaCwgb2xlL2NvbXBvYmouYzoKCUpvaG4gUmljaGFyZHNvbiA8anJpY2hhcmRAemVhbGFuZC5tdi5jb20+CglJbXBsZW1lbnRhdGlvbiBvZiBJbnByb2NTZXJ2ZXIzMiBDb0dldENsYXNzT2JqZWN0LgoKCSogaW5jbHVkZS9iaXRtYXAuaCwgb2JqZWN0cy9iaXRtYXAuYywgb2JqZWN0cy9jdXJzb3JpY29uLmMsIG9iamVjdHMvb2VtYml0bWFwLmMsIGdyYXBoaWNzL3gxMWRydi9iaXRtYXAuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJTW9yZSBiaXRtYXAgZml4ZXMuCgoJKiB3aW5kb3dzL3dpbnByb2MuYzogRml4ZWQgY3Jhc2hlcyB3aXRoIFdNX0dFVERMR0NPREUgdHJhbnNsYXRpb24uCgoJKiBwcm9ncmFtcy93aW5oZWxwL01ha2VmaWxlLmluLCBwcm9ncmFtcy93aW52ZXIvTWFrZWZpbGUuaW4sIHdpbmRvd3Mvd2luLmMsIHdpbmRvd3MveDExZHJ2Ly5jdnNpZ25vcmUsIHdpbmRvd3MveDExZHJ2L01ha2VmaWxlLmluLCB3aW5kb3dzL3gxMWRydi9pbml0LmMsIGluY2x1ZGUvY29uZmlnLmguaW4sIGluY2x1ZGUvd2luLmgsIGxpYnRlc3QvTWFrZWZpbGUuaW4sIHByb2dyYW1zL2Nsb2NrL01ha2VmaWxlLmluLCBwcm9ncmFtcy9jb250cm9sL01ha2VmaWxlLmluLCBwcm9ncmFtcy9ub3RlcGFkL01ha2VmaWxlLmluLCBwcm9ncmFtcy9wcm9nbWFuL01ha2VmaWxlLmluLCBwcm9ncmFtcy9yZWd0ZXN0L01ha2VmaWxlLmluLCBwcm9ncmFtcy92aWV3L01ha2VmaWxlLmluLCBNYWtlLnJ1bGVzLmluLCBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvYWNjb25maWcuaDoKCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJU3RhcnRlZCBtb3Zpbmcgc29tZSBYMTEgd2luZG93IG1hbmFnZW1lbnQgY29kZSB0byB3aW5kb3dzL3gxMWRydi4KCgkqIGlmMTYzMi91c2VyLnNwZWMsIHdpbmRvd3MvZGlhbG9nLmMsIHdpbmRvd3Mvd2lucHJvYy5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglGaXhlZCBJc0RpYWxvZ01lc3NhZ2UxNi4KCgkqIE1ha2VmaWxlLmluOiBEb3VnbGFzIFJpZGd3YXkgPHJpZGd3YXlAd2luZWhxLmNvbT4KCVRlbGwgcGVvcGxlIHRvIGlnbm9yZSB0aGUgJ2dldHMnIHdhcm5pbmcuIFNvbWUgd2lsbCBsaXN0ZW4uCgoJKiBncmFwaGljcy94MTFkcnYvYml0bWFwLmMsIHdpbmRvd3MvZ3JhcGhpY3MuYzoKCUh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJQSBjb3VwbGUgb2Ygc21hbGwgZml4ZXMgdG8gbXkgYml0bWFwIHBhdGNoLgoKCSogcmVzb3VyY2VzL1RPRE8sIHJlc291cmNlcy9zeXNyZXNfRGUucmMsIHJlc291cmNlcy9zeXNyZXNfRW4ucmMsIHdpbmRvd3Mvbm9uY2xpZW50LmM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglBbGxvdyB0aGUgdXNlciB0byBwdXQgYSBtYXJrIGluIHRoZSBkZWJ1ZyBsb2cgYnkgYWRkaW5nIGEgaXRlbSBpbiB0aGUKCVNZU01FTlUuIFRoZSBtZXNzYWdlcyBuZWVkcyBpbXBsZW1lbnRhdGlvbiBpbiBhbGwgb3RoZXIgbGFuZ3VhZ2VzIHRoYW4KCUVuZ2xpc2ggYW5kIEdlcm1hbi4KCgkqIGZpbGVzL2ZpbGUuYzogVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJR2l2ZSB0ZW1wZmlsZSBhIGRpZmZlcmVudCBuYW1lIGV2ZW4gaWYgdGhleSBhcmUgY3JlYXRlZCBpbiB0aGUgc2FtZQoJc2Vjb25kLiBSZW1vdmVkIHNvbWUgZml4bWVzIGZyb20gdGhlIFNoYXJlRGVueSBzdHVmZi4KCgkqIGluY2x1ZGUvbWRpLmgsIGluY2x1ZGUvd2luZG93cy5oLCByZWxheTMyL3VzZXIzMi5zcGVjLCB3aW5kb3dzL21kaS5jLCB3aW5kb3dzL3dpbi5jOgoJUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUNyZWF0ZVdpbmRvd0V4MzJbQVddIG5vdyBjcmVhdGVzIGFuIE1ESSBjaGlscyB3aGVuIHRoZSBXTV9FWF9NRElDSElMRAoJZXh0ZW5kZWQgc3R5bGUgaXMgc3BlY2lmaWVkLiBBbHNvIGltcGxlbWVudGVkIENyZWF0ZU1ESVdpbmRvdzMyQSgpCgljYWxsIC0gc2luZ2xlIHRocmVhZCBvbmx5IC0uCgoJKiBkbGxzL2NvbWN0bDMyL3RyZWV2aWV3LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRXJyZWQgaW4gdGhlIGJpdCBtYWNyb3MgaW4gdHJlZXZpZXcuYy4gU2hpZnRjb3VudHMgd2VyZSB3cm9uZy4KCgkqIGxvYWRlci9wZV9pbWFnZS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCURldGVjdGlvbiBvZiB0aGUgZW5kIG9mIGltcG9ydHMgd2l0aCBDaGFyYWN0ZXJpc3RpY3MgMCBmYWlsIGZvciBCb3JsYW5kCglwcm9ncmFtcyAod2hpY2ggc2VlbSB0byBoYXZlIGFsd2F5cyBjaGFyYWN0ZXJpc3RpY3MgMCkuIENoYW5nZWQgdG8gYWxnb3JpdGhtCgl0byBzb21ldGhpbmcgYSBiaXQgbW9yZSBpbnRlbGxpZ2VudC4KCgkqIG9sZS9jb21wb2JqLmMsIHJlbGF5MzIvb2xlMzIuc3BlYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglBZGRlZCBDb0ZyZWVMaWJyYXJ5IHN0dWIuCgoJKiBSRUFETUU6IFVwZGF0ZWQgRkFRIGxvY2F0aW9uLgoKCSogZ3JhcGhpY3MvZXNjYXBlLmM6IEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgoJSW1wbGVtZW50IFNFR1BUUiBjb252ZXJzaW9uIGZvciBTVEFSVERPQyBpbiBFc2NhcGUzMigpLgoKCSogb2JqZWN0cy9kYy5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeDogU2V0RENTdGF0ZSBkaWQgbm90IHJlc2V0IGNsaXBwaW5nIHJlZ2lvbiB0byBlbXB0eS4KCgkqIHdpbjMyL2luaXQuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglGaXhlZCBzbWFsbCBvZmYgYnkgb25lIGVycm9yIGluIEdldENvbXB1dGVyTmFtZTMyVywgYWx3YXlzIGtpbGxlZCB0aGUKCWxhc3QgY2hhcmFjdGVyIG9mIGEgaG9zdG5hbWUuCgoJKiBvYmplY3RzL2RpYi5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCURvbid0IEhlYXBGcmVlKCkgY29sb3JtYXAgaWYgd2UgZGlkbid0IGFsbG9jYXRlIG9uZS4KCgkqIHdpbjMyL2FkdmFwaS5jLCB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy91c2VyLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBpbmNsdWRlL3dpbnR5cGVzLmgsIG1pc2MvY3J0ZGxsLmMsIG1pc2MvcHJpbnRkcnYuYywgcmVsYXkzMi9hZHZhcGkzMi5zcGVjLCByZWxheTMyL2NydGRsbC5zcGVjLCByZWxheTMyL21wci5zcGVjLCByZWxheTMyL3NoZWxsMzIuc3BlYywgcmVsYXkzMi91c2VyMzIuc3BlYywgcmVsYXkzMi93aW5zcG9vbC5zcGVjOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCBzdHVicyBmb3IgdXNlcjMyLGFkdmFwaTMyIGZ1bmN0aW9ucy4KCgkqIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGxscy9NYWtlZmlsZS5pbiwgZGxscy9udGRsbC8qLCBpbmNsdWRlL250ZGxsLmgsIG1pc2MvQXR0aWMvbnRkbGwuYywgbWlzYy9NYWtlZmlsZS5pbiwgcmVsYXkzMi9udGRsbC5zcGVjOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglNb3JlIE50KiBhbmQgUnRsKiBmdW5jdGlvbiBzdHVicywgbW92ZWQgbnRkbGwuYyB0byBkbGxzL250ZGxsLy4KCgkqIG1lbW9yeS9sb2NhbC5jLCBtZW1vcnkvaGVhcC5jOiBBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglDaGFuZ2VkIG1hbnkgV0FSTigpcyByZWxhdGVkIHRvIGludGVybmFsIFdpbmUgbWVtb3J5IGZhaWx1cmVzIHRvCglFUlIoKXMuCgoJKiBpZjE2MzIva2VybmVsLnNwZWMsIHNjaGVkdWxlci9wcm9jZXNzLmM6CglBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglBZGRlZCAuc3BlYyBlbnRyeSBmb3IgS0VSTkVMLlJlZ2lzdGVyU2VydmljZVByb2Nlc3MuCgoJKiBpZjE2MzIvZGlzcGxheS5zcGVjLCB3aW5kb3dzL2tleWJvYXJkLmM6CglBbmRyZWFzIE1vaHIgPGEubW9ockBtYWlsdG8uZGU+CglBZGRlZCBzdHViIGZvciBDaGVja0N1cnNvcigpLgoKCSogaW5jbHVkZS9kaWFsb2cuaCwgd2luZG93cy9kZWZkbGcuYzogVGltIE5ld3NvbWUgPG51aXNhbmNlQGNtdS5lZHU+CglGaXggZm9yIG5vbi1tb2RhbCBkaWFsb2cgY2xvc2luZy4KCgkqIHdpbmRvd3MvZGlucHV0LmM6IERhdmlkIEZhdXJlICA8ZmF1cmVAa2RlLm9yZz4KCVJld3JvdGUgdGhlIHR3byByb3V0aW5lcyB1c2luZyB0aGUgdmtleS0+c2NhbmNvZGUgYXJyYXkgdG8gdXNlCglrZXljMnZrZXkgZm9yIGVhY2gga2V5Y29kZSwgaW5zdGVhZC4gTm90IHRlc3RlZC4KCVJlbW92ZWQgdW51c2VkIElEaXJlY3RJbnB1dERldmljZUFfR2V0RGV2aWNlU3RhdGUuCglGaXhlZCB3YXJuaW5nIGluIFRSQUNFKCkgY2FsbC4KCgkqIHdpbmRvd3Mva2V5Ym9hcmQuYzogRGF2aWQgRmF1cmUgPGZhdXJlQGtkZS5vcmc+CglEZWxldGVkIHRoZSB2a2V5LT5zYW5jb2RlIGFycmF5LCBiZWNhdXNlIFFXRVJUWSBzcGVjaWZpYy4KCUJhY2sgdG8gdXNpbmcgdGhlIFgga2V5Y29kZSBpbnN0ZWFkIGFzIHRoZSBzY2FuY29kZS4gVGVzdGVkLgoKCSogZ3JhcGhpY3MvcHNkcnYvaW5pdC5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglQcmludCBhIG1lc3NhZ2UgaWYgdGhlIFBvc3RTY3JpcHQgZHJpdmVyIGNhbid0IGZpbmQgYSBQUEQgZmlsZS4KCgkqIG1zZG9zL2ludDEwLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJQWRkZWQgVkdBIDI1Ni1jb2xvciBtb2RlIDB4MTMgdXNpbmcgdGhlIERpc3BsYXlEaWIgVkdBIGVtdWxhdGlvbi4KCShET1MgYXBwcy9nYW1lcyB1c2luZyB0aGlzIG1vZGUgY29tZXMgdXAgbm93LCBhbHRob3VnaCB5b3UgY2FuJ3QKCXJlYWxseSBkbyBhbnl0aGluZyB3aXRoIHRoZW0gKHlldD8pLikKCgkqIG1zZG9zL2RwbWkuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglVc2UgbWFjcm8gVjg2X0ZMQUcuCgoJKiBtc2Rvcy9kb3NtZW0uYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglTZXQgZGVmYXVsdCB2aWRlbyBtb2RlIHRvIDMgKDgweDI1IGNvbG9yKS4KCgkqIGxvYWRlci9kb3MvZG9zbW9kLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJSWdub3JlcyBhIGNvdXBsZSBvZiBzaWduYWxzLgoKCSogZ3JhcGhpY3MvTWFrZWZpbGUuaW4sIGdyYXBoaWNzL2Rpc3BkaWIuYywgZ3JhcGhpY3MvdmdhLmMsIGluY2x1ZGUvdmdhLmgsIG1zZG9zL2lvcG9ydHMuYzoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJTW92ZWQgVkdBLWVtdWxhdGluZyBEaXJlY3RYIGNvZGUgZnJvbSBkaXNwZGliLmMgdG8gYSBzZXBhcmF0ZQoJZmlsZS4gTWFkZSBpdCB1c2UgYSBzeXN0ZW0gdGltZXIgYW5kIHRyYXAgSS9PIGFjY2Vzc2VzIHRvIHRoZSBWR0EKCURBQyByZWdpc3RlcnMgdG8gYWNjb21tb2RhdGUgRGlzcGxheURpYi11c2luZyBwcm9ncmFtcyB0aGF0IHRyeSB0bwoJYWNjZXNzIHRoZSBWR0EgaGFyZHdhcmUgZGlyZWN0bHkuCgoJKiBtaXNjZW11L2luc3RyLmMsIGlmMTYzMi9zaWduYWwuYywgaW5jbHVkZS9kb3NleGUuaCwgbG9hZGVyL2Rvcy9kb3N2bS5jLCBsb2FkZXIvZG9zL21vZHVsZS5jLCBtaXNjL3N5c3RlbS5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglJbmRpcmVjdGlvbiBmb3IgSU5TVFJfRW11bGF0ZUluc3RydWN0aW9uIGZvciB1c2UgYnkgRE9TIGNvZGUuCglBZGRlZCBzdXBwb3J0IGZvciBhIDU1SHogc3lzdGVtIHRpbWVyLCBsZXR0aW5nIERPUyBhcHBzIGNhbGlicmF0ZQoJdGhlaXIgZGVsYXkgbG9vcHMgYW5kIHN1Y2guIENhbGxzIElOU1RSX0VtdWxhdGVJbnN0cnVjdGlvbiBmb3IKCWluc3RydWN0aW9uIGVtdWxhdGlvbiAocHJpbmNpcGFsbHkgSS9PIHBvcnQgYWNjZXNzKS4gQWRkZWQgbWFjcm8KCVY4Nl9GTEFHLgoKU2F0IE9jdCAzMSAxMjoyMDo1NiAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogd2luZG93cy9kaW5wdXQuYywgbXVsdGltZWRpYS9kc291bmQuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU21hbGwgZml4ZXMuCgoJKiBtZW1vcnkvdmlydHVhbC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVJlbW92ZWQgdGhlIEZJWE1FKCkgYW5kIG1vdmVkIFNldExhc3RFcnJvcigwKSB0byB0aGUgZW5kIChzbyB0aGF0CglHZXRUZW1wRmlsZU5hbWUgZXQuYWwuIGNhbid0IG92ZXJ3cml0ZSBpdCkuCgoJKiBtaXNjL0F0dGljL250ZGxsLmMsIHJlbGF5MzIvbnRkbGwuc3BlYywgcmVsYXkzMi9yZWxheTM4Ni5jLCByZWxheTMyL3VzZXIzMi5zcGVjLCB3aW5kb3dzL3VzZXIuYzoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJTG90cyBvZiBzdHVicyB0byBnZXQgd2lubG9nb24uZXhlIGZyb20gbnQzLjUxIGFuZCBvdGhlciBOVDMuNTEgYXBwbGV0cwoJYSBiaXQgZnVydGhlci4KCgkqIHdpbmRvd3MvbWRpLmM6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglNREljaGlsZCBjcmVhdGVkIHdoZW4gdGhlIE1ESSBjbGllbnQgaGFzIHRoZSBNRElTX0FMTENISUxEU1RZTEVTCglzdHlsZSwgc2hvdWxkIG5vdCBiZSBzaG93biBhdCBjcmVhdGlvbiBub3IgYWN0aXZhdGVkIHVubGVzcyB0aGUKCVdTX1ZJU0lCTEUgZmxhZyBpcyBzZXQuCgoJKiBsb2FkZXIvcGVfaW1hZ2UuYzogU3RlcGhlbiBMYW5nYXNlayA8dm9ybG9uQGRvZGRzLm5ldD4KCUJ1Z2ZpeCBmb3IgZml4dXBfaW1wb3J0czogRW5hYmxlIGNoZWNraW5nIGZvciB0ZXJtaW5hdGluZyBpbXBvcnQKCXN0cnVjdCB3aXRoIENoYXJhY3RlcmlzdGljcyBiaXRmaWVsZCBzZXQgdG8gMC4KCgkqIHdpbmRvd3Mvd2luLmM6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglEZWxheSBsaW5raW5nIG5ld2x5IGNyZWF0ZWQgd2luZG93IGluIGxpbmtlZCBsaXN0IHVudGlsIGFmdGVyIHRoZQoJV01fTkNDUkVBVEUgbWVzc2FnZS4KCgkqIGZpbGVzL2ZpbGUuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCVNtYWxsIGJ1ZyBpbiBGSUxFX0luVXNlIGRvZXMgbm90IGRvIGEgcmVsZWFzZSBvbiBldmVyeSBhY3F1aXJlZCBmaWxlCglwb2ludGVyLgoKCSogY29udHJvbHMvc3RhdGljLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJbHBzek5hbWUgb2YgTlVMTCBpcyBoYW5kbGVkIChyZW1vdmVzIHNvbWUgd2FybmluZ3MpLgoKCSogdG9vbHMvdGVzdHJ1bjogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglOb3cgYWxsb3dzIHNwZWNpZmljYXRpb24gb2YgYSBzdGFydCBkaXJlY3Rvcnkgb24gdGhlIGNtZGxpbmUuCgoJKiBkbGxzL2NvbWN0bDMyL3RyZWV2aWV3LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJR2V0cyByaWQgb2YgdGhlIGFyY2gtZGVwZW5kZW50IGJpdCBvcGVyYXRpb25zICh0ZXN0ZWQgb24gTGludXggYW5kCglTb2xhcmlzL3g4NikuCgpXZWQgT2N0IDI4IDE0OjU4OjAyIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiB3aW5kb3dzL3dpbi5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUEgZGVzdCBidWZmZXIgd2FzIHByaW50ZWQgb3V0IGFzIHN0cmluZy4KCgkqIGluY2x1ZGUvc2hsb2JqLmg6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQ29ycmVjdGVkIDIgd3JvbmcgZGVmaW5pdGlvbnMuCgoJKiBpbmNsdWRlL3dpbmRvd3MuaCwgcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCBzY2hlZHVsZXIvcHJvY2Vzcy5jOgoJUGF0cmljayBTcGlubGVyIDxzcGlubGVyLnBhdHJpY2tAbWF5by5lZHU+CglBZGRlZCBzdHVicyBmb3IgUHJvY2VzczMyRmlyc3QvUHJvY2VzczMyTmV4dC4KCgkqIGluY2x1ZGUveDExZHJ2LmgsIG9iamVjdHMvY2xpcHBpbmcuYywgb2JqZWN0cy9kYy5jLCBvYmplY3RzL2RjdmFsdWVzLmMsIG9iamVjdHMvcGFsZXR0ZS5jLCBvYmplY3RzL3JlZ2lvbi5jLCBncmFwaGljcy9lc2NhcGUuYywgZ3JhcGhpY3MvbWV0YWZpbGVkcnYvZ3JhcGhpY3MuYywgZ3JhcGhpY3MvcGFpbnRpbmcuYywgZ3JhcGhpY3MvcGF0aC5jLCBncmFwaGljcy9wc2Rydi9ncmFwaGljcy5jLCBncmFwaGljcy93aW4xNmRydi9ncmFwaGljcy5jLCBncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuYywgaW5jbHVkZS9kZWJ1Z2dlci5oLCBpbmNsdWRlL2dkaS5oLCBpbmNsdWRlL21ldGFmaWxlZHJ2LmgsIGluY2x1ZGUvcHNkcnYuaCwgaW5jbHVkZS93aW4xNmRydi5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgaW5jbHVkZS93aW50eXBlcy5oLCBkZWJ1Z2dlci9kYmcueSwgZGVidWdnZXIvbXNjLmMsIGRlYnVnZ2VyL3N0YWJzLmMsIGRlYnVnZ2VyL3R5cGVzLmM6CglGcmFu529pcyBHb3VnZXQgPGdvdWdldEBtZXRhaW50ZWdyYXRpb24ubmV0PgoJRml4ZWQgc29tZSBMUFBPSU5UL0xQU0laRSBtaXNtYXRjaGVzIGFuZCBzb21lIG1pc3NpbmcgImNvbnN0IiBpbiB0aGUKCWhlYWRlcnMgcHJvdG90eXBlcy4KCgkqIGdyYXBoaWNzL3BzZHJ2L2luaXQuYywgZ3JhcGhpY3Mvd2luMTZkcnYvaW5pdC5jLCBncmFwaGljcy94MTFkcnYvYml0bWFwLmMsIGdyYXBoaWNzL3gxMWRydi9icnVzaC5jLCBncmFwaGljcy94MTFkcnYvaW5pdC5jLCBncmFwaGljcy94MTFkcnYvb2JqZWN0cy5jLCBpbmNsdWRlL2JpdG1hcC5oLCBpbmNsdWRlL2dkaS5oLCBpbmNsdWRlL3gxMWRydi5oLCBvYmplY3RzL2JpdG1hcC5jLCBvYmplY3RzL2JydXNoLmMsIG9iamVjdHMvZGliLmMsIG9iamVjdHMvb2VtYml0bWFwLmMsIHdpbmRvd3MvZ3JhcGhpY3MuYywgZ3JhcGhpY3MvbWV0YWZpbGVkcnYvaW5pdC5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglBZGRlZCBwQml0bWFwQml0cyBhbmQgcENyZWF0ZUJpdG1hcCB0byB0aGUgR0RJIGZ1bmN0aW9uIHRhYmxlIGFuZAoJbW92ZWQgdGhlIFgxMSBkZXBlbmRlbnQgc3R1ZmYgb3V0IG9mIG9iamVjdHMvYml0bWFwLmMgaW50byB4MTFkcnYuCgoJKiByZWxheTMyL3NoZWxsMzIuc3BlYywgZGxscy9zaGVsbDMyL3NoZWxsb2xlLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBpbmNsdWRlL3NoZWxsLmgsIGRsbHMvc2hlbGwzMi9waWRsLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBTSEdldFNpbXBsZUlETGlzdEZyb21QYXRoMzJBVy4KCVVuaWNvZGUtc2FmZTogUGF0aEZpbmRGaWxlbmFtZTMyQVcuCgoJKiBpbmNsdWRlL3NobG9iai5oOiBKdXN0aW4gQnJhZGZvcmQgPGp1c3RpbkBidXNib3kuc3BlZC51a2Fucy5lZHU+CglJRXh0cmFjdEljb24gaGFkIGFuIGV4dHJhIGMgaW4gYSBzdHJ1Y3QgZGVmaW5pdGlvbi4KCgkqIHJlbGF5MzIvZHBsYXkuc3BlYzoKCUpvaG4gUmljaGFyZHNvbiA8anJpY2hhcmRAemVhbGFuZC5tdi5zcGFtbGVzcy5jb20+CglBZGRlZCBlbnRyeSBmb3IgRGlyZWN0UGxheUVudW1lcmF0ZS4KCgkqIG9sZS9ubHMvc2t5Lm5scywgb2xlL29sZTJubHMuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQWRkZWQgU2xvdmFrIG5scy1yZXNvdXJjZXMuCgoJKiBvYmplY3RzL3JlZ2lvbi5jOiBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCUZpeGVkIGRpZmZlcmVuY2VzIGJldHdlZW4gU2V0UmVjdFJnbjE2IGFuZCBTZXRSZWN0UmduMzIuIEFsc28gYSBidWcgZml4IGZvcgoJQ3JlYXRlUm91bmRSZWN0UmduLgoKVHVlIE9jdCAyNyAxNTo0MTo1NCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogd2luZG93cy91c2VyLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRW51bURpc3BsYXlNb2RlcyogcmV0dXJucyBhIHN0YXRpYyBsaXN0IG9mIG1vZGVzIHdpdGggYWxsIGRlcHRocwoJKGhlbHBzIGhleGVuMmRlbW8pLCBDaGFuZ2VEaXNwbGF5U2V0dGluZ3MgcmV0dXJucyB0cnVlIGFsbCB0aGUgdGltZS4KCgkqIGluY2x1ZGUvd2ludHlwZXMuaCwgbXVsdGltZWRpYS9tbXN5c3RlbS5jLCByZWxheTMyL3dpbm1tLnNwZWM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVN0dWIgZm9yIG1pZGlPcGVuU3RyZWFtIChoZWxwcyBoZXhlbjJkZW1vKS4KCgkqIG9sZS9ubHMvZW5jLm5scywgb2xlL25scy9mcmMubmxzLCByZXNvdXJjZXMvc3lzcmVzX0ZyLnJjOgoJUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BjbGljLm5ldD4KCVNtYWxsIHBhdGNoIGZvciBiZXR0ZXIgRnJlbmNoIHN1cHBvcnQuCgoJKiBsb2FkZXIvZWxmLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQnVnZml4OiBtZW1vcnkgb3ZlcndyaXRlIGJ1Zy4KCk1vbiBPY3QgMjYgMTE6MDQ6MTMgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGNvbnRyb2xzL2VkaXQuYywgd2luZG93cy9jbGlwYm9hcmQuYzogUGFzY2FsIEN1b3EgPHBjdW9xQGVucy1seW9uLmZyPgoJMzItYml0IGNsaXBib2FyZCBzdXBwb3J0LgoKCSogd2luZG93cy9xdWV1ZS5jOiBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUJ1Z2ZpeCBmb3IgUVVFVUVfU2lnbmFsOiBBbHdheXMgdXNlIFBvc3RFdmVudCBpZiBubyB0aHJlYWQgaXMgd2FpdGluZwoJb24gdGhlIHF1ZXVlLgoKCSogd2luZG93cy9tZGkuYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglGaXhlZCBhIG1pbm9yIHByb2JsZW0gd2l0aCB0aGUgbWVudXMgZm9yIG1kaSBjaGlsZCB3aW5kb3dzLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglSZW1vdmVkIG5vIGxvbmdlciBuZWNlc3NhcnkgY29tbWVudGVkIG91dCBjb2RlLCBkZXN0cm95IG9sZCB3aW5kb3cKCXdoZW4gU2V0RGlzcGxheU1vZGUgaXMgY2FsbGVkIGFnYWluLCBFbnVtRGlzcGxheU1vZGVzIG5vdyByZXR1cm5zCglhbGwgcG9zc2libGUgbW9kZXMgKHVzaW5nIGEgc3RhdGljIGxpc3QpLgoKCSogbWVtb3J5L3ZpcnR1YWwuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBbm9uIHNoYXJlZCBtYXBwaW5nIGZpeGVkIGZvciBmaWxlIHNoYXJpbmcuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBPY3QgMjUgMTA6MzI6MjMgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIG9sZS9vbGUybmxzLmMsIGluY2x1ZGUvd2lubmxzLmg6IEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoJRml4ZXMgZm9yIExBTkdfTkVVVFJBTC4KCgkqIGluY2x1ZGUvdGFzay5oOgoJQWRkZWQgc29tZSBwYWRkaW5nIHRvIHRoZSBQREIgZm9yIGlsbC1iZWhhdmluZyBhcHBzIChwcm9ibGVtIHJlcG9ydGVkCglieSBBbmRyZWFzIE1vaHIpLgoKCSogZG9jdW1lbnRhdGlvbi9pb3BvcnQtdHJhY2UtaGludHMsIGluY2x1ZGUvZGVidWcuaCwgaW5jbHVkZS9kZWJ1Z2RlZnMuaCwgbWlzY2VtdS9pbnN0ci5jOgoJSm9uYXRoYW4gQnV6emFyZCA8amFiQGhleC5wcmVzdGVsLmNvLnVrPgoJQWRkZWQgYSBuZXcgZGVidWdnaW5nIGNoYW5uZWwgaW8gdG8gYWxsb3cgcmVhZC93cml0ZXMgb24gYSBwb3J0IHRvIGJlCglsb2dnZWQgdG8gYSBmaWxlLgoKCSogd2luZG93cy9rZXlib2FyZC5jOiBEYXZpZCBGYXVyZSA8RGF2aWQuRmF1cmVAaW5zYS1seW9uLmZyPgoJUmVwbGFjZWQgMHgwMCB3aXRoIDB4MDEgaW4gdGhlIHZrZXktPnNhbmNvZGUgYXJyYXksIHNvIHRoYXQgbm8ga2V5IGlzCglpZ25vcmVkLiAweDAwIGlzIHVzZWQgZm9yIGdlbmVyYXRlZCBrZXkgZXZlbnRzIG9ubHkuCgoJKiB3aW5kb3dzL21lc3NhZ2UuYywgd2luZG93cy9xdWV1ZS5jOgoJRG91Z2xhcyBSaWRnd2F5IDxyaWRnd2F5QHdpbmVocS5jb20+CglBUEkgRG9jdW1lbnRhdGlvbiBmb3IgU2VuZE1lc3NhZ2UsIEdldFRpY2tDb3VudCwgUG9zdFF1aXRNZXNzYWdlLAoJR2V0TWVzc2FnZVBvcywgR2V0TWVzc2FnZVRpbWUuCgoJKiBtZW1vcnkvdmlydHVhbC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCURlbGV0ZSB0aGUgZmlsZW5hbWUgZm9yIHRoZSBtYXBwaW5nIGluc3RhbnRseS4KCgkqIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCByZWxheTMyL3NoZWxsMzIuc3BlYzoKCU1pY2hhZWwgUG9vbGUgPHBvb2xlQGdyYXZpdG9uLnJlcy5jbXUuZWR1PgoJU3R1YiBmb3IgU0hTaW1wbGVJRExpc3RGcm9tUGF0aC4KCgkqIGxvYWRlci90YXNrLmM6IEZpeGVkIGJ1ZyBpbiBTd2l0Y2hTdGFja1RvLgoKU2F0IE9jdCAyNCAxMzowNjoxNiAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogY29udHJvbHMvc2Nyb2xsLmM6IFBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJQ2hlY2sgaWYgc2Nyb2xsYmFyIGFuZCBwYXJlbnQgYXJlIHZpc2libGUgYmVmb3JlIHJlZHJhdy4KCgkqIGlmMTYzMi9zaGVsbC5zcGVjLCBpbmNsdWRlL3NoZWxsLmgsIG1pc2Mvc2hlbGwuYywgcHJvZ3JhbXMvbm90ZXBhZC9tYWluLmMsIHJlbGF5MzIvc2hlbGwzMi5zcGVjOgoJS2FpIE1vcmljaCA8a2FpLm1vcmljaEBkYXJtc3RhZHQubmV0c3VyZi5kZT4KCUFkZGVkIERyYWcqMzIgZnVuY3Rpb25zLgoKCSogd2luZG93cy9ldmVudC5jOiBLYWkgTW9yaWNoIDxrYWkubW9yaWNoQGRhcm1zdGFkdC5uZXRzdXJmLmRlPgoJQWRkZWQgRHJhZyZEcm9wIGZyb20gS0RFIGFwcCB0byAxNi8zMiBiaXQgV2luZG96ZSBhcHAuCgoJKiB3aW5kb3dzL21lc3NhZ2UuYzogS2FpIE1vcmljaCA8a2FpLm1vcmljaEBkYXJtc3RhZHQubmV0c3VyZi5kZT4KCUFkZGVkIEZJWE1FIG1lc3NhZ2UgaW4gUG9zdE1lc3NhZ2UzMnggaWYgcGFyYW1ldGVycyBhcmUgdHJ1bmNhdGVkCgl3aGVuIGNhbGxpbmcgUG9zdE1lc3NhZ2UxNi4KCgkqIGluY2x1ZGUvcHJvY2Vzcy5oLCBzY2hlZHVsZXIvZXZlbnQuYywgc2NoZWR1bGVyL2hhbmRsZS5jLCBzY2hlZHVsZXIvcHJvY2Vzcy5jLCBzY2hlZHVsZXIvdGhyZWFkLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCUFkZGVkIHN1cHBvcnQgZm9yIGdsb2JhbCBoYW5kbGVzLCBpbXBsZW1lbnRlZCBDb252ZXJ0VG9HbG9iYWxIYW5kbGUuCglBbGxvY2F0ZSBzdGFydHVwIGRhdGEgYW5kIDE2LWJpdCBzdGFjayBmb3IgaW5pdGlhbCBwcm9jZXNzLgoKCSogZG9jdW1lbnRhdGlvbi93aW5lLnRleGluZm86IExlaWdoIFdlZGRpbmcgPGx3ZWRkaW5nQGNvcnBsaW5rLmNvbS5hdT4KCVNtYWxsIGZpeC4KCgkqIHByb2dyYW1zL3Byb2dtYW4vLmN2c2lnbm9yZSwgcHJvZ3JhbXMvcHJvZ21hbi9Fcy5yYywgcHJvZ3JhbXMvcHJvZ21hbi9NYWtlZmlsZS5pbiwgcHJvZ3JhbXMvd2luaGVscC8uY3ZzaWdub3JlLCBwcm9ncmFtcy93aW5oZWxwL0VzLnJjLCBwcm9ncmFtcy93aW5oZWxwL01ha2VmaWxlLmluLCBwcm9ncmFtcy9jbG9jay8uY3ZzaWdub3JlLCBwcm9ncmFtcy9jbG9jay9Fcy5yYywgcHJvZ3JhbXMvY2xvY2svTWFrZWZpbGUuaW4sIHByb2dyYW1zL25vdGVwYWQvLmN2c2lnbm9yZSwgcHJvZ3JhbXMvbm90ZXBhZC9Fcy5yYywgcHJvZ3JhbXMvbm90ZXBhZC9NYWtlZmlsZS5pbjoKCVBhYmxvIFNhcmF0eGFnYSA8c3J0eGdAY2hhbmFlLmFscGhhbmV0LmNoPgoJQWRkZWQgU3BhbmlzaCByZXNvdXJjZXMuCgoJKiBvbGUvbmxzL2V1cS5ubHMsIHJlc291cmNlcy9zeXNyZXNfRXMucmM6CglQYWJsbyBTYXJhdHhhZ2EgPHNydHhnQGNoYW5hZS5hbHBoYW5ldC5jaD4KCVNtYWxsIGNvcnJlY3Rpb25zLgoKCSogcmVsYXkzMi9rZXJuZWwzMi5zcGVjLCBzY2hlZHVsZXIvcHJvY2Vzcy5jOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglMb2FkTGlicmFyeUV4VyBzcGVjIGFkZGVkIChmdW5jdGlvbiB3YXMgdGhlcmUpLgoJU2V0UHJvY2Vzc1ByaW9yaXR5Qm9vc3Qgc3R1YiBhZGRlZC4KCgkqIG1zZG9zL2RwbWkuYzogUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglDb21waWxlIGZpeCBmb3IgU29sYXJpcy4KCgkqIGlmMTYzMi8uY3ZzaWdub3JlLCBpZjE2MzIvTWFrZWZpbGUuaW4sIGlmMTYzMi9idWlsdGluLmMsIGlmMTYzMi9kaXNwZGliLnNwZWMsIGluY2x1ZGUvZGlzcGRpYi5oLCBncmFwaGljcy9NYWtlZmlsZS5pbiwgZ3JhcGhpY3MvZGlzcGRpYi5jOgoJT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglJbXBsZW1lbnRlZCBEaXNwbGF5RGliLgoKCSogY29udHJvbHMvc3RhdGljLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJSGFjayB0byBzdXBwb3J0IGludGVnZXIgaWRzIGluIGFsbCBzdGF0aWMgY29udHJvbHMuCgoJKiBpbmNsdWRlL2RpbnB1dC5oLCB3aW5kb3dzL2RpbnB1dC5jOgoJTGlvbmVsIFVsbWVyIDx1bG1lckBkaXJlY3Rwcm92aWRlci5uZXQ+CglCZWdpbm5pbmcgb2YgbW91c2Ugc3VwcG9ydCBpbiBEaXJlY3RJbnB1dCAob25seSAic3RhbmRhcmQiIG1vdXNlCgljb25maWd1cmF0aW9uIHN1cHBvcnRlZCBmb3Igbm93KS4KCgkqIGluY2x1ZGUvKi5oLCBkbGxzL2NvbWN0bDMyLyouYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCB4eHhfVW5yZWdpc3RlcigpIGZ1bmN0aW9ucyB0byBhbGwgY29tbW9uIGNvbnRyb2xzLgoKCSogZGxscy9jb21jdGwzMi9jb21jdGwzMnVuZG9jLmMsIGRsbHMvY29tY3RsMzIvcGFnZXIuYywgZGxscy9jb21jdGwzMi90b29sYmFyLmMsIGRvY3VtZW50YXRpb24vY29tbW9uX2NvbnRyb2xzLCByZWxheTMyL2NvbWN0bDMyLnNwZWM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJU29tZSBtaW5vciBpbXByb3ZlbWVudHMgYW5kIGZpeGVzLgoKCSogZGxscy9jb21jdGwzMi9yZWJhci5jLCBpbmNsdWRlL3JlYmFyLmg6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJSW1wcm92ZWQgdGhlIHJlYmFyIGNvbnRyb2wuCgoJKiBkbGxzL2NvbWN0bDMyL3Rvb2x0aXBzLmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBzdXBwb3J0IGZvciB0cmFuc3BhcmVudCBhbmQgdHJhY2tpbmcgdG9vbHRpcHMuCgoJKiBjb250cm9scy9tZW51LmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlZCBhIHBvcHVwIG1lbnUgc2VsZWN0aW9uIGJ1Zy4KCgkqIHdpbmRvd3Mvbm9uY2xpZW50LmM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlZCBEcmF3Q2FwdGlvbjE2KCkgYW5kIERyYXdDYXB0aW9uVGVtcDE2KCkuCgoJKiB3aW5kb3dzL2tleWJvYXJkLmM6IERhdmlkIEZhdXJlIDxEYXZpZC5GYXVyZUBpbnNhLWx5b24uZnI+CglGaXhlZCB3YXJuaW5nLgoKCSogZ3JhcGhpY3MvcHNkcnYvTWFrZWZpbGUuaW4sIGdyYXBoaWNzL3BzZHJ2L2JpdG1hcC5jLCBncmFwaGljcy9wc2Rydi9icnVzaC5jLCBncmFwaGljcy9wc2Rydi9mb250LmMsIGdyYXBoaWNzL3BzZHJ2L2dyYXBoaWNzLmMsIGdyYXBoaWNzL3BzZHJ2L2luaXQuYywgZ3JhcGhpY3MvcHNkcnYvcHMuYywgaW5jbHVkZS9nZGkuaCwgaW5jbHVkZS9wc2Rydi5oLCBvYmplY3RzL2RpYi5jOgoJSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CglBZGRzIEFyYywgQ2hvcmQsIEdldENoYXJXaWR0aCwgUGllLCBQb2x5UG9seWdvbiwgUG9seVBvbHlsaW5lLCBSb3VuZFJlY3QsCglTZXRQaXhlbCwgaGF0Y2hlZCBicnVzaGVzIGFuZCBhIHN0dWIgZm9yIFN0cmV0Y2hESUJpdHMgdG8gdGhlIFBvc3RTY3JpcHQKCWRyaXZlci4KCgkqIGluY2x1ZGUvZGVidWcuaCwgaW5jbHVkZS9kZWJ1Z2RlZnMuaCwgaW5jbHVkZS9taXNjZW11LmgsIG1zZG9zL01ha2VmaWxlLmluLCBtc2Rvcy9pbnRlcnJ1cHRzLmM6CglKb3NlcGggUHJhbmV2aWNoIDxrbmlnaHRAYmFsdGltb3JlLnd3YXZlcy5jb20+CglBZGRlZCBzdXBwb3J0IGZvciBpbnQxNyBhbmQgaW50MTkuCgoJKiBtc2Rvcy9pbnQxOS5jOiBDYXJsIHZhbiBTY2hhaWsgPGNhcmxAZHJlYW1jb2F0LmNoZS51Y3QuYWMuemE+CglTdHVicyBmb3IgZG9zIG1vZGUgcmVib290IGludGVycnVwdC4KCgkqIG1zZG9zL2ludDE3LmM6IENhcmwgdmFuIFNjaGFpayA8Y2FybEBkcmVhbWNvYXQuY2hlLnVjdC5hYy56YT4KCVNvbWUgcHJpbnRlciBzdHVicyBmb3IgRE9TIGFkZGVkLgoKCSogbXNkb3MvaW50MTMuYzogSm9zZXBoIFByYW5ldmljaCA8a25pZ2h0QGJhbHRpbW9yZS53d2F2ZXMuY29tPgoJTW9yZSBzdHVicyBhZGRlZC4gVGhlc2UgY2hhbmdlcyBhcmUgb25seSBwYXJ0aWFsbHkgbWluZSwgSSBqdXN0IG1hZGUKCXRoZW0gY29tcGlsZS4KCgkqIG1zZG9zL2ludDEwLmM6IEpvc2VwaCBQcmFuZXZpY2ggPGtuaWdodEBiYWx0aW1vcmUud3dhdmVzLmNvbT4KCUFkZGVkIHNvbWUgdHJhY2VzIGFuZCBjbGVhbmVkIHVwIGEgY291cGxlIG9mIHRoaW5ncy4KCgkqIGRsbHMvc2hlbGwzMi9zaGVsbDMyX21haW4uaCwgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmMsIGRsbHMvc2hlbGwzMi9zaGxmb2xkZXIuYywgZGxscy9zaGVsbDMyL3NobHZpZXcuYywgaW5jbHVkZS9zaGVsbC5oLCBpbmNsdWRlL3NobG9iai5oLCBtZW1vcnkvc3RyaW5nLmMsIG9sZS9vbGUybmxzLmMsIHJlbGF5MzIvc2hlbGwzMi5zcGVjLCBkbGxzL3NoZWxsMzIvZGF0YW9iamVjdC5jLCBkbGxzL3NoZWxsMzIvZW51bWlkbGlzdC5jLCBkbGxzL3NoZWxsMzIvcGlkbC5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUNoYW5nZWQgc29tZSBzdHJpbmctc2hlbGwzMiBmdW5jdGlvbnMgdG8gMzJBVywgcGFyYW1ldGVyIGFyZQoJb3MgZGVwZW5kaW5nIDMyQSBvciAzMlcgKC13aW52ZXIgbnQzNTEgb3IgbnQ0MCksIHNvbWUgbmV3IGZ1bmN0aW9ucy4KCVNvbWUgZml4ZXMgaW4gb2xlMm5scy4KCU5ldyBPTEUyTkxTX0NoZWNrTG9jYWxlKCkgdG8gaGFuZGxlIExvY2FsZV9Vc2VyX0RlZmF1bHQgYW5kCglMb2NhbGVfU3lzdGVtX0RlZmF1bHQuCglTaGVsbDMyIG5vdyBkeW5hbWljbHkgbGlua3MgdG8gRFBBXyooKSwgY29tZGxnMzIgd29ya3MgYWdhaW4KCShjb21jdGwzMiBoZWFwIGFsbG9jIHBhdGNoIGJyb2tlIGl0KS4KCgkqIGluY2x1ZGUvd2ludmVyc2lvbi5oLCBtaXNjL3ZlcnNpb24uYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJQWRkZWQgVkVSU0lPTl9Jc09zVW5pY29kZSgpLgoKCSogc2NoZWR1bGVyL2hhbmRsZS5jOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJTW9yZSBvZmYtYnktb25lIGVycm9ycyBmaXhlZC4KCgkqIGluY2x1ZGUvZmlsZS5oLCBtaXNjL2NydGRsbC5jLCBtc2Rvcy92eGQuYywgd2luMzIvZmlsZS5jLCBmaWxlcy9maWxlLmM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglGaWxlIHNoYXJpbmcgZml4ZXMuCgpGcmkgT2N0IDIzIDE3OjI2OjQ0IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBtaXNjL2NvbW1kbGcuYzogTmljayBIb2xsb3dheSA8YWxmaWVAYWxmaWUuZGVtb24uY28udWs+CglCdWcgZml4LgoKCSogbG9hZGVyL2Rvcy9tb2R1bGUuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglGaXhlZCBET1MgZW52aXJvbm1lbnQgcGFzc2luZy4KCgkqIG1pc2MvbWFpbi5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCVN5c21ldHJpY3MzMlcgZm9yIFNQSV9HRVRJQ09OVElUTEVMT0dGT05UIHJldHVybnMgY29ycmVjdCBmb250bmFtZS4KCgkqIGluY2x1ZGUvZm9udC5oLCBvYmplY3RzL2ZvbnQuYywgb2JqZWN0cy9nZGlvYmouYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IEZPTlRfR2V0T2JqZWN0MzJXKCksIEdldE9iamVjdDMyVygpLgoKCSogcmVsYXkzMi91c2VyMzIuc3BlYywgd2luMzIvb3JkaW5hbHMuYywgd2luZG93cy91c2VyLmM6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU5ldyBzdHViIFJlZ2lzdGVyVGFza0xpc3QuCglOZXcgZnVuY3Rpb24gRW51bURpc3BsYXlTZXR0aW5nczMyVygpLgoKCSogbWlzYy9udGRsbC5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1vcmUgcGFyYW1ldGVyIGNoZWNraW5nIGluIFJsdENvcHlTaWQuCgoJKiB3aW5kb3dzL3dpbnByb2MuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglNb3JlIG1lc3NhZ2UgbWFwcGluZyAzMkE8LS0+MzJXIGZvciBFTV8sIENCXywgTEJfIGZvciBVbmljb2RlLgoKCSogcmVsYXkzMi8uY3ZzaWdub3JlLCByZWxheTMyL01ha2VmaWxlLmluLCByZWxheTMyL2F2aWZpbDMyLnNwZWMsIHJlbGF5MzIvYnVpbHRpbjMyLmM6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUFkZGVkIG5ldyBkbGwgYXZpZmlsMzIuZGxsLgoKCSogbG9hZGVyL2Rvcy9kb3N2bS5jLCBsb2FkZXIvZG9zL21vZHVsZS5jLCBtc2Rvcy9kcG1pLmMsIGluY2x1ZGUvZG9zZXhlLmg6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUZpcnN0IHNob3QgYXQgRFBNSSByZWFsbW9kZSBjYWxscy4KCgkqIGxvYWRlci9tb2R1bGUuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJRml4ZWQgc2V2ZXJhbCBidWdzIHdpdGggRExMIGluaXRpYWxpemF0aW9uLgoKVGh1IE9jdCAyMiAxNzowMjoyNSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogc2NoZWR1bGVyL3N5c2xldmVsLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkZWQgb3JkaW5hbCBmb3IgdHdvIHN5c2xldmVsIGZ1bmN0aW9ucy4KCgkqIG11bHRpbWVkaWEvbWlkaS5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUFub3RoZXIgbWlzc2luZyBXSU5BUEkuCgoJKiBpbmNsdWRlL21tc3lzdGVtLmg6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU21hbGwgY29ycmVjdGlvbnMgaW4gbW1pbyBkZWNsYXJhdGlvbnMuCgoJKiBsb2FkZXIvcGVfaW1hZ2UuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglUYWtlIHZpcnR1YWwgc2l6ZXMgaW4gYWNjb3VudCBmb3IgdGhlIHRvdGFsIHZtYSBzaXplLgoKCSogb2xlL25scy9yb20ubmxzOiBEaW1pdHJpZSBPLiBQYXVuIDxkaW1pQGNzLnRvcm9udG8uZWR1PgoJQWRkIHNvbWUgbW9yZSBOTFMgZGVmaW5pdGlvbnMgZm9yIHRoZSBSb21hbmlhbiBsYW5ndWFnZS4KCgkqIG11bHRpbWVkaWEvZHNvdW5kLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJU29tZSBwcm9ncmFtcyAocXVha2UyIGV0IGFsKSBkbyBjaGVjayBmb3IgRFNDQVBTX0VNVUxEUklWRVIgYW5kIHN0b3AKCXRvIHdvcmsuICdBZGp1c3QnIGNhcHMgZmxhZ3MgYWNjb3JkaW5nbHkuCgoJKiBvbGUvY29tcG9iai5jLCByZWxheTMyL29sZTMyLnNwZWM6CglQZXRlIFJhdHpsYWZmIDxwcmF0emxhZmZAY2ZhLmhhcnZhcmQuZWR1PgoJU3R1YiBmb3IgQ29DcmVhdGVHdWlkKCkuCgoJKiBkbGxzL2NvbWN0bDMyL3RyZWV2aWV3LmMsIG11bHRpbWVkaWEvbWNpY2RhLmM6CglCcmlhbiBMaXR6aW5nZXIgPGJyaWFuQGxpdHppbmdlci5jb20+CglGaXhlcyBmb3IgRnJlZUJTRC4KCgkqIGxpYnRlc3QvLmN2c2lnbm9yZSwgbGlidGVzdC9NYWtlZmlsZS5pbjoKCVBldHRlciBSZWluaG9sZHRzZW4gPHBlcmVAbWluZXJ2YS5jYy51aXQubm8+CglNYWtlIHN1cmUgaGVsbG8zcmVzLmggaXMgZ2VuZXJhdGVkIGV2ZW4gaWYgJ21ha2UgZGVwZW5kJyBuZXZlciBoYXMKCWJlZW4gcnVuLgoKCSogd2luZG93cy9ub25jbGllbnQuYzogTkYgU3RldmVucyA8bm9ybWFuQGFyY2FkeS51LW5ldC5jb20+CglGaXhlZCBtb3ZpbmcgYW5kIHNpemluZyBvZiBjaGlsZCB3aW5kb3dzLgoKCSogaW5jbHVkZS90c194bGliLmgsIHRvb2xzL21ha2VfWDExd3JhcHBlcnMsIHRzeDExL1gxMV9jYWxscywgdHN4MTEvdHNfeGxpYi5jLCB3aW5kb3dzL2tleWJvYXJkLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVhRdWVyeUtleW1hcCAtPiBUU1hRdWVyeUtleW1hcCAoZml4ZXMgdGhlIFhJTyBlcnJvcnMgcmVwb3J0ZWQpLgoKV2VkIE9jdCAyMSAxNzoyMDo0OCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogaW5jbHVkZS9kb3NleGUuaCwgbG9hZGVyL2Rvcy9kb3N2bS5jLCBtaXNjZW11L21haW4uYzoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJQWRkZWQgaW5kaXJlY3Rpb24gZm9yIGN0eF9kZWJ1ZyB0byB0aGUgRE9TIGxvYWRlciwgc28gV2luZWxpYiB3b3JrcwoJYWdhaW4uCgoJKiBtZW1vcnkvdmlydHVhbC5jOiBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCVN1cHBvcnQgYW5vbiBzaGFyZWQgbWFwcGluZ3MgdXNpbmcgdGVtcG9yYXJ5IGZpbGVzICh3b250IGJlIGRlbGV0ZWQKCXlldCkuCgoJKiBtaXNjL21haW4uYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglXYXMgZnJlZWluZyB0aGUgaW5jb3JyZWN0IHBvaW50ZXJzIC0+IGNyYXNoIGluIG1hbGxvY3MvZnJlZXMuCgoJKiBmaWxlcy9kb3NfZnMuYywgcmVsYXkzMi9rZXJuZWwzMi5zcGVjOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglEZWZpbmVEb3NEZXZpY2Ugc3R1YiBhZGRlZC4KCgkqIG1pc2NlbXUvbWFpbi5jLCB3aW5lLmluaTogQ2hhZCBQb3dlbGwgKHB4cHhAdXNhLm5ldCkKCUFkZGVkIGEgZGVmYXVsdCBwcm9ncmFtIG9wdGlvbiBpbiB3aW5lLmNvbmYgaW4gc2VjdGlvbiBbcHJvZ3JhbXNdIGtleQoJRGVmYXVsdC4KCgkqIGluY2x1ZGUvd2ludHlwZXMuaDogRGF2aWQgQ3V0aGJlcnQgPGRhY3V0QGVjZS5jbXUuZWR1PgoJQmV0dGVyIGZpeCBmb3IgdGhpc19pc19hX3N5bnRheF9lcnJvci4KCgkqIG9sZS9ubHMvKi5ubHM6CglQYWJsbyBTYXJhdHhhZ2EgPHNydHhnQGNoYW5hZS5hbHBoYW5ldC5jaD4KCUFkZGVkIHRoZSBlbnRyaWVzIGZvciBMT0NBTEVfU0lTTzYzOUxBTkdOQU1FIGFuZAoJTE9DQUxFX1NJU08zMTY2Q1RSWU5BTUUuCgoJKiBkb2N1bWVudGF0aW9uL3dpbmUubWFuOiBKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CglVcGRhdGVkIG1hbnBhZ2UuCgoJKiByZWxheTMyL21zYWNtMzIuc3BlYzogUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglGaXhlZCB3cm9uZyBvcmRpbmFscy4KCgkqIG9iamVjdHMvcmVnaW9uLmM6IE5GIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJRml4ZWQgYSBidWcgaW4gUmVjdEluUmVnaW9uLgoKVHVlIE9jdCAyMCAxNToyNjoyNiAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogbXNkb3MvaW50ZXJydXB0cy5jOiBORiBTdGV2ZW5zIDxub3JtYW5AYXJjYWR5LnUtbmV0LmNvbT4KCVJlbW92ZWQgYW4gaW5jb3JyZWN0IGVycm9yIG1lc3NhZ2UuCgoJKiBmaWxlcy9kcml2ZS5jOiBQZXR0ZXIgUmVpbmhvbGR0c2VuIDxwZXJlQG1pbmVydmEuY2MudWl0Lm5vPgoJTWFrZSBzdXJlIHRoZSBhY2Nlc3MgZnVuY3Rpb25zIGFyZSBhbHdheXMgdXNlZCB0byBnZXQgbGFiZWwgYW5kIHNlcmlhbAoJbnVtYmVyLgoKTW9uIE9jdCAxOSAwODo0ODoyNCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogb2xlL29sZTJubHMuYzogRXJpYyBQb3VlY2ggPGVyaWMucG91ZWNoQGhvbC5mcj4KCUZpeGVkIGJ1ZyBvbiBwbGF0Zm9ybXMgd2VyZSBidWZmZXJzIHJldHVybmVkIGJ5IGdldGVudigpIHNoYWxsIG5vdCBiZQoJZnJlZSgpJ2VkLiBBZGRlZCBGcmVuY2ggKGRlZmF1bHQpIGluIGxvY2FsZSBoYW5kbGluZy4KCgkqIGluY2x1ZGUvd2ludHlwZXMuaDogRGF2ZSBDdXRoYmVydCA8ZGFjdXRAZWNlLmNtdS5lZHU+CglDaGFuZ2VkICJ0aGlzIGlzIGEgc3ludGF4IGVycm9yIiB0byAidGhpc19pc19hX3N5bnRheF9lcnJvciIgdG8gbWFrZSBhCgljb21waWxlLXRpbWUgZXJyb3IgbWVzc2FnZSBtYWtlIG1vcmUgc2Vuc2UuCgoJKiBzY2hlZHVsZXIvaGFuZGxlLmM6CglVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CglGaXhlZCBvZmYgYnkgb25lIGVycm9yIGluIEhBTkRMRV9HZXRPYmpQdHIuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBPY3QgMTggMTQ6NDg6MzEgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGZpbGVzL2ZpbGUuYzogVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoJVHJ5IHRvIGltcGxlbWVudCB0aGUgT0ZfU0hBUkVfWFhYIG9wdGlvbnMuCglNb3ZlIHRoZSBtb2RlIHRyYW5zbGF0aW9ucyB0byBmdW5jdGlvbnMuCgoJKiBpbmNsdWRlL21haW4uaCwgb2xlL2NvbXBvYmouYywgb2xlL2lmcy5jLCBvbGUvb2xlMmRpc3AuYywgb2xlL29sZTJubHMuYywgb2xlL29sZXN2ci5jLCBvbGUvc3RvcmFnZS5jOgoJTWF0dGhldyBCZWNrZXIgPG1iZWNrZXJAZ2xhc3NjaXR5Lm5ldD4KCURvY3VtZW50YXRpb24gdXBkYXRlcy4KCgkqIG9sZS9jb21wb2JqLmMsIHJlbGF5MzIvb2xlMzIuc3BlYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCUFkZGVkIHN0dWIgZm9yIENvU2V0U3RhdGUzMi4KCgkqIG1pc2NlbXUvbWFpbi5jOiBDaGFkIFBvd2VsbCA8cHhweEB1c2EubmV0PgoJQWRkZWQgYWJpbGl0eSB0byByZWFkIGEgc3RhcnR1cCBwcm9ncmFtIGZyb20gd2luZS5pbmkgZmlsZS4KCVB1dCBpdCBpbiBzZWN0aW9uIFtwcm9ncmFtc10ga2V5IFN0YXJ0dXAuCgoJKiBpbmNsdWRlL3RyYWNrYmFyLmgsIGluY2x1ZGUvdHJlZXZpZXcuaCwgZGxscy9jb21jdGwzMi90cmFja2Jhci5jLCBkbGxzL2NvbWN0bDMyL3RyZWV2aWV3LmM6CglBbGV4IFByaWVtIDxhbGV4cEBzY2kua3VuLm5sPgoJRnVydGhlciBpbXByb3ZlbWVudHMuCgoJKiBpbmNsdWRlL2N1cnNvcmljb24uaCwgb2JqZWN0cy9jdXJzb3JpY29uLmM6CglUdXJjaGFub3YgU2VyZ2V5IDx0dXJjaGFub3ZAdXNhLm5ldD4KCUltcGxlbWVudGVkIExvYWRDdXJzb3JGcm9tRmlsZSwgZml4ZWQgRHJhd0ljb25FeCB0byBzdXBwb3J0IG9mZnNjcmVlbgoJZHJhd2luZywgZml4ZWQgQ1VSU09SSUNPTl9DcmVhdGVGcm9tUmVzb3VyY2UgdG8gc3VwcG9ydCBMUl8gc2VtYW50aWNzLgoKCSogaW5jbHVkZS9iaXRtYXAuaCwgb2JqZWN0cy9iaXRtYXAuYzoKCVR1cmNoYW5vdiBTZXJnZXkgPHR1cmNoYW5vdkB1c2EubmV0PgoJRml4ZWQgTG9hZEltYWdlIHRvIHN1cHBvcnQgYWxtb3N0IGFsbCBMUl8gZmxhZ3MuCgoJKiBvYmplY3RzL2RpYi5jOiBUdXJjaGFub3YgU2VyZ2V5IDx0dXJjaGFub3ZAdXNhLm5ldD4KCUZpeGVkIGJ1ZyBpbiBESUJfU2V0SW1hZ2VCaXRzX1JMRTggKGJlY2F1c2UgJ2NvbG9yJyB2YXIgd2FzIFdPUkQsIGFsbAoJQ09MT1JFRnMgaGFkIHJlZCBwYXJ0IHplcm9lZCkgdGhhdCBtYWRlIHBsZW50eSBvZiBjeWFuIGNvbG9ycywgbWlub3IKCWJ1ZyBmaXhlcywgY2hhbmdlcyB0byBzdXBwb3J0IExSXyBmbGFncy4KCgkqIGluY2x1ZGUvZ2xvYmFsLmgsIG1lbW9yeS92aXJ0dWFsLmM6CglUdXJjaGFub3YgU2VyZ2V5IDx0dXJjaGFub3ZAdXNhLm5ldD4KCUFkZGVkIFZJUlRVQUxfTWFwRmlsZVcgdG8gbWFwIGZpbGUgdG8gbWVtb3J5IGluIG9uZSBmdW5jdGlvbiBjYWxsLgoKCSogaW5jbHVkZS9kZHJhdy5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgaW5jbHVkZS93aW50eXBlcy5oLCB3aW5kb3dzL211bHRpbW9uLmM6CglUdXJjaGFub3YgU2VyZ2V5IDx0dXJjaGFub3ZAdXNhLm5ldD4KCU1vdmVkIE11bHRpbW9uaXRvciBBUEkgZGVjbGFyYXRpb25zIHRvIHdpbmRvd3MuaC4KCgkqIGlmMTYzMi91c2VyLnNwZWMsIGluY2x1ZGUvZHJpdmVyLmgsIG11bHRpbWVkaWEvYXVkaW8uYywgbXVsdGltZWRpYS9tY2lhbmltLmMsIG11bHRpbWVkaWEvbWNpY2RhLmMsIG11bHRpbWVkaWEvbWlkaS5jLCBtdWx0aW1lZGlhL21tc3lzdGVtLmMsIHJlbGF5MzIvd2lubW0uc3BlYywgd2luZG93cy9kcml2ZXIuYzoKCVR1cmNoYW5vdiBTZXJnZXkgPHR1cmNoYW5vdkB1c2EubmV0PgoJSW1wbGVtZW50ZWQgRGVmRHJpdmVyUHJvYzMyIGZyb20gd2lubW0uZGxsLgoKCSogY29udHJvbHMvc2Nyb2xsLmMsIGluY2x1ZGUvc2Nyb2xsLmgsIHdpbmRvd3MvbWRpLmMsIHdpbmRvd3Mvbm9uY2xpZW50LmM6CglBbGV4IEtvcm9ia2EgPGtvcm9ia2FAYW1zLnN1bnlzYi5lZHU+CglHb3QgcmlkIG9mIGZsaWNrZXJpbmcgc2Nyb2xsYmFyIGFycm93cy4gTURJIHNjcm9sbGluZyBzcGVlZGVkIHVwIGEKCWJpdC4KCgkqIGluY2x1ZGUvd2lubmxzLmgsIG9sZS9ubHMvZGV1Lm5scywgb2xlL29sZTJubHMuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJR2V0TG9jYWxlSW5mbzMyQSBjYW4gaGFuZGxlIGxlbj0wIG5vdywgc2V0cyBMYXN0RXJyb3IgYW5kIHRvdWNoZXMKCWJ1ZmZlciBvbmx5IHdoZW4gbmVjZXNzYXJ5LgoJVXBkYXRlZCBkZXUubmxzIGFuZCBzb21lIExDVFlQRVMgaW4gd2lubmxzLmguCgoJKiBpZjE2MzIvcmVsYXkuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCUNhbGxQcm9jW0V4XTMyVyBjYWxsZWQgd2l0aCBscFByb2NBZGRyZXNzPT1OVUxMIHNob3VsZCByZXR1cm4gemVybyBhbmQKCW5vdCBjcmFzaC4KClNhdCBPY3QgMTcgMTM6MDc6NDggMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIGRsbHMvY29tY3RsMzIvY29tbWN0cmwuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglSZWR1Y2VkIGh1Z2UgKDFHQikgaGVhcCBjcmVhdGlvbiB0aGF0IGNhdXNlZCBTdGFyY3JhZnQgdG8gZmFpbC4KCgkqIGluY2x1ZGUvZG9zZXhlLmgsIGluY2x1ZGUvbW9kdWxlLmgsIGxvYWRlci9kb3MvZG9zdm0uYywgbXVsdGltZWRpYS9kcGxheS5jLCB3aW5kb3dzL2RpYWxvZy5jOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglDb21waWxlIGZpeCBmb3IgU29sYXJpcy4KCgkqIG11bHRpbWVkaWEvbWlkaS5jOiBQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCUNvbXBpbGUgZml4IGZvciBub24gT1NTIHN5c3RlbXMuCgoJKiBncmFwaGljcy9kZHJhdy5jOiBQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCUNvbXBpbGUgZml4IGZvciBub24gWEY4Ni1ER0Egc3lzdGVtcy4KCgkqIGxpYnRlc3QvTWFrZWZpbGUuaW4sIGxpYnRlc3Qvdm9saW5mby5jOgoJUGV0dGVyIFJlaW5ob2xkdHNlbiA8cGVyZUB0ZC5vcmcudWl0Lm5vPgoJTmV3IGZpbGUgdG8gdGVzdCBEUklWRV9HZXRMYWJlbC4KCgkqIG11bHRpbWVkaWEvbWNpY2RhLmM6IFBldGVyIEh1bm5pc2V0dCA8aHVubmlzZUBub3J0ZWwuY2E+CglTbWFsbCwgc3Vib3B0aW1hbCwgZml4IGZvciAzMiBiaXQgY2RhdWRpbyBvcGVuIHJvdXRpbmVzLiBOZWVkcyBwcm9wZXIKCTMyYml0IGNkYXVkaW8gYml0IHN1cHBvcnQgYmVmb3JlIGl0IGNhbiBiZSByZW1vdmVkLi4uCgoJKiBncmFwaGljcy9kZHJhdy5jOiBQZXRlciBIdW5uaXNldHQgPGh1bm5pc2VAbm9ydGVsLmNhPgoJQWRkZWQgYSBidW5jaCBvZiBzdHVicyBmb3IgZGRyYXcgc3VmYWNlIHJvdXRpbmVzLiBBbGwgc3R1YnMgZm9yCglzdXJmYWNlIHByZXNlbnQgbm93LgoJQ29tbWVudGVkIG91dCBtZXNzYWdlIHB1bXAgY2FsbHMuIEkgZG9uJ3Qgc2VlIGEgcmVhc29uIGZvciB0aGVtIGJlaW5nCgl0aGVyZS4gRXZlcnl0aGluZyB3b3JrcyBmaW5lIHdpdGggLWRlc2t0b3AgYW5kIC1tYW5hZ2VkIHN0aWxsIGhhcwoJcHJvYmxlbXMuIERpc2FncmVlbWVudHM/CgoJKiBvbGUvb2xlMm5scy5jOiBKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCUZpeGVkIEdldExvY2FsZUluZm8zMkEgZm9yIG90aGVyIGxhbmd1YWdlcyB0aGFuIGVuX3VrLgoJTWFkZSBpdCByZWNvZ25pc2UgTE9DQUxFX1NZU1RFTV9ERUZBVUxULCBMT0NBTEVfU1lTVEVNX0RFRkFVTFQgYW5kCglsYXN0IGJ1dCBub3QgbGVhc3QgdGhlIGZpcnN0IGFyZ3VtZW50IGxjaWQgd2hlcmUgaXMgYWxsIGFib3V0Li4uCgoJKiBpbmNsdWRlL3N5c2xldmVsLmgsIG1pc2MvcmVnaXN0cnkuYywgbXVsdGltZWRpYS9kcGxheS5jLCBtdWx0aW1lZGlhL2Rzb3VuZC5jLCBtdWx0aW1lZGlhL21tc3lzdGVtLmMsIG11bHRpbWVkaWEvdGltZS5jLCB3aW5kb3dzL2NhcmV0LmMsIGRsbHMvbXNhY20zMi9idWlsdGluLmM6CglNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCUZpeGVkIHNvbWUgbW9yZSBtaXNzaW5nIFdJTkFQSXMgKGhvcGVmdWxseSBjb3JyZWN0KS4KCgkqIG9sZS9vbGUybmxzLmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRml4ZWQgdGhlID0gLT4gPT0gYnVnLgoKCSogbXNkb3MvaW50MmYuYzogSm9zZXBoIFByYW5ldmljaCA8a25pZ2h0QGJhbHRpbW9yZS53d2F2ZXMuY29tPgoJU2hlbGwgcGFyYW1ldGVycyAoY29uZmlnLnN5cykgYW5kIEFOU0kgc3VwcG9ydCBzdHVicy4KCgkqIG1zZG9zL01ha2VmaWxlLmluOiBKb3NlcGggUHJhbmV2aWNoIDxrbmlnaHRAYmFsdGltb3JlLnd3YXZlcy5jb20+CglBZGRlZCBpbnQxNi5jIGFuZCBpbnQyOS5jLgoKCSogaW5jbHVkZS9taXNjZW11LmgsIG1zZG9zL2ludGVycnVwdHMuYzoKCUpvc2VwaCBQcmFuZXZpY2ggPGtuaWdodEBiYWx0aW1vcmUud3dhdmVzLmNvbT4KCU1vcmUgaW50ZXJydXB0cyB0aGF0IGNhbiBiZSBkb25lIGZyb20gRE9TIG1vZGUuCgoJKiBtc2Rvcy9pbnQyOS5jOiBKb3NlcGggUHJhbmV2aWNoIDxrbmlnaHRAYmFsdGltb3JlLnd3YXZlcy5jb20+CglBZGRlZCBpbnQyOSAoRmFzdCBXcml0ZSB0byBTY3JlZW4pIHN1cHBvcnQuCgoJKiBtc2Rvcy9pbnQxNi5jLCBpbmNsdWRlL2RlYnVnLmgsIGluY2x1ZGUvZGVidWdkZWZzLmg6CglKb3NlcGggUHJhbmV2aWNoIDxrbmlnaHRAYmFsdGltb3JlLnd3YXZlcy5jb20+CglBZGRlZCBpbnQxNiAoS2V5Ym9hcmQpIHN1cHBvcnQsIG1vc3RseSBzdHVicy4KCkZyaSBPY3QgMTYgMTU6NDA6MjEgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHJlbGF5MzIvc2hlbGwzMi5zcGVjLCBkbGxzL3NoZWxsMzIvcGlkbC5jLCBkbGxzL3NoZWxsMzIvc2hlbGwzMl9tYWluLmMsIGRsbHMvc2hlbGwzMi9zaGVsbG9yZC5jLCBkbGxzL3NoZWxsMzIvc2hsZm9sZGVyLmMsIGRsbHMvc2hlbGwzMi9zaGx2aWV3LmMsIGluY2x1ZGUvc2hsb2JqLmg6CglKdWVyZ2VuIFNjaG1pZWQgPGp1ZXJnZW4uc2NobWllZEBtZXRyb25ldC5kZT4KCU1hbnkgYnVnZml4ZXMsIG5ldyBzdHVicyBTSEdldFJlYWxJREwsIFNIUmVnUXVlcnlWYWx1ZTMyVywKCVNIUmVnUXVlcnlWYWx1ZUV4MzJXLCBTdHJSZXRUb1N0ck4sIFN0ckNoclcsIFNIQWxsb2NTaGFyZWQsCglTSExvY2tTaGFyZWQsIFNIVW5sb2NrU2hhcmVkLCBTSEZyZWVTaGFyZWQsIFNldEFwcFN0YXJ0aW5nQ3Vyc29yMzIsCglTSExvYWRPTEUzMiwgU2hlbGxfTWVyZ2VNZW51czMyLCBQYXRoR2V0RHJpdmVOdW1iZXIzMiwgRHJpdmVUeXBlMzIsCglTSEFib3J0SW52b2tlQ29tbWFuZCwgU0hPdXRPZk1lbW9yeU1lc3NhZ2VCb3gsIFNIRmx1c2hDbGlwYm9hcmQuCgoJKiBtaXNjL250ZGxsLmMsIHJlbGF5MzIvbnRkbGwuc3BlYzoKCURpZXRtYXIgS2xpbmcgPGRpZXRtYXIua2xpbmdAdXNhLm5ldD4KCUFkZGVkIHVuZG9jdW1lbnRlZCBmdW5jdGlvbiBSdGxPcGVuQ3VycmVudFVzZXIuCgoJKiBvYmplY3RzL2N1cnNvcmljb24uYywgbWlzYy9zaGVsbC5jLCBtaXNjL3Zlci5jLCBtaXNjL3ZlcnNpb24uYywgbG9hZGVyL2VsZi5jLCBsb2FkZXIvbW9kdWxlLmMsIGxvYWRlci9wZV9pbWFnZS5jLCBsb2FkZXIvcGVfcmVzb3VyY2UuYywgaW5jbHVkZS9uZWV4ZS5oLCBpbmNsdWRlL3BlX2ltYWdlLmgsIGluY2x1ZGUvcGVleGUuaCwgZGVidWdnZXIvZGJnbWFpbi5jLCBkZWJ1Z2dlci9tc2MuYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCVJlbmFtZWQgYWxsIExQSU1BR0VfKiB0eXBlcyB0byBQSU1BR0VfKi4KClRodSBPY3QgMTUgMTM6MDM6MTAgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHdpbmRvd3Mvd2lucG9zLmM6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglGaXhlZCBhbiBlcnJvciB3aGVuIGFuIG93bmVkIHdpbmRvdyBhY3RpdmF0ZXMgaXRzIG93bmVyIGR1cmluZwoJY3JlYXRpb24uCgoJKiB3aW5kb3dzL2RlZmRsZy5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJQ2xvc2luZyBhIGRpYWxvZyB1c2luZyB0aGUgbWVudSBiYXIgKCJ4IiBvciAiLSIgYnV0dG9uIG9yIHdpbmRvd3MKCW1lbnUpIG11c3QgZ2VuZXJhdGUgYSBXTV9DT01NQU5EK0lEQ0FOQ0VMIG1lc3NhZ2UsIHVubGlrZSBjbG9zaW5nCglub3JtYWwgd2luZG93cyB3aGVuIERlc3Ryb3lXaW5kb3coKSBpcyBjYWxsZWQuCgoJKiBkbGxzL3NoZWxsMzIvcGlkbC5jOgoJTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglBZGRlZCBtaXNzaW5nIFdJTkFQSXMuCgoJKiB3aW5kb3dzL3dpbnBvcy5jLCB3aW4zMi9vcmRpbmFscy5jLCByZWxheTMyL3VzZXIzMi5zcGVjOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgc3R1YnMgUHJpdmF0ZUV4dHJhY3RJY29uRXhbQVddLCBQcml2YXRlRXh0cmFjdEljb25zVywKCVJlZ2lzdGVyU2hlbGxIb29rV2luZG93LCBEZXJlZ2lzdGVyU2hlbGxIb29rV2luZG93LCBHZXRQcm9nbWFuV2luZG93LAoJR2V0VGFza21hbldpbmRvdywgU2V0UHJvZ21hbldpbmRvdywgU2V0U2hlbGxXaW5kb3dFeCwKCVNldFRhc2ttYW5XaW5kb3cuCgoJKiByZWxheTMyL250ZGxsLnNwZWMsIG1pc2MvbnRkbGwuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IHN0dWJzIE50UXVlcnlJbmZvcm1hdGlvblRocmVhZCwgTnRRdWVyeUluZm9ybWF0aW9uVG9rZW4sCglSdGxBbGxvY2F0ZUFuZEluaXRpYWxpemVTaWQsIFJ0bEVxdWFsU2lkLCBSdGxGcmVlU2lkLgoKCSogbXVsdGltZWRpYS9tbXN5c3RlbS5jOiBUdXJjaGFub3YgU2VyZ2V5IDx0dXJjaGFub3ZAdXNhLm5ldD4KCUZpeGVkIFBsYXlTb3VuZCB0byBzdGFydCBpdHMgdGhyZWFkIHRoZSByaWdodCB3YXkuCgpXZWQgT2N0IDE0IDE4OjQwOjM1IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBjb250cm9scy9jb21iby5jLCBjb250cm9scy9saXN0Ym94LmM6CglBbGV4IEtvcm9ia2EgPGtvcm9ia2FAYW1zLnN1bnlzYi5lZHU+CglDQl9TRVRDVVJTRUwgYW5kIHNvbWUgb3RoZXIgZml4ZXMuCgoJKiB3aW5kb3dzL3F1ZXVlLmM6IEFsZXggS29yb2JrYSA8a29yb2JrYUBhbXMuc3VueXNiLmVkdT4KCUJldHRlciBRVUVVRV9GbHVzaE1lc3NhZ2VzKCkuCgoJKiByZWxheTMyL2dkaTMyLnNwZWMsIG9iamVjdHMvZm9udC5jLCBpbmNsdWRlL3dpbmRvd3MuaCwgaWYxNjMyL2dkaS5zcGVjOgoJTW9zaGUgVmFpbmVyIDxtb3NoZXZAZWFzeWJhc2UuY29tPgoJUGFydGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBHZXRPdXRsaW5lVGV4dE1ldHJpY3MzMkEuCglBZGRlZCBzdHJ1Y3R1cmVzIGZvciBPVVRMSU5FVEVYVE1FVFJJQ1MuCgoJKiBvYmplY3RzL2RjLmMsIGluY2x1ZGUvZ2RpLmgsIGdyYXBoaWNzL3gxMWRydi9iaXRibHQuYywgZ3JhcGhpY3MveDExZHJ2L2JpdG1hcC5jLCBncmFwaGljcy94MTFkcnYvaW5pdC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglEbyBub3QgY2xpcCBzb3VyY2UgcmVjdGFuZ2xlIGV2ZW4gYnkgdmlzaWJsZSByZWdpb24gZm9yIGJpdGJsdHMuCglBZGRlZCBmaWVsZCAndG90YWxFeHRlbnQnIHRvIFdJTl9EQ19JTkZPLgoKCSogbXNkb3MvdnhkLmM6IFVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJQWRkZWQgc3R1YiBmb3IgVk1NIFBNIEFQSSBBSD0wMjZbZGVdIChuZXZlciBzYXkgJ3NhZmUgbW9kZScpLgoKCSogbWVtb3J5L2hlYXAuYzogVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglCdWdmaXg6IExvY2FsMzJGcmVlIGNhdXNlZCBmcmVlIGhhbmRsZXMgbGlzdCBjb3JydXB0aW9uLgoKCSogaW5jbHVkZS9kZWJ1Z3Rvb2xzLmg6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJRml4ZWQgLS1kaXNhYmxlLWRlYnVnIGNvbmZpZyBvcHRpb24uCgpUdWUgT2N0IDEzIDEyOjUwOjA0IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiByZWxheTMyL3NoZWxsMzIuc3BlYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmM6CglQZXR0ZXIgUmVpbmhvbGR0c2VuIDxwZXJlQHRkLm9yZy51aXQubm8+CglBZGRlZCBzdHVicyBTSFJlZ0Nsb3NlS2V5KCksIFNIUmVnT3BlbktleVtBV10oKSwgU0hSZWdRdWVyeVZhbHVlRXhBKCkKCWFuZCBGaWxlSWNvbkluaXQoKSBuZWVkZWQgYnkgV2luOTUgZXhwbG9yZXIuCgpNb24gT2N0IDEyIDA3OjI1OjU0IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiB3aW5kb3dzL2RpYWxvZy5jLCBjb250cm9scy9idXR0b24uYywgY29udHJvbHMvbWVudS5jOgoJTm9ybWFuIFN0ZXZlbnMgPG5vcm1hbkBhcmNhZHkudS1uZXQuY29tPgoJSW1wcm92aW5nIGtleWJvYXJkIGhhbmRsaW5nLCBpbmNsdWRpbmcgYWNjZWxlcmF0b3Iga2V5cyBpbiBkaWFsb2cKCWJveGVzLiBBbHNvIGZpeGVzIGVudGVyIGtleSBpbiBBZ2VudDMyIGVkaXQgYm94LgoKU3VuIE9jdCAxMSAxOTozNzoyMyAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEB3aW5laHEuY29tPgoKCSogbWlzYy9jb21tZGxnLmM6IEVyaWMgUG91ZWNoICA8ZXJpYy5wb3VlY2hAbGVtZWwuZnI+CglBZGRlZCBzdXBwb3J0IGluIGZpbGUgZGlhbG9nIGJveGVzIGhhbmRsaW5nIGZvciBmaWx0ZXJzIGxpa2UKCSIqLnR4dDsqLmJhdCIuCgoJKiB3aW4zMi9rZXJuZWwzMi5jLCBzY2hlZHVsZXIvdGhyZWFkLmMsIGxvYWRlci9tb2R1bGUuYywgbG9hZGVyL3BlX2ltYWdlLmMsIGxvYWRlci90YXNrLmMsIGluY2x1ZGUvbW9kdWxlLmgsIGluY2x1ZGUvcGVfaW1hZ2UuaDoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgbmV3IFBFIERMTCBpbml0YWxpemF0aW9uIGNvZGUsIHRyeWluZyB0byBjYWxsIHRoZQoJRGxsRW50cnlQb2ludCByb3V0aW5lcyBhbHdheXMgaW4gY29ycmVjdCBvcmRlciA6LSkKCUJ5cGFzcyBzbm9vcGluZyB3aGVuIGdldHRpbmcgZGF0YSBidWZmZXIgYWRkcmVzc2VzICh0aHVuayBidWZmZXJzLAoJX19HUCBoYW5kbGVycykgYW5kIGZvciAzMi1iaXQgcm91dGluZXMgZGlyZWN0bHkgY2FsbGVkIGZyb20gMTYtYml0CgkoZHVlIHRvIHN0YWNrIGFkZHJlc3Mgc2l6ZSBwcm9ibGVtcykuCgoJKiB3aW4zMi9vcmRpbmFscy5jLCByZWxheTMyL2tlcm5lbDMyLnNwZWMsIGxvYWRlci9uZS9tb2R1bGUuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgQ29tbW9uVW5pbXBTdHViLCBNYXBISW5zdChMU3xTTClfUE4sIFczMlNfQmFja1RvMzIuCglTdHViIGZvciBIb3VzZUNsZWFuTG9naWNhbGx5RGVhZEhhbmRsZXMsIGZpeGVkIGszMnd2c3ByaW50ZkEuCgoJKiB0b29scy9idWlsZC5jLCBpZjE2MzIva2VybmVsLnNwZWMsIGlmMTYzMi9yZWxheS5jLCBpZjE2MzIvdGh1bmsuYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJSW1wbGVtZW50ZWQgKHBhcnRpYWxseSkgdGhlIEtFUk5FTCBUaHVua2xldCBBUEkgYW5kIENhbGxiYWNrIENsaWVudAoJQVBJIChLRVJORUwuNTYwLTU2OCw2MDQtNjEyLDYxOS02MjIpLgoJQWRkZWQgc3R1YnMgZm9yIEsyMjgsIEsyMzcsIEtFUk5FTC4zNjUsIEtFUk5FTC40NDcuCgoJKiBvYmplY3RzL2JpdG1hcC5jLCBpZjE2MzIvZ2RpLnNwZWM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCVN0dWJzIGZvciBDcmVhdGVVc2VyKERpc2NhcmRhYmxlKUJpdG1hcDE2LgoKCSogbWVtb3J5L2hlYXAuYywgaW5jbHVkZS93aW5udC5oOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglJbXBsZW1lbnRlZCBIRUFQX1dJTkVfQ09ERTE2U0VHIFNFR1BUUiBoZWFwcyB3aXRoIDE2LWJpdCBjb2RlIHNlZ21lbnRzLgoKCSogbWVtb3J5L2dsb2JhbC5jLCBpbmNsdWRlL3dpbmRvd3MuaDoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJR2xvYmFsRml4MTYgaXMgc3VwcG9zZWQgdG8gcmV0dXJuIHNlbGVjdG9yIHRvIHRoZSBtZW1vcnkgYXJlYS4KCgkqIG1zZG9zL3Z4ZC5jLCBpZjE2MzIvTWFrZWZpbGUuaW4sIGlmMTYzMi9idWlsdGluLmMsIGlmMTYzMi9jb21tLnNwZWMsIGlmMTYzMi93cHJvY3Muc3BlYzoKCVVscmljaCBXZWlnYW5kIDx3ZWlnYW5kQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJU3R1YnMgZm9yIENPTU0uRFJWLCBSRUJPT1QuVlhELCBWREQuVlhELgoKCSogc2NoZWR1bGVyL3Byb2Nlc3MuYywgc2NoZWR1bGVyL3N5c2xldmVsLmMsIGluY2x1ZGUvc2lnX2NvbnRleHQuaCwgaW5jbHVkZS9zeXNsZXZlbC5oOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglVc2UgZW1lcmdlbmN5IFRFQiBzZWxlY3RvciB0byBhdm9pZCBkZWJ1Z2dlciBjcmFzaGVzIHdoZW4gc3RlcHBpbmcKCXRocm91Z2ggcmVsYXkgc3R1YnMgKG9yIHdoZW4gRlMgaXMgaW52YWxpZCBvdGhlcndpc2UpLgoKCSogd2luZG93cy9ldmVudC5jLCB3aW5kb3dzL2tleWJvYXJkLmM6CglVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCU1PVVNFLkRSViByb3V0aW5lcyBtb3ZlZCB0byBldmVudC5jLiBDYWxsIG1vdXNlIGV2ZW50IHByb2NlZHVyZS4KCgkqIHdpbmRvd3MvZGNlLmMsIHdpbmRvd3MvcGFpbnRpbmcuYywgd2luZG93cy9zY3JvbGwuYywgb2JqZWN0cy9jbGlwcGluZy5jLCBvYmplY3RzL2RjLmMsIG9iamVjdHMvZGN2YWx1ZXMuYywgaW5jbHVkZS9kYy5oLCBpbmNsdWRlL3dpbmRvd3MuaCwgaWYxNjMyL2dkaS5zcGVjLCBncmFwaGljcy94MTFkcnYvYml0Ymx0LmMsIGdyYXBoaWNzL3gxMWRydi9jbGlwcGluZy5jLCBncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuYywgZ3JhcGhpY3MveDExZHJ2L3RleHQuYywgZ3JhcGhpY3MvcGF0aC5jOgoJVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CglDaGFuZ2VkIERDIG1lbWJlcnMgdy5oVmlzUmduLCB3LmhDbGlwUmduLCBhbWQgdy5oR0NDbGlwUmduIHRvCgljb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgZGV2aWNlLCBub3QgdGhlIERDIG9yaWdpbi4gVGhpcyBpcwoJbmVjZXNzYXJ5IHRvIGNvcnJlY3RseSBpbXBsZW1lbnQgR2V0Q2xpcFJnbjE2IGFuZCBJbnF1aXJlVmlzUmduLgoJU2VsZWN0VmlzUmduIGFsc28gZXhwZWN0cyByZWdpb24gaW4gZGV2aWNlLXJlbGF0aXZlIGNvb3JkaW5hdGVzLgoJQWRhcHRlZCB0aGUgcmVzdCBvZiBXaW5lIHRvIHRoaXMgY29vcmRpbmF0ZSBjaGFuZ2UuCglJbXBsZW1lbnRlZCBFeHRTZWxlY3RDbGlwUmduLgoKCSogdG9vbHMvd2luYXBpLWNoZWNrLCBzY2hlZHVsZXIvc3lzbGV2ZWwuYywgZmlsZXMvZG9zX2ZzLmM6CglBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCVNtYWxsIGZpeC4KCgkqIGxvYWRlci9uZS9zZWdtZW50LmMsIGluY2x1ZGUvbW9kdWxlLmgsIGluY2x1ZGUvbmVleGUuaCwgaWYxNjMyL2tlcm5lbC5zcGVjOgoJQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CglZZXQgYW5vdGhlciBzbWFsbCBzZWxmLWxvYWRlciBmaXguCgoJKiBmaWxlcy9kcml2ZS5jOiBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCUZpeGVkIHNldmVyZSBidWc6IFNldEN1cnJlbnREaXJlY3RvcnkzMkEgZGlkbid0IHNldCBwVGFzay0+Y3VyZGlyCgljb3JyZWN0bHkgZHVlIHRvIGN1cnJlbnQgZHJpdmUgYmVpbmcgc2V0IHRvbyBsYXRlLgoKCSogTWFrZS5ydWxlcy5pbjogUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglVc2UgJChBUykgaW5zdGVhZCBvZiAkKENDKSB0byBjb21waWxlIC5zIGZpbGVzLgoKCSogcmVsYXkzMi8uY3ZzaWdub3JlLCByZWxheTMyL01ha2VmaWxlLmluLCByZWxheTMyL2J1aWx0aW4zMi5jLCBpbmNsdWRlL2RlYnVnLmgsIGluY2x1ZGUvZGVidWdkZWZzLmgsIGluY2x1ZGUvbW1yZWcuaCwgaWYxNjMyLy5jdnNpZ25vcmUsIGlmMTYzMi9NYWtlZmlsZS5pbiwgaWYxNjMyL2J1aWx0aW4uYywgZGxscy9NYWtlZmlsZS5pbiwgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgoJUGF0cmlrIFN0cmlkdmFsbCA8cHNAbGVpc3NuZXIuc2U+CglTdGFydGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBNU0FDTS5ETEwsIE1TQUNNMzIuRExMIGFuZCBJTUFHRUhMUC5ETEwuCgoJKiBpbmNsdWRlL2ltYWdlaGxwLmgsIHJlbGF5MzIvaW1hZ2VobHAuc3BlYywgZGxscy9pbWFnZWhscC8uY3ZzaWdub3JlLCBkbGxzL2ltYWdlaGxwL01ha2VmaWxlLmluLCBkbGxzL2ltYWdlaGxwL2FjY2Vzcy5jLCBkbGxzL2ltYWdlaGxwL2RlYnVnLmMsIGRsbHMvaW1hZ2VobHAvaW1hZ2VobHBfbWFpbi5jLCBkbGxzL2ltYWdlaGxwL2ludGVncml0eS5jLCBkbGxzL2ltYWdlaGxwL2ludGVybmFsLmMsIGRsbHMvaW1hZ2VobHAvbW9kaWZ5LmMsIGRsbHMvaW1hZ2VobHAvc3ltYm9sLmM6CglQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCVN0YXJ0ZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIElNQUdFSExQLkRMTC4KCgkqIGluY2x1ZGUvbXNhY20uaCwgaW5jbHVkZS9tc2FjbWRydi5oLCByZWxheTMyL21zYWNtMzIuc3BlYywgaWYxNjMyL21zYWNtLnNwZWMsIGRsbHMvbXNhY20zMi8uY3ZzaWdub3JlLCBkbGxzL21zYWNtMzIvTWFrZWZpbGUuaW4sIGRsbHMvbXNhY20zMi9idWlsdGluLmMsIGRsbHMvbXNhY20zMi9kcml2ZXIuYywgZGxscy9tc2FjbTMyL2ZpbHRlci5jLCBkbGxzL21zYWNtMzIvZm9ybWF0LmMsIGRsbHMvbXNhY20zMi9pbnRlcm5hbC5jLCBkbGxzL21zYWNtMzIvbXNhY20zMl9tYWluLmMsIGRsbHMvbXNhY20zMi9zdHJlYW0uYywgZGxscy9tc2FjbS8uY3ZzaWdub3JlLCBkbGxzL21zYWNtL01ha2VmaWxlLmluLCBkbGxzL21zYWNtL21zYWNtX21haW4uYzoKCVBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJU3RhcnRlZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgTVNBQ00uRExMIGFuZCBNU0FDTTMyLkRMTC4KCgkqIHdpbjMyL2RldmljZS5jOiBQYXRyaWsgU3RyaWR2YWxsIDxwc0BsZWlzc25lci5zZT4KCVJlbW92ZWQgdGhpbmdzIHRoYXQgd2VyZSBlYXJsaWVyIGFkZGVkIGJ5IG1pc3Rha2UuCgoJKiByZWxheTMyL3dpbm1tLnNwZWM6IFBhdHJpayBTdHJpZHZhbGwgPHBzQGxlaXNzbmVyLnNlPgoJVGhlIGltcGxlbWVudGF0aW9uIG9mIG1taW9Xcml0ZSBpcyBub3cgY2FsbGVkIGluc3RlYWQgb2YgdGhlIHN0dWIuCgoJKiBpbmNsdWRlL3NoZWxsLmgsIGRsbHMvc2hlbGwzMi9zaGVsbG9sZS5jLCBkbGxzL3NoZWxsMzIvc2hlbGxvcmQuYywgZGxscy9zaGVsbDMyL3NobGZvbGRlci5jLCBkbGxzL3NoZWxsMzIvc2hsdmlldy5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglCdWdmaXhlcywgc2hlbGx2aWV3IHVzZXMgRFBBJ3Mgbm93LCBJU2hlbGxWaWV3X0dldEl0ZW1PYmplY3QgaW1wbGVtZW50ZWQuCgoJKiByZWxheTMyL3NoZWxsMzIuc3BlYywgZGxscy9zaGVsbDMyL3NoZWxsMzJfbWFpbi5jOgoJSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglOZXcgc3R1YnM6IFNIR2V0RmlsZUluZm8zMlcsIFJlYWRDYWJpbmV0U3RhdGUsIFdyaXRlQ2FiaW5ldFN0YXRlLCBJc1VzZXJBZG1pbi4KCUltcGxlbWVudGVkOiBTSEdldFBhdGhGcm9tSURMaXN0MzJXLgoJQ2hhbmdlZCBQYXRoQ29tYmluZS4KCgkqIGluY2x1ZGUvc2hsb2JqLmg6IEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IHN0cnVjdHVyZXMgRFZBU1BFQ1QsIFRZTUVELCBJRExMaXN0LgoJU2hlbGwgc3BlY2lmaWMgY2xpcGJvYXJkIGZvcm1hdHMuCgoJKiByZWxheTMyL3dpbnNwb29sLnNwZWMsIG1pc2MvcHJpbnRkcnYuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJU3R1YiBFbnVtUHJpbnRlcnNXLgoKCSogZGxscy9zaGVsbDMyL2RhdGFvYmplY3QuYzoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJSW1wbGVtZW50ZWQgZmlyc3QgZnVuY3Rpb25zLgoKCSogZGxscy9zaGVsbDMyL3BpZGwuYywgZGxscy9zaGVsbDMyL3BpZGwuaDoKCUp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPgoJTmV3IGNsYXNzIElETExpc3QgIkl0ZW0gSUQgTGlzdCBMaXN0IiAoaW50ZXJuYWwpLgoKCSogbWlzYy92ZXIuYzogSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTbWFsbCBjaGFuZ2VzICh1c2VzIEhJV09SRC9MT1dPUkQpLgoKCSogd2luZG93cy9kaWFsb2cuYywgcmVsYXkzMi91c2VyMzIuc3BlYzoKCVNhdCBPY3QgMTAgMTI6MDA6MDAgMTk5OCAgSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CglTdHViIENyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW1Bb3JXLgoKCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgoJVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0PgoJRG9uJ3QgaW5zdGFsbCBvYmplY3QgZmlsZXMgd2hlbiAtLWRpc2FibGUtbGliIGlzIHNlbGVjdGVkLgoKCSogZGVidWdnZXIvaGFzaC5jLCBkZWJ1Z2dlci9tc2MuYzoKCVV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnR1LWRhcm1zdGFkdD4KCURvbid0IHByaW50IG5hbWUgZm9yIDMyIGJpdCBsaWIgbXVsdGlwbGUgdGltZXMuCglDbGVhbiB1cCBwcmludGluZyBpbiBERUJVR19Qcm9jZXNzRGVmZXJyZWREZWJ1Zy4KCgkqIG1lbW9yeS9oZWFwLmMsIGRsbHMvY29tY3RsMzIvdGFiLmMsIGNvbnRyb2xzL2NvbWJvLmM6CglEYXZpZCBMdXllciA8bHV5ZXJAdWNzLnV3YS5lZHUuYXU+CglTbWFsbCBmaXhlcy4KCgkqIGZpbGVzL2RyaXZlLmM6IFBldHRlciBSZWluaG9sZHRzZW4gPHBlcmVAdGQub3JnLnVpdC5ubz4KCUJ1Z2ZpeDogQ2hhbmdlZCBHZXREcml2ZVR5cGUzMkEoTlVMTCkgdG8gdXNlIGN3ZCdzIHJvb3QuCgoJKiBvbGUvdHlwZWxpYi5jLCBvbGUvY29tcG9iai5jLCBvbGUvaWZzLmMsIG9sZS9tb25pa2VyLmMsIG9sZS9vbGUyLmMsIG9sZS9vbGUyZGlzcC5jLCBvbGUvb2xlMm5scy5jLCBvbGUvb2xlY2xpLmMsIG9sZS9vbGVzdnIuYywgb2xlL3N0b3JhZ2UuYywgbWlzYy9udGRsbC5jLCBtaXNjL3JlZ2lzdHJ5LmM6CglNYXR0aGV3IEJlY2tlciA8bWJlY2tlckBnbGFzc2NpdHkubmV0PgoJRG9jdW1lbnRhdGlvbiBjb3JyZWN0aW9ucy9zdGFuZGFyZGl6YXRpb25zLgoKCSogbXVsdGltZWRpYS9hdWRpby5jLCBtdWx0aW1lZGlhL2luaXQuYywgbXVsdGltZWRpYS9tY2lhbmltLmMsIG11bHRpbWVkaWEvbWNpY2RhLmMsIG11bHRpbWVkaWEvbWNpc3RyaW5nLmMsIG11bHRpbWVkaWEvbWlkaS5jLCBtdWx0aW1lZGlhL21tc3lzdGVtLmMsIGluY2x1ZGUvbW1zeXN0ZW0uaCwgaW5jbHVkZS9tdWx0aW1lZGlhLmg6CglFcmljIFBvdWVjaCAgPGVyaWMucG91ZWNoQGxlbWVsLmZyPgoJU3RhcnRlZCBjb2RpbmcgMzIgYml0IE1DSSBoYW5kbGluZy4KCUFkZGVkIE9wZW4vQ2xvc2UgdG8gbG93LWxldmVsIE1DSSBkcml2ZXJzIChhdWRpbywgbWlkaSwgYW5pbSwgY2RhKS4KCVdyb3RlIE1DSSBNSURJIHN1cHBvcnQuCgoJKiBncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuYzogUmVpbiBLbGF6ZXMgPHJrbGF6ZXNAY2FzZW1hLm5ldD4KCVlldCBhbm90aGVyIGltcHJvdmVtZW50IHRvIHRoZSBiZXppZXIgY29kZS4KCgkqIHdpbmRvd3MvbWVzc2FnZS5jOiBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoJR2V0VGlja0NvdW50cygpIGhhcyBhIGdyYW51bGFyaXR5IGluIHdpbmRvd3Mgb2YgMjUgbXNlYydzLgoJR2lyb3RlbCdzIHNlcmlhbCBjb21tdW5pY2F0aW9uIGFwcGVhcnMgdG8gZGVwZW5kIG9uIGl0LCBzbyBJIGd1ZXNzCglpdCdzIGEgZmVhdHVyZS4uLgoKCSogbWlzYy9jb21tLmM6IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CglVcGRhdGUgdGhlIG1vZGVtbiBzdGF0dXMgYml0IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIFJMU0QgbGluZSBpcwoJYWN0aXZlIGluIGV2ZXJ5IGNhbGwgdG8gR2V0Q29tbUVycm9yKCkuIFRoaXMgaXMgbm90IHRoZSBwcm9wZXIgcGxhY2UsCglidXQgc2luY2Ugd2luZSBkb2Vzbid0IGRvIGFueSBldmVudC1zdHVmZi4uLgoJRml4ZWQgc29tZSBUUkFDRSBjYWxsJ3MgZmFjZWQgd2l0aCBub24gemVybyB0ZXJtaW5hdGVkIHN0cmluZ3MuCglSZXN0b3JlIHRoZSB0ZXJtaW5hbCBzdGF0ZSBhdCBDbG9zZUNvbW10IHRvIHRoZSBzdGF0ZSBpdCB3YXMgYXQKCU9wZW5Db21tKCksIHNvIHRoZSBtb2RlbSB3aWxsIGdvIG9mZi1ob29rLgoKCSogbG9hZGVyL21vZHVsZS5jOiBBbGV4YW5kZXIgTGFyc3NvbiAgPGFsbGFAbHlzYXRvci5saXUuc2U+CglHZXRNb2R1bGVGaWxlTmFtZTMyQSgpIHJldHVybnMgbG9uZyBmaWxlbmFtZSBpZiBhcHAgc2V0cyBvc3ZlcnNpb24gPj0KCTQuMC4gQWxzbyBtb3ZlZCB0aGUgbG9uZyBmaWxlbmFtZSBoYWNrZXJ5IHRvIEdldExvbmdQYXRoTmFtZTMyQSgpIHNvCglpdCBjYW4gYmUgdXNlZCBieSB3aW4zMiBwcm9ncmFtcy4KCgkqIGZpbGVzL2Rvc19mcy5jOiBBbGV4YW5kZXIgTGFyc3NvbiA8YWxsYUBseXNhdG9yLmxpdS5zZT4KCUdldExvbmdQYXRoTmFtZTMyQSgpIHJldHVybnMgZG9zIGZvcm1hdCBsb25nIGZpbGVuYW1lIGluc3RlYWQgb2YgdW5peAoJZm9ybWF0LgoKCSogZGxscy9jb21jdGwzMi9saXN0dmlldy5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJU21hbGwgZml4ZXMuCgoJKiByZWxheTMyL3NoZWxsMzIuc3BlYywgZGxscy9zaGVsbDMyL3NoZWxsb3JkLmM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgU0hGbHVzaENsaXBib2FyZC4KCgkqIHJlbGF5MzIvY29tY3RsMzIuc3BlYywgaW5jbHVkZS9jb21tY3RybC5oLCBkbGxzL2NvbWN0bDMyL2NvbWN0bDMydW5kb2MuYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglGaXhlZCBzb21lIHVuZG9jdW1lbnRlZCBmdW5jdGlvbnMuCglDaGFuZ2VkIGFsZ29yaXRobSBpbiBEUEFfUXVpY2tTb3J0KCkuCglGaXhlZCBoZWFwIGNyZWF0aW9uL2Rlc3RydWN0aW9uIGFuZCBjb250cm9sIFt1bl1yZWdpc3RyYXRpb24gaW4KCUNvbUN0bDMyTGliTWFpbigpLgoKCSogZGxscy9jb21jdGwzMi9oZWFkZXIuYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUZpeGVkIGEgYnVnLgoKCSogaW5jbHVkZS90b29sdGlwcy5oLCBkbGxzL2NvbWN0bDMyL3Rvb2x0aXBzLmM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgdHJhY2tpbmcgc3VwcG9ydCBhbmQgZml4ZWQgbG9hZGluZyBvZiByZXNvdXJjZSBzdHJpbmdzLgoJQWRkZWQgdW5yZWdpc3RlciBjb2RlLgoKCSogaW5jbHVkZS9kZWJ1Zy5oLCBpbmNsdWRlL2RlYnVnZGVmcy5oLCBpbmNsdWRlL2lwYWRkcmVzcy5oLCBpbmNsdWRlL25hdGl2ZWZvbnQuaCwgZGxscy9jb21jdGwzMi9NYWtlZmlsZS5pbiwgZGxscy9jb21jdGwzMi9jb21tY3RybC5jLCBkbGxzL2NvbWN0bDMyL2lwYWRkcmVzcy5jLCBkbGxzL2NvbWN0bDMyL25hdGl2ZWZvbnQuYzoKCUVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglBZGRlZCBJUEFkZHJlc3MgYW5kIE5hdGl2ZUZvbnQgY29udHJvbHMuCgoJKiBpbmNsdWRlL2ltYWdlbGlzdC5oLCBkbGxzL2NvbWN0bDMyL2ltYWdlbGlzdC5jOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCVNvbWUgbWlub3IgaW1wcm92ZW1lbnRzLgoKCSogaW5jbHVkZS90b29sYmFyLmgsIGRsbHMvY29tY3RsMzIvdG9vbGJhci5jOgoJRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUltcHJvdmVkIGRyYXdpbmcgYW5kIHBsYWNlbWVudCBjb2RlLiBFeHBsb3JlciBzdHlsZSBjb21tb24gZGlhbG9ncyBhcmUKCWxvb2tpbmcgZ29vZCBub3cuCgoJKiBvYmplY3RzL2N1cnNvcmljb24uYzogRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCUZpeGVkIGJ1ZyBpbiBEcmF3SWNvbkV4MzIoKS4KCgkqIG1pc2MvbWFpbi5jOiBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJSW1wcm92ZWQgR2V0U3lzdGVtSW5mb3JtYXRpb24zMltBL1ddLgoKCSogd2luZG93cy9ub25jbGllbnQuYywgcmVsYXkzMi91c2VyMzIuc3BlYywgaW5jbHVkZS93aW5kb3dzLmgsIGlmMTYzMi91c2VyLnNwZWM6CglFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoJQWRkZWQgRHJhd0NhcHRpb25bMTYvMzJdIGFuZCBEcmF3Q2FwdGlvblRlbXBbMTYvMzJBLzMyV10uCglGaXhlZCBoYW5kbGluZyBvZiBXU19FWF9UT09MV0lORE9XLgoKCSogZG9jdW1lbnRhdGlvbi9jb21tb25fY29udHJvbHM6IEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CglVcGRhdGVkLgoKCSogd2luZG93cy9ldmVudC5jLCB3aW5kb3dzL2tleWJvYXJkLmMsIGluY2x1ZGUva2V5Ym9hcmQuaDoKCURhdmlkIEZhdXJlIDxmYXVyZUBrZGUub3JnPgoJQWRkZWQgS0VZQk9BUkRfVXBkYXRlU3RhdGUsIHRvIHJlYWQgdGhlIG1vZGlmaWVycyB3aGVuIHRoZSB3aW5lIGFwcCBpcwoJYWN0aXZhdGVkLiBVc2VzIHRoZSBuZXcgS0VZQk9BUkRfVXBkYXRlT25lU3RhdGUuCglGaXhlZCBhIHByb2JsZW0gd2l0aCBtZW51IGFjY2VsZXJhdG9ycyAoQWx0LWxldHRlciBnZW5lcmF0ZXMgYSBkb3duCglhcnJvdyBldmVudCB3aGljaCBiZWVwcyBpZiBub3QgZmlsdGVyZWQpLgoJU3BlZWRlZCB1cCBUb0FzY2lpMTYvMzIoKSBhIGxpdHRsZSBiaXQuCgoJKiBkZWJ1Z2dlci9icmVhay5jLCBkZWJ1Z2dlci9kYl9kaXNhc20uYywgZGVidWdnZXIvZGJnLnksIGRlYnVnZ2VyL2V4cHIuYywgZGVidWdnZXIvc291cmNlLmMsIGRlYnVnZ2VyL3R5cGVzLmM6CglPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCU1hZGUgV2luZSdzIGRlYnVnZ2VyIHdvcmsgc2F0aXNmYWN0b3JpbHkgd2l0aCBET1MgYXBwcy4KCVBlcmhhcHMgZGVyZWZlcmVuY2luZyB3b3JrIGJldHRlciBmb3IgV2luMTYgYXBwcyB0b28gbm93LCBidXQKCWl0IGFwcGVhcnMgdGhlIGRlYnVnZ2VyIGNvcmUgd2Fzbid0IGRlc2lnbmVkIGZvciBzZWdtZW50YXRpb24uCgoJKiBtc2Rvcy9kcG1pLmM6IE92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJU2ltdWxhdGVzIERQTUkgbWVtb3J5IG1hcCBieSBjb252ZXJ0aW5nIGxvd2VyLU1CIHNlZ21lbnQgYmFzZQoJYWRkcmVzc2VzIGFzIG5lY2Vzc2FyeS4gSW1wbGVtZW50ZWQgYWxsb2NhdGluZy9mcmVlaW5nIERPUyBtZW1vcnkKCWJsb2Nrcy4gQWRkZWQgWE1TIGhvb2suIChEUE1JIHJlbWFpbnMgZGlzYWJsZWQgYnkgZGVmYXVsdCB1bnRpbAoJc29tZW9uZSBpbXBsZW1lbnRzIHRoZSByYXcgbW9kZSBzd2l0Y2ggZW50cnkgcG9pbnRzIHBrdW56aXAgbmVlZHMuKQoKCSogbXNkb3MvaW50MjEuYzogT3ZlIEthYXZlbiA8b3Zla0BhcmN0aWNuZXQubm8+CglJIHRoaW5rIGl0J3MgdGltZSB0byByZXRoaW5rIHRoZSBIRklMRTE2X1RPX0hGSUxFMzIgc3RyYXRlZ3ksCgljYW4ndCBrZWVwIHdvcmtpbmcgYXJvdW5kIGZsYXdzIGluIGl0IGxpa2UgdGhpcyAobm93IHN0ZGlvCgl3YXMgZ2V0dGluZyBjbG9zZWQgd2hlbiBwcm9ncmFtcyBjbG9zZSBoYW5kbGVzID49NSkKCgkqIG1zZG9zL3htcy5jLCBtc2Rvcy9NYWtlZmlsZS5pbiwgbXNkb3MvaW50MmYuYzoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJSW1wbGVtZW50ZWQgYmFzaWMgWE1TIGZ1bmN0aW9ucy4gd2NiLmV4ZSAoV2luMTYgZGlzYXNzZW1ibGVyKSBub3cKCXNlZW1zIHRvIHdvcmsgZmluZSB1bmRlciBXaW5lLgoKCSogbG9hZGVyL2Rvcy9kb3N2bS5jLCBsb2FkZXIvZG9zL21vZHVsZS5jLCBpbmNsdWRlL2Rvc2V4ZS5oLCBpbmNsdWRlL21pc2NlbXUuaDoKCU92ZSBLYWF2ZW4gPG92ZWtAYXJjdGljbmV0Lm5vPgoJTW92ZWQgc29tZSBzeXN0ZW0gZGVwZW5kZW5jaWVzIHRvIGxvYWRlci9kb3MvZG9zdm0uYy4gSW1wbGVtZW50ZWQKCWVudmlyb25tZW50YWwgYXJndlswXSBwYXNzaW5nIHRvIERPUyBhcHBzLiBBZGRlZCBYTVMgaG9va3MuCgoJKiBkZWJ1Z2dlci9zdGFicy5jOiBPdmUgS2FhdmVuIDxvdmVrQGFyY3RpY25ldC5ubz4KCUFkZGVkIGEgbWVtc2V0KCkgdG8gcHJldmVudCBhIGRlYnVnZ2VyIHNlZ2ZhdWx0IGNhdXNlZCBieQoJdW5pbml0aWFsaXplZCBwb2ludGVycyBpbiB0aGUgc3RhYnMgbG9va3VwIHRhYmxlcy4KCgkqIGdyYXBoaWNzL2RkcmF3LmM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQSBmZXcgZml4ZXMuCgoJKiByZWxheTMyL250ZGxsLnNwZWM6IE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJQWRkZWQgUnRsQWxsb2NhdGVBbmRJbml0aWFsaXplU2lkIGVudHJ5LgoKCSogbG9hZGVyL01ha2VmaWxlLmluLCBsb2FkZXIvZWxmLmMsIGxvYWRlci9tb2R1bGUuYywgbG9hZGVyL3BlX2ltYWdlLmMsIGluY2x1ZGUvY29uZmlnLmguaW4sIGluY2x1ZGUvbW9kdWxlLmgsIGluY2x1ZGUvcGVfaW1hZ2UuaCwgaW5jbHVkZS9wZWV4ZS5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKCU1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoJR2VuZXJpYyBkeW5hbWljIGRsbCBsb2FkZXIgdXNpbmcgZGwqKCkgQVBJLgoJSW5jbHVkZXM6IHN0ZGNhbGwtPmNkZWNsIG1hcHBpbmcgYWJpbGl0eSwgc25vb3BpbmcuCgkoVGVzdGVkIG9ubHkgd2l0aCBnbGlkZTJ4LmRsbCAtPiBsaWJnbGlkZTJ4LnNvKQoKCSogbXVsdGltZWRpYS9pbml0LmMsIG11bHRpbWVkaWEvdGltZS5jLCBpbmNsdWRlL21tc3lzdGVtLmgsIGluY2x1ZGUvbXVsdGltZWRpYS5oOgoJTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCB3aW4zMiBlbmhhbmNlZCBmdW5jdGlvbmFsaXR5IHRvIHRpbWVyIGNhbGxiYWNrcy4KCgkqIHdpbjMyL2NvbnNvbGUuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglBZGRlZCBiYWQgaGFja3Mgc28gV3JpdGVDb25zb2xlT3V0cHV0IHdvcmtzIG9uIHZ0MTAwIGFuZCBQZWVrTWVzc2FnZQoJZG9lcyBhdCBsZWFzdCBhIGJpdCBvZiBrZXlib2FyZCBpbnB1dC4KCgkqIHJlbGF5MzIvc25vb3AuYzogTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CglTaG91bGQgZGlzcGxheSBhZ2Fpbi4KClNhdCBPY3QgMTAgMTU6NTI6NDYgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAd2luZWhxLmNvbT4KCgkqIHdpbmRvd3MvZGlhbG9nLmM6IERhdmUgUGlja2xlcyA8ZGF2ZXBAbnVnYXRlLmRlbW9uLmNvLnVrPgoJSW1wbGVtZW50ZWQgRFNfQ0VOVEVSIGRpYWxvZyBzdHlsZS4KCgkqIG1pc2MvbWFpbi5jOiBQYWJsbyBTYXJhdHhhZ2EgPHNydHhnQGNoYW5hZS5hbHBoYW5ldC5jaD4KCUFkZGVkIGZ1bmN0aW9uIHRvIGJ1aWxkIHRoZSBXaW5kb3dzIG51bWVyaWMgbGFuZ3VhZ2UgSUQgZnJvbSBsYW5ndWFnZSwKCWNvZGUsIGNoYXJzZXQgYW5kIGRpYWxlY3Qgc3RyaW5ncywgbGlrZSB1c2VkIGJ5IFVuaXggTEFORyB2YXJpYWJsZS4KCgkqIG9sZS9vbGUybmxzLmMsIG9sZS9ubHMvUkVBRE1FLCBpbmNsdWRlL3dpbm5scy5oLCBvbGUvbmxzLyoubmxzOgoJUGFibG8gU2FyYXR4YWdhIDxzcnR4Z0BjaGFuYWUuYWxwaGFuZXQuY2g+CglNb3JlIE5MUyBkYXRhLgoKCSogZ3JhcGhpY3MvZGRyYXcuYzogUGV0ZXIgU2NobGFpbGUgPHVkYnpAcnoudW5pLWthcmxzcnVoZS5kZT4KCUZpeGVkIGEgbG90IG9mIGJ1Z3MgaW4gZGRyYXcuYyB0byBtYWtlIHhsaWIgc3VwcG9ydCB3b3JrLgoJUnVucyBzdWNjZXNzZnVsbHkgVFIyRGVtbyBhbmQgSmF6eiBKYWNrcmFiYml0IElJIERlbW8hCgoJKiBvYmplY3RzL2dkaW9iai5jOiBDbGlmZiBXcmlnaHQgPGNsaWZmQHNuaXBlNDQ0Lm9yZz4KCUFkZGVkIERDIG9iamVjdCB0eXBlIHRvIHRoZSBsaXN0IG9mIHZhbGlkIG9iamVjdHMgdGhhdCBjYW4gYmUgZGVsZXRlZAoJYnkgRGVsZXRlT2JqZWN0MzIuCgpTdW4gT2N0ICA0IDE4OjIwOjI5IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHdpbmVocS5jb20+CgoJKiBDaGFuZ2VMb2c6CglTdGFydGluZyBuZXcgZm9ybWF0IGNoYW5nZWxvZyAob2xkZXIgY2hhbmdlcyBtb3ZlZCB0bwoJZG9jdW1lbnRhdGlvbi9DaGFuZ2VMb2cuT0xEKS4K