DQogICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnIgUmVzZWFyY2ggQ29ycG9yYXRpb24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGgNCiAgICAgICAgICAgICAgICAgIFB1cmR1ZSBVbml2ZXJzaXR5IEVsZWN0cmljYWwgRW5naW5lZXJpbmcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZA0KICAgICAgICAgICAgICAgICAgICAgICBVbml2ZXJzaXR5IG9mIE1pbm5lc290YSwgQUhQQ1JDDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVyZW5jZSBQYXJyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1c3NlbGwgUXVvbmcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbGwgQ29oZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhbmsgRGlldHoNCg0KDQpBIGNlbnRyYWwgcGxhY2UgZm9yIGluZm9ybWF0aW9uIGFib3V0IFBDQ1RTIDEuMzMgaXM6DQoNCiAgICAgICAgaHR0cDovL3d3dy5wb2xob2RlLmNvbS9wY2N0cy5odG1sDQoNClRoZSBtYWludGVuYW5jZSByZWxlYXNlIGlzIGF2YWlsYWJsZSBmcm9tOg0KDQogICAgICAgIGh0dHA6Ly93d3cucG9saG9kZS5jb20vcGNjdHMxMzNtci56aXANCg0KVGhlcmUgaXMgYSByZWFkeS10by1ydW4gdmVyc2lvbiBmb3Igd2luMzIgZm9yIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvDQphdCB0aGUgc2FtZSBzaXRlLiAgSXQgaXMgYXZhaWxhYmxlIGZyb206DQoNCiAgICAgICAgaHR0cDovL3d3dy5wb2xob2RlLmNvbS93aW4zMi56aXANCg0KTmV3IHVzZXJzIHNob3VsZCB2aXNpdCBodHRwOi8vd3d3LnBvbGhvZGUuY29tL3BjY3RzLmh0bWwgaW4NCm9yZGVyIHRvIGdldCB0aGUgZm9sbG93aW5nIGRvY3VtZW50Og0KDQogICAgICAgICJOb3RlcyBGb3IgTmV3IFVzZXJzIG9mIFBDQ1RTIg0KDQpUaGlzIGlzIGEgUG9zdHNjcmlwdCBmaWxlIG9mIGFib3V0IDQwIHBhZ2VzIHdoaWNoIGlzIGV4dHJlbWVseSANCnVzZWZ1bCBmb3Igc29tZW9uZSBzdGFydGluZyBvdXQuIEl0IGlzIGEgYmFzZWQgb24gMS4zM21yMjENCg0KV2hlbiB5b3UgaGF2ZSBhIGxpdHRsZSBtb3JlIGV4cGVyaWVuY2UsIGJlIHN1cmUgdG8gcmV2aWV3IHRoZQ0KZm9sbG93aW5nIGRvY3VtZW50cyBpbiB0aGUgZGlzdHJpYnV0aW9uIGtpdDoNCg0KICAgICAgICAgICAgQ0hBTkdFU19GUk9NXzEzMy50eHQNCiAgICAgICAgICAgIENIQU5HRVNfRlJPTV8xMzNfQkVGT1JFX01SMTMudHh0DQogICAgICAgICAgICBLTk9XTl9QUk9CTEVNUy50eHQNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICAgICAgICAgICAgICAgIElOU1RBTExBVElPTiAoVW5peCkNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCjAuIERvd25sb2FkIGh0dHA6Ly93d3cucG9saG9kZS5jb20vcGNjdHMxMzNtci56aXANCg0KMS4gVW56aXAgdGhlIGRpc3RyaWJ1dGlvbiBraXQgdG8geW91ciBwcmVmZXJyZWQgbG9jYXRpb24uICANCiAgIElmIHRoZXJlIGFyZSBuZXdsaW5lIHByb2JsZW1zIHRyeSB1c2luZyB6aXAgLWEgLi4uDQoNCjIuIGNkIHRvIHRoZSBtYWluIHBjY3RzIGRpcmVjdG9yeS4NCg0KMy4gbWFrZQ0KDQogICBUaGlzIHdpbGwgY3JlYXRlOg0KDQogICAgICAgIGFudGxyDQogICAgICAgIGRsZw0KICAgICAgICBzb3JjZXJlcg0KICAgICAgICBnZW5taw0KDQo0LiBDb3B5IHRvIC91c3IvbG9jYWwvYmluIG9yIC91c3IvbG9jYWwvYmluIGlmIHlvdSBsaWtlLiAgSWYgeW91DQogICBkb24ndCB3aXNoIHRvIHRoZW4gYWRkIHBjY3RzL2JpbiB0byB5b3VyIHBhdGguDQoNCjUuIFRvIGdldCBhbiB1cC10by1kYXRlIGxpc3Qgb2YgcHJvZ3JhbSBvcHRpb25zIGV4ZWN1dGUgdGhlDQogICBwcm9ncmFtIHdpdGggbm8gY29tbWFuZCBsaW5lIG9wdGlvbnMuICBUbyBnZXQgdXAtdG8tZGF0ZQ0KICAgZG9jdW1lbnRhdGlvbiByZWFkIENIQU5HRVNfRlJPTV8xMzMqLnR4dCBhbmQgS05PV05fUFJPQkxFTVMudHh0DQogICBhdDoNCg0KICAgICAgICAgICBodHRwOi8vd3d3LnBvbGhvZGUuY29tL3BjY3RzLmh0bWwNCg0KNi4gWW91IG5lZWQgbm90IGNyZWF0ZSBhIGxpYnJhcnkuICBUaGUgbWFrZWZpbGUgY3JlYXRlZCBieSBnZW5taw0KICAgYXNzdW1lcyB0aGF0IHRoZSBmaWxlcyBhcmUgbm90IHBhcnQgb2YgYSBsaWJyYXJ5LiANCg0KICAgSWYgeW91IHdpc2ggdG8gY3JlYXRlIGEgbGlicmFyeSBmcm9tIGVsZW1lbnRzIG9mIHBjY3RzL2g6DQoNCiAgIElmIHRoZSBmaXJzdCBsZXR0ZXIgb2YgdGhlIGZpbGVuYW1lIGlzIGxvd2VyY2FzZSAodXBwZXJjYXNlKSBpdCBpcw0KICAgcmVsYXRlZCB0byB0aGUgY29kZSBnZW5lcmF0ZWQgdXNpbmcgdGhlIHBjY3RzIEMgbW9kZSAoQysrIG1vZGUpLg0KICAgU29tZSBvZiB0aGUgLmMgYW5kIC5jcHAgZmlsZXMgaW4gdGhlIGggZGlyZWN0b3J5IGFyZSBub3QgbWVhbnQgdG8NCiAgIGJlIHBsYWNlZCBpbiBhIGxpYnJhcnkgYW5kIHdpbGwgbm90IGNvbXBpbGUgYmVjYXVzZSB0aGV5IGFyZSBtZWFudA0KICAgdG8gYmUgI2luY2x1ZGUgaW4gcGNjdHMgZ2VuZXJhdGVkIGZpbGVzIHdoaWNoIGFyZSBncmFtbWFyIHNwZWNpZmljLg0KDQogICBGb3IgQysrIHVzZXJzIHBsYWNlIHRoZSBmb2xsb3dpbmcgZWxlbWVudHMgaW4gdGhlIGxpYnJhcnk6DQoNCiAgICAgICAgQVBhcnNlci5jcHANCiAgICAgICAgQVNUQmFzZS5jcHANCiAgICAgICAgQVRva2VuQnVmZmVyLmNwcA0KICAgICAgICBCdWZGaWxlSW5wdXQuY3BwIChvcHRpb25hbCkNCiAgICAgICAgRExleGVyQmFzZS5jcHANCiAgICAgICAgUENDVFNBU1QuY3BwDQogICAgICAgIFNMaXN0LmNwcA0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgICAgICAgICAgICAgIElOU1RBTExBVElPTiAoV2luMzIpDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCkkndmUgdHJpZWQgdG8ga2VlcCB0aGUgd2luMzIga2l0IHRvIHRoZSBtaW5pbXVtIG5lY2Vzc2FyeSB0byBnZXQgDQp1cCBhbmQgcnVubmluZy4gIFRoZSBjb21wbGV0ZSBraXQgY29udGFpbnMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKHNvbWUgaGlzdG9yaWNhbCksIHNvdXJjZSBjb2RlLCBhbmQgRGV2U3R1ZGlvIHByb2plY3RzIGZvciANCnJlYnVpbGRpbmcgcGNjdHMgZnJvbSB0aGUgc291cmNlIGNvZGUuDQoNClRoZSBraXQgaXMgbm93IGRpc3RyaWJ1dGVkIHdpdGggYm90aCBNU1ZDIDUgYW5kIE1TVkM2IHN0eWxlIHByb2plY3RzLg0KDQowLiBEb3dubG9hZCBodHRwOi8vd3d3LnBvbGhvZGUuY29tL3dpbjMyLnppcC4NCg0KICAgWW91IG1heSBhbHNvIHdpc2ggdG8gZG93bmxvYWQ6DQoNCiAgICAgICAgaHR0cDovL3d3dy5wb2xob2RlLmNvbS9DSEFOR0VTX0ZST01fMTMzLnR4dA0KICAgICAgICBodHRwOi8vd3d3LnBvbGhvZGUuY29tL0NIQU5HRVNfRlJPTV8xMzNfQkVGT1JFX01SMTMudHh0DQogICAgICAgIGh0dHA6Ly93d3cucG9saG9kZS5jb20vS05PV05fUFJPQkxFTVMudHh0DQoNCjEuIFVuemlwIHRoZSBkaXN0cmlidXRpb24ga2l0IHRvIHlvdXIgcHJlZmVycmVkIGxvY2F0aW9uLg0KDQogICBUaGlzIHdpbGwgY3JlYXRlOg0KDQogICAgICAgICBhIHBjY3RzIGRpcmVjdG9yeSB0cmVlDQogICAgICAgICAgICBwY2N0cy9iaW4vKi5leGUNCiAgICAgICAgICAgIHBjY3RzL2xpYi8qLmxpYg0KICAgICAgICAgICAgcGNjdHMvaC8qDQogICAgICAgICAgICBzb3JjZXJlci9saWIvKg0KICAgICAgICAgICAgc29yY2VyZXIvaC8qDQoNCiAgICAgICAgIGFuIGV4YW1wbGUgZGlyZWN0b3J5IHRyZWUNCiAgICAgICAgICAgIHBjY3RzXGV4YW1wbGVcY2FsY0FTVFwqDQogICAgICAgICAgICBwY2N0c1xleGFtcGxlXHNpbXBsZVwqDQoNCjIuIERlZmluZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUENDVFMgdG8gcG9pbnQgdG8gdGhlIG1haW4NCiAgIHBjY3RzIGRpcmVjdG9yeS4NCg0KMy4gVHJ5IGJ1aWxkaW5nIHRoZSBzaW1wbGUgcHJvamVjdDogcGNjdHNcZXhhbXBsZVxzaW1wbGVcc2ltcGxlNTAuZHN3DQogICBvciBzaW1wbGU2MC5kc3cuDQoNCjQuIFRyeSBidWlsZGluZyB0aGUgY29tcGxleCBwcm9qZWN0OiBwY2N0c1xleGFtcGxlXGNhbGNBU1RcY2FsY0FTVDUwLmRzdw0KICAgb3IgY2FsY0FTVDYwLmRzdy4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAgICAgICAgICAgICAgICAgIElOU1RBTExBVElPTiAoREVDL1ZNUykNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KREVDL1ZNUyBzdXBwb3J0IGFkZGVkIGJ5IFBp6XJvbm5lIEplYW4tRnJhbudvaXMgKGpmcEBhbHRhdmlzdGEubmV0KQ0KDQowLiBEb3dubG9hZCBodHRwOi8vd3d3LnBvbGhvZGUuY29tL3BjY3RzMTMzbXIuemlwDQoNCjEuIFVuemlwIHRoZSBkaXN0cmlidXRpb24ga2l0IHRvIHlvdXIgcHJlZmVycmVkIGxvY2F0aW9uLg0KDQoyLiBzZXQgZGVmYXVsdCB0byB0aGUgbWFpbiBwY2N0cyBkaXJlY3RvcnkuDQoNCjMuIEBtYWtlZmlsZS52bXMNCg0KICAgVGhpcyB3aWxsIGNyZWF0ZSBpbiBkaXJlY3RvcnkgWy5iaW5dOg0KDQogICAgICAgIGFudGxyLmV4ZQ0KICAgICAgICBkbGcuZXhlDQogICAgICAgIHNvcmNlcmVyLmV4ZQ0KICAgICAgICBnZW5tay5leGUNCg0KNS4gVG8gZ2V0IGFuIHVwLXRvLWRhdGUgbGlzdCBvZiBwcm9ncmFtIG9wdGlvbnMgZXhlY3V0ZSB0aGUNCiAgIHByb2dyYW0gd2l0aCBubyBjb21tYW5kIGxpbmUgb3B0aW9ucy4gIFRvIGdldCB1cC10by1kYXRlDQogICBkb2N1bWVudGF0aW9uIHJlYWQgQ0hBTkdFU19GUk9NXzEzMyoudHh0IGFuZCBLTk9XTl9QUk9CTEVNUy50eHQNCiAgIGF0IGh0dHA6Ly93d3cucG9saG9kZS5jb20vcGNjdHMuaHRtbC4NCg==