ICA8Y2hhcHRlciBpZD0iY29uZmlndXJpbmciPgogICAgPHRpdGxlPkNvbmZpZ3VyaW5nIFdpbmU8L3RpdGxlPgogICAgPHBhcmE+U2V0dGluZyB1cCBjb25maWcgZmlsZXMsIGV0Yy48L3BhcmE+CgogICAgPHNlY3QxIGlkPSJjb25maWciPgogICAgICA8dGl0bGU+R2VuZXJhbCBDb25maWd1cmF0aW9uPC90aXRsZT4KICAgICAgPHBhcmE+CiAgICAgICAgQ29weXJpZ2h0IDE5OTkgJm5hbWUtYWRhbS1zYWNhcm55OyA8ZW1haWw+JmVtYWlsLWFkYW0tc2FjYXJueTs8L2VtYWlsPgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIChFeHRyYWN0ZWQgZnJvbSA8ZmlsZW5hbWU+d2luZS9kb2N1bWVudGF0aW9uL2NvbmZpZzwvZmlsZW5hbWU+KQogICAgICA8L3BhcmE+CgogICAgICA8c2VjdDI+CiAgICAgICAgPHRpdGxlPlRoZSBXaW5lIENvbmZpZyBGaWxlPC90aXRsZT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIFRoZSBXaW5lIGNvbmZpZyBmaWxlIHN0b3JlcyB2YXJpb3VzIHNldHRpbmdzIGZvciBXaW5lLiBUaGVzZSBpbmNsdWRlOgogICAgICAgICAgPGl0ZW1pemVkbGlzdD4KICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgRHJpdmVzIGFuZCBJbmZvcm1hdGlvbiBhYm91dCB0aGVtCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBEaXJlY3RvcnkgU2V0dGluZ3MKICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIFBvcnQgU2V0dGluZ3MKICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIFRoZSBXaW5lIGxvb2sgYW5kIGZlZWwKICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIFdpbmUncyBETEwgVXNhZ2UKICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIFdpbmUncyBNdWx0aW1lZGlhIGRyaXZlcnMgYW5kIERMTCBjb25maWd1cmF0aW9uCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICAgPC9wYXJhPgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyPgogICAgICAgIDx0aXRsZT5Ib3cgRG8gSSBNYWtlIE9uZT88L3RpdGxlPgogICAgICAgIDxwYXJhPgogICAgICAgICAgVGhpcyBzZWN0aW9uIHdpbGwgZ3VpZGUgeW91IHRocm91Z2ggdGhlIHByb2Nlc3Mgb2YgbWFraW5nIGEKICAgICAgICAgIGNvbmZpZyBmaWxlLiBUYWtlIGEgbG9vayBhdCB0aGUgZmlsZSA8ZmlsZW5hbWU+Jmx0O2RpcnMgdG8KICAgICAgICAgIHdpbmU+L2RvY3VtZW50YXRpb24vc2FtcGxlcy9jb25maWc8L2ZpbGVuYW1lPi4gSXQgaXMgb3JnYW5pemVkIGJ5IHNlY3Rpb24uCiAgICAgICAgPC9wYXJhPgoKICAgICAgICA8aW5mb3JtYWx0YWJsZSBmcmFtZT0iYWxsIj4KICAgICAgICAgIDx0Z3JvdXAgY29scz0iMyI+CiAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PlNlY3Rpb24gTmFtZTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+TmVlZGVkPzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+V2hhdCBpdCBEb2VzPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgPHRib2R5PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W0RyaXZlIFhdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT55ZXM8L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PlNldHMgdXAgZHJpdmVzIHJlY29nbml6ZWQgYnkgd2luZTwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bd2luZV08L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PnllczwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+U2V0dGluZ3MgZm9yIHdpbmUgZGlyZWN0b3JpZXM8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W0RsbERlZmF1bHRzXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+cmVjbWQ8L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PkRlZmF1bHRzIGZvciBsb2FkaW5nIERMTCdzPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PltEbGxQYWlyc108L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PnJlY21kPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5TYW5pdHkgY2hlY2tlcnMgZm9yIERMTCdzPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PltEbGxPdmVycmlkZXNdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5yZWNtZDwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+T3ZlcmlkZXMgZGVmYXVsdHMgZm9yIERMTCBsb2FkaW5nPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5Plt4MTFkcnZdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5yZWNtZDwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+R3JhcGhpYyBkcml2ZXIgc2V0dGluZ3M8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W2ZvbnRzXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+eWVzPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5Gb250IGFwcGVhcmFuY2UgYW5kIHJlY29nbml0aW9uPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PltzZXJpYWxwb3J0c108L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5Pm5vPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5DT00gcG9ydHMgc2VlbiBieSB3aW5lPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PltwYXJhbGxlbHBvcnRzXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PkxQVCBwb3J0cyBzZWVuIGJ5IHdpbmU8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W3BwZGV2XTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PlBhcmFsbGVscG9ydCBlbXVsYXRpb248L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W3Nwb29sZXJdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5ubzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+UHJpbnQgc3Bvb2xpbmc8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W3BvcnRzXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PkRpcmVjdCBwb3J0IGFjY2VzczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bc3B5XTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PldoYXQgdG8gZG8gd2l0aCBjZXJ0YWluIGRlYnVnIG1lc3NhZ2VzPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PltSZWdpc3RyeV08L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5Pm5vPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5TcGVjaWZpZXMgbG9jYXRpb25zIG9mIHdpbmRvd3MgcmVnaXN0cnkgZmlsZXM8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W3R3ZWFrLmxheW91dF08L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PnJlY21kPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5BcHBlYXJhbmNlIG9mIHdpbmU8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W3Byb2dyYW1zXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PlByb2dyYW1zIHRvIGJlIHJ1biBhdXRvbWF0aWNhbGx5PC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PltDb25zb2xlXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PkNvbnNvbGUgc2V0dGluZ3M8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W0NsaXBib2FyZF08L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5Pm5vPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5JbnRlcmFjdGlvbiBmb3Igd2luZSBhbmQgWDExIGNsaXBib2FyZDwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bYWZtZGlyc108L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5Pm5vPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5Qb3N0c2NyaXB0IGRyaXZlciBzZXR0aW5nczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bV2luTU1dPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT55ZXM8L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5Pk11bHRpbWVkaWEgc2V0dGluZ3M8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W0FwcERlZmF1bHRzXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5Pk92ZXJ3cml0ZSB0aGUgc2V0dGluZ3Mgb2YgcHJldmlvdXMgc2VjdGlvbnMgZm9yIHNwZWNpYWwgcHJvZ3JhbXM8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgPC90Z3JvdXA+CiAgICAgICAgPC9pbmZvcm1hbHRhYmxlPgoKICAgICAgICA8c2VjdDM+CiAgICAgICAgICA8dGl0bGU+VGhlIFtEcml2ZSBYXSBTZWN0aW9uPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgoJICAgIFRoZXNlIHNlY3Rpb25zIGFyZSBzdXBwb3NlZCB0byBtYWtlIGNlcnRhaW4gVW5peAoJICAgIGRpcmVjdG9yeSBsb2NhdGlvbnMgYWNjZXNzaWJsZSB0byBXaW5lIGFzIGEgRE9TL1dpbmRvd3MgZHJpdmUKCSAgICAoZHJpdmUgJ1g6JykgYW5kIHRodXMgYWNjZXNzaWJsZSB0byBXaW5kb3dzIHByb2dyYW1zCgkgICAgdW5kZXIgdGhlIGRyaXZlIG5hbWUgeW91IHNwZWNpZmllZC4KCSAgICBFdmVyeSBET1MvV2luZG93cyBwcm9ncmFtIHNvcnQgb2YgZXhwZWN0cyBhdCBsZWFzdCBhIEM6IGRyaXZlIChhbmQKCSAgICBzb21ldGltZXMgYWxzbyBhbiBBOiBmbG9wcHkgZHJpdmUpLCBzbyB5b3VyIGNvbmZpZyBmaWxlIHNob3VsZAoJICAgIGF0IGxlYXN0IGNvbnRhaW4gdGhlIGNvcnJlc3BvbmRpbmcgc2VjdGlvbnMsIFtEcml2ZSBDXSBhbmQKCSAgICBbRHJpdmUgQV0uCgkgICAgWW91IG5lZWQgdG8gZGVjaWRlIG9uIHdoZXRoZXIgeW91IHdhbnQgdG8gdXNlIGFuIGV4aXN0aW5nIFdpbmRvd3MKCSAgICBwYXJ0aXRpb24gYXMgdGhlIEMgZHJpdmUgb3Igd2hldGhlciB5b3Ugd2FudCB0byBjcmVhdGUgeW91ciBvd24KCSAgICBXaW5lIGRyaXZlIEMgZGlyZWN0b3J5IHRyZWUgc29tZXdoZXJlICh0YWtlIGNhcmUgYWJvdXQKCSAgICBwZXJtaXNzaW9ucyAhKS4KICAgICAgICAgICAgRWFjaCBkcml2ZSBzZWN0aW9uIG1heSBzcGVjaWZ5IHVwIHRvIDYgZGlmZmVyZW50IHNldHRpbmdzCgkgICAgYXMgZXhwbGFpbmVkIGJlbG93LgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz5bRHJpdmUgWF08L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBUaGUgYWJvdmUgbGluZSBiZWdpbnMgdGhlIHNlY3Rpb24gZm9yIGEgZHJpdmUgd2hvc2UgbGV0dGVyIGlzIFgKCSAgICAoRE9TIG5vdGF0aW9uOiBkcml2ZSAnWDonKS4KCSAgICBZb3UgY291bGQgZS5nLiBjcmVhdGUgYW4gZXF1aXZhbGVudCB0byBhIGRyaXZlICdDOicKCSAgICB1bmRlciBET1MvV2luZG93cyBieSB1c2luZyBhIFtEcml2ZSBDXSBzZWN0aW9uIG5hbWUuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJQYXRoIiA9ICIvZGlyL3RvL3BhdGgiPC9wcm9ncmFtbGlzdGluZz4KCSAgICBUaGlzIHNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBkcml2ZSB3aWxsIGJlZ2luLgoJICAgIFdoZW4gV2luZSBpcyBicm93c2luZyBpbiBkcml2ZSBYLCBpdCB3aWxsIGJlIGFibGUKCSAgICB0byBzZWUgdGhlIGZpbGVzIHRoYXQgYXJlIGluIHRoZSBkaXJlY3RvcnkKCSAgICA8ZmlsZW5hbWU+L2Rpci90by9wYXRoPC9maWxlbmFtZT4gYW5kIGJlbG93LgoJICAgIChub3RlIHRoYXQgc3ltbGlua3MgdG8gZGlyZWN0b3JpZXMgd29uJ3QgZ2V0IGluY2x1ZGVkICEKCSAgICBzZWUgIjxsaW5rIGxpbmtlbmQ9ImRpcnN5bWxpbmtzIj5TaG93RGlyU3ltbGlua3M8L2xpbms+IgoJICAgIGNvbmZpZyBzZXR0aW5nKQoJICAgIFlvdSBjYW4gYWxzbyBtYWtlIHVzZSBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbGlrZSAkSE9NRSBoZXJlLAoJICAgIGFuIGV4YW1wbGUgZm9yIHVzaW5nIGEgbXl3aW5lZHJpdmUgZGlyZWN0b3J5IGluIHlvdXIgaG9tZSBkaXIKCSAgICB3b3VsZCBiZQoJICAgICJQYXRoIiA9ICIke0hPTUV9L215d2luZWRyaXZlIgoJICAgIERvbid0IGZvcmdldCB0byBsZWF2ZSBvZmYgdGhlIHRyYWlsaW5nIHNsYXNoIQogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iVHlwZSIgPSAiaGR8Y2Ryb218bmV0d29ya3xmbG9wcHkiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgU2V0cyB1cCB0aGUgdHlwZSBvZiBkcml2ZSBXaW5lIHdpbGwgc2VlIGl0IGFzLiBUeXBlIG11c3QKICAgICAgICAgICAgZXF1YWwgb25lIG9mIHRoZSBmb3VyIDxsaXRlcmFsPmZsb3BweTwvbGl0ZXJhbD4sCiAgICAgICAgICAgIDxsaXRlcmFsPmhkPC9saXRlcmFsPiwgPGxpdGVyYWw+Y2Ryb208L2xpdGVyYWw+LCBvcgogICAgICAgICAgICA8bGl0ZXJhbD5uZXR3b3JrPC9saXRlcmFsPi4gVGhleSBhcmUgc2VsZi1leHBsYW5hdG9yeS4KICAgICAgICAgICAgKFRoZSB8J3MgbWVhbiAiVHlwZSA9ICcmbHQ7b25lIG9mIHRoZSBvcHRpb25zJmd0OyciLikKCSAgICBVc3VhbGx5LCB5b3UgY2hvb3NlICJoZCIgZm9yIGEgZHJpdmUgKCJoZCIgaXMgZGVmYXVsdCBhbnl3YXkpLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iTGFiZWwiID0gImJsYWgiPC9wcm9ncmFtbGlzdGluZz4KCSAgICBEZWZpbmVzIHRoZSBkcml2ZSBsYWJlbC4gR2VuZXJhbGx5IG9ubHkgbmVlZGVkCgkgICAgZm9yIHByb2dyYW1zIHRoYXQgbG9vayBmb3IgYSBzcGVjaWFsIENELVJPTS4KICAgICAgICAgICAgVGhlIGxhYmVsIG1heSBiZSB1cCB0byAxMSBjaGFyYWN0ZXJzLgoJICAgIE5vdGUgdGhhdCB0aGUgcHJlZmVycmVkIHdheSBvZiBtYW5hZ2luZyBsYWJlbHMgYW5kIHNlcmlhbCBudW1iZXJzCgkgICAgb2YgQ0QtUk9NcyBhbmQgZmxvcHBpZXMgaXMgdG8gZ2l2ZSBXaW5lIHJhdyBkZXZpY2UgYWNjZXNzIGZvcgoJICAgIHJlYWRpbmcgdGhlc2Ugb24gYSBwZXItQ0QgY2FzZSAoc2VlICJEZXZpY2UiIGJlbG93KSBpbnN0ZWFkIG9mCgkgICAgaGFyZGNvZGluZyBvbmUgc3BlY2lmaWMgIkxhYmVsIi4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlNlcmlhbCIgPSAiZGVhZGJlZWYiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgVGVsbHMgV2luZSB0aGUgc2VyaWFsIG51bWJlciBvZiB0aGUgZHJpdmUuIEEgZmV3IHByb2dyYW1zIHdpdGgKICAgICAgICAgICAgaW50ZW5zZSBwcm90ZWN0aW9uIGZvciBwaXJhdGluZyBtaWdodCBuZWVkIHRoaXMsIGJ1dCBvdGhlcndpc2UKICAgICAgICAgICAgaXQncyBub3QgbmVlZGVkLiBVcCB0byA4IGNoYXJhY3RlcnMgYW5kIGhleGFkZWNpbWFsLgoJICAgIFVzaW5nIGEgIkRldmljZSIgZW50cnkgaW5zdGVhZCBvZiBoYXJkY29kaW5nIHRoZSAiU2VyaWFsIiBwcm9iYWJseQoJICAgIGlzIGEgc21hcnRlciBjaG9pY2UuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJGaWxlc3lzdGVtIiA9ICJ3aW45NXx1bml4fG1zZG9zIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFNldHMgdXAgdGhlIHdheSBXaW5lIGxvb2tzIGF0IGZpbGVzIG9uIHRoZSBkcml2ZS4KICAgICAgICAgIDwvcGFyYT4KCiAgICAgICAgICA8dmFyaWFibGVsaXN0PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPndpbjk1PC9saXRlcmFsPjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgQ2FzZSBpbnNlbnNpdGl2ZS4gQWxpa2UgdG8gV2luZG93cyA5eC9OVCA0LiBUaGlzIGlzCiAgICAgICAgICAgICAgICAgIHRoZSBsb25nIGZpbGVuYW1lIGZpbGVzeXN0ZW0geW91IGFyZSBwcm9iYWJseSB1c2VkCiAgICAgICAgICAgICAgICAgIHRvIHdvcmtpbmcgd2l0aC4gVGhlIGZpbGVzeXN0ZW0gb2YgY2hvaWNlIGZvciBtb3N0CiAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9ucyB0byBiZSBydW4gdW5kZXIgd2luZS4gIFBST0JBQkxZIFRIRSBPTkUKICAgICAgICAgICAgICAgICAgWU9VIFdBTlQhCiAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+PGxpdGVyYWw+dW5peDwvbGl0ZXJhbD48L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgIENhc2Ugc2Vuc2l0aXZlLiBUaGlzIGZpbGVzeXN0ZW0gaGFzIGFsbW9zdCBubyB1c2UKICAgICAgICAgICAgICAgICAgKFdpbmRvd3MgYXBwcyBleHBlY3QgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlbmFtZXMpLgogICAgICAgICAgICAgICAgICBUcnkgaXQgaWYgeW91IGRhcmUsIGJ1dCB3aW45NSBpcyBhICBtdWNoIGJldHRlcgogICAgICAgICAgICAgICAgICBjaG9pY2UuCiAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+PGxpdGVyYWw+bXNkb3M8L2xpdGVyYWw+PC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgICBDYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0uIEFsaWtlIHRvIERPUyBhbmQKICAgICAgICAgICAgICAgICAgV2luZG93cyAzLnguIDxsaXRlcmFsPjguMzwvbGl0ZXJhbD4gaXMgdGhlIG1heGltdW0KICAgICAgICAgICAgICAgICAgbGVuZ3RoIG9mIGZpbGVzIChlaWdodGRvdC4xMjMpIC0gbG9uZ2VyIG9uZXMgd2lsbCBiZQogICAgICAgICAgICAgICAgICB0cnVuY2F0ZWQuIChOT1RFOiB0aGlzIGlzIGEgdmVyeSBiYWQgY2hvaWNlIGlmIHlvdQogICAgICAgICAgICAgICAgICBwbGFuIG9uIHJ1bm5pbmcgYXBwcyB0aGF0IHVzZSBsb25nIGZpbGVuYW1lcy4gd2luOTUKICAgICAgICAgICAgICAgICAgc2hvdWxkIHdvcmsgZmluZSB3aXRoIGFwcHMgdGhhdCB3ZXJlIGRlc2lnbmVkIHRvIHJ1bgogICAgICAgICAgICAgICAgICB1bmRlciB0aGUgbXNkb3Mgc3lzdGVtLiBJbiBvdGhlciB3b3JkcywgeW91IG1pZ2h0CiAgICAgICAgICAgICAgICAgIG5vdCB3YW50IHRvIHVzZSB0aGlzLikKICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgIDwvdmFyaWFibGVsaXN0PgoKICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iRGV2aWNlIiA9ICIvZGV2L3h4IjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8cGFyYT4KCSAgICBOZWVkZWQgZm9yIHJhdyBkZXZpY2UgYWNjZXNzIGFuZCBsYWJlbCBhbmQgc2VyaWFsIG51bWJlciByZWFkaW5nLgogICAgICAgICAgICBVc2UgdGhpcyBPTkxZIGZvciBmbG9wcHkgYW5kIGNkcm9tIGRldmljZXMuIFVzaW5nIGl0IG9uCiAgICAgICAgICAgIEV4dGVuZGVkMiBvciBvdGhlciBVbml4IGZpbGUgc3lzdGVtcyBjYW4gaGF2ZSBkaXJlIHJlc3VsdHMKCSAgICAod2hlbiBhIHdpbmRvd3MgYXBwIHRyaWVzIHRvIGRvIGEgbG93bGV2ZWwgd3JpdGUsCgkgICAgdGhleSBkbyBpdCBpbiBhIEZBVCB3YXkgLS0gRkFUIGZvcm1hdCBpcyBjb21wbGV0ZWx5IGRpZmZlcmVudCBmcm9tCgkgICAgYW55IFVuaXggZmlsZSBzeXN0ZW0pLgoJICAgIEFsc28sIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHByb3BlciBwZXJtaXNzaW9ucyB0byB0aGlzIGRldmljZQoJICAgIGZpbGUuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8bm90ZT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgVGhpcyBzZXR0aW5nIGlzIG5vdCByZWFsbHkgaW1wb3J0YW50OyBhbG1vc3QgYWxsIGFwcHMKICAgICAgICAgICAgICB3aWxsIGhhdmUgbm8gcHJvYmxlbSBpZiBpdCByZW1haW5zIHVuc3BlY2lmaWVkLiBGb3IKICAgICAgICAgICAgICBDRC1ST01zIGl0J3MgcXVpdGUgdXNlZnVsIGluIG9yZGVyIHRvIGdldCBhdXRvbWF0aWMgbGFiZWwKICAgICAgICAgICAgICBkZXRlY3Rpb24sIHRob3VnaC4gSWYgeW91IGFyZSB1bnN1cmUgYWJvdXQgc3BlY2lmeWluZwogICAgICAgICAgICAgIGRldmljZSBuYW1lcywganVzdCBsZWF2ZSBvdXQgdGhpcyBzZXR0aW5nIGZvciB5b3VyCiAgICAgICAgICAgICAgZHJpdmVzLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L25vdGU+CiAgICAgICAgICA8cGFyYT4KCSAgICBIZXJlIGFyZSBhIGZldyBzYW1wbGUgZW50cmllczoKICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgpIZXJlIGlzIGEgc2V0dXAgZm9yIERyaXZlIEMsIGEgZ2VuZXJpYyBoYXJkIGRyaXZlOgpbRHJpdmUgQ10KIlBhdGgiID0gIi9kb3NjIgoiVHlwZSIgPSAiaGQiCiJMYWJlbCIgPSAiSGFyZCBEcml2ZSIKIkZpbGVzeXN0ZW0iID0gIndpbjk1IgpUaGlzIGlzIGEgc2V0dXAgZm9yIERyaXZlIEUsIGEgZ2VuZXJpYyBDRC1ST00gZHJpdmU6CltEcml2ZSBFXQoiUGF0aCIgPSAiL21udC9jZHJvbSIKIlR5cGUiID0gImNkcm9tIgoiTGFiZWwiID0gIlRvdGFsIEFubmloaWxhdGlvbiIKIkZpbGVzeXN0ZW0iID0gIndpbjk1IgoiRGV2aWNlIiA9ICIvZGV2L2Nkcm9tIgpBbmQgaGVyZSBpcyBhIHNldHVwIGZvciBEcml2ZSBBLCBhIGdlbmVyaWMgZmxvcHB5IGRyaXZlOgpbRHJpdmUgQV0KIlR5cGUiID0gImZsb3BweSIKIlBhdGgiID0gIi9tbnQvZmxvcHB5IgoiTGFiZWwiID0gIkZsb3BweSBEcml2ZSIKIlNlcmlhbCIgPSAiODc2NTQzMjEiCiJGaWxlc3lzdGVtIiA9ICJ3aW45NSIKIkRldmljZSIgPSAiL2Rldi9mZDAiCiAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9zZWN0Mz4KCiAgICAgICAgPHNlY3QzPgogICAgICAgICAgPHRpdGxlPlRoZSBbd2luZV0gU2VjdGlvbiA8L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoZSBbd2luZV0gc2VjdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGNvbnRhaW5zIGFsbCBraW5kcwogICAgICAgICAgICBvZiBnZW5lcmFsIHNldHRpbmdzIGZvciBXaW5lLgoJICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJXaW5kb3dzIiA9ICJjOlxcd2luZG93cyI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBUaGlzIHRlbGxzIFdpbmUgYW5kIFdpbmRvd3MgcHJvZ3JhbXMgd2hlcmUgdGhlCiAgICAgICAgICAgIDxmaWxlbmFtZT5XaW5kb3dzPC9maWxlbmFtZT4gZGlyZWN0b3J5IGlzLiAgSXQgaXMKICAgICAgICAgICAgcmVjb21tZW5kZWQgdG8gaGF2ZSB0aGlzIGRpcmVjdG9yeSBzb21ld2hlcmUgb24geW91cgogICAgICAgICAgICBjb25maWd1cmVkIDxtZWRpYWxhYmVsPkM8L21lZGlhbGFiZWw+IGRyaXZlLCBhbmQgaXQncyBhbHNvCiAgICAgICAgICAgIHJlY29tbWVuZGVkIHRvIGp1c3QgY2FsbCB0aGUgZGlyZWN0b3J5ICJ3aW5kb3dzIiAodGhpcyBpcwogICAgICAgICAgICB0aGUgZGVmYXVsdCBzZXR1cCBvbiBXaW5kb3dzLCBhbmQgc29tZSBzdHVwaWQgYXBwbGljYXRpb25zCiAgICAgICAgICAgIG1pZ2h0IHJlbHkgb24gdGhpcykuICBTbyBpbiBjYXNlIHlvdSBjaG9zZSBhICJXaW5kb3dzIgogICAgICAgICAgICBzZXR0aW5nIG9mICJjOlxcd2luZG93cyIgYW5kIHlvdSBjaG9zZSB0byBzZXQgdXAgYSBkcml2ZSBDCiAgICAgICAgICAgIGUuZy4gYXQgPGZpbGVuYW1lPi91c3IvbG9jYWwvd2luZV9jPC9maWxlbmFtZT4sIHRoZQogICAgICAgICAgICBjb3JyZXNwb25kaW5nIGRpcmVjdG9yeSB3b3VsZCBiZQogICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9sb2NhbC93aW5lX2Mvd2luZG93czwvZmlsZW5hbWU+LiAgTWFrZSBvbmUKICAgICAgICAgICAgaWYgeW91IGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuIE5PIFRSQUlMSU5HIFNMQVNIIChOT1QKICAgICAgICAgICAgPGZpbGVuYW1lPkM6XFx3aW5kb3dzXDwvZmlsZW5hbWU+KSEgV3JpdGUgYWNjZXNzIHN0cm9uZ2x5CiAgICAgICAgICAgIHJlY29tbWVuZGVkIQogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iU3lzdGVtIiA9ICJjOlxcd2luZG93c1xcc3lzdGVtIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFRoaXMgc2V0cyB1cCB3aGVyZSB0aGUgd2luZG93cyBzeXN0ZW0gZmlsZXMgYXJlLiBUaGUgV2luZG93cwoJICAgIHN5c3RlbSBkaXJlY3Rvcnkgc2hvdWxkIHJlc2lkZSBiZWxvdyB0aGUgZGlyZWN0b3J5IHVzZWQgZm9yIHRoZQogICAgICAgICAgICA8bGl0ZXJhbD5XaW5kb3dzPC9saXRlcmFsPiBzZXR0aW5nLgoJICAgIFRodXMgd2hlbiB1c2luZyB0aGUgZXhhbXBsZSBhYm92ZSwgdGhlIHN5c3RlbSBkaXJlY3Rvcnkgd291bGQgYmUKCSAgICA8ZmlsZW5hbWU+L3Vzci9sb2NhbC93aW5lX2Mvd2luZG93cy9zeXN0ZW08L2ZpbGVuYW1lPi4KICAgICAgICAgICAgQWdhaW4sIG5vIHRyYWlsaW5nIHNsYXNoLCBhbmQgd3JpdGUgYWNjZXNzIQogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iVGVtcCIgPSAiYzpcXHRlbXAiPC9wcm9ncmFtbGlzdGluZz4gVGhpcyBzaG91bGQKICAgICAgICAgICAgYmUgdGhlIGRpcmVjdG9yeSB5b3Ugd2FudCB5b3VyIHRlbXAgZmlsZXMgc3RvcmVkIGluLAoJICAgIC91c3IvbG9jYWwvd2luZV9jL3RlbXAgaW4gb3VyIGV4YW1wbGUuCiAgICAgICAgICAgIEFnYWluLCBubyB0cmFpbGluZyBzbGFzaCwgYW5kIFdSSVRFIEFDQ0VTUyEhCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgoiUGF0aCIgPSAiYzpcXHdpbmRvd3M7YzpcXHdpbmRvd3NcXHN5c3RlbTtjOlxcYmxhbmNvIgogICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIEJlaGF2ZXMgbGlrZSB0aGUgPGVudmFyPlBBVEg8L2VudmFyPiBzZXR0aW5nIG9uIFVOSVgKICAgICAgICAgICAgYm94ZXMuIFdoZW4gd2luZSBpcyBydW4gbGlrZSA8dXNlcmlucHV0PndpbmUKICAgICAgICAgICAgICBzb2wuZXhlPC91c2VyaW5wdXQ+LCBpZiA8ZmlsZW5hbWU+c29sLmV4ZTwvZmlsZW5hbWU+CiAgICAgICAgICAgIHJlc2lkZXMgaW4gYSBkaXJlY3Rvcnkgc3BlY2lmaWVkIGluIHRoZQogICAgICAgICAgICA8bGl0ZXJhbD5QYXRoPC9saXRlcmFsPiBzZXR0aW5nLCB3aW5lIHdpbGwgcnVuIGl0IChPZgogICAgICAgICAgICBjb3Vyc2UsIGlmIDxmaWxlbmFtZT5zb2wuZXhlPC9maWxlbmFtZT4gcmVzaWRlcyBpbiB0aGUKICAgICAgICAgICAgY3VycmVudCBkaXJlY3RvcnksIHdpbmUgd2lsbCBydW4gdGhhdCBvbmUpLiBNYWtlIHN1cmUgaXQKICAgICAgICAgICAgYWx3YXlzIGhhcyB5b3VyIDxmaWxlbmFtZT53aW5kb3dzPC9maWxlbmFtZT4gZGlyZWN0b3J5IGFuZAogICAgICAgICAgICBzeXN0ZW0gZGlyZWN0b3J5IChGb3IgdGhpcyBzZXR1cCwgaXQgbXVzdCBoYXZlCiAgICAgICAgICAgIDxmaWxlbmFtZT4iYzpcXHdpbmRvd3M7YzpcXHdpbmRvd3NcXHN5c3RlbSI8L2ZpbGVuYW1lPikuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJHcmFwaGljc0RyaXZlciIgPSAieDExZHJ2fHR0eWRydiI8L3Byb2dyYW1saXN0aW5nPgoJICAgIFNldHMgdGhlIGdyYXBoaWNzIGRyaXZlciB0byB1c2UgZm9yIFdpbmUgb3V0cHV0LgoJICAgIHgxMWRydiBpcyBmb3IgWDExIG91dHB1dCwgdHR5ZHJ2IGlzIGZvciB0ZXh0IGNvbnNvbGUgb3V0cHV0LgoJICAgIFdBUk5JTkc6IGlmIHlvdSB1c2UgdHR5ZHJ2IGhlcmUsIHRoZW4geW91IHdvbid0IGJlIGFibGUgdG8gcnVuCgkgICAgYW55IFdpbmRvd3MgR1VJIHByb2dyYW1zLiBUaHVzIHRoaXMgb3B0aW9uIGlzIG1haW5seSBpbnRlcmVzdGluZwoJICAgIGZvciBlLmcuIGVtYmVkZGVkIHVzZSBvZiBXaW5lIGluIHdlYiBzZXJ2ZXIgc2NyaXB0cy4KCSAgPC9wYXJhPgoJICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJQcmludGVyIiA9ICJvZmZ8b24iPC9wcm9ncmFtbGlzdGluZz4gVGVsbHMgd2luZQogICAgICAgICAgICB3aGV0aGVyIHRvIGFsbG93IHByaW50aW5nIHZpYSBwcmludGVyIGRyaXZlcnMgdG8gd29yay4KCSAgICBUaGlzIG9wdGlvbiBpc24ndCBuZWVkZWQgZm9yIG91ciBidWlsdGluIHBzZHJ2IHByaW50ZXIgZHJpdmVyCgkgICAgYXQgYWxsLgogICAgICAgICAgICBVc2luZyB0aGVzZSB0aGluZ3MgYXJlIHByZXR0eSBhbHBoYSwgc28geW91IG1pZ2h0IHdhbnQgdG8KICAgICAgICAgICAgd2F0Y2ggb3V0LiBTb21lIHBlb3BsZSBtaWdodCBmaW5kIGl0IHVzZWZ1bCwgaG93ZXZlci4gSWYKICAgICAgICAgICAgeW91J3JlIG5vdCBwbGFubmluZyBvbiB3b3JraW5nIG9uIHByaW50aW5nIHZpYSB3aW5kb3dzIHByaW50ZXIKCSAgICBkcml2ZXJzLCBkb24ndCBldmVuIGFkZCB0aGlzIHRvIHlvdXIgd2luZSBjb25maWcgZmlsZQoJICAgIChJdCBwcm9iYWJseSBpc24ndCBhbHJlYWR5IGluIGl0KS4KCSAgICBDaGVjayBvdXQgdGhlIFtzcG9vbGVyXSBhbmQgW3BhcmFsbGVscG9ydHNdIHNlY3Rpb25zIHRvby4KICAgICAgICAgIDwvcGFyYT4KCSAgPHBhcmE+CgkgICAgPHByb2dyYW1saXN0aW5nPiJTaGVsbExpbmtlciIgPSAid2luZXNoZWxsbGluayI8L3Byb2dyYW1saXN0aW5nPgoJICAgIFRoaXMgc2V0dGluZyBzcGVjaWZpZXMgdGhlIHNoZWxsIGxpbmtlciBzY3JpcHQgdG8gdXNlIGZvciBzZXR0aW5nCgkgICAgdXAgV2luZG93cyBpY29ucyBpbiBlLmcuIEtERSBvciBHbm9tZSB0aGF0IGFyZSBnaXZlbiBieSBwcm9ncmFtcwoJICAgIG1ha2luZyB1c2Ugb2YgYXBwcm9wcmlhdGUgc2hlbGwzMi5kbGwgZnVuY3Rpb25hbGl0eSB0byBjcmVhdGUKCSAgICBpY29ucyBvbiB0aGUgZGVza3RvcC9zdGFydCBtZW51IGR1cmluZyBpbnN0YWxsYXRpb24uCgkgIDwvcGFyYT4KCSAgPHBhcmEgaWQ9ImRpcnN5bWxpbmtzIj4KCSAgICA8cHJvZ3JhbWxpc3Rpbmc+IlNob3dEaXJTeW1saW5rcyIgPSAiMSI8L3Byb2dyYW1saXN0aW5nPgoJICAgIFdpbmUgZG9lc24ndCBwYXNzIGRpcmVjdG9yeSBzeW1saW5rcyB0byBXaW5kb3dzIHByb2dyYW1zIGJ5CgkgICAgZGVmYXVsdCwgYXMgZG9pbmcgc28gbWF5IGNyYXNoIHNvbWUgcHJvZ3JhbXMgdGhhdCBkbwoJICAgIHJlY3Vyc2l2ZSBsb29rdXBzIG9mIHdob2xlIHN1YmRpcmVjdG9yeSB0cmVlcwoJICAgIHdoZW5ldmVyIGEgZGlyZWN0b3J5IHN5bWxpbmsgcG9pbnRzIGJhY2sgdG8gaXRzZWxmIG9yIG9uZSBvZiBpdHMKCSAgICBwYXJlbnQgZGlyZWN0b3JpZXMuCgkgICAgVGhhdCdzIHdoeSB3ZSBkaXNhbGxvd2VkIHRoZSB1c2Ugb2YgZGlyZWN0b3J5IHN5bWxpbmtzCgkgICAgYW5kIGFkZGVkIHRoaXMgc2V0dGluZyB0byByZWVuYWJsZSAoIjEiKSB0aGlzIGZ1bmN0aW9uYWxpdHkuCgkgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlN5bWJvbFRhYmxlRmlsZSIgPSAid2luZS5zeW0iPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgU2V0cyB1cCB0aGUgc3ltYm9sIHRhYmxlIGZpbGUgZm9yIHRoZSB3aW5lIGRlYnVnZ2VyLiBZb3UKICAgICAgICAgICAgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBmaWRkbGUgd2l0aCB0aGlzLiBNYXkgYmUgdXNlZnVsIGlmCiAgICAgICAgICAgIHlvdXIgd2luZSBpcyBzdHJpcHBlZC4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L3NlY3QzPgoKICAgICAgICA8c2VjdDM+CiAgICAgICAgICA8dGl0bGU+SW50cm9kdWN0aW9uIFRvIERMTCBTZWN0aW9uczwvdGl0bGU+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhlcmUgYXJlIGEgZmV3IHRoaW5ncyB5b3Ugd2lsbCBuZWVkIHRvIGtub3cgYmVmb3JlCiAgICAgICAgICAgIGNvbmZpZ3VyaW5nIHRoZSBETEwgc2VjdGlvbnMgaW4geW91ciB3aW5lIGNvbmZpZ3VyYXRpb24KICAgICAgICAgICAgZmlsZS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxzZWN0ND4KICAgICAgICAgICAgPHRpdGxlPldpbmRvd3MgRExMIFBhaXJzPC90aXRsZT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgTW9zdCB3aW5kb3dzIERMTCdzIGhhdmUgYSB3aW4xNiAoV2luZG93cyAzLngpIGFuZCB3aW4zMgogICAgICAgICAgICAgIChXaW5kb3dzIDl4L05UKSBmb3JtLiAgVGhlIGNvbWJpbmF0aW9uIG9mIHRoZSB3aW4xNiBhbmQKICAgICAgICAgICAgICB3aW4zMiBETEwgdmVyc2lvbnMgYXJlIGNhbGxlZCB0aGUgIkRMTCBwYWlyIi4gVGhpcyBpcyBhCiAgICAgICAgICAgICAgbGlzdCBvZiB0aGUgbW9zdCBjb21tb24gcGFpcnM6CiAgICAgICAgICAgIDwvcGFyYT4KCiAgICAgICAgICAgIDxpbmZvcm1hbHRhYmxlPgogICAgICAgICAgICAgIDx0Z3JvdXAgY29scz0iMyI+CiAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICAgICAgPGVudHJ5PldpbjE2PC9lbnRyeT4KICAgICAgICAgICAgICAgICAgICA8ZW50cnk+V2luMzI8L2VudHJ5PgogICAgICAgICAgICAgICAgICAgIDxlbnRyeT4KICAgICAgICAgICAgICAgICAgICAgIE5hdGl2ZQogICAgICAgICAgICAgICAgICAgICAgPGZvb3Rub3RlPgogICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgICAgICAgICBJcyBpdCBwb3NzaWJsZSB0byB1c2UgbmF0aXZlIGRsbCB3aXRoIHdpbmU/CiAgICAgICAgICAgICAgICAgICAgICAgICAgKFNlZSBuZXh0IHNlY3Rpb24pCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgICAgICAgICAgIDwvZm9vdG5vdGU+CiAgICAgICAgICAgICAgICAgICAgPC9lbnRyeT4KICAgICAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgPHRib2R5PgogICAgICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgICAgIDxlbnRyeT5LRVJORUw8L2VudHJ5PgogICAgICAgICAgICAgICAgICAgIDxlbnRyeT5LRVJORUwzMjwvZW50cnk+CiAgICAgICAgICAgICAgICAgICAgPGVudHJ5Pk5vITwvZW50cnk+CiAgICAgICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgICAgIDxlbnRyeT5VU0VSPC9lbnRyeT4KICAgICAgICAgICAgICAgICAgICA8ZW50cnk+VVNFUjMyPC9lbnRyeT4KICAgICAgICAgICAgICAgICAgICA8ZW50cnk+Tm8hPC9lbnRyeT4KICAgICAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICAgICAgPGVudHJ5PlNIRUxMPC9lbnRyeT4KICAgICAgICAgICAgICAgICAgICA8ZW50cnk+U0hFTEwzMjwvZW50cnk+CiAgICAgICAgICAgICAgICAgICAgPGVudHJ5PlllczwvZW50cnk+CiAgICAgICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgICAgIDxlbnRyeT5HREk8L2VudHJ5PgogICAgICAgICAgICAgICAgICAgIDxlbnRyeT5HREkzMjwvZW50cnk+CiAgICAgICAgICAgICAgICAgICAgPGVudHJ5Pk5vITwvZW50cnk+CiAgICAgICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgICAgIDxlbnRyeT5DT01NRExHPC9lbnRyeT4KICAgICAgICAgICAgICAgICAgICA8ZW50cnk+Q09NRExHMzI8L2VudHJ5PgogICAgICAgICAgICAgICAgICAgIDxlbnRyeT5ZZXM8L2VudHJ5PgogICAgICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgICAgICA8ZW50cnk+VkVSPC9lbnRyeT4KICAgICAgICAgICAgICAgICAgICA8ZW50cnk+VkVSU0lPTjwvZW50cnk+CiAgICAgICAgICAgICAgICAgICAgPGVudHJ5PlllczwvZW50cnk+CiAgICAgICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICA8L3Rncm91cD4KICAgICAgICAgICAgPC9pbmZvcm1hbHRhYmxlPgogICAgICAgICAgPC9zZWN0ND4KCiAgICAgICAgICA8c2VjdDQ+CiAgICAgICAgICAgIDx0aXRsZT5EaWZmZXJlbnQgRm9ybXMgT2YgRExMJ3M8L3RpdGxlPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBUaGVyZSBhcmUgYSBmZXcgZGlmZmVyZW50IGZvcm1zIG9mIERMTCdzIHdpbmUgY2FuIGxvYWQ6CiAgICAgICAgICAgICAgPHZhcmlhYmxlbGlzdD4KICAgICAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgICAgIDx0ZXJtPm5hdGl2ZTwvdGVybT4KICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgogICAgICAgICAgICAgICAgICAgICAgVGhlIERMTCdzIHRoYXQgYXJlIGluY2x1ZGVkIHdpdGggd2luZG93cy4gTWFueQogICAgICAgICAgICAgICAgICAgICAgd2luZG93cyBETEwncyBjYW4gYmUgbG9hZGVkIGluIHRoZWlyIG5hdGl2ZQogICAgICAgICAgICAgICAgICAgICAgZm9ybS4gTWFueSB0aW1lcyB0aGVzZSBuYXRpdmUgdmVyc2lvbnMgd29yawogICAgICAgICAgICAgICAgICAgICAgYmV0dGVyIHRoYW4gdGhlaXIgbm9uLU1pY3Jvc29mdCBlcXVpdmFsZW50IC0tCiAgICAgICAgICAgICAgICAgICAgICBvdGhlciB0aW1lcyB0aGV5IGRvbid0LgogICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgICAgICA8dGVybT5lbGZkbGw8L3Rlcm0+CiAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KICAgICAgICAgICAgICAgICAgICAgIEVMRiBlbmNhcHN1bGF0ZWQgd2luZG93cyBETEwncy4gVGhpcyBpcyBjdXJyZW50bHkKICAgICAgICAgICAgICAgICAgICAgIGV4cGVyaW1lbnRhbCAoTm90IHdvcmtpbmcgeWV0KS4KICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICAgICAgPHRlcm0+c288L3Rlcm0+CiAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KICAgICAgICAgICAgICAgICAgICAgIE5hdGl2ZSBFTEYgbGlicmFyaWVzLiBXaWxsIG5vdCB3b3JrIHlldC4KICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICAgICAgPHRlcm0+YnVpbHRpbjwvdGVybT4KICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgogICAgICAgICAgICAgICAgICAgICAgVGhlIG1vc3QgY29tbW9uIGZvcm0gb2YgRExMIGxvYWRpbmcuIFRoaXMgaXMKICAgICAgICAgICAgICAgICAgICAgIHdoYXQgeW91IHdpbGwgdXNlIGlmIHRoZSBETEwgaXMgZXJyb3ItcHJvbmUgaW4KICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZSBmb3JtIChLRVJORUwgZm9yIGV4YW1wbGUpLCB5b3UgZG9uJ3QgaGF2ZQogICAgICAgICAgICAgICAgICAgICAgdGhlIG5hdGl2ZSBETEwsIG9yIHlvdSBqdXN0IHdhbnQgdG8gYmUKICAgICAgICAgICAgICAgICAgICAgIE1pY3Jvc29mdC1mcmVlLgogICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPC92YXJpYWJsZWxpc3Q+CiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvc2VjdDQ+CiAgICAgICAgPC9zZWN0Mz4KCiAgICAgICAgPHNlY3QzPgogICAgICAgICAgPHRpdGxlPlRoZSBbRGxsRGVmYXVsdHNdIFNlY3Rpb248L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoZXNlIHNldHRpbmdzIHByb3ZpZGUgd2luZSdzIGRlZmF1bHQgaGFuZGxpbmcgb2YgRExMIGxvYWRpbmcuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJEZWZhdWx0TG9hZE9yZGVyIiA9IiBuYXRpdmUsIHNvLCBidWlsdGluIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhpcyBzZXR0aW5nIGlzIGEgY29tbWEtZGVsaW1pdGVkIGxpc3Qgb2YgdGhlIG9yZGVyIGluCiAgICAgICAgICAgIHdoaWNoIHRvIGF0dGVtcHQgbG9hZGluZyBETExzLiBJZiB0aGUgZmlyc3Qgb3B0aW9uIGZhaWxzLAogICAgICAgICAgICBpdCB3aWxsIHRyeSB0aGUgc2Vjb25kLCBhbmQgc28gb24uIFRoZSBvcmRlciBzcGVjaWZpZWQKICAgICAgICAgICAgYWJvdmUgaXMgcHJvYmFibHkgdGhlIGJlc3QgaW4gbW9zdCBjb25kaXRpb25zLgogICAgICAgICAgPC9wYXJhPgogICAgICAgIDwvc2VjdDM+CgogICAgICAgIDxzZWN0Mz4KICAgICAgICAgIDx0aXRsZT5UaGUgW0RsbFBhaXJzXSBTZWN0aW9uPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgQXQgb25lIHRpbWUsIHRoZXJlIHdhcyBhIHNlY3Rpb24gY2FsbGVkIFtEbGxQYWlyc10gaW4gdGhlIAogICAgICAgICAgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGUsIGJ1dCB0aGlzIGhhcyBiZWVuIG9ic29sZXRlZAogICAgICAgICAgYmVjYXVzZSB0aGUgcGFpcmluZyBpbmZvcm1hdGlvbiBoYXMgbm93IGJlZW4gZW1iZWRkZWQgaW50bwogICAgICAgICAgV2luZSBpdHNlbGYuIChUaGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gd2FzIG1lcmVseSB0byBiZQogICAgICAgICAgYWJsZSB0byBpc3N1ZSB3YXJuaW5ncyBpZiB0aGUgdXNlciBhdHRlbXB0ZWQgdG8gcGFpcgogICAgICAgICAgY29kZXBlbmRlbnQgMTYtYml0LzMyLWJpdCBETExzIG9mIGRpZmZlcmVudCB0eXBlcy4pIElmIHlvdQogICAgICAgICAgc3RpbGwgaGF2ZSB0aGlzIGluIHlvdXIgPGZpbGVuYW1lPndpbmUuY29uZjwvZmlsZW5hbWU+IG9yCiAgICAgICAgICA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPiwgeW91IG1heSBzYWZlbHkgZGVsZXRlIGl0LgogICAgICAgICAgPC9wYXJhPgoJPC9zZWN0Mz4KCiAgICAgICAgPHNlY3QzPgogICAgICAgICAgPHRpdGxlPlRoZSBbRGxsT3ZlcnJpZGVzXSBTZWN0aW9uPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGUgZm9ybWF0IGZvciB0aGlzIHNlY3Rpb24gaXMgdGhlIHNhbWUgZm9yIGVhY2ggbGluZToKICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgombHQ7RExMPnssJmx0O0RMTD4sJmx0O0RMTD4uLi59ID0gJmx0O0ZPUk0+eywmbHQ7Rk9STT4sJmx0O0ZPUk0+Li4ufQogICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIEZvciBleGFtcGxlLCB0byBsb2FkIGJ1aWx0aW4gS0VSTkVMIHBhaXIgKGNhc2UgZG9lc24ndAogICAgICAgICAgICBtYXR0ZXIgaGVyZSk6CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KImtlcm5lbCxrZXJuZWwzMiIgPSAiYnVpbHRpbiIKICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUbyBsb2FkIHRoZSBuYXRpdmUgQ09NTURMRyBwYWlyLCBidXQgaWYgdGhhdCBkb2Vzbid0IHdvcmsKICAgICAgICAgICAgdHJ5IGJ1aWx0aW46CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KImNvbW1kbGcsY29tZGxnMzIiID0gIm5hdGl2ZSxidWlsdGluIgogICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRvIGxvYWQgdGhlIG5hdGl2ZSBDT01DVEwzMjoKICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgoiY29tY3RsMzIiID0gIm5hdGl2ZSIKICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBIZXJlIGlzIGEgZ29vZCBnZW5lcmljIHNldHVwIChBcyBpdCBpcyBkZWZpbmVkIGluIGNvbmZpZwogICAgICAgICAgICB0aGF0IHdhcyBpbmNsdWRlZCB3aXRoIHlvdXIgd2luZSBwYWNrYWdlKToKICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgpbRGxsT3ZlcnJpZGVzXQoiY29tbWRsZyIgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJjb21kbGczMiIgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKInZlciIgICAgICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoidmVyc2lvbiIgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJzaGVsbCIgICAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKInNoZWxsMzIiICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoibHpleHBhbmQiICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJsejMyIiAgICAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKImNvbWN0bDMyIiAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoiY29tbWN0cmwiICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJ3c29jazMyIiAgICAgID0gImJ1aWx0aW4iCiJ3aW5zb2NrIiAgICAgID0gImJ1aWx0aW4iCiJhZHZhcGkzMiIgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKImNydGRsbCIgICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoibXByIiAgICAgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJ3aW5zcG9vbC5kcnYiID0gImJ1aWx0aW4sIG5hdGl2ZSIKImRkcmF3IiAgICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoiZGlucHV0IiAgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJkc291bmQiICAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKIm1tc3lzdGVtIiAgICAgPSAiYnVpbHRpbiIKIndpbm1tIiAgICAgICAgPSAiYnVpbHRpbiIKIm1zdmNydCIgICAgICAgPSAibmF0aXZlLCBidWlsdGluIgoibXN2aWRlbyIgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJtc3ZmdzMyIiAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKIm1jaWNkYS5kcnYiICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoibWNpc2VxLmRydiIgICA9ICJidWlsdGluLCBuYXRpdmUiCiJtY2l3YXZlLmRydiIgID0gImJ1aWx0aW4sIG5hdGl2ZSIKIm1jaWF2aS5kcnYiICAgPSAibmF0aXZlLCBidWlsdGluIgoibWNpYW5pbS5kcnYiICA9ICJuYXRpdmUsIGJ1aWx0aW4iCiJtc2FjbS5kcnYiICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKIm1zYWNtIiAgICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoibXNhY20zMiIgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJtaWRpbWFwLmRydiIgID0gImJ1aWx0aW4sIG5hdGl2ZSIKInduYXNwaTMyIiAgICAgPSAiYnVpbHRpbiIKImljbXAiICAgICAgICAgPSAiYnVpbHRpbiIKICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxub3RlPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBZb3Ugc2VlIHRoYXQgZWxmZGxsIG9yIHNvIGlzIHRoZSBmaXJzdCBvcHRpb24gZm9yIGEgZmV3CiAgICAgICAgICAgICAgb2YgdGhlc2UgZGxsJ3MuIFRoaXMgd2lsbCBmYWlsIGZvciB5b3UsIGJ1dCB5b3Ugd29uJ3QKICAgICAgICAgICAgICBub3RpY2UgaXQgYXMgd2luZSB3aWxsIGp1c3QgdXNlIHRoZSBzZWNvbmQgb3IgdGhpcmQKICAgICAgICAgICAgICBvcHRpb24uCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbm90ZT4KICAgICAgICA8L3NlY3QzPgoKICAgICAgICA8c2VjdDM+CiAgICAgICAgICA8dGl0bGU+VGhlIFtmb250c10gU2VjdGlvbjwvdGl0bGU+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHNldHMgdXAgd2luZSdzIGZvbnQgaGFuZGxpbmcuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJSZXNvbHV0aW9uIiA9ICI5NiI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFNpbmNlIHRoZSB3YXkgWCBoYW5kbGVzIGZvbnRzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSB3YXkKICAgICAgICAgICAgV2luZG93cyBkb2VzLCB3aW5lIHVzZXMgYSBzcGVjaWFsIG1lY2hhbmlzbSB0byBkZWFsIHdpdGgKICAgICAgICAgICAgdGhlbS4gSXQgbXVzdCBzY2FsZSB0aGVtIHVzaW5nIHRoZSBudW1iZXIgZGVmaW5lZCBpbiB0aGUKICAgICAgICAgICAgIlJlc29sdXRpb24iIHNldHRpbmcuIDYwLTEyMCBhcmUgcmVhc29uYWJsZSB2YWx1ZXMsIDk2IGlzCiAgICAgICAgICAgIGEgbmljZSBpbiB0aGUgbWlkZGxlIG9uZS4gSWYgeW91IGhhdmUgdGhlIHJlYWwgd2luZG93cwogICAgICAgICAgICBmb250cyBhdmFpbGFibGUgKDxmaWxlbmFtZT4mbHQ7ZGlycyB0bwogICAgICAgICAgICAgIHdpbmU+L2RvY3VtZW50YXRpb24vdHRmc2VydmVyPC9maWxlbmFtZT4gYW5kCiAgICAgICAgICAgIDxmaWxlbmFtZT5mb250czwvZmlsZW5hbWU+KSwgdGhpcyBwYXJhbWV0ZXIgd2lsbCBub3QgYmUgYXMKICAgICAgICAgICAgaW1wb3J0YW50LiBPZiBjb3Vyc2UsIGl0J3MgYWx3YXlzIGdvb2QgdG8gZ2V0IHlvdXIgWCBmb250cwogICAgICAgICAgICB3b3JraW5nIGFjY2VwdGFibHkgaW4gd2luZS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IkRlZmF1bHQiID0gIi1hZG9iZS10aW1lcy0iPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgVGhlIGRlZmF1bHQgZm9udCB3aW5lIHVzZXMuIEZvb2wgYXJvdW5kIHdpdGggaXQgaWYgeW91J2QgbGlrZS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgpPUFRJT05BTDogCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhlIDxsaXRlcmFsPkFsaWFzPC9saXRlcmFsPiBzZXR0aW5nIGFsbG93cyB5b3UgdG8gbWFwIGFuIFggZm9udCB0byBhIGZvbnQKICAgICAgICAgICAgdXNlZCBpbiB3aW5lLiBUaGlzIGlzIGdvb2QgZm9yIGFwcHMgdGhhdCBuZWVkIGEgc3BlY2lhbCBmb250IHlvdSBkb24ndCBoYXZlLAogICAgICAgICAgICBidXQgYSBnb29kIHJlcGxhY2VtZW50IGV4aXN0cy4gVGhlIHN5bnRheCBpcyBsaWtlIHNvOgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CiJBbGlhc1giID0gIltGYWtlIHdpbmRvd3MgbmFtZV0sW1JlYWwgWCBuYW1lXSImbHQ7LG9wdGlvbmFsICJtYXNraW5nIiBzZWN0aW9uPgogICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFByZXR0eSBzdHJhaWdodGZvcndhcmQuIFJlcGxhY2UgIkFsaWFzWCIgd2l0aCAiQWxpYXMwIiwKICAgICAgICAgICAgdGhlbiAiQWxpYXMxIiBhbmQgc28gb24uIFRoZSBmYWtlIHdpbmRvd3MgbmFtZSBpcyB0aGUgbmFtZQogICAgICAgICAgICB0aGF0IHRoZSBmb250IHdpbGwgYmUgdW5kZXIgYSB3aW5kb3dzIGFwcCBpbiB3aW5lLiBUaGUKICAgICAgICAgICAgcmVhbCBYIG5hbWUgaXMgdGhlIGZvbnQgbmFtZSBhcyBzZWVuIGJ5IFggKFJ1bgogICAgICAgICAgICAieGZvbnRzZWwiKS4gVGhlIG9wdGlvbmFsICJtYXNraW5nIiBzZWN0aW9uIGFsbG93cyB5b3UgdG8KICAgICAgICAgICAgdXRpbGl6ZSB0aGUgZmFrZSB3aW5kb3dzIG5hbWUgeW91IGRlZmluZS4gSWYgaXQgaXMgbm90CiAgICAgICAgICAgIHVzZWQsIHRoZW4gd2luZSB3aWxsIGp1c3QgdHJ5IHRvIGV4dHJhY3QgdGhlIGZha2Ugd2luZG93cwogICAgICAgICAgICBuYW1lIGl0c2VsZiBhbmQgbm90IHVzZSB0aGUgdmFsdWUgeW91IGVudGVyLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiBhbiBhbGlhcyB3aXRob3V0IG1hc2tpbmcuIFRoZSBmb250IHdpbGwgc2hvdyB1cCBpbiB3aW5kb3dzCiAgICAgICAgICAgIGFwcHMgYXMgIkdvb2dsZSIuIFdoZW4gZGVmaW5pbmcgYW4gYWxpYXMgaW4gYSBjb25maWcgZmlsZSwgZm9yZ2V0IGFib3V0IG15CiAgICAgICAgICAgIGNvbW1lbnQgdGV4dCAoVGhlICImbHQ7LS0gYmxhaCIgc3R1ZmYpCiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KIkFsaWFzMCIgPSAiRm9vLC0tZ29vZ2xlLSIgICAgICAmbHQ7CiAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHdpdGggbWFza2luZyBlbmFibGVkLiBUaGUgZm9udCB3aWxsIHNob3cgdXAgYXMgIkZvbyIgaW4KICAgICAgICAgICAgd2luZG93cyBhcHBzLgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CiJBbGlhczEiID0gIkZvbywtLWdvb2dsZS0sc3Vic3QiCiAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgRm9yIG1vcmUgaW5mbyBjaGVjayBvdXQgPGZpbGVuYW1lPiZsdDtkaXJzIHRvIHdpbmU+L2RvY3VtZW50YXRpb24vZm9udHM8L2ZpbGVuYW1lPgogICAgICAgICAgPC9wYXJhPgogICAgICAgIDwvc2VjdDM+CgogICAgICAgIDxzZWN0Mz4KICAgICAgICAgIDx0aXRsZT5UaGUgW3NlcmlhbHBvcnRzXSwgW3BhcmFsbGVscG9ydHNdLCBbc3Bvb2xlcl0sIGFuZCBbcG9ydHNdIFNlY3Rpb25zPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBFdmVuIHRob3VnaCBpdCBzb3VuZHMgbGlrZSBhIGxvdCBvZiBzZWN0aW9ucywgdGhlc2UgYXJlCiAgICAgICAgICAgIGFsbCBjbG9zZWx5IHJlbGF0ZWQuIFRoZXkgYXJlIGFsbCBmb3IgY29tbXVuaWNhdGlvbnMgYW5kCiAgICAgICAgICAgIHBhcmFsbGVsIHBvcnRzLiAKICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGUgW3NlcmlhbHBvcnRzXSBzZWN0aW9uIHRlbGxzIHdpbmUgd2hhdCBzZXJpYWwgcG9ydHMgaXQKICAgICAgICAgICAgaXMgYWxsb3dlZCB0byB1c2UuCiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iQ29tWCIgPSAiL2Rldi9jdWFZIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgUmVwbGFjZSA8bGl0ZXJhbD5YPC9saXRlcmFsPiB3aXRoIHRoZSBudW1iZXIgb2YgdGhlIENPTQogICAgICAgICAgICBwb3J0IGluIFdpbmRvd3MgKDEtOCkgYW5kIDxsaXRlcmFsPlk8L2xpdGVyYWw+IHdpdGggdGhlCiAgICAgICAgICAgIG51bWJlciBvZiBpdCBpbiA8bGl0ZXJhbD5YPC9saXRlcmFsPiAoVXN1YWxseSB0aGUgbnVtYmVyCiAgICAgICAgICAgIG9mIHRoZSBwb3J0IGluIFdpbmRvd3MgbWludXMgMSkuIDxsaXRlcmFsPkNvbVg8L2xpdGVyYWw+CiAgICAgICAgICAgIGNhbiBhY3R1YWxseSBlcXVhbCBhbnkgZGV2aWNlCiAgICAgICAgICAgICg8bWVkaWFsYWJlbD4vZGV2L21vZGVtPC9tZWRpYWxhYmVsPiBpcyBhY2NlcHRhYmxlKS4gSXQgaXMKICAgICAgICAgICAgbm90IGFsd2F5cyBuZWNlc3NhcnkgdG8gZGVmaW5lIGFueSBDT00gcG9ydHMgKEFuIG9wdGlvbmFsCiAgICAgICAgICAgIHNldHRpbmcpLiBIZXJlIGlzIGFuIGV4YW1wbGU6CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iQ29tMSIgPSAiL2Rldi9jdWEwIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVXNlIGFzIG1hbnkgb2YgdGhlc2UgYXMgeW91IGxpa2UgaW4gdGhlIHNlY3Rpb24gdG8gZGVmaW5lCiAgICAgICAgICAgIGFsbCBvZiB0aGUgQ09NIHBvcnRzIHlvdSBuZWVkLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoZSBbcGFyYWxsZWxwb3J0c10gc2VjdGlvbiBzZXRzIHVwIGFueSBwYXJhbGxlbCBwb3J0cwogICAgICAgICAgICB0aGF0IHdpbGwgYmUgYWxsb3dlZCBhY2Nlc3MgdW5kZXIgd2luZS4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJMcHRYIiA9ICIvZGV2L2xwWSI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFNvdW5kcyBmYW1pbGlhcj8gU3ludGF4IGlzIGp1c3QgbGlrZSB0aGUgQ09NIHBvcnQgc2V0dGluZy4KICAgICAgICAgICAgUmVwbGFjZSA8bGl0ZXJhbD5YPC9saXRlcmFsPiB3aXRoIGEgdmFsdWUgZnJvbSAxLTQgYXMgaXQKICAgICAgICAgICAgaXMgaW4gV2luZG93cyBhbmQgPGxpdGVyYWw+WTwvbGl0ZXJhbD4gd2l0aCBhIHZhbHVlIGZyb20KICAgICAgICAgICAgMC0zICg8bGl0ZXJhbD5ZPC9saXRlcmFsPiBpcyB1c3VhbGx5IHRoZSB2YWx1ZSBpbiB3aW5kb3dzCiAgICAgICAgICAgIG1pbnVzIDEsIGp1c3QgbGlrZSBmb3IgQ09NIHBvcnRzKS4gWW91IGRvbid0IGFsd2F5cyBuZWVkCiAgICAgICAgICAgIHRvIGRlZmluZSBhIHBhcmFsbGVsIHBvcnQgKEFLQSwgaXQncyBvcHRpb25hbCkuIEFzIHdpdGgKICAgICAgICAgICAgdGhlIG90aGVyIHNlY3Rpb24sIExwdFggY2FuIGVxdWFsICBhbnkgZGV2aWNlIChNYXliZQogICAgICAgICAgICA8bWVkaWFsYWJlbD4vZGV2L3ByaW50ZXI8L21lZGlhbGFiZWw+KS4gSGVyZSBpcyBhbgogICAgICAgICAgICBleGFtcGxlOiAgPHByb2dyYW1saXN0aW5nPiJMcHQxIiA9ICIvZGV2L2xwMCI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoZSBbc3Bvb2xlcl0gc2VjdGlvbiB3aWxsIGluZm9ybSB3aW5lIHdoZXJlIHRvIHNwb29sCiAgICAgICAgICAgIHByaW50IGpvYnMuIFVzZSB0aGlzIGlmIHlvdSB3YW50IHRvIHRyeSBwcmludGluZy4gV2luZQogICAgICAgICAgICBkb2NzIGNsYWltIHRoYXQgc3Bvb2xpbmcgaXMgInJhdGhlciBwcmltaXRpdmUiIGF0IHRoaXMKICAgICAgICAgICAgdGltZSwgc28gaXQgd29uJ3Qgd29yayBwZXJmZWN0bHkuIElUIElTIE9QVElPTkFMLiBUaGUgb25seQogICAgICAgICAgICBzZXR0aW5nIHlvdSB1c2UgaW4gdGhpcyBzZWN0aW9uIHdvcmtzIHRvIG1hcCBhIHBvcnQgKExQVDEsCiAgICAgICAgICAgIGZvciBleGFtcGxlKSB0byBhIGZpbGUgb3IgYSBjb21tYW5kLiBIZXJlIGlzIGFuIGV4YW1wbGUsCiAgICAgICAgICAgIG1hcHBpbmcgTFBUMSB0byB0aGUgZmlsZSA8ZmlsZW5hbWU+b3V0LnBzPC9maWxlbmFtZT46IAogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IkxQVDE6IiA9ICJvdXQucHMiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmQgbWFwcyBwcmludGluZyBqb2JzIHRvIExQVDEgdG8gdGhlCiAgICAgICAgICAgIGNvbW1hbmQgPGNvbW1hbmQ+bHByPC9jb21tYW5kPi4gTm90aWNlICB0aGUgfDogCiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iTFBUMToiID0gInxscHIiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGUgW3BvcnRzXSBzZWN0aW9uIGlzIHVzdWFsbHkgdXNlZnVsIG9ubHkgZm9yIHBlb3BsZSB3aG8KICAgICAgICAgICAgbmVlZCBkaXJlY3QgcG9ydCBhY2Nlc3MgZm9yIHByb2dyYW1zIHJlcXVpcmluZyBkb25nbGVzIG9yCiAgICAgICAgICAgIHNjYW5uZXJzLiBJRiBZT1UgRE9OJ1QgTkVFRCBJVCwgRE9OJ1QgVVNFIElUISAKICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+InJlYWQiID0gIjB4Nzc5LDB4Mzc5LDB4MjgwLTB4MmEwIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIEdpdmVzIGRpcmVjdCByZWFkIGFjY2VzcyB0byB0aG9zZSBJTydzLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4id3JpdGUiID0gIjB4Nzc5LDB4Mzc5LDB4MjgwLTB4MmEwIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIEdpdmVzIGRpcmVjdCB3cml0ZSBhY2Nlc3MgdG8gdGhvc2UgSU8ncy4gSXQncyBwcm9iYWJseSBhCiAgICAgICAgICAgIGdvb2QgaWRlYSB0byBrZWVwIHRoZSB2YWx1ZXMgb2YgdGhlCiAgICAgICAgICAgIDxsaXRlcmFsPnJlYWQ8L2xpdGVyYWw+IGFuZCA8bGl0ZXJhbD53cml0ZTwvbGl0ZXJhbD4KICAgICAgICAgICAgc2V0dGluZ3MgdGhlIHNhbWUuIFRoaXMgc3R1ZmYgd2lsbCBvbmx5IHdvcmsgd2hlbiB5b3UncmUKICAgICAgICAgICAgcm9vdC4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L3NlY3QzPgoKICAgICAgICA8c2VjdDM+CiAgICAgICAgICA8dGl0bGU+VGhlIFtzcHldLCBbUmVnaXN0cnldLCBbdHdlYWsubGF5b3V0XSwgYW5kIFtwcm9ncmFtc10gU2VjdGlvbnM8L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFtzcHldIGlzIHVzZWQgdG8gaW5jbHVkZSBvciBleGNsdWRlIGRlYnVnIG1lc3NhZ2VzLCBhbmQgdG8KICAgICAgICAgICAgb3V0cHV0IHRoZW0gdG8gYSBmaWxlLiBUaGUgbGF0dGVyIGlzIHJhcmVseSB1c2VkLiBUSEVTRQogICAgICAgICAgICBBUkUgQUxMIE9QVElPTkFMIEFORCBZT1UgUFJPQkFCTFkgRE9OJ1QgTkVFRCBUTyBBREQgT1IKICAgICAgICAgICAgUkVNT1ZFIEFOWVRISU5HIElOIFRISVMgU0VDVElPTiBUTyBZT1VSIENPTkZJRy4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IkZpbGUiID0gIi9ibGFuY28iPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgU2V0cyB0aGUgbG9nZmlsZSBmb3Igd2luZS4gU2V0IHRvIENPTiB0byBsb2cgdG8gc3RhbmRhcmQgb3V0LgogICAgICAgICAgICBUSElTIElTIFJBUkVMWSBVU0VELgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iRXhjbHVkZSIgPSAiV01fU0laRTtXTV9USU1FUjsiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgRXhjbHVkZXMgZGVidWcgbWVzc2FnZXMgYWJvdXQgPGNvbnN0YW50PldNX1NJWkU8L2NvbnN0YW50PgogICAgICAgICAgICBhbmQgPGNvbnN0YW50PldNX1RJTUVSPC9jb25zdGFudD4gaW4gdGhlIGxvZ2ZpbGUuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJJbmNsdWRlIiA9ICJXTV9TSVpFO1dNX1RJTUVSOyI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBJbmNsdWRlcyBkZWJ1ZyBtZXNzYWdlcyBhYm91dCA8Y29uc3RhbnQ+V01fU0laRTwvY29uc3RhbnQ+CiAgICAgICAgICAgIGFuZCA8Y29uc3RhbnQ+V01fVElNRVI8L2NvbnN0YW50PiBpbiB0aGUgbG9nZmlsZS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBbUmVnaXN0cnldIGNhbiBiZSB1c2VkIHRvIHRlbGwgd2luZSB3aGVyZSB5b3VyIG9sZCB3aW5kb3dzCiAgICAgICAgICAgIHJlZ2lzdHJ5IGZpbGVzIGV4aXN0LiBUaGlzIHNlY3Rpb24gaXMgY29tcGxldGVseSBvcHRpb25hbAogICAgICAgICAgICBhbmQgdXNlbGVzcyB0byBwZW9wbGUgdXNpbmcgd2luZSB3aXRob3V0IGFuIGV4aXN0aW5nCiAgICAgICAgICAgIHdpbmRvd3MgaW5zdGFsbGF0aW9uLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iVXNlckZpbGVOYW1lIiA9ICIvZGlycy90by91c2VyLnJlZyI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBUaGUgbG9jYXRpb24gb2YgeW91ciBvbGQgPGZpbGVuYW1lPnVzZXIucmVnPC9maWxlbmFtZT4gZmlsZS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBbdHdlYWsubGF5b3V0XSBpcyBkZXZvdGVkIHRvIHdpbmUncyBsb29rLiBUaGVyZSBpcyBvbmx5CiAgICAgICAgICAgIG9uZSBzZXR0aW5nIGZvciBpdC4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IldpbmVMb29rIiA9ICJ3aW4zMXx3aW45NXx3aW45OCI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBXaWxsIGNoYW5nZSB0aGUgbG9vayBvZiB3aW5lIGZyb20gV2luZG93cyAzLjEgdG8gV2luZG93cyA5NS4KICAgICAgICAgICAgVGhlIDxsaXRlcmFsPndpbjk4PC9saXRlcmFsPiBzZXR0aW5nIGJlaGF2ZXMKICAgICAgICAgICAganVzdCBsaWtlIDxsaXRlcmFsPndpbjk1PC9saXRlcmFsPiBtb3N0IG9mIHRoZSB0aW1lLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFtwcm9ncmFtc10gY2FuIGJlIHVzZWQgdG8gc2F5IHdoYXQgcHJvZ3JhbXMgcnVuIHVuZGVyCiAgICAgICAgICAgIHNwZWNpYWwgY29uZGl0aW9ucy4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IkRlZmF1bHQiID0gIi9wcm9ncmFtL3RvL2V4ZWN1dGUuZXhlIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFNldHMgdGhlIHByb2dyYW0gdG8gYmUgcnVuIGlmIHdpbmUgaXMgc3RhcnRlZCB3aXRob3V0IHNwZWNpZnlpbmcgYSBwcm9ncmFtLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iU3RhcnR1cCIgPSAiL3Byb2dyYW0vdG8vZXhlY3V0ZS5leGUiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgU2V0cyB0aGUgcHJvZ3JhbSB0byBhdXRvbWF0aWNhbGx5IGJlIHJ1biBhdCBzdGFydHVwIGV2ZXJ5IHRpbWUuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9zZWN0Mz4KCiAgICAgICAgPHNlY3QzPgogICAgICAgICAgPHRpdGxlPlRoZSBbV2luTU1dIFNlY3Rpb248L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFtXaW5NTV0gaXMgdXNlZCB0byBkZWZpbmUgd2hpY2ggbXVsdGltZWRpYSBkcml2ZXJzIGhhdmUgdG8gYmUgbG9hZGVkLiBTaW5jZQoJICAgIHRob3NlIGRyaXZlcnMgbWF5IGRlcGVuZCBvbiB0aGUgbXVsdGltZWRpYSBpbnRlcmZhY2VzIGF2YWlsYWJsZSBvbiB5b3VyIHN1c3RlbQoJICAgIChPU1MsIEFsc2EuLi4gdG8gbmFtZSBhIGZldyksIGl0J3MgbmVlZGVkIHRvIGJlIGFibGUgdG8gY29uZmlndXJlIHdoaWNoIGRyaXZlcgoJICAgIGhhcyB0byBiZSBsb2FkZWQuCiAgICAgICAgICA8L3BhcmE+CgogICAgICAgICAgPHBhcmE+CgkgICAgVGhlIGNvbnRlbnQgb2YgdGhlIHNlY3Rpb24gbG9va3MgbGlrZToKCSAgICA8cHJvZ3JhbWxpc3Rpbmc+IApbV2luTU1dCiJEcml2ZXJzIiA9ICJ3aW5lb3NzLmRydiIKIldhdmVNYXBwZXIiID0gIm1zYWNtLmRydiIKIk1pZGlNYXBwZXIiID0gIm1pZGltYXAuZHJ2IgoJICAgIDwvcHJvZ3JhbWxpc3Rpbmc+IAoJICAgIEFsbCB0aGUga2V5cyBtdXN0IGJlIGRlZmluZWQ6CgkgICAgPGl0ZW1pemVkbGlzdD4KCSAgICAgIDxsaXN0aXRlbT4KCSAgICAgICAgPHBhcmE+CgkJICBUaGUgIkRyaXZlcnMiIGtleSBpcyBhICc7JyBzZXBhcmF0ZWQgbGlzdCBvZiBtb2R1bGVzIG5hbWUsIGVhY2ggb2YgCgkJICB0aGVtIGNvbnRhaW5pbmcgYSBsb3cgbGV2ZWwgZHJpdmVyLiBBbGwgdGhvc2UgZHJpdmVycyB3aWxsIGJlIGxvYWRlZCAKCQkgIHdoZW4gTU1TWVNURU0vV0lOTU0gaXMgc3RhcnRlZCBhbmQgd2lsbCBwcm92aWRlIHRoZWlyIGlubmVyIGZlYXR1cmVzLgoJICAgICAgICA8L3BhcmE+CgkgICAgICA8L2xpc3RpdGVtPgoJICAgICAgPGxpc3RpdGVtPgoJICAgICAgICA8cGFyYT4KCQkgIFRoZSAiV2F2ZU1hcHBlciIgcmVwcmVzZW50cyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIGNvbnRhaW5pbmcgdGhlIFdhdmUKCQkgIE1hcHBlciBkcml2ZXIuIE9ubHkgb25lIHdhdmUgbWFwcGVyIGNhbiBiZSBkZWZpbmVkIGluIHRoZSBzeXN0ZW0uCgkgICAgICAgIDwvcGFyYT4KCSAgICAgIDwvbGlzdGl0ZW0+CgkgICAgICA8bGlzdGl0ZW0+CgkgICAgICAgIDxwYXJhPgoJCSAgVGhlICJNaWRpTWFwcGVyIiByZXByZXNlbnRzIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgY29udGFpbmluZyB0aGUgTWlkaSAKCQkgIE1hcHBlciBkcml2ZXIuIE9ubHkgb25lIE1pZGkgbWFwcGVyIGNhbiBiZSBkZWZpbmVkIGluIHRoZSBzeXN0ZW0uCgkgICAgICAgIDwvcGFyYT4KCSAgICAgIDwvbGlzdGl0ZW0+CgkgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICAgICA8L3BhcmE+Cgk8L3NlY3QzPgoKICAgICAgICA8c2VjdDM+CiAgICAgICAgICA8dGl0bGU+VGhlIFtBcHBEZWZhdWx0c10gU2VjdGlvbjwvdGl0bGU+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhlIHNlY3Rpb24gaXMgdXNlZCB0byBvdmVyd3JpdGUgdGhlIHNldHRpbmcgb2YgdGhpcyBmaWxlIGZvciBhCiAgICAgICAgICAgIHNwZWNpYWwgcHJvZ3JhbSB3aXRoIGRpZmZlcmVudCBzZXR0aW5ncy4KICAgICAgICAgICAgW0FwcERlZmF1bHRzXSBpcyBub3QgdGhlIHJlYWwgbmFtZSBvZiB0aGUgc2VjdGlvbi4gVGhlIHJlYWwgbmFtZQogICAgICAgICAgICBjb25zaXN0cyBvZiB0aGUgbGVhZGluZyB3b3JkIEFwcERlZmF1bHRzIGZvbGxvd2VkIGJ5IHRoZSBuYW1lIAogICAgICAgICAgICBvZiB0aGUgZXhlY3V0YWJsZSB0aGUgc2VjdGlvbiBpcyB2YWxpZCBmb3IuIFRoZSBlbmQgb2YgdGhlIHNlY3Rpb24KICAgICAgICAgICAgbmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgc2VjdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGl0cyAKICAgICAgICAgICAgdmFsdWVzIHNob3VsZCBiZSBvdmVyd3JpdHRlbiB3aXRoIGRpZmZlcmVudCBzZXR0aW5ncy4gVGhlIHRocmVlIAogICAgICAgICAgICBwYXJ0cyBvZiB0aGUgc2VjdGlvbiBuYW1lIGFyZSBzZXBhcmF0ZWQgYnkgdHdvIGJhY2tzbGFzaGVzLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIEN1cnJlbnRseSB3aW5lIHN1cHBvcnRzIG9ubHkgb3ZlcndyaXRpbmcgdGhlIHNlY3Rpb25zIAogICAgICAgICAgICBbRGxsT3ZlcnJpZGVzXSBhbmQgW3gxMWRydl0uCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgb3ZlcndyaXRlcyB0aGUgbm9ybWFsIHNldHRpbmdzIGZvciBhCiAgICAgICAgICAgIHByb2dyYW06CgkgICAgPHByb2dyYW1saXN0aW5nPiAKOzsgZGVmYXVsdCBzZXR0aW5ncwpbeDExZHJ2XQoiTWFuYWdlZCIgPSAiWSIKIkRlc2t0b3AiID0gIk4iCgo7OyBydW4gaW5zdGFsbCBpbiBkZXNrdG9wIG1vZGUKW0FwcERlZmF1bHRzXFxpbnN0YWxsLmV4ZVxceDExZHJ2XQoiTWFuYWdlZCIgPSAiTiIKIkRlc2t0b3AiID0gIjgwMHg2MDAiCgkgICAgPC9wcm9ncmFtbGlzdGluZz4gCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9zZWN0Mz4KICAgICAgPC9zZWN0Mj4KCiAgICAgIDxzZWN0Mj4KICAgICAgICA8dGl0bGU+V2hlcmUgRG8gSSBQdXQgSXQ/PC90aXRsZT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIFRoZSB3aW5lIGNvbmZpZyBmaWxlIGNhbiBnbyBpbiB0d28gcGxhY2VzLgogICAgICAgIDwvcGFyYT4KICAgICAgICA8dmFyaWFibGVsaXN0PgogICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHRlcm0+PGZpbGVuYW1lPi91c3IvbG9jYWwvZXRjL3dpbmUuY29uZjwvZmlsZW5hbWU+PC90ZXJtPgogICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CiAgICAgICAgICAgICAgICBBIHN5c3RlbXdpZGUgY29uZmlnIGZpbGUsIHVzZWQgZm9yIGFueW9uZSB3aG8gZG9lc24ndAogICAgICAgICAgICAgICAgaGF2ZSB0aGVpciBvd24uIE5PVEU6IHRoaXMgZmlsZSBpcyBjdXJyZW50bHkgdW51c2VkIGFzIGEKICAgICAgICAgICAgICAgIG5ldyBnbG9iYWwgY29uZmlndXJhdGlvbiBtZWNoYW5pc20gaXMgbm90IGluIHBsYWNlIGF0IHRoaXMKICAgICAgICAgICAgICAgIHRpbWUKICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx0ZXJtPjxmaWxlbmFtZT4kSE9NRS8ud2luZS9jb25maWc8L2ZpbGVuYW1lPjwvdGVybT4KICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgogICAgICAgICAgICAgICAgWW91ciBvd24gY29uZmlnIGZpbGUsIHRoYXQgb25seSBpcyB1c2VkIGZvciB5b3VyIHVzZXIuIAogICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgICAgIDxwYXJhPgogICAgICAgICAgU28gY29weSB5b3VyIHZlcnNpb24gb2YgdGhlIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHRvCiAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9sb2NhbC9ldGMvd2luZS5jb25mPC9maWxlbmFtZT4gb3IKICAgICAgICAgIDxmaWxlbmFtZT4kSE9NRS8ud2luZS9jb25maWc8L2ZpbGVuYW1lPiBmb3Igd2luZSB0byByZWNvZ25pemUKCSAgaXQuIAogICAgICAgIDwvcGFyYT4KICAgICAgPC9zZWN0Mj4KCiAgICAgIDxzZWN0Mj4KICAgICAgICA8dGl0bGU+V2hhdCBJZiBJdCBEb2Vzbid0IFdvcms/PC90aXRsZT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIFRoZXJlIGlzIGFsd2F5cyBhIGNoYW5jZSB0aGF0IHRoaW5ncyB3aWxsIGdvIHdyb25nLiBJZiB0aGUKICAgICAgICAgIHVudGhpbmthYmxlIGhhcHBlbnMgcmVwb3J0IHRoZSBwcm9ibGVtIHRvCgkgIDx1bGluayB1cmw9Imh0dHA6Ly9idWdzLndpbmVocS5jb20vIj5XaW5lIEJ1Z3ppbGxhPC91bGluaz4sCgkgIHRyeSB0aGUgbmV3c2dyb3VwCiAgICAgICAgICA8c3lzdGVtaXRlbT5jb21wLmVtdWxhdG9ycy5tcy13aW5kb3dzLndpbmU8L3N5c3RlbWl0ZW0+LAoJICBvciB0aGUgSVJDbmV0IGNoYW5uZWwgPHN5c3RlbWl0ZW0+I1dpbmVIUTwvc3lzdGVtaXRlbT4gZm91bmQgb24KICAgICAgICAgIGlyYy5zdGVhbHRoLm5ldDo2NjY4LAkgb3IgY29ubmVjdGVkIHNlcnZlcnMuCgkgIE1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIGxvb2tlZCBvdmVyIHRoaXMgZG9jdW1lbnQgdGhvcm91Z2hseSwKCSAgYW5kIGhhdmUgYWxzbyByZWFkOgogICAgICAgIDwvcGFyYT4KICAgICAgICA8aXRlbWl6ZWRsaXN0PgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT48ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT48L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICA8ZmlsZW5hbWU+aHR0cDovL3d3dy5sYS1zb3JjaWVyZS5kZS93aW5lL2luZGV4Lmh0bWw8L2ZpbGVuYW1lPgogICAgICAgICAgICAgIChvcHRpb25hbCBidXQgcmVjb21tZW5kZWQpCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBJZiBpbmRlZWQgaXQgbG9va3MgbGlrZSB5b3UndmUgZG9uZSB5b3VyIHJlc2VhcmNoLCBiZQogICAgICAgICAgcHJlcGFyZWQgZm9yIGhlbHBmdWwgc3VnZ2VzdGlvbnMuIElmIHlvdSBoYXZlbid0LCBicmFjZQogICAgICAgICAgeW91cnNlbGYgZm9yIGhlYXZpbmcgZmxhbWluZy4KICAgICAgICA8L3BhcmE+CiAgICAgIDwvc2VjdDI+CiAgICA8L3NlY3QxPgoKICAgIDxzZWN0MSBpZD0ieDExZHJ2Ij4KICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIHRoZSB4MTFkcnYgRHJpdmVyPC90aXRsZT4KCiAgICAgIDxwYXJhPgogICAgICAgIFdyaXR0ZW4gYnkgJm5hbWUtb3ZlLWthYXZlbjsgPGVtYWlsPiZlbWFpbC1vdmUta2FhdmVuOzwvZW1haWw+CiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgKEV4dHJhY3RlZCBmcm9tIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24veDExZHJ2PC9maWxlbmFtZT4pCiAgICAgIDwvcGFyYT4KCiAgICAgIDxwYXJhPgogICAgICAgIE1vc3QgV2luZSB1c2VycyBydW4gV2luZSB1bmRlciB0aGUgd2luZG93aW5nIHN5c3RlbSBrbm93biBhcwogICAgICAgIFgxMS4gRHVyaW5nIG1vc3Qgb2YgV2luZSdzIGhpc3RvcnksIHRoaXMgd2FzIHRoZSBvbmx5IGRpc3BsYXkKICAgICAgICBkcml2ZXIgYXZhaWxhYmxlLCBidXQgaW4gcmVjZW50IHllYXJzLCBwYXJ0cyBvZiBXaW5lIGhhcyBiZWVuCiAgICAgICAgcmVvcmdhbml6ZWQgdG8gYWxsb3cgZm9yIG90aGVyIGRpc3BsYXkgZHJpdmVycyAoYWx0aG91Z2ggdGhlCiAgICAgICAgb25seSBhbHRlcm5hdGl2ZSBjdXJyZW50bHkgYXZhaWxhYmxlIGlzIFBhdHJpayBTdHJpZHZhbGwncwogICAgICAgIG5jdXJzZXMtYmFzZWQgdHR5ZHJ2LCB3aGljaCBoZSBjbGFpbXMgd29ya3MgZm9yIGRpc3BsYXlpbmcKICAgICAgICBjYWxjLmV4ZSkuIFRoZSBkaXNwbGF5IGRyaXZlciBpcyBjaG9zZW4gd2l0aCB0aGUKICAgICAgICA8bGl0ZXJhbD5HcmFwaGljc0RyaXZlcjwvbGl0ZXJhbD4gb3B0aW9uIGluIHRoZSBbd2luZV0gc2VjdGlvbgogICAgICAgIG9mIDxmaWxlbmFtZT5+Ly53aW5lL2NvbmZpZzwvZmlsZW5hbWU+LCBidXQgSSB3aWxsIG9ubHkgY292ZXIgdGhlCiAgICAgICAgeDExZHJ2IGRyaXZlciBpbiB0aGlzIGFydGljbGUuCiAgICAgIDwvcGFyYT4KCiAgICAgIDxzZWN0Mj4KICAgICAgICA8dGl0bGU+eDExZHJ2IG1vZGVzIG9mIG9wZXJhdGlvbjwvdGl0bGU+CgogICAgICAgIDxwYXJhPgogICAgICAgICAgPCEtLSBGSVhNRTogVGhpcyBpcyBvdXRkYXRlZCAtLT4KICAgICAgICAgIE5vdGU6IFRoaXMgaXMgbm93IGFsbCBkb25lIGluIHRoZSBjb25maWcgZmlsZS4gTmVlZHMgYW4gdXBkYXRlLi4uCiAgICAgICAgPC9wYXJhPgoKICAgICAgICA8cGFyYT4KICAgICAgICAgIFRoZSB4MTFkcnYgZHJpdmVyIGNvbnNpc3RzIG9mIHR3byBjb25jZXB0dWFsbHkgZGlzdGluY3QKICAgICAgICAgIHBpZWNlcywgdGhlIGdyYXBoaWNzIGRyaXZlciAoR0RJIHBhcnQpLCBhbmQgdGhlIHdpbmRvd2luZwogICAgICAgICAgZHJpdmVyIChVU0VSIHBhcnQpLiBCb3RoIG9mIHRoZXNlIGFyZSBsaW5rZWQgaW50byB0aGUKICAgICAgICAgIDxmaWxlbmFtZT5saWJ4MTFkcnYuc288L2ZpbGVuYW1lPiBtb2R1bGUsIHRob3VnaCAod2hpY2ggeW91CiAgICAgICAgICBsb2FkIHdpdGggdGhlIDxsaXRlcmFsPkdyYXBoaWNzRHJpdmVyPC9saXRlcmFsPiBvcHRpb24pLiBJbgogICAgICAgICAgV2luZSwgcnVubmluZyBvbiBYMTEsIHRoZSBncmFwaGljcyBkcml2ZXIgbXVzdCBkcmF3IG9uCiAgICAgICAgICBkcmF3YWJsZXMgKHdpbmRvdyBpbnRlcmlvcnMpIHByb3ZpZGVkIGJ5IHRoZSB3aW5kb3dpbmcKICAgICAgICAgIGRyaXZlci4gVGhpcyBkaWZmZXJzIGEgYml0IGZyb20gdGhlIFdpbmRvd3MgbW9kZWwsIHdoZXJlIHRoZQogICAgICAgICAgd2luZG93aW5nIHN5c3RlbSBjcmVhdGVzIGFuZCBjb25maWd1cmVzIGRldmljZSBjb250ZXh0cwogICAgICAgICAgY29udHJvbGxlZCBieSB0aGUgZ3JhcGhpY3MgZHJpdmVyLCBhbmQgYXBwbGljYXRpb25zIGFyZQogICAgICAgICAgYWxsb3dlZCB0byBob29rIGludG8gdGhpcyByZWxhdGlvbnNoaXAgYW55d2hlcmUgdGhleSBsaWtlLgogICAgICAgICAgVGh1cywgdG8gcHJvdmlkZSBhbnkgcmVhc29uYWJsZSB0cmFkZW9mZiBiZXR3ZWVuCiAgICAgICAgICBjb21wYXRpYmlsaXR5IGFuZCB1c2FiaWxpdHksIHRoZSB4MTFkcnYgaGFzIHRocmVlIGRpZmZlcmVudAogICAgICAgICAgbW9kZXMgb2Ygb3BlcmF0aW9uLgogICAgICAgIDwvcGFyYT4KCiAgICAgICAgPHZhcmlhYmxlbGlzdD4KICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx0ZXJtPlVubWFuYWdlZC9Ob3JtYWw8L3Rlcm0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0LiBXaW5kb3ctbWFuYWdlci1pbmRlcGVuZGVudCAoYW55IHJ1bm5pbmcKICAgICAgICAgICAgICAgIHdpbmRvdyBtYW5hZ2VyIGlzIGlnbm9yZWQgY29tcGxldGVseSkuIFdpbmRvdwogICAgICAgICAgICAgICAgZGVjb3JhdGlvbnMgKHRpdGxlIGJhcnMsIGJvcmRlcnMsIGV0YykgYXJlIGRyYXduIGJ5CiAgICAgICAgICAgICAgICBXaW5lIHRvIGxvb2sgYW5kIGZlZWwgbGlrZSB0aGUgcmVhbCBXaW5kb3dzLiBUaGlzIGlzCiAgICAgICAgICAgICAgICBjb21wYXRpYmxlIHdpdGggYXBwbGljYXRpb25zIHRoYXQgZGVwZW5kIG9uIGJlaW5nIGFibGUKICAgICAgICAgICAgICAgIHRvIGNvbXB1dGUgdGhlIGV4YWN0IHNpemVzIG9mIGFueSBzdWNoIGRlY29yYXRpb25zLCBvcgogICAgICAgICAgICAgICAgdGhhdCB3YW50IHRvIGRyYXcgdGhlaXIgb3duLgogICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDwvdmFybGlzdGVudHJ5PiAgICAgICAgICAKICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx0ZXJtPk1hbmFnZWQ8L3Rlcm0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIFNwZWNpZmllZCBieSB1c2luZyB0aGUKICAgICAgICAgICAgICAgIDxwYXJhbWV0ZXI+LS1tYW5hZ2VkPC9wYXJhbWV0ZXI+IGNvbW1hbmQtbGluZSBvcHRpb24KICAgICAgICAgICAgICAgIG9yIHRoZSA8bGl0ZXJhbD5NYW5hZ2VkPC9saXRlcmFsPgogICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpbmUuY29uZjwvZmlsZW5hbWU+IG9wdGlvbiAoc2VlIGJlbG93KS4KICAgICAgICAgICAgICAgIE9yZGluYXJ5IHRvcC1sZXZlbCBmcmFtZSB3aW5kb3dzIHdpdGggdGhpY2sgYm9yZGVycywKICAgICAgICAgICAgICAgIHRpdGxlIGJhcnMsIGFuZCBzeXN0ZW0gbWVudXMgd2lsbCBiZSBtYW5hZ2VkIGJ5IHlvdXIKICAgICAgICAgICAgICAgIHdpbmRvdyBtYW5hZ2VyLiBUaGlzIGxldHMgdGhlc2UgYXBwbGljYXRpb25zIGludGVncmF0ZQogICAgICAgICAgICAgICAgYmV0dGVyIHdpdGggdGhlIHJlc3Qgb2YgeW91ciBkZXNrdG9wLCBidXQgbWF5IG5vdAogICAgICAgICAgICAgICAgYWx3YXlzIHdvcmsgcGVyZmVjdGx5LiAoQSByZXdyaXRlIG9mIHRoaXMgbW9kZSBvZgogICAgICAgICAgICAgICAgb3BlcmF0aW9uLCB0byBtYWtlIGl0IG1vcmUgcm9idXN0IGFuZCBsZXNzIHBhdGNoeSwgaXMKICAgICAgICAgICAgICAgIGhpZ2hseSBkZXNpcmFibGUsIHRob3VnaCwgYW5kIGlzIHBsYW5uZWQgdG8gYmUgZG9uZQogICAgICAgICAgICAgICAgYmVmb3JlIHRoZSBXaW5lIDEuMCByZWxlYXNlLikKICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx0ZXJtPkRlc2t0b3AtaW4tYS1Cb3g8L3Rlcm0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIFNwZWNpZmllZCBieSB1c2luZyB0aGUKICAgICAgICAgICAgICAgIDxwYXJhbWV0ZXI+LS1kZXNrdG9wPC9wYXJhbWV0ZXI+IGNvbW1hbmQtbGluZSBvcHRpb24KICAgICAgICAgICAgICAgICh3aXRoIGEgZ2VvbWV0cnksIGUuZy4gPHBhcmFtZXRlcj4tLWRlc2t0b3AKICAgICAgICAgICAgICAgICAgODAweDYwMDwvcGFyYW1ldGVyPiBmb3IgYSBzdWNoLXNpemVkIGRlc2t0b3AsIG9yCiAgICAgICAgICAgICAgICBldmVuIDxwYXJhbWV0ZXI+LS1kZXNrdG9wIDgwMHg2MDArMCswPC9wYXJhbWV0ZXI+IHRvCiAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IHBvc2l0aW9uIHRoZSBkZXNrdG9wIGF0IHRoZSB1cHBlci1sZWZ0CiAgICAgICAgICAgICAgICBjb3JuZXIgb2YgdGhlIGRpc3BsYXkpLiBUaGlzIGlzIHRoZSBtb2RlIG1vc3QKICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgd2l0aCB0aGUgV2luZG93cyBtb2RlbC4gQWxsIGFwcGxpY2F0aW9uCiAgICAgICAgICAgICAgICB3aW5kb3dzIHdpbGwganVzdCBiZSBXaW5lLWRyYXduIHdpbmRvd3MgaW5zaWRlIHRoZQogICAgICAgICAgICAgICAgV2luZS1wcm92aWRlZCBkZXNrdG9wIHdpbmRvdyAod2hpY2ggd2lsbCBpdHNlbGYgYmUKICAgICAgICAgICAgICAgIG1hbmFnZWQgYnkgeW91ciB3aW5kb3cgbWFuYWdlciksIGFuZCBXaW5kb3dzCiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbnMgY2FuIHJvYW0gZnJlZWx5IHdpdGhpbiB0aGlzIHZpcnR1YWwKICAgICAgICAgICAgICAgIHdvcmtzcGFjZSBhbmQgdGhpbmsgdGhleSBvd24gaXQgYWxsLCB3aXRob3V0CiAgICAgICAgICAgICAgICBkaXN0dXJiaW5nIHlvdXIgb3RoZXIgWCBhcHBzLgogICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyPgogICAgICAgIDx0aXRsZT5UaGUgW3gxMWRydl0gc2VjdGlvbjwvdGl0bGU+CgogICAgICAgIDx2YXJpYWJsZWxpc3Q+CiAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dGVybT5BbGxvY1N5c3RlbUNvbG9yczwvdGVybT4KICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgQXBwbGllcyBvbmx5IGlmIHlvdSBoYXZlIGEgcGFsZXR0ZS1iYXNlZCBkaXNwbGF5LCBpLmUuCiAgICAgICAgICAgICAgICBpZiB5b3VyIFggc2VydmVyIGlzIHNldCB0byBhIGRlcHRoIG9mIDhicHAsIGFuZCBpZiB5b3UKICAgICAgICAgICAgICAgIGhhdmVuJ3QgcmVxdWVzdGVkIGEgcHJpdmF0ZSBjb2xvciBtYXAuIEl0IHNwZWNpZmllcwogICAgICAgICAgICAgICAgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNoYXJlZCBjb2xvcm1hcCBjZWxscyAocGFsZXR0ZQogICAgICAgICAgICAgICAgZW50cmllcykgV2luZSBzaG91bGQgb2NjdXB5LiBUaGUgaGlnaGVyIHRoaXMgdmFsdWUsCiAgICAgICAgICAgICAgICB0aGUgbGVzcyBjb2xvcnMgd2lsbCBiZSBhdmFpbGFibGUgdG8gb3RoZXIKICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9ucy4KICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4gICAgICAgICAgCiAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dGVybT5Qcml2YXRlQ29sb3JNYXA8L3Rlcm0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIEFwcGxpZXMgb25seSBpZiB5b3UgaGF2ZSBhIHBhbGV0dGUtYmFzZWQgZGlzcGxheSwgaS5lLgogICAgICAgICAgICAgICAgaWYgeW91ciBYIHNlcnZlciBpcyBzZXQgdG8gYSBkZXB0aCBvZiA4YnBwLiBJdAogICAgICAgICAgICAgICAgc3BlY2lmaWVzIHRoYXQgeW91IGRvbid0IHdhbnQgdG8gdXNlIHRoZSBzaGFyZWQgY29sb3IKICAgICAgICAgICAgICAgIG1hcCwgYnV0IGEgcHJpdmF0ZSBjb2xvciBtYXAsIHdoZXJlIGFsbCAyNTYgY29sb3JzIGFyZQogICAgICAgICAgICAgICAgYXZhaWxhYmxlLiBUaGUgZGlzYWR2YW50YWdlIGlzIHRoYXQgV2luZSdzIHByaXZhdGUKICAgICAgICAgICAgICAgIGNvbG9yIG1hcCBpcyBvbmx5IHNlZW4gd2hpbGUgdGhlIG1vdXNlIHBvaW50ZXIgaXMKICAgICAgICAgICAgICAgIGluc2lkZSBhIFdpbmUgd2luZG93LCBzbyBwc3ljaGVkZWxpYyBmbGFzaGluZyBhbmQKICAgICAgICAgICAgICAgIGZ1bmt5IGNvbG9ycyB3aWxsIGJlY29tZSByb3V0aW5lIGlmIHlvdSB1c2UgdGhlIG1vdXNlCiAgICAgICAgICAgICAgICBhIGxvdC4KICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4gICAgICAgICAgCiAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dGVybT5QZXJmZWN0R3JhcGhpY3M8L3Rlcm0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIG9ubHkgZGV0ZXJtaW5lcyB3aGV0aGVyIGZhc3QgWDExIHJvdXRpbmVzCiAgICAgICAgICAgICAgICBvciBleGFjdCBXaW5lIHJvdXRpbmVzIHdpbGwgYmUgdXNlZCBmb3IgY2VydGFpbiBST1AKICAgICAgICAgICAgICAgIGNvZGVzIGluIGJsaXQgb3BlcmF0aW9ucy4gTW9zdCB1c2VycyB3b24ndCBub3RpY2UgYW55CiAgICAgICAgICAgICAgICBkaWZmZXJlbmNlLgogICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDwvdmFybGlzdGVudHJ5PiAgICAgICAgICAKICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx0ZXJtPlNjcmVlbkRlcHRoPC90ZXJtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBBcHBsaWVzIG9ubHkgdG8gbXVsdGktZGVwdGggZGlzcGxheXMuIEl0IHNwZWNpZmllcwogICAgICAgICAgICAgICAgd2hpY2ggb2YgdGhlIGF2YWlsYWJsZSBkZXB0aHMgV2luZSBzaG91bGQgdXNlIChhbmQKICAgICAgICAgICAgICAgIHRlbGwgV2luZG93cyBhcHBzIGFib3V0KS4KICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4gICAgICAgICAgCiAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dGVybT5EaXNwbGF5PC90ZXJtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBUaGlzIHNwZWNpZmllcyB3aGljaCBYMTEgZGlzcGxheSB0byB1c2UsIGFuZCBpZgogICAgICAgICAgICAgICAgc3BlY2lmaWVkLCB3aWxsIG92ZXJyaWRlIGJvdGggdGhlCiAgICAgICAgICAgICAgICA8ZW52YXI+RElTUExBWTwvZW52YXI+IGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCB0aGUKICAgICAgICAgICAgICAgIDxwYXJhbWV0ZXI+LS1kaXNwbGF5PC9wYXJhbWV0ZXI+IGNvbW1hbmQtbGluZSBvcHRpb24uCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAogICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHRlcm0+TWFuYWdlZDwvdGVybT4KICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgV2luZSBjYW4gbGV0IGZyYW1lIHdpbmRvd3MgYmUgbWFuYWdlZCBieSB5b3VyIHdpbmRvdwogICAgICAgICAgICAgICAgbWFuYWdlci4gVGhpcyBvcHRpb24gc3BlY2lmaWVzIHdoZXRoZXIgeW91IHdhbnQgdGhhdAogICAgICAgICAgICAgICAgYnkgZGVmYXVsdC4KICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4gICAgICAgICAgCiAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dGVybT5Vc2VER0E8L3Rlcm0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIFRoaXMgc3BlY2lmaWVzIHdoZXRoZXIgeW91IHdhbnQgRGlyZWN0RHJhdyB0byB1c2UKICAgICAgICAgICAgICAgIFhGcmVlODYncyA8Zmlyc3R0ZXJtPkRpcmVjdCBHcmFwaGljcwogICAgICAgICAgICAgICAgICBBcmNoaXRlY3R1cmU8L2ZpcnN0dGVybT4gKERHQSksIHdoaWNoIGlzIGFibGUgdG8KICAgICAgICAgICAgICAgIHRha2Ugb3ZlciB0aGUgZW50aXJlIGRpc3BsYXkgYW5kIHJ1biB0aGUgZ2FtZQogICAgICAgICAgICAgICAgZnVsbC1zY3JlZW4gYXQgbWF4aW11bSBzcGVlZC4gKFdpdGggREdBMSAoWEZyZWU4NgogICAgICAgICAgICAgICAgMy54KSwgeW91IHN0aWxsIGhhdmUgdG8gY29uZmlndXJlIHRoZSBYIHNlcnZlciB0byB0aGUKICAgICAgICAgICAgICAgIGdhbWUncyByZXF1ZXN0ZWQgYnBwIGZpcnN0LCBidXQgd2l0aCBER0EyIChYRnJlZTg2CiAgICAgICAgICAgICAgICA0LngpLCBydW50aW1lIGRlcHRoLXN3aXRjaGluZyBtYXkgYmUgcG9zc2libGUsCiAgICAgICAgICAgICAgICBkZXBlbmRpbmcgb24geW91ciBkcml2ZXIncyBjYXBhYmlsaXRpZXMuKSBCdXQgYmUgYXdhcmUKICAgICAgICAgICAgICAgIHRoYXQgaWYgV2luZSBjcmFzaGVzIHdoaWxlIGluIERHQSBtb2RlLCBpdCBtYXkgbm90IGJlCiAgICAgICAgICAgICAgICBwb3NzaWJsZSB0byByZWdhaW4gY29udHJvbCBvdmVyIHlvdXIgY29tcHV0ZXIgd2l0aG91dAogICAgICAgICAgICAgICAgcmVib290aW5nLiBER0Egbm9ybWFsbHkgcmVxdWlyZXMgZWl0aGVyIHJvb3QKICAgICAgICAgICAgICAgIHByaXZpbGVnZXMgb3IgcmVhZC93cml0ZSBhY2Nlc3MgdG8KICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZGV2L21lbTwvZmlsZW5hbWU+LgogICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDwvdmFybGlzdGVudHJ5PiAgICAgICAgICAKICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx0ZXJtPlVzZVhTaG08L3Rlcm0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIElmIHlvdSBkb24ndCB3YW50IERpcmVjdFggdG8gdXNlIERHQSwgeW91IGNhbiBhdCBsZWFzdAogICAgICAgICAgICAgICAgdXNlIFggU2hhcmVkIE1lbW9yeSBleHRlbnNpb25zIChYU2htKS4gSXQgaXMgbXVjaAogICAgICAgICAgICAgICAgc2xvd2VyIHRoYW4gREdBLCBzaW5jZSB0aGUgYXBwIGRvZXNuJ3QgaGF2ZSBkaXJlY3QKICAgICAgICAgICAgICAgIGFjY2VzcyB0byB0aGUgcGh5c2ljYWwgZnJhbWUgYnVmZmVyLCBidXQgdXNpbmcgc2hhcmVkCiAgICAgICAgICAgICAgICBtZW1vcnkgdG8gZHJhdyB0aGUgZnJhbWUgaXMgYXQgbGVhc3QgZmFzdGVyIHRoYW4KICAgICAgICAgICAgICAgIHNlbmRpbmcgdGhlIGRhdGEgdGhyb3VnaCB0aGUgc3RhbmRhcmQgWDExIHNvY2tldCwgZXZlbgogICAgICAgICAgICAgICAgdGhvdWdoIFdpbmUncyBYU2htIHN1cHBvcnQgaXMgc3RpbGwga25vd24gdG8gY3Jhc2gKICAgICAgICAgICAgICAgIHNvbWV0aW1lcy4KICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4gICAgICAgICAgCiAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dGVybT5EWEdyYWI8L3Rlcm0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIElmIHlvdSBkb24ndCB1c2UgREdBLCB5b3UgbWF5IHdhbnQgYW4gYWx0ZXJuYXRpdmUKICAgICAgICAgICAgICAgIG1lYW5zIHRvIGNvbnZpbmNlIHRoZSBtb3VzZSBjdXJzb3IgdG8gc3RheSB3aXRoaW4gdGhlCiAgICAgICAgICAgICAgICBnYW1lIHdpbmRvdy4gVGhpcyBvcHRpb24gZG9lcyB0aGF0LiBPZiBjb3Vyc2UsIGFzIHdpdGgKICAgICAgICAgICAgICAgIERHQSwgaWYgV2luZSBjcmFzaGVzLCB5b3UncmUgaW4gdHJvdWJsZSAoYWx0aG91Z2ggbm90CiAgICAgICAgICAgICAgICBhcyBiYWRseSBhcyBpbiB0aGUgREdBIGNhc2UsIHNpbmNlIHlvdSBjYW4gc3RpbGwgdXNlCiAgICAgICAgICAgICAgICB0aGUga2V5Ym9hcmQgdG8gZ2V0IG91dCBvZiBYKS4KICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4gICAgICAgICAgCiAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dGVybT5EZXNrdG9wRG91YmxlQnVmZmVyZWQ8L3Rlcm0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIEFwcGxpZXMgb25seSBpZiB5b3UgdXNlIHRoZQogICAgICAgICAgICAgICAgPHBhcmFtZXRlcj4tLWRlc2t0b3A8L3BhcmFtZXRlcj4gY29tbWFuZC1saW5lIG9wdGlvbgogICAgICAgICAgICAgICAgdG8gcnVuIGluIGEgZGVza3RvcCB3aW5kb3cuIFNwZWNpZmllcyB3aGV0aGVyIHRvCiAgICAgICAgICAgICAgICBjcmVhdGUgdGhlIGRlc2t0b3Agd2luZG93IHdpdGggYSBkb3VibGUtYnVmZmVyZWQKICAgICAgICAgICAgICAgIHZpc3VhbCwgc29tZXRoaW5nIG1vc3QgT3BlbkdMIGdhbWVzIG5lZWQgdG8gcnVuCiAgICAgICAgICAgICAgICBjb3JyZWN0bHkuCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dGVybT5UZXh0Q1A8L3Rlcm0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIDwhLS0gRklYTUU6IFRvIGJlIGRvY3VtZW50ZWQgLS0+CiAgICAgICAgICAgICAgICBUbyBiZSBkb2N1bWVudGVkLi4uCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dGVybT5YVmlkZW9Qb3J0PC90ZXJtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICA8IS0tIEZJWE1FOiBUbyBiZSBkb2N1bWVudGVkIC0tPgogICAgICAgICAgICAgICAgVG8gYmUgZG9jdW1lbnRlZC4uLgogICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHRlcm0+U3luY2hyb25vdXM8L3Rlcm0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIDwhLS0gRklYTUU6IFRvIGJlIGRvY3VtZW50ZWQgLS0+CiAgICAgICAgICAgICAgICBUbyBiZSBkb2N1bWVudGVkLi4uCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgPC92YXJpYWJsZWxpc3Q+CiAgICAgIDwvc2VjdDI+ICAgICAgICAgIAogICAgPC9zZWN0MT4KCiAgICAmcmVnaXN0cnk7CgogICAgPHNlY3QxIGlkPSJjZHJvbS1sYWJlbHMiPgogICAgICA8c2VjdDFpbmZvPgogICAgICAgIDxhdXRob3Jncm91cD4KICAgICAgICAgIDxhdXRob3I+CiAgICAgICAgICAgIDxmaXJzdG5hbWU+UGV0cjwvZmlyc3RuYW1lPgogICAgICAgICAgICA8c3VybmFtZT5Ub21hc2VrPC9zdXJuYW1lPgogICAgICAgICAgICA8YWZmaWxpYXRpb24+CiAgICAgICAgICAgICAgPGFkZHJlc3M+PGVtYWlsPiZlbWFpbC1wZXRyLXRvbWFzZWs7PC9lbWFpbD48L2FkZHJlc3M+CiAgICAgICAgICAgIDwvYWZmaWxpYXRpb24+CiAgICAgICAgICAgIDxjb250cmliPk5vdiAxNCAxOTk5PC9jb250cmliPgogICAgICAgICAgPC9hdXRob3I+CiAgICAgICAgICA8YXV0aG9yPgogICAgICAgICAgICA8Zmlyc3RuYW1lPkFuZHJlYXM8L2ZpcnN0bmFtZT4KICAgICAgICAgICAgPHN1cm5hbWU+TW9ocjwvc3VybmFtZT4KICAgICAgICAgICAgPGFmZmlsaWF0aW9uPgogICAgICAgICAgICAgIDxhZGRyZXNzPjxlbWFpbD4mZW1haWwtYW5kcmVhcy1tb2hyOzwvZW1haWw+PC9hZGRyZXNzPgogICAgICAgICAgICA8L2FmZmlsaWF0aW9uPgogICAgICAgICAgICA8Y29udHJpYj5KYW4gMjUgMjAwMDwvY29udHJpYj4KICAgICAgICAgIDwvYXV0aG9yPgogICAgICAgIDwvYXV0aG9yZ3JvdXA+CiAgICAgIDwvc2VjdDFpbmZvPgoKICAgICAgPHRpdGxlPkRyaXZlIGxhYmVscyBhbmQgc2VyaWFsIG51bWJlcnMgd2l0aCB3aW5lPC90aXRsZT4KICAgICAgPHBhcmE+CiAgICAgICAgV3JpdHRlbiBieSAmbmFtZS1wZXRyLXRvbWFzZWs7IDxlbWFpbD4mZW1haWwtcGV0ci10b21hc2VrOzwvZW1haWw+CiAgICAgICAgTm92IDE0IDE5OTkKICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBDaGFuZ2VzIGJ5ICZuYW1lLWFuZHJlYXMtbW9ocjsgPGVtYWlsPiZlbWFpbC1hbmRyZWFzLW1vaHI7PC9lbWFpbD4KICAgICAgICBKYW4gMjUgMjAwMAogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIChFeHRyYWN0ZWQgZnJvbSA8ZmlsZW5hbWU+d2luZS9kb2N1bWVudGF0aW9uL2Nkcm9tLWxhYmVsczwvZmlsZW5hbWU+KQogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIFVudGlsIG5vdywgeW91ciBvbmx5IHBvc3NpYmlsaXR5IG9mIHNwZWNpZnlpbmcgZHJpdmUgdm9sdW1lCiAgICAgICAgbGFiZWxzIGFuZCBzZXJpYWwgbnVtYmVycyB3YXMgdG8gc2V0IHRoZW0gbWFudWFsbHkgaW4gdGhlIHdpbmUKICAgICAgICBjb25maWcgZmlsZS4gQnkgbm93LCB3aW5lIGNhbiByZWFkIHRoZW0gZGlyZWN0bHkgZnJvbSB0aGUKICAgICAgICBkZXZpY2UgYXMgd2VsbC4gVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBtYW55IFdpbiA5eCBnYW1lcyBvcgogICAgICAgIGZvciBzZXR1cCBwcm9ncmFtcyBkaXN0cmlidXRlZCBvbiBDRC1ST01zIHRoYXQgY2hlY2sgZm9yCiAgICAgICAgdm9sdW1lIGxhYmVsLgogICAgICA8L3BhcmE+CgogICAgICA8c2VjdDI+CiAgICAgICAgPHRpdGxlPldoYXQncyBTdXBwb3J0ZWQ/PC90aXRsZT4KCiAgICAgICAgPGluZm9ybWFsdGFibGUgZnJhbWU9ImFsbCI+CiAgICAgICAgICA8dGdyb3VwIGNvbHM9IjMiPgogICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5GaWxlIFN5c3RlbTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+VHlwZXM8L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PkNvbW1lbnQ8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5GQVQgc3lzdGVtczwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+aGQsIGZsb3BweTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+cmVhZHMgbGFiZWxzIGFuZCBzZXJpYWwgbnVtYmVyczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5JU085NjYwPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5jZHJvbTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+cmVhZHMgbGFiZWxzIGFuZCBzZXJpYWwgbnVtYmVycyAobm90IG1peGVkLW1vZGUgQ0RzIHlldCAhKTwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICA8L3Rncm91cD4KICAgICAgICA8L2luZm9ybWFsdGFibGU+CgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyPgogICAgICAgIDx0aXRsZT5Ib3cgVG8gU2V0IFVwPzwvdGl0bGU+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBSZWFkaW5nIGxhYmVscyBhbmQgc2VyaWFsIG51bWJlcnMganVzdCB3b3JrcyBhdXRvbWFnaWNhbGx5CiAgICAgICAgICBpZiB5b3Ugc3BlY2lmeSBhIDxsaXRlcmFsPkRldmljZT08L2xpdGVyYWw+IGxpbmUgaW4gdGhlCiAgICAgICAgICBbRHJpdmUgWF0gc2VjdGlvbiBpbiB5b3VyIDxmaWxlbmFtZT5+Ly53aW5lL2NvbmZpZzwvZmlsZW5hbWU+LgogICAgICAgICAgTm90ZSB0aGF0IHRoZSBkZXZpY2UgaGFzIHRvIGV4aXN0IGFuZCBtdXN0IGJlIGFjY2Vzc2libGUgaWYKICAgICAgICAgIHlvdSBkbyB0aGlzLCB0aG91Z2guCiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgogICAgICAgICAgSWYgeW91IGRvbid0IGRvIHRoYXQsIHRoZW4geW91IHNob3VsZCBnaXZlIGZpeGVkCiAgICAgICAgICA8bGl0ZXJhbD4iTGFiZWwiID08L2xpdGVyYWw+IG9yIDxsaXRlcmFsPiJTZXJpYWwiID08L2xpdGVyYWw+CiAgICAgICAgICBlbnRyaWVzIGluIDxmaWxlbmFtZT5+Li93aW5lL2NvbmZpZzwvZmlsZW5hbWU+LCBhcyBXaW5lIHJldHVybnMKICAgICAgICAgIHRoZXNlIGVudHJpZXMgaW5zdGVhZCBpZiBubyBkZXZpY2UgaXMgZ2l2ZW4uIElmIHRoZXkgZG9uJ3QKICAgICAgICAgIGV4aXN0LCB0aGVuIFdpbmUgd2lsbCByZXR1cm4gZGVmYXVsdCB2YWx1ZXMgKGxhYmVsCiAgICAgICAgICA8bGl0ZXJhbD5Ecml2ZSBYPC9saXRlcmFsPiBhbmQgc2VyaWFsCiAgICAgICAgICA8bGl0ZXJhbD4xMjM0NTY3ODwvbGl0ZXJhbD4pLgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIElmIHlvdSB3YW50IHRvIGdpdmUgYSA8bGl0ZXJhbD4iRGV2aWNlIiA9PC9saXRlcmFsPiBlbnRyeQogICAgICAgICAgPGVtcGhhc2lzPm9ubHk8L2VtcGhhc2lzPiBmb3IgZHJpdmUgcmF3IHNlY3RvciBhY2Nlc3NlcywKCSAgYnV0IG5vdCBmb3IgcmVhZGluZyB0aGUgdm9sdW1lIGluZm8gZnJvbSB0aGUgZGV2aWNlIChpLmUuIHlvdSB3YW50CgkgIGEgPGVtcGhhc2lzPmZpeGVkPC9lbXBoYXNpcz4sIHByZWNvbmZpZ3VyZWQgbGFiZWwpLCB5b3UgbmVlZAogICAgICAgICAgdG8gc3BlY2lmeSA8bGl0ZXJhbD4iUmVhZFZvbEluZm8iID0gIjAiPC9saXRlcmFsPiB0byB0ZWxsIFdpbmUKICAgICAgICAgIHRvIHNraXAgdGhlIHZvbHVtZSByZWFkaW5nLgogICAgICAgIDwvcGFyYT4KICAgICAgPC9zZWN0Mj4KCiAgICAgIDxzZWN0Mj4KICAgICAgICA8dGl0bGU+RVhBTVBMRVM8L3RpdGxlPgogICAgICAgIDxwYXJhPgogICAgICAgICAgSGVyZSdzIGEgc2ltcGxlIGV4YW1wbGUgb2YgY2Ryb20gYW5kIGZsb3BweTsgbGFiZWxzIHdpbGwgYmUKICAgICAgICAgIHJlYWQgZnJvbSB0aGUgZGV2aWNlIG9uIGJvdGggY2Ryb20gYW5kIGZsb3BweTsgc2VyaWFsCiAgICAgICAgICBudW1iZXJzIG9uIGZsb3BweSBvbmx5OgogICAgICAgIDwvcGFyYT4KICAgICAgICA8c2NyZWVuPgpbRHJpdmUgQV0KIlBhdGgiID0gIi9tbnQvZmxvcHB5IgoiVHlwZSIgPSAiZmxvcHB5IgoiRGV2aWNlIiA9ICIvZGV2L2ZkMCIKIkZpbGVzeXN0ZW0iID0gIm1zZG9zIgoKW0RyaXZlIFJdCiJQYXRoIiA9ICIvbW50L2Nkcm9tIgoiVHlwZSIgPSAiY2Ryb20iCiJEZXZpY2UiID0gIi9kZXYvaGRhMSIKIkZpbGVzeXN0ZW0iID0gIndpbjk1IgogICAgICAgIDwvc2NyZWVuPgogICAgICAgIDxwYXJhPgogICAgICAgICAgSGVyZSdzIGFuIGV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgQ0QtUk9NIGxhYmVsOgogICAgICAgIDwvcGFyYT4KICAgICAgICA8c2NyZWVuPgpbRHJpdmUgSl0KIlBhdGgiID0gIi9tbnQvY2Ryb20iCiJUeXBlIiA9ICJjZHJvbSIKIkxhYmVsIiA9ICJYMjM0R0NEU0UiCjsgbm90ZSB0aGF0IHRoZSBkZXZpY2UgaXNuJ3QgcmVhbGx5IG5lZWRlZCBoZXJlIGFzIHdlIGhhdmUgYSBmaXhlZCBsYWJlbAoiRGV2aWNlIiA9ICIvZGV2L2Nkcm9tIgoiRmlsZXN5c3RlbSIgPSAibXNkb3MiCiAgICAgICAgPC9zY3JlZW4+CiAgICAgIDwvc2VjdDI+CgogICAgICA8c2VjdDI+CiAgICAgICAgPHRpdGxlPlRvZG8gLyBPcGVuIElzc3VlczwvdGl0bGU+CiAgICAgICAgPGl0ZW1pemVkbGlzdD4KICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgVGhlIGNkcm9tIGxhYmVsIGNhbiBiZSByZWFkIG9ubHkgaWYgdGhlIGRhdGEgdHJhY2sgb2YKICAgICAgICAgICAgICB0aGUgZGlzayByZXNpZGVzIGluIHRoZSBmaXJzdCB0cmFjayBhbmQgdGhlIGNkcm9tIGlzCiAgICAgICAgICAgICAgaXNvOTY2MC4KICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICBCZXR0ZXIgY2hlY2tpbmcgZm9yIEZBVCBzdXBlcmJsb2NrIChpdCBub3cgY2hlY2tzIG9ubHkKICAgICAgICAgICAgICBvbmUgYnl0ZSkuIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgIFN1cHBvcnQgZm9yIGxhYmVscy9zZXJpYWwgbnVtcyBXUklUSU5HLgogICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgIENhbiB0aGUgbGFiZWwgYmUgbG9uZ2VyIHRoYW4gMTEgY2hhcnM/IChpc285NjYwIGhhcyAzMgogICAgICAgICAgICAgIGNoYXJzKS4KICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICBXaGF0IGFib3V0IHJlYWRpbmcgZXh0MiB2b2x1bWUgbGFiZWw/IC4uLi4KICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICA8L3NlY3QyPgogICAgPC9zZWN0MT4KCiAgICA8c2VjdDEgaWQ9ImRsbC1jb25maWciPgogICAgICA8dGl0bGU+RExMIGNvbmZpZ3VyYXRpb248L3RpdGxlPgogICAgICA8c2VjdDIgaWQ9ImRsbC1vdmVycmlkZXMiPgogICAgICAgIDx0aXRsZT5ETEwgT3ZlcnJpZGVzPC90aXRsZT4KICAKICAgICAgICA8cGFyYT4KICAgICAgICAgIFdyaXR0ZW4gYnkgJm5hbWUtb3ZlLWthYXZlbjsgPGVtYWlsPiZlbWFpbC1vdmUta2FhdmVuOzwvZW1haWw+CiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgogICAgICAgICAgKEV4dHJhY3RlZCBmcm9tIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24vZGxsLW92ZXJyaWRlczwvZmlsZW5hbWU+KQogICAgICAgIDwvcGFyYT4KICAKICAgICAgICA8cGFyYT4KICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+d2luZS5jb25mPC9maWxlbmFtZT4gZGlyZWN0aXZlcyBbRGxsRGVmYXVsdHNdCiAgICAgICAgICBhbmQgW0RsbE92ZXJyaWRlc10gYXJlIHRoZSBzdWJqZWN0IG9mIHNvbWUgY29uZnVzaW9uLiBUaGUKICAgICAgICAgIG92ZXJhbGwgcHVycG9zZSBvZiBtb3N0IG9mIHRoZXNlIGRpcmVjdGl2ZXMgYXJlIGNsZWFyIGVub3VnaCwKICAgICAgICAgIHRob3VnaCAtIGdpdmVuIGEgY2hvaWNlLCBzaG91bGQgV2luZSB1c2UgaXRzIG93biBidWlsdC1pbgogICAgICAgICAgRExMcywgb3Igc2hvdWxkIGl0IHVzZSA8ZmlsZW5hbWU+LkRMTDwvZmlsZW5hbWU+IGZpbGVzIGZvdW5kCiAgICAgICAgICBpbiBhbiBleGlzdGluZyBXaW5kb3dzIGluc3RhbGxhdGlvbj8gVGhpcyBkb2N1bWVudCBleHBsYWlucwogICAgICAgICAgaG93IHRoaXMgZmVhdHVyZSB3b3Jrcy4KICAgICAgICA8L3BhcmE+CiAgCiAgICAgICAgPHNlY3QzPgogICAgICAgICAgPHRpdGxlPkRMTCB0eXBlczwvdGl0bGU+CiAgICAgICAgICA8dmFyaWFibGVsaXN0PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPm5hdGl2ZTwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBBICJuYXRpdmUiIERMTCBpcyBhIDxmaWxlbmFtZT4uRExMPC9maWxlbmFtZT4gZmlsZQogICAgICAgICAgICAgICAgICB3cml0dGVuIGZvciB0aGUgcmVhbCBNaWNyb3NvZnQgV2luZG93cy4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+YnVpbHRpbjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBBICJidWlsdGluIiBETEwgaXMgYSBXaW5lIERMTC4gVGhlc2UgY2FuIGVpdGhlciBiZSBhCiAgICAgICAgICAgICAgICAgIHBhcnQgb2YgPGZpbGVuYW1lPmxpYndpbmUuc288L2ZpbGVuYW1lPiwgb3IgbW9yZQogICAgICAgICAgICAgICAgICByZWNlbnRseSwgaW4gYSBzcGVjaWFsIDxmaWxlbmFtZT4uc288L2ZpbGVuYW1lPiBmaWxlCiAgICAgICAgICAgICAgICAgIHRoYXQgV2luZSBpcyBhYmxlIHRvIGxvYWQgb24gZGVtYW5kLgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5lbGZkbGw8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgQW4gImVsZmRsbCIgaXMgYSBXaW5lIDxmaWxlbmFtZT4uc288L2ZpbGVuYW1lPiBmaWxlCiAgICAgICAgICAgICAgICAgIHdpdGggYSBzcGVjaWFsIFdpbmRvd3MtbGlrZSBmaWxlIHN0cnVjdHVyZSB0aGF0IGlzIGFzCiAgICAgICAgICAgICAgICAgIGNsb3NlIHRvIFdpbmRvd3MgYXMgcG9zc2libGUsIGFuZCB0aGF0IGNhbiBhbHNvCiAgICAgICAgICAgICAgICAgIHNlYW1sZXNzbHkgbGluayBkeW5hbWljYWxseSB3aXRoICJuYXRpdmUiIERMTHMsIGJ5CiAgICAgICAgICAgICAgICAgIHVzaW5nIHNwZWNpYWwgRUxGIGxvYWRlciBhbmQgbGlua2VyIHRyaWNrcy4gQmVydGhvCiAgICAgICAgICAgICAgICAgIFN0dWx0aWVucyBkaWQgc29tZSB3b3JrIG9uIHRoaXMsIGJ1dCB0aGlzIGZlYXR1cmUgaGFzCiAgICAgICAgICAgICAgICAgIG5vdCB5ZXQgYmVlbiBtZXJnZWQgYmFjayBpbnRvIFdpbmUgKGJlY2F1c2Ugb2YKICAgICAgICAgICAgICAgICAgcG9saXRpY2FsIHJlYXNvbnMgYW5kIGxhY2sgb2YgdGltZSksIHNvIHRoaXMgRExMIHR5cGUKICAgICAgICAgICAgICAgICAgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG9mZmljaWFsIFdpbmUgYXQgdGhpcyB0aW1lLiBJbgogICAgICAgICAgICAgICAgICB0aGUgbWVhbnRpbWUsIHRoZSAiYnVpbHRpbiIgRExMIHR5cGUgZ2FpbmVkIHNvbWUgb2YKICAgICAgICAgICAgICAgICAgdGhlIGZlYXR1cmVzIG9mIGVsZmRsbHMgKHN1Y2ggYXMgZHluYW1pYyBsb2FkaW5nKSwgc28KICAgICAgICAgICAgICAgICAgaXQncyBwb3NzaWJsZSB0aGF0ICJlbGZkbGwiIGZ1bmN0aW9uYWxpdHkgd2lsbCBiZQogICAgICAgICAgICAgICAgICBmb2xkZWQgaW50byAiYnVpbHRpbiIgYXQgc29tZSBwb2ludC4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+c288L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgQSBuYXRpdmUgVW5peCA8ZmlsZW5hbWU+LnNvPC9maWxlbmFtZT4gZmlsZSwgd2l0aAogICAgICAgICAgICAgICAgICBjYWxsaW5nIGNvbnZlbnRpb24gY29udmVyc2lvbiB0aHVua3MgZ2VuZXJhdGVkIG9uIHRoZQogICAgICAgICAgICAgICAgICBmbHkgYXMgdGhlIGxpYnJhcnkgaXMgbG9hZGVkLiBUaGlzIGlzIG1vc3RseSB1c2VmdWwKICAgICAgICAgICAgICAgICAgZm9yIGxpYnJhcmllcyBzdWNoIGFzICJnbGlkZSIgdGhhdCBoYXZlIGV4YWN0bHkgdGhlCiAgICAgICAgICAgICAgICAgIHNhbWUgQVBJIG9uIGJvdGggV2luZG93cyBhbmQgVW5peC4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICA8L3ZhcmlhYmxlbGlzdD4gICAgICAgICAgCiAgICAgICAgPC9zZWN0Mz4KICAKICAgICAgICA8c2VjdDM+CiAgICAgICAgICA8dGl0bGU+VGhlIFtEbGxEZWZhdWx0c10gc2VjdGlvbjwvdGl0bGU+CiAgICAgICAgICA8dmFyaWFibGVsaXN0PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPkRlZmF1bHRMb2FkT3JkZXI8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgVGhpcyBzcGVjaWZpZXMgaW4gd2hhdCBvcmRlciBXaW5lIHNob3VsZCBzZWFyY2ggZm9yCiAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBETEwgdHlwZXMsIGlmIHRoZSBETEwgaW4gcXVlc3Rpb24gd2FzIG5vdAogICAgICAgICAgICAgICAgICBmb3VuZCBpbiB0aGUgW0RsbE92ZXJyaWRlc10gc2VjdGlvbi4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgICAgICA8L3NlY3QzPgogIAogICAgICAgIDxzZWN0Mz4KICAgICAgICAgIDx0aXRsZT5UaGUgW0RsbFBhaXJzXSBzZWN0aW9uPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBBdCBvbmUgdGltZSwgdGhlcmUgd2FzIGEgc2VjdGlvbiBjYWxsZWQgW0RsbFBhaXJzXSBpbiB0aGUKICAgICAgICAgICAgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGUsIGJ1dCB0aGlzIGhhcyBiZWVuIG9ic29sZXRlZAogICAgICAgICAgICBiZWNhdXNlIHRoZSBwYWlyaW5nIGluZm9ybWF0aW9uIGhhcyBub3cgYmVlbiBlbWJlZGRlZCBpbnRvCiAgICAgICAgICAgIFdpbmUgaXRzZWxmLiAoVGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHdhcyBtZXJlbHkgdG8gYmUKICAgICAgICAgICAgYWJsZSB0byBpc3N1ZSB3YXJuaW5ncyBpZiB0aGUgdXNlciBhdHRlbXB0ZWQgdG8gcGFpcgogICAgICAgICAgICBjb2RlcGVuZGVudCAxNi1iaXQvMzItYml0IERMTHMgb2YgZGlmZmVyZW50IHR5cGVzLikgSWYgeW91CiAgICAgICAgICAgIHN0aWxsIGhhdmUgdGhpcyBpbiB5b3VyIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPiBvcgogICAgICAgICAgICA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPiwgeW91IG1heSBzYWZlbHkgZGVsZXRlIGl0LgogICAgICAgICAgPC9wYXJhPgogICAgICAgIDwvc2VjdDM+CiAgCiAgICAgICAgPHNlY3QzPgogICAgICAgICAgPHRpdGxlPlRoZSBbRGxsT3ZlcnJpZGVzXSBzZWN0aW9uPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGlzIHNlY3Rpb24gc3BlY2lmaWVzIGhvdyB5b3Ugd2FudCBzcGVjaWZpYyBETExzIHRvIGJlCiAgICAgICAgICAgIGhhbmRsZWQsIGluIHBhcnRpY3VsYXIgd2hldGhlciB5b3Ugd2FudCB0byB1c2UgIm5hdGl2ZSIgRExMcwogICAgICAgICAgICBvciBub3QsIGlmIHlvdSBoYXZlIHNvbWUgZnJvbSBhIHJlYWwgV2luZG93cyBjb25maWd1cmF0aW9uLgogICAgICAgICAgICBCZWNhdXNlIGJ1aWx0aW5zIGRvIG5vdCBtaXggc2VhbWxlc3NseSB3aXRoIG5hdGl2ZSBETExzIHlldCwKICAgICAgICAgICAgY2VydGFpbiBETEwgZGVwZW5kZW5jaWVzIG1heSBiZSBwcm9ibGVtYXRpYywgYnV0IHdvcmthcm91bmRzCiAgICAgICAgICAgIGV4aXN0IGluIFdpbmUgZm9yIG1hbnkgcG9wdWxhciBETEwgY29uZmlndXJhdGlvbnMuIEFsc28gc2VlCiAgICAgICAgICAgIFdXTidzIFsxNl1TdGF0dXMgUGFnZSB0byBmaWd1cmUgb3V0IGhvdyB3ZWxsIHlvdXIgZmF2b3JpdGUKICAgICAgICAgICAgRExMIGlzIGltcGxlbWVudGVkIGluIFdpbmUuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgSXQgaXMgb2YgY291cnNlIGFsc28gcG9zc2libGUgdG8gb3ZlcnJpZGUgdGhlc2Ugc2V0dGluZ3MgYnkKICAgICAgICAgICAgZXhwbGljdGx5IHVzaW5nIFdpbmUncyA8cGFyYW1ldGVyPi0tZGxsPC9wYXJhbWV0ZXI+CiAgICAgICAgICAgIGNvbW1hbmQtbGluZSBvcHRpb24gKHNlZSB0aGUgbWFuIHBhZ2UgZm9yIGRldGFpbHMpLiAgU29tZQogICAgICAgICAgICBoaW50cyBmb3IgY2hvb3NpbmcgeW91ciBvcHRpbWFsIGNvbmZpZ3VyYXRpb24gKGxpc3RlZCBieQogICAgICAgICAgICAxNi8zMi1iaXQgRExMIHBhaXIpOgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHZhcmlhYmxlbGlzdD4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5rcm5sMzg2LCBrZXJuZWwzMjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBOYXRpdmUgdmVyc2lvbnMgb2YgdGhlc2Ugd2lsbCBuZXZlciB3b3JrLCBzbyBkb24ndCB0cnkuIExlYXZlCiAgICAgICAgICAgICAgICAgIGF0IDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5nZGksIGdkaTMyPC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIEdyYXBoaWNzIERldmljZSBJbnRlcmZhY2UuIE5vIGVmZm9ydCBoYXMgYmVlbiBtYWRlIGF0IHRyeWluZyB0bwogICAgICAgICAgICAgICAgICBydW4gbmF0aXZlIEdESS4gTGVhdmUgYXQgPGxpdGVyYWw+YnVpbHRpbjwvbGl0ZXJhbD4uCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PiAgICAgICAgICAKICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT51c2VyLCB1c2VyMzI8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgV2luZG93IG1hbmFnZW1lbnQgYW5kIHN0YW5kYXJkIGNvbnRyb2xzLiBJdCB3YXMKICAgICAgICAgICAgICAgICAgcG9zc2libGUgdG8gdXNlIFdpbjk1J3MgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPgogICAgICAgICAgICAgICAgICB2ZXJzaW9ucyBhdCBzb21lIHBvaW50IChpZiBhbGwgb3RoZXIgRExMcyB0aGF0IGRlcGVuZAogICAgICAgICAgICAgICAgICBvbiBpdCwgc3VjaCBhcyBjb21jdGwzMiBhbmQgY29tZGxnMzIsIHdlcmUgYWxzbyBydW4KICAgICAgICAgICAgICAgICAgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPikuIEhvd2V2ZXIsIHRoaXMgaXMgbm8gbG9uZ2VyCiAgICAgICAgICAgICAgICAgIHBvc3NpYmxlIGFmdGVyIHRoZSBBZGRyZXNzIFNwYWNlIFNlcGFyYXRpb24sIHNvIGxlYXZlCiAgICAgICAgICAgICAgICAgIGF0IDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5udGRsbDwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBOVCBrZXJuZWwgQVBJLiBBbHRob3VnaCBiYWRseSBkb2N1bWVudGVkLCB0aGUKICAgICAgICAgICAgICAgICAgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiB2ZXJzaW9uIG9mIHRoaXMgd2lsbCBuZXZlcgogICAgICAgICAgICAgICAgICB3b3JrLiBMZWF2ZSBhdCA8bGl0ZXJhbD5idWlsdGluPC9saXRlcmFsPi4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+dzMyc2tybmw8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgV2luMzJzIChmb3IgV2luMy54KS4gVGhlIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4KICAgICAgICAgICAgICAgICAgdmVyc2lvbiB3aWxsIHByb2JhYmx5IG5ldmVyIHdvcmsuIExlYXZlIGF0CiAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT53b3czMjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBXaW4xNiBzdXBwb3J0IGxpYnJhcnkgZm9yIE5ULiBUaGUKICAgICAgICAgICAgICAgICAgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiB2ZXJzaW9uIHdpbGwgcHJvYmFibHkgbmV2ZXIKICAgICAgICAgICAgICAgICAgd29yay4gTGVhdmUgYXQgPGxpdGVyYWw+YnVpbHRpbjwvbGl0ZXJhbD4uCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPnN5c3RlbTwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBXaW4xNiBrZXJuZWwgc3R1ZmYuIFdpbGwgbmV2ZXIgd29yawogICAgICAgICAgICAgICAgICA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+LiBMZWF2ZSBhdAogICAgICAgICAgICAgICAgICA8bGl0ZXJhbD5idWlsdGluPC9saXRlcmFsPi4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPmRpc3BsYXk8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgRGlzcGxheSBkcml2ZXIuIERlZmluaXRlbHkgbGVhdmUgYXQgPGxpdGVyYWw+YnVpbHRpbjwvbGl0ZXJhbD4uCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPnRvb2xoZWxwPC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIFRvb2wgaGVscGVyIHJvdXRpbmVzLiBUaGlzIGlzIHJhcmVseSBhIHNvdXJjZSBvZiBwcm9ibGVtcy4KICAgICAgICAgICAgICAgICAgTGVhdmUgYXQgPGxpdGVyYWw+YnVpbHRpbjwvbGl0ZXJhbD4uCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPnZlciwgdmVyc2lvbjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBWZXJzaW9uaW5nLiBTZWxkb20gdXNlZnVsIHRvIG1lc3Mgd2l0aC4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+YWR2YXBpMzI8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgUmVnaXN0cnkgYW5kIHNlY3VyaXR5IGZlYXR1cmVzLiBUcnlpbmcgdGhlCiAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbiBvZiB0aGlzIG1heSBvciBtYXkKICAgICAgICAgICAgICAgICAgbm90IHdvcmsuCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPmNvbW1kbGcsIGNvbWRsZzMyPC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIENvbW1vbiBEaWFsb2dzLCBzdWNoIGFzIGNvbG9yIHBpY2tlciwgZm9udCBkaWFsb2csCiAgICAgICAgICAgICAgICAgIHByaW50IGRpYWxvZywgb3Blbi9zYXZlIGRpYWxvZywgZXRjLiBJdCBpcyBzYWZlIHRvIHRyeQogICAgICAgICAgICAgICAgICA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+LgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5jb21tY3RybCwgY29tY3RsMzI8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgQ29tbW9uIENvbnRyb2xzLiBUaGlzIGlzIHRvb2xiYXJzLCBzdGF0dXMgYmFycywgbGlzdCBjb250cm9scywKICAgICAgICAgICAgICAgICAgdGhlIHdvcmtzLiBJdCBpcyBzYWZlIHRvIHRyeSA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+LgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5zaGVsbCwgc2hlbGwzMjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBTaGVsbCBpbnRlcmZhY2UgKGRlc2t0b3AsIGZpbGVzeXN0ZW0sIGV0YykuIEJlaW5nIG9uZSBvZiB0aGUKICAgICAgICAgICAgICAgICAgbW9zdCB1bmRvY3VtZW50ZWQgcGllY2VzIG9mIFdpbmRvd3MsIHlvdSBtYXkgaGF2ZSBsdWNrIHdpdGggdGhlCiAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbiwgc2hvdWxkIHlvdSBuZWVkIGl0LgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4gICAgICAgICAgCiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+d2luc29jaywgd3NvY2szMjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBXaW5kb3dzIFNvY2tldHMuIFRoZSA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+IHZlcnNpb24KICAgICAgICAgICAgICAgICAgd2lsbCBub3Qgd29yayB1bmRlciBXaW5lLCBzbyBsZWF2ZSBhdAogICAgICAgICAgICAgICAgICA8bGl0ZXJhbD5idWlsdGluPC9saXRlcmFsPi4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+aWNtcDwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBJQ01QIHJvdXRpbmVzIGZvciB3c29jazMyLiBBcyB3aXRoIHdzb2NrMzIsIGxlYXZlIGF0CiAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5tcHI8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgVGhlIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbiBtYXkgbm90IHdvcmsgZHVlCiAgICAgICAgICAgICAgICAgIHRvIHRodW5raW5nIGlzc3Vlcy4gTGVhdmUgYXQKICAgICAgICAgICAgICAgICAgPGxpdGVyYWw+YnVpbHRpbjwvbGl0ZXJhbD4uCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPmx6ZXhwYW5kLCBsejMyPC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIExlbXBlbC1aaXYgZGVjb21wcmVzc2lvbi4gV2luZSdzCiAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+IHZlcnNpb24gb3VnaHQgdG8gd29yayBmaW5lLgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT53aW5hc3BpLCB3bmFzcGkzMjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBBZHZhbmNlZCBTQ1NJIFBlcmlwaGVyYWwgSW50ZXJmYWNlLiBUaGUKICAgICAgICAgICAgICAgICAgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiB2ZXJzaW9uIHdpbGwgcHJvYmFibHkgbmV2ZXIKICAgICAgICAgICAgICAgICAgd29yay4gTGVhdmUgYXQgPGxpdGVyYWw+YnVpbHRpbjwvbGl0ZXJhbD4uCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPmNydGRsbDwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBDIFJ1bnRpbWUgbGlicmFyeS4gVGhlIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4KICAgICAgICAgICAgICAgICAgdmVyc2lvbiB3aWxsIGVhc2lseSB3b3JrIGJldHRlciB0aGFuIFdpbmUncyBvbiB0aGlzCiAgICAgICAgICAgICAgICAgIG9uZS4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+d2luc3Bvb2wuZHJ2PC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIFByaW50ZXIgc3Bvb2xlci4gWW91IGFyZSBub3QgbGlrZWx5IHRvIGhhdmUgbW9yZSBsdWNrCiAgICAgICAgICAgICAgICAgIHdpdGggdGhlIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbi4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+ZGRyYXc8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgRGlyZWN0RHJhdy9EaXJlY3QzRC4gU2luY2UgV2luZSBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlCiAgICAgICAgICAgICAgICAgIERpcmVjdFggSEFMLCB0aGUgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiB2ZXJzaW9uCiAgICAgICAgICAgICAgICAgIHdpbGwgbm90IHdvcmsgYXQgdGhpcyB0aW1lLgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5kaW5wdXQ8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgRGlyZWN0SW5wdXQuIFJ1bm5pbmcgdGhpcyA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+CiAgICAgICAgICAgICAgICAgIG1heSBvciBtYXkgbm90IHdvcmsuCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PiAgICAgICAgICAKICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5kc291bmQ8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgRGlyZWN0U291bmQuIEl0IG1heSBiZSBwb3NzaWJsZSB0byBydW4gdGhpcwogICAgICAgICAgICAgICAgICA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+LCBidXQgZG9uJ3QgY291bnQgb24gaXQuCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPmRwbGF5L2RwbGF5eDwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBEaXJlY3RQbGF5LiBUaGUgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiB2ZXJzaW9uCiAgICAgICAgICAgICAgICAgIG91Z2h0IHRvIHdvcmsgYmVzdCBvbiB0aGlzLCBpZiBhdCBhbGwuCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPm1tc3lzdGVtLCB3aW5tbTwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBNdWx0aW1lZGlhIHN5c3RlbS4gVGhlIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4KICAgICAgICAgICAgICAgICAgdmVyc2lvbiBpcyBub3QgbGlrZWx5IHRvIHdvcmsuIExlYXZlIGF0CiAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5tc2FjbSwgbXNhY20zMjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBBdWRpbyBDb21wcmVzc2lvbiBNYW5hZ2VyLiBUaGUKICAgICAgICAgICAgICAgICAgPGxpdGVyYWw+YnVpbHRpbjwvbGl0ZXJhbD4gdmVyc2lvbiB3b3JrcyBiZXN0LCBpZiB5b3UKICAgICAgICAgICAgICAgICAgc2V0IG1zYWNtLmRydiB0byB0aGUgc2FtZS4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+bXN2aWRlbywgbXN2ZnczMjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBWaWRlbyBmb3IgV2luZG93cy4gSXQgaXMgc2FmZSAoYW5kIHJlY29tbWVuZGVkKSB0byB0cnkKICAgICAgICAgICAgICAgICAgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPi4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+bWNpY2RhLmRydjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBDRCBBdWRpbyBNQ0kgZHJpdmVyLgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5tY2lzZXEuZHJ2PC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIE1JREkgU2VxdWVuY2VyIE1DSSBkcml2ZXIgKDxmaWxlbmFtZT4uTUlEPC9maWxlbmFtZT4KICAgICAgICAgICAgICAgICAgcGxheWJhY2spLgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5tY2l3YXZlLmRydjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBXYXZlIGF1ZGlvIE1DSSBkcml2ZXIgKDxmaWxlbmFtZT4uV0FWPC9maWxlbmFtZT4gcGxheWJhY2spLgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5tY2lhdmkuZHJ2PC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIEFWSSBNQ0kgZHJpdmVyICg8ZmlsZW5hbWU+LkFWSTwvZmlsZW5hbWU+IHZpZGVvCiAgICAgICAgICAgICAgICAgIHBsYXliYWNrKS4gQmVzdCB0byB1c2UgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPi4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+bWNpYW5pbS5kcnY8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgQW5pbWF0aW9uIE1DSSBkcml2ZXIuCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPm1zYWNtLmRydjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBBdWRpbyBDb21wcmVzc2lvbiBNYW5hZ2VyLiBTZXQgdG8gc2FtZSBhcyBtc2FjbTMyLgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5taWRpbWFwLmRydjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBNSURJIE1hcHBlci4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+d3Byb2NzPC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYSBwc2V1ZG8tRExMIHVzZWQgYnkgV2luZSBmb3IgdGh1bmtpbmcKICAgICAgICAgICAgICAgICAgcHVycG9zZXMuIEEgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiB2ZXJzaW9uIG9mIHRoaXMKICAgICAgICAgICAgICAgICAgZG9lc24ndCBleGlzdC4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICA8L3ZhcmlhYmxlbGlzdD4gICAgICAgICAgCiAgICAgICAgPC9zZWN0Mz4KICAgICAgPC9zZWN0Mj4KICAgICAgPHNlY3QyIGlkPSJkbGwtbWlzc2luZyI+CiAgICAgICAgPHRpdGxlPk1pc3NpbmcgRExMczwvdGl0bGU+CiAgCiAgICAgICAgPHBhcmE+CiAgICAgICAgICBXcml0dGVuIGJ5ICZuYW1lLWFuZHJlYXMtbW9ocjsgPGVtYWlsPiZlbWFpbC1hbmRyZWFzLW1vaHI7PC9lbWFpbD4KICAgICAgICA8L3BhcmE+CiAgCiAgICAgICAgPHBhcmE+CgkgIEluIGNhc2UgV2luZSBjb21wbGFpbnMgYWJvdXQgYSBtaXNzaW5nIERMTCwgeW91IHNob3VsZCBjaGVjayB3aGV0aGVyCgkgIHRoaXMgZmlsZSBpcyBhIHB1YmxpY2x5IGF2YWlsYWJsZSBETEwgb3IgYSBjdXN0b20gRExMIGJlbG9uZ2luZwoJICB0byB5b3VyIHByb2dyYW0gKGJ5IHNlYXJjaGluZyBmb3IgaXRzIG5hbWUgb24gdGhlIGludGVybmV0KS4KCSAgSWYgeW91IG1hbmFnZWQgdG8gZ2V0IGhvbGQgb2YgdGhlIERMTCwgdGhlbiB5b3Ugc2hvdWxkIG1ha2Ugc3VyZQoJICB0aGF0IFdpbmUgaXMgYWJsZSB0byBmaW5kIGFuZCBsb2FkIGl0LgoJICBETExzIHVzdWFsbHkgZ2V0IGxvYWRlZCBhY2NvcmRpbmcgdG8gdGhlIG1lY2hhbmlzbSBvZiB0aGUKCSAgU2VhcmNoUGF0aCgpIGZ1bmN0aW9uLgoJICBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIGRpcmVjdG9yaWVzIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6CgkgIAoJICBhKSBUaGUgZGlyZWN0b3J5IHRoZSBwcm9ncmFtIHdhcyBzdGFydGVkIGZyb20uCgkgIGIpIFRoZSBjdXJyZW50IGRpcmVjdG9yeS4KCSAgYykgVGhlIFdpbmRvd3Mgc3lzdGVtIGRpcmVjdG9yeS4KCSAgZCkgVGhlIFdpbmRvd3MgZGlyZWN0b3J5LgoJICBlKSBUaGUgUEFUSCB2YXJpYWJsZSBkaXJlY3Rvcmllcy4KCSAgCgkgIEluIHNob3J0OiBlaXRoZXIgcHV0IHRoZSByZXF1aXJlZCBETEwgaW50byB5b3VyIGFwcGxpY2F0aW9uCgkgIGRpcmVjdG9yeSAobWlnaHQgYmUgdWdseSksIG9yIHVzdWFsbHkgcHV0IGl0IGludG8gdGhlIFdpbmRvd3Mgc3lzdGVtCgkgIGRpcmVjdG9yeS4gSnVzdCBmaW5kIG91dCBpdHMgZGlyZWN0b3J5IGJ5IGhhdmluZyBhIGxvb2sgYXQgdGhlIFdpbmUKCSAgY29uZmlnIEZpbGUgdmFyaWFibGUgIlN5c3RlbSIgKHdoaWNoIGluZGljYXRlcyB0aGUgbG9jYXRpb24gb2YgdGhlCgkgIFdpbmRvd3Mgc3lzdGVtIGRpcmVjdG9yeSkgYW5kIHRoZSBhc3NvY2lhdGVkIGRyaXZlIGVudHJ5LgogICAgICAgIDwvcGFyYT4KICAgICAgPC9zZWN0Mj4KICAgIDwvc2VjdDE+CgogICAgJmZvbnRzOwogICAgJnByaW50aW5nOwoKICAgIDxzZWN0MSBpZD0id2luOTVsb29rIj4KICAgICAgPHRpdGxlPldpbjk1Lzk4IExvb2s8L3RpdGxlPgogICAgICA8cGFyYT4KICAgICAgICBXcml0dGVuIGJ5ICZuYW1lLWRhdmlkLWN1dGhiZXJ0OyA8ZW1haWw+JmVtYWlsLWRhdmlkLWN1dGhiZXJ0OzwvZW1haWw+CiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgKEV4dHJhY3RlZCBmcm9tIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24vd2luOTVsb29rPC9maWxlbmFtZT4pCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgV2luOTUvV2luOTggaW50ZXJmYWNlIGNvZGUgaXMgYmVpbmcgaW50cm9kdWNlZC4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBJbnN0ZWFkIG9mIGNvbXBpbGluZyBXaW5lIGZvciBXaW4zLjEgdnMuIFdpbjk1IHVzaW5nCiAgICAgICAgPGNvbnN0YW50PiNkZWZpbmU8L2NvbnN0YW50PiBzd2l0Y2hlcywgdGhlIGNvZGUgbm93IGxvb2tzIGluIGEKICAgICAgICBzcGVjaWFsIFtUd2Vhay5MYXlvdXRdIHNlY3Rpb24gb2YKICAgICAgICA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPiBmb3IgYQogICAgICAgIDxsaXRlcmFsPiJXaW5lTG9vayIgPSAiV2luOTUiPC9saXRlcmFsPiBvcgogICAgICAgIDxsaXRlcmFsPiJXaW5lTG9vayIgPSAiV2luOTgiPC9saXRlcmFsPiBlbnRyeS4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBBIGZldyBuZXcgc2VjdGlvbnMgYW5kIGEgbnVtYmVyIG9mIGVudHJpZXMgaGF2ZSBiZWVuIGFkZGVkIHRvCiAgICAgICAgdGhlIDxmaWxlbmFtZT5+Ly53aW5lL2NvbmZpZzwvZmlsZW5hbWU+IGZpbGUgLS0gdGhlc2UgYXJlIGZvcgogICAgICAgIGRlYnVnZ2luZyB0aGUgV2luOTUgdHdlYWtzIG9ubHkgYW5kIG1heSBiZSByZW1vdmVkIGluIGEgZnV0dXJlCiAgICAgICAgcmVsZWFzZSEgIFRoZXNlIGVudHJpZXMvc2VjdGlvbnMgYXJlOgogICAgICA8L3BhcmE+CiAgICAgIDxwcm9ncmFtbGlzdGluZz4KW1R3ZWFrLkZvbnRzXQoiU3lzdGVtLkhlaWdodCIgPSAiJmx0O3BvaW50IHNpemU+IiAgICAjIFNldHMgdGhlIGhlaWdodCBvZiB0aGUgc3lzdGVtIHR5cGVmYWNlCiJTeXN0ZW0uQm9sZCIgPSAiW3RydWV8ZmFsc2VdIiAgICAgICMgV2hldGhlciB0aGUgc3lzdGVtIGZvbnQgc2hvdWxkIGJlIGJvbGRmYWNlZAoiU3lzdGVtLkl0YWxpYyIgPSAiW3RydWV8ZmFsc2VdIiAgICAjIFdoZXRoZXIgdGhlIHN5c3RlbSBmb250IHNob3VsZCBiZSBpdGFsaWNpemVkCiJTeXN0ZW0uVW5kZXJsaW5lIiA9ICJbdHJ1ZXxmYWxzZV0iICMgV2hldGhlciB0aGUgc3lzdGVtIGZvbnQgc2hvdWxkIGJlIHVuZGVybGluZWQKIlN5c3RlbS5TdHJpa2VPdXQiID0gIlt0cnVlfGZhbHNlXSIgIyBXaGV0aGVyIHRoZSBzeXN0ZW0gZm9udCBzaG91bGQgYmUgc3RydWNrIG91dAoiT0VNRml4ZWQueHh4IiAgICAgICAgICAgICAgICAgICMgU2FtZSBwYXJhbWV0ZXJzIGZvciB0aGUgT0VNIGZpeGVkIHR5cGVmYWNlCiJBbnNpRml4ZWQueHh4IiAgICAgICAgICAgICAgICAgIyBTYW1lIHBhcmFtZXRlcnMgZm9yIHRoZSBBbnNpIGZpeGVkIHR5cGVmYWNlCiJBbnNpVmFyLnh4eCIgICAgICAgICAgICAgICAgICAgIyBTYW1lIHBhcmFtZXRlcnMgZm9yIHRoZSBBbnNpIHZhcmlhYmxlIHR5cGVmYWNlCiJTeXN0ZW1GaXhlZC54eHgiICAgICAgICAgICAgICAgIyBTYW1lIHBhcmFtZXRlcnMgZm9yIHRoZSBTeXN0ZW0gZml4ZWQgdHlwZWZhY2UKCltUd2Vhay5MYXlvdXRdCiJXaW5lTG9vayIgPSAiW1dpbjMxfFdpbjk1fFdpbjk4XSIgICMgQ2hhbmdlcyBXaW5lJ3MgbG9vayBhbmQgZmVlbAogICAgICA8L3Byb2dyYW1saXN0aW5nPgogICAgPC9zZWN0MT4KCiAgICA8c2VjdDEgaWQ9ImtleWJvYXJkIj4KICAgICAgPHRpdGxlPktleWJvYXJkPC90aXRsZT4KCiAgICAgIDxwYXJhPgogICAgICAgIFdyaXR0ZW4gYnkgJm5hbWUtb3ZlLWthYXZlbjsgPGVtYWlsPiZlbWFpbC1vdmUta2FhdmVuOzwvZW1haWw+CiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgKEV4dHJhY3RlZCBmcm9tIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24va2V5Ym9hcmQ8L2ZpbGVuYW1lPikKICAgICAgPC9wYXJhPgoKICAgICAgPHBhcmE+CiAgICAgICAgV2luZSBub3cgbmVlZHMgdG8ga25vdyBhYm91dCB5b3VyIGtleWJvYXJkIGxheW91dC4gVGhpcwogICAgICAgIHJlcXVpcmVtZW50IGNvbWVzIGZyb20gYSBuZWVkIGZyb20gbWFueSBhcHBzIHRvIGhhdmUgdGhlCiAgICAgICAgY29ycmVjdCBzY2FuY29kZXMgYXZhaWxhYmxlLCBzaW5jZSB0aGV5IHJlYWQgdGhlc2UgZGlyZWN0bHksCiAgICAgICAgaW5zdGVhZCBvZiBqdXN0IHRha2luZyB0aGUgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgWAogICAgICAgIHNlcnZlci4gVGhpcyBtZWFucyB0aGF0IFdpbmUgbm93IG5lZWRzIHRvIGhhdmUgYSBtYXBwaW5nIGZyb20KICAgICAgICBYIGtleXMgdG8gdGhlIHNjYW5jb2RlcyB0aGVzZSBhcHBsaWNhdGlvbnMgZXhwZWN0LgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIE9uIHN0YXJ0dXAsIFdpbmUgd2lsbCB0cnkgdG8gcmVjb2duaXplIHRoZSBhY3RpdmUgWCBsYXlvdXQgYnkKICAgICAgICBzZWVpbmcgaWYgaXQgbWF0Y2hlcyBhbnkgb2YgdGhlIGRlZmluZWQgdGFibGVzLiBJZiBpdCBkb2VzLAogICAgICAgIGV2ZXJ5dGhpbmcgaXMgYWxyaWdodC4gSWYgbm90LCB5b3UgbmVlZCB0byBkZWZpbmUgaXQuCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgVG8gZG8gdGhpcywgb3BlbiB0aGUgZmlsZQogICAgICAgIDxmaWxlbmFtZT5kbGxzL3gxMWRydi9rZXlib2FyZC5jPC9maWxlbmFtZT4gYW5kIHRha2UgYSBsb29rCiAgICAgICAgYXQgdGhlIGV4aXN0aW5nIHRhYmxlcy4gTWFrZSBhIGJhY2t1cCBjb3B5IG9mIGl0LCBlc3BlY2lhbGx5CiAgICAgICAgaWYgeW91IGRvbid0IHVzZSBDVlMuCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgV2hhdCB5b3UgcmVhbGx5IHdvdWxkIG5lZWQgdG8gZG8sIGlzIGZpbmQgb3V0IHdoaWNoIHNjYW5jb2RlCiAgICAgICAgZWFjaCBrZXkgbmVlZHMgdG8gZ2VuZXJhdGUuICBGaW5kIGl0IGluIHRoZQogICAgICAgIDxmdW5jdGlvbj5tYWluX2tleV9zY2FuPC9mdW5jdGlvbj4gdGFibGUsIHdoaWNoIGxvb2tzIGxpa2UKICAgICAgICB0aGlzOgogICAgICA8L3BhcmE+CiAgICAgIDxwcm9ncmFtbGlzdGluZz4Kc3RhdGljIGNvbnN0IGludCBtYWluX2tleV9zY2FuW01BSU5fTEVOXSA9CnsKLyogdGhpcyBpcyBteSAoMTAyLWtleSkga2V5Ym9hcmQgbGF5b3V0LCBzb3JyeSBpZiBpdCBkb2Vzbid0IHF1aXRlIG1hdGNoIHlvdXJzICovCiAgIDB4MjksMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDcsMHgwOCwweDA5LDB4MEEsMHgwQiwweDBDLDB4MEQsCiAgIDB4MTAsMHgxMSwweDEyLDB4MTMsMHgxNCwweDE1LDB4MTYsMHgxNywweDE4LDB4MTksMHgxQSwweDFCLAogICAweDFFLDB4MUYsMHgyMCwweDIxLDB4MjIsMHgyMywweDI0LDB4MjUsMHgyNiwweDI3LDB4MjgsMHgyQiwKICAgMHgyQywweDJELDB4MkUsMHgyRiwweDMwLDB4MzEsMHgzMiwweDMzLDB4MzQsMHgzNSwKICAgMHg1NiAvKiB0aGUgMTAybmQga2V5IChhY3R1YWxseSB0byB0aGUgcmlnaHQgb2YgbC1zaGlmdCkgKi8KfTsKICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgPHBhcmE+CiAgICAgICAgTmV4dCwgYXNzaWduIGVhY2ggc2NhbmNvZGUgdGhlIGNoYXJhY3RlcnMgaW1wcmludGVkIG9uIHRoZQogICAgICAgIGtleWNhcHMuIFRoaXMgd2FzIGRvbmUgKHNvcnQgb2YpIGZvciB0aGUgVVMgMTAxLWtleSBrZXlib2FyZCwKICAgICAgICB3aGljaCB5b3UgY2FuIGZpbmQgbmVhciB0aGUgdG9wIGluCiAgICAgICAgPGZpbGVuYW1lPmtleWJvYXJkLmM8L2ZpbGVuYW1lPi4gSXQgYWxzbyBzaG93cyB0aGF0IGlmIHRoZXJlCiAgICAgICAgaXMgbm8gMTAybmQga2V5LCB5b3UgY2FuIHNraXAgdGhhdC4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBIb3dldmVyLCBmb3IgbW9zdCBpbnRlcm5hdGlvbmFsIDEwMi1rZXkga2V5Ym9hcmRzLCB3ZSBoYXZlCiAgICAgICAgZG9uZSBpdCBlYXN5IGZvciB5b3UuIFRoZSBzY2FuY29kZSBsYXlvdXQgZm9yIHRoZXNlIGFscmVhZHkKICAgICAgICBwcmV0dHkgbXVjaCBtYXRjaGVzIHRoZSBwaHlzaWNhbCBsYXlvdXQgaW4gdGhlCiAgICAgICAgPGZ1bmN0aW9uPm1haW5fa2V5X3NjYW48L2Z1bmN0aW9uPiwgc28gYWxsIHlvdSBuZWVkIHRvIGRvIGlzCiAgICAgICAgdG8gZ28gdGhyb3VnaCBhbGwgdGhlIGtleXMgdGhhdCBnZW5lcmF0ZSBjaGFyYWN0ZXJzIG9uIHlvdXIKICAgICAgICBtYWluIGtleWJvYXJkIChleGNlcHQgc3BhY2ViYXIpLCBhbmQgc3R1ZmYgdGhvc2UgaW50byBhbgogICAgICAgIGFwcHJvcHJpYXRlIHRhYmxlLiBUaGUgb25seSBleGNlcHRpb24gaXMgdGhhdCB0aGUgMTAybmQga2V5LAogICAgICAgIHdoaWNoIGlzIHVzdWFsbHkgdG8gdGhlIGxlZnQgb2YgdGhlIGZpcnN0IGtleSBvZiB0aGUgbGFzdCBsaW5lCiAgICAgICAgKHVzdWFsbHkgPGtleWNhcD5aPC9rZXljYXA+KSwgbXVzdCBiZSBwbGFjZWQgb24gYSBzZXBhcmF0ZQogICAgICAgIGxpbmUgYWZ0ZXIgdGhlIGxhc3QgbGluZS4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBGb3IgZXhhbXBsZSwgbXkgTm9yd2VnaWFuIGtleWJvYXJkIGxvb2tzIGxpa2UgdGhpcwogICAgICA8L3BhcmE+CiAgICAgIDxzY3JlZW4+CqcgICEgICIgICMgIKQgICUgICYgIC8gICggICkgID0gID8gIGAgIEJhY2stCnwgIDEgIDJAIDOjIDQkIDUgIDYgIDd7IDhbIDldIDB9ICsgIFy0IHNwYWNlCgpUYWIgUSAgVyAgRSAgUiAgVCAgWSAgVSAgSSAgTyAgUCAgxSAgXgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgqH4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudGVyCkNhcHMgQSAgUyAgRCAgRiAgRyAgSCAgSiAgSyAgTCAg2CAgxiAgKgpMb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcKClNoLSA+IFogIFggIEMgIFYgIEIgIE4gIE0gIDsgIDogIF8gIFNoaWZ0CmlmdCAmbHQ7ICAgICAgICAgICAgICAgICAgICAgICwgIC4gIC0KCkN0cmwgIEFsdCAgICAgICBTcGFjZWJhciAgICAgICBBbHRHciAgQ3RybAogICAgICA8L3NjcmVlbj4KICAgICAgPHBhcmE+CiAgICAgICAgTm90ZSB0aGUgMTAybmQga2V5LCB3aGljaCBpcyB0aGUgPGtleWNhcD4mbHQ7Pjwva2V5Y2FwPiBrZXksIHRvCiAgICAgICAgdGhlIGxlZnQgb2YgPGtleWNhcD5aPC9rZXljYXA+LiBUaGUgY2hhcmFjdGVyIHRvIHRoZSByaWdodCBvZgogICAgICAgIHRoZSBtYWluIGNoYXJhY3RlciBpcyB0aGUgY2hhcmFjdGVyIGdlbmVyYXRlZCBieQogICAgICAgIDxrZXljYXA+QWx0R3I8L2tleWNhcD4uCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgVGhpcyBrZXlib2FyZCBpcyBkZWZpbmVkIGFzIGZvbGxvd3M6CiAgICAgIDwvcGFyYT4KICAgICAgPHByb2dyYW1saXN0aW5nPgpzdGF0aWMgY29uc3QgY2hhciBtYWluX2tleV9OT1tNQUlOX0xFTl1bNF0gPQp7CiAifKciLCIxISIsIjJcIkAiLCIzI6MiLCI0pCQiLCI1JSIsIjYmIiwiNy97IiwiOChbIiwiOSldIiwiMD19IiwiKz8iLCJcXLQiLAogInFRIiwid1ciLCJlRSIsInJSIiwidFQiLCJ5WSIsInVVIiwiaUkiLCJvTyIsInBQIiwi5cUiLCKoXn4iLAogImFBIiwic1MiLCJkRCIsImZGIiwiZ0ciLCJoSCIsImpKIiwia0siLCJsTCIsIvjYIiwi5sYiLCInKiIsCiAieloiLCJ4WCIsImNDIiwidlYiLCJiQiIsIm5OIiwibU0iLCIsOyIsIi46IiwiLV8iLAogIiZsdDs+Igp9OyAgIAogICAgICA8L3Byb2dyYW1saXN0aW5nPgogICAgICA8cGFyYT4KICAgICAgICBFeGNlcHQgdGhhdCAiIGFuZCBcIG5lZWRzIHRvIGJlIHF1b3RlZCB3aXRoIGEgYmFja3NsYXNoLCBhbmQKICAgICAgICB0aGF0IHRoZSAxMDJuZCBrZXkgaXMgb24gYSBzZXBhcmF0ZSBsaW5lLCBpdCdzIHByZXR0eQogICAgICAgIHN0cmFpZ2h0Zm9yd2FyZC4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBBZnRlciB5b3UgaGF2ZSB3cml0dGVuIHN1Y2ggYSB0YWJsZSwgeW91IG5lZWQgdG8gYWRkIGl0IHRvIHRoZQogICAgICAgIDxmdW5jdGlvbj5tYWluX2tleV90YWJbXTwvZnVuY3Rpb24+IGxheW91dCBpbmRleCB0YWJsZS4gVGhpcwogICAgICAgIHdpbGwgbG9vayBsaWtlIHRoaXM6CiAgICAgIDwvcGFyYT4KICAgICAgPHByb2dyYW1saXN0aW5nPgpzdGF0aWMgc3RydWN0IHsKIFdPUkQgbGFuZywgYW5zaV9jb2RlcGFnZSwgb2VtX2NvZGVwYWdlOwogY29uc3QgY2hhciAoKmtleSlbTUFJTl9MRU5dWzRdOwp9IG1haW5fa2V5X3RhYltdPXsKLi4uCi4uLgoge01BS0VMQU5HSUQoTEFOR19OT1JXRUdJQU4sU1VCTEFOR19ERUZBVUxUKSwgIDEyNTIsIDg2NSwgJmFtcDttYWluX2tleV9OT30sICAKLi4uCiAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgIDxwYXJhPgogICAgICAgIEFmdGVyIHlvdSBoYXZlIGFkZGVkIHlvdXIgdGFibGUsIHJlY29tcGlsZSBXaW5lIGFuZCB0ZXN0IHRoYXQKICAgICAgICBpdCB3b3Jrcy4gSWYgaXQgZmFpbHMgdG8gZGV0ZWN0IHlvdXIgdGFibGUsIHRyeSBydW5uaW5nCiAgICAgIDwvcGFyYT4KICAgICAgPHNjcmVlbj4Kd2luZSAtLWRlYnVnbXNnICtrZXksK2tleWJvYXJkID4mIGtleS5sb2cKICAgICAgPC9zY3JlZW4+CiAgICAgIDxwYXJhPgogICAgICAgIGFuZCBsb29rIGluIHRoZSByZXN1bHRpbmcgPGZpbGVuYW1lPmtleS5sb2c8L2ZpbGVuYW1lPiBmaWxlIHRvCiAgICAgICAgZmluZCB0aGUgZXJyb3IgbWVzc2FnZXMgaXQgZ2l2ZXMgZm9yIHlvdXIgbGF5b3V0LgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIE5vdGUgdGhhdCB0aGUgPGNvbnN0YW50PkxBTkdfKjwvY29uc3RhbnQ+IGFuZAogICAgICAgIDxjb25zdGFudD5TVUJMQU5HXyo8L2NvbnN0YW50PiBkZWZpbml0aW9ucyBhcmUgaW4KICAgICAgICA8ZmlsZW5hbWU+aW5jbHVkZS93aW5ubHMuaDwvZmlsZW5hbWU+LCB3aGljaCB5b3UgbWlnaHQgbmVlZCB0bwogICAgICAgIGtub3cgdG8gZmluZCBvdXQgd2hpY2ggbnVtYmVycyB5b3VyIGxhbmd1YWdlIGlzIGFzc2lnbmVkLCBhbmQKICAgICAgICBmaW5kIGl0IGluIHRoZSBkZWJ1Z21zZyBvdXRwdXQuIFRoZSBudW1iZXJzIHdpbGwgYmUKICAgICAgICA8bGl0ZXJhbD4oU1VCTEFORyAqIDB4NDAwICsgTEFORyk8L2xpdGVyYWw+LCBzbywgZm9yIGV4YW1wbGUKICAgICAgICB0aGUgY29tYmluYXRpb24gPGxpdGVyYWw+TEFOR19OT1JXRUdJQU4gKDB4MTQpPC9saXRlcmFsPiBhbmQKICAgICAgICA8bGl0ZXJhbD5TVUJMQU5HX0RFRkFVTFQgKDB4MSk8L2xpdGVyYWw+IHdpbGwgYmUgKGluIGhleCkKICAgICAgICA8bGl0ZXJhbD4xNCArIDEqNDAwID0gNDE0PC9saXRlcmFsPiwgc28gc2luY2UgSSdtIE5vcndlZ2lhbiwgSQogICAgICAgIGNvdWxkIGxvb2sgZm9yIDxsaXRlcmFsPjA0MTQ8L2xpdGVyYWw+IGluIHRoZSBkZWJ1Z21zZyBvdXRwdXQKICAgICAgICB0byBmaW5kIG91dCB3aHkgbXkga2V5Ym9hcmQgd29uJ3QgZGV0ZWN0LgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIE9uY2UgaXQgd29ya3MsIHN1Ym1pdCBpdCB0byB0aGUgV2luZSBwcm9qZWN0LiBJZiB5b3UgdXNlIENWUywKICAgICAgICB5b3Ugd2lsbCBqdXN0IGhhdmUgdG8gZG8KICAgICAgPC9wYXJhPgogICAgICA8c2NyZWVuPgpjdnMgLXozIGRpZmYgLXUgZGxscy94MTFkcnYva2V5Ym9hcmQuYyA+IGxheW91dC5kaWZmCiAgICAgIDwvc2NyZWVuPgogICAgICA8cGFyYT4KICAgICAgICBmcm9tIHlvdXIgbWFpbiBXaW5lIGRpcmVjdG9yeSwgdGhlbiBzdWJtaXQKICAgICAgICA8ZmlsZW5hbWU+bGF5b3V0LmRpZmY8L2ZpbGVuYW1lPiB0bwogICAgICAgIDxlbWFpbD53aW5lLXBhdGNoZXNAd2luZWhxLmNvbTwvZW1haWw+IGFsb25nIHdpdGggYSBicmllZiBub3RlCiAgICAgICAgb2Ygd2hhdCBpdCBpcy4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBJZiB5b3UgZG9uJ3QgdXNlIENWUywgeW91IG5lZWQgdG8gZG8KICAgICAgPC9wYXJhPgogICAgICA8c2NyZWVuPgpkaWZmIC11IHRoZV9iYWNrdXBfZmlsZV95b3VfbWFkZSBkbGxzL3gxMWRydi9rZXlib2FyZC5jID4gbGF5b3V0LmRpZmYKICAgICAgPC9zY3JlZW4+CiAgICAgIDxwYXJhPgogICAgICAgIGFuZCBzdWJtaXQgaXQgYXMgZXhwbGFpbmVkIGFib3ZlLgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIElmIHlvdSBkaWQgaXQgcmlnaHQsIGl0IHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIG5leHQgV2luZQogICAgICAgIHJlbGVhc2UsIGFuZCBhbGwgdGhlIHRyb3VibGVzb21lIGFwcGxpY2F0aW9ucyAoZXNwZWNpYWxseQogICAgICAgIHJlbW90ZS1jb250cm9sIGFwcGxpY2F0aW9ucykgYW5kIGdhbWVzIHRoYXQgdXNlIHNjYW5jb2RlcyB3aWxsCiAgICAgICAgYmUgaGFwcGlseSB1c2luZyB5b3VyIGtleWJvYXJkIGxheW91dCwgYW5kIHlvdSB3b24ndCBnZXQgdGhvc2UKICAgICAgICBhbm5veWluZyBmaXhtZSBtZXNzYWdlcyBlaXRoZXIuCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgR29vZCBsdWNrLgogICAgICA8L3BhcmE+CiAgICA8L3NlY3QxPgoKICA8L2NoYXB0ZXI+Cgo8IS0tIEtlZXAgdGhpcyBjb21tZW50IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUKTG9jYWwgdmFyaWFibGVzOgptb2RlOiBzZ21sCnNnbWwtcGFyZW50LWRvY3VtZW50Oigid2luZS1kb2Muc2dtbCIgInNldCIgImJvb2siICJjaGFwdGVyIiAiIikKRW5kOgotLT4K