PD9waHAgIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXJlcXVpcmVfb25jZSgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9lY2xpcHNlLm9yZy1jb21tb24vc3lzdGVtL2FwcC5jbGFzcy5waHAiKTsJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbmF2LmNsYXNzLnBocCIpOyAJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbWVudS5jbGFzcy5waHAiKTsgCSRBcHAgCT0gbmV3IEFwcCgpOwkkTmF2CT0gbmV3IE5hdigpOwkkTWVudSAJPSBuZXcgTWVudSgpOwkJaW5jbHVkZSgkQXBwLT5nZXRQcm9qZWN0Q29tbW9uKCkpOyAgICAjIEFsbCBvbiB0aGUgc2FtZSBsaW5lIHRvIHVuY2x1dHRlciB0aGUgdXNlcidzIGRlc2t0b3AnCgoJIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgkjCgkjIHNhbXBsZV8zY29sLnBocAoJIwoJIyBBdXRob3I6IAkJRGVuaXMgUm95CgkjIERhdGU6CQkJMjAwNS0xMS0wNwoJIwoJIyBEZXNjcmlwdGlvbjogVHlwZSB5b3VyIHBhZ2UgY29tbWVudHMgaGVyZSAtIHRoZXNlIGFyZSBub3Qgc2VudCB0byB0aGUgYnJvd3NlcgoJIwoJIwoJIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCQoJIwoJIyBCZWdpbjogcGFnZS1zcGVjaWZpYyBzZXR0aW5ncy4gIENoYW5nZSB0aGVzZS4gCgkkcGFnZVRpdGxlIAkJPSAiV2hhdCBpcyBFY2xpcHNlIjsKCSRwYWdlS2V5d29yZHMJPSAiVHlwZSwgcGFnZSwga2V5d29yZHMsIGhlcmUiOwoJJHBhZ2VBdXRob3IJCT0gIndiZWF0b24iOwoJCgkjIEFkZCBwYWdlLXNwZWNpZmljIE5hdiBiYXJzIGhlcmUKCSMgRm9ybWF0IGlzIExpbmsgdGV4dCwgbGluayBVUkwgKGNhbiBiZSBodHRwOi8vd3d3LnNvbWVvdGhlcnNpdGUuY29tLyksIHRhcmdldCAoX3NlbGYsIF9ibGFuayksIGxldmVsICgxLCAyIG9yIDMpCgkjICROYXYtPmFkZE5hdlNlcGFyYXRvcigiTXkgUGFnZSBMaW5rcyIsIAkiZG93bmxvYWRzLnBocCIpOwoJIyAkTmF2LT5hZGRDdXN0b21OYXYoIk15IExpbmsiLCAibXlwYWdlLnBocCIsICJfc2VsZiIsIDMpOwoJIyAkTmF2LT5hZGRDdXN0b21OYXYoIkdvb2dsZSIsICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIiwgIl9ibGFuayIsIDMpOwoKCSMgRW5kOiBwYWdlLXNwZWNpZmljIHNldHRpbmdzCgkjCgkJCgkjIFBhc3RlIHlvdXIgSFRNTCBjb250ZW50IGJldHdlZW4gdGhlIEVPSFRNTCBtYXJrZXJzIQkKCSRodG1sID0gPDw8RU9IVE1MCgoJPGRpdiBpZD0ibWlkY29sdW1uIj4KCQk8aDE+JHBhZ2VUaXRsZTwvaDE+CgkJPHA+TWFueSBwZW9wbGUga25vdyBFY2xpcHNlIGFzIGFuIEludGVncmF0ZWQgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgKElERSkgZm9yIEphdmEuCgkJSG93ZXZlciwgRWNsaXBzZSBpcyBmYXIgbW9yZSB0aGFuIGp1c3QgYSBKYXZhIElERS48L3A+CgkJCgkJPGgyPkVjbGlwc2UgaXMgYSBKYXZhIElERS4uLjwvaDI+CgkJPHA+RWNsaXBzZSBpcyB3aWRlbHkgcmVnYXJkZWQgYXMgPGk+dGhlPC9pPiBKYXZhIGRldmVsb3BtZW50IGVudmlyb25tZW50LiBJdCBoYXMKCQlhbGwgdGhlIGJlbGxzIGFuZCB3aGlzdGxlcywgaW5jbHVkaW5nOjwvcD4KCQk8dWw+CgkJCTxsaT5MYW5ndWFnZS1hd2FyZSBlZGl0b3JzLCB2aWV3cywgLi4uPC9saT4KCQkJPGxpPlJlZmFjdG9yaW5nIHN1cHBvcnQ8L2xpPgoJCQk8bGk+SW50ZWdyYXRlZCB1bml0IHRlc3RpbmcgYW5kIGRlYnVnZ2luZzwvbGk+CgkJCTxsaT5JbmNyZW1lbnRhbCBjb21waWxhdGlvbiBhbmQgYnVpbGQ8L2xpPgoJCQk8bGk+VGVhbSBkZXZlbG9wbWVudCBzdXBwb3J0PC9saT4KCQkJPGxpPk91dCBvZiB0aGUgYm94IHN1cHBvcnQgZm9yIENWUzwvbGk+CQoJCTwvdWw+CgkJPGgyPkVjbGlwc2UgaXMgYW4gSURFIEZyYW1ld29yay4uLjwvaDI+CgkJPHVsPgoJCQk8bGk+RWNsaXBzZSArIEphdmEgRGV2ZWxvcG1lbnQgVG9vbHMgKEpEVCkgPSBKYXZhIElERQoJCQkJPHVsPgoJCQkJCTxsaT5GaXJzdCBjbGFzcyBmcmFtZXdvcmsgZm9yIEphdmE8L2xpPgoJCQkJCTxsaT5MYW5ndWFnZSBhd2FyZSBlZGl0b3I8L2xpPgoJCQkJCTxsaT5SZWZhY3RvcmluZywgc2VhcmNoPC9saT4KCQkJCQk8bGk+SW5jcmVtZW50YWwgYnVpbGQ8L2xpPgoJCQkJCTxsaT5JbnRlZ3JhdGVkIGRlYnVnZ2luZzwvbGk+CgkJCQk8L3VsPgoJCQk8L2xpPgoJCQk8bGk+RWNsaXBzZSArIEMvQysrIERldmVsb3BtZW50IFRvb2xzIChDRFQpID0gQy9DKysgSURFCgkJCQk8dWw+CgkJCQkJPGxpPkZpcnN0IGNsYXNzIGZyYW1ld29yayBmb3IgQy9DKys8L2xpPgoJCQkJCTxsaT5MYW5ndWFnZSBhd2FyZSBlZGl0b3I8L2xpPgoJCQkJCTxsaT5SZWZhY3RvcmluZywgc2VhcmNoPC9saT4KCQkJCTwvdWw+CgkJCTwvbGk+CgkJCTxsaT5FY2xpcHNlICsgUEhQID0gUEhQIElERTwvbGk+CgkJCTxsaT5FY2xpcHNlICsgSkRUICsgQ0RUICsgUEhQID0gSmF2YSwgQy9DKyssIFBIUCBJREU8L2xpPgoJCQk8bGk+Li4uPC9saT4KCQk8L3VsPgoJCQoJCTxoMj5FY2xpcHNlIGlzIGEgVG9vbHMgRnJhbWV3b3JrLi4uPC9oMj4KCQk8cD5XaGlsZSBFY2xpcHNlIGlzIGFuIGV4Y2VsbGVudCBwbGF0Zm9ybSBmb3IgYnVpbGRpbmcgaW50ZWdyYXRlZCBkZXZlbG9wbWVudAoJCWVudmlyb25tZW50cywgaXQgaXMgZmFyIG1vcmUgZ2VuZXJhbCB0aGFuIHRoYXQ7IEVjbGlwc2UgaXMgdXNlZCBhcyBhIHBsYXRmb3JtCgkJZm9yIHRvb2xzIHRoYXQgYXJlIG5vdCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBzb2Z0d2FyZSBkZXZlbG9wbWVudC48L3A+CgkJPHA+VGhlIEVjbGlwc2UgcGxhdGZvcm0gcHJvdmlkZXMgZXh0ZW5zaWJpbGl0eSB0aHJvdWdoIEVxdWlub3gsIAoJCWFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBPU0dpIFI0IHNwZWNpZmljYXRpb247IHBsdWctaW5zIG1ha2UgRWNsaXBzZSAKCQl3aGF0ZXZlciB5b3UgbmVlZCBpdCB0byBiZS4gVG9vbHMgZXh0ZW5kIHRoZSBFY2xpcHNlIHBsYXRmb3JtIHVzaW5nIHBsdWctaW5zOjwvcD4KCQk8dWw+CgkJCTxsaT5CdXNpbmVzcyBJbnRlbGxpZ2VuY2UgYW5kIFJlcG9ydGluZyBUb29scyAoQklSVCk8L2xpPgoJCQk8bGk+RGF0YSBUb29scyBQbGF0Zm9ybSAoPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9kYXRhdG9vbHMvIj5EVFA8L2E+KTwvbGk+CgkJCTxsaT5UZXN0IGFuZCBQZXJmb3JtYW5jZSBUb29saW5nIFByb2plY3QgKFRQVFApPC9saT4KCQkJPGxpPldlYiBUb29scyBQcm9qZWN0IChXVFApPC9saT4KCQk8L3VsPgoJCTxwPk51bWVyb3VzIGZyYW1ld29ya3MgYXJlIHByb3ZpZGVkIGJ5IEVjbGlwc2UgcHJvamVjdHMgZm9yIGJ1aWxkaW5nIHRvb2xzLCAKCQlpbmNsdWRpbmc6PC9wPgoJCTx1bD4KCQkJPGxpPkVjbGlwc2UgQ29tbXVuaWNhdGlvbnMgRnJhbWV3b3JrICg8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VjZi8iPkVDRjwvYT4pPC9saT4KCQkJPGxpPkdyYXBoaWNhbCBFZGl0aW5nIEZyYW1ld29yayAoPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9nZWYvIj5HRUY8L2E+KTwvbGk+CgkJCTxsaT5FY2xpcHNlIE1vZGVsaW5nIEZyYW1ld29yayAoPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvIj5FTUY8L2E+KTwvbGk+CgkJCTxsaT5HcmFwaGljYWwgTW9kZWxpbmcgRnJhbWV3b3JrICg8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2dtZi8iPkdNRjwvYT4pPC9saT4KCQk8L3VsPgoKCQk8aDI+RWNsaXBzZSBpcyBhIEFwcGxpY2F0aW9uIEZyYW1ld29yay4uLjwvaDI+CgkJPHA+PGltZyBzcmM9ImltYWdlcy9yY3AucG5nIiBhbGlnbj0icmlnaHQiLz5JZiB5b3UgZXhjbHVkZSB0aGUgdGhlIAoJCXBsdWctaW5zIHRoYXQgbWFrZSBFY2xpcHNlIGFuIElERSwgaW5jbHVkaW5nIEphdmEgbGFuZ3VhZ2Ugc3VwcG9ydCwgCgkJZGVidWdnaW5nIGFuZCB0ZWFtIGRldmVsb3BtZW50IHN1cHBvcnQsIHlvdZJyZSBsZWZ0IHdpdGggYSBjb21wcmVoZW5zaXZlIAoJCWdlbmVyYWwgYXBwbGljYXRpb24gZnJhbWV3b3JrIHRoYXQgc3VwcG9ydHMgYSByaWNoIHVzZXIgZXhwZXJpZW5jZS4gVGhlCgkJRWNsaXBzZSBSaWNoIENsaWVudCBQbGF0Zm9ybSAoUkNQKSBpcyBiZWluZyB1c2VkIHRvZGF5IGJ5IG1hbnkKCQlvcGVuIHNvdXJjZSBhbmQgY29tbWVyY2lhbCBwcm9kdWN0cyB0byBwcm92aWRlIHJvYnVzdCwgc2NhbGFibGUsIGVudGVycHJpc2UtcmVhZHkKCQlhcHBsaWNhdGlvbnMuPC9wPgoJCTx1bD4KCQkJPGxpPlN1cHBvcnQgZm9yIG11bHRpcGxlIHBsYXRmb3JtczogTGludXgsIFdpbmRvd3MsIE1hYyBPU1gsIFVOSVgsIGVtYmVkZGVkPC9saT4KCQkJPGxpPlJpY2ggd2lkZ2V0IHNldCwgZ3JhcGhpY3M8L2xpPgoJCQk8bGk+TmF0aXZlLU9TIGludGVncmF0aW9uIChkcmFnIGFuZCBkcm9wLCBPTEUvWFBDT00gaW50ZWdyYXRpb24pPC9saT4KCQkJPGxpPkEgcGxhdGZvcm0gZm9yIHJpY2ggY2xpZW50czwvbGk+CgkJPC91bD4KCgkJPGgyPkVjbGlwc2UgaXMgYW4gT3BlbiBTb3VyY2UgUHJvamVjdC4uLjwvaDI+CgkJPHA+VGhlICJFY2xpcHNlIiBwcm9qZWN0LS1yZXNwb25zaWJsZSBmb3IgdGhlIEVjbGlwc2UgU0RLLS1pcyBqdXN0IG9uZSBvZiBtYW55CgkJcHJvamVjdHMuIEVjbGlwc2UgcHJvamVjdHMgYXJlIG1hbmFnZWQsIGhhdmUgc2NoZWR1bGVzIGFuZCBwbGFucywgYW5kIHNoaXAKCQlyZWFsIHNvZnR3YXJlLiBUaGUgZm9jdXMgb2YgRWNsaXBzZSBwcm9qZWN0cyBpcyB0byBjcmVhdGUgZ2VuZXJhbGx5IHVzZWZ1bAoJCWZyYW1ld29ya3MgYW5kIEFQSXMsIGFsb25nIHdpdGggZXhlbXBsYXJ5IHByb2plY3RzLjwvcD4KCQk8cD5UaGVyZSBhcmUgbmluZSAoOSkgdG9wIGxldmVsIHByb2plY3RzOjwvcD4KCQk8dWw+CgkJCTxsaT5FY2xpcHNlIFByb2plY3Q8L2xpPgoJCQk8bGk+VG9vbHM8L2xpPgoJCQk8bGk+V2ViIFRvb2xzIFBsYXRmb3JtPC9saT4KCQkJPGxpPlRlc3QgJiBQZXJmb3JtYW5jZSBUb29scyBQbGF0Zm9ybTwvbGk+CgkJCTxsaT5CdXNpbmVzcyBJbnRlbGxpZ2VuY2UgYW5kIFJlcG9ydGluZyBUb29sczwvbGk+CgkJCTxsaT5EYXRhIFRvb2xzIFBsYXRmb3JtPC9saT4KCQkJPGxpPkRldmljZSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBQbGF0Zm9ybSA8L2xpPgoJCQk8bGk+U09BIFRvb2xzIFBsYXRmb3JtPC9saT4KCQkJPGxpPlRlY2hub2xvZ3kgKEluY3ViYXRvcnMpPC9saT4KCQk8L3VsPgoJCTxwPkluIGFkZGl0aW9uIHRvIHRoZSB0b3AgbGV2ZWwgcHJvamVjdHMsIHRoZXJlIGFyZSBkb3plbnMgb2Ygc3ViIHByb2plY3RzLjwvcD4KCgkJPGgyPkVjbGlwc2UgaXMgYSBDb21tdW5pdHkuLi48L2gyPgoJCTxwPkFsbCBFY2xpcHNlIHByb2plY3RzIGFyZSBhdmFpbGFibGUgZm9yIGZyZWUgZG93bmxvYWQuIE5vIHJlZ2lzdHJhdGlvbgoJCWlzIHJlcXVpcmVkOyBkb3dubG9hZHMgYXJlIG5vdCB0cmFja2VkIGFuZCB0aGVyZSBhcmUgbm8gc2FsZXMgY2FsbHMuCgkJQSBsYXJnZSBwcm9wb3J0aW9uIG9mIHRoZSBjb21tdW5pdHkgYXJlIEVjbGlwc2UgdXNlcnM6IHBlb3BsZSB3aG8gdXNlCgkJRWNsaXBzZSBldmVyeSBkYXkgdG8gZ2V0IHRoZWlyIGpvYiBkb25lLjwvcD4KCQk8cD5FY2xpcHNlIGNvbnRyaWJ1dG9ycyBudW1iZXIgaW4gdGhlIGh1bmRyZWRzLiBUaGVyZSBhcmUgbWFueSBkaWZmZXJlbnQKCQlraW5kcyBvZiBjb250cmlidXRpb25zOiBidWcgcmVwb3J0cywgZmVhdHVyZSByZXF1ZXN0cywgcGF0Y2hlcywgY29kZSwgYW5kCgkJZGVzaWduLiBBIHNtYWxsZXIgbnVtYmVyIG9mIGNvbW1pdHRlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBkZWNpZGluZyAoYW5kIGFjdGlvbmluZykgCgkJd2hhdCBjb250cmlidXRpb25zIHdpbGwgYmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBwcm9qZWN0J3MgY29kZSBiYXNlLjwvcD4KCQk8cD5IdW5kcmVkcyBvZiBwbHVnLWlucyBhcmUgcHJvdmlkZWQgYnkgY29tbWVyY2lhbCBjb21wYW5pZXMsIG9yZ2FuaXphdGlvbnMsIAoJCWFuZCBpbmRpdmlkdWFscy48L3A+CgkJPHA+VGhlcmUgYXJlIG51bWVyb3VzIGNvbW11bml0eS1zdXBwb3J0ZWQgc291cmNlcyBvZiBpbmZvcm1hdGlvbiBhYm91dCBFY2xpcHNlOjwvcD4KCQk8dWw+CgkJCTxsaT5QbGFuZXQgRWNsaXBzZSAod3d3LnBsYW5ldGVjbGlwc2Uub3JnKTwvbGk+CgkJCTxsaT5FY2xpcHNlWm9uZSAoaHR0cDovL2VjbGlwc2V6b25lLmNvbSk8L2xpPgoJCQk8bGk+RWNsaXBzZVdpa2kgKGh0dHA6Ly9lY2xpcHNld2lraS5lZGl0bWUuY29tKTwvbGk+CgkJCTxsaT5FY2xpcHNlIFBsdWctaW4gQ2VudHJhbCAoaHR0cDovL2VjbGlwc2VwbHVnaW5jZW50cmFsLmNvbSk8L2xpPgoJCQk8bGk+T3RoZXJzIChodHRwOi8vZWNsaXBzZS5vcmcvY29tbXVuaXR5KTwvbGk+CgkJPC91bD4KCQk8cD41MCBtaWxsaW9uIGRvd25sb2FkIHJlcXVlc3RzIHRvIGRhdGUuPC9wPgoJCQoJCTxoMj5FY2xpcHNlIGlzIGFuIEVjby1TeXN0ZW0uLi48L2gyPgoJCTxwPlRoZSBFY2xpcHNlIEVjby1zeXN0ZW0gaXMgY29tcG9zZWQgb2YgbW9yZSB0aGFuIDE0MCBtZW1iZXIgY29tcGFuaWVzLCAKCQlpbmNsdWRpbmcgbWFqb3IgSmF2YSwgTGludXggYW5kIEVtYmVkZGVkIHZlbmRvcnMgbGlrZSBCRUEsIEJvcmxhbmQsIAoJCUpCb3NzLCBJQk0sIFNBUCwgUmVkSGF0LCBOb3ZlbGwsIFdpbmQgUml2ZXIsIE1lbnRvciwgRU5FQSwgCgkJYW5kIFFOWC4gVGhlc2UgbWVtYmVyIGNvbXBhbmllcyBjb250cmlidXRlIGRldmVsb3BlcnMgYW5kIHJlc291cmNlcyB0bwoJCUVjbGlwc2UgcHJvamVjdHMgYW5kIHRoZW4gdXNlIHRoZSBvdXRwdXQgb2YgdGhvc2UgcHJvamVjdHMgZm9yIHRoZWlyCgkJY29tbWVyY2lhbCBzb2Z0d2FyZSBvZmZlcmluZ3MuPC9wPgoJCTxwPkVjbGlwc2UgaXMgZm9jdXNlZCBvbiBudXJ0dXJpbmcgdGhlIGVjby1zeXN0ZW0gdG8gY29tcGxlbWVudCwgYW5kIAoJCWVuaGFuY2UgdGhlIEVjbGlwc2UgUGxhdGZvcm0uPC9wPgoKCQk8aDI+RWNsaXBzZSBpcyBhIEZvdW5kYXRpb24uLi48L2gyPgoJCTxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gd2FzIGNyZWF0ZWQgdG8gbWFuYWdlIGFuZCBkaXJlY3QgdGhlIG9uZ29pbmcgCgkJZGV2ZWxvcG1lbnQgb2YgdGhlIEVjbGlwc2Ugb3BlbiBzb3VyY2Ugc29mdHdhcmUgcHJvamVjdC4gSXQgaXMgCgkJcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyBJVCBpbmZyYXN0cnVjdHVyZSByZXF1aXJlZCBieSBkZXZlbG9wbWVudCB0ZWFtcy4KCQlUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGFuIGluZGVwZW5kZW50IG5vdC1mb3ItcHJvZml0IEZvdW5kYXRpb24gZm9ybWVkIGluIDIwMDQuPC9wPgoKCQk8aDI+RWNsaXBzZSBpcyBhbGwgdGhlc2UgdGhpbmdzLi4uPC9oMj4KCQk8dWw+CgkJCTxsaT5BIEphdmEgSURFPC9saT4KCQkJPGxpPkFuIElERSBGcmFtZXdvcms8L2xpPgoJCQk8bGk+QSBUb29scyBGcmFtZXdvcms8L2xpPgoJCQk8bGk+QW4gQXBwbGljYXRpb24gRnJhbWV3b3JrPC9saT4KCQkJPGxpPkFuIE9wZW4gU291cmNlIEVuYWJsZXI8L2xpPgoJCQk8bGk+QSBjb21tdW5pdHk8L2xpPgoJCQk8bGk+QW4gZWNvLXN5c3RlbTwvbGk+CgkJCTxsaT5BIGZvdW5kYXRpb248L2xpPgoJCTwvdWw+CgkJCgk8L2Rpdj4KCkVPSFRNTDsKCgoJIyBHZW5lcmF0ZSB0aGUgd2ViIHBhZ2UKCSRBcHAtPmdlbmVyYXRlUGFnZSgkdGhlbWUsICRNZW51LCAkTmF2LCAkcGFnZUF1dGhvciwgJHBhZ2VLZXl3b3JkcywgJHBhZ2VUaXRsZSwgJGh0bWwpOwo/Pgo=