MjAwMjA2MDI3CiAtIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzI2IDE0OjQ5OjM2CiAgICAgW21vbml0b3IuY10KICAgICBjb3JyZWN0ICV1CiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yNiAxNDo1MDowNAogICAgIFttb25pdG9yX2ZkcGFzcy5jXQogICAgIHVzZSBzc2l6ZV90IGZvciByZWN2bXNnKCkgYW5kIHNlbmRtc2coKSByZXR1cm4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjYgMTQ6NTE6MzMKICAgICBbc3NoLWFkZC5jXQogICAgIGZpeCBleGl0IGNvZGUgZm9yIC1YLy14CgoyMDAyMDYyNgogLSAoc3RldmVzaykgW21vbml0b3IuY10gcmVtb3ZlIGR1cGxpY2F0ZSBwcm90bzE1IGRpc3BhdGNoIGVudHJ5IGZvciBQQU0KIC0gKGJhbCkgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMyAyMTozNDowNwogICAgIFtjaGFubmVscy5jXQogICAgIHRjb2RlIGlzIHVfaW50CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzI0IDEzOjEyOjIzCiAgICAgW3NzaC1hZ2VudC4xXQogICAgIHRoZSBzb2NrZXQgbmFtZSBjb250YWlucyBzc2gtYWdlbnQncyBwcGlkOyB2aWEgbXBlY2hAIGZyb20gZm9ybUAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjQgMTQ6MzM6MjcKICAgICBbY2hhbm5lbHMuYyBjaGFubmVscy5oIGNsaWVudGxvb3AuYyBzZXJ2ZXJsb29wLmNdCiAgICAgbW92ZSBjaGFubmVsIGNvdW50ZXIgdG8gdV9pbnQKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjQgMTQ6NTU6MzgKICAgICBbYXV0aGZpbGUuYyBrZXguYyBzc2gtYWdlbnQuY10KICAgICBjYXQgdG8gKHZvaWQpIHdoZW4gb3V0cHV0IGZyb20gYnVmZmVyX2dldF9YIGlzIGlnbm9yZWQKICAgLSBpdG9qdW5AY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjQgMTU6NDk6MjIKICAgICBbbXNnLmNdCiAgICAgcHJpbnRmIHR5cGUgcGVkYW50CiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yNCAxNzo1NzoyMAogICAgIFtzZnRwLXNlcnZlci5jIHNzaHB0eS5jXQogICAgIGV4cGxpY2l0ICh1X2ludCkgZm9yIHVpZCBhbmQgZ2lkCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzI1IDE2OjIyOjQyCiAgICAgW2F1dGhmZC5jXQogICAgIHVubmVjZXNzYXJ5IGNhc3QKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjUgMTg6NTE6MDQKICAgICBbc3NoZC5jXQogICAgIGxpZ2h0d2VpZ2h0IGRvX3NldHVzZXJjb250ZXh0IGFmdGVyIGNocm9vdCgpCiAtIChiYWwpIFVwZGF0ZWQgQUlYIHBhY2thZ2UgYnVpbGQuICBQYXRjaCBieSBkdHVja2VyQHppcC5jb20uYXUKIC0gKHRpbSkgW01ha2VmaWxlLmluXSBmaXggdGVzdCBvbiBpbnN0YWxsaW5nIHNzaC1yYW5kLWhlbHBlci44CiAtIChiYWwpIGFkZGVkIGJhY2sgaW4gZXJyb3IgY2hlY2sgZm9yIG1tYXAoKS4gIEkgc2NyZXdlZCB1cCwgUG9pbnRlZAogICBvdXQgYnkgc3RldmVza0AKIC0gKHRpbSkgW1JFQURNRS5wcml2c2VwXSBVbml4V2FyZSB0aXAgbm8gbG9uZ2VyIG5lZWRlZC4KIC0gKGJhbCkgZml4ZWQgTmVYVFN0ZXAgbWlzc2luZyBtdW5tYXAoKSBpc3N1ZS4gSXQgZGVmaW5lcyBIQVZFX01NQVAsCiAgIGJ1dCBpdCBhbGwgZGFtbmVkIGxpZXMuCiAtIChzdGV2ZXNrKSBbUkVBRE1FLnByaXZzZXBdIG1vcmUgZm9yIHNzaGQgcHNldWRvLWFjY291bnQuCiAtICh0aW0pIFtjb250cmliL2NhbGRlcmEvb3BlbnNzaC5zcGVjXSBhZGQgc3VwcG9ydCBmb3IgcHJpdnNlcAogLSAoZGptKSBzZXRsb2dpbiBuZWVkcyBwZ2lkPT1waWQgb24gQlNEL09TOyBmcm9tIGl0b2p1bkAKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yNiAwODo1MzoxMgogICAgIFtidWZhdXguY10KICAgICBsaW1pdCBzaXplIG9mIEJOcyB0byA4S0I7IG9rIHByb3Zvcy9kZXJhYWR0CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzI2IDA4OjU0OjE4CiAgICAgW2J1ZmZlci5jXQogICAgIGxpbWl0IGFwcGVuZCB0byAxTUIgYW5kIGJ1ZmZlcnMgdG8gMTBNQgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yNiAwODo1NTowMgogICAgIFtjaGFubmVscy5jXQogICAgIGxpbWl0ICMgb2YgY2hhbm5lbHMgdG8gMTAwMDAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjYgMDg6NTg6MjYKICAgICBbc2Vzc2lvbi5jXQogICAgIGxpbWl0ICMgb2YgZW52IHZhcnMgdG8gMTAwMDsgb2sgZGVyYWFkdC9kam0KICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzI2IDEzOjIwOjU3CiAgICAgW21vbml0b3IuY10KICAgICBiZSBjYXJlZnVsIGluIG1tX3phbGxvYwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjYgMTM6NDk6MjYKICAgICBbc2Vzc2lvbi5jXQogICAgIGRpc2Nsb3NlIGxlc3MgaW5mb3JtYXRpb24gZnJvbSBlbnZpcm9ubWVudCBmaWxlczsgYmFzZWQgb24gaW5wdXQgCiAgICAgZnJvbSBkam0sIGFuZCBkc2NodWx0ekB1Y2xpbmsuQmVya2VsZXkuRURVCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzI2IDEzOjU1OjM3CiAgICAgW2F1dGgyLWNoYWxsLmNdCiAgICAgbWFrZSBzdXJlICMgb2YgcmVzcG9uc2UgbWF0Y2hlcyAjIG9mIHF1ZXJpZXMsIGZpeGVzIGludCBvdmVyZmxvdzsgCiAgICAgZnJvbSBJU1MKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjYgMTM6NTY6MjcKICAgICBbdmVyc2lvbi5oXQogICAgIDMuNAogLSAoZGptKSBSZXF1aXJlIGtyYjUgZGV2ZWwgZm9yIFJQTSBidWlsZCB3LyBLcmJWIAogLSAoZGptKSBJbXByb3ZlIFBBTUF1dGhlbnRpY2F0aW9uVmlhS2JkSW50IHRleHQgZnJvbSBOYWxpbiBEYWh5YWJoYWkgCiAgIDxuYWxpbkByZWRoYXQuY29tPgogLSAoZGptKSBVcGRhdGUgc3BlYyBmaWxlcyBmb3IgcmVsZWFzZSAKIC0gKGRqbSkgRml4IGludCBvdmVyZmxvdyBpbiBhdXRoMi1wYW0uYywgc2ltaWxhciB0byBvbmUgZGlzY292ZXJlZCBieSBJU1MKIC0gKGRqbSkgUmVsZWFzZSAzLjRwMQogLSAodGltKSBbY29udHJpYi9jYWxkZXJhL29wZW5zc2guc3BlY10gcmVtb3ZlIDIgY29uZmlndXJlIG9wdGlvbnMgSSBwdXQgaW4KICAgYnkgbWlzdGFrZQoKMjAwMjA2MjUKIC0gKHN0ZXZlc2spIFtJTlNUQUxMIGFjY29uZmlnLmggY29uZmlndXJlLmFjIGRlZmluZXMuaF0gcmVtb3ZlIC0td2l0aC1yc2gKIC0gKHN0ZXZlc2spIFtSRUFETUUucHJpdnNlcF0gbWlub3IgdXBkYXRlcwogLSAoZGptKSBDcmVhdGUgcHJpdnNlcCBkaXJlY3RvcnkgYW5kIHdhcm4gaWYgcHJpdnNlcCB1c2VyIGlzIG1pc3NpbmcgCiAgIGR1cmluZyBtYWtlIGluc3RhbGwKIC0gKGJhbCkgU3RhcnRlZCBsaXN0IG9mIFByaXZTZXAgaXNzdWVzIGluIFRPRE8KIC0gKGJhbCkgaWYgbW1hcCgpIGlzIHN1YnN0YW5kYXJkLCBkb24ndCBhbGxvdyBjb21wcmVzc2lvbiBvbiBzZXJ2ZXIgc2lkZS4KICAgUG9zdCAnZXZlbnQnIHdlIHdpbGwgYWRkIG1vcmUgb3B0aW9ucy4KIC0gKHRpbSkgW2NvbnRyaWIvY2FsZGVyYS9vcGVuc3NoLnNwZWNdIFN5bmMgd2l0aCBDYWxkZXJhCiAtIChiYWwpIG1vdmVkIGFpeF91c3JpbmZvKCkgYW5kIG5vdGVkIG5vdCBzZXR0aW5nIHJlYWwgVFRZLiAgUGF0Y2ggYnkKICAgZHR1Y2tlckB6aXAuY29tLmF1CiAtICh0aW0pIFthY2NvbmZpZy5oIGNvbmZpZ3VyZS5hYyBzc2hkLmNdIEJST0tFTl9GRF9QQVNTSU5HIGZpeCBmcm9tIE1hcmt1cwogICBmb3IgQ3lnd2luLCBDcmF5LCAmIFNDTwoKMjAwMjA2MjQKIC0gT3BlbkJTRCBDVlMgU3luYwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjMgMDM6MjU6NTAKICAgICBbdGlsZGV4cGFuZC5jXQogICAgIEtORgogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjMgMDM6MjY6MTkKICAgICBbY2lwaGVyLmMga2V5LmNdCiAgICAgS05GCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMyAwMzozMDo1OAogICAgIFtzY2FyZC5jIHNzaC1kc3MuYyBzc2gtcnNhLmMgc3NoY29ubmVjdC5jIHNzaGNvbm5lY3QyLmMgc3NoZC5jIHNzaGxvZ2luLmMKICAgICAgc3NocHR5LmNdCiAgICAgdmFyaW91cyBLTkYgYW5kICVkIGZvciB1bnNpZ25lZAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjMgMDk6MzA6MTQKICAgICBbc2Z0cC1jbGllbnQuYyBzZnRwLWNsaWVudC5oIHNmdHAtY29tbW9uLmMgc2Z0cC1pbnQuYyBzZnRwLXNlcnZlci5jCiAgICAgIHNmdHAuY10KICAgICBidW5jaCBvZiB1X2ludCB2cyBpbnQgc3R1ZmYKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIzIDA5OjM5OjU1CiAgICAgW3NzaC1rZXlnZW4uY10KICAgICB1X2ludCBzdHVmZgogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjMgMDk6NDY6NTEKICAgICBbYnVmYXV4LmMgc2VydmNvbmYuY10KICAgICBtaW5vciBLTkYuICB0aGluZ3MgdGhlIGZpbmdlcnMgZG8gd2hpbGUgeW91IHJlYWQKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIzIDEwOjI5OjUyCiAgICAgW3NzaC1hZ2VudC5jIHNzaGQuY10KICAgICBzb21lIG1pbm9yIEtORiBhbmQgJXUKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIzIDIwOjM5OjQ1CiAgICAgW3Nlc3Npb24uY10KICAgICBjb21wcmVzc2lvbl9sZXZlbCBpcyB1X2ludAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjMgMjE6MDY6MTMKICAgICBbc3NocHR5LmNdCiAgICAgS05GCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMyAyMTowNjo0MQogICAgIFtjaGFubmVscy5jIGNoYW5uZWxzLmggc2Vzc2lvbi5jIHNlc3Npb24uaF0KICAgICBkaXNwbGF5LCBzY3JlZW4sIHJvdywgY29sLCB4cGl4ZWwsIHlwaXhlbCBhcmUgdV9pbnQ7IG1hcmt1cyBvawogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjMgMjE6MTA6MDIKICAgICBbcGFja2V0LmNdCiAgICAgcGFja2V0X2dldF9pbnQoKSByZXR1cm5zIHVuc2lnbmVkIGZvciByZWFzb24gJiBzZXFucgogIC0gKGJhbCkgQWxzbyBmaXhlZCBJUEFERFJfSU5fRElTUExBWSBjYXNlIHdoZXJlIGRpc3BsYXksIHNjcmVlbiwgcm93LCBjb2wsCiAgICB4cGl4ZWwgYXJlIHVfaW50LgoKCjIwMDIwNjIzCiAtIChzdGV2ZXNrKSBbY29uZmlndXJlLmFjXSBidWcgIzI1NSBMT0dJTl9ORUVEU19VVE1QWCBmb3IgQUlYLgogLSAoYmFsKSByZW1vdmVkIEdOVWlzbSBmb3IgZ2V0b3BzIGluIHNzaC1hZ2VudCBzaW5jZSBnbGliYyBsYWNrcyBvcHRyZXNldC4KIC0gKGJhbCkgYWRkIGV4dGVybiBjaGFyICpnZXRvcHQuICBCYXNlZCBvbiByZXBvcnQgYnkgZHR1Y2tlckB6aXAuY29tLmF1IAogLSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMiAwMjowMDoyOQogICAgIFtzc2guaF0KICAgICBjb3JyZWN0IGNvbW1lbnQKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIyIDAyOjQwOjIzCiAgICAgW3NzaC4xXQogICAgIHNlY3Rpb24gNSBub3QgNCBmb3Igc3NoX2NvbmZpZwogICAtIG5hZGR5QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIyIDExOjUxOjM5CiAgICAgW3NzaC4xXQogICAgIHR5cG8KICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIyIDE2OjMyOjU0CiAgICAgW3NzaGQuOF0KICAgICBhZGQgL3Zhci9lbXB0eSBpbiBGSUxFUyBzZWN0aW9uCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMiAxNjo0MDoxOQogICAgIFtzc2hkLmNdCiAgICAgY2hlY2sgL3Zhci9lbXB0eSBvd25lciBtb2RlOyBvayBwcm92b3NACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMiAxNjo0MTo1NwogICAgIFtzY3AuMV0KICAgICB0eXBvCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMiAxNjo0NToyOQogICAgIFtzc2gtYWdlbnQuMSBzc2hkLjggc3NoZF9jb25maWcuNV0KICAgICB1c2UgcHJvY2VzcyBJRCB2cy4gcGlkL1BJRC9wcm9jZXNzIGlkZW50aWZpZXIKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIyIDIwOjA1OjI3CiAgICAgW3NzaGQuY10KICAgICBkb24ndCBjYWxsIHNldHNpZCgpIGlmIGRlYnVnZ2luZyBvciBydW4gZnJvbSBpbmV0ZDsgbm8gIk9wZXJhdGlvbiBub3QKICAgICBwZXJtaXR0ZWQiIGVycm9ycyBub3c7IG9rIG1pbGxlcnRAIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIyIDIzOjA5OjUxCiAgICAgW21vbml0b3IuY10KICAgICBzYXZlIGF1dGggbWV0aG9kIGJlZm9yZSBtb25pdG9yX3Jlc2V0X2tleV9zdGF0ZSgpOyBidWd6aWxsYSBidWcgIzI4NDsKICAgICBvayBwcm92b3NACgoyMDAyMDYyMgogLSAoZGptKSBVcGRhdGUgUkVBRE1FLnByaXZzZXA7IHNwb3R0ZWQgYnkgZnJpZXNACiAtIChkam0pIFJlbGVhc2UgMy4zcDEKIC0gKGJhbCkgZ2V0b3B0IG5vdyBjYW4gYmUgc3RhdGljbHkgY29tcGlsZWQgb24gdGhvc2UgcGxhdGZvcm1zIG1pc3NpbmcKICAgb3B0cmVzZXQuICBQYXRjaCBieSBiaW5kZXJAYXJhZ28uZGUKCjIwMDIwNjIxCiAtIChkam0pIFN5bmM6CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIxIDA1OjUwOjUxCiAgICAgW21vbml0b3IuY10KICAgICBEb24ndCBpbml0aWFsaXNlIGNvbXByZXNzaW9uIGJ1ZmZlcnMgd2hlbiBjb21wcmVzc2lvbj1ubyBpbiBzc2hkX2NvbmZpZzsKICAgICBvayBOaWVsc0AKICAtIElEIHN5bmMgZm9yIGF1dGgtcGFzc3dkLmMKIC0gKGRqbSkgV2FybiBhbmQgZGlzYWJsZSBjb21wcmVzc2lvbiBvbiBwbGF0Zm9ybXMgd2hpY2ggY2FuJ3QgaGFuZGxlIGJvdGgKICAgdXNlcHJpdmlsZWdlc2VwYXJhdGlvbj15ZXMgYW5kIGNvbXByZXNzaW9uPXllcwogLSAoZGptKSBjb250cmliL3JlZGhhdC9vcGVuc3NoLnNwZWMgaGFja2luZzoKICAgLSBNZXJnZSBpbiBzcGVjIGNoYW5nZXMgZnJvbSBzZWJhQGlxLnBsIChTZWJhc3RpYW4gUGFjaHV0YSkKICAgLSBBZGQgbmV3IHtzc2gsc3NoZH1fY29uZmlnLjUgbWFucGFnZXMKICAgLSBBZGQgbmV3IHNzaC1rZXlzaWduIHByb2dyYW0gYW5kIHJlbW92ZSBzZXR1aWQgZnJvbSBzc2ggY2xpZW50CgoyMDAyMDYyMAogLSAoYmFsKSBGaXhlZCBBSVggZW52aXJvbm1lbnQgaGFuZGxpbmcsIHVzZSBzZXRwY3JlZCgpIGluc3RlYWQgb2YgZXhpc3RpbmcKICAgY29kZS4gIChCdWd6aWxsYSBCdWcgMjYxKQogLSAoYmFsKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gdG9kZEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8xNCAyMTozNTowMAogICAgIFttb25pdG9yX3dyYXAuY10KICAgICBzcGVsbGluZzsgZnJvbSBCcmlhbiBQb29sZSA8cmFqQGNlcmlhcy5wdXJkdWUuZWR1PgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8xNSAwMDowMTozNgogICAgIFthdXRoZmQuYyBhdXRoZmQuaCBzc2gtYWRkLmMgc3NoLWFnZW50LmNdCiAgICAgYnJlYWsgYWdlbnQga2V5IGxpZmV0aW1lIHByb3RvY29sIGFuZCBhbGxvdyBvdGhlciBjb250cmFpbnRzIGZvciBrZXkKICAgICB1c2FnZS4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMTUgMDA6MDc6MzgKICAgICBbYXV0aGZkLmMgYXV0aGZkLmggc3NoLWFkZC5jIHNzaC1hZ2VudC5jXQogICAgIGZpeCBzdHVwaWQgdHlwbwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8xNSAwMToyNzo0OAogICAgIFthdXRoZmQuYyBhdXRoZmQuaCBzc2gtYWRkLmMgc3NoLWFnZW50LmNdCiAgICAgcmVtb3ZlIHRoZSBDT05TVFJBSU5fSURFTlRJVFkgbWVzc2FnZXMgYW5kIGludHJvZHVjZSBhIG5ldwogICAgIEFERF9JRCBtZXNzYWdlIHdpdGggY29udHJhaW50cyBpbnN0ZWFkLiBjb250cmFpbnRzIGNhbiBiZQogICAgIG9ubHkgYWRkZWQgdG9nZXRoZXIgd2l0aCB0aGUgcHJpdmF0ZSBrZXkuCiAgIC0gaXRvanVuQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzE2IDIxOjMwOjU4CiAgICAgW3NzaC1rZXlzY2FuLmNdCiAgICAgdXNlIFRBSUxRX3h4IG1hY3JvLiAgZnJvbSBsdWtlbUBuZXRic2QuICBtYXJrdXMgb2sKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzE3IDA2OjA1OjU2CiAgICAgW3NjcC5jXQogICAgIG1ha2UgdXNhZ2UgbGlrZSBtYW4gcGFnZQogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMTkgMDA6Mjc6NTUKICAgICBbYXV0aC1ic2RhdXRoLmMgYXV0aC1za2V5LmMgYXV0aDEuYyBhdXRoMi1jaGFsbC5jIGF1dGgyLW5vbmUuYyBhdXRoZmQuYwogICAgICBhdXRoZmQuaCBtb25pdG9yX3dyYXAuYyBtc2cuYyBuY2hhbi5jIHJhZGl4LmMgcmVhZGNvbmYuYyBzY3AuYyBzZnRwLjEKICAgICAgc3NoLWFkZC4xIHNzaC1hZGQuYyBzc2gtYWdlbnQuMSBzc2gtYWdlbnQuYyBzc2gta2V5Z2VuLjEgc3NoLWtleWdlbi5jCiAgICAgIHNzaC1rZXlzaWduLmMgc3NoLjEgc3NoY29ubmVjdC5jIHNzaGNvbm5lY3QuaCBzc2hjb25uZWN0Mi5jIHR0eW1vZGVzLmMKICAgICAgeG1hbGxvYy5oXQogICAgIEtORiBkb25lIGF1dG9tYXRpY2FsbHkgd2hpbGUgcmVhZGluZy4uLi4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMTkgMTg6MDE6MDAKICAgICBbY2lwaGVyLmMgbW9uaXRvci5jIG1vbml0b3Jfd3JhcC5jIHBhY2tldC5jIHBhY2tldC5oXQogICAgIG1ha2UgdGhlIG1vbml0b3Igc3luYyB0aGUgdHJhbnNmZXIgc3NoMSBzZXNzaW9uIGtleTsKICAgICB0cmFuc2ZlciBrZXljb250ZXh0IG9ubHkgZm9yIFJDNCAodGhpcyBpcyBzdGlsbCBkZXBlbmRzIG9uIEVWUAogICAgIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIGlzIGJyb2tlbikuCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMCAxOTo1NjowNwogICAgIFtzc2guMSBzc2hkLjhdCiAgICAgbW92ZSBjb25maWd1cmF0aW9uIGZpbGUgb3B0aW9ucyBmcm9tIHNzaC4xL3NzaGQuOCB0bwogICAgIHNzaF9jb25maWcuNS9zc2hkX2NvbmZpZy41OyBvayBkZXJhYWR0QCBtaWxsZXJ0QAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjAgMjA6MDA6MDUKICAgICBbc2NwLjEgc2Z0cC4xXQogICAgIHNzaF9jb25maWcoNSkKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIwIDIwOjAzOjM0CiAgICAgW3NzaF9jb25maWcgc3NoZF9jb25maWddCiAgICAgcmVmZXIgdG8gY29uZmlnIGZpbGUgbWFuIHBhZ2UKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjAgMjM6MDU6NTYKICAgICBbc2VydmNvbmYuYyBzZXJ2Y29uZi5oIHNlc3Npb24uYyBzc2hkLmNdCiAgICAgYWxsb3cgQ29tcHJlc3Npb249eWVzL25vIGluIHNzaGRfY29uZmlnCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIwIDIzOjM3OjEyCiAgICAgW3NzaGRfY29uZmlnXQogICAgIGFkZCBDb21wcmVzc2lvbgogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMjUgMjA6NDA6MDgKICAgICBbTElDRU5DRV0KICAgICBtaXNzZWQgUGVyIEFsbGFuc3NvbiAoYXV0aDItY2hhbGwuYykKIC0gKGJhbCkgQ3lnd2luIHNwZWNpYWwgaGFuZGxpbmcgb2YgZW1wdHkgcGFzc3dvcmRzIHdyb25nLiAgUGF0Y2ggYnkKICAgdmluc2NoZW5AcmVkaGF0LmNvbQogLSAoYmFsKSBNaXNzZWQgaW50ZWdyYXRpbmcgc3NoX2NvbmZpZy41IGFuZCBzc2hkX2NvbmZpZy41CiAtIChiYWwpIFN0aWxsIG1vcmUgTWFrZWZpbGUuaW4gdXBkYXRlcyBmb3Igc3Noe2R9X2NvbmZpZy41CgoyMDAyMDYxMwogLSAoYmFsKSB0eXBvIG9mIHNldGdyb3VwIGZvciBjeWd3aW4uICBQYXRjaCBieSB2aW5zY2hlbkByZWRoYXQuY29tCgoyMDAyMDYxMgogLSAoYmFsKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzExIDIzOjAzOjU0CiAgICAgW3NzaC5jXQogICAgIHJlbW92ZSB1bnVzZWQgY3J1ZnQuCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzEyIDAxOjA5OjUyCiAgICAgW3NzaC5jXQogICAgIHNzaF9jb25uZWN0IHJldHVybnMgMCBvbiBzdWNjZXNzCiAtIChiYWwpIEJ1aWxkIG5vb3Agc2V0Z3JvdXBzKCkgZm9yIGN5Z3dpbiB0byBjbGVhbiB1cCBjb2RlIChGb3Igb3RoZXIKICAgcGxhdGZvcm1zIHdpdGhvdXQgdGhlIHNldGdyb3VwcygpIHJlcXVpcmVtZW50LCB5b3UgTVVTVCBkZWZpbmUKICAgU0VUR1JPVVBTX05PT1AgaW4gdGhlIGNvbmZpZ3VyZS5hYykgQmFzZWQgb24gcGF0Y2ggYnkgdmluc2NoZW5AcmVkaGF0LmNvbQogLSAoYmFsKSBTb21lIHBsYXRmb3JtcyBkb24ndCBoYXZlIE9OTENSIChOb3RhYmxlIE1pbnQpCgoyMDAyMDYxMQogLSAoYmFsKSBzc2gtYWdlbnQuYyBSQ1NEIGZpeCAofHVuZXhwYW5kIGFscmVhZHkgZG9uZSkKIC0gKGJhbCkgT3BlbkJTRCBDVlMgU3luYwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDkgMjI6MTU6MTUKICAgICBbc3NoLjFdCiAgICAgdXBkYXRlIGZvciBubyBzZXR1aWQgcm9vdCBhbmQgc3NoLWtleXNpZ247IG9rIGRlcmFhZHRACiAgIC0gaXRvanVuQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzA5IDIyOjE3OjIxCiAgICAgW3NzaGNvbm5lY3QuY10KICAgICBwYXNzIHNhbGVuIHRvIHNvY2thZGRyX250b3Agc28gdGhhdCB3ZSBhcmUgaGFwcHkgb24gbGludXgvc29sYXJpcwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMTAgMTY6NTM6MDYKICAgICBbYXV0aC1yc2EuYyBzc2gtcnNhLmNdCiAgICAgZGlzcGxheSBtaW5pbXVtIFJTQSBtb2R1bHVzIGluIGVycm9yKCk7IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzEwIDE2OjU2OjMwCiAgICAgW3NzaC1rZXlzaWduLjhdCiAgICAgbWVyZ2UgaW4gc3R1ZmYgZnJvbSBteSBtYW4gcGFnZTsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMTAgMTc6MzY6MjMKICAgICBbc3NoLWFkZC4xIHNzaC1hZGQuY10KICAgICB1c2UgY29udnRpbWUoKSB0byBwYXJzZSBhbmQgdmFsaWRhdGUga2V5IGxpZmV0aW1lLiAgY2FuIG5vdwogICAgIHVzZSAnLXQgMmgnIGV0Yy4gIG9rIG1hcmt1c0AgcHJvdm9zQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMTAgMTc6NDU6MjAKICAgICBbcmVhZGNvbmYuYyBzc2guMV0KICAgICBjaGFuZ2UgUmhvc3RzUlNBQXV0aGVudGljYXRpb24gYW5kIFJob3N0c0F1dGhlbnRpY2F0aW9uIGRlZmF1bHQgdG8gbm8KICAgICBzaW5jZSBzc2ggaXMgbm8gbG9uZ2VyIHNldHVpZCByb290IGJ5IGRlZmF1bHQ7IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzEwIDIxOjIxOjEwCiAgICAgW3NzaF9jb25maWddCiAgICAgdXBkYXRlIGRlZmF1bHRzIGZvciBSaG9zdHNSU0FBdXRoZW50aWNhdGlvbiBhbmQgUmhvc3RzQXV0aGVudGljYXRpb24KICAgICBoZXJlIHRvbyAoYWxsIG9wdGlvbnMgY29tbWVudGVkIG91dCB3aXRoIGRlZmF1bHQgdmFsdWUpLgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8xMCAyMjoyODo0MQogICAgIFtjaGFubmVscy5jIGNoYW5uZWxzLmggc2Vzc2lvbi5jXQogICAgIG1vdmUgY3JlYXRpb24gb2YgYWdlbnQgc29ja2V0IHRvIHNlc3Npb24uYzsgbm8gbmVlZCBmb3IgdWlkc3dhcHBpbmcKICAgICBpbiBjaGFubmVsLmMuCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzExIDA0OjE0OjI2CiAgICAgW3NzaC5jIHNzaGNvbm5lY3QuYyBzc2hjb25uZWN0LmhdCiAgICAgbm8gbG9uZ2VyIHVzZSB1aWRzd2FwLltjaF0gZnJvbSB0aGUgc3NoIGNsaWVudAogICAgIHJ1biBsZXNzIGNvZGUgd2l0aCBldWlkPT0wIGlmIHNzaCBpcyBpbnN0YWxsZWQgc2V0dWlkIHJvb3QKICAgICBqdXN0IHN3aXRjaCB0aGUgZXVpZCwgZG9uJ3Qgc3dpdGNoIHRoZSBjb21wbGV0ZSBzZXQgb2YgZ3JvdXBzCiAgICAgKHRoaXMgaXMgb25seSBuZWVkZWQgYnkgc3NoZCkuIG9rIHByb3Zvc0AKICAgLSBtcGVjaEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8xMSAwNTo0NjoyMAogICAgIFthdXRoLWtyYjQuYyBtb25pdG9yLmggc2VydmVybG9vcC5jIHNlc3Npb24uYyBzc2gtYWdlbnQuYyBzc2hkLmNdCiAgICAgcGlkX3QgY2xlYW51cC4gTWFya3VzIG5lZWQgdGhpcyBub3cgdG8ga2VlcCBoYWNraW5nLgogICAgIG1hcmt1c0AsIG1pbGxlcnRAIG9rCiAgIC0gaXRvanVuQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzExIDA4OjExOjQ1CiAgICAgW2Nhbm9ob3N0LmNdCiAgICAgdXNlICJudG9wIiBvbmx5IGFmdGVyIGluaXRpYWxpemVkCiAtIChiYWwpIEN5Z3dpbiBmaXggdXAgZnJvbSBzd2FwIHVpZCBjbGVhbiB1cCBpbiBzc2guYyBwYXRjaCBieQogICB2aW5zY2hlbkByZWRoYXQuY29tCgoyMDAyMDYwOQogLSAoYmFsKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzA4IDA1OjA3OjU2CiAgICAgW3NzaC5jXQogICAgIG51a2UgcHRyYWNlIGNvbW1lbnQKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDggMDU6MDc6MDkKICAgICBbc3NoLWtleXNpZ24uY10KICAgICBvbmx5IGFjY2VwdCAyMCBieXRlIHNlc3Npb24gaWRzCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzA4IDA1OjE3OjAxCiAgICAgW3JlYWRjb25mLmMgcmVhZGNvbmYuaCBzc2guMSBzc2guY10KICAgICBkZXByZWNhdGUgRmFsbEJhY2tUb1JzaCBhbmQgVXNlUnNoOyBwYXRjaCBmcm9tIGRqbUAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDggMDU6NDA6MDEKICAgICBbcmVhZGNvbmYuY10KICAgICBqdXN0IHdhcm4gYWJvdXQgRGVwcmVjYXRlZCBvcHRpb25zIGZvciBub3cKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDggMDU6NDE6MTgKICAgICBbc3NoX2NvbmZpZ10KICAgICByZW1vdmUgRmFsbEJhY2tUb1JzaC9Vc2VSc2gKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDggMTI6MzY6NTMKICAgICBbc2NwLmNdCiAgICAgcmVtb3ZlIEZhbGxCYWNrVG9Sc2gKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDggMTI6NDY6MTQKICAgICBbcmVhZGNvbmYuY10KICAgICBzaWxlbnRseSBpZ25vcmUgZGVwcmVjYXRlZCBvcHRpb25zLCBzaW5jZSBGYWxsQmFja1RvUnNoIG1pZ2h0IGJlIHBhc3NlZAogICAgIGJ5IHJlbW90ZSBzY3AgY29tbWFuZHMuCiAgLSBpdG9qdW5AY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDggMjE6MTU6MjcKICAgICBbc3NoY29ubmVjdC5jXQogICAgIGFsd2F5cyB1c2UgZ2V0bmFtZWluZm8uICAoZGlhZyBtZXNzYWdlIG9ubHkpCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzA5IDA0OjMzOjI3CiAgICAgW3NzaGNvbm5lY3QuY10KICAgICBhYm9ydCgpIC0gPiBmYXRhbCgpCiAtIChiYWwpIFJDU0lEIHRhZyB1cGRhdGVzIG9uIGNoYW5uZWxzLmMsIGNsaWVudGxvb3AuYywgbmNoYW4uYywKICAgc2Z0cC1jbGllbnQuYywgc3NoLWFnZW5ldC5jLCBzc2gta2V5Z2VuLmMgYW5kIGNvbm5lY3QuaCAod2UgZGlkIHVuZXhwYW5kCiAgIGluZGVwZW5kYW50IG9mIHRoZW0pCgoyMDAyMDYwNwogLSAoYmFsKSBSZW1vdmVkIC0te2VuYWJsZS9kaXNhYmxlfS1zdWlkLXNzaAogLSAoYmFsKSBNaXNzZWQgX19wcm9nbmFtZSBpbiBzc2gta2V5c2lnbi5jICBwYXRjaCBieSBkdHVja2VyQHppcC5jb20uYXUKIC0gKGJhbCkgdXNlICdMT0dJTl9QUk9HUkFNJyAgbm90ICcvdXNyL2Jpbi9sb2dpbicgaW4gc2Vzc2lvbi5jIHBhdGNoIGJ5CiAgIEJlcnRyYW5kLlZlbGxlQGFwb2dlZS1jb20uZnIKCjIwMDIwNjA2CiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMTUgMjE6NTY6MzgKICAgICBbc2VydmNvbmYuYyBzc2hkLjggc3NoZF9jb25maWddCiAgICAgcmUtZW5hYmxlIHByaXZzZXAgYW5kIGRpc2FibGUgc2V0dWlkIGZvciBwb3N0LTMuMi4yCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzE2IDIyOjAyOjUwCiAgICAgW2NpcGhlci5jIGtleC5oIG1hYy5jXQogICAgIGZpeCB3YXJuaW5ncyAob3BlbnNzbCAwLjkuNyByZXF1aXJlcyBjb25zdCkKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzE2IDIyOjA5OjU5CiAgICAgW3Nlc3Npb24uYyBzc2guY10KICAgICBkb24ndCBsaW1pdCB4YXV0aCBwYXRobGVuIG9uIGNsaWVudCBzaWRlIGFuZCBsb25nZXIgcHJpbnQgbGVuZ3RoIG9uCiAgICAgc2VydmVyIHdoZW4gZGVidWc7IG9rIG1hcmt1c0AKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzE5IDIwOjU0OjUyCiAgICAgW2xvZy5oXQogICAgIGV4dHJhIGNvbW1hcyBpbiBlbnVtIG5vdCAxMDAlIHBvcnRhYmxlCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8yMiAyMzoxODoyNQogICAgIFtzc2guYyBzc2hkLmNdCiAgICAgc3BlbGxpbmc7IGFiaXNob2ZmQGFyYy5uYXNhLmdvdgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8yMyAxOToyNDozMAogICAgIFthdXRoZmlsZS5jIGF1dGhmaWxlLmggcGF0aG5hbWVzLmggc3NoLmMgc3NoY29ubmVjdC5jIHNzaGNvbm5lY3QuaCAKICAgICAgc3NoY29ubmVjdDEuYyBzc2hjb25uZWN0Mi5jIHNzaC1rZXlzaWduLjggc3NoLWtleXNpZ24uYyBNYWtlZmlsZS5pbl0KICAgICBhZGQgL3Vzci9saWJleGVjL3NzaC1rZXlzaWduOiBhIHNldHVpZCBoZWxwZXIgcHJvZ3JhbSBmb3IgaG9zdGJhc2VkIAogICAgIGF1dGhlbnRpY2F0aW9uIGluIHByb3RvY29sIHYyIChuZWVkcyB0byBhY2Nlc3MgdGhlIGhvc3RrZXlzKS4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMjMgMTk6Mzk6MzQKICAgICBbc3NoLmNdCiAgICAgYWRkIGNvbW1lbnQgYWJvdXQgc3NoLWtleXNpZ24KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMjQgMDg6NDU6MTQKICAgICBbc3NoY29ubmVjdDIuY10KICAgICBzdGF0IHNzaC1rZXlzaWduIGZpcnN0LCBwcmludCBlcnJvciBpZiBzdGF0IGZhaWxzOwogICAgIHNvbWUgZGVidWctPmVycm9yOyBmaXggY29tbWVudAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8yNSAwODo1MDozOQogICAgIFtzc2hjb25uZWN0Mi5jXQogICAgIGV4ZWNscC0+ZXhlY2w7IGZyb20gc3RldmVzawogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8yNSAxODo1MTowNwogICAgIFthdXRoLmggYXV0aDIuYyBhdXRoMi1ob3N0YmFzZWQuYyBhdXRoMi1rYmRpbnQuYyBhdXRoMi1ub25lLmMKICAgICAgYXV0aDItcGFzc3dkLmMgYXV0aDItcHVia2V5LmMgTWFrZWZpbGUuaW5dCiAgICAgc3BsaXQgYXV0aDIuYyBpbnRvIG9uZSBmaWxlIHBlciBtZXRob2Q7IG9rIHByb3Zvc0AvZGVyYWFkdEAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzI2IDIwOjM1OjEwCiAgICAgW3NzaC4xXQogICAgIHNvcnQgQ2hhbGxlbmdlUmVzcG9uc2VBdXRoZW50aWNhdGlvbjsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMjggMTY6NDU6MjcKICAgICBbbW9uaXRvcl9tbS5jXQogICAgIHByaW50IHN0cmVycm9yKGVycm5vKSBvbiBtbWFwL211bm1hcCBlcnJvcjsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMjggMTc6Mjg6MDIKICAgICBbdWlkc3dhcC5jXQogICAgIGZvcm1hdCBzcGVjIGNoYW5nZS9jYXN0cyBhbmQgc29tZSBLTkY7IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzI4IDIxOjI0OjAwCiAgICAgW3VpZHN3YXAuY10KICAgICB1c2UgY29ycmVjdCBmdW5jdGlvbiBuYW1lIGluIGZhdGFsKCkKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzI5IDAzOjA2OjMwCiAgICAgW3NzaC4xIHNzaGQuOF0KICAgICBzcGVsbGluZwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8yOSAxMToyMTo1NwogICAgIFtzc2hkLmNdCiAgICAgZG9uJ3Qgc3RhcnQgaWYgcHJpdnNlcCBpcyBlbmFibGVkIGFuZCBTU0hfUFJJVlNFUF9VU0VSIG9yCiAgICAgX1BBVEhfUFJJVlNFUF9DSFJPT1RfRElSIGFyZSBtaXNzaW5nOyBvayBkZXJhYWR0QAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8zMCAwODowNzozMQogICAgIFtjaXBoZXIuY10KICAgICB1c2UgcmlqbmRhZWwvYWVzIGZyb20gbGliY3J5cHRvIChvcGVuc3NsID49IDAuOS43KSBpbnN0ZWFkIG9mCiAgICAgb3VyIG93biBpbXBsZW1lbnRhdGlvbi4gYWxsb3cgdXNlIG9mIEFFUyBoYXJkd2FyZSB2aWEgbGliY3J5cHRvLCAKICAgICBvayBkZXJhYWR0QAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8zMSAxMDozMDozMwogICAgIFtzc2hjb25uZWN0Mi5jXQogICAgIGV4dGVudCBzc2gta2V5c2lnbiBwcm90b2NvbDoKICAgICBwYXNzICMgb2Ygc29ja2V0LWZkIHRvIHNzaC1rZXlzaWduLCBrZXlzaWduIHZlcmZpZXMgbG9jYWxseSB1c2VkCiAgICAgaXAtYWRkcmVzcyB1c2luZyB0aGlzIHNvY2tldC1mZCwgcmVzdHJpY3RzIGZha2UgbG9jYWwgaG9zdG5hbWVzCiAgICAgdG8gYWN0dWFsIGxvY2FsIGhvc3RuYW1lczsgb2sgc3RldmVza0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMzEgMTE6MzU6MTUKICAgICBbYXV0aC5oIGF1dGgyLmNdCiAgICAgbW92ZSBBdXRobWV0aG9kIGRlZmluaXRvbnMgdG8gcGVyLW1ldGhvZCBmaWxlLgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8zMSAxMzoxNjo0OAogICAgIFtrZXkuY10KICAgICBhZGQgY29tbWVudDoKICAgICBrZXlfdmVyaWZ5IHJldHVybnMgMSBmb3IgYSBjb3JyZWN0IHNpZ25hdHVyZSwgMCBmb3IgYW4gaW5jb3JyZWN0IHNpZ25hdHVyZQogICAgIGFuZCAtMSBvbiBlcnJvci4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMzEgMTM6MjA6NTAKICAgICBbc3NoLXJzYS5jXQogICAgIHBhZCByZWNlaXZlZCBzaWduYXR1cmUgd2l0aCBsZWFkaW5nIHplcm9zLCBiZWNhdXNlIFJTQV92ZXJpZnkgZXhwZWN0cwogICAgIGEgc2lnbmF0dXJlIG9mIFJTQV9zaXplLiB0aGUgZHJhZnRzIHNheXMgdGhlIHNpZ25hdHVyZSBpcyB0cmFuc21pdHRlZAogICAgIHVucGFkZGVkIChlLmcuIHB1dHR5IGRvZXMgbm90IHBhZCksIHJlcG9ydGVkIGJ5IGFuYWtpbkBwb2JveC5jb20KICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzAzIDEyOjA0OjA3CiAgICAgW3NzaC5oXQogICAgIGNvbXBhdGlibGl0eSAtPiBjb21wYXRpYmlsaXR5CiAgICAgZGVjcmlwdG9yIC0+IGRlc2NyaXB0b3IKICAgICBhdXRoZW50Y2lhdGVkIC0+IGF1dGhlbnRpY2F0ZWQKICAgICB0cmFuc21pdGlvbiAtPiB0cmFuc21pc3Npb24KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDQgMTk6NDI6MzUKICAgICBbbW9uaXRvci5jXQogICAgIG9ubHkgYWxsb3cgZW5hYmxlZCBhdXRoZW50aWNhdGlvbiBtZXRob2RzOyBvayBwcm92b3NACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzA0IDE5OjUzOjQwCiAgICAgW21vbml0b3IuY10KICAgICBzYXZlIHRoZSBzZXNzaW9uIGlkIChoYXNoKSBmb3Igc3NoMiAoaXQgd2lsbCBiZSBwYXNzZWQgd2l0aCB0aGUgCiAgICAgaW5pdGlhbCBzaWduIHJlcXVlc3QpIGFuZCB2ZXJpZnkgdGhhdCB0aGlzIHZhbHVlIGlzIHVzZWQgZHVyaW5nIAogICAgIGF1dGhlbnRpY2F0aW9uOyBvayBwcm92b3NACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzA0IDIzOjAyOjA2CiAgICAgW3BhY2tldC5jXQogICAgIHJlbW92ZSBfX0ZVTkNUSU9OX18KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDQgMjM6MDU6NDkKICAgICBbY2lwaGVyLmMgbW9uaXRvci5jIG1vbml0b3JfZmRwYXNzLmMgbW9uaXRvcl9tbS5jIG1vbml0b3Jfd3JhcC5jXQogICAgIF9fRlVOQ1RJT05fXyAtPiBfX2Z1bmNfXwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wNSAxNjowODowNwogICAgIFtzc2gtYWdlbnQuMSBzc2gtYWdlbnQuY10KICAgICAnLWEgYmluZF9hZGRyZXNzJyBiaW5kcyB0aGUgYWdlbnQgdG8gdXNlci1zcGVjaWZpZWQgdW5peC1kb21haW4KICAgICBzb2NrZXQgaW5zdGVhZCBvZiAvdG1wL3NzaC1YWFhYWFhYWC9hZ2VudC48cGlkPjsgb2sgZGptQCAoc29tZSB0aW1lIGFnbykuCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzA1IDE2OjA4OjA3CiAgICAgW3NzaC1hZ2VudC4xIHNzaC1hZ2VudC5jXQogICAgICctYSBiaW5kX2FkZHJlc3MnIGJpbmRzIHRoZSBhZ2VudCB0byB1c2VyLXNwZWNpZmllZCB1bml4LWRvbWFpbgogICAgIHNvY2tldCBpbnN0ZWFkIG9mIC90bXAvc3NoLVhYWFhYWFhYL2FnZW50LjxwaWQ+OyBvayBkam1AIChzb21lIHRpbWUgYWdvKS4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDUgMTY6NDg6NTQKICAgICBbc3NoLWFnZW50LmNdCiAgICAgY29weSBjdXJyZW50IHJlcXVlc3QgaW50byBhbiBleHRyYSBidWZmZXIgYW5kIGp1c3QgZmx1c2ggdGhpcwogICAgIHJlcXVlc3Qgb24gZXJyb3JzLCBvayBwcm92b3NACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzA1IDE5OjU3OjEyCiAgICAgW2F1dGhmZC5jIGF1dGhmZC5oIHNzaC1hZGQuMSBzc2gtYWRkLmMgc3NoLWFnZW50LmNdCiAgICAgc3NoLWFkZCAteCBmb3IgbG9jayBhbmQgLVggZm9yIHVubG9ja2luZyB0aGUgYWdlbnQuCiAgICAgdG9kbzogZW5jcnlwdCBwcml2YXRlIGtleXMgd2l0aCBsb2NrZWQuLi4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDUgMjA6NTY6MzkKICAgICBbc3NoLWFkZC5jXQogICAgIGFkZCAteC8tWCB0byB1c2FnZQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wNSAyMTo1NTo0NAogICAgIFthdXRoZmQuYyBhdXRoZmQuaCBzc2gtYWRkLjEgc3NoLWFkZC5jIHNzaC1hZ2VudC5jXQogICAgIHNzaC1hZGQgLXQgbGlmZSwgIFNldCBsaWZldGltZSAoaW4gc2Vjb25kcykgd2hlbiBhZGRpbmcgaWRlbnRpdGllczsgCiAgICAgb2sgcHJvdm9zQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDYgMDE6MDk6NDEKICAgICBbbW9uaXRvci5oXQogICAgIG5vIHRyYWlsaW5nIGNvbW1hIGluIGVudW07IGNoaW5hQHRoZXdyaXR0ZW53b3JkLmNvbQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wNiAxNzoxMjo0NAogICAgIFtzZnRwLXNlcnZlci5jXQogICAgIGRpc2NhcmQgcmVtYWluaW5nIGJ5dGVzIG9mIGN1cnJlbnQgcmVxdWVzdDsgb2sgcHJvdm9zQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wNiAxNzozMDoxMQogICAgIFtzZnRwLXNlcnZlci5jXQogICAgIHVzZSBnZXRfaW50KCkgbWFjcm8gKGhpZGUgaXF1ZXVlKQogLSAoYmFsKSBNaXNzZWQgbXNnLltjaF0gaW4gbWVyZ2UuICBSZXF1aXJlZCBmb3Igc3NoLWtleXNpZ24uCiAtIChiYWwpIEZvcmdvdCB0byBhZGQgbXNnLmMgTWFrZWZpbGUuaW4uCiAtIChiYWwpIG1vbml0b3JfbW0uYyB0eXBvcy4KIC0gKGJhbCkgUmVmaXhlZCBhdXRoMi5jLiAgSXQgd2FzIG5ldmVyIGZ1bGx5IGNvbW1pdGVkIHdoaWxlIHNwbGl0aW5nIG91dAogICBhdXRoZW50aWNhdGlvbiB0byBkaWZmZXJlbnQgZmlsZXMuCiAtIChiYWwpIHNzaC1rZXlzaWduIHNob3VsZCBidWlsZCBhbmQgaW5zdGFsbCBjb3JyZWN0bHkgbm93LiAgUGhhc2UgdHdvCiAgIHdvdWxkIGJlIHRvIGNsZWFuIG91dCBhbnkgZGVhZCB3b29kIGFuZCBkaXNhYmxlIHNzaCBzZXR1aWQgb24gaW5zdGFsbC4KIC0gKGJhbCkgUmV2ZXJzZSBsb2dpYywgdXNlIF9fZnVuY19fIGZpcnN0IHNpbmNlIGl0J3MgQzk5CgoyMDAyMDYwNAogLSAoc3RldmVzaykgW2NoYW5uZWxzLmNdIGJ1ZyAjMTY0IHBhdGNoIGZyb20gWU9TSElGVUpJIEhpZGVha2kgKGNoYW5nZWQKICAgc2V0c29ja29wdCBmcm9tIGRlYnVnIHRvIGVycm9yIGZvciBub3cpLgoKMjAwMjA1MjcKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hYy5vcmlnIG1vbml0b3JfZmRwYXNzLmNdIEVuYWhuY2UgbXNnaGRyIHRlc3RzIHRvIGFkZHJlc3MKICAgYnVpbGQgcHJvYmxlbSBvbiBJcml4IHJlcG9ydGVkIGJ5IERhdmUgTG92ZSA8ZC5sb3ZlQGRsLmFjLnVrPi4gQmFjayBvdXQKICAgbGFzdCBtb25pdG9yX2ZkcGFzcy5jIGNoYW5nZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIG5lZWRlZCB3aXRoIG5ldyB0ZXN0cy4KICAgUGF0Y2ggdGVzdGVkIG9uIElyaXggYnkgSmFuLUZyb2RlIE15a2xlYnVzdCA8amFuZnJvZGVAcGFyYWxsYWIudWliLm5vPgoKMjAwMjA1MjIKIC0gKGRqbSkgRml4IHNwZWxsaW5nIG1pc3Rha2VzLCBzcG90dGVkIGJ5IFNvbGFyIERlc2lnbmVyIGkKICAgPHNvbGFyQG9wZW53YWxsLmNvbT4KIC0gU3luYyBzY2FyZC8gKG5vdCBzdXJlIHdoZW4gaXQgZHJpZnRlZCkKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYzoKICAgW2F1dGguY10KICAgRml4IHR5cG8vdGhpbmtvLiAgUGFzcyBpbiBhcyB0byBhdXRoX2FwcHJvdmFsKCksIG5vdCBOVUxMLgogICBDbG9zZXMgUFIgMjY1OS4KIC0gQ3JhbmsgdmVyc2lvbgogLSBDcmFuayBSUE0gc3BlYyB2ZXJzaW9ucwoKMjAwMjA1MjEKIC0gKHN0ZXZlc2spIFtzc2hkLmNdIGJ1ZyAyNDU7IGRpc2FibGUgc2V0c2lkKCkgZm9yIG5vdwogLSAoc3RldmVzaykgW3NzaGQuY10gI2lmbmRlZiBIQVZFX0NZR1dJTiBmb3Igc2V0Z3JvdXBzKCkKCjIwMDIwNTE3CiAtICh0aW0pIFtjb25maWd1cmUuYWNdIHJlbW92ZSBleHRyYSBNRDVfTVNHPSJubyIgbGluZS4KCjIwMDIwNTE1CiAtIChiYWwpIENWUyBJRCBmaXggdXAgb24gYXV0aC1wYXNzd2QuYwogLSAoYmFsKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8wNyAxOTo1NDozNgogICAgIFtzc2guaF0KICAgICB1c2Ugc3NoIHVpZAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMDggMjE6MDY6MzQKICAgICBbc3NoLmhdCiAgICAgbW92ZSB0byBzc2hkLnNzaGQgaW5zdGVhZAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMTEgMjA6MjQ6NDgKICAgICBbc3NoLmhdCiAgICAgdHlwbyBpbiBjb21tZW50CiAgIC0gaXRvanVuQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzEzIDAyOjM3OjM5CiAgICAgW2F1dGgtc2tleS5jIGF1dGgyLmNdCiAgICAgbGVzcyB3YXJuaW5ncy4gIHNrZXlfe3Jlc3BvbmQscXVlcnl9IGFyZSBwdWJsaWMgKGluIGF1dGguaCkKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMTMgMjA6NDQ6NTgKICAgICBbYXV0aC1vcHRpb25zLmMgYXV0aC5jIGF1dGguaF0KICAgICBtb3ZlIHRoZSBwYWNrZXRfc2VuZF9kZWJ1ZyBoYW5kbGluZyBmcm9tIGF1dGgtb3B0aW9ucy5jIHRvIGF1dGguYzsgCiAgICAgb2sgcHJvdm9zQAogICAtIG1pbGxlcnRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMTMgMTU6NTM6MTkKICAgICBbc3NoZC5jXQogICAgIENhbGwgc2V0c2lkKCkgaW4gdGhlIGNoaWxkIGFmdGVyIHNzaGQgYWNjZXB0cyB0aGUgY29ubmVjdGlvbiBhbmQgZm9ya3MuCiAgICAgVGhpcyBpcyBuZWVkZWQgZm9yIHByaXZzZXAgd2hpY2ggY2FsbHMgc2V0bG9naW4oKSB3aGVuIGl0IGNoYW5nZXMgdWlkcy4KICAgICBXaXRob3V0IHRoaXMsIHRoZXJlIGlzIGEgcmFjZSB3aGVyZSB0aGUgbG9naW4gbmFtZSBvZiBhbiBleGlzdGluZyAKICAgICBjb25uZWN0aW9uLCBhcyByZXR1cm5lZCBieSBnZXRsb2dpbigpLCBtYXkgYmUgY2hhbmdlZCB0byB0aGUgcHJpdnNlcCAKICAgICB1c2VyIChzc2hkKS4gIG1hcmt1c0AgT0sKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMTMgMjE6MjY6NDkKICAgICBbYXV0aC1yaG9zdHMuY10KICAgICBoYW5kbGUgZGVidWcgbWVzc2FnZXMgZHVyaW5nIHJob3N0cy1yc2EgYW5kIGhvc3RiYXNlZCBhdXRoZW50aWNhdGlvbjsgCiAgICAgb2sgcHJvdm9zQAogICAtIG1vdXJpbmdAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMTUgMTU6NDc6NDkKICAgICBba2V4LmMgbW9uaXRvci5jIG1vbml0b3Jfd3JhcC5jIHNzaGQuY10KICAgICAnbW9uaXRvcicgdmFyaWFibGUgY2xhc2hlcyB3aXRoIGF0IGxlYXN0IG9uZSBsYW1lIHBsYXRmb3JtIChOZVhUKS4gIGkKICAgICBSZW5hbWVkIHRvICdwbW9uaXRvcicuICBwcm92b3NACiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8wNCAwMjozOTozNQogICAgIFtzZXJ2Y29uZi5jIHNzaGQuOCBzc2hkX2NvbmZpZ10KICAgICBlbmFibGUgcHJpdnNlcCBieSBkZWZhdWx0OyBwcm92b3Mgb2sKICAgLSBtaWxsZXJ0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzA2IDIzOjM0OjMzCiAgICAgW3NzaC4xIHNzaGQuOF0KICAgICBLaWxsL2FkanVzdCByKGxvZ2lufGV4ZWMpZD8gcmVmZXJlbmNlcyBub3cgdGhhdCB0aG9zZSBhcmUgbm8gbG9uZ2VyIGluCiAgICAgdGhlIHRyZWUuCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzE1IDIxOjAyOjUzCiAgICAgW3NlcnZjb25mLmMgc3NoZC44IHNzaGRfY29uZmlnXQogICAgIGRpc2FibGUgcHJpdnNlcCBhbmQgZW5hYmxlIHNldHVpZCBmb3IgdGhlIDMuMi4yIHJlbGVhc2UKIC0gKGJhbCkgRml4ZWQgdXAgUEFNIGNhc2UuICBJIHRoaW5rLgogLSAoYmFsKSBDbGFyaWZpZWQgb3BlbmJzZC1jb21wYXQvKi1jcmF5LiogTGljZW5jZSBwcm92aWRlZCBieSBXZW5keQogLSAoYmFsKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzE1IDIxOjA1OjI5CiAgICAgW3ZlcnNpb24uaF0KICAgICBlbnRlciBPcGVuU1NIXzMuMi4yCiAtIChiYWwpIENhbGRhcmEsIFN1c2UsIGFuZCBSZWRoYXQgb3BlbnNzaC5zcGVjcyB1cGRhdGVkLgoKMjAwMjA1MTQKIC0gKHN0ZXZlc2spIFtSRUFETUUucHJpdnNlcF0gUEFNK3ByaXZzZXAgd29ya3Mgd2l0aCBTb2xhcmlzIDguCiAtICh0aW0pIFtzc2hwdHkuY10gc2V0IHR0eSBtb2RlcyB3aGVuIGFsbG9jYXRpbmcgb2xkIHN0eWxlIGJzZCBwdHlzIHRvCiAgIG1hdGNoIHdoYXQgbmV3ZXIgc3R5bGUgcHR5cyBoYXZlIHdoZW4gYWxsb2NhdGVkLiBCYXNlZCBvbiBhIHBhdGNoIGJ5CiAgIFJvZ2VyIENvcm5lbGl1cyA8cmFjQHRlbnppbmcub3JnPgogLSAodGltKSBbUkVBRE1FLnByaXZzZXBdIFVuaXhXYXJlIDcgYW5kIE9wZW5VTklYIDggd29yay4KIC0gKHRpbSkgW1JFQURNRS5wcml2c2VwXSByZW1vdmUgcmVmZXJlbmNlIHRvIFVuaXhXYXJlIDcgYW5kIE9wZW5VTklYIDgKICAgZnJvbSBQQU0tZW5hYmxlZCBwcmFncmFwaC4gVW5peFdhcmUgaGFzIG5vIFBBTS4KIC0gKHRpbSkgW2NvbnRyaWIvY2FsZGVyYS9vcGVuc3NoLnNwZWNdIHVwZGF0ZSB2ZXJzaW9uLgoKMjAwMjA1MTMKIC0gKHN0ZXZlc2spIGFkZCBpbml0aWFsIFJFQURNRS5wcml2c2VwCiAtIChzdGV2ZXNrKSBbY29uZmlndXJlLmFjXSBuaWNlciBtZXNzYWdlOiAtLXdpdGgtcHJpdnNlcC11c2VyPXVzZXIKIC0gKGRqbSkgQWRkIC0td2l0aC1zdXBlcnVzZXItcGF0aD14eHggY29uZmlndXJlIG9wdGlvbiB0byBzcGVjaWZ5IAogICB3aGF0ICRQQVRIIHRoZSBzdXBlcnVzZXIgcmVjZWl2ZXMuCiAtIChkam0pIEJ1ZyAjMjMxOiBVc2VQcml2aWxlZ2VTZXBhcmF0aW9uIHR1cm5zIG9mZiBCYW5uZXIuCiAtIChkam0pIEFkZCAtLXdpdGgtcHJpdnNlcC1wYXRoIGNvbmZpZ3VyZSBvcHRpb24KIC0gKGRqbSkgVXBkYXRlIFJQTSBzcGVjIGZpbGU6IGRpZmZlcmVudCBzdXBlcnVzZXIgcGF0aCwgdXNlCiAgIC92YXIvZW1wdHkvc3NoZCBmb3IgcHJpdnNlcAogLSAoZGptKSBCdWcgIzIzNDogbWlzc2luZyByZWFkcGFzc3BocmFzZSBkZWNsYXJhdGlvbiBhbmQgZGVmaW5lcwogLSAoZGptKSBBZGQgSU5TVEFMTCB3YXJuaW5nIGFib3V0IFNTSCBwcm90b2NvbCAxIGJsb3dmaXNoIHcvIAogICAgT3BlblNTTCA8IDAuOS42CgoyMDAyMDUxMQogLSAodGltKSBbY29uZmlndXJlLmFjXSBhcHBsaWVkIGEgcmV3b3JrIG9mIGRqbSdzIE9wZW5TU0wgc2VhcmNoIGNsZWFudXAgcGF0Y2guCiAgIE5vdyBvbmx5IHNlYXJjaGVzIHN5c3RlbSBhbmQgL3Vzci9sb2NhbC9zc2wgKE9wZW5TU0wncyBkZWZhdWx0IGluc3RhbGwgcGF0aCkKICAgT3RoZXJzIG11c3QgdXNlIC0td2l0aC1zc2wtZGlyPS4uLi4KIC0gKHRpbSkgW21vbml0b3JfZmRwYXNzLmNdIGZpeCBmb3Igc3lzdGVtcyB0aGF0IGhhdmUgYm90aAogICBIQVZFX0FDQ1JJR0hUU19JTl9NU0dIRFIgYW5kIEhBVkVfQ09OVFJPTF9JTl9NU0dIRFIuIEllLiBzeXMvc29ja2V0LmggCiAgIGhhcyAjZGVmaW5lIG1zZ19hY2NyaWdodHMgbXNnX2NvbnRyb2wKCjIwMDIwNTEwCiAtIChzdGV2ZXNrKSBbYXV0aC5jXSBTaGFkb3cgYWNjb3VudCBhbmQgZXhwaXJhdGlvbiBjbGVhbnVwLiAgTm93CiAgIGNoZWNrIGZvciByb290IGZvcmNlZCBleHBpcmUuICBTdGlsbCBkb24ndCBjaGVjayBmb3IgaW5hY3RpdmUuCiAtIChkam0pIFJld29yayBSZWRIYXQgUlBNIGZpbGVzLiBCYXNlZCBvbiBzcGVjIGZyb20gTmFsaW4gCiAgIERhaHlhYmhhaSA8bmFsaW5AcmVkaGF0LmNvbT4gYW5kIHBhdGNoZXMgZnJvbSAKICAgUGVra2EgU2F2b2xhIDxwZWtrYXNAbmV0Y29yZS5maT4KIC0gKGRqbSkgVHJ5IHRvIGRyb3Agc3VwcGxlbWVudGFsIGdyb3VwcyBhdCBkYWVtb24gc3RhcnR1cC4gUGF0Y2ggZnJvbSAKICAgUmVkSGF0CiAtIChiYWwpIEJhY2sgYWxsIHRoZSB3YXkgb3V0IG9mIGF1dGgtcGFzc3dkLmMgY2hhbmdlcy4gIEJyZWFrcyB0b28gbWFueQogICB0aGluZ3MgdGhhdCBkb24ndCBzZXQgcHctPnB3X3Bhc3N3ZC4KCjIwMDIwNTA5CiAtICh0aW0pIFtNYWtlZmlsZS5pbl0gVW5icmVhayBtYWtlIC1mIE1ha2VmaWxlLmluIGRpc3RwcmVwCgoyMDAyMDUwOAogLSAodGltKSBbb3BlbmJzZC1jb21wYXQvYnNkLWFyYzRyYW5kb20uY10gZml4IGxvZ2ljIG9uIHdoZW4gc2VlZF9ybmcoKSBpcwogICBjYWxsZWQuIFJlcG9ydCBieSBDaHJpcyBNYXh3ZWxsIDxtYXh3ZWxsQGNzLmRhbC5jYT4KIC0gKHRpbSkgW01ha2VmaWxlLmluIGNvbmZpZ3VyZS5hY10gc2V0IFNIRUxMIHZhcmlhYmxlIGluIE1ha2VmaWxlCiAtIChkam0pIERpc2FibGUgUEFNIGtiZC1pbnQgYXV0aCBpZiBwcml2c2VwIGlzIHR1cm5lZCBvbiAoaXQgZG9lc24ndCB3b3JrKQoKMjAwMjA1MDcKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hYyBvcGVuYnNkLWNvbXBhdC9ic2QtbWlzYy5jIG9wZW5ic2QtY29tcGF0L2JzZC1taXNjLmhdCiAgIEFkZCB0cnVuY2F0ZSgpIGVtdWxhdGlvbiB0byBhZGRyZXNzIEJ1ZyAyMDgKCjIwMDIwNTA2CiAtIChkam0pIFVuYnJlYWsgYXV0aC1wYXNzd2QuYyBmb3IgUEFNIGFuZCBTSUEKIC0gKGRqbSkgVW5icmVhayBQQU0gYXV0aCBmb3IgcHJvdG9jb2wgMS4gUmVwb3J0IGZyb20gUGVra2EgU2F2b2xhIAogICA8cGVra2FzQG5ldGNvcmUuZmk+CiAtIChkam0pIERvbid0IHJlaW5pdGlhbGlzZSBQQU0gY3JlZGVudGlhbHMgYmVmb3JlIHdlIGhhdmUgc3RhcnRlZCBQQU0uCiAgIFJlcG9ydCBmcm9tIFBla2thIFNhdm9sYSA8cGVra2FzQG5ldGNvcmUuZmk+CiAgIAoyMDAyMDUwNgogLSAoYmFsKSBGaXhlZCBhdXRoLXBhc3N3ZC5jIHRvIHJlc29sdmUgUGVybWl0RW1wdHlQYXNzd29yZCBpc3N1ZQogCjIwMDIwNTAxCiAtIChkam0pIEltcG9ydCBPcGVuQlNEIHJlZ3Jlc3Npb24gdGVzdHMuIFJlcXVpcmVzIEJTRCBtYWtlIHRvIHJ1bgogLSAoZGptKSBGaXggcmVhZHBhc3NwaGFzZSBjb21waWxhdGlvbiBmb3Igc3lzdGVtcyB3aGljaCBoYXZlIGl0CgoyMDAyMDQyOQogLSAodGltKSBbY29udHJpYi9jYWxkZXJhL29wZW5zc2guc3BlY10gdXBkYXRlIGZpeFVQIHRvIHJlZmxlY3QgY2hhbmdlcyBpbgogICBzc2hkX2NvbmZpZy4KIC0gKHRpbSkgW2NvbnRyaWIvY3lnd2luL1JFQURNRV0gcmVtb3ZlIHJlZmVyZW5jZSB0byByZWdleC4KICAgcGF0Y2ggZnJvbSBDb3Jpbm5hIFZpbnNjaGVuIDx2aW5zY2hlbkByZWRoYXQuY29tPgoKMjAwMjA0MjYKIC0gKGRqbSkgQnVnICMxMzcsICMyMDk6IGZpeCBtYWtlIHByb2JsZW1zIGZvciBzY2FyZC9Tc2guYmluLCBkbyB1dWRlY29kZQogICBkdXJpbmcgZGlzdHByZXAgb25seQogLSAoZGptKSBEaXNhYmxlIFBBTSBwYXNzd29yZCBleHBpcnkgdW50aWwgYSBjb21wbGV0ZSBmaXggZm9yIGJ1ZyAjMTg4IAogICBleGlzdHMKIC0gKGRqbSkgQnVnICMxODA6IFNldCBUb1MgYml0cyBvbiBJUHY0LWluLUlQdjYgbWFwcGVkIGFkZHJlc3Nlcy4gQmFzZWQgb24gCiAgIHBhdGNoIGZyb20gb3BlbnNzaEBtaXNjLnRlY3Eub3JnCgoyMDAyMDQyNQogLSAoc3RldmVzaykgW2RlZmluZXMuaF0gcmVtb3ZlIFVTRV9USU1FVkFMOyB1bnVzZWQKIC0gKHN0ZXZlc2spIFthY2NvbmZpZy5oIGF1dGgtcGFzc3dkLmMgY29uZmlndXJlLmFjIHNzaGQuY10gSFAtVVggMTAuMjYKICAgc3VwcG9ydC4gIGJ1ZyAjMTg0LiAgbW9zdCBmcm9tIGRjb2xlQGtleXNvZnRzeXMuY29tLgoKMjAwMjA0MjQKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8yMyAxMjo1NDoxMAogICAgIFt2ZXJzaW9uLmhdCiAgICAgMy4yLjEKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMjMgMjI6MTY6MjkKICAgICBbc3NoZC5jXQogICAgIEltcHJvdmUgZXJyb3IgbWVzc2FnZTsgb2sgbWFya3VzQCBzdGV2ZXNrQAoKMjAwMjA0MjMKIC0gKHN0ZXZlc2spIFthY2NvbmZpZy5oIGNvbmZpZ3VyZS5hYyBzZXNzaW9uLmNdIExPR0lOX05PX0VORE9QVCBmb3IgSFAtVVgKIC0gKHN0ZXZlc2spIFthY2NvbmZpZy5oXSBORUVEX0lOX1NZU1RNX0ggdW51c2VkCiAtIChtYXJrdXMpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMjMgMTI6NTg6MjYKICAgICBbcmFkaXguY10KICAgICBzZW5kIGNvbXBsZXRlIHRpY2tldDsgc2VtZXJhZEBzczEwMDAubXMubWZmLmN1bmkuY3oKIC0gKGRqbSkgVHJpbSBDaGFuZ2VMb2cgdG8gaW5jbHVkZSBvbmx5IHBvc3QtMy4xIGNoYW5nZXMKIC0gKGRqbSkgVXBkYXRlIFJQTSBzcGVjIGZpbGUgdmVyc2lvbnMKIC0gKGRqbSkgUmVkaGF0IHNwZWMgZW5hYmxlcyBLcmJWIGJ5IGRlZmF1bHQKIC0gKGRqbSkgQXBwbGllZCBPcGVuU0Mgc21hcnRjYXJkIHVwZGF0ZXMgZnJvbSBNYXJrdXMgJiAKICAgQW50dGkgVGFwYW5pbmVuIDxhZXRAY2MuaHV0LmZpPgogLSAoZGptKSBEZWZpbmUgQlJPS0VOX1JFQUxQQVRIIGZvciBBSVgsIHBhdGNoIGZyb20gCiAgIEFudHRpIFRhcGFuaW5lbiA8YWV0QGNjLmh1dC5maT4KIC0gKGRqbSkgQnVnICMyMTQ6IEZpeCB1dG1wIGZvciBJcml4IChkb24ndCBzdHJpcCAidHR5IikuIFBhdGNoIGZyb20gCiAgIEtldmluIFRheWxvciA8bm9Abm93aGVyZS5vcmc+ICg/PykgdmlhIFBoaWxpcHAgR3JhdQogICA8cGhncmF1QHplZGF0LmZ1LWJlcmxpbi5kZT4KIC0gKGRqbSkgQnVnICMyMTM6IFNpbXBsaWZ5IENNU0dfQUxJR04gbWFjcm9zIHRvIGF2b2lkIHN5bWJvbCBjbGFzaGVzLiAKICAgUmVwb3J0ZWQgYnkgRG91ZyBNYW50b24gPGRtYW50b25AZW1lYS5hdHQuY29tPgogLSAoZGptKSBCdWcgIzIyMjogRml4IHRlc3RzIGZvciBnZXRhZGRyaW5mbyBvbiBPU0YvMS4gU3BvdHRlZCBieQogICBSb2JlcnQgVXJiYW4gPHVyYmFuQHNwaWVsd2llc2UuZGU+CiAtIChkam0pIEJ1ZyAjMjA2IC0gYmxpYnBhdGggaXNuJ3QgYWx3YXlzIG5lZWRlZCBmb3IgQUlYIGxkLCBhdm9pZCAKICAgc2l6ZW9mKGxvbmcgbG9uZyBpbnQpID09IDQgYnJlYWthZ2UuIFBhdGNoIGZyb20gTWF0dGhldyBDbGFya2UKICAgPE1hdHRoZXdfQ2xhcmtlQG1pbmRsaW5rLmJjLmNhPgogLSAoZGptKSBNYWtlIHByaXZzZXAgd29yayB3aXRoIFBBTSAoc3RpbGwgZXhwZXJpbWVudGFsKQogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8yMCAwOTowMjowMwogICAgIFtzZXJ2Y29uZi5jXQogICAgIE5vLCBhZnMgcmVxdWlyZXMgZXhwbGljaXQgZW5hYmxpbmcKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMjAgMDk6MTQ6NTgKICAgICBbYnVmYXV4LmMgYnVmYXV4LmhdCiAgICAgYWRkIGJ1ZmZlcl97Z2V0LHB1dH1fc2hvcnQKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMjAgMDk6MTc6MTkKICAgICBbcmFkaXguY10KICAgICByZXdyaXRlIHVzaW5nIHRoZSBidWZmZXJfKiBBUEksIGZpeGVzIG92ZXJmbG93OyBvayBkZXJhYWR0QAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMjEgMTY6MTk6MjcKICAgICBbc3NoZC44IHNzaGRfY29uZmlnXQogICAgIGRvY3VtZW50IGRlZmF1bHQgQUZTVG9rZW5QYXNzaW5nIG5vOyBvayBkZXJhYWR0QAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMjEgMTY6MjU6MDYKICAgICBbc3NoY29ubmVjdDEuY10KICAgICBzcGVsbGluZyBpbiBlcnJvciBtZXNzYWdlOyBvayBtYXJrdXNACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzIyIDA2OjE1OjQ3CiAgICAgW3JhZGl4LmNdCiAgICAgZml4IGNoZWNrIGZvciBvdmVyZmxvdwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8yMiAxNjoxNjo1MwogICAgIFtzZXJ2Y29uZi5jIHNzaGQuOCBzc2hkX2NvbmZpZ10KICAgICBkbyBub3QgYXV0by1lbmFibGUgS2VyYmVyb3NBdXRoZW50aWNhdGlvbjsgb2sgZGptQCwgcHJvdm9zQCwgZGVyYWFkdEAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMjIgMjE6MDQ6NTIKICAgICBbY2hhbm5lbHMuYyBjbGllbnRsb29wLmMgY2xpZW50bG9vcC5oIHNzaC5jXQogICAgIHJlcXVlc3QgcmVwbHkgKHN1Y2Nlc3MvZmFpbHVyZSkgZm9yIC1SIHN0eWxlIGZ3ZCBpbiBwcm90b2NvbCB2MiwKICAgICBkZXBlbmRzIG9uIG9yZGVyZWQgcmVwbGllcy4KICAgICBmaXhlcyBodHRwOi8vYnVnemlsbGEubWluZHJvdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTsgb2sgcHJvdm9zQAoKMjAwMjA0MjEKIC0gKHRpbSkgW2VudHJvcHkuYy5dIFBvcnRhYmlsaXR5IGZpeCBmb3IgU0NPIFVuaXggMy4ydjQueCAoU0NPIE9TUiAzLjApLgogICBlbnRyb3B5LmMgbmVlZHMgc2V0ZXVpZChnZXR1aWQoKSkgZm9yIHRoZSBzZXR1aWQob3JpZ2luYWxfdWlkKSB0byAKICAgc3VjY2VlZC4gUGF0Y2ggYnkgZ2VydEBncmVlbmllLm11Yy5kZS4gVGhpcyBmaXhlcyBvbmUgcGFydCBvZiBCdWcgMjA4CgoyMDAyMDQxOAogLSAoZGptKSBBdm9pZCBTSUdDSExEIGJyZWFrYWdlIHdoZW4gcnVuIGZyb20gcnN5bmMuIEZpeCBmcm9tIAogICBTdHVybGUgU3VuZGUgPHN0dXJsZS5zdW5kZUB1c2l0LnVpby5ubz4KCjIwMDIwNDE3CiAtIChkam0pIFRlbGwgdXNlcnMgdG8gY29uZmlndXJlIC9kZXYvcmFuZG9tIHN1cHBvcnQgaW50byBPcGVuU1NMIGluIAogICBJTlNUQUxMCiAtIChkam0pIEZpeCAuTm0gaW4gbWRvYzJtYW4ucGwgZnJvbSBwc3BlbmNlckBmaWVsZHMudXRvcm9udG8uY2EKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gSXNzdWUgd2FybmluZyBvbiAtLXdpdGgtZGVmYXVsdC1wYXRoPS9zb21lX3BhdGgKICAgaWYgTE9HSU5fQ0FQIGlzIGVuYWJsZWQuIFJlcG9ydCAmIHRlc3RpbmcgYnkgVHVjIDx0dWNAdHRzZy5jb20+CgoyMDAyMDQxNQogLSAoZGptKSBVbmJyZWFrICJtYWtlIGluc3RhbGwiLiBGaXggZnJvbSBEYXJyZW4gVHVja2VyIAogICA8ZHR1Y2tlckB6aXAuY29tLmF1PgogLSAoc3RldmVzaykgYnNkLWN5Z3dpbl91dGlsLltjaF0gQlNEIGxpY2Vuc2UgZnJvbSBDb3Jpbm5hIFZpbnNjaGVuCiAtICh0aW0pIFtjb25maWd1cmUuYWNdIGFkZCB0ZXN0cyBmb3IgcmVjdm1zZyBhbmQgc2VuZG1zZy4KICAgW21vbml0b3JfZmRwYXNzLmNdIGFkZCBjaGVja3MgZm9yIEhBVkVfU0VORE1TRyBhbmQgSEFWRV9SRUNWTVNHIGZvcgogICBzeXN0ZW1zIHRoYXQgSEFWRV9BQ0NSSUdIVFNfSU5fTVNHSERSIGJ1dCBubyByZWN2bXNnIG9yIHNlbmRtc2cuCgoyMDAyMDQxNAogLSAoZGptKSBzc2gtcmFuZC1oZWxwZXIgaW1wcm92ZW1lbnRzCiAgIC0gQWRkIGNvbW1hbmRsaW5lIGRlYnVnZ2luZyBvcHRpb25zCiAgIC0gRG9uJ3Qgd3JpdGUgYmluYXJ5IGRhdGEgaWYgc3Rkb3V0IGlzIGEgdHR5ICh1c2UgaGV4IGluc3RlYWQpCiAgIC0gR2l2ZSBpdCBhIG1hbnBhZ2UKIC0gKGRqbSkgUmFuZG9tIG51bWJlciBjb2xsZWN0aW9uIGRvYyBmaXhlcyBmcm9tIEJlbgoKMjAwMjA0MTMKIC0gKGRqbSkgQWRkIEtyYlYgc3VwcG9ydCBwYXRjaCBmcm9tIFNpbW9uIFdpbGtpbnNvbiA8c2ltb25Ac3h3Lm9yZy51az4KCjIwMDIwNDEyCiAtIChzdGV2ZXNrKSBbYXV0aC1zaWEuW2NoXV0gYWRkIEJTRCBsaWNlbnNlIGZyb20gQ2hyaXMgQWRhbXMKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gYWRkIDxzeXMvdHlwZXMuaD4gdG8gbXNnaGRyIHRlc3RzLiBDaGFuZ2UgLUwKICAgdG8gLWggb24gdGVzdGluZyBmb3IgL2JpbiBiZWluZyBzeW1ib2xpYyBsaW5rCiAtIChiYWwpIE1pc3Rha2VuIGluIEN5Z3dpbiBzY3JpcHRzIGZvciBzc2ggc3RhcnRpbmcuICBQYXRjaCBieQogICBDb3Jpbm5hIFZpbnNjaGVuIDx2aW5zY2hlbkByZWRoYXQuY29tPiAKIC0gKGJhbCkgZGlzYWJsZSBwcml2c2VwIGlmIG5vIE1BUF9BTk9OLiAgV2UgY2FuIHJlLWVuYWJsZSBpdAogICBhZnRlciB0aGUgcmVsZWFzZSB3aGVuIHdlIGNhbiBkbyBtb3JlIHRlc3RpbmcuCgoyMDAyMDQxMQogLSAoc3RldmVzaykgW2F1dGgtc2lhLmNdIGNsZWFudXAKIC0gKHRpbSkgW2FjY29uZmlnLmggZGVmaW5lcy5oIGluY2x1ZGVzLmhdIHB1dCBpbmNsdWRlcyBpbiBpbmNsdWRlcy5oIGFuZAogICBkZWZpbmVzIGluIGRlZmluZXMuaCBbcmlqbmRhZWwuYyBvcGVuYnNkLWNvbXBhdC9mYWtlLXNvY2tldC5oCiAgIG9wZW5ic2QtY29tcGF0L2luZXRfYXRvbi5jXSBpbmNsdWRlICJpbmNsdWRlcy5oIiBpbnN0ZWFkIG9mICJjb25maWcuaCIKICAgb2sgc3RldmVza0AKCjIwMDIwNDEwCiAtIChzdGV2ZXNrKSBbY29uZmlndXJlLmFjIG1vbml0b3IuY10gSEFWRV9TT0NLRVRQQUlSCiAtIChzdGV2ZXNrKSBbYXV0aC1zaWEuY10gY29tcGlsZSBmaXggQ2hyaXMgQWRhbXMgPGNtYWRhbXNAaGl3YWF5Lm5ldD4KIC0gKGJhbCkgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8xMCAwODoyMTo0NwogICAgIFthdXRoMS5jIGNvbXBhdC5jIGNvbXBhdC5oXQogICAgIHN0cmlwICdAJyBmcm9tIHVzZXJuYW1lIG9ubHkgZm9yIEtlcmJWIGFuZCBrbm93biBicm9rZW4gY2xpZW50cywgCiAgICAgYnVnICMyMDQKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMTAgMDg6NTY6MDEKICAgICBbdmVyc2lvbi5oXQogICAgIE9wZW5TU0hfMy4yCiAtIEFkZGVkIHAxIHRvIGlkZW5pZnkgUG9ydGFibGUgcmVsZWFzZSB2ZXJzaW9uLgoKMjAwMjA0MDgKIC0gKGJhbCkgTWlub3IgT3BlblNDIHVwZGF0ZXMuICBGaXggdXAgaGVhZGVyIGxvY2F0aW9ucyBhbmQgdXBkYXRlCiAgIFJFQURNRS5zbWFydGNhcmQgcHJvdmlkZWQgYnkgSnVoYSBZcmr2bOQgPGp5cmpvbGFAY2MuaHV0LmZpPgoKMjAwMjA0MDcKIC0gKHN0ZXZlc2spIEhBVkVfQ09OVFJPTF9JTl9NU0dIRFI7IG5vdCB1c2VkIHJpZ2h0IG5vdy4KICAgRnV0dXJlOiB3ZSBtYXkgd2FudCB0byB0ZXN0IGlmIGZkIHBhc3Npbmcgd29ya3MgY29ycmVjdGx5LgogLSAoc3RldmVzaykgW21vbml0b3JfZmRwYXNzLmNdIGZhdGFsKCkgZm9yIFVzZVByaXZpbGVnZVNlcGFyYXRpb249eWVzCiAgIGFuZCBubyBmZCBwYXNzaW5nIHN1cHBvcnQuCiAtIChzdGV2ZXNrKSBIQVZFX01NQVAgYW5kIEhBVkVfU1lTX01NQU5fSCBhbmQgdXNlIHRoZW0gaW4KICAgbW9uaXRvcl9tbS5jCiAtIChzdGV2ZXNrKSByZW1vdmUgY29uZmlndXJlIHN1cHBvcnQgZm9yIHBvbGwuaDsgaXQgd2FzIHJlbW92ZWQKICAgZnJvbSBzc2hkLmMgYSBsb25nIHRpbWUgYWdvLgogLSAoc3RldmVzaykgLS13aXRoLXByaXZzZXAtdXNlcjsgZGVmYXVsdCBzc2hkCiAtIChzdGV2ZXNrKSB3cmFwIG11bm1hcCgpIHdpdGggSEFWRV9NTUFQIGFsc28uCgoyMDAyMDQwNgogLSAoZGptKSBUeXBvIGluIFN1c2UgU1BFQyBmaWxlLiBGaXggZnJvbSBDYXJzdGVuIEdyb2htYW5uIAogICA8Y2Fyc3Rlbi5ncm9obWFubkBkci1iYWxkZXdlZy5kZT4KIC0gKGJhbCkgQWRkZWQgTUFQX0ZBSUxFRCB0byBhbGxvdyBBSVggYW5kIFRydXN0ZWQgSFAgdG8gY29tcGlsZS4KIC0gKGJhbCkgT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8wNiAwMDozMDowOAogICAgIFtzZnRwLWNsaWVudC5jXQogICAgIEZpeCBvY2Nhc2lvbmFsIGNvcnJ1cHRpb24gb24gdXBsb2FkIGR1ZSB0byBiYWQgcmV1c2Ugb2YgcmVxdWVzdCAKICAgICBpZCwgc3BvdHRlZCBieSBjaG9tYmllckBtYWMuY29tOyBvayBtYXJrdXNACiAgIC0gbW91cmluZ0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8wNiAxODoyNDowOQogICAgIFtzY3AuY10KICAgICBGaXhlcyBwb3RlbnRhbCBkb3VibGUgLy8gd2l0aGluIHBhdGguCiAgICAgaHR0cDovL2J1Z3ppbGxhLm1pbmRyb3Qub3JnL3Nob3dfYnVnLmNnaT9pZD03NgogLSAoYmFsKSBTbGlnaHQgdXBkYXRlIHRvIE9wZW5TQyBzdXBwb3J0LiAgQmV0dGVyIHZlcnNpb24gY2hlY2tpbmcuIHBhdGNoCiAgIGJ5IEp1aGEgWXJq9mzkIDxqeXJqb2xhQGNjLmh1dC5maT4gCiAtIChiYWwpIFJldmVyZWQgb3V0IG9mIHJ1bnRpbWUgSVJJWCBkZXRlY3Rpb24gb2Ygam9ibGltaXRzLiAgQ29kZSBpcwogICBpbmNvbXBsZXRlLgogLSAoYmFsKSBRdWlldCBkb3duIGNvbmZpZ3VyZS5hYyBpZiAvYmluL3Rlc3QgZG9lcyBub3QgZXhpc3QuCiAtIChiYWwpIFdlIG5vIGxvbmdlciB1c2UgYXRleGl0KCkveGF0ZXhpdCgpL29uX2V4aXQoKQoKMjAwMjA0MDUKIC0gKGJhbCkgUGF0Y2ggZm9yIE9wZW5TQyBTbWFydENhcmQgbGlicmFyeTsgb2sgbWFya3VzQDsgcGF0Y2ggYnkKICAgSnVoYSBZcmr2bOQgPGp5cmpvbGFAY2MuaHV0LmZpPgogLSAoYmFsKSBNaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZSB0byByZWZsZWN0IHNtYXJ0Y2FyZCBsaWJyYXJ5CiAgIHN1cHBvcnQgY2hhbmdlcy4KIC0gKGJhbCkgVG9vIG1hbnkgPHN5cy9xdWV1ZS5oPiBpc3N1ZXMuICBSZW1vdmUgYWxsIHdvcmthcm91bmRzIGFuZAogICB1c2luZyBpbnRlcm5hbCB2ZXJzaW9uIG9ubHkuCiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzA1IDIwOjU2OjIxCiAgICAgW3NzaGQuOF0KICAgICBjbGFyaWZ5IHNzaHJjIHNvbWUgYW5kIGhhbmRsZSBYMTFVc2VMb2NhbGhvc3Q9eWVzOyBvayBtYXJrdXNACgoyMDAyMDQwNAogLSAoc3RldmVzaykgW2F1dGgtcGFtLmMgYXV0aC1wYW0uaCBhdXRoLXBhc3N3ZC5jIGF1dGgtc2lhLmMgYXV0aC1zaWEuaAogICAgYXV0aDEuYyBhdXRoMi5jXSBQQU0sIE9TRl9TSUEgcGFzc3dvcmQgYXV0aCBjbGVhbnVwOyBmcm9tIGRqbS4KIC0gKGJhbCkgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8wMyAwOToyNjoxMQogICAgIFtjaXBoZXIuYyBteXByb3Bvc2FsLmhdCiAgICAgcmUtYWRkIHJpam5kYWVsLWNiY0BseXNhdG9yLmxpdS5zZSBmb3IgTWFjU1NIOyBhc2hAbGFiLnBvYy5uZXQKCjIwMDIwNDAyCiAtIChiYWwpIEhhbmQgU3luYyBvZiBzY3AuYyAocmV2ZXJ0ZWQgdG8gdXBzdHJlYW0gY29kZSkKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzMwIDE3OjQ1OjQ2CiAgICAgW3NjcC5jXQogICAgIHN0cmV0Y2ggYmFubmVycwogLSAoYmFsKSBDVlMgSUQgc3luYyBvZiB1aWRzd2FwLmMKIC0gKGJhbCkgT3BlbkJTRCBDVlMgU3luYyAobm93IGZvciB0aGUgcmVhbCBzeW5jKQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNyAyMjoyMTo0NQogICAgIFtzc2gta2V5Z2VuLmNdCiAgICAgdHJ5IHRvIGltcG9ydCBrZXlzIHdpdGggZXh0cmEgdHJhaWxpbmcgPT09IChzZWVuIHdpdGggc3NoLmNvbSA8IAogICAgIDIuMC4xMikKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjggMTU6MzQ6NTEKICAgICBbc2Vzc2lvbi5jXQogICAgIGRvIG5vdCBjYWxsIHJlY29yZF9sb2dpbiB0d2ljZSAoZm9yIHVzZV9wcml2c2VwKQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yOSAxODo1OTozMgogICAgIFtzZXNzaW9uLmMgc2Vzc2lvbi5oXQogICAgIHJldHJpZXZlIGxhc3QgbG9naW4gdGltZSBiZWZvcmUgdGhlIHB0eSBpcyBhbGxvY2F0ZWQsIHN0b3JlIHBlciAKICAgICBzZXNzaW9uCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yOSAxOToxNjoyMgogICAgIFtzc2hkLjhdCiAgICAgUlNBIGtleSBtb2R1bHVzIHNpemUgbWluaW11bSA3Njg7IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI5IDE5OjE4OjMzCiAgICAgW2F1dGgtcnNhLmMgc3NoLXJzYS5jIHNzaC5oXQogICAgIG1ha2UgUlNBIG1vZHVsdXMgbWluaW11bSAjZGVmaW5lOyBvayBtYXJrdXNACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzMwIDE4OjUxOjE1CiAgICAgW21vbml0b3IuYyBzZXJ2ZXJsb29wLmMgc2Z0cC1pbnQuYyBzZnRwLmMgc3NoZC5jXQogICAgIGNoZWNrIHdhaXRwaWQgZm9yIEVJTlRSOyBiYXNlZCBvbiBwYXRjaCBmcm9tIHBldGVyQGlmbS5saXUuc2UKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMDEgMjI6MDI6MTYKICAgICBbc2Z0cC1jbGllbnQuY10KICAgICAyMDQ4MCBpcyBhbiB1cHBlciBsaW1pdCBmb3Igb2xkZXIgc2VydmVyCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzAxIDIyOjA3OjE3CiAgICAgW3NmdHAtY2xpZW50LmNdCiAgICAgZmFsbGJhY2sgdG8gc3RhdCBpZiBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBsc3RhdAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8wMiAxMTo0OTozOQogICAgIFtzc2gtYWdlbnQuY10KICAgICBjaGVjayAkU0hFTEwgZm9yIC1rIGFuZCAtZCwgdG9vOwogICAgIGh0dHA6Ly9idWd6aWxsYS5taW5kcm90Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk5CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzAyIDE3OjM3OjQ4CiAgICAgW3NmdHAuY10KICAgICBhbHdheXMgY2FsbCBsb2dfaW5pdCgpCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzAyIDIwOjExOjM4CiAgICAgW3NzaC1yc2EuY10KICAgICBpZ25vcmUgU1NIX0JVR19TSUdCTE9CIGZvciBzc2gtcnNhOyAjMTg3CiAtIChiYWwpIG1pc3BlbGxpbmcgaW4gdWlkc3dhcC5jIChwb3J0YWJsZSBvbmx5KQoKMjAwMjA0MDEKIC0gKHN0ZXZlc2spIFttb25pdG9yLmNdIFBBTSBzaG91bGQgd29yayBhZ2Fpbjsgd2lsbCAqbm90KiB3b3JrIHdpdGgKICAgVXNlUHJpdmlsZWdlU2VwYXJhdGlvbj15ZXMuCiAtIChzdGV2ZXNrKSBbYXV0aDEuY10gZml4IHBhc3N3b3JkIGF1dGggZm9yIHByb3RvY29sIDEgd2hlbgogICAhVVNFX1BBTSAmJiAhSEFWRV9PU0ZfU0lBOyBtZXJnZSBpc3N1ZS4KCjIwMDIwMzMxCiAtICh0aW0pIFtjb25maWd1cmUuYWNdIHVzZSAvYmluL3Rlc3QgLUwgdG8gd29yayBhcm91bmQgYnJva2VuIGJ1aWx0aW4gb24KICAgU29sYXJpcyA4CiAtICh0aW0pIFtzc2hjb25uZWN0Mi5jXSBjaGFuZ2UgdWludDMyX3QgdG8gdV9pbnQzMl90CgoyMDAyMDMzMAogLSAoc3RldmVzaykgW2NvbmZpZ3VyZS5hY10gcmVtb3ZlIGhlYWRlciBjaGVjayBmb3Igc3lzL3R0Y29tcGF0LmgKICAgYnVnIDE2NwoKMjAwMjAzMjcKIC0gKGJhbCkgJ3B3JyBzaG91bGQgYmUgJ2F1dGhjdHh0LT5wdycgaW4gYXV0aDEuYyBzcG90dGVkIGJ5IAogICBrZW50QGx5c2F0b3IubGl1LnNlCiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjYgMTE6MzQ6NDkKICAgICBbc3NoLjEgc3NoZC44XQogICAgIHVwZGF0ZSB0byByZWNlbnQgZHJhZnRzCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI2IDExOjM3OjA1CiAgICAgW3NzaC5jXQogICAgIHVwZGF0ZSBDb3B5cmlnaHQKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjYgMTU6MjM6NDAKICAgICBbYnVmYXV4LmNdCiAgICAgZG8gbm90IHRhbGsgYWJvdXQgcGFja2V0cyBpbiBidWZhdXgKICAgLSByZWVzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI2IDE4OjQ2OjU5CiAgICAgW3NjYXJkLmNdCiAgICAgdHJ5X0FVVDAgaW4gcmVhZF9wdWJrZXkgdG9vLCBmb3IgdGhvc2UgcGFyYW5vaWQgZmV3IHdobyB3YW50IHRvIAogICAgIGFjbCAnc2gnCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI2IDIyOjUwOjM5CiAgICAgW2NoYW5uZWxzLmhdCiAgICAgQ0hBTk5FTF9FRkRfT1VUUFVUX0FDVElWRSBpcyBmYWxzZSBmb3IgQ0hBTl9DTE9TRV9SQ1ZELCB0b28KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjYgMjM6MTM6MDMKICAgICBbYXV0aC1yc2EuY10KICAgICBkaXNhbGxvdyBSU0Ega2V5cyA8IDc2OCBmb3IgcHJvdG9jb2wgMSwgdG9vIChyaG9zdHMtcnNhIGFuZCByc2EgYXV0aCkKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjYgMjM6MTQ6NTEKICAgICBba2V4LmNdCiAgICAgZ2VuZXJhdGUgYSBuZXcgY29va2llIGZvciBlYWNoIFNTSDJfTVNHX0tFWElOSVQgbWVzc2FnZSB3ZSBzZW5kIG91dAogICAtIG1vdXJpbmdAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjcgMTE6NDU6NDIKICAgICBbbW9uaXRvci5jXQogICAgIG1vbml0b3JfYWxsb3dlZF9rZXkoKSByZXR1cm5zIGludCBpbnN0ZWFkIG9mIHBvaW50ZXIuICBvayBtYXJrdXNACiAgCjIwMDIwMzI1CiAtIChzdGV2ZXNrKSBpbXBvcnQgT3BlbkJTRCA8c3lzL3RyZWUuaD4gYXMgIm9wZW5ic2QtY29tcGF0L3RyZWUuaCIKIC0gKGJhbCkgT3BlbkJTRCBDVlMgU3luYwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjMgMjA6NTc6MjYKICAgICBbc3NoZC5jXQogICAgIHNldHByb2N0aXRsZSgpIGFmdGVyIHByZWF1dGggY2hpbGQ7IG9rIG1hcmt1c0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjQgMTY6MDA6MjcKICAgICBbc2VydmVybG9vcC5jXQogICAgIHJlbW92ZSB1bnVzZWQgZGVidWcKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjQgMTY6MDE6MTMKICAgICBbcGFja2V0LmNdCiAgICAgZGVidWctPmRlYnVnMyBmb3IgZXh0cmEgcGFkZGluZwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjQgMTc6Mjc6MDMKICAgICBba2V4Z2V4LmNdCiAgICAgdHlwbzsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjQgMTc6NTM6MTYKICAgICBbbW9uaXRvcl9mZHBhc3MuY10KICAgICBtaW5vciBjbGVhbnVwIGFuZCBtb3JlIGVycm9yIGNoZWNraW5nOyBvayBtYXJrdXNACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI0IDE4OjA1OjI5CiAgICAgW3NjYXJkLmNdCiAgICAgd2UgbmVlZCB0byBmaWd1cmUgb3V0IEFVVDAgZm9yIHNjX3ByaXZhdGVfZW5jcnlwdCwgdG9vCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNCAyMzoyMDowMAogICAgIFttb25pdG9yLmNdCiAgICAgcmVtb3ZlICJcbiIgZnJvbSBmYXRhbCgpCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI1IDA5OjIxOjEzCiAgICAgW2F1dGgtcnNhLmNdCiAgICAgcmV0dXJuIDAgKG5vdCBOVUxMKTsgdG9taEBwby5jcmwuZ28uanAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjUgMDk6MjU6MDYKICAgICBbYXV0aC1yaC1yc2EuY10KICAgICBybSBib2d1cyBjb21tZW50CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI1IDE3OjM0OjI3CiAgICAgW3NjYXJkLmMgc2NhcmQuaCBzc2gtYWdlbnQuYyBzc2gta2V5Z2VuLmMgc3NoLmNdCiAgICAgY2hhbmdlIHNjX2dldF9rZXkgdG8gc2NfZ2V0X2tleXMgYW5kIGhpZGUgc21hcnRjYXJkIGRldGFpbHMgaW4gc2NhcmQuYwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjUgMjA6MTI6MTAKICAgICBbbW9uaXRvcl9tbS5jIG1vbml0b3Jfd3JhcC5jXQogICAgIHNzaXplX3QgYXJncyB1c2UgIiVsZCIgYW5kIGNhc3QgdG8gKGxvbmcpCiAgICAgc2l6ZV90IGFyZ3MgdXNlICIlbHUiIGFuZCBjYXN0IHRvICh1X2xvbmcpCiAgICAgb2sgbWFya3VzQCBhbmQgdGhhbmtzIG1pbGxlcnRACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI1IDIxOjA0OjAyCiAgICAgW3NzaC5jXQogICAgIHNpbXBsaWZ5IG51bV9pZGVudGl0eV9maWxlcyBoYW5kbGluZwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNSAyMToxMzo1MQogICAgIFtjaGFubmVscy5jIGNoYW5uZWxzLmggY29tcGF0LmMgY29tcGF0LmggbmNoYW4uY10KICAgICBkb24ndCBzZW5kIHN0ZGVyciBkYXRhIGFmdGVyIEVPRiwgYWNjZXB0IHRoaXMgZnJvbSBvbGRlciBrbm93biAKICAgICAoYnJva2VuKSBzc2hkIHNlcnZlcnMgb25seSwgZml4ZXMKICAgICBodHRwOi8vYnVnemlsbGEubWluZHJvdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OQogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjYgMDM6MjQ6MDEKICAgICBbbW9uaXRvci5oIG1vbml0b3JfZmRwYXNzLmggbW9uaXRvcl9tbS5oIG1vbml0b3Jfd3JhcC5oXQogICAgICRPcGVuQlNEJAoKMjAwMjAzMjQKIC0gKHN0ZXZlc2spIFtzZXNzaW9uLmNdIGRpc2FibGUgTE9HSU5fTkVFRFNfVEVSTSB1bnRpbCB3ZSBhcmUgc3VyZQogICBpdCBjYW4gYmUgcmVtb3ZlZC4gb25seSB1c2VkIG9uIHNvbGFyaXMuIHdpbGwgbm8gbG9uZ2VyIGNvbXBpbGUgd2l0aAogICBwcml2c2VwIHNodWZmbGluZy4KCjIwMDIwMzIyCiAtIChzdGV2ZXNrKSBIQVZFX0FDQ1JJR0hUU19JTl9NU0dIRFIgY29uZmlndXJlIHN1cHBvcnQKIC0gKHN0ZXZlc2spIFttb25pdG9yLmMgbW9uaXRvcl93cmFwLmNdICNpZmRlZiBIQVZFX1BXX0NMQVNTX0lOX1BBU1NXRAogLSAoc3RldmVzaykgY29uZmlndXJlIGFuZCBjcHAgX19GVU5DVElPTl9fIGd5bW5hc3RpY3MgdG8gaGFuZGxlIG5pZWxzaXNtcwogLSAoc3RldmVzaykgW21vbml0b3JfZmRwYXNzLmNdIHN1cHBvcnQgZm9yIGFjY2VzcyByaWdodHMgc3R5bGUgZmlsZQogICBkZXNjcmlwdG9yIHBhc3NpbmcKIC0gKHN0ZXZlc2spIFthdXRoMi5jXSBtZXJnZSBjbGVhbnVwL3N5bmMKIC0gKHN0ZXZlc2spIFtkZWZpbmVzLmhdIGhwLXV4IDExIGhhcyBhbmNpbGxhcnkgZGF0YSBzdHlsZSBmZCBwYXNzaW5nLCBidXQKICAgaXMgbWlzc2luZyBDTVNHX0xFTigpIGFuZCBDTVNHX1NQQUNFKCkgbWFjcm9zLgogLSAoc3RldmVzaykgW2RlZmluZXMuaF0gI2RlZmluZSBNQVBfQU5PTiBNQVBfQU5PTllNT1VTIGZvciBIUC1VWDsgb3RoZXIKICAgcGxhdGZvcm1zIG1heSBuZWVkIHRoaXMtLUknbSBub3Qgc3VyZS4gIG1tYXAoKSBpc3N1ZXMgd2lsbCBuZWVkIHRvIGJlCiAgIGFkZHJlc3NlZCBmdXJ0aGVyLgogLSAodGltKSBbY2lwaGVyLmNdIGZpeCBwcm9ibGVtIHdpdGggT3BlbkJTRCBzeW5jCiAtIChzdGV2ZXNrKSBbTElDRU5DRV0gT3BlbkJTRCBzeW5jCgoyMDAyMDMyMQogLSAoYmFsKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gaXRvanVuQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzA4IDA2OjEwOjE2CiAgICAgW3NmdHAtY2xpZW50LmNdCiAgICAgcHJpbnRmIHR5cGUgbWlzbWF0Y2gKICAgLSBpdG9qdW5AY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTEgMDM6MTg6NDkKICAgICBbc2Z0cC1jbGllbnQuY10KICAgICBjb3JyZWN0IHR5cGUgbWlzbWF0Y2hlcyAodV9pbnQ2NF90ICE9IHVuc2lnbmVkIGxvbmcgbG9uZykKICAgLSBpdG9qdW5AY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTEgMDM6MTk6NTMKICAgICBbc2Z0cC1jbGllbnQuY10KICAgICBpbmRlbnQKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTQgMTU6MjQ6MjcKICAgICBbc3NoY29ubmVjdDEuY10KICAgICBkb24ndCB0cnVzdCBzaXplIHNlbnQgYnkgKHJvZ3VlKSBzZXJ2ZXI7IG5vdGVkIGJ5IAogICAgIHMuZXNzZXJAZS1tYXR0ZXJzLmRlCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE0IDE2OjM4OjI2CiAgICAgW3NzaGQuY10KICAgICBzcGxpdCBvdXQgc3NoMSBzZXNzaW9uIGtleSBkZWNyeXB0aW9uOyBvayBwcm92b3NACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE0IDE2OjU2OjMzCiAgICAgW2F1dGgtcmgtcnNhLmMgYXV0aC1yc2EuYyBhdXRoLmhdCiAgICAgc3BsaXQgYXV0aF9yc2EoKSBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5IGFuZCBwcml2c2VwOyBvayBwcm92b3NACiAgIC0gaXRvanVuQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE1IDExOjAwOjM4CiAgICAgW2F1dGguY10KICAgICBmaXggZmlsZSB0eXBlIGNoZWNraW5nICh1c2UgU19JU1JFRykuICBvayBieSBtYXJrdXMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTYgMTE6MjQ6NTMKICAgICBbY29tcHJlc3MuY10KICAgICBza2lwIGluZmxhdGVFbmQgaWYgaW5mbGF0ZSBmYWlsczsgb2sgcHJvdm9zQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xNiAxNzoyMjowOQogICAgIFthdXRoLXJoLXJzYS5jIGF1dGguaF0KICAgICBzcGxpdCBhdXRoX3Job3N0c19yc2EoKSwgb2sgcHJvdm9zQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTYgMTc6NDE6MjUKICAgICBbYXV0aC1rcmI1LmNdCiAgICAgQlNEIGxpY2Vuc2UuICBmcm9tIERhbmllbCBLb3VyaWwgdmlhIER1ZyBTb25nLiAgb2sgbWFya3VzQAogICAtIHByb3Zvc0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xNyAyMDoyNTo1NgogICAgIFthdXRoLmMgYXV0aC5oIGF1dGgxLmMgYXV0aDIuY10KICAgICBnZXRwd25hbWFsbG93IHJldHVybnMgc3RydWN0IHBhc3N3ZCAqIG9ubHkgaWYgdXNlciB2YWxpZDsgCiAgICAgb2theSBtYXJrdXNACiAgIC0gcHJvdm9zQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE4IDAxOjEyOjE0CiAgICAgW2F1dGguaCBhdXRoMS5jIGF1dGgyLmMgc3NoZC5jXQogICAgIGhhdmUgdGhlIGF1dGhlbnRpY2F0aW9uIGZ1bmN0aW9ucyByZXR1cm4gdGhlIGF1dGhlbnRpY2F0aW9uIGNvbnRleHQKICAgICBhbmQgdGhlbiBkb19hdXRoZW50aWNhdGVkOyBva2F5IG1pbGxlcnRACiAgIC0gZHVnc29uZ0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOCAwMTozMDoxMAogICAgIFthdXRoLWtyYjQuY10KICAgICBzZXQgY2xpZW50IHRvIE5VTEwgYWZ0ZXIgeGZyZWUoKSwgZnJvbSBSb2xmIEJyYXVuIAogICAgIDxyYnJhdW4rc3NoQGFuZHJldy5jbXUuZWR1PgogICAtIHByb3Zvc0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOCAwMzo0MTowOAogICAgIFthdXRoLmMgc2Vzc2lvbi5jXQogICAgIG1vdmUgYXV0aF9hcHByb3ZhbCBpbnRvIGdldHB3bmFtYWxsb3cgd2l0aCBoZWxwIGZyb20gbWlsbGVydEAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTggMTc6MTM6MTUKICAgICBbY2lwaGVyLmMgY2lwaGVyLmhdCiAgICAgZXhwb3J0L2ltcG9ydCBjaXBoZXIgc3RhdGVzOyBuZWVkZWQgYnkgc3NoLXByaXZzZXAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTggMTc6MTY6MzgKICAgICBbcGFja2V0LmMgcGFja2V0LmhdCiAgICAgZXhwb3J0L2ltcG9ydCBjaXBoZXIgc3RhdGUsIGl2IGFuZCBzc2gyIHNlcW5yOyBuZWVkZWQgYnkgc3NoLXByaXZzZXAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTggMTc6MjM6MzEKICAgICBba2V5LmMga2V5LmhdCiAgICAgYWRkIGtleV9kZW1vdGUoKSBmb3Igc3NoLXByaXZzZXAKICAgLSBwcm92b3NAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTggMTc6MjU6MjkKICAgICBbYnVmYXV4LmMgYnVmYXV4LmhdCiAgICAgYnVmZmVyX3NraXBfc3RyaW5nIGFuZCBleHRyYSBzYW5pdHkgY2hlY2tpbmc7IG5lZWRlZCBieSBzc2gtcHJpdnNlcAogICAtIHByb3Zvc0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOCAxNzozMTo1NAogICAgIFtjb21wcmVzcy5jXQogICAgIGV4cG9ydCBjb21wcmVzc2lvbiBzdHJlYW1zIGZvciBzc2gtcHJpdnNlcAogICAtIHByb3Zvc0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOCAxNzo1MDozMQogICAgIFthdXRoLWJzZGF1dGguYyBhdXRoLW9wdGlvbnMuYyBhdXRoLXJoLXJzYS5jIGF1dGgtcnNhLmNdCiAgICAgW2F1dGgtc2tleS5jIGF1dGguaCBhdXRoMS5jIGF1dGgyLWNoYWxsLmMgYXV0aDIuYyBrZXguYyBrZXguaCBrZXhkaC5jXQogICAgIFtrZXhnZXguYyBzZXJ2Y29uZi5jXQogICAgIFtzZXNzaW9uLmggc2VydmNvbmYuaCBzZXJ2ZXJsb29wLmMgc2Vzc2lvbi5jIHNzaGQuY10KICAgICBpbnRlZ3JhdGUgcHJpdmlsZWdlIHNlcGFyYXRlZCBvcGVuc3NoOyBpdHMgdHVybmVkIG9mZiBieSBkZWZhdWx0IAogICAgIGZvciBub3cuIHdvcmsgZG9uZSBieSBtZSBhbmQgbWFya3VzQAogICAtIHByb3Zvc0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOCAxNzo1MzowOAogICAgIFtzc2hkLjhdCiAgICAgY3JlZGl0cyBmb3IgcHJpdnNlcAogICAtIHByb3Zvc0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOCAxNzo1OTowOQogICAgIFtzc2hkLjhdCiAgICAgZG9jdW1lbnQgVXNlUHJpdmlsZWdlU2VwYXJhdGlvbgogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTggMjM6NTI6NTEKICAgICBbc2VydmNvbmYuY10KICAgICBVbnByaXZVc2VyL1VucHJpdkdyb3VwIHVzYWJsZSBub3ctLXNwZWNpZnkgbnVtZXJpYyB1c2VyL2dyb3VwOyBvawogICAgIHByb3Zvc0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE5IDAzOjAzOjQzCiAgICAgW3BhdGhuYW1lcy5oIHNlcnZjb25mLmMgc2VydmNvbmYuaCBzc2hkLmNdCiAgICAgX1BBVEhfUFJJVlNFUF9DSFJPT1RfRElSOyBvayBwcm92b3NACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOSAwNToyMzowOAogICAgIFtzc2hkLjhdCiAgICAgQmFubmVyIGhhcyBubyBkZWZhdWx0LgogICAtIG1wZWNoQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE5IDA2OjMyOjU2CiAgICAgW3NmdHAtaW50LmNdCiAgICAgdXNlIHhmcmVlKCkgYWZ0ZXIgeHN0cmR1cCgpLgoKICAgICBtYXJrdXNAIG9rCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE5IDEwOjM1OjM5CiAgICAgW2F1dGgtb3B0aW9ucy5jIGF1dGguaCBzZXNzaW9uLmMgc2Vzc2lvbi5oIHNzaGQuY10KICAgICBjbGVhbiB1cCBwcm90b3R5cGVzCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE5IDEwOjQ5OjM1CiAgICAgW2F1dGgta3JiNS5jIGF1dGgtcmgtcnNhLmMgYXV0aC5jIGNpcGhlci5jIGtleS5jIG1pc2MuaF0KICAgICBbcGFja2V0LmMgc2Vzc2lvbi5jIHNmdHAtY2xpZW50LmMgc2Z0cC1nbG9iLmggc2Z0cC5jIHNzaC1hZGQuYyBzc2guY10KICAgICBbc3NoY29ubmVjdDIuYyBzc2hkLmMgdHR5bW9kZXMuY10KICAgICBLTkYgd2hpdGVzcGFjZQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOSAxNDoyNzozOQogICAgIFthdXRoLmMgYXV0aDEuYyBhdXRoMi5jXQogICAgIG1ha2UgZ2V0cHduYW1hbGxvdygpIGFsbHdheXMgY2FsbCBwd2NvcHkoKQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOSAxNTozMTo0NwogICAgIFthdXRoLmNdCiAgICAgY2hlY2sgZm9yIE5VTEw7IGZyb20gcHJvdm9zQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjAgMTk6MTI6MjUKICAgICBbc2VydmNvbmYuYyBzZXJ2Y29uZi5oIHNzaC5oIHNzaGQuY10KICAgICBmb3IgdW5wcml2aWxlZ2VkIHVzZXIsIGdyb3VwIGRvOgogICAgIHB3PWdldHB3bmFtKFNTSF9QUklWU0VQX1VTRVIpOyBkb19zZXR1c2VyY29udGV4dChwdykuICBvayBwcm92b3NACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yMCAyMTowODowOAogICAgIFtzc2hkLmNdCiAgICAgc3RyZXJyb3IoKSBvbiBjaGRpcigpIGZhaWw7IG9rIHByb3Zvc0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjEgMTA6MjE6MjAKICAgICBbc3NoLWFkZC5jXQogICAgIGlnbm9yZSBlcnJvcnMgZm9yIG5vbmV4aXN0aW5nIGRlZmF1bHQga2V5cyBpbiBzc2gtYWRkLAogICAgIGZpeGVzIGh0dHA6Ly9idWd6aWxsYS5taW5kcm90Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4CiAgIC0gamFrb2JAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjEgMTU6MTc6MjYKICAgICBbY2xpZW50bG9vcC5jIHNzaC4xXQogICAgIGFkZCBidWlsdC1pbiBjb21tYW5kIGxpbmUgZm9yIGFkZGluZyBuZXcgcG9ydCBmb3J3YXJkaW5ncyBvbiB0aGUgZmx5LgogICAgIGJhc2VkIG9uIGEgcGF0Y2ggZnJvbSBicmlhbiB3ZWxsaW5ndG9uLiBvayBtYXJrdXNALgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yMSAxNjozODowNgogICAgIFtzY2FyZC5jXQogICAgIG1ha2UgY29tcGlsZSB3LyBvcGVuc3NsIDAuOS43CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIxIDE2OjU0OjUzCiAgICAgW3NjYXJkLmMgc2NhcmQuaCBzc2gta2V5Z2VuLmNdCiAgICAgbW92ZSBrZXkgdXBsb2FkIHRvIHNjYXJkLltjaF0KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjEgMTY6NTc6MTUKICAgICBbc2NhcmQuY10KICAgICByZW1vdmUgY29uc3QKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjEgMTY6NTg6MTMKICAgICBbY2xpZW50bG9vcC5jXQogICAgIHJlbW92ZSB1bnVzZWQKICAgLSByZWVzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIxIDE4OjA4OjE1CiAgICAgW3NjYXJkLmNdCiAgICAgSW4gc2NfcHV0X2tleSgpLCBzY19yZWFkZXJfaWQgc2hvdWxkIGJlIGlkLgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yMSAyMDo1MToxMgogICAgIFtzc2hkX2NvbmZpZ10KICAgICBhZGQgcHJpdnNlcCAob2ZmKQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yMSAyMToyMzozNAogICAgIFtzc2hkLmNdCiAgICAgYWRkIHByaXZzZXBfcHJlYXV0aCgpIGFuZCByZW1vdmUgMSBnb3RvOyBvayBwcm92b3NACiAgIC0gcmVlc0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yMSAyMTo1NDozNAogICAgIFtzY2FyZC5jIHNjYXJkLmggc3NoLWtleWdlbi5jXQogICAgIEFkZCBQSU4tcHJvdGVjdGlvbiBmb3Igc2VjcmV0IGtleS4KICAgLSByZWVzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIxIDIyOjQ0OjA1CiAgICAgW2F1dGhmZC5jIGF1dGhmZC5oIHNzaC1hZGQuYyBzc2gtYWdlbnQuYyBzc2guY10KICAgICBBZGQgUElOLXByb3RlY3Rpb24gZm9yIHNlY3JldCBrZXkuCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIxIDIzOjA3OjM3CiAgICAgW2NsaWVudGxvb3AuY10KICAgICByZW1vdmUgdW51c2VkLCBzeW5jIHcvIGNtZGxpbmUgcGF0Y2ggaW4gbXkgdHJlZS4KCjIwMDIwMzE3CiAtICh0aW0pIFtjb25maWd1cmUuYWNdIEFzc3VtZSBwYXRoIGdpdmVuIHdpdGggLS13aXRoLXBpZC1kaXI9UEFUSCBpcyAKICAgd2FudGVkLCB3YXJuIGlmIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC4gUHV0IHN5c3RlbSBkaXJlY3RvcmllcyBpbiAKICAgZnJvbnQgb2YgUEFUSCBmb3IgZmluZGluZyBlbnRvcnB5IGNvbW1hbmRzLgogLSAodGltKSBbY29udHJpYi9haXgvYnVpbGRiZmYuc2ggY29udHJpYi9haXgvaW52ZW50b3J5LnNoXSBBSVggcGFja2FnZQogICBidWlsZCBmaXhlcy4gIFBhdGNoIGJ5IERhcnJlbiBUdWNrZXIgPGR0dWNrZXJAemlwLmNvbS5hdT4KICAgW2NvbnRyaWIvc29sYXJpcy9idWlsZHBrZy5zaF0gYWRkIG1pc3NpbmcgZGlycyB0byBTWVNURU1fRElSLiBIYXZlCiAgIHBvc3RpbnN0YWxsIGNoZWNrIGZvciAkcGlkZGlyIGFuZCBhZGQgaWYgbmVjZXNzYXJ5LgoKMjAwMjAzMTEKIC0gKHRpbSkgW2NvbnRyaWIvc29sYXJpcy9idWlsZHBrZy5zaCwgY29udHJpYi9zb2xhcmlzL1JFQURNRV0gVXBkYXRlZCB0bwogICBidWlsZCBvbiBhbGwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCBTVlI0IHN0eWxlIHBhY2thZ2UgdG9vbHMuIE5vdyBydW5zCiAgIGZyb20gYnVpbGQgZGlyLiBQYXJ0cyBhcmUgYmFzZWQgb24gcGF0Y2hlcyBmcm9tIEFudG9uaW8gTmF2YXJybywgYW5kCiAgIERhcnJlbiBUdWNrZXIuCgoyMDAyMDMwOAogLSAoZGptKSBSZXZlcnQgYml0cyBvZiBNYXJrdXMnIE9wZW5TU0wgY29tcGF0IHBhdGNoIHdoaWNoIHdhcyAKICAgYWNjaWRlbnRhbGx5IGNvbW1pdHRlZC4KIC0gKGRqbSkgQWRkIE1hcmt1cycgcGF0Y2ggZm9yIGNvbXBhdCB3aWggT3BlblNTTCA8IDAuOS42LiAKICAgS25vd24gaXNzdWU6IEJsb3dmaXNoIGZvciBTU0gxIGRvZXMgbm90IHdvcmsKIC0gKHN0ZXZlc2spIGVudHJvcHkuYzogdHlwbyBpbiBkZWJ1ZyBtZXNzYWdlCiAtIChkam0pIHNzaC1rZXlnZW4gLWkgbmVlZHMgc2VlZGVkIFJORzsgcmVwb3J0IGZyb20gbWFya3VzQAoKJElkOiBDaGFuZ2VMb2csdiAxLjIzMDUgMjAwMi8wNi8yNyAwMDoyMTo1OSBtb3VyaW5nIEV4cCAkCg==