LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gU2VwICAxIDE5OjIyOjQ2IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW21pc2MvY29tbWRsZy5jXSBbaWYxNjMyL2NvbW1kbGcuc3BlY10KCUZpeGVkIHNvbWUgU0VHUFRSIHByb2JsZW1zLgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXQoJQWRkZWQgbWVzc2FnZSB0cmFuc2xhdGlvbiBmb3IgV01fQ09NUEFSRUlURU0sIFdNX0RFTEVURUlURU0KCWFuZCBXTV9NRUFTVVJFSVRFTQoJRml4ZWQgMTYtdG8tMzIgdHJhbnNsYXRpb24gZm9yIFdNX0hTQ1JPTEwvV01fVlNDUk9MTC4KCkZyaSBBdWcgMzAgMTM6Mzk6MDAgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgkqIFtmaWxlcy9kcml2ZS5jXQoJR2V0RHJpdmVUeXBlMTYgc2hvdWxkIHJlcG9ydCBDRFJPTXMgYXMgRFJJVkVfUkVNT1RFIChBQ01FIHNldHVwKS4KCgkqIFttdWx0aW1lZGlhL2F1ZGlvLmNdCglUaGUgbWluaW11bSBhdWRpb2J1ZmZlciBzaXplIHNocnVuayBzb21ld2hlcmUgaW4gbGludXggMS4zLnh4CgliZWxvdyA0MDk2IGJ5dGVzLgoKCSogW211bHRpbWVkaWEvbWNpc3RyaW5nLmNdCglTZWdwdHIgc3RyaW5nIGhhbmRsaW5nIGZpeGVkICYgZW5oYW5jZWQuCgoJKiBbaWYxNjMyL2NydGRsbC5zcGVjXVttaXNjL2NydGRsbC5jXQoJbWFsbG9jLGZyZWUsX3N0cnVwcixfc3RyaWNtcCxfc3RyY21waSBhZGRlZC4KCgkqIFtpZjE2MzIvd3NvY2szMi5zcGVjXVttaXNjL3dpbnNvY2suY10KCU1vcmUgZGlyZWN0IHRodW5rcyBpbnRvIHVuaXggbGliYyBhbmQgV3NDb250cm9sLXN0dWIgYWRkZWQuCgpUaHUgQXVnIDI5IDIzOjU0OjI1IDE5OTYgIEh1dyBELiBNLiBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdCglCdWcgZml4ZXMgdG8gYm90aCByZWNvcmRpbmcgYW5kIHBsYXliYWNrIG9mIEV4dFRleHRPdXQoKS4KClR1ZSBBdWcgMjcgMTU6NDM6MjEgMTk5NiAgU2xhdmVuIFJlemljICA8ZXNlcnRlQGNzLnR1LWJlcmxpbi5kZT4KCgkqIFttdWx0aW1lZGlhL2F1ZGlvLmNdIFttdWx0aW1lZGlhL21jaWFuaW0uY10KCSAgW211bHRpbWVkaWEvbWNpY2RhLmNdIFttdWx0aW1lZGlhL21pZGkuY10KCU1hZGUgY2RhdWRpbywgYXVkaW8gYW5kIG1pZGkgd29yayBmb3IgRnJlZUJTRC4KClN1biBBdWcgMjUgMjA6MTg6NTYgMTk5NiAgSnVra2EgSWl2b25lbiA8aWl2b25lbkBjYy5oZWxzaW5raS5maT4KCgkqIFttaXNjL2NydGRsbC5jXSBbaWYxNjMyL2NydGRsbC5zcGVjXQoJQWRkZWQgYSBsb3Qgb2YgZnVuY3Rpb25zLgoKCSogW21pc2Mvb2xlMm5scy5jXQoJQWRkZWQgSUQgdmFsdWVzIGZvciBhbGwgbGFuZ3VhZ2VzIGluIEdldFVzZXJEZWZhdWx0TENJRCgpLgoJCkZyaSBBdWcgMjQgMjE6MDI6MjggMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL21lc3NhZ2UuY10KCUZpcnN0IGF0dGVtcHQgYXQgaG9vayBXSF9KT1VSTkFMUExBWUJBQ0suCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBBdWcgMjQgMTM6NTc6MDEgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglSZW5hbWVkIFNDUk9MTElORk8gdG8gU0NST0xMQkFSX0lORk8gdG8gYXZvaWQgY29uZmxpY3Qgd2l0aCBXaW4zMi4KCgkqIFtncmFwaGljcy9kcml2ZXIuY10gW2luY2x1ZGUveDExZHJ2LmhdCglOZXcgZmlsZXMgZm9yIGdyYXBoaWNzIGRyaXZlciBoYW5kbGluZy4KCgkqIFtpZjE2MzIvcmVsYXkuY10gW2luY2x1ZGUvcmVnaXN0ZXJzLmhdIFt0b29scy9idWlsZC5jXQoJSW1wbGVtZW50ZWQgV2luMzIgcmVnaXN0ZXIgZnVuY3Rpb25zLiBOb3QgcmVhbGx5IHRlc3RlZCB5ZXQuCgoJKiBbaW5jbHVkZS9nZGkuaF0KCUFkZGVkIGEgbG90IG9mIGZ1bmN0aW9ucyB0byB0aGUgREMgZnVuYyB0YWJsZS4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCUluaXRpYWxpc2UgJWZzIGJlZm9yZSBjYWxsaW5nIG91dCB0byAzMi1iaXQgY29kZS4KCgkqIFt3aW5kb3dzL2hvb2suY10KCUZpeGVkIGJ1ZyBpbiBIT09LX0dldEhvb2soKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJRml4ZWQgRmluZFdpbmRvdyB0byByZXR1cm4gYW4gZXJyb3IgaWYgdGhlIGNsYXNzIG5hbWUgZG9lc24ndCBleGlzdC4KCldlZCBBdWcgMjEgMTU6MTU6NTMgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbaWYxNjMyL01ha2VmaWxlLmluXSBbbWlzYy9tcHIuY10gW2lmMTYzMi9tcHIuc3BlY10KCW1wci5kbGwgc3BlY3MgYWRkZWQuCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFt3aW4zMi9uZXdmbnMuY10gW21lbW9yeS9nbG9iYWwuY10KCVF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyKCksIEdsb2JhbE1lbW9yeVN0YXR1cygpIGFkZGVkLgoKCSogW2lmMTYzMi91c2VyMzIuc3BlY10gW3dpbjMyL2Vycm9yLmNdCglTZXRMYXN0RXJyb3JFeCgpIGFkZGVkLgoKCSogW21pc2MvY29tbWRsZy5jXQoJbHBzdHJGaWx0ZXIgbWlnaHQgYmUgTlVMTCBpbiBGSUxFX1dNSW5pdERpYWxvZyAoTlMgMy4wIHNldHVwKS4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglTb21lIG1pc3NpbmcgTlVMTCBwdHIgY2hlY2tzIGFkZGVkLCBtaXNjIGNsZWFuIHVwLgoKVHVlIEF1ZyAyMCAyMTowMDowMCAxOTk2IEFsZXggS29yb2JrYSAgPGFsZXhAcGhhcm0uc3VueXNiLmVkdT4KCgkqIFtjb250cm9scy9tZW51LmNdCglBZGp1c3QgcG9wdXAgbWVudSBjb29yZGluYXRlcyBzbyB0aGF0IGl0IGFsd2F5cyBzdGF5cyB3aXRoaW4gCgl0aGUgZGVza3RvcC4KCgkqIFttaXNjL21haW4uY10KCUZpeGVkIEdldEVudmlyb25tZW50KCkgcmV0dXJuIHZhbHVlIGZvciBscEVudiA9PSBOVUxMIGNhc2UuCgpNb24gQXVnIDE5IDIyOjQ4OjM2IDE5OTYgIEp1a2thIElpdm9uZW4gPGlpdm9uZW5AY2MuaGVsc2lua2kuZmk+CgoJKiBbbWlzYy9jcnRkbGwuY10gW2lmMTYzMi9jcnRkbGwuc3BlY10KCUFkZGVkIHNvbWUgaXMqIGZ1bmN0aW9ucywgc3RybGVuIGFuZCB0b2xvd2VyLgoJCk1vbiBBdWcgMTkgMTM6MzM6MTMgMTk5NiAgU3RlcGhlbiBTaW1tb25zICA8c3NpbW1vbnNAdml0c2VtaS5jb20+CgoJKiBbdG9vbHMvd2luZWNvbmZdCglOZXcgcGVybCBzY3JpcHQgdG8gZ2VuZXJhdGUgdGhlIHdpbmUuY29uZiBmaWxlLgoKRnJpIEF1ZyAxNiAxNTozMTo0NCAxOTk2ICAgSm9obiBIYXJ2ZXkgPGpvaG5AZGl2aXNpb24uY28udWs+CgoJKiBbaWYxNjMyL2dkaS5zcGVjXQogICAgICAgIExvdHMgb2YgcHJpbnRlciBmdW5jdGlvbnMuCgkKCSogW2luY2x1ZGUvY2FsbGJhY2suaF0KICAgICAgICBOZXcgZnVuY3Rpb25zIGZvciBwcmludGVyIGRyaXZlciBzdXBwb3J0LgoKCSogW2luY2x1ZGUvZ2RpLmhdCiAgICAgICAgTmV3L2NoYW5nZWQgc3RydWN0dXJlcyB0byBzdXBwb3J0IHByaW50ZXIgZHJpdmVyLgoKCSogW21pc2MvZXNjYXBlLmNdCiAgICAgICAgTmV3IHZlcnNpb24gdGhhdCB1c2VzIGZ1bmN0aW9uIHRhYmxlIGluIERDIHN0cnVjdHVyZS4KCgkqIFtvYmplY3RzL2RjLmNdCiAgICAgICAgQ3JlYXRlREMgY29wZXMgd2l0aCB0aGluZ3Mgb3RoZXIgdGhhbiBEaXNwbGF5LgoJWCBjb2RlIGZvciBDcmVhdGVEQyBtb3ZlZCB0byBncmFwaGljcy94MTFkcnYgZGlyZWN0b3J5LgoJQ3JlYXRlQ29tcGF0aWJsZURDIGNvcGllcyBmdW5jIHRhYmxlIGZyb20gb3JpZ2luYWwgREMuCgoJKiBbb2JqZWN0cy9mb250LmNdCiAgICAgICAgR2V0VGV4dEV4dGVudFBvaW50MzJBLEdldFRleHRNZXRyaWNzMTYgdXNlIGZ1bmN0aW9uIHRhYmxlIGluCiAgICAgICAgREMgYW5kIGNvZGUgbW92ZWQgdG8gZHJpdmVycyBkaXJlY3RvcnkuCgoJKiBbbWlzYy9wcmludGRydi5jXSBbZ3JhcGhpY3MvKi8qXSBbaW5jbHVkZS93aW4xNmRydi5oXQogICAgICAgIE5ldyBmaWxlcyBmb3IgcHJpbnRlciBzdXBwb3J0LiAKCkZyaSBBdWcgMTYgMTI6MzM6MDAgMTk5NiAgQnJ1Y2UgTWlsbmVyIDxCcnVjZS5NaWxuZXJAZ2VuZXRpY3MudXRhaC5lZHU+CgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglBZGRlZCBTZXRTY3JvbGxJbmZvMzIgYW5kIEdldFNjcm9sbEluZm8zMi4gIFRoZXNlIGp1c3QgY2FsbCBleGlzdGluZwoJY29kZS4gVGhlcmUgYXJlIGEgZmV3IG9wdGlvbnMgaW4gd2hpY2ggSSdtIHByb2JhYmx5IHRoZSB3cm9uZyBwZXJzb24KCWZvciB0aGUgam9iIChwYWdlIHNpemUgYW5kIGRpc2FibGUgYmFyKS4gVGhlcmUgYXJlIGNvbW1lbnRzIGluIHRoZQoJY29kZSBhcyB0byB3aGF0IHRoZXkgc2hvdWxkIGRvLgoKCSogW29iamVjdHMvZ2Rpb2JqLmNdIFtvYmplY3RzL2ZvbnQuY10gW2luY2x1ZGUvZm9udC5oXQoJQWRkZWQgMzIgYml0IHZlcnNpb24gb2YgRk9OVF9HZXRPYmplY3QuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBBdWcgMTggMTI6MTc6NTQgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbZmlsZXMvZHJpdmUuY10KCUFkZGVkICdGaWxlc3lzdGVtJyBvcHRpb24gaW4gZHJpdmVzIGNvbmZpZ3VyYXRpb24uCgoJKiBbZmlsZXMvZG9zX2ZzLmNdIAoJQWRkZWQgaGFuZGxpbmcgb2YgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcy4KCgkqIFttZW1vcnkvc2VsZWN0b3IuY10gW2luY2x1ZGUvc3RhY2tmcmFtZS5oXQoJUmVtb3ZlZCBNQUtFX1NFR1BUUi4KCgkqIFttaXNjL2NvbW1kbGcuY10gW211bHRpbWVkaWEvbWNpc3RyaW5nLmNdCglSZXBsYWNlZCBNQUtFX1NFR1BUUiBieSB0aGUgU0VHUFRSXyogbWFjcm9zLgoKCSogW29iamVjdHMvYml0Ymx0LmNdIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglVc2UgYW4gaW50ZXJtZWRpYXJ5IHBpeG1hcCB0byBhdm9pZCBzb21lIEJhZE1hdGNoIGVycm9ycyBvbgoJWEdldEltYWdlKCkuCgpTdW4gQXVnIDE4IDA5OjIxOjI3IDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglBZGRlZCBoYW5kbGluZyBvZiBXTV9OQy4uLm1vdXNlIG1lc3NhZ2VzIGluIEpPVVJOQUxSRUNPUkQgaG9vay4KCgkqIFttaXNjL3Zlci5jXQoJRml4ZWQgYSBiYWQgc3RyaW5nIHJlc3VsdCBpbiBWZXJRdWVyeVZhbHVlWzE2fDMyQXwzMlddLgoKRnJpIEF1ZyAxNiAxOTo1NTowNCAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtpZjE2MzIvY3J0ZGxsLnNwZWNdIFttaXNjL2NydGRsbC5jXQoJTW9yZSBhZGRpdGlvbnMgdG8gZ2V0IHdpbjk1IHByb2dyYW1zIGZ1cnRoZXIgZG93biB0aGUgcm9hZC4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFtsb2FkZXIvbW9kdWxlLmNdCglHZXRNb2R1bGVOYW1lKCkgYWRkZWQuCglMb2FkTW9kdWxlKCk6IHBhcmFtcy0+c2hvd0NtZCBjYW4gYmUgTlVMTC4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW2lmMTYzMi90aHVuay5jXQoJVGh1bmtDb25uZWN0MzIoKSBzdHViIGFkZGVkLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJRW50cmllcyBpbmNsdWRlIGxhc3RlbnRyeS4KCgkqIFttaXNjL3NoZWxsLmNdIFtmaWxlcy9maWxlLmNdCglNYWRlIHByb2dtYW4gd29yayBhZ2Fpbi4KCkZyaSBBdWcgMTYgMDk6MDA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgkKCSogW3dpbmRvd3MvZGVmd25kLmNdIFt3aW5kb3dzL3dpbnBvcy5jXSBbd2luZG93cy9wYWludGluZy5jXQoJSWNvbiBwYWludGluZyBmaXhlcy4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXSBbd2luZG93cy9wYWludGluZy5jXQoJRW5mb3JjZSBhbmQgZm9sbG93IGhyZ25VcGRhdGUgbW9yZSBjbG9zZWx5IHRvIGN1dCBkb3duIG9uCglyZWR1bmRhbnQgUmVkcmF3V2luZG93KCkgY2FsbHMuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJUHJvY2VzcyBDb25maWd1cmVOb3RpZnkgb25seSBmb3IgbWFuYWdlZCB3aW5kb3dzLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglEbyBub3QgcmVkcmF3IHBhcmVudCBpZiB0aGUgd2luZG93IHdhcyBoaWRkZW4gYmVmb3JlIFNldFdpbmRvd1BvcygpLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglPbWl0IHNvbWUgbm9uY2xpZW50IGRlY29yYXRpb24gcGFpbnRpbmcgZm9yIG1hbmFnZWQgd2luZG93cy4KCgkqIFtjb250cm9scy9tZW51LmNdIFt3aW5kb3dzL21kaS5jXSBbd2luZG93cy9ub25jbGllbnQuY10KCUltcGxlbWVudGVkIFdNX05FWFRNRU5VLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCU11bHRpY29sdW1uIGxpc3Rib3hlcyByZXR1cm4gV1ZSX1ZSRURSQVcgb24gV01fTkNDQUxDU0laRS4KCgkqIFttaXNjL3NoZWxsLmNdCglBZGRlZCAuSUNPIGZpbGUgaGFuZGxpbmcgdG8gRXh0cmFjdEljb24oKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEF1ZyAxMSAxMzowMDoyMCAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb25maWd1cmUuaW5dIFtpbmNsdWRlL2FjY29uZmlnLmhdIFt0b29scy9idWlsZC5jXQoJQWRkZWQgY2hlY2sgZm9yIHVuZGVyc2NvcmUgb24gZXh0ZXJuYWwgc3ltYm9scy4KCgkqIFttZW1vcnkvc2VsZWN0b3IuY10gW21lbW9yeS9nbG9iYWwuY10KCUZpeGVkIEZyZWVTZWxlY3RvcigpIHRvIGZyZWUgb25seSBvbmUgc2VsZWN0b3IuCglBZGRlZCBTRUxFQ1RPUl9GcmVlQmxvY2soKSB0byBmcmVlIGFuIGFycmF5IG9mIHNlbGVjdG9ycy4KCgkqIFtvYmplY3RzL2NvbG9yLmNdCglGaXhlZCBhIGJ1ZyBpbiBDT0xPUl9Ub0xvZ2ljYWwoKSB0aGF0IGNhdXNlZCBHZXRQaXhlbCgpIHRvIGZhaWwgb24KCWhpLWNvbG9yIGRpc3BsYXlzLgoKCSogW3Rvb2xzL2J1aWxkLmNdIFtpZjE2MzIvY3J0ZGxsLnNwZWNdCglBZGRlZCAnZXh0ZXJuJyB0eXBlLCB1c2VkIGZvciBleHRlcm5hbCB2YXJpYWJsZXMgb3IgZnVuY3Rpb25zLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglBbGxvdyBkZS1hY3RpdmF0aW5nIGEgd2luZG93IGluIFdJTlBPU19DaGFuZ2VBY3RpdmVXaW5kb3coKS4KCgkqIFt3aW5kb3dzL3dpbnByb2MuY10KCUFkZGVkIDMyLXRvLTE2IHRyYW5zbGF0aW9uIGZvciBidXR0b24gbWVzc2FnZXMuCglGaXhlZCBXSU5QUk9DX0dldFB0cigpIHRvIGF2b2lkIGNyYXNoZXMgb24gMzItYml0IHByb2NlZHVyZXMgdGhhdAoJaGFwcGVuIHRvIGJlIHZhbGlkIFNFR1BUUnMuCgpTYXQgQXVnIDEwIDE4OjIyOjI1IDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglSZW1vdmVkIGEgRklYTUUgaW4gTVNHX1BlZWtIYXJkd2FyZU1zZygpOiBwcm9kdWNlcyBjb3JyZWN0IAoJZGF0YSBmb3IgdGhlIEpPVVJOQUxSRUNPUkQtaG9vayAodXNpbmcgRVZFTlRNU0cxNiBzdHJ1Y3R1cmUpLgoKCSogW2lmMTYzMi9nZGkuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXSBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJSW50cm9kdWNlZCB1bmRvY3VtZW50ZWQgQVBJIGZ1bmN0aW9uIElzVmFsaWRNZXRhRmlsZSgpLCBwbHVzIGEKIAltaW5vciBmaXggaW4gbGFzdCBwYXRjaCBvZiBDb3B5TWV0YUZpbGUoKS4KCgkqIFtvYmplY3RzL2dkaW9iai5jXQoJUmVtb3ZlZCBhIEZJWE1FIGluIElzR0RJT2JqZWN0KCk6IGFkZGVkIG1hZ2ljIHdvcmQgY2hlY2suCgpTdW4gQXVnIDEwIDE4OjEwOjEwIDE5OTYgIEJydWNlIE1pbG5lciA8QnJ1Y2UuTWlsbmVyQGdlbmV0aWNzLnV0YWguZWR1PgoKCSogW2NvbnRyb2xzL3N0YXR1c3dpbi5jXQoJRmlyc3QgcGFzcyBhdCBpbXBsZW1lbnRpbmcgdGhlIFN0YXR1c1dpbmRvdyBjbGFzcy4KCgkqIFtpbmNsdWRlL2NvbW1jdHJsLmhdCglIZWFkZXIgZmlsZSBmb3IgY29tbW9uIGNvbnRyb2xzLgoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10KCUFkZGVkIEluaXRDb21tb25Db250cm9scygpLgoKCSogW2lmMTYzMi9jb21jdGwzMi5zcGVjXQoJQWRkIERyYXdTdGF0dXNUZXh0QSwgQ3JlYXRlU3RhdHVzV2luZG93QSwgSW5pdENvbW1vbkNvbnRyb2xzLgoKCSogW3dpbjMyL2ZpbmRmaWxlLmNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10KCUFkZCBGaW5kTmV4dEZpbGUzMkEsIEZpbmRDbG9zZS4KCU1vZGlmaWVkIEZpbmRGaXJzdEZpbGUzMkEgc28gaXQgd29ya3Mgd2l0aCBGaW5kTmV4dEZpbGUzMkEuCgoJKiBbaW5jbHVkZS93aW5iYXNlLmhdCglGaXhlZCBXSU4zMl9GSU5EX0RBVEEgc3RydWN0dXJlIG1lbWJlciBuYW1lcy4KClNhdCBBdWcgMTAgMDk6MDA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9zY3JvbGwuY10KCUNoYW5nZWQgc2Nyb2xsaW5nIHJvdXRpbmVzIHRvIGJlbmVmaXQgZnJvbSBEQ0UgY29kZSB1cGRhdGUuCgpUaHUgQXVnICA4IDE4OjA1OjA5IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2ZpbGVzL2ZpbGUuY10KCVNlYXJjaFBhdGgqIGNvdWxkIGdldCBOVUxMIGZvciBsYXN0cGFydCBhcmd1bWVudC4KCgkqIFtpZjE2MzIvYnVpbGQtc3BlYy50eHRdIFtkb2N1bWVudGF0aW9uL2RlYnVnZ2luZ10KCVZhcmFyZ3MgZG9jdW1lbnRhdGlvbiBhZGRlZCwgZGVidWdnaW5nIGhpbnRzIHVwZGF0ZWQuCgoJKiBbaWYxNjMyL2NydGRsbC5zcGVjXVttaXNjL2NydGRsbC5jXVttaXNjL01ha2VmaWxlLmluXQoJU3RhcnRlZCB0byBpbXBsZW1lbnQgQ1JURExMLgoKCSogW2lmMTYzMi93c29jazMyLnNwZWNdCglTb21lIHRodW5rcyB0byBzdGFuZGFyZCBsaWJjIGZ1bmN0aW9ucyAoc3RydWN0dXJlcyBoYXZlIHRoZSBzYW1lCiAJZWxlbWVudHMsIGJ1dCBwZXJoYXBzIHdyb25nIG9mZnNldCBkdWUgdG8gcGFja2luZykuCgoJKiBbaW5jbHVkZS9rZXJuZWwzMi5oXVtpbmNsdWRlL3dpbmRvd3MuaF1bd2luMzIvKi5jXVtsb2FkZXIvbWFpbi5jXQoJTWVyZ2VkIGtlcm5lbDMyLmggaW50byB3aW5kb3dzLmguCgoJKiBbbWlzYy9sc3RyLmNdCglFbmhhbmNlZCBGb3JtYXRNZXNzYWdlKCkuCgoJKiBbbWlzYy9tYWluLmNdIFtpZjE2MzIva2VybmVsLnNwZWNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUdldFZlcnNpb24oKSB1cGRhdGVkIHRvIG5ldyBuYW1pbmcgc3RhbmRhcmQuCglDaGFuZ2VkIGxhbmd1YWdlIGhhbmRsaW5nIHRvIHN1cHBvcnQgbGFuZ3VhZ2UgaWRzLgoKCSogW21pc2Mvc2hlbGwuY10KCUVuaGFuY2VkIEZpbmRFeGVjdXRhYmxlLCBzbyBpdCBmaW5kcyBmaWxlcyBpbiB0aGUgc2VhcmNoIHBhdGggdG9vLgoKCSogW3dpbjMyL2Vudmlyb25tZW50LmNdCglHZXRDb21tYW5kTGluZSogdXBkYXRlZC4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10gW2xvYWRlci9wZV9yZXNvdXJjZS5jXQoJRmluZFJlc291cmNlRXgzMiogYWRkZWQuCglMb2FkaW5nIG9mIG1lc3NhZ2V0YWJsZXMgYWRkZWQuCglMYW5ndWFnZSBoYW5kbGluZyBub3cgdXNlcyBXaW5lIGRlZmF1bHQgbGFuZ3VhZ2UgaWQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBBdWcgIDQgMTg6MTg6NDggMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglBdHRlbXB0ZWQgdG8gaW1wbGVtZW50IHVuZG9jdW1lbnRlZCBzY3JvbGwtYmFyIG1lc3NhZ2VzLgoKCSogW3Rvb2xzL2J1aWxkLmNdIFtpbmNsdWRlL2NhbGxiYWNrLmhdIFt3aW5kb3dzL3dpbnByb2MuY10KCUNhbGxUbzE2XyogZnVuY3Rpb25zIG5vdyBnZXQgRFMgZnJvbSB0aGUgcHJldmlvdXMgMTYtYml0IHN0YWNrZnJhbWUuCgoJKiBbaWYxNjMyL3RodW5rLmNdIFtpbmNsdWRlL2NhbGxiYWNrLmhdCglBZGRlZCB0aHVua3MgdG8gaW1wbGVtZW50IGNhbGxiYWNrcyBmb3IgdGhlIGVtdWxhdG9yLiBOb3cgYWxsIHRoZQoJRW51bSogZnVuY3Rpb25zIGFsd2F5cyB0YWtlIGEgcmVhbCBmdW5jdGlvbiBwb2ludGVyIGV2ZW4gaW4gdGhlCgllbXVsYXRvci4KCQoJKiBbbG9hZGVyL2J1aWx0aW4uY10KCVJlbW92ZWQgYmluYXJ5IHNlYXJjaCBpbiBCVUlMVElOX0dldEVudHJ5UG9pbnQzMigpLCBhcyBpdCBkaWRuJ3QKIAl3b3JrIHdpdGggTlVMTCBlbnRyeSBwb2ludHMuIFVzaW5nIGxpbmVhciBzZWFyY2ggbm93LgoKCSogW2xvYWRlci9tb2R1bGUuY10KCUltcGxlbWVudGVkIElzU2hhcmVkU2VsZWN0b3IoKS4KCgkqIFtsb2FkZXIvdGFzay5jXQoJQ2hhbmdlZCBTd2l0Y2hTdGFja1RvL0JhY2sgdG8gdXNlIHRoZSBpbnN0YW5jZSBkYXRhIHRvIHN0b3JlIHRoZQoJcHJldmlvdXMgc3RhY2sgaW5zdGVhZCBvZiB0aGUgVERCLiBBbHNvIGNvcHkgdGhlIGxvY2FsIHZhcmlhYmxlcwoJb250byB0aGUgbmV3IHN0YWNrLgoJQWRkZWQgR2V0RXhlVmVyc2lvbigpIGFuZCBTZXRUYWNrU2lnbmFsUHJvYygpLgoJSW1wbGVtZW50ZWQgU2V0U2lnSGFuZGxlcigpLgoKU2F0IEF1ZyAgMyAyMjoxOTowMCAxOTk2ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQHByZHMtZ3JuLmRlbW9uLmNvLnVrPgoKCSogW2NvbnRyb2xzL21lbnUuY10KCSJGaXhlZCIgcHJvYmxlbSBpbiBkZWxldGluZyBtZW51cyB3aGVyZSB3aW4zMiBjb3VsZCBnZXQgaW50byBhbgoJZW5kbGVzcyBsb29wIHdoZW4gaXQgY3Jhc2hlZC4gSSB0aGluayBJJ3ZlIGZpeGVkIHRoZSBzeW1wdG9tcywgbm90Cgl0aGUgb3JpZ2luYWwgcHJvYmxlbSBzbyBpdCBtaWdodCBiZSB3b3J0aCBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgoJKiBbZGVidWdnZXIvcmVnaXN0ZXJzLmNdCglBZGRlZCBtaXNzaW5nICNpZmRlZnMgb24gRlNfUkVHIGFuZCBHU19SRUcsIG5lZWRlZCBmb3IgRnJlZUJTRCB0bwoJY29tcGlsZSB3aW5lIHByb3Blcmx5LgoKCSogW2ZpbGVzL2Rvc19mcy5jXQoJTWFkZSBET1NGU19IYXNoIGFuZCBET1NGU19NYXRjaCBub24tc3RhdGljIHNvIHRoZXkgY2FuIGJlIGNhbGxlZAoJZnJvbSB3aW4zMi9maW5kZmlsZS5jIChxLnYuKS4KCgkqIFtpZjE2MzIvZ2RpMzIuc3BlY10KCUFkZGVkIFNldE1hcE1vZGUgKGNhbGwgZXhpc3RpbmcgZnVuY3Rpb24pCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCglBZGRlZCBGaW5kRmlyc3RGaWxlQSBhbmQgU2V0RmlsZUF0dHJpYnV0ZXNBLgoKCSogW2lmMTYzMi91c2VyMzIuc3BlY10KCUFkZGVkIEJyaW5nV2luZG93VG9Ub3AsIENyZWF0ZVBvcHVwTWVudSwgR2V0S2V5U3RhdGUsIEdldFBhcmVudCwKCUlzRGxnQnV0dG9uQ2hlY2tlZCAoY2FsbCBleGlzdGluZyBmdW5jdGlvbnMpIGFuZCBJc0RpYWxvZ01lc3NhZ2VBLAoJVW5ob29rV2luZG93c0hvb2tFeC4KCgkqIFt3aW4zMi9maWxlLmNdCglBZGRlZCBzdHViIGZ1bmN0aW9uIFNldEZpbGVBdHRyaWJ1dGVzMzJBLiBJdCdzIGEgc3R1YiBiZWNhdXNlIEkKCWNhbid0IHJlYWxseSB3b3JrIG91dCB3aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGRvIHdpdGggbW9zdAoJYXR0cmlidXRlcyBpbiBhIFVuaXggZW52aXJvbm1lbnQuIEFueW9uZSBjYXJlIHRvIGV4cGFuZCBpdD8KCgkqIFt3aW4zMi9maW5kZmlsZS5jXQoJTmV3IGZpbGUuIEluaXRpYWwgc3RhYiBhdCBGaW5kRmlyc3RGaWxlLiBUaGlzIGRvZXNuJ3Qgd29yayBhcwoJc3BlY2lmaWVkIHlldCwgdGhvdWdoIGEgbG90IG9mIHRoZSBncm91bmR3b3JrIGlzIHRoZXJlLiBJIGhhdmVuJ3QKCXRpbWUgdG8gd29yayBvbiB0aGlzIGZvciB0aGUgbmV4dCBtb250aCwgc28gaWYgYW55b25lIHdhbnRzIHRvIHBpY2sKCWl0IHVwIGFuZCBydW4gd2l0aCBpdCBwbGVhc2UgZG8uCgoJKiBbd2luMzIvbWVtb3J5LmNdCglSZW1vdmVkIG1hbGxvYy5oIGZyb20gaW5jbHVkZXMgKGNvdmVyZWQgYnkgc3RkbGliLmggaW5jbHVkZSwgYW5kCglnZXRzIHJpZCBvZiBhIHdhcm5pbmcgaW4gRnJlZUJTRCkuCgoJKiBbd2luMzIvbmV3Zm5zLmNdCglVbmhvb2tXaW5kb3dzSG9va0V4MzJBIHN0dWIgYWRkZWQuCgoJKiBbd2luMzIvdXNlcjMyLmNdCglBZGRlZCBpbXBsZW1lbnRhdGlvbiBvZiBJc0RpYWxvZ01lc3NhZ2UzMkEuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUlzRGxnQnV0dG9uQ2hlY2tlZCBub3cgY2FsbHMgU2VuZERsZ0l0ZW1NZXNzYWdlMzJBIGluc3RlYWQgb2YKCVNlbmREbGdJdGVtTWVzc2FnZTE2LgoKU2F0IEF1ZyAgMyAxODowMDowMCAxOTk2IEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCVJlbW92ZWQgcmVjdGFuZ2xlIGNoZWNraW5nIChjb25mbGljdGVkIHdpdGggbm9uc3RhbmRhcmQKCW1hcHBpbmcgbW9kZXMpLiAKCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJQWRkZWQgY2hlY2sgZm9yIGNoaWxkLXN0eWxlIGRpYWxvZ3MgdG8gRFNfQUJTQUxJR04KCWNvb3JkaW5hdGUgY29udmVyc2lvbi4KCgkqIFtvYmplY3RzL2NvbG9yLmNdCglDbGVhbmVkIHVwIG1pc2MuIGJpdHMKClRodSBBdWcgIDEgMTA6NTE6NDUgMTk5NiAgQW5kcmV3IExld3lja3kgPHBsZXd5Y2t5QG9pc2UudXRvcm9udG8uY2E+CgoJKiBbd2luZG93cy9mb2N1cy5jXSBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy93aW4uY10KCSAgW3dpbmRvd3MvZGVmZGxnLmNdCglGaXhlcyB0byBmb2N1c2luZyBhbmQgYWN0aXZhdGlvbi4KCgkqIFt3aW5kb3dzL2RlZmRsZy5jXQoJUHJvcGVybHkoPykgaGFuZGxlIERNX0dFVERFRklELgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglIYW5kbGUgQ0JfRklORFNUUklOR0VYQUNULCBDQl9TRVRFRElUU0VMLCBDQl9HRVRFRElUU0VMLgoJQ0JDaGVja1NpemU6IEFkanVzdCBlZGl0IHBvc2l0aW9uLgoKVHVlIEp1bCAzMCAwOTo0NjozNiAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtmaWxlcy9maWxlLmNdIFtpbmNsdWRlL2ZpbGUuaF0gW2xvYWRlci9tb2R1bGUuY10gW2xvYWRlci9uZV9pbWFnZS5jXQoJUGFzcyBIRklMRXMgaW5zdGVhZCBvZiB1bml4LWZkcyB0byBzZWxmLWxvYWRlciBjb2RlLgoKTW9uIEp1bCAyOSAyMTo0ODoyNSAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW2luY2x1ZGUvbWV0YWZpbGUuaF0gW29iamVjdHMvbWV0YWZpbGUuY10gW29iamVjdHMvdGV4dC5jXQoJSW1wbGVtZW50ZWQgaGFuZGxpbmcgb2Ygc29tZSBuZXcgbWV0YWZpbGUgcmVjb3JkcyAoTUVUQV8uLi4pCglpbiBQbGF5TWV0YUZpbGVSZWNvcmQoKSwgcmV3cml0ZSBvZiAnY2FzZSBNRVRBX0VYVFRFWFRPVVQnLgoJQWRkZWQgZnVuY3Rpb25zIGxpa2UgTUZfU3RyZXRjaEJsdCgpIGZvciB1c2FnZSBpbiBtZXRhZmlsZXMuCglNaW5vciBidWdmaXggaW4gQ29weU1ldGFmaWxlKCkuCgoJKiBbb2JqZWN0cy9iaXRtYXAuY11bb2JqZWN0cy9kaWIuY10KCUFkZGVkIGNoZWNrIGZvciBtZXRhZmlsZS1EQyBpbiBCaXRtYXAgYW5kIERJQiBmdW5jdGlvbnM6CglDcmVhdGVDb21wYXRpYmxlQml0bWFwKCkgZXRjLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gSnVsIDI4IDE3OjU3OjE5IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2xvYWRlci90YXNrLmNdIFtpbmNsdWRlL3Rhc2suaF0KCUltcGxlbWVudGVkIFN3aXRjaFN0YWNrVG8oKS9Td2l0Y2hTdGFja0JhY2soKS4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdIFtsb2FkZXIvbWFpbi5jXQoJQWRkZWQgX193aW5lbGliIHZhcmlhYmxlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gZW11bGF0b3IgYW5kCiAJbGlicmFyeSBhdCBydW4tdGltZS4gTGF0ZXIgb24sIHRoaXMgc2hvdWxkIGF2b2lkIHNvbWUKIAlyZWNvbXBpbGF0aW9ucyB3aGVuIGJ1aWxkaW5nIFdpbmVsaWIuCgoJKiBbd2luZG93cy9wcm9wZXJ0eS5jXQoJSW1wbGVtZW50ZWQgV2luMzIgZnVuY3Rpb25zIGZvciB3aW5kb3cgcHJvcGVydGllcy4KCkZyaSBKdWwgMjYgMTg6MDA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJSW1wbGVtZW50ZWQgTEJTX1NPUlQgc3R5bGUsIFdNX0NPTVBBUkVJVEVNLCBhbmQgV01fREVMRVRFSVRFTQoJbWVzc2FnZXMuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJQ2FsbCBUcmFuc2xhdGVNZXNzYWdlKCkgdG8gZW5hYmxlIHNob3J0Y3V0cyAob24gV01fQ0hBUikuCgoJKiBbaW5jbHVkZS9jdXJzb3JpY29uLmhdCglNb3ZlZCAjcHJhZ21hIHBhY2soMSkgYmFjayB0byB3aGVyZSBpdCBiZWxvbmdzLgoKCSogW29iamVjdHMvcGFsZXR0ZS5jXQoJUmVhbGl6ZURlZmF1bHRQYWxldHRlKCkgbWFwcyB0byBzeXN0ZW0gY29sb3JzIG9ubHkuCglEbyBub3QgYnJvYWRjYXN0IHBhbGV0dGUgbm90aWZpY2F0aW9ucyB3aGVuIGluIFRydWVDb2xvci4KCgkqIFtvYmplY3RzL2NvbG9yLmNdIFtpbmNsdWRlL3BhbGV0dGUuaF0KCU1pc2NlbGxhbmVvdXMgb3B0aW1pemF0aW9ucy4gSGFkIHRvIGZpeCBzZXZlcmFsCgkiaW1wcm92ZW1lbnRzIiBtYWRlIHRvIG15IHBhdGNoIGZvciBwcmV2aW91cyByZWxlYXNlLgoKCSogW29iamVjdHMvZGliLmNdCglSZXZlcnNlIGRpYiBiaXRzIG9yZGVyIGZvciAyNC1iaXQgU2V0RElCaXRzKCkuCgoJKiBbb2JqZWN0cy9kYy5jXQoJR2V0RGV2aWNlQ2FwcygpIGRvZXMgbm90IHJldHVybiBSQ19QQUxFVFRFIHdoZW4gaW4gVHJ1ZUNvbG9yLgoKCSogW3dpbmRvd3Mvc2Nyb2xsLmNdCglTY3JvbGwgdXBkYXRlIHJlZ2lvbiB0b28uCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglJbmNsdWRlIFFTX01PVVNFIGludG8gdGhlIGV2ZW50IG1hc2sgZm9yIG5vbmNsaWVudCBtb3VzZQoJbWVzc2FnZSBmaWx0ZXIuIEZpeGVzIHByb2JsZW1zIHdpdGggV29yZCA2IGZyZWV6aW5nIHdoZW4KCW1vdXNlIGhpdHMgbm9uY2xpZW50IGFyZWEuCgoJKiBbd2luZG93cy93aW4uY10gCglBbGxvdyB0b3AtbGV2ZWwgd2luZG93cyB0byBiZSBsaW5rZWQgYXMgSFdORF9UT1AgaW4gQ3JlYXRlV2luZG93KCkuCgoJKiBbd2luZG93cy93aW5wb3MuY10gW3dpbmRvd3MvbWRpLmNdCglBdHRlbXB0IHRvIGZpeCBjb250cm9sIG1lbnUgZHVwbGljYXRpb24uCgpGcmkgSnVsIDI2IDA5OjQ5OjM1IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2ZpbGVzL2RyaXZlLmNdCglHZXREcml2ZVR5cGUzMkEoKTogcmV0dXJuIHZhbHVlIGZvciBDRFJPTSBmaXhlZC4KCgkqIFtmaWxlcy9maWxlLmNdCglTZWFyY2hQYXRoKiBhZGRlZC4KCgkqIFtpZjE2MzIvZ2RpMzIuc3BlY10gW29iamVjdHMvYnJ1c2guY10KCVNldEJydXNoT3JnRXgoKSBhZGRlZC4KCgkqIFtsb2FkZXIvcGVfcmVzb3VyY2UuY10KCUlmIGV2ZW4gbG9hZGluZyB0aGUgZGVmYXVsdCBlbnRyeSBmYWlscywgd2UganVzdCB1c2UgdGhlIGZpcnN0CgllbnRyeSBmcm9tIHRoZSByZXNvdXJjZSBkaXJlY3RvcnkuCgoJW2xvYWRlci90YXNrLmNdCglTZXRTaWdIYW5kbGVyKCkgc3R1YiBhZGRlZCwgUGFyYWRveCA0LjUgbm93IHN0YXJ0cyB1cC4KCgkqIFttaXNjL2NvbW0uY10gW2luY2x1ZGUvd2luZG93cy5oXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCglDT01NIGZ1bmN0aW9ucyB1cGRhdGVkIHRvIHdpbjMyLCBub3QgY29tcGxldGUuCgoJKiBbbWlzYy9sc3RyLmNdCglGb3JtYXRNZXNzYWdlQSBwYXJ0aWFsbHkgaW1wbGVtZW50ZWQuCgoJKiBbaW5jbHVkZS9taXNjZW11LmhdIFttZW1vcnkvc2VsZWN0b3IuY10KCSAgW21lbW9yeS9nbG9iYWwuY10gW21pc2NlbXUvZG9zbWVtLmNdCglET1MgbWVtb3J5IGhhbmRsaW5nIGNoYW5nZWQ6IDFNQiBwcmVhbGxvY2F0ZWQgYmxvY2ssIHJlYWwtbW9kZQoJc2VnbWVudCBoYW5kbGluZyBwb3NzaWJsZSwgU2V0U2VsZWN0b3JCYXNlIGludG8gbG93ZXIgcGh5c2ljYWwgMU1CCglwb3NzaWJsZS4KCgkqIFttaXNjZW11L2RwbWkuY10KCVJlYWwtbW9kZSBzZWdtZW50cyBjaGFuZ2VkLCByZWFsLW1vZGUgaW50IDIxLGF4PTY1MDYgYWRkZWQuCglBWD0weDAzMDMgYWRkZWQuCgoJKiBbbXVsdGltZWRpYS90aW1lLmNdCglGaXhlZCBidWcgaW4ga2lsbFRpbWVyLgoKCSogW29iamVjdHMvYml0bWFwLmNdCglMb2FkSW1hZ2VBIHBhcnRpYWxseSBpbXBsZW1lbnRlZC4KCldlZCBKdWwgMjQgMTg6MjA6MjQgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtpbmNsdWRlL2RkZV9tZW0uaF1baW5jbHVkZS9kZGVfcHJvYy5oXQoJICBbaXBjL2RkZV9hdG9tLmNdW2lwYy9kZGVfcHJvYy5jXVt3aW5kb3dzL21lc3NhZ2UuY10KCSAgW2lwYy9nZW5lcmljX2hhc2guaF1bbGlicmFyeS9taXNjc3R1YnMuY10KCUNoYW5nZXMgZm9yIGVycm9yIGZyZWUgY29tcGlsYXRpb24gdXNpbmcgIi0td2l0aC1pcGMiOgoJcmVwbGFjZWQgc29tZSBuYW1lcyB3aXRoICoxNi1lcXVpdmFsZW50IChlLmcuIE1TRyB0byBNU0cxNiksCgltb2RpZmllZCBwcm90b3R5cGUgb2YgZnVuY3Rpb24gRERFX0dsb2JhbEZyZWUoKSAuCgoJKiBbb2JqZWN0cy9wYWxldHRlLmNdCglBZGRlZCBjaGVjayBmb3IgbWV0YWZpbGUtREMgaW4gR0RJU2VsZWN0UGFsZXR0ZSgpLAoJR0RJUmVhbGl6ZVBhbGV0dGUoKSxSZWFsaXplRGVmYXVsdFBhbGV0dGUoKSBhbmQKCUlzRENDdXJyZW50UGFsZXR0ZSgpLgoKVHVlIEp1bCAyMyAyMjo0Njo1MyAxOTk2ICBBbmRyZXcgTGV3eWNreSA8cGxld3lja3lAb2lzZS51dG9yb250by5jYT4KCgkqIFtjb250cm9scy9lZGl0LmNdCglFRElUX1dNX0NyZWF0ZTogRG9uJ3QgRURJVF9FTV9SZXBsYWNlU2VsIGlmIGNyZWF0ZWQgd2l0aCBsUGFyYW0gPSAiIiwKCWZpeGVzIFdpbmhlbHAuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCURJQUxPR19DcmVhdGVJbmRpcmVjdDogSW5pdGlhbGlzZSBkbGdQcm9jIGJlZm9yZSBjcmVhdGluZyBjaGlsZHJlbi4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KV2VkIEp1bCAxNyAxNjoxMDoxNiAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb25maWd1cmUuaW5dCglHZW5lcmF0ZSBpbmNsdWRlL2NvbmZpZy5oIGluc3RlYWQgb2YgcHV0dGluZyBldmVyeXRoaW5nIG9uIHRoZQoJY29tbWFuZC1saW5lLgoJUmVtb3ZlZCAtd2l0aC1tYWxsb2MtZGVidWcgb3B0aW9uIChub3QgdXNlZnVsIGZvciBlbmQgdXNlcnMKCWFueXdheSkuCglBZGRlZCBjaGVjayBmb3IgbWVtbW92ZSgpLgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0gWyovTWFrZWZpbGUuaW5dCglBZGRlZCBkZWZpbml0aW9uIG9mIF9fV0lORV9fIHN5bWJvbCB3aGVuIGNvbXBpbGluZyBXaW5lIGNvZGUKCShlbXVsYXRvciBvciBsaWJyYXJ5KSBhcyBvcHBvc2VkIHRvIHVzZXIgcHJvZ3JhbXMuCgoJKiBbZGVidWdnZXIvZWRpdGxpbmUuY10gW2RlYnVnZ2VyL3JlYWRsaW5lLypdCglNb3ZlZCBhbGwgdGhlIHJlYWRsaW5lIGNvZGUgaW50byBkZWJ1Z2dlci9lZGl0bGluZS5jLiBSZW1vdmVkIHRoZQoJcmVhZGxpbmUgc3ViZGlyZWN0b3J5LgoKCSogW2ZpbGVzL3Byb2ZpbGUuY10KCUFkZGVkIFBST0ZJTEVfR2V0V2luZUluaUludCgpLgoKCSogW2luY2x1ZGUvc3RhY2tmcmFtZS5oXSBbbG9hZGVyL3Rhc2suY10KCVRoZSAxNi1iaXQgc3RhY2tmcmFtZSBub3cgYWxzbyBleGlzdHMgZm9yIFdpbmVsaWIgKGV2ZW4gdGhvdWdoIGl0Cglvbmx5IGV2ZXIgY29udGFpbnMgb25lIGZyYW1lKS4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglBZGRlZCBmdW5jdGlvbiBNT0RVTEVfQ3JlYXRlRHVtbXlNb2R1bGUoKSB0byBjcmVhdGUgYSBkdW1teSBXaW4xNgoJbW9kdWxlIGZvciBXaW5lbGliIGFuZCBXaW4zMi4KCgkqIFttZW1vcnkvbGR0LmNdCglNYWtlIHN1cmUgdGhlIGxkdCBlbnRyeSBjb250ZW50cyB3aWxsIGJlIGFjY2VwdGFibGUgZm9yIHRoZSBMaW51eAoJa2VybmVsLgoKCSogW21lbW9yeS9zZWxlY3Rvci5jXQoJRml4ZWQgU2V0U2VsZWN0b3JMaW1pdCgpIHdoZW4gdGhlIGxpbWl0IGlzIGluIHBhZ2VzLgoKCSogW21pc2MvcG9ydC5jXQoJQWRkZWQgbWVtbW92ZSgpLgoKCSogW21pc2NlbXUvZHBtaS5jXQoJQ2xlYXIgdGhlIHNlZ21lbnQgcmVnaXN0ZXJzIHRoYXQgY29udGFpbiB0aGUgc2VsZWN0b3IgYmVpbmcgZnJlZWQKCWluIGludDMxL2F4PTAwMDEuCglBZGRlZCBtaXNzaW5nIGJyZWFrIGFmdGVyIFNlbGVjdG9yQWNjZXNzUmlnaHRzIGNhbGwuCgoJKiBbd2luMzIvc3RydWN0MzIuY10KCUFkZGVkIGNvbnZlcnNpb25zIGZvciBNRElDUkVBVEVTVFJVQ1QuCgoJKiBbd2luZG93cy93aW5wcm9jLmNdCglBZGRlZCBtZXNzYWdlIGNvbnZlcnNpb25zIGZvciBXTV9NRElDUkVBVEUuCgpUdWUgSnVsIDE2IDE5OjQ2OjI0IDE5OTYgIFBhdmVsIEthbmtvdnNreSA8S0FOQGZyb2RlLmRjaXQuY3o+CgoJKiBbd2luZG93cy9jbGFzcy5jXQoJQWRkZWQgR2V0RXhlUHRyKCkgY2FsbCBpbiBDTEFTU19GaW5kQ2xhc3NCeUF0b20oKS4KCk1vbiBKdWwgMTUgMTc6NDk6MzggMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbaWYxNjMyLyouc3BlY10KCVNvbWUgbW9yZSB0cml2aWFsIHNwZWNzIGFkZGVkLgoKCSogW2lmMTYzMi9nZGkzMi5zcGVjXSBbb2JqZWN0cy9mb250LmNdW3dpbmRvd3MvZGlhbG9nLmNdCglDcmVhdGVGb250MzIqIGFkZGVkLCBjaGFuZ2VkIHRvIG5ldyBuYW1pbmcgc3RkLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXSBbaW5jbHVkZS9tbXN5c3RlbS5oXSBbaW5jbHVkZS93aW50eXBlcy5oXQoJU29tZSBkZWZpbmVzL3R5cGVzIGFkZGVkLgoKCSogW3dpbjMyL3RocmVhZC5jXQoJVGxzU2V0VmFsdWUoKSByZXR1cm5zIGJvb2xlYW4uCgoJKiBbd2luMzIvcmVzb3VyY2UuY10gW2xvYWRlci9wZV9yZXNvdXJjZS5jXSBbbG9hZGVyL3Jlc291cmNlLmNdCiAJICBbY29udHJvbHMvbWVudS5jXSBbb2JqZWN0cy9iaXRtYXAuY10KCUNsZWFudXAgb2YgdGhlIHJlc291cmNlIGZ1bmN0aW9ucywgbW9zdGx5IGNoYW5nZXMgdG8gbmV3IG5hbWluZwogCXN0YW5kYXJkIGFuZCBmaXhpbmcgb2YgYXJndW1lbnQgdHlwZXMgc28gdGhhdCB0aGV5IGFncmVlIHdpdGggdGhlCiAJd2luMTYvd2luMzIgQVBJLgoKVGh1IEp1bCAxMSAxNTowMDowMCAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJU2hvd1dpbmRvdygpIGZpeGVzLgoKCSogW3dpbmRvd3MvbWRpLmNdCglGaXggcmV2ZXJzZWQgTFBBUkFNIGluIFdNX01ESUFDVElWQVRFLgoKCSogW3dpbmUuaW5pXQoJTmV3IG9wdGlvbiBBbGxvY1N5c3RlbUNvbG9ycyB0ZWxscyBXaW5lIGhvdyBtYW55IGNvbG9ycyB0byBncmFiCglmcm9tIHRoZSBzeXN0ZW0gY29sb3JtYXAuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10gW29iamVjdHMvZGMuY10KCUZpeGVkIHBpbmsgZ2FyYmFnZSBvdmVyIFdvcmQgYnV0dG9ucyBpbiBQc2V1ZG9Db2xvci4gQWRkZWQKCW9wdGlvbmFsIERTVElOVkVSVCBzaG9ydGN1dCBmb3IgZmFzdGVyIHRleHQgc2VsZWN0aW9uLgoKCSogW21pc2Mvd3NwcmludGYuY10KCVNraXAgYm9ndXMgc2VnbWVudGVkIHBvaW50ZXJzIGluIHdzdm5wcmludGYxNigpLiAKCgkqIFtvYmplY3RzL2dkaW9iai5jXQoJQWRkZWQgcGFsZXR0ZSBoYW5kbGluZyB0byBVbnJlYWxpemVPYmplY3QoKS4gCgoJKiBbb2JqZWN0cy9jb2xvci5jXSBbb2JqZWN0cy9wYWxldHRlLmNdIFt3aW5kb3dzL2RjZS5jXQoJV2luZSBnZXRzIHBhbGV0dGUgbWFuYWdlciB3aXRoIHN1cHBvcnQgZm9yIG1vcmUgdGhhbiAyMCBjb2xvcnMuIAoJT25seSBQc2V1ZG9Db2xvciBhbmQgVHJ1ZUNvbG9yIHZpc3VhbHMgdGVzdGVkIHNvIGZhci4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXSBbd2luZG93cy93aW4uY10gCglTZXQgWCBzaXplIGhpbnRzIGZvciBXU19FWF9ETEdNT0RBTEZSQU1FIHdpbmRvd3MgKG5vIHJlc2l6ZSkgYW5kCgl1c2UgWFJlY29uZmlndXJlV01XaW5kb3dzKCkgaW5zdGVhZCBvZiBYQ29uZmlndXJlV2luZG93KCkgaW4KCW1hbmFnZWQgbW9kZS4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglEbyBub3QgYWxsb2NhdGUgbW9yZSB0aGFuIDY0MEsgb2YgRE9TIG1lbW9yeS4KCgkqIFttaXNjL21haW4uY10KCURvIG5vdCBhbGxvdyAtZGVza3RvcCBhbmQgLW1hbmFnZWQgdG9nZXRoZXIuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZyaSBKdWwgMTIgMTc6NDM6MDUgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglVc2UgV2luMzIgaGVhcCBmdW5jdGlvbnMgdG8gYWxsb2NhdGUgc2Nyb2xsLWJhciBpbmZvIHN0cnVjdHVyZS4KCgkqIFtkZWJ1Z2dlci9kYmcueV0gW2RlYnVnZ2VyL3JlZ2lzdGVycy5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgRlMgYW5kIEdTIHNlZ21lbnQgcmVnaXN0ZXJzLgoJQ2hlY2sgdGhhdCBzZWdtZW50IHJlZ2lzdGVycyB2YWx1ZSBhcmUgT0sgYmVmb3JlIHJldHVybmluZyBmcm9tCgl0aGUgc2lnbmFsIGhhbmRsZXIuCgoJKiBbdG9vbHMvYnVpbGQuY10gW2lmMTYzMi9yZWxheS5jXSBbbG9hZGVyL2J1aWx0aW4uY10KCUNoYW5nZWQgcmVsYXkgZGVidWdnaW5nIGZvciBXaW4zMiBmdW5jdGlvbjogdGhlIHJlbGF5IGNvZGUgbm93CglwYXNzZXMgdGhlIGVudHJ5IHBvaW50IGFkZHJlc3MgaW5zdGVhZCBvZiB0aGUgZnVuY3Rpb24gbmFtZS4KCgkqIFt0b29scy9idWlsZC5jXSBbbWlzY2VtdS8qLmNdCglBZGRlZCBzdXBwb3J0IGZvciBkYXRhIGVudHJ5IHBvaW50cyBpbiBXaW4zMiBETExzLgoJQWRkZWQgJ2NkZWNsJyBmdW5jdGlvbiB0eXBlIGZvciBXaW4zMi4KCUZvciAncmVnaXN0ZXInIGZ1bmN0aW9uLCB0aGUgcmVsYXkgY29kZSBub3cgcGFzc2VzIGEgcG9pbnRlciB0bwoJdGhlIFNJR0NPTlRFWFQgc3RydWN0dXJlLgoJCgkqIFtpbmNsdWRlL3JlZ2lzdGVycy5oXSBbaW5jbHVkZS93aW5lLmhdCglNb3ZlZCBTSUdDT05URVhUIHN0cnVjdHVyZSBkZWZpbml0aW9uIGluIHJlZ2lzdGVycy5oLgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJRG9uJ3QgZGllIGF0IG9uY2UgaWYgc29tZSBXaW4zMiBlbnRyeSBwb2ludHMgY2Fubm90IGJlIGZvdW5kLCBidXQKCXNldCB0aGVtIHRvIE5VTEwsIGp1c3QgbGlrZSB3ZSBkbyBmb3IgV2luMTYuIFRoaXMgYWxsb3dzIHNvbWUKCXByb2dyYW1zIHRvIGdvIGZ1cnRoZXIgYmVmb3JlIGNyYXNoaW5nLgoKCSogW2xvYWRlci90YXNrLmNdIFtsb2FkZXIvbWFpbi5jXQoJTW92ZWQgZ2xvYmFsIGluaXRpYWxpemF0aW9ucyBmcm9tIEluaXRUYXNrKCkgdG8gTUFJTl9Jbml0KCksIGFzCgl0aGV5IG5vIGxvbmdlciBuZWVkIGEgdGFzayBjb250ZXh0IHdpdGggdGhlIG5ldyBTRUdQVFIgaGVhcCBmdW5jdGlvbnMuCgoJKiBbbWVtb3J5L3N0cmluZy5jXQoJQWRkZWQgbHN0cmNweW5BdG9XIGFuZCBsc3RyY3B5bld0b0E7IG5vdCByZWFsIEFQSSBmdW5jdGlvbnMsIGJ1dAogCXZlcnkgY29udmVuaWVudC4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglQYXJ0aWFsbHkgaW1wbGVtZW50ZWQgRHJhd0VkZ2UoKS4KCgkqIFt3aW5kb3dzL3RpbWVyLmNdIFt3aW5kb3dzL2NhcmV0LmNdCglJbXBsZW1lbnRlZCBXaW4zMiB0aW1lciBoYW5kbGluZy4gVXBkYXRlZCBjYXJldCBtYW5hZ2VtZW50IHRvIHVzZQoJV2luMzIgdGltZXJzIChhdm9pZHMgaGF2aW5nIHRvIHVzZSBhIFdpbjE2IGNhbGxiYWNrKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJUHJldmVudCBwcm9ncmFtcyBmcm9tIHNldHRpbmcgc29tZSBzdHlsZSBiaXRzIHdpdGgKCVNldFdpbmRvd0xvbmcoKS4gVGhpcyBzaG91bGQgZml4IHNvbWUgQmFkTWF0Y2ggY3Jhc2hlcy4KCUxpbmsgbmV3IHdpbmRvd3MgYXQgdGhlIGVuZCBvZiB0aGUgbGlua2VkIGxpc3QuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCURvbid0IHRyeSB0byBhY3RpdmF0ZSBhIGNoaWxkIHdpbmRvdyBpbiBTaG93V2luZG93KCkuCgoJKiBbd2luZG93cy93aW5wcm9jLmNdCglBZGRlZCBhIDMyLT4zMiB0aHVuayB0byBzdXBwb3J0IEFuc2ktVW5pY29kZSB0cmFuc2xhdGlvbi4KCldlZCBKdWwgMTAgMjI6MTE6MTIgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbZmlsZXMvZGlyZWN0b3J5LmNdCglBZGRpdGlvbmFsICh1bmRvY3VtZW50ZWQpIHJldHVybiB2YWx1ZSBmb3IgR2V0VGVtcERyaXZlKCkgYWRkZWQuCgoJKiBbZmlsZXMvZG9zX2ZzLmNdIFtmaWxlcy9maWxlLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUdldFRlbXBGaWxlTmFtZTMyKiBhZGRlZC4KCUdldFNob3J0UGF0aE5hbWUqIGFkZGVkLgoKCSogW21lbW9yeS9zdHJpbmcuY10KCVdpbjE2IGxzdHJjcHkoKSBjYW4gZ2V0IE5VTEwgcHRycyBhcyBhcmd1bWVudCBhbmQgc3Vydml2ZS4KCgkqIFttaXNjL2x6ZXhwYW5kLmNdCglMWk9wZW5GaWxlKCk6IGFsc28gdHJ5IG9wZW5pbmcgd2l0aCBjb21wcmVzc2VkIGZpbGVuYW1lIGlmIG5vcm1hbAogCW9wZW4gZmFpbHMuCgoJKiBbbWlzYy9vbGUybmxzLmNdIFttaXNjL2xzdHIuY10gW2luY2x1ZGUvd2luZG93cy5oXQoJQ2hhciogYWRkZWQuCglDb21wYXJlU3RyaW5nKiBhZGRlZC4KClN1biBKdWwgIDcgMDE6MjI6MTQgMTk5NiAgSnVra2EgSWl2b25lbiA8aWl2b25lbkBjYy5oZWxzaW5raS5maT4KCgkqIFtvYmplY3RzL2ZvbnQuY10gW2lmMTYzMi9nZGkzMi5zcGVjXQoJQ3JlYXRlRm9udEluZGlyZWN0MzJBIGFuZCBDcmVhdGVGb250SW5kaXJlY3QzMlcgYWRkZWQuCgoJKiBbbWlzYy9vbGUybmxzLmNdCglHZXRVc2VyRGVmYXVsdExDSUQgcmV0dXJuIHZhbHVlcyB1cGRhdGVkIGZvciBuZXcgbGFuZ3VhZ2VzLgoJRmlubmlzaCBzdXBwb3J0IGFkZGVkIGZvciBHZXRMb2NhbGVJbmZvQS4KCgkqIFtvYmplY3QvcGFsZXR0ZV0gW2dkaTMyLnNwZWNdCglSZWFsaXplUGFsZXR0ZTMyIGFuZCBTZWxlY3RQYWxldHRlMzIgYWRkZWQuCgkKU2F0IEp1bCAgNiAxNzoyNzozMCAxOTk2ICBSb25hbiBXYWlkZSAgPHJvb3RAd2FpZGVyLmllPgoKCSogW21pc2Mvc2hlbGwuY10KCUZpeHVwIGZvciBTSEVMTF9GaW5kRXhlY3V0YWJsZSBzbyB0aGF0IEZpbGUtPlJ1biBmcm9tIHByb2dtYW4KCXdvcmtzIG9uY2UgbW9yZS4gU3RpbGwgbmVlZHMgc29tZSBtb3JlIGZpeHVwcyAtIGdyZXAgZm9yIEZJWE1FIGluCgl0aGlzIGZpbGUuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZyaSBKdWwgIDUgMTY6Mjc6NDMgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvZGVza3RvcC5jXQoJVXNlIFdpbmRvd3MgZmlsZSBJL08gcm91dGluZXMgdG8gbG9hZCB0aGUgZGVza3RvcCBiaXRtYXAuCgoJKiBbZmlsZXMvZmlsZS5jXQoJSW1wbGVtZW50ZWQgUmVtb3ZlRGlyZWN0b3J5KiBhbmQgRGVsZXRlRmlsZSouCgoJKiBbaW5jbHVkZS93aW5lLmhdCglBZGRlZCBTSUdDT05URVhUIHR5cGVkZWYgdG8gcmVwbGFjZSAjZGVmaW5lIHNpZ2NvbnRleHRfc3RydWN0LgoKCSogW2xvYWRlci90YXNrLmNdCglGaXhlZCBpbml0aWFsIGJyZWFrcG9pbnQgc2V0dGluZyBmb3IgV2luMzIgdGFza3MuCgoJKiBbbWlzYy93c3ByaW50Zi5jXQoJSWdub3JlIFVuaWNvZGUgZm9ybWF0cyBmb3Igd3NwcmludGYxNigpLgoKCSogW29iamVjdHMvZm9udC5jXQoJSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBHZXRUZXh0TWV0cmljcy4KCgkqIFt3aW5kb3dzL3dpbnByb2MuY10gW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL2NsYXNzLmNdCgkgIFt3aW5kb3dzL2RpYWxvZy5jXQoJTW9kaWZpZWQgd2luZG93cyBwcm9jZWR1cmVzIHRvIHVzZSB0aHVua3MsIHRvIGVuc3VyZSB0aGF0IHRoZQoJcHJvY2VkdXJlIGNhbiBiZSBjYWxsZWQgZGlyZWN0bHkgZnJvbSB0aGUgV2luZG93cyBwcm9ncmFtLgoKCSogW3dpbmRvd3Mvd2luLmNdCglBZGRlZCBmdW5jdGlvbiBXSU5fQnVpbGRXaW5BcnJheSgpIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGVudW1lcmF0ZQoJd2luZG93cy4gSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBFbnVtV2luZG93cygpIGFuZCBmcmllbmRzLgoKRnJpIEp1bCAgNSAxMTo1NjoyMiAxOTk2ICBBbmRyZWFzIEtpcnNjaGJhdW0gPGFua0ByYmcuaW5mb3JtYXRpay50aC1kYXJtc3RhZHQuZGU+CgoJKiBbY29udHJvbHMvYnV0dG9uLmNdIFt3aW5kb3dzL3dpbi5jXQoJT3BlcmF0b3IgcHJlY2VkZW5jZSBmaXhlcy4KCgkqIFtjb250cm9scy9lZGl0LmNdCglJbXBsZW1lbnRlZCBFU19QQVNTV09SRCwgRVNfTE9XRVJDQVNFIGFuZCBFU19VUFBFUkNBU0Ugc3R5bGVzLgoJRml4ZWQgd29yZCB3cmFwIHdpdGggbG9uZyB3b3Jkcy4KCgkqIFtkZWJ1Z2dlci9kZWJ1Zy5sXQoJTmV3IGFsaWFzICJ3aGVyZSIgZm9yIGNvbW1hbmQgImJhY2t0cmFjZSIuCgoJKiBbaWYxNjMyL2dkaS5zcGVjXQoJQ29ycmVjdGVkIHBhcmFtZXRlciBvZiBFeHRUZXh0T3V0LgoKCSogW2xvYWRlci9tb2R1bGUuY10KCUNvcnJlY3RlZCBwcmludGluZyBvZiB0YWJsZSBvZiBtb2R1bGVzLgoKCSogW21pc2Mvc3B5LmNdCglSZW1vdmVkIHN1cGVyZmx1b3VzIFxuIGluIG1lc3NhZ2UgbmFtZS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCURlY2xhcmVkIE1TR19TZW5kTWVzc2FnZSBhcyBzdGF0aWMuCglDaGFuZ2VkIHBhcmFtZXRlciBvZiBEaXJlY3RlZFlpZWxkKCkgZnJvbSBxdWV1ZSBoYW5kbGUgdG8gdGFzayBoYW5kbGUuCglSZW1vdmVkIHdhcm5pbmcgbWVzYWdlcyBmb3IgYXJndW1lbnQgb2YgcHJpbnRmLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglBZGRlZCB0aGUgZmxhZyBEVF9OT1BSRUZJWCB3aGVuIGRyYXdpbmcgd2luZG93IHRpdGxlcy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJV0lOX1dhbGtXaW5kb3dzIG5vdyBwcmludHMgdGhlIGludmFsaWQgd2luZG93IGhhbmRsZS4KCUFkZGVkIGEgd2FybmluZyBpZiBHZXQtL1NldFdpbmRvd1dvcmQvLUxvbmcgZ2V0cyBhbiBpbnZhbGlkIG9mZnNldC4KCgkqIFt3aW5kb3dzL3dpbnByb2MuY10KCUFsbG93cyBjcmVhdGluZyBkaWFsb2cgd2luZG93cyB3aXRoIE5VTEwgYXMgZGlhbG9nIGZ1bmN0aW9uLgoKV2VkIEp1bCAgMyAwOToyNjo0MSAxOTk2ICBBbmRyZXcgTGV3eWNreSA8cGxld3lja3lAb2lzZS51dG9yb250by5jYT4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglFVkVOVF9rZXk6IEZpeGVzIHRvIFZLXyBjb2RlIGdlbmVyYXRpb24gZm9yIHNwYWNlIGJhciBhbmQKCXB1bmN0dWF0aW9uLgoKCSogW2ZpbGVzL2ZpbGUuY10KCUdldFRlbXBGaWxlTmFtZTogZmlyc3QgY2hhcmFjdGVyIGluIHRlbXBvcmFyeSBuYW1lIGlzICJ+Ii4KCgkqIFttZW1vcnkvaGVhcC5jXQoJSEVBUF9NYWtlSW5Vc2VCbG9ja0ZyZWUgbm93IGZyZWVzIHRoZSB3aG9sZSBzdWJoZWFwIGlmIHBvc3NpYmxlLgoKCSogW29iamVjdHMvdGV4dC5jXQoJRXh0VGV4dE91dDE2KCk6IGhhbmRsZSBOVUxMIGxwUmVjdCBhbmQgRVRPX09QQVFVRS4KCgkqIFttaXNjL2RyaXZlci5jXQoJUmVtb3ZlZCBzb21lIGJ1Z3MgYW5kIHJlZm9ybWF0dGVkLiBBY3R1YWxseSBsb2FkcyBkcml2ZXJzIG5vdy4KCgkqIFtpbmNsdWRlL2NhbGxiYWNrLmhdCglBZGRlZCBDYWxsRHJpdmVyUHJvYygpIGFuZCBDYWxsV2luZG93c0V4aXRQcm9jKCkuCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJTU9EVUxFX0NhbGxXRVAoKTogbmV3IGZ1bmN0aW9uLgoKCSogW21pc2MvbHpleHBhbmQuY10KCUxaU2VlaygpOiByZXR1cm4gbmV3IHBvaW50ZXIsIG5vdCBvbGQgb25lLgoKCSogW21pc2MvdmVyLmNdCglmaW5kX25lX3Jlc291cmNlKCk6IGZpeGVkIGRlcGVuZGVuY2Ugb24gTFpTZWVrKCkgYnVnLgoJR2V0RmlsZVJlc291cmNlKCk6IGluaXRpYWxpemUgcmVzbGVuIGJlZm9yZSB1c2luZyBpdC4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglTZXRDbGFzc1dvcmQoKTogYWRkIG1pc3NpbmcgZWxzZS4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCWxwRm9udExpc3QgaXMgbm93IE1BWF9GT05UUysxLiBJdCB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgYXJyYXkuCglJbml0Rm9udExpc3Q6IGFsbG9jYXRlIG9uZSBodWdlIGFycmF5IG9mIHN0cnVjdHVyZXMuCglGT05UX01hdGNoRm9udDogdXBwZXJjYXNlIHRoZSBmYWNlIG5hbWUuCgpUaHUgSnVuIDI3IDEyOjQxOjQwIDE5OTYgIEJydWNlIE1pbG5lciA8YnJ1Y2VAZ2VuZXRpY3MudXRhaC5lZHU+CgoJKiBbbWVtb3J5L2hlYXAuY10KCUZpeGVkIGEgdHlwbyBpbiBIZWFwUmVBbGxvYygpLgoKVHVlIEp1biAyNSAyMjoyMjowMyAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtmaWxlcy9kaXJlY3RvcnkuY10gW2ZpbGVzL2RyaXZlLmNdIFtpZjE2MzIva2VybmVsLnNwZWNdCgkgIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW2lmMTYzMi9zaGVsbC5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdCglHZXRUZW1wUGF0aCogYWRkZWQKCUdldERyaXZlVHlwZSogZml4ZWQsIHVwZGF0ZWQgdG8gTmV3TmFtZVN0YW5kYXJkLgoJR2V0Q3VycmVudERpcmVjdG9yeSogZml4ZWQgKG5lZWRzIHRvIHByZXBlbmQgWDpcKS4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglNaXNzaW5nIE5VTEwgY2hlY2sgYWRkZWQuCgoJKiBbaWYxNjMyL3dpbm1tLnNwZWNdIFtsb2FkZXIvYnVpbHRpbi5jXQoJd2lubW0uZGxsICgzMmJpdCBtbXN5c3RlbSBlcXVpdmFsZW50KSBzcGVjcyBhZGRlZC4KCgkqIFttZW1vcnkvc3RyaW5nLmNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXQoJUnRse01vdmUsWmVybyxGaWxsfU1lbW9yeSBhZGRlZC4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglTb21lIE5VTEwgcHRyIGRlcmVmZXJlbmNlIGJ1Z3MgZml4ZWQuCgoJKiBbbXVsdGltZWRpYS9tY2ljZGEuY11bbXVsdGltZWRpYS9tY2lzdHJpbmcuY11bbXVsdGltZWRpYS9tbXN5c3RlbS5jXQoJQ2hlY2sgZm9yIE5VTEwgcHRyLgoJRmlsbCBtY2lPcGVuRHJ2IHdoZW4gbWl4aW5nIG1jaU9wZW4gYW5kIG1jaVNlbmRTdHJpbmcoIm9wZW4gLi4iKS4KCUFsaWFzaW5nIHNob3VsZCB3b3JrIGZvciBhbGwgTUNJIGRldmljZXMuCgoJKiBbd2luZG93cy93aW4uY10KCUFsbG93IHBhc3NpbmcgaW52YWxpZCB3aW5kb3cgaGFuZGxlcyB0byBDbG9zZVdpbmRvdygpLgoKVHVlIEp1biAyNSAyMDowMjoxNSAxOTk2ICBKdWtrYSBJaXZvbmVuIDxpaXZvbmVuQGNjLmhlbHNpbmtpLmZpPgoKCSogW2ZpbGVzL2RpcmVjdG9yeS5jXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCglHZXRTeXN0ZW1EaXJlY3RvcnkzMkEgYW5kIEdldFN5c3RlbURpcmVjdG9yeTMyVyBhZGRlZC4KCgkqIFttaXNjL21haW4uY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJQmVlcCBhbmQgU2V0RW52aXJvbm1lbnRWYXJpYWJsZTMyVyBhZGRlZC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KV2VkIEp1biAxOSAxNDo0OToyNyAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGZhdWk0NS5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtmaWxlcy9kcml2ZS5jXSAKCUdldEZyZWVEaXNrU3BhY2UqLCBHZXRWb2x1bWVJbmZvcm1hdGlvbiogYWRkZWQuCgoJKiBbZmlsZXMvZmlsZS5jXQoJRmx1c2hGaWxlQnVmZmVycywgQ3JlYXRlRGlyZWN0b3J5KiBhZGRlZC4KCgkqIFtpbmNsdWRlL3dpbmJhc2UuaF0gW2luY2x1ZGUvd2luZG93cy5oXQoJUHJvdG90eXBlcywgZGVmaW5lcyBhZGRlZCBhbmQgZml4ZXMuCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFtpbmNsdWRlL3Jlc291cmNlMzIuaF0KCSAgW3dpbjMyL2N1cnNvcmljb24zMi5jXSBbd2luMzIvcmVzb3VyY2UuY10gW3dpbmRvd3MvZGlhbG9nLmNdCglGaXhlcyB0byByZXNvdXJjZSBoYW5kbGluZy4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW2lmMTYzMi91c2VyMzIuc3BlY10KCVNwZWNzIGZvciBpbXBsZW1lbnRlZCBmdW5jdGlvbnMgYWRkZWQKCVNvbWUgdGh1bmtzIHRvIGZ1bmN0aW9ucyB3aGljaCBhcmUgc2FtZSBhcyB3aW4xNiBlcXVpdmFsZW50cy4KCgkqIFtsb2FkZXIvdGFzay5jXQoJR2V0QXBwQ29tcGF0RmxhZ3MoKSBhZGRlZC4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglPbmUgbWlzc2luZyBlbHNlIGFkZGVkLCBzbWFsbCBoYWNrIHRvIFJlZ1F1ZXJ5VmFsdWUxNigpLgoKCSogW3dpbjMyL2ZpbGUuY10KCUdldEZpbGVBdHRyaWJ1dGVzQSgpIGZpeGVkICh3YXMgdXNpbmcgRE9TIHBhdGggYXMgVU5JWCBwYXRoKS4KClR1ZSBKdW4gMTggMjE6MDA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbbG9hZGVyL25lX3Jlc291cmNlLmNdCglGaXhlZCBGcmVlUmVzb3VyY2UoKSByZXR1cm4gdmFsdWUuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglGaXhlZCBhIGJ1ZyBpbiBFeHRUZXh0T3V0KCkgdGhhdCB3YXMgY2F1c2luZyBvdmVybGFwcGVkIGNoYXJhY3RlcnMKCWluIFdpbldvcmQuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCVNXUF9GUkFNRUNIQU5HRUQgZm9yIHRvcC1sZXZlbCB3aW5kb3dzIG5vdyBpbnZhbGlkYXRlcyBjbGllbnQKCWFyZWEgYXMgY2xvY2suZXhlIHdhbnRzLgoKVHVlIEp1biAxOCAxMTozMDoyMiAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCU1pbmkgYnVnZml4OiAncmV2aXZhbCcgb2YgbWlzc2luZyBzY3JvbGxiYXIgaW4gbGlzdGJveGVzLgoKTW9uIEp1biAxNyAyMDoyNzo0MSAxOTk2ICBSb2JlcnQgUG91bGlvdCA8a3J5bm9zQGNsaWMubmV0PgoKCSogW3Jlc291cmNlcy9zeXNyZXNfRnIucmNdIFtyZXNvdXJjZXMvVE9ET10KCU1hZGUgY2hhbmdlcyBmb3IgQ2hvb3NlX0ZvbnQgZGlhbG9nLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gSnVuIDE2IDE2OjUxOjMxIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW21lbW9yeS9oZWFwLmNdCglGaXhlZCBidWcgaW4gSGVhcFJlYWxsb2MgKHRoYW5rcyB0byBCcnVjZSBNaWxuZXIpLgoKCSogW21pc2Mvd3NwcmludGYuY10KCUZpeGVkIGFyZ3VtZW50IHNpemUgZm9yICVjIGZvcm1hdCBpbiB3c3ByaW50ZjE2KCkuCgoJKiBbb2JqZWN0cy9kYy5jXQoJRG9uJ3QgZnJlZSBoRmlyc3RCaXRtYXAgZm9yIHNhdmVkIERDcy4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglBZGRlZCB0aW1lciBoYW5kbGluZyBpbiBFVkVOVF9XYWl0WEV2ZW50KCkuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglJbiBNU0dfVHJhbnNsYXRlTW91c2VNc2cgYW5kIE1TR19UcmFuc2xhdGVLYmRNc2csIGNoZWNrIGlmIHRoZQoJZXZlbnQgaXMgZm9yIHRoZSBjdXJyZW50IHRhc2s7IGlmIG5vdCwgd2FrZSB0aGUgb3RoZXIgdGFzay4KCgkqIFt3aW5kb3dzL3F1ZXVlLmNdIFtpbmNsdWRlL3F1ZXVlLmhdCglBZGRlZCAnc2VsZicgaGFuZGxlIGluIHF1ZXVlIHN0cnVjdHVyZS4KCgkqIFt3aW5kb3dzL3RpbWVyLmNdCglBZGRlZCBUSU1FUl9FeHBpcmVUaW1lcnMoKSBmdW5jdGlvbiB0byBtYXJrIGV4cGlyZWQgdGltZXJzIGFuZAoJd2FrZSB1cCB0aGUgY29ycmVzcG9uZGluZyB0YXNrcy4KClRodSBKdW4gMTMgMDE6NDY6MzMgRURUIDE5OTYgIFdpbGxpYW0gTWFncm8gPHdtYWdyb0B0Yy5jb3JuZWxsLmVkdT4KCgkqIFt3aW5kb3dzL21hcHBpbmcuY10KCUZpcnN0IHBvaW50IGluIGxpc3Qgd2FzIG1hcHBlZCBtdWx0aXBsZSB0aW1lcyBpbiBEUHRvTFAgYW5kCiAJTFB0b0RQLiAgT3RoZXIgcG9pbnRzIHdlcmUgbm90IG1hcHBlZC4KCldlZCBKdW4gMTIgMTg6MDg6NDUgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbbWlzYy9zaGVsbC5jXQoJU29tZSBmaXhlcyBmb3IgRXh0cmFjdEljb24gZnVuY3Rpb24gZmFtaWx5LgoKCSogW2RvY3VtZW50YXRpb24vdXNlcl9tb2R1bGVdCglDaGFwdGVyIGFib3V0IHdpbmRvd2luZyBhbmQgbWVzc2FnaW5nIHN1YnN5c3RlbXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBKdW4gMTEgMTU6MjA6NDMgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbZGVidWdnZXIvYnJlYWsuY10gW2xvYWRlci9zaWduYWwuY10KCUZpeGVkIGJyZWFrcG9pbnRzIGluIDMyLWJpdCBjb2RlLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgbWFueSBtb3JlIFdpbjMyIHZlcnNpb25zIG9mIHN0YW5kYXJkIHN0cnVjdHVyZXMuCgoJKiBbaW5jbHVkZS93aW5yZWcuaF0gW21pc2MvcmVnaXN0cnkuY10KCU1vdmVkIHByaXZhdGUgdHlwZXMgaW50byByZWdpc3RyeS5jLgoKCSogW21lbW9yeS9zdHJpbmcuY10gKE5ldyBmaWxlKQoJTW92ZWQgbW9zdCBzdHJpbmcgZnVuY3Rpb25zIGZyb20gbWlzYy9sc3RyLmM7IGFkZGVkIFdpbjMyIHZlcnNpb24KCW9mIGFsbCBmdW5jdGlvbnMuCgoJKiBbbWlzYy93c3ByaW50Zi5jXQoJSW1wbGVtZW50ZWQgV2luMzIgd3NwcmludGYgZnVuY3Rpb25zLgoKCSogW29iamVjdHMvYml0bWFwLmNdCglJbXBsZW1lbnRlZCBXaW4zMiBiaXRtYXAgZnVuY3Rpb25zLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglEb24ndCBzZXQgZGlhbG9nIHByb2NlZHVyZSBiZWZvcmUgdGhlIGNvbnRyb2xzIGFyZSBjcmVhdGVkLiBUaGlzCglhdm9pZHMgYSBjcmFzaCBpbiBXaW5oZWxwLgoKVHVlIEp1biAxMSAxNDoxMDowNiAxOTk2IE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbY29udHJvbHMvbWVudS5jXSBbaWYxNjMyL3VzZXIuc3BlY10gW3dpbmRvd3MvbWVzc2FnZS5jXQoJUmVwbGFjZSBQZWVrTWVzc2FnZSB3aXRoIFBlZWtNZXNzYWdlMTYuCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdW21pc2MvbWFpbi5jXQoJR2V0VmVyc2lvbjMyLEdldFZlcnNpb25FeDMyQSxHZXRWZXJzaW9uRXgzMlc6IG5ldyBmdW5jdGlvbnMuCglNQUlOX1BhcnNlVmVyc2lvbjogbmV3IGZ1bmN0aW9uLCBuZXcgY29tbWFuZCBsaW5lIG9wdGlvbiAtd2ludmVyLgoJR2V0VmVyc2lvbjogbW9kaWZpZWQgdG8gdGFrZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgaW50byBhY2NvdW50LgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbd2luMzIvcHJvY2Vzcy5jXQoJRnJlZUxpYnJhcnkzMjogbmV3IGZ1bmN0aW9uLgoJVGxzQWxsb2M6IGluaXRpYWxpemUgVGxzIHRvIHplcm8uCglJbnRlcmxvY2tlZEluY3JlbWVudCxJbnRlcmxvY2tlZERlY3JlbWVudCxJbnRlcmxvY2tlZEV4Y2hhbmdlOiBuZXcKCWZ1bmN0aW9ucy4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY10KCVNldEVycm9yTW9kZSxHZXRBY3RpdmVXaW5kb3c6IG5ldyByZWxheXMgdG8gZXhpc3RpbmcgZnVuY3Rpb25zLgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXVt3aW4zMi91c2VyMzIuY10KCVBlZWtNZXNzYWdlMzJBLFBlZWtNZXNzYWdlMzJXOiBuZXcgZnVuY3Rpb25zLgoKCSogW2luY2x1ZGUvc3RydWN0MzIuaF1baW5jbHVkZS93aW5kb3dzLmhdCglNb3ZlZCBNU0czMiB0byB3aW5kb3dzLmguCglSZW5hbWVkIE1TRyB0byBNU0cxNi4KCU1vZGlmaWVkIHByb3RvdHlwZXMgdG8gdXNlIE1TRzE2CgoJKiBbaW5jbHVkZS93aW5iYXNlLmhdCglPU1ZFUlNJT05JTkZPMzJBLE9TVkVSU0lPTklORk8zMlc6IG5ldyBzdHJ1Y3R1cmVzLgoKU3VuIEp1biAgOSAyMDo1MzozMCAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtpZjE2MzIvTWFrZWZpbGUuaW5dIFtsb2FkZXIvYnVpbHRpbi5jXQoJdmVyc2lvbi5kbGwsbHozMi5kbGwgYWRkZWQuCgoJKiBbaW5jbHVkZS9semV4cGFuZC5oXSBbaWYxNjMyL2x6MzIuc3BlY10gW2lmMTYzMi9semV4cGFuZC5zcGVjXQoJICBbbWlzYy9semV4cGFuZC5jXQoJbHozMi5kbGwgYWRkZWQuCglNb2RpZmllZCB0byBuZXcgZnVuY3Rpb24gbmFtaW5nIHN0YW5kYXJkLgoKCSogW2luY2x1ZGUvdmVyLmhdIFtpZjE2MzIvdmVyLnNwZWNdIFtpZjE2MzIvdmVyc2lvbi5zcGVjXSBbbWlzYy92ZXIuY10KCXZlcnNpb24uZGxsIGFkZGVkICh3aW4zMiB2ZXJzaW9uIG9mIHZlci5kbGwpLgoJTW9kaWZpZWQgdG8gbmV3IGZ1bmN0aW9uIG5hbWluZyBzdGFuZGFyZC4KCVVzZSByZWdpc3RyeSB0byBsb29rIHVwIGEgTE9DQUxFIGxhbmdpZHMgdG9vLgoJKFZlckluc3RhbGxGaWxlLFZlckZpbmRGaWxlIHN0aWxsIHN0dWJzKQoKRnJpIEp1biAgNyAyMDo0MDoyMCAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW2ZpbGVzL2ZpbGUuY10KCUFkZGVkIGEgd2FybmluZyBpZiBHZXRUZW1wRmlsZU5hbWUoKSBnZXRzIGEgYmFkIGRyaXZlIHBhcmFtZXRlci4KCgkqIFttaXNjL2NvbW1kbGcuY10KCUNoYW5nZWQgZmlsZSBsaXN0Ym94IGNvbG9yIHRvIGdyYXkgaW4gU2F2ZUZpbGUgZGlhbG9nIAoJKGp1c3QgbGlrZSBXaW5kb3dzIGRvZXMgdGhpcykuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCldlZCBKdW4gIDUgMjA6MTM6NTQgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvYnV0dG9uLmNdIFtjb250cm9scy9saXN0Ym94LmNdCglGaXhlZCB3UGFyYW0gb2YgV01fRFJBV0lURU0gbWVzc2FnZS4KCgkqIFtpZjE2MzIvTWFrZWZpbGUuaW5dIFtsb2FkZXIvYnVpbHRpbi5jXQoJUmVtb3ZlIFdQUk9DUzMyIERMTCwgYXMgdGhlIHJlbGF5IGNvZGUgY2FuIGNhbGwgV2luZSByb3V0aW5lcwoJZGlyZWN0bHkuCgoJKiBbbG9hZGVyL21vZHVsZS5jXSBbbG9hZGVyL25lX2ltYWdlLmNdCglGaXhlZCBpbml0aWFsIHN0YWNrIGxheW91dCBmb3Igc2VsZi1sb2FkaW5nIG1vZHVsZXMuCgoJKiBbdG9vbHMvYnVpbGQuY10KCUZpeGVkIGRhdGEgc2VnbWVudCBidWlsZGluZyBmb3IgV2luMTYgbW9kdWxlcy4KCgkqIFt3aW5kb3dzL2RlZmRsZy5jXQoJSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbnMgb2YgRGVmRGxnUHJvYygpLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglNZXJnZWQgV2luMTYgYW5kIFdpbjMyIGRpYWxvZyBjb2RlLgoJQWRkZWQgc3VwcG9ydCBmb3IgY29udHJvbCBleHRyYSBkYXRhIGluIGRpYWxvZyBpdGVtIHRlbXBsYXRlLgoKCSogW3dpbmRvd3Mvd2luLmNdCglVbmlmaWVkIFdpbjE2IGFuZCBXaW4zMiB2ZXJzaW9ucyBvZiBDcmVhdGVXaW5kb3coKS4KCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb24gb2YgR2V0V2luZG93TG9uZygpLgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXQoJQ2hhbmdlZCB0aGUgaW1wbGVtZW50YXRpb24gb2Ygd2luZG93IHByb2NlZHVyZXMsIHNvIHRoYXQgMTYtYml0Cgl3aW5wcm9jcyBhcmUgdmFsaWQgc2VnbWVudGVkIHBvaW50ZXJzLgoKU3VuIEp1biAgMiAxNjozOTo0NiAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglGaXhlZCBhbm90aGVyIGJ1ZyBpbiB0aGUgdzk1IGxvYWRlci4gUXVpZXRlbmVkIHNvbWUgZGVidWcgb3V0cHV0LgoKU3VuIEp1biAgMiAxMDowMDoyMiAxOTk2ICBVbHJpY2ggU2NobWlkICA8dXNjaG1pZEBtYWlsLmhoLnByb3ZpLmRlPgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXQoJQnVnIGZpeDogV01fUEFSRU5UTk9USUZZOiBkb24ndCBmYWxsIHRocm91Z2ggdG8gV01fU0VUVEVYVC4KClNhdCBKdW4gIDEgMTI6Mzc6MjIgMTk5NiAgVHJpc3RhbiBUYXJyYW50IDx0c3RAc3RoaW5jLmRlbW9uLmNvLnVrPgoKCSogW3Jlc291cmNlcy9UT0RPXSBbcmVzb3VyY2VzL3N5c3Jlc19JdC5yY10KCVVwZGF0ZWQgZm9udCBkaWFsb2cgYm94LgoKVGh1IE1heSAzMCAyMTowNToxOSAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW2luY2x1ZGUvY29tbWRsZy5oXSBbbWlzYy9jb21tZGxnLmNdCglDaG9vc2VGb250KCkgYW5kIENob29zZUNvbG9yKCk6IAoJQnVnZml4ZXMgYW5kIGFkZGVkIG1vcmUgc3VwcG9ydCBmb3Igc29tZSBDRl8qIGFuZCBDQ18qIGZsYWdzOiAKCWRpYWxvZyB0ZW1wbGF0ZXMgYW5kIGZvbnQgc2l6ZSBjb250cm9sLgoJQnVnZml4IGluIHN0cnVjdHVyZSBkZWZpbml0aW9uIG9mIENIT09TRUNPTE9SIGRlZmluaXRpb24uCgoJKiBbaXBjL2RkZV9wcm9jLmNdIFt3aW5kb3dzL2V2ZW50LmNdCglSZXBsYWNlZCBTZW5kTWVzc2FnZSB3aXRoIFNlbmRNZXNzYWdlMTYgYW5kIGFkZGVkIGluY2x1c2lvbiBvZgogCWRkZV9wcm9jLmggZm9yIGVycm9yLWZyZWUgY29tcGlsYXRpb24gb2YgaXBjIG1vZHVsZS4KClRodSBNYXkgMzAgMTk6MDA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9zY3JvbGwuY10KCU1hZGUgU2Nyb2xsREMgdG8gc2F2ZS9yZXN0b3JlIGN1cnJlbnQgY2xpcHBpbmcgcmVnaW9uLgoKCSogW21pc2MvY2xpcGJvYXJkLmNdIFt3aW5kb3dzL2V2ZW50LmNdCglJbXBsZW1lbnRlZCBtb3N0IG9mIHRoZSBwcmV2aW91c2x5IG1pc3NpbmcgZmVhdHVyZXMgKG5vdCB0ZXN0ZWQpLCAKCWltcHJvdmVkIHRleHQgcGFzdGluZyBmcm9tL3RvIFguIAoKCSogW2lmMTYzMi91c2VyLnNwZWNdIFtpZjE2MzIvZ2RpLnNwZWNdIFtvYmplY3RzL2RjLmNdCgkgIFtvYmplY3RzL2dkaW9iai5jXSBbb2JqZWN0cy9jbGlwcGluZy5jXSBbd2luZG93cy9kY2UuY10KCSAgW3dpbmRvd3Mvd2lucG9zLmNdIFt3aW5kb3dzL3BhaW50aW5nLmNdCglVcGRhdGVkIERDRSBjb2RlLCBpbXBsZW1lbnRlZCBkeW5hbWljIGludmFsaWRhdGlvbiBvZiBvd25lZCBEQ3MuCglUaGlzIGZpeGVzIGEgbG90IG9mIHByb2JsZW1zIHdpdGggc2Nyb2xsaW5nIGluIFdpbldvcmQuIE5vdAoJc3VyZSBhYm91dCB0aGUgZWZmZWN0IG9uIC1kZXNrdG9wLgoKV2VkIE1heSAyOSAyMzozNTo0NCAxOTk2ICBKdWtrYSBJaXZvbmVuIDxpaXZvbmVuQGNjLmhlbHNpbmtpLmZpPgoKCSogW3dpbjMyL3RpbWUuY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJQWRkZWQgU2V0U3lzdGVtVGltZSBhbmQgU2V0VGltZVpvbmVJbmZvcm1hdGlvbi4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY10KCUFkZGVkIGxzdHJjYXQsIGxzdHJjYXRBLCBsc3RyY21wLCBsc3RyY21wQSwgbHN0cmNweSwgbHN0cmxlbi4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIFNZU1RFTV9QT1dFUl9TVEFUVVMgc3RydWN0dXJlIGFuZCBwcm90b3R5cGVzIGZvcgoJR2V0U3lzdGVtUG93ZXJTdGF0dXMsIFNldFN5c3RlbVBvd2VyU3RhdGUsIFNldFN5c3RlbVRpbWUuCgoJKiBbaW5jbHVkZS9rZXJuZWwzMi5oXQoJQWRkZWQgYSBwcm90b3R5cGUgZm9yIFNldFRpbWVab25lSW5mb3JtYXRpb24uCgoJKiBbd2luMzIvZW52aXJvbm1lbnQuY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJQWRkZWQgR2V0U3lzdGVtUG93ZXJTdGF0dXMgYW5kIFNldFN5c3RlbVBvd2VyU3RhdGUgc3R1YnMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBNYXkgMjggMTk6MzY6MzYgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvY29tYm8uY10KCURlc3Ryb3kgdGhlIGxpc3Rib3ggYW5kIGVkaXQgY29udHJvbCB3aGVuIGRlc3Ryb3lpbmcgdGhlCgljb21iby4gVGhpcyBzaG91bGQgcHJldmVudCBjcmFzaGVzIG9uIGFwcGxpY2F0aW9uIGV4aXQuCgoJKiBbbWlzYy9zeXN0ZW0uY10gW2lmMTYzMi9zeXN0ZW0uc3BlY10KCUltcGxlbWVudGVkIElucXVpcmVTeXN0ZW0oKS4KCgkqIFtsb2FkZXIvdGFzay5jXSBbd2luZG93cy9tZXNzYWdlLmNdIFt3aW5kb3dzL3F1ZXVlLmNdCglGaXJzdCBhdHRlbXB0IGF0IGludGVyLXRhc2sgU2VuZE1lc3NhZ2UoKS4gU3RpbGwgaGFzIGEgbG90IG9mCglwcm9ibGVtcy4KClR1ZSBNYXkgMjggMTQ6MjY6MDQgMTk5NiAgUGV0ZXIgQmFqdXN6ICA8aHlwLXhAaW5mLmJtZS5odT4KCgkqIFt3aW5kb3dzL21kaS5jXQoJRml4ZWQgTURJVGlsZSB3aXRoIGljb25pYyBjaGlsZHJlbi4KCk1vbiBNYXkgMjcgMjA6Mjg6MTggMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFttaXNjL2NvbW1kbGcuY10KCUNob29zZUZvbnQgZGlhbG9nOgoJLSBjb21wbGV0ZSByZXdyaXRlIG9mIEZvbnRGYW1pbHlFbnVtUHJvYygpIGFuZCBGb250U3R5bGVFbnVtUHJvYygpCgkgIG5vdCByZWFsIGF2YWlsYWJsZSBmb250IHR5cGVzIChlLmcuICJCb2xkIikgY2FuIG5vdCBzZWxlY3RlZAoJLSBzdXBwb3J0aW5nIG1vcmUgQ0ZfTElNSVRTSVpFLSBhbmQgQ0ZfLi4uT05MWS0gZmxhZ3MKCgkqIFtvYmplY3RzL2ZvbnQuY10KCUluIEZPTlRfTWF0Y2hGb250IHBlcmZvcm0gY2hlY2sgaWYgImxmRmFjZU5hbWUiIGlzIGZhbWlseSBmcm9tIFgxMQoJb25seSBpZiAibGZGYWNlTmFtZSIgaXMgYSB3aW5kb3dzIGZvbnQgZmFtaWx5IHRoZW4gZG8gYSBjYWxsIG9mCglGT05UX1RyYW5zbGF0ZU5hbWUoKSA6IHRoaXMgcmVzdWx0cyBpbiBiZXR0ZXIgZm9udCBzZWxlY3Rpb25zIGluIAoJQ2hvb3NlRm9udCgpIG9yIGFwcGxpY2F0aW9ucyBsaWtlIGNoYXJtYXAuZXhlIG9yIHdyaXRlLmV4ZS4KCUFkZGVkIGEgUGFyc2VGb250UGFybXMoKSBjYWxsIGlmIG5lY2Vzc2FyeSBpbiBmdW5jdGlvbiAKCUZPTlRfTWF0Y2hGb250KCk6IHdlIG5lZWQgYSBmb250IG5hbWUgYXMgYmFzaXMgZm9yIEdldFRleHRGYWNlKCkgCglldmVuIGlmIHRoZXJlIGlzbid0IG9uZS4uLgoKCSogW3Jlc291cmNlcy9UT0RPXQoJSW52ZW50b3J5IG9mIHJlc291cmNlIHRyYW5zbGF0aW9ucyBpbiBzeXNyZXNfPz8ucmMKCkZyaSBNYXkgMjQgMTY6MzM6MjggMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJX3c5NV9sb2FkcmVnOiB1c2Ugb2Zmc2V0IHRvIGRldGVybWluZSBuZXh0IFJHREIgcG9zaXRpb24gdG9vLgoKVGh1IE1heSAyMyAxOTozNTozOCAxOTk2ICBHcmVnIEtyZWlkZXIgPGtyZWlkZXJAbmF0bGFiLnJlc2VhcmNoLnBoaWxpcHMuY29tPgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglGaXhlZCBzaXplIG9mIGNvbWJvLCBsYm94LCBhbmQgYnV0dG9uIChsYiBzb21ldGltZXMgb2ZmIGJ5IDIgcGl4ZWxzKS4KCgkqIFttaXNjL21haW4uY10KCVJlc3VsdCBvZiBvcHRpb24gIi1maXhlZG1hcCIgaXMgdG8gdHVybiBmbGFnIG9uLgoKVGh1IE1heSAyMyAxOToxNTo0MSAxOTk2ICBSb25hbiBXYWlkZSAgPHJvb3RAd2FpZGVyLmllPgoKCSogW21pc2Mvc2hlbGwuY10KCVNoZWxsRXhlY3V0ZSBhbmQgRmluZEV4ZWN1dGFibGUgbm93IGJvdGggdXNlIGNvbW1vbiBjb2RlIHRvCglkZXRlcm1pbmUgdGhlIHJlcXVpcmVkIGV4ZWN1dGFibGUgZmlsZS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIE1heSAyMSAxNDowNjowNyAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb250cm9scy9idXR0b24uY10KCU1hZGUgQnV0dG9uV25kUHJvYyBhIDMyLWJpdCB3aW5kb3cgcHJvY2VkdXJlLgoKCSogW2NvbnRyb2xzL2Rlc2t0b3AuY10KCU1hZGUgRGVza3RvcFduZFByb2MgYSAzMi1iaXQgd2luZG93IHByb2NlZHVyZS4KCUFkZGVkIGhhbmRsaW5nIG9mIFdNX1NFVENVUlNPUi4KCgkqIFtjb250cm9scy9tZW51LmNdCglBbGxvY2F0ZSBtZW51IGl0ZW1zIGFuZCBzdHJpbmdzIG9uIHRoZSAzMi1iaXQgc3lzdGVtIGhlYXAuCglJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9ucyBmb3IgQ2hhbmdlTWVudSwgSW5zZXJ0TWVudSwgTW9kaWZ5TWVudSwKCUFwcGVuZE1lbnUgYW5kIExvYWRNZW51SW5kaXJlY3QuCgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXQoJQWRkZWQgcG9zc2liaWxpdHkgdG8gaGF2ZSAzMi1iaXQgYnVpbHQtaW4gY2xhc3Nlcy4KCgkqIFtmaWxlcy9kcml2ZS5jXQoJSW1wbGVtZW50ZWQgR2V0TG9naWNhbERyaXZlKCkgYW5kIEdldExvZ2ljYWxEcml2ZVN0cmluZ3MoKS4KCgkqIFttaXNjL3NweS5jXSBbaW5jbHVkZS9zcHkuaF0KCUFkZGVkIHN1cHBvcnQgZm9yIHNweWluZyBXaW4zMiBtZXNzYWdlcy4KCgkqIFtsb2FkZXIvYnVpbHRpbi5jXQoJRml4ZWQgYnVnIGluIC1kbGwgb3B0aW9uIHBhcnNpbmcuCgoJKiBbbWVtb3J5L2xvY2FsLmNdCglBZGRlZCBiYWNrIHRoZSBjaGFuZ2UgYnkgSHV3IEQuIE0uIERhdmllcyB0byBmcmVlIHRoZSBibG9jayBpbgoJTG9jYWxSZWFsbG9jKCkgYmVmb3JlIGFsbG9jYXRpbmcgdGhlIG5ldyBvbmUuCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10gW29iamVjdHMvY3Vyc29yaWNvbi5jXSBbb2JqZWN0cy9vZW1iaXRtYXAuY10KCUZpeGVkIGJ1ZyBpbiBiaXRtYXAgc2l6ZSB0aGF0IGNhdXNlZCBtZW1vcnkgY29ycnVwdGlvbiBmb3IgMjRicHAuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb24gb2YgRGVmV2luZG93UHJvYygpLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9uIG9mIFNlbmREbGdJdGVtTWVzc2FnZSwKCUdldC9TZXREbGdJdGVtVGV4dCBhbmQgR2V0L1NldERsZ0l0ZW1JbnQuCgoJKiBbd2luZG93cy9tZGkuY10KCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb24gb2YgRGVmRnJhbWVQcm9jKCkgYW5kIERlZk1ESUNoaWxkUHJvYygpLgoJRG9uJ3QgbWFrZSBhIGNvcHkgb2YgdGhlIE9CTSBiaXRtYXBzIGZvciBldmVyeSBNREkgd2luZG93LgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBTZW5kTWVzc2FnZSgpLgoJCgkqIFt3aW5kb3dzL3dpbnByb2MuY10gW3dpbmRvd3MvY2xhc3MuY10gW3dpbmRvd3Mvd2luLmNdCglOZXcgc2NoZW1lIGZvciAzMi1iaXQgd2luZG93IHByb2NlZHVyZXMgdG8gcmVwbGFjZSBhbGlhc2VzLiBBbGwKCTMyLWJpdCB3aW5kb3cgcHJvY2VkdXJlIGdldCBhIDE2LWJpdCBhZGRyZXNzIHBvaW50aW5nIHRvIGEKCVdJTkRPV1BST0Mgc3RydWN0dXJlLgoJSW1wbGVtZW50ZWQgQW5zaTwtPlVuaWNvZGUgdHJhbnNsYXRpb24gZm9yIENhbGxXaW5kb3dQcm9jKCkuCglBZGRlZCB0cmFuc2xhdGlvbiBvZiBXTV9EUkFXSVRFTSBiZXR3ZWVuIFdpbjE2IGFuZCBXaW4zMi4KCgkqIFt3aW5kb3dzL3dpbi5jXSBbaW5jbHVkZS9jYWxsYmFjay5oXQoJQWRkZWQgdWdseSBoYWNrIHRvIGJ1aWxkIENSRUFURVNUUlVDVCBvbiB0aGUgc3RhY2sgd2hlbiBzZW5kaW5nCglXTV9OQ0NSRUFURS4KCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb24gb2YgR2V0L1NldFdpbmRvd1dvcmQvTG9uZyBhbmQKCUdldC9TZXRXaW5kb3dUZXh0LgoJCkZyaSBNYXkgMTcgMTA6MjA6MTYgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtjb250cm9scy9idXR0b24uY10KCUF2b2lkIGdyYXkgdGV4dCBvbiBncmF5IGJhY2tncm91bmQgaW4gZGlzYWJsZWQgcHVzaCBidXR0b25zCgl1c2luZyBhIGIvdyByYXN0ZXIgYW5kIHNvbWUgcmFzdGVyIG9wZXJhdGlvbnMgKFBhdEJsdCxCaXRCbHQpLgoKCSogW29iamVjdHMvdGV4dC5jXQoJRHJhd1RleHQoKTogZG9uJ3QgZHJhdyBhbiB1bmRlcmJhciBhbnltb3JlIGlmIERUX0NBTENSRUNUIGlzIHNldC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IE1heSAxNiAxMzozNTozMSAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFsqLyouY10KCVJlbmFtZWQgUkVDVCwgUE9JTlQgYW5kIFNJWkUgc3RydWN0dXJlcyB0byBSRUNUMTYsIFBPSU5UMTYgYW5kCglTSVpFMTYuIEltcGxlbWVudGVkIFdpbjMyIHZlcnNpb24gb2YgbW9zdCBmdW5jdGlvbnMgdGhhdCB0YWtlCgl0aGVzZSB0eXBlcyBhcyBwYXJhbWV0ZXJzLgoKCSogW2NvbmZpZ3VyZV0KCVBhdGNoZWQgYXV0b2NvbmYgdG8gYXR0ZW1wdCB0byBjb3JyZWN0bHkgZGV0ZWN0IC1sbnNsIGFuZAoJLWxzb2NrZXQuIFBsZWFzZSBjaGVjayB0aGlzIG91dC4KCQoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglBZGRlZCBzdXBwb3J0IGZvciBXaW4zMiBCTV8qIG1lc3NhZ2VzLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUF2b2lkIHNlbmRpbmcgZXh0cmEgV01fTUVOVVNFTEVDVCBtZXNzYWdlcy4gVGhpcyBhdm9pZHMgY3Jhc2hlcwoJd2l0aCBFeGNlbC4KCgkqIFttZW1vcnkuaGVhcC5jXSBbaW5jbHVkZS9oZWFwLmhdCglBZGRlZCBzdXBwb3J0IGZvciBTRUdQVFJzIGluIFdpbjMyIGhlYXBzLiBBZGRlZCBhIGZldyBtYWNyb3MgdG8KIAltYWtlIHVzaW5nIFNFR1BUUnMgZWFzaWVyLiBUaGV5IGFyZSBhIGJpdCBzbG93ZXIgdGhhbiBNQUtFX1NFR1BUUiwKIAlidXQgdGhleSB3b3JrIHdpdGggV2luMzIuCgoJKiBbbWVtb3J5L2F0b20uY10KCUltcGxlbWVudGVkIFdpbjMyIGF0b20gZnVuY3Rpb25zLgoKCSogW21lbW9yeS9sb2NhbC5jXQoJRml4ZWQgTG9jYWxSZUFsbG9jKCkgY2hhbmdlcyB0byBhdm9pZCBjb3B5aW5nIHRoZSB3aG9sZSBibG9jayB0d2ljZS4KCgkqIFt3aW4zMi9tZW1vcnkuY10KCVVzZSAvZGV2L3plcm8gaW5zdGVhZCBvZiBNQVBfQU5PTiBmb3IgVmlydHVhbEFsbG9jKCkuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJUHJvcGVybHkgaW1wbGVtZW50ZWQgdGhlIFdpbjMyIGNsYXNzIGZ1bmN0aW9ucy4KCgkqIFt3aW5kb3dzL3dpbnByb2MuY10gKE5ldyBmaWxlKQoJTmV3IGZpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UgdHJhbnNsYXRpb24gYmV0d2VlbiBXaW4xNiBhbmQgV2luMzIuCgpNb24gTWF5IDEzIDE4OjAwOjAwIDE5OTYgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9tZGkuY10gW3dpbmRvd3MvbWVudS5jXQoJSW1wcm92ZWQgV01fTURJQ1JFQVRFIGFuZCBXTV9NRElDQVNDQURFIGhhbmRsaW5nLgoKCSogW3dpbmRvd3MvZXZlbnQuY10gW29iamVjdHMvYml0Ymx0LmNdCglIYW5kbGUgR3JhcGhpY3NFeHBvc2UgZXZlbnQgZm9yIEJpdEJsdCBmcm9tIHNjcmVlbiB0byBzY3JlZW4uCgoJKiBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy93aW4uY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglCdW5jaCBvZiBmaXhlcyBmb3IgcHJvYmxlbXMgd2l0aCAtbWFuYWdlZC4KCgkqIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy93aW5wb3MuY10KCUNoYW5nZWQgY29uZGl0aW9ucyBmb3IgV01fU0laRSwgV01fTU9WRSwgYW5kIFdNX0dFVE1JTk1BWElORk8KCWluIENyZWF0ZVdpbmRvdy4KCgkqIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy9xdWV1ZS5jXSBbbWlzYy91c2VyLmNdCglEbyBub3Qgc2VuZCBXTV9QQVJFTlROT1RJRlkgd2hlbiBpbiBBcHBFeGl0IGFuZCBjYWxsIFdIX1NIRUxMCglvbiB3aW5kb3cgY3JlYXRpb24vZGVzdHJ1Y3Rpb24uCgoJKiBbb2JqZWN0cy9wYWxldHRlLmNdCglDcnVkZSBSZWFsaXplUGFsZXR0ZSgpLiBBdCBsZWFzdCBzb21ldGhpbmcgaXMgdmlzaWJsZSBpbiBMdmlld1Byby4KClN1biBNYXkgMTIgMDI6MDU6MDAgMTk5NiAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBwcmRzLWdybi5kZW1vbi5jby51az4KCgkqIFtpZjE2MzIvZ2RpMzIuc3BlY10KCUFkZGVkIFJlY3RhbmdsZSAodXNlIHdpbjE2IHZlcnNpb24pLgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJQWRkZWQgR2V0V2luZG93c0RpcmVjdG9yeUEgKHVzZSB3aW4xNiBHZXRXaW5kb3dzRGlyZWN0b3J5KS4KCgkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdCglBZGRlZCBHZXRTdWJNZW51LCBNb3ZlV2luZG93LCBTZXRTY3JvbGxQb3MsIFNldFNjcm9sbFJhbmdlICh1c2Ugd2luMTYKCXZlcnNpb25zKS4KCUFkZGVkIFNldFdpbmRvd3NIb29rRXhBIChlbXB0eSBzdHViIGZvciBub3cpLgoKCSogW2luY2x1ZGUvaGFuZGxlMzIuaF0KCUNoYW5nZWQgI2luY2x1ZGUgPG1hbGxvYy5oPiB0byAjaW5jbHVkZSA8c3RkbGliLmg+IHRvIHByZXZlbnQKCWhhdGUgbWVzc2FnZSBmcm9tIEZyZWVCU0QgY29tcGlsZXIuCgoJKiBbd2luMzIvbmV3Zm5zLmNdCglBZGRlZCBuZXcgZnVuY3Rpb24gU2V0V2luZG93c0hvb2tFeDMyQSAoZW1wdHkgc3R1YiBmb3Igbm93KS4KCgkqIFt3aW4zMi91c2VyMzIuY10KCVJlbW92ZWQgcmVkdW5kYW50IGRlYnVnZ2luZyBwcmludGYgc3RhdGVtZW50LgoKU3VuIE1heSAxMiAwMToyNDo1NyAxOTk2ICBIdXcgRC4gTS4gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbbWVtb3J5L2xvY2FsLmNdCglBdm9pZCBjcmVhdGluZyBhZGphY2VudCBmcmVlIGJsb2Nrcy4KCUZyZWUgdGhlIGJsb2NrIGluIExvY2FsUmVBbGxvYygpIGJlZm9yZSBhbGxvY2F0aW5nIGEgbmV3IG9uZS4KCUZpeGVkIExvY2FsUmVBbGxvYygpIGZvciBkaXNjYXJkZWQgYmxvY2tzLgoJCkZyaSBNYXkgMTAgMjM6MDU6MTIgMTk5NiAgSnVra2EgSWl2b25lbiA8aWl2b25lbkBjYy5oZWxzaW5raS5maT4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX0ZpLnJjXQoJQ2hvb3NlRm9udCBhbmQgQ2hvb3NlQ29sb3IgZGlhbG9ncyB1cGRhdGVkLgoKRnJpIE1heSAxMCAxNzoxOTozMyAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtmaWxlcy9kcml2ZS5jLGlmMTYzMi9rZXJuZWwuc3BlY10KCUdldEN1cnJlbnREaXJlY3RvcnkoKSxTZXRDdXJyZW50RGlyZWN0b3J5KCkgaW1wbGVtZW50ZWQuCgoJKiBbaWYxNjMyL2FkdmFwaTMyLnNwZWNdIFtpZjE2MzIva2VybmVsLnNwZWNdIFtpZjE2MzIvc2hlbGwuc3BlY10KCSAgW2luY2x1ZGUvd2luZG93cy5oXSBbaW5jbHVkZS93aW5yZWcuaF0gW2xvYWRlci9tYWluLmNdCgkgIFttaXNjL21haW4uY10gW21pc2Mvc2hlbGwuY10gW21pc2MvcmVnaXN0cnkuY10KCVJlZ2lzdHJ5IGZpeGVzOgoJLSBsb2FkcyB3aW45NSByZWdpc3RyeSBkYXRhYmFzZXMsCgktIHNhdmUgb25seSB1cGRhdGVkIGtleXMgb24gZGVmYXVsdCwKCS0gbm93IGFkaGVycyB0byB0aGUgbmV3IGZ1bmN0aW9uIG5hbWluZyBzdGFuZGFyZCwKCS0gbWlub3IgY2xlYW51cHMuCgpUdWUgTWF5IDcgMjI6MzY6MTMgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtjb21iby5jXQoJQWRkZWQgV01fQ09NTUFORC1oYW5kbGluZyBmb3IgaW50ZXJhY3Rpb24gYmV0d2VlbiBFRElUIGFuZCBDT01CT0xCT1gKICAgICAgICBhbmQgc3luY2hyb25pemVkIG1pbmUgd2l0aCBHcmVnIEtyZWlkZXIncyB3b3Jrcy4KCgkqIFtjb21tZGxnLmNdCglCdWdmaXggaW4gQ2hvb3NlRm9udDogZm9udCBzaXplIGhhbmRsaW5nLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb24gTWF5ICA2IDEyOjU2OjI2IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW0RFVkVMT1BFUlMtSElOVFNdCglBZGRlZCBwYXJhZ3JhcGggb24gbmFtaW5nIGNvbnZlbnRpb25zIGZvciBXaW4xNi9XaW4zMi9XaW5lbGliLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUNyZWF0ZSBhIGRlZmF1bHQgc3lzdGVtIG1lbnUgdGhhdCBpcyB0aGUgc2FtZSBmb3IgYWxsIHdpbmRvd3MKCWluc3RlYWQgb2YgbWFraW5nIGEgY29weSBldmVyeSB0aW1lLgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KCUFkZGVkIFdJTkVMSUJfTkFNRSBhbmQgREVDTF9XSU5FTElCX1RZUEUgbWFjcm9zLgoJQWRkZWQgeHgxNiBhbmQgeHgzMiBkZWZpbml0aW9ucyBmb3IgbW9zdCB0eXBlcy4gR2VuZXJhbCBjbGVhbi11cC4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdIFttZW1vcnkvbG9jYWwuY10gWyovKl0KCVJlbmFtZWQgR2xvYmFsIGFuZCBMb2NhbCBoZWFwIGZ1bmN0aW9ucyB0byB4eHgxNi4gQWRkZWQgYWxsIHh4eDMyCgl2ZXJzaW9ucyBvZiB0aGUgc2FtZSBmdW5jdGlvbnMuCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdCglNYXNrIG91dCBsb3dlciBiaXRzIG9mIHNlbGVjdG9yIGluIEZyZWVTZWxlY3RvcigpLgoKCSogW21pc2MvbHN0ci5jXQoJRml4ZWQgd3ZzcHJpbnRmKCkuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJQ2hhbmdlZCB0aGUgY2xhc3Mgc3RydWN0dXJlIHRvIG1ha2UgV2luMzIgc3VwcG9ydCBlYXNpZXIuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUFkZGVkIGhhbmRsaW5nIG9mIFdNX0lOSVRNRU5VUE9QVVAgZm9yIHN5c3RlbSBtZW51IHRvIGdyYXkgb3V0CglpbnZhbGlkIG9wdGlvbnMuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUJ1ZyBmaXg6IHRoZSBXSU5ET1NQT1Mgc3RydWN0dXJlIHBvaW50ZXIgaW4gV01fTkNDQUxDU0laRSBtdXN0IGJlCglhIFNFR1BUUi4KClN1biBNYXkgIDUgMDM6NTE6MjYgMTk5NiAgSHV3IEQuIE0uIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW21lbW9yeS9sb2NhbC5jXQoJSW1wbGVtZW50YXRpb24gb2YgbW92ZWFibGUgYW5kIChydWRpbWVudGFyeSkgc3VwcG9ydCBmb3IKIAlkaXNjYXJkYWJsZSBsb2NhbCBtZW1vcnksIHBsdXMgc2V2ZXJhbCBidWcgZml4ZXMuCgpTYXQgTWF5ICA0IDE4OjMzOjM1IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2luY2x1ZGUvd2luZG93cy5oXSBbd2luZG93cy93aW4uY10gW2lmMTYzMi91c2VyLnNwZWNdIAoJRmluZFdpbmRvd0V4KCkgaW1wbGVtZW50ZWQgKHNvbWVvbmUgcmVwb3J0ZWQgaXQgd2FzIG1pc3NpbmcKCWZvciBGcmFtZU1ha2VyIDQuMSkuCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFtpZjE2MzIvdXNlcjMyLnNwZWNdIFt3aW4zMi9tZW1vcnkuY10KCSAgW3dpbjMyL3Jlc291cmNlLmNdCglNaXNjIHNtYWxsIHN0dWJzL3NtYWxsIGZ1bmN0aW9ucyB3aGljaCBicmluZyB3aW45NSBiaW5hcmllcwoJZnVydGhlciBkb3duIHRoZSByb2FkLiAoSXNCYWRDb2RlUHRyLCBMb2NhbFJlQWxsb2MsR2V0Q3Vyc29yUG9zKQoJU21hbGwgZml4IGluIFdJTjMyX0xvYWRBY2NlbGVyYXRvcnNBLgoKRnJpIE1heSAgMyAxOTo0MzoxMiAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciA8ZG9yc3NlbEBydWxobTEuTGVpZGVuVW5pdi5ubD4KCgkqIFtjb250cm9scy9lZGl0LmNdIFtjb250cm9scy9FRElULlRPRE9dCglDaGFuZ2VkIC8gZml4ZWQgc29tZSB0eXBlcyBhbmQgdHlwZWNhc3RzLgoJRml4ZWQgdGhlIHNjcm9sbGJhciByZXNldCBhZnRlciBXTV9TRVRIQU5ETEUgLyBXTV9TRVRURVhULgoJQWRkZWQgaGVhcCBpbml0aWFsaXphdGlvbiBpbiBXTV9DUkVBVEUuCgpGcmkgTWF5ICAzIDE5OjMwOjAyIDE5OTYgIEdyZWcgS3JlaWRlciA8a3JlaWRlckBuYXRsYWIucmVzZWFyY2gucGhpbGlwcy5jb20+CgoJKiBbY29udHJvbHMvY29tYm8uY10gW2NvbnRyb2xzL2xpc3Rib3guY10KCVBhc3MgV01fW0hWXVNDUk9MTCB0byBsaXN0Ym94LCBidXQgbm90IGNvbWJvLgoJRG9uJ3QgdHJ5IHRvIHJlZHJhdyBub24tZXhpc3RhbnQgc2Nyb2xsIGJhcnMgKGNoYW5nZXMgZHdTdHlsZSBmbGFncykuCglDb21ibyBib3ggZ2V0cyBib3JkZXIuCglDb21ibyBib3ggaW5jbHVkZXMgYnV0dG9uIChvdGhlcndpc2UgYnV0dG9uIHdvbid0IHRyaWdnZXIgZHJvcGRvd24pLgoJUHJvcGVyIGJvcmRlciBhcm91bmQgUmVjdEJ1dHRvbi4KCUNoZWNrIHNpemUgY29uc2lzdGFuY3kgb2YgY29tYm8sIGxpc3Rib3gsIGFuZCBidXR0b24gYWZ0ZXIgcmVzaXppbmcgCglvciBiZWZvcmUgcGFpbnRpbmcuICBUaGVzZSByb3V0aW5lcyBzdGlsbCBhcmVuJ3QgY29tcGxldGVseSBjb3JyZWN0LgoJTG9jYWxpemUgc2l6ZSBjaGVja3MgaW4gc2VwYXJhdGUgcm91dGluZXMuCglMaXN0Ym94ZXMgYXJlIHdoaXRlLgoKVGh1IE1heSAgMiAxOToyMToyMyAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdW2luY2x1ZGUvY29tbWRsZy5oXVtpbmNsdWRlL2NvbW1kbGcuY10KCSAgW3Jlc291cmNlcy9zeXNyZXNfRGUucmNdW3Jlc291cmNlcy9zeXNyZXNfRW4ucmNdCglJbnRyb2R1Y2VkIENob29zZUZvbnQgZGlhbG9nLCBidXQgbmVlZGVkIHNvbWUgcGF0Y2hlcyBpbiAKCWhhbmRsaW5nIG9mIGNvbWJvYm94ZXMgd2l0aCBlZGl0IGNvbnRyb2xzLgoKVHVlIEFwciAzMCAwMDozMzoyNyAxOTk2ICBVbHJpY2ggU2NobWlkICA8dXNjaG1pZEBtYWlsLmhoLnByb3ZpLmRlPgoKCSogW3Byb2dyYW1zL3dpbmhlbHAvKl0KCUFkZGVkIGEgaGVscCB2aWV3ZXIgYW5kIGEgc2ltcGxlIGAuaGxwJyB0byBgLnNnbWwnIGNvbnZlcnRlci4KCk1vbiBBcHIgMjkgMTQ6MTc6NTcgMTk5NiAgVHJpc3RhbiBUYXJyYW50IDx0c3RAc3RoaW5jLmRlbW9uLmNvLnVrPgoKCSogW3Jlc291cmNlcy9zeXNyZXNfKi5yY10gW21pc2Mvc2hlbGwuY10KCU1vZGlmaWVkIHNpemUgb2YgIkFib3V0IiBkaWFsb2cgYm94ZXMuCgpTYXQgQXByIDI3IDE4OjEwOjExIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbaWYxNjMyL01ha2VmaWxlLmluXVtsb2FkZXIvYnVpbHRpbi5jXQoJY3J0ZGxsLnNwZWMsIG50ZGxsLnNwZWMsIHdzb2NrMzIuc3BlYzogbmV3IGZpbGVzLgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJRml4IGVycm9yIG1lc3NhZ2UgaWYgaW1wb3J0IGJ5IG9yZGluYWwgZmFpbGVkLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gQXByIDI4IDE0OjMyOjQzIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW01ha2VmaWxlLmluXQoJU3ViZGlyIG1lbW9yeSBpcyBub3cgYWxzbyBjb21waWxlZCBmb3IgV2luZWxpYiwgaW4gb3JkZXIgdG8gZ2V0Cgl0aGUgV2luMzIgaGVhcCBmdW5jdGlvbnMuCgoJKiBbaWYxNjMyL01ha2VmaWxlLmluXQoJUmVuYW1lZCB3aW5wcm9jcyBhbmQgd2lucHJvY3MzMiB0byB3cHJvY3MgYW5kIHdwcm9jczMyIHRvIGF2b2lkCglETEwgbmFtZXMgPiA4IGNoYXJhY3RlcnMuCgoJKiBbbG9hZGVyL2J1aWx0aW4uY10gKE5ldyBmaWxlKQoJR3JvdXBlZCBhbGwgYnVpbHQtaW4gRExMcyBjb2RlIGluIGEgc2luZ2xlIGZpbGUuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJVXNlIHRoZSBXaW4zMiBoZWFwIGNvZGUgaW5zdGVhZCBvZiBtYWxsb2MoKSB0byBhbGxvY2F0ZSBsaW5lYXIKCW1lbW9yeS4gVGhpcyB3aWxsIGhlbHAgdGVzdCB0aGUgaGVhcCBjb2RlLgoKCSogW21lbW9yeS9sb2NhbC5jXQoJRml4ZWQgRnJlZVNlbGVjdG9yKCkgdG8gY2xlYXIgRFMgYW5kIEVTIGNvcnJlY3RseSBmb3IgaHVnZSBibG9ja3MuCgoJKiBbdG9vbHMvYnVpbGQuY10gW2lmMTYzMi9yZWxheS5jXQoJUmVtb3ZlZCAnaWQnIGRpcmVjdGl2ZSBpbiBzcGVjIGZpbGVzLiBGb3IgcmVsYXkgZGVidWdnaW5nLCB0aGUgRExMCgllbnRyeSBwb2ludCBpcyBub3cgY29tcHV0ZWQgZnJvbSB0aGUgQ1M6SVAgZW50cnkgcG9pbnQgYWRkcmVzcy4KCUFkZGVkICdoZWFwJyBkaXJlY3RpdmUgdG8gc3BlY2lmaXkgYSBsb2NhbCBoZWFwIGZvciB0aGUgRExMLiBVU0VSCglhbmQgR0RJIGhlYXAgYXJlIG5vdyBjcmVhdGVkIHRoaXMgd2F5LgoKCSogW3dpbmRvd3MvY2xhc3MuY10gW2luY2x1ZGUvY2xhc3MuaF0KCUNoYW5nZWQgdGhlIGNsYXNzIHN0cnVjdHVyZSB0byB1c2UgcG9pbnRlcnMgaW5zdGVhZCBvZiBoYW5kbGVzLgoJQ2hhbmdlZCBHZXQvU2V0Q2xhc3NXb3JkL0xvbmcgdG8gdXNlIGEgc3dpdGNoIHN0YXRlbWVudDsgdGhpcwoJYWxsb3dzIGNoYW5naW5nIHRoZSBsYXlvdXQgb2YgdGhlIENMQVNTIHN0cnVjdHVyZS4KCgkqIFt3aW5kb3dzL3dpbi5jXSBbaW5jbHVkZS93aW4uaF0KCVVzZSBhIENMQVNTICogaW5zdGVhZCBvZiBhIGhhbmRsZSBmb3IgdGhlIHdpbmRvdyBjbGFzcy4KClNhdCBBcHIgMjcgMTg6MTA6MTEgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW21lbW9yeS9nbG9iYWwuY10KCSAgW3dpbjMyL21lbW9yeS5jXSBbd2luMzIvcHJvY2Vzcy5jXQoJR2V0UHJvY2Vzc0FmZmluaXR5TWFzayxHbG9iYWxMb2NrLElzQmFkUmVhZFB0cixJc0JhZFdyaXRlUHRyLAoJTG9jYWxMb2NrLFNldFRocmVhZEFmZmluaXR5TWFzazogbmV3IHJlbGF5cy4KCgkqIFt3aW4zMi9jdXJzb3JpY29uMzIuY10KCVJldHVybiBzYW1lIGhhbmRsZSBpZiBhIGN1cnNvciBpcyBsb2FkZWQgbXVsdGlwbGUgdGltZXMuCgpTYXQgQXByIDI3IDE1OjEzOjM3IDE5OTYgIEJhbmcgSnVuIFlvdW5nIDxiYW5nanlAbm93bnVyaS5ub3djb20uY28ua3I+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19Lby5yY10KICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBLb3JlYW4gW0tvXSBsYW5ndWFnZS4KCkZyaSBBcHIgMjYgMDA6NDk6MDUgMTk5NiAgSHV3IEQuIE0uIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW29iamVjdHMvZGMuY10gW29iamVjdHMvZm9udC5jXQoJRml4ZWQgcHJvYmxlbSB3aXRoIFNhdmVEQygpL1Jlc3RvcmVEQygpIGFuZCBmb250IGNhY2hlICd1c2VkJyBjb3VudC4KCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdIFtvYmplY3RzL2RjdmFsdWVzLmNdCglGaXhlZCBicm9rZW4gU2V0VGV4dEFsaWduKCkgb24gbWV0YWZpbGVzLgoKCSogW29iamVjdHMvbWV0YWZpbGUuY10KCURlbGV0ZSBvYmplY3RzIGluIGhhbmRsZSB0YWJsZSBhdCBlbmQgb2YgUGxheU1ldGFGaWxlKCkuCgpXZWQgQXByIDI0IDE5OjIxOjAxICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtpZjE2MzIvdmVyLnNwZWNdIFttaXNjL3Zlci5jXSBbaW5jbHVkZS92ZXIuaF0gKE5ldyBmaWxlcykKCVZFUi5ETEwgKHBhcnRpYWxseSkgaW1wbGVtZW50ZWQgKFZlckZpbmRGaWxlLFZlckluc3RhbGxGaWxlKQoJW0lmIGl0IGRvZXNuJ3Qgd29yayBmb3IgeW91LCB1c2UgLWRsbCAtdmVyIGFuZCByZXBvcnQgaXQgdG8gbWVdCgoJKiBbaWYxNjMyL3VzZXIzMi5zcGVjXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFtpZjE2MzIvc2hlbGwuc3BlY10KCSAgW2lmMTYzMi9zaGVsbDMyLnNwZWNdIFttaXNjL29sZTJubHMuY10gW3dpbmRvd3MvbWVzc2FnZS5jXQoJICBbd2luZG93cy9ncmFwaGljcy5jXQoJU2ltcGxlIHdpbjMyIGZ1bmN0aW9ucywgd2hlcmUgd2UgY2FuIGp1c3QgdXNlIHRoZSB3aW4xNiBjb3VudGVycGFydC4KCU1pc2MuIHN0dWJzLiAKCgkqIFttaXNjL2xzdHIuY10KCVNvbWVvbmUgcmVwb3J0ZWQgYSBfbHN0cmxlbihOVUxMKS4gTlVMTCBpcyBhIHZhbGlkIGFyZ3VtZW50LiBGaXhlZC4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglTb21lIGFsbG9jbGVucyB3ZXJlIG9mZiBieSAxLCBvbmUgZG91YmxlIGZjbG9zZSgpIGZpeGVkLgoJUmVxdWVzdGluZyB2YWx1ZSAwIG9mIGEga2V5IHdpdGggbm8gdmFsdWVzIHJldHVybnMgYW4gZXJyb3IgCgkoc2hvdWxkIHdlIGFsd2F5cyByZXR1cm4gYSBtYWRlIHVwIHZhbHVlIE5VTEw/IHdoYXQgZG9lcyB3aW4zLjE/KQoKVHVlIEFwciAyMyAxNzowMDowMCAxOTk2IEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW21pc2Mvc2hlbGwuY10KCUltcGxlbWVudGVkIEZpbmRFbnZpcm9ubWVudFN0cmluZygpLCBEb0Vudmlyb25tZW50U3Vic3QoKSwKCUV4dHJhY3RJY29uKCksIEludGVybmFsRXh0cmFjdEljb24oKSBhbmQgRXh0cmFjdEFzc29jaWF0ZWRJY29uKCkuCgoJKiBbbWlzYy91c2VyLmNdCglEbyBleHRlbnNpdmUgY2xlYW51cCBvbiBhcHBsaWNhdGlvbiBleGl0LgoKCSogW3dpbmRvd3MvaG9vay5jXSBbd2luZG93cy93aW4uY10gW3dpbmRvd3MvY2xhc3MuY10KCUFkZGVkIG1pc2NlbGxhbmVvdXMgY2xlYW51cCByb3V0aW5lcy4KCgkqIFtjb250cm9scy9tZW51LmNdCglNb3JlIGVmZmljaWVudCBwb3B1cCBtZW51IHdpbmRvdyBoYW5kbGluZy4KCk1vbiBBcHIgMjIgMjE6MzU6MjIgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF1bb2JqZWN0cy9vZW1iaXRtYXAuY11baW5jbHVkZS9iaXRtYXBzL29ibV90cnR5cGVdCglBZGRlZCAiVFQtYml0bWFwIiBmb3IgbGF0ZXIgdXNhZ2UgaW4gYSBDaG9vc2VGb250KCkgb3duZXJkcmF3IGNvbWJvYm94LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgQXByIDIwIDIzOjIzOjE2IDE5OTYgIFJvYmVydCBQb3VsaW90IDxrcnlub3NAcWJjLmNsaWMubmV0PgoKCSogW3Jlc291cmNlcy9zeXNyZXNfRnIucmNdIFtyZXNvdXJjZXMvVE9ET10KCU1hZGUgY2hhbmdlcyBmb3IgQ2hvb3NlX0NvbG9yIGRpYWxvZy4KClNhdCBBcHIgMjAgMTU6NDM6NDkgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglGaXhlZCB0ZXN0IHRoYXQgZ290IG1pc2NvbXBpbGVkIGJ5IHNvbWUgb2xkIGdjYyB2ZXJzaW9ucy4KCgkqIFttZW1vcnkvbG9jYWwuY10KCUZpeGVkIHRoZSBsYXlvdXQgb2YgaGFuZGxlIHRhYmxlcyBzbyB0aGF0IG1vdmVhYmxlIGhhbmRsZSBlbnRyaWVzCgljYW4gYmUgZnJlZWQgb24gTG9jYWxGcmVlKCkuCglJbXBsZW1lbnRlZCBMb2NhbEZsYWdzKCksIExvY2FsQ291bnRGcmVlKCksIExvY2FsSGFuZGxlRGVsdGEoKSBhbmQKCUdldEhlYXBTcGFjZXMoKS4KCgkqIFttaXNjL21haW4uY10gW0FOTk9VTkNFXQoJVXBkYXRlIHRoZSBsaXN0IG9mIGNvbnRyaWJ1dG9ycy4gUGxlYXNlIGxldCBtZSBrbm93IGlmIEkgZm9yZ290Cglzb21lb25lLgoKRnJpIEFwciAxOSAyMDowNzoyMCAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciAgPGRvcnNzZWxAcnVsaG0xLmxlaWRlbnVuaXYubmw+CgoJKiBbY29udHJvbHMvZWRpdC5jXSBbY29udHJvbHMvRURJVC5UT0RPXQoJRml4ZWQgRU1fU0VUSEFORExFIC8gV01fQ1JFQVRFIC8gRURJVF9NYWtlRmlyKCkgYnVmZmVyIGFsbG9jYXRpb24uCglGaXhlZCBFU19OT0hJREVTRUwgLyBXTV9NT1VTRU1PVkUgLyBXTV9MQlVUVE9ORE9XTiBpbXBsZW1lbnRhdGlvbi4KCUFkZGVkIFdNX0VOQUJMRSBpbXBsZW1lbnRhdGlvbiAoZ3JheSB0ZXh0KS4KCUZpeGVkIGJ1ZmZlciA+IDMyNzY3IGJ1Zy4KCUZpeGVkIGFyZ3VtZW50IHR5cGVzIC8gdHlwZWNhc3RpbmcuCglGYXN0ZXIgc2VsZWN0aW9uIChyZSlkcmF3aW5nLgoKVGh1IEFwciAxOCAxMzozODoyNiAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdIFtpbmNsdWRlL3dpbnJlZy5oXQoJQ2hhbmdlZCBzYXZlZmlsZSBmb3JtYXQgYWdhaW4gdG8gaHVtYW4gcmVhZGFibGUvZWRpdGFibGUKCShVTklDT0RFIGNoYXJzID4weGZmIGFyZSBzcGVjaWZpZWQgYnkgXHVYWFhYLCBkYXRhIGJ5IFhYKS4KCUhhcyBub3cgZ2xvYmFsIC8gbG9jYWwgcmVnaXN0cnkgZGF0YWJhc2VzIChpbmNsdWRpbmcgbWVyZ2luZyB0aGVtKS4KCUhLRVlfQ0xBU1NFU19ST09UID09IEhLRVlfTE9DQUxfTUFDSElORVxcU09GVFdBUkVcXENsYXNzZXMuCglIS0VZX0NVUlJFTlRfVVNFUiA9PSBIS0VZX1VTRVJTXFw8bG9naW5uYW1lPi4KCgkqIFttaXNjL2NvbW0uY10KCUFsbG93ICIgIiBhcyBDT014OiAuLi4gc3BlYyBkZWxpbWl0ZXIgdG9vLgoJKEFPTC1DRCBzZXR1cC5leGUgdHJpZXMgdG8gaW5pdGlhbGl6ZSBtb2RlbTIgYXMgIjk2MDAseCx4IHgiIChjYW4ndCAKCXJlbWVtYmVyIHRoZSB4KS4KClRodSBBcHIgMTggMDk6MDA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9tZGkuY10KCU1pc2NlbGxhbmVvdXMgY2hhbmdlcy4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXSAKCVVzZSBCaXRCbHQgd2hlbmV2ZXIgcG9zc2libGUgaW4gU2V0V2luZG93UG9zLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUZpeCBpbmNvbXBhdGliaWxpdGllcyB3aXRoIGhyZ25VcGRhdGUgYmVpbmcgMS4KCldlZCBBcHIgMTcgMTk6MTk6MjIgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFttaXNjL2NvbW1kbGcuY10KCU1hbnkgYnVnZml4ZXMgaW4gQ2hvb3NlQ29sb3IgZGlhbG9nLgoJQWRkZWQgYSB1c2VyIGRlZmluZWQgZGlhbG9nIHRpdGxlIGluIEZpbGVPcGVuLS9GaWxlU2F2ZS0gZGlhbG9nLgoKCSogW21pc2MvY29tbWRsZy5jXVtpbmNsdWRlL2NvbW1kbGcuaF0KCSAgW2lmMTYzMi9jb21tZGxnLnNwZWNdW2lmMTYzMi93aW5wcm9jcy5zcGVjXQoJSW50cm9kdWNlZCBkaWFsb2ctLCBjYWxsYmFjay0gYW5kIGVudW0tIHN0dWIgZnVuY3Rpb25zCglmb3IgQ2hvb3NlRm9udCBkaWFsb2cKCldlZCBBcHIgMTcgMTk6MDg6MzggMTk5NiAgTmllbHMgZGUgQ2FycGVudGllciAgPG5pZWxzQGNpbmR5LmV0LnR1ZGVsZnQubmw+CgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXSBbaW5jbHVkZS9tZXRhZmlsZS5oXSBbaWYxNjMyL2dkaS5zcGVjXQoJSW1wbGVtZW50ZWQgRW51bU1ldGFGaWxlIGFuZCBDb3B5TWV0YUZpbGUuIFJlbW92ZWQgTUVUQUZJTEUgc3RydWN0LgoJSW1wbGVtZW50ZWQgTUVUQV9TVFJFVENIRElCIGluIFBsYXlNZXRhRmlsZVJlY29yZCwgc2V2ZXJhbCBidWcgCglmaXhlcy4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJRG9uJ3QgdHJ5IHRvIGhpZGUgdGhlIHdpbmRvdyBpZiBpdCdzIGFscmVhZHkgaGlkZGVuLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJTGV0IE1TR19QZWVrSGFyZHdhcmVNc2cgZmlsbCB0aGUgbWVzc2FnZSBxdWV1ZSB3aXRoIGV2ZW50cyBpZgoJaXQncyBlbXB0eS4KCldlZCBBcHIgMTcgMTc6NTQ6MDQgMTk5NiAgVHJpc3RhbiBUYXJyYW50IDx0c3RAc3RoaW5jLmRlbW9uLmNvLnVrPgoKCSogW3Jlc291cmNlcy9zeXNyZXNfSXQucmNdCglVcGRhdGVkIHRvIHN1cHBvcnQgdGhlIG5ldyBDSE9PU0VfQ09MT1JfRElBTE9HLgoKVHVlIEFwciAxNiAxMTo1MDowMCAxOTk2ICBBbmFuZCBLdW1yaWEgPGFrdW1yaWFAb3plbWFpbC5jb20uYXU+CgoJKiBbaWYxNjMyL01ha2VmaWxlXSBbaWYxNjMyL3JlbGF5LmNdIFtpZjE2MzEvdzMyc3lzLnNwZWNdCgkgIFtpbmNsdWRlL3czMnN5cy5oXSBbaW5jbHVkZS9kbGxzLmhdCgkgIFttaXNjL01ha2VmaWxlXSBbbWlzYy93MzJzeXMuY10KCVczMlNZUy5ETEwgcGFydGlhbGx5IGltcGxlbWVudGVkLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gQXByIDE0IDEyOjUxOjI3IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL21lbnUuY10gW2luY2x1ZGUvZGlhbG9nLmhdIFt3aW5kb3dzL2RpYWxvZy5jXQoJTWFkZSB0aGUgcmVzb3VyY2UgbG9hZGluZyBjb2RlIGFsd2F5cyB1c2UgdGhlIGNvcnJlY3QgV2luZG93cwoJbGF5b3V0IGZvciBXaW5lbGliIG9uIG90aGVyIENQVXMuCgoJKiBbaW5jbHVkZS9tb2R1bGUuaF0gW2xvYWRlci9tb2R1bGUuY10KCUFkZGVkIHNlbGYgaGFuZGxlIGluIE5FX01PRFVMRSBzdHJ1Y3R1cmUsIHNvIHdlIGNhbiB1c2UgYSBwb2ludGVyCglpbnN0ZWFkIG9mIGEgaGFuZGxlLgoJQWRkZWQgZnVuY3Rpb24gTU9EVUxFX0dldFB0cigpIHRvIHZhbGlkYXRlIGEgSE1PRFVMRS4KCgkqIFttZW1vcnkvaGVhcC5jXQoJSW1wbGVtZW50ZWQgV2luMzIgaGVhcCBtYW5hZ2VtZW50LgoKCSogW21lbW9yeS9zZWxlY3Rvci5jXQoJRml4IHNlbGVjdG9yIGxpbWl0IGZvciBodWdlIGJsb2Nrcy4KClNhdCBBcHIgMTMgMDA6MTk6MTIgMTk5NiAgSHV3IEQuIE0uIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW29iamVjdHMvbWV0YWZpbGUuY10KCUZpeGVkIG1lbWNweSBidWcgdG8gYWxsb3cgbWVtb3J5IGJhc2VkIG1ldGFmaWxlcyB0byB3b3JrLgoKRnJpIEFwciAxMiAxOToyNTo0MSAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciAgPGRvcnNzZWxAcnVsaG0xLmxlaWRlbnVuaXYubmw+CgoJKiBbY29udHJvbHMvZWRpdC5jXSBbY29udHJvbHMvRURJVC5UT0RPXQoJQ29tcGxldGUgcmV3cml0ZS4gIEV2ZXJ5dGhpbmcgY2hhbmdlZDogbmV3IGZlYXR1cmVzLCBuZXcgYnVncy4KCU1haW4gYWRkaXRpb246IFdvcmRXcmFwLgoKRnJpIEFwciAxMiAyMDoyOTo1NSAxOTk2ICBUcmlzdGFuIFRhcnJhbnQgPHRzdEBkY3MuZWQuYWMudWs+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19JdC5yY10KCUZpeGVkIGEgZmV3IG1pc3Rha2VzIGluIHRoZSBmaWxlIGFuZCByZXNpemVkIHNvbWUgb2YgdGhlIGNvbnRyb2xzLgoKRnJpIEFwciAxMiAwOTo1NToxMyAxOTk2ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KCgkqIFttaXNjL3dpbnNvY2tldC5jXQoJRml4ZWQgYnJva2VuICNpZiBkZWZpbmVkIHRoYXQgc3RvcHBlZCB1bml4d2FyZSBjb21waWxpbmcuCgoJKiBbd2luMzIvcmVzb3VyY2UuY10KICAgICAgICBBZGRlZCBtaXNzaW5nIHJldHVybiB0byBlbmQgb2YgRmluZFJlc291cmNlMzIuCgpUaHUgQXByIDExIDE4OjAwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10gW3dpbmRvd3MvZXZlbnQuY10KCUZpeGVkIEdldEtleVN0YXRlIGZvciBtb3VzZSBidXR0b25zLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJV01fTU9VU0VBQ1RJVkFURSB3YXNuJ3Qgc2VudCBpbiBzb21lIGNhc2VzLgoKV2VkIEFwciAxMCAxODo1OTo1MyAxOTk2ICBOaWVscyBkZSBDYXJwZW50aWVyICA8bmllbHNAY2luZHkuZXQudHVkZWxmdC5ubD4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCU1hdGNoIHNsaWdodGx5IGJpZ2dlciBmb250IGlmIGhlaWdodCBuZWdhdGl2ZS4KCk1vbiBBcHIgIDggMTM6NDY6MTUgMTk5NiAgRGVhbm8gQ2FsdmVyIDxkZWFub0ByYXR0aWUuZGVtb24uY28udWs+CgoJKiBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXQoJQ2hhbmdlZCByZWFkJ3MgdG8gRklMRV9yZWFkJ3MgaW4gbW1zeXN0ZW0gdG8gZml4IG1taW8gYnVnLgoKU3VuIEFwciAgNyAyMTo0MDoyOSAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW21pc2MvY29tbWRsZy5jXSBbcmVzb3VyY2VzL3N5c3Jlc19Fbi5yY10gW3Jlc291cmNlcy9zeXNyZXNfRGUucmNdCglJbnRyb2R1Y2VkIENvbG9yRGxnUHJvYygpIGZvciBDaG9vc2VDb2xvcigpIGFuZCByZXBsYWNlZCBmaXR0aW5nCglFbi0sRGUtIHJlc291cmNlcy4gCglBcyB3cml0dGVuIGluIFRPRE86IHNvbWUgbmF0aW9uYWwgbGFuZ3VhZ2Ugc3VwcG9ydCBpcyBuZWVkZWQgaGVyZS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRnJpIEFwciAgNSAxNToyMjo1NSAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb250cm9scy9idXR0b24uY10gW2NvbnRyb2xzL3N0YXRpYy5jXQoJQ2hhbmdlcyB0byB1c2UgV05EICogd2hlcmV2ZXIgcG9zc2libGUuCgoJKiBbZGVidWdnZXIvZGJnLnldIFtkZWJ1Z2dlci9kZWJ1Zy5sXQoJQWRkZWQgJ2luZm8gbW9kdWxlJyBhbmQgJ3dhbGsgbW9kdWxlJyBjb21tYW5kcy4KCgkqIFtpZjE2MzIvTWFrZWZpbGUuaW5dIFtpZjE2MzIvcmVsYXkuY10gW3Rvb2xzL2J1aWxkLmNdCglBZGRlZCBhc3NlbWJseSBjb2RlIGdlbmVyYXRpb24gdG8gY2FsbCBmcm9tIFdpbmUgaW50byAzMi1iaXQgY29kZS4KCUNoYW5nZWQgYWxsICdjYWxsMzInIHJlZmVyZW5jZXMgaW4gJ2NhbGxmcm9tMTYnIHRvIGF2b2lkIGNvbmZ1c2lvbgoJd2l0aCBXaW4zMiByb3V0aW5lcy4KCgkqIFtpbmNsdWRlL2NhbGxiYWNrLmhdCglBZGRlZCBwcm90b3R5cGVzIGZvciAzMi1iaXQgY2FsbGJhY2tzLgoKCSogW2xvYWRlci9tb2R1bGUuY10gW2lmMTYzMi9yZWxheTMyLmNdIFt0b29scy9idWlsZC5jXQoJVW5pZmllZCAxNi0gYW5kIDMyLWJpdCBtb2R1bGVzLiBUaGUgZmFrZSBtb2R1bGUgZm9yIDMyLWJpdCBETExzIGlzCglub3cgZ2VuZXJhdGVkIGJ5IHRoZSBidWlsZCBwcm9ncmFtLgoKCSogW2luY2x1ZGUvbW9kdWxlLmhdCglBZGRlZCBleHRyYSBpbmZvIHRvIE5FX01PRFVMRSBmb3IgV2luMzIgbW9kdWxlcyB0byBwb2ludCB0byB0aGUgUEUKCW1vZHVsZSBkYXRhLgoKCSogW2luY2x1ZGUvcGVfaW1hZ2UuaF0gW2xvYWRlci9wZV9pbWFnZS5jXSBbd2luMzIvcmVzb3VyY2UuY10KCVJlbW92ZWQgdGhlIHdpbmVfZmlsZXMgbGlzdC4gVGhlIFBFIGRhdGEgZm9yIGEgbW9kdWxlIGNhbiBub3cgYmUKCWFjY2Vzc2VkIHdpdGggdGhlIE5FX1dJTjMyX01PRFVMRSBtYWNyby4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdIFttaXNjZW11L2luc3RyLmNdCglEb24ndCBzdGFydCB0aGUgQklPUyB0aW1lciBhdCBzdGFydHVwLCBidXQgb25seSBhZnRlciBhbiBhY2Nlc3MgdG8KCXRoZSAweDQwIHNlZ21lbnQuCgoJKiBbbWVtb3J5L2xvY2FsLmNdCglDaGFuZ2VkIExPQ0FMX0xvY2soKSB0byByZXR1cm4gYSAzMi1iaXQgcG9pbnRlci4KCgkqIFttaXNjL21haW4uY10gW2luY2x1ZGUvZGxscy5oXQoJU29tZSBidWlsdC1pbiBETExzIChsaWtlIEtFUk5FTCkgY2FuIG5vIGxvbmdlciBiZSBkaXNhYmxlZCBmcm9tCiAJdGhlIGNvbW1hbmQtbGluZS4KCQpUaHUgQXByICA0IDE5OjU0OjM5IDE5OTYgIEtlaXRoIFJleW5vbGRzIDxrZWl0aHJAc2NvLkNPTT4KCgkqIFsqLypdCglBIGxvdCBvZiBzbWFsbCBjaGFuZ2VzIHRvIHN1cHBvcnQgU0NPIE9wZW5TZXJ2ZXIgNS4KClRodSBBcHIgIDQgMTU6Mzg6MTMgMTk5NiAgRnJhbnMgdmFuIERvcnNzZWxhZXIgPGRvcnNzZWxAcnVsaG0xLmxlaWRlbnVuaXYubmw+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRml4ZWQgR2V0S2V5U3RhdGUoKSBjYWxsIHRvIHVzZSAweDgwMDAgY29udmVudGlvbi4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIHVuZG9jdW1lbnRlZCBtZXNzYWdlcyBFTV9TQ1JPTEwgYW5kIEVNX0dFVFRIVU1CLgoKVGh1IEFwciAgNCAwOTo1Mjo1MiAxOTk2ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KCgkqIFtpZjE2MzIvZXhjZXB0LlNdCglNb2RpZmllZCBjb2RlIHRvIGFzc2VtYmxlIG9uIHVuaXh3YXJlLgoKV2VkIEFwciAgMyAwOTozODoyNiAxOTk2ICBKdWVyZ2VuIE1hcnF1YXJkdCA8bWFycXVAbHVuYXIuYWR2YW50ZXN0LmRlPgoKCSogW29iamVjdHMvZm9udC5jXQoJSW1wbGVtZW50YXRpb24gb2YgYSBzZWNvbmQgZm9udCBjYWNoZSB3aGljaCB3aWxsIGJlIHVwZGF0ZWQKCWR5bmFtaWNhbGx5LgoKTW9uIEFwciAgMSAxNjo0Nzo0MCAxOTk2ICBSb2JlcnQgUG91bGlvdCA8a3J5bm9zQHFiYy5jbGljLm5ldD4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX0N6LnJjXSBbcmVzb3VyY2VzL3N5c3Jlc19EYS5yY10KCSAgW3Jlc291cmNlcy9zeXNyZXNfRGUucmNdIFtyZXNvdXJjZXMvc3lzcmVzX0VvLnJjXQoJICBbcmVzb3VyY2VzL3N5c3Jlc19Fcy5yY10gW3Jlc291cmNlcy9zeXNyZXNfRmkucmNdCgkgIFtyZXNvdXJjZXMvc3lzcmVzX05vLnJjXSBbcmVzb3VyY2VzL1RPRE9dCglVcGRhdGVkIEZJTkRfVEVYVCBhbmQgUkVQTEFDRV9URVhUIHRvIHdvcmsgbGlrZSB0aGUgRW5nbGlzaCB2ZXJzaW9uLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTWFyIDMxIDEzOjU0OjQ2IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW3Rvb2xzL2J1aWxkLmNdCglDaGFuZ2VkIEJ1aWxkU3BlYzMyRmlsZXMoKSB0byBnZW5lcmF0ZSBhc3NlbWJseSBpbnN0ZWFkIG9mIEMgY29kZS4KCVVuaWZpZWQgLXNwZWMxNiBhbmQgLXNwZWMzMiBvcHRpb25zOyBETEwgdHlwZSBpcyBub3cgZGV0ZXJtaW5lZCBieQoJdGhlICd0eXBlJyBkZWNsYXJhdGlvbiBpbiB0aGUgLnNwZWMgZmlsZS4KCU5ldyAtc3RkY2FsbCBvcHRpb24gdG8gYnVpbGQgYWxsIHN0ZGNhbGwgYXNzZW1ibHkgcmVsYXlzLgoKCSogW2lmMTYzMi9yZWxheS5jXSBbaWYxNjMyL3JlbGF5MzIuY10gW2luY2x1ZGUvZGxscy5oXQoJU3RhcnRlZCB0byB1bmlmeSAxNi0gYW5kIDMyLWJpdCBidWlsdGluIERMTHMuCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJQWRkZWQgTU9EVUxFX0dldFduZFByb2NFbnRyeTMyKCkgdG8gbWlycm9yIE1PRFVMRV9HZXRXbmRQcm9jRW50cnkxNigpLgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXSBbbG9hZGVyL3Jlc291cmNlLmNdCglBbGwgbW9kdWxlcyBub3cgaGF2ZSBhIE5FIHNpZ25hdHVyZSwgYW5kIGNhbiBiZSBkaXN0aW5ndWlzaGVkIGJ5Cgl0aGUgTkVfRkZMQUdTX1dJTjMyIGZsYWcuCgoJKiBbd2luZG93cy9hbGlhcy5jXQoJQWxpYXNlcyBmb3IgYnVpbHQtaW4gd2luZG93IHByb2NlZHVyZXMgYXJlIG5vdyBhbGwgY3JlYXRlZCBhdAoJc3RhcnR1cCBpbiBBTElBU19Jbml0KCkuCgpGcmkgTWFyIDI5IDE0OjU2OjM5IDE5OTYgIEdyZWcgS3JlaWRlciA8a3JlaWRlckBuYXRsYWIucmVzZWFyY2gucGhpbGlwcy5jb20+CgoJKiBbY29udHJvbHMvY29tYm8uY10KCUxpbWl0IHJlY3RhbmdsZSB0byBjbGVhciB0byBzaXplIG9mIGl0ZW0gd2hlbiBwYWludGluZyBjb21ibywgbm90CiAJZGVmYXVsdC4gIE9ubHkgZHJhdyBpdGVtcyBpbiBsaXN0IHdoZW4gdGhlcmUgaXMgZW5vdWdoIHJvb20gZm9yIHRoZW0uCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJR2V0IHRoZSBtZWFzdXJlIG9mIGV2ZXJ5IGl0ZW0gdGhhdCdzIGFkZGVkIGFuZCBzdG9yZSBpbiB0aGUgaXRlbSdzCiAJZGF0YSBzdHJ1Y3R1cmUuICBTY3JvbGwgbGlzdGJveCBpZiBtb3VzZSBuZWFyIGVkZ2Ugb2YgYm94LiAgT25seQogCWRyYXcgaXRlbXMgaW4gbGlzdCB3aGVuIHRoZXJlIGlzIGVub3VnaCByb29tLgoKRnJpIE1hciAyOSAxMjowMDowMCAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXSBbd2luZG93cy9kaWFsb2cuY10gW3dpbmRvd3MvbWRpLmNdCgkgIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbY29udHJvbHMvbWVudS5jXSAKCVZhcmlvdXMgY2hhbmdlcyBmb3IgYmV0dGVyIGtleWJvYXJkIGhhbmRsaW5nLiAKCgkqIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL21lc3NhZ2UuY10gW21pc2Mva2V5Ym9hcmQuY10KCVByb3BlciBrZXlib2FyZCBtZXNzYWdlIG9yZGVyaW5nLCB3b3JraW5nIEdldEtleVN0YXRlKCkgKGZpbmFsbHkhKSwgCglpbXByb3ZlbWVudHMgaW4gVG9Bc2NpaSgpLgoKCSogW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL21lc3NhZ2UuY10KCVNtYWxsIGltcHJvdmVtZW50cyBpbiBXSU5fRmluZFdpblRvUmVwYWludC4KCgkqIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy9wYWludGluZy5jXSBbd2luZG93cy9ub25jbGllbnQuY10KCVB1dCB1cGRhdGUgcmVnaW9uIGluIFdNX05DUEFJTlQgd1BhcmFtLgoKCSogW2xvYWRlci90YXNrLmNdCglLaWxsIHRhc2sgdGltZXJzIHdoZW4gdGFzayBpcyBkZWxldGVkLCBzd2l0Y2ggdGltZXJzIHRvIHRoZQoJbmV3IHF1ZXVlIGluIFNldFRhc2tRdWV1ZSgpLgoKCSogW2xvYWRlci9zaWduYWwuY10gW21pc2NlbXUvZG9zbWVtLmNdCglBZGRlZCBTSUdBTFJNIHNpZ25hbCBoYW5kbGVyIHRvIGluY3JlbWVudCBCSU9TIGNsb2NrLiAKCgkqIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy93aW5wb3MuY10gW3dpbmRvd3MvbWRpLmNdCglGaXhlZCBDaGlsZFdpbmRvd0Zyb21Qb2ludCgpLCBXTV9QQVJFTlROT1RJRlkgYW5kIGl0cyBoYW5kbGluZyBieQoJTURJIGNsaWVudC4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJSW1wcm92ZW1lbnRzIGluIGhhbmRsaW5nIG9mIG93bmVkIHBvcHVwcy4gIkZsb2F0aW5nIiB0b29sYm94ZXMgCgl3b3JrIGJldHRlciBub3cuIAoKVGh1IE1hciAyOCAxMjozODoyOSAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglOZXcgZmlsZSwgcmVnaXN0cnkgcmV3cml0ZSBpbmNsdWRpbmcgd2luMzIgZXh0ZW5zaW9ucwoJLSBVbmljb2RlCgktIG11bHRpcGxlIHZhbHVzIHBlciBrZXkKCS0gZGlmZmVyZW50IGRhdGF0eXBlcyBmb3IgdmFsdWVzCgktIG11bHRpcGxlIHJvb3RrZXlzCgktIHNhdmluZyBhbmQgbG9hZGluZyBpbiBkaWZmZXJlbnQgcmVnaXN0cmllcy4KCgkqIFtpbmNsdWRlL3dpbnJlZy5oXQoJTmV3IGZpbGUsIGRlZmluaXRpb25zIGFuZCBzdHJ1Y3RzIGZvciByZWdpc3RyeS4KCgkqIFtpbmNsdWRlL3dpbmVycm9yLmhdCglTb21lIG5ldyBlcnJvciBkZWZpbmVzIGFkZGVkLi4uIHRoZXJlIGFyZSBtb3JlLCBzb21lb25lIHBsZWFzZQogCWNoZWNrIGEgKHJlYWwtKXdpbmRvd3Mgd2luZXJyb3IuaC4KCQoJKiBbaWYxNjMyL3NoZWxsLnNwZWNdIFtpZjE2MzIvYWR2YXBpMzIuc3BlY10gW2lmMTYzMi9rZXJuZWwuc3BlY10KCVJlZ2lzdHJ5IHNwZWNzIGFkZGVkLgoKCSogW2lmMTYzMi9yZWxheS5jXQoJU3dpdGNoIGludGVybmFsIFNIRUxMLkRMTCB0byBkZWZhdWx0ICd1c2VkJy4KCgkqIFt3aW4zMi9zdHJpbmczMi5jXSBbaW5jbHVkZS9zdHJpbmczMi5oXQoJU29tZSBuZXcgZnVuY3Rpb25zIGFkZGVkLgoJY2hhciBzaG91bGQgYmUgdW5zaWduZWQgY2hhciB3aGVuIGNvbnZlcnRpbmcgdG8gMTZiaXQgaW50cy4KCgkqIFttaXNjL3NoZWxsLmNdIFtpbmNsdWRlL3NoZWxsLmhdIFt3aW4zMi9hZHZhcGkuY10KCVJlbW92ZWQgb2xkIHJlZ2lzdHJ5IGZ1bmN0aW9ucy4KClR1ZSBNYXIgMjYgMTU6MDE6NDYgMTk5NiAgRnJhbnMgdmFuIERvcnNzZWxhZXIgPGRvcnNzZWxAcnVsaG0xLmxlaWRlbnVuaXYubmw+CgoJKiBbaW5jbHVkZS9iaXRtYXBzL29jcl9pYmVhbV0KCUZpeGVkIHRoZSBwb3NpdGlvbiBvZiB0aGUgaG90c3BvdC4KCgkqIFtvYmplY3RzL3RleHQuY10KCUZpeGVkIGEgZmV3IGJ1Z3MgaW4gVEVYVF9UYWJiZWRUZXh0T3V0KCkuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJRml4ZWQgdGhlIG9yZGVyIG9mIHRoZSBiaXRzIGluIHRoZSBLZXlTdGF0ZVRhYmxlLgoJMHg4MCBpcyB0aGUgdXAvZG93bi1iaXQuICAweDAxIGlzIHRoZSB0b2dnbGUgYml0LgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXSBbd2luZG93cy9tZGkuY10gW2NvbnRyb2xzL2VkaXQuY10KCUZpeGVkIHRoZSBjYWxscyB0byBHZXRLZXlTdGF0ZSgpLgoKVHVlIE1hciAyNiAwODo0MzoxNSAxOTk2ICBSb2JlcnQgUG91bGlvdCA8a3J5bm9zQHFiYy5jbGljLm5ldD4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX0ZyLnJjXSBbcmVzb3VyY2VzL1RPRE9dCglVcGRhdGVkIEZJTkRfVEVYVCBhbmQgUkVQTEFDRV9URVhUIHRvIHdvcmsgbGlrZSB0aGUgRW5nbGlzaCB2ZXJzaW9uLgoKTW9uIE1hciAyNSAxNzozODo1OSAxOTk2ICBUcmlzdGFuIFRhcnJhbnQgPHRzdEBkY3MuZWQuYWMudWs+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19pdC5yY10KCUFkZGVkIHN1cHBvcnQgZm9yIEl0YWxpYW4gW0l0XSBsYW5ndWFnZS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE1hciAyNCAxMzoxMzoxMSAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtpbmNsdWRlL3dpbi5oXSBbd2luZG93cy8qLmNdCglSZXBsYWNlZCBuZXh0LCBwYXJlbnQsIGNoaWxkIGFuZCBvd25lciBoYW5kbGVzIGJ5IHBvaW50ZXJzIGluIFdORAoJc3RydWN0dXJlLiBUaGlzIHNob3VsZCBpbXByb3ZlIHBlcmZvcm1hbmNlLCBhbmQgc2hvdWxkIGJlCglyZWFzb25hYmx5IHNhZmUgc2luY2UgTWljcm9zb2Z0IGRpZCB0aGUgc2FtZSBpbiBXaW45NS4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdIFsqLypdCglSZWRlZmluZWQgSEFORExFIHRvIGJlIFVJTlQgaW5zdGVhZCBvZiBhIHBvaW50ZXIgZm9yIFdpbmVsaWIuIFRoaXMKCWFsbG93cyByZW1vdmluZyBhIGxvdCBvZiB1bm5lY2Vzc2FyeSBjYXN0cyBhbmQgTlBGTVRzLgoKCSogW3dpbmRvd3MvY2FyZXQuY10KCUNyZWF0ZSB0aGUgY2FyZXQgYnJ1c2ggdXBvbiBDcmVhdGVDYXJldCgpOyB1c2UgdGhlIGJpdG1hcAoJZGltZW5zaW9ucyBmb3IgdGhlIGNhcmV0LgoJRml4ZWQgQ0FSRVRfRGlzcGxheUNhcmV0KCkgdG8gdXNlIFBhdEJsdCgpLgoKRnJpIE1hciAyMiAxNjowMDowMCAxOTk2ICBBbmFuZCBLdW1yaWEgPGFrdW1yaWFAb3plbWFpbC5jb20uYXU+CgoJKiBbbWlzYy93aW5zb2NrZXQuY10KCU1vcmUgc2FuaXR5IGNoZWNrcywgZml4dXAgc29tZSBlcnJvbmVvdXMgcmV0dXJuIGNvZGVzLgoKCSogW2RvY3VtZW50YXRpb24vd2luc29ja10KCURlc2NyaXB0aW9uIG9mIGhvdyBjb21wYXRpYmxlIHRoZSB3aW5zb2NrIGlzIGN1cnJlbnRseS4KCkZyaSBNYXIgMjIgMTM6MDU6MzQgMTk5NiAgVWxyaWNoIFNjaG1pZCAgPHVzY2htaWRAbWFpbC5oaC5wcm92aS5kZT4KCgkqIFtsaWJyYXJ5L3dpbm1haW4uY10KCVNldCBgbHBzekNtZFBhcmFtJyBieSBjb25jYXRlbmF0aW5nIGFyZ3VtZW50cy4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglXaW5FeGVjOiBhY2NlcHQgVW5peCBjb21tYW5kcywgdXNlIFdpbmUgZW11bGF0b3IuCgpNb24gTWFyIDE4IDEyOjE2OjI3IDE5OTYgIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdW3dpbjMyL3RocmVhZC5jXVtpbmNsdWRlL2tlcm5lbDMyLmhdCglEZWxldGVDcml0aWNhbFNlY3Rpb24sIEVudGVyQ3JpdGljYWxTZWN0aW9uLAogCUluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24sIExlYXZlQ3JpdGljYWxTZWN0aW9uLCBUbHNBbGxvYywKIAlUbHNGcmVlLCBUbHNHZXRWYWx1ZSwgVGxzU2V0VmFsdWU6IG5ldyBmdW5jdGlvbnMuCglDUklUSUNBTF9TRUNUSU9OOiBuZXcgc3RydWN0dXJlLgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXVt3aW4zMi9jb2RlX3BhZ2UuY10KCVdpZGVDaGFyVG9NdWx0aUJ5dGU6IG5ldyBmdW5jdGlvbi4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY11bd2luMzIvZmlsZS5jXQoJR2V0RmlsZUF0dHJpYnV0ZXNBOiBuZXcgZnVuY3Rpb24uCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdW21pc2MvbWFpbi5jXQoJR2V0RW52aXJvbm1lbnRTdHJpbmdzVywgRnJlZUVudmlyb25tZW50U3RyaW5nc0EsCiAJRnJlZUVudmlyb25tZW50U3RyaW5nc1c6IG5ldyBmdW5jdGlvbnMuCgkKCSogW2lmMTYzMi91c2VyLnNwZWNdW3dpbjMyL2N1cnNvcmljb24zMi5jXVt3aW4zMi9NYWtlZmlsZS5pbl0KCWN1cnNvcmljb24zMi5jOiBuZXcgZmlsZS4KCUxvYWRDdXJzb3JBLCBMb2FkQ3Vyc29yVzogbW9kaWZpZWQgaW1wbGVtZW50YXRpb24gZnJvbSBMb2FkQ3Vyc29yCiAJdG8gV0lOMzJfKi4KCUxvYWRJY29uQSwgTG9hZEljb25XOiBtb2RpZmllZCBpbXBsZW1lbnRhdGlvbiBmcm9tIExvYWRJY29uQTMyCgl0byBXSU4zMl8qLgoKCSogW2luY2x1ZGUvc3RydWN0MzIuaF0KCXByYWdtYSBwYWNrIGluc2VydGVkLgoJQ1VSU09SSUNPTjMyIHN0cnVjdHVyZXMgYWRkZWQuCgoJKiBbaW5jbHVkZS93aW5ubHMuaF0KCUNvbnN0YW50cyBDUF8qIGFuZCBXQ18qIGFkZGVkLgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJUEVfTG9hZE1vZHVsZTogY2FsbCBQRV9Jbml0RExMIHdpdGggaE1vZHVsZSByYXRoZXIgdGhhbiB3cG50LgoKU3VuIE1hciAxNyAxNjo1OToxMiAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW21pc2MvY29tbWRsZy5jXQoJSW50cm9kdWNlZCBob29rIGZ1bmN0aW9uIGhhbmRsaW5nIGluIGZpbGUgZGlhbG9nLgoJUmVtb3ZlZCBhbiB1bm5lY2Vzc2FyeSBTaG93V2luZG93IGNhbGwgaW4gRklMRURMR19XTUNvbW1hbmQoKS4KClRodSBNYXIgMTQgMTA6NTA6MDAgMTk5NiAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBwcmRzLWdybi5kZW1vbi5jby51az4KCgkqIFtpZjE2MzIvZ2RpMzIuc3BlY10KCUFkZGVkIEdldE5lYXJlc3RDb2xvci4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY10KCUFkZGVkIEdsb2JhbEFkZEF0b21BLgoKCSogW3dpbjMyL3BhcmFtMzIuY10KCUFkZGVkIHN0YWNrZnJhbWUuaCB0byBpbmNsdWRlcy4KCVdJTjMyX0dsb2JhbEFkZEF0b21BKCkgLSBuZXcgZnVuY3Rpb24uCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCldlZCBNYXIgMTMgMTk6NDY6NTAgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJUmVtb3ZlZCBjYWxscyB0byBtZW1tb3ZlIChub3QgcG9ydGFibGUpLgoKCSogW2RlYnVnZ2VyL2RiZy55XSBbZGVidWdnZXIvZGVidWcubF0KCVByZWZpeGVkIGFsbCB0b2tlbiB3aXRoICd0JyB0byBhdm9pZCBjb25mbGljdHMgd2l0aCB0eXBlCglkZWZpbml0aW9ucy4KCUFkZGVkICd3YWxrIHF1ZXVlJywgJ3dhbGsgY2xhc3MnIGFuZCAnaW5mbyBjbGFzcycgY29tbWFuZHMuCgoJKiBbZGVidWdnZXIvaW5mby5jXQoJTW92ZWQgcXVldWUgYW5kIHdpbmRvdyBpbmZvcm1hdGlvbiBmdW5jdGlvbnMgdG8gd2luZG93cy9xdWV1ZS5jCglhbmQgd2luZG93cy93aW4uYyByZXNwZWN0aXZlbHkuCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJQWRkZWQgU0lHSFVQIGhhbmRsaW5nIHRvIGZvcmNlIGVudHJ5IGludG8gYnVpbHQtaW4gZGVidWdnZXIuCglDbGVhbmVkIHVwIGEgYml0LgoKCSogW21pc2Mvc3B5LmNdCglHZW5lcmFsIGNsZWFudXAgYW5kIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cy4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglBZGRlZCBDTEFTU19EdW1wQ2xhc3MoKSBhbmQgQ0xBU1NfV2Fsa0NsYXNzZXMoKSBmdW5jdGlvbnMgZm9yCglkZWJ1Z2dlci4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglQcmVzc2luZyBDdHJsLUFsdC1SZXR1cm4gZm9yY2VzIGFuIGVudHJ5IGludG8gdGhlIGRlYnVnZ2VyLiBOb3QKCXN1cmUgaWYgdGhpcyBrZXkgY29tYmluYXRpb24gaXMgYSBnb29kIGNob2ljZS4uLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy9xdWV1ZS5jXSAoTmV3IGZpbGUpCglNb3ZlZCBtZXNzYWdlIHF1ZXVlIGhhbmRsaW5nIGZ1bmN0aW9ucyB0byB3aW5kb3dzL3F1ZXVlLmMuCgpUdWUgTWFyIDEyIDE0OjU1OjE2IDE5OTYgIE9ubm8gSG92ZXJzICA8b25ub0BzdGFjay51cmMudHVlLm5sPgoKCSogW2lmMTYzMi9leGNlcHQuU10gW2luY2x1ZGUvZXhjZXB0LmhdIFt3aW4zMi9leGNlcHQuY10gKE5ldyBmaWxlcykKCUltcGxlbWVudGVkIFdpbjMyIGV4Y2VwdGlvbiBmdW5jdGlvbnM6IFJhaXNlRXhjZXB0aW9uKCksCiAJUnRsVW53aW5kKCksIFNldFVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcigpIGFuZAoJVW5oYW5kbGVkRXhjZXB0aW9uRmlsdGVyKCkuCgpNb24gTWFyIDExIDE5OjIzOjI5IDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbY29udHJvbHMvbGlzdGJveC5jXSBbaW5jbHVkZS9saXN0Ym94LmhdCglTcGVjaWFsIGhhbmRsaW5nIGZvciBDT01CT0xCT1ggc3R5bGVzIGludHJvZHVjZWQgdmlhIGV4dGVuc2lvbiBvZgogCUhFQURMSVNUIHN0cnVjdHVyZTogbHBobC0+ZHdTdHlsZS4KCk1vbiBNYXIgMTEgMTM6MzE6MDYgMTk5NiAgR3JlZyBLcmVpZGVyIDxrcmVpZGVyQG5hdGxhYi5yZXNlYXJjaC5waGlsaXBzLmNvbT4KCgkqIFtjb250cm9scy9jb21iby5jXQoJQW55IG1vdXNlIG1vdmVtZW50IHdpdGhpbiBhIHNtYWxsIGRpc3RhbmNlIChkZWZpbmVkIGJ5IENCTE1NX0VER0UpCglvZiB0aGUgdG9wIG9yIGJvdHRvbSBlZGdlIGNhdXNlcyB0aGUgd2luZG93IHRvIHNjcm9sbC4gIEFsc28gbW92ZWQgCglzb21lIGFzc2lnbm1lbnRzIHNvIHRoZSByb3V0aW5lIHdvcmtzIGNvcnJlY3RseS4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglDaGFuZ2luZyBzZWxlY3Rpb24gaW4gTGlzdEJveFNldEN1clNlbCBub3cgdXBkYXRlcyBQcmV2Rm9jdXNlZC4KCUFkZGVkIHRvIExCU2V0Rm9udCBhbmQgQ3JlYXRlTGlzdEJveFN0cnVjdCBhIGZha2UgaGRjIHRoYXQgdGVzdHMgCglhbmQgc2V0cyB0aGUgc3RhbmRhcmQgdGV4dCBoZWlnaHQuCgpTdW4gTWFyIDEwIDA4OjM5OjIzIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3MvZGNlLmNdCglGaXhlZCBtZW1vcnkgbGVhayBpbiBEQ0VfQ2xpcFdpbmRvd3MoKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRnJpIE1hciAgOCAxOTowNzoxOCAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb25maWd1cmUuaW5dCglRdW90ZSAnWycgYW5kICddJyBpbiB0aGUgdGVzdCBwcm9ncmFtIGZvciB0aGUgc3RyZW5ndGgtcmVkdWNlCglidWcuIFRoaXMgc2hvdWxkIHdvcmsgbXVjaCBiZXR0ZXIuLi4KCgkqIFtmaWxlcy9maWxlLmNdCglBdWdtZW50ZWQgRE9TX0ZJTEUgc3RydWN0dXJlLiBNb3N0IGludGVybmFsIGZ1bmN0aW9ucyBub3cgcmV0dXJuIGEKCURPU19GSUxFKiBpbnN0ZWFkIG9mIGEgVW5peCBoYW5kbGUuCglBZGRlZCBhIGxvY2FsIGZpbGUgYXJyYXkgdG8gcmVwbGFjZSB0aGUgUERCIGxpc3QgdXBvbiBzdGFydHVwLCB0bwoJYWxsb3cgdXNpbmcgZmlsZSBJL08gZnVuY3Rpb25zIGJlZm9yZSB0aGUgZmlyc3QgdGFzayBpcyBjcmVhdGVkLgoJQWRkZWQgRklMRV9TZXREYXRlVGltZSgpIGFuZCBGSUxFX1N5bmMoKSBmdW5jdGlvbnMuCgkKCSogW2xvYWRlci9tb2R1bGUuY10KCVVzZSB0aGUgRE9TIGZpbGUgSS9PIGZ1bmN0aW9ucyBpbiBNT0RVTEVfTG9hZEV4ZUhlYWRlcigpLgoKCSogW29iamVjdHMvYml0Ymx0LmNdCglVc2UgdmlzaWJsZSByZWdpb24gaW5zdGVhZCBvZiBHQyBjbGlwIHJlZ2lvbiB0byBjbGlwIHNvdXJjZQoJYXJlYS4gVGhpcyBmaXhlcyB0aGUgY2FyZCBkcmF3aW5nIGJ1ZyBpbiBmcmVlY2VsbC4KCgkqIFtvYmplY3RzL3JlZ2lvbi5jXQoJRml4ZWQgQ29tYmluZVJnbigpIHRvIGFsbG93IHNyYyBhbmQgZGVzdCByZWdpb25zIHRvIGJlIHRoZSBzYW1lLgoKRnJpIE1hciAgOCAxNjozMjoyMyAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciA8ZG9yc3NlbEBydWxobTEubGVpZGVudW5pdi5ubD4KCgkqIFtjb250cm9scy9FRElULlRPRE9dCglVcGRhdGVkIHNvIGl0IHJlZmxlY3RzIHRoZSBjdXJyZW50IHN0YXR1cy4KCgkqIFtjb250cm9scy9lZGl0LmNdCglJbXBsZW1lbnRlZCBpbnRlcm5hbCBFRElUX1dvcmRCcmVha1Byb2MoKS4KCUltcGxlbWVudGVkIEVTX1JFQURPTkxZLgoJSW1wbGVtZW50ZWQgV01fTEJVVFRPTkRCTENMSyB0byBzZWxlY3Qgd2hvbGUgd29yZHMuCglGaXhlZCBhIGxvdCBvZiB0eXBlcyBpbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMuCgpXZWQgTWFyICA2IDE5OjU1OjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW2RlYnVnZ2VyL2luZm8uY10KCUFkZGVkICJ3YWxrIHdpbmRvdyIgY29tbWFuZCB0byB3YWxrIHdpbmRvdyBsaXN0LiAKCgkqIFt3aW5kb3dzL21kaS5jXQoJQWRkZWQgcHJvcGVyKD8pIFdNX01ESVNFVE1FTlUgbWVzc2FnZSBoYW5kbGluZy4KCldlZCBNYXIgIDYgMDk6Mjc6MTIgMTk5NiAgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY11baWYxNjMyL3JlbGF5MzIuY10KCVJFTEFZMzJfQ2FsbFdpbmRvd1Byb2NDb252U3RydWN0OiBuZXcgZnVuY3Rpb24uCgoJKiBbd2luMzIvc3RydWN0MzIuY11bd2luMzIvTWFrZWZpbGUuaW5dW3dpbjMyL3BhcmFtLmNdW3dpbjMyL3VzZXIzMi5jXQoJc3RydWN0MzIuYzogbmV3IGZpbGUuIE1vdmVkIGFsbCBzdHJ1Y3R1cmUgY29udmVyc2lvbnMgaW50byB0aGF0IGZpbGUKCVBBUkFNMzJfUE9JTlQzMnRvMTYsTVNHMTZ0bzMyLFVTRVIzMl9SRUNUMzJ0bzE2OiAKCXJlbmFtZWQgdG8gU1RSVUNUMzJfUE9JTlQzMnRvMTYsIC4uLgoJV0lOMzJfUE9JTlQsV0lOMzJfTVNHLFdJTjMyX1JFQ1QsV0lOMzJfUEFJTlRTVFJVQ1Q6IHJlbmFtZWQgdG8KCVBPSU5UMzIsIC4uLgoJTmV3IGNvbnZlcnNpb24gZnVuY3Rpb25zIGZvciBOQ0NBTENTSVpFX1BBUkFNUywgV0lORE9XUE9TLAogCUNSRUFURVNUUlVDVC4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF1bbWlzYy9leGVjLmNdCglXSU5IRUxQLCBNVUxUSUtFWUhFTFAsIEhFTFBXSU5JTkZPOiBuZXcgc3RydWN0dXJlcwoJV2luSGVscDogUmVpbXBsZW1lbnRlZC4gVGhhbmtzIHRvIFBldGVyIEJhbGNoCiAJKDEwMDcxMC4yNTY2QGNvbXB1c2VydmUuY29tKSBmb3IgaGlzIHZhbHVhYmxlIHJlc2VhcmNoLgoKCSogW3dpbjMyL3dpbnByb2NzLmNdCglXSU4zMl9DYWxsV2luZG93UHJvY1RvMTY6IG5ldyBmdW5jdGlvbiwgY2FsbCBpbgogCVVTRVIzMl9EZWZXaW5kb3dQcm9jQSwuLi4KCk1vbiBNYXIgIDQgMjM6MjI6NDAgMTk5NiAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglBZGRlZCAiI2RlZmluZSBfX2V4cG9ydCIuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCVB1dCBpbiBhIGZldyBoYWNrcyB0byBtYWtlIGJpdGJsdC1pbmcgd29yayB3aGVuIHVwc2lkZS1kb3duIGFuZC9vcgoJbWlycm9yZWQuICBCSVRCTFRfU3RyZXRjaEltYWdlIHNob3VsZCByZWFsbHkgYmUgY2hlY2tlZCBvdmVyCgl0aG9yb3VnaGx5LgoKCSogW3Byb2dyYW1zL3Byb2dtYW4vbWFpbi5jXQoJQWRkZWQgIiNpbmNsdWRlIDxyZXNvdXJjZS5oPiIgZm9yIGRlZmluaXRpb24gb2YgSEFWRV9XSU5FX0NPTlNUUlVDVE9SLgoKCSogW3JjL3BhcnNlci5oXSBbcmMvcGFyc2VyLmxdIFtyYy9wYXJzZXIueV0gW3JjL3dpbmVyYy5jXQoJRWxpbWluYXRlZCBzaGlmdC9yZWR1Y2UgY29uZmxpY3QgaW4gc3R5bGUgZGVmaW5pdGlvbi4KCUFkZGVkIGNydWRlIGVycm9yIG1lc3NhZ2Ugc3VwcG9ydDogInN0ZGluOiVkOiBwYXJzZSBlcnJvciBiZWZvcmUgJyVzJyIuCglJbXBsZW1lbnRlZCBzdHJpbmcgdGFibGUgc3VwcG9ydCB0byB0aGUgYmVzdCBvZiBteSBhYmlsaXR5IChpdCB3b3JrcwoJd2l0aCBMb2FkU3RyaW5nKCkgY2FsbHMpLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglGaXhlZCBidWcgaW4gTkNfRG9TaXplTW92ZSgpIHRoYXQgbWFkZSBzeXN0ZW0gbWVudSBwb3AgdXAgd2hlbiB0aXRsZQoJYmFyIG9mIG5vbi1pY29uaXplZCB3aW5kb3cgd2FzIGNsaWNrZWQgKGNoZWNrZWQgZm9yIGljb25pemF0aW9uKS4KCk1vbiBNYXIgMDQgMjA6NTU6MTkgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbaWYxNjMyL2x6ZXhwYW5kLnNwZWNdIFtpZjE2MzIvcmVsYXkuY10KCSAgW2luY2x1ZGUvbHpleHBhbmQuaF1bbWlzYy9semV4cGFuZC5jXQoJTFpFWFBBTkQuRExMIGFkZGVkLgoKU3VuIE1hciAwMyAxODoxMDoyMiAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW3dpbmRvd3Mvd2luLmNdCglQcmV2ZW50IHVzYWdlIG9mIGludmFsaWQgSFdORHMgaW4gV0lOX0VudW1DaGlsZFdpbigpLAoJdGhpcyBwcmV2ZW50cyB0b28gZWFybHkgdGVybWluYXRpb24gb2YgRW51bUNoaWxkV2luZG93cygpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgTWFyICAyIDE4OjE5OjA2IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJRml4ZWQgU0NST0xMX1RIVU1CIHBhaW50aW5nIGZpeGVzIGZyb20gQWxleCBLb3JvYmthIHRvIHN0b3JlIHRoZQogCWN1cnJlbnQgdHJhY2tpbmcgd2luZG93LgoKCSogW2ZpbGVzL2ZpbGUuY10KCUZpeGVkIHR3byBmaWxlIGRlc2NyaXB0b3IgbGVha3MgaW4gRklMRV9PcGVuRmlsZSgpLgoKCSogW2lmMTYzMi9yZWxheTMyLmNdIFtsb2FkZXIvbW9kdWxlLmNdIFtsb2FkZXIvcGVfaW1hZ2UuY10KCSAgW3Rvb2xzL2J1aWxkLmNdCglSZXBsYWNlZCBMT0FERURGSUxFSU5GTyBzdHJ1Y3R1cmUgYnkgT0ZTVFJVQ1QuCgoJKiBbbWVtb3J5L2F0b20uY10KCVJlbG9hZCB0aGUgcG9pbnRlciB0byB0aGUgYXRvbSB0YWJsZSBpbiBBVE9NX0dldFRhYmxlKCkgYW5kCiAJQVRPTV9BZGRBdG9tKCkgaW4gY2FzZSB0aGUgTE9DQUxfQWxsb2MoKSBjYWxscyBjYXVzZWQgdGhlIHRhYmxlIHRvCiAJbW92ZSBpbiBsaW5lYXIgbWVtb3J5LgoKRnJpIE1hciAgMSAxMTo1NzoxMyAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciA8ZG9yc3NlbEBydWxobTEubGVpZGVudW5pdi5ubD4KCgkqIFtpbmNsdWRlL2NhbGxiYWNrLmhdCglBZGRlZCBzdXBwb3J0IGZvciBDYWxsV29yZEJyZWFrUHJvYygpLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCU5ldyBjYXJldCBoYW5kbGluZyAocmVhbGx5IGVmZmljaWVudCAvIGZhc3QpLgoJSW1wbGVtZW50ZWQgRU1fU0VUV09SREJSRUFLUFJPQyBhbmQgRU1fR0VUV09SREJSRUFLUFJPQy4KCUZpeGVkIEVNX1NFVEZPTlQgc28gaXQgbm93IGFsc28gY3JlYXRlcyBhIHByb3BlciBuZXcgY2FyZXQuCgpXZWQgRmViIDI4IDIyOjAzOjM0IDE5OTYgIERhbmllbCBTY2hlcGxlciAgPGRhbmllbEBmcm9ibml0ei53dXN0bC5lZHU+CgoJKiBbY29udHJvbHMvZGVza3RvcC5jXSBbbWlzYy9tYWluLmNdIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL3dpbi5jXQoJQWRkZWQgV01fREVMRVRFIHByb3RvY29sIHRvIHRvcC1sZXZlbCB3aW5kb3dzLgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJRml4ZWQgYSBwcm9ibGVtIHdoaWNoIGNhdXNlZCBzbG93IHNjcm9sbGluZyB0byBjb250aW51ZQl1bmNvbnRyb2xsYWJseS4KCgkqIFttaXNjL2V4ZWMuY10KCUltcGxlbWVudGVkIEV4aXRXaW5kb3dzKCkuCgoJKiBbd2luZG93cy93aW4uY10KCVNldCB0b3AtbGV2ZWwgb3duZWQgd2luZG93cyB0byBiZSB0cmFuc2llbnQuCgpXZWQgRmViIDI4IDE5OjEzOjIyIDE5OTYgIFVscmljaCBTY2htaWQgIDx1c2NobWlkQG1haWwuaGgucHJvdmkuZGU+CgoJKiBbcHJvZ3JhbXMvcHJvZ21hbi8qXQoJQWRkZWQgYSBwcm9ncmFtIG1hbmFnZXIuCgpXZWQgRmViIDI4IDE4OjM4OjAxIDE5OTYgIER1bmNhbiBDIFRob21zb24gPGR1bmNhbkBzcGQuZWVlLnN0cmF0aC5hYy51az4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX0VvLmNdCglBZGRlZCBzdXBwb3J0IGZvciBFc3BlcmFudG8gW0VvXSBsYW5ndWFnZS4KCldlZCBGZWIgMjggMDA6MjM6MDAgMTk5NiAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBwcmRzLWdybi5kZW1vbi5jby51az4KCgkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdCglBZGRlZCBFbmREaWFsb2csIEdldERsZ0l0ZW0sIEdldERsZ0l0ZW1JbnQsIFNldERsZ0l0ZW1JbnQsCgoJKiBbd2luMzIvaW5pdC5jXQoJQWRkZWQgdGFzay5oIHRvIGluY2x1ZGVzLiBHZXRNb2R1bGVIYW5kbGVBKCkgLSByZXR1cm4gaEluc3RhbmNlCglpZiBjYWxsZWQgd2l0aCBOVUxMIHBhcmFtZXRlci4gRnJlZWNlbGwgbmVlZHMgdGhpcy4gTk9URSB0aGlzCgltYXkgaW5kaWNhdGUgYSBwcm9ibGVtIHdpdGggZGlmZmVyZW50aWF0aW9uIGJldHdlZW4gaE1vZHVsZSBhbmQKCWhJbnN0YW5jZSB3aXRoaW4gV2luZS4KCgkqIFt3aW4zMi9yZXNvdXJjZS5jXQoJRmluZFJlc291cmNlMzIoKSBhbmQgTG9hZFJlc291cmNlMzIoKSAtIFJlbW92ZWQgI2lmIDAncyBhcm91bmQKCWNvbnZlcnNpb24gZnJvbSBoSW5zdGFuY2UgdG8gaE1vZHVsZS4gU2VlIHJlbWFya3MgYWJvdmUuCgoJKiBbd2luMzIvc3RyaW5nMzIuY10KCVdJTjMyX1VuaUxlbigpIC0gcmVtb3ZlZCBzdHJheSBzZW1pY29sb24uCgpUdWUgRmViIDI3IDIxOjA1OjE4IDE5OTYgIEppbSBQZXRlcnNvbiA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+CgkKCSogW3dpbmRvd3MvY2FyZXQuY10KCVNldCBibGluayByYXRlIHdpdGggY2FsbCB0byBHZXRQcm9maWxlSW50KCkuCgoJKiBbcmMvd2luZXJjLmNdCglJbiBuZXdfc3R5bGUoKSwgbWFkZSBpbml0aWFsIGZsYWcgc2V0dGluZ3MgV1NfQ0hJTEQgfCBXU19WSVNJQkxFCiAJaW5zdGVhZCBvZiAwLiAgVGhpcyBzZWVtcyB0byBjb3JyZXNwb25kIHRvIEJvcmxhbmQncyBkZWZhdWx0cywgYW5kCiAJdGhlIGZsYWdzIGNhbiBiZSB1bnNldCBieSB1c2luZyB0aGUgKHJhdGhlciBvYnR1c2UpICJ8IE5PVCBXU19DSElMRCIKCW9yICJ8IE5PVCBXU19WSVNJQkxFIiB0ZWNobmlxdWUgaW4gdGhlICoucmMgZmlsZS4KCgkqIFt3aW4zMi90aW1lLmNdCglJbiBHZXRMb2NhbFRpbWUoKSBhbmQgR2V0U3lzdGVtVGltZSgpLCB1c2VkIHR2X3NlYyBmaWVsZCBvZiByZXN1bHQKIAlyZXR1cm5lZCBieSBnZXR0aW1lb2ZkYXkoKSBpbnN0ZWFkIG9mIG1ha2luZyBzZWNvbmQgY2FsbCB0bwogCXRpbWUoKS4gIFRoaXMgZWxpbWluYXRlcyBjbG9jayBqaXR0ZXIgaWYgdGhlIHNlY29uZHMgY2hhbmdlCiAJYmV0d2VlbiB0aGUgdHdvIGNhbGxzIChyYXJlLCBidXQgcG9zc2libGUpLgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KCUFkZGVkICIjZGVmaW5lIF9mYXIiIGFuZCAiI2RlZmluZSBfcGFzY2FsIi4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQWRkZWQgZnVuY3Rpb24gR2V0RGVza3RvcEh3bmQoKS4KCgkqIFtpbmNsdWRlL3htYWxsb2MuaF0KCVJlbW92ZWQgdGhlICcjaWZkZWYgSEFWRV9TVERMSUJfSCcgc3RydWN0dXJlLCBzaW5jZSBpdCBzZWVtZWQgdG8KIAloYXZlIGJlZW4gcmVtb3ZlZCBmcm9tICdjb25maWd1cmUnLCBhbmQgd2FzIGNhdXNpbmcgcmVkZWZpbml0aW9uCiAJd2FybmluZ3MuCgpUdWUgRmViIDI3IDE5OjMxOjExIDE5OTYgIEFsYnJlY2h0IEtsZWluZSA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXSAKCUFkZGVkIFJEV19BTExDSElMRFJFTiBmbGFnIGluIFNldFdpbmRvd1BvcyAoaGFuZGxpbmcgU1dQX0ZSQU1FQ0hBTkdFRCkKCXRvIGZvcmNlIGEgcmVwYWludCB3aGVuIHNldHRpbmcgbWVudSBiYXJzIHdpdGggZGlmZmVyZW50IHJvd3MuCgpTdW4gRmViIDI1IDIxOjE1OjAwIDE5OTYgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9zeXNjb2xvcnMuY10gW2NvbnRyb2xzL3Njcm9sbC5jXQoJRml4ZWQgRHJhd0ZvY3VzUmVjdCBwZW4gYW5kIFNDUk9MTF9USFVNQiBwYWludGluZy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IEZlYiAyNCAxNjoxNzowNSAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtmaWxlcy9wcm9maWxlLmNdCglBZGRlZCBcciB3aGVuIHdyaXRpbmcgcHJvZmlsZSBmaWxlcywgZm9yIERPUyBjb21wYXRpYmlsaXR5LgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUZpeGVkIGJ1ZyBpbiBHbG9iYWxSZUFsbG9jKCkgdGhhdCBjYXVzZWQgYSBkaXNjYXJkZWQgYmxvY2sgbm90IHRvCiAJYmUgcmVhbGxvY2F0ZWQgaWYgaXRzIHNpemUgd2FzIG5vdCBjaGFuZ2VkLgoKCSogW21lbW9yeS9zZWxlY3Rvci5jXQoJQXZvaWQgc2V0dGluZyBhIHZhbGlkIExEVCBlbnRyeSB3aXRoIGJhc2UgYW5kIGxpbWl0IHNldCB0byAwLCBhcwogCXRoaXMgY2F1c2VzIHRoZSBrZXJuZWwgdG8gY2xlYXIgdGhlIGVudHJ5LiBUaGlzIGZpeGVzIGEgY3Jhc2ggd2hlbgogCWV4aXRpbmcgV2luZG93cyBwcm9ncmFtIG1hbmFnZXIuCgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJUmVtb3ZlZCBjYWxsIHRvIGNyZWF0KCkgaW5zdGVhZCBvZiBfbGNyZWF0KCkgZm9yIFdJTkVMSUIuCgpGcmkgRmViIDIzIDAwOjM1OjU0IDE5OTYgIFRob21hcyBTYW5kZm9yZCA8dGRnc2FuZGZAcHJkcy1ncm4uZGVtb24uY28udWs+CgoJKiBbaWYxNjMyL2dkaTMyLnNwZWNdCglHZXRUZXh0RXh0ZW50UG9pbnRBIG5vdyBoYXMgd2luMzIgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uCgoJKiBbaW5jbHVkZS9zdHJ1Y3QzMi5oXQoJRGVmaW5lIG5ldyBzdHJ1Y3R1cmUgdGFnU0laRTMyIGFuZCB0eXBlZGVmIFNJWkUzMiB0byBpdC4KCURlZmluZSBwcm90b3R5cGUgZm9yIGZ1bmN0aW9uIFBBUkFNMzJfU0laRTE2dG8zMgoKCSogW3dpbjMyL3BhcmFtMzIuY10KCU5ldyBmdW5jdGlvbnMgUEFSQU0zMl9TSVpFMTZ0bzMyIGFuZCBXSU4zMl9HZXRUZXh0RXh0ZW50UG9pbnRBCgoJKiBbd2luMzIvbWVtb3J5LmNdCglBZGRlZCBtaXNzaW5nIGZpbGUgcG9pbnRlciBwYXJhbWV0ZXIgdG8gZnByaW50Zi4KClRodSBGZWIgMjIgMDE6MTQ6MjEgMTk5NiAgRXJpYyBXYXJua2UgPGV3MjE5M0Bjc2MuYWxiYW55LmVkdT4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQWRkZWQgbW9yZSBmYW1pbGlhciBpY29uIGFjdGl2aXR5LCBpZSBzaW5nbGUgY2xpY2sgYnJpbmdzIHVwCiAJc3lzdGVtIG1lbnUuCgpXZWQgRmViIDIxIDEzOjA3OjA0IDE5OTYgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyIDxkb3Jzc2VsQHJ1bGhtMS5sZWlkZW51bml2Lm5sPgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUFkZGVkIGNhbGxzIHRvIEhpZGVDYXJldCgpIGFuZCBTaG93Q2FyZXQoKSBmcm9tIHdpdGhpbgogCVRyYWNrUG9wdXBNZW51KCksIE1FTlVfVHJhY2tNb3VzZU1lbnVCYXIoKSBhbmQKIAlNRU5VX1RyYWNrS2JkTWVudUJhcigpLiAgQXJlIHRoZXJlIGFueSBtb3JlIHBsYWNlcyB3aGVyZSB0aGlzCiAJc2hvdWxkIGJlIGRvbmU/CgoJKiBbY29udHJvbHMvc3RhdGljLmNdCglGaXhlZCBhIEZJWE1FIGluIFNUQVRJQ19TZXRJY29uKCksIHdoaWNoIG5vdyByZXR1cm5zIGEgaGFuZGxlIHRvCiAJdGhlIHByZXZpb3VzIGljb24uICBBZGRlZCBhIG5ldyBGSVhNRSBhdCB0aGUgcG9pbnQgd2hlcmUKIAlXTV9TRVRURVhUIGlzIGhhbmRsZWQgZm9yIGEgU1NfSUNPTiBzdGF0aWMgY29udHJvbC4KCgkqIFttaXNjL2NvbW1kbGcuY10KCUltcGxlbWVudGVkIEZpbmRUZXh0KCkgYW5kIFJlcGxhY2VUZXh0KCkKCVN0aWxsIG1pc3NpbmcgOiBUZW1wbGF0ZXMgYW5kIEhvb2tzIGhhbmRsaW5nIC8gZXJyb3IgY2hlY2tpbmcKCgkqIFtyZXNvdXJjZXMvc3lzcmVzX0VuLmNdCglSZWRlc2lnbmVkIEZJTkRfVEVYVCBhbmQgUkVQTEFDRV9URVhUIGRpYWxvZ3MsIHNvIHRoZXkgbm93IHdvcmsuCglMYW5ndWFnZXMgb3RoZXIgdGhhbiBFbiBzaG91bGQgdXBkYXRlIHRoZXNlIHRvbywgdGhvdWdoLCBhcyB3ZWxsCiAJYXMgcmVkaW1lbnNpb24gdGhlIGNvbnRyb2xzIGJlY2F1c2Ugc29tZSBvZiB0aGUgdGV4dCBkb2Vzbid0IGZpdC4KICAJQ3JlYXRlZCBmaWxlIHJlc291cmNlcy9UT0RPIHRvIGV4cGxhaW4gdGhpcy4KCgkqIFt3aW5kb3dzL2NhcmV0LmNdCglSZS13cml0dGVuLiAgSXQgbm93IHVzZXMgdGhlIGNvcnJlY3QgUjJfWE9SUEVOLiAgSXQgcmVzZXRzIHRoZQogCWJsaW5rIHRpbWVyIG9uIFNldENhcmV0UG9zKCkuICBJdCBkb2VzIGl0cyBvd24gaGlkZS9zaG93IHNjaGVtZQogCXdoZW4gU2V0Q2FyZXRQb3MoKSBpcyBjYWxsZWQgKHNob3VsZCBiZSBmYXN0ZXIpLgoKTW9uIEZlYiAxOSAyMTo1MDowMCAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglNaXNjZWxsYW5lb3VzIGNoYW5nZXMgZm9yIGJldHRlciBMQlNfRVhURU5ERURTRUwgc3VwcG9ydC4KCVJlbW92ZWQgc2V2ZXJhbCBzdXBlcmZsdW91cyByZWRyYXdhbHMgb2YgaXRlbSBsaXN0LgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJV01fR0VURExHQ09ERSByZXR1cm4gdmFsdWUuCgoJKiBbd2luZG93cy93aW4uY10KCUZsYXNoV2luZG93IGZ1bmN0aW9uLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10gW3dpbmRvd3Mvc2Nyb2xsLmNdCglBZGRlZCBIaWRlQ2FyZXQvU2hvd0NhcmV0IGNhbGxzLgoKCSogW29iamVjdHMvZm9udC5jXQoJQWRkZWQgR2V0Q2hhckFCQ1dpZHRocyBzdHViLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJIiNkZWZpbmUicyBuZWVkZWQgZm9yIGNoYW5nZXMgbWVudGlvbmVkIGFib3ZlLgoKTW9uIEZlYiAxOSAyMDoxMjowMyAxOTk2ICBIYW5zIGRlIEdyYWFmZiAgPEhhbnMuZGVHcmFhZmZAdHdpNzIudHdpLnR1ZGVsZnQubmw+CgoJKiBbaW5jbHVkZS93aW5zb2NrLmhdCglDaGFuZ2Ugb3JkZXIgb2YgaW5jbHVkZXMgdG8gZ2V0IGluX2FkZHIgc3RydWN0IGRlZmluZWQgaW4gdGltZS4KCShOb3RlOiBMaW51eCAxLjMuNjYsIGxpYmMgNS4yLjE4KQoKCSogW21pc2MvbWFpbi5jXSBbaW5jbHVkZS9vcHRpb25zLmhdIFttaXNjZW11L2ludDJmLmNdCglDaGFuZ2VkIHRoZSAtZW5oYW5jZWQgb3B0aW9uIGludG8gYSAtbW9kZSBvcHRpb24sIHdoaWNoIGNhbiBiZQoJZWl0aGVyICdzdGFuZGFyZCcgb3IgJ2VuaGFuY2VkJy4gJ2VuaGFuY2VkJyBpcyB0aGUgZGVmYXVsdC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEZlYiAxOCAxNjozNTo1NCAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb250cm9scy9kZXNrdG9wLmNdCglMb29rIGZvciB0aGUgd2FsbHBhcGVyIGZpbGUgaW4gdGhlIFdpbmRvd3MgZGlyZWN0b3J5LgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUZpeGVkIHN3YXBwZWQgcGFyYW1ldGVycyBpbiBTZXRNZW51SXRlbUJpdG1hcHMoKS4KCUNyZWF0ZSBhIHNlcGFyYXRvciBpbiBNRU5VX1NldEl0ZW1EYXRhKCkgd2hlbiB0aGUgc3RyaW5nIGlzIE5VTEwuCgoJKiBbZmlsZS9kb3Nmcy5jXQoJRE9TRlNfRmluZE5leHQ6IGRvbid0IHJldHVybiAnLicgYW5kICcuLicgaW4gYSBkcml2ZSByb290IGRpci4KCgkqIFtmaWxlcy9maWxlLmNdCglBZGRlZCBhIERPU19GSUxFIHN0cnVjdHVyZSB0byBzdG9yZSBwZXItZmlsZSBpbmZvcm1hdGlvbiAobm90CglyZWFsbHkgdXNlZCB5ZXQpLgoJRml4ZWQgX2xyZWFkIGFuZCBfaHJlYWQgdG8gY2hlY2sgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBiZWZvcmUKCWNhbGxpbmcgVW5peCByZWFkKCkgdG8gYXZvaWQgRUZBVUxUIGVycm9yLgoKCSogW21pc2MvZXhlYy5jXQoJUmV0dXJuIFRSVUUgaW4gV2luSGVscCgpIGZvciBIRUxQX1FVSVQgdG8gcXVpZXQgTm90ZXBhZCBvbiBleGl0LgoKCSogW21pc2NlbXUvaW5zdHIuY10KCUNhbGwgRE9TTUVNX0FsYXJtKCkgaW4gSU5TVFJfUmVwbGFjZVNlbGVjdG9yKCkuIFRoaXMgc2hvdWxkIGZpeAogCXByb2dyYW1zIHRoYXQgcG9sbCB0aGUgQklPUyBjb3VudGVyLCBwcm92aWRlZCB0aGV5IHJlbG9hZCB0aGUKIAlzZWxlY3RvciBvbiBldmVyeSByZWFkLgoKCSogW21pc2NlbXUvaW50MjEuY10KCVJlLWltcGxlbWVudGVkIEZpbmRGaXJzdC9GaW5kTmV4dCBmb3IgRkNCIGNhbGxzLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy93aW5wb3MuY10KCU1lcmdlZCBNU0dfR2V0V2luZG93Rm9yRXZlbnQoKSBhbmQgV0lOUE9TX1dpbmRvd0Zyb21Qb2ludCgpLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFt3aW5kb3dzL3dpbi5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBhIHBlci13aW5kb3cgV0lOX01BTkFHRUQgZmxhZzsgb25seSB3aW5kb3dzIHRoYXQgaGF2ZSBhCglkaWFsb2cgZnJhbWUgb3IgYSBzaXppbmcgYm9yZGVyIGFyZSBtYW5hZ2VkLgoKU2F0IEZlYiAxNyAxODoyNTowMCAxOTk2ICBUaG9tYXMgU2FuZGZvcmQgPHRkZ3NhbmRmQHByZHMtZ3JuLmRlbW9uLmNvLnVrPgoKCSogW2lmMTYzMi9NYWtlZmlsZS5pbl0KCUFkZGVkIC1nIGZsYWcgdG8gY29tcGlsYXRpb24gb2YgLmMgZmlsZXMgZ2VuZXJhdGVkIGZyb20gKjMyLnNwZWMuCgoJKiBbaWYxNjMyL2dkaTMyLnNwZWNdCglOdW1lcm91cyBhZGRpdGlvbmFsIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZC4KCgkqIGlmMTYzMi91c2VyMzIuc3BlY10KCXdzcHJpbnRmQSBtYXBzIHRvIHZzcHJpbnRmIG5vdCB3c3ByaW50ZgoJTnVtZXJvdXMgYWRkaXRpb25hbCBmdW5jdGlvbnMgaW1wbGVtZW50ZWQuCgoJKiBbaW5jbHVkZS9nZGkuaF0gW29iamVjdHMvZ2Rpb2JqLmNdCglOZXcgI2RlZmluZSBNQUdJQ19ET05UQ0FSRSBhZGRlZC4gVGhpcyBpcyB1c2VkIGluCglHRElfR2V0T2JqUHRyIHRvIGVuYWJsZSBnZXR0aW5nIGEgcG9pbnRlciB0byBhIEdESSBvYmplY3Qgb2YKCXVua25vdyB0eXBlLgoKCSogW3dpbjMyL2dkaTMyLmNdCglOZXcgZmlsZS4KCgkqIFt3aW4zMi9wYXJhbTMyLmNdCglXSU4zMl9Nb3ZlVG9FeCgpIC0gaGFuZGxlIE5VTEwgcG9pbnRlciBhcmd1bWVudC4KCgkqIFt3aW4zMi91c2VyMzIuY10KCVVTRVIzMl9JbnZhbGlkYXRlUmVjdCAtIGhhbmRsZSBwYXNzaW5nIG9mIGEgTlVMTCBwb2ludGVyLgoJVVNFUjMyX1NldFRpbWVyIC0gTmV3IGZ1bmN0aW9uLgoKCSogW2ZpbGVzL2RpcmVjdG9yeS5jXQoJRml4ZWQgRElSX0luaXQoKSAob2ZmIGJ5IG9uZSBpbiBhbGxvY2F0aW9uIG9mIHNwYWNlIGZvcgoJZW52aXJvbm1lbnQgdmFyaWFibGVzKS4KCgkqIFtmaWxlcy9kcml2ZS5jXQoJQWRkZWQgPHN5cy90eXBlcy5oPiB0byAjaW5jbHVkZXMgKHByZXJlcXVpc2l0ZSBmb3IgPHN5cy9zdGF0Lmg+CglvbiBGcmVlQlNEKS4KCkZyaSBGZWIgMTYgMTA6MjY6NTYgMTk5NiAgQW5kcmVhcyBLaXJzY2hiYXVtIDxhbmtAcmJnLmluZm9ybWF0aWsudGgtZGFybXN0YWR0LmRlPgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU1lbW9yeSBsZWFrIHBsdWdnZWQuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRXJhc2Ugc3BhY2Ugd2l0aCBmdW5jdGlvbiBFeHRUZXh0T3V0KCkuIFRoaXMgZWxpbWluYXRlcyB0aGUgdXNlIG9mCiAJeG1hbGxvYygpLiAgTWVtb3J5IGxlYWsgaW4gRURJVF9Xcml0ZVRleHQgcGx1Z2dlZC4KCgkqIFtkZWJ1Z2dlci9kYl9kaXNhc20uY10KCU9wZXJhbmQgZm9yIHNjYXMgbm93IGlzIGRpLgoKCSogW2ZpbGVzL3Byb2ZpbGUuY10KCVBST0ZJTEVfR2V0U2VjdGlvbiB3YXMgY29weWluZyB0b28gbXVjaCBkYXRhLgoJUFJPRklMRV9HZXRTZWN0aW9uIG5vdyByZXR1cm5zIHRoZSBjb3JyZWN0IHZhbHVlLiBJdCB3YXMgcmV0dXJuaW5nCiAJdGhlIG51bWJlciBvZiB1bnVzZWQgaW5zdGVhZCBvZiB1c2VkIGJ5dGVzLgoKCSogW29iamVjdHMvZGMuY10KCUNvcnJlY3RlZCB0d28gdHlwb3MgaW4gY29tbWVudHMuCgoJKiBbb2JqZWN0cy9mb250LmNdCglGT05UX01hdGNoRm9udCBkaWRuJ3QgcmV0dXJuIGlmIGl0IGNvdWxkbid0IGZpbmQgYW55IGZvbnQuCgoJKiBbb2JqZWN0cy9vZW1iaXRtYXAuY10KCUZyZWUgb2JqZWN0IG9ubHkgaWYgaXQgaGFzIGJlZW4gYWxsb2NhdGVkLgoKCSogW3dpbmRvd3Mvc2Nyb2xsLmNdCglNZW1vcnkgbGVhayBpbiBTY3JvbGxEQyBwbHVnZ2VkLgoKVHVlIEZlYiAxMyAxMToxNzowMCAxOTk2IFdpbGxpYW0gTWFncm8gIDx3bWFncm9AdGMuY29ybmVsbC5lZHU+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJSW1wbGVtZW50ZWQgRVNfTk9ISURFU0VMIHN0eWxlLCBzaGlmdCtjbGljayBzZWxlY3Rpb24sCiAJc2hpZnQre2Fycm93LGhvbWUsZW5kLHBndXAscGdkbn0gc2VsZWN0aW9uLiAgT3B0aW1pemVkCgkoZGUpc2VsZWN0aW9uIGRyYXdpbmcuICBDaGFuZ2VkIHNlbGVjdGlvbiBkcmF3aW5nIHRvIHVzZSBjb3JyZWN0CiAJc3lzdGVtIGNvbG9ycyBpbnN0ZWFkIG9mIGludmVydGluZy4gIEZpeGVkIGRlbGV0aW5nIG9yIGJhY2tzcGFjaW5nCiAJYWNyb3NzIGEgJ1xyXG4nIGVuZCBvZiBsaW5lIHBhaXIuICBTZWxlY3Rpb24gbm93IGFuY2hvcnMKIAljb3JyZWN0bHkuIEZpeGVkIHRleHQgbGVha2luZyBhbmQgZXh0cmEgZ2FyYmFnZSBwcm9ibGVtIGJ1ZwogCXVuY292ZXJlZCBieSBjaGFuZ2UgaW4gY2xhc3Mgc3R5bGUgaW4gd2luZTk2MDEzMS4KCgkqIFtjb250cm9scy93aWRnZXRzLmNdCglDbGFzcyBmbGFncyBub3cgbWF0Y2ggdGhvc2Ugb2YgV2luZG93cy4KCk1vbiBGZWIgMTIgMjE6Mjg6MTkgMTk5NiAgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtjb250cm9scy93aWRnZXRzLmNdCglXSURHRVRTX0luaXQ6IFJFTEFZMzJfR2V0RW50cnlQb2ludCBkb2VzIG5vdCB0YWtlIGEgc3RyaW5nIGFueW1vcmUuCgoJKiBbaWYxNjMyL01ha2VmaWxlLmluXVtpZjE2MzIvcmVsYXkzMi5jXVtpbmNsdWRlL3JlbGF5MzIuaF0KCWNvbWN0bDMyLnNwZWMgb2xlMzIuc3BlYyB3aW5zcG9vbC5zcGVjOiBuZXcgZmlsZXMuCglSRUxBWTMyX0luaXQ6IGNhbGwgaW5pdGlhbGl6YXRpb24gb2YgbmV3IERMTHMuCglSRUxBWTMyX0dldEVudHJ5UG9pbnQ6IGV4cGVjdHMgV0lOMzJfYnVpbHRpbiogbm93LgoJUkVMQVkzMl9NYWtlRmFrZU1vZHVsZTogbmV3IGZ1bmN0aW9uLgoKCSogW2lmMTYzMi9nZGkzMi5zcGVjXVtpZjE2MzIva2VybmVsMzIuc3BlY11baWYxNjMyL3VzZXIzMi5zcGVjXQoJQWRkZWQgV2luOTUgZnVuY3Rpb25zLiBPcmRpbmFscyBub3cgZGlmZmVyIGZyb20gYm90aCBOVCBhbmQgV2luOTUKCUhlYXBDcmVhdGUsIENyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW1BLCBDcmVhdGVEaWFsb2dJbmRpcmVjdFBhcmFtVywKCUNyZWF0ZURpYWxvZ1BhcmFtQSwgQ3JlYXRlRGlhbG9nUGFyYW1XLCBEaWFsb2dCb3hJbmRpcmVjdFBhcmFtQQoJRGlhbG9nQm94SW5kaXJlY3RQYXJhbVcsIERpYWxvZ0JveFBhcmFtQSwgRGlhbG9nQm94UGFyYW1XOgoJbmV3IHJlbGF5cy4KCgkqIFtpZjE2MzIvc2hlbGwzMi5zcGVjXQoJc2hlbGwzMi5zcGVjOiByZW51bWJlcmVkIGFsbCBmdW5jdGlvbnMgdG8gdGFrZSBpbnRvIGFjY291bnQgb3JkaW5hbHMuCglUaGVzZSBzZWVtIHRvIGJlIGlkZW50aWNhbCBiZXR3ZWVuIE5UIGFuZCBXaW45NS4KCgkqIFtpbmNsdWRlL2RpYWxvZy5oXVt3aW5kb3dzL2RpYWxvZy5jXQoJeEJhc2VVbml0LHlCYXNlVW5pdCxESUFMT0dfRG9EaWFsb2dCb3g6IG1hZGUgbm9uLXN0YXRpYy4KCgkqIFtpbmNsdWRlL2hhbmRsZTMyLmhdCglOZXcgaGFuZGxlIHR5cGVzIFZSQU5HRSwgSEVBUCwgSEVBUElURU0uCgoJKiBbaW5jbHVkZS9wZV9pbWFnZS5oXVtsb2FkZXIvcGVfaW1hZ2UuY10KCXN0cnVjdCB3X2ZpbGVzOiBuZXcgZmllbGQgYnVpbHRpbi4KCVBFX0ZpbmRFeHBvcnRlZEZ1bmN0aW9uOiBzdXBwb3J0IG9yZGluYWxzLgoJUEVfR2V0UHJvY0FkZHJlc3M6IGNhbGwgUkVMQVkzMl9HZXRFbnRyeVBvaW50IGZvciBidWlsdGlucy4KCWZpeHVwX2ltcG9ydHM6IHN1cHBvcnQgb3JkaW5hbHMuCglQRV9Mb2FkSW1hZ2U6IHByZWZlciBkaXJlY3RvcmllcyBvdmVyIHNlZ21lbnRzLgoKCSogW2luY2x1ZGUvcmVzb3VyY2UuaF1bd2luMzIvcmVzb3VyY2UuY10KCUZpbmRSZXNvdXJjZTMyOiBjaGFuZ2VkIHBhcmFtZXRlciBmcm9tIExQQ1RTVFIgdG8gTFBDV1NUUgoJCWNoZWNrIExBTkdfTkVVVFJBTCBpZiBMQU5HX0VOR0xJU0ggZmFpbHMuCglMb2FkQWNjZWxlcmF0b3JzVyxTaXplb2ZSZXNvdXJjZTMyLEFjY2Vzc1Jlc291cmNlMzI6IAoJCWRpc2FibGVkIGJlY2F1c2UgaXQncyBicm9rZW4uCglDYXN0ZWQgdG8gYW5kIGZyb20gTFBXU1RSIGF0IHZhcmlvdXMgcGxhY2VzLgoKCSogW2luY2x1ZGUvc3RyaW5nMzIuaF1bd2luMzIvc3RyaW5nMzIuY10KCUNoYW5nZWQgcHJvdG90eXBlcyB0byB0YWtlIGNvbnN0IGFyZ3VtZW50cyB3aGVyZSBhcHByb3ByaWF0ZS4KCgkqIFtpbmNsdWRlL3N0cnVjdDMyLmhdCglOZXcgc3RydWN0dXJlcyBETEdURU1QTEFURTMyLCBETEdJVEVNVEVNUExBVEUzMi4KCgkqIFt0b29scy9idWlsZC5jXQoJQnVpbGRTcGVjMzJGaWxlczogZ2VuZXJhdGUgQmFzZSB2YWx1ZSBpbnRvIGNvZGUsIGdlbmVyYXRlIGNhbGwgdG8KCVJFTEFZMzJfTWFrZUZha2VNb2R1bGUuCgkKCSogW3dpbjMyL2hlYXAuY10KCVRoaXMgaXMgc3RpbGwgbm90IGZpbmlzaGVkIGFuZCBuZWVkcyByZXdvcmsuCglIZWFwQWxsb2M6IHJlbmFtZWQgdG8gU0lNUExFX0hlYXBBbGxvYywgaW1wbGVtZW50ZWQgSGVhcEFsbG9jLgoJSGVhcENyZWF0ZTogaW1wbGVtZW50ZWQgb24gdG9wIG9mIFZpcnR1YWxBbGxvYywgd2hpY2ggZG9lcyBub3Qgd29yayB5ZXQKCUhlYXBEZXN0cm95LCBIRUFQX0dyb3dIZWFwLCBIZWFwRnJlZTogbmV3IGZ1bmN0aW9ucy4KCgkqIFt3aW4zMi9tZW1vcnkuY10KCVN1cHBvcnQgZm9yIFZSQU5HRV9PQkpFQ1QuIFRoaXMgaXMgbm90IHlldCBjYWxsZWQgZnJvbSBhbnkgcGxhY2UsCglhbmQgbmVlZHMgbW9yZSBwbGF0Zm9ybSBzcGVjaWZpYyBzdXBwb3J0CglNRU1PUllfRmluZFZyYW5nZSwgTUVNT1JZX0lzVnJhbmdlRnJlZSwgTUVNT1JZX0luc2VydFZyYW5nZSwKCU1FTU9SWV9BbGxvY1ZyYW5nZSwgTUVNT1JZX1JlbGVhc2VWcmFuZ2U6IG5ldyBmdW5jdGlvbnMuCgoJKiBbd2luMzIvdXNlcjMyLmNdCglXSU4zMl9DcmVhdGVXaW5kb3dFeEE6IGRvbid0IEdsb2JhbEFsbG9jIGZvciBpbnRlZ2VyIGNsYXNzIGFuZCB3aW5kb3cKCW5hbWVzLCBhcyBpbiBkaWFsb2dzLgoJSW1wbGVtZW50ZWQgZGlhbG9nIGZ1bmN0aW9ucyAoc2VlIHVzZXIzMi5zcGVjKS4KCgkqIFt3aW5kb3dzL2NhcmV0LmNdCglDQVJFVF9Jbml0aWFsaXplOiBjYWxsIFJFTEFZMzJfR2V0QnVpbHRpbkRMTC4KCk1vbiBGZWIgMTIgMTg6NTI6NDAgMTk5NiAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KCgkqIFtjb250cm9scy9lZGl0LmNdCglSZW1vdmVkIGNvbW1lbnRlZCBvdXQgI2lmZGVmcyBmb3IgV0lORUxJQi4KCgkqIFt0b29scy9tYWtlaHRtbC5wbF0KCVB1dCBpbiBlcnJvciBjaGVja2luZyB3aGVuIHRyeWluZyB0byBvcGVuIGEgZmlsZS4KCgkqIFtsaWJ0ZXN0L01ha2VmaWxlLmluXSBbbGlidGVzdC9uZXcuY10gW2xpYnRlc3QvaGVsbG80LmNdCglBZGRlZCB0d28gbmV3IHRhcmdldHM6IGhlbGxvNCBhbmQgbmV3LgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgZGVmaW5pdGlvbiBvZiBERVZNT0RFIHN0cnVjdHVyZSwgYWx0aG91Z2ggaXQncyBub3QgeWV0IHVzZWQuCiAgCU1vZGlmaWVkIHZhcmlvdXMgQVBJIGZ1bmN0aW9ucyBmcm9tIENyZWF0ZURDKCkgdG8gRXNjYXBlKCksIGluCiAJb3JkZXIgdG8gbWFrZSB0aGVtIG1vcmUgY29tcGxpYW50IHdpdGggdGhlIHN0cmljdCBBUEkgZGVmaW5pdGlvbnMuCgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXQoJQWRkZWQgJ3R5cGVkZWYgY2hhciBUQ0hBUicuICBJdCBwcm9iYWJseSBzaG91bGQgYmUgZGVmaW5lZCBhcwoJJ3Nob3J0JywgYnV0IHRoZW4gd2Ugd291bGQgaGF2ZSB0byBzdXBwb3J0IHN1Y2ggY2hhcmFjdGVycy4gIEFsc28gZGlkCgkndHlwZWRlZiBjb25zdCBUQ0hBUiogTFBDVFNUUicgYW5kICd0eXBlZGVmIFRDSEFSKiBMUFRTVFInLgoJQWxzbyBkZWZpbmVkIFdOREVOVU1QUk9DLCBGT05URU5VTVBST0MsIEdPQkpFTlVNUFJPQywgUFJPUEVOVU1QUk9DCglNRkVOVU1QUk9DLCBhbmQgSEdESU9CSi4KCk1vbiBGZWIgIDUgMTY6NDI6MDcgMTk5NiAgRnJhbnMgdmFuIERvcnNzZWxhZXIgPGRvcnNzZWxAcnVsaG0xLmxlaWRlbnVuaXYubmw+CgoJKiBbbWlzYy9jb21tZGxnLmNdCglQYXRjaGVkIGEgYnVnIHRoYXQgb2NjdXJyZWQgaW4gdGhlIGludGVybmFsIENPTU1ETEcgbW9kdWxlIGZvciB0aGUKIAlGaWxlT3BlbigpLCBGaWxlU2F2ZSgpIGFuZCBGaWxlU2F2ZUFzKCkgZnVuY3Rpb25zLiAgVGhlIGZpbGUtdHlwZQogCWNvbWJvYm94IGlzIG5vdyBoYW5kbGVkIGNvcnJlY3RseS4KCkZyaSBGZWIgIDIgMjI6NTI6NTggMTk5NiAgUm9tYW4gRG9sZWpzaSAgPHJvbWFuQHNvcnJ5LnZzZS5jej4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX0N6LnJjXQoJQWRkZWQgc3VwcG9ydCBmb3IgQ3plY2ggW0N6XSBsYW5ndWFnZS4KClRodSBGZWIgIDEgMDA6MzU6MDQgMTk5NiAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUZPTlRfbWF0Y2hmb250IDogZm9yIGZpeGVkLXNwYWNpbmcgZm9udHMsIGFsbG93ICdjJyBpZiAnbScgZmFpbHM7Cglmb3IgdmFyaWFibGUtc3BhY2luZyBmb250cyA6IGFsbG93ICcqJyBpZiAncCcgZmFpbHM7IGlmIGFza2VkIGxmSGVpZ2h0CglpcyAtMSwgYXNzdW1lIDAuCglDcmVhdGVGb250SW5kaXJlY3QgOiBpZiBmb250IHBhcmFtZXRlciBpcyBOVUxMLCBpc3N1ZSBhbiBlcnJvciBtZXNzYWdlLgoJQ3JlYXRlRm9udCA6IG51bGwtdGVybWluYXRlIGxmRmFjZU5hbWUuCglQYXJzZUZvbnRQYXJtcyA6IGRlYnVnIGNvZGUgdHVybmVkIG9mZiA6IHRvbyB2ZXJib3NlLgoJSW5pdEZvbnRzTGlzdCA6IHJlY29nbml6ZSAqLWMtKiBmb250cyBhcyBmaXhlZC1zcGFjaW5nIGZvbnRzLgoKCSogW29iamVjdHMvY29sb3IuY10KCUNvbG9yVG9QaHlzaWNhbCA6IGFkbWl0IDB4ZmYuLi4uLi4gQ09MT1JSRUYncyBhcyAweDAwLi4uLi4uIG9uZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpXZWQgSmFuIDMxIDEwOjU4OjAwIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdT4KCgkqIFtjb25maWd1cmUuaW5dCglBZGRlZCAtLXdpdGgtZGxsIG9wdGlvbiB0byBidWlsZCBsaWJ3aW5lLnNvLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUZpeGVkIExpc3RCb3hEaXJlY3RvcnkoKSwgRGxnRGlyU2VsZWN0KCkgYW5kCglEbGdEaXJMaXN0KCkuIEhvcGVmdWxseSB0aGVpciBiZWhhdmlvciBpcyBjb3JyZWN0IG5vdy4KCgkqIFtjb250cm9scy9tZW51LmNdCglVc2UgU0VHUFRScyBpbiBDaGFuZ2VNZW51KCksIEluc2VydE1lbnUoKSwgQXBwZW5kTWVudSgpIGFuZAogCU1vZGlmeU1lbnUoKSBmb3IgdGhlIGl0ZW0gZGF0YSwgdG8gYXZvaWQgY29ycnVwdGluZyB0aGUgcG9pbnRlcgogCWZvciBvd25lci1kcmF3biBpdGVtcy4KCgkqIFtjb250cm9scy9zdGF0aWMuY10KCUF0dGVtcHQgdG8gbG9hZCBPRU0gaWNvbnMgZm9yIFNTX0lDT04gY29udHJvbHMuIFByb2JhYmx5IG5vdAoJZW50aXJlbHkgY29ycmVjdC4KCURvbid0IGNsaXAgdGhlIHRleHQgb3V0cHV0LgoKCSogW2ZpbGVzL2RpcmVjdG9yeS5jXQoJQWRkIHRlbXAgZGlyIGFuZCBXaW5kb3dzIGRpciB0byBlbnZpcm9ubWVudC4KCgkqIFtmaWxlcy9kb3NfZnMuY10KCUZpeGVkIGEgZmV3IHBhdGggaGFuZGxpbmcgYnVncyBpbiBET1NGU19HZXRVbml4RmlsZU5hbWUoKS4KCUNhY2hlIGxhc3QgdXNlZCBkaXJlY3RvcnkgaW4gRE9TRlNfRmluZE5leHQoKSB0byBhdm9pZCBxdWFkcmF0aWMKCXNlYXJjaCB0aW1lLgoKCSogW2ZpbGVzL2RyaXZlLmNdCglOZXcgZm9ybWF0IGZvciBkcml2ZXMgY29uZmlndXJhdGlvbiBpbiB3aW5lLmNvbmY7IGFsbG93cwoJc3BlY2lmeWluZyB0aGUgdHlwZSwgbGFiZWwgYW5kIHNlcmlhbCBudW1iZXIgb2YgYSBkcml2ZS4KCgkqIFtmaWxlcy9maWxlLmNdCglOZXcgZnVuY3Rpb24gRklMRV9PcGVuVW5peEZpbGUgdG8gbWFrZSBzdXJlIHdlIGRvbid0IG9wZW4gYQoJZGlyZWN0b3J5IGluc3RlYWQgb2YgYSBmaWxlLgoJRml4ZWQgRE9TRlNfR2V0VW5peEZpbGVOYW1lKCkgY2hlY2tfbGFzdCBmbGFnIGluIEZJTEVfTWFrZURpcigpLgoKCSogW2ZpbGVzL3Byb2ZpbGUuY10KCVJld3JvdGUgcHJvZmlsZSBoYW5kbGluZy4gU2hvdWxkIGJlIGNsb3NlciB0byBXaW5kb3dzIGJlaGF2aW9yIG5vdy4KCU5ldyBmdW5jdGlvbiBQUk9GSUxFX0dldFdpbmVJbmlTdHJpbmcoKSB0byBnZXQgYSBzdHJpbmcgZnJvbSB3aW5lLmNvbmYuCglTdXBwb3J0IGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiB3aW5lLmNvbmYuCgoJKiBbbG9hZGVyL3Rhc2suY10KCUZpeGVkIHRoZSBvcmRlciBvZiBkZWxldGlvbiBpbiBUQVNLX0RlbGV0ZVRhc2soKSB0byBhdm9pZCBtZW1vcnkKCWNvcnJ1cHRpb24uCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJQ3JlYXRlIGEgZGlzY2FyZGVkIGJsb2NrIG9uIEdsb2JhbEFsbG9jKCkgaWYgdGhlIHNpemUgaXMgMDsgdGhhbmtzCgl0byBKb2huIEhhcnZleSBmb3Igbm90aWNpbmcgdGhpcy4KCgkqIFttZW1vcnkvbG9jYWwuY10KCUxPQ0FMX0dldEhlYXA6IG1ha2Ugc3VyZSB0aGUgcG9pbnRlciBpcyB2YWxpZCBiZWZvcmUgY2hlY2tpbmcKCW1hZ2ljIG51bWJlci4KCgkqIFttaXNjL21haW4uY10KCU1vdmVkIHByb2ZpbGUgYW5kIHJlZ2lzdHJ5IHNhdmluZyB0byBFeGl0V2luZG93cygpLCBzbyB3ZSBkb24ndAoJdHJ5IHRvIHNhdmUgdGhlbSBpbiBjYXNlIG9mIGEgY3Jhc2guCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJSU5UMjFfR2V0RnJlZURpc2tTcGFjZTogdHJ5IHRvIGNvbXB1dGUgdGhlIGNsdXN0ZXIgc2l6ZSBmcm9tIHRoZQoJZmlsZXN5c3RlbSBzaXplIGluc3RlYWQgb2YgaGFyZC1jb2RpbmcgaXQgdG8gNjQuCglGaXhlZCBmdW5jdGlvbnMgMHgzZiBhbmQgMHg0MCB0byB1c2UgX2hyZWFkIGFuZCBfaHdyaXRlIHRvIGFsbG93CglyZWFkaW5nIG9yIHdyaXRpbmcgNjU1MzUgYnl0ZXMgKHRoYW5rcyB0byBCcnVjZSBNaWxuZXIgZm9yIHRoaXMJb25lKS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUZpeGVkIGJ1ZyBpbiBsaW5rZWQtbGlzdCBoYW5kbGluZyBpbiBNU0dfRGVsZXRlUXVldWUoKS4KCVNpbXBsaWZpZWQgU2V0TWVzc2FnZVF1ZXVlKCkuCgoJKiBbd2luZS5pbmldIFt3aW5lLm1hbl0KCVVwZGF0ZWQgZm9yIG5ldyBkcml2ZXMgY29uZmlndXJhdGlvbiBmb3JtYXQuCgpUdWUgSmFuIDMwIDExOjI0OjQ2IDE5OTYgIFdpbGxpYW0gTWFncm8gIDx3bWFncm9AdGMuY29ybmVsbC5lZHU+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJSW1wbGVtZW50ZWQgRVNfUEFTU1dPUkQgc3R5bGUsIEVNX1NFVFBBU1NXT1JEQ0hBUiBhbmQKIAlFTV9HRVRQQVNTV09SRENIQVIgbWVzc2FnZXMuCgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXQoJQWRqdXN0ZWQgY2xhc3MgY3JlYXRpb24gZmxhZ3MgdG8gYmV0dGVyIG1hdGNoIHZhbHVlcyBXaW5kb3dzIHVzZXMuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglGaXhlZCBFU19OT0hJREVTRUwgdHlwby4KCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCUFkZGVkIGRldGVjdGlvbiBmb3IgemVybyBvZmZzZXQgaW4gUkFERFIgZml4dXBzLiBRdWlja2VuCgl3YXMgaW4gYW4gaW5maW5pdGUgbG9vcCBoZXJlLgoKTW9uIEphbiAyOSAyMDoxMjoyMiAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW2ZpbGVzL2Rvc19mcy5jXQoJQnVnZml4OiByYW5nZSBlcnJvciBpbiBtb250aCB2YWx1ZSAoMC4uMTEgc2V0IHRvIDEuLjEyKS4KCgkqIFt3aW5kb3dzL2NhcmV0LmNdCglDaGFuZ2VkIFJPUDItbW9kZSB0byBSMl9OT1RYT1JQRU4gaW4gQ0FSRVRfQ2FsbGJhY2sgZm9yIHB1bHNlZAogCWFwcGVhcmFuY2Ugb2YgdGhlIGNhcmV0LgoKCSogW3dpbmRvd3MvbWRpLmNdIFtpbmNsdWRlL21kaS5oXQoJQ2hhbmdlZCBNRElUaWxlKCk6IGFkZGVkIGEgbmV3IHBhcmFtZXRlciBXT1JEIHdQYXJhbSBmb3IKIAlXTV9NRElUSUxFIHNlY29uZCB0aWxpbmcgbWV0aG9kIChNRElUSUxFX0hPUklaT05UQUwgaW4gd1BhcmFtKSBhcwogCXVzZWQgaW4gV2luMy4xCgpTdW4gSmFuIDI4IDE0OjIwOjAwIDE5OTYgIENhbWVyb24gSGVpZGUgIDxoZWlkZUBlZS51YWxiZXJ0YS5jYT4KCgkqIFttaXNjZW11L2ludDJmLmNdCglBZGRlZCBhIHNtYWxsIGJpdCBvZiBNU0NERVggZW11bGF0aW9uLgoKCSogW3dpbmRvd3MvYWxpYXMuY10KCUFMSUFTX1JlZ2lzdGVyQWxpYXMgd2FzIHJldHVybmluZyB0aGUgaGFzaCB2YWx1ZSB3aGVuIGl0IHNob3VsZAogCWhhdmUgYmVlbiByZXR1cm5pbmcgdGhlIHJlY29yZCBudW1iZXIuCgkKU2F0IEphbiAyNyAxMDo1Mzo1MSAxOTk2ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgoKCSogW2luY2x1ZGUvc2hlbGwuaF0gW2luY2x1ZGUvd2ludHlwZXMuaF0KCU1vdmVkIGRlZmluaXRpb24gb2YgSEtFWSBhbmQgTFBIS0VZIHR5cGVzIHRvIGluY2x1ZGUvd2ludHlwZXMuaC4KCURlY2xhcmVkIEZPTlRFTlVNUFJPQyBpbiB3aW50eXBlcy5oLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgZGVmaW5pdGlvbiBvZiBLRVJOSU5HUEFJUiBhbmQgTFBLRVJOSU5HUEFJUiB0eXBlcy4gIEFkZGVkCglkZWNsYXJhdGlvbnMgZm9yIENvcHlDdXJzb3IoKSwgQ29weUljb24oKSwgRW51bUZvbnRGYW1pbGllcygpLAoJRXh0cmFjdEljb24oKSwgRmF0YWxBcHBFeGl0KCksIEZpbmRFeGVjdXRhYmxlKCksIEdldENsaXBDdXJzb3IoKSwKCUdldEtlcm5pbmdQYWlycygpLCBHZXRRdWV1ZVN0YXR1cygpLCBHZXRSYXN0ZXJpemVyQ2FwcygpLAoJSXNHRElPYmplY3QoKSwgSXNNZW51KCksIElzVGFzaygpLCBSZWdDbG9zZUtleSgpLCBSZWdDcmVhdGVLZXkoKSwKCVJlZ0RlbGV0ZUtleSgpLCBSZWdFbnVtS2V5KCksIFJlZ09wZW5LZXkoKSwgUmVnUXVlcnlWYWx1ZSgpLAoJUmVnU2V0VmFsdWUoKSwgUmVzZXREQygpLCBTaGVsbEV4ZWN1dGUoKSwgU3lzdGVtUGFyYW1ldGVyc0luZm8oKSwKCWFuZCB3c3ByaW50ZigpLgoKCSogW3Rvb2xzL21ha2VodG1sLnBsXSBbZG9jdW1lbnRhdGlvbi9hcGl3LmluZGV4XQoJTmV3IGZpbGVzIHRoYXQgc2NhbiB3aW5kb3dzLmgsIGNvbW1kbGcuaCwgYW5kIHRvb2xoZWxwLmggYW5kIG91dHB1dAoJYW4gSFRNTCBzb3J0ZWQgbGlzdCB3aXRoIG9wdGlvbmFsIGxpbmtzIHRvIHd3dy53aWxsb3dzLmNvbSBhbmQgYQoJdGFsbHkgb2YgdW5pbXBsZW1lbnRlZCBBUElXIGZ1bmN0aW9ucy4KCgkqIFtvYmplY3RzL2N1cnNvcmljb24uY10KCUFkZGVkIFdpbjMyIHZlcnNpb25zIG9mIENvcHlJY29uKCkgYW5kIENvcHlDdXJzb3IoKSBmb3IgdXNlIGluCglsaWJ3aW5lLgoKCSogW3dpbjMyL3Jlc291cmNlLmNdIFt3aW4zMi93aW5wcm9jcy5jXQoJQWRkZWQgJyNpbmNsdWRlICJsaWJyZXMuaCInIGFuZCBleHBsaWNpdCBkZWNsYXJhdGlvbnMgb2Ygd2luZG93cwoJcHJvY3MgaW4gb3JkZXIgdG8gYXZvaWQgd2FybmluZ3MuCgoJKiBbd2luZG93cy91dGlsaXR5LmNdCglBZGRlZCBXaW4zMiB2ZXJzaW9uIG9mIE11bERpdigpIGZvciBsaWJ3aW5lLgoKCSogWyovKl0gW2luY2x1ZGUvd2luZG93cy5oXQoJQ2hhbmdlZCBzZXZlcmFsIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyB0byBjb21wbHkgbW9yZSBzdHJpY3RseSB0bwoJdGhlIHdpbmRvd3MgQVBJICh3aXRob3V0LCBob3BlZnVsbHksIGFsdGVyaW5nIHRoZWlyIGZ1bmN0aW9uYWxpdHkpLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU1hZGUgdGhlIHJldHVybiB2YWx1ZSBvZiBDaGVja01lbnVJdGVtIGJlIHRoZSBwcmV2aW91cyBzdGF0ZSBvZgogCXRoZSBtZW51IGl0ZW0gaWYgaXQgd2FzIGZvdW5kLCBvdGhlcndpc2UgLTEgYXMgc3BlY2lmaWVkIGluIHRoZQogCVNESy4gVGhpcyBjb25mbGljdHMgd2l0aCB0aGUgQVBJVyBzcGVjaWZpY2F0aW9uLCB3aGljaCBzYXlzIGl0CiAJc2hvdWxkIHJldHVybiBUUlVFIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSBGQUxTRS4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIG9ic29sZXRlIFdNX1NJWkUgbWVzc2FnZSB3UGFyYW0gbmFtZXMgZm9yIGNvbXBhdGliaWxpdHkuCiAgCUFkZGVkIFdpbkhlbHAoKSBjb21tYW5kIGNvbnN0YW50cywgZXZlbiB0aG91Z2ggdGhleSBhcmUgbm90IHlldAogCXN1cHBvcnRlZC4KCgkqIFtyYy93aW5lcmMuY10KCVRpZGllZCB1cCB0cmFuc2Zvcm1fYmluYXJ5X2ZpbGUoKS4gIEluIGFyZ3VtZW50IGNoZWNraW5nLCBmbGF0dGVuZWQKCWFueSBpbnZhbGlkIGNoYXJhY3RlcnMgc3BlY2lmaWVkIHdpdGggdGhlIHByZWZpeCBhcmd1bWVudC4KCgkqIFtsaWJyYXJ5L2xpYnJlcy5jXQoJTWFkZSBGaW5kUmVzb3VyY2UoKSBjYXNlLWluc2Vuc2l0aXZlIHdoZW4gcGFyYW1ldGVyICduYW1lJyBpcyBhIHN0cmluZy4KClNhdCBKYW4gMjcgMDI6MzAgMTk5NiAgVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudGgtZGFybXN0YWR0LmRlCgoJKiBbZmlsZXMvZHJpdmUuY10KCUlmIHJvb3QgIi8iIGlzIGdpdmVuIGluIHdpbmUuY29uZiwgdXNlIGl0IGFzIGxhc3QgcmVzb3J0LgoKCSogW2ZpbGVzL2ZpbGUuY10KCVJlcG9ydCBFUl9BY2Nlc3NEZW5pZWQgaXQgZGlzayBpc3Qgbm90IHdyaXRhYmxlCglNb3JlIERlYnVnIE91dHB1dAoKCSogW21pc2NlbXUvaW50MjEuY10KCVNxdWVlemVkIHNvbWUgYnVncyBpbiBFeHRlbmRlZE9wZW5DcmVhdGVGaWxlCgkKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglTb21lIHdpbmRvd3MgbWF5IG5vdCBiZSBtb3ZlZCBvciByZXNpemVkLiBXZSBhcmUgbWlzc2luZyBzb21lCglzdHJ1Y3R1cmVzIHRvIGJlIGV4YWN0LCBidXQgdGhlIGFwcHJvYWNoIHNob3VsZCBoZWxwIGluIHNvbWUgY2FzZXMKCWFuZCBtYWtlIHRoaW5ncyB3b3JzZSBpbiBtdWNoIGZld2VyLgoKRnJpIEphbiAyNiAxMDoyNDowMCAxOTk2ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQHByZHMtZ3JuLmRlbW9uLmNvLnVrPgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJZml4dXBfaW1wb3J0czogRmluZCBidWlsdGlucyBmb3IgQm9ybGFuZCBzdHlsZSBlbnRyaWVzLCB0b28KCkZyaSBKYW4gMjYgMTA6MjQ6MDAgMTk5NiAgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtjb250cm9scy9tZW51LmNdCglMb2FkTWVudTogYnJhbmNoIHRvIFdpbjMyIGZvciBQRSBtb2R1bGVzCgoJKiBbaWYxNjMyL2dkaS5zcGVjXVtpZjE2MzIva2VybmVsMzIuc3BlY11baWYxNjMyL3VzZXIzMi5zcGVjXQoJRGVsZXRlT2JqZWN0LCBHZXRQaXhlbCwgU2V0UGl4ZWwsV3JpdGVQcml2YXRlUHJvZmlsZVN0cmluZ0EsCglXcml0ZVByb2ZpbGVTdHJpbmdBLCBFbXB0eUNsaXBib2FyZCwgRW5hYmxlTWVudUl0ZW0sIEVuYWJsZVNjcm9sbEJhciwKCUVuYWJsZVdpbmRvdywgSW52YWxpZGF0ZVJlY3QsIFNldFdpbmRvd1RleHRBLCBXaW5IZWxwQTogbmV3IHJlbGF5cwoJRHJhd1RleHRBLCBNb3ZlVG9FeCwgR2V0Q2xpZW50UmVjdCwgSW52YWxpZGF0ZVJlY3QsIExvYWRCaXRtYXBBL1csCglMb2FkQWNjZWxlcmF0b3JzQS9XLCBMb2FkTWVudVtJbmRpcmVjdF1BL1csIExvYWRTdHJpbmdBL1c6IGNoYW5nZWQKCXRvIGNvbnZlcnQgcGFyYW1ldGVycyBvciBuYW1pbmcgY29udmVudGlvbgoKCSogW2luY2x1ZGUva2VybmVsMzIuaF1baW5jbHVkZS93aW50eXBlcy5oXQoJbW92ZWQgV0NIQVIsIGRlZmluZWQgTFBXU1RSCgoJKiBbaW5jbHVkZS9zdHJpbmczMi5oXVt3aW4zMi9zdHJpbmczMi5jXVtpbmNsdWRlL3N0cnVjdDMyLmhdCglOZXcgZmlsZXMKCgkqIFtsb2FkZXIvbW9kdWxlLmhdCglMb2FkTW9kdWxlOiBleGl0IGFmdGVyIHJldHVybmluZyBmcm9tIFBFX0xvYWRNb2R1bGUKCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCW15X3djc3RvbWJzOiBpc2FzY2lpIGRvZXMgbm90IHdvcmsgb24gTGludXggZm9yIFVuaWNvZGUKCVBFX0xvYWRJbWFnZTogSGFuZGxlIGRpcmVjdG9yaWVzCgoJKiBbbWlzYy91c2VyMzIuY10KCVVTRVIzMl9SRUNUMzJ0bzE2LCBVU0VSMzJfUkVDVDE2dG8zMjogbmV3IGZ1bmN0aW9ucwoJaW1wbGVtZW50ZWQgbmV3IHVzZXIzMiByZWxheXMKCgkqIFttaXNjL25ld2Zucy5jXQoJV0lOMzJfV2luSGVscEE6IG5ldyBmdW5jdGlvbgoKCSogW3dpbjMyL3BhcmFtMzIuY10KCU5ldyBmaWxlCgoJKiBbd2luMzIvcmVzb3VyY2UuY10KCUdldFJlc0RpckVudHJ5OiBhZGRlZCBzdXBwb3J0IGZvciBuYW1lZCBlbnRyaWVzCglXSU4zMl9Mb2FkQWNjZWxlcmF0b3JzVzogaW52b2tlICozMiByZXNvdXJjZSBmdW5jdGlvbnMKCVdJTjMyX0xvYWRCaXRtYXBBOiBjb252ZXJ0IG5hbWUgdG8gdW5pY29kZSBpZiBhcHByb3ByaWF0ZQoJV0lOMzJfUGFyc2VNZW51OiBuZXcgZnVuY3Rpb24KCWltcGxlbWVudGVkIG5ldyByZXNvdXJjZSBmdW5jdGlvbnMgZnJvbSB1c2VyMzIuc3BlYwoKV2VkIEphbiAyNCAxODowOTowMCAxOTk2IEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW29iamVjdHMvY3Vyc29yaWNvbi5jXQoJR2V0SWNvbklkKCkgYW5kIExvYWRJY29uSGFuZGxlcigpIGZ1bmN0aW9ucy4KCgkqIFt3aW5kb3dzL21kaS5jXQoJQmV0dGVyIG1heGltaXphdGlvbiBzdXBwb3J0LCBUcmFuc2xhdGVNRElTeXNBY2NlbCgpIGZ1bmN0aW9uLCAKCW1pc2MgaW1wcm92ZW1lbnRzLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglGaXggZm9yIFdNX1dJTkRPV1BPU0NIQU5HRUQgbWVzc2FnZSBoYW5kbGVyLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglSZXdyb3RlIFdpbmRvd0Zyb21Qb2ludCgpIGZ1bmN0aW9uLgoKU3VuIEphbiAyMSAxOTk2IDE3OjA1OjA5ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGZhdWkwMS5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtpbmNsdWRlL3Rvb2xoZWxwLmhdIFttaXNjL3Rvb2xoZWxwLmNdCglBZGRlZCBOb3RpZnkoVW4pUmVnaXN0ZXIsIGJ1dCBubyBjYWxsYmFja3MgeWV0LgoKRnJpIEphbiAxOSAwMTo0MzozNyAxOTk2IFZpY3RvciBTY2huZWlkZXIgPHJvb3RAdGFpbG9yLnJvbWFuLm9yZz4KCgkqIFtNYWtlZmlsZS5pbl0KCUFkZGVkIHRhcmdldCBmb3IgbGlid2luZS5zby4xLjAuCgoJKiBbbGlicmFyeS93aW5tYWluLmNdCglGb3IgV0lORUxJQkRMTCwgX1dpbk1haW4ganVzdCByZXR1cm5zIGhJbnN0YW5jZSBpbnN0ZWFkIG9mIGNhbGxpbmcKCVdpbk1haW4oKS4KCgkqIFttaXNjL21haW4uY10KCUZvciBXSU5FTElCRExMLCByZW5hbWVkIG1haW4oKSB0byBfd2luZV9tYWluKCkgZm9yIGNhbGxpbmcgZnJvbSB0aGUKCXN0dWIgbWFpbiBmdW5jdGlvbi4KCgkqIFtsaWJyYXJ5L3dpbmVzdHViLmNdIChuZXcgZmlsZSkKCVByb3ZpZGVzIGEgc3R1YiBtYWluKCkgZnVuY3Rpb24gZm9yIHVzaW5nIGxpYndpbmUuc28uCgpUdWUgSmFuIDE2IDExOjA0OjM0IDE5OTYgIEFuYW5kIEt1bXJpYSA8YWt1bXJpYUBvemVtYWlsLmNvbS5hdT4KCgkqIFt3aW5zb2NrZXQuY10KCUZpeCBFUEVSTSBwcm9ibGVtLgoKCSogW2dsb2JhbC5jXQoJQXR0ZW1wdCB0byBkbyBzb21lIHNhbml0eSBjaGVja2luZyBpbiBNZW1NYW5JbmZvKCkuCgoJKiBbQ2hhbmdlbG9nXQoJRml4IGNoYW5nZWxvZyBvdmVyc2lnaHQgZm9yIHByZXZpb3VzIGVudHJ5LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBKYW4gMTQgMTM6NDU6MjIgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1PgoKCSogW2NvbmZpZ3VyZS5pbl0KCUFkZGVkIGNoZWNrIGZvciBnY2Mgc3RyZW5ndGgtcmVkdWNlIGJ1Zy4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglDaGFuZ2VkIExpc3RCb3hEaXJlY3RvcnkoKSB0byB1c2UgdGhlIG5ldyBET1MgZmlsZSBmdW5jdGlvbnMuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJRml4ZWQgcGFyYW1ldGVycyBmb3IgRGVsZXRlTWVudSgpIGNhbGwgaW4gQ2hhbmdlTWVudSgpLgoKCSogW2RlYnVnZ2VyL3N0YWNrLmNdCglBbHNvIGRpc3BsYXkgY3VycmVudCBmcmFtZSBpbiBiYWNrLXRyYWNlLgoKCSogW2ZpbGVzL2RpcmVjdG9yeS5jXSBbZmlsZXMvZG9zX2ZzLmNdIFtmaWxlcy9kcml2ZS5jXSBbZmlsZXMvZmlsZS5jXQoJQ29tcGxldGUgcmV3cml0ZSBvZiB0aGUgRE9TIGZpbGUgaGFuZGxpbmcuCglJbXBsZW1lbnRlZCBwZXItdGFzayBmaWxlIGhhbmRsZXMuCglSZW1vdmVkIGRlZmF1bHQgWjogZHJpdmU7IG5lZWRzIHRvIGJlIHB1dCBleHBsaWNpdGVseSBpbiB3aW5lLmluaQoJaWYgZGVzaXJlZC4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglGaXhlZCBmaWxlIGRlc2NyaXB0b3IgbGVhayBpbiBMb2FkTW9kdWxlKCkuCgoJKiBbbG9hZGVyL3Rhc2suY10KCUluaXRpYWxpc2UgUERCIGZpbGUgaGFuZGxlIHRhYmxlIGluIFRBU0tfQ3JlYXRlVGFzaygpLgoJQ2xvc2UgZmlsZSBoYW5kbGVzIG9uIHRhc2sgdGVybWluYXRpb24uCglJbXBsZW1lbnRlZCBTZXRFcnJvck1vZGUoKS4KCgkqIFttaXNjL25ldHdvcmsuY10KCUZpeGVkIFdOZXRHZXRDb25uZWN0aW9uKCkgdG8gdXNlIEdldERyaXZlVHlwZSgpLgoKCSogW21pc2MveG1hbGxvYy5jXQoJQWRkZWQgZnVuY3Rpb24geHN0cmR1cCgpLgoKCSogW21pc2NlbXUvaW50MjEuY10KCU1hbnkgY2hhbmdlcyBmb3IgbmV3IERPUyBmaWxlIGZ1bmN0aW9ucy4KCgkqIFttaXNjZW11L2ludGVycnVwdHMuY10KCU1vdmVkIERPU19HZXRFcXVpcG1lbnQoKSBmdW5jdGlvbiBpbnRvIElOVF9JbnQxMUhhbmRsZXIoKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQnVnIGZpeDogY3JlYXRlIHN5c3RlbSBtZW51IGJlZm9yZSBzZW5kaW5nIFdNX05DQ1JFQVRFLgoKCSogWyovKi5jXQoJUmVwbGFjZWQgc3RyY2FzZWNtcCBhbmQgc3RybmNhc2VjbXAgYnkgbHN0cmNtcGkgYW5kIGxzdHJuY21waSBmb3IKCWJldHRlciBwb3J0YWJpbGl0eS4KClNhdCBKYW4gMTMgMTY6MTM6MDIgMTk5NiAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglBZGRlZCAndHlwZWRlZiBIR0xPQkFMIEdPQkFMSEFORExFOycuICBUaGlzIGlzIG5vdCBwcmVjaXNlbHkgaW4gbGluZQoJd2l0aCB0aGUgdHJ1ZSB3aW5kb3dzICd0eXBlZGVmIEhBTkRMRSBHTE9CQUxIQU5ETEU7JywgYnV0IEkgYmVsaWV2ZQoJaXQgc2hvdWxkIHN1ZmZpY2UuCgoJKiBbaW5jbHVkZS93aW5zb2NrLmhdCglBZGRlZCAnI2luY2x1ZGUgPGFycGEvaW5ldC5oPicgZm9yIHZhcmlvdXMgZGVjbGFyYXRpb25zLiAgJyNpZmRlZictZWQKCW91dCBzb21lIG9sZCBzdHlsZSBpbnRlcm5ldCBhZGRyZXNzICNkZWZpbmUncy4KCgkqIFtsb2FkZXIvdGFzay5jXQoJTWFkZSBNYWtlUHJvY0luc3RhbmNlKCkgcmV0dXJuIGZpcnN0IHBhcmFtZXRlciAjaWZkZWYgV0lORUxJQjMyLgoJTWFkZSBGcmVlUHJvY0luc3RhbmNlKCkgZG8gbm90aGluZyAjaWZkZWYgV0lORUxJQjMyLgoJJyNpZmRlZictZWQgb3V0IFRBU0tfQWxsb2NUaHVuaygpLCBhcyBpdCB3YXMgdW51c2VkIGluIFdJTkVMSUIzMi4KCgkqIFtsaWJyYXJ5L21pc2NzdHVicy5jXQoJTWFkZSBHZXRXbmRQcm9jRW50cnkxNigpIHJldHVybiBBQ1RJVkFURUFQUF9jYWxsYmFjaygpIHdoZW4gY2FsbGVkCgl3aXRoIG5hbWU9IkFjdGl2YXRlQXBwUHJvYyIuICBUaGlzIGhhcmRseSBzZWVtcyBjb3JyZWN0LCBidXQgaXQncyBteQoJYmVzdCBndWVzcyBhcyB0byBob3cgdGhlIGVtdWxhdG9yIHJlc3BvbmRzLgoKU2F0IEphbiAgNiAxNzo1Nzo0NSAxOTk2ICBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXVt3aW4zMi9wcm9jZXNzLmNdCglXSU4zMl9HZXRQcm9jQWRkcmVzcywgTG9hZExpYnJhcnlBOiBuZXcgZnVuY3Rpb25zCgoJKiBbaWYxNjMyL3JlbGF5MzIuY10KCVJFTEFZMzJfR2V0RW50cnlQb2ludDogUmVtb3ZlZCBjb2RlIHRvIGxvYWQgUEUgRExMcwoKCSogW2luY2x1ZGUvcGVfaW1hZ2UuaF1baW5jbHVkZS9wZV9leGUuaF0KCXN0cnVjdCBwZV9kYXRhOiBuZXcgZmllbGRzIGJhc2VfYWRkcixsb2FkX2FkZHIsdm1hX3NpemUscGVfcmVsb2MKCXN0cnVjdCBQRV9SZWxvY19CbG9jazogbmV3IHN0cnVjdHVyZQoKCSogW2xvYWRlci9tb2R1bGUuY10KCU1PRFVMRV9SZWdpc3Rlck1vZHVsZTogbmV3IGZ1bmN0aW9uCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglQRV9GaW5kRXhwb3J0ZWRGdW5jdGlvbixQRV9HZXRQcm9jQWRkcmVzczogbmV3IGZ1bmN0aW9ucwoJZml4dXBfaW1wb3J0czogZXhwZWN0IHN0cnVjdCB3X2ZpbGVzKiBub3csIGZpbGwgZGxsc190b19pbml0LAoJICAgICAgICAgICAgICAgbG9hZCBQRSBETExzCglkb19yZWxvY2F0aW9uczogbmV3IGZ1bmN0aW9ucwoJY2FsY192bWFfc2l6ZTogcmVuYW1lZCBmcm9tIGR1bXBfdGFibGUKCVBFX0xvYWRJbWFnZTogdXNlIG1hbGxvYyB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGltYWdlCglQRV9Jbml0RExMOiBleHBlY3QgSE1PRFVMRQoJUEVfSW5pdGlhbGl6ZURMTHM6IG5ldyBmdW5jdGlvbgoKCSogW2xvYWRlci90YXNrLmNdCglORV9Jbml0aWFsaXplRExMczogYnJhbmNoIHRvIFBFX0luaXRpYWxpemVETExzIGZvciBQRSBtb2R1bGVzCglHZXRFeGVQdHI6IEFjY2VwdCBQRSBtb2R1bGVzCgoJKiBbbWlzYy9jb21tZGxnLmNdCglGSUxFRExHX1dNQ29tbWFuZDogdW5wYWNrIFdJTjMyIFdNX0NPTU1BTkQgYXBwcm9wcmlhdGVseSBmb3IgV2luZUxpYgoKVGh1IEphbiAgNCAxMTozNjoyMSAxOTk2ICBNYW5mcmVkIFdlaWNoZWwgPE1hbmZyZWQuV2VpY2hlbEBtY2guc25pLmRlPgoKCSogW21pc2MvcG9ydC5jXQoJTmV3IGZpbGUgd2l0aCB1c2xlZXAoKSBmdW5jdGlvbiBmb3IgU1ZSNC4KCgkqIFtjb25maWd1cmUuaW5dCglDaGVjayBmb3IgdXNsZWVwKCkgZnVuY3Rpb24uCgpUdWUgSmFuIDAyIDE0OjAwOjAwIDE5OTYgIEFuYW5kIEt1bXJpYSA8YWt1bXJpYUBvemVtYWlsLmNvbS5hdT4KCgkqIFtpZjE2MzIvdG9vbGhlbHAuc3BlY10gW2luY2x1ZGUvdG9vbGhlbHAuaF0KCSAgW21pc2MvdXNlci5jXSBbd2luZG93cy9tZXNzYWdlLmNdCglJbXBsZW1lbnQgVE9PTEhFTFAuODAgVGltZXJDb3VudC4gRml4IEdldFRpY2tDb3VudC4KCgkqIFt3aW5zb2NrZXQuY10KCUZpeGVkIEVOT0VOVCBlcnJvci4KCgkqIFttaXNjZW11L2RwbWkuY10KCUltcGxlbWVudCBEUE1JIEdldCBQYWdlIFNpemUgKEFYPTA2MDQsIElOVCAzMSkKCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglJbXBsZW1lbnQgVE9PTEhFTFAuNzIgR2V0TWVtTWFuSW5mby4KCk1vbiBKYW4gIDIgMTA6MzM6MDAgMTk5NiAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBwcmRzLWdybi5kZW1vbi5jby51az4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCUNhbGxXaW5kb3dQcm9jKCkgLSBXaGVuIGNhbGxpbmcgUkVMQVkzMl9DYWxsV2luZG93UHJvYywgY2hlY2sKCXdoZXRoZXIgbFBhcmFtIHNob3VsZCBiZSBhIFNFR1BUUiwgYW5kIGlmIHNvIGNvbnZlcnQgaXQgdG8gb25lLgoKCSogW2lmMTYzMi9nZGkuc3BlY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbaWYxNjMyL3VzZXIzMi5zcGVjXQoJTnVtZXJvdXMgZnVuY3Rpb25zIGFkZGVkLCBtb3N0bHkgY2FsbHMgdG8gb3JpZ2luYWwgKHdpbjE2KQogCWZ1bmN0aW9ucy4gIE5vdGUgdGhhdCBzb21lIChtYW55KSBvZiB0aGVzZSBhcmUgcHJvYmFibHkgbm90CiAJc3RyaWN0bHkgY29ycmVjdCwgYnV0IHdpdGggdGhlc2UgYWRkaXRpb25zIGZyZWVjZWxsIHdpbGwgYXQgbGVhc3QKIAlkaXNwbGF5IGl0cyBtYWluIHdpbmRvdyB0aG91Z2ggaXQgaXMgZ2FyYmxlZC4KCgkqIFtpZjE2MzIvd2lucHJvY3Muc3BlY10KCUNvbXBsZXRlbHkgcmV3cml0dGVuIC0gYWxsIFduZFByb2NzIG5vdyBoYXZlIHdpbjMyIHZlcnNpb25zIHRvCgloZWxwIHdpdGggdGhlIGxwYXJhbSBTRUdQVFIgZml4IGluIGNhbGxiYWNrLmMKCgkqIFtpbmNsdWRlL2tlcm5lbDMyLmhdCglMUFRDU1RSIGRlZmluZWQuCgoJKiBbaW5jbHVkZS9wZWV4ZS5oXQoJRGVmaW5pdGlvbiBvZiBQRV9FeHBvcnRfRGlyZWN0b3J5IGFtZW5kZWQuCgoJKiBbaW5jbHVkZS9yZXNvdXJjZTMyLmhdCglOZXcgZmlsZS4KCgkqIFtpbmNsdWRlL3N0YWNrZnJhbWUuaF0KCURlZmluaXRpb24gb2YgTUFLRV9TRUdQVFIgbWFjcm8gI2lmZGVmJ2Qgb3V0IGFuZCByZXBsYWNlZCB3aXRoCglwcm90b3R5cGUgZm9yIHJlcGxhY2VtZW50IGZ1bmN0aW9uIGluIG1lbW9yeS9zZWxlY3Rvci5jIHdoaWNoCgljYW4gb3BlcmF0ZSBvbiBhbnkgZ2l2ZW4gbWVtb3J5IGFkZHJlc3MuIFRoaXMgaXMgY3VycmVudGx5CglyZXF1aXJlZCBmb3Igd2luMzIgc3VwcG9ydC4gSXQgaXMgYSBkcmVhZGZ1bCBjbHVkZ2UsIGFuZCB3aWxsCgljZXJ0YWlubHkgc2xvdyBkb3duIG90aGVyIHByb2dyYW1zLiBJZiB5b3UgYXJlIG5vdCBpbnRlcmVzdGVkCglpbiB3aW4zMiBkZXZlbG9wbWVudCB5b3UgbWF5IHdpc2ggdG8gcmV2ZXJzZSB0aGlzIHBhdGNoLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJRGVmaW5pdGlvbiBvZiBTV19TSE9XREVGQVVMVCBhZGRlZC4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCUV4dGVuc2l2ZSByZXdyaXRlcyBvZiB4bW1hcCgpIGZpeHVwX2ltcG9ydHMoKS4KCVBFX0xvYWRJbWFnZSgpIC0gaW5pdGlhbGlzYXRpb24gb2YgYnNzIGFkZGVkLCBleHRyYWN0aW9uIG9mCgltb2R1bGUgbmFtZSBmaXhlZCwgaW5pdGlhbGlzYXRpb24gb2YgRExMIGFkZGVkLgoJUEVfSW5pdERMTCgpIC0gbm93IGRvZXMgc29tZXRoaW5nLgoJUEVfV2luMzJDYWxsVG9TdGFydCgpIC0gaW5pdGlhbGlzYXRpb24gb2YgVEVCIHBvaW50ZWQgdG8gYnkKCWZzIGFkZGVkLgoJUEVfSW5pdFRFQigpIGNyZWF0ZWQgdG8gcGVyZm9ybSBURUIgaW5pdGlhbGlzYXRpb24uCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdIAoJTmV3IGZ1bmN0aW9uIE1BS0VfU0VHUFRSKCkgLSBzZWUgaW5jbHVkZS9zdGFja2ZyYW1lLmggYWJvdmUuCgoJKiBbbWlzYy91c2VyMzIuY10KCVVTRVIzMl9SZWdpc3RlckNsYXNzQSgpLCBDcmVhdGVXaW5kb3dFeEEoKSBtZW1vcnkgYWxsb2NhdGlvbgoJbWV0aG9kIGNoYW5nZWQuIFRoaXMgaXMgcHJvYmFibHkgbm93IHVubmVjZXNzYXJ5IHdpdGggdGhlCgluZXcgTUFLRV9TRUdQVFIgaGFuZGxpbmcgY29kZS4KCVVTRVIzMl9EZWZXbmRQcm9jQSgpIHJlbW92ZWQgdG8gd2luMzIvd2lucHJvY3MuYwoJVVNFUjMyX1RyYW5zbGF0ZU1lc3NhZ2UgYWRkZWQuCgoJKiBbdG9vbHMvYnVpbGQuY10KCWhhbmRsaW5nIG9mIHdpbjMyIHNwZWMgZmlsZXMgY2hhbmdlZCB0byBzdXBwb3J0IGdjYzIuNi5YCgl0aGlzIHJlcXVpcmVzIG9wdGltaXNhdGlvbnMgdG8gYmUgZGlzYWJsZWQuCgoJKiBbd2luMzIvcmVzb3VyY2UuY10gW3dpbjMyL25ld2Zucy5jXSBbd2luMzIvaGVhcC5jXSBbd2luMzIvd2lucHJvY3MuY10KCU5ldyBmaWxlcy4KCgkqIFt3aW4zMi9NYWtlZmlsZS5pbl0KCU5ldyBmaWxlcyBoZWFwLmMsIG5ld2Zucy5jLCByZXNvdXJjZS5jIGFuZCB3aW5wcm9jcy5jIGFkZGVkIHRvIGJ1aWxkLgoKCSogW3dpbjMyL2ZpbGUuY10KCU5ldyBmdW5jdGlvbiBXMzJfU2V0SGFuZGxlQ291bnQuCgoJKiBbd2luMzIvaW5pdC5jXQoJV0lOMzJfR2V0TW9kdWxlSGFuZGxlKCkgLSBub3cgcmV0dXJucyBoYW5kbGUgb2YgcnVubmluZyBwcm9jZXNzCglpZiBjYWxsZWQgd2l0aCBOVUxMLgoJR2V0U3RhcnR1cEluZm9BKCkgLSBzZXQgY2JSZXNlcnZlZDIgdG8gMC4KCgkqIFt3aW4zMi9tZW1vcnkuY10KCVZpcnR1YWxBbGxvYygpIC0gc2V0IG1tYXAoKSBmaWxlIHBhcmFtZXRlciB0byAtMSBpbnN0ZWFkIG9mIDAgdG8gbWFrZQoJaXQgd29yayB3aXRoIEZyZWVCU0QuIEFsc28gY2hlY2sgZm9yIHJldHVybiB2YWx1ZS4gUmVtb3ZlZCBleHRyYQoJcmV0dXJuLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglTaG93V2luZG93KCkgLSBTV19TSE9XREVGQVVMVCBoYW5kbGluZyBrbHVkZ2VkIGluLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgRGVjIDIzIDE4OjE1OjU5IDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdT4KCgkqIFtjb25maWd1cmUuaW5dIFtNYWtlZmlsZS5pbl0gW3Rvb2xzL2luc3RhbGwtc2hdCglOZXcgJ2luc3RhbGwnIHRhcmdldCBpbnN0YWxscyBXaW5lIGJpbmFyeSwgbGlicmFyeSBhbmQgbWFuIHBhZ2UuCglMaWJyYXJ5IGlzIG5vdyBtb3JlIGxvZ2ljYWxseSBuYW1lZCBsaWJ3aW5lLmEuCglTcGxpdCB0b29sa2l0LyBkaXJlY3RvcnkgaW50byBsaWJyYXJ5IChmb3IgbGlicmFyeSBjb2RlKSBhbmQKCWxpYnRlc3QgKGZvciB0ZXN0IHByb2dyYW1zKS4KCgkqIFtjb250cm9scy9lZGl0LmNdCglRdWljayBoYWNrIHRvIHBhcnRpYWxseSBzdXBwb3J0IEVNX1BBU1NXT1JEIHN0eWxlIChhdm9pZHMKCWRpc3BsYXlpbmcgeW91ciBwYXNzd29yZHMgb24gdGhlIHNjcmVlbiB3aGVuIHRlc3RpbmcgcHJvZ3JhbXMuLi4pCgoJKiBbY29uZmlndXJlLmluXSBbY29udHJvbHMvbWVudS5jXSBbaW5jbHVkZS9yZXNvdXJjZS5oXQoJICBbbWlzYy9jb21tZGxnLmNdIFttaXNjL29sZTJubHMuY10gW21pc2Mvc2hlbGwuY10gW3dpbmRvd3MvbXNnYm94LmNdCglMYW5ndWFnZSBpcyBub3cgYSBydW4tdGltZSBvcHRpb24gKHdpbmUgLWxhbmd1YWdlIHh4KS4KCgkqIFtkZWJ1Z2dlci9kYmcueV0KCUR1bXAgc29tZSBtb3JlIGRlYnVnZ2luZyBpbmZvIG9uIGNyYXNoLgoKCSogW21pc2MvcHJvZmlsZS5jXQoJT25seSBjb25zaWRlciAnOycgYXMgYSBjb21tZW50IGlmIGl0J3MgdGhlIGZpcnN0IG5vbi1ibGFuawoJY2hhcmFjdGVyIG9uIHRoZSBsaW5lLgoKCSogW21pc2NlbXUvZHBtaS5jXQoJTW9yZSBkZWJ1Z2dpbmcgaW5mbyBmb3IgcmVhbC1tb2RlIGNhbGxiYWNrLgoKCSogW29iamVjdHMvZ2Rpb2JqLmNdCglSZXdyb3RlIEVudW1PYmplY3RzKCkgdG8gZG8gdGhlIFJpZ2h0IFRoaW5nLgoKCSogW3Jlc291cmNlcy9zeXNyZXMqXQoJTmV3IGRpcmVjdG9yeSBjb250YWluaW5nIHN5c3RlbSByZXNvdXJjZXMuCgpGcmkgRGVjIDIyIDExOjI0OjM5IEdNVCAxOTk1ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KCgkqIFt3aW4zMi9maWxlLmNdIFt3aW4zMi9tZW1vcnkuY10KICAgICAgICBVbml4d2FyZSBkb2Vzbid0IGhhdmUgTUFQX0FOT04gaWZkZWZlZCBvdXQgZm9yIG5vdy4KCgkqIFttaXNjL2Rvc19mcy5jXQogICAgICAgIERPU19HZXREb3NGaWxlTmFtZSBkaWRuJ3QgdHJ1bmNhdGUgcGF0aHMgc3RhcnRpbmcgLi8gcHJvcGVybHkuCgoJKiBbdG9vbHMvYnVpbGQuY10KCVByb2R1Y2VzIGFzc2VtYmx5IGNvZGUgdGhhdCB3b3JrcyB3aXRoIHRoZSB1bml4d2FyZSBhc3NlbWJsZXIuCgpXZWQgRGVjIDIwIDIyOjIyOjI5ICswMTAwIDE5OTUgIE1vcnRlbiBXZWxpbmRlciA8dGVycmFAZGlrdS5kaz4KCgkqIFttaXNjZW11L2luc3RyLmNdCglJTlNUUl9HZXRPcGVyYW5kQWRkcjogMTYtYml0IGFkZHJlc3NlcyBzaG91bGQgYmUgbWFza2VkIHRvIDE2IGJpdHMuCgoJKiBbbWlzYy9kb3NfZnMuY10KCURPU19yZWFkZGlyIHNob3VsZCBhbHdheXMgcmV0dXJuIGRpcmVjdG9yaWVzLCBldmVuIGlmIHRoZXkgZG9uJ3QKIAltYXRjaCB0aGUgZmlsZSBuYW1lIG1hc2suCgpUdWUgRGVjIDE5IDE4OjAwOjAwIDE5OTUgIFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnRoLWRhcm1zdGFkdC5kZT4KCQoJKiBbbWlzYy9leGVjLmNdCglHaXZlIGFyZ3VtZW50cyB0byB3aW5oZWxwLgoKCSogW21pc2NlbXUvaW50MjEuY10KCUltcGxlbWVudGVkIEludGVycnVwdCAyMSBBWD02QzAwIEVYVEVOREVEIE9QRU4vQ1JFQVRFLgoJQ3JlYXRlZCBmdW5jdGlvbiBFeHRlbmRlZE9wZW5DcmVhdGVGaWxlLgoJR2l2ZSBmb3Igc29tZSBXaW5kb3dzOTUgaW50ZXJydXB0cyB0aGUgcmV0dXJuIHZhbHVlICdub3QKCWltcGxlbWVudGVkJy4KClN1biBEZWMgMTcgMTY6NTE6NTYgRVNUIDE5OTUgIEppbSBQZXRlcnNvbiA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+CgoJKiBbaW5jbHVkZS9rZXJuZWwzMi5oXSBbaW5jbHVkZS93aW5kb3dzLmhdCglNb3ZlZCB0aGUgdHlwZWRlZnMgZm9yIFNZU1RFTVRJTUUgYW5kIExQU1lTVEVNVElNRSBmcm9tCiAJaW5jbHVkZS9rZXJuZWwzMi5oIHRvIGluY2x1ZGUvd2luZG93cy5oIGFuZCBkZWNsYXJlZCB0aGUgbmV3IFdpbjMyCiAJQVBJIGZ1bmN0aW9ucyBTbGVlcCgpLCBHZXRMb2NhbFRpbWUoKSwgYW5kIEdldFN5c3RlbVRpbWUoKS4KICAJUmVkZWZpbmVkIElORklOSVRFIGFzIDB4RkZGRkZGRkYgaWYgV0lORUxJQjMyLgoKCSogW3JjL3JjIChuZXcgZmlsZSldCglDcmVhdGVkIHRoZSBzaGVsbCBzY3JpcHQgJ3JjJywgd2hpY2ggc2hvdWxkIHNpbXBsaWZ5IHJlc291cmNlCiAJY29tcGlsYXRpb24uCgoJKiBbd2luMzIvZW52aXJvbm1lbnQuY10KCUtsdWRnZWQgYXJvdW5kIGFuIHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gd2luZV9maWxlcy4gIFRoaXMgY2hhbmdlCiAJc2hvdWxkIGJlIGZpeGVkIHNvbWUgdGltZS4KCgkqIFt3aW4zMi90aW1lLmNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10KCUFkZGVkIHRoZSBmdW5jdGlvbnMgR2V0U3lzdGVtVGltZSgpLCBhbmQgU2xlZXAoKS4KCgkqIFttaXNjZW11L2ludDIxLmNdCglSZW5hbWVkIHN0YXRpYyBmdW5jdGlvbiBHZXRTeXN0ZW1UaW1lIHRvIElOVDIxX0dldFN5c3RlbVRpbWUgdG8KIAlhdm9pZCBjb25mbGljdHMgd2l0aCB0aGUgQVBJIGZ1bmN0aW9uIG9mIHRoZSBzYW1lIG5hbWUuCgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXQoJQWRkZWQgdGhlIFNQRk1UIGRlZmluaXRpb24gZm9yIHByaW50ZiBzdGF0ZW1lbnRzLgoKCSogW21pc2Mvc2hlbGwuY10gW2luY2x1ZGUvc2hlbGwuaF0KCUNoYW5nZWQgRVJST1JfKiBkZWZpbmVzIHRvIFNIRUxMX0VSUk9SXyosIGFzIHRoZXkgd2VyZSBjb25mbGljdGluZwogCXdpdGggdGhlIG9uZXMgaW4gaW5jbHVkZS93aW5lcnJvci5oLiAgVGhleSBzaG91bGQgcHJvYmFibHkgdXNlIHRoZQogCXZlcnNpb25zIGluIHdpbmVycm9yLmgsIGJ1dCBJJ20gbm90IGNlcnRhaW4sIGFuZCB0aGF0IGNhbiBiZSBkb25lCiAJbGF0ZXIuCgoJKiBbd2luZG93cy9tZGkuY10KCVRyYW5zbGF0ZWQgV01fTURJQUNUSVZBVEUoPywoTE9od25kLEhJaHduZCkpIG1lc3NhZ2VzIHRvCiAJV01fTURJQUNUSVZBVEUoSElod25kLExPaHduZCkgZm9yIFdJTkVMSUIzMi4gIFRoZSA/IHBhcmFtZXRlcgogCShib29sZWFuKSB3YXMgZGlzY2FyZGVkIHdpdGggdGhpcyB0cmFuc2xhdGlvbi4gIFRyYW5zbGF0ZWQgaGFuZGxlcgogCW9mIFdNX01ESVNFVE1FTlUocmVmLChsb0hNRU5VLGhpSE1FTlUpKSB0byBoYW5kbGUKIAlXTV9NRElTRVRNRU5VKGxvSE1FTlUsIGhpSE1FTlUpIG1lc3NhZ2VzIGluIFdJTkVMSUIzMiAocmVmIGFzc3VtZWQKIAlmYWxzZSwgY2FsbCBEcmF3TWVudUJhcigpIGlmIGRlc2lyZWQpLgoKCSogWyovKl0KCUdlbmVyYWwgZXhwbGljaXQgY2FzdHMgYW5kIG1vcmUgcmlnaWQgdHlwaW5nIHRvIHJlbW92ZSB3YXJuaW5ncy4KCgkqIFtpbmNsdWRlL3dpbnBvcy5oXSBbd2luZG93cy93aW5wb3MuY10KCUNoYW5nZWQgcmV0dXJuIHR5cGUgb2YgV0lOUE9TX0NoYW5nZUFjdGl2ZVdpbmRvdyB0byBCT09MLgoKCSogW2luY2x1ZGUvY29tbWRsZy5oXSBbbWlzYy9jb21tZGxnLmNdCglBZGRlZCBwcm90b3R5cGVzIGZvciBDaG9vc2VDb2xvcigpLCBDb21tRGxnRXh0ZW5kZWRFcnJvcigpLAogCUZpbmRUZXh0KCkgR2V0RmlsZVRpdGxlKCksIEdldE9wZW5GaWxlTmFtZSgpLCBHZXRTYXZlRmlsZU5hbWUoKSwKIAlQcmludERsZywgYW5kIFJlcGxhY2VUZXh0KCkuCglSZW5hbWVkIHRoZSBDb21tRGxnRXh0ZW5kRXJyb3IoKSBmdW5jdGlvbiB0byBDb21tRGxnRXh0ZW5kZWRFcnJvcigpLgoJTWFkZSBHZXRGaWxlVGl0bGUgcmV0dXJuIGEgc2hvcnQsIGFzIHBlciB0aGUgQVBJIGRlZmluaXRpb24uCgoJKiBbTWFrZWZpbGUuaW5dCglBZGRlZCBsaW5lIHRvIGNsZWFuIGFuZCBkaXN0Y2xlYW4gdGhhdCByZW1vdmVzIHRlbXBvcmFyaWVzIGZyb20KIAl0aGUgaW5jbHVkZSBkaXJlY3RvcnkuCgpTYXQgRGVjIDE2IDE5OjM5OjE0IE1FVCAxOTk1ICBTdGVmZmVuIE1vZWxsZXIgPHNtb2UwMDI0QHJ6LnVuaS1oaWxkZXNoZWltLmRlPgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUFsbW9zdCByZXdyb3RlIEVESVRfR2V0TGluZU1zZy4KClNhdCBEZWMgMTYgMTM6NTE6NDggTVNUIDE5OTUgIEFuZHJldyBUYXlsb3IgPGFuZHJld0ByaXNjYW4uY29tPgoKCSogW3dpbmRvd3MvbWRpLmNdCglGaXhlZCBNRElUaWxlKCkgYnVnIHRoYXQgb2NjdXJzIHdoZW4gMCB3aW5kb3dzIGFyZSBwcmVzZW50IG9yIGFsbAoJd2luZG93cyBhcmUgbWluaW1pemVkLgoKV2VkIERlYyAxMiAyMzozMDowMCAxOTk1ICBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50aC1kYXJtc3RhZHQuZGU+CgoJKiBbbWlzYy9wcm9maWxlLmNdCiAgICAgICAgVHJ5IGhhcmRlciB0byBmaW5kIGZpbGVzLCBlc3BlY2lhbGx5IGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4KCUxvb2sgaW4gJEhPTUUvLndpbmUgdG9vIGFuZCBjcmVhdGUgaXQgdGhlcmUgaWYgaXQgaXNuJ3QgZm91bmQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1vbiBEZWMgMTEgMTk6MDg6NTUgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1PgoKCSogW21pc2MvbHN0ci5jXQoJUmVwbGFjZWQgd2luZV9zdHJuY3B5KCkgYnkgYSAzMi1iaXQgdmVyc2lvbiBvZiBsc3RyY3B5bigpLCBzaW5jZQogCXRoZXkgZG8gdGhlIHNhbWUgam9iLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglGaXhlZCBfX2F0dHJpYnV0ZV9fKChzdGRjYWxsKSkgdG8gbWFrZSBpdCBjb21waWxlIHdpdGggZ2NjCgl2ZXJzaW9ucyB1bmRlciAyLjcuIERvZXNuJ3QgbWVhbiBpdCB3aWxsIHJ1biBPSyB0aG91Z2guLi4KClNhdCBEZWMgMDkgMTM6MjI6NTggMTk5NSAgQ2FtZXJvbiBIZWlkZSAgPGhlaWRlQGVlLnVhbGJlcnRhLmNhPgoKCSogW2luY2x1ZGUva2VybmVsMzIuaF0gW2luY2x1ZGUvd2luZXJyb3IuaF0KCUFkZGVkIGZpbGUgYXR0cmlidXRlIGRlZmluaXRpb25zIGFuZCBtb3JlIGVycm9yIGNvZGVzLgoKCSogW3dpbjMyL2Vycm9yLmNdCglBZGRlZCBzb21lIHJ1ZGltZW50YXJ5IGVycm5vLXRvLVdpbjMyIGVycm9yIGNvbnZlcnNpb24KCWNvZGUuCgoJKiBbd2luMzIvZmlsZS5jXQoJQWRkZWQgdG8gR2V0RmlsZUluZm9ybWF0aW9uQnlIYW5kbGUsIGZpbGxlZCBpbiBzb21lIGtub3duCgllcnJvciBjb2RlcywgYW5kIHN3aXRjaGVkIHRvIGRwcmludGZfd2luMzIuCgoJKiBbd2luMzIvdGltZS5jXQoJQWRkZWQgR2V0TG9jYWxUaW1lLgoKRnJpIERlYyAgOCAxNDozNzozOSAxOTk1ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglDb252ZXJ0ZWQgZnVuY3Rpb25zIG9mIHRoZSB0eXBlIExPTkcgXyhIV05ELFdPUkQsTE9ORykgdG8gdGhlIHR5cGUKCUxSRVNVTFQgXyhIV05ELFdQQVJBTSxMUEFSQU0pIHdoZXJlIG5lZWRlZC4KCgkqIFtpbmNsdWRlL2xpYnJlcy5oXQoJUmVzdHJ1Y3R1cmVkIGxpYnJlcyBwcm90b3R5cGVzIHRvIGNsb3NlciBtYXRjaCB0aGUgd2luZG93cyBBUEkuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglDaGFuZ2VkIHNldmVyYWwgQVBJIHByb3RvdHlwZXMnIHBhcmFtZXRlciB0eXBlcyBmcm9tICdzaG9ydCcgdG8gSU5ULAoJd2hpY2ggaXMgI2RlZmluZWQgYXMgc2hvcnQgaW4gdGhlIGVtdWxhdG9yLCBidXQgaXMgYSBub3JtYWwgaW50IGluCglXSU5FTElCMzIuICBBbHNvIGNoYW5nZWQgU0VHUFRSIGZyb20gRFdPUkQgdG8gdm9pZCogd2hlbiBXSU5FTElCMzIuCgkoVGhpcyBjcmVhdGVzIGEgbG90IG9mIHdhcm5pbmdzIGF0IGxpYnJhcnktY29tcGlsZSB0aW1lLCBidXQgbGVzcwoJd2FybmluZ3MgYXQgYXBwLWNvbXBpbGUgdGltZS4gIEknbGwgcmVtb3ZlIHRoZSB3YXJuaW5ncyBzb29uLikKCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUZpeGVkIHBhcmFtZXRlciBtaXNtYXRjaCBpbiBjYWxsIHRvIExJQlJFU19GaW5kUmVzb3VyY2UoKS4gIENoYW5nZWQKCXZhcmlvdXMgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBMSUJSRVNfKiBBUEkgZnVuY3Rpb25zLgoKCSogW2xvYWRlci9zaWduYWwuY10KCURlbGV0ZWQgbG9jYWwgJ2knIGZyb20gd2luX2ZhdWx0KCksIHNpbmNlIGl0IHdhcyB1bnVzZWQuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCU1pcnJvcmVkIGNoYW5nZXMgdG8gaW5jbHVkZS93aW5kb3dzLmggbWVudGlvbmVkIGFib3ZlLgoKCSogW3Rvb2xraXQvaGVsbG8zLmNdCglDaGFuZ2VkIExvYWRNZW51SW5kaXJlY3QoKSBjYWxsIHRvIExvYWRNZW51KCkgdG8gdGVzdCB0aGUgbmV3CglyZXNvdXJjZSByZWdpc3RyYXRpb24gdGVjaG5pcXVlLgoKCSogW3Rvb2xraXQvbGlicmVzLmNdCglSZW1vdmVkIGRlZmluaXRpb24gb2YgJ3N0cnVjdCByZXNvdXJjZScgYW5kIGZpeGVkIGJ1Z3MgaW4gdGhlIHJlc291cmNlCglpbXBsZW1lbnRhdGlvbi4gIEltcGxlbWVudGVkIExJQlJFU19GaW5kUmVzb3VyY2UuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJTWlycm9yZWQgY2hhbmdlcyB0byBpbmNsdWRlL3dpbmRvd3MuaCBtZW50aW9uZWQgYWJvdmUuCgpUaHUgRGVjICA3IDIzOjE1OjU2IDE5OTUgICAgIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJTE9DQUxfSGVhcEV4aXN0czogQ2hhbmdlZCBwYXJhbWV0ZXIgdG8gSEFORExFLiBGb3IgV2luZUxpYiwgcmV0dXJuIHRydWUKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglDcmVhdGVMaXN0Qm94U3RydWN0OiBJbml0aWFsaXplIEhlYXBTZWwgdG8gMCBmb3IgV2luZUxpYgoKCSogW2luY2x1ZGUvbGlzdGJveC5oXQoJY2hhbmdlIEhlYXBTZWwgZnJvbSBXT1JEIHRvIEhBTkRMRQoKCSogW2luY2x1ZGUvcmVzb3VyY2UuaF1bcmMvd2luZXJjLmNdCglzdHJ1Y3QgUmVzb3VyY2VUYWJsZTogcmVtb3ZlZAoJc3RydWN0IHJlc291cmNlOiBtb3ZlZCB0byBoZWFkZXIgZmlsZQoJYXV0b3JlZ2lzdGVyIHJlc291cmNlcyBpZiBzdXBwb3J0ZWQgYnkgY29tcGlsZXIKCgkqIFttZW1vcnkvbG9jYWwuaF0KCUxPQ0FMX0dldEhlYXA6IGV4cGVjdCBIQU5ETEUgcmF0aGVyIHRoYW4gV09SRAoJCgkqIFt0b29sa2l0L01ha2VmaWxlLmluXQoJQWRkIEFMTENGTEFHUyB0byBtYWtlIGhlbGxvMwoKCSogW3Rvb2xraXQvaGVhcC5jXQoJTG9jYWxGcmVlLCBIRUFQX0ZyZWU6IGhhbmRsZSAwIHBhcmFtZXRlciBncmFjZWZ1bGx5CgpXZWQgRGVjIDA2IDE1OjM0OjIzIDE5OTUgIEdyZWcgQ29vcGVyIDxjb29wZXJAaW1hLWluYy5jb20+CgoJKiBbbWlzYy93aW5zb2NrZXQuY10KCUZpeGVkIHRoZSBtc2dzbmQgYW5kIG1zZ3JjdiBlcnJvcnMgdGhhdCB3aW5zb2NrIHByb2dyYW1zIGdldC4KCldlZCBEZWMgMDYgMTI6NDc6MjMgTUVUIDE5OTUgU3ZlbiBWZXJkb29sYWVnZSA8c2tpbW9AZG5zLnVmc2lhLmFjLmJlPgoJCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdCglGaXhlZCBfaHJlYWQgYW5kIF9od3JpdGUgcmV0dXJuIHR5cGUKCgkqIFtpZjE2MzIvcmVsYXkzMi5jXSBbbG9hZGVyL3BlX2ltYWdlLmNdCglIYWNrZWQgbG9hZGluZyBvZiBQRS1kbGwncyBpbgoKCSogW3dpbjMyL2FkdmFwaS5jXQoJQWRkZWQgc3R1YnMgZm9yIFJlZ0NyZWF0ZUtleUV4LCBSZWdTZXRWYWx1ZUV4LCBSZWdRdWVyeVZhbHVlRXgKCgkqIFt3aW4zMi9maWxlLmNdCglBZGRlZCBzdHVicyBmb3IgT3BlbkZpbGVNYXBwaW5nLCBDcmVhdGVGaWxlTWFwcGluZywgTWFwVmlld09mRmlsZUV4CgoJKiBbd2luMzIvcHJvY2Vzcy5jXQoJQWRkZWQgc3R1YnMgZm9yIENyZWF0ZU11dGV4QSwgUmVsZWFzZU11dGV4LCBDcmVhdGVFdmVudEEsCglXYWl0Rm9yU2luZ2xlT2JqZWN0LCBEdXBsaWNhdGVIYW5kbGUsIEdldEN1cnJlbnRQcm9jZXNzCgkKTW9uIERlYyAwNCAxMzowNjozNyAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiBbaW5jbHVkZS93aW5lLmhdIFttaXNjL2xzdHIuY10KCURlZmluZSB3aW5lX3N0cm5jcHkoKS4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBwYWQgdGhlIGJ1ZmZlciB3aXRoIAoJemVyb2VzIGxpa2UgR05VIHN0cm5jcHkoKSwgd2hpY2ggbWlnaHQgYnJlYWsgc29tZSBXaW5kb3dzIHByb2dyYW1zCgl0aGF0IHBhc3MgYm9ndXMgc2l6ZSBhcmd1bWVudHMuCgoJKiBbbG9hZGVyL21vZHVsZS5jXTogR2V0TW9kdWxlRmlsZU5hbWUoKSwKCVttaXNjL2NvbW1kbGcuY106IEdldEZpbGVUaXRsZSgpLAoJW21pc2Mva2V5Ym9hcmQuY10sIFttaXNjL2xzdHIuY106IGxzdHJjcHluKCksCglbbWlzYy9vbGUybmxzLmNdLCBbbWlzYy9wcm9maWxlLmNdLCBbbXVsdGltZWRpYS9tY2lzdHJpbmcuY10sCglbbXVsdGltZWRpYS9tbXN5c3RlbS5jXSwgW29iamVjdHMvZm9udC5jXToKCVVzZSB3aW5lX3N0cm5jcHkoKSB3aGVyZSBzdHJpbmdzIGFyZSByZXR1cm5lZCB0byBXaW5kb3dzIHByb2dyYW1zLgoJCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdCglQbGF5TWV0YWZpbGUoKTogQ2xlYXIgdGhlIGhhbmRsZSB0YWJsZSBiZWZvcmUgdXNpbmcgaXQuCgoJKiBbbWlzYy9zaGVsbC5jXSBbbWlzYy9tYWluLmNdCglSZW5hbWUgU0hFTExfUmVnQ2hlY2tGb3JSb290KCkgdG8gU0hFTExfSW5pdCgpIGFuZCBjYWxsIGl0IGZyb20gbWFpbigpLgoJCgkqIFttaXNjL3Byb2ZpbGUuY10KCWxvYWQoKTogTmVlZCB0byBoYW5kbGUgY29tbWVudHMuCgkKCSogW3Rvb2xraXQvbGlicmVzLmNdCglNYWtlIGl0IGNvbXBpbGUuCgkKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglVc2UgTUFLRV9TRUdQVFIgbWFjcm8gaW4gdHdvIHBsYWNlcyB3aGVyZSBhIHVzZXIgaGVhcCBibG9jayB1c2VkCgl0byBiZSBhbGxvY2F0ZWQgaW5zdGVhZC4KClNhdCBEZWMgMDIgMTY6NDM6NDMgMTk5NSBSYW1vbiBHYXJjaWEgPHJhbW9uQGllMy5jbHVicy5ldHNpdC51cG0uZXM+CgoJKiBbd2luZG93cy93aW5wb3MuY10KCUluIGZ1bmN0aW9uIFNldFdpbmRvd1BvczogZG8gbm90IHJlZHJhdyB0aGUgcGFyZW50IG9mCglhIHdpbmRvdyBpZiB0aGUgc3BlY2lmaWVkIHdpbmRvdyBpcyBwbGFjZWQgb24gdGhlIHRvcC4KCVRoaXMgYXZvaWRzIHRoYXQgU2hvd1dpbmRvdyhod25kLDEpIGhpZGVzIGh3bmQgaW5zdGVhZAoJb2Ygc2hvd2luZyBpdC4KClNhdCBEZWMgMDIgMTE6MDA6MDAgMTk5NSBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL3Njcm9sbC5jXQoJTm93IGl0IGNhbiBzY3JvbGwgY2hpbGRyZW4gYWxvbmcgd2l0aCB0aGUgY2xpZW50IHJlZ2lvbiBvZiBwYXJlbnQgCiAgICAgICAgd2luZG93LiBUcmllZCB0byBvcHRpbWl6ZSB1cGRhdGUgcmVnaW9uIGNhbGN1bGF0aW9uLiAKCgkqIFt3aW5kb3dzL21kaS5jXQoJU2Nyb2xsQ2hpbGRyZW4gZnVuY3Rpb24sIG1vcmUgb3RoZXIgZmVhdHVyZXMgYWRkZWQuIEJhc2ljYWxseQoJYSByZXdyaXRlLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdIFt3aW5kb3dzL2ZvY3VzLmNdCglSZWltcGxlbWVudGVkIHdpbmRvdyBhY3RpdmF0aW9uIGFuZCBmb2N1cyBoYW5kbGluZy4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQWRkZWQgbmV3IGZsYWcgV0lOX05DQUNUSVZBVEVELgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXSBbbG9hZGVyL3Rhc2suY10KCVNtYWxsIGNoYW5nZXMgKHRvIG1haW50YWluIGxpbmtlZCBsaXN0IG9mIG1lc3NhZ2UgcXVldWVzKS4KCldlZCBOb3YgMjkgMTU6NTE6NDggMTk5NSAgRGFuaWVsIFNjaGVwbGVyICA8ZGFuaWVsQHNoZXAxMy53dXN0bC5lZHU+CgoJKiBbaW5jbHVkZS9vcHRpb25zLmhdIFttaXNjL21haW4uY10gW3dpbmRvd3MvZGVmd25kLmNdCgkgIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbd2luZG93cy93aW4uY10gW1dpbmUubWFuXQoJSW1wbGVtZW50ZWQgYSAtbWFuYWdlZCBvcHRpb24gdG8gcmVwbGFjZSB0aGUgc3RhbmRhcmQgV2luZG93cwoJZnJhbWUgb2YgdG9wLWxldmVsIHdpbmRvd3Mgd2l0aCB0aGUgd2luZG93IG1hbmFnZXIncyBkZWNvcmF0aW9ucy4KCUlmIGEgdG9wLWxldmVsIHdpbmRvdyBtYWtlcyBpdHMgb3duIGZyYW1lLCB0aGlzIHdpbGwgc3RpbGwgc2hvdwoJdXAsIGluc2lkZSB0aGUgd2luZG93IG1hbmFnZXIgZGVjb3JhdGlvbnMgKEkgYmVsaWV2ZSBjdGwzZHYyLmRsbAoJd291bGQgZG8gdGhpcywgYWx0aG91Z2ggSSBjYW4ndCB0ZXN0IHRoaXMpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgTm92IDIxIDE4OjQ5OjEwIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdT4KCgkqIFtjb25maWd1cmUuaW5dIFtNYWtlZmlsZV0gW21pc2MvZG9zX2ZzLmNdCglHb3QgcmlkIG9mIGF1dG9jb25mLmggZmlsZS4KCgkqIFtkZWJ1Z2dlci9kYmcueV0KCU1vcmUgbG9naWNhbCBiZWhhdmlvciB1cG9uIHN5bnRheCBlcnJvcnMuCgoJKiBbaW5jbHVkZS9ob29rLmhdIFt3aW5kb3dzL2hvb2suY10KCUNoYW5nZWQgaG9vayBzdHJ1Y3R1cmUgYW5kIHJld3JvdGUgbW9zdCBvZiB0aGUgaG9vayBmdW5jdGlvbnMgZm9yCgliZXR0ZXIgY29tcGF0aWJpbGl0eSwgYmFzZWQgb24gaW52ZXN0aWdhdGlvbnMgYnkgQWxleCBLb3JvYmthLgoKCSogW2luY2x1ZGUvbWVzc2FnZS5oXSBbd2luZG93cy9tZXNzYWdlLmNdCglBZGRlZCBob29rcyB0byBtZXNzYWdlIHF1ZXVlIHN0cnVjdHVyZSBhbmQgbWFkZSB0aGUgc3RydWN0dXJlCglsYXlvdXQgV2luZG93cy1jb21wYXRpYmxlLgoJQWRkZWQgc3VwcG9ydCBmb3IgV0hfTU9VU0UsIFdIX0tFWUJPQVJELCBXSF9IQVJEV0FSRSBhbmQKCVdIX0pPVVJOQUxSRUNPUkQgaG9va3MuCgoJKiBbbWlzYy9tYWluLmNdCglBZGRlZCBjb21tYW5kLWxpbmUgb3B0aW9uIGZvciBjaGFuZ2luZyB0aGUgbGFuZ3VhZ2UgYXQgcnVuLXRpbWUKIAkobm90IGltcGxlbWVudGVkIHlldCksIGJhc2VkIG9uIGEgc3VnZ2VzdGlvbiBmcm9tIE1pY2hhZWwgUGF0cmEuCgoJKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdCglGaXhlZCBzaWxseSBTRUdQVFIgYnVnIGluIER1bXBJY29uKCkuCgpNb24gTm92IDIwIDIyOjIyOjIyIDE5OTUgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10gW2NvbnRyb2xzL2NvbWJvLmNdIFtpbmNsdWRlL2xpc3Rib3guaF0KCVBhcnRpYWwgaW1wbGVtZW50YWlvbiBvZiBMQlNfRVhURU5ERURTRUwgc3R5bGUsCgl5ZXQgbW9yZSB1cGRhdGVzIGZvciBkcmFnICYgZHJvcCBzdXBwb3J0LiBOb3cgd29ya3MuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCU1vcmUgbWVzc2FnZSBoYW5kbGVycy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJRHJhZ09iamVjdCwgRHJhZ0RldGVjdCwgQW55UG9wdXAgZnVuY3Rpb25zLiAKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglNb3JlIGtsdWRneSBmaXhlcyAoV01fLi4uVE9JVEVNLCBldGMuKS4KCgkqIFtvYmplY3RzL2N1cnNvcmljb24uY10gW29iamVjdHMvb2VtYml0bWFwLmNdCglJY29uVG9DdXJzb3Igc2tlbGV0b24sIHBhdGNoIGZvciBPQk1fTG9hZEN1cnNvckljb24gdG8gaGFuZGxlIG5ldwoJY3Vyc29yLgoKCSogW2luY2x1ZGUvYml0bWFwcy9vY3IqXQoJTmV3IE9FTSBjdXJzb3JzLgoKTW9uIE5vdiAyMCAxMTowNToyMCBFU1QgMTk5NSAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KCgkqIFt0b29sa2l0L2hlYXAuY10KCVN3YXBwZWQgZmxhZ3MgYW5kIHNpemUgYXJndW1lbnRzIHRvIExvY2FsUmVhbGxvYyBhcyBwZXIgY2hhbmdlcyBpbgoJbWVtb3J5L2xvY2FsLmMgYnkgV2lsbGlhbSBNYWdybyBpbiBwcmV2aW91cyByZWxlYXNlLgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KCVJlaW5zdGF0ZWQgdGhlICNkZWZpbmUncyBmb3IgJ21pbicgYW5kICdtYXgnLCBzaW5jZSB0aGV5J3JlIHBhcnQgb2YKCXRoZSBXaW5kb3dzIEFQSS4gIEkgcmVhbGx5IGRvbid0IHRoaW5rIGl0J3MgYSB3aXNlIGlkZWEsIHNvIEkgcHV0CglhICcjaWZuZGVmIERPTlRfREVGSU5FX21pbl9BTkRfbWF4JyBhcm91bmQgdGhlbS4gIEkgdGhpbmsgdGhlIGFjdHVhbAoJV0lORSBjb2RlIHNob3VsZCBuZXZlciB1c2UgdGhlc2UgKGl0IHNob3VsZCB1c2UgJ01JTicgYW5kICdNQVgnCglpbnN0ZWFkKS4KCgkqIFtsb2FkZXIvKl0KCVB1dCAnI2lmbmRlZiBXSU5FTElCJyBhcm91bmQgbWFueSB0aGluZ3MgdGhhdCBXSU5FbGliIHNob3VsZCBub3QgbmVlZC4KCgkqIFtjb250cm9scy9lZGl0LmNdCglUb29rIG91dCBtYW55ICcjaWYgZGVmaW5lZChXSU5FTElCKScgc2VjdGlvbnMgd2l0aCB0aGUgYXNzb2NpYXRlZAoJY29tbWVudCAndGVtcG9yYXJ5IGZpeCwgdW50aWwgTG9jYWwgbWVtb3J5IGlzIGNvcnJlY3RseSBpbXBsZW1lbnRlZCBpbgoJV0lORUxJQicsIHNpbmNlIHRoZSBlZmZlY3RpdmUgdHJhbnNsYXRpb25zIGFyZSBub3cgaW4gCgl0b29sa2l0L21pc2NzdHVicy5jLgoJVG9vayBvdXQgdGhlICNpZm5kZWYncyBJIHB1dCBpbiBFRElUX0NsZWFyVGV4dC4gIFdob2V2ZXIgbW9kaWZpZWQgdGhpcwoJZmlsZSBmaXhlZCAob3IgYXQgbGVhc3QgcG9zdHBvbmVkKSB0aGUgYnVnIEkgaGFkIGVuY291bnRlcmVkLgoKCSogW2xvYWRlci90YXNrLmNdCglQdXQgYW4gI2lmZGVmIGluIFRBU0tfQ3JlYXRlVGFzaygpIHRoYXQgaGFyZHdpcmVzIHRoZSBjdXJyZW50IGRyaXZlIHRvCglDOiAgVGhpcyB3aWxsIHByb2JhYmx5IGNhdXNlIGEgbG90IG9mIHRyb3VibGUgaWYgdGhpcyBjaGFuZ2UgaXMKCWZvcmdvdHRlbiBpbiB0aGUgZnV0dXJlLCBidXQgaXQgd2lsbCBsZXQgdGhpbmdzIGxpa2UgdGhlIE9wZW5GaWxlTmFtZQoJZGlhbG9nIHdvcmsgZm9yIG5vdy4KCgkqIFt0b29sa2l0L2xpYnJlcy5jXSBbdG9vbGtpdC9NYWtlZmlsZS5pbl0gW3Rvb2xraXQvTWFrZWZpbGVdCgkgIFtpbmNsdWRlL2xpYnJlcy5oXQoJTWFkZSBuZXcgbGlicmVzLmMgZmlsZSwgd2hpY2ggd2lsbCBjb250YWluIGZ1bmN0aW9ucyBmb3Igc3VwcG9ydGluZwoJYWNjZXNzaW5nIHJlc291cmNlcyBieSBuYW1lIGluIFdJTkVsaWIuICAnd2luZXJjJyB3aWxsIG5lZWQgdG8gYmUKCWNoYW5nZWQuCgoJKiBbdG9vbGtpdC9oZWFwLmNdCglSZWZpbmVkIG1lbW9yeSByb3V0aW5lcyB0byBhbGxvdyBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBMb2NhbEFsbG9jCglhbmQgR2xvYmFsQWxsb2MgYW5kIGJldHdlZW4gTG9jYWxTaXplIGFuZCBHbG9iYWxTaXplLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCglEZWZpbmVkIHRoZSBHZXRDdXJyZW50VGltZSByb3V0aW5lIGluIHdpbmRvd3MvbWVzc2FnZS5jLCBhbmQgcmVtb3ZlZAoJdGhlICNkZWZpbmUgaW4gd2luZG93cy5oLgoKTW9uIE5vdiAyMCAwMDozNjo0MiBNRVQgMTk5NSBTdmVuIFZlcmRvb2xhZWdlIDxza2ltb0BkbnMudWZzaWEuYWMuYmU+CgoJKiBbKi8qXQoJQWRkZWQgbmV3IGRlYnVnZ2luZyB0eXBlIERFQlVHX1dJTjMyIGFuZCBERUJVR19FTlYuCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJQWRkZWQgdW5kb2N1bWVudGVkIEdldEV4cFdpblZlci4KCgkqIFt0b29scy9idWlsZC5jXQoJUHJldmlvdXMgY29kZSBkaWRuJ3QgcG9wIHBvc3NpYmx5IGNoYW5nZWQgJWVzaSwgJWVkaSBhbmQgJWVkeAoJZnJvbSB0aGUgc3RhY2suCgkKCSogW3dpbjMyL2FkdmFwaS5jXQoJQWRkZWQgR2V0VXNlck5hbWVBLgoKCSogW3dpbjMyL2NvZGVfcGFnZS5jXQoJQWRkZWQgc3R1YiBmb3IgTXVsdGlCeXRlVG9XaWRlQ2hhci4KCgkqIFt3aW4zMi9jb25zb2xlLmNdCglBZGRlZCBTZXRDb25zb2xlQ3RybEhhbmRsZXIgc3R1Yi4KCgkqIFt3aW4zMi9maWxlLmNdCglBZGRlZCBSZWFkRmlsZSBDcmVhdGVGaWxlQSBHZXRGaWxlSW5mb3JtYXRpb25CeUhhbmRsZSBzdHVicy4KCUFkZGVkIENsb3NlSGFuZGxlLgoKCSogW3dpbjMyL21lbW9yeS5jXQoJQ2hhbmdlZCBWaXJ0dWFsQWxsb2MgYW5kIFZpcnR1YWxGcmVlLgoKCSogW3dpbjMyL3Byb2Nlc3MuY10KCUFkZGVkIEV4aXRQcm9jZXNzLgoKU3VuIE5vdiAxOSAxNzo1NDo0MiAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglGaXhlZCBhIGZldyBicm9rZW4gc3RydWN0dXJlIGRlZmluaXRpb25zLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJRmluZFJlc291cmNlKCk6IE5lZWQgdG8gY2hlY2sgZm9yICcjeHh4JyBzdHJpbmdzIGhlcmUuCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJRmluZE5leHQoKTogUmV0dXJuIE1TLURPUyBmaWxlbmFtZXMgdXBwZXJjYXNlLgoKCSogW29iamVjdHMvY3Vyc29yaWNvbi5jXQoJQ3JlYXRlSWNvbigpLCBDcmVhdGVDdXJzb3IoKTogQWRkZWQgbWlzc2luZyBlbGVtZW50IHRvIENVUlNPUklDT05JTkZPCglpbml0aWFsaXplcnMuCgkKCSogW21pc2MvZmlsZS5jXQoJX2xvcGVuKCk6IEZpbGVzIG9wZW5lZCBpbiBPRl9XUklURSBtb2RlIGFyZSB0cnVuY2F0ZWQuCglPcGVuRmlsZSgpOiBJZ25vcmUgT0ZfUkVBRC9PRl9XUklURS9PRl9SRUFEV1JJVEUgd2hlbiBmaWxlcyBhcmUKCWNyZWF0ZWQ7IHVzZSByZWFkL3dyaXRlIG1vZGUuCgkKCSogW21pc2MvcHJvZmlsZS5jXQoJbG9hZCgpOiBSZXdyaXR0ZW4uCgkKCSogW21pc2MvY29tbWRsZy5jXQoJRml4ZWQgYmFkIGNhbGwgdG8gc3RybmNweSgpIHRoYXQgc21hc2hlZCB0aGUgc3RhY2suCgoJKiBbY29udHJvbHMvY29tYm8uY10gW3dpbmRvd3Mvd2lucG9zLmNdIFttZW1vcnkvc2VsZWN0b3IuY10KCU9wZXJhdG9yIHByZWNlZGVuY2UgZml4ZXMuIFBlb3BsZSB3aG8gdXNlIGdjYyAyLjcuMSBkb24ndCBuZWVkIGEKCWRlYnVnZ2VyIDotKQoJCgkqIFtpZjE2MzIvZ2RpLnNwZWNdIFtvYmplY3RzL3BhbGV0dGUuY10KCUFkZCBSZXNpemVQYWxldHRlKCkgYW5kIEFuaW1hdGVQYWxldHRlKCkgc3R1YnMuIFRoZXkgZG9uJ3QgZG8gYW55dGhpbmcsCglidXQgc29tZXRpbWVzIHRoYXQncyBnb29kIGVub3VnaC4KCkZyaSBOb3YgMTcgMDk6MTA6MzUgR01UIDE5OTUgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgoKCSogW2luY2x1ZGUvd2luZS5oXSBbaW5jbHVkZS9yZWdpc3RlcnMuaF0gW2luY2x1ZGUvd2luc29jay5oXQogICAgICAgIEFkZGVkIGRlZmluaXRpb25zIGZvciBVbml4d2FyZS4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdIFttaXNjL2NvbW0uY10gW21pc2Mvd2luc29ja2V0LmNdCglNaXNjLiBmaXhlcyBmb3IgVW5peHdhcmUuCgoJKiBbbG9hZGVyL3Rhc2suY10KICAgICAgICBNYWRlIGFzc2lnbmVtdHMgdG8gY29udGV4dCBpbiBJbml0VGFzayBmb3IgcmVnaXN0ZXJzIHVzZSB0aGUgbWFjcm9zCiAgICAgICAgZnJvbSByZWdpc3RlcnMuaCB0byBtYWtlIHRoZW0gbW9yZSBwb3J0YWJsZS4gKE5lZWRlZCBmb3IgVW5peHdhcmUpCgoJKiBbdG9vbHMvYnVpbGQuY10KCUZpeGVkIHJlZ2lzdGVyIGFjY2VzIHJvdXRpbmVzIHRvIHdvcmsgb24gVW5peHdhcmUuIEJpdCBncnViYnkgYnV0CiAJaXQgc2VlbXMgdG8gd29yay4KCgkqIFtjb250cm9scy9lZGl0LmNdCglFRElUX1dNX05DQ3JlYXRlIGFsbG9jYXRlcyBsb2NhbCBoZWFwIGlmIGhhc24ndCBiZWVuIHByZXZpb3VzbHkKCWFsbG9jYXRlZC4KCQoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJbWtkaXIgbm93IGNyZWF0ZXMgZGlyZWN0b3J5IHdpdGggcGVybWlzc2lvbiB0byBhY2Nlc3MgaXQuCgoJKiBbbWlzYy9kb3NfZnMuY10KCW1rZGlyIG5vdyBjcmVhdGVzIGRpcmVjdG9yeSB3aXRoIHBlcm1pc3Npb24gdG8gYWNjZXNzIGl0LgoJRE9TX29wZW5kaXIgbm93IHVzZXMgbGlua2VkIGxpc3Qgb2YgZGlyZW50cyB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIAoJcmVhbGxvYyBjaGFuZ2luZyBhZGRyZXNzIG9mIG1hbGxvY2VkIG1lbW9yeS4KClRodSBOb3YgMTYgMTI6NDc6MTMgMTk5NSAgTWljaGFlbCBQYXRyYSAgPHBhdHJhQGl0cDEuUGh5c2lrLlRVLUJlcmxpbi5ERT4KCgkqIFtjb250cm9scy9tZW51LmNdCglNRU5VX0NhbGNJdGVtU2l6ZSgpOiBGaXhlZCBoYW5kbGluZyBvZiBlbXB0eSBtZW51IGl0ZW1zLgoKU2F0IE5vdiAxMSAyMTo0Njo1NCAxOTk1ICBIYW5zIGRlIEdyYWFmZiAgPGdyYWFmZkB0d2k3Mi50d2kudHVkZWxmdC5ubD4KCgkqIFttaXNjL2ZpbGUuY10KCUluIE9wZW5GaWxlLCB1bmxpbmsgc2hvdWxkIGJlIGRvbmUgb24gdGhlIHVuaXggZmlsZW5hbWUuCgpTYXQgTm92IDExIDE2OjQzOjI5IDE5OTUgIENhbWVyb24gSGVpZGUgIChoZWlkZUBlZS51YWxiZXJ0YS5jYSkKCiAgICAgICAgKiBbaW5jbHVkZS9oYW5kbGUzMi5oXQogICAgICAgIE5ldyBoZWFkZXIgZmlsZSBjb250YWluaW5nIGludGVybmFsIFdpbjMyIGtlcm5lbCBoYW5kbGUKICAgICAgICBpbmZvcm1hdGlvbi4KCiAgICAgICAgKiBbd2luMzIvZmlsZS5jXQogICAgICAgIEFkZGVkIFJlYWRGaWxlLCBDcmVhdGVGaWxlLCBhbmQgQ2xvc2VGaWxlSGFuZGxlLCBhbmQgZGlkCiAgICAgICAgc29tZSByZW9yZ2FuaXppbmcgdG8gbWF0Y2ggdGhlIG5ldyBoYW5kbGUgYWxsb2NhdGlvbiBzY2hlbWUuCgogICAgICAgICogW3dpbjMyL2luaXQuY10KICAgICAgICBBZGRlZCBDbG9zZUhhbmRsZSBhbmQgdGhlIGNyZWF0aW9uIG9mIHN0YW5kYXJkIEkvTyBoYW5kbGVzLgoKICAgICAgICAqIFt3aW4zMi9vYmplY3RfbWd0LmNdCiAgICAgICAgTmV3IG1vZHVsZSBmb3IgYWxsb2NhdGluZyBhbmQgZnJlZWluZyBXaW4zMiBrZXJuZWwgaGFuZGxlcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRnJpIE5vdiAgMyAyMDowODoxNyAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+CgoJKiBbY29uZmlndXJlLmluXQoJQXR0ZW1wdCB0byBjaGVjayBmb3IgLWxpMzg2IG9uIE5ldEJTRC4gUGxlYXNlIHRlc3QgdGhpcy4KCk1vbiBPY3QgMzAgMTI6NDA6MzIgRVNUIDE5OTUgIEppbSBQZXRlcnNvbiA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+CgoJKiBbKi8qXQoJRWxpbWluYXRlZCB2YXJpb3VzIHdhcm5pbmdzIHdpdGggZWl0aGVyIGV4cGxpY2l0IGNhc3RzIG9yIG1vcmUKCWFjY3VyYXRlIHZhcmlhYmxlL3BhcmFtZXRlciBkZWNsYXJhdGlvbnMgKGUuZy4gSU5UIGluc3RlYWQgb2Ygc2hvcnQKCW9yIFdPUkQpLgoJQ2hhbmdlZCBtYWNyb3MgJ21pbicgYW5kICdtYXgnIHRvICdNSU4nIGFuZCAnTUFYJywgc2luY2UgdGhleSdyZQoJbWFjcm9zLgoKCSogW2NvbnRyb2xzL2VkaXQuY10gW3dpbmRvd3MvZGVmZGxnLmNdCglBZGRlZCAnI2lmZGVmIFNVUEVSRkxVT1VTX0ZVTkNUSU9OUycgd3JhcHBlcnMgYXJvdW5kIGZ1bmN0aW9uCglkZWZpbml0aW9uIG9mIEVESVRfS2V5VlNjcm9sbERvYywgRURJVF9UZXh0TGluZU51bWJlciwgYW5kCglERUZETEdfRmluZERlZkJ1dHRvbiB0byBhdm9pZCB3YXJuaW5ncy4KCgkqIFtjb250cm9scy9idXR0b24uY10gW2NvbnRyb2xzL3Njcm9sbC5jXSBbd2luZG93cy9kZWZ3bmQuY10KCSAgW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy9ub25jbGllbnQuY10KCUNvbnZlcnRlZCBNQUtFUE9JTlQgbWFjcm8gY2FsbCB0byBtYW51YWwgY29udmVyc2lvbi4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUZvciBXSU5FTElCMzIsIHN0cnVjdHVyZXMgUE9JTlQsIFNJWkUsIGFuZCBSRUNUIGhhdmUgTE9ORyBtZW1iZXJzCglpbnN0ZWFkIG9mIElOVC4gIFRoaXMgYWxzbyBpbnZhbGlkYXRlcyB0aGUgbWFjcm8gTUFLRVBPSU5UKCksIHdoaWNoCglpcyBub3Qgc3VwcG9ydGVkIGluIFdpbjMyLiAgQWxzbyBkZWZpbmVkIHRoZSBQT0lOVFMgc3RydWN0dXJlIChTSE9SVAoJbWVtYmVycykgYW5kIHRoZSBNQUtFUE9JTlRTIG1hY3JvLgoKCSogW21pc2MvY29tbWRsZy5jXQoJQ2hhbmdlZCBhIGxvdCBvZiAnc3RyY3B5JyBjYWxscyB0byAnc3RybmNweScgY2FsbHMuICBJJ20gZGVzcGVyYXRlIHRvCglmaW5kIHRoaXMgbWVtb3J5IGJ1ZywgYW5kIHRoaXMgc2hvdWxkIGJlIGRvbmUgYW55d2F5LgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCVdlbGwsIHRoZSBhbHRlcmF0aW9uIG1lbnRpb25lZCBhYm92ZSBkaWRuJ3QgZG8gaXQsIGJ1dCAjaWZkZWYnaW5nIG91dAoJYSBmZXcgbGluZXMgaW4gRURJVF9DbGVhclRleHQgZGlkLiAgVGhpcyBsZWFkcyB0byBidWdzLCBidXQgZm9yIG5vdywKCWl0J3MgYmV0dGVyIHRoYW4gYml6emFyZSBtZW1vcnkgdHJvdWJsZXMuCgoJKiBbdG9vbGtpdC9taXNjc3R1YnMuY10KCVJlbW92ZWQgd2FybmluZyBtZXNzYWdlcyBpbiBHTE9CQUxfQ3JlYXRlQmxvY2soKSwgR0xPQkFMX0ZyZWVCbG9jaygpLAoJYW5kIFJFTEFZMzJfR2V0RW50cnlQb2ludCgpLiAgVGhlc2UgYXJlIHRoZSBtb3N0IHBvcHVsYXIgd2FybmluZ3MsIGFuZAoJdGhlaXIgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBzZWVtcyBmaW5lLgoKU2F0IE9jdCAyOCAwOTozOToxOCAxOTk1ICBKb2NoZW4gS2FycmVyIDxjaXAzMDdAd3BheDAxLlBoeXNpay5VbmktV3VlcnpidXJnLkRFPgoKCSogW29iamVjdHMvY3Vyc29yaWNvbi5jXQoJRml4IGZvciAiYnJva2VuIiBYIHNlcnZlcnMgdGhhdCBpbnZlcnQgbWFza2VkIGN1cnNvciBjb2xvcnMuCgpGcmkgT2N0IDI3IDE5OjI3OjIxIDE5OTUgIEFsZXggS29yb2JrYSAgPGFsZXhAcGhtNi5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJUmVtb3ZlIHVubmVjZXNzYXJ5IGl0ZW1zIGZyb20gdGhlIHN5c3RlbSBtZW51LgoKVGh1IE9jdCAyNiAwNTowMzowMyBNRVQgMTk5NSAgUGhpbGlwcGUgRGUgTXV5dGVyIDxwaGRtQGluZm8udWNsLmFjLmJlPgoKCSogW29iamVjdHMvY29sb3IuY10gW29iamVjdHMvcGFsZXR0ZS5jXQoJTWFrZSBHZXROZWFyZXN0Q29sb3IgcmV0dXJuIGEgUkdCIHZhbHVlIGluc3RlYWQgb2YgYSBwaXhlbCB2YWx1ZS4KCldlZCBPY3QgMjUgMjM6MzM6MzkgMTk5NSAgICBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2NvbnRyb2xzL2Rlc2t0b3AuY11bY29udHJvbHMvbWVudS5jXVtpbmNsdWRlL21lbnUuaF0KCUNoYW5nZWQgV09SRCBwYXJhbWV0ZXJzIHRvIFVJTlQgcGFyYW1ldGVycy4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglNYWRlIFVJTlQgMzJiaXQgZm9yIFdJTkVMSUIuCgoJKiBbbG9hZGVyL21haW4uY10KCURpc2FibGVkIFJFTEFZMzJfSW5pdCBhbmQgTU9EVUxFX0luaXQgZm9yIFdJTkVMSUIuCgoJKiBbbWlzYy9tYWluLmNdCglBc3N1bWUgQ1BVMzg2IGZvciBXSU5FTElCLgoKCSogW3JjL3dpbmVyY10KCWFkZF9wb3B1cDogc2V0IE1GX1BPUFVQIGZsYWcgb24gbWVudSBpdGVtLgoKCSogW3Rvb2xraXQvTWFrZWZpbGUuaW5dW3Rvb2xraXQvaGVsbG8zLmNdW3Rvb2xraXQvaGVsbG8zcmVzLmNdCglBZGQgcmVzb3VyY2UgZGVtbyBoZWxsbzMgZm9yIFdJTkVMSUIuCglOZXcgZmlsZSBSRUFETUUucmVzb3VyY2VzLgoKCSogW3Rvb2xraXQvbWlzY3N0dWJzLmNdCglBZGQgYSBjYXNlIGZvciAxNy4KClR1ZSBPY3QgMTcgMTU6MTM6MTAgSVNUIDE5OTUgIEl0YWkgTmFoc2hvbiA8bmFoc2hvbkB2bmV0LmlibS5jb20+CgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJRG8gbm90IGFwcGVuZCAuZXhlIGlmIHRoZSBmaWxlIG5hbWUgYWxyZWFkeSBoYXMgYW4gZXh0ZW5zaW9uLgoKCSogW21pc2MvcHJvZmlsZS5jXQoJQXZvaWQgY3JlYXRpbmcgYSBmaWxlIHdpdGggYSBqdW5rIG5hbWUgaWYgYSAuaW5pIGZpbGUgZG9lcyBub3QKCWV4aXN0LgoKCSogW2lmMTYzMi9nZGkuc3BlY10gW2lmMTYzMi91c2VyLnNwZWNdIFtpZjE2MzIvZHVtbXkuY10KCUFkZGVkIGEgbG90IG9mIGR1bW15IHN0dWJzIGZvciBXaW5kb3dzIEhlYnJldyB2ZXJzaW9uLgoKVHVlIE9jdCAxNyAwMTowMzoyNCAxOTk1IFdpbGxpYW0gTWFncm8gPHdtYWdyb0B0Yy5jb3JuZWxsLmVkdT4KCgkqIFtjb250cm9scy9idXR0b24uY10KCUZpeCBmb3IgYnV0dG9ucyB3aXRoIG5vIGxhYmVsLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdW2NvbnRyb2xzL2xpc3Rib3guY10KCUZpeGVzIGZvciBzY3JvbGxiYXIgcG9zaXRpb25pbmcuICBOb3cgZGlzYXBwZWFycyBjb3JyZWN0bHkKCWZvciBzaG9ydCBsaXN0cy4KCgkqIFtjb250cm9scy9lZGl0LmNdCglIYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZGlmZmVyZW50bHkgd2hlbiBidWlsZGluZyBhcyBsaWJyYXJ5LgoKCSogW2NvbnRyb2xzL3N0YXRpY10KCURvbid0IGRlc3Ryb3kgb2xkIGljb24gYmVmb3JlIGRyYXdpbmcgbmV3IGljb24uIChGaXhlcyBsYW5kc2NhcGUvCglwb3J0cmFpdCB0b2dnbGUgaWNvbiBpbiBwcmludCBkaWFsb2cuKQoKCSogW2lmMTYzMi9nZGkuc3BlY10KCU5ldyBmdW5jdGlvbnMgU2V0TWV0YUZpbGVCaXRzIGFuZCBHZXRNZXRhRmlsZUJpdHMKCgkqIFtpbmNsdWRlL3N5c21ldHJpY3MuaF0gW3dpbmRvd3Mvc3lzbWV0cmljcy5jXQoJQWRkIHN1cHBvcnQgZm9yIEdldFN5c3RlbU1ldHJpY3MoU01fQ01FVFJJQ1MpID09IFNNX0NNRVRSSUNTCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglNRVRBX0VYVFRFWFRPVVQsIG5vdCBNRVRBX1NFVFRFWFRPVVQKCWRlZmluZSBHZXRDdXJyZW50VGltZSBhcyBHZXRUaWNrQ291bnQgKGZvciB3aW5lIGxpYnJhcnkpCgoJKiBbbG9hZGVyL21haW4uY10KCURvbid0IGluaXRpYWxpemUgYnVpbHQtaW4gbW9kdWxlcyBpbiB3aW5lIGxpYnJhcnkKCgkqIFttZW1vcnkvbG9jYWwuY10KCUxvY2FsUmVBbGxvYyB3YXMgZGVmaW5lZCBpbmNvcnJlY3RseS4gU3dhcCBmbGFncyBhbmQgc2l6ZSBhcmd1bWVudHMuCgoJKiBbbWlzYy9tYWluLmNdCglBbHdheXMgcmVwb3J0IENQVVRZUEU9NCB0byB3aW5lIGxpYnJhcnkuCgoJKiBbb2JqZWN0cy9kaWIuY10KCVJMRTggaW1hZ2VzIHdlcmUgbWlzc2luZyB0b3AgbGluZSB3aGVuIGRlY29tcHJlc3NlZC4KCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdCglTZXRNZXRhRmlsZUJpdHMgYW5kIEdldE1ldGFGaWxlQml0cyBpbXBsZW1lbnRlZC4gIFdvcmtzIHdoZW4gY2FsbGVkCglmcm9tIHdpbmhlbHAuICBNb3JlIHRlc3RpbmcgbmVlZGVkLiAgVmFyaW91cyBtZW1vcnkgbGVha3MgcGx1Z2dlZC4KCVZhcmlvdXMgb3RoZXIgYnVnIGZpeGVzLiAgTmV3IG1ldGFmaWxlIG9wZXJhdGlvbnMgYWRkZWQgaW4KCVBsYXlNZXRhRmlsZVJlY29yZDogQ3JlYXRlUGFsZXR0ZSwgU2V0VGV4dEFsaWduLCBTZWxlY3RQYWxldHRlLAoJU2V0TWFwcGVyRmxhZ3MsIFJlYWxpemVQYWxldHRlLCBFeHRUZXh0T3V0LCBFc2NhcGUuICBUZXN0aW5nIG5lZWRlZC4KCgkqIFt0b29sa2l0L2hlYXAuY10KCUxvY2FsVW5Mb2NrIGNoYW5nZWQgdG8gTG9jYWxVbmxvY2sKClN1biBPY3QgMTUgMjE6NTU6MzMgMTk5NSAgQW5hbmQgS3VtcmlhIDxha3VtcmlhQG96ZW1haWwuY29tLmF1PgoJCgkqIFttaXNjL3dpbnNvY2suY10gCglSZXR1cm4gdGhlIGNvcnJlY3QgZXJyb3IgbnVtYmVyLCBmb3IgaG9zdCBsb29rdXAgb3BlcmF0aW9ucy4KCUFsc28sIGNvcnJlY3QgdGhlIHByb2JsZW0gd2l0aCBzZW5kX21lc3NhZ2UuCgpGcmkgT2N0IDEzIDE5OjA0OjM1IDE5OTUgIE1vcnRlbiBXZWxpbmRlciAgPHRlcnJhQGRpa3UuZGs+CgoJKiBbTWFrZWZpbGUuaW5dCglVc2luZyBubSdzIGJ1aWx0LWluIHNvcnRpbmcuCgoJKiBbKi8qLmNdCglVc2UgeG1hbGxvYyBmb3IgbWFsbG9jIGFuZCB4cmVhbGxvYyBmb3IgcmVhbGxvYyBpbiBhbGwgdW5nYXJkZWQKCWNhc2VzLgoKCSogW2RlYnVnZ2VyL2RiZy55XQoJSGFuZGxlIEMtbGlrZSBleHByZXNzaW9ucy4gIENsZWFuLXVwLgoKCSogW2RlYnVnZ2VyL2RlYnVnLmxdCglMb3RzIG9mIG5ldyB0b2tlbnMgZm9yIGV4cHJlc3Npb25zLgoKCSogW2RlYnVnZ2VyL2luZm8uY10KCUltcGxlbWVudCAibGlzdCIgY29tbWFuZCBmb3IgZGlzYXNzZW1ibGluZy4KCgkqIFttaXNjL29sZTJubHMuY10KCUltcGxlbWVudCBtb3JlIERhbmlzaCBzdHVmZi4KCkZyaSBPY3QgIDYgMTA6Mzk6MzkgMTk5NSBSYW0nb24gR2FyYydpYSA8cmFtb25AaWUzLmNsdWJzLmV0c2l0LnVwbS5lcz4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglVcGRhdGVkIHNlbGYtbG9hZGluZyBtb2R1bGVzIHRvIHN1cHBvcnQgZm9yIG5ldyAzMiBiaXQgCglzdGFjayBmcmFtZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBPY3QgIDEgMTU6NDg6MzQgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmM+CgoJKiBbY29udHJvbHMvbWVudS5jXQoJRml4ZWQgR2V0TWVudVN0cmluZygpIGZvciBub24tc3RyaW5nIGl0ZW1zLgoKCSogW2RlYnVnZ2VyLyouY10KCUZpcnN0IGF0dGVtcHQgdG8gY2hlY2sgdmFsaWRpdHkgb2YgcG9pbnRlcnMgYmVmb3JlIG1lbW9yeQoJYWNjZXNzZXMuIEZvciBub3cgb25seSBzZWdtZW50ZWQgcG9pbnRlcnMgYXJlIGNoZWNrZWQuCgoJKiBbZGVidWdnZXIvZGJnLnldIFttZW1vcnkvbGR0LmNdCglBZGRlZCBwb3NzaWJpbGl0eSB0byBkdW1wIG9ubHkgb25lIHNlZ21lbnQgd2l0aCAnaW5mbyBzZWdtZW50Jy4KCgkqIFtpbmNsdWRlL2JpdG1hcHMvb2NyXypdCglBZGRlZCBhbGwgT0VNIGN1cnNvcnMgYXMgWFBNIGJpdG1hcHMuCgoJKiBbaW5jbHVkZS9jdXJzb3JpY29uLmhdIFtvYmplY3RzL2N1cnNvcmljb24uY10KCVJld3JvdGUgYWxsIGN1cnNvciBhbmQgaWNvbiBtYW5hZ2VtZW50IHRvIHVzZSB0aGUgc2FtZSBtZW1vcnkKIAlsYXlvdXQgYXMgV2luZG93cywgYW5kIHRvIGZhY3RvciBjb21tb24gY29kZSBiZXR3ZWVuIGljb25zIGFuZAoJY3Vyc29ycy4gSW1wbGVtZW50ZWQgaWNvbiBkaXJlY3RvcnkgbG9va3VwIHRvIGZpbmQgdGhlIGJlc3QKCW1hdGNoaW5nIGljb24gKGkuZS4gdGhlIGNvbG9yIG9uZSkuCiAgCUltcGxlbWVudGVkIENvcHlDdXJzb3IoKSBhbmQgRHVtcEljb24oKS4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglGb3IgZGlzYWJsZWQgYnVpbHQtaW4gbW9kdWxlcywgd2Ugbm93IHRyeSB0byBsb2FkIHRoZSBXaW5kb3dzIERMTAoJZmlyc3QsIGFuZCBpZiB0aGlzIGZhaWxzIHdlIGZhbGwgYmFjayB0byB1c2luZyB0aGUgYnVpbHQtaW4gbW9kdWxlCglhbnl3YXkuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJRml4ZWQgR2xvYmFsSGFuZGxlKCkgdG8gcmV0dXJuIHRoZSBjb3JyZWN0IHNlbGVjdG9yIGluIHRoZSBoaWdoCgl3b3JkIGV2ZW4gaWYgd2UgYXJlIHBhc3NlZCBhIGhhbmRsZSBpbiB0aGUgZmlyc3QgcGxhY2UuCgoJKiBbbWlzY2VtdS9pbnN0ci5jXQoJVGFrZSBpbnRvIGFjY291bnQgdGhlIHNpemUgb2YgdGhlIG9wZXJhbmQgYW5kIG9mIHRoZSBzdGFjayBzZWdtZW50Cgl3aGVuIGluY3JlbWVudGluZyB0aGUgc3RhY2sgcG9pbnRlci4KCUF2b2lkIHJlZmVyZW5jaW5nIEZTX3JlZyBhbmQgR1NfcmVnIG9uICpCU0QuCgoJKiBbb2JqZWN0cy9kaWIuY10KCUFsbCBESUIgZnVuY3Rpb25zIG5vdyBhY2NlcHQgYSBCSVRNQVBDT1JFSEVBREVSIGZvcm1hdCBiaXRtYXAuCglNb25vY2hyb21lIERJQnMgYXJlIGNyZWF0ZWQgYXMgbW9ub2Nocm9tZSBiaXRtYXAgaWZmIHRoZXkgYXJlCglibGFjayBhbmQgd2hpdGUuCgoJKiBbb2JqZWN0cy9vZW1iaXRtYXAuY10KCUFkZGVkIHN1cHBvcnQgZm9yIE9FTSBjdXJzb3JzLCBjaGFuZ2VkIE9CTV9Mb2FkSWNvbiB0byB1c2UgdGhlIG5ldwoJaWNvbiBtZW1vcnkgbGF5b3V0LgoKCSogW3JjL3N5c3Jlc19Gci5yY10KCUFkZGVkIEZyZW5jaCBbRnJdIGxhbmd1YWdlIHN1cHBvcnQuCgoJKiBbd2luMzIvZW52aXJvbm1lbnQuY10KCUZpeGVkIEdldENvbW1hbmRMaW5lQSgpIHRvIHVzZSBjdXJyZW50IFBEQi4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL3dpbnBvcy5jXQoJU2ltdWxhdGUgYSBtb3VzZSBtb3Rpb24gZXZlbnQgdXBvbiBTZXRXaW5kb3dQb3MoKSB0byBmb3JjZSB0aGUKCWN1cnNvciB0byBiZSBzZXQgY29ycmVjdGx5LgoKU2F0IFNlcCAzMCAxNzo0OTozMiAgQ2FtZXJvbiBIZWlkZSAgKGhlaWRlQGVlLnVhbGJlcnRhLmNhKQoKCSogW3dpbjMyLypdCiAgICAgICAgTmV3IFdpbjMyIGtlcm5lbCBmdW5jdGlvbnM6IEdldEFDUCwgR2V0Q1BJbmZvLAogCUdldEVudmlyb25tZW50VmFyaWFibGVBLCBHZXRGaWxlVHlwZSwgR2V0TGFzdEVycm9yLCBHZXRPRU1DUCwKIAlHZXRTdGFydHVwSW5mb0EsIEdldFRpbWVab25lSW5mb3JtYXRpb24sIFNldEVudmlyb25tZW50VmFyaWFibGUsCiAJU2V0RmlsZVBvaW50ZXIsIFNldExhc3RFcnJvciwgVmlydHVhbEFsbG9jLCBWaXJ0dWFsRnJlZSwKIAlXcml0ZUZpbGUuICBDb21wbGV0ZWQgaW1wbGVtZW50YXRpb25zIG9mIEdldENvbW1hbmRMaW5lQS4KCgkqIFtpbmNsdWRlL2tlcm5lbDMyLmhdCiAgICAgICAgTmV3IGZpbGUuCgoJKiBbbG9hZGVyL21haW4uY10KICAgICAgICBDYWxsIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciBXaW4zMiBkYXRhIChkb2Vzbid0IGN1cnJlbnRseSBkbwogCWFueXRoaW5nKS4KCgkqIFttaXNjL21haW4uY10KCUltcGxlbWVudGVkIEdldEVudmlyb25tZW50VmFyaWFibGVBLCBTZXRFbnZpcm9ubWVudFZhcmlhYmxlQS4KClNhdCBTZXAgMzAgMDA6MjY6NTYgMTk5NSAgTmllbHMgZGUgQ2FycGVudGllciAgPG5pZWxzQGNpbmR5LmV0LnR1ZGVsZnQubmw+CgoJKiBbd2luZG93cy93aW5wb3MuY11bbWlzY2VtdS9lbXVsYXRlLmNdW2xvYWRlci9tb2R1bGUuY10KCSAgW21pc2MvY29tbWRsZy5jXQoJTWlzYy4gYnVnIGZpeGVzCgpGcmkgU2VwIDI5IDE2OjE2OjEzIDE5OTUgIEppbSBQZXRlcnNvbiA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+CgoJKiBbKi8qXQoJRm9yIFdpbmVsaWIsIGV4cGxpY2l0IGNhc3RzIGhhdmUgYmVlbiBwbGFjZWQgd2hlcmUgd2FybmluZ3Mgd2VyZQogCXVzdWFsbHkgZ2VuZXJhdGVkLgoJcHJpbnRmIGZvcm1hdHMgd2hpY2ggZ2l2ZSB0aGUgZm9ybWF0IGZvciBwcmludGluZyBhIGhhbmRsZSBhcwogCSIlMDR4IiBvciBzb21ldGhpbmcgc2ltaWxhciBoYXZlIGJlZW4gY2hhbmdlZCB0byB1c2UgdGhlIE5QRk1UCiAJbWFjcm8gZGVmaW5lZCBpbiBpbmNsdWRlL3dpbnR5cGVzLmguICBTb21lIHRpbWVzLCBleHBsaWNpdCBjYXN0cwogCXdlcmUgYWxzbyBuZWNlc3NhcnkuCiAgICAgCVBhcmFtZXRlciwgZmllbGQsIGFuZCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgaGF2ZSBiZWVuIG1hZGUgbW9yZQogCWV4YWN0LCBzdWNoIGFzIGNvbnZlcnRpbmcgJ1dPUkQgd1BhcmFtJyB0byAnV1BBUkFNIHdQYXJhbScgb3IKIAknV09SRCBoRm9udCcgdG8gJ0hGT05UIGhGb250Jy4KICAgICAJQW55IGNhbGwgb2YgdGhlIGZvcm0gR2V0V2luZG93V29yZChod25kLEdXV19ISU5TVEFOQ0UpIGhhcyBiZWVuCiAJcmVwbGFjZWQgd2l0aCBhIGNhbGwgdG8gV0lOX0dldFdpbmRvd0luc3RhbmNlKGh3bmQpLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglBZGRlZCBXSU5FTElCMzIgc3VwcG9ydCBpbiBDTEJveEdldENvbWJvKCkuCgoJKiBbaW5jbHVkZS9kaWFsb2cuaF0KCUNvbW1lbnRlZCBvdXQgdGhlICcjaWZuZGVmIFdJTkVMSUInIGFyb3VuZCB0aGUgJyNwcmFnbWEgcGFjaygxKScuCgl3aW5lbGliIG5lZWRzIHRoZSBwYWNraW5nIGFzIHdlbGwgKGUuZy4gd2hlbiBhY2Nlc3NpbmcgcmVzb3VyY2VzCglsaWtlIHN5c3Jlc19ESUFMT0dfU0hFTExfQUJPVVRfTVNHQk9YKS4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUdvdCByaWQgb2YgdGhlIEZbYS1rXSBtYWNyb3MsIHdoaWNoIHdlcmUgY2x1dHRlcmluZyB1cCB0aGUgZ2xvYmFsCgluYW1lc3BhY2UuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdIFt3aW5kb3dzL2RlZnduZC5jXQoJQWRkZWQgV2luMzIgbWVzc2FnZXMgV01fQ1RMQ09MT1IqLgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KCVB1dCBpbiBwcmVwcm9jZXNzb3IgJyNkZWZpbmUgV0lORUxJQjMyJyBpZiBhcHByb3ByaWF0ZSBhbmQgY2hhbmdlZAoJdGhlIHR5cGVzIG9mIHNvbWUgdHlwZWRlZnMgKFdQQVJBTSwgSEFORExFKSBiYXNlZCBvbiB0aGlzLgoJCgkqIFtsb2FkZXIvbW9kdWxlLmNdIFt0b29sa2l0L21pc2NzdHVicy5jXQoJQWRkZWQgI2lmZGVmJ2QgcG9ydGlvbiBpbiBMb2FkTW9kdWxlIHRvIGhhbmRsZSBsb2FkaW5nIGEgV0lORWxpYgoJbW9kdWxlIChhbHJlYWR5IGxvYWRlZCwganVzdCBpbml0IHZhbHVlcykuICAnI2lmZGVmJ2VkIG91dCB0aGUKCWRlZmluaXRpb24gZm9yIEdldFduZFByb2NFbnRyeTE2IGFuZCBhZGRlZCBhIG5ldyB2ZXJzaW9uIHRvCgl0b29sa2l0L21pc2NzdHVicy5jLgoKCSogW21pc2Mvc2hlbGwuY10KCUFkanVzdGVkIHRoZSBsZW5ndGhzIG9mIEFwcE5hbWUgYW5kIEFwcE1pc2MgZnJvbSA1MTIsNTEyIHRvIDEyOCw5MDYuCglTYW1lIGFtb3VudCBvZiB0b3RhbCBzdG9yYWdlLCBidXQgbXVjaCBtb3JlIHJlYXNvbmFibGUuICBBbHNvLCBjaGFuZ2VkCgljYWxscyB0byBzdHJjcHkoKSBpbiBTaGVsbEFib3V0KCkgdG8gY2FsbHMgdG8gc3RybmNweSgpIGluc3RlYWQuCglUaGlzIHdhcyBhIGRpZmZpY3VsdCBidWcgdG8gdHJhY2sgZG93biwgYnV0IHRoZSBBcHBNaXNjIGZpZWxkIHdhcwoJYmVpbmcgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgY29udHJpYnV0ZXJzIHRleHQsIHdoaWNoIHdhcyBtdWNoIGxhcmdlcgoJdGhhbiA1MTIgY2hhcmFjdGVycy4KCgkqIFt0b29sa2l0L2F0b20uY10KCU5ldyBmaWxlIGZvciBhdG9tLWhhbmRsaW5nIGZ1bmN0aW9ucy4gIENvcGllZCBmcm9tIG1lbW9yeS9hdG9tLmMgYW5kCgl0aGVuIGhlYXZpbHkgbW9kaWZpZWQuICBSaWdodCBub3csIGl0J3MganVzdCBhIGxpbmtlZCBsaXN0IG9mIGF0b21zLgoJQ29uc2lkZXIgaXQgYXMgYSBoYXNoIHRhYmxlIHdpdGgganVzdCBvbmUgZW50cnkuICBJdCdzIGVhc2lseSBjaGFuZ2VkCglsYXRlci4KCgkqIFt0b29sa2l0L2hlYXAuY10KCUNvbW1lbnRlZCBvdXQgdGhlIGhlYXAgZnVuY3Rpb25zIHdpdGggYSAiI2lmZGVmIFdJTkVMSUIxNiIgYW5kIHB1dCBpbgoJYSBXaW4zMiB2ZXJzaW9uICh3aGljaCBpcyBiYXNpY2FsbHkgYSBtb2RpZmllZCBjb3B5KS4KCgkqIFt0b29sa2l0L3N1cC5jXSBbdG9vbGtpdC9taXNjc3R1YnMuY10KCU1vdmVkIHRoZSBzdHVmZiBJIHB1dCBpbiB0b29sa2l0L3N1cC5jIGludG8gdG9vbGtpdC9taXNjc3R1YnMuYyBhbmQKCWFkZGVkIHF1aXRlIGEgZmV3IG1vcmUgc3R1YnMuCgoJKiBbdG9vbGtpdC93aW5tYWluLmNdCglSZWFycmFuZ2VkIHN0YXJ0dXAgY29kZSBpbiBfV2luTWFpbi4gIEkgdGhpbmsgdGhpcyB3aWxsIHdvcmsuCgoJKiBbdG9vbGtpdC9NYWtlZmlsZS5pbl0KCUFkZGVkIHRhcmdldHMgZm9yICdoZWxsbycgYW5kICdoZWxsbzInIGluIGNhc2UgYW55b25lIGNhcmVzIHRvIHRyeQoJb3V0IHRoZSBzYW1wbGUgcHJvZ3JhbXMuCgpXZWQgU2VwIDI3IDIzOjEzOjQzIDE5OTUgIEFuYW5kIEt1bXJpYSA8YWt1bXJpYUBvemVtYWlsLmNvbS5hdT4KCQoJKiBbbWlzY2VtdS9pbnQyZi5jXSBbbWlzY2VtdS92eGQuY10gW2lmMTYzMi93aW5wcm9jcy5zcGVjXQoJRmlyc3QgYXR0ZW1wdCBhdCBzdXBwb3J0IGZvciBzb21lIFZ4RHMuIENvbW0sIFNoZWxsIGFuZCBQYWdlZmlsZS4KClR1ZSBTZXAgMjYgMjE6MzQ6NDUgMTk5NSAgSGFucyBkZSBHcmFhZmYgIDxncmFhZmZAdHdpNzIudHdpLnR1ZGVsZnQubmw+CgoJKiBbbWlzYy9kb3NfZnMuY10KCURPU19TaW1wbGlmeVBhdGg6IEFsc28gcmVtb3ZlICIvLi8iIGZyb20gcGF0aC4gKEhhcHBlbnMgd2hlbgogCXN0YXJ0aW5nIGFwcGxpY2F0aW9ucyBsaWtlICd3aW5lIC4vZXhjZWwuZXhlJykKClNhdCBTZXAgMjMgMjM6MzI6NDAgMTk5NSAgTW9ydGVuIFdlbGluZGVyICA8dGVycmFAZGlrdS5kaz4KCgkqIFtjb25maWd1cmUuaW5dCglBdm9pZCByZWxhdGl2ZSBwYXRoIGZvciB3aW5lLmluaS4KCgkqIFtyYy9zeXNyZXNfRGEucmNdCglTdXBwb3J0IGZvciBEYW5pc2ggW0RhXSBsYW5ndWFnZS4KCgkqIFttaXNjL21haW4uY10gW21pc2NlbXUvY3B1LmNdCglSZXR1cm4gdGhlIHByb2Nlc3NvciB3ZSdyZSBydW5uaW5nIG9uIGNvcnJlY3RseS4KCgkqIFttaXNjZW11L2ludDJmLmNdCglNaW5vciBzdHVmZiBpbiBpbnQgMHgyZiwgZnVuY3Rpb24gMHgxNi4KClNhdCBTZXAgMjMgMTk5NSAxNzo1ODowNCAgTWFyY3VzIE1laXNzbmVyICA8bXNtZWlzc25AZmF1aTAxLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW21pc2Mvc2hlbGwuY10gW21pc2MvbWFpbi5jXQoJSW1wbGVtZW50IHNhdmluZyBhbmQgbG9hZGluZyBvZiB0aGUgcmVnaXN0cnkgZGF0YWJhc2UgKG5lZWRlZCBmb3IKCU9MRSkuIFZlcnkgZXhwZXJpbWVudGFsLiBGaXhlZCBTaGVsbEV4ZWN1dGUoKS4KCQoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJRUVYSVNUIGlzIG5vdCBhIGNyaXRpY2FsIGVycm9yIGNvbmRpdGlvbiBmb3IgbWtkaXIoKS4KCkZyaSBTZXAgMjIgMDE6MzM6MzQgMTk5NSAgQWxleCBLb3JvYmthICA8YWxleEBwaG02LnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbaW5jbHVkZS9zaGVsbC5oXSBbbWlzYy9zaGVsbC5jXQoJSW1wbGVtZW50ZWQgNCBkcmFnL2Ryb3AgZnVuY3Rpb25zIHdpdGggZG9jdW1lbnRlZCBmdW5jdGlvbmFsaXR5LgoKICAgICAgICAqIFttdWx0aW1lZGlhL3RpbWUuY10KICAgICAgICAiRml4ZWQiIE1NU3lzVGltZUNhbGxiYWNrIGtsdWRnZSBzbyBFeGNlbDUgbG9hZHMgdXAgd2l0aG91dCBjcmFzaGluZy4KCgkqIFsqLypdIAogICAgICAgIEFkZGVkIG5ldyBmaWxlcywgbW9yZSBtZXNzYWdlIGRlZmluaXRpb25zLCBzdHJ1Y3R1cmVzLCBkZWJ1ZyBpbmZvLAogCWV0Yy4gIFJld3JvdGUgbWVzc2FnZSBsb2dnaW5nIGZ1bmN0aW9ucyB0byBwcm9kdWNlIG91dHB1dCBzaW1pbGFyCiAJdG8gV2luU2lnaHQuICBDaGVjayBvdXQgLWRlYnVnbXNnICttZXNzYWdlIG9wdGlvbi4KCgkqIFttaXNjL2ZpbGUuY10KICAgICAgICBGaXhlZCBHZXREcml2ZVR5cGUgcmV0dXJuIHZhbHVlLiAgCgogICAgICAgICogW3dpbmRvd3MvbWVzc2FnZS5jXSAKICAgICAgICBIb29rcyBhcmUgaW52b2tlZCBpbiBub3JtYWwgb3JkZXIuCgogICAgICAgICogW21pc2NlbXUvKl0KICAgICAgICBBZGRlZCBzb21lIGZ1bmN0aW9ucyBhbmQgaW50ZXJydXB0cy4KCiAgICAgICAgKiBbbWlzYy9zaGVsbC5jXQogICAgICAgIEltcGxlbWVudGVkIERyYWcuLi4gZnVuY3Rpb25zLgoKVGh1IFNlcCAyMSAyMzo1MDoxMiAxOTk1ICBKdWtrYSBJaXZvbmVuIDxpaXZvbmVuQGNjLmhlbHNpbmtpLmZpPgoKCSogW3JjL3N5c3Jlc19GaS5yY10gW3JjL3N5c3Jlcy5yY10KCUZpcnN0IGF0dGVtcHQgYXQgRmlubmlzaCBbRmldIGxhbmd1YWdlIHN1cHBvcnQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBTZXAgMTcgMTY6NDc6NDkgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1PgoKCSogW2NvbmZpZ3VyZS5pbl0gWyovTWFrZWZpbGUuaW5dIFtNYWtlLnJ1bGVzLmluXQoJQ2xlYW5lZCB1cCBtYWtlZmlsZXMsIGFkZGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBXaW5lbGliLAoJZ3JvdXBlZCBjb21tb24gbWFrZSBydWxlcyBpbiBNYWtlLnJ1bGVzLmluLgoKCSogW0NvbmZpZ3VyZV0KCVJlbmFtZWQgdG8gJ0NvbmZpZ3VyZS5vbGQnOyBwbGVhc2UgdXNlICdjb25maWd1cmUnIGluc3RlYWQuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJRml4ZWQgRGVzdHJveU1lbnUoKSB0byBhdm9pZCBkZWxldGluZyB0aGUgc2FtZSBtZW51IHR3aWNlLgoJTW9yZSBmaXhlcyB0byBXTV9NRU5VU0VMRUNULCBhbmQgYWRkZWQgV01fSU5JVE1FTlUuCgoJKiBbaWYxNjMyL3JlbGF5LmNdCglGaXhlZCB3cm9uZyByZWdpc3RlciB2YWx1ZXMgZGlzcGxheWVkIGJ5IFJFTEFZX0RlYnVnQ2FsbDMyKCkuCgoJKiBbbWVtb3J5L2xvY2FsLmNdCglGaXhlZCBMb2NhbExvY2soKSBhbmQgTG9jYWxVbmxvY2soKSB0byBpbmNyZW1lbnQvZGVjcmVtZW50IHRoZQoJbG9jayBjb3VudCBmb3IgbW92ZWFibGUgYmxvY2tzLgoKCSogW21pc2MvY29tbWRsZy5jXSBbbWlzYy9zaGVsbC5jXSBbcmMvd2luZXJjLmNdCglNb2RpZmllZCB0aGUgZ2VuZXJhdGVkIEMgZmlsZSBzbyB0aGF0IHRoZSByZXNvdXJjZSBpbmZvcm1hdGlvbgoJKHNpemUsIGV0Yy4pIGlzIGFsc28gZXhwb3J0ZWQuCglNb2RpZmllZCBjb21tb24gZGlhbG9ncyB0byB1c2UgdGhlIG5ldyBpbmZvcm1hdGlvbnMuCgoJKiBbbWlzYy9tYWluLmNdIFtBTk5PVU5DRV0KCVVwZGF0ZSB0aGUgbGlzdCBvZiBjb250cmlidXRvcnMuIFBsZWFzZSBsZXQgbWUga25vdyBpZiBJIGZvcmdvdAoJc29tZW9uZS4KCgkqIFtyYy9zeXNyZXMucmNdIFtyYy9zeXNyZXNfRW4ucmNdCglNb3ZlZCBFbmdsaXNoIHJlc291cmNlcyB0byBzeXNyZXNfRW4ucmMuCglDaGFuZ2VkIGlkcyBmcm9tIG51bWVyaWMgdG8gc3ltYm9saWMgZm9yIGRpYWxvZ3MuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCU1vZGlmaWVkIHRlbXBsYXRlIHBhcnNpbmcgdG8gYmUgYWJsZSB0byBwYXNzIHNlZ21lbnRlZCBwb2ludGVycyB0bwoJQ3JlYXRlV2luZG93KCkuCgoJKiBbd2luZG93cy93aW4uY10KCUNyZWF0ZVdpbmRvdygpIG5vdyB0YWtlcyBzZWdtZW50ZWQgcG9pbnRlcnMgZm9yIGNsYXNzIGFuZCB3aW5kb3cKCW5hbWVzLgoJTWF4bWltaXplIG9yIG1pbmltaXplIHRoZSB3aW5kb3cgdXBvbiBjcmVhdGlvbiBpZiB0aGUgV1NfTUFYSU1JWkUKCW9yIFdTX01JTklNSVpFIGJpdHMgYXJlIHNldC4KClRodSBTZXAgMTQgMTc6MTk6NTcgMTk5NSAgUGF1bCBXaWxoZWxtICA8cGF1bEBwYXVsLmFjY2Vzc29uZS5jb20+CgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglGaXhlZCBzY3JvbGwtYmFyIGJ1Z3MgZm9yIG5vbi1jbGllbnQgd2luZG93cy4KClRodSBTZXAgMTQgMTQ6MDQ6MTQgTUVUIERTVCAxOTk1IEpvY2hlbiBIb2VuaWNrZSA8Sm9jaGVuLkhvZW5pY2tlQGFyYmkuSW5mb3JtYXRpay5VbmktT2xkZW5idXJnLmRlPgoKCSogW2luY2x1ZGUvY3Vyc29yLmhdIFt3aW5kb3dzL2N1cnNvci5jXQoJQ3Vyc29yIGlzIG5vdCBtaXJyb3JlZCBhbnkgbW9yZSBhbmQgdGhlIGhvdHNwb3QgaXMgc2V0IHJpZ2h0LgoKV2VkIFNlcCAxMyAxNDoyMjozMSAxOTk1ICBNYXJjdXMgTWVpc3NuZXIgIDxtc21laXNzbkBmYXVpMDEuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbb2xlLmhdCglNaXNjIHNtYWxsIGZpeGVzLgoKTW9uIFNlcCAgNCAwMDowMToyMyAxOTk1ICBKb24gVG9tYnMgPGpvbkBndGUuZXNpLnVzLmVzPgoKCSogW3JjL3N5c3Jlc19Fcy5yY10KCUZpcnN0IGF0dGVtcHQgYXQgU3BhbmlzaCBbRXNdIGxhbmd1YWdlIHN1cHBvcnQuCgpTdW4gU2VwICAzIDEzOjIyOjMzIDE5OTUgICAgIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbaW5jbHVkZS9hbGlhcy5oXVt3aW5kb3dzL2FsaWFzLmNdW2luY2x1ZGUvcmVsYXkzMi5oXQoJTmV3IGZpbGVzCgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXQoJV0lER0VUU19Jbml0OiByZWdpc3RlciBhbGlhcyB3aW5kb3cgcHJvY2VkdXJlcwoKCSogW2lmMTYzMi9jYWxsYmFjay5jXQoJQ2FsbFduZFByb2M6IENhbGwgYWxpYXMgZnVuY3Rpb25zIGlmIG5lY2Vzc2FyeQoKCSogW2lmMTYzMi9nZGkzMi5zcGVjXQoJR2V0U3RvY2tPYmplY3QsIFRleHRPdXRBOiBuZXcgcmVsYXlzCgoJKiBbbWlzYy91c2VyMzIuY11baWYxNjMyL3VzZXIzMi5zcGVjXVttaXNjL01ha2VmaWxlLmluXVttaXNjL0ltYWtlZmlsZV0KCXVzZXIzMi5jOiBuZXcgZmlsZQoJQmVnaW5QYWludCxDcmVhdGVXaW5kb3dFeEEsRGVmV2luZG93UHJvY0EsRGlzcGF0Y2hNZXNzYWdlLEVuZFBhaW50LAoJR2V0TWVzc2FnZUEsUmVnaXN0ZXJDbGFzc0EsU2hvd1dpbmRvdyxVcGRhdGVXaW5kb3c6IG5ldyByZWxheXMKCgkqIFtpZjE2MzIvd2lucHJvY3MzMi5zcGVjXVtsb2FkZXIvcGVfaW1hZ2UuY11bbG9hZGVyL21vZHVsZS5jXQoJUEVfV2luMzJDYWxsVG9TdGFydDogbmV3IGZ1bmN0aW9uCglNT0RVTEVfQ3JlYXRlSW5zdGFuY2U6IHJlbW92ZWQgc3RhdGljIGF0dHJpYnV0ZQoJTG9hZE1vZHVsZTogVHJ5IGxvYWRpbmcgUEUgaW1hZ2Ugb24gZXJyb3IgMjEKCVBFX0xvYWRNb2R1bGU6IG5ldyBmdW5jdGlvbgoJUEVfTG9hZEltYWdlOiBpbml0aWFsaXplIHBlX2RhdGEgd2l0aCAwCgkKCSogW2luY2x1ZGUvZGxscy5oXVtpbmNsdWRlL3BlZXhlLmhdCgltb3ZlZCBwZV9kYXRhIGFuZCB3X2ZpbGVzIHRvIHBlZXhlLmgKCQoJKiBbbWlzYy9zaGVsbC5jXQoJU2hlbGxBYm91dDogUmVnaXN0ZXIgQWJvdXRXbmRQcm9jIGFsaWFzZXMKCgkqIFttaXNjZW11L2ludDIxLmNdCgloYW5kbGUgMHg0NDBBIGFuZCAweERDCgoJKiBbbWlzY2VtdS9pbnQyZi5jXQoJaGFuZGxlIDB4ODQKCgkqIFtvYmplY3RzL2RpYi5jXQoJQ3JlYXRlRElCaXRtYXA6IGNvbXBsYWluIGlmIEJJVE1BUElORk9IRUFERVIgaXMgb2Ygd3Jvbmcgc2l6ZQoKCSogW3Rvb2xzL2J1aWxkLmNdCglpbmNsdWRlIHdpbmRvd3MuaCBhbmQgcmVsYXkzMi5oIGludG8gZ2VuZXJhdGVkIFdpbjMyIHJlbGF5cywKCWRvbid0IGRlY2xhcmUgdGhlIGltcGxlbWVudGF0aW9uIGFzIGludCAoKikoKTsKCWxpbWl0IGluIFdJTjMyX2J1aWx0aW4gd2FzIG9mZiBieSBvbmUKCgkqIFt3aW5kb3dzL2NhcmV0LmNdCglDQVJFVF9Jbml0aWFsaXplOiBuZXcgZnVuY3Rpb24sIGNhbGwgb24gc3RyYXRlZ2ljIHBsYWNlcwoKCSogW3dpbmRvd3MvbWVzc2FnZWJveC5jXQoJTWVzc2FnZUJveDogcmVnaXN0ZXIgbWVzc2FnZSBib3ggcHJvYyBhbGlhc2VzCgoJKiBbaWYxNjMyL2FkdmFwaTMyLnNwZWNdW2lmMTYzMi9jb21kbGczMi5zcGVjXQoJTmV3IGZpbGVzCgoJKiBbaWYxNjMyL01ha2VmaWxlLmluXVtpZjE2MzIvSW1ha2VmaWxlXVtpZjE2MzIvcmVsYXkzMi5jXQoJYWRkZWQgbmV3IHNwZWMgZmlsZXMKCVJFTEFZMzJfR2V0QnVpbHRpbkRMTDogcGVyZm9ybSBsb29rdXAgY2FzZSBpbnNlbnNpdGl2ZQoJUkVMQVkzMl9HZXRFbnRyeVBvaW50OiBzdGFydCBuYW1lIHNlYXJjaCBhdCAwCgoJKiBbaWYxNjMyL3VzZXIuc3BlY11baWYxNjMyL2tlcm5lbC5zcGVjXVtpZjE2MzIvZ2RpLnNwZWNdCglBZGRlZCBzdHVicyBmb3IgbmV3IFdpbjk1IEFQSQoKU2F0IFNlcCAyIDE5OTUgIE1hcnRpbiBSb3kKCgkqIFttaXNjL2NvbW1kbGcuY10KCUluIFdNX0lOSVRESUFMT0csIGN1cnJlbnQgZmlsdGVyIG11c3QgcmVmbGVjdCBscG9mbi0+bkZpbHRlckluZGV4LgogIAlXaGVuIHByb2Nlc3MgSURPSyBidXR0b24gaW4gRklMRURMR19XTUNvbW1hbmQoKSwKIAlscG9mbi0+bkZpbHRlckluZGV4IHNob3VsZCBiZSB1cGRhdGVkIHRvIGN1cnJlbnQgc2VsZWN0aW9uLgoKVGh1IEF1ZyAzMSAxNTowMDowMCAxOTk1IFJhbSdvbiBHYXJjJ2lhIDxyYW1vbkBpZTMuY2x1YnMuZXRzaXQudXBtLmVzPgoKCSogW2xvYWRlci9tb2R1bGUuY10gW2xvYWRlci9uZV9pbWFnZS5jXQoJQWRkZWQgc3VwcG9ydCBvZiBzZWxmLWxvYWRpbmcgbW9kdWxlcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaHUgQXVnIDMxIDE3OjE5OjU3IDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdT4KCgkqIFtDb25maWd1cmVdCglBZGRlZCBjb21waWxlLXRpbWUgb3B0aW9uIGZvciBJUEMuCgoJKiBbY29uZmlndXJlLmluXQoJQWRkZWQgY29tbWFuZC1saW5lIG9wdGlvbnMgZm9yIGxhbmd1YWdlLCBJUEMgYW5kIG1hbGxvYwoJZGVidWdnaW5nLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCVdNX01FTlVTRUxFQ1Qgd2FzIHNvbWV0aW1lcyBzZW50IHRvIHRoZSB3cm9uZyB3aW5kb3cuCgoJKiBbZGVidWdnZXIvYnJlYWsuY10KCUZvciB0aGUgJ25leHQnIGNvbW1hbmQsIG9ubHkgc3RlcCBvdmVyIGluc3RydWN0aW9uIHRoYXQgcmVxdWlyZQoJaXQuIFRoaXMgYWxsb3dzICduZXh0JyB0byBkbyB0aGUgcmlnaHQgdGhpbmcgd2l0aCBqbXAgYW5kIHJldAoJaW5zdHJ1Y3Rpb25zLgoKCSogW2lwYy8qLmNdIFttZW1vcnkvYXRvbS5jXSBbbWVtb3J5L2dsb2JhbC5jXQoJSVBDIGNhbiBub3cgYmUgY29uZmlndXJlZCBvdXQgYXQgY29tcGlsZS10aW1lLgoKCSogW2xvYWRlci90YXNrLmNdCglCdWcgZml4IGluIFRBU0tfUmVzY2hlZHVsZSgpIHRoYXQgY291bGQgY2F1c2UgYSB0YXNrIHRvIGJlIGRlbGV0ZWQKCXR3aWNlLgoKCSogW21pc2NlbXUvZG9zbWVtLmNdIChOZXcgZmlsZSkKCVBhcnRpYWwgZW11bGF0aW9uIG9mIHRoZSBCSU9TIGRhdGEgc2VnbWVudC4KCgkqIFttaXNjZW11L2luc3RyLmNdCglUcmFwIGF0dGVtcHRzIHRvIGFjY2VzcyBzZWxlY3RvciAweDQwIGFuZCByZW1hcCB0aGUgYWNjZXNzIHRvCglzZWdtZW50IF9fMDA0MEguCgoJKiBbdG9vbHMvYnVpbGQuY10KCUZpeGVkIGJ1ZyBpbiBDYWxsVG8zMl9MYXJnZVN0YWNrKCkgdGhhdCBjYXVzZWQgcHJvYmxlbXMgd2hlbgoJY29tcGlsaW5nIFdpbmUgd2l0aCB0aGUgLWZvbWl0LWZyYW1lLXBvaW50ZXIgb3B0aW9uLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJRml4ZWQgYnVnIGluIGhhcmR3YXJlIGV2ZW50IGhhbmRsaW5nIHRoYXQgY291bGQgY2F1c2Ugc29tZSBldmVudHMKCXRvIGdldCBpZ25vcmVkLgoKU2F0IEF1ZyAyNiAxMzoxMjo1OSBJU1QgMTk5NSBNaWNoYWVsIFZla3NsZXIgPG12ZWtzbGVyQHZuZXQuaWJtLmNvbT4KCgkqIFtpcGMvUkVBRE1FXSBbaXBjL2RkZS50ZXhdCglMYVRlWCBkb2N1bWVudGF0aW9uIGZvciB0aGUgaXBjIGFuZCBEREUgc3R1ZmYuCgpXZWQgQXVnIDIzIDIyOjAxOjIzIEdNVCAxOTk1IE1pY2hhZWwgVmVrc2xlciA8bXZla3NsZXJAdm5ldC5pYm0uY29tPgoKCSogW2lwYy9JbWFrZWZpbGVdIFtpcGMvd2luZV90ZXN0X3N0dWIuY10KCUZpeGVkIElQQyB0ZXN0aW5nLiBOb3cgaXQgY2FuIGJlIGNvbXBpbGVkIHdpdGggIm1ha2UgdGVzdHMiCgpXZWQgQXVnIDIzIDIxOjA0OjE0IDE5OTUgIEZvbnMgQm90bWFuICA8Ym90bWFuQHdhYi10aXMucmFib2Jhbmsubmw+CgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdIFttaXNjL21haW4uY10KCUFkZGVkIEdldFdpbkRlYnVnSW5mby9TZXRXaW5EZWJ1Z0luZm8gc3R1YiBmb3IgcGxheWVyLmV4ZQoKU3VuIEF1ZyAgMjAgMTM6NDk6NDIgMTk5NSAgTWFyY3VzIE1laXNzbmVyICA8bXNtZWlzc25AZmF1aTAxLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW21pc2NlbXUvaW50MjEuY10KCU1pc2MgZml4IHRvIGludDIxLGFoPTQwICh3cml0ZSkgdG8gbWF0Y2ggX2x3cml0ZSgpLgoJQVg9MHg0NDBBIChjaGVjayBpZiBoYW5kbGUgaXMgcmVtb3RlKSBhZGRlZC4KCgkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdCglNb3ZlZCBtY2lTZW5kU3RyaW5nIHRvIG1jaXN0cmluZy5jLgoKCSogW211bHRpbWVkaWEvbWNpc3RyaW5nLmNdCglOZXcgZmlsZSwgc3RyaW5nIGludGVyZmFjZSBmb3IgTUNJIChub3QgY29tcGxldGUsIG5vdCB0aG9yb3VnaGx5Cgl0ZXN0ZWQpLgoKCSogW211bHRpbWVkaWEvYXVkaW8uY10KCUlPQ1RMIHByaW50cyBlcnJvcnM7IG9uZSBwYXJhbm9pZCBjaGVjayBkaXNhYmxlZC4KCgkqIFttaXNjL2ZpbGUuY10KCU1pc2Mgb3BlcmF0b3IgcHJlY2VkZW5jZSBmaXhlcy4KCgkqIFtpZjE2MzIvZ2RpLnNwZWNdIFtvYmplY3RzL2JpdGJsdC5jXQoJU3R1YiBmb3IgRmFzdFdpbmRvd0ZyYW1lIChwYXJhbWV0ZXJzIG5vdCBjb3JyZWN0KS4KClNhdCBBdWcgMTkgMDE6MzE6MjMgMTk5NSAgR3JhaGFtIE1lbmhlbm5pdHQgPGdmbUB3ZXJwbGUubWlyYS5uZXQuYXU+CgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdCglQcmVsaW1pbmFyeSBzdXBwb3J0IGZvciBpdGVyYXRlZCBzZWdtZW50cy4KClNhdCBBdWcgMTkgMDA6NDM6MDQgMTk5NSAgQW5kcmV3IFRheWxvciAgKGFuZHJld0ByaXNjYW4uY29tKQoKCSogW3dpbmRvd3MvbWFwcGluZy5jXQoJSW4gZnVuY3Rpb24gTUFQUElOR19GaXhJc290cm9waWMoKSwgVnBvcnRFeHRbWFldIGlzIG11bHRpcGxpZWQgYnkKIAl0aGUgYWJzb2x1dGUgdmFsdWUgb2YgKHlkaW0gLyB4ZGltKSBvciAoeGRpbSAvIHlkaW0pLgoKVGh1IEF1ZyAxNSAyMzowMDoxNiAgR3JlZ29yeSBUcnViZXRza295ICA8Z3Jpc2hhQG1pcmEuY29tPgoKCSogW29iamVjdHMvb2VtYml0bWFwLmNdCglBZGRlZCBzb21lIGluY2x1ZGVzIGZvciBXaW5kb3dzIDk1LgoKCSogW2luY2x1ZGUvc3lzbWV0cmljcy5oXQoJQWRkZWQgc29tZSBzeXNtZXRyaWNzIGZvciBXaW5kb3dzIDk1LgoKCSogW2luY2x1ZGUvYml0bWFwcy8qOTVdCglOZXcgZmlsZXM6IG9ibV9jbG9zZV85NSwgb2JtX2Nsb3NlZF85NSwgb2JtX3JlZHVjZV85NSwgb2JtX3JlZHVjZWRfOTUKCW9ibV96b29tXzk1LCBvYm1fem9vbWRfOTUgLSB0aGVzZSBhcmUgc29tZSBwaXhtYXBzIGZvciBXaW5kb3dzIDk1LgoKVGh1IEF1ZyAxMCAxMjowMDowMCAxOTk1ICBKYW4gV2lsbGFtb3dpdXMgIChqYW5AamFuaGguc2huZXQub3JnKQoKCSogW21pc2Mvc2hlbGwuY10gW3JjL3N5c3JlcyoucmNdCglUaGUgY2FwdGlvbiBvZiB0aGUgU2hlbGxBYm91dCBkaWFsb2cgYm94IGlzIGxhbmd1YWdlIHNwZWNpZmljIGFuZAogCXNob3VsZCBiZSBkZWZpbmVkIGluIHRoZSByZXNvdXJjZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRodSBBdWcgMTcgMTk6MzA6MTQgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1PgoKCSogWyovTWFrZWZpbGUuaW5dCglSZW1vdmVkIHdpbmVsaWJjbGVhbiB0YXJnZXQsIGFzIGl0IGRvZXNuJ3Qgd29yayBhbnl3YXkuCgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglBdm9pZCBkcmF3aW5nIHRoZSBmb2N1cyByZWN0YW5nbGUgb3V0c2lkZSBvZiB0aGUgYnV0dG9uLgoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10KCUZpeGVkIGJ1ZyB3aXRoIHRoZSBzaXplIG9mIHRoZSByZXNlcnZlZCBieXRlcyBmb3IgdGhlIEVkaXQKCWNvbnRyb2wgKGNhdXNlZCBFdWRvcmEgdG8gY3Jhc2gpLgoKCSogW2RlYnVnZ2VyLypdIFtpbmNsdWRlL2RlYnVnZ2VyLmhdCglVbmlmaWVkIGRlYnVnZ2VyIGFkZHJlc3MgaGFuZGxpbmcuIFNlZ21lbnRlZCBhbmQgbGluZWFyIGFkZHJlc3NlcwoJYXJlIG5vIGdyb3VwZWQgaW4gYSBzaW5nbGUgdHlwZSBEQkdfQUREUi4KCUFsbCBjb21tYW5kcyBub3cgYWNjZXB0IHNlZzpvZmYgYWRkcmVzc2VzLgoJTW9kdWxlIGVudHJ5IHBvaW50cyBhcmUgbm93IGxvYWRlZCB1cG9uIGZpcnN0IGVudHJ5IHRvIHRoZQoJZGVidWdnZXIsIHNvIHRoYXQgZW50cnkgcG9pbnRzIG9mIHRoZSBsb2FkZWQgZXhlY3V0YWJsZSBhbHNvCglhcHBlYXIgaW4gdGhlIHN5bWJvbCB0YWJsZS4KCgkqIFtpbmNsdWRlL3JlZ2lzdGVycy5oXSBbbWlzY2VtdS8qLmNdCglSZWdpc3RlciBtYWNyb3MgYXJlIG5vdyBvZiB0aGUgZm9ybSAnQVhfcmVnKGNvbnRleHQpJyBpbnN0ZWFkIG9mICdBWCcuCglUaGlzIG1ha2VzIGNvZGUgbGVzcyByZWFkYWJsZSwgYnV0IHdpbGwgcHJldmVudCBhIGxvdCBvZiBuYW1lCgljbGFzaGVzIHdpdGggb3RoZXIgZGVmaW5pdGlvbnMuIEl0IGFsc28gYXZvaWRzIGEgaGlkZGVuIHJlZmVyZW5jZQoJdG8gdGhlICdjb250ZXh0JyB2YXJpYWJsZS4KCgkqIFtpcGMvZGRlX2F0b20uY10gW21pc2MvYXRvbS5jXQoJQWxsICpBZGRBdG9tIGFuZCAqRmluZEF0b20gZnVuY3Rpb25zIG5vdyB0YWtlIGEgU0VHUFRSIHBhcmFtZXRlciwKCXRvIGFsbG93IHN1cHBvcnRpbmcgaW50ZWdlciBhdG9tcy4KCU1vdmVkIGF0b20uYyB0byBtZW1vcnkvIGRpcmVjdG9yeS4KCgkqIFtsb2FkZXIvdGFzay5jXQoJRml4ZWQgZW52aXJvbm1lbnQgYWxsb2NhdGlvbiB0byBjb21wdXRlIHRoZSBzaXplIGR5bmFtaWNhbGx5LgoJQWRkZWQgJ3dpbmRpcicgZW52aXJvbm1lbnQgdmFyaWFibGUuCglGaXhlZCBHZXRET1NFbnZpcm9ubWVudCgpIHRvIHJldHVybiB0aGUgY3VycmVudCB0YXNrIGVudmlyb25tZW50LgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJRml4ZWQgYnVnIGluIE1TR19HZXRXaW5kb3dGb3JFdmVudCgpLgoKV2VkIEF1ZyAgOSAxMTo0MDo0MyAxOTk1ICBNYXJjdXMgTWVpc3NuZXIgIDxtc21laXNzbkBmYXVpMDEuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbaW5jbHVkZS9vbGUuaF0KCUFkZGVkIGEgbG90IG9mIHN0cnVjdHVyZXMgIGZyb20gbXkgQm9ybGFuZCBNYW51YWwuIE5laXRoZXIgY29tcGxldGUsCglub3IgMTAwJSByaWdodCAoY2hlY2sgcGxlYXNlKQoJCgkqIFttaXNjL3NoZWxsLmNdCglGaXhlZCBzb21lIG9mIHRoZSBSZWcqIGZ1bmN0aW9ucy4KCUVuaGFuY2VkIFNoZWxsRXhlY3V0ZS4KCVBsZWFzZSB0ZXN0OiB3aW5lICJyZWdlZGl0LmV4ZSAvdiIgbXBsYXllci5leGUgc291bmRyZWMuZXhlCglEbyBZT1Uga25vdyB0aGUgZm9ybWF0IG9mIFxXSU5ET1dTXFJFRy5EQVQ/IE1haWwgbWUgcGxlYXNlIDopCgoJKiBbbWlzYy9kb3NfZnMuY10KCU1ha2UgdW1zZG9zIG1vdW50ZWQgd2luZG93cyBkaXJzIHdvcmsgYWdhaW4uCgoJKiBbbWlzY2VtdS9lbXVsYXRlLmNdCglBZGRlZCBzb21lIGNvbW1lbnRzLCBwcmVpbXBsZW1lbnRhdGlvbiBvZiBzdWJmdW5jdGlvbiA3LgoKCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10KCUltcGxlbWVudGVkIG1jaVNlbmRTdHJpbmcuIG5vdCBjb21wbGV0ZSwgbm90IGNsZWFuLCBub3QKCW5lY2Vzc2FyaWx5IHdvcmtpbmcgKG9ubHkgY2hlY2tlZCB3aXRoIGEgcHJvZ3JhbSB3aGljaCB1c2VzCiAJJ2NkYXVkaW8nIChvbmUgd29ya2luZyBwcm9ncmFtIGlzIGNvb2wuZXhlLCBhIHNoYXJld2FyZSB3YXZlZGl0b3IKIAl3aXRoIGNkYXVkaW8gcGxheSBmYWNpbGl0aWVzLikKCgkqIFttdWx0aW1lZGlhL21jaWNkYS5jXQoJU2VncHRyIGZpeGVzIGluIERyaXZlclByb2MKCURlZmF1bHQgY2Ryb20gZHJpdmUgaW4gTGludXggaXMgL2Rldi9jZHJvbSAuLi4gdXN1YWxseSBhIHN5bWJvbGljCiAJbGluayB0byB5b3VyIHJlYWwgY2Ryb20gZGV2aWNlLgoKVHVlIEF1ZyAgOCAxOTo0MTo1MCBDRFQgMTk5NSBEYW5pZWwgU2NoZXBsZXIgPGRrczJAY2VjLnd1c3RsLmVkdT4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCURvbid0IGNyYXNoIGluIGEgTG9hZFN0cmluZyB0byBOVUxMCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglGaXhlZCBhY2NlbGVyYXRvcnMgdG8gd29yayB3aXRoIG1vZGlmaWVycy4gIChBTFQteCBtb2RpZmllcnMgc3RpbGwKIAl3b24ndCB3b3JrIHVubGVzcyB0aGUgQUxUIGtleXByZXNzIGV4aXRlZCB0aGUgbWVudS4pCgoJKiBbbWlzYy9maWxlLmNdCglFeHBhbmQgYSBmaWxlIHRvIHRoZSBjdXJyZW50IG9mZnNldCB3aXRoIGFuIF9sd3JpdGUgb2Ygc2l6ZSB6ZXJvLgoKCSogW21pc2MvZmlsZS5jXQoJU2V0IGEgbmV3bHkgY3JlYXRlZCBmaWxlIHRvIHJlYWQtd3JpdGUgaW5zdGVhZCBvZiB3cml0ZS1vbmx5LgoJClN1biBBdWcgIDYgMjA6Mjg6MzUgMTk5NSAgQW5hbmQgS3VtcmlhIDxha3VtcmlhQG96ZW1haWwuY29tLmF1PgoKCSogW21pc2MvbWFpbi5jXSBbaW5jbHVkZS9tc2Rvcy5oXQoJRml4ZWQgdG8gcmV0dXJuIERPUyB2ZXJzaW9uIDYuMjIsIGFuZCB0aGUgY29ycmVjdCBieXRlIG9yZGVyCglmb3IgV2luZG93cyBwcm9ncmFtcy4KCldlZCBBdWcgIDIgMTI6MzY6MzMgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogW2luY2x1ZGUvb3B0aW9ucy5oXSBbbWVtb3J5L2dsb2JhbC5jXSBbbWlzYy9tYWluLmNdCglNYWtlIHRoZSBuZXcgSVBDIHJ1bi10aW1lIHNlbGVjdGlibGUsIGRpc2FibGluZyBpdCBieSBkZWZhdWx0LgoJKEkgdGhpbmsgaXQncyBvbmx5IHVzZWZ1bCBmb3IgbGlid2luZSwgYW55d2F5LikKCgkqIFtsb2FkZXIvdGFzay5jXSBbbWVtb3J5L3NlbGVjdG9yLmNdCglJbiBGcmVlU2VsZWN0b3IoKSwgd2FsayB1cCB0aGUgc3RhY2sgYW5kIGZpeCB0aGUgZnJhbWVzLgoKCSogW29iamVjdHMvZGliLmNdCglNaXNzaW5nIGJyZWFrIHN0YXRlbWVudCBpbiBESUJfU2V0SW1hZ2VCaXRzX1JMRTgoKS4KCUluIEdldERJQml0cygpLCBzZXQgdGhlIGNvbXByZXNzaW9uIGZsYWcgaW4gdGhlIGJpdG1hcCBpbmZvIHRvIHplcm8uCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUdldE5leHREbGdHcm91cEl0ZW0oKSBuZWVkcyB0byB0cmVhdCB0aGUgZmlyc3QgY2hpbGQgYXMgaWYgaXQgaGFkCglhbiBpbXBsaWNpdCBXU19HUk9VUCBiaXQgc2V0LgoKTW9uIEp1bCAzMSAxNTo0NDo0NyBFRFQgMTk5NSBMb3Vpcy1ELiBEdWJlYXUgPGxkZEBzdGVwLnBvbHltdGwuY2E+CgoJKiBbbWlzYy9kb3NfZnMuY10KCVF1aWNrJ24gZGlydHkgZml4IGZvciB0aGUgaW5pdGlhbGlzYXRpb24gb2YgdGhlIFo6IGluZm9ybWF0aW9uCglzdHJ1Y3R1cmUuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBKdWwgMjIgMjI6Mzk6MDkgSURUIDE5OTUgTWljaGFlbCBWZWtzbGVyIDxlMTY3ODIyM0B0b2NobmFwYzIudGVjaG5pb24uYWMuaWw+CgoJKiBbaXBjLypdCglOZXcgZGlyZWN0b3J5LiBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgbmV3IGludGVyLXdpbmUKIAljb21tdW5pY2F0aW9ucyBzdXBwb3J0LiBJdCBlbmFibGVzIERERSBwcm90b2NvbHMgYmV0d2VlbiB0d28gd2luZQogCWluc3RhbmNlcy4gIEN1cnJlbnRseSBpdCBpcyBsaW1pdGVkIHRvIERERSwgYnV0IGNhbiBiZSBlbmhhbmNlZCB0bwogCXN1cHBvcnQgT0xFIGJldHdlZW4gMiBkaWZmZXJlbnQgd2luZSBpbnN0YW5jZXMuICBUaGlzIGlzIHZlcnkKIAlpbXBvcnRhbnQgZm9yIGxpYndpbmUuYSBEREUvT0xFIHN1cHBvcnQuCgoJKiBbdG9vbHMvaXBjbF0KICAgIAlBIHNjcmlwdCB0byBkZWxldGUgZ2FyYmFnZSBJUEMgaGFuZGxlcyAoc2hhcmVkIG1lbW9yeSwgc2VtYXBob3JlcwogCWFuZCBtZXNzYWdlIHF1ZXVlcykuICBUaGUgY3VycmVudCBpbnRlci13aW5lIGNvbW11bmljYXRpb24gaXMgbm90CiAJcGVyZmVjdCwgYW5kIHNvbWV0aW1lcyBsZWF2ZXMgZ2FyYmFnZSBiZWhpbmQuCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtpbmNsdWRlL2F0b20uaF0gW2luY2x1ZGUvZ2xvYmFsLmhdCiAJW2xvYWRlci9zZWxlY3Rvci5jXSBbbG9hZGVyL3Rhc2suY10gW2xvYWRlci9tb2R1bGUuY10KIAlbbG9hZGVyL3NpZ25hbC5jXSBbbWVtb3J5L2dsb2JhbC5jXSBbbWlzYy9hdG9tLmNdCiAJW3dpbmRvd3MvY2xhc3MuY10gW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy93aW4uY10KCVtJbWFrZWZpbGVdCiAgICAJSG9va3MgZm9yIGludGVyLXdpbmUgRERFIHN1cHBvcnQsIGN1cnJlbnQgR2xvYmFsLipBdG9tIGZ1bmN0aW9ucwogCXJlbmFtZWQgdG8gTG9jYWwuKkF0b20gc2luY2UgR2xvYmFsLipBdG9tIGFyZSB1c2VkIGZvciBJbnRlci1XaW5lCiAJRERFIGNvbW11bmljYXRpb24uIChUaGUgZmlyc3QgY2FsbCB0byB0aGVzZSBmdW5jdGlvbnMgc2V0cyB1cCB0aGUKIAlJUEMgc3RydWN0dXJlcyAtIHdoaWNoIG90aGVyd2lzZSBjYXVzZSB1bm5lZWRlZCBvdmVyaGVhZC4KCk1vbiBKdWwgMTcgMTk6NTU6MjEgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1PgoKCSogW2NvbnRyb2xzL21lbnUuY10KCURvbid0IGNyYXNoIGlmIGEgTlVMTCBzdHJpbmcgaXMgcGFzc2VkIHRvIG1lbnUgZnVuY3Rpb25zLgoKCSogW21lbW9yeS9zZWxlY3Rvci5jXQoJV2Ugbm93IHVzZSBhIGJpdCBpbiBsZHRfZmxhZ3NfY29weSB0byBpbmRpY2F0ZSBmcmVlIExEVCBlbnRyaWVzLgoJRml4ZWQgYSBidWcgaW4gU0VMRUNUT1JfUmVhbGxvY0Jsb2NrIHRoYXQgY291bGQgY2F1c2UgaXQgdG8KCW92ZXJ3cml0ZSB2YWxpZCBMRFQgZW50cmllcyB3aGVuIGdyb3dpbmcgYSBibG9jay4KCgkqIFttaXNjZW11L2luc3RyLmNdCglFbXVsYXRlIGludCB4eCBpbnN0cnVjdGlvbiBieSBzdG9yaW5nIHRoZSBpbnRlcnJ1cHQgdmVjdG9yIGluCglDUzpJUCBhbmQgcmV0dXJuaW5nIGRpcmVjdGx5LiBUaGlzIGFsbG93cyBhIHByb2dyYW0gdG8gaW5zdGFsbCBhbgoJaW50ZXJydXB0IHZlY3Rvci4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQWRkZWQgZnVuY3Rpb24gV0lOX0dldFRvcFBhcmVudCB0byBnZXQgdGhlIHRvcC1sZXZlbCBwYXJlbnQgb2YgYQoJd2luZG93LgoKU3VuIEp1bCAgMTYgMTg6MTc6MTcgMTk5NSAgR3JlZ29yeSBUcnViZXRza295IDxncmlzaGFAbWlyYS5jb20+CgogICAgICAgICogW2xvYWRlci9yZXNvdXJjZS5jXQogICAgICAgIEFkZGVkIExvYWRJY29uSGFuZGxlci4gSXQgZG9lc24ndCBkbyBhbnl0aGluZyB5ZXQsIGJ1dCBub3cgeW91CiAgICAgICAgY2FuIHVzZSBib3JsYW5kIGhlbHAgZmlsZXMgd2l0aCB3aW5oZWxwLmV4ZS4KClN1biBKdWwgMTYgMTE6NTg6NDUgMTk5NSBBbmFuZCBLdW1yaWEgPGFrdW1yaWFAb3plbWFpbC5jb20uYXU+CgoJKiBbbWlzYy9tYWluLmNdCglGaXhlZCB0byByZXR1cm4gMzg2IEVuaGFuY2VkIG1vZGUgY29ycmVjdGx5LiBBbHNvIHJldHVybiB0aGUgc2FtZQogCXR5cGUgb2YgQ1BVLCBmb3IgYm90aCBFbmhhbmNlZCBhbmQgU3RhbmRhcmQgbW9kZSwgbmFtZWx5IGEgMzg2LgoKU3VuIEp1bCAxNiAwMDowMjowNCAxOTk1ICAgIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbQ29uZmlndXJlXSBbaW5jbHVkZS9vcHRpb25zLmhdIFtpbmNsdWRlL3dpbmVvcHRzLmhdCgkgIFttaXNjL21haW4uY11bbWlzYy9zcHkuY10KCSAgUmVtb3ZlZCBzdXBwb3J0IG9mIHNweSBmaWxlLiBSZWRpcmVjdGVkIHNweSBtZXNzYWdlcyB0byBzdGRkZWIuCgkgIFJlbW92ZWQgLXNweSBvcHRpb24uIEFkZGVkIC1kZWJ1Z21zZyArc3B5IG9wdGlvbi4KCgkqIFtkZWJ1Z2dlci9kYmcueV1bZGVidWdnZXIvZGVidWcubF0KCUVuYWJsZWQgc2VnbWVudGVkIGFkZHJlc3NlcyAoc2VnOm9mZnMpIGZvciBicmVhayBhbmQgeCBjb21tYW5kcy4KCgkqIFtpZjE2MzIvZ2RpLnNwZWNdIFtvYmplY3RzL3JlZ2lvbi5jXSBbd2luZG93cy9ncmFwaGljcy5jXQoJICBbaW5jbHVkZS9yZWdpb24uaF0KCUZyYW1lUmduLCBSRUdJT05fRnJhbWVSZ246IE5ldyBmdW5jdGlvbnMKCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdCglJc1dpbk9sZEFwVGFzazogUmV0dXJuIGZhbHNlCgoJKiBbaWYxNjMyL21vdXNlLnNwZWNdCglDcGxBcHBsZXQ6IFJlbW92ZWQKCgkqIFtpZjE2MzIvdXNlci5zcGVjXSBbd2luZG93cy93aW4uY10KCVNob3dPd25lZFBvcHVwczogTmV3IGZ1bmN0aW9uCgoJKiBbaWYxNjMyL3dpbnNvY2suc3BlY10gW21pc2Mvd2luc29ja2V0LmNdCglpbmV0X2FkZHIsIHNlbGVjdDogTmV3IHByb3RvdHlwZXMgaW4gcmVsYXkgY29kZQoJRml4ZWQgbWVtb3J5IGxheW91dCBmb3IgbmV0ZGIgZnVuY3Rpb25zIChnZXRYYnlZKS4KCVdJTlNPQ0tfaW9jdGxzb2NrZXQ6IFRyYW5zbGF0ZWQgRklPTlJFQUQsIEZJT05CSU8sIGFuZCBGSU9BU1lOQwoKCSogW29iamVjdHMvY2xpcHBpbmcuY10KCVJlY3RWaXNpYmxlOiBGaXhlZCBjYWxsIHRvIExQVG9EUAoKCSogW3JjL3dpbmVyYy5jXQoJbWFpbjogUmVtb3ZlZCBleHRyYSBhcmd1bWVudCB0byBnZXRvcHQgZm9yIExpbnV4LgoKVHVlIEp1bCAxMSAwMDoxNDo0MSAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgogICAgICAgICogW2NvbnRyb2xzL2xpc3Rib3guY10KCVlldCBhbm90aGVyIGZpeCBmb3IgTGlzdEJveERpcmVjdG9yeSgpLgoJCgkqIFtsb2FkZXIvbW9kdWxlLmNdIFtpZjE2MzIva2VybmVsLnNwZWNdCglNYWtlIEdldE1vZHVsZUhhbmRsZSgpIGFjY2VwdCBpbnN0YW5jZSBoYW5kbGVzIGFzIHBhcmFtZXRlci4KCiAgICAgICAgKiBbaWYxNjMyL3JlbGF5LmNdIFtsb2FkZXIvdGFzay5jXQoJUHV0IGEgbWFnaWMgY29va2llIGF0IHRoZSBib3R0b20gb2YgdGhlIDMyIGJpdCBzdGFjaywgYW5kIGNoZWNrIG9uCgllYWNoIHJldHVybiBmcm9tIGEgMzIgYml0IGZ1bmN0aW9uIHdoZXRoZXIgaXQncyBzdGlsbCB0aGVyZS4gQ29tcGxhaW4KCWlmIGl0J3Mgbm90LgoKICAgICAgICAqIFtpZjE2MzIvdXNlci5zcGVjXQoJV3JvbmcgZW50cnkgZm9yIENsb3NlRHJpdmVyKCkuCgoJKiBbbWlzYy9kb3NfZnMuY10gW2xvYWRlci90YXNrLmNdIFtpbmNsdWRlL2Rvc19mcy5oXSBbbWlzYy9maWxlLmNdCglbbWlzY2VtdS9pbnQyMS5jXQoJTGFyZ2UgcGFydHMgb2YgZG9zX2ZzLmMgc2ltcGxpZmllZC4gQ2hhbmdlZCBpdCB0byB1c2Ugb25lCgljdXJyZW50IGRyaXZlL2RpcmVjdG9yeSBwZXIgdGFzaywgd2hpY2ggaXMgc2V0IHRvIHRoZSBtb2R1bGUgcGF0aCBvbgoJdGFzayBjcmVhdGlvbi4KCVByZXZlbnQgQ29yZWxQYWludCBmcm9tIGNsb3Npbmcgc3RkaW4uCglvcGVuKCkgd2l0aCBPX0NSRUFUIHNldCBtdXN0IGJlIHBhc3NlZCB0aHJlZSBwYXJhbWV0ZXJzLgoJRE9TIEZpbmRGaXJzdCgpL0ZpbmROZXh0KCkgY291bGQgY3Jhc2ggd2hlbiBGQV9MQUJFTCB3YXMgc2V0LiBGaXhlZCwKCWl0J3MgaW4gRE9TX3JlYWRkaXIoKSBub3cuCgoJKiBbbWlzYy9wcm9maWxlLmNdCglTb21lIGJhZGx5IHdyaXR0ZW4gc29mdHdhcmUgKExvdHVzIEZyZWVsYW5jZSBHcmFwaGljcykgcGFzc2VzIGEgYm9ndXMKCXNpemUgcGFyYW1ldGVyIHRoYXQgY2F1c2VkIFdpbmUgdG8gd3JpdGUgb2ZmIHRoZSBlbmQgb2YgYSBzZWdtZW50LgoJRml4ZWQuIChJdCdzIHByb2JhYmx5IHRvbyBwYXJhbm9pZCBub3cuKQoJCgkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdIFttdWx0aW1lZGlhL3RpbWUuY10gW211bHRpbWVkaWEvam95c3RpY2suY10KCVttdWx0aW1lZGlhL0ltYWtlZmlsZV0gW2lmMTYzMi93aW5wcm9jcy5zcGVjXQoJMTYgYml0IGVudHJ5IHBvaW50IGZvciBNTVN5c1RpbWVDYWxsYmFjay4KCVNwbGl0IG9mZiB0aW1lLmMgYW5kIGpveXN0aWNrLmMgZnJvbSBtbXN5c3RlbS5jLgoJCgkqIFtvYmplY3RzL2RpYi5jXQoJR2V0RElCaXRzKCk6IGNhbGwgWEdldEltYWdlKCkgdmlhIENhbGxUbzMyX0xhcmdlU3RhY2suCgogICAgICAgICogW3dpbmRvd3MvY3Vyc29yLmNdCglEZXN0cm95Q3Vyc29yKCk6IGRvIG5vdGhpbmcgZm9yIGJ1aWx0aW4gY3Vyc29ycy4KCQoJKiBbd2luZG93cy9tZGkuY10KCUhhbGYgb2YgV01fTURJU0VUTUVOVSBpbXBsZW1lbnRlZC4KCQoJKiBbd2luZG93cy93aW4uY10KCUVudW1XaW5kb3dzKCkgYW5kIEVudW1UYXNrV2luZG93cygpIG5ldmVyIGVudW1lcmF0ZWQgYW55IHdpbmRvd3MuCglGaXhlZC4KCgkqIFt3aW5kb3dzLyouY10KCUZpeGVkIEdldFBhcmVudCgpIHRvIHJldHVybiBjb3JyZWN0IHZhbHVlcyBmb3Igb3duZWQgd2luZG93cy4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCURvbid0IHRyeSB0byBhY3RpdmF0ZSBkaXNhYmxlZCB0b3AtbGV2ZWwgd2luZG93cy4KCiAgICAgICAgKiBbd2luZG93cy9ub25jbGllbnQuY10KCVdvcmsgYXJvdW5kIGEgYnVnIGluIGdjYy0yLjcuMC4KCQoJKiBbdG9vbHMvYnVpbGQuY10gW2luY2x1ZGUvc3RhY2tmcmFtZS5oXSBbbWVtb3J5L2dsb2JhbC5jXSAKCVtsb2FkZXIvdGFzay5jXSBbbWVtb3J5L3NlbGVjdG9yLmNdCglTb21lIFZpc3VhbCBCYXNpYyBwcm9ncmFtcyAoYW5kIHBvc3NpYmx5IG90aGVycywgdG9vKSBleHBlY3QgRVMgdG8gYmUgCglwcmVzZXJ2ZWQgYnkgYSBjYWxsIHRvIGFuIEFQSSBmdW5jdGlvbiwgc28gd2UgaGF2ZSB0byBzYXZlIGl0LgoJSW4gR2xvYmFsRnJlZSgpIGFuZCBGcmVlU2VsZWN0b3IoKSwgd2UgbXVzdCBjbGVhciBDVVJSRU5UX1NUQUNLMTYtPmVzIAoJdG8gcHJldmVudCBzZWdmYXVsdHMgaWYgRVMgY29udGFpbmVkIHRoZSBzZWxlY3RvciB0byBiZSBmcmVlZC4KClN1biBKdWwgIDkgMjA6MjE6MjAgMTk5NSAgSm9uIFRvbWJzICA8am9uQGd0ZXgwMi51cy5lcz4KCgkqIFsqLypdCglBZGRlZCBtaXNzaW5nIHByb3RvdHlwZXMgdG8gaGVhZGVyIGZpbGVzIGFuZCByZWxldmFudCBpbmNsdWRlcwoJdG8gcmVkdWNlIGNvbXBpbGUgdGltZSB3YXJuaW5ncy4KClN1biBKdWwgIDkgMTg6MzI6NTYgMTk5NSAgTWljaGFlbCBQYXRyYSAgPG1pY2t5QG1hcmllLnBoeXNpay50dS1iZXJsaW4uZGU+CgoJKiBbY29uZmlndXJlLmluXSBbaW5jbHVkZS9jb25maWcuaF0gWyovTWFrZWZpbGUuaW5dCglOZXcgY29uZmlndXJhdGlvbiBzY2hlbWUgYmFzZWQgb24gYXV0b2NvbmYuCgpTYXQgSnVsICA4IDE0OjEyOjQ1IDE5OTUgIE1vcnRlbiBXZWxpbmRlciAgPHRlcnJhK0Bjcy5jbXUuZWR1PgoKCSogW21pc2NlbXUvaW9wb3J0cy5jXQoJUmV2YW1wIHRvIGhhdmUgb25seSBvbmUgaW4tIGFuZCBvbmUgb3V0LSB2YXJpYW50LCBib3RoIHJlYWxseQogCWltcGxlbWVudGVkLgoKCSogW21pc2NlbXUvaW5zdHIuY10KCUlOU1RSX0VtdWxhdGVJbnN0cnVjdGlvbjogVXNlIG5ldyBpb3BvcnQgaW50ZXJmYWNlLiAgSW1wbGVtZW50CiAJc3RyaW5nIGlvLiAgQ29ycmVjdCBpbnN0cnVjdGlvbiBwb2ludGVyIGZvciAzMi1iaXQgY29kZS4KCgkqIFtpbmNsdWRlL21pc2NlbXUuaF0KCVVwZGF0ZSBwb3J0IGZ1bmN0aW9uIHByb3RvdHlwZXMuCgoJKiBbaW5jbHVkZS9yZWdpc3RlcnMuaF0KCURlZmluZWQgRlMgYW5kIEdTLgoKU2F0IEp1bCAgOCAxMzozODo1NCAxOTk1ICBIYW5zIGRlIEdyYWFmZiAgPGdyYWFmZkB0d2k3Mi50d2kudHVkZWxmdC5ubD4KCgkqIFttaXNjL2Rvc19mcy5jXQoJQ2hvcE9mZlNsYXNoKCk6IEEgcGF0aCBjb25zaXN0aW5nIG9mZiBhIHNpbmdsZSBzbGFzaCBpcyBsZWZ0CiAJaW50YWN0LCBhbmQgbXVsdGlwbGUgc2xhc2hlcyBhcmUgYWxsIHJlbW92ZWQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCldlZCBKdWwgIDUgMTk6MDY6MzUgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1PgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJRml4ZWQgZHJhd2luZyBidWcgdGhhdCBjYXVzZWQgcGFydCBvZiBhIG5vbi1jbGllbnQgc2Nyb2xsIGJhcgoJdG8gYmUgcGFpbnRlZCBldmVuIHdoZW4gdGhlIHNjcm9sbC1iYXIgd2FzIGhpZGRlbi4KCgkqIFtkZWJ1Z2dlci9icmVhay5jXSBbZGVidWdnZXIvZGJnLnldCglSZXdyb3RlIGJyZWFrcG9pbnQgaGFuZGxpbmcgdG8gd29yayBpbiAxNi1iaXQgbW9kZS4KCUltcGxlbWVudGVkIHNpbmdsZS1zdGVwcGluZyAoJ3N0ZXAnIGFuZCAnbmV4dCcgaW5zdHJ1Y3Rpb25zKS4KCgkqIFtkZWJ1Z2dlci9kZWJ1Zy5sXQoJRm9ybWF0IHNwZWNpZmllciBpcyBub3cgYSBzZXBhcmF0ZSB0b2tlbi4KCUVudGVyaW5nIGFuIGVtcHR5IGxpbmUgYXQgdGhlIGRlYnVnZ2VyIHByb21wdCBjYXVzZXMgdGhlIHByZXZpb3VzCgljb21tYW5kIHRvIGJlIHJlcGVhdGVkLCBsaWtlIHVuZGVyIGdkYi4KCQoJKiBbZGVidWdnZXIvZGVidWcubF0gW2RlYnVnZ2VyL3JlZ2lzdGVycy5jXQoJRGlmZmVyZW50aWF0ZSAxNi1iaXQgYW5kIDMyLWJpdCByZWdpc3RlcnMgd2l0aG91dCB0YWtpbmcgY3VycmVudAoJbW9kZSBpbnRvIGFjY291bnQgKCRlYXggaXMgYWx3YXlzIDMyLWJpdCwgJGF4IGFsd2F5cyAxNi1iaXQpLgoKCSogW2RlYnVnZ2VyL3N0YWNrLmNdCglGaXhlZCBzdGFjayBpbmZvcm1hdGlvbiByb3V0aW5lcyB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gMTYtYml0CglhbmQgMzItYml0IHN0YWNrcy4KCgkqIFtsb2FkZXIvdGFzay5jXQoJT3B0aW9uIC1kZWJ1ZyBub3cgc2V0cyBhIGJyZWFrcG9pbnQgYXQgdGhlIGZpcnN0IGluc3RydWN0aW9uIG9mCglldmVyeSBsb2FkZWQgdGFzay4KCgkqIFttaXNjZW11L2luc3RyLmNdCglBZGRlZCBoYW5kbGluZyBvZiBsb2NrLCByZXBlIGFuZCByZXBuZSBwcmVmaXhlcy4KCgkqIFtvYmplY3RzL2RpYi5jXQoJQ2hhbmdlZCBTdHJldGNoRElCaXRzKCkgdG8gZG8gdGhlIGNvcnJlY3QgdGhpbmcsIGV2ZW4gaWYgaXQncyBzdGlsbAoJbm90IHJlYWxseSBvcHRpbWFsLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUZpeGVzIGluIFJvdW5kUmVjdCgpLCB0aGFua3MgdG8gQmFiYWsgTWFzYWxlaGRhbi4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCVRyaWVkIHRvIGZpeCBtb3VzZSBldmVudCBoYW5kbGluZyB3aXRoIHJlc3BlY3QgdG8gZGlzYWJsZWQKCXdpbmRvd3MuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJQ2xlYXIgV0lOX05FRURTX05DUEFJTlQgZmxhZyBiZWZvcmUgc2VuZGluZyBXTV9OQ1BBSU5UIHRvIGF2b2lkCglpbmZpbml0ZSBsb29wcy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJRml4ZWQgSXNXaW5kb3dWaXNpYmxlKCkgdG8gcmV0dXJuIEZBTFNFIHdoZW4gb25lIG9mIHRoZSBwYXJlbnQKCXdpbmRvd3MgaXMgaGlkZGVuLgoKU2F0IEp1bCAgMSAyMjowODoyMSAxOTk1ICAgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtpZjE2MzIvY29tcG9iai5zcGVjXVttaXNjL2NvbXBvYmouY10KCUNvR2V0TWFsbG9jOiBOZXcgZnVuY3Rpb24KCUFkZGVkIHJlbGF5IGVudHJpZXMgZm9yIENPTVBPQkogb3JkaW5hbHMgYWJvdmUgMTAwCglDb0luaXRpYWxpemU6IENoYW5nZWQgcGFyYW1ldGVyIHRvIERXT1JECgoJKiBbaWYxNjMyL29sZTIuc3BlY10KCUV4cG9ydGVkIGltcGxlbWVudGF0aW9uIG9mIE9sZUJ1aWxkVmVyc2lvbgoKCSogW2lmMTYzMi9vbGUyZGlzcC5zcGVjXVttaXNjL29sZTJkaXNwLmNdW21pc2MvSW1ha2VmaWxlXQoJb2xlMmRpc3AuYzogTmV3IGZpbGUKCVN5c0FsbG9jU3RyaW5nLCBTeXNSZWFsbG9jU3RyaW5nLCBTeXNBbGxvY1N0cmluZ0xlbiwKCVN5c1JlQWxsb2NTdHJpbmdMZW4sIFN5c0ZyZWVTdHJpbmcsIFN5c1N0cmluZ0xlbjogbmV3IGZ1bmN0aW9ucwoKCSogW2lmMTYzMi9vbGUybmxzLnNwZWNdW2luY2x1ZGUvd2lubmxzLmhdW21pc2Mvb2xlMm5scy5jXQoJQ29tcGFyZVN0cmluZ0E6IE5ldyBmdW5jdGlvbgoKVGh1IEp1biAyOSAxOTo0MjowMiAxOTk1ICBNYXJjdXMgTWVpc3NuZXIgIDxtc21laXNzbkBmYXVpMDEuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgkqIFtvYmplY3RzL2ZvbnQuY10gW2lmMTYzMi9nZGkuc3BlY10KCU5ldyBzdHVicyBmb3IgQ3JlYXRlU2NhbGFibGVGb250UmVzb3VyY2UsIEdldEdseXBoT3V0bGluZS4KClRodSBKdW4gMjkgMTM6NDc6MDggR01UIDE5OTUgIEf2cmFuIFRoeW5pICAoZ29yYW5Abm9ycnNrZW4uYmlsZGJhc2VuLnNlKQoKCSogW21pc2MvY29tbWRsZy5jXQoJRXh0ZW5zaXZlIGNoYW5nZXMgYW5kIGJ1ZyBmaXhlcyB0byBGaWxlRGlhbG9nIGhhbmRsaW5nLAogICAgICAgIGJlaGF2ZXMgbW9yZSBsaWtlIG5hdGl2ZSBXaW5kb3dzLgoKV2VkIEp1biAyOCAxMzowNDo0NCAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgogICAgICAgICogW2NvbnRyb2xzL2xpc3Rib3guY10gW2NvbnRyb2xzL2NvbWJvLmNdCglTb21lIG1pbm9yIG9wdGltaXphdGlvbnMuCgkKCSogW21lbW9yeS9sb2NhbC5jXQoJTE9DQUxfRmluZEZyZWVCbG9jaygpOiBOZXZlciB1c2UgdGhlIGxhc3Qgb25lLgoJCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglHbG9iYWxSZUFsbG9jKCk6IEdNRU1fTU9ESUZZIG11c3Qgbm90IGJlIGlnbm9yZWQgd2hlbiBzaXplPT0wLgoJCgkqIFttaXNjL2ZpbGUuY10KCXJlYWQoKSByZXR1cm5zIGFuIGVycm9yIHdoZW4gbGVuZ3RoPT0wLiBUaGlzIGlzIG5vdCB3aGF0IFdpbmRvd3MKCXByb2dyYW1zIGV4cGVjdCwgc28gcGF5IGF0dGVudGlvbiB0byB0aGlzIGluIF9scmVhZCgpLiBDaGFuZ2VkIHRoaXMKCWluIF9sd3JpdGUoKSwgX2hyZWFkKCksIF9od3JpdGUoKSwgdG9vLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJTG9hZEljb24oKTogSWdub3JlIGJpaC0+YmlTaXplSW1hZ2UsIHNvbWUgaWNvbnMgaGF2ZSB3cm9uZyB2YWx1ZXMgaW4KCXRoZXJlLgoJCgkqIFtpZjE2MzIvc2hlbGwuc3BlY10gW21pc2Mvc2hlbGwuY10KCVdyb25nIHNwZWMgZmlsZSBlbnRyaWVzIGNhdXNlZCBoYXZvYzogSEtFWSBoYXMgMzIgYml0LCBub3QgMTYuCglBY2NlcHQgc29tZSBtb3JlIGNvbWJpbmF0aW9ucyBvZiBwYXJhbWV0ZXJzIGluIHRoZSBSZWcuLigpIGZ1bmN0aW9ucy4KCQoJKiBbaWYxNjMyL3Rvb2xoZWxwLnNwZWNdCglNYWtlIEludGVycnVwdFJlZ2lzdGVyKCkgYW5kIEludGVycnVwdFVucmVnaXN0ZXIoKSByZXR1cm4gZmFsc2UuCgoJKiBbd2luZG93cy9ob29rLmNdCglDYWxsTmV4dEhvb2tFeCgpIHVzZWQgdG8gY3Jhc2ggd2hlbiBjYWxsZWQgd2l0aCBhIG51bGwgaGhvb2suIEZpeGVkLgoKV2VkIEp1biAyOCAxMDoxNDozNCAxOTk1ICBNYXJ0aW4gdm9uIExvZXdpcyAgPG1hcnRpbkBpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtpbmNsdWRlL25lZXhlLmhdW2xvYWRlci9uZV9pbWFnZS5jXQoJTkVfTG9hZFNlZ21lbnQ6IERldGVjdCBpdGVyYXRlZCBzZWdtZW50cwoKCSogW21pc2Mvb2xlMm5scy5jXQoJTE9DQUxFX1NMT05HREFURTogZml4ZWQgdHlwbwoKCSogW21pc2NlbXUvaW50NWMuY10KCVJlb3JkZXJlZCBpbmNsdWRlIGZpbGVzIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIExpbnV4IGxpYmMuNS4xCgoJKiBbcmMvd2luZXJjLmNdCglBZGRlZCAtYiBvcHRpb24gdG8gcHJvY2VzcyBiaW5hcnkgcmVzb3VyY2UgZmlsZXMgaW50byBDIGFycmF5cwoKCSogW2luY2x1ZGUvY2FsbGJhY2suaF0KCUNhbGxXbmRQcm9jOiBBZGRlZCBkdW1teSBkcyBwYXJhbWV0ZXIgZm9yIGxpYndpbmUKCgkqIFtpbmNsdWRlL2dkaS5oXVtpbmNsdWRlL3VzZXIuaF0KCVVTRVJfSEVBUF9BTExPQywgR0RJX0hFQVBfQUxMT0M6IGRyb3BwZWQgZmxhZ3MgcGFyYW1ldGVyCgoJKiBbaW5jbHVkZS9sZHQuaF1baW5jbHVkZS9zdGFja2ZyYW1lLmhdCglkZWZpbmVkIHNlZ21lbnQgY29udmVyc2lvbiBtYWNyb3MgZm9yIGxpYndpbmUKCgkqIFttaXNjL2F0b20uY10KCURlZmluZWQgVVNFUl9IZWFwU2VsIGZvciBsaWJ3aW5lCgoJKiBbbWlzYy9tYWluLmNdCglEaXNhYmxlIC1kbGwgb3B0aW9uIGZvciBsaWJ3aW5lCgoJKiBbbWlzYy91c2VyLmNdCglyZW1vdmVkIEdldEZyZWVTeXN0ZW1SZXNvdXJjZXMsIFN5c3RlbUhlYXBJbmZvIGZyb20gbGlid2luZSBmb3Igbm93CgoJKiBbdG9vbGtpdC9oZWFwLmNdCglmaXhlZCBMb2NhbExvY2sgcHJvdG90eXBlCgoJKiBbdG9vbGtpdC9zdXAuY10KCXN5bmMnZWQgbG9hZF9tel9oZWFkZXIsIGxvYWRfbmVfaGVhZGVyIHdpdGggc3RydWN0dXJlcwoKCSogW3Rvb2xraXQvd2lubWFpbi5jXQoJRGlzYWJsZWQgcmVzb3VyY2UgRExMcyBmb3IgbGlid2luZSBmb3Igbm93CgpNb24gSnVuIDI2IDE5OjMwOjI0IDE5OTUgIEhhbnMgZGUgR3JhYWZmICAoZ3JhYWZmQHR3aTcyLnR3aS50dWRlbGZ0Lm5sKQoKCSogW21pc2MvbWFpbi5jXQoJRml4ZWQgLWVuaGFuY2VkIG9wdGlvbiB0byByZXBvcnQgYSAzODYgQ1BVIGluc3RlYWQgb2YgYSAyODYuCgpGcmkgSnVuIDIzIDIzOjE4OjI1IDE5OTUgIE1hcmN1cyBNZWlzc25lciAgPG1zbWVpc3NuQGZhdWkwMS5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFttaXNjL2Rvc19mcy5jXQoJUmVtb3ZlIG1heGltdW0gb3BlbiBkb3NkaXJlbnQgbGltaXQgKGZpeGluZyB0aGUgd2luZmlsZS5leGUKIAlwcm9ibGVtKSBieSB1c2luZyB0ZWxsZGlyKCkvc2Vla2RpcigpLgoJCkZyaSBKdW4gMjMgMTM6NDI6MjUgMTk5NSAgSGFucyBkZSBHcmFhZmYgIChncmFhZmZAdHdpNzIudHdpLnR1ZGVsZnQubmwpCgoJKiBbbWlzYy9wcm9maWxlLmNdCglGaXhlZCBwcm9ibGVtIHBhcnNpbmcgZW1wdHkgbGluZXMgd2l0aGluIHNlY3Rpb25zIGluIC5pbmkgZmlsZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1vbiBKdW4gMTkgMjA6Mjk6NTAgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1KQoKCSogW2RlYnVnZ2VyLyouY10KCU1vZGlmaWVkIGRlYnVnZ2VyIHRvIHVzZSBzZWdtZW50ZWQgcG9pbnRlcnMgZXZlcnl3aGVyZS4KCgkqIFtpZjE2MzIvc2hlbGwuc3BlY10gW2lmMTYzMi9zb3VuZC5zcGVjXSBbaWYxNjMyL3VzZXIuc3BlY10KCURlY2xhcmVkIGFsbCBmdW5jdGlvbnMgdGhhdCByZXR1cm4gb25seSAxNi1iaXQgYXMgJ3Bhc2NhbDE2Jy4KCgkqIFtpbmNsdWRlL2xkdC5oXSBbbWVtb3J5L2xkdC5jXQoJRXhwb3J0IExEVF9FbnRyeVRvQnl0ZXMgKG5ldykgYW5kIExEVF9CeXRlc1RvRW50cnkgZm9yIERQTUkuCglNYWludGFpbiBhIGNvcHkgb2YgdGhlIHNlbGVjdG9yIGZsYWdzLCByZW1vdmluZyB0aGUgbmVlZCB0byBtYWtlIGEKCXN5c3RlbSBjYWxsIHRvIHJldHJpZXZlIGFuIExEVCBlbnRyeS4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglGaXhlZCBidWcgd2l0aCBtb2R1bGUgZmlsZSBoYW5kbGUgY2FjaGUuCgoJKiBbbG9hZGVyL25lX3Jlc291cmNlLmNdCglGaXhlZCBmaWxlIG5hbWUgYnVnIGluIE5FX0FjY2Vzc1Jlc291cmNlKCkuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglGaXhlZCBidWcgaW4gTG9hZEljb24oKSB0aGF0IGNhdXNlZCB3cm9uZyBjb2xvcnMgdG8gYmUgdXNlZCBmb3IKCXRoZSBpY29uIG1hc2suCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJTW92ZWQgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIHRvIG1pc2NlbXUvaW5zdHIuYy4KCgkqIFttaXNjL2Rvc19mcy5jXSBbbWlzY2VtdS9pbnQyMS5jXQoJTG90cyBvZiBzbWFsbCBmaXhlcywgdGhhbmtzIHRvIE1vcnRlbiBXZWxpbmRlci4KCgkqIFttaXNjZW11L2RwbWkuY10KCU1vcmUgY29tcGxldGUgRFBNSSBlbXVsYXRpb24uCgoJKiBbbWlzY2VtdS9pbnN0ci5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgcHJlZml4ZXMgaW4gaW5zdHJ1Y3Rpb25zIHRvIGVtdWxhdGUuCgoJKiBbbWlzY2VtdS9pbnQyZi5jXQoJVXNlIHJlZ2lzdGVyIG1hY3JvcyBpbnN0ZWFkIG9mIGRlc3Ryb3lpbmcgdGhlIGhpZ2ggcGFydCBvZiAzMi1iaXQKCXJlZ2lzdGVycy4KCgkqIFtvYmplY3RzL2RjLmNdCglGaXhlZCBidWcgaW4gR2V0RENTdGF0ZSgpIHRoYXQgZmFpbGVkIHRvIGNsZWFyIHRoZSBuZXcgREMuCgoJKiBbcmMvc3lzcmVzLnJjXQoJUmVtb3ZlZCBkaWFsb2dzIDExIGFuZCAxMiB0aGF0IHdlcmUgbmV2ZXIgdXNlZC4KCgkqIFt0b29scy9idWlsZC5jXQoJJ3Bhc2NhbDE2JyBnZW5lcmF0ZWQgZnVuY3Rpb25zIGRpZCBub3Qgc2F2ZSAlZHguCglSZW1vdmVkIHVzZSBvZiAlZnMgdG8gYWNjZXNzIHRoZSBzdGFjay4KCSVkcyBpcyBubyBsb25nZXIgaW5pdGlhbGl6ZWQgYmVmb3JlIGNhbGxpbmcgYSAxNi1iaXQgcm91dGluZS4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJQWNjZXB0IGEgTlVMTCBwb2ludGVyIGFzIHdpbmRvdyB0aXRsZS4KCgkqIFt3aW5kb3dzL21kaS5jXQoJTURJQ2FzY2FkZTogc2tpcCBpY29uaWMgd2luZG93cy4KCUltcGxlbWVudGVkIENhbGNDaGlsZFNjcm9sbCgpLgoJCgkqIFt3aW5kb3dzL3V0aWxpdHkuY10KCUZpeGVkIE11bERpdigpIGZvciBpbGxlZ2FsIHZhbHVlcy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJRml4ZWQgWCBlcnJvciBpbiBDcmVhdGVXaW5kb3dFeCgpIHdoZW4gV01fTkNDQUxDU0laRSByZXR1cm5lZAoJYSB6ZXJvIHdpZHRoIG9yIGhlaWdodC4KClN1biBKdW4gMTggMjI6MjI6MzAgTUVUIERTVCAxOTk1ICBGb25zIEJvdG1hbiAgKGJvdG1hbkBpbnRlci5ubC5uZXQpCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRml4ZWQgInVuaW5pdGFsaXplZCIgbWVzc2FnZSB3aGljaCAtV2FsbCBjb3VsZG50IHNlZSB0byBiZSBvawoJaW4gRURJVF9Xcml0ZVRleHQuCgoJKiBbaW5jbHVkZS9kZWJ1Zy5oXQoJQWRkZWQgZGVmaW5lIGZvciBleHRyYSBjaGVja3MgaW4gQVBJIGRlZmluaXRpb25zIGR1cmluZyBkZWJ1Z2dpbmcuCgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdCglBZGRlZCBuZXdsaW5lIGluIE5FX0ZpeHVwUHJvbG9ncyB0byBhdm9pZCBsb25nIGxpbmVzLgoKCSogW21pc2MvZG9zX2ZzLmNdCglBZGRlZCBleHRyYSBzYWZldHkgY2hlY2sgaW4gRE9TX1ZhbGlkRHJpdmUuCgoJKiBbbWlzYy9leGVjLmNdCglGaXhlZCBkZWZpbml0aW9uIG9mIEV4aXRXaW5kb3dzLgoJClN1biBKdW4gMTggMjE6MTY6MDggMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCVNvbWUgZml4ZXMsIG1vc3RseSBmb3IgbWVtb3J5IG1hbmFnZW1lbnQsIGJ1dCBhbHNvIGZvciB0ZXh0IHNlbGVjdGlvbgoJYW5kIHRhYiBwb3N0aXRpb25zLiBHZW5lcmFsIGNsZWFudXAuIE5vdGVwYWQuZXhlIG5vdyB3b3Jrcy4KCgkqIFtjb250cm9scy9jb21iby5jXQoJRml4OiB0aGUgaHduZCBmaWVsZCBvZiB0aGUgRFJBV0lURU1TVFJVQ1Qgc2hvdWxkIGFsd2F5cyBiZSB0aGF0IG9mCgl0aGUgY29tYm8gYm94LCBub3QgdGhlIENvbWJvTEJveCB0aGF0IGJlbG9uZ3MgdG8gaXQuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJSGFuZGxlIGl0ZW1JRCBmaWVsZCBjb3JyZWN0bHkgdGhyb3VnaG91dC4KCgkqIFttZW1vcnkvbG9jYWwuY10KCUltcGxlbWVudGVkIGZsYWcgTE1FTV9aRVJPSU5JVC4KCUxvY2FsUmVBbGxvYygpIGNvdWxkIHRyYXNoIHRoZSBoZWFwLiBGaXhlZC4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUZPTlRfTWF0Y2hGb250KCk6IGRvbid0IGdldCBjb25mdXNlZCBieSBuZWdhdGl2ZSB3aWR0aHMuCglGaXhlZCBhIHNlZ2ZhdWx0IGluIEVudW1Gb250cygpLgoKCSogW29iamVjdHMvdGV4dC5jXQoJRHJhd1RleHQoKTogRFRfQ0FMQ1JFQ1QgaW1wbGllcyBEVF9OT0NMSVAuCgoJKiBbb2JqZWN0cy9kY3ZhbHVlcy5jXQoJTUFLRUxPTkcgd2FzIHVzZWQgd2l0aCBiYWQgcGFyYW1ldGVycyBpbiBEQ19HRVRfWF9ZLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglEb24ndCBzaG93IHRoZSBkaWFsb2cgaWYgV1NfVklTSUJMRSBpc24ndCBzZXQgaW4gdGhlIHRlbXBsYXRlLgoKCSogW3dpbmRvd3MvdXRpbGl0eS5jXQoJVVRJTElUWV9jb252ZXJ0QXJncygpOiBOZXZlciBwYXNzIGFuIGV4cHJlc3Npb24gY29udGFpbmluZyArKyBpbnRvIGEKCW1hY3JvLi4uCgoJKiBbd2luZG93cy93aW4uY10KCVNldFBhcmVudCgpIHNob3VsZCB1bmxpbmsgdGhlIHdpbmRvdyBiZWZvcmUgY2hhbmdpbmcgdGhlIHBhcmVudC4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCURvbid0IGNhbGwgdGltZXIgZnVuY3Rpb25zIHZpYSBDYWxsV2luZG93UHJvYygpLCBzaW5jZSBpdCBjaGVja3MKCXdoZXRoZXIgaHduZD09MCBhbmQgZG9lcyBub3QgY2FsbCB0aGUgZnVuY3Rpb24gaW4gdGhhdCBjYXNlLgoKCSogW21pc2NlbXUvaW5zdHIuY10KCUlnbm9yZSBpbnRlcnJ1cHQgMHgzRCwgZm9yIFZCUlVOMzAwLkRMTC4KCgkqIFttaXNjL2NvbW1kbGcuY10KCURvbid0IHJlbHkgb24gdGhlIGl0ZW1EYXRhIGZpZWxkIG9mIHRoZSBEUkFXSVRFTVNUUlVDVCB0byBjb250YWluIGEKCXBvaW50ZXIgdG8gdGhlIGl0ZW0gdGV4dC4KCgkqIFtpZjE2MzIvcmVsYXkuY10KCURpc2FibGUgT0xFIGFuZCBEREVNTCBETExzIGJ5IGRlZmF1bHQsIHNpbmNlIHRoZXkgY29udGFpbiBub3RoaW5nIGJ1dAoJc3R1YnMgYW55d2F5LiBTSEVMTCwgQ09NTURMRyBhbmQgV0lOODdFTSBhcmUgbGVmdCBlbmFibGVkLCBhbHRob3VnaAoJc29tZSBwcm9ncmFtcyBtYXkgd29yayBiZXR0ZXIgd2l0aG91dCB0aGVtLgoJCgkqIFttdWx0aW1lZGlhLyouY10gW2luY2x1ZGUvbXVsdGltZWRpYS5oXSBbaW5jbHVkZS9kcml2ZXIuaF0KCUJlZ3VuIGNsZWFuaW5nIHRoaW5ncyB1cCBhIGxpdHRsZS4gUmVwbGFjZWQgcHJpbnRmcyB3aXRoIGRwcmludGZfCgltYWNyb3MsIG1hZGUgZnVuY3Rpb25zIHN0YXRpYyB3aGVyZSBwb3NzaWJsZSwgYW5kIHNvbWUgb3RoZXIgbWlub3IKCWNoYW5nZXMuCgpTdW4gSnVuIDExIDIzOjE5OjEwIDE5OTUgIE1hcnRpbiB2b24gTG9ld2lzICA8bWFydGluQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2RlYnVnZ2VyL2RiZy55XVtkZWJ1Z2dlci9kYmcubF0KCVJlbW92ZWQgc3BlY2lhbCBoYW5kbGluZyBmb3IgRklMRV9JREVOVElGRVIsIGJlY2F1c2UgaXQgY2F1c2VkCglwcm9ibGVtcyB3aXRoIHgvPGZvcm1hdD4gc3RhdGVtZW50cy4KCgkqIFtkZWJ1Z2dlci9pbmZvLmNdCglVc2UgU0NfRVNQIGluc3RlYWQgb2YgU0NfRUlQIGZvciBzdGFjayBkdW1wLgoKCSogW21pc2MvY29tcG9iai5jXVtpZjE2MzIvY29tcG9iai5zcGVjXQoJQ29CdWlsZFZlcnNpb24sIENvSW5pdGlhbGl6ZSwgQ29VbmluaXRpYWxpemU6IG5ldyBmdW5jdGlvbnMKCgkqIFttaXNjL29sZTIuY11baWYxNjMyL29sZTIuc3BlY11bbWlzYy9JbWFrZWZpbGVdW2luY2x1ZGUvb2xlMi5oXQoJTmV3IGZpbGVzIG9sZTIuYywgb2xlMi5oCglPbGVCdWlsZFZlcnNpb24sIE9sZUluaXRpYWxpemUsIE9sZVVuaW5pdGlhbGl6ZTogbmV3IGZ1bmN0aW9ucwoKCSogW2lmMTYzMi9vbGUyZGlzcC5zcGVjXQoJQWRkZWQgbWlzc2luZyBvcmRpbmFscyBhYm92ZSAxMDkKCgkqIFttaXNjL29sZTJubHMuY11baWYxNjMyL29sZTJubHMuc3BlY11baW5jbHVkZS93aW5ubHMuaF0KCU5ldyBmaWxlIHdpbm5scy5oCglHZXRMb2NhbGVJbmZvQTogbmV3IGZ1bmN0aW9uCgoJKiBbaWYxNjMyL3NoZWxsLnNwZWNdCglBZGRlZCBGaW5kRW52aXJvbm1lbnRTdHJpbmcgYXMgc3R1YgoKCSogW21pc2Mvb2xlY2xpLmNdW2lmMTYzMi9vbGVjbGkuc3BlY10KCU9sZUlzRGNNZXRhOiBOZXcgZnVuY3Rpb24KCgkqIFtvYmplY3RzL2ZvbnRdW21pc2MvZ2RpLnNwZWNdCglHZXRLZXJuaW5nUGFpcnM6IG5ldyBmdW5jdGlvbgoKCSogW21pc2Mvc2hlbGwuY10KCVNoZWxsRXhlY3V0ZTogSW1wbGVtZW50ZWQgc3VwcG9ydCBmb3Igc3RhcnRpbmcgcHJvZ3JhbXMKCgkqIFtpZjE2MzIvdXNlci5zcGVjXQoJSW5zZXJ0ZWQgbWlzc2luZyByZWxheSB0byBHZXRDbGlwQ3Vyc29yCgpTdW4gSnVuIDExIDIwOjM0OjQ3IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KICAgICAgICAKCSogW2NvbnRyb2xzL2VkaXQuY10KCUZpeCBhIHByb2JsZW0gd2l0aCB0aGUgbG9jYWwgaGVhcC4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglGaXhlZCB3cm9uZyBkZWNsYXJhdGlvbnMgb2YgQ0FUQ0hCVUYgYW5kIExQQ0FUQ0hCVUYuCgkKCSogW2luY2x1ZGUvbWRpLmhdIFt3aW5kb3dzL21kaS5jXQoJVGhpcyBjb2RlIHN0aWxsIGFzc3VtZWQgc2VnbWVudGVkIGFkZHJlc3M9PWxpbmVhciBhZGRyZXNzLiBGaXhlZC4KCgkqIFtpbmNsdWRlL21zZG9zLmhdIFttaXNjL2Rvc19mcy5jXQoJVGhlIGZpbGVtYXNrIGZpZWxkIG9mIHRoZSBkb3NkaXJlbnQgc3RydWN0dXJlIGNvdWxkIGJlIG92ZXJydW4uIEZpeGVkLgoJSWYgeW91IGhhZCBhIGZpbGUgY2FsbGVkIGZvb2JhciBhbmQgYSBmaWxlIGNhbGxlZCBmb28sIHRyeWluZyB0byAKCUZpbmRGaWxlKGZvbykgY291bGQgYWNjaWRlbnRhbGx5IGZpbmQgZmlsZSBmb29iYXIgaW5zdGVhZC4gRml4ZWQuCgkKCSogW21pc2MvZmlsZS5jXQoJT3BlbkZpbGUoKTogQWx3YXlzIHJldHVybiB0aGUgZnVsbCBwYXRobmFtZSBpbiBvZnMtPnN6UGF0aE5hbWUuIFRoaXMgCglhbHNvIGZpeGVzIEdldE1vZHVsZUZpbGVuYW1lKCkuCglQcmV2ZW50IF9sY2xvc2UoKSBmcm9tIGNsb3Npbmcgc3RkZXJyIG9yIHN0ZG91dC4KCgkqIFttaXNjL3Byb2ZpbGUuY10KCVNlYXJjaCBmb3IgLmluaSBmaWxlcyBpbiB0aGUgcGF0aCBvZiB0aGUgY3VycmVudCBtb2R1bGUgYXMgd2VsbC4KCShOZWVkZWQgYnkgTG90dXMgT3JnYW5pemVyLikKCgkqIFtsb2FkZXIvdGFzay5jXSBbbG9hZGVyL25lX2ltYWdlLmNdIFtsb2FkZXIvbW9kdWxlLmNdCglbbWVtb3J5L2xvY2FsLmNdCglMb2NhbCBoZWFwcyBhcmUgbm93IGluaXRpYWxpemVkIGJ5IEluaXRUYXNrKCkgZm9yIGV4ZWN1dGFibGVzLiBETExzCgloYXZlIHRvIGNhbGwgTG9jYWxJbml0KCkgdGhlbXNlbHZlcywgTG9jYWxJbml0KCkgaGFzIHRvIHB1dCB0aGUKCWhlYXAgYXQgdGhlIGVuZCBvZiB0aGUgc2VnbWVudCB3aGVuIGNhbGxlZCB3aXRoIHN0YXJ0PT0wLiBXZSBubyBsb25nZXIKCWFsbG9jYXRlIHRoZSBER1JPVVAgd2l0aCA2NGsgb24gc3RhcnR1cCwgYnV0IGdyb3cgdGhlIGxvY2FsIGhlYXAKCWluIExPQ0FMX0dldEJsb2NrKCkgd2hlbiBuZWNlc3NhcnkuCgogICAgICAgICogW2xvYWRlci9tb2R1bGUuY10KCUxvYWRMaWJyYXJ5KCkgc2hvdWxkIGNhbGwgTG9hZE1vZHVsZSgpIGluIGFsbCBjYXNlcywgZXZlbiBpZiB0aGUKCURMTCBpcyBhbHJlYWR5IGxvYWRlZCwgdG8gZW5zdXJlIHRoYXQgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBjb3JyZWN0LgoKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJU29tZSBjaGFuZ2VzIHRvIGZ1bmN0aW9uIHByb2xvZyBmaXh1cC4gRG9lcyBhbnlvbmUga25vdyBleGFjdGx5IGhvdwoJdGhpcyBpcyBzdXBwb3NlZCB0byB3b3JrPyBJIGFtIG9ubHkgZ3Vlc3NpbmcgaGVyZS4KCUluIE5FX0luaXRpYWxpemVETExzKCksIGluaXRpYWxpemUgdGhlIERMTHMgYSBtb2R1bGUgcmVmZXJzIHRvIGJlZm9yZQoJdGhlIG1vZHVsZSBpdHNlbGYuCgkKICAgICAgICAqIFtsb2FkZXIvdGFzay5jXQoJSW5pdGlhbGl6ZSBpbnN0YW5jZSBkYXRhIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIERHUk9VUCBpbiBJbml0VGFzaygpLgoKCSogW21lbW9yeS9sb2NhbC5jXQoJU29tZSBmaXhlcyBmb3IgbW92ZWFibGUgYmxvY2tzLgoKCSogW21lbW9yeS9zZWxlY3Rvci5jXQoJQWxsIHRoZSBJc0JhZCpQb2ludGVyKCkgZnVuY3Rpb25zIHJldHVybmVkIGV4YWN0bHkgdGhlIHdyb25nIGJvb2xlYW4KCXZhbHVlIGluIGFsbCBjYXNlcyEKCQoJKiBbb2JqZWN0cy9iaXRibHQuY10KCUZpeGVkIGFub3RoZXIgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGRlYnVnZ2luZyBvdXRwdXQuCgkKCSogW29iamVjdHMvZm9udC5jXQoJU29tZSBtb3JlIHJlY292ZXJ5IHBvc3NpYmlsaXRpZXMgZm9yIEZPTlRfTWF0Y2hGb250KCkgaWYgYSBzcGVjaWZpZWQKCWZvbnQgZG9lcyBub3QgZXhpc3QuCgkKCSogW3dpbmRvd3Mvd2luLmNdCglUaGUgZGlhbG9nIGNvZGUgbWF5IGNhbGwgQ3JlYXRlV2luZG93RXggd2l0aCBhbiBpbnRlZ2VyIGluIHdpbmRvd05hbWUuCglUaGlzIGhhcHBlbnMgZm9yIHN0YXRpYyBpY29uIGNvbnRyb2xzIHRoYXQgZXhwZWN0IGEgcmVzb3VyY2UgSUQgYXMKCXRoZSB3aW5kb3cgbmFtZS4gQ3JlYXRlV2luZG93RXgoKSB1c2VkIHRvIGNyYXNoLiBGaXhlZC4KCQoJKiBbd2luZG93cy9jbGFzcy5jXSBbd2luZG93cy93aW4uY10KCVdpbmRvdyBjbGFzc2VzIGFyZSBvd25lZCBieSBtb2R1bGVzLCBub3QgaW5zdGFuY2VzLiBDaGFuZ2VkCglSZWdpc3RlckNsYXNzKCksIFVucmVnaXN0ZXJDbGFzcygpLCBHZXRDbGFzc0luZm8oKSBhbmQgQ3JlYXRlV2luZG93RXgoKQoJYWNjb3JkaW5nbHkuCgpTYXQgSnVuIDEwIDE2OjEwOjUzIDE5OTUgIE9sYWYgRmxlYmJlIDxvLmZsZWJiZUBzY2llbmNlLWNvbXB1dGluZy51bmktdHVlYmluZ2VuLmRlPgoKCSogW21pc2NlbXUvaW50MjEuY10KCSAgY2xvY2suZXhlIHdhcyBkaXNwbGF5aW5nIGluY29ycmVjdCB5ZWFyLgoKRnJpIEp1biA5IDIwOjM2OjU2IDE5OTUgIFZpY3RvciBTY2huZWlkZXIgPHRhaWxvckBjcmwuY29tPgoKCSogW2luY2x1ZGUvY3Vyc29yLmhdIFt3aW5kb3dzL2N1cnNvci5jXQoJSW1wbGVtZW50ZWQgQ3JlYXRlQ3Vyc29ySWNvbkluZGlyZWN0KCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBKdW4gIDYgMTI6MTE6NDEgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1KQoKCSogW2NvbnRyb2xzL21lbnUuY10KCUZpeGVkIGJ1ZyB3aXRoIGRyYXdpbmcgbXVsdGktY29sdW1uIG1lbnVzIHdpdGggdmVydGljYWwgc2VwYXJhdG9yLgoKCSogW2RlYnVnZ2VyL2RlYnVnLmxdCglGaXhlZCBOVUxMLXBvaW50ZXIgcmVmZXJlbmNlIGFmdGVyIHJlYWRsaW5lKCkuCgoJKiBbaWYxNjMyL3dpbnByb2NzLnNwZWNdIFttaXNjZW11L2ludDIxLmNdIFttaXNjZW11L2ludGVycnVwdHMuY10KCUFkZGVkIGludGVycnVwdCB2ZWN0b3IgZW11bGF0aW9uLiBBbGxvd3MgdG8gcmV0cmlldmUgYW4gaW50ZXJydXB0Cgl2ZWN0b3IgYW5kIGp1bXAgdG8gaXQgd2l0aG91dCBjcmFzaGluZy4KCgkqIFtsb2FkZXIvbGR0LmNdCglNb3ZlZCBsZHQuYyB0byBtZW1vcnkgZGlyZWN0b3J5LgoKCSogW2xvYWRlci90YXNrLmNdCglJbXBsZW1lbnRlZCBMb2NrQ3VycmVudFRhc2soKSBhbmQgR2V0SW5zdGFuY2VEYXRhKCkuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCUZpeGVkIGEgYnVnIHRoYXQgY2F1c2VkIFN0cmV0Y2hCbHQoKSB0byB1c2Ugd3JvbmcgY29sb3JzIHdoZW4KCXN0cmV0Y2hpbmcgYSBtb25vY2hyb21lIGJpdG1hcCB0byBhIGNvbG9yIGRpc3BsYXkuCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10KCUZpeGVkIGEgc2VnbWVudGVkIHBvaW50ZXIgYnVnIGluIENyZWF0ZUJpdG1hcEluZGlyZWN0KCkuCgoJKiBbdG9vbHMvYnVpbGQuY10KCUFkZGVkIHBvc3NpYmlsaXR5IHRvIGhhdmUgYXJndW1lbnRzIGZvciByZWdpc3RlciBmdW5jdGlvbnM7IHVzZWQKCWJ5IGludGVycnVwdCB2ZWN0b3JzIHRvIHJlbW92ZSB0aGUgZmxhZ3MgZnJvbSB0aGUgc3RhY2suCglHZW5lcmF0ZSBhIG5ldyBmdW5jdGlvbiBDYWxsVG8zMl9MYXJnZVN0YWNrKCksIHRoYXQgYWxsb3dzIGNhbGxpbmcKCWEgMzItYml0IGZ1bmN0aW9uIHVzaW5nIHRoZSBvcmlnaW5hbCAzMi1iaXQgc3RhY2ssIGZvciBmdW5jdGlvbnMKCXRoYXQgbmVlZCBtb3JlIHRoYXQgNjRrIG9mIHN0YWNrLgoKVHVlIE1heSAzMCAxMDoyOTo1NiAxOTk1ICBNYXJ0aW4gdm9uIExvZXdpcyAgPG1hcnRpbkBpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtpZjE2MzIvc2hlbGwuc3BlY10gW21pc2Mvc2hlbGwuY10KCURvRW52aXJvbm1lbnRTdWJzdDogZml4ZWQgcHJvdG90eXBlCgoJKiBbaWYxNjMyL2dkaS5zcGVjXSBbb2JqZWN0cy9wYWxldHRlLmNdCglTZXRTeXN0ZW1QYWxldHRlVXNlOiBuZXcgZnVuY3Rpb24KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFtsb2FkZXIvcmVzb3VyY2UuY10KCURpcmVjdFJlc0FsbG9jOiBuZXcgZnVuY3Rpb24KCgkqIFtpZjE2MzIvdXNlci5zcGVjXSBbd2luZG93cy9rZXlib2FyZC5jXQoJU2V0S2V5Ym9hcmRTdGF0ZTogbmV3IGZ1bmN0aW9uCgpNb24gTWF5IDI5IDEyOjU4OjI4IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KICAgICAgICAKCSogW3Rvb2xzL2J1aWxkLmNdCiAgICAgICAgUHJldmVudCBpbnRlcnJ1cHRzIGZyb20gZGVzdHJveWluZyB0aGUgYXJncyBmb3IgYSAzMiBiaXQgZnVuY3Rpb24KICAgICAgICBieSBsb2FkaW5nIHRoZSBjb3JyZWN0IHZhbHVlIGludG8gJWVzcCBkaXJlY3RseSBhZnRlciAlc3MuCgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdIFtsb2FkZXIvbW9kdWxlLmNdCglUaGUgbmV3IGluc3RhbmNlIG11c3QgYmUgY3JlYXRlZCBlYXJsaWVyIGluIExvYWRNb2R1bGUoKSwgc28gdGhhdAoJZml4dXBzIHJlZmVyZW5jaW5nIGl0IHdpbGwgYmUgaGFuZGxlZCBjb3JyZWN0bHkuCiAgICAgICAgSW5pdGlhbGl6ZSB0aGUgbG9jYWwgaGVhcCBmb3IgYSBER1JPVVAgaW4gTkVfTG9hZFNlZ21lbnQoKS4KCQoJKiBbb2JqZWN0cy9kaWIuY10KCUxpa2UgUkxFOCBiaXRtYXBzLCBSTEU0IGJpdG1hcHMgZG9uJ3QgYWx3YXlzIGVuZCB3aXRoIGEgcHJvcGVyIGNvZGUuCglUaGlzIHVzZWQgdG8gY3Jhc2ggV2luZS4gRml4ZWQuCgogICAgICAgICogW29iamVjdHMvdGV4dC5jXQoJRml4IHBvc3NpYmxlIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBkZWJ1Z2dpbmcgb3V0cHV0LgoJCgkqIFttaXNjL2NvbW1kbGcuY10KCUhhbmRsZSB1c2VyIGlucHV0IGluIHRoZSBlZGl0IGNvbnRyb2wgYmV0dGVyLiBTb21lIGJ1Z3MgZml4ZWQuCgkKCSogW21lbW9yeS9sb2NhbC5jXQoJU3RhcnRlZCBpbXBsZW1lbnRpbmcgbW92ZWFibGUgYmxvY2tzLiBUaGlzIGlzIHVuZmluaXNoZWQgKCEpLCBidXQKCWF0IGxlYXN0IGl0IGRvZXMgbm90IHNlZW0gdG8gYnJlYWsgdGhpbmdzLgoKV2VkIE1heSAyNCAxMzoyNjozNiAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CiAgICAgICAgCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglMb2FkTW9kdWxlKCk6IERMTHMgb2NjYXNpb25hbGx5IGhhdmUgYSBkYXRhIHNlZ21lbnQsIGFuZCB0aGV5IHdvcmsKCW11Y2ggYmV0dGVyIGlmIGl0IGlzIGxvYWRlZCA6LSkKCUxvYWRMaWJyYXJ5KCk6IHBhc3MgSE1PRFVMRSBpbnN0ZWFkIG9mIEhJTlNUQU5DRSB0byBORV9Jbml0aWFsaXplRExMcy4KCUZpbmRNb2R1bGUoKTogYWxzbyBzdHJpcCBvZmYgdGhlIGxhc3QgYmFja3NsYXNoIG9mIHRoZSBwYXRobmFtZXMKCShXaW5oZWxwIHRyaWVkIHRvIGxvYWQgQzpcV0lORE9XU1xTWVNURU1cQ09NTURMRy5ETEwpLgoJR2V0TW9kdWxlSGFuZGxlKCk6IGp1c3QgY2FsbCBNT0RVTEVfRmluZE1vZHVsZSwgaXQgZG9lcyB0aGUgc2FtZSBqb2IsCglvbmx5IGJldHRlci4KCQoJKiBbbG9hZGVyL25lX2ltYWdlLmNdCglMb2NhbEluaXQoKSB0aGUgaGVhcCBvZiBhIERMTCBpbiBORV9Jbml0RExMLiAoVGhpcyBpcyBwcm9iYWJseQoJbm90IHJlYWxseSBjb3JyZWN0LCBpdCBzZWVtcyB0aGF0IGFsbCBwcm9ncmFtcyBhbmQgRExMcyB0cnkgdG8gZG8KCXRoaXMgdGhlbXNlbHZlcy4gQnV0IHRoZXkgcGFzcyB3ZWlyZCBwYXJhbWV0ZXJzLikKCU5FX0luaXRpYWxpemVETExzIHNob3VsZCBhbHNvIGNhbGwgTkVfSW5pdERMTCBmb3IgdGhlIHBhc3NlZCBoTW9kdWxlLgoJCgkqIFtsb2FkZXIvdGFzay5jXSBbbWlzYy91c2VyLmNdCglGaW5pc2ggZ2xvYmFsIGluaXRpYWxpemF0aW9ucyBpbiBJbml0VGFzayBpbnN0ZWFkIG9mIEluaXRBcHAsIG9yCglhbGwgdGhlIERMTHMgd2lsbCBiZSBpbml0aWFsaXplZCBpbiBJbml0VGFzayB3aXRob3V0IGFueSBhdmFpbGFibGUKCXdpbmRvdyBjbGFzc2VzIQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTWF5IDIxIDEyOjMwOjMwIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdSkKCgkqIFtkZWJ1Z2dlci9oYXNoLmNdIFtkZWJ1Z2dlci9pbmZvLmNdCglBZGRlZCBzdXBwb3J0IGZvciBzeW1ib2xpYyBzZWdtZW50ZWQgYWRkcmVzc2VzLiBBZGQgc3ltYm9scyBmb3IgYWxsCglidWlsdC1pbiBBUEkgZW50cnkgcG9pbnRzLgoKCSogW2lmMTYzMi9yZWxheS5jXSBbaW5jbHVkZS9kbGxzLmhdCglSZW1vdmVkIGRsbF90YWJsZSBzdHJ1Y3R1cmUsIGFzIHdlIG5vdyB1c2UgdGhlIGJ1aWx0LWluIG1vZHVsZQoJc3RydWN0dXJlcy4KCgkqIFtpZjE2MzIvcmVsYXkuY10gW2xvYWRlci9tYWluLmNdCglSZW1vdmVkIHdpbmVzdGF0IG9wdGlvbiwgYXMgaXQgd2FzIG5vIGxvbmdlciB2ZXJ5IG1lYW5pbmdmdWwuCgoJKiBbaW5jbHVkZS9zdGFja2ZyYW1lLmhdCglOZXcgbWFjcm8gTUFLRV9TRUdQVFIgdGhhdCBjcmVhdGVzIGEgc2VnbWVudGVkIHBvaW50ZXIgdG8gYSBsb2NhbAoJdmFyaWFibGUgb24gdGhlIDMyLWJpdCBzdGFjay4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglBZGRlZCBzdXBwb3J0IGZvciBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgYW4gYXBwbGljYXRpb24uCglJbXBsZW1lbnRlZCBMb2FkTW9kdWxlKCkgYW5kIEZyZWVNb2R1bGUoKS4KCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10gW2xvYWRlci90YXNrLmNdCglNb3ZlZCBpbml0aWFsaXNhdGlvbiBvZiBidWlsdC1pbiBETExzIHRvIEluaXRUYXNrKCkuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJSW1wbGVtZW50ZWQgZGlzY2FyZGFibGUgYmxvY2tzLgoKCSogW21pc2MvZmlsZS5jXQoJU2VhcmNoIHBhdGggb2YgY3VycmVudCBleGVjdXRhYmxlIGluIE9wZW5GaWxlKCkuCglGaXhlZCBidWcgd2l0aCBzZWFyY2hpbmcgaW4gV2luZG93cyBwYXRoLgoKCSogW21pc2MvbHN0ci5jXQoJSGFyZC1jb2RlZCB0cmFuc2xhdGlvbiB0YWJsZXMgZm9yIEFuc2k8LT5PZW0uCgoJKiBbbWlzYy91c2VyLmNdCglNb3ZlZCBzb21lIGdsb2JhbCBpbml0aWFsaXphdGlvbnMgdG8gSW5pdEFwcCgpLCBiZWNhdXNlIHRoZXkgbmVlZAoJYSB0YXNrIGNvbnRleHQgdG8gYmUgcGVyZm9ybWVkLgoKCSogW29iamVjdHMvZGMuY10KCUhhbmRsZSBSMl9CTEFDSyBhbmQgUjJfV0hJVEUgc3BlY2lhbGx5IHNvIHRoYXQgdGhleSB3b3JrIGNvcnJlY3RseQoJd2l0aCBwYWxldHRlIGRpc3BsYXlzLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglTdXBwcmVzc2VkIGdlbmVyYXRpb24gb2YgdGhlIEMgZmlsZSBmb3IgRExMIHNwZWNzLCBiZWNhdXNlIGl0J3Mgbm8KCWxvbmdlciBuZWVkZWQuIE91dHB1dCBhbGwgdGhlIGFzc2VtYmx5IGNvZGUgZGlyZWN0bHkgdG8gc3Rkb3V0LgoJU29tZSBjaGFuZ2VzIHRvIGludGVncmF0ZSBXaW4zMiBzdXBwb3J0IGZyb20gTWFydGluIHZvbglMb2V3aXMuIAoKCSogW3dpbmRvd3MvbXNnYm94LmNdCglNb3ZlZCBtZXNzYWdlIGJveCBjb2RlIGZyb20gbWlzYy8gdG8gd2luZG93cy8uCgpNb24gTWF5IDE1IDIzOjQwOjA0IDE5OTUgIE1hcnRpbiBBeW90dGUgKHdpbmVAdHJnY29ycC5ta3NpbmZvLnFjLmNhKQoKCSogW21pc2MvYXVkaW8uY10gW21pc2MvbWNpY2RhLmNdIFttaXNjL21jaWFuaW0uY10gW21pc2MvbWlkaS5jXQoJICBbbWlzYy9tbWF1eC5jXSBbbWlzYy9tbXN5c3RlbS5jXQoJTW9kaWZ5IGNvZGUgJiB1c2UgcG9pbnRlcnMgY29udmVyc2lvbiBtYWNyb3MuCglNYWtlIGNkYXVkaW8gJiB3YXZlIGRldmljZXMgd29yayBhZ2FpbiAob25seSB1c2luZyBzb21lIGFwcGxldHMpLgoKCSogW21pc2MvcHJvZmlsZS5jXQoJQ2hhbmdlIGdldGMoKSB0byBmZ2V0YygpIHdoZXJlIG5lZWRlZC4KCk1vbiBNYXkgMTUgMjI6MTA6NTYgMTk5NSAgTWFydGluIHZvbiBMb2V3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbaWYxNjMyL0ltYWtlZmlsZV0KCWFkZGVkIGVudHJpZXMgZm9yIHRoZSBuZXcgZmlsZXMgZ2RpMzIuc3BlYywga2VybmVsMzIuc3BlYywKCXVzZXIzMi5zcGVjLCBzaGVsbDMyLnNwZWMgYW5kIHdpbnByb2NzMzIuc3BlYy4KCgkqIFtpZjE2MzIvY29tbWRsZy5zcGVjXVtpZjE2MzIva2VybmVsLnNwZWNdW2lmMTYzMi9zaGVsbC5zcGVjXQoJICBbaWYxNjMyL3N0b3JhZ2Uuc3BlY11baWYxNjMyL3N5c3RlbS5zcGVjXVtpZjE2MzIvdXNlci5zcGVjXQoJQ2hvb3NlRm9udCwgUkVTRVJWRUQ1LCBJbnRlcm5hbEV4dHJhY3RJY29uOiBNYXJrZWQgYXMgc3R1YnMKCUV4dHJhY3RBc3NvY2lhdGVkSWNvbiwgRG9FbnZpcm9ubWVudFN1YnN0LCBEdW1wSWNvbjoKCQlzdHViIGltcGxlbWVudGF0aW9ucyBwcm92aWRlZCAKCW1hcmtlZCBzdG9yYWdlLmRsbCxzdG9yZWdlLnN5cyBmdW5jdGlvbnMgYXMgc3R1YnMKCgkqIFtpbmNsdWRlL3BlX2ltYWdlLmhdCglBZGRlZCBzdHJ1Y3R1cmVzIFdJTjMyX2J1aWx0aW4gYW5kICBXSU4zMl9mdW5jdGlvbgoKCSogW2luY2x1ZGUvcGVleGUuaF0KCVBFX0ltcG9ydF9EaXJlY3Rvcnk6IHJlbmFtZWQgcmVzZXJ2ZWQgZmllbGRzIHRvIAoJCVRpbWVEYXRlLCBGb3J3YXJkZXIsIFRodW5rX0xpc3QKCgkqIFtpbmNsdWRlL3dpbmVycm9yLmhdCglOZXcgZmlsZS4KCgkqIFtsb2FkZXIvbWFpbi5jXQoJY2FsbGVkIFJFTEFZMzJfSW5pdAoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJeG1tYXA6IG1hcCBCU1MgYW5vbnltb3VzCglkdW1wX2ltcG9ydHM6IHJlbmFtZWQgdG8gZml4dXBfaW1wb3J0cywgZG8gdGhlIGZpeHVwIG9mIGltcG9ydGVkCgkgICAgICAgICAgICAgIHN5bWJvbHMKCVBFX0xvYWRJbWFnZTogcGFzcyByYXcgZGF0YSBzaXplIHRvIHhtbWFwCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglEdW1wSWNvbjogbmV3IGZ1bmN0aW9uCgoJKiBbbWlzYy9rZXJuZWwzMi5jXQoJTmV3IGZpbGUuCgoJKiBbbWlzYy9tYWluLmNdCgltYWtlIHN0ZG91dCBhbmQgc3RkZXJyIHVuYnVmZmVyZWQKCgkqIFttaXNjL3NoZWxsLmNdCglEb0Vudmlyb25tZW50U3Vic3Q6IG5ldyBmdW5jdGlvbgoKCSogW29iamVjdHMvZm9udC5jXQoJRk9OVF9NYXRjaEZvbnQ6IHRyeSBvYmxpcXVlIGlmIHRoZXJlIGlzIG5vIGl0YWxpYwoKCSogW3JjL0ltYWtlZmlsZV1bcmMvcGFyc2VyLmxdCgl5eXdyYXA6IG5ldyBmdW5jdGlvbgoJRG9uJ3QgbGluayB3aXRoIGxpYmZsLmEgb24gTGludXgKCgkqIFt0b29scy9idWlsZC5jXQoJQWRkZWQga2V5d29yZHMgc3RkY2FsbCwgc3Vic3lzdGVtLCBiYXNlCglHZW5lcmF0ZUZvcldpbjMyOiBuZXcgZnVuY3Rpb24KCUJ1aWxkU3BlY0ZpbGVzOiBjYWxsIEdlbmVyYXRlRm9yV2luMzIgaWYgc3Vic3lzdGVtIGlzIHdpbjMyCgpNb24gTWF5IDE1IDEwOjM4OjE0IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KICAgICAgICAKICAgICAgICAqIFtjb250cm9scy9saXN0Ym94LmNdIFtjb250cm9scy9jb21iby5jXSBbd2luZG93cy9kZWZ3bmQuY10KCU1pbm9yIGZpeGVzLgoJCgkqIFttaXNjL21lc3NhZ2UuY10gW21pc2MvbWFpbi5jXSBbcmMvc3lzcmVzKi5yY10gW2luY2x1ZGUvdGV4dHMuaF0KCVJld3JvdGUgbWVzc2FnZSBib3ggaGFuZGxpbmcuCgkKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglEaWFsb2dzIHNob3VsZCBiZSBpbnZpc2libGUgdW50aWwgYWZ0ZXIgV01fSU5JVERJQUxPRyBpcyBzZWVudC4KCURvbid0IHN3aXRjaCB0byBpbnZpc2libGUgZGlhbG9nIGl0ZW1zIG9uIGEgVEFCIGtleXByZXNzLgoJCgkqIFt3aW5kb3dzL21kaS5jXQoJU2VuZCBXTV9OQ1BBSU5UIG1lc3NhZ2UgaW4gTURJUmVzdG9yZUNoaWxkKCkuCgkKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUZpeGVkIHR5cG8gKCYmIC0+ICYpLgoJCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10gW2lmMTYzMi91c2VyLnNwZWNdCglJbXBsZW1lbnRlZCBQb3N0QXBwTWVzc2FnZSgpLgoJCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglTZXRDYXB0dXJlKDApIHNob3VsZCBhY3QgbGlrZSBSZWxlYXNlQ2FwdHVyZSgpLgoKVHVlIE1heSAgOSAxMTo1NTo1MiAxOTk1ICAgICBFZGRpZSBDLiBEb3N0ICAgICAgICAgICAgIChlY2RAZHJlc3NsZXIuZGUpCgoJKiBbSW1ha2VmaWxlXQoJQ2hhbmdlZCBDREVCVUdGTEFHUyBmb3Igc3lzdGVtcyBydW5uaW5nIF9fRUxGX18gKHRlbXBvcmFyaWx5KQoJQWRkZWQgQVNGTEFHUyB0byBleHBvcnRlZCB2YXJpYWJsZXMuCgoJKiBbZGVidWdnZXIvcmVhZGxpbmUvSW1ha2VmaWxlXQoJTW92ZWQgZGVmaW5lcyBmb3IgbGlicmVhZGxpbmUgZnJvbSBERUZJTkVTIHRvIEVYVFJBX0RFRklORVMKCgkqIFttZW1vcnkvbG9jYWwuY10gW21pc2NlbXUvaW50MjEuY10KCUFkZGVkIHNvbWUgbW9yZSBkZWJ1Z2dpbmcgb3V0cHV0cy4KCk1vbiBNYXkgIDggMDA6NTU6MjcgTUVUIERTVCAxOTk1CSAgRGFnIEFzaGVpbSAoZGFzaEBpZmkudWlvLm5vKQoKCSogW21pc2MvbWVzc2FnZS5jXQoJRml4ZWQgYSAiRklYTUUiIGNvbmNlcm5pbmcgbm9yd2VnaWFuIHRyYW5zbGF0aW9uLgoKU3VuIE1heSAgNyAyMzoyNToyMyAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CiAgICAgICAgCgkqIFsqLypdCiAgICAgICAgUmVtb3ZlZCB3YXJuaW5ncyBpbiBhIGNvdXBsZSBvZiBmaWxlcyBhbmQgZGVsZXRlZCBzb21lIG9ic29sZXRlIGNvZGUuCgogICAgICAgICogW2NvbnRyb2xzL2xpc3Rib3guY10KICAgICAgICBDbGVhbnVwLCBzcGVlZCBpbXByb3ZlbWVudHMgJiBsb3RzIG9mIGJ1ZyBmaXhlcy4KCiAgICAgICAgKiBbY29udHJvbHMvY29tYm8uY10KCU1vc3RseSByZXdyaXR0ZW4uIFRoaXMgaXMgc3RpbGwgdmVyeSBidWdneSwgYnV0IG5vdCBxdWl0ZSBhcyBiYWQgYXMgCgliZWZvcmUuCgogICAgICAgICogW2luY2x1ZGUvY29tbWRsZy5oXSBbbWlzYy9jb21tZGxnLmNdCiAgICAgICAgUmVtb3ZlZCB0aGUgbmVlZCBmb3Igc3lzcmVzLmRsbC4gU21hbGwgYnVnIGZpeGVzLgoJCiAgICAgICAgKiBbb2JqZWN0cy9vZW1iaXRtYXAuY10gW2luY2x1ZGUvYml0bWFwcy88bWFueT5dIFtpbmNsdWRlL3dpbmRvd3MuaF0KICAgICAgICAgIFtsb2FkZXIvbGlicmFyeS5jXSBbbG9hZGVyL21haW4uY10gW3JjL3N5c3JlcyoucmNdCiAgICAgICAgUmVtb3ZlZCBzeXNyZXMuZGxsIGFuZCByZXBsYWNlZCB0aGUgcmVtYWluaW5nIGJpdG1hcHMvaWNvbnMgd2l0aAogICAgICAgIFhQTSBlcXVpdmFsZW50cy4KCiAgICAgICAgKiBbbWlzYy9tZXNzYWdlLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbbWlzYy9tYWluLmNdCiAgICAgICAgICBbaWYxNjMyL3dpbnByb2NzLnNwZWNdCiAgICAgICAgIkFib3V0IFdpbmUuLi4iIG5vdyBicmluZ3MgdXAgYSBzdGFuZGFyZCBTaGVsbEFib3V0KCkgd2luZG93IHdpdGgKICAgICAgICB0aGUgV2luZSBpY29uIGFuZCB0aGUgbGlzdCBvZiBjb250cmlidXRvcnMuCgkKCSogW21pc2Mvc2hlbGwuY10KCUZpeGVkIFNoZWxsQWJvdXQoKS9BYm91dERpYWxvZ1Byb2MoKSB0byBzaG93IHRoZSByaWdodCBpY29uLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCVNtYWxsIGhhY2sgZm9yIG5vbi1hbHBoYW51bWVyaWMga2V5czogRG9udCd0IHNlbmQgdGhlIGFzY2lpIHZhbHVlIGluCgl0aGUgV01fS0VZRE9XTiBtZXNzYWdlLCBidXQgc29tZSB1bnVzZWQgY29kZSBpbnN0ZWFkLiBTaG91bGQgYmUgZG9uZQoJcHJvcGVybHkgYnkgc2VuZGluZyBkaWZmZXJlbnQgY29kZXMgZm9yIGVhY2gga2V5LiBUaGUgZWRpdCBjb250cm9sCgl1c2VkIHRvIGdldCBhIFZLX0RFTEVURSBtZXNzYWdlIGVhY2ggdGltZSB0aGUgdXNlciB0eXBlZCAnLicuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJUmVtb3ZlZCBhIGNoZWNrIGZvciBDU19HTE9CQUxDTEFTUyBpbiBDTEFTU19GaW5kQ2xhc3NCeU5hbWUoKS4KCVRoaXMgdXNlZCB0byBiZSBubyBwcm9ibGVtLCBidXQgYnJlYWtzIFJlc291cmNlIFdvcmtzaG9wIGluIDk1MDQwMy4KCQoJKiBbb2JqZWN0cy9kaWIuY10KCU5ldyBkaWFnbm9zdGljIGZvciBhIGJ1ZyBJJ3ZlIGJlZW4gZW5jb3VudGVyaW5nLiBJZiBpdCBzaG93cyB1cCwKCXBsZWFzZSByZXBvcnQgaXQuCgpTdW4gTWF5ICA3IDIzOjExOjE4IEVEVCAxOTk1ICBXaWxsaWFtIE1hZ3JvICh3bWFncm9AdGMuY29ybmVsbC5lZHUpCgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJSGFuZGxlIHNpdHVhdGlvbiB3aGVuICdkYycgZXhpc3RzLCBidXQgcGFsZXR0ZSBtYXBwaW5nCglkb2VzIG5vdC4gIChGaXhlcyBraWRwaXgyIGRlbW8uKQoKU3VuIE1heSAgNyAwMzozMjowMCAxOTk1ICBDaGFybGVzIE0uIEhhbm51bSAgKG15Y3JvZnRAbWl0LmVkdSkKCgkqIFtsb2FkZXIvbGR0LmNdCglMRFRfUHJpbnQ6IE9ubHkgc2hvdyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhhdCB0aGUga2VybmVsCglyZXR1cm5lZC4gTWFrZSB0aGlzIHdvcmsgZm9yIE5ldEJTRC4KCkZyaSBNYXkgIDUgMDI6NTM6MjYgMTk5NSAgQ2hhcmxlcyBNLiBIYW5udW0gIChteWNyb2Z0QG1pdC5lZHUpCgoJKiBbZGVidWdnZXIvZGJnLnldIFtpbmNsdWRlL3dpbmUuaF0gW2xvYWRlci9zaWduYWwuY10KCU1vZGlmeSBjcyBhbmQgZHMgc2VsZWN0b3IgdmFsdWVzIGZvciBOZXRCU0QtY3VycmVudC4KCgkqIFtkZWJ1Z2dlci9kZWJ1Zy5sXQoJJHNwLCAkZXNwOiBVc2UgUk5fRVNQX0FUX1NJR05BTCByYXRoZXIgdGhhbiBSTl9FU1AuCgoJKiBbZGVidWdnZXIvcmVncG9zLmhdCglNb2RpZnkgc2lnY29udGV4dCBmb3JtYXQgZm9yIE5ldEJTRC1jdXJyZW50LgoJU0NfRVNQOiBVc2UgUk5fRVNQX0FUX1NJR05BTCByYXRoZXIgdGhhbiBSTl9FU1AuCgoJKiBbaW5jbHVkZS9sZHQuaF0KCVNFTEVDVE9SX1RPX0VOVFJZOiBFeHBsaWNpdGx5IGNsZWFyIHRoZSB0b3AgaGFsZiBvZiB0aGUgc2VsZWN0b3IKCXZhbHVlLCBzaW5jZSBvbmx5IDE2IGJpdHMgb2YgaXQgbWF5IGhhdmUgYmVlbiBzYXZlZC4KCgkqIFttaXNjL3dpbnNvY2tldC5jXQoJU2V0IHN0cnVjdHVyZSBwYWNraW5nIHdpdGggYCNwcmFnbWEgcGFjaycgdG8gYWNjb21vZGF0ZQoJb3RoZXIvb2xkZXIgY29tcGlsZXJzLgoKVHVlIE1heSAgMiAxODoxNTowMSAxOTk1IFBhYWwgQmV5ZXIgKGJleWVyQGlkdC51bml0Lm5vKQoJCgkqIFttaXNjL2NvbW1kbGcuY10KCUZpeGVkIHBhdGgtbmFtZXMgc28gd2hlbiBjaGFuZ2luZyBkaXJlY3RvcnkgdGhlIGxpc3Rib3hlcwoJY2hhbmdlcyB0b28uCgkKCSogW2RlYnVnZ2VyL2RiZy55IGRlYnVnZ2VyL2RlYnVnLmwgd2luZS5pbmldCglBZGRlZCBTeW1ib2xUYWJsZUZpbGUgdG8gd2luZS5pbmkgc28gc3ltYm9scyBjYW4gYmUgcmVhZAoJd2l0aG91dCBzdGFuZGluZyBpbiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgd2luZS5zeW0uCglBZGRlZCB0aGUgcG9zc2liaWxpdHkgdG8gc3BlY2lmeSBmdWxsIG5hbWUgb2Ygd2luZS5zeW0gZnJvbQoJdGhlIGRlYnVnZ2VyIHByb21wdC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IEFwciAyOSAyMDo0MjowMSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHUpCgoJKiBbY29udHJvbHMvc3RhdGljLmNdCglGaXhlZCBwYWludGluZyBvZiBTU18qRlJBTUUgY29udHJvbHMuCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglQYXNzIHRoZSB3aW5kb3cgaW5zdGFuY2UgYXMgRFMgdG8gdGhlIDE2LWJpdCB3aW5kb3cgcHJvY2VkdXJlLgoJUmV3cm90ZSBDYXRjaCgpIGFuZCBUaHJvdygpIHRvIG1ha2UgdGhlbSB3b3JrIHdpdGggbXVsdGlwbGUgdGFza3MuCgoJKiBbbG9hZGVyL21haW4uY10KCU5ldyBmdW5jdGlvbiBNQUlOX0luaXQoKSB0byBwZXJmb3JtIGluaXRpYWxpemF0aW9ucyBiZWZvcmUgdGhlCglmaXJzdCB0YXNrIGlzIHN0YXJ0ZWQgaW5zdGVhZCBvZiBkb2luZyB0aGVtIGluIEluaXRBcHAoKS4KCVRlbXBvcmFyeSBoYWNrIHRvIGNvbW1hbmQtbGluZSBwYXJzaW5nIHRvIGxvYWQgb25lIHByb2dyYW0gcGVyCgljb21tYW5kLWxpbmUgYXJndW1lbnQsIHRvIG1ha2UgdGVzdGluZyB0YXNrLXN3aXRjaGluZyBlYXNpZXIuCgoJKiBbbG9hZGVyLyouY10KCVJlaW1wbGVtZW50ZWQgbW9kdWxlcyB0byB1c2UgYSBXaW5kb3dzLWNvbXBhdGlibGUgbGF5b3V0IGFuZCB0bwoJYWxsb3cgbXVsdGlwbGUgdGFza3MgYW5kIG11bHRpcGxlIG1vZHVsZSBpbnN0YW5jZXMuIE5vdCByZWFsbHkKCWZpbmlzaGVkIHlldC4KCgkqIFtsb2FkZXIvdGFzay5jXSBbbWlzYy9leGVjLmNdCglSZWltcGxlbWVudGVkIHRhc2tzIHRvIHVzZSBhIGNvbW1vbiBhZGRyZXNzIHNwYWNlLCBhbmQgaW1wbGVtZW50ZWQKCXByZWxpbWluYXJ5IHRhc2stc3dpdGNoaW5nIGNhcGFiaWxpdGllcy4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglGaXhlZCBidWcgaW4gR2xvYmFsTmV4dCgpLgoKCSogW21pc2MvbWFpbi5jXQoJVXBkYXRlZCB0aGUgbGlzdCBvZiBjb250cmlidXRvcnMuIExldCBtZSBrbm93IGlmIEkgZm9yZ290IHNvbWVvbmUuCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJVXNlIG9uZSBEVEEgcGVyIHRhc2sgaW5zdGVhZCBvZiBhIGdsb2JhbCBvbmUuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCUZpeGVkIGJ1ZyBpbiBCaXRCbHQoKSB0aGF0IGNvdWxkIGNhdXNlIEJhZE1hdGNoIGVycm9ycy4KCgkqIFt0b29scy9idWlsZC5jXQoJQWRkZWQgbmV3IGZ1bmN0aW9uIHR5cGUgJ3N0dWInLCB0aGF0IG1ha2VzIHBvc3NpYmxlIHRvIGV4cG9ydCBhbgoJdW5pbXBsZW1lbnRlZCBmdW5jdGlvbiBieSBuYW1lIGFzIHdlbGwgYXMgYnkgb3JkaW5hbC4gVGhpcyB3aWxsCglhdm9pZCBsb2FkaW5nIGVycm9ycyBmb3IgdW5pbXBsZW1lbnRlZCBmdW5jdGlvbnMuCglHZW5lcmF0ZSBhbiBpbi1tZW1vcnkgbW9kdWxlIGxheW91dCBmb3IgYnVpbHQtaW4gRExMcyBzbyB0aGF0IHRoZQoJc2FtZSBjb2RlIGNhbiBiZSB1c2VkIGZvciBidWlsdC1pbiBhbmQgbG9hZGVkIG1vZHVsZXMuCglDaGFuZ2VkIHJlbGF5IGNvZGUgdG8gbWFrZSBpdCB1bm5lY2Vzc2FyeSB0byBzYXZlIHRoZSB2YWx1ZSBvZiB0aGUKCUJQIHJlZ2lzdGVyLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJSW1wbGVtZW50ZWQgbXVsdGlwbGUgbWVzc2FnZSBxdWV1ZXMgYW5kIHByZWxpbWluYXJ5IHRhc2stc3dpdGNoaW5nCgljYXBhYmlsaXRpZXMuIEludGVyLXRhc2sgU2VuZE1lc3NhZ2UoKSBjYWxscyBhcmUgbm90IGltcGxlbWVudGVkCgl5ZXQgYW5kIHdpbGwgcHJvYmFibHkgY2F1c2UgY3Jhc2hlcyBpZiB1c2VkLgoKCSogW3dpbmRvd3MvcHJvcGVydHkuY10KCVJlaW1wbGVtZW50ZWQgcHJvcGVydGllcyBhbmQgYWxsb2NhdGUgdGhlbSBvbiB0aGUgVVNFUiBoZWFwLgoKCSogW3dpbmRvd3Mvd2luLmNdCglGaXhlZCBidWcgaW4gU2V0V2luZG93V29yZCgpLgoJUmVpbXBsZW1lbnRlZCBFbnVtV2luZG93cygpIGFuZCBFbnVtVGFza1dpbmRvd3MoKS4KClR1ZSBBcHIgMTggMDk6NDg6MzggMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgogICAgICAgIAoJKiBbbWlzYy9tYWluLmNdCglHZXRTeXN0ZW1QYXJhbWV0ZXJzSW5mbygpOiBBZGRpdGlvbmFsIGFjdGlvbiBTUElfR0VUSUNPTlRJVExFRk9OVC4KCQoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglSZW1vdmVkIHRoZSBjaGVjayBmb3IgTkVfU0VHRkxBR1NfRVhFQ1VURU9OTFksIHNpbmNlIGl0IGJyb2tlCgljb250cm9sLmV4ZS4KCUZpeGVkIGljb24gbG9hZGluZy4KCQoJKiBbb2JqZWN0cy9mb250LmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUZpeGVkIGEgYnVnIGluIEluaXRGb250c0xpc3QoKSBhbmQgd29ya2VkIG9uIHRoZSBFbnVtRm9udHMoKQoJZnVuY3Rpb25zIHRvIG1ha2UgdGhlbSBjb21wcmVoZW5zaWJsZS4KCiAgICAgICAgKiBbY29udHJvbHMvYnV0dG9uLmNdCglGaXhlZCBteSBwcmV2aW91cyBwYXRjaCB0byBoYW5kbGUgTEJVVFRPTlVQIG1lc3NhZ2VzLgoKRnJpIEFwciAxNCAxMTo0MToyOCAxOTk1ICBDYW1lcm9uIEhlaWRlICAoaGVpZGVAZWUudWFsYmVydGEuY2EpCgogICAgICAgICogW21pc2MvbmV0d29yay5jLCBtaXNjL2Rvc19mcy5jXQogICAgICAgIEltcGxlbWVudGVkIFdOZXRHZXRDb25uZWN0aW9uLiAgQWxsIHRoYXQgaXMgY3VycmVudGx5CiAgICAgICAgc3VwcG9ydGVkIGFyZSBkcml2ZXMsIGZvciB3aGljaCB0aGUgcmVtb3RlIG5hbWUgaXMgc2ltcGx5CiAgICAgICAgdGhlIHJlZGlyZWN0ZWQgVU5JWCBkaXJlY3RvcnkgbmFtZS4KCiAgICAgICAgKiBbbWlzY2VtdS9pbnQyPy5jXQogICAgICAgIE1vcmUgZHJpdmUgbnVtYmVyIHZhbGlkaXR5IGNoZWNraW5nLgoKV2VkIEFwciAxMiAxMToyODozNyAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CiAgICAgICAgCiAgICAgICAgKiBbY29udHJvbHMvbGlzdGJveC5jXQoJT29wcywgbXkgcHJldmlvdXMgY2hhbmdlIHRvIExpc3RCb3hEaXJlY3RvcnkgYnJva2UgdGhlIEJvcmxhbmQKCWZpbGUgb3BlbiBkaWFsb2cuIEZpeGVkLgoKTW9uIEFwciAxMCAyMzoxNzoxMiAxOTk1ICBNYXJ0aW4gdm9uIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtpZjE2MzIvb2xlMm5scy5zcGVjXSBbbWlzYy9vbGUybmxzLmNdIFttaXNjL0ltYWtlZmlsZV0KCU5ldyBmaWxlIG9sZTJubHMuYy4gQWRkZWQgc3R1YnMgZm9yIEdldFVzZXJEZWZhdWx0TENJRCwgCglHZXRTeXN0ZW1EZWZhdWx0TENJRCwgR2V0VXNlckRlZmF1bHRMYW5nSUQsIEdldFN5c3RlbURlZmF1bHRMYW5nSUQuCgpNb24gQXByIDEwIDEwOjA1OjE4IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KICAgICAgICAKCSogW21lbW9yeS9nbG9iYWwuY10gW21lbW9yeS9sb2NhbC5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCglHbG9iYWxSZUFsbG9jKCk6IElmIEdNRU1fTU9ESUZZIGlzIHNldCwgZG9uJ3QgcmVzaXplIHRoZSBibG9jay4KCUxvY2FsUmVBbGxvYygpOiBTYW1lIGZvciBMTUVNX01PRElGWS4KCQogICAgICAgICogW2NvbnRyb2xzL2xpc3Rib3guY10KCUZpeGVkIGEgYnVnIGluIExpc3RCb3hEaXJlY3RvcnkgdGhhdCBwcmV2ZW50ZWQgY29tbWRsZyBmcm9tIHdvcmtpbmcuCglDaGVjayBmb3IgZXJyb3JzIGluIHNvbWUgbW9yZSBwbGFjZXMuCgogICAgICAgICogW2lmMTYzMi9nZGkuc3BlY10gW2lmMTYzMi91c2VyLnNwZWNdCgkxNiBiaXQgY2FsbGJhY2sgZnVuY3Rpb25zIHNob3VsZCBiZSBwYXNzZWQgYXMgc2VncHRycy4KCQoJKiBbaW5jbHVkZS9kbGxzLmhdIFtsb2FkZXIvbmVfaW1hZ2UuY10gW2xvYWRlci9zZWxlY3Rvci5jXQoJW2xvYWRlci9saWJyYXJ5LmNdCglQcmV2ZW50IGEgRExMIGZyb20gYmVpbmcgaW5pdGlhbGl6ZWQgdHdpY2UgKEJvcmxhbmRzIFJlc291cmNlCglXb3Jrc2hvcCB1c2VkIHRvIGRvIHRoaXMpLgoJUHJvdmlkZSBhbiBhZGRpdGlvbmFsIGZsYWcgZm9yIGVhY2ggd19maWxlIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIKCWl0J3MgYW4gRVhFIG9yIGEgRExMLCBmb3IgY29tYmluYXRpb25zIGxpa2UgcGJydXNoLmV4ZS8uZGxsLgoJCgkqIFtjb250cm9scy9idXR0b24uY10KCUhhbmRsZSBMQlVUVE9OVVAgbWVzc2FnZXMgZXZlbiBpZiB0aGUgYnV0dG9uIG5vIGxvbmdlciBoYXMgdGhlCgljYXB0dXJlIChmb3IgV2luSGVscCkuCgkKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KCUZBUlBST0MgaXMgbm93IGEgc2VncHRyIGZvciB0aGUgZW11bGF0b3IgYW5kIGEgZnVuY3Rpb24KCXBvaW50ZXIgZm9yIHRoZSBsaWJyYXJ5LgoJCgkqIFttaXNjL2NvbW1kbGcuY10gW21pc2MvY29tbWRsZy5oXQoJQ2xlYW5lZCB0aGUgZmlsZSBkaWFsb2dzIHVwIGEgbGl0dGxlLiBUaGV5IG5vdyB3b3JrIHJlYXNvbmFibHkgd2VsbCwKCWFsdGhvdWdoIHRoZXJlIGFyZSBzdGlsbCBzb21lIHByb2JsZW1zIChlLmcuIGZpbGVzIGFyZSBpbml0aWFsbHkKICAgICAgICBpbnZpc2libGUpLgoKCSogW3dpbmRvd3MvY2xhc3MuY10gW2lmMTYzMi91c2VyLnNwZWNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUdldENsYXNzSW5mbygpIG11c3QgdGFrZSBhIHNlZ3B0ciwgYXMgaXQgY2hlY2tzIHdoZXRoZXIgdGhlCgloaWdod29yZCBpcyB6ZXJvLgoJR2V0Q2xhc3NOYW1lKCkgY2FsbGVkIHRoZSB3cm9uZyBhdG9tIGZ1bmN0aW9uLiBObyBzdXJwcmlzZSBpdCBkaWRuJ3QKICAgICAgICBmaW5kIGFueXRoaW5nLgoKCSogW21pc2MvbHN0ci5jXQoJQW5zaVRvT2VtKCkgYW5kIE9lbVRvQW5zaSgpIGRpZG4ndCB0ZXJtaW5hdGUgdGhlIHN0cmluZ3MuIEZpeGVkLgogICAgICAgIFJlbW92ZWQgc29tZSB3YXJuaW5ncy4KCgkqIFtpZjE2MzIvcmVsYXkuY10gW2lmMTYzMi9kZGVtbC5zcGVjXSBbaW5jbHVkZS9kbGxzLmhdCglOZXcgc3BlYyBmaWxlIGZvciB0aGUgMy4xIERERU1MIERETC4gCgoJKiBbY29udHJvbHMvbWVudS5jXQoJU21hbGwgZml4IHRvIENoYW5nZU1lbnUgLSBtYXNrIG91dCB0aGUgb2Jzb2xldGUgZmxhZ3MKCShNRl9BUFBFTkQgPT0gTUZfT1dORVJEUkFXLCB0aGlzIGxlZCB0byBwcm9ibGVtcykuIEl0IGFsc28gaGFkCglwcm9ibGVtcyB3aXRoIHRoZSBNRl9CWVBPU0lUSU9OIGZsYWcuCgogICAgICAgICogW3dpbmRvd3MvbWVzc2FnZS5jXQogICAgICAgIFNlbmRNZXNzYWdlKCk6IGNhbGwgdGhlIFdIX0NBTExXTkRQUk9DIGhvb2sgZnVuY3Rpb24uIFRoaXMgaXMgcmF0aGVyCiAgICAgICAgdWdseSwgSSdtIGFmcmFpZC4gV2luZG93cyBwcm9iYWJseSBwYXNzZXMgYSBwb2ludGVyIHRvIHRoZSAxNiBiaXQKICAgICAgICBzdGFjayBmb3Igc3BlZWQgcmVhc29ucy4KCQogICAgICAgICogW3dpbmRvd3MvaG9vay5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCiAgICAgICAgU2V0L0hvb2tXaW5kb3dzSG9vaygpIHNob3VsZG4ndCBqdXN0IGNhbGwgdGhlaXIgKkV4IGNvdW50ZXJwYXJ0cywgYXMKICAgICAgICB0aGV5IGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50IHNlbWFudGljcy4KICAgICAgICBNUyBIZWFydHMgbm93IHdvcmtzIHNvbWV3aGF0LCBpZiB5b3UgZGlzYWJsZSB0aGUgbmV3IGJ1aWx0aW4gRERFTUwuCiAgICAgICAgVGhlIGdyYXBoaWNzIGFyZSBjb21wbGV0ZWx5IG1lc3NlZCB1cCwgdGhvdWdoLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gQXByICAyIDE4OjMxOjEyIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdSkKCgkqIFtDb25maWd1cmVdIFtpZjE2MzIvSW1ha2VmaWxlXQoJUmVtb3ZlZCBuZXcgYnVpbGQgYW5kIHNob3J0IG5hbWVzIG9wdGlvbnMuCgoJKiBbaWYxNjMyLyouY10gW3Rvb2xzL2J1aWxkLmNdCglJbXBsZW1lbnRlZCBjb21waWxlZCBjYWxsLWJhY2sgZnVuY3Rpb25zIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2U7CglhbGwgdGhlIHJlbGF5IGNvZGUgaXMgbm93IGRvbmUgaW4gYXNzZW1ibHkgY29kZSBnZW5lcmF0ZWQgYnkgdGhlCglidWlsZCBwcm9ncmFtLgoJUmVsYXkgY29kZSBpcyBubyBsb25nZXIgZGVwZW5kZW50IG9uIGJlaW5nIGxvYWRlZCBiZWxvdyA2NEsuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglGaXhlZCBtZW1vcnkgbGVhayBpbiBMb2FkU3RyaW5nKCkuIEEgZml4IHdpbGwgYWxzbyBiZSBuZWVkZWQgZm9yCglvdGhlciByZXNvdXJjZXMuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJSW1wbGVtZW50ZWQgZ2xvYmFsIGhlYXAgYXJlbmFzLCBzbyB3ZSBjYW4gc3RvcmUgaW5mb3JtYXRpb25zIGFib3V0CglnbG9iYWwgYmxvY2tzLCBsaWtlIGxvY2sgY291bnRzIG9yIG93bmVyIGhhbmRsZS4KCUltcGxlbWVudGVkIEZhckdldE93bmVyKCkgYW5kIEZhclNldE93bmVyKCkuCglJbXBsZW1lbnRlZCBnbG9iYWwgaGVhcCBUT09MSEVMUCBmdW5jdGlvbnMuCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdCglCdWcgZml4OiBpdCB3YXMgbm90IHBvc3NpYmxlIHRvIHJlLXVzZSBhIGZyZWUgc2VsZWN0b3IuCgpTdW4gQXByIDIgMDE6MzQ6NTIgMTk5NSBDb25zdGFudGluZSBTYXB1bnR6YWtpcyAgKGNzYXB1bnR6QG1pdC5lZHUpCgoJKiAgW2NvbnRyb2xzL2xpc3Rib3guY10KCU1ham9yIHdvcmsgb24gbGlzdGJveCBjb2RlCiAgICAgICAgIC0gTWFueSBidWdzIGZpeGVkIChzdGlsbCBtYW55IGJ1Z3MpCiAgICAgICAgIC0gTW9yZSBtZXNzYWdlcyBzdXBwb3J0ZWQKICAgICAgICAgLSBDb2RlIHNpbXBsaWZpZWQKCkZyaSBNYXIgMzEgMDM6Mjc6MTYgRVNUIDE5OTUgV2lsbGlhbSBNYWdybyAod21hZ3JvQHRjLmNvcm5lbGwuZWR1KQoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUxvdHMgb2YgYnVnIGZpeGVzIHJlbGF0ZWQgdG8gZGlhcHBlYXJpbmcgdGV4dCwgbG9zdCBjYXJldHMsCgloaWdobGlnaHRpbmcsIHNlZ21lbnRhdGlvbiBmYXVsdHMsIG9jY3VyYW5jZSBvZiByYW5kb20KCWNoYXJhY3RlcnMsIGluc2VydGlvbiBvZiBjaGFyYWN0ZXJzIG92ZXIgc2VsZWN0aW9uLCBtaXNwbGFjZWQKCWNhcmV0IGxvY2F0aW9uLCBkaXNwbGF5IGNvcnJ1cHRpb24sIGVuZCBvZiBsaW5lIGJlaGF2aW9yLCBldGMuCgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXQoJRURJVCBjbGFzcyBkb2Vzbid0IHdhbnQgdG8gdXNlIENTX1BBUkVOVERDIGZsYWcuCgpUaHUgTWFyIDMwIDIwOjU4OjI1IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KICAgICAgICAKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJICBGaXh1cEZ1bmN0aW9uUHJvbG9ncygpIHNob3VsZCBhbHNvIGhhbmRsZSBtdWx0aXBsZSBkYXRhIG1vZHVsZXMuCgkgICh0aGlzIGJ1ZyBvbmx5IGJlY2FtZSB2aXNpYmxlIGJlY2F1c2UgTWFrZVByb2NJbnN0YW5jZSgpIHdhcyBmaXhlZAoJICBpbiA5NTAzMTkpCgkKCSogW21pc2MvZG9zZnMuY10KCSAgU2ltcGxpZmllZCBET1NfU2ltcGxpZnlQYXRoLgoJICBTbWFsbCBmaXggdG8gRE9TX29wZW5kaXIgdG8gcmV1c2UgYW4gZW50cnkgaWYgYW4gb3BlbiBkaXJlY3RvcnkKCSAgaXMgb3BlbmVkIGFnYWluLCB0byBwcmV2ZW50ICJ0b28gbWFueSBvcGVuIGRpcmVjdG9yaWVzIiBtZXNzYWdlcy4KClRodSBNYXIgMzAgMTI6MDU6MDUgMTk5NSBNYXJ0aW4gdm9uIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtpZjE2MzIvY29tcG9iai5zcGVjXVtpbmNsdWRlL2NvbXBvYmouaF1bbWlzYy9jb21wb2JqLmNdCglDb0Rpc2Nvbm5lY3RPYmplY3Q6IG5ldyBzdHViIGZ1bmN0aW9uCgoJKiBbaW5jbHVkZS9tc2Rvcy5oXQoJZml4IERPU1ZFUlNJT04KCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCU5FX0ZpeHVwU2VnbWVudDogQmUgbW9yZSBnZW5lcm91cyBvbiBhZGRpdGl2ZSBmaXh1cHMKCgkqIFtpZjE2MzIvdXNlci5zcGVjXVttaXNjL25ldHdvcmsuY10KCUFkZCBtb3JlIFdOZXQqIHN0dWJzCgpXZWQgTWFyIDI5IDExOjQ3OjIyIDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCiAgICAgICAgKiBbY29udHJvbHMvbGlzdGJveC5jXQoJICBEbGdEaXJMaXN0KCk6IHNlbmQgc2VncHRyIGluc3RlYWQgb2YgbGluZWFyIHBvaW50ZXIgCgkgIGluIG1lc3NhZ2UgdG8gc3RhdGljIGNvbnRyb2wKCSogW2NvbnRyb2xzL21lbnUuY10KCSAgVHJpZWQgdG8gaW1wbGVtZW50IG93bmVyZHJhd24gbWVudWl0ZW1zLiBEb2Vzbid0IHdvcmsuCgkqIFtpZjE2MzIvZ2RpLnNwZWNdIFtpbmNsdWRlL3dpbmRvd3MuaF0gW29iamVjdHMvZm9udC5jXQoJICBQcm92aWRlIGEgc3R1YiBmb3IgR2V0UmFzdGVyaXplckNhcHMoKQoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCgkgIFBhc3MgZW5kIGFkZHJlc3MgaW5zdGVhZCBvZiBsZW5ndGggdG8gTG9jYWxJbml0KCkgaW4gCgkgIENyZWF0ZVNlbGVjdG9ycygpCgkqIFttZW1vcnkvbG9jYWwuY10KCSAgTG9jYWxJbml0KCk6IElmIHRoZXJlJ3MgYWxyZWFkeSBhIGxvY2FsIGhlYXAgaW4gdGhlIHNlZ21lbnQsIGRvCgkgIG5vdGhpbmcgYW5kIHJldHVybiBUUlVFCgkqIFtvYmplY3RzL2xpbmVkZGEuY10KCSAgUmVwbGFjZWQgYnVnZ3kgTGluZUREQSgpIHdpdGggYSBCcmVzZW5oYW0gYWxnb3JpdGhtLiBTaG91bGQgd29yawoJICBub3cuCgkqIFt3aW5kb3dzL2N1cnNvci5jXQoJICBMb2FkQ3Vyc29yKCkvQ3JlYXRlQ3Vyc29yKCk6IENsZWFuZWQgdXAgdGhlIG1lc3MuIE5lZWRzIHNvbWUKCSAgbW9yZSB3b3JrIHN0aWxsLgoKVHVlIE1hciAyMSAxNzo1NDo0MyAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgogICAgICAgICogW2lmMTYzMi9yZWxheS5jXSBbaWYxNjMyL2NhbGxiYWNrLmNdIFtpbmNsdWRlL2RsbHMuaF0KCSAgW2lmMTYzMi93aW5wcm9jcy5zcGVjXSBbaWYxNjMyL3dpbnByb2NzLmNdIFtpbmNsdWRlL3dpbnByb2NzLmhdCgkgIFtjb250cm9scy93aWRnZXRzLmNdIFttaXNjL3NoZWxsLmNdIFttaXNjL2NvbW1kbGcuY10KCSAgW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFttaXNjL21lc3NhZ2UuY10KCSAgQWRkZWQgYSBuZXcgYnVpbHRpbiBETEwgdGhhdCBwcm92aWRlcyAxNiBiaXQgZW50cnkgcG9pbnRzIGZvciBhbGwKCSAgdGhlIERlZipQcm9jcyAoRGVmRGxnUHJvYywgQnV0dG9uUHJvYyBldGMuKS4gT1dMIHByb2dyYW1zIHdvcmsKCSAgYWdhaW4uCgkqIFttaXNjL3NoZWxsLmNdCgkgIFJlZ09wZW5LZXkoKS9SZWdDcmVhdGVLZXkoKSBidWdzIGZpeGVkLgogICAgICAgICogW2xvYWRlci9uZV9pbWFnZS5jXQoJICBTa2lwcGluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYSBETEwgd2hlbiBDUyA9PSAwIHdhcyBicm9rZW4uCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBNYXIgMTkgMTY6MzA6MjAgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1KQoKCSogWyovKl0KCUltcGxlbWVudGVkIGEgbmV3IG1lbW9yeSBtYXBwaW5nIHNjaGVtZS4gVGhlcmUncyBubyBsb25nZXIgYQoJb25lLXRvLW9uZSBtYXBwaW5nIGJldHdlZW4gMTYtYml0IGFuZCAzMi1iaXQgcG9pbnRlcnMuIFBsZWFzZSBzZWUKCWZpbGUgREVWRUxPUEVSUy1ISU5UUyBmb3IgdGVjaG5pY2FsIGRldGFpbHMuCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglGaXhlZCBidWcgd2hlbiBkcmFnZ2luZyBtb3VzZSBpbiBob3Jpem9udGFsIHNjcm9sbGJhcnMuCgoJKiBbdG9vbHMvYnVpbGQuY10gW2lmMTYzMi8qLnNwZWNdCglSZW1vdmVkIHN1cHBvcnQgZm9yIEMgY2FsbGJhY2sgZnVuY3Rpb25zIGFuZCBmb3IgcmUtb3JkZXJpbmcKCW9mIHRoZSAzMi1iaXQgYXJndW1lbnRzLCBhcyB0aGVzZSB3ZXJlIG5ldmVyIHVzZWQuIFRoaXMgc2hvdWxkCglhbGxvdyBhIG1vcmUgZWZmaWNpZW50IGNhbGxiYWNrIHNjaGVtZSB0byBiZSBpbXBsZW1lbnRlZC4KCgkqIFtpZjE2MzIvb2xlY2xpLnNwZWNdCglSZWR1Y2VkIHRoZSBudW1iZXIgb2YgZW50cmllcyB0byBtYWtlIHRoZSAxNi1iaXQgY29kZSBmaXQgaW4gNjRrLgoJVGhpcyBsaW1pdGF0aW9uIHdpbGwgc29vbiBiZSByZW1vdmVkLgoKCSogW2xvYWRlci9sZHQuY10KCVJld3JvdGUgTERUIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgYW5kIGltcGxlbWVudGVkIExEVF9HZXRFbnRyeSgpLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCVJld3JvdGUgR2xvYmFsKigpIHJvdXRpbmVzIHRvIHVzZSB0aGUgbmV3IHNlbGVjdG9yIGFsbG9jYXRpb24KCW1lY2hhbmlzbS4KCgkqIFttZW1vcnkvbG9jYWwuY10KCVJld3JvdGUgbG9jYWwgaGVhcCBoYW5kbGluZyB0byB1c2UgYSBXaW5kb3dzLWNvbXBhdGlibGUgbGF5b3V0Cgkobm90IHJlYWxseSBmaW5pc2hlZCB5ZXQpLgoJSW1wbGVtZW50ZWQgVE9PTEhFTFAgaGVhcC13YWxraW5nIHJvdXRpbmVzLgoKCSogW21lbW9yeS9zZWxlY3Rvci5jXQoJSW1wbGVtZW50ZWQgTERUIG1hbmlwdWxhdGlvbiBBUEkgZnVuY3Rpb25zLgoKVHVlIE1hciAxNCAxOTo1MDoyOCBFU1QgMTk5NSBXaWxsaWFtIE1hZ3JvICh3bWFncm9AdGMuY29ybmVsbC5lZHUpCgoJKiBbd2luZG93cy9kZWZkbGcuY10KCUZpeGVkIHByb2JsZW0gd2hlcmUgZGlhbG9ncyBjbG9zZWQgdXNpbmcgdGhlIFN5c3RlbSBtZW51IAogICAgICAgICgnQ2xvc2UnIGl0ZW0gb3IgZG91YmxlIGNsaWNrIG9uIGNsb3NlIGJveCkgd291bGQKCWhhbmcgV2luZS4KClN1biBNYXIgMTIgMTQ6Mjg6MTMgMTk5NSAgTWljaGFlbCBQYXRyYSA8bWlja3lAbWFyaWUucGh5c2lrLlRVLUJlcmxpbi5ERT4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglSZW1vdmVkIG1vc3Qgb2YgdGhlIHN0YXRlbWVudHMgZm9yIHNlbmRpbmcgYSBub3RpZmljYXRpb24gbWVzc2FnZQoJTGlzdEJveERpcmVjdG9yeSgpLCBEbGdEaXJTZWxlY3QoKSwgRGxnRGlyTGlzdCgpOiBJbXByb3ZlZCB0aGUKCWNvZGU7IEJvcmxhbmQncyBzdGFuZGFyZCBmaWxlIG9wZW4gZGlhbG9nIHdpbGwgd29yayBub3cuCgkKCSogW21pc2MvbWFpbi5jXSwgW21pc2MvZmlsZS5jXSwgW21pc2NlbXUvaW50MjEuY10KCUFkZGVkIHN1cHBvcnQgZm9yIG5ldyBjb21tYW5kIGxpbmUgb3B0aW9uICItYWxsb3dyZWFkb25seSIuIElmIHNldAoJYW4gYXR0ZW1wdCB0byBvcGVuIGEgcmVhZCBvbmx5IGZpbGUgaW4gd3JpdGUgbW9kZSB3aWxsIGJlIGNvbnZlcnRlZCAKCXRvIG9wZW5pbmcgaXQgcmVhZCBvbmx5IChtYW55IHByb2dyYW1zIHRyeSB0byBvcGVuIGFsbCBmaWxlcyBpbiAKCXJlYWQvd3JpdGUgbW9kZSBldmVuIGlmIHRoZXkgb25seSBpbnRlbmQgdG8gcmVhZCBpdCAtIHRoaXMgbWlnaHQgCgljYXVzZSBhIGZldyB1bmRlciBwcm9ibGVtcyB1bmRlciBhbiB1bml4LWxpa2UgZW52aXJvbm1lbnQgd2hlcmUgbW9zdCAKCWZpbGVzIGFyZSByZWFkIG9ubHkgZm9yIGEgIm5vcm1hbCIgdXNlcikKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUdldE1lbW9yeVJlZmVyZW5jZSgpOiBBZGRlZCBzdXBwb3J0IGZvciBfX0FISW5jciBhbmQgX19BSFNoaWZ0CgoJKiBbbWlzYy9kb3NfZnMuY10KCURPU19TaW1wbGlmeVBhdGgoKTogVGhpcyByb3V0aW5lIHNpbXBsaWZpZXMgcGF0aCBuYW1lcyAoIGUuZy4sIGl0Cgl3aWxsIGNoYW5nZSAiL3Vzci8vL2xvY2FsL2Jpbi8uLi9saWIvL2EiIHRvICIvdXNyL2xvY2FsL2xpYi9hIiApCgltYXRjaCgpOiByZXdyaXR0ZW4KCQoJKiBbb2JqZWN0cy90ZXh0LmNdCglURVhUX05leHRMaW5lKCk6IFJlbW92ZWQgYSBidWcgaW4gdGhlIGhhbmRsaW5nIG9mIExGJ3MKCgkqIFttaXNjZW11L2ludDIxLmNdCglHZXRGaWxlRGF0ZVRpbWUoKTogRml4ZWQuIFNldEZpbGVEYXRlVGltZSgpIGlzIHN0aWxsIGJyb2tlbi4KClNhdCBNYXIgMTEgMTk6NDY6MTkgMTk5NSAgTWFydGluIHZvbiBMb2V3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbY29udHJvbHMvbWVudS5jXQoJQ2hhbmdlTWVudTogZGVmYXVsdHMgdG8gTUZfSU5TRVJUCglJbnNlcnRNZW51OiBhbGxvdyBpbnNlcnRpb24gZXZlbiBpZiBwb3NpdGlvbiBpcyBvbmUgYWZ0ZXIgbGFzdCBpdGVtCgoJKiBbaWYxNjMyL0ltYWtlZmlsZV0gW2lmMTYzMi9jb21wb2JqLnNwZWNdIFtpZjE2MzIvcmVsYXkuY10KCSAgW2lmMTYzMi9zdG9yYWdlLnNwZWNdIFtpbmNsdWRlL2RsbHMuaF0KCUFkZGVkIHN0dWJzIGZvciBTVE9SQUdFLkRMTCBhbmQgQ09NUE9CSi5ETEwKCgkqIFtpZjE2MzIvdXNlci5zcGVjXSBbd2luZG93cy9tZXNzYWdlLmNdCglJblNlbmRNZXNzYWdlOiBuZXcgZnVuY3Rpb24KCgkqIFtpbmNsdWRlL25lZXhlLmhdW2luY2x1ZGUvbmVfaW1hZ2UuY10KCU5FX0ZpeHVwU2VnbWVudDogZml4ZWQgaGFuZGxpbmcgb2YgYWRkaXRpdmUgcmVjb3JkcwoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJR2V0RW50cnlETExOYW1lOiByZXR1cm4gTlVMTCBpbnN0ZWFkIG9mIHBvaW50ZXIgdG8gRExMLjAgaWYgbm90IGZvdW5kCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJd2luX2ZhdWx0OiBFbnRlciBkZWJ1Z2dlciBvbiBTSUdGUEUsIHRvbwoKV2VkIE1hciAgMSAyMTo0Nzo0MiAxOTk1ICBDYW1lcm9uIEhlaWRlICAoaGVpZGVAZWUudWFsYmVydGEuY2EpCgogICAgICAgICogW21pc2NlbXUvaW50Ki5jXQogICAgICAgIFZhcmlvdXMgbWlub3IgbW9kaWZpY2F0aW9ucyB0byB0aGUgY2xvY2sgdGljayBjb3VudGVyLAogICAgICAgIEZpbmRGaXJzdC9GaW5kTmV4dCBmdW5jcywgYW5kIERQQiBoYW5kbGluZy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IE1hciAgMiAxNzo0NDozMiAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHUpCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdIFtvYmplY3RzL29lbWJpdG1hcC5jXQoJUmVtb3ZlZCBzeXNyZXMgYml0bWFwIGNvZGU7IHlvdSBuZWVkIGxpYlhwbSB0byBjb21waWxlIG5vdy4KCUltcGxlbWVudGVkIExvYWRJY29uKCkgZm9yIE9FTSBpY29ucy4KCgkqIFtpbmNsdWRlL2JpdG1hcHMvb2ljXypdCglBZGRlZCBPRU0gaWNvbnMgaW4gWFBNIGZvcm1hdC4KCgkqIFtvYmplY3RzL2RpYi5jXQoJQnVnIGZpeCBpbiBEcmF3SWNvbigpLgoKCSogW3JjL3N5c3Jlc2JtLnJjXQoJUmVtb3ZlZDsgYWxsIGJpdG1hcHMgYXJlIHN0b3JlZCBpbiBYUE0gZm9ybWF0IG5vdy4KClR1ZSBGZWIgMjggMTg6NTQ6MjggMTk5NSAgVG9taSBMZXBwaWthbmdhcyAgKHRvbWlsZXBwQHBhanUub3VsdS5maSkKCgkqIFtjb250cm9scy9lZGl0LmNdCglTbWFsbCBwYXRjaCB0byBmaXggZWRpdC1jb250cm9sIHdoZW4gaXQncyBjcmVhdGVkIHdpdGggdGV4dC4KClN1biBGZWIgMjYgMjA6MjI6MTUgMTk5NSAgTWljaGFlbCBWZWtzbGVyICAoZTE2NzgyMjNAdG9jaG5hcGMyLnRlY2huaW9uLmFjLmlsKQoKCSogW3Rvb2xzL21ha2VfZGVidWddCglUaGUgY3JlYXRlZCBtYWNyb3Mgd29uJ3QgaGF2ZSBzaWRlIGVmZmVjdHMgYW55bW9yZSB3aGVuIHVzZWQgaW4KCWFuICJpZi1lbHNlIiBzdHJ1Y3R1cmUuIE5vIG1vcmUgd2FybmluZ3MgZnJvbSB0aGUgY29tcGlsZXIgd2hlbgoJY29tcGlsZWQgd2l0aG91dCBkZWZpbmluZyBERUJVR19SVU5USU1FLgogClN1biBGZWIgMjYgMjA6MjA6NDkgMTk5NSAgTWljaGFlbCBQYXRyYSA8bWlja3lAbWFyaWUucGh5c2lrLlRVLUJlcmxpbi5ERT4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglMaXN0Qm94RGVsZXRlU3RyaW5nKCk6IEZpeGVkCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglHZXRNZW1vcnlSZWZlcmVuY2UoKTogV2hlbiBzcGVjaWFsIHNlZ21lbnRzIGFyZSByZWZlcmVuY2VkIGJ5Cglwc2V1ZG8tZnVuY3Rpb25zIGxpa2UgX18wMDQwSCwgYSByZWZlcmVuY2UgdG8gYSAibm9ybWFsIiBzZWdtZW50Cgl3aWxsIGJlIHJldHVybmVkIHByZXZlbnRpbmcgdGhlIHByb2dyYW0gZnJvbSBjcmFzaGluZyBhcyBzb29uCglhcyB0aGUgcmVmZXJlbmNlZCBzZWdtZW50IGlzIGFjdHVhbGx5IGFjY2Vzc2VkLgoKU3VuIEZlYiAyNiAxNTo1NToxNCBNRVQgMTk5NSAgTWFydGluIHZvbiBMb2V3aXMgKGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZSkKCgkqIFtDb25maWd1cmVdCglBc2sgZm9yIE9MRSBzdHVicyBhbmQgbWFsbG9jIGRlYnVnZ2luZwoKCSogW0ltYWtlZmlsZV0KCWxpbmsgd2l0aCBsaWJtY2hlY2suYSBpZiBuZWNlc3NhcnkKCgkqIFtpZjE2MzIvcmVsYXkuY11baW5jbHVkZS9kbGwuaF1baWYxNjMyL0ltYWtlZmlsZV0KCUFkZCBPTEUgc3R1YnMsIGluY3JlYXNlIG51bWJlciBvZiBidWlsdGlucwoJZGxsX25hbWVfdGFibGVfZW50cnlfczogbmV3IGZpZWxkIGRsbF9pc191c2VkCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10KCUdldE1vZHVsZUhhbmRsZSxNb2R1bGVOZXh0OiBDaGVjayBkbGxfaXNfdXNlZAoKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJQmFyayBvbiB1bnN1cHBvcnRlZCBORV9SQUREUl9MT1dCWVRFIGZsYWcgKHdoYXQgaXMgaXQgc3VwcG9zZWQKCXRvIG1lYW4sIGFueXdheT8pCgoJKiBbbWlzYy9vbGVjbGkuY11bbWlzYy9vbGVzdnIuY10KCU5ldyBmaWxlcy4gQWRkIHRvIG1pc2MvSW1ha2VmaWxlCgoJKiBbbWlzYy9kb3NfZnMuY10KCURPU19HZXRVbml4RmlsZU5hbWU6IG1ha2UgYSBjb3B5IG9mIHRoZSBpbnB1dCBwYXJhbWV0ZXIgdG8gCglwcmV2ZW50IG92ZXJ3cml0aW5nCgoJKiBbbWlzYy9tYWluLmNdCglNQUlOX1BhcnNlRExMT3B0aW9uczogbmV3IGZ1bmN0aW9uCglNQUlOX1BhcnNlT3B0aW9uczogdHJlYXQgLWRsbCBjb21tYW5kIGxpbmUgZmxhZwoJbWFpbjogYWRkIHN1cHBvcnQgZm9yIG1hbGxvYyBkZWJ1Z2dpbmcKCkZyaSBGZWIgMjQgMTI6NDM6MjcgMTk5NSAgRXJpayBTdmVuZHNlbiAgPHozZXN2QGttZC1hYy5kaz4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglTbWFsbCBwYXRjaCBmb3IgcGVvcGxlIHVzaW5nIEZyZWVCU0QtMi4xLjAuCgpGcmkgRmViIDE3IDIyOjQ5OjE4IDE5OTUgIE1pZ3VlbCBkZSBJY2F6YSAobWlndWVsQHJveGFubmUubnVjbGVjdS51bmFtLm14KQoKCSogW3Rvb2xraXQvc3VwLmNdCglBZGRlZCByZXR1cm4gdmFsdWVzIHRvIHRoZSBDYWxsKiByb3V0aW5lcwoKCSogW3Rvb2xraXQvd2lubWFpbi5jXQoJTG9hZCB0aGUgcmVzb3VyY2UgZmlsZSBwcm9wZXJseSBmb3IgV2luZUxpYiBhcHBsaWNhdGlvbnMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRodSBGZWIgMTYgMTg6NTc6MzEgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1KQoKCSogW2lmMTYzMi9jYWxsLlNdCglPbmx5IHNhdmUgdGhlIGxvd2VyIDE2LWJpdHMgb2YgU1AgYW5kIEJQLgoKCSogW2lmMTYzMi9jYWxsYmFjay5jXQoJV2hlbiBjYWxsaW5nIHRvIDE2LWJpdCBjb2RlLCByZXN0b3JlIERTIGZyb20gaXRzIHByZXZpb3VzIHZhbHVlIG9uCgllbnRyeSB0byB0aGUgMzItYml0IGNvZGUsIGluc3RlYWQgb2YgZnJvbSB0aGUgY29kZSBzZWdtZW50IG93bmVyLgoKCSogW2lmMTYzMi9yZWxheS5jXSBbaW5jbHVkZS9zdGFja2ZyYW1lLmhdCglVc2UgYSBzdHJ1Y3R1cmUgdG8gcmVwcmVzZW50IHRoZSAxNi1iaXQgc3RhY2sgZnJhbWUgbGF5b3V0CglpbnN0ZWFkIG9mIGhhcmQtY29kZWQgb2Zmc2V0cy4KCQoJKiBbcmMvSW1ha2VmaWxlXQoJVXNlIHkudGFiLmMgZm9yIGJpc29uIG91dHB1dCBmaWxlIGZvciBjb21wYXRpYmlsaXR5IHdpdGggeWFjYy4KCgkqIFt0b29scy9idWlsZC5jXQoJU21hbGwgb3B0aW1pemF0aW9uIGZvciBjYWxscyB0byAzMi1iaXQgY29kZS4KClN1biBGZWIgMTIgMDM6MTk6NDcgMTk5NSAgTWljaGFlbCBWZWtzbGVyIChzMTY3ODIyM0B0Mi50ZWNobmlvbi5hYy5pbCkKCgkqIFt0b29scy9idWlsZC5jXQoJRml4ZWQgYnVnIChpbmZsaWN0ZWQgYnkgcHJldmlvdXMgY2hhbmdlKSAtIFNFR1Ygb24gWk1BR0lDIGZpbGUgZm9ybWF0LgoKU3VuIEZlYiAxMSAyMDowMDowMCAxOTk1ICBH9nJhbiBUaHluaSAgKGdvcmFuQG5vcnJza2VuLmJpbGRiYXNlbi5zZSkKCgkqIFtkZWJ1Z2dlci9kYmcueV0KCVJlbW92ZSB1bm5lY2Vzc2FyeSBzeW0tdGFibGUgbG9hZGluZyB3aGVuIHN0b3BwZWQgaW4gMTYtYml0IG1vZGUuCgoJKiBbaW5jbHVkZS9zZWdtZW0uaF0gW2xvYWRlci9zZWxlY3Rvci5jXQogICAgICAgIEFkZGVkIGR5bmFtaWMgYWxsb2N0aW9uIG9mIHNlbGVjdG9ycy4KICAgICAgICBGaXhlZCBzb21lIHByb2JsZW1zIHdpdGggbGFyZ2UgcHJvZ3JhbXMgU0lHU0VHVi1pbmcgd2hpbGUKICAgICAgICBydW5uaW5nIG91dCBvZiBzZWxlY3RvcnMuCgoJKiBbaW5jbHVkZS9zZWdtZW0uaF0gW2xvYWRlci9zZWxlY3Rvci5jXSBbaWYxNjMyL2NhbGxiYWNrLmNdIAogICAgICAgICAgW21lbW9yeS9nbG9iYWwuY10gW21lbW9yeS9oZWFwLmNdIFttZW1vcnkvbGluZWFyLmNdCglVc2UgX19BSFNISUZUIGFuZCBfX0FISU5DUiBpbnN0ZWFkIG9mIDMgYW5kIDguCgpNb24gRmViICA2IDE4OjA3OjM4IDE5OTUgIENhbWVyb24gSGVpZGUgIChoZWlkZUBlZS51YWxiZXJ0YS5jYSkKCiAgICAgICAgKiBbbWlzYy9kb3NfZnMuY10KICAgICAgICBCZXR0ZXIgcmVsYXRpdmUgcGF0aCBoYW5kbGluZyB3aGVuIGNvbnZlcnRpbmcgZmlsZW5hbWVzIGJldHdlZW4KICAgICAgICBkb3MgYW5kIHVuaXgsIGFsbG93aW5nICcuJyB0byBiZSB1c2VkIGluIHRoZSBXaW5kb3dzIHBhdGguCiAgICAgICAgU3RhcnR1cCB3b3JraW5nIGRpciBpcyBub3cgYmFzZWQgb24gY3VycmVudCB3b3JraW5nIGRpci4KClNhdCBGZWIgIDQgMjE6MjE6MTMgMTk5NSAgTWljaGFlbCBWZWtzbGVyIChzMTY3ODIyM0B0Mi50ZWNobmlvbi5hYy5pbCkKCgkqIFtpZjE2MzIvcmVsYXkuY10gW2luY2x1ZGUvZGxscy5oXSBbdG9vbHMvYnVpbGQuY10KCVNxdWVlemVkIGRhdGEgc3RydWN0dXJlIHRoYXQgcmVmZXJlbmNlcyBpbnRlcm5hbCBkbGwncyAobW9zdGx5Cgkic3RydWN0IGRsbF90YWJsZV9lbnRyeV9zIikuIENhdXNlZCAyMCUgcmVkdWN0aW9uIGluIGV4ZWN1dGFibGUKCWNvZGUgc2l6ZS4KCkZyaSBGZWIgIDMgMTg6NTM6MTUgMTk5NSAgTWFydGluIHYuIExvZXdpcyAgKGxvZXdpc0BtYXJpZSkKCgkqIFtJbWFrZWZpbGVdCgltYWtlIHdpbmUuc3ltIG9ubHkgd2hlbiBtYWtpbmcgZW11bGF0b3IKCgkqIFttaXNjL2ZpbGUuY10KCU9wZW5GaWxlKCk6IHJlcG9ydCBhcyBub3QgaW1wbGVtZW50ZWQgZm9yIFdJTkVMSUIKCgkqIFttaXNjL3dpbnNvY2suY10KCUZpeCBDT05WRVJUX0hPU1RFTlQgYW5kIGZyaWVuZHMgZm9yIHVzZSB3aXRoIFdJTkVMSUIKCgkqIFtyYy9JbWFrZWZpbGVdW3JjL3JjLnldW3JjL3BhcnNlci5jXQoJUmVuYW1lIHJjLnkgdG8gcGFyc2VyLnkKCVVzZSBmbGV4IGFuZCBiaXNvbiBvbiBTdW4KCgkqIFt0b29sa2l0L3N1cC5jXQoJQ2FsbFdpbmRvd1Byb2M6IGZpeCBwYXJhbWV0ZXIgdHlwZQoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUNvbW1lbnRlZCAjaWZkZWYgc3BhcmMKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KV2VkIEZlYiAgMSAxOToyNzo1NSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10gW3dpbmRvd3Mvd2lucG9zLmNdCglJbXBsZW1lbnRlZCBtYXhpbWl6ZWQgd2luZG93cy4KCUltcGxlbWVudGVkIGljb24gcG9zaXRpb25pbmcgYW5kIEFycmFuZ2VJY29uaWNXaW5kb3dzKCkuCglCdWcgZml4ZXMgaW4gU2V0V2luZG93UG9zKCkuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJSW1wbGVtZW50ZWQgR2V0Q29udHJvbEJydXNoKCkuCglXaW5kb3cgZnJhbWUgaXMgbm8gbG9uZ2VyIGNvbnRhaW5lZCBpbiB0aGUgdXBkYXRlIHJlZ2lvbi4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJRGVzdHJveSBvd25lZCB3aW5kb3dzIHVwb24gRGVzdHJveVdpbmRvdygpLgoKU3VuIEphbiAyOSAxNjoxNzoyMiAxOTk1ICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJQ2hhbmdlZCBsaW5lIHRlcm1pbmF0b3IgdG8gXHJcbiB0byBiZSBjb21wYXRpYmxlIHdpdGgKCVdpbmRvd3MuICBGaXhlZCBidWcgaW4gdGV4dCBzZWxlY3Rpb24uCgpTdW4gSmFuIDI5IDE0OjEwOjIyIDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCiAgICAgICAqIFttaXNjL3NoZWxsLmNdCiAgICAgICBSZXdyb3RlIFJlZ0NyZWF0ZUtleSBhbmQgUmVnT3BlbktleSwgc2luY2UgdGhleSB3ZXJlIGNvbXBsZXRlbHkgYnJva2VuLgogICAgICAgRml4ZWQgYSBidWcgaW4gUmVnUXVlcnlLZXlWYWx1ZS4gSW1wbGVtZW50ZWQgUmVnRW51bUtleQogICAgICAgVGhlc2UgZnVuY3Rpb25zIG5vdyB3b3JrIHNvbWV3aGF0IG1vcmUgdGhlIHdheSBXaW5kb3dzIHByb2dyYW1zIGV4cGVjdAogICAgICAgdGhlbSB0byB3b3JrLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gSmFuIDIyIDE4OjU1OjMzIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10gW29iamVjdHMvZGliLmNdCglGaXhlZCBpY29uIGxvYWRpbmcgYW5kIGRyYXdpbmcsIG5vdyB0aGF0IEJpdEJsdCgpIHdvcmtzIGNvcnJlY3RseS4KCQoJKiBbb2JqZWN0cy9jbGlwcGluZy5jXSBbb2JqZWN0cy9yZWdpb24uY10KCUltcGxlbWVudGVkIGVsbGlwdGljIHJlZ2lvbnMgd2l0aCBhIHNldCBvZiByZWN0YW5nbGUuIFRoaXMgZ3JlYXRseQoJc2ltcGxpZmllcyB0aGUgcmVnaW9uIGNvZGUgYW5kIHNob3VsZCBib29zdCBjbGlwcGluZyBwZXJmb3JtYW5jZS4KCgkqIFtvYmplY3RzL2NvbG9yLmNdCglGaXhlZCBidWcgdGhhdCBjYXVzZWQgc2VnLWZhdWx0IG9uIDI0YnBwIGRpc3BsYXlzLgoKCSogW29iamVjdHMvYml0Ymx0LmNdCglGaXhlZCBidWcgd2hlbiBzaHJpbmtpbmcgYSBiaXRtYXAgdG8gbW9yZSB0aGFuIGhhbGYgaXRzIHNpemUuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJRml4ZWQgYnVncyBpbiBQYWludFJnbigpIGFuZCBQb2x5bGluZSgpLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFt3aW5kb3dzL3BhaW50aW5nLmNdIFt3aW5kb3dzL3dpbnBvcy5jXQoJRml4ZWQgc29tZSBwcm9ibGVtcyB3aXRoIHdpbmRvdyBiYWNrZ3JvdW5kIHBhaW50aW5nLgoKVGh1IEphbiAxMiAxMjoyMDoyNSBQU1QgMTk5NSBSb3NzIEJpcm8gKGJpcm9AeWdnZHJhc2lsLmNvbSkKCiAgICAgICAqIFt0b29scy9idWlsZC5jXQogICAgICAgKiBbdG9vbHMvbmV3YnVpbGQuY10KICAgICAgICogW0ltYWtlZmlsZV0KICAgICAgICogW2luY2x1ZGUvd2luZS5oXQogICAgICAgKiBbbG9hZGVyL2NhbGwuU10KICAgICAgICogW2xvYWRlci9zZWxlY3Rvci5jXQogICAgICAgKiBbaW5jbHVkZS9zZWdtZW0uaF0KICAgICAgICogW21pc2MvbWFpbi5jXQogICAgICAgQ2hhbmdlZCBzZWxlY3RvciBjb2RlIGFuZCAxNi8zMiBiaXQgeGZlciBjb2RlIHNvIHRoYXQgd2luZQogICAgICAgbm8gbG9uZ2VyIGhhcyB0byBiZSBsb2FkZWQgbG93IGluIG1lbW9yeS4gIENoYW5nZWQgd2luZQogICAgICAgdG8gd29yayB3aXRoIEVMRiBiaW5hcnkgZm9ybWF0cyB1bmRlciBMaW51eC4KICAgICAgIApTYXQgU2VwIDE3IDExOjA4OjQ5IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0Blc3AyMikKCgkqIFtkZWJ1Z2dlci9kYl9kaXNhc20uY10KCU5ldyBpbnN0cnVjdGlvbiBkaXNhc3NlbWJsZXIgLSBib3Jyb3dlZCBmcm9tIE1hY2gga2VybmVsLiAgSGFzIGEKCUJTRCBzdHlsZSBvZiBsaWNlbnNlIGFzIG9wcG9zZWQgdG8gdGhlIGdkYiBjb2RlIHdlIHdlcmUgcHJldmlvdXNseQoJdXNpbmcgd2hpY2ggd2FzIHVuZGVyIHRoZSBHUEwuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1vbiBKYW4gIDkgMTg6Mjc6MTEgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW0ltYWtlZmlsZV0KCUNvbXBpbGluZyB3aXRoIC1XYWxsIGZsYWcuCgoJKiBbKi8qXQoJRml4ZXMgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBjb21waWxhdGlvbiB3YXJuaW5ncy4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJRml4ZWQgQml0Qmx0KCkgYW5kIHVzZWQgdGhlIHNhbWUgY29kZSB0byByZXdyaXRlIFBhdEJsdCgpIGFuZAoJU3RyZXRjaEJsdCgpLiBUaGUgdGhyZWUgKkJsdCgpIGZ1bmN0aW9ucyBzaG91bGQgbm93IGJlIGNvcnJlY3QgaW4KCWV2ZXJ5IGNhc2UgKGZhbW91cyBsYXN0IHdvcmRzKS4KCgkqIFtvYmplY3RzL2JydXNoLmNdIFtvYmplY3RzL2RpdGhlci5jXQoJTWVyZ2VkIHRoZSB0d28gZmlsZXMgaW50byBicnVzaC5jCgoJKiBbb2JqZWN0cy9kYy5jXQoJRml4ZWQgYnVnIHdoZW4gdGhlIFdpbmRvd3MgcHJvZ3JhbXMgZm9yZ2V0IHRvIHJlLXNlbGVjdCB0aGUKCW9yaWdpbmFsIGJpdG1hcCBpbiBhIG1lbW9yeSBEQy4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCVR0eSB0byB1c2UgJ2ZpeGVkJyBmb250IHdoZW4gdGhlIHN5c3RlbSBmb250IGNhbid0IGJlIGZvdW5kLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglUZW50YXRpdmUgZml4IHRvIG1ha2UgZGlhbG9ncyBsb29rIGJldHRlciB3aGVuIHVzaW5nIGZpeGVkLXdpZHRoCglmb250cy4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglQYXJ0aWFsbHkgaW1wbGVtZW50ZWQgdGhlIFBTX0lOU0lERUZSQU1FIHBlbiBzdHlsZS4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJRml4IGZvciB3aW5kb3dzIHRoYXQgaGF2ZSB0aGUgV1NfRVhfRExHTU9EQUxGUkFNRSBzdHlsZSBiaXQKCXdpdGhvdXQgdGhlIFdTX0RMR0ZSQU1FIHN0eWxlLgoKVGh1IEphbiAgNSAxMzozNzo0MiAxOTk1ICBDYW1lcm9uIEhlaWRlICAoaGVpZGVAZWUudWFsYmVydGEuY2EpCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJR2xvYmFsQ29tcGFjdCBzaG91bGQgbm93IHJldHVybiB0aGUgY29ycmVjdCB2YWx1ZSB3aGVuIHRoZQoJbGFyZ2VzdCBydW4gb2YgZnJlZSBibG9ja3MgaW5jbHVkZXMgdGhlIGxhc3QgYmxvY2suCgoJKiBbd2luZG93cy9tZGkuY10KCVRpbGluZyBhbmQgY2FzY2FkaW5nIHdpbmRvd3Mgd2l0aG91dCBhbnkgTURJIGNoaWxkcmVuIHNob3VsZAoJbm8gbG9uZ2VyIGNyYXNoIChhc3N1bWluZyBuby1vcCBpcyB0aGUgY29ycmVjdCB0aGluZyB0byBkbykuCgpTdW4gSmFuICAxIDIzOjMwOjI1IDE5OTUgIEZvbnMgQm90bWFuICA8Ym90bWFuQHJhYm8ubmw+CgoJKiBbb2JqZWN0cy9mb250LmNdCglHZXRUZXh0RXh0ZW50UG9pbnQ6IGZpeGVkIGRlYnVnIG91dHB1dCwgc3RyIGlzIGNvdW50ZWQgc3RyaW5nLCBub3QKICAgICAgICB6ZXJvIHRlcm1pbmF0ZWQuCgoJKiBbaWYxNjMyL3JlbGF5LmNdCglETExSZWxheTogd2hlbiBkZWJ1Z2dpbmdfc3RhY2sgZ290IHNlZ3YsIGFkZGVkIHVwcGVyIGJvdW5kIGZvcgogICAgICAgIHN0YWNrIGR1bXAuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBEZWMgMjcgMTM6MzU6MTYgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogWyovSW1ha2VmaWxlXQoJQWxsIG9iamVjdHMgZmlsZXMgYXJlIG5vdyBrZXB0IGluIHRoZWlyIHJlc3BlY3RpdmUgZGlyZWN0b3J5LgoKCSogW1JFQURNRV0KCVJld3JvdGUgbW9zdCBvZiBpdC4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJUmV3cm90ZSBCaXRCbHQoKSB0byBsb29rIHJpZ2h0IGluIGV2ZXJ5IGNhc2UsIHdoaWxlIG1pbmltaXppbmcKCXRoZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UuIE5vdCByZWFsbHkgZmluaXNoZWQgeWV0LgoKCSogW29iamVjdHMvYml0bWFwLmNdIFtvYmplY3RzL2RjLmNdCglGaXhlZCBidWcgd2l0aCBwYXR0ZXJuIGJydXNoZXMuCgoJKiBbb2JqZWN0cy9jbGlwcGluZy5jXSBbd2luZG93cy9wYWludGluZy5jXQoJRml4ZXMgZm9yIGxvZ2ljYWwgY29vcmRpbmF0ZXMuCgoJKiBbb2JqZWN0cy9jb2xvci5jXSBbd2luZG93cy9ncmFwaGljcy5jXQoJRml4ZWQgR2V0UGl4ZWwoKSB0byByZXR1cm4gdGhlIGNvcnJlY3QgY29sb3IsIGFuZCBtYWRlIGl0IGZhc3Rlci4KCgkqIFtvYmplY3RzL3JlZ2lvbi5jXQoJRml4ZWQgYnVnIGluIENvbWJpbmVSZ24oKSB3aGVuIG9uZSBvZiB0aGUgcmVnaW9uIGlzIGVtcHR5LgoKRnJpIERlYyAyMiAwMTo0Mjo1NyBNRVQgMTk5NAkJICBEYWcgQXNoZWltIChkYXNoQGlmaS51aW8ubm8pCgoJKiBbQ29uZmlndXJlXQoJRG9uJ3QgYXNzdW1lIHRoYXQgZXhwciBoYW5kbGVzICc9PScsIHVzZSAnPScgaW5zdGVhZC4KCUdpdmUgYSAoaG9wZWZ1bGx5IGluZm9ybWF0aXZlKSBtZXNzYWdlIGlmIGltYWtlIGZhaWxzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpXZWQgRGVjICA3IDE0OjUyOjI1IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglGaXhlZCBwcm9ibGVtcyBkdWUgdG8gbmV3IHNjcm9sbC1iYXIgY29kZS4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdIFttaXNjZW11L2lvcG9ydHMuY10KCUhhbmRsZSBJL08gb3Bjb2RlcyB0aGF0IHVzZSBhbiBhYnNvbHV0ZSBhZGRyZXNzLgoKCSogW29iamVjdHMvdGV4dC5jXQoJSW1wbGVtZW50ZWQgVGFiYmVkVGV4dE91dCgpLgoKU2F0IERlYyAgMyAxODo1MzowOCAxOTk0ICBLZW5uZXRoIE1hY0RvbmFsZCAgPEsuTWFjRG9uYWxkQGVkLmFjLnVrPgoKCSogW29iamVjdHMvbWV0YWZpbGUuY10KCUltcGxlbWVudGVkIEdldE1ldGFmaWxlKCkuCglGaXhlZCBidWcgaW4gUGxheU1ldGFGaWxlKCkgd2hlbiByZWFkaW5nIGRpc2MgYmFzZWQgbWV0YWZpbGUgcmVjb3Jkcy4KCUFkZGVkIE1FVEFfUE9MWVBPTFlHT04sIE1FVEFfREVMRVRFT0JKRUNUIGFuZCBNRVRBX0VPRiB0byAKCVBsYXlNZXRhRmlsZVJlY29yZCgpLgoJCldlZCBOb3YgMzAgMDY6MzI6MjUgMTk5NCAgTWFydGluIHZvbiBMb2V3aXMgIChtYXJ0aW5AY3MuY3N1ZnJlc25vLmVkdSkKCgkqIFtJbWFrZWZpbGVdCgl3aW5lLnN5bTogUmVtb3ZlIGdjYzJfY29tcGlsZWQgYW5kIGZyaWVuZHMKCgkqIFtjb250cm9scy9saXN0Ym94LmNdW2lmMTYzMi9yZWxheS5jXVtpZjE2MzIvcmVsYXkuY10KCSAgW2xvYWRlci9yZXNvdXJjZS5jXVttZW1vcnkvaGVhcC5jXVtvYmplY3RzL2RpYi5jXVt3aW5kb3dzL2RpYWxvZy5jXQoJUmVwbGFjZSAjaWZkZWYgREVCVUdfWFhYIHdpdGggaWYoZGVidWdnaW5nX3h4eCl7CgoJKiBbaWYxNjMyL2NhbGwuU10KCUNhbGxUb0xpYk1haW46IE5ldyBmdW5jdGlvbgoKCSogW2lmMTYzMi9yZWxheS5jXVtpbmNsdWRlL29wdGlvbnMuaF1bbWlzYy9tYWluLmNdCgkgIFttaXNjZW11L2ludDFhLmNdW21pc2NlbXUvaW50MjEuY11bbWlzY2VtdS9rZXJuZWwuY10KCXJlbW92ZWQgT3B0aW9ucy5yZWxheV9kZWJ1ZwoKCSogW2luY2x1ZGUvaGVhcC5oXQoJSEVBUF9PV05FUjogVXNlIGRzIGluc3RlYWQgb2YgY3M6aXAKCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCUxvYWRORUltYWdlOiBSZW1lbWJlciBjdXJyZW50IGV4ZSwgaGFuZGxlIG5vZGF0YSBkbGxzCglJbml0TkVETEw6IGhhbmRsZSBub2RhdGEgZGxscywgY2FsbCBDYWxsVG9MaWJNYWluCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglDcmVhdGVTZWxlY3RvcnM6IEluaXRpYWxpemUgYXV0b19kYXRhX3NlbCB3aXRoIDAKCgkqIFttZW1vcnkvaGVhcC5jXQoJSEVBUF9DaGVja0hlYXA6IENoZWNrIHByZXYKCUhFQVBfQ2hlY2tMb2NhbEhlYXBzOiBuZXcgZnVuY3Rpb24KCgkqIFttaXNjL3Byb2ZpbGVdCglSZW1lbWJlciBhbmQgZHVtcCBvbmx5IGNoYW5nZWQgcHJvZmlsZXMKCgkqIFt0b29scy9tYWtlZGVidWddCglJbnRyb2R1Y2UgZGVidWdnaW5nX3h4eCBmbGFncwoKU3VuIE5vdiAyNyAyMzoxMzoyMiBNRVQgMTk5NAk8ZXJpa0B4czRhbGwubmw+CgoJKiBbY2xpcGJvYXJkLmggY29sb3IuaCBkYy5oIGRvc19mcy5oIGV2ZW50LmggZm9udC5oIGdyYXBoaWNzLmgKCWlmMTYzMi5oIGtlcm5lbC5oIGxpYnJhcnkuaCBtaXNjZW11LmggbmVfaW1hZ2UuaCBub25jbGllbnQuaCAKCXBlX2ltYWdlLmggc2VsZWN0b3JzLmggd2ludHlwZXMuaF0KCUFkZGVkLgoKCSogWyovKl0KCS0gQ29tbWVudGVkIGFsbCAnc3RhdGljIGNoYXIgY29weXJpZ2h0IHN0YXRlbWVudHMnLCBzZWUgbWlzYy9tYWluLmMKCS0gbW92ZWQgcHJvdG90eXBlcyB0byBoZWFkZXJzIGZpbGVzLCBmaXhlZCB3cm9uZyBwcm90b3R5cGVzLgoJLSAqcGxlYXNlKiBhZGQgYSBoZWFkZXIgZmlsZSBmb3IgZWFjaCAuYyBpZiB5b3UgbmVlZCB0byBleHBvcnQKCSAgdGhpbmdzLgoKCSogW21pc2MvbWFpbi5jXQoJQWRkZWQgb25lIHN0YXRpYyBzdHJpbmcgd2hpY2ggbGlzdCB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycy4KCkZyaSBOb3YgMjUgMTY6MjQ6MjcgTUVUIDE5OTQJCSAgRGFnIEFzaGVpbSAoZGFzaEBpZmkudWlvLm5vKQoKCSogW0NvbmZpZ3VyZV0KCU1hZGUgdGhlIHN1cHBvcnQgZm9yIG11bHRpcGxlIGxhbmd1YWdlcyBtb3JlIGF1dG9tYXRpYy4gIEFkZGVkCglhIFtmb250c10gc2VjdGlvbiB0byB0aGUgd2luZS5jb25mIGZpbGUuICBNYWRlIHRoZSBkZWZhdWx0cwoJYmV0dGVyLiAgR2VuZXJhbGx5IGNsZWFuZWQgaXQgdXAuCgoJKiBbcmMvc3lzcmVzX05vLnJjXSBbcmMvc3lzcmVzX0RlLnJjXSBbcmMvc3lzcmVzLmNdCglOb3J3ZWdpYW4gcmVzb3VyY2VzIGFuZCBzbWFsbCBmaXhlcyB0byB0aGUgZ2VybWFuIHJlc291cmNlcy4KCldlZCBOb3YgMjMgMjA6Mjg6NTkgMTk5NCAgTWFydGluIHZvbiBMb2V3aXMgIChtYXJ0aW5AY3MuY3N1ZnJlc25vLmVkdSkKCgkqIFtkZWJ1Z2dlci9icmVhay5jXQoJYmFyaygpLCB0b2dnbGVfbmV4dCgpLCBzaG91bGRfY29udGludWUoKTogTmV3IGZ1bmN0aW9ucwoJaW5zZXJ0X2JyZWFrKCk6IEZpeGVkLCBhZGRzIHdyaXRlIGFjY2VzcyB0byBwYWdlIGJlZm9yZSB3cml0aW5nCgl3aW5lX2JwLm5leHRfYWRkcjogbmV3IHN0cnVjdHVyZSBmaWVsZAoKCSogW2RlYnVnZ2VyL2RiZy55XQoJQ2hhbmdlZCBzeW1ib2wncyB2YWx1ZSB0byBiZSBpdCdzIHZhbHVlIGluc3RlYWQgb2YgdGhlIHZhbHVlCglwb2ludGVkIHRvIGJ5IHRoZSBzeW1ib2wuCglDaGFuZ2VkIFNJR1RSQVAgaGFuZGxpbmcgdG8gYWxsb3cgY29udGludWF0aW9uIGFmdGVyIGJyZWFrIHBvaW50CgoJKiBbbWlzYy9zaGVsbC5jXQoJU2hlbGxBYm91dCgpOiBMb2FkIHJlc291cmNlIGZyb20gbWVtb3J5CgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBOb3YgMjAgMTg6MzA6MDYgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXSBbaW5jbHVkZS9zY3JvbGwuaF0KCVJld3JpdHRlbiBtb3N0IG9mIHNjcm9sbC1iYXIgY29kZSBmb3IgYmV0dGVyIFdpbmRvd3MgbG9vayAmIGZlZWwuCglJbXBsZW1lbnRlZCBFbmFibGVTY3JvbGxCYXIoKS4KCVByZWxpbWluYXJ5IGtleWJvYXJkIHN1cHBvcnQuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCUZpeGVkIEJhZE1hdGNoIGVycm9yIGZvciBCaXRCbHQoKSBhbmQgU3RyZXRjaEJsdCgpIHdoZW4gcmVhZGluZwoJYml0cyBmcm9tIG91dHNpZGUgdGhlIHZpc2libGUgcmVnaW9uLgoKCSogW29iamVjdHMvb2VtYml0bWFwLmNdIFtpbmNsdWRlL2JpdG1hcHMvb2JtXypdCglVc2UgWFBNIHN5bWJvbGljIGNvbG9ycyB0byBsb2FkIGJpdG1hcHMuIFRoaXMgYWxsb3dzIHRoZSBjb2xvcnMKCW9mIHRoZSBiaXRtYXBzIHRvIGRlcGVuZCBvbiB0aGUgc3lzdGVtIGNvbG9ycy4KCgkqIFt0b29scy9tYWtlX2RlYnVnXQoJTWFkZSB0aGUgbWFrZV9kZWJ1ZyBzY3JpcHQgbW9yZSByb2J1c3QuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUZpeGVkIENoZWNrUmFkaW9CdXR0b24oKS4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQSBmZXcgY2hhbmdlcyB0byBzY3JvbGwtYmFyIGRyYXdpbmcgYW5kIHRyYWNraW5nLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglSZW5hbWVkIE5leHRXaW5kb3dGcm9tUG9pbnQoKSB0byBXSU5QT1NfTmV4dFdpbmRvd0Zyb21Qb2ludCgpIHRvCglhdm9pZCBjb25mdXNpb24sIGFuZCBvcHRpbWl6ZWQgaXQgc29tZXdoYXQuCgpOb3YgMTksIDk0IE1hcnRpbiBBeW90dGUgKHdpbmVAdHJnY29ycC5ta3NpbmZvLnFjLmNhKQoKCSogW21pc2MvYXVkaW8uY10KCSogW21pc2MvbWNpYW5pbS5jXQoJbW9yZSBjb2RpbmcgYnV0IG5vdGhpbmcgc3BlY3RhY3VsYXIuCgoJKiBbbWlzYy9tbWF1eC5jXQoJc29tZSBjb2RpbmcgdG8gYWNjZXNzICcvZGV2L21peGVyJy4KCgkqIFttaXNjL21pZGkuY10KCXNvbWUgY29kaW5nIHRvIHJlYWQgLk1JRCBmaWxlcywgYnV0IGl0J3Mgbm90IHBsYXlpbmcgeWV0LgoKU3VuIE5vdiAxMyAxOTozMTowMyAxOTk0ICAgIEphbWVzIFlvdW5nbWFuIChtYmNzdGp5QGFmcy5tYW4uYWMudWspCgoJKiBbb2JqZWN0cy9kaWIuY10KCVJlaW1wbGVtZW50ZWQgRElCX1NldEltYWdlQml0c19STEU4KCkgc28gdGhhdCBpdCB3b3VsZCBjb3BlIHdpdGgKCWJpdG1hcHMgd2hpY2ggZG9uJ3QgZW5kIDB4MDAsIDB4MDIgKHByZXZpb3VzbHkgaXQgYmxldyB1cCkuICBUaGlzCglpbmNsdWRlcyBzb21lIGJpdG1hcHMgb3V0cHV0IGJ5IFBhaW50IFNob3AgUHJvLiAgSW1wbGVtZW50YXRpb24gaXMKCXBvc3NpYmx5IG5vdyB0b28gbGF4LiAgUGxlYXNlIHNlZSB0aGUgbm90ZXMgb24gdGhlIGZ1bmN0aW9uIGFib3V0Cgl3aHkuCgoJKiBbY29udHJvbHMvZGVza3RvcC5jXQoJVGhlIGRlc2t0b3AgcGF0dGVybiBzaG91bGQgYmUgcGFpbnRlZCBpZiB0aGUgd2FsbHBhcGVyIGRvZXNuJ3QKCWNvdmVyIHRoZSB3aG9sZSBzY3JlZW4gd2lkdGggT1IgdGhlIHdob2xlIHNjcmVlbiBoZWlnaHQuCgpTdW4gTm92IDEzIDAwOjA3OjExIE1FVCAxOTk0CUVyaWsgQm9zCTxlcmlrQHhzNGFsbC5ubD4KCgkqIFtvYmplY3RzL2RpYi5jXQoJU21hbGwgYnVnIGluIERJQl9TZXRJbWFnZUJpdHMoKSBmaXhlZCwgYml0bWFwcyBpbiAxNiwyNCBicHAKCW5vdyB3b3JrLgoKCSogW2xvYWRlci9uZV9yZXNvdXJjZS5jXSBbaW5jbHVkZS9yZXNvdXJjZS5oXQoJU29tZSBjbGVhbnVwLgoKVGh1IE5vdiAxMCAyMDo0NDo1OCAxOTk0ICBNYXJ0aW4gdm9uIExvZXdpcyAgKG1hcnRpbkBjcy5jc3VmcmVzbm8uZWR1KQoKCSogW0NvbmZpZ3VyZV0KCSAgW3JjL3N5c3Jlcy5yY10KCVByaW1pdGl2ZSBjb21waWxlLXRpbWUgc3VwcG9ydCBmb3IgbXVsdGlwbGUgbGFuZ3VhZ2VzCgoJKiBbcmMvc3lzcmVzX0RlLnJjXQoJTmV3IGZpbGUKCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUxvYWRCaXRtYXA6IFJlY29nbml6ZSBlbmQgb2Ygc3lzcmVzYm0gcHJvcGVybHkKCgkqIFtyYy9JbWFrZWZpbGVdCglSdWxlcyB0byBjb21waWxlIHJlc291cmNlcyBzaW1wbGlmaWVkLCBkZXBlbmRlbmNpZXMgY2hhbmdlZAoKCSogW3JjL3N5c3Jlc2JtLnJjXQoJRG9uJ3QgdXNlIHN5c3Jlc2JtIGlmIHVzaW5nIFhQTQoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglDcmVhdGVEaWFsb2dJbmRpcmVjdFBhcmFtOiBSZXZlcnNlIFotb3JkZXIgb2YgY29udHJvbHMKCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCU1TR19UcmFuc2xhdGVNb3VzZU1zZzogRml4IEhUVFJBTlNQQVJFTlQgaGFuZGxpbmcKCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJTmV4dFdpbmRvd0Zyb21Qb2ludDogTmV3IGZ1bmN0aW9uCgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglXTV9OQ0hJVFRFU1Q6IEdyb3VwIEJveCBpcyBIVFRSQU5TUEFSRU5UCglCVVRUT05fQ2hlY2tBdXRvUmFkaW9CdXR0b246IE5ldyBmdW5jdGlvbgoJQk1fU0VUQ0hFQ0s6IEFkZGVkIGNhbGwgdG8gQlVUVE9OX0NoZWNrQXV0b1JhZGlvQnV0dG9uCgpNb24gTm92ICA3IDExOjIwOjI2IDE5OTQgIFBhdWwgRmFsc3RhZCAgKHBmQHpvb2YuY3RzLmNvbSkKCgkqIFtvYmplY3RzL3RleHQuY10KCUZpeCBoYW5nIHdoZW4gdXNpbmcgRHJhd1RleHQoLi4uLCBEVF9XT1JEQlJFQUspIHdpdGggYSB3b3JkIHRoYXQKCWlzIHRvbyBsb25nIHRvIGJyZWFrLgoKCSogW29iamVjdHMvZm9udC5jXQoJRG9uJ3QgYXNzdW1lIGhlbHZldGljYSBpZiB0aGVyZSBpcyBubyBmb250IGZhbWlseTsgbGV0IHRoZSBvdGhlcgoJZm9udCBhdHRyaWJ1dGVzIGRlY2lkZSB3aGF0IGZvbnQgdG8gdXNlLgoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10KCUxpc3Rib3hlcyBhbmQgY29tYm8gYm94ZXMgbmVlZCB0byBiZSBub3RpZmllZCBvZiBkb3VibGUtY2xpY2tzLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCSAgW2luY2x1ZGUvbGlzdGJveC5oXQoKCXNjcm9sbGluZyB0byBib3R0b20gb2YgbGlzdCBib3ggc2hvdWxkIGRpc3BsYXkgbGFzdCBpdGVtIGF0IHRoZQoJYm90dG9tLCBub3QgYXQgdGhlIHRvcC4KCQoJbGlzdCBib3hlcyBuZWVkIHRvIGFsbG9jYXRlIGEgc2VwYXJhdGUgaGVhcCBmb3IgdGhlaXIgaXRlbSBkYXRhLAoJcmF0aGVyIHRoYW4gdXNpbmcgdGhlIHVzZXIgaGVhcC4gIE90aGVyd2lzZSwgaXQncyB2ZXJ5IGVhc3kgdG8gcnVuCglvdXQgb2YgbWVtb3J5IGZvciBsaXN0IGJveCBpdGVtcy4KCglyZW1vdmVkIHJlZHVuZGFudCBjb2RlIGluIExpc3RCb3hBZGRTdHJpbmcoKS4gIEltcGxlbWVudGVkIHNpbXBsZQoJdmVyc2lvbiBvZiBMQlNfU09SVC4KCglEb24ndCBwdXQgWy5dIGluIHRoZSBsaXN0IGJveCB3aGVuIHVzaW5nIERETF9ESVJFQ1RPUlkuCgoJKiBbY29udHJvbHMvY29tYm8uY10KCUNvbWJvcyBzaG91bGQgcGFzcyBDQlNfU09SVCBvbnRvIHRoZWlyIGxpc3QgYm94LgoKCSogW3dpbmRvd3Mvd2luLmNdCglJZiB3aW5kb3cgY3JlYXRpb24gaXMgYWJvcnRlZCwgcmVtb3ZlIHRoZSB3aW5kb3cgZnJvbSB0aGUKCWxpbmtlZCBsaXN0cy4KCgkqIFtjb250cm9scy9zdGF0aWMuY10KCXN0YXRpYyBjb250cm9scyB3aXRoIFNTX0lDT04gd2VyZSBhbHdheXMgcmV0dXJuaW5nIDAgZnJvbQoJV01fTkNDUkVBVEUuCgoJTWFrZSBzdXJlIHN0YXRpYyBjb250cm9scyBoYXZlIHRleHQgdG8gZHJhdyBiZWZvcmUgZHJhd2luZyBpdC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE5vdiAgNiAxODo1MjowNCAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbb2JqZWN0cy9vZW1iaXRtYXAuY10gIChOZXcgZmlsZSkKCUFkZGVkIHBvc3NpYmlsaXR5IHRvIHVzZSAueHBtIGZpbGVzIGZvciBPRU0gYml0bWFwcy4KCgkqIFtpbmNsdWRlL2JpdG1hcHMvb2JtKl0gIChOZXcgZmlsZXMpCglSZWRyYXduIGFsbCBPRU0gYml0bWFwcyBpbiB4cG0gZm9ybWF0LgoKCSogW29iamVjdHMvZm9udC5jXQoJQWRkIHNwYWNlIGZvciBpbnRlcm5hbCBsZWFkaW5nIHdoZW4gdXNpbmcgYSBuZWdhdGl2ZSBmb250IGhlaWdodC4KCVN0dWJzIGZvciBBZGRGb250UmVzb3VyY2UoKSBhbmQgUmVtb3ZlRm9udFJlc291cmNlKCkuCglGaXggaW4gRk9OVF9Jbml0KCkgZm9yIHVuaW5pdGlhbGlzZWQgZGVmYXVsdCBmb250LgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglNYWtlIGZvbnQgaGVpZ2h0IG5lZ2F0aXZlIGFzIGl0IGlzIHJlYWxseSBhIHBvaW50IHNpemUgYW5kIG5vdCBhCglwaXhlbCBzaXplOyBkaWFsb2dzIHVzaW5nIDgtcG9pbnQgZm9udHMgbG9vayBiZXR0ZXIgbm93LgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUZpeGVkIHRoZSBmaXggOi0pIGZvciBQaWUoKSB0byBtYWtlIGl0IHdvcmsgZm9yIEFyYygpIGFuZCBDaG9yZCgpIGFsc28uCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUEgZmV3IGNoYW5nZXMgZm9yIG5ldyBPRU0gYml0bWFwcy4KClN1biBOb3YgIDYgMTg6MjI6MTggMTk5NCAgTWljaGFlbCBQYXRyYSAgPG1pY2t5QG1hcmllLnBoeXNpay50dS1iZXJsaW4uZGU+CgoJKiBbd2luZG93cy9jbGFzcy5jXQoJVGhlIG5hbWVzIG9mIGxvY2FsIGNsYXNzZXMgaGF2ZSB0byBiZSBzdG9yZWQgdXNpbmcgR2xvYmFsQXRvbSouCglPdGhlcndpc2UgdGhleSBjb3VsZG4ndCBiZSBhY2Nlc3NlZCBmcm9tIG90aGVyIG1vZHVsZXMgKGUuZy4gQldDQykgCgoJKiBbaWYxNjMyL2NhbGwuU10KCUNhbGxUbzE2KGN4KTogSXQncyBwb3NzaWJsZSB0byBzZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBjeC1yZWdpc3Rlci4KCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCUluaXRORURMTCgpOiBUaGUgc2l6ZSBvZiB0aGUgbG9jYWwgaGVhcCBpcyBub3cgcGFzc2VkIGluIHRoZSBjeC0KCXJlZ2lzdGVyIHdoZW4gaW5pdGlhbGl6aW5nIGEgRExMLgoKCSogW21lbW9yeS9oZWFwLmNdCglMb2NhbEluaXQoKTogVGhlIGNhc2Ugc3RhcnQ9PTAgaXMgbm93IGhhbmRsZWQgaW4gdGhlIHdheSBpdCBzaG91bGQuCgoJKiBbd2luZG93cy93aW4uY10KCUdldFdpbmRvd0xvbmcoKTogSWYgdGhlIGFkcmVzcyBvZiB0aGUgd2luZG93cyBmdW5jdGlvbiBpcyByZXF1ZXN0ZWQKCWl0J3Mgbm8gbG9uZ2VyIHJldHVybmVkIGlmIGl0J3Mgd2l0aGluIHRoZSBXaW5lIGNvZGUgKGFuZCB0aGVyZWZvcmUKCXVucmVhY2hhYmxlIGJ5IGEgd2luZG93cyBwcm9ncmFtKS4gVGhpcyBtYWtlcyBCb3JsYW5kJ3MgT1dMIGhhcHB5LgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUVESVRfR2V0U3RyKCk6IEFkZGVkIGhhbmRsaW5nIGZvciBvZmY8MC4KClN1biBOb3YgIDYgMTc6Mzc6MTQgMTk5NCAgQ2hyaXMgSm9uZXMgIDxjaHJpc2pAaWNoaXBzLmludGVsLmNvbT4KCgkqIFtsb2FkZXIvbGlicmFyeS5jXQoJRml4ZWQgaW5maW5pdGUgbG9vcCBidWcgd2hlbiB0d28gRExMcyByZWZlciB0byBlYWNoIG90aGVyIChmaXhlcwoJaGFuZ3VwIG9mIFF1aWNrZW4gZHVyaW5nIGxvYWRpbmcpLgoKVGh1IE5vdiAwNCAxMjowMDowMCAxOTk0ICBKYW4gV2lsbGFtb3dpdXMgIChqYW5AamFuaGguc2guc3ViLmRlKQoKCSogW21pc2MvZG9zX2ZzLmNdCglCdWcgZml4OiBUaGUgc2l6ZSBvZiBhIGRpc2sgYW4gdGhlIGF2YWlsYWJsZSBzcGFjZQoJaXMgbm93IHJldHVybmVkIGluIGJ5dGVzIGluc3RlYWQgb2YgKGluY29ycmVjdGx5KQoJS0J5dGVzLgoKVGh1IE5vdiAwMyAxMjowMDowMCAxOTk0ICBKYW4gV2lsbGFtb3dpdXMgIChqYW5AamFuaGguc2guc3ViLmRlKQoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUJ1ZyBmaXg6IFBpZSBzZWdtZW50cyBhcmUgbm93IGZpbGxlZCB3aXRoIGNvcnJlY3QgYnJ1c2guCgpUaHUgTm92ICAzIDEwOjQwOjA5IDE5OTQgIE1hcnRpbiB2b24gTG9ld2lzICAobWFydGluQGNzLmNzdWZyZXNuby5lZHUpCgogICAgICAgICogW0ltYWtlZmlsZV0KICAgICAgICBnZW5lcmF0ZSByYy5vIGJlZm9yZSBsb2FkZXIubwoKICAgICAgICAqIFtjb250cm9scy9tZW51LmNdCiAgICAgICAgQ29weVN5c01lbnU6IGdlbmVyYXRlIFNZU01FTlUgb24gdGhlIGZseSwgZWxpbWluYXRlIGhTeXNNZW51CgogICAgICAgICogW2luY2x1ZGUvcmVzb3VyY2UuaF0KICAgICAgICBBZGQgc3RydWN0IFJlc291cmNlVGFibGUKCiAgICAgICAgKiBbbG9hZGVyL2JpdG1hcC5oXQogICAgICAgIExvYWQgc3lzdGVtIGJpdG1hcHMgZnJvbSBzeXNyZXNibVRhYmxlCgogICAgICAgICogW21pc2MvY2xpcGJvYXJkLmNdCiAgICAgICAgICBbd2luZG93cy9ldmVudC5jXQogICAgICAgIElzQ2xpcGJvYXJkRm9ybWF0QXZhaWxhYmxlLEVWRU5UX1NlbGVjdGlvblJlcXVlc3Q6IGJ1ZyBmaXhlcwogICAgICAgIAogICAgICAgICogW3JjL0ltYWtlZmlsZV0KICAgICAgICBnZW5lcmF0ZSByYy5vIGZyb20gc3lzcmVzLm8gYW5kIHN5c3Jlc2JtLm8uIEFkZGVkIC1sZmwKCiAgICAgICAgKiBbcmMvcmMueV0KICAgICAgICBjaGFuZ2Ugc3R5bGUgaGFuZGxpbmcgdG8gYWxsb3cgKCBTMSB8IFMyICkgfCBTMwoKICAgICAgICAqIFtyYy9zeXNyZXMucmNdCiAgICAgICAgICBbcmMvc3lzcmVzYm0ucmNdCiAgICAgICAgUHV0IGJpdG1hcHMgYW5kIGljb25zIHRvIHN5c3Jlc2JtLCBldmVyeXRoaW5nIGVsc2UgdG8gc3lzcmVzCgogICAgICAgICogW3JjL3dpbmVyYy5jXQogICAgICAgICAgW3JjL3dpbmVyYy5oXQogICAgICAgIEFkZGVkIC1vLCAtYyBmbGFncy4gTmV3IGZ1bmN0aW9uIHNldF9vdXRfZmlsZS4gT3V0cHV0IHRvIGZpbGVzLgoKICAgICAgICAqIFt3aW5kb3dzL2RpYWxvZy5jXQogICAgICAgIERpYWxvZ0JveEluZGlyZWN0UHRyLCBEaWFsb2dCb3hJbmRpcmVjdFBhcmFtUHRyOiBOZXcgZnVuY3Rpb25zIAoKICAgICAgICAqIFt3aW5kb3dzL25vbmNsaWVudC5jXQogICAgICAgIENyZWF0ZSBBYm91dFdpbmUgZGlhbG9nIGZyb20gdGVtcGxhdGUgcG9pbnRlcgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gT2N0IDMwIDEzOjAxOjE4IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtjb250cm9scy9zdGF0aWMuY10KCUJ1ZyBmaXggZm9yIFNTX0lDT04gY29udHJvbHMuCgoJKiBbaWYxNjMyL0ltYWtlZmlsZV0KCUZpeGVkIGNhbGwubyBkZXBlbmRlbmNpZXMuCgoJKiBbb2JqZWN0cy9jbGlwcGluZy5jXSBbb2JqZWN0cy9kYy5jXQoJRml4ZWQgdmlzaWJsZSByZWdpb24gaGFuZGxpbmcuIGhWaXNSZ24gaXMgYWx3YXlzIG5vbi1udWxsIG5vdy4KCgkqIFt3aW5kb3dzL2RjZS5jXQoJQnVnIGZpeCBpbiBHZXREQ0V4IGZvciBDU19PV05EQyB3aW5kb3dzLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFt3aW5kb3dzL3BhaW50aW5nLmNdCglGaXhlcyB0byBpY29uIHdpbmRvdyBkcmF3aW5nLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglBIGZldyBmaXhlcyBpbiBTZXRXaW5kb3dQb3MoKS4KClN1biBPY3QgMzAgMTI6NTA6MjQgMTk5NCAgTWljaGFlbCBQYXRyYSAgPG1pY2t5QG1hcmllLnBoeXNpay50dS1iZXJsaW4uZGU+CgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCUJpdEJsdCgpOiBCaXRCbHQgaXMgbm93IGFibGUgdG8gaGFuZGxlIGFueSByYXN0ZXIgb3BlcmF0aW9uLiBJZgoJdGhlIHJlcXVlc3QgY2FuJ3QgYmUgcGFzc2VkIHRvIFhXaW5kb3dzIGRpcmVjdGx5LCBpdCdzIHF1aXRlCglzbG93LCB0aG91Z2guCgoJKiBbKi8qLmNdCgkgIFttaXNjL21haW4uY10KCUltcHJvdmVtZW50cyBvZiB0aGUgc3lzdGVtIGZvciBoYW5kbGluZyBkZWJ1ZyBtZXNzYWdlcy4gT3B0aW9ucyBhcmUKCW5vdyBhbHNvIGxvYWRlZCBmcm9tIC91c3IvbGliL1gxMS9hcHAtZGVmYXVsdHMvV2luZSAoaW5zZXJ0CgkqZGVidWdvcHRpb25zOiAreHh4IHRoZXJlIGlmIHlvdSB3YW50IHRvIGhhdmUgdHVybiBtZXNzYWdlcyB4eHggb24pLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCURlc3Ryb3lNZW51KCk6IFRoZSB3aG9sZSB3aW5kb3cgd29uJ3QgYmUgZGVzdHJveWVkIGFzIGEgc2lkZWVmZmVjdAoJYW55IGxvbmdlci4KCgkqIFttaXNjL2ZpbGUuY10KCU9wZW5GaWxlKCk6IEZpeGVkIGJ1ZyBpbiBzZWFyY2hpbmcgaW4gc3lzdGVtL3dpbmRvdy1kaXJlY3RvcnkuCgpTdW4gT2N0IDMwIDEyOjI1OjUzIDE5OTQgIEppbW15IFRpcnRhd2FuZ3NhIDxqMHQyNTI3QHRhbTIwMDAudGFtdS5lZHU+CgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglCdWcgZml4IGZvciB3aW5kb3cgcmVsYXRlZCBzdHJ1Y3R1cmVzLgoJRENCIGFuZCBDT01TVEFUIGFyZSBhZmZlY3RlZC4gVGhleSBtdXN0IGJlIHBhY2tlZC4KCgkqIFttaXNjL2NvbW0uY10KCUJ1ZyBmaXggZm9yIENPTSBwb3J0czoKCURpYWwgYW5kIGRpYWxvZyB3aW5kb3cgaW4gdGVybWluYWwuZXhlIG5vdyB3b3Jrcy4KCU5vbiBzZXF1ZW50aWFsIENPTSBhc3NpZ25tZW50cyBpbiB3aW5lLmNvbmYgc2hvdWxkIG5vdCBicmVhayBub3cuCglCYXVkcmF0ZSBjYW4gYmUgc3BlY2lmaWVkIGluIHdpbmUuY29uZiB0byBvdmVyY29tZSBiYXVkcmF0ZSBsaW1pdGF0aW9uCglpbiBtc3dpbmRvdy4gU2VlIHNhbXBsZSB3aW5lLmluaQoKCSogW2luY2x1ZGUvY29tbS5oXQoJYWRkIGJhdWRyYXRlIGZpZWxkIHRvIERvc0RldmljZVN0cnVjdHJlCgoJKiBbb2JqZWN0L2ZvbnQuY10KCUJ1ZyBmaXggZm9yIGZvbnQgYXNzaWdubWVudC4KCVVzZSBwYWlycyBvZiBmb3VuZHJ5IGFuZCBmYW1pbHkgZm9udG5hbWVzIGluIFgxMSB0byBjb3JyZXNwb25kIHdpdGgKCXdpbmRvdydzIGZvbnRzLgoJUHV0IGZvbnQgYXNzaWdubWVudCBpbmkgd2luZS5pbmkuCgoJKiBbd2luZS5pbmldCglBZGRpbmcgb3B0aW9uYWwgYmF1ZHJhdGUgYWZ0ZXIgcG9ydCBuYW1lIGluICJzZXJpYWxwb3J0cyIgc2VjdGlvbgoJQWRkIG5ldyBzZWN0aW9uLCAiZm9udHMiLgoJImRlZmF1bHQiIGlzIHNwZWNpYWwga2V5IGluICJmb250cyIgdG8gbWF0Y2ggYW55IHVubWF0Y2ggd2luZG93IGZvbnQuCgpPY3QgMjksIDk0IChuZXcgYWRkcmVzcykgd2luZUB0cmdjb3JwLm1rc2luZm8ucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbaWYxNjMyL3JlbGF5LmNdCgkqIFtpZjE2MzIvY29tbWRsZy5zcGVjXSAJTmV3IGZpbGUuCgkqIFttaXNjL2NvbW1kbGcuY10gCQkJTmV3IGZpbGUuCgkqIFtpbmNsdWRlL2NvbW1kbGcuaF0gCQlOZXcgZmlsZS4KCUJlZ2luIG9mIGFuIGVtdWxhdGVkIENPTU1ETEcgRExMLCBidWlsdC1pbiBmb3Igbm93LgoJKEJUVywgaWYgeW91IHdhbnQgdG8gc3dpdGNoIGJldHdlZW4gYnVpbHQtaW4gJiAxNmJpdHMgQ29tbURsZywgb25seSAKCXRoaW5nIHlvdSBuZWVkIHRvIGRvIGlzIHRvIHB1dCB0aGUgcmVhbC9kdW1teSBuYW1lIGluIGZpbGUgcmVsYXkuYykKCgkqIFtjb250cm9scy9zY3JvbGwuY10KCSogW2NvbnRyb2xzL2NvbWJvLmNdCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglGZXcgYnVnIGZpeGVzIGFuZC9vciBjb3NtZXRpYy4KCgkqIFttaXNjL2F1ZGlvLmNdCgkqIFttaXNjL21tYXV4LmNdCglidWcgZml4ZXMgYW5kIGZsYWdzIHJldHVybmVkIHRvIGVtdWxhdGUgU0IxNi4KCgkqIFttaXNjL21pZGkuY10gCQkJTmV3IGZpbGUuCglza2VsZXRvbiBmb3IgJ01pZGknIE1NU1lTVEVNICYgTUNJIGRyaXZlci4KCgkqIFttaXNjL21jaWFuaW0uY10gCQkJTmV3IGZpbGUuCglza2VsZXRvbiBmb3IgJ0FuaW1hdGlvbjEnIE1DSSBkcml2ZXIuCgoJKiBbd2luZG93cy93aW4uY10KCUFkZCBuZXcgc3R1YiBmb3IgR2V0TGFzdEFjdGl2ZVdpbmRvdygpLgoKVHVlIE9jdCAyNSAwOToxNzoyNSAxOTk0ICBPbGFmIEZsZWJiZSAgKGZsZWJiZUB0YXQucGh5c2lrLnVuaS10dWViaW5nZW4uZGUpCgoJKiBbaWYxNjMyL2NhbGwuU10gW3Rvb2xzL2J1aWxkLmNdCiAgICAgICAgICAgU3VwcG9ydCBmb3IgRUxGIGZvcm1hdC4gKE5vdCBjb21wbGV0ZSkKClN1biBPY3QgMjMgMDA6NTE6NTAgMTk5NCAgUGF1bCBGYWxzdGFkICAocGZAem9vZikKCgkqIFtpZjE2MzIvdXNlci5zcGVjXQoJQWRkIHN0dWJzIGZvciBBcnJhbmdlSWNvbmljV2luZG93cygpLCBldGMuCgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJQWRkIElzQmFkKlB0cigpIGZ1bmN0aW9ucy4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglBZGQgdGVzdF9tZW1vcnkoKSwgZm9yIHVzZSB3aXRoIElzQmFkKlB0cigpLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglBZGQgc3R1YnMgZm9yIFRpbGVDaGlsZFdpbmRvd3MoKSwgZXRjLgoKCSogW3dpbmRvd3Mvd2luLmNdCglJc1dpbmRvdygpIHNob3VsZG4ndCBjcmFzaCBpZiBpdCdzIGdpdmVuIGEgYmFkIGhhbmRsZS4KCUFkZCBzdHViIGZvciBHZXRMYXN0QWN0aXZlUG9wdXAoKS4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglJbXBsZW1lbnQgdGhlIElzQmFkKlB0cigpIGZ1bmN0aW9ucy4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglSZXR1cm4gdGhlIGZ1bGwgbG9uZ3dvcmQgb2YgdGhlIGl0ZW0gZGF0YSBpbiBMQl9HRVRJVEVNREFUQS4KCgkqIFtjb250cm9scy9lZGl0LmNdCglEb24ndCBsZXQgdGhlIHVzZXIgc2VsZWN0IGFuIGFyZWEgcGFzdCB0aGUgZW5kIG9mIHRoZSB0ZXh0LgoKCSogW29iamVjdHMvdGV4dC5jXQoJSW4gRHJhd1RleHQoKSwgdGhlIGNvZGUgdG8gZGVsZXRlIGNybGZzIGFsc28gcmVtb3ZlZCBtdWx0aXBsZQoJY29uc2VjdXRpdmUgbmV3bGluZXMuICBBbHNvLCB1c2luZyBEVF9DQUxDUkVDVCBkaWRuJ3QgcmV0dXJuCgl0aGUgcmlnaHQgaGVpZ2h0LCBhbmQgdGhlIHdpZHRoIHdhc24ndCByZXR1cm5lZCBhdCBhbGwuCglUaGlzIGNhdXNlZCBNZXNzYWdlQm94ZXMgdG8gYmUgbWlzc2luZyBtdWNoIG9mIHRoZWlyIHRleHQuCgoJKiBbd2luZG93cy9zY3JvbGwuY10KCVNjcm9sbFdpbmRvd1tFeF0gZGlkbid0IHdvcmsgcmlnaHQgd2l0aCBudWxsIExQUkVDVCBhcmd1bWVudHMuCgpGcmkgT2N0IDIxIDIxOjQ3OjE5IDE5OTQgIFBhdWwgRmFsc3RhZCAgKHBmQHpvb2YuY3RzLmNvbSkKCgkqIFttaXNjZW11L2ludDIxLmNdCglGaXhlZCBpbnQyMSAweDQyIGhhbmRsZXIgdG8gcHJvcGVybHkgYXNzZW1ibGUgMzItYml0IHNlZWsgcHRyLgoKCSogW21pc2MvcHJvcGVydHkuY10KCUZpeGVkIGludmVydGVkIGxvZ2ljIGluIEVudW1Qcm9wcygpLCBhbmQgY2hhbmdlZCBDYWxsQmFjazE2KCkKCWNhbGwgdG8gdXNlIG5ldyBhcmcgZm9ybWF0LgoKCSogW3dpbmRvd3Mvd2luLmNdCglGaXhlZCBDYWxsQmFjazE2KCkgY2FsbCBpbiBFbnVtW0NoaWxkXVdpbmRvd3MgdG8gdXNlIG5ldyBhcmcKCWZvcm1hdDsgdGhpcyBmaXhlcyBjcmFzaGVzIGluIGVudW0gcHJvY2VkdXJlcy4KCldlZCBPY3QgMTkgMjE6MzA6MDAgUERUIDE5OTQJCW1hcnRpbkBjcy5jc3VmcmVzbm8uZWR1CgoJKiBbbWlzYy9jbGlwYm9hcmQuY10KCSAgW3dpbmRvd3MvZXZlbnQuY10KCSAgW3dpbmRvd3MvbWVzc2FnZS5jXQoJQWRkZWQgY3V0IGFuZCBwYXN0ZSBiZXR3ZWVuIFdpbmUgYW5kIG90aGVyIFggY2xpZW50cyB2aWEKCXRoZSBQUklNQVJZIHNlbGVjdGlvbi4gVGV4dCBvbmx5IHRoaXMgdGltZS4KCgkqIFtjb250cm9scy9lZGl0LmNdCglFRElUX0xpbmVMZW5ndGgsIEVESVRfVGV4dExpbmUgcmV0dXJuIDAgZm9yIGxpbmVzIGFmdGVyIGxhc3Qgb25lLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglTZW5kIFdNX1NZU0NPTU1BTkQgdG8gb3ZlcmxhcHBlZCBhbmNlc3RvciB3aW5kb3csIAoJbm90IHRoZSByZWNlaXZlciBvZiBXTV9TWVNLRVlET1dOCgpTYXQgT2N0IDIyIDE1OjAxOjAyIDE5OTQgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAYnJhZGZvcmQuYWMudWs+CgogICAgICAgICogW2NvbnRyb2xzL2VkaXQuY10KCUNsaWVudFdpZHRoKCkvQ2xpZW50SGVpZ2h0KCkgbWFjcm9zOiByZXR1cm4gMCBpZiBzaXplIHdvdWxkCgliZSBuZWdhdGl2ZQoJRURJVF9TdHJMZW5ndGgoKTogdGFrZXMgdW5zaWduZWQgY2hhciogaW5zdGVhZCBvZiBjaGFyKgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUxpc3RCb3hXbmRQcm9jKCk6IGluICJjYXNlIFdNX01PVVNFTU9WRSIgLSBzZXQgbHBobCBhdCBzdGFydCBvZgoJY2FzZSBpbnN0ZWFkIG9mIGluIGVhY2ggcGxhY2UgcmVxdWlyZWQgKGl0IHdhcyBvbWl0dGVkIGluCglzb21lIHBsYWNlcyBjYXVzaW5nIHByb2JsZW1zISkKCgkqIFtjb250cm9scy9tZW51LmNdCglNRU5VX0NhbGNJdGVtU2l6ZSgpOiBkb24ndCB0cnkgdG8gZmluZCBzaXplIG9mIGEgdGV4dCBpdGVtCglpZiB0aGUgcG9pbnRlciBpcyBOVUxMCgoJKiBbaW5jbHVkZS9oZWFwLmhdCglhZGRlZCBkZWZpbml0aW9uIG9mIEhFQVBfTG9jYWxJbml0KCkKCgkqIFtpbmNsdWRlL21zZG9zLmhdCglyZW1vdmVkIGJ1Z2d5IHBvaW50ZXIoKSBtYWNybyAodXNlIFNBRkVNQUtFUFRSKCkgZnJvbSBzZWdtZW0uaAoJaW5zdGVhZCkKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUlQQ0NvcHlTZWxlY3RvcigpOiBhZGRlZCBtaXNzaW5nIGZsYWdzIHRvIHNobWdldCgpIGNhbGwKCT8gZG9lcyB0aGlzIGJyZWFrIGxpbnV4IC0gSSBhZGRlZCB0aGVzZSBmbGFncyBpbiBhIHByZXZpb3VzCglwYXRjaCBidXQgdGhleSB3ZXJlIG1pc3NpbmcgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVsZWFzZSA/CgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJd2luX2ZhdWx0KCk6IGFkZGVkIG1pc3NpbmcgZGVmaW5pdGlvbnMgb2YgaSwgZHVtcCBmb3IgdGhvc2UKCW5vdCBydW5uaW5nIE5ldEJTRCBvciBsaW51eAoKCSogW21pc2MvZG9zX2ZzLmNdCglET1NfR2V0Q3VycmVudERpcigpOiBtYWRlIHRlbXBbXSBzdGF0aWMgc28gaXQgY2FuIGJlIHNhZmVseQoJcmV0dXJuZWQKCgkqIFttaXNjZW11L2ludDIxLmMsaW50MjUuYyxpbnQyNi5jXQoJQ2hhbmdlZCBhbGwgaW52b2NhdGlvbnMgb2YgcG9pbnRlcigpIHRvIFNBRkVNQUtFUFRSKCkuIEluY2x1ZGVkCglzZWdtZW0uaCB3aGVyZSBuZWNlc3NhcnkuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUNyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW0oKTogQ2hhbmdlZCBIRUFQX0luaXQoKSBjYWxsIHRvIAoJSEVBUF9Mb2NhbEluaXQoKSwgcmVtb3ZlZCByZWR1bmRhbnQgdmFyaWFibGVzCgpTYXQgT2N0IDIyIDAwOjI5OjQxIE1FVCAxOTk0CQkgIERhZyBBc2hlaW0gKGRhc2hAaWZpLnVpby5ubykKCgkqIFtsb2FkZXIvbGlicmFyeS5jXSBbbG9hZGVyL21haW4uY10gW2xvYWRlci9uZV9pbWFnZS5jXQoJICBbbWlzYy9leGVjLmNdIFttaXNjZW11L2ludDEwLmNdIFttaXNjZW11L2ludDIxLmNdCgkgIFtvYmplY3RzL2JpdGJsdC5jXSBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJUmV3cml0dGVuIG1vcmUgcHJpbnRmJ3MgdG8gdXNlIHRoZSBuZXcgZGVidWdnaW5nIHN5c3RlbSwgYW5kCgltYWRlIHdpbmUgbGVzcyB2ZXJib3NlIHBlciBkZWZhdWx0LiBVc2UgIi1kZWJ1Z21zZyArbW9kdWxlIgoJdG8gZ2V0IChhbG1vc3QpIHRoZSBzYW1lIGJlaGF2aW9yIGFzIGJlZm9yZS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE9jdCAxNiAxMzoyOTowNyAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglJbXBsZW1lbnRlZCBXTV9HRVRETEdDT0RFLCBXTV9TRVRGT05ULCBCTV9TRVRTVFlMRSwgQk1fU0VUQ0hFQ0ssCglCTV9TRVRTVEFURS4KCUltcGxlbWVudGVkIGRlZmF1bHQgYnV0dG9uIHBhaW50aW5nLgoJT3B0aW1pc2VkIHJlZHJhd2luZy4KCUZpeGVkIG93bmVyLWRyYXcgYnV0dG9ucy4KCgkqIFtjb250cm9scy9zdGF0aWMuY10KCUltcGxlbWVudGVkIFdNX1NFVEZPTlQuCglBIGZldyBvcHRpbWlzYXRpb25zIGluIHBhaW50aW5nIGNvZGUuCglCdWcgZml4IGZvciBTU19TSU1QTEUgY29udHJvbHMuCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglQcmVsaW1pbmFyeSBHZXRDb2RlSGFuZGxlKCkuCgoJKiBbaWYxNjMyL2dkaS5zcGVjXQoJQ2hhbmdlZCAncGFzY2FsJyB0byAncGFzY2FsMTYnIGV2ZXJ5d2hlcmUgaXQncyBuZWVkZWQuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglGaXhlZCBhIGZldyBkYXRhIHN0cnVjdHVyZXMuCgoJKiBbbWVtb3J5L2hlYXAuY10KCUJ1ZyBmaXggaW4gSEVBUF9SZUFsbG9jKCkuCgoJKiBbbWlzYy9jdXJzb3IuY10KCUZpeGVkIFNldEN1cnNvcigpLgoKCSogW29iamVjdHMvYml0Ymx0LmNdCglGaXhlZCBQYXRCbHQoKSB3aGVuIHVzaW5nIEJMQUNLTkVTUyBvciBXSElURU5FU1MgY29kZXMuCgoJKiBbb2JqZWN0cy9mb250LmNdCglCZXR0ZXIgZm9udCBtYXBwaW5nIGNvZGUuCglJbXBsZW1lbnRlZCBHZXRUZXh0RmFjZSgpLgoKCSogW29iamVjdHMvcmVnaW9uLmNdCglCdWcgZml4IGluIFJFR0lPTl9NYWtlUGl4bWFwKCkuCglGYXN0ZXIgcmVnaW9uIGNvcHlpbmcuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglJbXBsZW1lbnRlZCBFeHRUZXh0T3V0KCkuCglJbXBsZW1lbnRlZCBEVF9OT0NMSVAgc3R5bGUgZm9yIERyYXdUZXh0KCkuCgoJKiBbd2luZG93cy9kYy5jXQoJRnJlZSB0aGUgYml0bWFwIHdoZW4gZGVsZXRpbmcgYSBtZW1vcnkgREMuCgoJKiBbd2luZG93cy9kY2UuY10KCUFkZGVkIHN1cHBvcnQgZm9yIHdpbmRvd3MgdGhhdCBoYXZlIG5vIGFzc29jaWF0ZWQgWCB3aW5kb3cuCglJbXBsZW1lbnRlZCBEQ1hfQ0xJUFNJQkxJTkdTIGFuZCBEQ1hfUEFSRU5UQ0xJUCBpbiBHZXREQ0V4KCkuCgoJKiBbd2luZG93cy9kZWZkbGcuY10KCUltcGxlbWVudGVkIGRlZmF1bHQgcHVzaCBidXR0b24gaGFuZGxpbmcgYW5kIERNX1NFVERFRklELgoJSW1wbGVtZW50ZWQgV01fTkVYVERMR0NUTC4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJSW1wbGVtZW50ZWQgZGVmYXVsdCBwdXNoIGJ1dHRvbiBoYW5kbGluZy4KCUJlZ2lubmluZyBvZiBhIGtleWJvYXJkIGludGVyZmFjZSBpbiBkaWFsb2dzCgkoZG9lcyBub3QgcmVhbGx5IHdvcmsgeWV0KS4KCUZpeGVkIGRpYWxvZ3MgdGhhdCB1c2UgYSBzcGVjaWFsIGZvbnQuCgoJKiBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy9mb2N1cy5jXQoJQWRkZWQgc3VwcG9ydCBmb3Igbm9uLVggd2luZG93cy4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglSZXdyaXR0ZW4gRmxvb2RGaWxsKCkgYW5kIGltcGxlbWVudGVkIEV4dEZsb29kRmlsbCgpLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJQ2xlYW5lciBoYXJkd2FyZSBtZXNzYWdlcyBhbmQgWCBldmVudHMgaGFuZGxpbmcuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10gW3dpbmRvd3MvcGFpbnRpbmcuY10KCUltcGxlbWVudGVkIFdNX1NFVFJFRFJBVy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJT25seSBjcmVhdGUgYW4gWCB3aW5kb3cgZm9yIHRvcC1sZXZlbCB3aW5kb3dzLCBvciBmb3IgdGhlIGRlc2t0b3AuCglDaGlsZCB3aW5kb3dzIG5vdyB1c2UgdGhlaXIgcGFyZW50J3MgZHJhd2FibGUuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUJlZ2lubmluZyBvZiBzdXBwb3J0IGZvciBub24tWCB3aW5kb3dzIChzdGlsbCBzb21ld2hhdCBicm9rZW4pLgoJSW1wbGVtZW50ZWQgKkRlZmVyV2luZG93UG9zKCkuCgoJKiBbKi9JbWFrZWZpbGVdCglDbGVhbmVkIHVwIHNvbWUgSW1ha2VmaWxlcy4KCU1vdmVkIGRjLmMgZnJvbSB3aW5kb3dzLyB0byBvYmplY3RzLy4KCU1vdmVkIGN1cnNvci5jIGZyb20gbWlzYy8gdG8gd2luZG93cy8uCgpTdW4gT2N0IDE2IDEyOjIxOjUyIDE5OTQgIE1pY2hhZWwgUGF0cmEgPG1pY2t5QG1hcmllLnBoeXNpay50dS1iZXJsaW4uZDQwMC5kZT4KCgkqIFtpbmNsdWRlL2RlYnVnLmhdCgkgIFtpbmNsdWRlL3N0ZGRlYnVnLmhdCgkgIFsqLyouY10KICAgICAgICBSZXdyaXR0ZW4gYWxsIHRoZSBjYWxscyB0byBwcmludGYgZm9yIGRpc3BsYXlpbmcgZGVidWctaW5mb3JtYXRpb24KICAgICAgICAobWVzc2FnZXMgbGlrZSAiTG9hZEltYWdlOiBsb2FkaW5nIFNPTCAoU09MLkVYRSkiIGV0Yy4pIAogICAgICAgIEFkZGVkIG9wdGlvbiAiLWRlYnVnbXNnIiB0byBXaW5lLiBFeGFtcGxlOiAiLWRlYnVnbXNnICthbGwiIHdpbGwgdHVybgogICAgICAgIGFsbCB0aGVzZSBtZXNzYWdlcyBvbiwgIi1kZWJ1Z21zZyAtZGxsIiB3aWxsIHR1cm4gYWxsIG1lc3NhZ2VzIAoJY29uY2VybmluZyBETExzIG9mZi4KCgkqIFtjb250cm9scy9jb21iby5jXQoJQWRkZWQgc29tZSBoYW5kbGluZyBmb3IgY29tYm8gY29udHJvbHMgd2l0aCBvd25lcmRyYXctc3R5bGVzCiAgICAgICAgKGp1c3QgY3JlYXRpbmcgYW5kIHBhc3NpbmcgdGhlIG5lY2Vzc2FyeSBtZXNzYWdlcyB0byB0aGUgCgljb3JyZXNwb25kaW5nIGxpc3Rib3ggY29udHJvbDsgdGhlIGVkaXQtY29udHJvbCBuZWVkcyB0byBiZQoJcmVwbGFjZWQgd2l0aCBzb21ldGhpbmcgZWxzZSkuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJICBbd2luZG93cy9kaWFsb2cuY10KCUFkZGVkIHN1cHBvcnQgZm9yIHVzZSBvZiBnbG9iYWwgaGVhcCBtZW1vcnkgaW4gZGlhbG9ncyB3aXRoIAoJZWRpdCBjb250cm9scy4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglBZGRlZCBzdXBwb3J0IGZvciBpdGVtIGRhdGEuCglMaXN0Qm94SW5zZXJ0U3RyaW5nKCk6IEZpeGVkIGJ1ZyBmb3IgZWxlbWVudHMgd2hpY2ggYXJlIG5vdCBpbnNlcnRlZAoJYWZ0ZXIgdGhlIGN1cnJlbnRseSBsYXN0IGVsZW1lbnQuCgkKCSogW21pc2MvZG9zX2ZzLmNdCgkgIFttaXNjZW11L2ludDIxLmNdCglET1NfVmFsaWREaXJlY3RvcnkoKTogQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBzdHJpbmcgaXMgaW4gZmFjdCB0aGUKCXZhbGlkIG5hbWUgb2YgYSBkaXJlY3RvcnkuCgpTYXQgT2N0IDE1IDE3OjM1OjAwIFBEVCAxOTk0CQk8bWFydGluQGNzLmNzdWZyZXNuby5lZHU+CgoJKiBbSW1ha2VmaWxlXQoJZ2VuZXJhdGUgd2luZS5zeW0gYWZ0ZXIgY3JlYXRpbmcgd2luZQoKCSogW2RlYnVnZ2VyL2RiZy55XQoJbG9hZCAid2luZS5zeW0iIHdoZW4gZW50ZXJpbmcgZGVidWdnZXIKCgkqIFtkZWJ1Z2dlci9pbmZvLmNdCglzeW1ib2xpYyBiYWNrdHJhY2UgZm9yIDMyLWJpdCBzdGFjay4gQnJlYWtzIDE2LWJpdCBidC4KClN1biBTZXAgIDI1IDEyOjAwOjAwIFBEVCAxOTk0ICAgPG1hcnRpbkBvc2lyaXMuY3MuY3N1ZnJlc25vLmVkdT4KCgkqIFtyYy9yYy55XSBbcmMvcmMuaF0gW3JjL3JjLmxdIFtyYy93aW5lcmMuY10KCUZpbGVzIGNyZWF0ZWQKClN1biBTZXAgMTggMTE6MDQ6NDUgTUVUIERTVCAxOTk0ICAgICAgICAgIERhZyBBc2hlaW0gKGRhc2hAaWZpLnVpby5ubykKCgkqIFttaXNjL3NweS5jXQoJRXhjbHVkZSBhbmQgSW5jbHVkZSBubyBsb25nZXIgcmVxdWlyZXMgYSB0ZXJtaW5hdGluZyAnOycgdG8KCXJlZ2lzdGVyIHRoZSBsYXN0IGNvbXBvbmVudC4KClRodSBTZXAgMTUgMjM6MTA6MDkgTUVUIERTVCAxOTk0ICAgICAgICAgIERhZyBBc2hlaW0gKGRhc2hAaWZpLnVpby5ubykKCgkqIFtDb25maWd1cmVdCglSZXdyb3RlIG11Y2ggb2YgaXQuICBBZGRlZCBjYXBhYmlsaXR5IHRvIGdlbmVyYXRlIGEgd2luZS5pbmkKCWZpbGUuICBDb21tZW50ZWQgb3V0IHRoZSBwcm9jZXNzb3IgZW11bGF0b3Igb3B0aW9ucyB1bnRpbCB0aGF0CgliZWNvbWVzIGludGVyZXN0aW5nLiAgR2l2ZXMgYSB3YXJuaW5nIGlmIGl0IHNlZXMgYW55ICoucmVqCglmaWxlcy4gIEkgaG9wZSBJIGhhdmVuJ3QgYXNzdW1lZCB0byBtdWNoIGFib3V0IHRoZSBzaGVsbC9PUyBzbwoJdGhhdCBpdCBicmVha3MgdW5kZXIgKkJTRC4KCgkqIFttaXNjL2Rvc19mcy5jXQoJUmVtb3ZlZC9jaGFuZ2VkIGNhbGxzIHRvIFRvVW5peCgpICh3aGljaCBjYWxscyB0b2xvd2VyKCkpIHNvCgl0aGF0IHRoZSBwYXJ0IG9mIHRoZSBwYXRobmFtZSB3aGljaCBjb3JyZXNwb25kIHdpdGggdGhlIGRyaXZlCglsZXR0ZXIgb24gRE9TIG5vIGxvbmdlciB3aWxsIGJlIG1hcHBlZCB0byBsb3dlcmNhc2UuICBUaGlzCgltZWFucyB0aGF0IGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBoYXZlIHVwcGVyY2FzZSBsZXR0ZXJzIGluCgl0aGUgW2RyaXZlc10gc2VjdGlvbiBvZiB3aW5lLmluaS4KCgkqIFtMSUNFTlNFXQoJQ29zbWV0aWMgY2hhbmdlcyBzbyB0aGF0IGl0IGRpc3BsYXlzIGJldHRlciBpbiB0aGUgd2luZG93IHlvdQoJZ2V0IGZyb20gcHJlc3NpbmcgIkNyZWRpdF9MaWNlbnNlIiBpbiB0aGUgIkFib3V0IFdJTkUiIHdpbmRvdy4KClN1biBBdWcgMjEgMjE6MTI6MDYgTUVUIERTVCAxOTk0CTxlcmlrQHhzNGFsbC5ubD4KCgkqIFtjb250cm9scy9tZW51LmNdCglMb2FkTWVudSgpIG1vdmVkIHRvIGxvYWRlci9yZXNvdXJjZS5jLgoKCSogW21pc2MvbWFpbi5jXQoJQWRkZWQgc3R1YiBmb3IgRmlsZUNEUigpLgoKCSogW2luY2x1ZGUvcGVleGUuaF0KCUFkZGVkLCBmcm9tIEVyaWMncyBwZS10ZXN0LgoKCSogW2luY2x1ZGUvcmVzb3VyY2UuaF0KCUFkZGVkLgoKCSogW2xvYWRlci9yZXNvdXJjZXMuY10KCVJlbW92ZWQgZHVwbGljYXRlZCBjb2RlIGluICpSZXNvdXJjZSgpIGZ1bmN0aW9ucy4KCU1vdmVkIE5FLXByb2dyYW0gc3BlY2lmaWMgZnVuY3Rpb25zIGludG8gbmVfaW1hZ2UuYy4KCU1vdmVkIE5FLWZpbGVmb3JtYXQgZnVuY3Rpb25zIHRvIG5lX3Jlc291cmNlLmMuCgoJKiBbcGVfaW1hZ2UuY10gW3BlX3Jlc291cmNlLmNdCglBZGRlZC4gTm90aGluZyBpbXBsZW1lbnRlZCB0byBydW4gUEUtZXhlY3V0YWJsZXMsIHJlc291cmNlCglsb2FkaW5nIG9ubHkuCgoJKiBbbWlzYy9maWxlLmNdCglDaGFuZ2VkIE9wZW5GaWxlKCkgdG8gdXNlIG1hY3Jvcy4KCgkqIFttaXNjL3NoZWxsLmNdCglBZGRlZCBOVUxMLXB0ciBjaGVja3MgdG8gU2hlbGxBYm91dCgpLgoKCSogW21pc2NlbXUvaW50MjEuY10KCUZpeGVkIGEgZmV3IHR5cG9zLgoKCSogW21pc2NlbXUva2VybmVsLmNdCglBZGRlZCBfREkgPSBfRFMsIHRvIHB1dCB0aGUgY2FsbGVyJ3MgaW5zdGFuY2UgaW4gREkuIERvZXNuJ3QKCXdvcmsgcHJvcGVybHkgaWYgY2FsbGVyIGNoYW5nZWQgRFMgOi0oCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRodSBBdWcgMjUgMTU6MjQ6MzYgRURUIDE5OTQgICAgICAgICAgICA8anJpY2hhcmRAY3MudW1sLmVkdT4KCiAgICAgICAgKiBbaW5jbHVkZS93aW4uaF0KICAgICAgICBSZW1vdmVkIHNlcGVyYXRlIFggd2luZG93IGZvciBpY29uLCBhZGRlZCBpY29uIHdpZHRoLGhlaWdodC4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUNvbW1lbnRlZCBvdXQgdGhlIG9sZCBTV194eHggZW11bSBhbmQgYWRkZWQgZGVmaW5lcyBzaW5jZQoJdGhleSBhcmVuJ3QgZW51bWVyYXRlZC4KCgkqIFt3aW5kb3dzL2RjZS5jXQogICAgICAgIFJlbW92ZWQgc29tZSBvbGRlciBJc0ljb25pYyBjaGVja3MgZnJvbSBHZXREQ0V4KCksIGZ1bmN0aW9uYWxpdHkKICAgICAgICBpcyBub3cgaW4gbm9uY2xpZW50IGFuZCBnZW5lcmljIHdpbmUgd2luZG93IGhhbmRsaW5nIGNvZGUuCiAgICAgICAgTG90cyBvZiB0aGFua3MgdG8gQWxleGFuZHJlIEp1bGxpYXJkIGFsbCB0aGUgaGludHMgYW5kCiAgICAgICAgaGVscC4uLgoKICAgICAgICAqIFt3aW5kb3dzL2RlZnduZC5jXQogICAgICAgIFJlbW92ZWQgY2FsbCB0byBOQ19IYW5kbGVOQ1BhaW50SWNvbigpIHVuZGVyIGNhc2UgV01fUEFJTlRJQ09OLAogICAgICAgIFdNX1BBSU5USUNPTiBub3cgY2FsbHMgTkNfSGFuZGxlTkNQYWludC4gIAoKICAgICAgICAqIFt3aW5kb3dzL2V2ZW50LmNdCiAgICAgICAgUmVtb3ZlZCBJc0ljb25pYyBjaGVja3MuCgogICAgICAgICogW3dpbmRvd3MvaWNvbi5jXQogICAgICAgIFJlbW92ZWQgZXZlcnl0aGluZyBpbiB0aGlzIGZpbGUgZm9yIG5vdy4uLiBjb3VsZCBiZSB1c2VkIGxhdGVyLgogICAgICAgIEljb24gZnVuY3Rpb25hbGl0eSBpcyBub3cgaGFuZGxlZCBieSB0aGUgZ2VuZXJpYyB3aW5lIHdpbmRvd3MKICAgICAgICBoYW5kbGluZyBmdW5jdGlvbnMuCiAgICAgICAgCiAgICAgICAgKiBbd2luZG93cy9tZGkuY10KICAgICAgICBBZGRlZCBhIFNob3dXaW5kb3cgaW4gTURJUmVzdG9yZUNoaWxkKCkuICBNREkgY2hpbGQgd2luZG93cyBub3cKICAgICAgICBzaG93IHVwIHdoZW4gZGVpY29uaWZpZWQuICBSZW1vdmVkIElzSWNvbmljIGNoZWNrcy4KCiAgICAgICAgKiBbd2luZG93cy9tZXNzYWdlLmNdCiAgICAgICAgUmVtb3ZlZCBvbGQgaWNvbiByb3V0aW5lcyBmcm9tIGhhcmR3YXJlX2V2ZW50KCkuCgogICAgICAgICogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCiAgICAgICAgQ2hhbmdlZCBOQ19IYW5kbGVOQ0NhbGNTaXplKCkgc28gaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHNpemUKICAgICAgICBvZiBhbiBpY29uIHdpbmRvdy4gIE1hZGUgTkNfSW50ZXJuYWxOQ0hpdFRlc3QoKSBvbiBhbiBJY29uaWMKICAgICAgICB3aW5kb3cgYWx3YXlzIHJldHVybiBIVENBUFRJT04uICBNYWRlIE5DX0hhbmRsZU5DTEJ1dHRvbkRibENsaygpCiAgICAgICAgb24gYW4gSWNvbmljIHdpbmRvdyBhbHdheXMgc2VuZCBhIFNDX1JFU1RPUkUgbWVzc2FnZS4KCiAgICAgICAgKiBbd2luZG93cy9wYWludGluZy5jXQogICAgICAgIENoYW5nZWQgUmVkcmF3V2luZG93KCkgc28gaXQgZG9lc24ndCByZWRyYXcgYW4gaWNvbmljIHdpbmRvdwogICAgICAgIHVubGVzcyBpdCBoYXMgdG8gKG5vIGljb24gZm9yIHRoaXMgY2xhc3MpLgogICAgICAgIAogICAgICAgICogW3dpbmRvd3Mvd2luLmNdCiAgICAgICAgUmVtb3ZlZCBjcmVhdGlvbiBvZiBzZXBlcmF0ZSBpY29uIHdpbmRvdyBmcm9tIENyZWF0ZVdpbmRvd0V4KCkuCiAgICAgICAgCiAgICAgICAgKiBbd2luZG93cy93aW5wb3MuY10KICAgICAgICBBZGRlZCBzYXZpbmcgYW5kIHJlc3RvcmluZyBvZiB3aW5kb3cgcmVjdGFuZ2xlIGR1cmluZwogICAgICAgIGljb25pZmljYXRpb24vZGVpY29uaWZpY2F0aW9uIHRvIFNob3dXaW5kb3coKS4gIEFkZGVkCglmdW5jdGlvbnMgdG8gcmVjdXJzaXZlbHkgaGlkZSBhbmQgc2hvdyBjaGlsZHJlbi4uLiBjYWxsZWQKCWJ5IFNob3dXaW5kb3cgZHVyaW5nIGljb25pZmljYXRpb24vZGVpY29uaWZpY2F0aW9uLgoKU2F0LCAyNyBBdWcgMTk5NCAxODo0NzozNCArMDEwMCAoTUVUIERTVCkgIG1pY2t5QG1hcmllLnBoeXNpay50dS1iZXJsaW4uZGUgKE1pY2hhZWwgUGF0cmEpCgogICAgICAgICogW3dpbmRvd3MvbWVzc2FnZS5jXQogICAgICAgIFdhaXRNZXNzYWdlKCk6IEZpeGVkIGhhbmRsaW5nIG9mIHdtX3RpbWVyLW1lc3NhZ2VzCgogICAgICAgICogW21pc2NlbXUvaW50MjEuY10KICAgICAgICBGaW5kTmV4dEZDQigpOiBSZXdyaXR0ZW4gdG8gc3VwcG9ydCBvdGhlciBmdW5jdGlvbnMgdGhhbiBqdXN0CiAgICAgICAgcmV0dXJuaW5nIHRoZSB2b2x1bWUgbGFiZWwKCgkqIFttaXNjL2ZpbGUuY10KCU9wZW5GaWxlKCk6IEZpeCBpbiBoYW5kbGluZyBvZiBPRl9DUkVBVEUKCldlZCBBdWcgMjQgMTk6NDA6NDIgUERUIDE5OTQgIEFuZHJldyBMYWdvZHppbnNraSAgKGFuZHJld0BuZXRjb20uY29tKQoKCSogW2lmMTYzMi91c2VyLnNwZWNdCglBZGRlZCBTZXRQYXJlbnQuCgoJKiBbd2luZG93cy93aW4uY10KCUFkZGVkIFNldFBhcmVudC4KCkZyaSBBdWcgMTkgMTY6Mzc6MDAgMTk5NCAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBicmFkZm9yZC5hYy51az4KCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCU1hbnkgY2hhbmdlcyB0aHJvdWdob3V0IGZpbGUgdG8gY29ycmVjdCBoYW5kbGluZyBvZiBzaGFyZWQgbWVtb3J5CglmdW5jdGlvbiByZXR1cm4gY29kZXMuIEZyZWVCU0QgYW5kIFN1bk9TIHNobSBmdW5jdGlvbnMgcmV0dXJuCgktMSBub3QgMCBvbiBlcnJvci4gSWYgTGludXggaXMgZGlmZmVyZW50LCB0aGVzZSBjaGFuZ2VzCgl3aWxsIGhhdmUgdG8gYmUgYmFja2VkIG91dC4KCUNsZWFudXBTZWxlY3RvcnMoKTogdGhpcyBpcyBhIG5ldyAoaW50ZXJuYWwpIGNhbGwgdG8gZnJlZQoJdXAgYWxsIHNlbGVjdG9ycyAoYW5kIHNobSBoYW5kbGVzL21lbW9yeSkgZm9yIHVzZSBvbiBleGl0LgoKCSogW2luY2x1ZGUvc2VnbWVtLmhdCglDaGFuZ2UgY29tbWVudCB0byByZWZsZWN0IG5ldyB1c2Ugb2Ygc2htX2tleQoKCSogW21pc2MvbWFpbi5jXQoJY2FsbGVkX2F0X2V4aXQoKTogYWRkIGNhbGwgdG8gQ2xlYW51cFNlbGVjdG9ycygpCgpNb24gQXVnIDIyIDE4OjE5OjI1IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtjb250cm9scy9idXR0b24uY10KCVVzZSBPQk1fQ0hFQ0tCT1hFUyB0byBkcmF3IGNoZWNrIGJveGVzIHdpdGggY29ycmVjdCBjb2xvcnMuCglGaXhlZCBidWcgd2l0aCBXTV9TRVRURVhUIGhhbmRsaW5nLgoJQSBmZXcgZHJhd2luZyBvcHRpbWlzYXRpb25zLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUltcGxlbWVudGVkIGNvcnJlY3QgXHQgYW5kIFxhIGhhbmRsaW5nIGluIG1lbnUgaXRlbXMuCglJbXBsZW1lbnRlZCBoZWxwIGl0ZW1zIChmbHVzaCByaWdodCkgb24gbWVudSBiYXIuCglBZGRlZCBXTV9FTlRFUk1FTlVMT09QIGFuZCBXTV9FWElUTUVOVUxPT1AgbWVzc2FnZXMuCgoJKiBbY29udHJvbHMvc3RhdGljLmNdCglGaXhlZCBTU19JQ09OIGNvbnRyb2xzIGFuZCBpbXBsZW1lbnRlZCBTVE1fU0VUSUNPTiBtZXNzYWdlCgloYW5kbGluZy4KCgkqIFtjb250cm9scy93aWRnZXQuY10KCVNldCBjdXJzb3IgdG8gSURDX0FSUk9XIGZvciBidWlsdC1pbiBjbGFzc2VzLgoKCSogW2luY2x1ZGUvb3B0aW9ucy5oXSBbbWlzYy9tYWluLmNdCglCYWNraW5nIHN0b3JlIGlzIG5vdyBvZmYgYnkgZGVmYXVsdC4KCgkqIFtvYmplY3RzL3JlZ2lvbi5jXQoJVXNlIFggcmVnaW9ucyBmb3IgcmVjdGFuZ2xlIGFuZCBwb2x5Z29uIHJlZ2lvbnM6ICptYWpvciogc3BlZWQKCWltcHJvdmVtZW50LgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglGaXhlZCB0aGUgZml4IGZvciBpbnRlZ2VyIGlkcyBpbiBjb250cm9scy4gU1NfSUNPTiBjb250cm9scyBpbgoJZGlhbG9ncyBzaG91bGQgd29yayBub3cuCglJbXBsZW1lbnRlZCBEU19BQlNBTElHTiBzdHlsZS4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglJbXBsZW1lbnRlZCBJbnZlcnRSZ24oKS4KCU5ldyBpbnRlcm5hbCBmdW5jdGlvbiBHUkFQSF9EcmF3Qml0bWFwKCkgdG8gZHJhdyBiaXRtYXBzIGZhc3RlcgoJdGhhbiB3aXRoIENyZWF0ZUNvbXBhdGlibGVEQygpICsgQml0Qmx0KCkuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglEZXRlcm1pbmluZyB0aGUgd2luZG93IGZvciBhIG1vdXNlIG1lc3NhZ2UgaXMgbm93IGRvbmUgYXQKCUdldE1lc3NhZ2UoKSB0aW1lLgoJTW9kaWZpZWQgUGVla01lc3NhZ2UoKSBoYW5kbGluZyB0byBhdm9pZCBuZWVkbGVzc2x5IGZsdXNoaW5nIHRoZQoJb3V0cHV0IHF1ZXVlLgoKCSogW3dpbmRvd3MvdGltZXIuY10KCUNoZWNrIGZvciByZXN0YXJ0IG9mIGEgdGltZXIgKFNldFRpbWVyIGNhbGwgd2l0aCB0aGUgc2FtZSBod25kIGFuZAoJaWQgdGhhbiBhbiBleGlzdGluZyB0aW1lcikuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBBdWcgIDkgMjM6NTg6MjkgTUVUIERTVCAxOTk0CTxlcmlrQGhhY2t0aWMubmw+CgoJKiBbbWlzYy9maWxlLmNdCglPcGVuRmlsZSgpOiBDb21wbGV0bHkgcmV3cml0dGVuLgoKCSogW21pc2NlbXUvaW50MjEuY10KCUNyZWF0ZUZpbGUoKTogRml4ZWQgd3JvbmcgbW9kZSBpbiBjYWxsIHRvIG9wZW4uCglPcGVuRXhpc3RpbmdGaWxlKCk6IEltcGxlbWVudGVkIGZpbGUgc2hhcmluZy4KCUZpbmROZXh0KCk6IEZpeGVkLgoJQ3JlYXRlTmV3RmlsZSgpOiBGaXhlZCB3cm9uZyBtb2RlIGluIGNhbGwgdG8gb3Blbi4KCWZMb2NrKCk6IEFkZGVkIHRvIGhhbmRsZSByZWNvcmQgbG9ja2luZy4KCUdldEZpbGVBdHRyaWJ1dGUoKTogQWRkZWQuCglBcyBhIHJlc3VsdCwgQUggPSAweDVjLCAweDA5LCBhbmQgMHgwYiB3ZXJlIGNoYW5nZWQuCgoJKiBbbWlzY2VtdS9pbnQyZi5jXQoJQUggPSAweDEwOiBTSEFSRSBpbnN0YWxsYXRpb24gY2hlY2sKIAoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglBY2Nlc3NSZXNvdXJjZSgpOiBGaXhlZC4gQSBuZXcgZmlsZSBkZXNjcmlwdG9yIHdpbGwgYmUgcmV0dXJuZWQgYnkKCWV2ZXJ5IGNhbGwgdG8gQWNjZXNzUmVzb3VyY2UoKS4KCgkqIFt3aW5kb3dzL3V0aWxpdHkuY10KCXd2c3ByaW50ZigpOiBGaXhlZC4KCgkqIFtjb250cm9scy9tZW51LmNdCglGaW5kTWVudUl0ZW0oKTogRml4ZWQgKGhhbmRsaW5nIGZvciBuUG9zID09IC0xIGFkZGVkKS4JCgoJKiBbd2luZG93cy93aW4uY10KCUNyZWF0ZVdpbmRvd0V4KCk6IEFkZGVkIGNhbGwgdG8gV0lOUE9TX0dldE1pbk1heEluZm8uCgoJKiBbQ29uZmlndXJlXQoJQWRkZWQgdHdvIG9wdGlvbnMgZm9yIGEgcHJvY2Vzc29yIGVtdWxhdG9yIHRoYXQgbWlnaHQgYmUKCXBsdWdnZWQgaW4gbGF0ZXIuLgoKCSogW2xvYWRlci90YXNrLmNdIFtpbmNsdWRlL3Rvb2xoZWxwLmhdIFtpZjE2MzIvdG9vbGhlbHAuc3BlY10KCUNyZWF0ZU5ld1Rhc2soKSBzdG9yZXMgcmVhbCBtb2R1bGVuYW1lIGluc3RlYWQgb2YgJ1RBU0t4eHh4Jy4KCUFkZGVkIFRhc2tGaXJzdCgpLCBUYXNrTmV4dCgpLCBUYXNrRmluZEhhbmRsZSgpLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUFkZGVkIHN0dWIgZm9yIE1lbU1hbkluZm8oKS4KCgkqIFtvYmplY3RzL3RleHQuY10KCUFkZGVkIHN0dWIgZm9yIEdldFRhYmJlZFRleHRFeHQoKS4KCgkqIFttaXNjZW11LypdCglDaGFuZ2VkIGFsbCByZWZlcmVuY2VzIHRvIHJlZ2lzdGVycy4gUGxlYXNlIGRvbid0IGFjY2VzcwogCXRoZSBjb250ZXh0IHN0cnVjdHVyZS4KCWZpeCBmb3IgR2V0U3lzdGVtVGltZSgpIGJ5IDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4gYWRkZWQuCgoJKiBbbWlzYy9sc3RyLmNdCglGaXhlZCBidWcgaW4gQW5zaVVwcGVyKCkgJiBBbnNpTG93ZXIoKS4KCgkqIFttaXNjL3dpbnNvY2tldC5jXQoJYnVnZml4IGluIGdldHNvY2tvcHQoKS9zZXRzb2Nrb3B0KCk6IHdpbnNvY2sgdXNlcyBkaWZmZXJlbnQgdmFsdWVzCgl0aGFuIHVuaXguCgoJKiBbb2JqZWN0cy9kaWIuY10KCUFkZGVkIERJQl9TZXRJbWFnZUJpdHNfUkxFWzQ4XSB0byBzdXBwb3J0IGNvbXByZXNzZWQgYml0bWFwcy4KCk1vbiBBdWcgIDggMjE6MTI6MzMgMTk5NCAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUFkZGVkIHN1cHBvcnQgZm9yIFdNX0NPUFksIFdNX0NVVCBhbmQgV01fUEFTVEUgbWVzc2FnZXMuCgoJKiBbd2luZG93cy9kaWFsb2cuY10gW3dpbmRvd3MvZGVmZGxnLmNdIFtpbmNsdWRlL2RpYWxvZy5oXQoJTW9kaWZpZWQgZGlhbG9nIGNvZGUgdG8gY3JlYXRlIG5ldyBoZWFwIGZvciBlZGl0IGNvbnRyb2xzCgl1bmxlc3MgRFNfTE9DQUxFRElUIHN0eWxlIGlzIHNldC4KClRodSBBdWcgIDQgMTg6NTA6NTYgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXSBbY29udHJvbHMvZWRpdC5jXSBbY29udHJvbHMvc3RhdGljLmNdCglSZW1vdmVkIHVubmVlZGVkIEdsb2JhbFVubG9jaygpIGNhbGxzLgoKCSogW2NvbnRyb2xzL21lbnUuY10gW2luY2x1ZGUvbWVudS5oXQoJTG90cyBvZiBjaGFuZ2VzLCBmaXhlZCBhIGxvdCBvZiBvbGQgYnVncyBhbmQgaW50cm9kdWNlZCBhIGxvdCBvZgoJbmV3IG9uZXMgOi0pCgktIENoYW5nZWQgbWVzc2FnZSBsb29wIHRvIHVzZSBNU0dfR2V0SW50ZXJuYWxNZXNzYWdlKCkuCgktIEZpeGVkIGEgYnVnIHRoYXQgY2F1c2VkIHRoZSBtYWluIHdpbmRvdyB0byBsb3NlIGFjdGl2YXRpb24gd2hlbgoJICBkaXNwbGF5aW5nIGEgbWVudS4KCS0gQ29ycmVjdGx5IHNlbmQgaW5pdGlhbGlzYXRpb24gbWVzc2FnZXMgKFdNX0lOSVRNRU5VUE9QVVApLgoJLSBJbXBsZW1lbnRlZCBFbmRNZW51KCkgYW5kIExvb2t1cE1lbnVIYW5kbGUoKS4KCS0gQ2hhbmdlZCBpbnRlcm5hbCBzdHJ1Y3R1cmVzIHRvIGJlIGFzIGNvbXBhdGlibGUgYXMgcG9zc2libGUgd2l0aAoJICBNUy1XaW5kb3dzLgoJLSBBbGxvY2F0ZWQgZXZlcnl0aGluZyBvbiB0aGUgVVNFUiBoZWFwIGluc3RlYWQgb2YgdGhlIGdsb2JhbCBoZWFwLgoJLSBQcmVmaXhlZCBhbGwgaW50ZXJuYWwgZnVuY3Rpb24gbmFtZXMgd2l0aCBNRU5VXyBhbmQgZGVjbGFyZWQKCSAgdGhlbSBzdGF0aWMuCgktIE1vdmVkICJBYm91dCBXaW5lLi4uIiBoYW5kbGluZyB0byBOQ19IYW5kbGVTeXNDb21tYW5kKCkuCgktIE11bHRpLWxpbmUgbWVudXMgc2hvdWxkIG5vdyB3b3JrIGNvcnJlY3RseS4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10gW29iamVjdHMvYml0bWFwLmNdCglBZGRlZCB0aGUgcG9zc2liaWxpdHkgdG8gY3JlYXRlIE9FTSBiaXRtYXBzIGRpcmVjdGx5IGFzIFggYml0bWFwcy4KCgkqIFtvYmplY3RzL2RjdmFsdWVzLmNdIFt3aW5kb3dzL2RjLmNdCglGaXhlZCBHZXREQ09yZygpIHRvIHJldHVybiBzY3JlZW4gY29vcmRpbmF0ZXMuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglGaXhlZCBkb3VibGUtY2xpY2sgY2hlY2tzIHdoZW4gdGhlIG1lc3NhZ2UgaXMgbm90IHJlbW92ZWQgZnJvbSB0aGUKCXF1ZXVlLgoJRml4ZWQgTVNHX0dldEludGVybmFsTWVzc2FnZSgpIHRvIHNlbmQgV01fRU5URVJJRExFIG1lc3NhZ2VzLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglCdWcgZml4IGluIHN5c3RlbSBtZW51IGhpdC10ZXN0IGNhbGN1bGF0aW9uLgoJQSBmZXcgY2hhbmdlcyBmb3IgbmV3IG1lbnUgZnVuY3Rpb25zLgoKVGh1IEF1ZyAxMSAxNzo1MTowMiAxOTk0ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQGJyYWRmb3JkLmFjLnVrPgoKICAgICAgICAqIFtjb250cm9scy9lZGl0LmNdCiAgICAgICAgQnVnIGZpeCBpbiBFZGl0X05DQ3JlYXRlTWVzc2FnZQogICAgICAgIGVzLT50ZXh0bGVuIHdhcyBiZWluZyB1c2VkIGJlZm9yZSBiZWluZyBzZXQKCiAgICAgICAgKiBbY29udHJvbHMvbWVudS5jXQogICAgICAgIEJ1ZyBmaXggaW4gTUVOVV9EcmF3TWVudUl0ZW0KICAgICAgICBkb24ndCB0cnkgdG8gd3JpdGUgdGV4dCBpZiBOVUxMIHBvaW50ZXIgcGFzc2VkCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRodSBBdWcgIDQgMDc6MTg6MDIgMTk5NCAgTWljaGFlbCBQYXRyYSAgPG1pY2t5QG1hcmllLnBoeXNpay50dS1iZXJsaW4uZGU+CgogICAgICAgICogW3dpbmRvd3MvbWVzc2FnZS5jXQoJSW1wbGVtZW50ZWQgV2FpdE1lc3NhZ2UoKSAoVVNFUi4xMTIpLgoKICAgICAgICAqIFtpZjE2MzIvdXNlci5zcGVjXQoJQWRkZWQgV2FpdE1lc3NhZ2UuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCVdNX0VSQVNFQktHTkQ6IEFkZGVkIHN1cHBvcnQgZm9yIGhickJhY2tncm91bmQ9Q09MT1JfeHh4LgoKICAgCSogW21pc2NlbXUvaW50ezEzLDIxLDJhfS5jXQogICAgICAgICogW21pc2NlbXUvSW1ha2VmaWxlXQoJKiBbc2lnbmFsL2xvYWRlci5jXQoJQWRkZWQgYSBmZXcgYmFzaWMgZGlzayBpbmZvcm1hdGlvbiBhbmQgZGlhZ25vc3RpYyBmdW5jdGlvbnMgdG8KCXByZXZlbnQgcHJvZ3JhbXMgdXNpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIGNyYXNoaW5nLiBBbGwgZHJpdmVzCglhcmUgY2xhaW1lZCB0byBiZSByZW1vdGUgb25lcywgc28gZGlyZWN0IEkvTyBpc24ndCBhbGxvd2VkLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUVESVRfV3JpdGVUZXh0KCk6IEFkZGVkIGNvZGUgdG8gY29ycmVjdGx5IGVyYXNlIHRoZSByZW1haW5pbmcgc3BhY2UKCW9mIHRoZSBlZGl0LWNvbnRyb2wgaWYgdGhlIHNpemUgb2YgdGhlIGNvbnRyb2wgaGFzIGNoYW5nZWQgc2luY2VkIGl0J3MKCWNyZWF0aW9uLgoKVHVlIEp1bCAyNiAyMjowNTo1NCBNRVQgRFNUIDE5OTQgRXJpayBCb3MgPGVyaWtAaGFja3RpYy5ubD4KCgkqIFtpZjE2MzIvbW91c2Uuc3BlY10KCUFkZGVkIG1vdXNlLmRsbCBlbnRyeSwgbm8gZnVuY3Rpb25zLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJQnVnIGZpeCBpbiBBY2Nlc3NSZXNvdXJjZSgpLiAKCgkqIFttaXNjL2tleWJvYXJkLmNdLCBhZGRlZCBbaW5jbHVkZS9rZXlib2FyZC5oXQoJQ2hhbmdlZCBmdW5jdGlvbnMgdG8gcmV0dXJuIG1vcmUgdXNlZnVsIHZhbHVlcy4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJSGFja2VkIERJQUxPR19HZXRDb250cm9sKCkgdG8gc3VwcG9ydCByZXNvdXJjZXMgd2hpY2gKCWhhdmUgMHhmZjAwIC0gMHhmZmZmIGFzIGlkLiAqKiBOZWVkcyB0byBiZSBkb25lIHByb3Blcmx5IGJ5Cglzb21lb25lIHdobyBrbm93cyB0aGUgTkUgZmlsZWZvcm1hdCAqKgoKSnVsIDI5LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbd2luZG93cy9ldmVudC5jXQoJQWRkIG5ldyBzdHViIGZvciBFbmFibGVIR2FyZHdhcmVJbnB1dCgpIGZ1bmN0aW9uLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJQWRkIGNvZGluZyBmb3IgSFdORF9CUk9BRENBU1QgaW4gUG9zdE1lc3NhZ2UoKS4KCgkqIFttaXNjL2ZpbGUuY10KCUFkZCBjb2RpbmcgZm9yIE9wZW5GaWxlKCkgYWxzbyBzZWFyY2ggaW4gV2luZG93UGF0aHMuCgoJKiBbbWlzYy9tbXN5c3RlbS5jXQoJKiBbbWlzYy9hdWRpby5jXQoJKiBbbWlzYy9tbWF1eC5jXQoJKiBbbWlzYy9tY2ljZGEuY10KCUNoYW5nZSAjaW5jbHVkZSAibGludXgvc291bmRjYXJkLmgiIGJ5ICNpbmNsdWRlICJzeXMvc291bmRjYXJkLmgiCglBZGQgY29kaW5nIGluIE1NSU8gZnVuY3Rpb25zLiBOb3csIG1taW9EZXNjZW5kKCkgY2FuIGZpbmQgV0FWIGNodW5rcy4KCVNuZFBsYXlTb3VuZCAmIE1DSV9FTEVNRU5UIG5vdyB1c2UgTU1JTyBhbmQgYWRqdXN0IHRvIHByb3BlciBmb3JtYXRzLgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1vbiBKdWwgMTggMjM6NTU6MTMgTUVUIERTVCAxOTk0CgoJKiBbaWYxNjMyL2NhbGwuU10KCUNhbGxUbzE2KCk6IGFkZGVkIGBtb3YgJWVheCwlZWR4JyBqdXN0IGJlZm9yZSBsY2FsbCwKCXRvIG1ha2Ugc3VyZSB0aGF0IERYIGNvbnRhaW4gdGhlIERMTCdzIGhpbnN0YW5jZSB3aGVuCglpbml0aWFsaXNlZC4KCglDYWxsVG8zMl8xNigpIGFkZGVkLCBlcXVhbCB0byBDYWxsVG8zMigpIGV4Y2VwdCBmb3IKCW9uZSB0aGluZzogaXQgc2F2ZXMgRFggYW5kIAoKCSogW3Rvb2xzL2J1aWxkLmNdCglBZGRlZCBzb21lIGNvZGUgdG8gc3VwcG9ydCAxNiBhbmQgMzIgYml0IHJldHVybiB2YWx1ZXMuCgoJKiBbMTYzMi97a2VybmVsLHVzZXJ9LnNwZWNdCglDaGFuZ2VkIG1vc3Qgb2YgdGhlIGBwYXNjYWwnIHN0eWxlIHRvIHBhc2NhbF8xNiB3aGVuCglmdW5jdGlvbiByZXR1cm5lZCBhIDE2Yml0IHZhbHVlLgoKVHVlIEp1bCAxOSAxODo0MDoyNSAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbY29udHJvbHMvbWVudS5jXQoJUmVvcmdhbml6ZWQgc2l6aW5nIGFuZCBkcmF3aW5nIGNvZGUgdG8gaW1wbGVtZW50IG11bHRpLWxpbmUgbWVudXMuCglJbXBsZW1lbnRlZCBNRU5VQlJFQUsgc3R5bGUuCglVc2Ugc3lzdGVtIGNvbG9ycyB0byBkcmF3IG1lbnVzLgoKCSogW29iamVjdHMvY29sb3IuY10KCUJ1ZyBmaXggaW4gQ09MT1JfSXNTb2xpZCgpLgoKCSogW29iamVjdHMvZm9udC5jXQoJQnVnIGZpeCBpbiBGT05UX0dldE1ldHJpY3MoKTogY2FsY3VsYXRlIGF2ZXJhZ2UgY2hhcmFjdGVyIHdpZHRoCglvbmx5IG9uIGV4aXN0aW5nIGNoYXJzIChkaWFsb2dzIGxvb2sgbXVjaCBiZXR0ZXIpLgoKCSogW29iamVjdHMvdGV4dC5jXQoJQnVnIGZpeCBpbiBEcmF3VGV4dCgpOiB1c2UgdGV4dCBjb2xvciB0byB1bmRlcmxpbmUgbW5lbW9uaWMuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUNoYW5nZWQgV01fTkNISVRURVNUIGhhbmRsaW5nIHRvIGNvcGUgd2l0aCBtdWx0aS1saW5lIG1lbnUgYmFycy4KCgkqIFt3aW5kb3dzL3N5c2NvbG9yLmNdCglBZGRlZCBzeXN0ZW0gb2JqZWN0cyBmb3IgbWVudSBjb2xvcnMuCgpNb24gSnVsIDE4IDE5OjMyOjA4IFBEVCAxOTk0ICBBbmRyZXcgTGFnb2R6aW5za2kgIChhbmRyZXdAbmV0Y29tLmNvbSkKCiAgICAgICAgKiBbY29udHJvbHMvbWVudS5jXQogICAgICAgIEZpeGVkIGJ1ZyBpbiBTZWxlY3RQcmV2SXRlbSB0aGF0IGNhdXNlZCBzZXBlcmF0b3JzIHRvIG5vdCBiZQoJc2tpcHBlZCB3aGVuIHVzaW5nIHRoZSB1cCBhcnJvdyBrZXkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRodSBKdWwgMTQgMTc6NTA6NDUgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFtDb25maWd1cmVdCglBdXRvZGV0ZWN0cyBMaW51eCB2ZXJzaW9uIChpZiBydW5uaW5nIExpbnV4KS4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglOZXcgc2lnbmFscyBmb3IgTGludXguCgoJKiBbbG9hZGVyL2xkdGxpYi5jXQoJTmV3IHN0cnVjdHVyZSBmaWVsZCBpbiBzeXMgY2FsbC4KClN1biBKdWwgMTAgMTk6MzE6MzQgMTk5NCAgT2xhZiBGbGViYmUgIChvbGFmQGRyYWdvbikKCiAgICAgICAgKiBbbG9hZC9yZXNvdXJjZS5jXSAKICAgICAgICAgIGZpeGVkIE1lbW9yeSAoUmVzb3VyY2UpIExlYWsuCgogICAgICAgICogW2xvYWQvbWFpbi5jXSAKICAgICAgICAgIGZpeGVkIGEgcHJpbnRmLgoKVHVlIEp1bCAxMiAxODo1MDozNCAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbY29udHJvbHMvZGVza3RvcC5jXQoJSW1wbGVtZW50ZWQgZGVza3RvcCB3YWxscGFwZXIgKG9ubHkgMTYgY29sb3JzIGZvciBub3cpLgoKCSogW2NvbnRyb2xzL21lbnUuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglQcmVsaW1pbmFyeSB3b3JrIHRvIGFsbG93IG11bHRpLWxpbmUgbWVudXMuCgoJKiBbbWlzYy9tYWluLmNdCglObyBiYWNraW5nIHN0b3JlIG9uIGRlc2t0b3Agd2luZG93IChub3QgdXNlZnVsKS4KCgkqIFtvYmplY3RzL3RleHQuY10KCUEgZmV3IGZpeGVzIHRvIERyYXdUZXh0KCkgdG8gbWFrZSB1bmRlcmxpbmVzIHVuZGVyIG1uZW1vbmljCglsZXR0ZXJzIHRvIGxvb2sgYmV0dGVyLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCU1vcmUgZml4ZXMgdG8gR1JBUEhfRHJhd0FyYygpLCBhbmQgc29tZSBmaXhlcyB0byBQb2x5Z29uKCkuCglJbXBsZW1lbnRlZCBQb2x5UG9seWdvbigpIChwYXJ0aWFsbHkgd29ya2luZykuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCU5ldyBmdW5jdGlvbiBXSU5QT1NfU2VuZE5DQ2FsY1NpemUoKS4KCUNsZWFuZWQgdXAgU2V0V2luZG93UG9zKCkgYW5kIGFkZGVkIHByZWxpbWluYXJ5IHN1cHBvcnQgZm9yCgltdWx0aS1saW5lIG1lbnVzLgoKTW9uIEp1bCAxMSAxOToxNTo1MSAxOTk0ICBNaWd1ZWwgZGUgSWNhemEgIChtaWd1ZWxAc3BoaW54KQoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUNoYW5nZXMgdG8gd29yayBhcyBhIGxpYnJhcnkuCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdIAoJSWZkZWZlZCBtb2R1bGUuCgoJKiBbaWYxNjMyL3JlbGF5LmNdCglDaGFuZ2VzIHRvIGFsbG93IGxpbmtpbmcgd2l0aCBXaW5lTGliLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgbWFjcm8gV0lORUxJQl9VTklNUAoKCSogW2xvYWRlci9saWJyYXJ5LmNdCglXaGVuIGNvbXBpbGluZyBXaW5lTGliLCBHZXRQcm9jQWRkcmVzcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LgoKCSogW2xvYWRlci9tYWluLmNdCglBZGRlZCBlbXB0eSBJbml0RExMIHdoZW4gdXNpbmcgV2luZUxpYi4KCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCVNvbWUgcGFydHMgb2YgdGhlIGxvYWRlciBhcmUgbmVlZGVkIGZvciBXaW5lTGliLCBpZmRlZmVkIGNvcnJlY3RseQoKCSogW21pc2Mve2F1ZGlvLmMsbWNpY2RhLmMsbW1hdXguYyxtbXN5c3RlbS5jXQoJRGlzYWJsZSBjb21waWxhdGlvbiBvZiBtb2R1bGUgd2hlbiBjb21waWxpbmcgV2luZUxpYi4KCgkqIFt0b29sa2l0L2hlYXAuY10KCUZpeGVkIHNtYWxsIGJ1Zy4gIFdoZW4gcGFzc2VkIGFuIGludmFsaWQgaGFuZGxlIFdpbmVMaWIgd291bGQKCWNyYXNoLCBub3cgcmV0dXJuIE5VTEwuCgoJKiBbdG9vbGtpdC93aW5tYWluLmNdCglDYWxsIENyZWF0ZU5ld1Rhc2sgaW4gX1dpbk1haW4uCgpTdW4gSnVsIDEwIDA5OjA4OjAyIDE5OTQgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFtjb250cm9scy9lZGl0LmNdIFtjb250cm9scy93aWRnZXQuY10KCU1vcmUgY2hhbmdlcyB0byBpbXByb3ZlIGNvbXBhdGliaWxpdHkgd2l0aCBXaW5kb3dzJyBlZGl0Cgljb250cm9sLiAgRmluaXNoZWQgb2ZmIHRhYiBzdG9wIHN1cHBvcnQuCgpNb24gSnVsIDExIDIxOjA1OjAyIE1FVCBEU1QgMTk5NCAgRXJpayBCb3MgPGVyaWtAaGFja3RpYy5ubD4KCgkqIFtpZjE2MzIvcmVsYXkuY10KCSMgb2Ygb3JkaW5hbHMgaW4gc2hlbGwuZGxsIGNoYW5nZWQgdG8gMTAzLgoKCSogW2xvYWRlci9zaWduYWwuY10KCXN0aSwgY2xpIHdpbGwgbm93IGJlIGlnbm9yZWQuCgoJKiBbb2JqZWN0cy9icnVzaC5jXQoJQWRkZWQgc3R1YiBmb3IgR2V0U3lzQ29sb3JCcnVzaCgpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4sIDMgSnVsIDE5OTQgMjA6MTU6NTYgKzAxMDAgKEJTVCkgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFtjb250cm9scy9lZGl0LmNdCglCdWcgZml4ZXMgYW5kIHRpZHlpbmcgdXAuICBQcmVsaW1pbmFyeSB0YWIgc3RvcCBzdXBwb3J0CgkoZG9lc24ndCB3b3JrIHlldCkuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCVJldmVyc2VkIG9yZGVyIG9mIGJ1dHRvbnMgaW4gQ2hlY2tSYWRpb0J1dHRvbnMgc28gdGhhdCBhbGwKCWJ1dHRvbnMgYXJlIG5vdyBkaXNwbGF5ZWQuCgpUdWUgSnVsICA1IDE4OjMwOjI0IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtpbmNsdWRlL29wdGlvbnMuaF0gW21pc2MvbWFpbi5jXSBbd2luZG93cy93aW4uY10KCVJlbW92ZWQgbm9zYXZldW5kZXJzIG9wdGlvbiwgcmVwbGFjZWQgYnkgaGFuZGxpbmcKCXRoZSBDU19TQVZFQklUUyBmbGFnLgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCU1vZGlmaWVkIHRoZSBmaXggZm9yIG5lZ2F0aXZlIHNpemUgaW4gY2xhc3MgZXh0cmEgYnl0ZXMgdG8KCWF2b2lkIG1vZGlmeWluZyB0aGUgY2FsbGVyJ3MgZGF0YS4KCgkqIFt3aW5kb3dzL2RjLmNdCglCdWcgZml4OiBzeXN0ZW0gZm9udCBtdXN0IGJlIGEgcHJvcG9ydGlvbmFsIGZvbnQuCglGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZCB0aGUgZGVmYXVsdCBwZW4gdG8gbm90IGJlIHNlbGVjdGVkCgljb3JyZWN0bHkgaW4gYSBEQy4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglCdWcgZml4IGluIEdSQVBIX0RyYXdBcmMoKS4gVGhhbmtzIHRvIEFkcmlhbm8gQXpldmVkbyBmb3IKCW5vdGljaW5nIGl0LgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCVJlbW92ZWQgaW5jb3JyZWN0IHNlbGVjdGluZyBvZiBkZWZhdWx0IG9iamVjdHMgaW4gQmVnaW5QYWludCgpCgkobm8gbG9uZ2VyIG5lZWRlZCBiZWNhdXNlIG9mIHRoZSBmaXggaW4gZGMuYykuCgpKdWwgNCwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW21pc2MvbW1zeXN0ZW0uY10KCSogW21pc2MvYXVkaW8uY10KCUFkZCBtb3JlIGNvZGUgdG8gaW50ZXJmYWNlICcvZGV2L2RzcCcuCgoJKiBOZXcgZmlsZSBbbWlzYy9tY2ljZGEuY10KCUNyZWF0ZSBhbiBNQ0lfREVWVFlQRV9DRF9BVURJTyBkcml2ZXIgY29ubmVjdGVkIHRvICcvZGV2L3NicGNkJy4KCgkqIE5ldyBmaWxlIFttaXNjL21tYXV4LmNdCglTdHVicyB0byBtYWtlIGEgZnV0dXJlIGRyaXZlciBjb25uZWN0ZWQgdG8gJy9kZXYvbWl4ZXInLgoKCSogW3dpbmRvd3Mvd2luLmNdCglUZW1wb3JhcnkgcGF0Y2ggdG8gQ3JlYXRlV2luZG93RXgoKSBmb3IgcmVzZXRpbmcgbmVnYXRpdmUKCWNvb3JkaW5hdGVzIHRvIDAsMCA7IGJlY2F1c2UgJ3NvdW5kcmVjLmV4ZScgZ2l2ZSBuZWdhdGl2ZSB2YWx1ZXMKCWFuZCBJIG5lZWQgaXQgdG8gd29yayBvbiBNTVNZU1RFTSAuLi4gOi0pCgoJKiBbbWlzY2VtdS9pbnQyZi5jXQoJYWRkIGEgc3R1YiAnZG9faW50MmZfMTYnIChmdW5jdGlvbiAweDE2KSBmb3IgRE1QSSBzZXJ2ZXIuCgpNb24gSnVuIDIwIDEwOjA4OjQwIEJTVCAxOTk0ICBXaWxsaWFtIFNtaXRoICh3b3NAZGNzLndhcndpY2suYWMudWspCgoJKiBpbmNsdWRlL2NvbW0uaAoJTmV3IGZpbGUgLS0gc29tZSBkZWZpbml0aW9ucyB0aGF0IHdlcmUgaW4gY29tbS5jIG5vdyBuZWVkIHRvCgliZSBzaGFyZWQgd2l0aCBtaXNjL2Rvc19mcy5jCgoJKiBtaXNjL2NvbW0uYwoJU29tZSBkZWZpbml0aW9ucyBtb3ZlZCBpbnRvIGluY2x1ZGUvY29tbS5oCgoJKiBtaXNjL2Rvc19mcy5jIChET1NfR2V0RXF1aXBtZW50KToKCUZpeGVkIGVycm9yIGluIGVxdWlwbWVudCAtLSBiaXR3aXNlIG9yIG9mIHR3byB2YWx1ZXMgc2hvdWxkCgliZSB1c2VkIGluc3RlYWQgb2YgbG9naWNhbCBvci4gIEFsc28gYWRkZWQgY29kZSB0byBjb3JyZWN0bHkKCXJlcG9ydCB0aGUgbnVtYmVyIG9mIHNlcmlhbCBhbmQgcGFyYWxsZWwgZGV2aWNlcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTW9uIEp1biAyMCAxNDoyNjo0MSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW29iamVjdHMvYml0bWFwLmNdCglBbGxvdyBuZWdhdGl2ZSBiaXRtYXAgc2l6ZXMuCgpTdW4gSnVuIDE5IDEyOjAwOjA0IDE5OTQgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCiAgICAgICAgKiBbY29udHJvbHMvZWRpdC5jXQogICAgICAgIEltcHJvdmVkIHNlbGVjdGlvbiBkaXNwbGF5LiAgQWRkZWQgcHJvY2Vzc2luZyBmb3IgV01fU0VURk9OVCwKICAgICAgICBFTV9SRVBMQUNFU0VMLCBFTV9MSU5FTEVOR1RILCBFTV9VTkRPLCBFTV9FTVBUWVVORE9CVUZGRVIsCiAgICAgICAgRU1fR0VUSEFORExFLCBFTV9TRVRIQU5ETEUgbWVzc2FnZXMuICBUZXh0IGJ1ZmZlciBub3cgc3RvcmVkIG9uIAogICAgICAgIGFwcGxpY2F0aW9uJ3MgbG9jYWwgaGVhcC4KCiAgICAgICAgKiBbd2luZG93cy9ncmFwaGljcy5jXQogICAgICAgIENvcnJlY3RlZCBidWcgaW4gUmVjdGFuZ2xlKCkuICBYRmlsbFJlY3RhbmdsZSBoYXMgdGhlIHNhbWUKICAgICAgICB3aWR0aCBhcyBSZWN0YW5nbGUsIGJ1dCBYRHJhd1JlY3RhbmdsZSBpcyBvbmUgcGl4ZWwgd2lkZXIKICAgICAgICBmb3IgdGhlIHNhbWUgY28tb3JkaW5hdGVzLgoKICAgICAgICAqIFttZW1vcnkvaGVhcC5jXSBbaW5jbHVkZS9oZWFwLmhdCiAgICAgICAgQWRkZWQgSEVBUF9Mb2NhbFNpemUgZnVuY3Rpb24uCgogICAgICAgICogW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3Mva2V5Ym9hcmQuY10KICAgICAgICBJbXByb3ZlbWVudHMgdG8gS2V5U3RhdGVUYWJsZSBhbmQgYWRkaXRpb24gb2YgQXN5bmNLZXlTdGF0ZVRhYmxlLgogICAgICAgIEFkZGVkIHN1cHBvcnRpbmcgY29kZSB0byBHZXRLZXlTdGF0ZSBhbmQgR2V0QXN5bmNLZXlTdGF0ZSBhbmQKICAgICAgICBtZXJnZWQgbW91c2UgYnV0dG9uIHN0YXRlcyBpbnRvIEdldEtleWJvYXJkU3RhdGUuCgogICAgICAgICogW2xvYWRlci9yZXNvdXJjZS5jXSBbaW5jbHVkZS9hY2NlbC5oXQogICAgICAgIEFkZGVkIHJlY29nbml0aW9uIG9mIFNISUZULCBDT05UUk9MIGFuZCBBTFQga2V5cyB0bwogICAgICAgIFRyYW5zbGF0ZUFjY2VsZXJhdG9yLgoKICAgICAgICAqIFtvYmplY3RzL21ldGFmaWxlLmNdIFtvYmplY3RzL2ZvbnQuY10gW29iamVjdHMvYml0Ymx0LmNdCiAgICAgICAgQSBiaXQgbW9yZSBtZXRhZmlsZSBzdXBwb3J0LgoKU3VuIEp1biAxOSAxNzoyOTowMCBNRVQgRFNUIDE5OTQgIEVyaWsgQm9zIChlcmlrQGhhY2t0aWMubmwpCgogICAgICAgICogW2xvYWRlci9yZXNvdXJjZS5jXQogICAgICAgIFNpemVvZlJlc291cmNlKCkgYW5kIEFsbG9jUmVzb3VyY2UoKSBhZGRlZCwgQWNjZXNzUmVzb3VyY2UoKSB1cGRhdGVkLgoKICAgICAgICAqIFtpZjE2MzIva2VybmVsLnNwZWNdCiAgICAgICAgRnJlZUxpYnJhcnkoKSB1c2VkIGZvciBGcmVlTW9kdWxlKCkuCgogICAgICAgICogW3dpbmRvd3MvZ3JhcGhpY3MuY10KICAgICAgICBSZWN0YW5nbGUoKTogc3dhcCBsZWZ0ICYgcmlnaHQgY29ybmVycyB3aGVuIHJpZ2h0IDwgbGVmdCwKICAgICAgICBzd2FwIHRvcCAmIGJvdHRvbSB3aGVuIGJvdHRvbiA8IHRvcC4KCkp1biAxOSwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglGaXggYnVnIGluIHdpbmRvdyBzdHlsZSBvZiB0aGUgYXNzb2NpYXRlZCBsaXN0Ym94LgoKCSogW2NvbnRyb2xzL21lbnUuY10KCVNraXAgc2VwYXJhdG9ycyBpbiBrZXlib2FyZCBuYXZpZ2F0aW9uIGJ5IHVzaW5nIG5ldyBpbnRlcm5hbCAKCQlmdW5jdGlvbnMgU2VsZWN0UHJldkl0ZW0oKSAmIFNlbGVjdE5leHRJdGVtKCksCgoJKiBbbWlzYy9wcm9maWxlLmNdCglCdWcgZml4IGluIEdldFByaXZhdGVQcm9maWxlSW50KCksIHdhcyBsaW1pdGVkIHRvIDQgZGlnaXQsCgkJSW50QnVmIG11c3QgYmUgYWxsb2MgdG8gKDUrMSk9Ni4gY2hhciBpbnN0ZWFkIG9mIDUuCgoJKiBbbWlzYy9tYWluLmNdCglQdXQgY29kZSBpbiBmdW5jdGlvbnMgU2V0RW52aXJvbm1lbnQoKSAmIEdldEVudmlyb25tZW50KCkuCgoJKiBbbWlzYy9zaGVsbC5jXQoJU3RhcnQgcHV0dGluZyBzb21lIGNvZGUgaW4gRXh0cmFjdEljb24oKSBmdW5jdGlvbi4KCgkqIFttaXNjL21tc3lzdGVtLmNdCglTb21lIGNvZGUgZm9yIE1NVGltZXIgZnVuY3Rpb25zICYgdGltZXJzIGxpc3QuCgoJKiBbbWlzY2VtdS9pbnQzMS5jXQoJRmV3IHN0dWJzIGZvciBEUE1JIGludGVycnVwdCBjYWxscy4gTm90aGluZyB3b3JrIHlldC4KCk1vbiBKdW4gMjAgMDc6Mzc6NDMgRURUIDE5OTQJSm9obiBSaWNoYXJkc29uIChqcmljaGFyZEBjcy51bWwuZWR1KQoKCSogaW5jbHVkZS93aW4uaCAodGFnV05EKToKCUFkZGVkIGljb24gZmllbGRzIGljb24sIGhJY29uIGFuZCByZWN0Q2xpZW50U2F2ZSB0byAKCXRoZSB0YWdXTkQgc3RydWN0LgoKCSogd2luZG93cy9JbWFrZWZpbGUKCUFkZGVkIGljb24uYyB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byBjb21waWxlCgoJKiB3aW5kb3dzL2RjZS5jIChHZXREQ0V4KToKCUFkZGVkIHNvbWUgY2hlY2tzIGZvciBpY29uaWMgbW9kZSBhbmQgcGFzcyBpY29uIHdpbmRvdyBhcyBkcmF3YWJsZSwKCW5vdCB0aGUgcmVhbCB3aW5kb3cuCgoJKiB3aW5kb3dzL2RlZnduZC5jIChEZWZXaW5kb3dQcm9jKQoJQWRkZWQgUEFJTlRJQ09OIGRlZmF1bHQgd2luZG93cyBwcm9jZWR1cmUuCgoJKiB3aW5kb3dzL2V2ZW50LmMgKEVWRU5UX0V4cG9zZSkKCUFkZGVkIGNoZWNrIGZvciBpY29uaWMgd2luZG93IGV4cG9zZS4gSWYgaWNvbmljIHdpbmRvdyBpcyBleHBvc2VkCglzZW5kIGEgV01fUEFJTlRJQ09OIG1lc3NhZ2UKCgkqIHdpbmRvd3MvaWNvbi5jIAoJTmV3IGZpbGUuICBJQ09OX0ljb25pZnksIElDT05fZmluZEljb25Gcm9tUG9pbnQsIElDT05fRGVpY29uaWZ5LgoKCSogd2luZG93cy9tZGkuYyAoRGVmTURJQ2hpbGRQcm9jKQoJVGVzdCBmb3IgSXNJY29uaWMgZHVyaW5nIGEgU0NfUkVTVE9SRSwgdGhpcyBkb2Vzbid0IHdvcmsgeWV0LgoKCSogd2luZG93cy9tZXNzYWdlLmMgKGhhcmR3YXJlX2V2ZW50KQoJTG9va3MgZm9yIGljb24gYXMgd2VsbCBhcyB3aW5kb3cgbm93LgoKCSogd2luZG93cy9ub25jbGllbnQuYyAoTkNfSGFuZGxlU3lzQ29tbWFuZCwgTkNfRG9OQ1BhaW50SWNvbikKCUFkZGVkIGljb25pZnkvZGVpY29uaWZ5IGluIE5DX0hhbmRsZVN5c0NvbW1hbmQsIG5ldyBmdW5jdGlvbgoJTkNfRG9OQ1BhaW50SWNvbiB3aGljaCBwYWludHMgYW4gaWNvbi4KCgkqIHdpbmRvd3MvcGFpbnRpbmcuYyAoQmVnaW5QYWludCkKCU1hZGUgYSBCZWdpblBhaW50IHNlbGVjdCB0aGUgU1RPQ0tfQkxBQ0tfUEVOLCBTVE9DS19XSElURV9CUlVTSCwKCWFuZCBTVE9DS19TWVNURU1fRk9OVCBvYmplY3RzIHNpbmNlIHRoaXMgaXMgKGhvcGVmdWxseSkgZGVmYXVsdAoJd2luZG93cyBiZWhhdmlvci4KCgkqIHdpbmRvd3Mvd2luLmggKENyZWF0ZVdpbmRvd0V4KQoJU2V0IHRoZSBkZWZhdWx0IGJhY2tncm91bmQgY29sb3Igb2YgYSB3aW5kb3cgdG8gYmUgd2hpdGUuCglDcmVhdGUgaWNvbiB3aW5kb3csIHR1cm4gb2ZmIE1JTklNSVpFIGlmIGl0IGlzIG9uLCBzaW5jZQoJSSBkb24ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCBpdCBhcyBvZiB5ZXQuLi4gcmVnaXN0ZXIKCXRoZSBpY29uIHdpdGggdGhlIGh3bmQgb2YgaXRzIHdpbmRvdyBzbyB3ZSBjYW4gaWRlbnRpZnkgd2hlcmUKCWljb24gbWVzc2FnZXMgYXJlIGNvbWluZyBmcm9tLgoKTW9uIEp1biAyMCAxMDoxNTo1OSAxOTk0ICBNaWd1ZWwgZGUgSWNhemEgIChtaWd1ZWxAc3BoaW54KQoKCSogd2luZG93cy9ldmVudC5jOiBBZGRlZCBhIGhhY2sgdG8gZGVmaW5lIFhQb2ludGVyIHdoZW4gdXNpbmcKCVgxMVI0LiAKCgkqIHRvb2xraXQvaGVsbG8uYzogVGVzdCBhcHBsaWNhdGlvbiBmb3IgV2luZUxpYi4gVG8gY29tcGlsZSB5b3UnbGwKCW5lZWQ6IGdjYyAtSWluY2x1ZGUgLURXSU5FTElCIC1nIGhlbGxvLmMgLWMsIGFuZCB0byBsaW5rIHlvdSdsbAoJbmVlZDogZ2NjIGhlbGxvLm8gbGlid2luZS5hIC1sWDExIC1ML3Vzci9vcGVud2luL2xpYiAtbG0gCgoJKiB0b29sa2l0L2hlYXAuYzogRXh0ZW5kZWQgdGhlIHNpemUgb2YgdGhlIGJsb2NrIHNpemUgcGVyIGNodW5rLgoKCSogbWlzYy9zdHJlc3MuYyAoR2V0RnJlZUZpbGVIYW5kbGVzKTogRml4ZWQgdHlwby4KCgkqIG1pc2MvbWFpbi5jIChtYWluKTogQ2hhbmdlcyB0byBhbGxvdyBjb21waWxhdGlvbiB1bmRlciBTdW5PUy4gCgoJKiBsb2FkZXIvbGlicmFyeS5jOiBDaGFuZ2VkIHNvbWUgaWZkZWZzIHRvIGNvbXBpbGUgV2luZUxpYi4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIEp1biAxNCAwODowOToxNCAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogbG9hZGVyL3NlbGVjdG9yLmMgKEdldEN1cnJlbnRQREIpOiAKCUFkZGVkIHRyaXZpYWwgZnVuY3Rpb24gR2V0Q3VycmVudFBEQigpIHdoaWNoIHJldHVybnMgdGhlIHByb2dyYW0KCXNlZ21lbnQgcHJlZml4IHNlbGVjdG9yLgoKCSogbWVtb3J5L2hlYXAuYyAoSEVBUF9GcmVlKTogCglJZiBmcmVlIGxpc3QgaXMgZW1wdHksIG1ha2UgdGhlIGZyZWVkIGJsb2NrIHRoZSBmcmVlIGxpc3QuCgpGcmkgSnVuIDEwIDA3OjU2OjQ5IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBjb250cm9scy9lZGl0LmMgKEVESVRfU2V0VGV4dE1zZyk6IAoJRG8gbm90IGFwcGVuZCBhIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBsaW5lLgoKCSogd2luZG93cy9ldmVudC5jIChTZXRDYXB0dXJlKTogCglTZXQgd2luSGFzQ3Vyc29yIGlmIG1vdXNlIGNhcHR1cmUgc3VjY2VlZHMuCgpKdW4gMTMsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglGaXggYnVnIGluIGxpc3Rib3ggOiBJbnNlcnRTdHJpbmcgc2hvdWxkIGNhbGwgQWRkU3RyaW5nIGlmIC0xLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU5ldyBmdW5jdGlvbiBHZXRNZW51U3RhdGUoKS4KCgkqIFtjb250cm9scy9zY3JvbGwuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglUcnkgdG8gbWFrZSBTaG93U2Nyb2xsQmFyKCkgcmVjYWxjIE5DXyByZWdpb25zLiBOb3QgZmluaXNoZWQgIQoKCSogW29iamVjdHMvdGV4dC5jXQoJQWRkIFN0dWIgZm9yIFRhYmJlZFRleHRPdXQoKSwgd2hpY2ggdGVtcG9yYXJlbHkgY2FsbCBUZXh0b3V0KCkuCgoJKiBbd2luZG93cy9rZXlib2FyZC5jXSBbd2luZG93cy9ldmVudC5jXQoJTmV3IGZ1bmN0aW9uIEdldEtleUJvYXJkU3RhdGUoKSB3aXRoIGFuIEtleVN0YXRlVGFibGUgYXJyYXkKCQkmIGFzc29jaWF0ZWQgaGFuZGxpbmcgaW4gZnVuY3Rpb24gRVZFTlRfa2V5KCkuCgpNb24gSnVuIDEzIDE2OjQ1OjI0IE1FVCBEU1QgMTk5NCAoZXJpa0BoYWNrdGljLm5sKQoKICAgICAgICAqIFtjb250cm9scy9tZW51LmNdCiAgICAgICAgSXNNZW51KCkgYWRkZWQuCgogICAgICAgICogW2xvYWRlci9saWJyYXJ5LmNdCiAgICAgICAgTW9kdWxlRmlyc3QoKSwgTW9kdWxlTmV4dCgpLCBNb2R1bGVGaW5kTmFtZSgpLCBNb2R1bGVGaW5kSGFuZGxlKCkKICAgICAgICBhZGRlZC4KCiAgICAgICAgKiBbb2JqZWN0L2dkaW9iai5jXQogICAgICAgIElzR0RJT2JqZWN0KCkgYWRkZWQuCgogICAgICAgICogW21pc2NlbXUvaW50Mls1Nl0uY10KICAgICAgICBidWdmaXg6IGJvdGggZGlkbid0IGxlYXZlIGZsYWdzIHB1c2hlZCBvbiAxNmJpdC1zdGFjay4KICAgICAgICAod2luZmlsZSBnZXRzIGEgYml0IGZ1cnRoZXIpCgogICAgICAgICogW21pc2NlbXUvaW50MTYuY10KICAgICAgICBBZGRlZCAoZW1wdHkpLgoKU2F0IEp1biAxMSAyMjo1Njo0OCAxOTk0IEpvbiBUb21icyAoam9uQGVzaXgyLnVzLmVzKQoJKiB3aW5kb3dzL2V2ZW50LmM6CglBZGRlZCBjb2RlIHRvIGRyb3AgcmVkdW5kYW50IG1vdGlvbiBFdmVudHMgaW4gdGhlIFhFdmVudCBxdWV1ZS4KClRodSBKdW4gIDkgMTA6NTU6NTUgTUVUIERTVCAxOTk0ICBKb2NoZW4gSGVpbiAoIEhlaW5AU3R1ZGVudC5UVS1DbGF1c3RoYWwuZGUgKQoKCSogW21pc2MvbWFpbi5jIG1pc2MvbWVzc2FnZS5jIGluY2x1ZGUvdGV4dHMuaF0KCVJlbW92ZWQgdGhlIHRleHQtY29uc3RhbnRzIGZyb20gbWVzc2FnZS5jIGludG8gdmFyaWFibGVzCgl3aGljaCBtYXkgYmUgY2hhbmdlZCBmcm9tIFgtcmVzb3VyY2VzLgoKCSogW21pc2MvbWFpbi5jIG1pc2MvbWVzc2FnZS5jXQoJYWRkZWQgPGxvY2FsZS5oPiBhbmQgc2V0bG9jYWxlKCkgdG8gbWFpbi5jLCB1c2VkIHRvdXBwZXIoKSBpbiBtZXNzYWdlLmMKCk1vbiwgMTMgSnVuIDk0IDA5OjQxOjE2IC0wNTAwIFBhdWwgQnJhbWVsIDxwYXVsYnJAY29tbS5tb3QuY29tPgoKICAgICAgICAqIGNvbnRyb2xzL2J1dHRvbi5jICggW0NSXUJfTEJ1dHRvbiogKSAKICAgICAgICBsZWZ0IHJjLnJpZ2h0IGF0IGZ1bGwgd2luZG93IHdpZHRoIHNvIGNsaWNrIG9uIGxhYmVsIGFsc28gCiAgICAgICAgYWN0aXZhdGVzIHRoZSBjb250cm9sIChNU1dpbiBiZWhhdmlvcikKClNhdCBKdW4gMTEgMTk6MDU6NDAgMTk5NCAgT2xhZiBGbGViYmUgIChmbGViYmVAdGF0LnBoeXNpay51bmktdHVlYmluZ2VuLmRlKQoKICAgICAgICAqIGluY2x1ZGUvd2luZG93cy5oOgogICAgICAgICAgZnVuY3Rpb25zIHBvaW50ZXJzIGNhbiBub3QgYmUgcGFja2VkLgogICAgICAgICAgKGFubm95aW5nIHdhcm5pbmdzIHdpdGggZm9ydGhjb21taW5nIGdjYy0yLjYueCkKICAgICAgICAKICAgICAgICAqIGxvYWRlci9tYWluLmMgKEluaXRETEwpOiAKICAgICAgICAgIEZpeGVkIGEgcHJpbnRmIHN0YXRlbWVudC4gKGZvciBjb250cm9sLmV4ZSkgCgogICAgICAgICAgKEluaXRpYWxpemVMb2FkZWRETExzKTogCiAgICAgICAgICBkZWxldGVkIHNoYWRvdyBkZWZpbml0aW9uIG9mICAqd3BudC4KICAgICAgICAgIChCcmVha3MgbWFueSBwcm9ncmFtcywgYmVjYXVzZSBub3cgQ09NTURMRyB3aWxsIGJlCiAgICAgICAgICAgaW5pdGlhbGl6ZWQgOi0oCgogICAgICAgICogd2luZG93cy93aW4uYyAoU2V0V2luZG93VGV4dCk6IAogICAgICAgICAgYWRkZWQgbWlzc2luZyBicmVha3M7IChQRU5TQVRFIHN0YXJ0cykgCgogICAgICAgICogd2luZG93cy9ncmFwaGljcy5jIChGbG9vZEZpbGwpOiAKICAgICAgICAgIFByb3BlciBib3VuZGFyeXMuIChCQU5HQkFORyBzdGFydHMpIEZsb29kRmlsZV9yZWMgc2hvdWxkCiAgICAgICAgICBiZSByZXdyaXR0ZW4uCgogICAgICAgICogb2JqZWN0cy9mb250LmMgKEZPTlRfR2V0TWV0cmljcyk6IAogICAgICAgICAgVFlQTzogdXNlIGZvbnQtPnBlcmNoYXIgb25seSBpZiBpdCBpcyBkZWZpbmVkLiAoV1JJVEUgc3RhcnRzKQoKU3VuIEp1bmUgMTIsIFBldGVyIEJyb2FkaHVyc3QgKHBickB1YS5ud2wuYWMudWspCiAgICAgICAgY29udHJvbHMvc2Nyb2xsLmM6CiAgICAgICAgRml4ZXMgZm9yIGltcHJvdmVkIGJlaGF2aW91ciB3aGVuIGRyYWdnaW5nIHRodW1iOwogICAgICAgIEFkZGVkIFNCX1RIVU1CUE9TSVRJT04gbWVzc2FnZSB3aGVuIHRodW1iIGlzIHJlbGVhc2VkLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgSnVuICA3IDA4OjQxOjI3IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBsb2FkZXIvc2VsZWN0b3IuYyAoRml4dXBGdW5jdGlvblByb2xvZ3MpOiAKCU5ldyBmdW5jdGlvbiB0byBmaXh1cCBsb2FkZWQgRExMIGZ1bmN0aW9uIHByb2xvZ3MuICBJdCByZXBsYWNlcyB0aGUKCWRvIG5vdGhpbmcgY29kZSB3aXRoIGNvZGUgdGhhdCBsb2FkcyBEUyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBkYXRhCglzZWdtZW50IGZvciB0aGUgRExMLgoKCSogbWlzYy9jdXJzb3IuYyAoTG9hZEN1cnNvcik6IAoJRGlzYWJsZWQgY3Vyc29yIGxvYWRpbmcgZnJvbSAuRVhFIG9yIC5ETEwuICBUaGUgY29kZSBuZWVkcyB0byBoYW5kbGUKCXRoZSBwb3NzaWJpbGl0eSBvZiBtdWx0aXBsZSBjdXJzb3JzIGluIGEgc2luZ2xlIGRpcmVjdG9yeS4gIEFsc28sCglpdCBzaG91bGQgY2hlY2sgdG8gc2VlIGlmIHRoZSBjdXJzb3IgaXMgdGhlIHJpZ2h0IHNpemUuCgoJKiBvYmplY3RzL2ZvbnQuYyAoRW51bUZvbnRzKTogCglDaGVja2VkIGZvciBscExvZ0ZvbnRMaXN0W2ldID09IE5VTEwKCgkqIG9iamVjdHMvZ2Rpb2JqLmMgKFNldE9iamVjdE93bmVyKTogCglSZW1vdmVkIHN0dWIuICBSZXBsYWNlZCB3aXRoIHNpbXBsZSByZXR1cm4gaW4gZ2RpLnNwZWMuICBUaGlzCglmdW5jdGlvbiBpcyBub3QgZGVmaW5lZCBmb3IgdGhlIHJldGFpbCB2ZXJzaW9uIG9mIFdpbmRvd3MuCgoJKiBtZW1vcnkvaGVhcC5jIChXSU4xNl9Mb2NhbEhhbmRsZURlbHRhKTogCglOZXcgZnVuY3Rpb24uICBUaGlzIGlzIHJlYWxseSBhIGR1bW15IHRoYXQgaW1pdGF0ZXMgdGhlIHByb3BlcgoJcmV0dXJuIHZhbHVlcy4KCgkqIGxvYWRlci9saWJyYXJ5LmMgKEdldFByb2NBZGRyZXNzKTogCglGaXhlZCBkZWZpbml0aW9uIG9mIElTX0JVSUxUSU5fRExMKCkgbWFjcm8uCgpNb24gSnVuICA2IDE4OjE1OjQwIDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBtaXNjZW11L2ludDIxLmMgKFNlZWtGaWxlKTogCglOZWVkZWQgdG8gcmV0dXJuIGN1cnJlbnQgcG9zaXRpb24gaW4gRFg6QVguCgoJKiB3aW5kb3dzL3V0aWxpdHkuYyAod2luZG93c193c3ByaW50Zik6IAoJQWRkZWQgc3VwcG9ydCBmb3IgJyMnIGluIGZvcm1hdCwgYW5kIGZpeGVkIGJ1ZyB3aXRoICJwdHIiIGJlaW5nCglpbmNyZW1lbnRlZCB0b28gbWFueSB0aW1lcy4KCgkqIG1pc2NlbXUvaW50MjEuYyAoT3BlbkV4aXN0aW5nRmlsZSk6IAoJQWRkIGNvZGUgdG8gaGFuZGxlIG9wZW5pbmcgZmlsZXMgcmVhZC1vbmx5IGFuZCB3cml0ZS1vbmx5LgoKCSogbG9hZGVyL3dpbmUuYzoKCVNlZ21lbnQgZml4dXBzIG5vdyBkb25lIGluIExvYWRJbWFnZSBpbnN0ZWFkIG9mIF9XaW5NYWluLiAgVGhpcwoJaXMgbmVjZXNzYXJ5IHRvIHN1cHBvcnQgTG9hZExpYnJhcnkoKS4KClN1biBKdW4gIDUgMTc6MzQ6MjQgMTk5NCAgRXJpayBCb3MgKGVyaWtAaGFja3RpYy5ubCkKCgkqIFtsb2FkZXIvKl0KCQktIGZpeGVkOiBHZXRNb2R1bGVIYW5kbGUoKSBzb21ldGltZXMgcmV0dXJuZWQKCQkgIGEgd3JvbmcgaGFuZGxlLgoJCS0gZG9uJ3QgaW5pdCBkbGxzIHdoZW4gY3MgPT0gMCAobHpleHBhbmQsIGRvZXNuJ3QKCQkgIHNlZW0gdG8gaGF2ZSBhIGluaXQgZnVuY3Rpb24pCgkJLSBMb2FkTGlicmFyeSAmIExvYWRJbWFnZSBub3cgcmV0dXJuIGVycm9yIGluc3RlYWQKCQkgIG9mIHN0b3BwaW5nIHdpbmUuCgkJLSBtb3ZlZCBtb3N0IG9mIE5FLWZ1bmN0aW9ucyBpbnRvIG9uZSBmaWxlLgoJCS0gTG9hZExpYnJhcnkoKSB1c2VzIHdfZmlsZXMgbGlzdCBpbnN0ZWFkIG9mIGl0cwoJCSAgb3duIGxpc3QuCgkJLSBORSBleGVjdGFibGVzIGFyZSBub3cgZml4ZWQtdXAgYW5kIGluaXRpYWxpc2VkIHdoZW4KCQkgIGxvYWRlZCBpbnN0ZWFkIG9mIG9ubHkgb25jZSBiZWZvcmUgY2FsbGluZyBJbml0VGFzay4KCgkqIFttaXNjZW11L2ludDE1LmNdIFttaXNjZW11L2ludDMxLmNdCglBZGRlZC4JCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglTdHVicyBhZGRlZCBmb3Ige0dldHxTZXR9U2VsZWN0b3JMaW1pdCgpLCB7R2V0fFNldH1TZWxlY3RvckJhc2UoKS4KCgkqIFttaXNjL21haW4uY10KCVN0dWIgYWRkZWQgZm9yIElzUm9tTW9kdWxlKCkuCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJU29tZSBjbGVhbnVwLCBhZGRlZCBoZWFwIGZvciByZXR1cm5pbmcgZGF0YS4KCkp1biA2LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbdG9vbHMvYnVpbGQuY10KCUNoYW5nZSBNQVhfT1JESU5BTFMJZGVmaW5lIHRvIGhpZ2hlciB2YWx1ZSwgMTI5OSBlbnRyaWVzLgoJKE1NU1lTVEVNIGRvZXNuJ3QgaGF2ZSBzdWNjZXNpdmUgbnVtYmVycywgc29tZSBhcmUgYXJvdW5kIDEyMDApLgoKCSogW3dpbmRvd3MvdXRpbGl0eS5jXQoJQnVnIGZpeCBpbiB3aW5kb3dzX3dzcHJpbnRmKCksICh0d2ljZSBpbmNyZW1lbnRzIC4uLikuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUJ1ZyBmaXggaW4gU2V0V2luZG93UG9zKCksIHJlZHJhdyB3YXMgZG9uZSBpZiBmbGFnCgkJd2FzIHNldCB0byBTV1BfTk9SRURSQVcgd2hpbGUgU1dQX1NIT1dXSU5ET1cpLgoKCSogW21pc2MvbWVzc2FnZS5jXSBbY29udHJvbHMvY29tYm8uY10KCUFkZCBhbiBJbnZhbGlkYXRlUmVjdCgpIGluIFdNX1NIT1dXSU5ET1cgdG8gc3RhdGlzZnkgdGhlIG5ldyAnc2F2ZXVuZGVyJy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJSW4gQ3JlYXRlV2luZG93RXgoKSwgZG8gU2V0TWVudSgpIGNhbGxzIGFmdGVyIHdpbmRvdyBjcmVhdGlvbiwKCQlqdXN0IGJlZm9yZSBzZW5kaW5nIHRvIFdNX05DQ0FMQ1NJWkUuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJSW4gZnVuY3Rpb24gU2V0TWVudSgpLCBub3cgdXNlIFNldFdpbmRvd1BvcygpIHdpdGggCgkJZmxhZ3MgU1dQX0ZSQU1FQ0hBTkdFRCB0byByZWFkanVzdCBtZW51IGFyZWEuCglGdW5jdGlvbiBNZW51QmFyQ2FsY1NpemUoKSByZWRvbmUuCgpTdW4gTWF5IDI5IDExOjA4OjI0IDE5OTQgIERhdmlkIEIuIFRob21hcyAgKGR0QHllbnRhLmFicS5ubS51cykKCiAgICAgICAgKiBbb2JqZWN0cy90ZXh0LmNdCiAgICAgICAgRml4ZWQgcHJvYmxlbXMgYXNzb2NpYXRlZCB3aXRoIERUX1dPUkRCUkVBSyBmbGFnLiAgU3RyaW5nIGxlbmd0aAogICAgICAgIHdhcyBub3QgYmVpbmcgcHJvcGVybHkgZGVjcmVtZW50ZWQgd2hlbiBsaW5lcyB3ZXJlIGZvbGRlZCwgYW5kCiAgICAgICAgd3JhcHBpbmcgd2FzIG5vdCBwZXJmb3JtZWQgd2hlbiBEVF9OT0NMSVAgYW5kIERUX05PUFJFRklYIHdlcmUKICAgICAgICBib3RoIG9uIGluIGFkZGl0aW9uIHRvIERUX1dPUkRCUkVBSy4gIFdpbmRvd3MgZG9lcyB3cmFwcGluZyBpbgogICAgICAgIHRoaXMgY2FzZSwgYW5kIG5vdyBzbyBkb2VzIHdpbmUuCgpTdW4gSnVuICA1IDE5OjE3OjQ5IDE5OTQgIE9sYWYgRmxlYmJlICAob2xhZkBkcmFnb24pCgogICAgICAgICogW2VkaXQuY10KICAgICAgICBjcDEgd2FzIHVuaW5pdGlhbGl6ZWQgaWZmIGxpbmVubyA9PSAwCgogICAgICAgICogIEZpbmRGaWxlIHRlc3RzIGZvciBleGlzdGFuY2Ugb2YgZmlsZSBldmVuIGlmIGEgZnVsbAogICAgICAgICAgIGZpbGVuYW1lIHdhcyBzdXBwbGllZC4gV2hhdCBhYm91dCB1bml4IGZpbGUgbmFtZXM/CgogICAgICAgICogW2NvbnRyb2xzL2xpc3Rib3ggXQogICAgICAgIHduZFB0ciB3YXMgdW5pbml0aWFsaXplZCBmb3IgTEJfU0VUVE9QSU5ERVgKCiAgICAgICAgKiBbbWlzYy9wcm9wZXJ0eS5jXSAgICAgCiAgICAgICAgRG8gbm90IGZyZWUgbHBQcm9wLiBJcyBpdCByZWFsbHkgYWxsb2NhdGVkIGJ5IG1hbGxvYz8KCXtlZGl0ZWQgYnkgQm9iIEFtc3RhZHQ6IGNoYW5nZWQgZnJlZSgpIHRvIEdsb2JhbEZyZWUoKX0KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IE1heSAyOCAxMjowMzoyMyAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogbWlzY2VtdS9pbnQyMS5jIChPcGVuRXhpc3RpbmdGaWxlKTogCglPcGVuRXhpc3RpbmdGaWxlIG5lZWRlZCB0byByZXR1cm4gaGFuZGxlIGluIEFYIHJlZ2lzdGVyIGluc3RlYWQKCW9mIHRoZSBCWCByZWdpc3Rlci4KCgkqIG1pc2NlbXUvaW50MjEuYyAoaW9jdGxHZXREZXZpY2VJbmZvKTogCglBZGRlZCBhIGxpdHRsZSBjb2RlIHRvIGdpdmUgYSBmYWtlIHJlc3VsdCBmb3Igbm9ybWFsIGZpbGVzLgoKV2VkIE1heSAyNSAyMTo1NTozOCAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW21lbW9yeS9nbG9iYWwuY10KCXJldHVybiB2YWx1ZSBmcm9tIEdsb2JhbFNpemUgd2FzIGNvbXBsZXRlbHkgd3JvbmcuCgoJKiBbbWlzY2VtdS9pbnQyMS5oXQoJZml4ZWQgYnVnIGluIEZpbmRGaXJzdC4gIERpcmVjdG9yeSBwb2ludGVyIChkcCkgd2FzIG5vdCBwbGFjZWQgaW4KCWR0YSBjb3JyZWN0bHkuCgoJKiBbdG9vbHMvYnVpbGQuY10KCWZpeGVkIGNyZWF0aW9uIG9mIHBvcC5oIHRvIGd1YXJhbnRlZSB0aGF0IGZsYWdzIGFyZSByZXN0b3JlZCBjb3JyZWN0bHkuCgoJKiBbbWlzYy9jb21tLmNdCgljaGFuZ2VkIGFsbCBvY2N1cmFuY2Ugb2Ygc3RybmNtcCgpIHRvIHN0cm5jYXNlY21wKCkuCglCdWlsZENvbW1EQ0IoKSBzaG91bGQgbm90IHJlcXVpcmUgdGhhdCBPcGVuQ29tbSgpIGJlIGNhbGxlZCBmaXJzdC4KCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUhlYXAgaW5pdGlhbGl6ZWQgdG8gc2l6ZSBvZiBmdWxsIHNlZ21lbnQgbGVzcyBzdGFjayBzaXplIGFuZCAKCWF1dG9tYXRpYyBkYXRhIHNpemUuCgpTYXQgTWF5IDI4IDA5OjE0OjMzIDE5OTQgIFJpY2sgU2xhZGtleSAgKGpyc0B3b3JsZC5zdGQuY29tKQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUNvcnJlY3QgdHlwb3MgaW4gTGlzdEJveFJlc2V0Q29udGVudCB3aGVyZSBscGxzIHZhcmlhYmxlIGlzCgl1c2VkIHdoZXJlIGxzbHMyIHZhcmlhYmxlIGlzIG1lYW50LiAgRG9uJ3QgY2FsbCBVU0VSX0hFQVBfRlJFRQoJdHdpY2Ugb24gdGhlIHNhbWUgaGFuZGxlIGlmIGhEYXRhIGFuZCBoTWVtIGFyZSB0aGUgc2FtZS4KCgkqIFtkZWJ1Z2dlci9vcGNvZGVzL2kzODYtZGlzLmNdCglBZGQgbmV3IG5hbWUgYXJyYXkgbmFtZXNfcm13IGZvciB0YWJsZSBkcml2ZW4gZGVjb2Rpbmcgb2YgdGhlCgkxNi1iaXQgbW9kL3JtIGZpZWxkLiAgT21pdCBsYXJnZSBjYXNlIHN0YXRlbWVudCBpbiBPUF9FIGFuZAoJcmVwbGFjZSB3aXRoIGFycmF5IHJlZmVyZW5jZSB0byBtYXRjaCBleGlzdGluZyBjb2Rpbmcgc3R5bGUuCglBZGQgbmV3IHN0YXRpYyB2YXJpYWJsZSBtYWNoaW5lIHdpdGggdmFsdWUgMjg2IG9yIDM4NiB0bwoJY29ycmVjdGx5IGRlY29kZSBtb2Qvcm0gZmllbGQgaW4gZWl0aGVyIDE2IG9yIDMyIGJpdCBtb2Rlcy4KCVNldCBpdCBpbiBwcmludF9pbnNuX2l7MiwzfTg2LiAgSW4gT1BfRSB1c2UgaXQgdG8gZGVjaWRlIGhvdwoJdG8gZGVjb2RlIG1vZC9ybS4gIFdoaWxlIHRoZSBjb2RlIHdhcyBjb3JyZWN0IGZvciAxNiBiaXQgY29kZSwKCWl0IHdhcyBpbXByb3Blcmx5IGRlY29kaW5nIG1vZC9ybSBmaWVsZHMgb24gd29yZCBwcmVmaXhlZAoJMzIgYml0IGluc3RydWN0aW9ucy4KCgkqIFtkZWJ1Z2dlci9kZWJ1Zy5sXQoJUmVjb2duaXplIG5ldyB0b2tlbiBBQk9SVC4gICBSZWNvZ25pemUgc2luZ2xlIGxldHRlcnMgJ3AnCglhbmQgJ3EnIGFzIHRva2Vucy4KCgkqIFtkZWJ1Z2dlci9kYmcueV0KCUFkZCBuZXcgdG9rZW4gQUJPUlQuICBBbGxvdyBwcmludCBjb21tYW5kIHRvIGJlIGludm9rZWQgYnkKCSdwJyBhbmQgcXVpdCBjb21tYW5kIGJ5ICdxJywgYWxhIEdEQi4gIENoYW5nZSBsb3RzIG9mICd9OycKCXRvIGp1c3QgJ30nLiAgQWRkIHN0YXRpYyBkdW1teV9yZWdzIHRvIHdpbmVfZGVidWcgc28gdGhhdAoJd2luZV9kZWJ1ZygwLCBOVUxMKSBkb2Vzbid0IGNvcmUgZHVtcCB3aXRoIHFtYWdpYy4KCgkqIFtkZWJ1Z2dlci9pbmZvLmNdCglDb3JyZWN0IHN5bnRheCBvZiBicmVhayBjb21tYW5kIGluIGhlbHB0ZXh0IGFuZCBvbWl0IGZvcm1lcgoJY29tbWVudCBhYm91dCBwcm9iYWJsZSBidWdnaW5lc3Mgb2YgdGhlIGRpc2Fzc2VtYmx5IHNpbmNlIGl0CglpcyBub3cgY29ycmVjdC4gIENoYW5nZSBmcHJpbnRmIG9mIGZpcnN0IGJhY2t0cmFjZSBzdGFjawoJZnJhbWUgdG8gbWF0Y2ggdGhhdCBvZiB0aGUgc2Vjb25kIGFuZCBzdWJzZXF1ZW50IGZyYW1lcy4KCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUNoYW5nZSBjb25zdHJ1Y3Rpb24gb2YgY29tbWFuZCBsaW5lIGluIENyZWF0ZVBTUCBmcm9tIGNyZWF0aW5nCglhIHN0cmluZyB0aGF0IGxvb2tzIGxpa2UgImFyZzEgYXJnMiBcciIgdG8gImFyZzEgYXJnMiIuICBBIERPUwoJUFNQIGNvbW1hbmQgbGluZSBsb29rcyBsaWtlICIgYXJnMSBhcmcyXHIiIHdpdGggdGhlIGxlbmd0aCBub3QKCWluY2x1ZGluZyB0aGUgdHJhaWxpbmcgIlxyIiBidXQgdGhhdCBpcyBub3QgaG93IFdpbmRvd3MgZG9lcyBpdC4KCgkqIFtsb2FkZXIvbGlicmFyeS5jXQoJQ2hhbmdlIHVzZXMgb2YgJXMgdG8gcHJpbnQgc3RyaW5ncyBpbiBHZXRNb2R1bGVIYW5kbGUgdG8gJXggc28KCXRoYXQgc3RyaW5nIElEcyBkb24ndCBjYXVzZSBhIGNvcmUgZHVtcCB3aXRoIHFtYWdpYy4gIEhhbmRsZQoJY29udmVydGluZyBhIHN0cmluZyBpZCB0byBhIGxpdGVyYWwgbW9kdWxlIGhhbmRsZS4gIEZvcgoJZXhhbXBsZSwgR2V0TW9kdWxlSGFuZGxlKChMUFNUUikgMHg1Nykgbm93IHJldHVybnMgMHg1NyBpZgoJaXQgaXMgYSByZWFsIG1vZHVsZSBoYW5kbGUuCgoJKiBbbWlzYy9tZXNzYWdlLmNdCglJbiBNZXNzYWdlQm94LCB0cmFuc2xhdGUgYSBOVUxMIHRpdGxlIGFyZ3VtZW50IHRvIHRoZSBzdHJpbmcgIkVycm9yIi4KCgkqIFttaXNjL3Byb2ZpbGUuY10KCUluIEdldFNldFByb2ZpbGUgdHJhbnNsYXRlIGEgTlVMTCBEZWZhdWx0IGFyZ3VtZW50IHRvICIiLiAgQW55CgljYWxsZXIgd2hvc2UgRGVmYXVsdCBhcmd1bWVudCBpcyBOVUxMIGlzIGJ1Z2d5LCBidXQgQ0hBUk1BUCBkb2VzIGl0Cglhbnl3YXkuCgoJKiBbb2JqZWN0cy9mb250LmNdCglBZGQgTlVMTCBwb2ludGVyIGNoZWNrcyBpbiBFbnVtRm9udEZhbWlsaWVzIHRvIHByZXZlbnQgY29yZSBkdW1wcy4KClNhdCBNYXkgMjggMjA6MDE6NTEgMTk5NCBKb24gVG9tYnMgKGpvbkBndGV4MDIudXMuZXMpIAoKCSogTmV3IG9wdGlvbnMvcmVzb3Vyc2VzIG5vc2F2ZXVuZGVycyBhbmQgbm9iYWNraW5nc3RvcmUuICBCeSAKCWRlZmF1bHQgYmFja2luZ3N0b3JlIGFuZCBzYXZldW5kZXJzIGFyZSBub3cgZW5hYmxlZCwgdGhlc2UgdXNlIAoJbW9yZSBtZW1vcnkgYnV0IGF2b2lkcyB0aG9zZSBzbG93IChzb21ldGltZXMgbXVsdGlwbGUpIHJlZHJhd3MgCgljYXVzZWQgYmUgZXhwb3N1cmUgZXZlbnRzLgoKTWF5IDMwLCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbbWlzYy9kcml2ZXIuY10gTmV3IGZpbGUKCVNrZWxldG9uIGZvciAnSW5zdGFsbGFibGUgV2luZSBEcml2ZXJzJyBmdW5jdGlvbnMuIDotKQoJKiBbbWlzYy9hdWRpby5jXSBOZXcgZmlsZQoJU2tlbGV0b24gZm9yIGJhc2ljICdBdWRpbyBEcml2ZXInIGZ1bmN0aW9ucy4KCSogW21pc2MvbmV0d29yay5jXSBOZXcgZmlsZQoJU3R1YnMgZm9yIGZldyBuZXR3b3JraW5nIGZ1bmN0aW9ucy4KCgkqIFttaXNjL21tc3lzdGVtLmNdCglNb3JlIGNvZGluZyAuLi4gYSBkdXN0IGluIGEgZ2FsYXh5IC4uLgoJKiBbbWlzYy9zaGVsbC5jXQoJU29tZSBjb2RpbmcgZm9yICdSZWdYWFgnIGZ1bmN0aW9ucyAuLi4gYSBkdXN0IGluIHRoZSB3aW5kIC4uLgoKCSogW21pc2MvcHJvZmlsZS5jXQoJQnVnIGZpeCBpbiBHZXRTZXRQcm9maWxlKCksIGJhZCBlbnVtZXJhdGlvbiBpZiBLZXlOYW1lID09IE5VTEwuCgoJKiBbb2JqZWN0cy9nZGkuY10KCU5ldyBmdW5jdGlvbiBDcmVhdGVEaXNjYXJkYWJsZUJpdG1hcCgpLCBpdCBqdXN0IGNhbGxpbmcgCglDcmVhdGVDb21wYXRpYmxlQml0bWFwKCkgZm9yIG5vdy4gSXQncyBnZXQgJ2Nsb2NrLmV4ZScgcnVubmluZyAhIDotKQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCSogW2NvbnRyb2xzL2NvbWJvLmNdCglOZXcgZm9udCBtZW1iZXIgYXNzaWduZWQgdG8gU1lTVEVNX0ZPTlQgYXMgZGVmYXVsdC4KCUFkZGVkIHByb2Nlc3NpbmcgZm9yIFdNX1NFVEZPTlQgbWVzc2FnZTsKCgpUdWUgTWF5IDMxIDIwOjM0OjI1IEVEVCAxOTk0ICBKb2huIFJpY2hhcmRzb24gPGpyaWNoYXJkQGNzLnVtbC5lZHU+CgogICAgICAgICogW3dpbmRvd3MvZXZlbnQuY10KICAgICAgICBBZGRlZCBBc3luY01vdXNlQnV0dG9uc1N0YXRlcyBhcnJheSBmb3IgR2V0QXN5bmNLZXlTdGF0ZS4KCiAgICAgICAgKiBbd2luZG93cy9rZXlib2FyZC5jXQogICAgICAgIEltcGxlbWVudGVkIGJlZ2lubmluZyBvZiBHZXRBc3luY0tleVN0YXRlLgoKV2VkIE1heSAyNSAyMzozNTowMyAxOTk0ICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgogICAgICAgICogW29iamVjdHMvbWV0YWZpbGUuY10gW2luY2x1ZGUvbWV0YWZpbGUuaF0KICAgICAgICAgIFt3aW5kb3dzL21hcHBpbmcuY10gW29iamVjdHMvY2xpcHBpbmcuY10gW29iamVjdHMvYml0Ymx0LmNdCiAgICAgICAgICBbd2luZG93cy9kYy5jXQogICAgICAgIEZ1cnRoZXIgbWV0YWZpbGUgc3VwcG9ydC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTW9uIE1heSAyMyAxNTowNzozNiAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJQWxsb2NhdGUgaGVhcCBhbmQgc3RhY2sgc2VnbWVudHMgYXMgNjRrLgoKU2F0IE1heSAyMSAwMToxNTo0OSAxOTk0ICBSaWNrIFNsYWRrZXkgIChqcnNAd29ybGQuc3RkLmNvbSkKCiAgICAgICAgKiBbbG9hZGVyL3NlbGVjdG9yLmNdCiAgICAgICAgQ29ycmVjdCB0eXBvcyB3aGVyZSBtZW1jcHkgaXMgdXNlZCBpbnN0ZWFkIG9mIG1lbXNldC4KCiAgICAgICAgKiBbbG9hZGVyL3Jlc291cmNlLmNdCiAgICAgICAgQWxsb3cgZm9yIGxlZ2l0aW1hdGUgY2FzZXMgd2hlcmUgYmlTaXplSW1hZ2UgaXMgMCBpbiBMb2FkSWNvbgogICAgICAgIGJ5IGNhbGN1bGF0aW5nIHRoZSB2YWx1ZSB3aGVuIHRoZSBiaXRtYXAgaXMgbm90IGNvbXByZXNzZWQuCgogICAgICAgICogW21pc2NlbXUvaW50MjEuY10KICAgICAgICBGaXggTlVMTCBkZXJlZmVyZW5jZSBjYXVzZWQgYnkgc3VwZXJmbHVvdXMgRE9TX2Nsb3NlZGlyIGluIEZpbmROZXh0LgoKICAgICAgICAqIFtsb2FkZXIvcmVzb3VyY2UuY10KICAgICAgICBOZXcgZnVuY3Rpb24gdHlwZV9tYXRjaCB0byBoYW5kbGUgc3RyaW5nIHJlc291cmNlIHR5cGVzIGFzCiAgICAgICAgd2VsbCBhcyBJRHMuICBJbiBhZGRpdGlvbiwgY29tcGFyZSBvbmx5IGxvdyA0IGJpdHMgb2YgdHlwZV9pZAogICAgICAgIHdoZW4gYm90aCBudW1iZXJzIGFyZSBJRHMgc28gdGhhdCAweDAwMDIgbWF0Y2hlcyAweDgwMDIuCiAgICAgICAgSW4gRmluZFJlc291cmNlQnlOdW1iZXIgYW5kIEZpbmRSZXNvdXJjZUJ5TmFtZSB1c2UgdHlwZV9tYXRjaAogICAgICAgIGluc3RlYWQgb2YgY29tcGFyaW5nIG51bWJlcnMuICBJbiBGaW5kUmVzb3VyY2UgaGFuZGxlIHRoZQogICAgICAgICIjbnVtYmVyIiBzeW50YXggYW5kIGVtcHR5IHN0cmluZ3MgaW4gYm90aCB0aGUgcmVzb3VyY2UgYW5kCiAgICAgICAgdHlwZSBuYW1lcy4KCk1vbiBNYXkgMjMgMDA6NDg6MjUgMTk5NCAgUmljayBTbGFka2V5ICAoanJzQHdvcmxkLnN0ZC5jb20pCgogICAgICAgICogW3dpbmRvd3MvZGlhbG9nLmNdCiAgICAgICAgRml4IGluYWR2ZXJ0ZW50IHByaW50aW5nIG9mIHN0cmluZyBJRHMgYXMgc3RyaW5ncy4KCk1heSAyMywgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL21lbnUuY10KCU5ldyBmdW5jdGlvbnMgR2V0TWVudUl0ZW1Db3VudCgpLCBHZXRNZW51SXRlbUlEKCkuCgkJR2V0TWVudVN0cmluZygpICYgSGlsaXRlTWVudUl0ZW0oKS4KCUJ1ZyBmaXggaW4gQ2hlY2tNZW51SXRlbSgpLgoJRnVuY3Rpb24gU2V0TWVudSgpIG5vdyBtYWtlIGNsaWVudCBhcmVhIHJlY2FsYyBpZiBtZW51IHJlbW92ZWQuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUJ1ZyBmaXggaW4gU2V0V2luZG93UG9zKCksIG5vIG1vcmUgWE1hcHBpbmcgb3IgWENvbmZpZ3VyaW5nCW9mCgkJd2luZG93cyB3aXRoIGluaXRpYWwgd2lkdGggb3IgaGVpZ2h0IGVxdWFsIHplcm8uCgoJKiBbb2JqZWN0cy9nZGlvYmouY10KCU5ldyBmdW5jdGlvbiBFbnVtT2JqZWN0cygpLCB1c2luZyBuZXcgbHBQZW5CcnVzaExpc3QgYnVpbGR1cAoJCWZyb20gY2FsbHMgdG8gbmV3IGZ1bmN0aW9uIEdESV9BcHBlbmRUb1BlbkJydXNoTGlzdCgpLgoJCSgncGJydXNoLmV4ZScgZG9uJ3Qgc2hvdyBpdHMgZmFjZSB5ZXQgISAuLi4gOi0oICkKCU5ldyBFTVBUWSBTVFVCIGZvciBmdW5jdGlvbiBTZXRPYmplY3RPd25lcigpLAoJCSgnbXBsYXllci5leGUnIGNhbGwgaXQgdmlhIEdldFByb2NBZGRyZXNzKCkgLi4uKQoKCSogW29iamVjdHMvZm9udC5jXQoJTmV3IGludGVybmFsIGZ1bmN0aW9ucyBQYXJzZUZvbnRQYXJtcygpICYgSW5pdEZvbnRzTGlzdCgpLgoJRW51bUZvbnRzKCkgJiBFbnVtRm9udEZhbWlsaWVzKCkgZW51bWVyYXRlcyBmb250cyAobm8gbW9yZSBkdW1taWVzKS4KCUZPTlRfTWF0Y2hGb250IG5vdyBtYWtlIHJldHJpZXMgdG8gZmluZCBjbG9zZXN0LXNtYWxsZXN0IGZvbnQuCgkJKCdjaGFybWFwLmV4ZScgY2FuIG5vdyBzaG93IHRoZSBkaWZmZXJlbnRzIGZvbnRzIGF2YWlsYWJsZSkKCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJVXNlIHNtYWxsIGRvcyBPQk1fT0xEX0NMT1NFIGJ1dHRvbiBmb3IgTURJIHdpbmRvd3MuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXSBbb2JqZWN0cy9iaXRtYXAuY10KCVN0YXJ0IHRvIHJlbW92ZSBvYnNvbGV0ZSBnbG9iYWxzIHN1Y2ggWFRfc2NyZWVuIC4uLgoKCSogW2xvYWRlci9saWJyYXJ5LmNdCglNYWtlIGZ1bmN0aW9uIEdldFByb2NBZGRyZXNzKCkgd29ya2luZyBhbHNvIHdpdGggYnVpbHRpbiBETExzLgoKVHVlIE1heSAyNCAyMDoxODowMiAxOTk0ICBFcmlrIEJvcyAoZXJpa0BoYWNrdGljLm5sKQoKICAgICAgICAqIFtpZjE2MzIvc3lzdGVtLnNwZWNdIFtpZjE2MzIvdG9vbGhlbHAuc3BlY10KICAgICAgICBzeXN0ZW0uZGxsICYgdG9vbGhlbHAuZGxsIGFkZGVkLgoKICAgICAgICAqIFtsb2FkZXIvbGlicmFyeS5jXQogICAgICAgIE1vZGlmaWVkIEdldE1vZHVsZUZpbGVOYW1lKCkgdG8gcmV0dXJuIHRoZSBmdWxsCiAgICAgICAgZmlsZW5hbWUuCiAgICAgICAgQWRkZWQgYSBjaGVjayB0byBMb2FkTGlicmFyeSgpIHRvIHByZXZlbnQgbG9hZGluZwogICAgICAgIGJ1aWx0IGluIGRsbHMuIChlZy4gdXNlci5leGUpCiAgICAgICAgQWRkZWQgYSBjaGVjayB0byBGcmVlTGlicmFyeSgpIHRvIHByZXZlbnQgYnVpbHQtaW4KICAgICAgICBkbGxzIGZyb20gYmVpbmcgZnJlZWQuCiAgICAgICAgTW9kaWZpZWQgR2V0UHJvY0FkZHJlc3MoKSB0byBzdXBwb3J0IGJ1aWx0aW4gZGxscy4KCiAgICAgICAgKiBbbG9hZGVyL3NpZ25hbC5jXSBbbWlzY2VtdS9pbnQyZi5jXQogICAgICAgIEFkZGVkID0+IHBpZmVkaXQgcnVucy4KCiAgICAgICAgKiBbbWlzYy9kb3NfZnMuY10KICAgICAgICBBZGRlZCBhIE5VTEwtcHRyIGNoZWNrIHRvIERPU19jbG9zZWRpcigpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgTWF5IDE3IDIzOjAzOjE2IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbd2luZG93cy9kY2UuY10KCUZpeGVkIGJ1ZyB3aXRoIGRjZSBpbml0aWFsaXphdGlvbiB0aGF0IHdhcyBjYXVzaW5nIGRpYWxvZyBib3hlcyB0byBub3QKCWJlIGRpc3BsYXllZC4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCUJldHRlciBmaXggZm9yIGJ1ZyBmb3VuZCBieSBNYXJ0aW4uCgpTYXQgTWF5IDE0IDE5OjQ4OjM5IDE5OTQgIFJpY2sgU2xhZGtleSAgKGpyc0B3b3JsZC5zdGQuY29tKQoKICAgICAgICAqIFsgbWVtb3J5L2hlYXAuYyBdCiAgICAgICAgUmVkaXJlY3QgSEVBUF9SZUFsbG9jIGNhbGxzIHdpdGggTlVMTCBhcmd1bWVudCB0byBIRUFQX0FsbG9jLgoKTWF5IDE2LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbb2JqZWN0cy9mb250LmNdCglNYWtlIEVudW1Gb250cygpIGNhbGxpbmcgYSBjYWxsYmFjayB3aXRoIGR1bW15IGZvbnRzIC4uLiA6LSkKCgkqIFtvYmplY3RzL3RleHQuY10KCUFkZCBFbXB0eSBTdHViIGZvciBFeHRUZXh0T3V0KCksIHdoaWNoIHRlbXBvcmFyZWx5IGNhbGwgVGV4dG91dCgpLgoKCSogW2lmMTYzMi9jYWxsYmFjay5jXQoJVGVtcG9yYXJlbHkgZ28gYXJvdW5kIGJ1ZyBpbiBDYWxsV2luZG93UHJvYygpLCB5b3Ugd2lsbCBzZWUgcHJpbnRmcy4KCgkqIFtjb250cm9scy9lZGl0LmNdCglNYWtlIEVESVQgY29udHJvbHMgZm9jdXNlZCBieSBhIG1vdXNlIGNsaWNrLgoKCSogW21pc2MvcHJvcGVydHkuY10KCUJ1ZyBGaXggaW4gZnVuY3Rpb24gRW51bVByb3BzKCksIGJldHRlciB1c2Ugb2YgQ2FsbEJhY2sxNigpLgoKCSogW21pc2MvbW1zeXN0ZW0uY10KCUJhc2ljIFNrZWx0b24ncyBmb3IgTUNJIG1lc3NhZ2VzIGRpc3BhdGNoaW5nIGZ1bmN0aW9uLgoKU3VuIE1heSAxNSAxNjoxNToxNyAxOTk0ICBFcmlrIEJvcyAoZXJpa0BoYWNrdGljLm5sKQoKICAgICAgICAqIFt3aW5kb3dzL3V0aWxpdHkuY10KICAgICAgICBBZGRlZCB3aW5kb3dzX3dzcHJpbnRmKCkgZm9yIHRoZSBlbXVsYXRvciwgd3NwcmludGYoKSBpcwogICAgICAgIGZvciBsaWJ3aW5lLgoKU2F0IE1heSAxNCAyMjoxNjo0MCAxOTk0ICBSaWNrIFNsYWRrZXkgIChqcnNAd29ybGQuc3RkLmNvbSkKCiAgICAgICAgKiBbbWlzYy9jdXJzb3IuY10KICAgICAgICBGaXggcG9pbnRlciBwcm9ibGVtcyBpbiBMb2FkQ3Vyc29yIGxlYWRpbmcgdG8gaGVhcCBjb3JydXB0aW9uLgoKICAgICAgICAqICBbIGNvbnRyb2xzL21lbnUuYyBdCiAgICAgICAgRml4IHR3byBOVUxMIGRlcmVmZXJlbmNpbmcgYnVncy4KClN1biBNYXkgMTUgMjA6MDc6NDggMTk5NCAgUmljayBTbGFka2V5ICAoanJzQHdvcmxkLnN0ZC5jb20pCgogICAgICAgICogW29iamVjdHMvZm9udC5jXQogICAgICAgIEZpeCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2luZyBidWcgaW4gR2V0Q2hhcldpZHRoLgoKICAgICAgICAqIFtsb2FkZXIvcmVzb3VyY2UuY10KICAgICAgICBGaXggdW5kZXItYWxsb2NhdGlvbiBvZiBtZW1vcnkgaW4gTG9hZEFjY2VsZXJhdG9ycy4KCiAgICAgICAgKiBbd2luZG93cy9jbGFzcy5jXQogICAgICAgIElnbm9yZSBuZWdhdGl2ZSBzaXplcyBmb3IgZXh0cmEgZmllbGRzIGluIFJlZ2lzdGVyQ2xhc3MuCgpTdW4gTWF5IDE1IDA2OjM1OjAzIDE5OTQgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCiAgICAgICAgKiBbb2JqZWN0cy9tZXRhZmlsZS5jXSBbaW5jbHVkZS9tZXRhZmlsZS5oXSBbaW5jbHVkZS93aW5kb3dzLmhdCiAgICAgICAgICBbb2JqZWN0cy9nZGlvYmouY10gW29iamVjdHMvYnJ1c2guY10gW29iamVjdHMvcGVuLmNdCiAgICAgICAgICBbb2JqZWN0cy90ZXh0LmNdIFtvYmplY3RzL2RjdmFsdWVzLmNdIFt3aW5kb3dzL2dyYXBoaWNzLmNdCiAgICAgICAgICBbd2luZG93cy9kYy5jXSBbd2luZG93cy9tYXBwaW5nLmNdCiAgICAgICAgQmVnaW5uaW5ncyBvZiBtZXRhZmlsZSBzdXBwb3J0LgoKICAgICAgICAqIFttaXNjL2ZpbGUuY10KICAgICAgICBDb3JyZWN0ZWQgc3BlbGxpbmcgb2YgX2xjcmVhdC4KCiAgICAgICAgKiBbY29udHJvbHMvZWRpdC5jXQogICAgICAgIE1pbm9yIGJ1ZyBmaXhlcy4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNYXkgOSwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJTWFrZSB0aHVtYnRyYWNrIGJ1dHRvbiBkaXNhcHBlYXIgaWYgc2Nyb2xsIGJveCByYXRpbyA8IDM6MS4KCU1ha2UgYXJyb3cgYnV0dG9ucyByZWN0YW5ndWxhciBpZiBzY3JvbGwgYm94IHJhdGlvIDwgMjoxLgoJQWRkIGNvZGUgZm9yIFNCU19UT1BBTElHTiwgU0JTX0JPVFRPTUFMSUdOLCAKCQkJCVNCU19MRUZUQUxJR04gJiBTQlNfUklHSFRBTElHTi4KCUJ1ZyBmaXggaW4gTkNfQ3JlYXRlU2Nyb2xsQmFycygpLCBubyBtb3JlIGJpZ2J1dHQgaW4gY2FsZW5kYXIuZXhlLi4uIDotKQoKCSogW2xvYWRlci9saWJyYXJ5LmNdIFtsb2FkZXIvdGFzay5jXSBbbWlzYy9leGVjLmNdCglDb250aW51ZSBwbGF5aW5nIGFyb3VuZCB0cnlpbmcgdG8gZ2V0IGEgc2Vjb25kIHRhc2sgcnVubmluZy4KCgkqIFt3aW5kb3dzL21kaS5jXQoJQ2hhbmdlIE9CTV9DTE9TRSBmb3IgT0JNX09MRF9DTE9TRSwgYSBzbWFsbGVyIGRvdCBidXR0b24gd2hlbiBtYXhpbWl6ZWQuCgoJKiBbZXZlcnl3aGVyZV0KCUFkZGluZyBwcmV2aW91cyB3b3JrcyBvZiB0aGUgQXByIDI1LCA5NC4KClR1ZSBNYXkgMTAgMTg6MDk6MTQgMTk5NCBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW2lmMTYzMi9tbXN5c3RlbS5zcGVjXSBbbWlzYy9tbXN5c3RlbS5jXSBbaW5jbHVkZS9tbXN5c3RlbS5oXQoJQWRkZWQgTWFydGluJ3MgbW1zeXN0ZW0uZGxsIHN0dWJzLgoKCSogW21pc2Mvc291bmQuY10KCUFkZGVkIHJlbWFpbmluZyBzdHVicyBmb3Igc291bmQuZGxsLgoKCSogW2lmMTYzMi9zaGVsbC5zcGVjXSBbbWlzYy9zaGVsbC5jXQoJRml4ZWQgcHJvdG90eXBlcyAoSSBmb3VuZCB0aGVtIGluIEJDIDQpIGFuZCBhZGRlZCBTaGVsbEFib3V0KCkKCWFuZCBBYm91dERsZ1Byb2MoKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTWF5IDEsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglBZGQgWFVuZ3JhYlBvaW50ZXIoKSAmIFhVbmdyYWJTZXJ2ZXIoKSBpbiB3aW5lX2ZhdWx0KCkuCgpGcmkgQXByIDIyIDE5OjMwOjA4IDE5OTQgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCWNvbG9yX3N0cmV0Y2goKSByZXdyaXR0ZW4gdG8gdXNlIGludHMgb25seS4gKmZhc3QhKgoJQkxBQ0tPTldISVRFICYgV0hJVEVPTkJMQUNLIHN0cmV0Y2htb2RlcyByZWRpcmVjdGVkIHRvCgl1c2UgY29sb3Jfc3RyZXRjaCgpLgoKTW9uIE1heSAgMiAyMTozOTo0MyAxOTk0ICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW2NvbnRyb2xzL21lbnUuY10KCVNldFN5c01lbnUoKSBhZGRlZC4KCgkqIFttaXNjL2N1cnNvci5jXQoJR2V0Q3Vyc29yKCkgYWRkZWQuCgoJKiBbbWlzYy9tYWluLmNdCglTd2FwTW91c2VCdXR0b24oKSBhZGRlZCwgKE5PUCkuCgoJKiBbd2luZG93cy93aW4uY10KCUdldERlc2t0b3BId25kKCkgYWRkZWQuCgoJKiBbaWYxNjMyLypzcGVjXQoJQWRkZWQgbm90IGltcGxlbWVudGVkIGZ1bmN0aW9ucyBkZWZzIGFzIGNvbW1lbnQuCgoJKiBbbWlzYy93aW5zb2NrZXQuY10KCUNoYW5nZSBXU0FHZXRYYnlZKCkgZnVuY3Rpb25zIHRvIG5vbi1ibG9ja2luZyBvbmVzLAoJQWRkZWQgV1NBQXN5bmNTZWxlY3QoKS4gCgkoV1NBIGZ1bmN0aW9ucyBjYW4ndCBiZSBjYW5jZWxlZCB5ZXQpLgoKV2VkIEFwciAyMCAyMzo1ODo1OCAxOTk0ICBTY290dCBBLiBMYWlyZCAgKHNjb3R0QGN1cmx5KQoKCSogbWlzYy9wcm9maWxlLmM6IEZpeGVkIGJ1ZyB3aXRoIEdldEluaUZpbGVOYW1lIHJldHVybmluZyB3cm9uZwoJcGF0aCB3aGVuIGdpdmVuIGEgc2ltcGxlIGZpbGUgbmFtZS4gIEZpeGVkIEdldFNldFByb2ZpbGUgdG8gYWxsb3cKCWVudW1lcmF0aW5nIGFsbCBrZXkgbmFtZXMgd2hlbiBLZXlOYW1lIGlzIG51bGwuCgpBcHIgMjUsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJQWRkIHByb3RlY3Rpb24gdG8gQml0Qmx0KCkgJiBTdHJldGNoQmx0KCkgZm9yIHdpZHRoIG9yIGhlaWdodCA9IDAuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUF2b2lkIHBhaW50aW5nIGluIE5DX0RvTkNQYWludCgpIGlmIElzV2luZG93VmlzaWJsZSgpLgoJU2ltcGxpZnkgTkNfVHJhY2tNb3VzZU1lbnVCYXIoKSBiZWNhdXNlIGNvZGUgbW92ZWQgdG8gTWVudUZvY3VzTG9vcCgpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglDcmVhdGVXaW5kb3dFeCgpICYgRGVzdHJveVdpbmRvdygpIG5vdyBjYWxsIHJlc3BlY3RpdmVseQoJCUFkZFdpbmRvd1RvVGFzaygpICYgUmVtb3ZlV2luZG93RnJvbVRhc2soKS4KCU5ldyBlbXB0eSBzdHViIGZvciBmdW5jdGlvbiBBbnlQb3B1cCgpLgoKCSogW2xvYWRlci9saWJyYXJ5LmNdCglCdWcgRml4IDogR2V0TW9kdWxlRmlsZU5hbWUoKSBub3cgcmV0dXJuIGZ1bGwgcGF0aCBmaWxlbmFtZS4KCgkqIFtpbmNsdWRlL21lbnUuaF0gW2NvbnRyb2xzL21lbnUuY10KCUFkZCBoVGV4dCBoYW5kbGUgYW5kIHJlbW92ZSBvYnNvbGV0ZSBNRU5VSVRFTSBzdHJ1Y3QgbWVtYmVycy4KCUFkZCBhIFJlbGVhc2VDYXB0dXJlKCkgaW4gU2V0TWVudSgpIHdoZW4gbWVudWJhciBjaGFuZ2VkIHdoaWxlIGNhcHR1cmVkLgoJQWRkIE1lbnVNb3VzZU1vdmUoKSBNZW51QnV0dG9uVXAoKSBpbiBmdW5jdGlvbiBNZW51Rm9jdXNMb29wKCkuCgoJKiBbbWlzYy9maWxlLmNdCglHZXRUZW1wRmlsZW5hbWUoKSBub3cgY3JlYXRlIGEgZmlsZS4KCV9sY3JlYXRlKCkgdXNlIHVuaXggb3BlbiAobmFtZSwgbW9kZSwgcGVybSksIHdpdGggcGVybT1PNjY2LgoKCSogW2lmMTYzMi9yZWxheS5jXQoJUmVtb3ZlIHRlbXBvcmFybHkgYnVpbHRpbiBTSEVMTC5ETEwsIEFkZCBNTVNZU1RFTS5ETEwgaW4gYnVpbHRpbiBsaXN0LgoKCSogTmV3IGZpbGUgW21pc2MvbW1zeXN0ZW0uY10KCSogTmV3IGZpbGUgW2luY2x1ZGUvbW1zeXN0ZW0uaF0KCSogTmV3IGZpbGUgW2lmMTYzMi9tbXN5c3RlbS5zcGVjXQoJTWFueSwgbWFueSBlbXB0eSBzdHVicyAuLi4gOi0pCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpXZWQgQXByIDIwIDE0OjUzOjM1IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbdG9vbHMvYnVpbGQuY10gW2lmMTYzMi9jYWxsLlNdIFtpZjE2MzIvSW1ha2VmaWxlXQoJRml4ZWQgYnVnIGZvciBub24tTGludXggc3lzdGVtcy4KCkFwciAxOCwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW3dpbmRvd3Mvd2luLmNdCglCdWcgZml4ZWQgaW4gQ3JlYXRlV2luZG93RXgoKSA6IE5vdyB1c2UgU2V0TWVudSgpIGZvciBtZW51YmFyIHNldHVwLgoJTmV3IGVtcHR5IHN0dWIgZm9yIGZ1bmN0aW9uIFNldFN5c01vZGFsV2luZG93KCkuCgoJKiBbbWlzYy9leGVjLmNdCglOZXcgZW1wdHkgc3R1YiBmb3IgZnVuY3Rpb24gRXhpdFdpbmRvd3MoKS4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCU5ldyBlbXB0eSBzdHViIGZvciBmdW5jdGlvbiBFbnVtRm9udHMoKS4KCgkqIE5ldyBmaWxlIFttaXNjL3Byb3BlcnR5LmNdCglOZXcgZnVuY3Rpb25zIFJlbW92ZVByb3AoKSwgR2V0UHJvcCgpLCBTZXRQcm9wKCkgJiBFbnVtUHJvcHMoKS4KCgkqIE5ldyBmaWxlIFttaXNjL3NoZWxsLmNdCglOZXcgZW1wdHkgc3R1YnMgZm9yIGZ1bmN0aW9uIFJlZ2lzdGVyU2hlbGxQcm9jKCksIAoJCQlTaGVsbEV4ZWN1dGUoKSAmIFNoZWxsUHJvYygpLgoKCSogTmV3IGZpbGVzIFtsb2FkZXIvdGFzay5jXSAmIFtpbmNsdWRlL3Rhc2suaF0KCU1vdmUgZnVuY3Rpb25zIEdldFdpbmRvd1Rhc2soKSwgR2V0TnVtVGFzaygpLCBFbnVtVGFza1dpbmRvd3MoKQoJCWZyb20gJ2xvYWRlci9saWJyYXJ5LmMnLgoKCSogW2lmMTYzMi91c2VyLmNdIFtpZjE2MzIva2VybmVsLmNdCglQdXQgQXRvbXMgZnVuY3Rpb25zIGVudHJpZXMuCgoJKiBbY29udHJvbHMvY29tYm8uY10KCU5ldyBmdW5jdGlvbnMgRGlyRGxnU2VsZWN0Q29tYm9Cb3goKSAmIERpckRsZ0xpc3RDb21ib0JveCgpLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCU5ldyBmdW5jdGlvbnMgRGlyRGxnU2VsZWN0KCkgJiBEaXJEbGdMaXN0KCkuCgpTdW4gQXByIDE3IDIwOjU3OjU5IDE5OTQgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbb2JqZWN0cy90ZXN0LmNdCglHcmF5U3RyaW5nKCkgYWRkZWQuCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglDYWxsR3JheVN0cmluZ1Byb2MoKSBhZGRlZC4KCgkqIFtpZjE2MzIvcmVsYXkuY10gW2lmMTYzMi9tbXN5c3RlbS5zcGVjXQoJQWRkZWQuCgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbaWYxNjMyL3VzZXIuc3BlY10KCUFkZGVkIGZvcmdvdHRlbiBzcGVjcyBmb3IgYXRvbSBmdW5jdGlvbnMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBBcHIgMTIgMDA6MDU6MzEgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIG1pc2Mvc3B5LmMgKFNweUluaXQpOiBBZGRlZCBtb3JlIG1lc3NhZ2UgdHlwZXMKCgkqIFt3aW5kb3dzL21kaS5jXSBbaW5jbHVkZS9tZGkuaF0KCU1heGltaXppbmcgYW5kIHJlc3RvcmluZyBjaGlsZCB3aW5kb3dzLgoJVGlsaW5nIG9mIGNoaWxkIHdpbmRvd3MuCgpNb24gQXByIDExIDIwOjQ4OjI4IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJUmV2ZXJ0IGZvY3VzIGFuZCBhY3RpdmF0aW9uIHRvIHByZXZpb3VzIHdpbmRvdyB3aGVuIGhpZGluZyBhIHdpbmRvdy4KCgkqIFt3aW5kb3dzL3N5c2NvbG9yLmNdCglJbXBsZW1lbnRlZCBzeXN0ZW0gY29sb3Igb2JqZWN0cyAoYnJ1c2hlcyBhbmQgcGVucyBjcmVhdGVkIGF0CglTZXRTeXNDb2xvcigpIHRpbWUgZm9yIGJldHRlciBwZXJmb3JtYW5jZSkuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXSBbd2luZG93cy9ub25jbGllbnQuY10gW2NvbnRyb2xzL2J1dHRvbi5jXQoJQ2hhbmdlZCBwYWludGluZyBjb2RlIHRvIHVzZSBzeXN0ZW0gY29sb3Igb2JqZWN0cy4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCU5ldyBmdW5jdGlvbiBNU0dfSW50ZXJuYWxHZXRNZXNzYWdlKCkgZm9yIGludGVybmFsIG1lc3NhZ2VzCglsb29wcyAoZS5nLiBmb3IgZGlhbG9ncyBvciBtZW51cykuCgoJKiBbd2luZG93cy9ob29rLmNdIFtpbmNsdWRlL2hvb2suaF0gIChOZXcgZmlsZXMpCglCZWdpbm5pbmcgb2YgdGhlIHdpbmRvdyBob29rcyBpbXBsZW1lbnRhdGlvbi4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJVXNlIG5ldyBmdW5jdGlvbiBNU0dfSW50ZXJuYWxHZXRNZXNzYWdlKCkgaW4gRGlhbG9nQm94KCkuCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglBZGRlZCBmdW5jdGlvbiBDYWxsSG9va1Byb2MoKS4KCkFwciAxMSwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUJ1ZyBmaXggOiBXTV9DSEFScyBhcmUgc2VudCB0byBmb2N1c2VkIHdpbmRvdyBsaWtlIFdNX0tFWT8/Py4KCgkqIFttaXNjL2V4ZWMuY10KCU5vdGhpbmcgbXVjaCBtb3JlIHRoYW4gYSBzdHViIGZvciBMb2FkTW9kdWxlKCksIEkgc2F3IHRoZXJlIGEgbG90CgkJdG8gYmUgZG9uZSBpbiB0aGF0IGNvcm5lciwgSSB3aWxsIGNvbWUgYmFjayBsYXRlciAuLi4KCgkqIFtsb2FkZXIvbGlicmFyeS5jXQoJTmV3IGZ1bmN0aW9ucyBHZXRXaW5kb3dUYXNrKCksIEdldE51bVRhc2soKSwgRW51bVRhc2tXaW5kb3dzKCkgCgkJCWFuZCBhc3NvY2lhdGVkIG1vZHVsZXMgJiB0YXNrcyBsaW5rZWQtbGlzdHMuCgkoaXQncyBvbmx5IGFuICdlbWVyZ2luZyBidWQnLCBtb3JlIHRvIGNvbWUgbmV4dCB3ZWVrcykuCgoJKiBbbG9hZGVyL3dpbmUuY10KCVVzZSBMb2FkTGlicmFyeSgpIGluc3RlYWQgb2YgTG9hZEltYWdlKCkgZm9yICdzeXNyZXMuZGxsJy4KCgkqIFtjb250cm9sL21lbnUuY10KCVlvdSBjYW4gbm93IGNsaWNrIG91dHNpZGUgbWVudSByZWdpb24gd2l0aG91dCBwcm9ibGVtLgoJS2V5Ym9hcmQgbmF2aWcgbW9yZSBzbW9vdGx5LCBldmVuIGlmIGEgY2hpbGQgaGFzIHRoZSBmb2N1cy4KCUJ1ZyBmaXggaW4gSW5zZXJ0SXRlbSgpLCAoYmFkIGxpbmtsaXN0IHdoZW4gaW5zZXJ0IHBvaW50IG5vdCBmb3VuZCkuCgljaGFuZ2UgUmVhbGxvYyBmb3IgRnJlZSAmIEFsbG9jIGluIE1vZGlmeUl0ZW0oKS4KCU1GX1NUUklORyBub3cgc2V0IEJMQUNLX1BFTiB0byBmaXggYnVnIG9mIGJhZCBjb2xvciBvZiB0aGUgdW5kZXJzY29yZXMgCgkJZG9uZSBieSBEcmF3VGV4dCgpLCAobWF5YmUgaXQgc2hvdWxkIGRvbmUgaW4gRHJhd1RleHQoKSBpdHNlbGYgPykuCgpTdW4gQXByIDEwIDE0OjA2OjA4IDE5OTQgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbbWlzYy9wcm9maWxlLmNdCgkuSU5JIGZpbGVzIHdpbGwgbm93IGJlIHN0b3JlZCBpbiAvIGxvYWRlZCBmcm9tIHRoZSB3aW5kb3dzIGRpcgoJaWYgbm8gcGF0aCBpcyBzdXBwbGllZC4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdCglGaXhlZCBHZXREcml2ZVR5cGUncyBwcm90b3R5cGUuCgoJKiBbaWYxNjMyL3dpbnNvY2suc3BlY10gW2luY2x1ZGUvd2luc29jay5oXSBbbWlzYy93aW5zb2NrZXQuY10KCUZpeGVkIHByb3RvdHlwZXM6IHdpbnNvY2sgdXNlcyBhIHdvcmQgYXMgc29ja2V0IGhhbmRsZSBub3QgYW4gaW50LgoKCSogW21pc2Mvd2luc29ja2V0LmNdCglBZGRlZCBoZWFwIGFsbG9jYXRpb24gZm9yIHJldHVybmVkIHN0cnVjdHVyZXMuCglBZGRlZCBub24tYmxvY2tpbmcgV1NBQXN5bmNHZXRYYnlZKCkgZnVuY3Rpb25zIGFzIGJsb2NraW5nIG9uZXMuCgoJKiBbbG9hZGVyL3dpbmUuY10KCUFkZGVkIElzRExMTG9hZGVkKCksIHVzZWQgaW4gTG9hZEltYWdlKCkgdG8gcHJldmVudCBsb2FkaW5nCglhIGRsbCBtdWx0aXBsZSB0aW1lcy4KCURpcmVjdG9yeSBpcyBhZGRlZCB0byB3aW5lJ3MgcGF0aCB3aGVuIGEgZnVsbHBhdGggaXMgc3VwcGxpZWQgd2hlbgoJc3RhcnRpbmcgd2luZS4KCUxvYWRJbWFnZSgpOiBETEwgZmlsZW5hbWUgdXNlZCBpbnN0ZWFkIERMTCdzIG93biBpbnRlcm5hbCBuYW1lLAoJZml4ZXMgJ0JhZCBETEwgbmFtZScgZXJyb3JzLgoKU2F0IEFwciAgOSAwODoyNjowMyAxOTk0ICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgoJKiBbY29udHJvbHMvZWRpdC5jXSBbY29udHJvbHMvd2lkZ2V0cy5jXQoJRmlyc3QgcmVsZWFzZSBvZiBlZGl0IGNvbnRyb2wuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBBcHIgIDUgMTQ6MzY6NTkgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFtpbmNsdWRlL21kaS5oXSBbd2luZG93cy9tZGkuY10KCVVzZSBXTV9QQVJFTlROT1RJRlkgbWVzc2FnZXMgdG8gYWN0aXZhdGUgY2hpbGRyZW4uCglHZW5lcmF0ZSBXTV9DSElMREFDVElWQVRFIG1lc3NhZ2VzLgoJQmVnaW5uaW5ncyBoYW5kbGVyIGZvciBtYXhtaXplZCBjaGlsZCB3aW5kb3cuCglDbGVhbiB1cCB3aGVuIGNoaWxkcmVuIGFyZSBkZXN0cm95ZWQuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbd2luZG93cy93aW5wb3MuY10KCVJlbW92ZWQgY29kZSBhZGQgOTQvMDMvMjYuCgpBcHIgNCwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2wvbWVudS5jXQoJTWFrZSBtb3VzZSBtZW51IG5hdmlnYXRpb24gd29ya2luZyBhZ2Fpbi4gOi0pKQoJKGJlIGNhcmVmdWxsLCBjbGlja2luZyBvdXRzaWRlIG1lbnVzIChpZS46IGNsaWVudHJlY3QpIAoJbm90IHJlc29sdmVkIHlldCkKCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXSAgW2NvbnRyb2xzL3Njcm9sbC5jXQoJQnVncyBmaXggaW4gTkNUcmFja1Njcm9sbEJhcnMoKS4KCgkqIFttaXNjL2Rvc19mcy5jXQoJQnVnIGZpeCBpbiAnVG9Eb3MoKScgaW4gY29udmVyc2lvbiBmb3IgJy8nLAoJCShleGFtcGxlOiAnL3dpbmRvdy8nIHdhcyB0cmFuc2xhdGVkIHRvICdXSU5ET1dzJykuCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJRnVuY3Rpb24gQ2hhbmdlRGlyKCkgZXh0cmFjdCBwb3NzaWJsZSBkcml2ZSBiZWZvcmUgRE9TX0NoYW5nZURpcigpLgoKCSogW2xvYWRlci9saWJyYXJ5LmNdICBbbG9hZGVyL3dpbmUuY10KCVBsYXlpbmcgYXJvdW5kIG1vdmluZyBmdW5jdGlvbiBHZXRQcm9jQWRkcmVzcygpIGFuZCBwdXQgc29tZSBjb2RlIGluLgoKTW9uIEFwciAgNCAyMTozOTowNyAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFttaXNjL21haW4uY10KCUJldHRlciBleHBsYW5hdGlvbiBvZiBjb21tYW5kLWxpbmUgb3B0aW9ucy4KCgkqIFtvYmplY3RzL2RpYi5jXQoJSW1wbGVtZW50ZWQgU2V0RElCaXRzVG9EZXZpY2UoKS4KCgkqIFt3aW5kb3dzL2RjLmNdCglCdWcgZml4IGluIFNldERDU3RhdGUoKS4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglSZW1vdmVkIFdTX0RJU0FCTEVEIGhhbmRsaW5nIChub3cgZG9uZSBpbiBtZXNzYWdlLmMpLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJQWRkZWQgc2VuZGluZyBhIFdNX1BBUkVOVE5PVElGWSBtZXNzYWdlIGluIE1TR19UcmFuc2xhdGVNb3VzZU1zZygpLgoJVXNlIFdpbmRvd0Zyb21Qb2ludCgpIHRvIGZpbmQgdGhlIHdpbmRvdyBmb3IgbW91c2UgZXZlbnRzLCB0YWtpbmcKCWludG8gYWNjb3VudCBkaXNhYmxlZCB3aW5kb3dzLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUJ1ZyBmaXggaW4gQmVnaW5QYWludCgpIHRvIGFsbG93IGNhbGxpbmcgaXQgYXQgb3RoZXIgdGltZXMgdGhhbgoJb24gV01fUEFJTlQgKFNvbGl0YWlyZSBuZWVkcyBpdC4uLikKCgkqIFt3aW5kb3dzL3dpbi5jXQoJSW1wbGVtZW50ZWQgRmluZFdpbmRvdygpLgoJUmV3cml0dGVuIEVuYWJsZVdpbmRvdygpIHRvIGJlaGF2ZSBtb3JlIGxpa2UgV2luZG93cy4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJUmV3cml0dGVuIFdpbmRvd0Zyb21Qb2ludCgpIHRvIGFsc28gc2VhcmNoIGNoaWxkIHdpbmRvd3MuCgpNb24gQXByICA0IDE3OjM2OjMyIDE5OTQgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbaW5jbHVkZS9pbnQyMS5oXSAtPiBbbXNkb3MuaF0KCXJlbmFtZWQuCgoJKiBbbWlzY2VtdS9pbnQxMC5oXSBbbWlzY2VtdS9pbnQyNS5oXSBbbWlzY2VtdS9pbnQyNi5oXSAKCW5ldywgYWRkZWQgZm9yIGludCAxMCwgMjUgYW5kIDI2LgoKCSogW21pc2NlbXUvaW9wb3J0cy5jXQoJbmV3LCBhZGRlZCB0byBhbGxvdyB3aW4gYXBwcyB0byB1c2UgaW9wb3J0cy4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglBZGRlZCBzdXBwb3J0IGZvciBpbiwgaW5iLCBvdXQsIG91dGIgaW5zdHJ1Y3Rpb25zLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTWFyIDI3IDEzOjQwOjI1IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBjb250cm9scy9tZW51LmMgKEluc2VydE1lbnUpOiBDaGFuZ2VkIHRvIHVzZSBGaW5kTWVudUl0ZW0oKS4KClNhdCBNYXIgMjYgMjE6MjM6NTUgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFt3aW5kb3dzL21kaS5jXQoJV2luZG93IGxpc3QgcHJvcGVybHkgdXBkYXRlZC4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUNhbGwgV0lOUE9TX0NoaWxkQWN0aXZhdGUoKSB3aGVuIG1vdXNlIHByZXNzZWQuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCVVzZSBXSU5QT1NfSXNBbkFjdGl2ZVdpbmRvdygpIGluc3RlYWQgb2YgR2V0QWN0aXZlV2luZG93KCkgaW4KCU5DX0hhbmRsZU5DUGFpbnQoKS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQ3JlYXRlZCBmdW5jdGlvbnMgV0lOUE9TX0lzQW5BY3RpdmVXaW5kb3coKSBhbmQgV0lOUE9TX0FjdGl2YXRlQ2hpbGQoKQoKVGh1IE1hciAyNCAxNDo0OToxNyAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogY29udHJvbHMvbWVudS5jIChEZWxldGVNZW51KTogQ2hhbmdlZCB0byB1c2UgRmluZE1lbnVJdGVtCgkoRGVsZXRlTWVudSk6IE1hbnkgYnVnIGZpeGVzLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUNyZWF0ZWQgZnVuY3Rpb24gRmluZE1lbnVJdGVtKCkuCgpUaHUgTWFyIDI0IDE0OjE3OjI0IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbd2luZG93cy93aW4uY10KCVJlbW92ZWQgaW5jb3JyZWN0IE1ESSBoYW5kbGluZyBjb2RlIGZyb20gQ3JlYXRlV2luZG93RXgoKS4KCgkqIFtjb250cm9scy9tZW51LmNdCglNRl9TVFJJTkcgaXRlbXMgbmVlZGVkIHRvIGFsbG9jYXRlIGEgcHJpdmF0ZSBjb3B5IG9mIHN0cmluZy4KCgkqIFtjb250cm9scy9tZW51LmNdCglGaXhlZCBidWdneSBjYWxscyB0byBHbG9iYWxGcmVlKCkuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJRWxpbWluYXRlZCBzb21lIHJlZHVuZGFudCBjb2RlIHdpdGggZnVuY3Rpb24gY2FsbC4KCldlZCBNYXIgMjMgMTk5NCBQZW50dGkgTW9pbGFuZW4gKHBlbnR0aS5tb2lsYW5lbkBudGMubm9raWEuY29tKQoKCSogW3dpbmRvd3MvdGltZXIuY10KCXRpbWVyIGxpc3QgcG9pbnRlcnMgbG9vcGVkIGluIEluc2VydFRpbWVyCgpUdWUgTWFyIDI5IDEzOjMyOjA4IE1FVCBEU1QgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW21pc2MvY3Vyc29yLmNdCglBIGZldyBjaGFuZ2VzIGZvciBkZXNrdG9wIHdpbmRvdyBzdXBwb3J0LgoKCSogW21pc2MvbWFpbi5jXQoJQWRkZWQgLWRlcHRoIG9wdGlvbi4KCgkqIFttaXNjL3JlY3QuY10KCVlldCBhbm90aGVyIGJ1ZyBmaXggaW4gU3VidHJhY3RSZWN0KCkuCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10KCUNoYW5nZXMgdG8gdXNlIG9ubHkgb25lIGRlcHRoIChzcGVjaWZpZWQgd2l0aCAtZGVwdGgpCglmb3IgY29sb3IgYml0bWFwcy4KCgkqIFtvYmplY3RzL2JydXNoLmNdCglBZGRlZCBzdXBwb3J0IGZvciBkaXRoZXJlZCBzb2xpZCBicnVzaGVzLgoKCSogW29iamVjdHMvY29sb3IuY10KCVVzZSB0aGUgc2FtZSAyMCBzeXN0ZW0gY29sb3JzIGFzIGluIFdpbmRvd3MuCglTeXN0ZW0gcGFsZXR0ZSBpbml0aWFsaXNhdGlvbiBub3cgZG9uZSBpbiBDT0xPUl9Jbml0UGFsZXR0ZSgpLgoJQWRkZWQgc3VwcG9ydCBmb3IgYSBjb2xvciBtYXBwaW5nIHRhYmxlIHRvIG1hcCBsb2dpY2FsIGNvbG9yCglpbmRleGVzIHRvIFggY29sb3JtYXAgZW50cmllcy4KCUltcGxlbWVudGVkIEdldE5lYXJlc3RDb2xvcigpIGFuZCBSZWFsaXplRGVmYXVsdFBhbGV0dGUoKS4KCgkqIFtvYmplY3RzL2RpYi5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgY29sb3IgbWFwcGluZyB0YWJsZS4KCgkqIFtvYmplY3RzL2RpdGhlci5jXSAgKE5ldyBmaWxlKQoJSW1wbGVtZW50ZWQgc29saWQgY29sb3IgZGl0aGVyaW5nLgoKCSogW29iamVjdHMvcGFsZXR0ZS5jXQoJSW1wbGVtZW50ZWQgR2V0U3lzdGVtUGFsZXR0ZUVudHJpZXMoKSBhbmQgU2VsZWN0UGFsZXR0ZSgpLgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCU1ha2UgYSBjb3B5IG9mIHRoZSBtZW51IG5hbWUgaW4gUmVnaXN0ZXJDbGFzcygpLgoKCSogW3dpbmRvd3MvZGMuY10KCUZpeGVkIGRldmljZSBjYXBzIHdoZW4gdXNpbmcgYSBkZXNrdG9wIHdpbmRvdy4KCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBjb2xvciBtYXBwaW5nIHRhYmxlIGluIERDcy4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglBZGRlZCBDb25maWd1cmVOb3RpZnkgaGFuZGxlciBvbiBkZXNrdG9wIHdpbmRvdy4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCVJlbW92ZWQgY2FsbCB0byBYVHJhbnNsYXRlQ29vcmRpbmF0ZXMoKSBvbiBldmVyeSBtb3VzZSBtb3Rpb24KCU5ldyBmdW5jdGlvbiBNU0dfU3luY2hyb25pemUoKSB0byBzeW5jaHJvbml6ZSB3aXRoIHRoZSBYIHNlcnZlci4KCgkqIFt3aW5kb3dzL3N5c2NvbG9yLmNdCglSZXdyaXR0ZW4gU1lTQ09MT1JfSW5pdCgpIHRvIHJlYWQgdGhlIHN5c3RlbSBjb2xvcnMgZnJvbSBXSU4uSU5JLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglBZGRlZCBzeW5jaHJvbml6YXRpb24gb24gd2luZG93IG1hcHBpbmcuIFNvbHZlcyB0aGUgZG91YmxlIHJlZHJhdwoJcHJvYmxlbSB3aGVuIHN0YXJ0aW5nIFNvbGl0YWlyZS4KCk1hciAyNywgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2wvbWVudS5jXQkqIFt3aW5kb3dzL2RlZnduZC5jXQoJTWFrZSBrZXlib2FyZCBuYXZpZ2F0aW9uIHdvcmtpbmcgd2l0aCBtZW51YmFyLAoJYnV0IHRlbXBvcmFyZWx5IGluc2VydGVkIGEgYnVnIGluIG1lbnViYXIgbW91c2UgaGFuZGxpbmcgLi4uIDotKCgKCShpdCB3aWxsIGJlIGZpeCBuZXh0IHdlZWsgISkKCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJQ29ubmVjdCBWS19NRU5VIHRvIG1lbnViYXIgbmF2aWdhdGlvbi4KCgkqIFtsb2FkZXIvbGlicmFyeS5jXQoJR2V0TW9kdWxlSGFuZGxlKCkgcmV0dXJuICdmaWN0aXZlIDB4RjAwMCsgaGFuZGxlcycgZm9yIGJ1aWx0LWluIERMTHMuCgpTdW4gTWFyIDIwIDIyOjMyOjEzIDE5OTQgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFttaXNjL21haW4uY10KCUFkZGVkIENvcHkoKS4gQWRkZWQgYSBjaGVjayBmb3IgYC1oJyB0byBzaG93IHVzYWdlLgoKCSogW21pc2MvZG9zX2ZzLmNdCglGaXhlZCBidWcgaW4gRmluZEZpbGUoKSwgdG8gbG9hZCBkaXJlY3RvcmllcyBhcyBkbGxzLgoKCSogW21pc2MvZG9zX2ZzLmNdCglGaXhlZCBUb1VuaXgoKSBhbmQgVG9Eb3MoKSBhZ2FpbiwgYXMgbXkgcHJldmlvdXMgcGF0Y2gKCWRpZG4ndCBtYWtlIGl0LgoKCSogW21pc2MvZG9zX2ZzLmNdIFttaXNjZW11L2ludDIxLmNdCglCdWcgZml4ZXMsIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBhbGwgd2luZmlsZSBhbmQgcHJvZ21hbiBpbnQyMQoJcmVxdWVzdHMgbm93IGV4Y2VwdCBmb3IgYSBmZXcgc21hbGwgdGhpbmdzLgoKVHVlIE1hciAyOSAwNjoyNTo1NCAxOTk0ICBjcndAaGFycmlzLm1sYi5zZW1pLmhhcnJpcy5jb20gKENhcmwgV2lsbGlhbXMpCgoJKiBbbWVtb3J5L2hlYXAuY10KCUltcGxlbWVudGVkIEdldEZyZWVTeXN0ZW1SZXNvdXJjZXMoKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTW9uIE1hciAyMSAxNzozMjoyNSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogY29udHJvbHMvbWVudS5jIChHZXRTdWJNZW51KTogRnVuY3Rpb24gZGlkIG5vdCByZXR1cm4gY29ycmVjdCB2YWx1ZQoKCSogW3dpbmRvd3MvbWRpLmNdCglCZWdpbm5pbmdzIG9mIG1lbnUgaGFuZGxpbmcuCgpUaHUgTWFyIDEwIDExOjMyOjA2IDE5OTQgIFN0ZWZhbiAoU0FNKSBNdWVuemVsICAobXVlbnplbEB0YXQucGh5c2lrLnVuaS10dWViaW5nZW4uZGUpCgoJKiBbb2JqZWN0cy9mb250LmNdCglpZiBmb250LndpZHRoIGVxdWFscyB6ZXJvIHVzZSBhc3Rlcml4IGluc3RlYWQuCgpNb24gTWFyIDIxIDE3OjIzOjM3IE1FVCAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10KCVJld3JpdHRlbiBiaXRtYXAgY29kZSB0byB1c2UgZXhjbHVzaXZlbHkgWCBwaXhtYXBzOyAqbXVjaCogZmFzdGVyLgoKCSogW29iamVjdHMvYnJ1c2guY10KCVNvbWUgY2hhbmdlcyB3aXRoIHBhdHRlcm4gYnJ1c2hlcyBiZWNhdXNlIG9mIHRoZSBuZXcgYml0bWFwIGNvZGUuCgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJQWRkZWQgZnVuY3Rpb24gQ09MT1JfVG9QaHlzaWNhbCBmb3IgYmV0dGVyIGNvbG9yIG1hcHBpbmcuCgoJKiBbb2JqZWN0cy9kaWIuY10KCUhlYXZpbHkgb3B0aW1pemVkIFNldERJQml0cygpLgoKCSogW3dpbmRvd3MvZGMuY10KCU9waW1pemVkIFNldERDU3RhdGUoKSBhbmQgRENfU2V0dXBHQyooKSBmdW5jdGlvbnMuCglBZGRlZCBzdHViIGZvciBDcmVhdGVJQygpLgoKTWFyIDIwLCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbbWlzYy9tZXNzYWdlLmNdCglDYWxsIFNldEZvY3VzKCkgYWZ0ZXIgY2xvc2luZyBib3ggdG8gZ2l2ZSBiYWNrIGZvY3VzIHRvIHByZXZpb3VzIG93bmVyLgoKCSogW21pc2MvZmlsZXMuY10KCVNtYWxsIGJ1ZyBmaXggaW4gR2V0VGVtcEZpbGVuYW1lKCkgOiByZXBsYWNlIGEgJ1wnIHRvICdcXCcuCgoJKiBbY29udHJvbC9zY3JvbGwuY10KCUNhbGxzIHRvIEJpdEJsdCgpIHJlcGxhY2UgYnkgU3RyZXRjaEJsdCgpLgoKCSogW2NvbnRyb2wvbWVudS5jXQoJQ2FsbCBTZXRGb2N1cygpIHRvIHByZXZpb3VzIG93bmVyIGFmdGVyIGNsb3NpbmcgUG9wdXBzLgkKCUZpbGwgc3R1YiBEZWxldGVNZW51KCkuCgoJKiBbY29udHJvbC9saXN0Ym94LmNdCgkqIFtjb250cm9sL2NvbWJvLmNdCglVc2UgU2V0Rm9jdXMoKSBpbiBXTV9MQlVUVE9ORE9XTi4KCUNsb3NlIENvbWJvQm94IExpc3QgdXBvbiBXTV9LSUxMRk9DVVMuCglFYXJseSBkZXZlbG9wbWVudCBvZiBXTV9NRUFTVVJFSVRFTSBtZWNhbmlzbS4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJRWFybHkgZGV2ZWxvcG1lbnQgb2YgV01fTUVBU1VSRUlURU0gbWVjYW5pc20uCgpUdWUgTWFyIDIyIDEwOjQ0OjU3IDE5OTQgIE1pZ3VlbCBkZSBJY2F6YSAgKG1pZ3VlbEB4b2NoaXRsKQoKCSogW21pc2MvYXRvbS5jXQoJRml4ZWQgc2ludGF4aXMgcHJvYmxlbSB3aGVuIGJ1aWxkaW5nIHRoZSBsaWJyYXJ5LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgTWFyIDE1IDEzOjExOjU2IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBtZXNzYWdlIHR5cGVzIGFuZCBzdHJ1Y3R1cmVzIGZvciBNREkKCgkqIFtpbmNsdWRlL21kaS5oXQoJQ3JlYXRlZCBpbnRlcm5hbCBzdHJ1Y3R1cmVzIGZvciBoYW5kbGluZyBNREkKCgkqIFt3aW5kb3dzL21kaS5jXQoJQmVnYW4gY3JlYXRpbmcgTURJIHN1cHBvcnQKClRodSBNYXIgMTAgMTY6NTE6NDYgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFtsb2FkZXIvd2luZS5jXSBbaW5jbHVkZS93aW5lLmhdCglBZGRlZCBuZXcgZmllbGQgdG8gInN0cnVjdCB3X2ZpbGVzIiB0byBob2xkIHRoZSAibmFtZSB0YWJsZSIKCXJlc291cmNlIGZvciBXaW5kb3dzIDMuMCBwcm9ncmFtcwoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJQWRkZWQgY29kZSB0byBoYW5kbGUgcHJvZ3JhbXMgd2l0aCBhICJuYW1lIHRhYmxlIiByZXNvdXJjZS4KCUxvYWRSZXNvdXJjZUJ5TmFtZSgpIG1vZGlmaWVkIHRvIGNoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mCgl0aGlzIHJlc291cmNlLgoKTW9uIE1hciAxNCAyMjozMTo0MiBNRVQgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW29iamVjdHMvY29sb3IuY10KCUFkZGVkIGluc3RhbGxpbmcgdGhlIHByaXZhdGUgY29sb3JtYXAgb24gdGhlIGRlc2t0b3Agd2luZG93LgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUNsZWFuZWQgdXAgZm9jdXMgZXZlbnQgaGFuZGxpbmcgKHNlZSBmb2N1cy5jKS4KCVVzZSBHZXRGb2N1cygpIHRvIGRpcmVjdCBrZXkgZXZlbnRzIHRvIHRoZSBjb3JyZWN0IHdpbmRvdy4KCgkqIFt3aW5kb3dzL2ZvY3VzLmNdCglSZXdyaXR0ZW4gU2V0Rm9jdXMoKSB0bzoKCS0gb25seSBzZXQgWCBmb2N1cyBvbiB0b3AtbGV2ZWwgd2luZG93cwoJLSBzZW5kIFdNX1NFVEZPQ1VTIGFuZCBXTV9LSUxMRk9DVVMgbWVzc2FnZXMgKHdhcyBkb25lIGluIGV2ZW50LmMpCgktIHByZXZlbnQgc2V0dGluZyBmb2N1cyB0byBkaXNhYmxlZCB3aW5kb3dzCgktIGluc3RhbGwgcHJpdmF0ZSBjb2xvcm1hcCBzbyAtcHJpdmF0ZW1hcCBvcHRpb24gd29ya3MgYWdhaW4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10gW3dpbmRvd3MvdGltZXIuY10KCUNoYW5nZWQgdGltZXIgbWFuYWdlbWVudCB0byBubyBsb25nZXIgdXNlIFBvc3RNZXNzYWdlKCksIGJ1dAoJdG8gZ2VuZXJhdGUgdGltZXIgbWVzc2FnZXMgb24gdGhlIGZseS4gQWxzbyBmaXhlZCBhIHJlbGF0ZWQgYnVnCglpbiBHZXRNZXNzYWdlKCkgd2hpY2ggY291bGQgY2F1c2UgYnVzeS13YWl0aW5nLgoKCSogW3dpbmRvd3Mvd2luLmNdCglPbmx5IHNlbGVjdCBmb2N1cyBldmVudHMgb24gdG9wLWxldmVsIHdpbmRvd3MuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUFkZGVkIHNvbWUgc2FuaXR5IGNoZWNrcyBmb3IgZGVza3RvcCB3aW5kb3cuCgpGcmkgTWFyICA0IDIwOjQyOjAxIDE5OTQgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbbWlzYy9kb3NfZnMuY10KCWJ1ZyBmaXhlcyBpbiBUb1VuaXgoKSwgV2luSW5pRmlsZU5hbWUoKSwgR2V0VW5peEZpbGVOYW1lKCkuIAoJU3VwcG9ydCBmb3IgdGlsZGUgc3ltYm9sIGFkZGVkIGZvciByb290ZGlyZWN0b3JpZXMgaW4gW2RyaXZlc10KCXNlY3Rpb24gb2Ygd2luZSdzIGNvbmZpZ2ZpbGUuCgoJKiBbbWlzYy9maWxlLmNdCglocmVhZCgpLCBod3JpdGUoKSBhZGRlZC4KCgkqIFttaXNjL21haW4uY10KCWhtZW1jcHkoKSBhZGRlZC4KCgkqIFtpZjE2MzIvc3RyZXNzLnNwZWNdIFtpbmNsdWRlL3N0cmVzcy5oXSBbbWlzYy9zdHJlc3MuY10KCUFkZGVkIFNUUkVTUy5ETEwsIGFuIHVzZWxlc3MgZGxsIHVzZWQgdG8gc3RyZXNzIGEgd2luZG93cyBzeXN0ZW0uCgoJKiBbKi8qXQoJQWRkZWQgbWlzc2luZyAjaW5jbHVkZXMsIGZpeGVkIHByb3RvdHlwZXMgZm9yIHByb3RvdHlwZSBjaGVja2luZy4KCgkqIFtpbmNsdWRlL3Byb3RvdHlwZXMuaF0KCglBZGRlZCBwcm90b3R5cGVzIGZvciBsb2FkZXIvKmMsIGlmMTYzMi8qYy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIE1hciAgOCAwOTo1NDozNCAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW0NvbmZpZ3VyZV0KCUFkZGVkIHJlbWluZGVyIHRvIHNldCBXSU5FUEFUSCwgaWYgaXQgaXMgbm90IHNldC4KCgkqIFtJbWFrZWZpbGVdCglSZW1vdmVkICNlbGlmJ3MKCgkqIFtjb250cm9scy9idXR0b24uY10KCUFkZGVkIEJOX0NMSUNLRUQgbm90aWZpY2F0aW9uIGZvciBvd25lci1kcmF3IGJ1dHRvbnMuCgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbbWVtb3J5L2hlYXAuY10KCUNoYW5nZWQgTG9jYWwqIGZ1bmN0aW9ucyB0byBXSU4xNl9Mb2NhbCogdG8gcHJldmVudCB1bmNvbmNpb3VzIHVzZQoJb2YgdGhlc2UgZnVuY3Rpb25zLgoKCSogW2lmMTYzMi9yZWxheS5jXQoJUHVzaCBvbGQgU3RhY2sxNkZyYW1lIG9uIHN0YWNrIGJlZm9yZSBzZXR0aW5nLgoKCSogW2luY2x1ZGUvYXRvbS5oXSBbbWlzYy9hdG9tLmNdIFtpbmNsdWRlL2hlYXAuaF0gW21lbW9yeS9sb2NhbC5jXQoJQWRkZWQgbXVsdGlwbGUgbG9jYWwgaGVhcCBoYW5kbGluZyBpbiBBdG9tKiBmdW5jdGlvbnMuCgoJKiBbaW5jbHVkZS9yZWdmdW5jLmhdIFttaXNjZW11L2ludDIxLmNdCglSZXdyb3RlIERPUzNDYWxsKCkgdXNlIGNvbnRleHQgZnJhbWUgdGhhdCBpcyBhbHJlYWR5IG9uIHRoZSBzdGFjay4KCgkqIFttaXNjL3Byb2ZpbGUuY10KCUZpeGVkIHRvIGFsbG93IGxlYWRpbmcgIjsiIHRvIG1hcmsgY29tbWVudHMuCgoJKiBbbWlzYy9zcHkuY10KCUZpeGVkIGJ1Z3MgYW5kIGFkZGVkIHN1cHBvcnQgZm9yICJpbmNsdWRlIiBhbmQgImV4Y2x1ZGUiIGZpbHRlcnMuCgoJKiBbbWlzYy91c2VyLmNdCglSZWFycmFuZ2VkIGNhbGxzIGluIEluaXRBcHAoKS4KCgkqIFttaXNjL2ZvbnQuY10KCUZpeGVkIGZvbnQgaGFuZGxpbmcgdG8gY3JlYXRlIHN5c3RlbSBmb250cywgaWYgdGhleSBhcmUgdXNlZC4KCgkqIFt3aW5kb3dzL2RjLmNdCglJZiB0ZXh0IGRyYXduIG9uIHdpbmRvdyB3aXRoIG5vIGZvbnQgc3BlY2lmaWVkLCB0aGVuIGRlZmF1bHQgdGhlCglmb250IHRvIHRoZSBzeXN0ZW0gZm9udC4KCk1vbiBNYXIgIDcgMjA6MzI6MDkgTUVUIDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFtjb250cm9scy9kZXNrdG9wLmNdCglBZGRlZCBoYW5kbGluZyBvZiBXTV9OQ0NSRUFURSBhbmQgV01fRVJBU0VCS0dORCBmdW5jdGlvbnMuCglJbXBsZW1lbnRlZCBTZXREZXNrUGF0dGVybigpLgoKCSogW21pc2MvbWFpbi5jXQoJQWRkZWQgLWRlc2t0b3Agb3B0aW9uIHRvIGdldCBhIGxhcmdlIGRlc2t0b3Agd2luZG93IHdpdGgKCWV2ZXJ5dGhpbmcgaW5zaWRlIGl0LgoJQWRkZWQgLW5hbWUgb3B0aW9uLgoKCSogW21pc2MvcmVjdC5jXQoJQnVnIGZpeCBpbiBTdWJ0cmFjdFJlY3QoKS4KCgkqIFtvYmplY3RzLyouY10KCVJlcGxhY2VkIHRoZSBEZWZhdWx0Um9vdFdpbmRvdygpIG1hY3JvIGJ5IHRoZSByb290V2luZG93IHZhcmlhYmxlLgoKCSogW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3MvbWVzc2FnZS5jXQoJICBbd2luZG93cy9ub25jbGllbnQuY10gW3dpbmRvd3Mvd2luLmNdCglBIGZldyBjaGFuZ2VzIHRvIGFjY29tb2RhdGUgdGhlIG5ldyBkZXNrdG9wIHdpbmRvdy4KCiBUdWUgTWFyICA4IDExOjEzOjAzIDE5OTQgIE1pZ3VlbCBkZSBJY2F6YSAgKG1pZ3VlbEB4b2NoaXRsLm51Y2xlY3UudW5hbS5teCkKIAogCSogW3Rvb2xraXQvYXJjaC5jXSAtLU5ldyBmaWxlLS0gCiAJUm91dGluZXMgZm9yIGNvbnZlcnRpbmcgbGl0dGxlIGVuZGlhbiBkYXRhIHN0cnVjdHVyZXMgdG8KIAliaWctZW5kaWFuIGRhdGEgc3RydWN0dXJlcywgY3VycmVudGx5IG9ubHkgQklUTUFQIHN0cnVjdHVyZXMgYXJlIAogCWNvbnZlcnRlZC4KIAogCSogW21pc2MvYXRvbS5jXQogCVdoZW4gdXNlZCBhcyBwYXJ0IG9mIHRoZSBXaW5lTGliLCB0aGUgY29kZSBpcyBtdWNoIHNpbXBsZXIuCiAJRG9lc24ndCBkZXBlbmQgb24gYWxpZ25lbWVudC4KIAogCSogW2xvYWRlci93aW5lLmNdCiAJSWZkZWZlZCBFbXVsYXRvciBkZXBlbmRlbnQgY29kZSBpZiBjb21waWxpbmcgV2luZUxpYi4KIAogCSogW2xvYWRlci9yZXNvdXJjZS5jXQogCU1vdmVkIG1pc2MvcmVzb3VyY2UuYyB0byBsb2FkZXIvcmVzb3VyY2UuYy4KIAogCSogW2xvYWRlci9kdW1wLmMsbGR0LmMsbGR0bGliLmMsbGlicmFyeSxjLHNlbGVjdG9yLmMsc2lnbmFsLmNdCiAJSWZkZWZlZCB3aG9sZSBjb2RlIGlmIGNvbXBpbGluZyBXSU5FTElCLgogCiAJKiBbaW5jbHVkZS93aW5zb2NrLmhdCiAJQWRkZWQgY29tcGlsYXRpb24gZGVmaW5lIHRvIGFsbG93IGNvbXBpbGF0aW9uIG9uIFN1bk9TLgogCiAJKiBbaW5jbHVkZS93aW5lLmhdCiAJUmVtb3ZlZCBsb2FkX3R5cGVpbmZvIGFuZCBsb2FkX25hbWVpbmZvIHByb3RvdHlwZXMsIHRoZXkgYmVsb25nCiAJdG8gbmVleGUuaAogCiAJKiBbaW5jbHVkZS9uZWV4ZS5oXQogCUFkZGVkIGxvYWRfdHlwZWluZm8gYW5kIGxvYWRfbmFtZWluZm8gcHJvdG90eXBlcy4KIAogCSogW2luY2x1ZGUvYXJjaC5oXQogCUZpeGVkIHNvbWUgYnVncyBpbiB0aGUgY29udmVyc2lvbiByb3V0aW5lcy4KIAlBZGRlZCBtYWNyb3MgZm9yIEJpdG1hcCBsb2FkaW5nLgoKVHVlIE1hciAgOCAxMjo1MjowNSAxOTk0ICBjcndAbWFuaWFjLm1sYi5zZW1pLmhhcnJpcy5jb20gKENhcmwgV2lsbGlhbXMpCiAJCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFttZW1vcnkvZ2xvYmFsLmNdCglJbXBsZW1lbnRlZCBHZXRGcmVlU3BhY2UoKQoKCSogW2lmMTYzMi91c2VyLnNwZWNdIFtsb2FkZXIvcmVzb3VyY2UuY10KCUltcGxlbWVudGVkIENyZWF0ZUljb24oKQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgTWFyICAxIDExOjMwOjIxIDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbQ29uZmlndXJlXSBbKi9JbWFrZWZpbGVdCglDcmVhdGVkIGNvbmZpZ3VyZSBzY3JpcHQgdG8gaGFuZGxlIGRpZmZlcmVudCB0eXBlcyBvZiBXaW5lIGJ1aWxkcy4KCgkqIFtDb25maWd1cmVdIFt0b29scy9idWlsZC5jXSBbaWYxNjMyL0ltYWtlZmlsZV0gW1dpbmUudG1wbF0KCUFkZGVkIGFiaWxpdHkgdG8gY29tcGlsZSBXaW5lIG9uIHN5c3RlbXMgd2l0aCAxNC1jaGFyIGZpbGVuYW1lIGxpbWl0LgoKCSogW2lmMTYzMi9yZWxheS5jXSBbaW5jbHVkZS9vcHRpb25zLmhdIFttaXNjL21haW4uY10KCUFkZGVkIC1yZWxheWRiZyBvcHRpb24gdG8gY29tbWFuZCBsaW5lIGlmIERFQlVHX1JFTEFZIGlzIGRlZmluZWQuCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglGaXhlZCBidWcgaW4gR2V0RW50cnlETExOYW1lKCkgdGhhdCBjYXVzZWQgV2luZSB0byBzZWcgZmF1bHQuCgoJKiBbbWVtb3J5L2hlYXAuY10KCUZpeGVkIExvY2FsSW5pdCgpIHRvIHdvcmsgY29ycmVjdGx5LgoKCSogW21pc2MvdXNlci5jXQoJQWRkZWQgY29kZSB0byBjYWxsIGxvYWRlZCBETExzJyBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4KClR1ZSBNYXIgIDEgMDE6MDE6MTcgTUVUIDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFt3aW5kb3dzL2RjZS5jXQoJQWRkZWQgY2xpcHBpbmcgb2YgY2hpbGQgd2luZG93cyBieSB0aGVpciBwYXJlbnQncyBjbGllbnQgYXJlYS4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQnVnIGZpeCBpbiBOQ19Eb05DUGFpbnQoKS4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglCdWcgZml4IGluIFJlZHJhd1dpbmRvdygpLgoKRmViIDI3LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbbWVtL2F0b20uY10KCUJ1ZyBmaXggYWdhaW4gaW4gQVRPTV9EZWxldGVBdG9tKCkgOiAKCQljaGFuZ2UgTG9jYWxGcmVlKCkgYnkgVVNFUl9IRUFQX0ZSRUUoKS4KCShQcmV2aW91cyBwYXRjaCBkb25lIEZlYiAxM3RoIGhhZCBiZWVuIGxvc3QpCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglNb3ZlIGJpdG1hcHMgbG9hZGluZyBpbiBBbGxvY1Njcm9sbEJhcigpIGluc3RlYWQgb2YgaW4gV01fQ1JFQVRFLgoKCSogW3dpbmRvd3MvY2xhc3MuY10gKHNvcnJ5IEFsZXggLi4uKQoJVGhlcmUgd2FzIG5vIGJ1ZyB0aGVyZSAiaW4gUmVnaXN0ZXJDbGFzcygpIDogCiAgICAgICAgICAgICAgICBXTkRDTEFTUy0+bHBzekNsYXNzTmFtZSB3YXMgcmVzZXQgdG8gTlVMTC4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eCgoJKiBbbWlzYy9jbGlwYm9hcmQuY10JLS0tIE5ldyBGaWxlIC0tLQoJTmV3IGZ1bmN0aW9uIEVudW1DbGlwYm9hcmRGb3JtYXRzKCkuCglOZXcgZnVuY3Rpb24gT3BlbkNsaXBib2FyZCgpLgoJTmV3IGZ1bmN0aW9uIENsb3NlQ2xpcGJvYXJkKCkuCglOZXcgZnVuY3Rpb24gRW1wdHlDbGlwYm9hcmQoKS4KCU5ldyBmdW5jdGlvbiBHZXRDbGlwYm9hcmRPd25lcigpLgoJTmV3IGZ1bmN0aW9uIEdldENsaXBib2FyZFZpZXdlcigpLgoJTmV3IGZ1bmN0aW9uIENvdW50Q2xpcGJvYXJkRm9ybWF0cygpLgoJTmV3IGZ1bmN0aW9uIElzQ2xpcGJvYXJkRm9ybWF0QXZhaWxhYmxlKCkuCglOZXcgZnVuY3Rpb24gT3BlbkNsaXBib2FyZCgpLgoJTmV3IGZ1bmN0aW9uIEdldENsaXBib2FyZERhdGEoKS4KCU5ldyBmdW5jdGlvbiBTZXRDbGlwYm9hcmRWaWV3ZXIoKS4KCU5ldyBmdW5jdGlvbiBFbnVtQ2xpcGJvYXJkRm9ybWF0cygpLgoJTmV3IGZ1bmN0aW9uIFJlZ2lzdGVyQ2xpcGJvYXJkRm9ybWF0KCkuCglOZXcgZnVuY3Rpb24gQ2hhbmdlQ2xpcGJvYXJkQ2hhaW4oKS4KCU5ldyBmdW5jdGlvbiBTZXRDbGlwYm9hcmREYXRhKCkuCglOZXcgZnVuY3Rpb24gR2V0T3BlbkNsaXBib2FyZFdpbmRvdygpLgoJTmV3IGZ1bmN0aW9uIEdldFByaW9yaXR5Q2xpcGJvYXJkRm9ybWF0KCkuCglOZXcgZnVuY3Rpb24gR2V0Q2xpcGJvYXJkRm9ybWF0TmFtZSgpLgoKVHVlIE1hciAgMSAyMDoxNTo0NSAxOTk0ICBFcmlrIEJvcyA8ZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sPgoKCSogW21pc2MvY29tbS5jXQoJYnVnZml4IGluIE9wZW5Db21tKCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBGZWIgMjIgMTg6MDQ6MDIgMTk5NCAgSmVmZnJleSBIc3UgPGhzdUBmcmVlZmFsbC5jZHJvbS5jb20+CgoJKiBbaW5jbHVkZS93aW5zb2NrLmhdCglUaGUgc29ja3Byb3RvIHN0cnVjdCBpcyBhbHJlYWR5IGRlZmluZWQgaW4gPHN5cy9zb2NrZXQuaD4KCgkqIFttaXNjL3dpbnNvY2suY10KCU5lZWQgdG8gaW5jbHVkZSA8bmV0aW5ldC9pbi5oPiBmb3Igc3RydWN0IGluLWFkZHIuCglVc2Ugc3lzX2Vycmxpc3RbXSBpbnN0ZWFkIG9mIHN0cmVycm9yW10uCgoJKlt0b29sa2l0L2hlYXAuY10KCUFOU0kgQyBzcGVjaWZpZXMgdGhhdCB0aGUgbWFsbG9jIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBpbiBzdGRsaWIuaCwKCSAgc28gd2UgZG9uJ3QgbmVlZCB0byBpbmNsdWRlIG1hbGxvYy5oLgoKCSpbbG9hZGVyL2xkdGxpYi5jXQoJUHJpbnQgaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZSBhYm91dCBwcm9iYWJsZSBjYXVzZSBvZiBpMzg2X3NldF9sZHQoKQoJICBmYWlsdXJlIGFuZCB0aGVuIGV4aXQuCgoJKltJbWFrZWZpbGVdCglGb3Igc3lzdGVtcyB0aGF0IGRvbid0IHVzZSBnbWFrZSBieSBkZWZhdWx0LCBzZXQgdGhlIE1BS0UgdmFyaWFibGUKCSAgdG8gZ21ha2UgYW5kIHByb3BhZ2F0ZSBpdCBvbiByZWN1cnNpdmUgbWFrZXMuCglUYWtlIG91dCAtbGkzODYgZm9yIEZyZWVCU0Qgc3lzdGVtcyBhbmQgZGVmaW5lIF9fRnJlZUJTRF9fIHNvIFdpbmUKCSAgY2FuIGJlIGJ1aWx0IHdpdGggdGhlIEZyZWVCU0QgMS4wLjIgY29tcGlsZXIuCgpUdWUgRmViIDIyIDAyOjUyOjE5IEVTVCAxOTk0ICAgIGpyaWNoYXJkQGNzLnVtbC5lZHUgKEpvaG4gUmljaGFyZHNvbikKCiAgICAgICAgKiBbb2JqZWN0cy9iaXRibHQuY10KICAgICAgICBBZGRlZCBpbiB0aHJlZSBmdW5jdGlvbnMgdG8gZG8gc3RyZXRjaGluZyBhbmQgY29tcHJlc3Npb24KICAgICAgICBmb3IgV0hJVEVPTkJMQUNLLCBCTEFDS09OV0hJVEUsIGFuZCBjb2xvciBjb3BpZXMuCgpUdWUgRmViIDIyIDE1OjAxOjMxIEVTVCAxOTk0ICAgIGpyaWNoYXJkQGNzLnVtbC5lZHUgKEpvaG4gUmljaGFyZHNvbikKCiAgICAgICAgKiBbd2luZG93cy9ncmFwaGljcy5jXQogICAgICAgIEFkZGVkIEZsb29kRmlsbCBhbmQgRmxvb2RGaWxsX3JlYy4gIEZsb29kRmlsbF9yZWMgaXMgcHJldHR5CiAgICAgICAgaW5lZmZpY2VudCwgYnV0IHNob3VsZCBzdWZmaWNlIGZvciBub3cuCgogICAgICAgICogW2luY2x1ZGUvd2luZG93cy5oXQogICAgICAgIENoYW5nZWQgdGhlIHgseSBwYXJhbWF0ZXJzIGZvciB0aGUgRmxvb2RGaWxsIHByb3RvdHlwZSAKICAgICAgICBmcm9tIGludHMgdG8gc2hvcnRzCgpUdWUgRmViIDIyIDAwOjU4OjI4IE1FVCAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbd2luZG93cy93aWRnZXRzLmNdCglBZGRlZCBkZXNrdG9wIHdpbmRvdyBjbGFzcy4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglCdWcgZml4IGluIFJlZHJhd1dpbmRvdygpLgoJSW1wbGVtZW50ZWQgRXhjbHVkZVVwZGF0ZVJnbigpLgoKCSogW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL3dpbnBvcy5jXQoJSW1wbGVtZW50ZWQgZGVza3RvcCB3aW5kb3cuCgoJKiBbY29udHJvbHMvZGVza3RvcC5jXQoJUHJlbGltaW5hcnkgZGVza3RvcCB3aW5kb3cgcHJvY2VkdXJlLgoKRmViIDIwLCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTmV3IGZ1bmN0aW9uIExvYWRNZW51SW5kaXJlY3QoKS4KCU5ldyBmdW5jdGlvbiBHZXRNZW51Q2hlY2tNYXJrRGltZW5zaW9ucygpLgoKCSogW2lmMTYzMi91c2VyLnNwZWNdCglFbnRyeSBmb3IgRGVmRGxnUHJvYygpLgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCUZpeCBidWcgaW4gUmVnaXN0ZXJDbGFzcygpIDogCgkJV05EQ0xBU1MtPmxwc3pNZW51TmFtZSB3YXMgcmVzZXQgdG8gTlVMTC4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJSW4gQ3JlYXRlV2luZG93RXgoKSwgaWYgaE1lbnUgPT0gMCB0aGVuIHVzZSAKCQl3bmRjbGFzcy0+bHBzek1lbnVOYW1lIHRvIGxvYWQgTWVudSBmcm9tIHJlc291cmNlOwoKTW9uIEZlYiAyMSAyMjozODoyOCAxOTk0IEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10gW2xvYWRlci93aW5lLmNdCglGaXhlZCBydW5pbmcgRExMJ3MgYXMgbWFpbiBleGVjdXRhYmxlIHByb2JsZW0uCgoJKiBbbWlzYy9kb3NfZnMuY10KCUFkZGVkIHdpbGRjYXJkIHN1cHBvcnQgaW4gRE9TX3JlYWRkaXIoKS4KCgkqIFttaXNjL3dpbnNvY2tldC5jXQoJQWRkZWQgcHJvcGVyIGVycm9yIGhhbmRsaW5nIG9mIEJTRCB3aW5zb2NrZXQgZnVuY3Rpb25zLgoKCSogW21pc2NlbXUvaW50MjEuY10KCUtFUk5FTF9ET1MzQ2FsbCByZW5hbWVkIHRvIERPUzNDYWxsIGFuZCBtb2RpZmllZCB0byB1c2UgZG9faW50MjEoKS4KCgkqIFttYWluL21haW4uY10KCUFkZGVkIGZ1bmN0aW9ucyBmb3IgR2V0VmVyc2lvbiwgR2V0V2luRmxhZ3MgYW5kIEdldFRpbWVyUmVzb2x1dGlvbgoJZm9yIGxpYndpbmUuYSwgU3lzdGVtUGFyYW1ldGVyc0luZm8oKSBwYXJ0bHkgaW1wbGVtZW50ZWQuCgpUdWUgRmViIDIyIDE5OjAwOjAyIDE5OTQgIE1pZ3VlbCBkZSBJY2F6YSAgKG1pZ3VlbEB4b2NoaXRsLm51Y2xlY3UudW5hbS5teCkKCgkqIFt0b29sa2l0L3dpbm1haW4uY10KCUFkZGVkIF9XaW5NYWluIGZ1bmN0aW9uLiBTZXR1cHMgdGhlIGxpYnJhcnkgKGNhbGxzIFVTRVJfSW5pdEFwcCkuCgoJKiBbdG9vbGtpdC9zdXAuY10KCUFkZGVkIGxvYWRfbXpfaGVhZGVyLCBsb2FkX25lX2hlYWRlciwgbG9hZF90eXBlX2luZm8gYW5kCglsb2FkX25hbWVfaW5mbyBmdW5jdGlvbnMuCgoJKiBbdG9vbGtpdC9oZWFwLmNdIAoJQ29kZSBjbGVhbnVwLiAKCgkqIFttaXNjL3VzZXIuY10KCU1vdmVkIGZyb20gbG9hZGVyL21pc2MuYy4gSSBob3BlIHRvIHB1dCBiYWNrIGFsbCB0aGUgbG9hZGVyCglmdW5jdGlvbnMgaW4gdGhlIH5sb2FkZXIgc3ViZGlyZWN0b3J5IGluIHRoZSBmdXR1cmUuIENVcnJlbnRseSBpcwoJbmVlZGVkIHNpbmNlIGl0IGhhcyBVU0VSX0luaXRBcHAuCgoJKiBbbWlzYy9yZXNvdXJjZS5jXQoJU2luY2UgV2luZUxpYiB3aWxsIHByb2JhYmx5IG5lZWQgRExMcyAoY3VycmVudGx5IGl0IG5lZWRzCglTeXNyZXMuZGxsKS4gV2luZUxpYiB3aWxsIGJlIHVzaW5nIG11Y2ggY29kZSBvZiB0aGUgbG9hZGVyIGFnYWluLgoJU28gSSByZW1vdmVkIHNvbWUgaWZkZWZzIHRoYXQgd2VyZSB1c2VkIGJ5IFdpbmVMaWIuCgoJQWRkZWQgbG9hZF90eXBlaW5mbyBhbmQgbG9hZF9uYW1laW5mbyAoYW5kIHRoZSBjb3JyZXNwb25kaW5nCglmdW5jdGlvbnMgaW4gW3Rvb2xraXQvc3VwLmNdCgoJQWRkZWQgaW50ZWdlciBjb252ZXJ0aW9uIGZ1bmN0aW9ucyBpbiB0aGUgbmVlZGVkIHBsYWNlcy4KCglBZGRlZCB2ZXJ5IHVnbHkgcGF0Y2ggKGluY2x1ZGVzIHdpbmUuYykuIEluIHRoZSBuZXh0IHJlbGVhc2UgSQoJcGxhbiB0byBtb3ZlIGJhY2sgYWxsIHRoZSBsb2FkZXIgcm91dGluZXMgdG8gfi9sb2FkZXIuIEluIHRoZQoJbWVhbnRpbWUgSSBuZWVkZWQgdGhpcyBwYXRjaC4gSXQgZG9lc24ndCBhZmZlY3QgYW55IG9mIHRoZQoJZW11bGF0b3IgY29kZSAoaXRzIGlmZGVmZWQgZm9yIFdpbmVMaWIpLgoKCSogW21pc2MvbWFpbi5jXQoJQ2xlYW5lZCB1cCBjYWxsIHRvIFdpbk1haW4gKG5vdyB1c2VzIFt0b29sa2l0L3dpbm1haW4uY10KCUlmZGVmZWQgYXJndW1lbnQgbnVtYmVyIGNoZWNraW5nIHdoZW4gY29tcGlsaW5nIHRoZSBsaWJyYXJ5LgoKCSogW2xvYWRlci93aW5lLmNdCglNb2RpZmllZCB0byB1c2UgbG9hZF8obXp8bmUpX2hlYWRlciBpbnN0ZWFkIG9mIGRvaW5nIGEgZGlyZWN0CglyZWFkLiAgV2hlbiBjb21waWxpbmcgdGhlIGVtdWxhdG9yIGl0IHN0aWxsIHVzZXMgdGhlIGRpcmVjdCByZWFkCglmb3IgcGVyZm9ybWFuY2UuIAoKCSogW2luY2x1ZGUvd2luZS5oXQoJUHJvdG90eXBlcyBmb3IgbG9hZGluZyByb3V0aW5lcy4KCgkqIFtpbmNsdWRlL2NsYXNzLmhdCglBZGRlZCBXSU5FX1BBQ0tFRCBtYWNybyBpbnN0ZWFkIG9mIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKQoKCSogW2luY2x1ZGUvYXJjaC5oXQoJTWFjcm9zIGZvciBjb252ZXJ0aW5nIGludGVnZXJzIChMaXR0bGUgZW5kaWFuIHRvIGJpZy1lbmRpYW4pLgoJTmVlZGVkIGluIHRoZSBTdW4gdG8gYWxsb3cgbG9hZGluZyBvZiBETEwgZmlsZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1vbiBGZWIgMTQgMjM6NDg6MDkgTUVUIDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFt3aW5kb3dzL2NsaXBwaW5nLmNdCglNb3ZlZCBldmVyeXRoaW5nIGludG8gd2luZG93cy9wYWludGluZy5jIGFuZCByZW1vdmVkIHRoaXMgZmlsZS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCVJlbW92ZWQgY2FsbHMgdG8gbWVtbW92ZSgpIGluIE1TR19SZW1vdmVNc2coKS4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQWRkZWQgV01fR0VUTUlOTUFYSU5GTyBzdXBwb3J0IGZvciB3aW5kb3cgcmVzaXppbmcuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJSW1wbGVtZW50ZWQgUmVkcmF3V2luZG93KCkuCgoJKiBbd2luZG93cy9zY3JvbGwuY10KCUJ1ZyBmaXggaW4gU2Nyb2xsV2luZG93RXgoKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJTW92ZWQgVXBkYXRlV2luZG93KCkgdG8gd2luZG93cy9wYWludGluZy5jLgoKRnJpIEZlYiAxMSAxMjo0MToyOCAxOTk0ICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoJCgkqIFtsb2FkZXIvd2luZS5jXSBbbWlzYy9kb3NfZnMuY10KCWdldGVudigpIGVxIE5VTEwgYnVnZml4ZXMuCgoJKiBbbWlzYy9jb21tLmNdCgljZm1ha2VyYXcgY2hhbmdlZCBmb3IgU3VuT1MuCgpGZWIgMTMsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFttZW0vYXRvbS5jXQoJQnVnIGZpeCBpbiBBVE9NX0RlbGV0ZUF0b20oKSA6IAoJCWNoYW5nZSBMb2NhbEZyZWUoKSBieSBVU0VSX0hFQVBfRlJFRSgpLgoKCSogW21pc2MvbWVzc2FnZS5jXQoJTmV3IGZ1bmN0aW9uIEZhdGFsQXBwRXhpdCgpLgoKCSogW29iamVjdHMvZm9udC5jXQoJTmV3IGVtcHR5IHN0dWIgU2V0TWFwcGVyRmxhZ3MoKS4KCgkqIFtjb250cm9scy9tZW51LmNdCglCZXR0ZXIgQ2hlY2tNYXJrICYgb3RoZXIgYml0bWFwcyBwbGFjZW1lbnQuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJTmV3IGZ1bmN0aW9uIFJvdW5kUmVjdCgpIDogY2FsYy5leGUgbm93IHdvcmtpbmcuLi4KClR1ZSBGZWIgMTUgMTQ6Mjk6MzcgMTk5NCAgSm9obiBSaWNoYXJkc29uCgogICAgICAgICogW29iamVjdHMvYml0Ymx0LmNdCiAgICAgICAgRml4ZWQgU3RyZXRjaEJsdCBzbyBpdCB3b3JrcyBxdWlja2VyIGFuZCBmYXN0ZXIuICBJdCBzdGlsbCBkb2Vzbid0CiAgICAgICAgdXNlIHRoZSBTdHJldGNoTW9kZSBiaXRzIGZvciBiaXRtYXAgY29tcHJlc3Npb24sIGJ1dCB0aGF0IHdpbGwKICAgICAgICBjb21lIHNvb24uCgpNb24gRmViIDE0IDEzOjIxOjA0IDE5OTQgIE1pZ3VlbCBkZSBJY2F6YSAgKG1pZ3VlbEByb3hhbm5lLm51Y2xlY3UudW5hbS5teCkKCgkqIFtpbmNsdWRlL3dpbmRvd3MuaCxkaWFsb2cuaCxnZGkuaF0KCUNoYW5nZWQgX19hdHJpYnV0ZV9fICgocGFja2VkKSkgZm9yIFdJTkVfUEFDS0VELiAKCVdoZW4gY29tcGlsaW5nIHRoZSBsaWJyYXJ5IHRoaXMgaXMgZGVmaW5lZCBhcyBub3RoaW5nLiBUaGlzIGdldHMKCXJpZCB3aXRoIGFsbCB0aGUgcHJvYmxlbXMgY29tcGlsaW5nIHVuZGVyIFN1bk9TLiBBbHNvIAoKCSogW3dpbmRvd3MvdXRpbGl0eS5jXQoJQWRkZWQgRGVidWdQcmludFN0cmluZy4KCgkqIFt0b29sa2l0L3N1cC5jXQoJQWRkZWQgaFN5c1JlcyA9IDEgZGVmaW5pdGlvbiB0byByZXNvbHZlIGV4dGVybmFscy4KCUFkZGVkIENhbGxMaW5lRERBUHJvYyBmdW5jdGlvbiAodG9vbGtpdCB2ZXJzaW9uKS4KCUFkZGVkIHRveSwgYW5kIGhpIGluZWZpY2llbnQgbWVtbW92ZSB1bnRpbCBjb2RlIGluIG1lc3NhZ2UuYyBnZXQKCXJld3JpdHRlbi4KCgkqIFtvYmplY3RzL2dkaW9iai5jXQoJSWZkZWZlZCBsaW51eC9lbXVsYXRvci1kZXBlbmRlbnQgY29kZSB0byBhbGxvdyBjb21waWxhdGlvbiBvZgoJV2luZUxpYi4KCgkqIFttaXNjL3dpbnNvY2tldC5jXQoJQWRkZWQgaWZkZWYgdG8gYWxsb3cgY29tcGlsYXRpb24gdW5kZXIgU3VuT1MuCgoJKiBbbWlzYy9yZXNvdXJjZS5jXQoJV2hlbiBjb21waWxpbmcgdGhlIGxpYnJhcnksIHRoZSByZXNvdXJjZSBmaWxlIGlzIGV4cGVjdGVkIHRvIGJlIGluCglhIGZpbGUgY2FsbGVkICRhcmd2WzBdLlJlcy4gQWxzbyB0aGUgaW5mb3JtYXRpb24gb2YgdGhlIHJlc291cmNlCglpcyBleHBlY3RlZCB0byBiZSBhdCBvZmZzZXQgMCBvZiB0aGUgLlJlcyBmaWxlLgoKCSogW21pc2MvbWFpbi5jXQoJQ2FsbCBXaW5NYWluIHdpdGggYXJndW1lbnRzIGlmIGNvbXBpbGluZyBXaW5lTGliLgoJQ2FsbCBzaHV0ZG93biBmdW5jdGlvbnMgKENvbW1fRGVJbml0LCBET1NfRGVJbml0RlMpLgoJQ2FsbCBzeW5jX3Byb2ZpbGVzIHRvIHByZXNlcnZlIGNoYW5nZXMgdG8gLklOSSBmaWxlcy4KCgkqIFttaXNjL2NvbW0uYyxkb3NfZnMuY10KCXJlbW92ZWQgY2FsbCB0byBhdGV4aXQoQ29tbV9EZUluaXQpCglyZW1vdmVkIGNhbGwgdG8gYXRleGl0KERPU19EZUluaXRGUykKCVNodXRkb3duIGZ1bmN0aW9ucyBhcmUgbm93IGNhbGxlZCBmcm9tIHRoZSByZXR1cm4gb2YgV2luTWFpbgoKCSogcmVtb3ZlZCBtZW1vcnlsaWIgc3ViZGlyZWN0b3J5CgoJKiBtb3ZlZCBtZW1vcnkvYXRvbS5jICAgIHRvIG1pc2MvYXRvbS5jCgkgIG1vdmVkIG1lbW9yeWxpYi9oZWFwLmMgdG8gdG9vbGtpdC9oZWFwLmMKCgkqIFtsb2FkZXIvd2luZS5jXQoJTW92ZWQgRGVidWdQcmludFN0cmluZyB0byB3aW5kb3dzL3V0aWxpdHkuYwoKCSogW2luY2x1ZGUvd2luc29jay5oXQoJRGVmaW5lIFNPX0RPTlRMSU5HRVIgb25seSBpZiBpdCBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBkZWZpbmVkLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJYWRkZWQgZGVmaW5pdGlvbiBmb3IgRExHUFJPQy4KCWFkZGVkIGRlZmluaXRpb24gZm9yIExNRU1fV0lORV9BTElHTiBhbmQgb3RoZXIgTE1FTV8qIGNvbnN0YW50cy4KCVdoZW4gY29tcGlsaW5nIFdpbmVMaWIgV05EUFJPQyBpcyBkZWZpbmVkIHdpdGggYWxsIHRoZSBwYXJhbWV0ZXJzCgl0byBhdm9pZCBjb21waWxhdGlvbiBwcm9ibGVtcy4KCgkqIFtpbmNsdWRlL3VzZXIuaF0KCVdoZW4gY29tcGlsaW5nIFdpbmVMaWIgVVNFUl9IRUFQXyhBTExPQ3xSRUFMTE9DfEFERFJ8RlJFRSkgdGhlCgljYWxscyBhcmUgdHJhbnNsYXRlZCB0byB0aGUgbGlicmFyeSBhbGxvY2F0aW9uIHJvdXRpbmVzLgoKCSogW2luY2x1ZGUvZ2RpLmgsdXNlci5oXQoJV2hlbiBjb21waWxpbmcgV2luZUxpYiBHRElfSEVBUF8oQUxMT0N8QUREUnxGUkVFKSB0aGUgY2FsbHMgYXJlCgl0cmFuc2xhdGVkIHRvIHRoZSBsaWJyYXJ5IGFsbG9jYXRpb24gcm91dGluZXMuCgoJKiBbaW5jbHVkZS9hdG9tLmhdCglEZWZpbmVkIExvY2FsQWxpZ24uIFdoZW4gY29tcGlsaW5nIHRoZSBlbXVsYXRvciBpdCdzIHRyYW5zbGF0ZWQgYXMKCWEgY2FsbCB0byBMb2NhbEFsbG9jICh0aGUgb3JpZ2luYWwgY29kZSksIHdoZW4gY29tcGlsaW5nIFdpbmVMaWIKCWFzIGEgY2FsbCB0byBMb2NhbEFsbG9jIHdpdGggYSBXSU5FLWZsYWcgY2FsbGVkIExNRU1fV0lORV9BTElHTgoJKGF0b20uYyBuZWVkcyBhbGlnbmVkIGRhdGEgb24gYSA0IGJ5dGUgYm91bmRhcnkpLgoKCSogW21pc2MvZmlsZS5jXQoJUmVuYW1lZCBLRVJORUxfKiBmdW5jdGlvbnMgYW5kIGZpeGVkIHByb3RvdHlwZXMuCgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJUmVuYW1lZCBLRVJORUxfKiBmdW5jdGlvbnMgaW4gb3JkZXIgdG8gYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMKCXVzaW5nIFdpbmUgYXMgYSBsaWJyYXJ5IChPcGVGaWxlLCBfbGNsb3NlLCBfbHJlYWQsIF9sY3JlYXRlLAoJX2xsc2VlaywgX2xvcGVuLCBfbHdyaXRlKS4KCgkqIFtNYWtlZmlsZV0KCUNyZWF0ZSBsaWJyYXJ5IGluc3RlYWQgb2YgZXhlY3V0YWJsZSB3aGVuIGJ1aWxkaW5nIHRhcmdldAoJbGlid2luZS5hIAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgRmViICA4IDEzOjUyOjExIDE5OTQgIE1pZ3VlbCBkZSBJY2F6YSAgKG1pZ3VlbEByb3hhbm5lKQoKCSogW01ha2VmaWxlc10KCVVzZSAkKENDKSBpbnN0ZWFkIG9mIGNjLgoJQWRkZWQgbGlid2luZSB0YXJnZXQuCgoJKiBbaW5jbHVkZS9wcm90b3R5cGVzXQoJI2lmZGVmZWQgc2VjdGlvbiBmb3IgV2luZUxpYgoKCSogbW92ZWQgbG9hZGVyL2N1cnNvci5jICAgdG8gbWlzYy9jdXJzb3IuYwoJICBtb3ZlZCBsb2FkZXIvcmVzb3VyY2UuYyB0byBtaXNjL3Jlc291cmNlLmMKCSAgbW92ZWQgbWlzYy9lbXVsYXRlLmMgICAgdG8gbWlzY2VtdS9lbXVsYXRlLmMKCSAgbW92ZWQgbWlzYy9pbnQxYS5jICAgICAgdG8gbWlzY2VtdS9pbnQxYS5jCgkgIG1vdmVkIG1pc2MvaW50MjEuYwkgIHRvIG1pc2NlbXUvaW50MjEuYwoJICBtb3ZlZAltaXNjL2tlcm5lbC5jCSAgdG8gbWlzY2VtdS9rZXJuZWwuYwoJICBtb3ZlZCBtaXNjL3VzZXIuYyAgICAgICB0byBtaXNjZW11L3VzZXIuYwoKCSogW21lbW9yeWxpYi9oZWFwLmNdCglIZWFwIG1hbmFnZW1lbnQgZm9yIFdpbmVMaWIKCgkqIFttaXNjL2NvbW0uY10KCU1vZGlmaWVkIHRvIGFsbG93IGNvbXBpbGF0aW9uIHVuZGVyIFN1bk9TICgjaW5jbHVkZSBlcnJubywgU3VuT1MKCWRvZXNuJ3QgaGF2ZSBhdGV4aXQgKCkpLgoKCSogW21pc2MvZG9zX2ZzLmNdCglNb2RpZmllZCB0byBhbGxvdyBjb21waWxhdGlvbiB1bmRlciBTdW5PUyAoI2luY2x1ZGUgdmZzLmgpCgoJKiBbbWlzYy9maWxlLmNdCglNb2RpZmllZCB0byBhbGxvdyBjb21waWxhdGlvbiB1bmRlciBTdW5PUyAoT1BFTl9NQVggY29uc3RhbnQsCgkjaW5jbHVkZSB1bmlzdGQuaCkKCgkqIFtvYmplY3RzL3BhbGV0dGUuY10KCU1vZGlmaWVkIHRvIGFsbG93IGNvbXBpbGF0aW9uIHVuZGVyIFN1bk9TICgjaW5jbHVkZSBsaW1pdHMpCgoJKiBbdG9vbGtpdC9zdXAuY10KCVdpbmVMaWIgdmVyc2lvbiBvZiBDYWxsV2luZG93UHJvYy4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglUeXBlZGVmIFhQb2ludGVyIHVuZGVyIFgxMVI0IChPcGVuV2luZG93cykuCgoJKiBbd2luZG93cy93aW4uY10KCVdoZW4gY29tcGlsaW5nIFdpbmVMaWIsIHVzZSBkaXJlY3QgY2FsbGJhY2tzIGluc3RlYWQgb2YgdGhlCgl3aW5kb3dzIHN1cHBsaWVkIGNhbGxiYWNrcy4KCk1vbiBGZWIgIDcgMjI6Mzc6MzQgTUVUIDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFtsb2FkZXIvY3Vyc29yLmNdCglOZXcgZnVuY3Rpb24gQ1VSU09SX1NldFdpbkN1cnNvcigpLCBmb3IgaW50ZXJuYWwgdXNlLCB0byBzZXQKCXRoZSBjdXJzb3Igb2YgYSBzcGVjaWZpYyB3aW5kb3cgbW9yZSByZWxpYWJseSB0aGFuIHdpdGggU2V0Q3Vyc29yKCkuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUJldHRlciB3aW5kb3cgbWFuYWdlbWVudC4gTW92aW5nIGFuZCByZXNpemluZyBmcm9tIHRoZSBzeXN0ZW0KCW1lbnUgc2hvdWxkIHdvcmsgbm93LgoJQWRkZWQgc2Nyb2xsLWJhciBtb3VzZSB0cmFja2luZy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJTW92ZWQgc2Nyb2xsLWJhciBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gdG8gZGVmd25kLmMuCgpGZWIgNSwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglDYWxsIHRvIFN0ZERyYXdNZW51QmFyKCkgZHVyaW5nIE5DJ3MgZHJhd2luZy4KCU5ldyBOQ19UcmFja01vdXNlTWVudUJhcigpIGZ1bmN0aW9uIHdoaWNoIGNhbGwgCgkJTWVudUJ1dHRvbkRvd24oKSwgTWVudUJ1dHRvblVwKCkgJiBNZW51TW91c2VNb3ZlKCkuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTmV3IENoYW5nZU1lbnUoKSBmdW5jdGlvbi4KCVJlbW92ZSBwZXJtYW5lbnRseSBvbGQgWHQgbWVudSBjb2RlLgoJTWFrZSBjb21tb24gZnVuY3Rpb25zIE1lbnVCdXR0b25Eb3duKCksIE1lbnVCdXR0b25VcCgpCgkJJiBNZW51TW91c2VNb3ZlKCkgZm9yIGJvdGggcG9wdXBzICYgbWVudWJhci4KCQoJKiBbY29udHJvbHMvY29tYm8uY10KCVBhaW50IE9CTV9DT01CTyBkaXJlY3RseSBpbiBjb21ibyBjbGllbnQuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJRml4IGJ1ZyBpbiBtdWx0aWNvbHVtbnMgY2FsY3VsYXRpb25zLgoKCSogW2NvbnRyb2xzL01ha2VmaWxlXQoJUmVtb3ZlIHJ1bGVzIGZvciBvbGQgZmlsZSAnY2FwdGlvbi5jJy4KCgkqIFttaXNjL2tlcm5lbC5jXQoJUmVtb3ZlIGVtcHR5IHN0dWIgR2V0TW9kdWxlRmlsZU5hbWUoKS4KCgkqIFtsb2FkZXIvbGlicmFyeS5jXQoJTmV3IEdldE1vZHVsZUhhbmRsZSgpIGZ1bmN0aW9uLgoJTmV3IEdldE1vZHVsZVVzYWdlKCkgZnVuY3Rpb24uCglOZXcgR2V0TW9kdWxlRmlsZU5hbWUoKSBmdW5jdGlvbi4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCVRyeSB0byBmaW5kIHRoZSBidWcgYSBtaXNzaW5nIG1lbnUgbG9hZGluZyAuLi4gTm90IGZvdW5kIHlldCAhCgoJKiBbd2luZG93cy93aW4uY10KCVJlbW92ZSBvbGQgbWVudWJhciBjcmVhdGlvbi4KClRodSBGZWIgIDMgMjI6MzA6MTEgMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFttaXNjL3dpbnNvY2tldC5jXQoJTW9yZSBmdW5jdGlvbnMgYWRkZWQuCgoJKiBbaWYxNjMyL3dpbnNvY2suc3BlY10gW21pc2Mvd2luc29ja2V0LmNdCglBZGRlZCBKb2huIEJyZXphaydzIHdpbnNvY2suZGxsIHN0dWZmLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgRmViICAxIDIxOjE0OjQ3IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglBZGRlZCBmdW5jdGlvbiBDcmVhdGVOZXdTZWdtZW50cygpLiAgTW9kaWZpZWQgSVBDQ29weVNlbGVjdG9yCgl0byBhbGxvdyBhbGlhc2luZyB0byBhbnkgYXJiaXRyYXJ5IG1lbW9yeSBzcGFjZS4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglGaXhlZCBwb3RlbnRpYWwgYnVnIGluIEdsb2JhbEdldEZyZWVTZWdtZW50cygpLgoKCSogW21lbW9yeS9saW5lYXIuY10KCUNyZWF0ZWQgZnVuY3Rpb25zIEdsb2JhbExpbmVhckxvY2soKSBhbmQgR2xvYmFsTGluZWFyVW5sb2NrKCkuCgpUdWUgRmViICAxIDA1OjUxOjQzIDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFtjb250cm9scy93aWRnZXRzLmNdCglSZW1vdmVkIENBUFRJT04gd2luZG93IGNsYXNzLgoKCSogW2xvYWRlci9jdXJzb3IuY10KCUJ1ZyBmaXggaW4gTG9hZEN1cnNvcigpOiBkb24ndCBhbGxvY2F0ZSBtZW1vcnkgZXZlcnkgdGltZSBmb3IKCWJ1aWx0LWluIGN1cnNvcnMuCgoJKiBbd2luZG93cy9jbGlwcGluZy5jXQoJSW52YWxpZGF0ZSBjaGlsZCB3aW5kb3dzIGluIEludmFsaWRhdGVSZ24oKS4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJQWRkZWQgcmVwYWludCBvZiB0aGUgY2FwdGlvbiB3aGVuIGNoYW5naW5nIHdpbmRvdyB0ZXh0LgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCU1vZGlmaWVkIFNldENhcHR1cmUoKSB0byBhbGxvdyBrZXlib2FyZCBldmVudHMgd2hpbGUgY2FwdHVyaW5nLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJTmV3IGZ1bmN0aW9uIE1TR19HZXRIYXJkd2FyZU1lc3NhZ2UoKSwgdG8gZG8gbW91c2UgdHJhY2tpbmcKCXdpdGhvdXQgcmV0dXJuaW5nIGNvbnRyb2wgdG8gdGhlIFdpbmRvd3MgcHJvZ3JhbS4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQSBjb3VwbGUgb2YgY2hhbmdlcyBpbiBmcmFtZSBkcmF3aW5nIGZvciBETEdNT0RBTEZSQU1FIHdpbmRvd3MuCglSZXdyaXR0ZW4gd2luZG93IG1vdmluZyBjb2RlLCB0byB1c2UgTVNHX0dldEhhcmR3YXJlTWVzc2FnZSgpCglpbnN0ZWFkIG9mIG5vbi1jbGllbnQgbW91c2UgZXZlbnRzICh0aGlzIGlzIHRoZSB3YXkgV2luZG93cwoJZG9lcyBpdCksIGFuZCB0byBzZW5kIFdNX0VOVEVSU0laRU1PVkUgbWVzc2FnZXMuCglSZW1vdmVkIFdNX05DQlVUVE9OVVAgYW5kIFdNX05DTU9VU0VNT1ZFIGhhbmRsZXJzLgoKCSogW3dpbmRvd3Mvd2luLmNdCglBbGxvY2F0ZSB0ZW1wb3Jhcnkgc3RydWN0dXJlcyBvbiB0aGUgVVNFUiBoZWFwIGluc3RlYWQgb2YKCXVzaW5nIEdsb2JhbEFsbG9jKCkuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUFkZGVkIGZ1bmN0aW9uIFdJTlBPU19HZXRNaW5NYXhJbmZvKCkgdG8gZ2V0IHNpemluZyBpbmZvcm1hdGlvbnMuCgpKYW4gMzEsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQ2FsbCB0byBTdGREcmF3U2Nyb2xsQmFyKCkgZHVyaW5nIE5DJ3MgZHJhd2luZy4KCUNhbGwgdG8gTkNfU2Nyb2xsQmFyQnV0dG9uRG93bigpIG9uIE5DIG1vdXNlIGV2ZW50cyBXTV9MQlVUVE9ORE9XTi4KCUNhbGwgdG8gTkNfU2Nyb2xsQmFyQnV0dG9uVXAoKSBvbiBOQyBtb3VzZSBldmVudHMgV01fTEJVVFRPTlVQLgoJQ2FsbCB0byBOQ19TY3JvbGxCYXJNb3VzZU1vdmUoKSBvbiBOQyBtb3VzZSBldmVudHMgV01fTU9VU0VNT1ZFLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU5ldyBHZXRTdWJNZW51KCkgZnVuY3Rpb24uCglNb3ZlIEdldE1lbnUoKSAmIFNldE1lbnUoKSBmdW5jdGlvbnMgZnJvbSAnd2luZG93cy93aW4uYycuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJU3RhcnQgY2hhbmdlcyB0byBzYXRpc2Z5IHJlY2VudCBjaGFuZ2VzIGluIHNjcm9sbGJhcnMvd2luZG93cy4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCVB1dCBzb21lIGNvZGUgaW4gTG9hZEFjY2VsZXJhdG9ycygpIHN0dWIuCglOZXcgVHJhbnNsYXRlQWNjZWxlcmF0b3IoKSBmdW5jdGlvbi4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJUmVtb3ZlIEdldE1lbnUoKSAmIFNldE1lbnUoKSBmdW5jdGlvbnMuCglDYWxsIHRvIE5DX0NyZWF0ZVNjcm9sbEJhcnMoKSBpZiByZXF1aXJlZCBieSBDcmVhdGVXaW5kb3coKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTW9uIEphbiAyNCAxMDo0MDoxMCBFU1QgMTk5NCBKb2huIFJpY2hhcmRzb24gKGpyaWNoYXJkQGNzLnVtbC5lZHUpCgogICAgICAgICogW3dpbmRvdy93aW4uY10KICAgICAgICBBZGRlZCBmdW5jdGlvbnMgRW51bVdpbmRvd3MsIEVudW1DaGlsZFdpbmRvd3MsIGFuZCBoZWxwZXIKICAgICAgICBXSU5fRW51bUNoaWxkV2luLiAgRW51bVdpbmRvd3Mgd29uJ3QgbGlzdCBhbGwgd2luZSB3aW5kb3dzCiAgICAgICAgYmVjYXVzZSBHZXREZXNrdG9wV2luZG93IGlzbid0IGNvbXBsZXRlLiAgSG93ZXZlciwgdGhlIGNvZGUKICAgICAgICBpcyBpbiBwbGFjZSBmb3IgaXQgdG8gd29yayBjb3JyZWN0bHkgYW5kIG9ubHkgbmVlZHMgCiAgICAgICAgR2V0RGVza3RvcFdpbmRvdyB0byBkbyBzby4gIAoKVHVlIEphbiAyNSAwNTo1MTo0NyAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUFkZGVkIGhhbmRsaW5nIG9mIGFjdGl2YXRpb24gbWVzc2FnZXMgKFdNX0FDVElWQVRFLAoJV01fTkNBQ1RJVkFURSwgV01fTU9VU0VBQ1RJVkFURSkKCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglEZS1hY3RpdmF0ZSB0aGUgd2luZG93IHdoZW4gbG9zaW5nIGlucHV0IGZvY3VzLgoKCSogW3dpbmRvd3MvZm9jdXMuY10KCUJ1ZyBmaXggaW4gU2V0Rm9jdXMoKS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUFkZGVkIGFjdGl2YXRpb24gb2YgdGhlIHdpbmRvdyBvbiBtb3VzZS1jbGlja3MuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUNoYW5nZWQgbm9uLWNsaWVudCBhcmVhIHBhaW50aW5nIHRvIHVzZSB0aGUgY29ycmVjdCBjb2xvcnMKCWRlcGVuZGluZyB1cG9uIHRoZSBhY3RpdmF0aW9uIHN0YXRlLgoJQWRkZWQgV01fTkNBQ1RJVkFURSBtZXNzYWdlIGhhbmRsaW5nLgoJRml4ZWQgYSBjb3VwbGUgb2YgYnVncyBpbiB3aW5kb3cgbW92aW5nIGFuZCByZXNpemluZy4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJSW1wbGVtZW50ZWQgR2V0L1NldEFjdGl2ZVdpbmRvdygpLgoJSW1wbGVtZW50ZWQgU1dQX05PQUNUSVZBVEUgZmxhZyBpbiBTZXRXaW5kb3dQb3MoKS4KCkphbiAxNywgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW21pc2MvbWVzc2FnZS5jXQoJTWVzc2FnZUJveCBoYXMgYSBDYXB0aW9uQmFyIGZvciBoaXMgdGl0bGUgZXhjZXB0IGZvcgoJCU1CX1NZU1RFTU1PREFMIHdpdGggTUJfSUNPTkhBTkQuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUNhbGwgdG8gTkNfVHJhY2tTeXNNZW51IG9uIFN5c01lbnUgYnV0dG9uIG1vdXNlIGNsaWNrLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglDYWxsIHRvIE5DX1RyYWNrU3lzTWVudSBvbiBBbHQga2V5IChWS19NRU5VKS4KCgkqIFtjb250cm9scy9tZW51LmNdCglOZXcgR2V0U3lzdGVtTWVudSgpIGZ1bmN0aW9uLgoJTmV3IENvcHlTeXN0ZW1NZW51KCkgaW50ZXJuYWwgZnVuY3Rpb24uCglOZXcgTkNfVHJhY2tTeXNNZW51KCkgaW50ZXJuYWwgZnVuY3Rpb24uCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglOZXcgV01fSU5JVE1FTlUsIFdNX0lOSVRNRU5VUE9QVVAsIFdNX01FTlVTRUxFQ1QgJiBXTV9NRU5VQ0hBUiBkZWZpbmVzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaHUgSmFuIDEzIDExOjQ1OjEzIDE5OTQgIEpvaG4gUmljaGFyZHNvbiA8anJpY2hhcmRAY3MudW1sLmVkdT4KCgkqIFt3aW5kb3cvd2luLmNdCglBZGRlZCBmdW5jdGlvbnMgRW5hYmxlV2luZG93LCBJc1dpbmRvd0VuYWJsZWQsIGFuZCBoZWxwZXIgCglXSU5fU2V0U2Vuc2l0aXZlLgoJCgkqIFt3aW5kb3cvZXZlbnQuY10KCUFkZGVkIGNoZWNrcyBmb3IgV1NfRElTQUJMRUQgd2luZG93cyBpbiBFVkVOVF9rZXksIEVWRU5UX01vdGlvbk5vdGlmeSwKCUVWRU5UX0J1dHRvblByZXNzLCBFVkVOVF9CdXR0b25SZWxlYXNlLCBFVkVOVF9Db25maWd1cmVOb3RpZnksCglFVkVOVF9Gb2N1c0luLCBFVkVOVF9Gb2N1c091dCwgYW5kIEVWRU5UX0VudGVyTm90aWZ5LiAgS2V5IGFuZCAKCWJ1dHRvbiBwcmVzc2VzIGJlZXAgZm9yIGEgZGlzYWJsZWQgd2luZG93LiAgCglJZiBhbnlvbmUgZmluZHMgYmV0dGVyIHBsYWNlcyBmb3IgdGhlc2UgY2hlY2tzLCBwbGVhc2UgdGVsbCBtZS4KCkphbiAxNywgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW21pc2MvbWVzc2FnZS5jXQoJQ2xlYW51cCBvbiBidXR0b25zIGFuc3dlciB2YWx1ZSByZXR1cm5lZC4KCgkqIFtjb250cm9sL2NvbWJvLmNdCglOb3cgdXNlIE9CTV9DT01CTyBiaXRtYXAgZHJvcGRvd24gYnV0dG9uLgoKTW9uIEphbiAxNyAyMTo1Njo0NSAxOTk0ICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW21pc2MvY29tbS9jXQoJQSBmZXcgYnVnZml4ZXMuCgpUdWUgSmFuIDE4IDA2OjM2OjQ4IDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFtsb2FkZXIvY3Vyc29yLmNdCglBZGRlZCBYIGN1cnNvciBmb3IgSURDX1NJWkVOUyBhbmQgSURDX1NJWkVXRS4KCgkqIFtpbmNsdWRlL29wdGlvbnMuaF0gW21pc2MvbWFpbi5jXSAgKE5ldyBmaWxlcykKCVJld3JvdGUgbWFpbigpIGZ1bmN0aW9uIHRvIGdldCByaWQgb2YgWHQgYXBwbGljYXRpb24gY29udGV4dCwKCWFuZCBhZGRlZCBjb21tYW5kLWxpbmUgb3B0aW9uIHBhcnNpbmcuCgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJVXNlIG9mIGEgcHJpdmF0ZSBtYXAgbm93IGNvbmZpZ3VyYWJsZSB3aXRoIGNvbW1hbmQtbGluZSBvcHRpb24uCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUFkZGVkIFdNX1NZU0NPTU1BTkQgaGFuZGxpbmcsIGFuZCBiZXR0ZXIgV01fU0VUQ1VSU09SIGhhbmRsaW5nLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCVJlbW92ZWQgQ29uZmlndXJlTm90aWZ5IGV2ZW50IGhhbmRsZXIgKG5vIGxvbmdlciBuZWVkZWQpLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJU2VuZCBXTV9TRVRDVVJTT1IgbWVzc2FnZSBvbiBtb3VzZSBldmVudHMuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCVVzZSBPRU0gYml0bWFwcyBmb3IgdGhlIGRyYXdpbmcgb2YgdGhlIG5vbi1jbGllbnQgYXJlYS4KCUFkZGVkIGNhcHRpb24gYmFyIGJ1dHRvbnMgaGFuZGxpbmcsIGFuZCBtb3ZpbmcgYW5kIHJlc2l6aW5nIG9mCgl0aGUgd2luZG93IHZpYSB0aGUgd2luZG93IGZyYW1lIChieXBhc3NpbmcgdGhlIHdpbmRvdyBtYW5hZ2VyKS4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglCdWcgZml4IGluIEJlZ2luUGFpbnQoKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJU2V0IHRoZSBvdmVycmlkZV9yZWRpcmVjdCBmbGFnIGZvciB3aW5kb3dzICh0byBieXBhc3Mgd2luZG93CgltYW5hZ2VyKS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJSW1wbGVtZW50ZWQgV2luZG93RnJvbVBvaW50KCksIENoaWxkV2luZG93RnJvbVBvaW50KCksCglCcmluZ1dpbmRvd1RvVG9wKCksIEdldC9TZXRJbnRlcm5hbFdpbmRvd1BvcygpLAoJR2V0L1NldFdpbmRvd1BsYWNlbWVudCgpLgoKTW9uIEphbiAxNyAyMDo0ODoyNCAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW21lbW9yeS9oZWFwLmNdCglBZGRlZCBzdXBwb3J0IGZvciBtdWx0aXBsZSBsb2NhbCBoZWFwcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIEphbiAgNCAxMzowMTozMyAxOTk0ICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgogICAgICAgICogW3dpbmRvdy9jYXJldC5jXQogICAgICAgIE1vZGlmaWVkIGNvZGUgdG8gdXNlIHN5c3RlbSB0aW1lci4KCkphbiA5LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbd2luZG93cy93aW4uY10KCVdpbmRvd3MgY3JlYXRlIGlmIHJlcXVpcmVkIG5ldyBYTElCIE1lbnVCYXIgJiBDYXB0aW9uQmFyLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglXTV9DQUxDU0laRSBNb3ZlICYgUmVzaXplIGNhcHRpb24sIG1lbnViYXIgJiBzY3JvbGxiYXJzLgoJKEknbSBub3Qgc3VyZSBpdCdzIHRoZSBnb29kIHBsYWNlIGZvciBpdCwgYnV0IGl0IHdvcmsuLi4pCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglvcHRpbWl6ZSBpbiBGaW5kUmVzb3VyY2VCeU51bWJlciwgbWFrZSBsc2VlaygpIGlmIG5leHQgdHlwZSAuLi4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCXNjcm9sbGJhciBidXR0b25zIGFyZSBub3cgdXNpbmcgc3lzdGVtIHJlc291cmNlcyBiaXRtYXBzLgoKCSogW2NvbnRyb2xzL2NhcHRpb24uY10gLSBuZXcgZmlsZSAuLi4KCWNhcHRpb25iYXIgc2hvd2luZyB0aXRsZSwgY2xvc2UgYnV0dG9uIHdpdGggU3lzTWVudSwKCWFuZCBvdGhlciBidXR0b25zIHVzaW5nIHN5c3RlbSByZXNvdXJjZXMgYml0bWFwcy4KCgkqIFtjb250cm9scy9tZW51LmNdCglOZXcgZnVuY3Rpb25zOiBTZXRNZW51SXRlbUJpdG1hcHMoKSB3aXRoICdnbHVlcycsCglNYWtlIG5ldyB2ZXJzaW9uIG9mIExvYWRNZW51KCkgJiBQYXJzZU1lbnUoKSwKCSggcHV0ICNkZWZpbmUgVVNFX1BPUFVQTUVOVSApLgoJSW1wbGVtZW50YXRpb24gb2YgTWVudUJhciBmdW5jdGlvbnMuCgkKCSogW3N5c3Jlcy5kbGxdCglOZXcgYml0bWFwcyBmb3Igc3lzdGVtIHN1Y2ggT0JNX0NMT1NFLCBPQk1fTUlOSU1JWkUsIE9CTV9VUEFSUk9XSS4KCU5ldyBTWVNNRU5VIG1lbnUsIGl0IGRvbid0IHdvcmsgeWV0ICEgOi0oKAoKVHVlIEphbiAxMSAwNToyNzo0NSAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQKCgkqIFttZW1vcnkvYXRvbS5jXQoJRml4ZWQgYSBidWcgdGhhdCBjb3VsZCBjYXVzZSBhdG9tcyB0byBiZSBjYXNlLXNlbnNpdGl2ZS4KCgkqIFttaXNjL3JlY3QuY10KCUJ1ZyBmaXggaW4gU3VidHJhY3RSZWN0KCkuCgoJKiBbb2JqZWN0cy9jbGlwcGluZy5jXQoJQnVnIGZpeCB3aGVuIHNldHRpbmcgdGhlIGNsaXAgbWFzayB0byBhbiBlbXB0eSByZWdpb24uCgoJKiBbd2luZG93cy9kY2UuY10KCUJ1ZyBmaXggaW4gUmVsZWFzZURDKCkuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUNhbGwgQWRqdXN0V2luZG93UmVjdEV4KCkgYmVmb3JlIGNyZWF0aW5nIHRoZSBkaWFsb2cgd2luZG93LgoJQWRkZWQgc3VwcG9ydCBmb3IgRFNfTU9EQUxGUkFNRSBzdHlsZS4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglDbGVhbmVkIHVwIGV2ZW50IGhhbmRsaW5nIGFuZCByZW1vdmVkIG9sZCBYdCBzdHVmZi4KCU1vdmVkIGRvdWJsZS1jbGljayBoYW5kbGluZyB0byB3aW5kb3dzL21lc3NhZ2UuYwoKCSogW3dpbmRvd3MvZm9jdXMuY10KCUJ1ZyBmaXg6IG9ubHkgc2V0IHRoZSBYIGZvY3VzIHdoZW4gdGhlIHdpbmRvdyBpcyB2aWV3YWJsZS4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglSZXdyaXR0ZW4gRHJhd1JlbGllZlJlY3QoKSB0byB1c2UgYnJ1c2ggaW5zdGVhZCBvZiBwZW4sIGFuZAoJdG8gdXNlIHRoZSBzeXN0ZW0gY29sb3JzLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJSW1wbGVtZW50ZWQgV01fTkNISVRURVNUIG1lc3NhZ2Ugc2VuZGluZywgYW5kIG5vbi1jbGllbnQKCW1vdXNlIG1lc3NhZ2VzLgoJQ2xlYW5lZCB1cCBkb3VibGUtY2xpY2sgaGFuZGxpbmcsIGFuZCByZW1vdmVkIHRoZSBYdCBjb2RlLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdICAoTmV3IGZpbGUpCglJbXBsZW1lbnRlZCBBZGp1c3RXaW5kb3dSZWN0KCkuCglJbXBsZW1lbnRlZCBXTV9OQ0NBTENTSVpFLCBXTV9OQ0hJVFRFU1QgYW5kIFdNX05DUEFJTlQgaGFuZGxpbmcuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJQWRkZWQgc2VuZGluZyBvZiB0aGUgV01fTkNQQUlOVCBtZXNzYWdlIGluIEJlZ2luUGFpbnQoKS4KCgkqIFt3aW5kb3dzL3N5c21ldHJpY3MuY10gW2luY2x1ZGUvc3lzbWV0cmljcy5oXSAgKE5ldyBmaWxlcykKCUltcGxlbWVudGVkIHN5c3RlbSBtZXRyaWNzLgoKCSogW3dpbmRvd3Mvd2luLmNdCglCdWcgZml4IGluIHNldHRpbmcgdGhlIHBhcmVudCBhbmQgb3duZXIgaW4gQ3JlYXRlV2luZG93KCkuCglSZW1vdmVkIHRoZSBYdCBjb2RlLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglBZGRlZCBzZW5kaW5nIG9mIHRoZSBXTV9OQ1BBSU5UIG1lc3NhZ2UgaW4gU2V0V2luZG93UG9zKCkuCglSZW1vdmVkIHRoZSBYdCBjb2RlLgoKU3VuIEphbiAgMiAxMjozODo1MyAxOTk0ICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgoJKiBbd2luZG93cy9jbGFzcy5jXQoJSW1wbGVtZW50ZWQgR2V0Q2xhc3NOYW1lIGFuZCBHZXRDbGFzc0luZm8uCgoJKiBbd2luZG93cy9jYXJldC5jXQoJVmFyaW91cyBpbXByb3ZlbWVudHMgdG8gdGV4dCBjYXJldCBjb2RlLgoKRnJpIERlYyAzMSAxNToyMjoyMiAxOTkzICBKb2huIEJyZXphayA8YnJlemFrQGFwb2xsby5ocC5jb20+CgoJKiBbbWlzYy9jb21tLmNdCglQYXRjaGVzIHRvIHdvcmsgd2l0aCBOZXRCU0QuCgpUaHUgRGVjIDMwIDEyOjExOjU1IDE5OTMgIEpvaG4gUmljaGFyZHNvbiA8anJpY2hhcmRAY3MudW1sLmVkdT4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXSBBZGRlZCBTdHJldGNoQmx0KCkuCgpUdWUgSmFuICA0IDA1OjIyOjA3IDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFttaXNjL3VzZXIuY10KCUFkZGVkIGNyZWF0aW9uIG9mIHN5c3RlbSBtZXNzYWdlIHF1ZXVlLgoKCSogW29iamVjdHMvYml0bWFwLmNdIFtvYmplY3RzL2RjdmFsdWVzLmNdIFt3aW5kb3dzL2RjLmNdCglBZGRlZCBEQyBzaXplIGZpZWxkcyBpbnRvIERDIHN0cnVjdHVyZS4JCQoKCSogW29iamVjdHMvY2xpcHBpbmcuY10KCUJ1ZyBmaXggaW4gQ0xJUFBJTkdfSW50ZXJzZWN0UmVjdCgpLgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCUFsbG9jYXRlIGEgRENFIGluc3RlYWQgb2YgYSBEQyBmb3IgQ1NfQ0xBU1NEQyBjbGFzc2VzLgoKCSogW3dpbmRvd3MvY2xpcHBpbmcuY10KCUZpeGVkIEdldFVwZGF0ZVJlY3QoKSBhbmQgR2V0VXBkYXRlUmduKCkgdG8gY2xpcCB0byB0aGUgY2xpZW50IGFyZWEuCgoJKiBbd2luZG93cy9kY2UuY10KCUltcGxlbWVudGVkIEdldERDRXgoKSBhbmQgR2V0V2luZG93REMoKS4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJSW1wbGVtZW50ZWQgV01fV0lORE9XUE9TQ0hBTkdFRCBoYW5kbGluZy4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglQcmVsaW1pbmFyeSBzdXBwb3J0IGZvciBYbGliIGV2ZW50IGhhbmRsaW5nIGluc3RlYWQgb2YgWHQgY2FsbGJhY2tzLgoJQ2hhbmdlZCBNU0dfQWRkTXNnKCkgY2FsbHMgdG8gaGFyZHdhcmVfZXZlbnQoKSBvciBQb3N0TWVzc2FnZSgpLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJUHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgbXVsdGlwbGUgbWVzc2FnZSBxdWV1ZXMuCglJbXBsZW1lbnRlZCBoYXJkd2FyZV9ldmVudCgpIHRvIHN0b3JlIG1lc3NhZ2VzIGludG8gdGhlIHN5c3RlbSBxdWV1ZS4KCUltcGxlbWVudGVkIEdldC9TZXRUYXNrUXVldWUoKS4KCUJldHRlciBXTV9QQUlOVCBhbmQgV01fVElNRVIgaGFuZGxpbmcuCglDaGFuZ2VzIHRvIHVzZSBYbGliIGluc3RlYWQgb2YgWHQgZm9yIGV2ZW50cy4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglVc2UgR2V0RENFeCgpIHRvIHJldHJpZXZlIHRoZSBEQywgdG8gZ2V0IGEgY29ycmVjdCB2aXNpYmxlIHJlZ2lvbi4KCgkqIFt3aW5kb3dzL3RpbWVyLmNdCglNb3ZlZCB0aGUgdGltZXIgcHJvY2VkdXJlIGNhbGxiYWNrIGludG8gRGlzcGF0Y2hNZXNzYWdlKCkuCglDaGFuZ2VkIGltcGxlbWVudGF0aW9uIHRvIGdldCByaWQgb2YgWHQgdGltZW91dHMuICBUaW1lciBjaGVja2luZwoJaXMgbm93IGRvbmUgaW5zaWRlIEdldE1lc3NhZ2UoKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQWxsb2NhdGUgYSBEQ0UgaW5zdGVhZCBvZiBhIERDIGZvciBDU19PV05EQyB3aW5kb3dzLgoJUmVwbGFjZWQgWHQgY2FsbHMgd2l0aCBYbGliIGNhbGxzLgoJTW92ZWQgd2luZG93IHBvc2l0aW9uaW5nIGZ1bmN0aW9ucyBpbnRvIHdpbmRvd3Mvd2lucG9zLmMKCgkqIFt3aW5kb3dzL3dpbnBvcy5jXSAgKE5ldyBmaWxlKQoJUmV3cml0dGVuIG1vc3Qgb2YgdGhlIHdpbmRvdyBwb3NpdGlvbmluZyBmdW5jdGlvbnMuCglJbXBsZW1lbnRlZCBTZXRXaW5kb3dQb3MoKSBhbmQgTWFwV2luZG93UG9pbnRzKCkuCgpKYW4gMywgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2lmMTYzMi91c2VyLnNwZWNdCglCYWQgYXJndW1lbnRzIGRlc2NyaXB0aW9uIGZvciBmdW5jdGlvbiBTZXREbGdJdGVtVGV4dC4KCgkqIFtvYmplY3RzL3RleHQuY10KCUZ1bmN0aW9uIERyYXdUZXh0IG5vdyBoYW5kbGUgRFRfQ0FMQ1JFQ1QgcmVxdWVzdC4KCgkqIFttaXNjL21lc3NhZ2UuY10KCU1lc3NhZ2UgYm94ZXMgbm93IHVzZSBEcmF3VGV4dCB3aXRoIERUX0NBTENSRUNULgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUJ1ZyBmaXggaW4gZnVuY3Rpb24gRnJhbWVSZWN0LCAoaXQgd2FzIHVzaW5nIFBFTiBpbnN0ZWFkIG9mIEJSVVNIKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQnVnIGZpeCBmb3IgZmxhZ3MgaW4gZnVuY3Rpb24gU2hvd1dpbmRvdy4KCU1vcmUgYWNjdXJhdGUgV01fU0laRSBnZW5lcmF0ZWQgYnkgZnVuY3Rpb24gU2hvd1dpbmRvdy4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglNb3JlIGNvZGUgZm9yIExCU19NVUxUSVBMRVNFTC4KCU1vcmUgY29kZSBmb3IgTEJTX01VTFRJQ09MVU1OLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQmFkIGRlZmluZSBmb3IgTUZfU0VQQVJBVE9SLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU5ldyBmdW5jdGlvbnM6IFBvcE1lbnVXbmRQcm9jKCkgd2l0aCAnZ2x1ZXMnLAoJQ3JlYXRlUG9wdXBNZW51KCksIEFwcGVuZE1lbnUoKSwgSW5zZXJ0TWVudSgpLCBSZW1vdmVNZW51KCksIAoJRGVsZXRlTWVudSgpLCBNb2RpZnlNZW51KCksIFRyYWNrUG9wdXBNZW51KCkuCglDb2RlIGluIHN0dWJzOiBDcmVhdGVNZW51KCksIERlc3Ryb3lNZW51KCkuIAoKU2F0IEphbiAgMSAxMDoyMjo0MyAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogbG9hZGVyL3dpbmUuYzogQWRkZWQgc3VwcG9ydCBmb3IgcmVsb2NhdGlvbiB0eXBlcyA1IGFuZCA2LgoKTW9uIERlYyAyNyAxMTowNjowMyAxOTkzICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW21pc2MvY29tbS5jXQoJbmV3IGZ1bmN0aW9uczogQnVpbGRDb21tRENCKCksIE9wZW5Db21tKCksIENsb3NlQ29tbSgpLAoJU2V0Q29tbUJyZWFrKCksIENsZWFyQ29tbUJyZWFrKCksIEVzY2FwZUNvbW1GdW5jdGlvbigpLCBGbHVzaENvbW0oKSwKCUdldENvbW1FcnJvcigpLCBTZXRDb21tRXZlbnRNYXNrKCksIEdldENvbW1FdmVudE1hc2soKSwKCVNldENvbW1TdGF0ZSgpLCBHZXRDb21tU3RhdGUoKSwgVHJhbnNtaXRDb21tQ2hhcigpLCBSZWFkQ29tbSgpLCAKCVdyaXRlQ29tbSgpLgoKV2VkIERlYyAyMiAxMzowMDoxNSAxOTkzICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgoJKiBbd2luZG93cy9jYXJldC5jXQoJSW1wbGVtZW50ZWQgdGV4dCBjYXJldCBmdW5jdGlvbnMuCgpUdWUgRGVjIDIxIDA2OjEzOjU4IDE5OTMgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFtsb2FkZXIvd2luZS5jXQoJQnVnIGZpeCBpbiBMb2FkSW1hZ2UoKS4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXSBbb2JqZWN0cy9jbGlwcGluZy5jXSBbb2JqZWN0cy90ZXh0LmNdCgkgIFt3aW5kb3dzL2RjLmNdIFt3aW5kb3dzL2RjZS5jXSBbd2luZG93cy9ncmFwaGljcy5jXQoJTW9kaWZpZWQgZ3JhcGhpY3MgY2FsbHMgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIERDIG9yaWdpbi4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJQWRkZWQgcHJlbGltaW5hcnkgV01fTkNDQUxDU0laRSBoYW5kbGluZy4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglTZW5kIFdNX05DQ0FMQ1NJWkUgbWVzc2FnZSBvbiByZXNpemUgZXZlbnQuCgoJKiBbd2luZG93cy93aW4uY10KCVNlbmQgV01fTkNDQUxDU0laRSBtZXNzYWdlIGluIENyZWF0ZVdpbmRvdygpLgoJUmVhbGl6ZSB3aWRnZXRzIGF0IGNyZWF0aW9uIHRpbWUgKHNob3VsZCBwcmV2ZW50IHByb2JsZW1zIHdpdGgKCXVucmVhbGl6ZWQgd2lkZ2V0cykuCgpEZWMgMTksIDkzIG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9zdGF0aWMuY10KCVNlbmQgbW91c2UgJiBrZXlib2FyZCBtZXNzYWdlIHJlY2VpdmVkIHRvIGl0cyBwYXJlbnQuCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglTZW5kIGtleWJvYXJkIG1lc3NhZ2UgcmVjZWl2ZWQgdG8gaXRzIHBhcmVudC4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglBZGQgTmF2aWdhdGlvbiBrZXlzIC4KCUxpc3RCb3ggbm93IHVzZSBWU0NST0xMICYgSFNDUk9MTCBpbnN0ZWFkIG9mIGNoaWxkcmVuLgoJQWxwaGEgdmVyc2lvbiBvZiBMQlNfTVVMVElQTEVTRUwuCglBbHBoYSB2ZXJzaW9uIG9mIExCU19NVUxUSUNPTFVNTi4KCgkqIFtjb250cm9scy9jb21iby5jXQoJQWRkIE5hdmlnYXRpb24ga2V5cyBvbiBjbG9zZWQgQ29tYm9Cb3guCglSZW1vdmUgdXNlbGVzcyAnQ09NQk9CT1hfQ3JlYXRlQ29tYm9Cb3gnIGZ1bmN0aW9uLgoKTW9uIERlYyAxOSAyMDozOTozNCAxOTkzICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW2xvYWRlci93aW5lLgoJTG9hZEltYWdlKCkgbW9kaWZpZWQgdG8gdXNlIEZpbmRGaWxlKCkuCgoJKiBbbWlzYy9maWxlLmNdCglTZXRFcnJvck1vZGUgYWRkZWQKCgkqIFttaXNjL2Rvc19mcy5jXQoJYnVnIGZpeGVzLgoKRGVjIDEzLCA5MyBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJYnVnIGZpeCBpbiBHbG9iYWxHZXRGcmVlU2VnbWVudCA6IGdvb2QgcHRyIGluICdnX3ByZXYnLgoKCSogW3N5c3Jlcy5kbGxdCglwcmVsaW1pbmFyeSB2ZXJzaW9uIG9mIGEgJ2dsYXNzIG9mIHdpbmUnIGJpdG1hcAoKCSogW3dpbmRvd3MvZXZlbnQuY10KCU5ldyBmdW5jdGlvbiAnR2V0Q2FwdHVyZScuCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglSZW1vdmUgdXNlbGVzcyAnU0NST0xMQkFSX0NyZWF0ZVNjcm9sbEJhcicgZnVuY3Rpb24uCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJUmVtb3ZlIHVzZWxlc3MgJ0xJU1RCT1hfQ3JlYXRlTGlzdEJveCcgZnVuY3Rpb24uCgpNb24gRGVjIDEzIDEzOjUxOjAwIDE5OTMgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUNvcnJlY3RlZCBidWdzIGluIEdldENoYXJXaWR0aCgpLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCU1vZGlmaWVkIEVWRU5UX2tleSB0byBzZW5kIFdpbmRvd3MgdmlydHVhbCBrZXkgY29kZXMgZm9yCglXTV9LRVlET1dOIGFuZCBXTV9LRVlVUCBtZXNzYWdlcywgYW5kIGEgV01fQ0hBUiBtZXNzYWdlCglmb3IgcHJpbnRhYmxlIGNoYXJhY3RlcnMuCgpXZWQgRGVjIDA4IDE5OjIwOjAwIDE5OTMgIEthcmwgR3VlbnRlciBXdWVuc2NoIChobjMyNHd1QHVuaWR1aS51bmktZHVpc2J1cmcuZGUpCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJQWRkZWQgUG9seWxpbmUgYW5kIFBvbHlnb24KCk1vbiBEZWMgMTMgMTQ6NTE6NTQgMTk5MyAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglMaXN0Qm94RGlyZWN0b3J5KCkgbW9kaWZpZWQgdG8gdXNlIGRvc19mcy5jJ3MgZnVuY3Rpb25zIHRvCglhY2Nlc3MgZmlsZXMmfGRyaXZlcy4KClNhdCBEZWMgMDQgMTc6MDQ6MjMgMTk5MyAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCiAgICAgICAJKiBbbWlzYy9kb3NfZnMuY10KICAgICAgIAlBZGRlZCBGaW5kRmlsZSgpIHRvIHNlYXJjaCBhIGZpbGUgaW4gYSBkb3MvdW5peCBzdHlsZSBwYXRoLgoJCgkqIFttaXNjL2ZpbGUuY10KCU5ldyBXaW4zMSBmdW5jdGlvbnM6IE9wZW5GaWxlLCBfbGNyZWF0ZSwgX2xsc2VlaywgR2V0VGVtcERyaXZlLAoJR2V0VGVtcEZpbGVOYW1lLCBHZXRXaW5kb3dzRGlyZWN0b3J5LCBHZXRTeXN0ZW1EaXJlY3RvcnksCglHZXREcml2ZVR5cGUuCQkJICAgCgogICAgICAgCSogW21pc2MvaW50MjEuY10KICAgICAgIAlNb2RpZmllZC4KCldlZCBEZWMgIDEgMTY6MjA6NDUgMTk5MyAgTWlndWVsIGRlIEljYXphICAobWlndWVsQHJveGFubmUubnVjbGVjdS51bmFtLm14KQoKICAgICAgICAqIFttaXNjL3Byb2ZpbGUuY10KICAgICAgICBUaGUgUHJvZmlsZSBmdW5jdGlvbnMgbm93IHJldHVybiB0aGUgY29ycmVjdCB2YWx1ZXMuIFRoZXkgbm93CiAgICAgICAgaW1wbGVtZW50IGFsbCB0aGUgZmVhdHVyZXMgZGVzY3JpYmVkIGluIHRoZSBTREsuCgpUdWUgTm92IDMwIDEzOjU1OjI3IDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IGFtc2NvbnMpCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglSZXdyb3RlIHNlbGVjdG9yIGFsaWFzaW5nIHJvdXRpbmVzIHRvIHVzZSBTeXN0ZW0gViBJUEMKCXJvdXRpbmUgdG8gYWxpYXMgbWVtb3J5IHNlZ21lbnRzLgoKTm92IDI4LCA5MyBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTW9yZSBjb25zaXN0ZW5jeSBpbiBmdW5jdGlvbnMgdXNpbmcgd0luZGV4ZXMKCgkqIFtjb250cm9scy9zY3JvbGwuY10KCU5ldyBmdW5jdGlvbiA6IFNob3dTY3JvbGxCYXIoKS4KCgkqIFtsb2FkZXIvY3Vyc29yLmNdIC4uLiBOZXcgZmlsZQoJTW92ZSBjdXJzb3IgZnVuY3Rpb25zIGZyb20gW2xvYWRlci9yZXNvdXJjZS5jXS4KCU5ldyBmdW5jdGlvbiA6IENsaXBDdXJzb3IoKS4KCU5ldyBmdW5jdGlvbiA6IEdldENsaXBDdXJzb3IoKS4KCU5ldyBmdW5jdGlvbiA6IENyZWF0ZUN1cnNvcigpLgoJU2V0Q3Vyc29yKCkgbm93IHdvcmtpbmcgdXNpbmcgZ2xvYWJhbCB2YXJpYWJsZSAnd2luSGFzQ3Vyc29yJy4KCgkqW29iamVjdC9wYWxldHRlLmNdCglOZXcgc3R1YiBvbmx5IDogU2VsZWN0UGFsZXR0ZSgpLgoJTmV3IHN0dWIgb25seSA6IFJlYWxpemVQYWxldHRlKCkuCgoJKlt3aW4vZXZlbnQuY10KCU5ldyBmdW5jdGlvbiA6IEVWRU5UX2VudGVyX25vdGlmeSgpLAoJCXVwZGF0ZSAnd2luSGFzQ3Vyc29yJyBhbmQgc2VuZCBXTV9TRVRDVVJTT1IuCgoJKlt3aW4vZGVmd25kLmNdCglBZGQgcHJvY2Vzc2luZyBvZiBXTV9TRVRDVVJTT1IgbWVzc2FnZS4KCgkqW3dpbi93aW4uY10KCU5ldyBtZW1iZXJzIGluIFdORCBzdHJ1Y3R1cmUgOiBoQ3Vyc29yLCBoV25kVlNjcm9sbCAmIGhXbmRIU2Nyb2xsLiAKCUNyZWF0ZVdpbmRvd0V4KCkgbm93IGNyZWF0ZSBjaGlsZHJlbiBmb3IgV01fSFNDUk9MTCAmIFdNX1ZTQ1JPTEwuCglOZXcgZnVuY3Rpb24gQ2xpZW50VG9TY3JlZW4oKS4KCU5ldyBmdW5jdGlvbiBTY3JlZW5Ub0NsaWVudCgpLgoKTW9uIE5vdiAyNSAxODoyNTo0MCAxOTkzICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKICAgICAgIAkqIFtmaWxlcy5oIC8gcmVnZnVuYy5oIC8gbWlzYy9kb3MuY10KICAgICAgIAlSZW1vdmVkLgoKICAgICAgIAkqIFttaXNjL2Rvc19mcy5jXQogICAgICAgCUFkZGVkIHN1cHBvcnQgZm9yIGxvYWRpbmcgZG9zZHJpdmUgY2ZnIGZyb20gd2luZS5pbmkuCgogICAgICAgCSogW21pc2MvaW50MjEuY10KICAgICAgIAlNb2RpZmllZC4KCgpXZWQgTm92IDI0IDExOjM3OjMzIDE5OTMgIGp1bGxpYXJkQGRpc3VuczIuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW2luY2x1ZGUvYXRvbS5oXSBbbWVtb3J5L2F0b20uY10KCUltcGxlbWVudGVkIGF0b21zLgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCU1vZGlmaWVkIFJlZ2lzdGVyQ2xhc3MoKSB0byB1c2UgYXRvbXMuCglJbXBsZW1lbnRlZCBDU19HTE9CQUxDTEFTUyBzdHlsZS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUltcGxlbWVudGVkIFJlZ2lzdGVyV2luZG93TWVzc2FnZSgpLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJQnVnIGZpeCBpbiBMb2FkUmVzb3VyY2UoKS4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJTW9kaWZpZWQgQ3JlYXRlRGlhbG9nUGFyYW0oKSB0byB1c2UgRmluZC9Mb2FkUmVzb3VyY2UoKS4KCk1vbiBOb3YgMjIgMTM6NTg6NTYgMTk5MyAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKICAgICAgICAqIFt3aW5kb3dzL3Njcm9sbC5jXQoJUHJlbGltaW5hcnkgaW1wbGVtZW50YXRpb25zIG9mIFNjcm9sbFdpbmRvdywgU2Nyb2xsREMgYW5kCiAgICAgICAgU2Nyb2xsV2luZG93RXguCgpOb3YgMjEsIDkzIG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglPcHRpbWl6YXRpb24gb2YgcmVkcmF3IGR1cmluZyAnQWRkJyBvciAnSW5zZXJ0Jy4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCU9wdGltaXphdGlvbiBvZiBXTV9QQUlOVCBkdXJpbmcgJ3RodW1idHJhY2tpbmcnLgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJQWRkIG9mIGJldGEgaW1wbGVtZW50IG9mICdCU19PV05FUkRSQVcnCgoJKiBbY29udHJvbHMvc3RhdGljLmNdCglTdHlsZSAnU1NfSUNPTicgbmV3IHN1cHBvcnRlZC4KCgkqIFttaXNjL21lc3NhZ2UuY10KCUJlZ2luIG9mIGltcGxlbWFudGF0aW9uIG9mIE1CX1hYWCBzdHlsZXMuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglGdW5jdGlvbiBMb2FkSWNvbigpIDogbm93IHByZXBhcmUgdHJhbnNwYXJlbmN5IEJpdG1hcCBtYXNrLgoJRnVuY3Rpb24gTG9hZEN1cnNvcigpIDogbm93IHByZXBhcmUgYSAnWCBwaXhtYXBjdXJzb3InLgoJTmV3IGZ1bmN0aW9uIFNldEN1cnNvcigpIDogbm90IGZpbmlzaGVkLgoJTmV3IGZ1bmN0aW9uIFNob3dDdXJzb3IoKSA6IG5vdCBmaW5pc2hlZC4KCU5ldyBmdW5jdGlvbiBBY2Nlc3NSZXNvdXJjZSgpIDogc3R1Yi4KCgkqIFtvYmovZGliLmNdCglGdW5jdGlvbiBEcmF3SWNvbigpOiBkZXVnZ2luZyBwaGFzZSBvZiBpY29uIHRyYW5zcGFyZW5jeSBtYXNrLgoKCSogW2xvYWRlci9saWJyYXJ5LmNdCgluZXcgZmlsZSBmb3IgbmV3cyBmdW5jdGlvbnMgTG9hZExpYnJhcnkoKSAmIEZyZWVMaWJyYXJ5KCkuCgoJKiBbc3lzcmVzLmRsbF0KCVJlc291cmNlcyBvbmx5IDE2Yml0cyBETEwgZm9yIFN5c3RlbSBSZXNvdXJjZXMsIGljb25zLCBldGMuLi4KClN1biBOb3YgMTQgMTQ6Mzk6MDYgMTk5MyAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW2luY2x1ZGUvZGlhbG9nLmhdIFt3aW5kb3dzL2RpYWxvZy5jXQoJU2ltcGxpZmllZCBkaWFsb2cgdGVtcGxhdGUgcGFyc2luZy4KCUltcGxlbWVudGVkIERpYWxvZ0JveEluZGlyZWN0KCkuCgoJKiBbd2luZG93cy93aW4uY10KCUZpeGVkIGJ1ZyBpbiBDcmVhdGVXaW5kb3coKSB3aGVuIGFib3J0aW5nIHdpbmRvdyBjcmVhdGlvbi4KCU1vZGlmaWVkIFVwZGF0ZVdpbmRvdygpIHRvIG9ubHkgdXBkYXRlIHZpc2libGUgd2luZG93cy4KCUltcGxlbWVudGVkIElzV2luZG93KCkuCgpOb3YgMTQsIDkzIG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglMaXN0Ym94IGNvbnRyb2wgd2luZG93IDogbmV3IG1lc3NhZ2VzLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglDb21ibyBib3ggY29udHJvbCB3aW5kb3cgOiBuZXcgbWVzc2FnZXMuCgoJKiBbbWlzYy9tZXNzYWdlLmNdCglNb3ZlZCBzdHViIE1lc3NhZ2VCb3goKSB0byB0aGlzIG5ldyBmaWxlLgoJSW1wbGVtZW50ZWQgb2YgYSBjYWxsYmFjaywgbm93IE1lc3NhZ2VCb3ggc2hvdyBhIHdpbmRvdy4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCU5ldyBmdW5jdGlvbiBEZXN0cm95SWNvbigpCglOZXcgZnVuY3Rpb24gRGVzdHJveUN1cnNvcigpCglGaWxsZWQgc3R1YiBMb2FkSWNvbigpCglGaWxsZWQgc3R1YiBMb2FkQ3Vyc29yKCkKCUJ1ZyBmaXhlZCBpbiBGaW5kUmVzb3VyY2VCeU5hbWUoKSA6IG1pc3NpbmcgbHNlZWsoKS4KCgkqIFtvYmovZGliLmNdCglOZXcgZnVuY3Rpb24gRHJhd0ljb24oKQoKCSogW3dpbmRvd3Mvd2luLmNdCglOZXcgZnVuY3Rpb24gQ2xvc2VXaW5kb3coKQoJTmV3IGZ1bmN0aW9uIE9wZW5JY29uKCkKCU5ldyBmdW5jdGlvbiBJc0ljb25pYygpCglOZXcgRnVuY3Rpb24gRmluZFdpbmRvdygpCgpTdW4gTm92IDE0IDA4OjI3OjE5IDE5OTMgIEthcmwgR3VlbnRlciBXdWVuc2NoIChoejIyNXd1QHVuaWR1aS51bmktZHVpc2J1cmcuZGUpCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglXcm90ZSBBbGxvY0NTdG9EU0FsaWFzKCkgYW5kIEFsbG9jRFN0b0NTQWxpYXMoKQoKU3VuIE5vdiAxNCAwODoyNzoxOSAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBhbXNjb25zKQoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJV3JvdGUgQWxsb2NTZWxlY3RvcigpIGFuZCBQcmVzdG9DaGFuZ29TZWxlY3RvcigpLiAgWVVLIQoKU2F0IE5vdiAxMyAxMzo1Njo0MiAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBhbXNjb25zKQoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJV3JvdGUgRmluZFJlc291cmNlKCksIExvYWRSZXNvdXJjZSgpLCBMb2NrUmVzb3VyY2UoKSwKCWFuZCBGcmVlUmVzb3VyY2UoKQoKCSogW2luY2x1ZGUvc2VnbWVtLmhdIFtsb2FkZXIvc2VsZWN0b3IuY10gW2xvYWRlci9zaWduYWwuaF0KCUNoYW5nZWQgc2VsZWN0b3IgYWxsb2NhdGlvbiBtZXRob2QuCgpTdW4gTm92IDEwIDA4OjI3OjE5IDE5OTMgIEthcmwgR3VlbnRlciBXdWVuc2NoIChoejIyNXd1QHVuaWR1aS51bmktZHVpc2J1cmcuZGUpCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmMgaWYxNjMyL2NhbGwuUyBpZjE2MzIvdXNlci5zcGVjXSAKCWFkZGVkIENhdGNoIChLRVJORUwuNTUpIGFuZCBUaHJvdyAoS0VSTkVMLjU2KQoJCk5vdiA3LCA5MyBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglTY3JvbGwgYmFyIGNvbnRyb2wgd2luZG93CgkJQnVnIHJlc29sdmVkIDogUGFpbnRpbmcgbWVzc2FnZSBiZWZvcmUgc2Nyb2xsIHZpc2libGUuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTGlzdGJveCBjb250cm9sIHdpbmRvdwoJCURlc3Ryb3kgY2xlYW51cC4KCgkqIFtjb250cm9scy9jb21iby5jXQoJQ29tYm8gYm94IGNvbnRyb2wgd2luZG93CgkJRGVzdHJveSBjbGVhbnVwLgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJCUdldENoZWNrIE1lc3NhZ2Ugbm93IHJldHVybiBpcyBzdGF0ZS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJTmV3IGZ1bmN0aW9uIElzV2luZG93VmlzaWJsZSgpCgpNb24gTm92ICAxIDE0OjQwOjIxIDE5OTMgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFtpZjE2MzIvdXNlci5zcGVjXQoJUmVtb3ZlZCBzb21lIGR1cGxpY2F0ZSBlbnRyaWVzLgoKCSogW2luY2x1ZGUvZGlhbG9nLmhdIFt3aW5kb3dzL2RpYWxvZy5jXQoJSW1wbGVtZW50ZWQgZGlhbG9nIHVuaXRzIGFuZCBmb250cy4KCUFkZGVkIHByZWxpbWluYXJ5IGxvYWRpbmcgb2YgZGlhbG9nIHJlc291cmNlcy4KCVByZWxpbWluYXJ5IGltcGxlbWVudGF0aW9uIG9mIERpYWxvZ0JveCgpLgoJSW1wbGVtZW50ZWQgR2V0L1NldERsZ0l0ZW0qIGZ1bmN0aW9ucy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJSW1wbGVtZW50ZWQgV01fUEFSRU5UTk9USUZZIG1lc3NhZ2UuCglJbXBsZW1lbnRlZCBDcmVhdGVXaW5kb3dFeCgpIGFuZCBHZXRXaW5kb3coKS4KCUNvbXBsZXRlZCBEZXN0cm95V2luZG93KCkuCgpNb24gTm92ICAxIDE4OjE5OjM0IDE5OTMgIEVyaWsgQm9zCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgaW50IDB4MTEgJiAweDEyLgoKICAgICAgICAqIFtsb2FkZXIvaW50MjEuY10KCUltcHJvdmVkIGZ1bmN0aW9uIGhhbmRsaW5nLgoKU3VuIE9jdCAzMSAxMjozODowOSAxOTkzICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgoJKiBbb2JqZWN0cy9mb250LmNdCglJbXBsZW1lbnRlZCBHZXRDaGFyV2lkdGgoKS4KCldlZCBPY3QgMjcgMDk6NTY6MDYgMTk5MyAgSm9obiBCcmV6YWsgPGJyZXpha0BjaC5ocC5jb20+CgoJKiBbTWFrZWZpbGVdCiAgICAgICAgVXNlIEdOVSBtYWxsb2MuCgoJKiBbaW5jbHVkZS9pbnQyMS5oIGluY2x1ZGUvd2luZS5oXQogICAgICAgIENoYW5nZSBzY19lZmxhZ3MgdG8gc2NfZWZsIC4KCgkqIFtpbmNsdWRlL3dpbmUuaF0KICAgICAgICBGaXggbWlzcGxhY2VkICNlbmRpZgogICAgICAgIEluY2x1ZGUgPHNpZ25hbC5oPiBmb3IgTmV0QlNECgoJKiBbbG9hZGVyL2ludDIxLmNdCiAgICAgICAgRG9uJ3QgaW5jbHVkZSA8c3lzL3Zmcy5oPiBpbiBOZXRCU0QKICAgICAgICBEbyBpbmNsdWRlIDxzeXMvbW91bnQuaD4gaW4gTmV0QlNECiAgICAgICAgQ2xlYW51cCBzb21lIGxpbnQuCgpNb24gT2N0IDI2IDE3OjU5OjAxIDE5OTMgIEVyaWsgQm9zCgogICAgICAgICogW2luY2x1ZGUvaW50MjEuaF0KICAgICAgICBBZGRlZC4KCiAgICAgICAgKiBbbG9hZGVyL2ludDIxLmNdCiAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgbWFueSBkb3MgaW50cy4KCiAgICAgICAgKiBbbWlzYy9maWxlLmNdIFtpbmNsdWRlL2ZpbGVzLmhdCiAgICAgICAgTW92ZWQgT1BFTl9NQVggYW5kIERvc0RyaXZlU3RydWN0IHRvIGZpbGVzLmguCgpTdW4gT2N0IDI0IDEzOjM2OjUwIDE5OTMgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFtjb250cm9scy9idXR0b24uY10KCUltcGxlbWVudGVkIENIRUNLQk9YLCBBVVRPQ0hFQ0tCT1gsIDNTVEFURSwgQVVUTzNTVEFURSwKCVJBRElPQlVUVE9OLCBBVVRPUkFESU9CVVRUT04sIEdST1VQQk9YIGNvbnRyb2xzLCB0b2dldGhlciB3aXRoCglhIHByZWxpbWluYXJ5IFVTRVJCVVRUT04gY29udHJvbC4KCgkqIFtvYmplY3RzL3RleHQuY10KCUNvcnJlY3RlZCBidWdzIGluIFRFWFRfTmV4dExpbmUoKSBhbmQgYWRkZWQgaGFuZGxpbmcgb2YgcHJlZml4CgljaGFyYWN0ZXIuCgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglEaXNhYmxlZCBmb2N1cyBoYW5kbGluZyBieSBjb21tZW50aW5nIG91dCBTZXRGb2N1cygpIGNhbGxzIHVudGlsCglzZXJpb3VzIGJ1ZyBjYW4gYmUgZm91bmQuCgpPY3QgIDIwLCA5MyBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTGlzdGJveCBjb250cm9sIHdpbmRvdwoJCVBhaW50aW5nIGNsZWFudXAsIG5ldyBtZXNzYWdlcyBwcm9jZXNzZWQuCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglTY3JvbGwgYmFyIGNvbnRyb2wgd2luZG93CgkJUGFpbnRpbmcgY2xlYW51cC4KCgkqIFtjb250cm9scy9jb21iby5jXQoJQ29tYm8gYm94IGNvbnRyb2wgd2luZG93CgkJUGFpbnRpbmcgY2xlYW51cC4KClR1ZSBPY3QgMTIgMTc6NTA6MTEgMTk5MyAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW29iamVjdHMvY29sb3IuY10gW29iamVjdHMvcGFsZXR0ZS5jXSBbd2luZG93cy9zeXNjb2xvci5jXQoJQmV0dGVyIHN1cHBvcnQgZm9yIHRoZSBwcml2YXRlIGNvbG9yIG1hcC4KCVVzaW5nIGEgcHJpdmF0ZSBtYXAgaXMgbm93IHRoZSBkZWZhdWx0LgoKCSogW3dpbmRvd3Mvd2luLmNdCglCdWcgZml4LgoKCSogW2luY2x1ZGUvZGlhbG9nLmhdIFt3aW5kb3dzL2RpYWxvZy5jXQoJSW1wbGVtZW50ZWQgQ3JlYXRlRGlhbG9nKigpIGFuZCBJc0RpYWxvZ01lc3NhZ2UoKS4KCgkqIFttaXNjL3h0LmNdIFt3aW5kb3dzL2RlZnduZC5jXQoJTW92ZWQgRGVmV2luZG93UHJvYygpIHRvIGRlZnduZC5jLgoJQWRkZWQgV01fTkNDUkVBVEUsIFdNX05DREVTVFJPWSBhbmQgV01fQ1RMQ09MT1IgaGFuZGxpbmcuCgoJKiBbd2luZG93cy9kZWZkbGcuY10KCVN0YXJ0ZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIERlZkRsZ1Byb2MoKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQWRkZWQgV01fTkNDUkVBVEUgYW5kIFdNX05DREVTVFJPWSBtZXNzYWdlcy4KCUltcGxlbWVudGVkIElzQ2hpbGQoKS4KClR1ZSBPY3QgMTIgMTc6NTA6MjAgMTk5MyAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW3dpbmRvd3MvZm9jdXMuY10KCUltcGxlbWVudGVkIEdldEZvY3VzKCkgYW5kIFNldEZvY3VzKCkuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJQWRkZWQgcHJvY2Vzc2luZyBvZiBGb2N1c0luIGFuZCBGb2N1c091dCBldmVudHMuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJQWRkZWQgRHJhd0ZvY3VzUmVjdCgpLgoKU2F0IE9jdCAgOSAxNDozNjo1NyAxOTkzICBFcmlrIEJvcwoKCSogW2xvYWRlci9pbnQxYS5jXQoJQWRkZWQgbW9yZSBmdW5jdGlvbiBoYW5kbGluZy4KCldlZCBPY3QgIDYgMTI6MjE6MjIgMTk5MyAgRXJpayBCb3MKCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglTcGxpdCBzaWduYWwuYyBpbnRvIGludDFhLmMsIGludDIxLmMgYW5kIHNpZ25hbC5jLgoKVHVlIE9jdCAgNSAyMjoxMjo0MCAxOTkzICBEYXZpZCBNZXRjYWxmZQoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXSBbY29udHJvbC93aWRnZXRzLmNdCglTdGF0aWMgY29udHJvbCBjbGFzcy4KCgkqIFtvYmplY3RzL3RleHQuY10KCUFkZGVkIHByb2Nlc3Npbmcgb2YgYWRkaXRpb25hbCBEVF8gZmxhZ3MgdG8gRHJhd1RleHQoKS4KCgkqIFt3aW5kb3dzL3dpbi5jXSBbbWlzYy94dC5jXQoJQWRkZWQgU2V0V2luZG93VGV4dCgpIGFuZCBXTV9TRVRURVhUIHByb2Nlc3NpbmcuCgpUdWUgT2N0ICA1IDIyOjEyOjQwIDE5OTMgIE1hcnRpbiBBeW90dGUKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglMaXN0Ym94IGNvbnRyb2wgd2luZG93CgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglTY3JvbGwgYmFyIGNvbnRyb2wgd2luZG93CgoJKiBbY29udHJvbHMvY29tYm8uY10KCUNvbWJvIGJveCBjb250cm9sIHdpbmRvdwoKCSogW2luY2x1ZGUvY29tYm8uaF0KCUNvbWJvIGJveCBkZWZpbml0aW9ucwoKCSogW2luY2x1ZGUvbGlzdGJveC5oXQoJTGlzdGJveCBkZWZpbml0aW9ucwoKCSogW2luY2x1ZGUvc2Nyb2xsLmhdCglTY3JvbGwgYmFyIGRlZmluaXRpb25zCgpTYXQgT2N0ICAyIDA5OjM1OjU0IDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglGaXhlZCBidWcgaW4gTWFrZVByb2NJbnN0YW5jZSgpLgoKCSogW2RlYnVnZ2VyL2luZm8uY10KCUNoYW5nZWQgeC93IGFuZCB4L2IgdG8gZGlzcGxheSBpbiBoZXguCgoJKiBbZGVidWdnZXIvaTM4Ni1waW5zbi5jXQoJQWRkZWQgY29kZSB0byBwcm9wZXJseSB1bmFzc2VtYmxlIDE2LWJpdCBpbmRleGluZy4KCkZyaSBPY3QgIDEgMDg6Mjk6MDUgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFtsb2FkZXIvZmlsZXMuY10gW21pc2MvcHJvZmlsZS5jXQoJU3lzdGVtIGluaXRpYWxpemF0aW9uIGZpbGUgaXMgbm93IGNhbGxlZCAid2luZS5pbmkiIGFuZCBjYW4KCWJlIGxvY2F0ZWQgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LAoJb3IgYW55IGRpcmVjdG9yaWVzIHNwZWNpZmllZCBpbiB0aGUgV0lORVBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUuCgoJKiBbdG9vbHMvYnVpbGQuY10gW2lmMTYzMi9jYWxsLlNdIFtpbmNsdWRlL3JlZ2Z1bmMuaF0KCUNoYW5nZWQgcmVnaXN0ZXIgZnVuY3Rpb24gc3RhY2sgdG8gbWF0Y2ggc2lnY29udGV4dCBzdHJ1Y3R1cmUuCgpUaHUgU2VwIDMwIDIyOjMwOjIxIDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgoJKiBbbG9hZGVyL2ZpbGVzLmNdCglDcmVhdGVkIGZ1bmN0aW9uIHRvIHNlYXJjaCBhIHBhdGggZm9yIGZpbGVzIHRvIGxvYWQuCgoJKiBbbG9hZGVyL3dpbmUuY10KCU1vZGlmaWVkIGV4ZSBhbmQgZGxsIGZpbGUgbG9hZGluZyB0byBzZWFyY2ggdGhyb3VnaCBwYXRoCglzcGVjaWZpZWQgYnkgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFdJTkVQQVRILgoKVGh1IFNlcCAzMCAyMjozMDoyMSAxOTkzICBFcmljIFlvdW5nZGFsZQoKCSogW2xvYWRlci9zaWduYWwuY10KCUJ1ZyBmaXguCgpUaHUgU2VwIDMwIDIyOjMwOjIxIDE5OTMgIEpvaG4gQnJlemFrCgoJKiBbZGVidWdnZXIvZGJnLnldIFtkZWJ1Z2dlci9kZWJ1Zy5sXSBbZGVidWdnZXIvZHRlc3QuY10gCgkgIFtkZWJ1Z2dlci9vYnN0YWNrLmhdCglVcGRhdGVzIHRvIGFsbG93IGRlYnVnZ2VyIHRvIGZ1bmN0aW9uIHVuZGVyIE5ldEJTRC4KClR1ZSBTZXAgMjggMTk6NTk6MjEgMTk5MyAgRGF2aWQgTWV0Y2FsZmUKCgkqIFt3aW5kb3dzL3dpbi5jXQoJSW1wbGVtZW50ZWQgc3VwcG9ydCBmb3Igd2luZG93cyB3aXRoIG5vIGJvcmRlcnMuICBBZGRlZAogCUdldFBhcmVudCgpLCBHZXREbGdDdHJsSUQoKSwgR2V0V2luZG93VGV4dCgpIGFuZAoJR2V0V2luZG93VGV4dExlbmd0aCgpIGZ1bmN0aW9ucy4KCgkqIFttaXNjL3h0LmNdCglBZGRlZCBwcm9jZXNzaW5nIG9mIFdNX0dFVFRFWFQgYW5kIFdNX0dFVFRFWFRMRU5HVEggbWVzc2FnZXMKCXRvIERlZldpbmRvd1Byb2MgYW5kIEltcGxlbWVudGVkIE1lc3NhZ2VCZWVwKCkuCgoJKiBbd2luZG93cy9zeXNjb2xvci5jXQoJQWRkZWQgcHJlbGltaW5hcnkgc3lzdGVtIGNvbG9yIHN1cHBvcnQuCgoJKiBbY29udHJvbHMvYnV0dG9uMS5jXQoJTW9kcyB0byBuZXcgYnV0dG9uIGNvbnRyb2wgYW5kIGludGVncmF0aW9uIHdpdGggV2luZS4KClR1ZSBTZXAgMjggMTk6NTk6MjEgMTk5MyAgSm9oYW5uZXMgUnVzY2hlaW5za2kKCgkqIFtjb250cm9scy9idXR0b24xLmNdCglOZXcgYnV0dG9uIGNvbnRyb2wgdXNpbmcgR0RJIGZ1bmN0aW9ucy4KCQpUdWUgU2VwIDI4IDE5OjU5OjIxIDE5OTMgIEVyaWMgWW91bmdkYWxlCgoJKiBbZGVidWdnZXIvKl0KCUFkZGVkIGRlYnVnZ2luZyBjYXBhYmlsaXRpZXMgdG8gV2luZQoKU2F0IFNlcCAyNSAxMzoyMjo1MCAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBkaS5lcGZsLmNoKQoKCSogW29iamVjdHMvcmVnaW9uLmNdCglCdWcgZml4CgpGcmkgU2VwIDI0IDA3OjM1OjExIDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgoJKiBbdG9vbHMvYnVpbGQuY10KCUNoYW5nZWQgdGhlIGVudHJ5IHBvaW50IGNvZGUgdG8gcmVkdWNlIHRoZSBzdGFuZGFyZCBlbnRyeQoJcG9pbnQgc2l6ZSBmcm9tIDIyIGJ5dGVzIHRvIDEwIGJ5dGVzLiAgVGhpcyBsZWF2ZXMgYWJvdXQKCTQwMDAgZnJlZSBlbnRyeSBwb2ludHMgaW5zdGVhZCBvZiB0aGUgODAwIGluIHZlcnNpb24gMC40LjIuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglSZXdyb3RlIGZ1bmN0aW9ucyB0byBhbGxvdyBsb2FkaW5nIG9mIHJlc291cmNlcyBmcm9tIGFueQoJRExMLgoKCSogW2xvYWRlci93aW5lLmNdIFtpbmNsdWRlL3dpbmUuaF0KCUFkZGVkIGZ1bmN0aW9ucyBHZXRGaWxlbmFtZUZyb21JbnN0YW5jZSgpIGFuZCBHZXRGaWxlSW5mbygpCgl0byBzZWFyY2ggZm9yIGEgbG9hZGVkIGZpbGUgYmFzZWQgb24gaXRzIGluc3RhbmNlIGhhbmRsZS4KCUFkZGVkIGEgZmllbGQgaW4gc3RydWN0IHdfZmlsZXMgdG8gbWFrZSBzZWFyY2hpbmcgYnkgYW4gaW5zdGFuY2UKCWhhbmRsZSBmYXN0ZXIuCgpUdWUgU2VwIDIxIDA5OjU3OjAxIDE5OTMgIG1pZ3VlbEByb3hhbm5lLm51Y2xlY3UudW5hbS5teCAoTWlndWVsIGRlIEljYXphKQoKCSogW21pc2MvcHJvZmlsZS5jXQoJSW1wbGVtZW50YXRpb24gb2YgLklOSSBmaWxlIGhhbmRsaW5nCgpNb24gU2VwIDIwIDEwOjU0OjMyIDE5OTMgIERhdmlkIE1ldGNhbGZlCgoJKiBbbWlzYy9wcm9maWxlLmMub2xkXQoJSW1wbGVtZW50YXRpb24gb2YgLklOSSBmaWxlIGhhbmRsaW5nCgpNb24gU2VwIDIwIDEwOjU0OjMyIDE5OTMgIEpvaG4gQnJlemFrCgoJKiBbY29udHJvbHMvV2luQnV0dG9uLmNdCglCdWcgZml4IHdpdGggY2FsbCB0byBYdFZhU2V0VmFsdWVzLgoKTW9uIFNlcCAyMCAxMDo1NDozMiAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCgkqIFt3aW5kb3dzL3dpbi5jXQoJUXVpY2sgcGF0Y2ggdG8gZ2V0IGNvbG9ybWFwcyB0byB3b3JrIHdpdGggYnV0dG9uIHdpZGdldC4KCk1vbiBTZXAgMjAgMDI6NDI6NTQgMTk5MyAgICAoeW5ndmlAaGFmcm8uaXMpCgoJKiBtaXNjL2tleWJvYXJkLmM6IAoJSWZkZWZlZCBvdXQgc29tZSBib2d1cyBBbnNpPC0+T2VtIGNvbnZlcnNpb24gZnVuY3Rpb25zCgoJKiBtaXNjL2xzdHIuYzogCglOZXcgZmlsZSB3aXRoIHN0cmluZyBmdW5jdGlvbnMgbGlrZSBsc3RyKiBJc0NoYXIqICpBbnNpKiAKCldlZCBTZXAgMTUgMjA6MzU6MTAgMTk5MyAgSm9obiBCcmV6YWsKCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglBZGRpdGlvbmFsIGNoYW5nZXMgdG8gc3VwcG9ydCBOZXRCU0QuCgpXZWQgU2VwIDE1IDIyOjE5OjIyIDE5OTMgIE1hcnRpbiBBeW90dGUKCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglBZGRlZCBGcmFtZVJlY3QgZnVuY3Rpb24KClR1ZSBTZXAgMTQgMTM6NTQ6NDUgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgoJKiBbb2JqZWN0cy9jb2xvci5jXSBbb2JqZWN0cy9wYWxldHRlLmNdCglQcmVsaW1pbmFyeSBzdXBwb3J0IGZvciBwcml2YXRlIGNvbG9yIG1hcC4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglJbXBsZW1lbnRlZCBDU19DTEFTU0RDIHN0eWxlLgoKCSogW3dpbmRvd3MvZGNlLmNdCglNb3ZlZCBEQ0VzIHRvIFVTRVIgaGVhcC4KCUltcGxlbWVudGVkIGNsYXNzIGFuZCB3aW5kb3cgRENzLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUltcGxlbWVudGVkIENTX0RCTENMS1Mgc3R5bGUuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJQnVnIGZpeCBpbiBTZXRQaXhlbCgpLgoKCSogW3dpbmRvd3Mvd2luLmNdCQoJSW1wbGVtZW50ZWQgQ1NfT1dOREMgc3R5bGUuCglJbXBsZW1lbnRlZCBHZXQvU2V0V2luZG93TG9uZygpLgoKCSogW2NvbnRyb2xzL21lbnUuY10gW3dpbmRvd3MvY2xhc3MuY10gW3dpbmRvd3MvY2xpcHBpbmcuY10gCgkgIFt3aW5kb3dzL2RjZS5jXSBbd2luZG93cy9tZXNzYWdlLmNdIFt3aW5kb3dzL3dpbi5jXQkKCU1vdmVkIHdpbmRvd3MgZnJvbSBnbG9iYWwgaGVhcCB0byBVU0VSIGhlYXAuCgpNb24gU2VwIDEzIDA1OjAwOjExIDE5OTMgIEVyaWMgWW91bmdkYWxlCgoJKiBbTWFrZWZpbGVdIFtpZjE2MzIvcmVsYXkuY10gW2luY2x1ZGUvZGxscy5oXSBbc2VsZWN0b3IuY10KCSAgW2xvYWRlci93aW5lLmNdIFt0b29scy9idWlsZC5jXQoJQWRkZWQgYWJpbGl0eSB0byBnZW5lcmF0ZSBtaXNzaW5nIGZ1bmN0aW9ucyBzdGF0aXN0aWNzLgoKTW9uIFNlcCAxMyAxMjowOTo0NyAxOTkzICBTY290dCBBLiBMYWlyZCAgKHNjb3R0QGN1cmx5KQoKCSogW1dJTjMxLUFQUExFVFNdCglBZGRlZCBuZXcgZmlsZS4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdCglBZGRlZCBkZWZpbml0aW9ucyBmb3IgR2V0UHJvZmlsZXtJbnQsU3RyaW5nfSBhbmQgU2V0SGFuZGxlQ291bnQuCgoJKiBbaWYxNjMyL2tleWJvYXJkLnNwZWNdCglDcmVhdGVkIGludGVyZmFjZSBzcGVjaWZpY2F0aW9uIGZvciBLZXlib2FyZCBkcml2ZXIgRExMLgoKCSogW2lmMTYzMi9yZWxheS5jXQoJQWRkZWQga2V5Ym9hcmQuZGxsIHRvIGxpc3Qgb2YgaW5jbHVkZWQgRExMcy4KCgkqIFtpZjE2MzIvdXNlci5zcGVjXQoJQWRkZWQgTG9hZEFjY2VsZXJhdG9ycyBkZWZpbml0aW9uLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJQWRkZWQgTG9hZEFjY2VsZXJhdG9ycyBzdHViLgoKCSogW21pc2MvZmlsZS5jXQoJQ2hhbmdlZCBPcGVuRmlsZSwgYW5kIGFkZGVkIFNldEhhbmRsZUNvdW50IChmb3Igd2luZmlsZS5leGUpCgoJKiBbbWlzYy9rZXlib2FyZC5jXQoJQWRkZWQga2V5Ym9hcmQgY29kZS4KCgkqIFttaXNjL3Byb2ZpbGUuY10gW21pc2MveHQuY10KCU1vdmVkIEdldFByaXZhdGVQcm9maWxlKiBjb21tYW5kcyBoZXJlLCBhbmQgYWRkZWQgR2V0UHJvZmlsZSoKCWNvbW1hbmRzLgoKTW9uIFNlcCAxMyAxMDoyNDozNyAxOTkzICBBbmRyZXcgQnVsaGFrCgoJKiBbd2luZG93cy91dGlsaXR5LmNdCglJbXBsZW1lbnRlZCBNdWxEaXYoKSwgT3V0cHV0RGVidWdTdHJpbmcoKSBhbmQgd3ZzcHJpbnRmKCkKCkZyaSBTZXAgMTAgMDk6MTM6MzAgMTk5MyAgSm9obiBCcmV6YWsKCgkqIFsqL01ha2VmaWxlXQoJQ3JlYXRlZCBwYXRjaCB0byBhbGxvdyBCU0QgbWFrZSB0byBidWlsZCB3aW5lLgoKCSogW3dpbmRvd3Mvd2luLmNdCglGaXhlZCBOVUxMIHBvaW50ZXIgcmVmZXJlbmNlLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXSBbbWlzYy94dC5jXQoJRGVmaW5lZCBIWiB0byBoYW5kbGUgc3lzdGVtIHNwZWNpZmljIHRpbWluZy4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglVc2UgTV9QSSBpcyBQSQoKCSogW29iamVjdHMvcGFsbGV0ZS5jXQoJTmV0QlNEIGRvZXMgbm90IGhhdmUgL3Vzci9pbmNsdWRlL3ZhbHVlcy5oIGFuZCBNQVhJTlQgaXMgSU5UX01BWC4KCgkqIFtkdW1wLmNdIFtsZHQuY10gW3dpbmUuY10KCWlmZGVmJ2VkIGxpbnV4IGhlYWRlcnMgZm9yIGxpbnV4IGNvbXBpbGUuCgoJKiBbbG9hZGVyL2xkdGxpYi5jXQoJQWRkIE5ldEJTRCBzeXN0ZW0gY2FsbHMgd2hlbiBjb21waWxlZCBvbiB0aGF0IHN5c3RlbS4KCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCVVzZSBtbWFwKE1BUF9BTk9OLCAuLi4pIGZvciBOZXRCU0QuCgoJKiBbaWYxNjMyL2NhbGwuU10KCUZpeGVkIHNlbGVjdG9yIGFzc3VtcHRpb25zLgoKVGh1IFNlcCA5IDIwOjAxOjM3IDE5OTMgIERhdmlkIE1ldGNhbGZlCgoJKiBbY29udHJvbHMvV2luQnV0dG9uKl0gW2NvbnRyb2xzL2J1dHRvbi5jXSBbY29udHJvbHMvd2lkZ2V0LmNdCiAgCSAgW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL2NsYXNzLmNdCglBZGRlZCAzRCBidXR0b24gY29udHJvbCBhbmQgdGllZCBpbnRvIENyZWF0ZVdpbmRvdygpCgpUaHUgU2VwICA5IDA3OjM1OjI0IDE5OTMgIFNjb3R0IExhaXJkCgoJKiBbaWYxNjMyL3NvdW5kLnNwZWNdCglDcmVhdGVkIGludGVyZmFjZSBzcGVjaWZpY2F0aW9uIGZvciBTT1VORCBETEwuCgoJKiBbaWYxNjMyL3dpbjg3ZW0uc3BlY10KCUFkZGVkIG1vcmUgZnVuY3Rpb25zIHRvIHRoZSBXSU44N0VNIERMTCBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbgoKCSogW21pc2MvZW11bGF0ZS5jXQoJQ3JlYXRlZCBzdHVicyBmb3IgdGhlIG5ldyBtYXRoIGVtdWxhdGlvbiBmdW5jdGlvbnMuCgoJKiBbbWlzYy9zb3VuZC5jXQoJQ3JlYXRlZCBzdHVicyBmb3IgdGhlIFNPVU5EIERMTC4KClN1biBTZXAgIDUgMjE6MDI6MTAgMTk5MyAgSm9obiBCdXJ0b24KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdCglBZGRlZCBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbnMgZm9yIE9wZW5GaWxlLCBfbGNsb3NlLCBfbHJlYWQsIF9sb3BlbiwKCWFuZCBfbHdyaXRlLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgT0ZfIG1hY3JvcwoKCSogW21pc2MvZmlsZS5jXQoJSW1wbGVtZW50ZWQgT3BlbkZpbGUsIF9sY2xvc2UsIF9scmVhZCwgX2xvcGVuIGFuZCBfbHdyaXRlLgoKRnJpIFNlcCAgMyAxODo0NzowMyAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCiAgICAgICAgKiBbd2luZG93cy9kYy5jXQoJQnVnIGZpeAoKCSogW29iamVjdHMvdGV4dC5jXQoJQnVnIGZpeAoKRnJpIFNlcCAgMyAxODo0NzowMyAxOTkzICBCb2IgQW1zdGFkdAoKICAgICAgICAqIFtvYmplY3RzL2xpbmVkZGEuY10KICAgICAgICBGaW5pc2hlZCBMaW5lRERBKCkuCgpGcmkgU2VwICAzIDExOjUyOjE4IDE5OTMgIEJvYiBBbXN0YWR0CgoJKiBbd2luZG93cy90aW1lci5jXQoJQ2hhbmdlZCB0byB1c2UgQ2FsbFdpbmRvd1Byb2MoKSByYXRoZXIgZGlyZWN0bHkgY2FsbGluZyBjYWxsYmFjay4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglJbXBsZW1lbnRlZCBTZXRDYXB0dXJlKCkgYW5kIFJlbGVhc2VDYXB0dXJlKCkKCgkqIFt3aW5kb3dzL2tleWJvYXJkLmNdCglDcmVhdGVkIHN0dWIgZm9yIEdldEtleVN0YXRlKCkKCgkqIFtvYmplY3RzL2xpbmVkZGEuY10KCUNyZWF0ZWQgc3R1YiBmb3IgTGluZUREQSgpCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglDcmVhdGVkIGNhbGxiYWNrIGhhbmRsZXIgZm9yIExpbmVEREEgY2FsbGJhY2sgcHJvY2VkdXJlLgoKCSogW2lmMTYzMi9jYWxsYmFjay5jXQoJQ3JlYXRlZCBGcmVlUHJvY0luc3RhbmNlKCkKCkZyaSBTZXAgIDMgMDg6MzY6NTIgMTk5MyAgRGF2aWQgTWV0Y2FsZmUKCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglQYXRjaCB0byBhbmQgY29kZSBmb3IgSU5UIDFBCgpUaHUgU2VwICAyIDAwOjMxOjU0IDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKCSogW29iamVjdHMvZm9udC5jXSBbb2JqZWN0cy90ZXh0LmNdCglNb3JlIHRleHQgc3VwcG9ydDogaW1wbGVtZW50ZWQganVzdGlmaWNhdGlvbiBhbmQgdW5kZXJsaW5pbmcuCgoJKiBbd2luZG93cy9jbGlwcGluZy5jXSBbb2JqZWN0cy9jbGlwcGluZy5jXQoJTW92ZWQgbG93LWxldmVsIGNsaXBwaW5nIGZ1bmN0aW9ucyB0byBvYmplY3RzL2NsaXBwaW5nLmMuCgoJKiBbd2luZG93cy9jbGlwcGluZy5jXSBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy9tZXNzYWdlLmNdCglJbXBsZW1lbnRlZCB3aW5kb3cgdXBkYXRlIHJlZ2lvbnMuCgoJKiBbd2luZG93cy9kYy5jXSBbb2JqZWN0cy9kY3ZhbHVlcy5jXQoJTW92ZWQgc29tZSBkZXZpY2UtaW5kZXBlbmRlbnQgREMgZnVuY3Rpb25zIHRvIG9iamVjdHMvZGN2YWx1ZXMuYy4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglJbXBsZW1lbnRlZCBJbnZlcnRSZWN0KCkgYW5kIEdldFBpeGVsKCkuCgpTYXQgQXVnIDI4IDA4OjQwOjIzIDE5OTMgIEVyaWMgWW91bmdkYWxlCgoJKiBbaW5jbHVkZS9uZWV4ZS5oXSBbbG9hZGVyL3dpbmUuY10KCUFkZGVkIGNvZGUgdG8gaGFuZGxlIHJlbG9jYXRpb24gdHlwZSA0LgoKCSogW2xvYWRlci9zaWduYWwuaF0gW2xvYWRlci93aW5lLmNdIFtsb2FkZXIvc2VsZWN0b3IuY10KCUFkZGVkIHN1cHBvcnQgZm9yIGRvcyBpbnRlcnJ1cHRzLgoKVGh1IDI2IEF1ZyAxOToxNTowMCAxOTkzICBFcmljIFlvdW5nZGFsZQoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJRml4ZWQgYnVnIGRlYWxpbmcgd2l0aCBsb2FkaW5nIERMTHMuCgpUaHUgQXVnIDI2IDE5OjIyOjQwIDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKICAgICAgICAqIFtpbmNsdWRlL2dkaS5oXSBbb2JqZWN0cy9mb250LmNdIFt3aW5kb3dzL2RjLmNdCiAgICAgICAgQmVnaW5uaW5nIG9mIHJlYWwgZm9udCBzdXBwb3J0LgoKICAgICAgICAqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCiAgICAgICAgSW1wbGVtZW50ZWQgUGF0Qmx0KCkuCgogICAgICAgICogW21lbW9yeS9nbG9iYWwuY10KICAgICAgICBDb3JyZWN0ZWQgYSBidWcgd2l0aCBsaW5rZWQgbGlzdCBoYW5kbGluZyBpbiBHbG9iYWxBbGxvYygpLgoKICAgICAgICAqIFtvYmplY3RzL2JpdG1hcC5jXQogICAgICAgIENvcnJlY3RlZCBhIGJ1ZyBpbiBCSVRNQVBfU2VsZWN0T2JqZWN0KCkuCgpUdWUgQXVnIDI0IDE5OjIyOjQwIDE5OTMgIERhdmlkIE1ldGNhbGZlCgogICAgICAgICogW2NvbnRyb2xzL0NvbW1hbmQqXSBbY29udHJvbHMvTGFiZWwqXSBbY29udHJvbHNbTWVudUJ1dHRvKl0KCSAgW2NvbnRyb2xzL1NtZU1lbnVCdXR0Kl0KCUNoYW5nZSBjb2RlIHRvIHN1cHBvcnQgJiBhcyBhIHNwZWNpYWwgY2hhcmFjdGVyIGluIG1lbnUgaXRlbSB0ZXh0LgoKVHVlIEF1ZyAyNCAxOToyMjo0MCAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCgkqIFtpbmNsdWRlL2dkaS5oXSBbd2luZG93cy9kYy5jXQoJSGVhdmlseSBtb2RpZmllZCB0aGUgREMgc3RydWN0dXJlIGZvciBiZXR0ZXIgZGV2aWNlLWluZGVwZW5kZW5jZS4KCgkqIFtvYmplY3RzL2JpdG1hcC5jXQoJSW1wbGVtZW50ZWQgYml0bWFwIGRpbWVuc2lvbnMuCgoJKiBbd2luZG93cy9kYy5jXSBbd2luZG93cy9kY2UuY10KCUltcGxlbWVudGVkIERDIHN0YXRlIHNhdmluZyBhbmQgcmVzdG9yaW5nLgoKCSogW3dpbmRvd3MvZGMuY10KCUltcGxlbWVudGVkIFJPUCBtb2RlLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUltcGxlbWVudGVkIEZpbGxSZWN0KCkuCgpNb24gQXVnIDIzIDIyOjA4OjM0IDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgoJKiBbbWlzYy94dC5jXQoJRml4ZWQgYnVnIGluIEludmFsaWRhdGVSZWN0KCkuICBTb2xpdGFpcmUgYXR0ZW1wdGVkIHRvCgljbGVhciB3aW5kb3cgYmVmb3JlIGl0IHdhcyByZWFsaXplZC4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUJlZ2FuIHJld3JpdGUgb2YgTG9hZEJpdG1hcCgpLgoKCSogW2xvYWRlci93aW5lLmNdCglGaXhlZCBjb2RlIHdoaWNoIHNldCBBcmd2IGFuZCBBcmdjIGdsb2JhbCB2YXJpYWJsZXMuCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglBZGRlZCBjb2RlIHRvIHNldCB1cCBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgoKCSogW2luY2x1ZGUvbmVleGUuaF0KCUZpeGVkIGVycm9yIGluIFBTUCBzdHJ1Y3R1cmUuCgpUdWUgQXVnIDE3IDIwOjQxOjEyIDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKCSogW2luY2x1ZGUvZ2RpLmhdIFt3aW5kb3dzL2RjLmNdCglJbXBsZW1lbnRlZCBkZXZpY2UgY2FwYWJpbGl0aWVzLgoKCSogW29iamVjdHMvcmVnaW9uLmNdCglJbXBsZW1lbnRlZCBFcXVhbFJnbigpIGFuZCBDb21iaW5lUmduKCkuCgoJKiBbd2luZG93cy9jbGlwcGluZy5jXQoJSW1wbGVtZW50ZWQgU2F2ZS9SZXN0b3JlVmlzUmduKCkuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJSW1wbGVtZW50ZWQgUGFpbnRSZ24oKSBhbmQgRmlsbFJnbigpLgoKCSogW3dpbmRvd3MvbWFwcGluZy5jXQoJSW1wbGVtZW50ZWQgbWFwcGluZyBtb2Rlcy4KClR1ZSBBdWcgMTAgMTQ6MDc6MzggMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10gW21pc2MvcmVjdC5jXQoJSW1wbGVtZW50ZWQgcmVjdGFuZ2xlIEFQSSBmdW5jdGlvbnMuCgoJKiBbaWYxNjMyL2dkaS5zcGVjXSBbaW5jbHVkZS9nZGkuaF0gW29iamVjdHMvcmVnaW9uLmNdCglJbXBsZW1lbnRlZCByZWdpb25zLgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCUNvcnJlY3RlZCBhIHR5cG8gaW4gVW5yZWdpc3RlckNsYXNzKCkuCgoJKiBbd2luZG93cy9jbGlwcGluZy5jXSBbd2luZG93cy9kYy5jXQoJSW1wbGVtZW50ZWQgREMgY2xpcHBpbmcgYW5kIHZpc2libGUgcmVnaW9uLgoKVHVlIEF1ZyAxMCAyMDo1Nzo1NiAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKCSogW2NvbnRyb2xzL21lbnUuY10gW3dpbmRvd3Mvd2luLmNdCglTZXRNZW51KCksIEdldE1lbnUoKSwgQ2hlY2tNZW51SXRlbSgpIGltcGxlbWVudGVkCgpUaHUgQXVnICA1IDIyOjMzOjIyIDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgoJKiBbY29udHJvbHMvbWVudS5jXSBbd2luZG93cy93aW4uY10KCU1hbnkgaW1wcm92ZW1lbnRzIG1lbnVzLiAgTG9hZE1lbnUoKSBzaG91bGQgd29yay4KCldlZCBBdWcgIDQgMTQ6NTU6MzYgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgogICAgICAgICogW29iamVjdHMvZGliLmNdCiAgICAgICAgU3RhcnRlZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgZGV2aWNlLWluZGVwZW5kZW50IGJpdG1hcHMuCgogICAgICAgICogW29iamVjdHMvYml0bWFwLmNdCiAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgYml0bWFwIGRlcHRocy4KCiAgICAgICAgKiBbb2JqZWN0cy9icnVzaC5jXQogICAgICAgIEltcGxlbWVudGVkIHBhdHRlcm4gYnJ1c2hlcy4KCiAgICAgICAgKiBbd2luZG93cy9kYy5jXSBbd2luZG93cy9ncmFwaGljcy5jXQogICAgICAgIEltcGxlbWVudGVkIHNvbWUgR0RJIGdyYXBoaWNzIHByaW1pdGl2ZXMuCgpUdWUgQXVnICAzIDIxOjE2OjQ3IDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgoJKiBbY29udHJvbHMvbWVudS5jXSBbd2luZG93cy93aW4uY10gW2luY2x1ZGUvbWVudS5oXQoJQ29kZSB0byBsb2FkIGNsYXNzIG1lbnVzIGZyb20gZXhlY3V0YWJsZSBmaWxlLgoKCSogW2lmMTYzMi91c2VyLnNwZWNdCglGaXhlZCBzcGVjaWZpY2F0aW9uIG9mIFNlbmRNZXNzYWdlKCkgYW5kIFBvc3RNZXNzYWdlLgoKTW9uIEp1bCAyNiAyMTo1MzoyNCAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCgkqIFtpZjE2MzIvY2FsbC5TXQoJQ29ycmVjdGVkIGEgYnVnIGluIEtFUk5FTF9Jbml0VGFzaygpLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgYSBsb3Qgb2YgY29uc3RhbnRzLgoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJQ29ycmVjdGVkIGEgYnVnIGluIHNlZ21lbnQgYWxsb2NhdGlvbiBpbiBDcmVhdGVTZWxlY3RvcnMoKS4KCgkqIFtvYmplY3RzL2JpdG1hcC5jXQoJSW1wbGVtZW50ZWQgU2VsZWN0T2JqZWN0KCkgZm9yIGJpdG1hcHMuCgoJKiBbb2JqZWN0cy9icnVzaC5jXQoJSW1wbGVtZW50ZWQgaGF0Y2hlZCBicnVzaGVzIGFuZCBTZWxlY3RPYmplY3QoKS4KCgkqIFtvYmplY3RzL2dkaW9iai5jXQoJUmVtb3ZlZCBsaW5rZWQgbGlzdCAobm90IG5lZWRlZCkuCgoJKiBbb2JqZWN0cy9wYWxldHRlLmNdCglJbXBsZW1lbnRlZCBzeXN0ZW0gcGFsZXR0ZSBjcmVhdGlvbiBhbmQgbWlzYy4gcGFsZXR0ZSBBUEkgZnVuY3Rpb25zLgoKCSogW3dpbmRvd3MvdGltZXIuY10KCUltcGxlbWVudGVkIHRpbWVycy4KCgkqIFt3aW5kb3dzL2RjLmNdCglJbXBsZW1lbnRlZCBtZW1vcnkgZGV2aWNlIGNvbnRleHRzLgoKVHVlIEp1bCAyMCAxMDozODo1OSAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKICAgICAgICAqIFtkb3MuY10KCVNwbGl0IERPUzNDYWxsKCkgb3V0IG9mIGtlcm5lbC5jLiAgQWRkZWQgc3VwcG9ydCBmb3IgZ2V0IGRhdGUKCWFuZCB0aW1lIGZ1bmN0aW9ucy4KCgkqIFtjYWxsLlNdCglBZGRlZCBmdW5jdGlvbiBSZXR1cm5Gcm9tUmVnaXN0ZXJGdW5jKCkgdG8gYWxsb3cgRE9TIGNhbGxzCgl0byByZXR1cm4gdmFsdWVzIGluIHJlZ2lzdGVycy4KCgkqIFtyZWdmdW5jLmhdCglNYWNyb3MgdG8gYWNjZXNzIHJlZ2lzdGVycyBzYXZlZCBvbiBzdGFjay4KClR1ZSBKdWwgMjAgMTA6Mzg6NTkgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgogICAgICAgICogW3dpbi5jXQogICAgICAgIENvcnJlY3RlZCBhbGxvY2F0aW9uIG9mIHRoZSBXTV9DUkVBVEUgZGF0YSBzdHJ1Y3R1cmUuCgogICAgICAgICogW2RjZS5jXSBbZGNlLmhdCiAgICAgICAgSW1wbGVtZW50ZWQgRENFIGhhbmRsaW5nLgoKICAgICAgICAqIFtiaXRtYXAuY10gW2JydXNoLmNdIFtkYy5jXSBbZm9udC5jXSBbZ2RpLmhdIFtnZGkuc3BlY10gCiAgICAgICAgICBbZ2Rpb2JqLmNdIFtwYWxldHRlLmNdIFtwZW4uY10KICAgICAgICBJbXBsZW1lbnRlZCB0aGUgR0RJIG9iamVjdHMgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbGxvY2F0aW9uLgoKICAgICAgICAqIFt3aW5kb3dzLmhdCiAgICAgICAgQWRkZWQgc2V2ZXJhbCBzdHJ1Y3R1cmVzIGFuZCBjb25zdGFudHMgZm9yIEdESSBvYmplY3RzLgoKTW9uIEp1bCAxOSAxMjo1MToxMCAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKCSogW2xkdGxpYi5jXQoJTW9kaWZpZWQgc3lzdGVtIGNhbGxzIHRvIG1hdGNoIExpbnVzJyBuZXcgaW50ZXJmYWNlIGZvcgoJdGhlIExEVCBtb2RpZmljYXRpb24uCgoJKiBbd2luLmNdCglGaXhlZCBidWcgd2l0aCBXTV9DUkVBVEUgbWVzc2FnZS4KCgkqIFtoZWFwLmNdIFtrZXJuZWwuc3BlY10KCUNvbXBsZXRlZCBsb2NhbCBoZWFwIGFsbG9jYXRpb24gZnVuY3Rpb25zLgoKCSogW2dsb2JhbC5jXQoJQ3JlYXRlZCBmdW5jdGlvbiBHbG9iYWxRdWlja0FsbG9jKCkgZm9yIGVhc3kgYWxsb2NhdGlvbiBmcm9tIERMTHMKClR1ZSBKdWwgMTMgMjA6MzE6MzEgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFtnbG9iYWwuY10KCUNvbXBsZXRlZCBnbG9iYWwgbWVtb3J5IHBvb2wgQVBJCgpTdW4gSnVsIDExIDE2OjU5OjUyIDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKCSogW21lc3NhZ2UuY10gW3VzZXIuY10gW3VzZXIuc3BlY10gW3dpbmRvd3MuaF0KCUFkZGVkIGVtdWxhdGlvbiBvZiBXaW5kb3dzIG1lc3NhZ2UgcXVldWUuCgpUaHUgSnVsICA4IDE5OjI5OjI3IDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgoJKiBbYnVpbGQuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW2NhbGxiYWNrLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0LCB1cGRhdGVzIGJ5IAoJQWxleGFuZHJlIEp1bGxpYXJkCgkqIFtkdW1wLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtnbG9iYWwuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW2hlYXAuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW2tlcm5lbC5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbbGR0LmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtsZHRsaWIuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW3JlbGF5LmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtyZXNvdXJjZS5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdCwgdXBkYXRlcyBieSAKCUFsZXhhbmRyZSBKdWxpYXJkCgkqIFtzZWxlY3Rvci5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdCwgdXBkYXRlcyBieSBFcmljIFlvdW5nZGFsZQoJKiBbdXNlci5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbd2luZS5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdCwgdXBkYXRlcyBieSBFcmljIFlvdW5nZGFsZSBhbmQKCUFsZXhhbmRyZSBKdWxsaWFyZAoJKiBbd2ludGNsLmNdIE9yaWdpbmFsIGJ5IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwKCXVwZGF0ZXMgYnkgUGV0ZXIgTWFjRG9uYWxkIGFuZCBBbGV4YW5kcmUgSnVsbGlhcmQKCSogW2NhbGxiYWNrLmhdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtkbGxzLmhdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtoZWFwLmhdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtuZWV4ZS5oXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbcHJvdG90eXBlcy5oXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdCwgdXBkYXRlcyBieSAKCUVyaWMgWW91bmdkYWxlCgkqIFtzZWdtZW0uaF0gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW3RrSW50LmhdIE9yaWdpbmFsIGJ5IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQoJKiBbd2luZG93cy5oXSBPcmlnaW5hbCBieSBQZXRlciBNYWNEb25hbGQsIHVwZGF0ZXMgYnkgCglBbGV4YW5kcmUgSnVsbGlhcmQgYW5kIEJvYiBBbXN0YWR0CgkqIFt3aW5lLmhdIE9yaWdpbmFsIGJ5IEVyaWMgWW91bmdkYWxlCgkqIFtrZXJuZWwuc3BlY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQsIHVwZGF0ZXMgYnkgCglBbGV4YW5kcmUgSnVsbGlhcmQKCSogW2dkaS5zcGVjXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdCwgdXBkYXRlcyBieSAKCUFsZXhhbmRyZSBKdWxsaWFyZAoJKiBbc2hlbGwuc3BlY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW3VuaXhsaWIuc3BlY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW3VzZXIuc3BlY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQsIHVwZGF0ZXMgYnkgQWxleGFuZHJlIEp1bGxpYXJkCgkqIFt3aW44N2VtLnNwZWNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtXaW5kb3dzLnRjbF0gT3JpZ2luYWwgYnkgUGV0ZXIgTWFjRG9uYWxkLCB1cGRhdGVzIGJ5IAoJQWxleGFuZHJlIEp1bGxpYXJkCgkqIFtidWlsZC1zcGVjLnR4dF0gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW2lmMTYzMi5TXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdCwgdXBkYXRlcyBieSBFcmljIFlvdW5nZGFsZQo=