ICAgICAgICAgICAgQXBhY2hlIENvbW1vbnMgQ0xJCiAgICAgICAgICAgICAgICBWZXJzaW9uIDEuMwogICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzCgoKSU5UUk9EVUNUSU9OOgoKVGhpcyBkb2N1bWVudCBjb250YWlucyB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhpcyB2ZXJzaW9uIG9mIHRoZSBDb21tb25zIENMSQpwYWNrYWdlLiBDb21tb25zIENMSSBwcm92aWRlcyBhIHNpbXBsZSBBUEkgZm9yIHdvcmtpbmcgd2l0aCB0aGUgY29tbWFuZCBsaW5lCmFyZ3VtZW50cyBhbmQgb3B0aW9ucy4KCkNvbW1vbnMgQ0xJIDEuMyBpcyBhIGJ1Z2ZpeCBhbmQgZmVhdHVyZSByZWxlYXNlIGFuZCBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIHRoZQpwcmV2aW91cyB2ZXJzaW9ucywgZXhjZXB0IGZvciB0aGUgT3B0aW9uVmFsaWRhdG9yIGNsYXNzIHRoYXQgaXMgbm8gbG9uZ2VyIHB1YmxpYwooY2hhbmdlIGludHJvZHVjZWQgaW4gdjEuMikuIENvbW1vbnMgQ0xJIDEuMyBhdCBsZWFzdCByZXF1aXJlcyBKYXZhIDUuMC4KCk1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIG9uIHRoZSBwcm9qZWN0IHNpdGUgYXQgCmh0dHA6Ly9jb21tb25zLmFwYWNoZS5vcmcvY2xpLgoKTk9URVMKPT09PT0KCkEgbmV3IHBhcnNlciBpcyBhdmFpbGFibGU6IERlZmF1bHRQYXJzZXIuIEl0IGNvbWJpbmVzIHRoZSBmZWF0dXJlcyBvZiB0aGUKR251UGFyc2VyIGFuZCB0aGUgUG9zaXhQYXJzZXIuIEl0IGFsc28gcHJvdmlkZXMgYWRkaXRpb25hbCBmZWF0dXJlcyBsaWtlCnBhcnRpYWwgbWF0Y2hpbmcgZm9yIHRoZSBsb25nIG9wdGlvbnMsIGFuZCBsb25nIG9wdGlvbnMgd2l0aG91dApzZXBhcmF0b3IgKGkuZSBsaWtlIHRoZSBKVk0gbWVtb3J5IHNldHRpbmdzOiAtWG14NTEybSkuIFRoaXMgbmV3IHBhcnNlcgpkZXByZWNhdGVzIHRoZSBwcmV2aW91cyBvbmVzLgoKREVQUkVDQVRJT05TCj09PT09PT09PT09PQoKbyBvcmcuYXBhY2hlLmNvbW1vbnMuY2xpLkJhc2ljUGFyc2VyIAogICAgcmVwbGFjZWQgYnkgb3JnLmFwYWNoZS5jb21tb25zLmNsaS5EZWZhdWx0UGFyc2VyCgpvIG9yZy5hcGFjaGUuY29tbW9ucy5jbGkuR251UGFyc2VyIAogICAgcmVwbGFjZWQgYnkgb3JnLmFwYWNoZS5jb21tb25zLmNsaS5EZWZhdWx0UGFyc2VyCgpvIG9yZy5hcGFjaGUuY29tbW9ucy5jbGkuT3B0aW9uQnVpbGRlciAKICAgIHJlcGxhY2VkIGJ5IG9yZy5hcGFjaGUuY29tbW9ucy5jbGkuT3B0aW9uLmJ1aWxkZXIoKQogICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jb21tb25zLmNsaS5PcHRpb24uYnVpbGRlcihTdHJpbmcpCiAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmNvbW1vbnMuY2xpLk9wdGlvbi5CdWlsZGVyCgpvIG9yZy5hcGFjaGUuY29tbW9ucy5jbGkuUGFyc2VyIAogICAgcmVwbGFjZWQgYnkgb3JnLmFwYWNoZS5jb21tb25zLmNsaS5EZWZhdWx0UGFyc2VyCgpvIG9yZy5hcGFjaGUuY29tbW9ucy5jbGkuUG9zaXhQYXJzZXIgCiAgICByZXBsYWNlZCBieSBvcmcuYXBhY2hlLmNvbW1vbnMuY2xpLkRlZmF1bHRQYXJzZXIKCgpORVcgRkVBVFVSRVMKPT09PT09PT09PT09CgpvIENMSS0xNjE6IFBvc2l4UGFyc2VyIGRvZXNuJ3Qgc3RvcCB0aGUgcGFyc2luZyBvbiAiLS0iIHRva2VucyBmb2xsb3dpbmcgYW4KICAgICAgICAgICBvcHRpb24gd2l0aCBhbiBhcmd1bWVudApvIENMSS0xNjc6IFN1cHBvcnQgb3B0aW9ucyBsaWtlIEphdmEgbWVtb3J5IHNldHRpbmdzICgtWG14NTEyTSkKbyBDTEktMTgxOiBVbmlmaWVkIFBhcnNlcgpvIENMSS0yMjQ6IEFkZGVkIG5ldyBmbHVlbnQgQVBJIHRvIGNyZWF0ZSBPcHRpb24gaW5zdGFuY2VzIHZpYSBidWlsZGVyIGNsYXNzCiAgICAgICAgICAgT3B0aW9uLkJ1aWxkZXIuIFRoaXMgcmVwbGFjZXMgdGhlIG5vdyBkZXByZWNhdGVkIE9wdGlvbkJ1aWxkZXIuCiAgICAgICAgICAgVGhhbmtzIHRvIER1bmNhbiBKb25lcywgQnJpYW4gQmxvdW50LgpvIENMSS0xNjA6IFBvc2l4UGFyc2VyIG5vdyBzdXBwb3J0cyBwYXJ0aWFsIGxvbmcgb3B0aW9ucyAoLS12ZXIgaW5zdGVhZCBvZgogICAgICAgICAgIC0tdmVyc2lvbikuIApvIENMSS0xNjk6IEhlbHBGb3JtYXR0ZXIgbm93IHN1cHBvcnRzIHNldHRpbmcgdGhlIGRpc3BsYXllZCBzZXBhcmF0b3Igb2YgbG9uZwogICAgICAgICAgIG9wdGlvbnMuIFRoYW5rcyB0byBKLiBMZXdpcyBNdWlyLiAKbyBDTEktMjE0OiBBZGRlZCBuZXcgbWV0aG9kIE9wdGlvbnMuYWRkT3B0aW9uKFN0cmluZywgU3RyaW5nKS4gVGhhbmtzIHRvCiAgICAgICAgICAgQWxleGFuZHJ1IE1vY2FudS4KCgpCVUcgRklYRVMKPT09PT09PT09CgpvIENMSS0yNDg6IERlYWQgbGlua3Mgb24gZG9jIHBhZ2UuCm8gQ0xJLTIzNDogRml4ZWQgY29kZSBleGFtcGxlIGluIGphdmFkb2Mgb2YKICAgICAgICAgICAiT3B0aW9uI0J1aWxkZXIjdmFsdWVTZXBhcmF0b3IoY2hhcikiLiBUaGFua3MgdG8gR3JlZyBUaG9tYXMuCm8gQ0xJLTI0MTogQ2xhcmlmaWVkIGJlaGF2aW9yIG9mICJPcHRpb25WYWxpZGF0b3IjdmFsaWRhdGVPcHRpb24oU3RyaW5nKSIKICAgICAgICAgICBpbiBjYXNlIG9mIG51bGwgaW5wdXQuIFRoYW5rcyB0byBCZWx1Z2EgQmVoci4KbyBDTEktMjAyOiBEZWZhdWx0IG9wdGlvbnMgd2lsbCBub3cgd29yayBjb3JyZWN0bHkgd2l0aCByZXF1aXJlZCBvcHRpb25zIHRoYXQKICAgICAgICAgICBhcmUgbWlzc2luZy4KbyBDTEktMjAzOiBEZWZhdWx0IG9wdGlvbnMgd2lsbCBub3cgd29yayBjb3JyZWN0bHkgdG9nZXRoZXIgd2l0aCBvcHRpb24gZ3JvdXBzLiAKbyBDTEktMjA1OiBIZWxwRm9ybWF0dGVyLnNldEFyZ05hbWUoU3RyaW5nKSBub3cgY29ycmVjdGx5IHNldHMgdGhlIGFyZ3VtZW50CiAgICAgICAgICAgbmFtZS4KbyBDTEktMjA0OiBQYXNzaW5nIGRlZmF1bHQgdmFsdWVzIGZvciBub3QgZGVmaW5lZCBvcHRpb25zIHRvIGEgcGFyc2VyIHdpbGwgbm93CiAgICAgICAgICAgdHJpZ2dlciBhIFBhcnNlRXhjZXB0aW9uIGluc3RlYWQgb2YgYSBOdWxsUG9pbnRlckV4Y2VwdGlvbi4KbyBDTEktMjAxOiBEZWZhdWx0IHByb3BlcnRpZXMgcHJvdmlkZWQgYXMgaW5wdXQgdG8gdGhlIFBhcnNlci5wYXJzZSgpIG1ldGhvZHMKICAgICAgICAgICBhcmUgbm93IGNvcnJlY3RseSBwcm9jZXNzZWQuCm8gQ0xJLTIxNTogQ29tbWFuZExpbmUuZ2V0UGFyc2VkT3B0aW9uVmFsdWUoKSBub3cgcmV0dXJucyBhIFN0cmluZyBvYmplY3QgaWYgbm8KICAgICAgICAgICBvcHRpb24gdHlwZSBoYXMgYmVlbiBleHBsaWNpdGx5IHNldC4gVGhhbmtzIHRvIE1hbnVlbCBN/GxsZXIuIApvIENMSS0yMTI6IEhlbHBGb3JtYXR0ZXIgbm93IHByaW50cyBjb21tYW5kLWxpbmUgb3B0aW9ucyBpbiB0aGUgc2FtZSBvcmRlciBhcwogICAgICAgICAgIHRoZXkgaGF2ZSBiZWVuIGFkZGVkLiBUaGFua3MgdG8gUGVyIENlZGVyYmVyZy4KbyBDTEktMTg2OiBTdGFuZGFyZCBoZWxwIHRleHQgbm93IHNob3dzIG1hbmRhdG9yeSBhcmd1bWVudHMgYWxzbyBmb3IgdGhlIGZpcnN0CiAgICAgICAgICAgb3B0aW9uLiBUaGFua3MgdG8gS3Jpc3RvZmYgS2llZmVyLgpvIENMSS0yMDc6IEhlbHBGb3JtYXR0ZXIgZG9lcyBub3Qgc3RyaXAgYW55bW9yZSBsZWFkaW5nIHdoaXRlc3BhY2UgaW4gdGhlCiAgICAgICAgICAgZm9vdGVyIHRleHQuIFRoYW5rcyB0byBVcmkgTW9zemtvd2ljei4KbyBDTEktMTg1OiBTdHJpcCBxdW90ZXMgY29udGFpbmVkIGluIGFyZ3VtZW50IHZhbHVlcyBvbmx5IGlmIHRoZXJlIGlzIGV4YWN0bHkKICAgICAgICAgICBvbmUgYXQgdGhlIGJlZ2lubmluZyBhbmQgb25lIGF0IHRoZSBlbmQuIFRoYW5rcyB0bwogICAgICAgICAgIEVpbmFyIE0uIFIuIFJvc2VudmluZ2UuCm8gQ0xJLTE4NDogTmVnYXRpdmUgbnVtZXJpY2FsIGFyZ3VtZW50cyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBudW1lcmljYWwgb3B0aW9ucy4gCm8gQ0xJLTE5MzogRml4IHBvc3NpYmxlIFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaW4gSGVscEZvcm1hdHRlci4KICAgICAgICAgICBUaGFua3MgdG8gVHJhdmlzIE1jTGVza2V5LgpvIENMSS0xODM6IE9wdGlvbkdyb3VwcyBubyBsb25nZXIgdGhyb3cgYW4gQWxyZWFkeVNlbGVjdGVkRXhjZXB0aW9uIHdoZW4gcmV1c2VkCiAgICAgICAgICAgZm9yIHNldmVyYWwgcGFyc2luZ3MuCm8gQ0xJLTE4MjogT3B0aW9uR3JvdXAgbm93IHNlbGVjdHMgcHJvcGVybHkgYW4gb3B0aW9uIHdpdGggbm8gc2hvcnQgbmFtZS4KCgpDSEFOR0VTCj09PT09PT0KCm8gQ0xJLTI0MDogU21hbGwgY2xlYW51cCBvZiBPcHRpb24gY2xhc3MuIFRoYW5rcyB0byBCZWx1Z2EgQmVoci4KbyBDTEktMjMwOiBPcHRpb25zLmdldFJlcXVpcmVkT3B0aW9ucygpIG5vdyByZXR1cm5zIGFuIHVubW9kaWZpYWJsZSBsaXN0LiAKbyBDTEktMjE4OiBDbGFyaWZ5IGphdmFkb2MgZm9yIENvbW1hbmRMaW5lLmdldE9wdGlvblZhbHVlKCkgdGhhdCB0aGUgZmlyc3QKICAgICAgICAgICBzcGVjaWZpZWQgYXJndW1lbnQgd2lsbCBiZSByZXR1cm5lZC4gVGhhbmtzIHRvIFN2ZW4uIApvIENMSS0yMjc6IENoYW5nZWQgdW5pdCB0ZXN0cyB0byBqdW5pdCA0IGFubm90YXRpb24gc3R5bGUuIFRoYW5rcyB0bwogICAgICAgICAgIER1bmNhbiBKb25lcy4gCm8gQ0xJLTIwOTogVGhlIGphdmFkb2Mgb2YgT3B0aW9uQnVpbGRlciBub3cgc3RhdGVzIHRoYXQgdGhlIGNsYXNzIGlzIG5vdAogICAgICAgICAgIHRocmVhZC1zYWZlLiBUaGFua3MgdG8gVGhvbWFzIEhlcnJlLiAKbyBDTEktMjAwOiBGaXhlZCB0eXBvIGluIGphdmFkb2Mgb2YgY2xhc3MgQ29tbWFuZExpbmUuIFRoYW5rcyB0bwogICAgICAgICAgIEdlcmFyZCBXZWF0aGVyYnkuIApvIENMSS0yMjM6IFNvdXJjZSBjb2RlIG5vdyB1c2VzIGdlbmVyaWMgdHlwZXMgaW5zdGVhZCBvZiByYXcgdHlwZXMgd2hlcmUKICAgICAgICAgICBwb3NzaWJsZS4gVGhhbmtzIHRvIEdlcmFyZCBXZWF0aGVyYnkuIApvIENMSS0yMjAgIENvcnJlY3RlZCBqYXZhZG9jIGZvciByZXR1cm4gdHlwZSBvZgogICAgICAgICAgIE1pc3NpbmdPcHRpb25FeGNlcHRpb24uZ2V0TWlzc2luZ09wdGlvbnMoKS4gVGhhbmtzIHRvIEpvZSBDYXNhZG9udGUuCm8gQ0xJLTE5NzogSW1wcm92ZSBkZXNjcmlwdGlvbiBvZiBwYXJhbWV0ZXIgInN0b3BBdE5vbk9wdGlvbiIgaW4gbWV0aG9kCiAgICAgICAgICAgQ29tbWFuZExpbmUucGFyc2UoT3B0aW9ucywgU3RyaW5nW10sIGJvb2xlYW4pLiBUaGFua3MgdG8KICAgICAgICAgICBBbmRlcnMgTGFyc3Nvbi4KbyBDTEktMjMxOiBSZW1vdmVkIERvdWJsZUNoZWNrZWRMb2NraW5nIHRlc3QgZnJvbSBjaGVja3N0eWxlIGNvbmZpZ3VyYXRpb24uCiAgICAgICAgICAgVGhhbmtzIHRvIER1bmNhbiBKb25lcy4KCgogICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcyBmb3IgdmVyc2lvbiAxLjIKCk5FVyBGRUFUVVJFUwo9PT09PT09PT09PT0KCm8gLS0gICAgIDogVGhlIG1ldGhvZCBnZXRPcHRpb25Qcm9wZXJ0aWVzKCkgaW4gdGhlIENvbW1hbmRMaW5lIGNsYXNzIHdhcyBhZGRlZAogICAgICAgICAgIHRvIHJldHJpZXZlIGVhc2lseSB0aGUga2V5L3ZhbHVlIHBhaXJzIHNwZWNpZmllZCB3aXRoIG9wdGlvbnMgbGlrZQogICAgICAgICAgIC1Ea2V5MT12YWx1ZTEgLURrZXkyPXZhbHVlMi4KbyBDTEktMTU3OiBHbnVQYXJzZXIgbm93IHN1cHBvcnRzIGxvbmcgb3B0aW9ucyB3aXRoIGFuICc9JyBzaWduIAogICAgICAgICAgIChpZS4gLS1mb289YmFyIGFuZCAtZm9vPWJhcikKbyBDTEktMTU1OiBUaGUgb3JkZXJpbmcgb2Ygb3B0aW9ucyBjYW4gYmUgZGVmaW5lZCBpbiBoZWxwIG1lc3NhZ2VzLgoKCkJVRyBGSVhFUwo9PT09PT09PT0KCm8gQ0xJLTEzNzogVGhlIG51bWJlciBvZiBhcmd1bWVudHMgZGVmaW5lZCBmb3IgYW4gb3B0aW9uIHNwZWNpZmllcyB0aGUKICAgICAgICAgICBhcmd1bWVudHMgcGVyIG9jY3VyZW5jZSBvZiB0aGUgb3B0aW9uIGFuZCBub3QgZm9yIGFsbCBvY2N1cmVuY2VzLgpvIENMSS0xNjQ6IFBvc2l4UGFyc2VyIG5vIGxvbmdlciBpZ25vcmVzIHVucmVjb2duaXplZCBzaG9ydCBvcHRpb25zLgpvIENMSS0xNjM6IFBvc2l4UGFyc2VyIG5vIGxvbmdlciBzdG9wcyB0aGUgYnVyc3RpbmcgcHJvY2VzcyBvZiBhIHRva2VuIGlmCiAgICAgICAgICAgc3RvcEF0Tm9uT3B0aW9uIGlzIGVuYWJsZWQgYW5kIGEgbm9uIG9wdGlvbiBjaGFyYWN0ZXIgaXMKICAgICAgICAgICBlbmNvdW50ZXJlZC4KbyBDTEktMTY1OiBQb3NpeFBhcnNlciBubyBsb25nZXIga2VlcHMgcHJvY2Vzc2luZyB0aGUgdG9rZW5zIGFmdGVyIGFuIAogICAgICAgICAgIHVucmVjb2duaXplZCBsb25nIG9wdGlvbiB3aGVuIHN0b3BBdE5vbk9wdGlvbiBpcyBlbmFibGVkLgpvIENMSS0xNTY6IFJlcXVpcmVkIG9wdGlvbnMgYXJlIHByb3Blcmx5IGNoZWNrZWQgaWYgYW4gT3B0aW9ucyBpbnN0YW5jZSBpcyB1c2VkCiAgICAgICAgICAgdHdpY2UgdG8gcGFyc2UgYSBjb21tYW5kIGxpbmUuCm8gQ0xJLTE1MTogVGhlIGxpbmUgd3JhcHBpbmcgaW4gSGVscEZvcm1hdHRlciBub3cgd29ya3MgcHJvcGVybHkuCgoKQ0hBTkdFUwo9PT09PT09CgpvIENMSS0xNDk6IFRoZSBtZXNzYWdlIG9mIE1pc3NpbmdPcHRpb25FeGNlcHRpb24gaGFzIGJlZW4gaW1wcm92ZWQuCm8gQ0xJLTg2OiAgVGhlIGV4Y2VwdGlvbnMgaGF2ZSBiZWVuIGVuaGFuY2VkIHdpdGggbWV0aG9kcyB0byByZXRyaWV2ZSBlYXNpbHkKICAgICAgICAgICB0aGUgcmVsYXRlZCBvcHRpb25zLgpvIENMSS0xNDE6IE9wdGlvbi50b1N0cmluZygpIG5vdyByZXBvcnRzIGFyZ3VtZW50cyBwcm9wZXJseS4KbyBDTEktMTQyOiBUaGUgUGFyc2VyIGNsYXNzIGhhcyBiZWVuIGNoYW5nZWQgdG8gYmUgbW9yZSBlYXNpbHkgZXh0ZW5kYWJsZS4KbyBDTEktMTQwOiBUaGUgZm9sbG93aW5nIGNsYXNzZXMgYXJlIG5vdyBzZXJpYWxpemFibGU6IE9wdGlvbiwgT3B0aW9uR3JvdXAsCiAgICAgICAgICAgQ29tbWFuZExpbmUgYW5kIE9wdGlvbnMuCm8gLS0gICAgIDogT3B0aW9uVmFsaWRhdG9yIGlzIG5vIGxvbmdlciBwdWJsaWMsIGl0cyBtZXRob2RzIHdlcmUgYWxsIHByaXZhdGUuCgoKICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMgZm9yIHZlcnNpb24gMS4xCgpORVcgRkVBVFVSRVMKPT09PT09PT09PT09CgpvIENMSS03ODogIFNldHRpbmcgZGVzY3JpcHRpb24gb2YgYSBPcHRpb24uIAoKQ0hBTkdFUwo9PT09PT09CgpvIENMSS0yOiAgIFdyb25nIHVzYWdlIHN1bW1hcnkuIApvIENMSS01OiAgIERlcGVuZGVjeSBvbiBjb21tb25zLWxhbmctMi4wIGJ1dCBjb21tb25zLWxhbmctMS4wIGlzIG9idGFpbmVkLiAKbyBDTEktODogICBMaW5lIHNlcGFyYXRvciBhcyBmaXJzdCBjaGFyIGZvciBoZWxwZm9ybWF0dGVyIChmb290ZXIpIHRocm93cwogICAgICAgICAgIGV4Y2VwdGlvbi4gCm8gQ0xJLTEzOiAgQ29tbWFuZExpbmUuZ2V0T3B0aW9uVmFsdWUoKSBiZWhhdmVzIGNvbnRyYXJ5IHRvIGRvY3MuIApvIENMSS0yMTogIGNsb25lIG1ldGhvZCBpbiBPcHRpb24gc2hvdWxkIHVzZSBzdXBlci5jbG9uZSgpLiAKbyBDTEktMjM6ICBQYXNzaW5nIHByb3BlcnRpZXMgaW4gUGFyc2VyIGRvZXMgbm90IHdvcmsgZm9yIG9wdGlvbnMgd2l0aCBhIHNpbmdsZQogICAgICAgICAgIGFyZ3VtZW50LiAKbyBDTEktMjY6ICBPbmx5IGxvbmcgb3B0aW9ucyB3aXRob3V0IHNob3J0IG9wdGlvbiBzZWVtcyB0byBiZSBub3RpY2VkLiAKbyBDTEktMjg6ICBJbmZpbml0ZSBMb29wIGluIENvbW1hbmQtTGluZSBwcm9jZXNzaW5nLiAKbyBDTEktMjk6ICBPcHRpb25zIHNob3VsZCBub3QgYmUgYWJsZSB0byBiZSBhZGRlZCBtb3JlIHRoYW4gb25jZS4gCm8gQ0xJLTM1OiAgSGVscEZvcm1hdHRlciBkb2Vzbid0IHNvcnQgb3B0aW9ucyBwcm9wZXJseS4gCm8gQ0xJLTM4OiAgSGVscEZvcm1hdHRlciBkb2Vzbid0IGZ1bmN0aW9uIGNvcnJlY3RseSBmb3Igb3B0aW9ucyB3aXRoIG9ubHkKICAgICAgICAgICBMb25nT3B0LiAKbyBDTEktNDQ6ICBEb2N1bWVudCBlbmhhbmNlbWVudC4gCm8gQ0xJLTQ1OiAgRG9jdW1lbnRhdGlvbiBlcnJvcnMuIApvIENMSS01MTogIFBhcmFtZXRlciB2YWx1ZSAiLXNvbWV0aGluZyIgbWlzaW50ZXJwcmV0ZWQgYXMgYSBwYXJhbWV0ZXIuIApvIENMSS01NjogIGNsb25lKCkgbWV0aG9kIGRvZXNuJ3QgZnVsbHkgY2xvbmUgY29udGVudHMuIApvIENMSS01OTogIE5vIEphdmFkb2MgZm9yIEhlbHBGb3JtYXR0ZXIhLiAKbyBDTEktNjU6ICBQYXJzZXIgYnJlYWtzIHVwIGNvbW1hbmQgbGluZSBwYXJtcyBpbnRvIHNpbmdsZSBjaGFyYWN0ZXJzLiAKbyBDTEktNjc6ICBNaXNzaW5nIGFyZ3VtZW50cyBpbiBIZWxwRm9ybWF0dGVyLnJlbmRlck9wdGlvbnMoLi4pLgpvIENMSS02OTogIEVycm9yIHBhcnNpbmcgb3B0aW9uIGFyZ3VtZW50cy4KbyBDTEktNzE6ICBBIHdlYWtuZXNzIG9mIHBhcnNlci4KbyBDTEktMTI5OiBDTElfMV9CUkFOQ0ggYnVpbGQueG1sIGRvZXNuJ3Qgd29yay4KbyBDTEktMTMwOiBSZW1vdmUgdGhlIENvbW1vbnMgTGFuZyBkZXBlbmRlbmN5LgpvIENMSS0xMzE6IE9wdGlvbnMgY2xhc3MgcmV0dXJucyBvcHRpb25zIGluIHJhbmRvbSBvcmRlci4KbyBDTEktMTMyOiBNaXNzaW5nT3B0aW9uRXhjZXB0aW9uIHNob3VsZCBjb250YWluIGEgdXNlZnVsIGVycm9yIG1lc3NhZ2UuCm8gQ0xJLTEzMzogTnVsbFBvaW50ZXJFeGNlcHRpb24gaW4gVXRpbC5zdHJpcExlYWRpbmdIeXBoZW5zIHdoZW4gcGFzc2VkIGEgbnVsbAogICAgICAgICAgIGFyZ3VtZW50LiAKbyBDTEktMTM0OiAxLjEgaXMgbm90IGJhY2t3YXJkcyBjb21wYXRpYmxlIGJlY2F1c2UgaXQgYWRkcyBtZXRob2RzIHRvIHRoZQogICAgICAgICAgIENvbW1hbmRMaW5lUGFyc2VyIGludGVyZmFjZS4gCm8gQ0xJLTEzNTogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYmV0d2VlbiAxLjEgYW5kIDEuMCBicm9rZW4gZHVlIHRvCiAgICAgICAgICAgT3B0aW9uLmFkZFZhbHVlIHJlbW92YWwuIAoKCkhpc3RvcmljYWwgbGlzdCBvZiBjaGFuZ2VzOiBodHRwOi8vY29tbW9ucy5hcGFjaGUub3JnL2NsaS9jaGFuZ2VzLXJlcG9ydC5odG1sCgpGb3IgY29tcGxldGUgaW5mb3JtYXRpb24gb24gQ29tbW9ucyBDTEksIGluY2x1ZGluZyBpbnN0cnVjdGlvbnMgb24gaG93IHRvCnN1Ym1pdCBidWcgcmVwb3J0cywgcGF0Y2hlcywgb3Igc3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50LCBzZWUgdGhlIApBcGFjaGUgQ29tbW9ucyBDTEkgd2Vic2l0ZToKCmh0dHA6Ly9jb21tb25zLmFwYWNoZS5vcmcvY2xpLwoKSGF2ZSBmdW4hCi1BcGFjaGUgQ29tbW9ucyBDTEkgdGVhbQo=