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+VGhlIFtEcml2ZSBYXSBTZWN0aW9uPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBJdCBzaG91bGQgYmUgcHJldHR5IHNlbGYgZXhwbGFuYXRvcnksIGJ1dCBoZXJlIGlzIGFuCiAgICAgICAgICAgIGluLWRlcHRoIHR1dG9yaWFsIGFib3V0IHRoZW0uIFRoZXJlIGFyZSB1cCB0byA2IGxpbmVzIGZvcgogICAgICAgICAgICBlYWNoIGRyaXZlIGluIFdpbmUuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPltEcml2ZSBYXTwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFRoZSBhYm92ZSBsaW5lIGJlZ2lucyB0aGUgc2VjdGlvbiBmb3IgYSBkcml2ZSB3aG9zZSBsZXR0ZXIgaXMgWC4gCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPlBhdGg9L2Rpci90by9wYXRoPC9wcm9ncmFtbGlzdGluZz4gVGhpcwogICAgICAgICAgICBwYXRoIGlzIHdoZXJlIHRoZSBkcml2ZSB3aWxsIGJlZ2luLiBXaGVuIFdpbmUgaXMgYnJvd3NpbmcKICAgICAgICAgICAgaW4gZHJpdmUgWCwgaXQgd2lsbCBzZWUgdGhlIGZpbGVzIHRoYXQgYXJlIGluIHRoZQogICAgICAgICAgICBkaXJlY3RvcnkgPGZpbGVuYW1lPi9kaXIvdG8vcGF0aDwvZmlsZW5hbWU+LiBEb24ndCBmb3JnZXQKICAgICAgICAgICAgdG8gbGVhdmUgb2ZmIHRoZSB0cmFpbGluZyBzbGFzaCEKICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlR5cGUiID0gImZsb3BweXxoZHxjZHJvbXxuZXR3b3JrIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFNldHMgdXAgdGhlIHR5cGUgb2YgZHJpdmUgV2luZSB3aWxsIHNlZSBpdCBhcy4gVHlwZSBtdXN0CiAgICAgICAgICAgIGVxdWFsIG9uZSBvZiB0aGUgZm91ciA8bGl0ZXJhbD5mbG9wcHk8L2xpdGVyYWw+LAogICAgICAgICAgICA8bGl0ZXJhbD5oZDwvbGl0ZXJhbD4sIDxsaXRlcmFsPmNkcm9tPC9saXRlcmFsPiwgb3IKICAgICAgICAgICAgPGxpdGVyYWw+bmV0d29yazwvbGl0ZXJhbD4uIFRoZXkgYXJlIHNlbGYtZXhwbGFuYXRvcnkuCiAgICAgICAgICAgIChUaGUgfCdzIG1lYW4gIlR5cGUgPSAnJmx0O29uZSBvZiB0aGUgb3B0aW9ucyZndDsnIi4pCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJMYWJlbCIgPSAiYmxhaCI8L3Byb2dyYW1saXN0aW5nPiBEZWZpbmVzIHRoZQogICAgICAgICAgICBkcml2ZSBsYWJlbC4gR2VuZXJhbGx5IG9ubHkgbmVlZGVkIGZvciBwcm9ncmFtcyB0aGF0IGxvb2sKICAgICAgICAgICAgZm9yIGEgc3BlY2lhbCBDRC1ST00uIEluZm8gb24gZmluZGluZyB0aGUgbGFibGUgaXMgaW4KICAgICAgICAgICAgPGxpdGVyYWw+Jmx0O2RpcnMgdG8gd2luZT4vZG9jdW1lbnRhdGlvbi9jZHJvbS1sYWJlbHM8L2xpdGVyYWw+LgogICAgICAgICAgICBUaGUgbGFiZWwgbWF5IGJlIHVwIHRvIDExIGNoYXJhY3RlcnMuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJTZXJpYWwiID0gImRlYWRiZWVmIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFRlbGxzIFdpbmUgdGhlIHNlcmlhbCBudW1iZXIgb2YgdGhlIGRyaXZlLiBBIGZldyBwcm9ncmFtcyB3aXRoCiAgICAgICAgICAgIGludGVuc2UgcHJvdGVjdGlvbiBmb3IgcGlyYXRpbmcgbWlnaHQgbmVlZCB0aGlzLCBidXQgb3RoZXJ3aXNlCiAgICAgICAgICAgIGRvbid0IHVzZSBpdC4gVXAgdG8gOCBjaGFyYWN0ZXJzIGFuZCBoZXhhZGVjaW1hbC4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IkZpbGVzeXN0ZW0iID0gIm1zZG9zfHdpbjk1fHVuaXgiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgU2V0cyB1cCB0aGUgd2F5IFdpbmUgbG9va3MgYXQgZmlsZXMgb24gdGhlIGRyaXZlLgogICAgICAgICAgPC9wYXJhPgoKICAgICAgICAgIDx2YXJpYWJsZWxpc3Q+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+PGxpdGVyYWw+bXNkb3M8L2xpdGVyYWw+PC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgICBDYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0uIEFsaWtlIHRvIERPUyBhbmQKICAgICAgICAgICAgICAgICAgV2luZG93cyAzLnguIDxsaXRlcmFsPjguMzwvbGl0ZXJhbD4gaXMgdGhlIG1heGltdW0KICAgICAgICAgICAgICAgICAgbGVuZ3RoIG9mIGZpbGVzIChlaWdodGRvdC4xMjMpIC0gbG9uZ2VyIG9uZXMgd2lsbCBiZQogICAgICAgICAgICAgICAgICB0cnVuY2F0ZWQuIChOT1RFOiB0aGlzIGlzIGEgdmVyeSBiYWQgY2hvaWNlIGlmIHlvdQogICAgICAgICAgICAgICAgICBwbGFuIG9uIHJ1bm5pbmcgYXBwcyB0aGF0IHVzZSBsb25nIGZpbGVuYW1lcy4gd2luOTUKICAgICAgICAgICAgICAgICAgc2hvdWxkIHdvcmsgZmluZSB3aXRoIGFwcHMgdGhhdCB3ZXJlIGRlc2lnbmVkIHRvIHJ1bgogICAgICAgICAgICAgICAgICB1bmRlciB0aGUgbXNkb3Mgc3lzdGVtLiBJbiBvdGhlciB3b3JkcywgeW91IG1pZ2h0CiAgICAgICAgICAgICAgICAgIG5vdCB3YW50IHRvIHVzZSB0aGlzLikKICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT48bGl0ZXJhbD53aW45NTwvbGl0ZXJhbD48L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgIENhc2UgaW5zZW5zaXRpdmUuIEFsaWtlIHRvIFdpbmRvd3MgOXgvTlQgNC4gVGhpcyBpcwogICAgICAgICAgICAgICAgICB0aGUgbG9uZyBmaWxlbmFtZSBmaWxlc3lzdGVtIHlvdSBhcmUgcHJvYmFibHkgdXNlZAogICAgICAgICAgICAgICAgICB0byB3b3JraW5nIHdpdGguIFRoZSBmaWxlc3lzdGVtIG9mIGNob2ljZSBmb3IgbW9zdAogICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbnMgdG8gYmUgcnVuIHVuZGVyIHdpbmUuICBQUk9CQUJMWSBUSEUgT05FCiAgICAgICAgICAgICAgICAgIFlPVSBXQU5UIQogICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnVuaXg8L2xpdGVyYWw+PC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgICBDYXNlIHNlbnNpdGl2ZS4gVGhpcyBmaWxlc3lzdGVtIGhhcyBhbG1vc3Qgbm8gdXNlCiAgICAgICAgICAgICAgICAgIChXaW5kb3dzIGFwcHMgZXhwZWN0IGNhc2UgaW5zZW5zaXRpdmUgZmlsZW5hbWVzKS4KICAgICAgICAgICAgICAgICAgVHJ5IGl0IGlmIHlvdSBkYXJlLCBidXQgd2luOTUgaXMgYSAgbXVjaCBiZXR0ZXIKICAgICAgICAgICAgICAgICAgY2hvaWNlLgogICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgPC92YXJpYWJsZWxpc3Q+CgogICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJEZXZpY2UiID0gIi9kZXYveHgiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBVc2UgdGhpcyBPTkxZIGZvciBmbG9wcHkgYW5kIGNkcm9tIGRldmljZXMuIFVzaW5nIGl0IG9uCiAgICAgICAgICAgIEV4dGVuZGVkMiBwYXJ0aXRpb25zIGNhbiBoYXZlIGRpcmUgcmVzdWx0cyAod2hlbiBhIHdpbmRvd3MKICAgICAgICAgICAgYXBwIHRyaWVzIHRvIGRvIGEgbG93bGV2ZWwgd3JpdGUsIHRoZXkgZG8gaXQgaW4gYSBGQVQgd2F5CiAgICAgICAgICAgIC0tIEZBVCBkb2VzIG5vdCBtaXggd2l0aCBFeHRlbmRlZDIpLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPG5vdGU+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFRoaXMgc2V0dGluZyBpcyBub3QgcmVhbGx5IGltcG9ydGFudDsgYWxtb3N0IGFsbCBhcHBzCiAgICAgICAgICAgICAgd2lsbCBoYXZlIG5vIHByb2JsZW0gaWYgaXQgcmVtYWlucyB1bnNwZWNpZmllZC4gRm9yCiAgICAgICAgICAgICAgQ0QtUk9NcyB5b3UgbWlnaHQgd2FudCB0byBhZGQgaXQgdG8gZ2V0IGF1dG9tYXRpYyBsYWJlbAogICAgICAgICAgICAgIGRldGVjdGlvbiwgdGhvdWdoLiBJZiB5b3UgYXJlIHVuc3VyZSBhYm91dCBzcGVjaWZ5aW5nCiAgICAgICAgICAgICAgZGV2aWNlIG5hbWVzLCBqdXN0IGxlYXZlIG91dCB0aGlzIHNldHRpbmcgZm9yIHlvdXIKICAgICAgICAgICAgICBkcml2ZXMuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbm90ZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBIZXJlIGlzIGEgc2V0dXAgZm9yIERyaXZlIFgsIGEgZ2VuZXJpYyBoYXJkIGRyaXZlOgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CltEcml2ZSBYXQoiUGF0aCIgPSAiL2Rvcy1hIgoiVHlwZSIgPSAiaGQiCiJMYWJlbCIgPSAiSGFyZCBEcml2ZSIKIkZpbGVzeXN0ZW0iID0gIndpbjk1IgpUaGlzIGlzIGEgc2V0dXAgZm9yIERyaXZlIFgsIGEgZ2VuZXJpYyBDRC1ST00gZHJpdmU6CltEcml2ZSBYXQoiUGF0aCIgPSAiL2Rvcy1kIgoiVHlwZSIgPSAiY2Ryb20iCiJMYWJlbCIgPSAiVG90YWwgQW5uaWhpbGF0aW9uIgoiRmlsZXN5c3RlbSIgPSAid2luOTUiCiJEZXZpY2UiID0gIi9kZXYvaGRjIgpBbmQgaGVyZSBpcyBhIHNldHVwIGZvciBEcml2ZSBYLCBhIGdlbmVyaWMgZmxvcHB5IGRyaXZlOgpbRHJpdmUgWF0KIlR5cGUiID0gImZsb3BweSIKIlBhdGgiID0gIi9tbnQvZmxvcHB5IgoiTGFiZWwiID0gIkZsb3BweSBEcml2ZSIKIlNlcmlhbCIgPSAiODc2NTQzMjEiCiJGaWxlc3lzdGVtIiA9ICJ3aW45NSIKIkRldmljZSIgPSAiL2Rldi9mZDAiCiAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9zZWN0Mz4KCiAgICAgICAgPHNlY3QzPgogICAgICAgICAgPHRpdGxlPlRoZSBbd2luZV0gU2VjdGlvbiA8L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoZSBbd2luZV0gc2VjdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGNvbnRhaW5zIGFsbCBraW5kcwogICAgICAgICAgICBvZiBnZW5lcmFsIHNldHRpbmdzIGZvciBXaW5lLiBXaGVuIHNwZWNpZnlpbmcgdGhlIGRpcmVjdG9yaWVzCiAgICAgICAgICAgIGZvciB0aGUgZGlyZWN0b3J5IHJlbGF0ZWQgc2V0dGluZ3MsIG1ha2UgdGhlbSBhcyB0aGV5IHdvdWxkCiAgICAgICAgICAgIGFwcGVhciBpbiB3aW5lLiBJZiB5b3VyIGRyaXZlIDxtZWRpYWxhYmVsPkM8L21lZGlhbGFiZWw+CiAgICAgICAgICAgIGhhcyBhIHBhdGggb2YgPGZpbGVuYW1lPi9kb3M8L2ZpbGVuYW1lPiwgYW5kIHlvdXIKICAgICAgICAgICAgPGZpbGVuYW1lPndpbmRvd3M8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaXMgbG9jYXRlZCBpbgogICAgICAgICAgICA8ZmlsZW5hbWU+L2Rvcy93aW5kb3dzPC9maWxlbmFtZT4sIHRoZW4gdXNlOgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IldpbmRvd3MiID0gImM6XFx3aW5kb3dzIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhpcyBzZXRzIHVwIHRoZSA8ZmlsZW5hbWU+d2luZG93czwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KICAgICAgICAgICAgTWFrZSBvbmUgaWYgeW91IGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuIE5PIFRSQUlMSU5HIFNMQVNICiAgICAgICAgICAgIChOT1QgPGZpbGVuYW1lPkM6XFx3aW5kb3dzXDwvZmlsZW5hbWU+KSEKICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlN5c3RlbSIgPSAiYzpcXHdpbmRvd3NcXHN5c3RlbSI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBUaGlzIHNldHMgdXAgd2hlcmUgdGhlIHdpbmRvd3Mgc3lzdGVtIGZpbGVzIGFyZS4gU2hvdWxkCiAgICAgICAgICAgIHJlc2lkZSBpbiB0aGUgZGlyZWN0b3J5IHVzZWQgZm9yIHRoZQogICAgICAgICAgICA8bGl0ZXJhbD5XaW5kb3dzPC9saXRlcmFsPiBzZXR0aW5nLiBJZiB5b3UgZG9uJ3QgaGF2ZQogICAgICAgICAgICA8ZmlsZW5hbWU+d2luZG93czwvZmlsZW5hbWU+IHRoZW4gdGhpcyBpcyB3aGVyZSB0aGUgc3lzdGVtCiAgICAgICAgICAgIGZpbGVzIHdpbGwgZ28uIEFnYWluLCBOTyBUUkFJTElORyBTTEFTSCEKICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlRlbXAiID0gImM6XFx0ZW1wIjwvcHJvZ3JhbWxpc3Rpbmc+IFRoaXMgc2hvdWxkCiAgICAgICAgICAgIGJlIHRoZSBkaXJlY3RvcnkgeW91IHdhbnQgeW91ciB0ZW1wIGZpbGVzIHN0b3JlZCBpbi4gWU9VCiAgICAgICAgICAgIE1VU1QgSEFWRSBXUklURSBBQ0NFU1MgVE8gSVQuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgoiUGF0aCIgPSAiYzpcXHdpbmRvd3M7YzpcXHdpbmRvd3NcXHN5c3RlbTtjOlxcYmxhbmNvIgogICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIEJlaGF2ZXMgbGlrZSB0aGUgPGVudmFyPlBBVEg8L2VudmFyPiBzZXR0aW5nIG9uIFVOSVgKICAgICAgICAgICAgYm94ZXMuIFdoZW4gd2luZSBpcyBydW4gbGlrZSA8dXNlcmlucHV0PndpbmUKICAgICAgICAgICAgICBzb2wuZXhlPC91c2VyaW5wdXQ+LCBpZiA8ZmlsZW5hbWU+c29sLmV4ZTwvZmlsZW5hbWU+CiAgICAgICAgICAgIHJlc2lkZXMgaW4gYSBkaXJlY3Rvcnkgc3BlY2lmaWVkIGluIHRoZQogICAgICAgICAgICA8bGl0ZXJhbD5QYXRoPC9saXRlcmFsPiBzZXR0aW5nLCB3aW5lIHdpbGwgcnVuIGl0IChPZgogICAgICAgICAgICBjb3Vyc2UsIGlmIDxmaWxlbmFtZT5zb2wuZXhlPC9maWxlbmFtZT4gcmVzaWRlcyBpbiB0aGUKICAgICAgICAgICAgY3VycmVudCBkaXJlY3RvcnksIHdpbmUgd2lsbCBydW4gdGhhdCBvbmUpLiBNYWtlIHN1cmUgaXQKICAgICAgICAgICAgYWx3YXlzIGhhcyB5b3VyIDxmaWxlbmFtZT53aW5kb3dzPC9maWxlbmFtZT4gZGlyZWN0b3J5IGFuZAogICAgICAgICAgICBzeXN0ZW0gZGlyZWN0b3J5IChGb3IgdGhpcyBzZXR1cCwgaXQgbXVzdCBoYXZlCiAgICAgICAgICAgIDxmaWxlbmFtZT4iYzpcXHdpbmRvd3M7YzpcXHdpbmRvd3NcXHN5c3RlbSI8L2ZpbGVuYW1lPikuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJHcmFwaGljc0RyaXZlciIgPSAieDExZHJ2fHR0eWRydiI8L3Byb2dyYW1saXN0aW5nPgoJICAgIFNldHMgdGhlIGdyYXBoaWNzIGRyaXZlciB0byB1c2UgZm9yIFdpbmUgb3V0cHV0LgoJICAgIHgxMWRydiBpcyBmb3IgWDExIG91dHB1dCwgdHR5ZHJ2IGlzIGZvciB0ZXh0IGNvbnNvbGUgb3V0cHV0LgoJICAgIFdBUk5JTkc6IGlmIHlvdSB1c2UgdHR5ZHJ2IGhlcmUsIHRoZW4geW91IHdvbid0IGJlIGFibGUgdG8gcnVuCgkgICAgYW55IFdpbmRvd3MgR1VJIHByb2dyYW1zLiBUaHVzIHRoaXMgb3B0aW9uIGlzIG1haW5seSBpbnRlcmVzdGluZwoJICAgIGZvciBlLmcuIGVtYmVkZGVkIHVzZSBvZiBXaW5lIGluIHdlYiBzZXJ2ZXIgc2NyaXB0cy4KCSAgPC9wYXJhPgoJICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJQcmludGVyIiA9ICJvZmZ8b24iPC9wcm9ncmFtbGlzdGluZz4gVGVsbHMgd2luZQogICAgICAgICAgICB3aGV0aGVyIHRvIGFsbG93IHByaW50aW5nIHZpYSBwcmludGVyIGRyaXZlcnMgdG8gd29yay4KCSAgICBUaGlzIG9wdGlvbiBpc24ndCBuZWVkZWQgZm9yIG91ciBidWlsdGluIHBzZHJ2IHByaW50ZXIgZHJpdmVyCgkgICAgYXQgYWxsLgogICAgICAgICAgICBVc2luZyB0aGVzZSB0aGluZ3MgYXJlIHByZXR0eSBhbHBoYSwgc28geW91IG1pZ2h0IHdhbnQgdG8KICAgICAgICAgICAgd2F0Y2ggb3V0LiBTb21lIHBlb3BsZSBtaWdodCBmaW5kIGl0IHVzZWZ1bCwgaG93ZXZlci4gSWYKICAgICAgICAgICAgeW91J3JlIG5vdCBwbGFubmluZyBvbiB3b3JraW5nIG9uIHByaW50aW5nIHZpYSB3aW5kb3dzIHByaW50ZXIKCSAgICBkcml2ZXJzLCBkb24ndCBldmVuIGFkZCB0aGlzIHRvIHlvdXIgd2luZSBjb25maWcgZmlsZQoJICAgIChJdCBwcm9iYWJseSBpc24ndCBhbHJlYWR5IGluIGl0KS4KCSAgICBDaGVjayBvdXQgdGhlIFtzcG9vbGVyXSBhbmQgW3BhcmFsbGVscG9ydHNdIHNlY3Rpb25zIHRvby4KICAgICAgICAgIDwvcGFyYT4KCSAgPHBhcmE+CgkgICAgPHByb2dyYW1saXN0aW5nPiJTaGVsbExpbmtlciIgPSAid2luZXNoZWxsbGluayI8L3Byb2dyYW1saXN0aW5nPgoJICAgIFRoaXMgc2V0dGluZyBzcGVjaWZpZXMgdGhlIHNoZWxsIGxpbmtlciBzY3JpcHQgdG8gdXNlIGZvciBzZXR0aW5nCgkgICAgdXAgV2luZG93cyBpY29ucyBpbiBlLmcuIEtERSBvciBHbm9tZSB0aGF0IGFyZSBnaXZlbiBieSBwcm9ncmFtcwoJICAgIG1ha2luZyB1c2Ugb2YgYXBwcm9wcmlhdGUgc2hlbGwzMi5kbGwgZnVuY3Rpb25hbGl0eSB0byBjcmVhdGUKCSAgICBpY29ucyBvbiB0aGUgZGVza3RvcC9zdGFydCBtZW51IGR1cmluZyBpbnN0YWxsYXRpb24uCgkgIDwvcGFyYT4KCSAgPHBhcmE+CgkgICAgPHByb2dyYW1saXN0aW5nPiJTaG93RGlyU3ltbGlua3MiID0gIjEiPC9wcm9ncmFtbGlzdGluZz4KCSAgICBXaW5lIGRvZXNuJ3QgcGFzcyBkaXJlY3Rvcnkgc3ltbGlua3MgdG8gV2luZG93cyBwcm9ncmFtcyBieQoJICAgIGRlZmF1bHQsIGFzIGRvaW5nIHNvIG1heSBjcmFzaCBzb21lIHByb2dyYW1zIHRoYXQgZG8KCSAgICByZWN1cnNpdmUgbG9va3VwcyBvZiB3aG9sZSBzdWJkaXJlY3RvcnkgdHJlZXMKCSAgICB3aGVuZXZlciBhIGRpcmVjdG9yeSBzeW1saW5rIHBvaW50cyBiYWNrIHRvIGl0c2VsZiBvciBvbmUgb2YgaXRzCgkgICAgcGFyZW50IGRpcmVjdG9yaWVzLgoJICAgIFRoYXQncyB3aHkgd2UgZGlzYWxsb3dlZCB0aGUgdXNlIG9mIGRpcmVjdG9yeSBzeW1saW5rcwoJICAgIGFuZCBhZGRlZCB0aGlzIHNldHRpbmcgdG8gcmVlbmFibGUgKCIxIikgdGhpcyBmdW5jdGlvbmFsaXR5LgoJICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJTeW1ib2xUYWJsZUZpbGUiID0gIndpbmUuc3ltIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFNldHMgdXAgdGhlIHN5bWJvbCB0YWJsZSBmaWxlIGZvciB0aGUgd2luZSBkZWJ1Z2dlci4gWW91CiAgICAgICAgICAgIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZmlkZGxlIHdpdGggdGhpcy4gTWF5IGJlIHVzZWZ1bCBpZgogICAgICAgICAgICB5b3VyIHdpbmUgaXMgc3RyaXBwZWQuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9zZWN0Mz4KCiAgICAgICAgPHNlY3QzPgogICAgICAgICAgPHRpdGxlPkludHJvZHVjdGlvbiBUbyBETEwgU2VjdGlvbnM8L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoZXJlIGFyZSBhIGZldyB0aGluZ3MgeW91IHdpbGwgbmVlZCB0byBrbm93IGJlZm9yZQogICAgICAgICAgICBjb25maWd1cmluZyB0aGUgRExMIHNlY3Rpb25zIGluIHlvdXIgd2luZSBjb25maWd1cmF0aW9uCiAgICAgICAgICAgIGZpbGUuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8c2VjdDQ+CiAgICAgICAgICAgIDx0aXRsZT5XaW5kb3dzIERMTCBQYWlyczwvdGl0bGU+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIE1vc3Qgd2luZG93cyBETEwncyBoYXZlIGEgd2luMTYgKFdpbmRvd3MgMy54KSBhbmQgd2luMzIKICAgICAgICAgICAgICAoV2luZG93cyA5eC9OVCkgZm9ybS4gIFRoZSBjb21iaW5hdGlvbiBvZiB0aGUgd2luMTYgYW5kCiAgICAgICAgICAgICAgd2luMzIgRExMIHZlcnNpb25zIGFyZSBjYWxsZWQgdGhlICJETEwgcGFpciIuIFRoaXMgaXMgYQogICAgICAgICAgICAgIGxpc3Qgb2YgdGhlIG1vc3QgY29tbW9uIHBhaXJzOgogICAgICAgICAgICA8L3BhcmE+CgogICAgICAgICAgICA8aW5mb3JtYWx0YWJsZT4KICAgICAgICAgICAgICA8dGdyb3VwIGNvbHM9IjMiPgogICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgICAgIDxlbnRyeT5XaW4xNjwvZW50cnk+CiAgICAgICAgICAgICAgICAgICAgPGVudHJ5PldpbjMyPC9lbnRyeT4KICAgICAgICAgICAgICAgICAgICA8ZW50cnk+CiAgICAgICAgICAgICAgICAgICAgICBOYXRpdmUKICAgICAgICAgICAgICAgICAgICAgIDxmb290bm90ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgSXMgaXQgcG9zc2libGUgdG8gdXNlIG5hdGl2ZSBkbGwgd2l0aCB3aW5lPwogICAgICAgICAgICAgICAgICAgICAgICAgIChTZWUgbmV4dCBzZWN0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgICAgICAgICAgICA8L2Zvb3Rub3RlPgogICAgICAgICAgICAgICAgICAgIDwvZW50cnk+CiAgICAgICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgICAgICA8ZW50cnk+S0VSTkVMPC9lbnRyeT4KICAgICAgICAgICAgICAgICAgICA8ZW50cnk+S0VSTkVMMzI8L2VudHJ5PgogICAgICAgICAgICAgICAgICAgIDxlbnRyeT5ObyE8L2VudHJ5PgogICAgICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgICAgICA8ZW50cnk+VVNFUjwvZW50cnk+CiAgICAgICAgICAgICAgICAgICAgPGVudHJ5PlVTRVIzMjwvZW50cnk+CiAgICAgICAgICAgICAgICAgICAgPGVudHJ5Pk5vITwvZW50cnk+CiAgICAgICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgICAgIDxlbnRyeT5TSEVMTDwvZW50cnk+CiAgICAgICAgICAgICAgICAgICAgPGVudHJ5PlNIRUxMMzI8L2VudHJ5PgogICAgICAgICAgICAgICAgICAgIDxlbnRyeT5ZZXM8L2VudHJ5PgogICAgICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgICAgICA8ZW50cnk+R0RJPC9lbnRyeT4KICAgICAgICAgICAgICAgICAgICA8ZW50cnk+R0RJMzI8L2VudHJ5PgogICAgICAgICAgICAgICAgICAgIDxlbnRyeT5ObyE8L2VudHJ5PgogICAgICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgICAgICA8ZW50cnk+Q09NTURMRzwvZW50cnk+CiAgICAgICAgICAgICAgICAgICAgPGVudHJ5PkNPTURMRzMyPC9lbnRyeT4KICAgICAgICAgICAgICAgICAgICA8ZW50cnk+WWVzPC9lbnRyeT4KICAgICAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICAgICAgPGVudHJ5PlZFUjwvZW50cnk+CiAgICAgICAgICAgICAgICAgICAgPGVudHJ5PlZFUlNJT048L2VudHJ5PgogICAgICAgICAgICAgICAgICAgIDxlbnRyeT5ZZXM8L2VudHJ5PgogICAgICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgPC90Z3JvdXA+CiAgICAgICAgICAgIDwvaW5mb3JtYWx0YWJsZT4KICAgICAgICAgIDwvc2VjdDQ+CgogICAgICAgICAgPHNlY3Q0PgogICAgICAgICAgICA8dGl0bGU+RGlmZmVyZW50IEZvcm1zIE9mIERMTCdzPC90aXRsZT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgVGhlcmUgYXJlIGEgZmV3IGRpZmZlcmVudCBmb3JtcyBvZiBETEwncyB3aW5lIGNhbiBsb2FkOgogICAgICAgICAgICAgIDx2YXJpYWJsZWxpc3Q+CiAgICAgICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgICAgICA8dGVybT5uYXRpdmU8L3Rlcm0+CiAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KICAgICAgICAgICAgICAgICAgICAgIFRoZSBETEwncyB0aGF0IGFyZSBpbmNsdWRlZCB3aXRoIHdpbmRvd3MuIE1hbnkKICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd3MgRExMJ3MgY2FuIGJlIGxvYWRlZCBpbiB0aGVpciBuYXRpdmUKICAgICAgICAgICAgICAgICAgICAgIGZvcm0uIE1hbnkgdGltZXMgdGhlc2UgbmF0aXZlIHZlcnNpb25zIHdvcmsKICAgICAgICAgICAgICAgICAgICAgIGJldHRlciB0aGFuIHRoZWlyIG5vbi1NaWNyb3NvZnQgZXF1aXZhbGVudCAtLQogICAgICAgICAgICAgICAgICAgICAgb3RoZXIgdGltZXMgdGhleSBkb24ndC4KICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICAgICAgPHRlcm0+ZWxmZGxsPC90ZXJtPgogICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CiAgICAgICAgICAgICAgICAgICAgICBFTEYgZW5jYXBzdWxhdGVkIHdpbmRvd3MgRExMJ3MuIFRoaXMgaXMgY3VycmVudGx5CiAgICAgICAgICAgICAgICAgICAgICBleHBlcmltZW50YWwgKE5vdCB3b3JraW5nIHlldCkuCiAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgICAgIDx0ZXJtPnNvPC90ZXJtPgogICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CiAgICAgICAgICAgICAgICAgICAgICBOYXRpdmUgRUxGIGxpYnJhcmllcy4gV2lsbCBub3Qgd29yayB5ZXQuCiAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgICAgIDx0ZXJtPmJ1aWx0aW48L3Rlcm0+CiAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KICAgICAgICAgICAgICAgICAgICAgIFRoZSBtb3N0IGNvbW1vbiBmb3JtIG9mIERMTCBsb2FkaW5nLiBUaGlzIGlzCiAgICAgICAgICAgICAgICAgICAgICB3aGF0IHlvdSB3aWxsIHVzZSBpZiB0aGUgRExMIGlzIGVycm9yLXByb25lIGluCiAgICAgICAgICAgICAgICAgICAgICBuYXRpdmUgZm9ybSAoS0VSTkVMIGZvciBleGFtcGxlKSwgeW91IGRvbid0IGhhdmUKICAgICAgICAgICAgICAgICAgICAgIHRoZSBuYXRpdmUgRExMLCBvciB5b3UganVzdCB3YW50IHRvIGJlCiAgICAgICAgICAgICAgICAgICAgICBNaWNyb3NvZnQtZnJlZS4KICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L3NlY3Q0PgogICAgICAgIDwvc2VjdDM+CgogICAgICAgIDxzZWN0Mz4KICAgICAgICAgIDx0aXRsZT5UaGUgW0RsbERlZmF1bHRzXSBTZWN0aW9uPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGVzZSBzZXR0aW5ncyBwcm92aWRlIHdpbmUncyBkZWZhdWx0IGhhbmRsaW5nIG9mIERMTCBsb2FkaW5nLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iRGVmYXVsdExvYWRPcmRlciIgPSIgbmF0aXZlLCBzbywgYnVpbHRpbiI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoaXMgc2V0dGluZyBpcyBhIGNvbW1hLWRlbGltaXRlZCBsaXN0IG9mIHRoZSBvcmRlciBpbgogICAgICAgICAgICB3aGljaCB0byBhdHRlbXB0IGxvYWRpbmcgRExMcy4gSWYgdGhlIGZpcnN0IG9wdGlvbiBmYWlscywKICAgICAgICAgICAgaXQgd2lsbCB0cnkgdGhlIHNlY29uZCwgYW5kIHNvIG9uLiBUaGUgb3JkZXIgc3BlY2lmaWVkCiAgICAgICAgICAgIGFib3ZlIGlzIHByb2JhYmx5IHRoZSBiZXN0IGluIG1vc3QgY29uZGl0aW9ucy4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L3NlY3QzPgoKICAgICAgICA8c2VjdDM+CiAgICAgICAgICA8dGl0bGU+VGhlIFtEbGxQYWlyc10gU2VjdGlvbjwvdGl0bGU+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgIEF0IG9uZSB0aW1lLCB0aGVyZSB3YXMgYSBzZWN0aW9uIGNhbGxlZCBbRGxsUGFpcnNdIGluIHRoZSAKICAgICAgICAgIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlLCBidXQgdGhpcyBoYXMgYmVlbiBvYnNvbGV0ZWQKICAgICAgICAgIGJlY2F1c2UgdGhlIHBhaXJpbmcgaW5mb3JtYXRpb24gaGFzIG5vdyBiZWVuIGVtYmVkZGVkIGludG8KICAgICAgICAgIFdpbmUgaXRzZWxmLiAoVGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHdhcyBtZXJlbHkgdG8gYmUKICAgICAgICAgIGFibGUgdG8gaXNzdWUgd2FybmluZ3MgaWYgdGhlIHVzZXIgYXR0ZW1wdGVkIHRvIHBhaXIKICAgICAgICAgIGNvZGVwZW5kZW50IDE2LWJpdC8zMi1iaXQgRExMcyBvZiBkaWZmZXJlbnQgdHlwZXMuKSBJZiB5b3UKICAgICAgICAgIHN0aWxsIGhhdmUgdGhpcyBpbiB5b3VyIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPiBvcgogICAgICAgICAgPGZpbGVuYW1lPn4vLndpbmUvY29uZmlnPC9maWxlbmFtZT4sIHlvdSBtYXkgc2FmZWx5IGRlbGV0ZSBpdC4KICAgICAgICAgIDwvcGFyYT4KCTwvc2VjdDM+CgogICAgICAgIDxzZWN0Mz4KICAgICAgICAgIDx0aXRsZT5UaGUgW0RsbE92ZXJyaWRlc10gU2VjdGlvbjwvdGl0bGU+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhlIGZvcm1hdCBmb3IgdGhpcyBzZWN0aW9uIGlzIHRoZSBzYW1lIGZvciBlYWNoIGxpbmU6CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KJmx0O0RMTD57LCZsdDtETEw+LCZsdDtETEw+Li4ufSA9ICZsdDtGT1JNPnssJmx0O0ZPUk0+LCZsdDtGT1JNPi4uLn0KICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBGb3IgZXhhbXBsZSwgdG8gbG9hZCBidWlsdGluIEtFUk5FTCBwYWlyIChjYXNlIGRvZXNuJ3QKICAgICAgICAgICAgbWF0dGVyIGhlcmUpOgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CiJrZXJuZWwsa2VybmVsMzIiID0gImJ1aWx0aW4iCiAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVG8gbG9hZCB0aGUgbmF0aXZlIENPTU1ETEcgcGFpciwgYnV0IGlmIHRoYXQgZG9lc24ndCB3b3JrCiAgICAgICAgICAgIHRyeSBidWlsdGluOgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CiJjb21tZGxnLGNvbWRsZzMyIiA9ICJuYXRpdmUsYnVpbHRpbiIKICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUbyBsb2FkIHRoZSBuYXRpdmUgQ09NQ1RMMzI6CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KImNvbWN0bDMyIiA9ICJuYXRpdmUiCiAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgSGVyZSBpcyBhIGdvb2QgZ2VuZXJpYyBzZXR1cCAoQXMgaXQgaXMgZGVmaW5lZCBpbiBjb25maWcKICAgICAgICAgICAgdGhhdCB3YXMgaW5jbHVkZWQgd2l0aCB5b3VyIHdpbmUgcGFja2FnZSk6CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KW0RsbE92ZXJyaWRlc10KImNvbW1kbGciICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoiY29tZGxnMzIiICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJ2ZXIiICAgICAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKInZlcnNpb24iICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoic2hlbGwiICAgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJzaGVsbDMyIiAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKImx6ZXhwYW5kIiAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoibHozMiIgICAgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJjb21jdGwzMiIgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKImNvbW1jdHJsIiAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoid3NvY2szMiIgICAgICA9ICJidWlsdGluIgoid2luc29jayIgICAgICA9ICJidWlsdGluIgoiYWR2YXBpMzIiICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJjcnRkbGwiICAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKIm1wciIgICAgICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoid2luc3Bvb2wuZHJ2IiA9ICJidWlsdGluLCBuYXRpdmUiCiJkZHJhdyIgICAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKImRpbnB1dCIgICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoiZHNvdW5kIiAgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJtbXN5c3RlbSIgICAgID0gImJ1aWx0aW4iCiJ3aW5tbSIgICAgICAgID0gImJ1aWx0aW4iCiJtc3ZjcnQiICAgICAgID0gIm5hdGl2ZSwgYnVpbHRpbiIKIm1zdmlkZW8iICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoibXN2ZnczMiIgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJtY2ljZGEuZHJ2IiAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKIm1jaXNlcS5kcnYiICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoibWNpd2F2ZS5kcnYiICA9ICJidWlsdGluLCBuYXRpdmUiCiJtY2lhdmkuZHJ2IiAgID0gIm5hdGl2ZSwgYnVpbHRpbiIKIm1jaWFuaW0uZHJ2IiAgPSAibmF0aXZlLCBidWlsdGluIgoibXNhY20uZHJ2IiAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJtc2FjbSIgICAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKIm1zYWNtMzIiICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoibWlkaW1hcC5kcnYiICA9ICJidWlsdGluLCBuYXRpdmUiCiJ3bmFzcGkzMiIgICAgID0gImJ1aWx0aW4iCiJpY21wIiAgICAgICAgID0gImJ1aWx0aW4iCiAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8bm90ZT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgWW91IHNlZSB0aGF0IGVsZmRsbCBvciBzbyBpcyB0aGUgZmlyc3Qgb3B0aW9uIGZvciBhIGZldwogICAgICAgICAgICAgIG9mIHRoZXNlIGRsbCdzLiBUaGlzIHdpbGwgZmFpbCBmb3IgeW91LCBidXQgeW91IHdvbid0CiAgICAgICAgICAgICAgbm90aWNlIGl0IGFzIHdpbmUgd2lsbCBqdXN0IHVzZSB0aGUgc2Vjb25kIG9yIHRoaXJkCiAgICAgICAgICAgICAgb3B0aW9uLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L25vdGU+CiAgICAgICAgPC9zZWN0Mz4KCiAgICAgICAgPHNlY3QzPgogICAgICAgICAgPHRpdGxlPlRoZSBbZm9udHNdIFNlY3Rpb248L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBzZXRzIHVwIHdpbmUncyBmb250IGhhbmRsaW5nLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iUmVzb2x1dGlvbiIgPSAiOTYiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBTaW5jZSB0aGUgd2F5IFggaGFuZGxlcyBmb250cyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgd2F5CiAgICAgICAgICAgIFdpbmRvd3MgZG9lcywgd2luZSB1c2VzIGEgc3BlY2lhbCBtZWNoYW5pc20gdG8gZGVhbCB3aXRoCiAgICAgICAgICAgIHRoZW0uIEl0IG11c3Qgc2NhbGUgdGhlbSB1c2luZyB0aGUgbnVtYmVyIGRlZmluZWQgaW4gdGhlCiAgICAgICAgICAgICJSZXNvbHV0aW9uIiBzZXR0aW5nLiA2MC0xMjAgYXJlIHJlYXNvbmFibGUgdmFsdWVzLCA5NiBpcwogICAgICAgICAgICBhIG5pY2UgaW4gdGhlIG1pZGRsZSBvbmUuIElmIHlvdSBoYXZlIHRoZSByZWFsIHdpbmRvd3MKICAgICAgICAgICAgZm9udHMgYXZhaWxhYmxlICg8ZmlsZW5hbWU+Jmx0O2RpcnMgdG8KICAgICAgICAgICAgICB3aW5lPi9kb2N1bWVudGF0aW9uL3R0ZnNlcnZlcjwvZmlsZW5hbWU+IGFuZAogICAgICAgICAgICA8ZmlsZW5hbWU+Zm9udHM8L2ZpbGVuYW1lPiksIHRoaXMgcGFyYW1ldGVyIHdpbGwgbm90IGJlIGFzCiAgICAgICAgICAgIGltcG9ydGFudC4gT2YgY291cnNlLCBpdCdzIGFsd2F5cyBnb29kIHRvIGdldCB5b3VyIFggZm9udHMKICAgICAgICAgICAgd29ya2luZyBhY2NlcHRhYmx5IGluIHdpbmUuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJEZWZhdWx0IiA9ICItYWRvYmUtdGltZXMtIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFRoZSBkZWZhdWx0IGZvbnQgd2luZSB1c2VzLiBGb29sIGFyb3VuZCB3aXRoIGl0IGlmIHlvdSdkIGxpa2UuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KT1BUSU9OQUw6IAogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoZSA8bGl0ZXJhbD5BbGlhczwvbGl0ZXJhbD4gc2V0dGluZyBhbGxvd3MgeW91IHRvIG1hcCBhbiBYIGZvbnQgdG8gYSBmb250CiAgICAgICAgICAgIHVzZWQgaW4gd2luZS4gVGhpcyBpcyBnb29kIGZvciBhcHBzIHRoYXQgbmVlZCBhIHNwZWNpYWwgZm9udCB5b3UgZG9uJ3QgaGF2ZSwKICAgICAgICAgICAgYnV0IGEgZ29vZCByZXBsYWNlbWVudCBleGlzdHMuIFRoZSBzeW50YXggaXMgbGlrZSBzbzoKICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgoiQWxpYXNYIiA9ICJbRmFrZSB3aW5kb3dzIG5hbWVdLFtSZWFsIFggbmFtZV0iJmx0OyxvcHRpb25hbCAibWFza2luZyIgc2VjdGlvbj4KICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBQcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBSZXBsYWNlICJBbGlhc1giIHdpdGggIkFsaWFzMCIsCiAgICAgICAgICAgIHRoZW4gIkFsaWFzMSIgYW5kIHNvIG9uLiBUaGUgZmFrZSB3aW5kb3dzIG5hbWUgaXMgdGhlIG5hbWUKICAgICAgICAgICAgdGhhdCB0aGUgZm9udCB3aWxsIGJlIHVuZGVyIGEgd2luZG93cyBhcHAgaW4gd2luZS4gVGhlCiAgICAgICAgICAgIHJlYWwgWCBuYW1lIGlzIHRoZSBmb250IG5hbWUgYXMgc2VlbiBieSBYIChSdW4KICAgICAgICAgICAgInhmb250c2VsIikuIFRoZSBvcHRpb25hbCAibWFza2luZyIgc2VjdGlvbiBhbGxvd3MgeW91IHRvCiAgICAgICAgICAgIHV0aWxpemUgdGhlIGZha2Ugd2luZG93cyBuYW1lIHlvdSBkZWZpbmUuIElmIGl0IGlzIG5vdAogICAgICAgICAgICB1c2VkLCB0aGVuIHdpbmUgd2lsbCBqdXN0IHRyeSB0byBleHRyYWN0IHRoZSBmYWtlIHdpbmRvd3MKICAgICAgICAgICAgbmFtZSBpdHNlbGYgYW5kIG5vdCB1c2UgdGhlIHZhbHVlIHlvdSBlbnRlci4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgYW4gYWxpYXMgd2l0aG91dCBtYXNraW5nLiBUaGUgZm9udCB3aWxsIHNob3cgdXAgaW4gd2luZG93cwogICAgICAgICAgICBhcHBzIGFzICJHb29nbGUiLiBXaGVuIGRlZmluaW5nIGFuIGFsaWFzIGluIGEgY29uZmlnIGZpbGUsIGZvcmdldCBhYm91dCBteQogICAgICAgICAgICBjb21tZW50IHRleHQgKFRoZSAiJmx0Oy0tIGJsYWgiIHN0dWZmKQogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CiJBbGlhczAiID0gIkZvbywtLWdvb2dsZS0iICAgICAgJmx0OwogICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB3aXRoIG1hc2tpbmcgZW5hYmxlZC4gVGhlIGZvbnQgd2lsbCBzaG93IHVwIGFzICJGb28iIGluCiAgICAgICAgICAgIHdpbmRvd3MgYXBwcy4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgoiQWxpYXMxIiA9ICJGb28sLS1nb29nbGUtLHN1YnN0IgogICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIEZvciBtb3JlIGluZm8gY2hlY2sgb3V0IDxmaWxlbmFtZT4mbHQ7ZGlycyB0byB3aW5lPi9kb2N1bWVudGF0aW9uL2ZvbnRzPC9maWxlbmFtZT4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L3NlY3QzPgoKICAgICAgICA8c2VjdDM+CiAgICAgICAgICA8dGl0bGU+VGhlIFtzZXJpYWxwb3J0c10sIFtwYXJhbGxlbHBvcnRzXSwgW3Nwb29sZXJdLCBhbmQgW3BvcnRzXSBTZWN0aW9uczwvdGl0bGU+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgRXZlbiB0aG91Z2ggaXQgc291bmRzIGxpa2UgYSBsb3Qgb2Ygc2VjdGlvbnMsIHRoZXNlIGFyZQogICAgICAgICAgICBhbGwgY2xvc2VseSByZWxhdGVkLiBUaGV5IGFyZSBhbGwgZm9yIGNvbW11bmljYXRpb25zIGFuZAogICAgICAgICAgICBwYXJhbGxlbCBwb3J0cy4gCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhlIFtzZXJpYWxwb3J0c10gc2VjdGlvbiB0ZWxscyB3aW5lIHdoYXQgc2VyaWFsIHBvcnRzIGl0CiAgICAgICAgICAgIGlzIGFsbG93ZWQgdG8gdXNlLgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IkNvbVgiID0gIi9kZXYvY3VhWSI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFJlcGxhY2UgPGxpdGVyYWw+WDwvbGl0ZXJhbD4gd2l0aCB0aGUgbnVtYmVyIG9mIHRoZSBDT00KICAgICAgICAgICAgcG9ydCBpbiBXaW5kb3dzICgxLTgpIGFuZCA8bGl0ZXJhbD5ZPC9saXRlcmFsPiB3aXRoIHRoZQogICAgICAgICAgICBudW1iZXIgb2YgaXQgaW4gPGxpdGVyYWw+WDwvbGl0ZXJhbD4gKFVzdWFsbHkgdGhlIG51bWJlcgogICAgICAgICAgICBvZiB0aGUgcG9ydCBpbiBXaW5kb3dzIG1pbnVzIDEpLiA8bGl0ZXJhbD5Db21YPC9saXRlcmFsPgogICAgICAgICAgICBjYW4gYWN0dWFsbHkgZXF1YWwgYW55IGRldmljZQogICAgICAgICAgICAoPG1lZGlhbGFiZWw+L2Rldi9tb2RlbTwvbWVkaWFsYWJlbD4gaXMgYWNjZXB0YWJsZSkuIEl0IGlzCiAgICAgICAgICAgIG5vdCBhbHdheXMgbmVjZXNzYXJ5IHRvIGRlZmluZSBhbnkgQ09NIHBvcnRzIChBbiBvcHRpb25hbAogICAgICAgICAgICBzZXR0aW5nKS4gSGVyZSBpcyBhbiBleGFtcGxlOgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IkNvbTEiID0gIi9kZXYvY3VhMCI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFVzZSBhcyBtYW55IG9mIHRoZXNlIGFzIHlvdSBsaWtlIGluIHRoZSBzZWN0aW9uIHRvIGRlZmluZQogICAgICAgICAgICBhbGwgb2YgdGhlIENPTSBwb3J0cyB5b3UgbmVlZC4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGUgW3BhcmFsbGVscG9ydHNdIHNlY3Rpb24gc2V0cyB1cCBhbnkgcGFyYWxsZWwgcG9ydHMKICAgICAgICAgICAgdGhhdCB3aWxsIGJlIGFsbG93ZWQgYWNjZXNzIHVuZGVyIHdpbmUuCiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iTHB0WCIgPSAiL2Rldi9scFkiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBTb3VuZHMgZmFtaWxpYXI/IFN5bnRheCBpcyBqdXN0IGxpa2UgdGhlIENPTSBwb3J0IHNldHRpbmcuCiAgICAgICAgICAgIFJlcGxhY2UgPGxpdGVyYWw+WDwvbGl0ZXJhbD4gd2l0aCBhIHZhbHVlIGZyb20gMS00IGFzIGl0CiAgICAgICAgICAgIGlzIGluIFdpbmRvd3MgYW5kIDxsaXRlcmFsPlk8L2xpdGVyYWw+IHdpdGggYSB2YWx1ZSBmcm9tCiAgICAgICAgICAgIDAtMyAoPGxpdGVyYWw+WTwvbGl0ZXJhbD4gaXMgdXN1YWxseSB0aGUgdmFsdWUgaW4gd2luZG93cwogICAgICAgICAgICBtaW51cyAxLCBqdXN0IGxpa2UgZm9yIENPTSBwb3J0cykuIFlvdSBkb24ndCBhbHdheXMgbmVlZAogICAgICAgICAgICB0byBkZWZpbmUgYSBwYXJhbGxlbCBwb3J0IChBS0EsIGl0J3Mgb3B0aW9uYWwpLiBBcyB3aXRoCiAgICAgICAgICAgIHRoZSBvdGhlciBzZWN0aW9uLCBMcHRYIGNhbiBlcXVhbCAgYW55IGRldmljZSAoTWF5YmUKICAgICAgICAgICAgPG1lZGlhbGFiZWw+L2Rldi9wcmludGVyPC9tZWRpYWxhYmVsPikuIEhlcmUgaXMgYW4KICAgICAgICAgICAgZXhhbXBsZTogIDxwcm9ncmFtbGlzdGluZz4iTHB0MSIgPSAiL2Rldi9scDAiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGUgW3Nwb29sZXJdIHNlY3Rpb24gd2lsbCBpbmZvcm0gd2luZSB3aGVyZSB0byBzcG9vbAogICAgICAgICAgICBwcmludCBqb2JzLiBVc2UgdGhpcyBpZiB5b3Ugd2FudCB0byB0cnkgcHJpbnRpbmcuIFdpbmUKICAgICAgICAgICAgZG9jcyBjbGFpbSB0aGF0IHNwb29saW5nIGlzICJyYXRoZXIgcHJpbWl0aXZlIiBhdCB0aGlzCiAgICAgICAgICAgIHRpbWUsIHNvIGl0IHdvbid0IHdvcmsgcGVyZmVjdGx5LiBJVCBJUyBPUFRJT05BTC4gVGhlIG9ubHkKICAgICAgICAgICAgc2V0dGluZyB5b3UgdXNlIGluIHRoaXMgc2VjdGlvbiB3b3JrcyB0byBtYXAgYSBwb3J0IChMUFQxLAogICAgICAgICAgICBmb3IgZXhhbXBsZSkgdG8gYSBmaWxlIG9yIGEgY29tbWFuZC4gSGVyZSBpcyBhbiBleGFtcGxlLAogICAgICAgICAgICBtYXBwaW5nIExQVDEgdG8gdGhlIGZpbGUgPGZpbGVuYW1lPm91dC5wczwvZmlsZW5hbWU+OiAKICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJMUFQxOiIgPSAib3V0LnBzIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kIG1hcHMgcHJpbnRpbmcgam9icyB0byBMUFQxIHRvIHRoZQogICAgICAgICAgICBjb21tYW5kIDxjb21tYW5kPmxwcjwvY29tbWFuZD4uIE5vdGljZSAgdGhlIHw6IAogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IkxQVDE6IiA9ICJ8bHByIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhlIFtwb3J0c10gc2VjdGlvbiBpcyB1c3VhbGx5IHVzZWZ1bCBvbmx5IGZvciBwZW9wbGUgd2hvCiAgICAgICAgICAgIG5lZWQgZGlyZWN0IHBvcnQgYWNjZXNzIGZvciBwcm9ncmFtcyByZXF1aXJpbmcgZG9uZ2xlcyBvcgogICAgICAgICAgICBzY2FubmVycy4gSUYgWU9VIERPTidUIE5FRUQgSVQsIERPTidUIFVTRSBJVCEgCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJyZWFkIiA9ICIweDc3OSwweDM3OSwweDI4MC0weDJhMCI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBHaXZlcyBkaXJlY3QgcmVhZCBhY2Nlc3MgdG8gdGhvc2UgSU8ncy4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IndyaXRlIiA9ICIweDc3OSwweDM3OSwweDI4MC0weDJhMCI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBHaXZlcyBkaXJlY3Qgd3JpdGUgYWNjZXNzIHRvIHRob3NlIElPJ3MuIEl0J3MgcHJvYmFibHkgYQogICAgICAgICAgICBnb29kIGlkZWEgdG8ga2VlcCB0aGUgdmFsdWVzIG9mIHRoZQogICAgICAgICAgICA8bGl0ZXJhbD5yZWFkPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+d3JpdGU8L2xpdGVyYWw+CiAgICAgICAgICAgIHNldHRpbmdzIHRoZSBzYW1lLiBUaGlzIHN0dWZmIHdpbGwgb25seSB3b3JrIHdoZW4geW91J3JlCiAgICAgICAgICAgIHJvb3QuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9zZWN0Mz4KCiAgICAgICAgPHNlY3QzPgogICAgICAgICAgPHRpdGxlPlRoZSBbc3B5XSwgW1JlZ2lzdHJ5XSwgW3R3ZWFrLmxheW91dF0sIGFuZCBbcHJvZ3JhbXNdIFNlY3Rpb25zPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBbc3B5XSBpcyB1c2VkIHRvIGluY2x1ZGUgb3IgZXhjbHVkZSBkZWJ1ZyBtZXNzYWdlcywgYW5kIHRvCiAgICAgICAgICAgIG91dHB1dCB0aGVtIHRvIGEgZmlsZS4gVGhlIGxhdHRlciBpcyByYXJlbHkgdXNlZC4gVEhFU0UKICAgICAgICAgICAgQVJFIEFMTCBPUFRJT05BTCBBTkQgWU9VIFBST0JBQkxZIERPTidUIE5FRUQgVE8gQUREIE9SCiAgICAgICAgICAgIFJFTU9WRSBBTllUSElORyBJTiBUSElTIFNFQ1RJT04gVE8gWU9VUiBDT05GSUcuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJGaWxlIiA9ICIvYmxhbmNvIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFNldHMgdGhlIGxvZ2ZpbGUgZm9yIHdpbmUuIFNldCB0byBDT04gdG8gbG9nIHRvIHN0YW5kYXJkIG91dC4KICAgICAgICAgICAgVEhJUyBJUyBSQVJFTFkgVVNFRC4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IkV4Y2x1ZGUiID0gIldNX1NJWkU7V01fVElNRVI7IjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIEV4Y2x1ZGVzIGRlYnVnIG1lc3NhZ2VzIGFib3V0IDxjb25zdGFudD5XTV9TSVpFPC9jb25zdGFudD4KICAgICAgICAgICAgYW5kIDxjb25zdGFudD5XTV9USU1FUjwvY29uc3RhbnQ+IGluIHRoZSBsb2dmaWxlLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iSW5jbHVkZSIgPSAiV01fU0laRTtXTV9USU1FUjsiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgSW5jbHVkZXMgZGVidWcgbWVzc2FnZXMgYWJvdXQgPGNvbnN0YW50PldNX1NJWkU8L2NvbnN0YW50PgogICAgICAgICAgICBhbmQgPGNvbnN0YW50PldNX1RJTUVSPC9jb25zdGFudD4gaW4gdGhlIGxvZ2ZpbGUuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgW1JlZ2lzdHJ5XSBjYW4gYmUgdXNlZCB0byB0ZWxsIHdpbmUgd2hlcmUgeW91ciBvbGQgd2luZG93cwogICAgICAgICAgICByZWdpc3RyeSBmaWxlcyBleGlzdC4gVGhpcyBzZWN0aW9uIGlzIGNvbXBsZXRlbHkgb3B0aW9uYWwKICAgICAgICAgICAgYW5kIHVzZWxlc3MgdG8gcGVvcGxlIHVzaW5nIHdpbmUgd2l0aG91dCBhbiBleGlzdGluZwogICAgICAgICAgICB3aW5kb3dzIGluc3RhbGxhdGlvbi4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlVzZXJGaWxlTmFtZSIgPSAiL2RpcnMvdG8vdXNlci5yZWciPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgVGhlIGxvY2F0aW9uIG9mIHlvdXIgb2xkIDxmaWxlbmFtZT51c2VyLnJlZzwvZmlsZW5hbWU+IGZpbGUuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgW3R3ZWFrLmxheW91dF0gaXMgZGV2b3RlZCB0byB3aW5lJ3MgbG9vay4gVGhlcmUgaXMgb25seQogICAgICAgICAgICBvbmUgc2V0dGluZyBmb3IgaXQuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJXaW5lTG9vayIgPSAid2luMzF8d2luOTV8d2luOTgiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgV2lsbCBjaGFuZ2UgdGhlIGxvb2sgb2Ygd2luZSBmcm9tIFdpbmRvd3MgMy4xIHRvIFdpbmRvd3MgOTUuCiAgICAgICAgICAgIFRoZSA8bGl0ZXJhbD53aW45ODwvbGl0ZXJhbD4gc2V0dGluZyBiZWhhdmVzCiAgICAgICAgICAgIGp1c3QgbGlrZSA8bGl0ZXJhbD53aW45NTwvbGl0ZXJhbD4gbW9zdCBvZiB0aGUgdGltZS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBbcHJvZ3JhbXNdIGNhbiBiZSB1c2VkIHRvIHNheSB3aGF0IHByb2dyYW1zIHJ1biB1bmRlcgogICAgICAgICAgICBzcGVjaWFsIGNvbmRpdGlvbnMuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJEZWZhdWx0IiA9ICIvcHJvZ3JhbS90by9leGVjdXRlLmV4ZSI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBTZXRzIHRoZSBwcm9ncmFtIHRvIGJlIHJ1biBpZiB3aW5lIGlzIHN0YXJ0ZWQgd2l0aG91dCBzcGVjaWZ5aW5nIGEgcHJvZ3JhbS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlN0YXJ0dXAiID0gIi9wcm9ncmFtL3RvL2V4ZWN1dGUuZXhlIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFNldHMgdGhlIHByb2dyYW0gdG8gYXV0b21hdGljYWxseSBiZSBydW4gYXQgc3RhcnR1cCBldmVyeSB0aW1lLgogICAgICAgICAgPC9wYXJhPgogICAgICAgIDwvc2VjdDM+CgogICAgICAgIDxzZWN0Mz4KICAgICAgICAgIDx0aXRsZT5UaGUgW1dpbk1NXSBTZWN0aW9uPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBbV2luTU1dIGlzIHVzZWQgdG8gZGVmaW5lIHdoaWNoIG11bHRpbWVkaWEgZHJpdmVycyBoYXZlIHRvIGJlIGxvYWRlZC4gU2luY2UKCSAgICB0aG9zZSBkcml2ZXJzIG1heSBkZXBlbmQgb24gdGhlIG11bHRpbWVkaWEgaW50ZXJmYWNlcyBhdmFpbGFibGUgb24geW91ciBzdXN0ZW0KCSAgICAoT1NTLCBBbHNhLi4uIHRvIG5hbWUgYSBmZXcpLCBpdCdzIG5lZWRlZCB0byBiZSBhYmxlIHRvIGNvbmZpZ3VyZSB3aGljaCBkcml2ZXIKCSAgICBoYXMgdG8gYmUgbG9hZGVkLgogICAgICAgICAgPC9wYXJhPgoKICAgICAgICAgIDxwYXJhPgoJICAgIFRoZSBjb250ZW50IG9mIHRoZSBzZWN0aW9uIGxvb2tzIGxpa2U6CgkgICAgPHByb2dyYW1saXN0aW5nPiAKW1dpbk1NXQoiRHJpdmVycyIgPSAid2luZW9zcy5kcnYiCiJXYXZlTWFwcGVyIiA9ICJtc2FjbS5kcnYiCiJNaWRpTWFwcGVyIiA9ICJtaWRpbWFwLmRydiIKCSAgICA8L3Byb2dyYW1saXN0aW5nPiAKCSAgICBBbGwgdGhlIGtleXMgbXVzdCBiZSBkZWZpbmVkOgoJICAgIDxpdGVtaXplZGxpc3Q+CgkgICAgICA8bGlzdGl0ZW0+CgkgICAgICAgIDxwYXJhPgoJCSAgVGhlICJEcml2ZXJzIiBrZXkgaXMgYSAnOycgc2VwYXJhdGVkIGxpc3Qgb2YgbW9kdWxlcyBuYW1lLCBlYWNoIG9mIAoJCSAgdGhlbSBjb250YWluaW5nIGEgbG93IGxldmVsIGRyaXZlci4gQWxsIHRob3NlIGRyaXZlcnMgd2lsbCBiZSBsb2FkZWQgCgkJICB3aGVuIE1NU1lTVEVNL1dJTk1NIGlzIHN0YXJ0ZWQgYW5kIHdpbGwgcHJvdmlkZSB0aGVpciBpbm5lciBmZWF0dXJlcy4KCSAgICAgICAgPC9wYXJhPgoJICAgICAgPC9saXN0aXRlbT4KCSAgICAgIDxsaXN0aXRlbT4KCSAgICAgICAgPHBhcmE+CgkJICBUaGUgIldhdmVNYXBwZXIiIHJlcHJlc2VudHMgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSBjb250YWluaW5nIHRoZSBXYXZlCgkJICBNYXBwZXIgZHJpdmVyLiBPbmx5IG9uZSB3YXZlIG1hcHBlciBjYW4gYmUgZGVmaW5lZCBpbiB0aGUgc3lzdGVtLgoJICAgICAgICA8L3BhcmE+CgkgICAgICA8L2xpc3RpdGVtPgoJICAgICAgPGxpc3RpdGVtPgoJICAgICAgICA8cGFyYT4KCQkgIFRoZSAiTWlkaU1hcHBlciIgcmVwcmVzZW50cyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIGNvbnRhaW5pbmcgdGhlIE1pZGkgCgkJICBNYXBwZXIgZHJpdmVyLiBPbmx5IG9uZSBNaWRpIG1hcHBlciBjYW4gYmUgZGVmaW5lZCBpbiB0aGUgc3lzdGVtLgoJICAgICAgICA8L3BhcmE+CgkgICAgICA8L2xpc3RpdGVtPgoJICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgICAgPC9wYXJhPgoJPC9zZWN0Mz4KCiAgICAgICAgPHNlY3QzPgogICAgICAgICAgPHRpdGxlPlRoZSBbQXBwRGVmYXVsdHNdIFNlY3Rpb248L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoZSBzZWN0aW9uIGlzIHVzZWQgdG8gb3ZlcndyaXRlIHRoZSBzZXR0aW5nIG9mIHRoaXMgZmlsZSBmb3IgYQogICAgICAgICAgICBzcGVjaWFsIHByb2dyYW0gd2l0aCBkaWZmZXJlbnQgc2V0dGluZ3MuCiAgICAgICAgICAgIFtBcHBEZWZhdWx0c10gaXMgbm90IHRoZSByZWFsIG5hbWUgb2YgdGhlIHNlY3Rpb24uIFRoZSByZWFsIG5hbWUKICAgICAgICAgICAgY29uc2lzdHMgb2YgdGhlIGxlYWRpbmcgd29yZCBBcHBEZWZhdWx0cyBmb2xsb3dlZCBieSB0aGUgbmFtZSAKICAgICAgICAgICAgb2YgdGhlIGV4ZWN1dGFibGUgdGhlIHNlY3Rpb24gaXMgdmFsaWQgZm9yLiBUaGUgZW5kIG9mIHRoZSBzZWN0aW9uCiAgICAgICAgICAgIG5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIHNlY3Rpb24gb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpdHMgCiAgICAgICAgICAgIHZhbHVlcyBzaG91bGQgYmUgb3ZlcndyaXR0ZW4gd2l0aCBkaWZmZXJlbnQgc2V0dGluZ3MuIFRoZSB0aHJlZSAKICAgICAgICAgICAgcGFydHMgb2YgdGhlIHNlY3Rpb24gbmFtZSBhcmUgc2VwYXJhdGVkIGJ5IHR3byBiYWNrc2xhc2hlcy4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBDdXJyZW50bHkgd2luZSBzdXBwb3J0cyBvbmx5IG92ZXJ3cml0aW5nIHRoZSBzZWN0aW9ucyAKICAgICAgICAgICAgW0RsbE92ZXJyaWRlc10gYW5kIFt4MTFkcnZdLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IG92ZXJ3cml0ZXMgdGhlIG5vcm1hbCBzZXR0aW5ncyBmb3IgYQogICAgICAgICAgICBwcm9ncmFtOgoJICAgIDxwcm9ncmFtbGlzdGluZz4gCjs7IGRlZmF1bHQgc2V0dGluZ3MKW3gxMWRydl0KIk1hbmFnZWQiID0gIlkiCiJEZXNrdG9wIiA9ICJOIgoKOzsgcnVuIGluc3RhbGwgaW4gZGVza3RvcCBtb2RlCltBcHBEZWZhdWx0c1xcaW5zdGFsbC5leGVcXHgxMWRydl0KIk1hbmFnZWQiID0gIk4iCiJEZXNrdG9wIiA9ICI4MDB4NjAwIgoJICAgIDwvcHJvZ3JhbWxpc3Rpbmc+IAogICAgICAgICAgPC9wYXJhPgogICAgICAgIDwvc2VjdDM+CiAgICAgIDwvc2VjdDI+CgogICAgICA8c2VjdDI+CiAgICAgICAgPHRpdGxlPldoZXJlIERvIEkgUHV0IEl0PzwvdGl0bGU+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBUaGUgd2luZSBjb25maWcgZmlsZSBjYW4gZ28gaW4gdHdvIHBsYWNlcy4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHZhcmlhYmxlbGlzdD4KICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx0ZXJtPjxmaWxlbmFtZT4vdXNyL2xvY2FsL2V0Yy93aW5lLmNvbmY8L2ZpbGVuYW1lPjwvdGVybT4KICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgogICAgICAgICAgICAgICAgQSBzeXN0ZW13aWRlIGNvbmZpZyBmaWxlLCB1c2VkIGZvciBhbnlvbmUgd2hvIGRvZXNuJ3QKICAgICAgICAgICAgICAgIGhhdmUgdGhlaXIgb3duLiBOT1RFOiB0aGlzIGZpbGUgaXMgY3VycmVudGx5IHVudXNlZCBhcyBhCiAgICAgICAgICAgICAgICBuZXcgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gbWVjaGFuaXNtIGlzIG5vdCBpbiBwbGFjZSBhdCB0aGlzCiAgICAgICAgICAgICAgICB0aW1lCiAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dGVybT48ZmlsZW5hbWU+JEhPTUUvLndpbmUvY29uZmlnPC9maWxlbmFtZT48L3Rlcm0+CiAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KICAgICAgICAgICAgICAgIFlvdXIgb3duIGNvbmZpZyBmaWxlLCB0aGF0IG9ubHkgaXMgdXNlZCBmb3IgeW91ciB1c2VyLiAKICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgICAgICA8cGFyYT4KICAgICAgICAgIFNvIGNvcHkgeW91ciB2ZXJzaW9uIG9mIHRoZSA8ZmlsZW5hbWU+d2luZS5jb25mPC9maWxlbmFtZT4gZmlsZSB0bwogICAgICAgICAgPGZpbGVuYW1lPi91c3IvbG9jYWwvZXRjL3dpbmUuY29uZjwvZmlsZW5hbWU+IG9yCiAgICAgICAgICA8ZmlsZW5hbWU+JEhPTUUvLndpbmUvY29uZmlnPC9maWxlbmFtZT4gZm9yIHdpbmUgdG8gcmVjb2duaXplCgkgIGl0LiAKICAgICAgICA8L3BhcmE+CiAgICAgIDwvc2VjdDI+CgogICAgICA8c2VjdDI+CiAgICAgICAgPHRpdGxlPldoYXQgSWYgSXQgRG9lc24ndCBXb3JrPzwvdGl0bGU+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBUaGVyZSBpcyBhbHdheXMgYSBjaGFuY2UgdGhhdCB0aGluZ3Mgd2lsbCBnbyB3cm9uZy4gSWYgdGhlCiAgICAgICAgICB1bnRoaW5rYWJsZSBoYXBwZW5zLCAgdHJ5IHRoZSBuZXdzZ3JvdXAsCiAgICAgICAgICA8c3lzdGVtaXRlbT5jb21wLmVtdWxhdG9ycy5tcy13aW5kb3dzLndpbmU8L3N5c3RlbWl0ZW0+LAoJICBvciB0aGUgSVJDbmV0IGNoYW5uZWwgPHN5c3RlbWl0ZW0+I1dpbmVIUTwvc3lzdGVtaXRlbT4gZm91bmQgb24KICAgICAgICAgIGlyYy5zdGVhbHRoLm5ldDo2NjY4LAkgb3IgY29ubmVjdGVkIHNlcnZlcnMuCgkgIE1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIGxvb2tlZCBvdmVyIHRoaXMgZG9jdW1lbnQgdGhvcm91Z2hseSwKCSAgYW5kIGhhdmUgYWxzbyByZWFkOgogICAgICAgIDwvcGFyYT4KICAgICAgICA8aXRlbWl6ZWRsaXN0PgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT48ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT48L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICA8ZmlsZW5hbWU+aHR0cDovL3d3dy5sYS1zb3JjaWVyZS5kZS93aW5lL2luZGV4Lmh0bWw8L2ZpbGVuYW1lPgogICAgICAgICAgICAgIChvcHRpb25hbCBidXQgcmVjb21tZW5kZWQpCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBJZiBpbmRlZWQgaXQgbG9va3MgbGlrZSB5b3UndmUgZG9uZSB5b3VyIHJlc2VhcmNoLCBiZQogICAgICAgICAgcHJlcGFyZWQgZm9yIGhlbHBmdWwgc3VnZ2VzdGlvbnMuIElmIHlvdSBoYXZlbid0LCBicmFjZQogICAgICAgICAgeW91cnNlbGYgZm9yIGhlYXZpbmcgZmxhbWluZy4KICAgICAgICA8L3BhcmE+CiAgICAgIDwvc2VjdDI+CiAgICA8L3NlY3QxPgoKICAgIDxzZWN0MSBpZD0id2luOTVsb29rIj4KICAgICAgPHRpdGxlPldpbjk1Lzk4IExvb2s8L3RpdGxlPgogICAgICA8cGFyYT4KICAgICAgICBXcml0dGVuIGJ5ICZuYW1lLWRhdmlkLWN1dGhiZXJ0OyA8ZW1haWw+JmVtYWlsLWRhdmlkLWN1dGhiZXJ0OzwvZW1haWw+CiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgKEV4dHJhY3RlZCBmcm9tIDxmaWxlbmFtZT53aW5lL2RvY3VtZW50YXRpb24vd2luOTVsb29rPC9maWxlbmFtZT4pCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgV2luOTUvV2luOTggaW50ZXJmYWNlIGNvZGUgaXMgYmVpbmcgaW50cm9kdWNlZC4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBJbnN0ZWFkIG9mIGNvbXBpbGluZyBXaW5lIGZvciBXaW4zLjEgdnMuIFdpbjk1IHVzaW5nCiAgICAgICAgPGNvbnN0YW50PiNkZWZpbmU8L2NvbnN0YW50PiBzd2l0Y2hlcywgdGhlIGNvZGUgbm93IGxvb2tzIGluIGEKICAgICAgICBzcGVjaWFsIFtUd2Vhay5MYXlvdXRdIHNlY3Rpb24gb2YKICAgICAgICA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPiBmb3IgYQogICAgICAgIDxsaXRlcmFsPiJXaW5lTG9vayIgPSAiV2luOTUiPC9saXRlcmFsPiBvcgogICAgICAgIDxsaXRlcmFsPiJXaW5lTG9vayIgPSAiV2luOTgiPC9saXRlcmFsPiBlbnRyeS4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBBIGZldyBuZXcgc2VjdGlvbnMgYW5kIGEgbnVtYmVyIG9mIGVudHJpZXMgaGF2ZSBiZWVuIGFkZGVkIHRvCiAgICAgICAgdGhlIDxmaWxlbmFtZT5+Ly53aW5lL2NvbmZpZzwvZmlsZW5hbWU+IGZpbGUgLS0gdGhlc2UgYXJlIGZvcgogICAgICAgIGRlYnVnZ2luZyB0aGUgV2luOTUgdHdlYWtzIG9ubHkgYW5kIG1heSBiZSByZW1vdmVkIGluIGEgZnV0dXJlCiAgICAgICAgcmVsZWFzZSEgIFRoZXNlIGVudHJpZXMvc2VjdGlvbnMgYXJlOgogICAgICA8L3BhcmE+CiAgICAgIDxwcm9ncmFtbGlzdGluZz4KW1R3ZWFrLkZvbnRzXQoiU3lzdGVtLkhlaWdodCIgPSAiJmx0O3BvaW50IHNpemU+IiAgICAjIFNldHMgdGhlIGhlaWdodCBvZiB0aGUgc3lzdGVtIHR5cGVmYWNlCiJTeXN0ZW0uQm9sZCIgPSAiW3RydWV8ZmFsc2VdIiAgICAgICMgV2hldGhlciB0aGUgc3lzdGVtIGZvbnQgc2hvdWxkIGJlIGJvbGRmYWNlZAoiU3lzdGVtLkl0YWxpYyIgPSAiW3RydWV8ZmFsc2VdIiAgICAjIFdoZXRoZXIgdGhlIHN5c3RlbSBmb250IHNob3VsZCBiZSBpdGFsaWNpemVkCiJTeXN0ZW0uVW5kZXJsaW5lIiA9ICJbdHJ1ZXxmYWxzZV0iICMgV2hldGhlciB0aGUgc3lzdGVtIGZvbnQgc2hvdWxkIGJlIHVuZGVybGluZWQKIlN5c3RlbS5TdHJpa2VPdXQiID0gIlt0cnVlfGZhbHNlXSIgIyBXaGV0aGVyIHRoZSBzeXN0ZW0gZm9udCBzaG91bGQgYmUgc3RydWNrIG91dAoiT0VNRml4ZWQueHh4IiAgICAgICAgICAgICAgICAgICMgU2FtZSBwYXJhbWV0ZXJzIGZvciB0aGUgT0VNIGZpeGVkIHR5cGVmYWNlCiJBbnNpRml4ZWQueHh4IiAgICAgICAgICAgICAgICAgIyBTYW1lIHBhcmFtZXRlcnMgZm9yIHRoZSBBbnNpIGZpeGVkIHR5cGVmYWNlCiJBbnNpVmFyLnh4eCIgICAgICAgICAgICAgICAgICAgIyBTYW1lIHBhcmFtZXRlcnMgZm9yIHRoZSBBbnNpIHZhcmlhYmxlIHR5cGVmYWNlCiJTeXN0ZW1GaXhlZC54eHgiICAgICAgICAgICAgICAgIyBTYW1lIHBhcmFtZXRlcnMgZm9yIHRoZSBTeXN0ZW0gZml4ZWQgdHlwZWZhY2UKCltUd2Vhay5MYXlvdXRdCiJXaW5lTG9vayIgPSAiW1dpbjMxfFdpbjk1fFdpbjk4XSIgICMgQ2hhbmdlcyBXaW5lJ3MgbG9vayBhbmQgZmVlbAogICAgICA8L3Byb2dyYW1saXN0aW5nPgogICAgPC9zZWN0MT4KCiAgICA8c2VjdDEgaWQ9IngxMWRydiI+CiAgICAgIDx0aXRsZT5Db25maWd1cmluZyB0aGUgeDExZHJ2IERyaXZlcjwvdGl0bGU+CgogICAgICA8cGFyYT4KICAgICAgICBXcml0dGVuIGJ5ICZuYW1lLW92ZS1rYWF2ZW47IDxlbWFpbD4mZW1haWwtb3ZlLWthYXZlbjs8L2VtYWlsPgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIChFeHRyYWN0ZWQgZnJvbSA8ZmlsZW5hbWU+d2luZS9kb2N1bWVudGF0aW9uL3gxMWRydjwvZmlsZW5hbWU+KQogICAgICA8L3BhcmE+CgogICAgICA8cGFyYT4KICAgICAgICBNb3N0IFdpbmUgdXNlcnMgcnVuIFdpbmUgdW5kZXIgdGhlIHdpbmRvd2luZyBzeXN0ZW0ga25vd24gYXMKICAgICAgICBYMTEuIER1cmluZyBtb3N0IG9mIFdpbmUncyBoaXN0b3J5LCB0aGlzIHdhcyB0aGUgb25seSBkaXNwbGF5CiAgICAgICAgZHJpdmVyIGF2YWlsYWJsZSwgYnV0IGluIHJlY2VudCB5ZWFycywgcGFydHMgb2YgV2luZSBoYXMgYmVlbgogICAgICAgIHJlb3JnYW5pemVkIHRvIGFsbG93IGZvciBvdGhlciBkaXNwbGF5IGRyaXZlcnMgKGFsdGhvdWdoIHRoZQogICAgICAgIG9ubHkgYWx0ZXJuYXRpdmUgY3VycmVudGx5IGF2YWlsYWJsZSBpcyBQYXRyaWsgU3RyaWR2YWxsJ3MKICAgICAgICBuY3Vyc2VzLWJhc2VkIHR0eWRydiwgd2hpY2ggaGUgY2xhaW1zIHdvcmtzIGZvciBkaXNwbGF5aW5nCiAgICAgICAgY2FsYy5leGUpLiBUaGUgZGlzcGxheSBkcml2ZXIgaXMgY2hvc2VuIHdpdGggdGhlCiAgICAgICAgPGxpdGVyYWw+R3JhcGhpY3NEcml2ZXI8L2xpdGVyYWw+IG9wdGlvbiBpbiB0aGUgW3dpbmVdIHNlY3Rpb24KICAgICAgICBvZiA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPiwgYnV0IEkgd2lsbCBvbmx5IGNvdmVyIHRoZQogICAgICAgIHgxMWRydiBkcml2ZXIgaW4gdGhpcyBhcnRpY2xlLgogICAgICA8L3BhcmE+CgogICAgICA8c2VjdDI+CiAgICAgICAgPHRpdGxlPngxMWRydiBtb2RlcyBvZiBvcGVyYXRpb248L3RpdGxlPgoKICAgICAgICA8cGFyYT4KICAgICAgICAgIDwhLS0gRklYTUU6IFRoaXMgaXMgb3V0ZGF0ZWQgLS0+CiAgICAgICAgICBOb3RlOiBUaGlzIGlzIG5vdyBhbGwgZG9uZSBpbiB0aGUgY29uZmlnIGZpbGUuIE5lZWRzIGFuIHVwZGF0ZS4uLgogICAgICAgIDwvcGFyYT4KCiAgICAgICAgPHBhcmE+CiAgICAgICAgICBUaGUgeDExZHJ2IGRyaXZlciBjb25zaXN0cyBvZiB0d28gY29uY2VwdHVhbGx5IGRpc3RpbmN0CiAgICAgICAgICBwaWVjZXMsIHRoZSBncmFwaGljcyBkcml2ZXIgKEdESSBwYXJ0KSwgYW5kIHRoZSB3aW5kb3dpbmcKICAgICAgICAgIGRyaXZlciAoVVNFUiBwYXJ0KS4gQm90aCBvZiB0aGVzZSBhcmUgbGlua2VkIGludG8gdGhlCiAgICAgICAgICA8ZmlsZW5hbWU+bGlieDExZHJ2LnNvPC9maWxlbmFtZT4gbW9kdWxlLCB0aG91Z2ggKHdoaWNoIHlvdQogICAgICAgICAgbG9hZCB3aXRoIHRoZSA8bGl0ZXJhbD5HcmFwaGljc0RyaXZlcjwvbGl0ZXJhbD4gb3B0aW9uKS4gSW4KICAgICAgICAgIFdpbmUsIHJ1bm5pbmcgb24gWDExLCB0aGUgZ3JhcGhpY3MgZHJpdmVyIG11c3QgZHJhdyBvbgogICAgICAgICAgZHJhd2FibGVzICh3aW5kb3cgaW50ZXJpb3JzKSBwcm92aWRlZCBieSB0aGUgd2luZG93aW5nCiAgICAgICAgICBkcml2ZXIuIFRoaXMgZGlmZmVycyBhIGJpdCBmcm9tIHRoZSBXaW5kb3dzIG1vZGVsLCB3aGVyZSB0aGUKICAgICAgICAgIHdpbmRvd2luZyBzeXN0ZW0gY3JlYXRlcyBhbmQgY29uZmlndXJlcyBkZXZpY2UgY29udGV4dHMKICAgICAgICAgIGNvbnRyb2xsZWQgYnkgdGhlIGdyYXBoaWNzIGRyaXZlciwgYW5kIGFwcGxpY2F0aW9ucyBhcmUKICAgICAgICAgIGFsbG93ZWQgdG8gaG9vayBpbnRvIHRoaXMgcmVsYXRpb25zaGlwIGFueXdoZXJlIHRoZXkgbGlrZS4KICAgICAgICAgIFRodXMsIHRvIHByb3ZpZGUgYW55IHJlYXNvbmFibGUgdHJhZGVvZmYgYmV0d2VlbgogICAgICAgICAgY29tcGF0aWJpbGl0eSBhbmQgdXNhYmlsaXR5LCB0aGUgeDExZHJ2IGhhcyB0aHJlZSBkaWZmZXJlbnQKICAgICAgICAgIG1vZGVzIG9mIG9wZXJhdGlvbi4KICAgICAgICA8L3BhcmE+CgogICAgICAgIDx2YXJpYWJsZWxpc3Q+CiAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dGVybT5Vbm1hbmFnZWQvTm9ybWFsPC90ZXJtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdC4gV2luZG93LW1hbmFnZXItaW5kZXBlbmRlbnQgKGFueSBydW5uaW5nCiAgICAgICAgICAgICAgICB3aW5kb3cgbWFuYWdlciBpcyBpZ25vcmVkIGNvbXBsZXRlbHkpLiBXaW5kb3cKICAgICAgICAgICAgICAgIGRlY29yYXRpb25zICh0aXRsZSBiYXJzLCBib3JkZXJzLCBldGMpIGFyZSBkcmF3biBieQogICAgICAgICAgICAgICAgV2luZSB0byBsb29rIGFuZCBmZWVsIGxpa2UgdGhlIHJlYWwgV2luZG93cy4gVGhpcyBpcwogICAgICAgICAgICAgICAgY29tcGF0aWJsZSB3aXRoIGFwcGxpY2F0aW9ucyB0aGF0IGRlcGVuZCBvbiBiZWluZyBhYmxlCiAgICAgICAgICAgICAgICB0byBjb21wdXRlIHRoZSBleGFjdCBzaXplcyBvZiBhbnkgc3VjaCBkZWNvcmF0aW9ucywgb3IKICAgICAgICAgICAgICAgIHRoYXQgd2FudCB0byBkcmF3IHRoZWlyIG93bi4KICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4gICAgICAgICAgCiAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dGVybT5NYW5hZ2VkPC90ZXJtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBTcGVjaWZpZWQgYnkgdXNpbmcgdGhlCiAgICAgICAgICAgICAgICA8cGFyYW1ldGVyPi0tbWFuYWdlZDwvcGFyYW1ldGVyPiBjb21tYW5kLWxpbmUgb3B0aW9uCiAgICAgICAgICAgICAgICBvciB0aGUgPGxpdGVyYWw+TWFuYWdlZDwvbGl0ZXJhbD4KICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPiBvcHRpb24gKHNlZSBiZWxvdykuCiAgICAgICAgICAgICAgICBPcmRpbmFyeSB0b3AtbGV2ZWwgZnJhbWUgd2luZG93cyB3aXRoIHRoaWNrIGJvcmRlcnMsCiAgICAgICAgICAgICAgICB0aXRsZSBiYXJzLCBhbmQgc3lzdGVtIG1lbnVzIHdpbGwgYmUgbWFuYWdlZCBieSB5b3VyCiAgICAgICAgICAgICAgICB3aW5kb3cgbWFuYWdlci4gVGhpcyBsZXRzIHRoZXNlIGFwcGxpY2F0aW9ucyBpbnRlZ3JhdGUKICAgICAgICAgICAgICAgIGJldHRlciB3aXRoIHRoZSByZXN0IG9mIHlvdXIgZGVza3RvcCwgYnV0IG1heSBub3QKICAgICAgICAgICAgICAgIGFsd2F5cyB3b3JrIHBlcmZlY3RseS4gKEEgcmV3cml0ZSBvZiB0aGlzIG1vZGUgb2YKICAgICAgICAgICAgICAgIG9wZXJhdGlvbiwgdG8gbWFrZSBpdCBtb3JlIHJvYnVzdCBhbmQgbGVzcyBwYXRjaHksIGlzCiAgICAgICAgICAgICAgICBoaWdobHkgZGVzaXJhYmxlLCB0aG91Z2gsIGFuZCBpcyBwbGFubmVkIHRvIGJlIGRvbmUKICAgICAgICAgICAgICAgIGJlZm9yZSB0aGUgV2luZSAxLjAgcmVsZWFzZS4pCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dGVybT5EZXNrdG9wLWluLWEtQm94PC90ZXJtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBTcGVjaWZpZWQgYnkgdXNpbmcgdGhlCiAgICAgICAgICAgICAgICA8cGFyYW1ldGVyPi0tZGVza3RvcDwvcGFyYW1ldGVyPiBjb21tYW5kLWxpbmUgb3B0aW9uCiAgICAgICAgICAgICAgICAod2l0aCBhIGdlb21ldHJ5LCBlLmcuIDxwYXJhbWV0ZXI+LS1kZXNrdG9wCiAgICAgICAgICAgICAgICAgIDgwMHg2MDA8L3BhcmFtZXRlcj4gZm9yIGEgc3VjaC1zaXplZCBkZXNrdG9wLCBvcgogICAgICAgICAgICAgICAgZXZlbiA8cGFyYW1ldGVyPi0tZGVza3RvcCA4MDB4NjAwKzArMDwvcGFyYW1ldGVyPiB0bwogICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBwb3NpdGlvbiB0aGUgZGVza3RvcCBhdCB0aGUgdXBwZXItbGVmdAogICAgICAgICAgICAgICAgY29ybmVyIG9mIHRoZSBkaXNwbGF5KS4gVGhpcyBpcyB0aGUgbW9kZSBtb3N0CiAgICAgICAgICAgICAgICBjb21wYXRpYmxlIHdpdGggdGhlIFdpbmRvd3MgbW9kZWwuIEFsbCBhcHBsaWNhdGlvbgogICAgICAgICAgICAgICAgd2luZG93cyB3aWxsIGp1c3QgYmUgV2luZS1kcmF3biB3aW5kb3dzIGluc2lkZSB0aGUKICAgICAgICAgICAgICAgIFdpbmUtcHJvdmlkZWQgZGVza3RvcCB3aW5kb3cgKHdoaWNoIHdpbGwgaXRzZWxmIGJlCiAgICAgICAgICAgICAgICBtYW5hZ2VkIGJ5IHlvdXIgd2luZG93IG1hbmFnZXIpLCBhbmQgV2luZG93cwogICAgICAgICAgICAgICAgYXBwbGljYXRpb25zIGNhbiByb2FtIGZyZWVseSB3aXRoaW4gdGhpcyB2aXJ0dWFsCiAgICAgICAgICAgICAgICB3b3Jrc3BhY2UgYW5kIHRoaW5rIHRoZXkgb3duIGl0IGFsbCwgd2l0aG91dAogICAgICAgICAgICAgICAgZGlzdHVyYmluZyB5b3VyIG90aGVyIFggYXBwcy4KICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgICAgPC9zZWN0Mj4KCiAgICAgIDxzZWN0Mj4KICAgICAgICA8dGl0bGU+VGhlIFt4MTFkcnZdIHNlY3Rpb248L3RpdGxlPgoKICAgICAgICA8dmFyaWFibGVsaXN0PgogICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHRlcm0+QWxsb2NTeXN0ZW1Db2xvcnM8L3Rlcm0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIEFwcGxpZXMgb25seSBpZiB5b3UgaGF2ZSBhIHBhbGV0dGUtYmFzZWQgZGlzcGxheSwgaS5lLgogICAgICAgICAgICAgICAgaWYgeW91ciBYIHNlcnZlciBpcyBzZXQgdG8gYSBkZXB0aCBvZiA4YnBwLCBhbmQgaWYgeW91CiAgICAgICAgICAgICAgICBoYXZlbid0IHJlcXVlc3RlZCBhIHByaXZhdGUgY29sb3IgbWFwLiBJdCBzcGVjaWZpZXMKICAgICAgICAgICAgICAgIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzaGFyZWQgY29sb3JtYXAgY2VsbHMgKHBhbGV0dGUKICAgICAgICAgICAgICAgIGVudHJpZXMpIFdpbmUgc2hvdWxkIG9jY3VweS4gVGhlIGhpZ2hlciB0aGlzIHZhbHVlLAogICAgICAgICAgICAgICAgdGhlIGxlc3MgY29sb3JzIHdpbGwgYmUgYXZhaWxhYmxlIHRvIG90aGVyCiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbnMuCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAogICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHRlcm0+UHJpdmF0ZUNvbG9yTWFwPC90ZXJtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBBcHBsaWVzIG9ubHkgaWYgeW91IGhhdmUgYSBwYWxldHRlLWJhc2VkIGRpc3BsYXksIGkuZS4KICAgICAgICAgICAgICAgIGlmIHlvdXIgWCBzZXJ2ZXIgaXMgc2V0IHRvIGEgZGVwdGggb2YgOGJwcC4gSXQKICAgICAgICAgICAgICAgIHNwZWNpZmllcyB0aGF0IHlvdSBkb24ndCB3YW50IHRvIHVzZSB0aGUgc2hhcmVkIGNvbG9yCiAgICAgICAgICAgICAgICBtYXAsIGJ1dCBhIHByaXZhdGUgY29sb3IgbWFwLCB3aGVyZSBhbGwgMjU2IGNvbG9ycyBhcmUKICAgICAgICAgICAgICAgIGF2YWlsYWJsZS4gVGhlIGRpc2FkdmFudGFnZSBpcyB0aGF0IFdpbmUncyBwcml2YXRlCiAgICAgICAgICAgICAgICBjb2xvciBtYXAgaXMgb25seSBzZWVuIHdoaWxlIHRoZSBtb3VzZSBwb2ludGVyIGlzCiAgICAgICAgICAgICAgICBpbnNpZGUgYSBXaW5lIHdpbmRvdywgc28gcHN5Y2hlZGVsaWMgZmxhc2hpbmcgYW5kCiAgICAgICAgICAgICAgICBmdW5reSBjb2xvcnMgd2lsbCBiZWNvbWUgcm91dGluZSBpZiB5b3UgdXNlIHRoZSBtb3VzZQogICAgICAgICAgICAgICAgYSBsb3QuCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAogICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHRlcm0+UGVyZmVjdEdyYXBoaWNzPC90ZXJtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBvbmx5IGRldGVybWluZXMgd2hldGhlciBmYXN0IFgxMSByb3V0aW5lcwogICAgICAgICAgICAgICAgb3IgZXhhY3QgV2luZSByb3V0aW5lcyB3aWxsIGJlIHVzZWQgZm9yIGNlcnRhaW4gUk9QCiAgICAgICAgICAgICAgICBjb2RlcyBpbiBibGl0IG9wZXJhdGlvbnMuIE1vc3QgdXNlcnMgd29uJ3Qgbm90aWNlIGFueQogICAgICAgICAgICAgICAgZGlmZmVyZW5jZS4KICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4gICAgICAgICAgCiAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dGVybT5TY3JlZW5EZXB0aDwvdGVybT4KICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgQXBwbGllcyBvbmx5IHRvIG11bHRpLWRlcHRoIGRpc3BsYXlzLiBJdCBzcGVjaWZpZXMKICAgICAgICAgICAgICAgIHdoaWNoIG9mIHRoZSBhdmFpbGFibGUgZGVwdGhzIFdpbmUgc2hvdWxkIHVzZSAoYW5kCiAgICAgICAgICAgICAgICB0ZWxsIFdpbmRvd3MgYXBwcyBhYm91dCkuCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAogICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHRlcm0+RGlzcGxheTwvdGVybT4KICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgVGhpcyBzcGVjaWZpZXMgd2hpY2ggWDExIGRpc3BsYXkgdG8gdXNlLCBhbmQgaWYKICAgICAgICAgICAgICAgIHNwZWNpZmllZCwgd2lsbCBvdmVycmlkZSBib3RoIHRoZQogICAgICAgICAgICAgICAgPGVudmFyPkRJU1BMQVk8L2VudmFyPiBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgdGhlCiAgICAgICAgICAgICAgICA8cGFyYW1ldGVyPi0tZGlzcGxheTwvcGFyYW1ldGVyPiBjb21tYW5kLWxpbmUgb3B0aW9uLgogICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDwvdmFybGlzdGVudHJ5PiAgICAgICAgICAKICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx0ZXJtPk1hbmFnZWQ8L3Rlcm0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIFdpbmUgY2FuIGxldCBmcmFtZSB3aW5kb3dzIGJlIG1hbmFnZWQgYnkgeW91ciB3aW5kb3cKICAgICAgICAgICAgICAgIG1hbmFnZXIuIFRoaXMgb3B0aW9uIHNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRoYXQKICAgICAgICAgICAgICAgIGJ5IGRlZmF1bHQuCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAogICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHRlcm0+VXNlREdBPC90ZXJtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBUaGlzIHNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IERpcmVjdERyYXcgdG8gdXNlCiAgICAgICAgICAgICAgICBYRnJlZTg2J3MgPGZpcnN0dGVybT5EaXJlY3QgR3JhcGhpY3MKICAgICAgICAgICAgICAgICAgQXJjaGl0ZWN0dXJlPC9maXJzdHRlcm0+IChER0EpLCB3aGljaCBpcyBhYmxlIHRvCiAgICAgICAgICAgICAgICB0YWtlIG92ZXIgdGhlIGVudGlyZSBkaXNwbGF5IGFuZCBydW4gdGhlIGdhbWUKICAgICAgICAgICAgICAgIGZ1bGwtc2NyZWVuIGF0IG1heGltdW0gc3BlZWQuIChXaXRoIERHQTEgKFhGcmVlODYKICAgICAgICAgICAgICAgIDMueCksIHlvdSBzdGlsbCBoYXZlIHRvIGNvbmZpZ3VyZSB0aGUgWCBzZXJ2ZXIgdG8gdGhlCiAgICAgICAgICAgICAgICBnYW1lJ3MgcmVxdWVzdGVkIGJwcCBmaXJzdCwgYnV0IHdpdGggREdBMiAoWEZyZWU4NgogICAgICAgICAgICAgICAgNC54KSwgcnVudGltZSBkZXB0aC1zd2l0Y2hpbmcgbWF5IGJlIHBvc3NpYmxlLAogICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHlvdXIgZHJpdmVyJ3MgY2FwYWJpbGl0aWVzLikgQnV0IGJlIGF3YXJlCiAgICAgICAgICAgICAgICB0aGF0IGlmIFdpbmUgY3Jhc2hlcyB3aGlsZSBpbiBER0EgbW9kZSwgaXQgbWF5IG5vdCBiZQogICAgICAgICAgICAgICAgcG9zc2libGUgdG8gcmVnYWluIGNvbnRyb2wgb3ZlciB5b3VyIGNvbXB1dGVyIHdpdGhvdXQKICAgICAgICAgICAgICAgIHJlYm9vdGluZy4gREdBIG5vcm1hbGx5IHJlcXVpcmVzIGVpdGhlciByb290CiAgICAgICAgICAgICAgICBwcml2aWxlZ2VzIG9yIHJlYWQvd3JpdGUgYWNjZXNzIHRvCiAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2Rldi9tZW08L2ZpbGVuYW1lPi4KICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4gICAgICAgICAgCiAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dGVybT5Vc2VYU2htPC90ZXJtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBJZiB5b3UgZG9uJ3Qgd2FudCBEaXJlY3RYIHRvIHVzZSBER0EsIHlvdSBjYW4gYXQgbGVhc3QKICAgICAgICAgICAgICAgIHVzZSBYIFNoYXJlZCBNZW1vcnkgZXh0ZW5zaW9ucyAoWFNobSkuIEl0IGlzIG11Y2gKICAgICAgICAgICAgICAgIHNsb3dlciB0aGFuIERHQSwgc2luY2UgdGhlIGFwcCBkb2Vzbid0IGhhdmUgZGlyZWN0CiAgICAgICAgICAgICAgICBhY2Nlc3MgdG8gdGhlIHBoeXNpY2FsIGZyYW1lIGJ1ZmZlciwgYnV0IHVzaW5nIHNoYXJlZAogICAgICAgICAgICAgICAgbWVtb3J5IHRvIGRyYXcgdGhlIGZyYW1lIGlzIGF0IGxlYXN0IGZhc3RlciB0aGFuCiAgICAgICAgICAgICAgICBzZW5kaW5nIHRoZSBkYXRhIHRocm91Z2ggdGhlIHN0YW5kYXJkIFgxMSBzb2NrZXQsIGV2ZW4KICAgICAgICAgICAgICAgIHRob3VnaCBXaW5lJ3MgWFNobSBzdXBwb3J0IGlzIHN0aWxsIGtub3duIHRvIGNyYXNoCiAgICAgICAgICAgICAgICBzb21ldGltZXMuCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAogICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHRlcm0+RFhHcmFiPC90ZXJtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBJZiB5b3UgZG9uJ3QgdXNlIERHQSwgeW91IG1heSB3YW50IGFuIGFsdGVybmF0aXZlCiAgICAgICAgICAgICAgICBtZWFucyB0byBjb252aW5jZSB0aGUgbW91c2UgY3Vyc29yIHRvIHN0YXkgd2l0aGluIHRoZQogICAgICAgICAgICAgICAgZ2FtZSB3aW5kb3cuIFRoaXMgb3B0aW9uIGRvZXMgdGhhdC4gT2YgY291cnNlLCBhcyB3aXRoCiAgICAgICAgICAgICAgICBER0EsIGlmIFdpbmUgY3Jhc2hlcywgeW91J3JlIGluIHRyb3VibGUgKGFsdGhvdWdoIG5vdAogICAgICAgICAgICAgICAgYXMgYmFkbHkgYXMgaW4gdGhlIERHQSBjYXNlLCBzaW5jZSB5b3UgY2FuIHN0aWxsIHVzZQogICAgICAgICAgICAgICAgdGhlIGtleWJvYXJkIHRvIGdldCBvdXQgb2YgWCkuCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAogICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHRlcm0+RGVza3RvcERvdWJsZUJ1ZmZlcmVkPC90ZXJtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBBcHBsaWVzIG9ubHkgaWYgeW91IHVzZSB0aGUKICAgICAgICAgICAgICAgIDxwYXJhbWV0ZXI+LS1kZXNrdG9wPC9wYXJhbWV0ZXI+IGNvbW1hbmQtbGluZSBvcHRpb24KICAgICAgICAgICAgICAgIHRvIHJ1biBpbiBhIGRlc2t0b3Agd2luZG93LiBTcGVjaWZpZXMgd2hldGhlciB0bwogICAgICAgICAgICAgICAgY3JlYXRlIHRoZSBkZXNrdG9wIHdpbmRvdyB3aXRoIGEgZG91YmxlLWJ1ZmZlcmVkCiAgICAgICAgICAgICAgICB2aXN1YWwsIHNvbWV0aGluZyBtb3N0IE9wZW5HTCBnYW1lcyBuZWVkIHRvIHJ1bgogICAgICAgICAgICAgICAgY29ycmVjdGx5LgogICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHRlcm0+VGV4dENQPC90ZXJtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICA8IS0tIEZJWE1FOiBUbyBiZSBkb2N1bWVudGVkIC0tPgogICAgICAgICAgICAgICAgVG8gYmUgZG9jdW1lbnRlZC4uLgogICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHRlcm0+WFZpZGVvUG9ydDwvdGVybT4KICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgPCEtLSBGSVhNRTogVG8gYmUgZG9jdW1lbnRlZCAtLT4KICAgICAgICAgICAgICAgIFRvIGJlIGRvY3VtZW50ZWQuLi4KICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx0ZXJtPlN5bmNocm9ub3VzPC90ZXJtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICA8IS0tIEZJWE1FOiBUbyBiZSBkb2N1bWVudGVkIC0tPgogICAgICAgICAgICAgICAgVG8gYmUgZG9jdW1lbnRlZC4uLgogICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgICA8L3NlY3QyPiAgICAgICAgICAKICAgIDwvc2VjdDE+CgogICAgJnJlZ2lzdHJ5OwoKICAgIDxzZWN0MSBpZD0iY2Ryb20tbGFiZWxzIj4KICAgICAgPHNlY3QxaW5mbz4KICAgICAgICA8YXV0aG9yZ3JvdXA+CiAgICAgICAgICA8YXV0aG9yPgogICAgICAgICAgICA8Zmlyc3RuYW1lPlBldHI8L2ZpcnN0bmFtZT4KICAgICAgICAgICAgPHN1cm5hbWU+VG9tYXNlazwvc3VybmFtZT4KICAgICAgICAgICAgPGFmZmlsaWF0aW9uPgogICAgICAgICAgICAgIDxhZGRyZXNzPjxlbWFpbD4mZW1haWwtcGV0ci10b21hc2VrOzwvZW1haWw+PC9hZGRyZXNzPgogICAgICAgICAgICA8L2FmZmlsaWF0aW9uPgogICAgICAgICAgICA8Y29udHJpYj5Ob3YgMTQgMTk5OTwvY29udHJpYj4KICAgICAgICAgIDwvYXV0aG9yPgogICAgICAgICAgPGF1dGhvcj4KICAgICAgICAgICAgPGZpcnN0bmFtZT5BbmRyZWFzPC9maXJzdG5hbWU+CiAgICAgICAgICAgIDxzdXJuYW1lPk1vaHI8L3N1cm5hbWU+CiAgICAgICAgICAgIDxhZmZpbGlhdGlvbj4KICAgICAgICAgICAgICA8YWRkcmVzcz48ZW1haWw+JmVtYWlsLWFuZHJlYXMtbW9ocjs8L2VtYWlsPjwvYWRkcmVzcz4KICAgICAgICAgICAgPC9hZmZpbGlhdGlvbj4KICAgICAgICAgICAgPGNvbnRyaWI+SmFuIDI1IDIwMDA8L2NvbnRyaWI+CiAgICAgICAgICA8L2F1dGhvcj4KICAgICAgICA8L2F1dGhvcmdyb3VwPgogICAgICA8L3NlY3QxaW5mbz4KCiAgICAgIDx0aXRsZT5Ecml2ZSBsYWJlbHMgYW5kIHNlcmlhbCBudW1iZXJzIHdpdGggd2luZTwvdGl0bGU+CiAgICAgIDxwYXJhPgogICAgICAgIFdyaXR0ZW4gYnkgJm5hbWUtcGV0ci10b21hc2VrOyA8ZW1haWw+JmVtYWlsLXBldHItdG9tYXNlazs8L2VtYWlsPgogICAgICAgIE5vdiAxNCAxOTk5CiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgQ2hhbmdlcyBieSAmbmFtZS1hbmRyZWFzLW1vaHI7IDxlbWFpbD4mZW1haWwtYW5kcmVhcy1tb2hyOzwvZW1haWw+CiAgICAgICAgSmFuIDI1IDIwMDAKICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICAoRXh0cmFjdGVkIGZyb20gPGZpbGVuYW1lPndpbmUvZG9jdW1lbnRhdGlvbi9jZHJvbS1sYWJlbHM8L2ZpbGVuYW1lPikKICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBVbnRpbCBub3csIHlvdXIgb25seSBwb3NzaWJpbGl0eSBvZiBzcGVjaWZ5aW5nIGRyaXZlIHZvbHVtZQogICAgICAgIGxhYmVscyBhbmQgc2VyaWFsIG51bWJlcnMgd2FzIHRvIHNldCB0aGVtIG1hbnVhbGx5IGluIHRoZSB3aW5lCiAgICAgICAgY29uZmlnIGZpbGUuIEJ5IG5vdywgd2luZSBjYW4gcmVhZCB0aGVtIGRpcmVjdGx5IGZyb20gdGhlCiAgICAgICAgZGV2aWNlIGFzIHdlbGwuIFRoaXMgbWF5IGJlIHVzZWZ1bCBmb3IgbWFueSBXaW4gOXggZ2FtZXMgb3IKICAgICAgICBmb3Igc2V0dXAgcHJvZ3JhbXMgZGlzdHJpYnV0ZWQgb24gQ0QtUk9NcyB0aGF0IGNoZWNrIGZvcgogICAgICAgIHZvbHVtZSBsYWJlbC4KICAgICAgPC9wYXJhPgoKICAgICAgPHNlY3QyPgogICAgICAgIDx0aXRsZT5XaGF0J3MgU3VwcG9ydGVkPzwvdGl0bGU+CgogICAgICAgIDxpbmZvcm1hbHRhYmxlIGZyYW1lPSJhbGwiPgogICAgICAgICAgPHRncm91cCBjb2xzPSIzIj4KICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+RmlsZSBTeXN0ZW08L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PlR5cGVzPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5Db21tZW50PC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgPHRib2R5PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+RkFUIHN5c3RlbXM8L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PmhkLCBmbG9wcHk8L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PnJlYWRzIGxhYmVscyBhbmQgc2VyaWFsIG51bWJlcnM8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+SVNPOTY2MDwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+Y2Ryb208L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PnJlYWRzIGxhYmVscyBhbmQgc2VyaWFsIG51bWJlcnMgKG5vdCBtaXhlZC1tb2RlIENEcyB5ZXQgISk8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgPC90Z3JvdXA+CiAgICAgICAgPC9pbmZvcm1hbHRhYmxlPgoKICAgICAgPC9zZWN0Mj4KCiAgICAgIDxzZWN0Mj4KICAgICAgICA8dGl0bGU+SG93IFRvIFNldCBVcD88L3RpdGxlPgogICAgICAgIDxwYXJhPgogICAgICAgICAgUmVhZGluZyBsYWJlbHMgYW5kIHNlcmlhbCBudW1iZXJzIGp1c3Qgd29ya3MgYXV0b21hZ2ljYWxseQogICAgICAgICAgaWYgeW91IHNwZWNpZnkgYSA8bGl0ZXJhbD5EZXZpY2U9PC9saXRlcmFsPiBsaW5lIGluIHRoZQogICAgICAgICAgW0RyaXZlIFhdIHNlY3Rpb24gaW4geW91ciA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPi4KICAgICAgICAgIE5vdGUgdGhhdCB0aGUgZGV2aWNlIGhhcyB0byBleGlzdCBhbmQgbXVzdCBiZSBhY2Nlc3NpYmxlIGlmCiAgICAgICAgICB5b3UgZG8gdGhpcywgdGhvdWdoLgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIElmIHlvdSBkb24ndCBkbyB0aGF0LCB0aGVuIHlvdSBzaG91bGQgZ2l2ZSBmaXhlZAogICAgICAgICAgPGxpdGVyYWw+IkxhYmVsIiA9PC9saXRlcmFsPiBvciA8bGl0ZXJhbD4iU2VyaWFsIiA9PC9saXRlcmFsPgogICAgICAgICAgZW50cmllcyBpbiA8ZmlsZW5hbWU+fi4vd2luZS9jb25maWc8L2ZpbGVuYW1lPiwgYXMgV2luZSByZXR1cm5zCiAgICAgICAgICB0aGVzZSBlbnRyaWVzIGluc3RlYWQgaWYgbm8gZGV2aWNlIGlzIGdpdmVuLiBJZiB0aGV5IGRvbid0CiAgICAgICAgICBleGlzdCwgdGhlbiBXaW5lIHdpbGwgcmV0dXJuIGRlZmF1bHQgdmFsdWVzIChsYWJlbAogICAgICAgICAgPGxpdGVyYWw+RHJpdmUgWDwvbGl0ZXJhbD4gYW5kIHNlcmlhbAogICAgICAgICAgPGxpdGVyYWw+MTIzNDU2Nzg8L2xpdGVyYWw+KS4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBJZiB5b3Ugd2FudCB0byBnaXZlIGEgPGxpdGVyYWw+IkRldmljZSIgPTwvbGl0ZXJhbD4gZW50cnkKICAgICAgICAgIDxlbXBoYXNpcz5vbmx5PC9lbXBoYXNpcz4gZm9yIGRyaXZlIHJhdyBzZWN0b3IgYWNjZXNzZXMsCgkgIGJ1dCBub3QgZm9yIHJlYWRpbmcgdGhlIHZvbHVtZSBpbmZvIGZyb20gdGhlIGRldmljZSAoaS5lLiB5b3Ugd2FudAoJICBhIDxlbXBoYXNpcz5maXhlZDwvZW1waGFzaXM+LCBwcmVjb25maWd1cmVkIGxhYmVsKSwgeW91IG5lZWQKICAgICAgICAgIHRvIHNwZWNpZnkgPGxpdGVyYWw+IlJlYWRWb2xJbmZvIiA9ICIwIjwvbGl0ZXJhbD4gdG8gdGVsbCBXaW5lCiAgICAgICAgICB0byBza2lwIHRoZSB2b2x1bWUgcmVhZGluZy4KICAgICAgICA8L3BhcmE+CiAgICAgIDwvc2VjdDI+CgogICAgICA8c2VjdDI+CiAgICAgICAgPHRpdGxlPkVYQU1QTEVTPC90aXRsZT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIEhlcmUncyBhIHNpbXBsZSBleGFtcGxlIG9mIGNkcm9tIGFuZCBmbG9wcHk7IGxhYmVscyB3aWxsIGJlCiAgICAgICAgICByZWFkIGZyb20gdGhlIGRldmljZSBvbiBib3RoIGNkcm9tIGFuZCBmbG9wcHk7IHNlcmlhbAogICAgICAgICAgbnVtYmVycyBvbiBmbG9wcHkgb25seToKICAgICAgICA8L3BhcmE+CiAgICAgICAgPHNjcmVlbj4KW0RyaXZlIEFdCiJQYXRoIiA9ICIvbW50L2Zsb3BweSIKIlR5cGUiID0gImZsb3BweSIKIkRldmljZSIgPSAiL2Rldi9mZDAiCiJGaWxlc3lzdGVtIiA9ICJtc2RvcyIKCltEcml2ZSBSXQoiUGF0aCIgPSAiL21udC9jZHJvbSIKIlR5cGUiID0gImNkcm9tIgoiRGV2aWNlIiA9ICIvZGV2L2hkYTEiCiJGaWxlc3lzdGVtIiA9ICJ3aW45NSIKICAgICAgICA8L3NjcmVlbj4KICAgICAgICA8cGFyYT4KICAgICAgICAgIEhlcmUncyBhbiBleGFtcGxlIG9mIG92ZXJyaWRpbmcgdGhlIENELVJPTSBsYWJlbDoKICAgICAgICA8L3BhcmE+CiAgICAgICAgPHNjcmVlbj4KW0RyaXZlIEpdCiJQYXRoIiA9ICIvbW50L2Nkcm9tIgoiVHlwZSIgPSAiY2Ryb20iCiJMYWJlbCIgPSAiWDIzNEdDRFNFIgo7IG5vdGUgdGhhdCB0aGUgZGV2aWNlIGlzbid0IHJlYWxseSBuZWVkZWQgaGVyZSBhcyB3ZSBoYXZlIGEgZml4ZWQgbGFiZWwKIkRldmljZSIgPSAiL2Rldi9jZHJvbSIKIkZpbGVzeXN0ZW0iID0gIm1zZG9zIgogICAgICAgIDwvc2NyZWVuPgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyPgogICAgICAgIDx0aXRsZT5Ub2RvIC8gT3BlbiBJc3N1ZXM8L3RpdGxlPgogICAgICAgIDxpdGVtaXplZGxpc3Q+CiAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgIFRoZSBjZHJvbSBsYWJlbCBjYW4gYmUgcmVhZCBvbmx5IGlmIHRoZSBkYXRhIHRyYWNrIG9mCiAgICAgICAgICAgICAgdGhlIGRpc2sgcmVzaWRlcyBpbiB0aGUgZmlyc3QgdHJhY2sgYW5kIHRoZSBjZHJvbSBpcwogICAgICAgICAgICAgIGlzbzk2NjAuCiAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgQmV0dGVyIGNoZWNraW5nIGZvciBGQVQgc3VwZXJibG9jayAoaXQgbm93IGNoZWNrcyBvbmx5CiAgICAgICAgICAgICAgb25lIGJ5dGUpLiA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICBTdXBwb3J0IGZvciBsYWJlbHMvc2VyaWFsIG51bXMgV1JJVElORy4KICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICBDYW4gdGhlIGxhYmVsIGJlIGxvbmdlciB0aGFuIDExIGNoYXJzPyAoaXNvOTY2MCBoYXMgMzIKICAgICAgICAgICAgICBjaGFycykuCiAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgV2hhdCBhYm91dCByZWFkaW5nIGV4dDIgdm9sdW1lIGxhYmVsPyAuLi4uCiAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICA8L2l0ZW1pemVkbGlzdD4KICAgICAgPC9zZWN0Mj4KICAgIDwvc2VjdDE+CgogICAgPHNlY3QxIGlkPSJkbGwtY29uZmlnIj4KICAgICAgPHRpdGxlPkRMTCBjb25maWd1cmF0aW9uPC90aXRsZT4KICAgICAgPHNlY3QyIGlkPSJkbGwtb3ZlcnJpZGVzIj4KICAgICAgICA8dGl0bGU+RExMIE92ZXJyaWRlczwvdGl0bGU+CiAgCiAgICAgICAgPHBhcmE+CiAgICAgICAgICBXcml0dGVuIGJ5ICZuYW1lLW92ZS1rYWF2ZW47IDxlbWFpbD4mZW1haWwtb3ZlLWthYXZlbjs8L2VtYWlsPgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIChFeHRyYWN0ZWQgZnJvbSA8ZmlsZW5hbWU+d2luZS9kb2N1bWVudGF0aW9uL2RsbC1vdmVycmlkZXM8L2ZpbGVuYW1lPikKICAgICAgICA8L3BhcmE+CiAgCiAgICAgICAgPHBhcmE+CiAgICAgICAgICBUaGUgPGZpbGVuYW1lPndpbmUuY29uZjwvZmlsZW5hbWU+IGRpcmVjdGl2ZXMgW0RsbERlZmF1bHRzXQogICAgICAgICAgYW5kIFtEbGxPdmVycmlkZXNdIGFyZSB0aGUgc3ViamVjdCBvZiBzb21lIGNvbmZ1c2lvbi4gVGhlCiAgICAgICAgICBvdmVyYWxsIHB1cnBvc2Ugb2YgbW9zdCBvZiB0aGVzZSBkaXJlY3RpdmVzIGFyZSBjbGVhciBlbm91Z2gsCiAgICAgICAgICB0aG91Z2ggLSBnaXZlbiBhIGNob2ljZSwgc2hvdWxkIFdpbmUgdXNlIGl0cyBvd24gYnVpbHQtaW4KICAgICAgICAgIERMTHMsIG9yIHNob3VsZCBpdCB1c2UgPGZpbGVuYW1lPi5ETEw8L2ZpbGVuYW1lPiBmaWxlcyBmb3VuZAogICAgICAgICAgaW4gYW4gZXhpc3RpbmcgV2luZG93cyBpbnN0YWxsYXRpb24/IFRoaXMgZG9jdW1lbnQgZXhwbGFpbnMKICAgICAgICAgIGhvdyB0aGlzIGZlYXR1cmUgd29ya3MuCiAgICAgICAgPC9wYXJhPgogIAogICAgICAgIDxzZWN0Mz4KICAgICAgICAgIDx0aXRsZT5ETEwgdHlwZXM8L3RpdGxlPgogICAgICAgICAgPHZhcmlhYmxlbGlzdD4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5uYXRpdmU8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgQSAibmF0aXZlIiBETEwgaXMgYSA8ZmlsZW5hbWU+LkRMTDwvZmlsZW5hbWU+IGZpbGUKICAgICAgICAgICAgICAgICAgd3JpdHRlbiBmb3IgdGhlIHJlYWwgTWljcm9zb2Z0IFdpbmRvd3MuCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPmJ1aWx0aW48L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgQSAiYnVpbHRpbiIgRExMIGlzIGEgV2luZSBETEwuIFRoZXNlIGNhbiBlaXRoZXIgYmUgYQogICAgICAgICAgICAgICAgICBwYXJ0IG9mIDxmaWxlbmFtZT5saWJ3aW5lLnNvPC9maWxlbmFtZT4sIG9yIG1vcmUKICAgICAgICAgICAgICAgICAgcmVjZW50bHksIGluIGEgc3BlY2lhbCA8ZmlsZW5hbWU+LnNvPC9maWxlbmFtZT4gZmlsZQogICAgICAgICAgICAgICAgICB0aGF0IFdpbmUgaXMgYWJsZSB0byBsb2FkIG9uIGRlbWFuZC4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+ZWxmZGxsPC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIEFuICJlbGZkbGwiIGlzIGEgV2luZSA8ZmlsZW5hbWU+LnNvPC9maWxlbmFtZT4gZmlsZQogICAgICAgICAgICAgICAgICB3aXRoIGEgc3BlY2lhbCBXaW5kb3dzLWxpa2UgZmlsZSBzdHJ1Y3R1cmUgdGhhdCBpcyBhcwogICAgICAgICAgICAgICAgICBjbG9zZSB0byBXaW5kb3dzIGFzIHBvc3NpYmxlLCBhbmQgdGhhdCBjYW4gYWxzbwogICAgICAgICAgICAgICAgICBzZWFtbGVzc2x5IGxpbmsgZHluYW1pY2FsbHkgd2l0aCAibmF0aXZlIiBETExzLCBieQogICAgICAgICAgICAgICAgICB1c2luZyBzcGVjaWFsIEVMRiBsb2FkZXIgYW5kIGxpbmtlciB0cmlja3MuIEJlcnRobwogICAgICAgICAgICAgICAgICBTdHVsdGllbnMgZGlkIHNvbWUgd29yayBvbiB0aGlzLCBidXQgdGhpcyBmZWF0dXJlIGhhcwogICAgICAgICAgICAgICAgICBub3QgeWV0IGJlZW4gbWVyZ2VkIGJhY2sgaW50byBXaW5lIChiZWNhdXNlIG9mCiAgICAgICAgICAgICAgICAgIHBvbGl0aWNhbCByZWFzb25zIGFuZCBsYWNrIG9mIHRpbWUpLCBzbyB0aGlzIERMTCB0eXBlCiAgICAgICAgICAgICAgICAgIGRvZXMgbm90IGV4aXN0IGluIHRoZSBvZmZpY2lhbCBXaW5lIGF0IHRoaXMgdGltZS4gSW4KICAgICAgICAgICAgICAgICAgdGhlIG1lYW50aW1lLCB0aGUgImJ1aWx0aW4iIERMTCB0eXBlIGdhaW5lZCBzb21lIG9mCiAgICAgICAgICAgICAgICAgIHRoZSBmZWF0dXJlcyBvZiBlbGZkbGxzIChzdWNoIGFzIGR5bmFtaWMgbG9hZGluZyksIHNvCiAgICAgICAgICAgICAgICAgIGl0J3MgcG9zc2libGUgdGhhdCAiZWxmZGxsIiBmdW5jdGlvbmFsaXR5IHdpbGwgYmUKICAgICAgICAgICAgICAgICAgZm9sZGVkIGludG8gImJ1aWx0aW4iIGF0IHNvbWUgcG9pbnQuCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPnNvPC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIEEgbmF0aXZlIFVuaXggPGZpbGVuYW1lPi5zbzwvZmlsZW5hbWU+IGZpbGUsIHdpdGgKICAgICAgICAgICAgICAgICAgY2FsbGluZyBjb252ZW50aW9uIGNvbnZlcnNpb24gdGh1bmtzIGdlbmVyYXRlZCBvbiB0aGUKICAgICAgICAgICAgICAgICAgZmx5IGFzIHRoZSBsaWJyYXJ5IGlzIGxvYWRlZC4gVGhpcyBpcyBtb3N0bHkgdXNlZnVsCiAgICAgICAgICAgICAgICAgIGZvciBsaWJyYXJpZXMgc3VjaCBhcyAiZ2xpZGUiIHRoYXQgaGF2ZSBleGFjdGx5IHRoZQogICAgICAgICAgICAgICAgICBzYW1lIEFQSSBvbiBib3RoIFdpbmRvd3MgYW5kIFVuaXguCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgPC92YXJpYWJsZWxpc3Q+ICAgICAgICAgIAogICAgICAgIDwvc2VjdDM+CiAgCiAgICAgICAgPHNlY3QzPgogICAgICAgICAgPHRpdGxlPlRoZSBbRGxsRGVmYXVsdHNdIHNlY3Rpb248L3RpdGxlPgogICAgICAgICAgPHZhcmlhYmxlbGlzdD4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5EZWZhdWx0TG9hZE9yZGVyPC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIFRoaXMgc3BlY2lmaWVzIGluIHdoYXQgb3JkZXIgV2luZSBzaG91bGQgc2VhcmNoIGZvcgogICAgICAgICAgICAgICAgICBhdmFpbGFibGUgRExMIHR5cGVzLCBpZiB0aGUgRExMIGluIHF1ZXN0aW9uIHdhcyBub3QKICAgICAgICAgICAgICAgICAgZm91bmQgaW4gdGhlIFtEbGxPdmVycmlkZXNdIHNlY3Rpb24uCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgPC92YXJpYWJsZWxpc3Q+CiAgICAgICAgPC9zZWN0Mz4KICAKICAgICAgICA8c2VjdDM+CiAgICAgICAgICA8dGl0bGU+VGhlIFtEbGxQYWlyc10gc2VjdGlvbjwvdGl0bGU+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgQXQgb25lIHRpbWUsIHRoZXJlIHdhcyBhIHNlY3Rpb24gY2FsbGVkIFtEbGxQYWlyc10gaW4gdGhlCiAgICAgICAgICAgIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlLCBidXQgdGhpcyBoYXMgYmVlbiBvYnNvbGV0ZWQKICAgICAgICAgICAgYmVjYXVzZSB0aGUgcGFpcmluZyBpbmZvcm1hdGlvbiBoYXMgbm93IGJlZW4gZW1iZWRkZWQgaW50bwogICAgICAgICAgICBXaW5lIGl0c2VsZi4gKFRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB3YXMgbWVyZWx5IHRvIGJlCiAgICAgICAgICAgIGFibGUgdG8gaXNzdWUgd2FybmluZ3MgaWYgdGhlIHVzZXIgYXR0ZW1wdGVkIHRvIHBhaXIKICAgICAgICAgICAgY29kZXBlbmRlbnQgMTYtYml0LzMyLWJpdCBETExzIG9mIGRpZmZlcmVudCB0eXBlcy4pIElmIHlvdQogICAgICAgICAgICBzdGlsbCBoYXZlIHRoaXMgaW4geW91ciA8ZmlsZW5hbWU+d2luZS5jb25mPC9maWxlbmFtZT4gb3IKICAgICAgICAgICAgPGZpbGVuYW1lPn4vLndpbmUvY29uZmlnPC9maWxlbmFtZT4sIHlvdSBtYXkgc2FmZWx5IGRlbGV0ZSBpdC4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L3NlY3QzPgogIAogICAgICAgIDxzZWN0Mz4KICAgICAgICAgIDx0aXRsZT5UaGUgW0RsbE92ZXJyaWRlc10gc2VjdGlvbjwvdGl0bGU+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHNwZWNpZmllcyBob3cgeW91IHdhbnQgc3BlY2lmaWMgRExMcyB0byBiZQogICAgICAgICAgICBoYW5kbGVkLCBpbiBwYXJ0aWN1bGFyIHdoZXRoZXIgeW91IHdhbnQgdG8gdXNlICJuYXRpdmUiIERMTHMKICAgICAgICAgICAgb3Igbm90LCBpZiB5b3UgaGF2ZSBzb21lIGZyb20gYSByZWFsIFdpbmRvd3MgY29uZmlndXJhdGlvbi4KICAgICAgICAgICAgQmVjYXVzZSBidWlsdGlucyBkbyBub3QgbWl4IHNlYW1sZXNzbHkgd2l0aCBuYXRpdmUgRExMcyB5ZXQsCiAgICAgICAgICAgIGNlcnRhaW4gRExMIGRlcGVuZGVuY2llcyBtYXkgYmUgcHJvYmxlbWF0aWMsIGJ1dCB3b3JrYXJvdW5kcwogICAgICAgICAgICBleGlzdCBpbiBXaW5lIGZvciBtYW55IHBvcHVsYXIgRExMIGNvbmZpZ3VyYXRpb25zLiBBbHNvIHNlZQogICAgICAgICAgICBXV04ncyBbMTZdU3RhdHVzIFBhZ2UgdG8gZmlndXJlIG91dCBob3cgd2VsbCB5b3VyIGZhdm9yaXRlCiAgICAgICAgICAgIERMTCBpcyBpbXBsZW1lbnRlZCBpbiBXaW5lLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIEl0IGlzIG9mIGNvdXJzZSBhbHNvIHBvc3NpYmxlIHRvIG92ZXJyaWRlIHRoZXNlIHNldHRpbmdzIGJ5CiAgICAgICAgICAgIGV4cGxpY3RseSB1c2luZyBXaW5lJ3MgPHBhcmFtZXRlcj4tLWRsbDwvcGFyYW1ldGVyPgogICAgICAgICAgICBjb21tYW5kLWxpbmUgb3B0aW9uIChzZWUgdGhlIG1hbiBwYWdlIGZvciBkZXRhaWxzKS4gIFNvbWUKICAgICAgICAgICAgaGludHMgZm9yIGNob29zaW5nIHlvdXIgb3B0aW1hbCBjb25maWd1cmF0aW9uIChsaXN0ZWQgYnkKICAgICAgICAgICAgMTYvMzItYml0IERMTCBwYWlyKToKICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDx2YXJpYWJsZWxpc3Q+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+a3JubDM4Niwga2VybmVsMzI8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgTmF0aXZlIHZlcnNpb25zIG9mIHRoZXNlIHdpbGwgbmV2ZXIgd29yaywgc28gZG9uJ3QgdHJ5LiBMZWF2ZQogICAgICAgICAgICAgICAgICBhdCA8bGl0ZXJhbD5idWlsdGluPC9saXRlcmFsPi4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+Z2RpLCBnZGkzMjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBHcmFwaGljcyBEZXZpY2UgSW50ZXJmYWNlLiBObyBlZmZvcnQgaGFzIGJlZW4gbWFkZSBhdCB0cnlpbmcgdG8KICAgICAgICAgICAgICAgICAgcnVuIG5hdGl2ZSBHREkuIExlYXZlIGF0IDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4gICAgICAgICAgCiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+dXNlciwgdXNlcjMyPC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIFdpbmRvdyBtYW5hZ2VtZW50IGFuZCBzdGFuZGFyZCBjb250cm9scy4gSXQgd2FzCiAgICAgICAgICAgICAgICAgIHBvc3NpYmxlIHRvIHVzZSBXaW45NSdzIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4KICAgICAgICAgICAgICAgICAgdmVyc2lvbnMgYXQgc29tZSBwb2ludCAoaWYgYWxsIG90aGVyIERMTHMgdGhhdCBkZXBlbmQKICAgICAgICAgICAgICAgICAgb24gaXQsIHN1Y2ggYXMgY29tY3RsMzIgYW5kIGNvbWRsZzMyLCB3ZXJlIGFsc28gcnVuCiAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4pLiBIb3dldmVyLCB0aGlzIGlzIG5vIGxvbmdlcgogICAgICAgICAgICAgICAgICBwb3NzaWJsZSBhZnRlciB0aGUgQWRkcmVzcyBTcGFjZSBTZXBhcmF0aW9uLCBzbyBsZWF2ZQogICAgICAgICAgICAgICAgICBhdCA8bGl0ZXJhbD5idWlsdGluPC9saXRlcmFsPi4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+bnRkbGw8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgTlQga2VybmVsIEFQSS4gQWx0aG91Z2ggYmFkbHkgZG9jdW1lbnRlZCwgdGhlCiAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbiBvZiB0aGlzIHdpbGwgbmV2ZXIKICAgICAgICAgICAgICAgICAgd29yay4gTGVhdmUgYXQgPGxpdGVyYWw+YnVpbHRpbjwvbGl0ZXJhbD4uCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPnczMnNrcm5sPC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIFdpbjMycyAoZm9yIFdpbjMueCkuIFRoZSA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+CiAgICAgICAgICAgICAgICAgIHZlcnNpb24gd2lsbCBwcm9iYWJseSBuZXZlciB3b3JrLiBMZWF2ZSBhdAogICAgICAgICAgICAgICAgICA8bGl0ZXJhbD5idWlsdGluPC9saXRlcmFsPi4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+d293MzI8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgV2luMTYgc3VwcG9ydCBsaWJyYXJ5IGZvciBOVC4gVGhlCiAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbiB3aWxsIHByb2JhYmx5IG5ldmVyCiAgICAgICAgICAgICAgICAgIHdvcmsuIExlYXZlIGF0IDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5zeXN0ZW08L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgV2luMTYga2VybmVsIHN0dWZmLiBXaWxsIG5ldmVyIHdvcmsKICAgICAgICAgICAgICAgICAgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPi4gTGVhdmUgYXQKICAgICAgICAgICAgICAgICAgPGxpdGVyYWw+YnVpbHRpbjwvbGl0ZXJhbD4uCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PiAgICAgICAgICAKICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5kaXNwbGF5PC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIERpc3BsYXkgZHJpdmVyLiBEZWZpbml0ZWx5IGxlYXZlIGF0IDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT50b29saGVscDwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBUb29sIGhlbHBlciByb3V0aW5lcy4gVGhpcyBpcyByYXJlbHkgYSBzb3VyY2Ugb2YgcHJvYmxlbXMuCiAgICAgICAgICAgICAgICAgIExlYXZlIGF0IDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT52ZXIsIHZlcnNpb248L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgVmVyc2lvbmluZy4gU2VsZG9tIHVzZWZ1bCB0byBtZXNzIHdpdGguCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPmFkdmFwaTMyPC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIFJlZ2lzdHJ5IGFuZCBzZWN1cml0eSBmZWF0dXJlcy4gVHJ5aW5nIHRoZQogICAgICAgICAgICAgICAgICA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+IHZlcnNpb24gb2YgdGhpcyBtYXkgb3IgbWF5CiAgICAgICAgICAgICAgICAgIG5vdCB3b3JrLgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5jb21tZGxnLCBjb21kbGczMjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBDb21tb24gRGlhbG9ncywgc3VjaCBhcyBjb2xvciBwaWNrZXIsIGZvbnQgZGlhbG9nLAogICAgICAgICAgICAgICAgICBwcmludCBkaWFsb2csIG9wZW4vc2F2ZSBkaWFsb2csIGV0Yy4gSXQgaXMgc2FmZSB0byB0cnkKICAgICAgICAgICAgICAgICAgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPi4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+Y29tbWN0cmwsIGNvbWN0bDMyPC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIENvbW1vbiBDb250cm9scy4gVGhpcyBpcyB0b29sYmFycywgc3RhdHVzIGJhcnMsIGxpc3QgY29udHJvbHMsCiAgICAgICAgICAgICAgICAgIHRoZSB3b3Jrcy4gSXQgaXMgc2FmZSB0byB0cnkgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPi4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+c2hlbGwsIHNoZWxsMzI8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgU2hlbGwgaW50ZXJmYWNlIChkZXNrdG9wLCBmaWxlc3lzdGVtLCBldGMpLiBCZWluZyBvbmUgb2YgdGhlCiAgICAgICAgICAgICAgICAgIG1vc3QgdW5kb2N1bWVudGVkIHBpZWNlcyBvZiBXaW5kb3dzLCB5b3UgbWF5IGhhdmUgbHVjayB3aXRoIHRoZQogICAgICAgICAgICAgICAgICA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+IHZlcnNpb24sIHNob3VsZCB5b3UgbmVlZCBpdC4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+ICAgICAgICAgIAogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPndpbnNvY2ssIHdzb2NrMzI8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgV2luZG93cyBTb2NrZXRzLiBUaGUgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiB2ZXJzaW9uCiAgICAgICAgICAgICAgICAgIHdpbGwgbm90IHdvcmsgdW5kZXIgV2luZSwgc28gbGVhdmUgYXQKICAgICAgICAgICAgICAgICAgPGxpdGVyYWw+YnVpbHRpbjwvbGl0ZXJhbD4uCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPmljbXA8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgSUNNUCByb3V0aW5lcyBmb3Igd3NvY2szMi4gQXMgd2l0aCB3c29jazMyLCBsZWF2ZSBhdAogICAgICAgICAgICAgICAgICA8bGl0ZXJhbD5idWlsdGluPC9saXRlcmFsPi4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+bXByPC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIFRoZSA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+IHZlcnNpb24gbWF5IG5vdCB3b3JrIGR1ZQogICAgICAgICAgICAgICAgICB0byB0aHVua2luZyBpc3N1ZXMuIExlYXZlIGF0CiAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5semV4cGFuZCwgbHozMjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBMZW1wZWwtWml2IGRlY29tcHJlc3Npb24uIFdpbmUncwogICAgICAgICAgICAgICAgICA8bGl0ZXJhbD5idWlsdGluPC9saXRlcmFsPiB2ZXJzaW9uIG91Z2h0IHRvIHdvcmsgZmluZS4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+d2luYXNwaSwgd25hc3BpMzI8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgQWR2YW5jZWQgU0NTSSBQZXJpcGhlcmFsIEludGVyZmFjZS4gVGhlCiAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbiB3aWxsIHByb2JhYmx5IG5ldmVyCiAgICAgICAgICAgICAgICAgIHdvcmsuIExlYXZlIGF0IDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5jcnRkbGw8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgQyBSdW50aW1lIGxpYnJhcnkuIFRoZSA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+CiAgICAgICAgICAgICAgICAgIHZlcnNpb24gd2lsbCBlYXNpbHkgd29yayBiZXR0ZXIgdGhhbiBXaW5lJ3Mgb24gdGhpcwogICAgICAgICAgICAgICAgICBvbmUuCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPndpbnNwb29sLmRydjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBQcmludGVyIHNwb29sZXIuIFlvdSBhcmUgbm90IGxpa2VseSB0byBoYXZlIG1vcmUgbHVjawogICAgICAgICAgICAgICAgICB3aXRoIHRoZSA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+IHZlcnNpb24uCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPmRkcmF3PC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIERpcmVjdERyYXcvRGlyZWN0M0QuIFNpbmNlIFdpbmUgZG9lcyBub3QgaW1wbGVtZW50IHRoZQogICAgICAgICAgICAgICAgICBEaXJlY3RYIEhBTCwgdGhlIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbgogICAgICAgICAgICAgICAgICB3aWxsIG5vdCB3b3JrIGF0IHRoaXMgdGltZS4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+ZGlucHV0PC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIERpcmVjdElucHV0LiBSdW5uaW5nIHRoaXMgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPgogICAgICAgICAgICAgICAgICBtYXkgb3IgbWF5IG5vdCB3b3JrLgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4gICAgICAgICAgCiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+ZHNvdW5kPC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIERpcmVjdFNvdW5kLiBJdCBtYXkgYmUgcG9zc2libGUgdG8gcnVuIHRoaXMKICAgICAgICAgICAgICAgICAgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiwgYnV0IGRvbid0IGNvdW50IG9uIGl0LgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5kcGxheS9kcGxheXg8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgRGlyZWN0UGxheS4gVGhlIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbgogICAgICAgICAgICAgICAgICBvdWdodCB0byB3b3JrIGJlc3Qgb24gdGhpcywgaWYgYXQgYWxsLgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5tbXN5c3RlbSwgd2lubW08L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgTXVsdGltZWRpYSBzeXN0ZW0uIFRoZSA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+CiAgICAgICAgICAgICAgICAgIHZlcnNpb24gaXMgbm90IGxpa2VseSB0byB3b3JrLiBMZWF2ZSBhdAogICAgICAgICAgICAgICAgICA8bGl0ZXJhbD5idWlsdGluPC9saXRlcmFsPi4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+bXNhY20sIG1zYWNtMzI8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgQXVkaW8gQ29tcHJlc3Npb24gTWFuYWdlci4gVGhlCiAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+IHZlcnNpb24gd29ya3MgYmVzdCwgaWYgeW91CiAgICAgICAgICAgICAgICAgIHNldCBtc2FjbS5kcnYgdG8gdGhlIHNhbWUuCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPm1zdmlkZW8sIG1zdmZ3MzI8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgVmlkZW8gZm9yIFdpbmRvd3MuIEl0IGlzIHNhZmUgKGFuZCByZWNvbW1lbmRlZCkgdG8gdHJ5CiAgICAgICAgICAgICAgICAgIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4uCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPm1jaWNkYS5kcnY8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgQ0QgQXVkaW8gTUNJIGRyaXZlci4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+bWNpc2VxLmRydjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBNSURJIFNlcXVlbmNlciBNQ0kgZHJpdmVyICg8ZmlsZW5hbWU+Lk1JRDwvZmlsZW5hbWU+CiAgICAgICAgICAgICAgICAgIHBsYXliYWNrKS4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+bWNpd2F2ZS5kcnY8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgV2F2ZSBhdWRpbyBNQ0kgZHJpdmVyICg8ZmlsZW5hbWU+LldBVjwvZmlsZW5hbWU+IHBsYXliYWNrKS4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+bWNpYXZpLmRydjwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBBVkkgTUNJIGRyaXZlciAoPGZpbGVuYW1lPi5BVkk8L2ZpbGVuYW1lPiB2aWRlbwogICAgICAgICAgICAgICAgICBwbGF5YmFjaykuIEJlc3QgdG8gdXNlIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4uCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPm1jaWFuaW0uZHJ2PC90ZXJtPgogICAgICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgICAgICAgICAgICAgIEFuaW1hdGlvbiBNQ0kgZHJpdmVyLgogICAgICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgICA8dGVybT5tc2FjbS5kcnY8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgQXVkaW8gQ29tcHJlc3Npb24gTWFuYWdlci4gU2V0IHRvIHNhbWUgYXMgbXNhY20zMi4KICAgICAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICAgICAgICAgPHRlcm0+bWlkaW1hcC5kcnY8L3Rlcm0+CiAgICAgICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgICAgICAgICAgICAgTUlESSBNYXBwZXIuCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPndwcm9jczwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAgICAgICAgICAgICBUaGlzIGlzIGEgcHNldWRvLURMTCB1c2VkIGJ5IFdpbmUgZm9yIHRodW5raW5nCiAgICAgICAgICAgICAgICAgIHB1cnBvc2VzLiBBIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbiBvZiB0aGlzCiAgICAgICAgICAgICAgICAgIGRvZXNuJ3QgZXhpc3QuCiAgICAgICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgPC92YXJpYWJsZWxpc3Q+ICAgICAgICAgIAogICAgICAgIDwvc2VjdDM+CiAgICAgIDwvc2VjdDI+CiAgICAgIDxzZWN0MiBpZD0iZGxsLW1pc3NpbmciPgogICAgICAgIDx0aXRsZT5NaXNzaW5nIERMTHM8L3RpdGxlPgogIAogICAgICAgIDxwYXJhPgogICAgICAgICAgV3JpdHRlbiBieSAmbmFtZS1hbmRyZWFzLW1vaHI7IDxlbWFpbD4mZW1haWwtYW5kcmVhcy1tb2hyOzwvZW1haWw+CiAgICAgICAgPC9wYXJhPgogIAogICAgICAgIDxwYXJhPgoJICBJbiBjYXNlIFdpbmUgY29tcGxhaW5zIGFib3V0IGEgbWlzc2luZyBETEwsIHlvdSBzaG91bGQgY2hlY2sgd2hldGhlcgoJICB0aGlzIGZpbGUgaXMgYSBwdWJsaWNseSBhdmFpbGFibGUgRExMIG9yIGEgY3VzdG9tIERMTCBiZWxvbmdpbmcKCSAgdG8geW91ciBwcm9ncmFtIChieSBzZWFyY2hpbmcgZm9yIGl0cyBuYW1lIG9uIHRoZSBpbnRlcm5ldCkuCgkgIElmIHlvdSBtYW5hZ2VkIHRvIGdldCBob2xkIG9mIHRoZSBETEwsIHRoZW4geW91IHNob3VsZCBtYWtlIHN1cmUKCSAgdGhhdCBXaW5lIGlzIGFibGUgdG8gZmluZCBhbmQgbG9hZCBpdC4KCSAgRExMcyB1c3VhbGx5IGdldCBsb2FkZWQgYWNjb3JkaW5nIHRvIHRoZSBtZWNoYW5pc20gb2YgdGhlCgkgIFNlYXJjaFBhdGgoKSBmdW5jdGlvbi4KCSAgVGhpcyBmdW5jdGlvbiBzZWFyY2hlcyBkaXJlY3RvcmllcyBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgoJICAKCSAgYSkgVGhlIGRpcmVjdG9yeSB0aGUgcHJvZ3JhbSB3YXMgc3RhcnRlZCBmcm9tLgoJICBiKSBUaGUgY3VycmVudCBkaXJlY3RvcnkuCgkgIGMpIFRoZSBXaW5kb3dzIHN5c3RlbSBkaXJlY3RvcnkuCgkgIGQpIFRoZSBXaW5kb3dzIGRpcmVjdG9yeS4KCSAgZSkgVGhlIFBBVEggdmFyaWFibGUgZGlyZWN0b3JpZXMuCgkgIAoJICBJbiBzaG9ydDogZWl0aGVyIHB1dCB0aGUgcmVxdWlyZWQgRExMIGludG8geW91ciBhcHBsaWNhdGlvbgoJICBkaXJlY3RvcnkgKG1pZ2h0IGJlIHVnbHkpLCBvciB1c3VhbGx5IHB1dCBpdCBpbnRvIHRoZSBXaW5kb3dzIHN5c3RlbQoJICBkaXJlY3RvcnkuIEp1c3QgZmluZCBvdXQgaXRzIGRpcmVjdG9yeSBieSBoYXZpbmcgYSBsb29rIGF0IHRoZSBXaW5lCgkgIGNvbmZpZyBGaWxlIHZhcmlhYmxlICJTeXN0ZW0iICh3aGljaCBpbmRpY2F0ZXMgdGhlIGxvY2F0aW9uIG9mIHRoZQoJICBXaW5kb3dzIHN5c3RlbSBkaXJlY3RvcnkpIGFuZCB0aGUgYXNzb2NpYXRlZCBkcml2ZSBlbnRyeS4KICAgICAgICA8L3BhcmE+CiAgICAgIDwvc2VjdDI+CiAgICA8L3NlY3QxPgoKICAgIDxzZWN0MSBpZD0ia2V5Ym9hcmQiPgogICAgICA8dGl0bGU+S2V5Ym9hcmQ8L3RpdGxlPgoKICAgICAgPHBhcmE+CiAgICAgICAgV3JpdHRlbiBieSAmbmFtZS1vdmUta2FhdmVuOyA8ZW1haWw+JmVtYWlsLW92ZS1rYWF2ZW47PC9lbWFpbD4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICAoRXh0cmFjdGVkIGZyb20gPGZpbGVuYW1lPndpbmUvZG9jdW1lbnRhdGlvbi9rZXlib2FyZDwvZmlsZW5hbWU+KQogICAgICA8L3BhcmE+CgogICAgICA8cGFyYT4KICAgICAgICBXaW5lIG5vdyBuZWVkcyB0byBrbm93IGFib3V0IHlvdXIga2V5Ym9hcmQgbGF5b3V0LiBUaGlzCiAgICAgICAgcmVxdWlyZW1lbnQgY29tZXMgZnJvbSBhIG5lZWQgZnJvbSBtYW55IGFwcHMgdG8gaGF2ZSB0aGUKICAgICAgICBjb3JyZWN0IHNjYW5jb2RlcyBhdmFpbGFibGUsIHNpbmNlIHRoZXkgcmVhZCB0aGVzZSBkaXJlY3RseSwKICAgICAgICBpbnN0ZWFkIG9mIGp1c3QgdGFraW5nIHRoZSBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBYCiAgICAgICAgc2VydmVyLiBUaGlzIG1lYW5zIHRoYXQgV2luZSBub3cgbmVlZHMgdG8gaGF2ZSBhIG1hcHBpbmcgZnJvbQogICAgICAgIFgga2V5cyB0byB0aGUgc2NhbmNvZGVzIHRoZXNlIGFwcGxpY2F0aW9ucyBleHBlY3QuCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgT24gc3RhcnR1cCwgV2luZSB3aWxsIHRyeSB0byByZWNvZ25pemUgdGhlIGFjdGl2ZSBYIGxheW91dCBieQogICAgICAgIHNlZWluZyBpZiBpdCBtYXRjaGVzIGFueSBvZiB0aGUgZGVmaW5lZCB0YWJsZXMuIElmIGl0IGRvZXMsCiAgICAgICAgZXZlcnl0aGluZyBpcyBhbHJpZ2h0LiBJZiBub3QsIHlvdSBuZWVkIHRvIGRlZmluZSBpdC4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBUbyBkbyB0aGlzLCBvcGVuIHRoZSBmaWxlCiAgICAgICAgPGZpbGVuYW1lPndpbmRvd3MveDExZHJ2L2tleWJvYXJkLmM8L2ZpbGVuYW1lPiBhbmQgdGFrZSBhIGxvb2sKICAgICAgICBhdCB0aGUgZXhpc3RpbmcgdGFibGVzLiBNYWtlIGEgYmFja3VwIGNvcHkgb2YgaXQsIGVzcGVjaWFsbHkKICAgICAgICBpZiB5b3UgZG9uJ3QgdXNlIENWUy4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBXaGF0IHlvdSByZWFsbHkgd291bGQgbmVlZCB0byBkbywgaXMgZmluZCBvdXQgd2hpY2ggc2NhbmNvZGUKICAgICAgICBlYWNoIGtleSBuZWVkcyB0byBnZW5lcmF0ZS4gIEZpbmQgaXQgaW4gdGhlCiAgICAgICAgPGZ1bmN0aW9uPm1haW5fa2V5X3NjYW48L2Z1bmN0aW9uPiB0YWJsZSwgd2hpY2ggbG9va3MgbGlrZQogICAgICAgIHRoaXM6CiAgICAgIDwvcGFyYT4KICAgICAgPHByb2dyYW1saXN0aW5nPgpzdGF0aWMgY29uc3QgaW50IG1haW5fa2V5X3NjYW5bTUFJTl9MRU5dID0KewovKiB0aGlzIGlzIG15ICgxMDIta2V5KSBrZXlib2FyZCBsYXlvdXQsIHNvcnJ5IGlmIGl0IGRvZXNuJ3QgcXVpdGUgbWF0Y2ggeW91cnMgKi8KICAgMHgyOSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywweDA4LDB4MDksMHgwQSwweDBCLDB4MEMsMHgwRCwKICAgMHgxMCwweDExLDB4MTIsMHgxMywweDE0LDB4MTUsMHgxNiwweDE3LDB4MTgsMHgxOSwweDFBLDB4MUIsCiAgIDB4MUUsMHgxRiwweDIwLDB4MjEsMHgyMiwweDIzLDB4MjQsMHgyNSwweDI2LDB4MjcsMHgyOCwweDJCLAogICAweDJDLDB4MkQsMHgyRSwweDJGLDB4MzAsMHgzMSwweDMyLDB4MzMsMHgzNCwweDM1LAogICAweDU2IC8qIHRoZSAxMDJuZCBrZXkgKGFjdHVhbGx5IHRvIHRoZSByaWdodCBvZiBsLXNoaWZ0KSAqLwp9OwogICAgICA8L3Byb2dyYW1saXN0aW5nPgogICAgICA8cGFyYT4KICAgICAgICBOZXh0LCBhc3NpZ24gZWFjaCBzY2FuY29kZSB0aGUgY2hhcmFjdGVycyBpbXByaW50ZWQgb24gdGhlCiAgICAgICAga2V5Y2Fwcy4gVGhpcyB3YXMgZG9uZSAoc29ydCBvZikgZm9yIHRoZSBVUyAxMDEta2V5IGtleWJvYXJkLAogICAgICAgIHdoaWNoIHlvdSBjYW4gZmluZCBuZWFyIHRoZSB0b3AgaW4KICAgICAgICA8ZmlsZW5hbWU+a2V5Ym9hcmQuYzwvZmlsZW5hbWU+LiBJdCBhbHNvIHNob3dzIHRoYXQgaWYgdGhlcmUKICAgICAgICBpcyBubyAxMDJuZCBrZXksIHlvdSBjYW4gc2tpcCB0aGF0LgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIEhvd2V2ZXIsIGZvciBtb3N0IGludGVybmF0aW9uYWwgMTAyLWtleSBrZXlib2FyZHMsIHdlIGhhdmUKICAgICAgICBkb25lIGl0IGVhc3kgZm9yIHlvdS4gVGhlIHNjYW5jb2RlIGxheW91dCBmb3IgdGhlc2UgYWxyZWFkeQogICAgICAgIHByZXR0eSBtdWNoIG1hdGNoZXMgdGhlIHBoeXNpY2FsIGxheW91dCBpbiB0aGUKICAgICAgICA8ZnVuY3Rpb24+bWFpbl9rZXlfc2NhbjwvZnVuY3Rpb24+LCBzbyBhbGwgeW91IG5lZWQgdG8gZG8gaXMKICAgICAgICB0byBnbyB0aHJvdWdoIGFsbCB0aGUga2V5cyB0aGF0IGdlbmVyYXRlIGNoYXJhY3RlcnMgb24geW91cgogICAgICAgIG1haW4ga2V5Ym9hcmQgKGV4Y2VwdCBzcGFjZWJhciksIGFuZCBzdHVmZiB0aG9zZSBpbnRvIGFuCiAgICAgICAgYXBwcm9wcmlhdGUgdGFibGUuIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyB0aGF0IHRoZSAxMDJuZCBrZXksCiAgICAgICAgd2hpY2ggaXMgdXN1YWxseSB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qga2V5IG9mIHRoZSBsYXN0IGxpbmUKICAgICAgICAodXN1YWxseSA8a2V5Y2FwPlo8L2tleWNhcD4pLCBtdXN0IGJlIHBsYWNlZCBvbiBhIHNlcGFyYXRlCiAgICAgICAgbGluZSBhZnRlciB0aGUgbGFzdCBsaW5lLgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIEZvciBleGFtcGxlLCBteSBOb3J3ZWdpYW4ga2V5Ym9hcmQgbG9va3MgbGlrZSB0aGlzCiAgICAgIDwvcGFyYT4KICAgICAgPHNjcmVlbj4KpyAgISAgIiAgIyAgpCAgJSAgJiAgLyAgKCAgKSAgPSAgPyAgYCAgQmFjay0KfCAgMSAgMkAgM6MgNCQgNSAgNiAgN3sgOFsgOV0gMH0gKyAgXLQgc3BhY2UKClRhYiBRICBXICBFICBSICBUICBZICBVICBJICBPICBQICDFICBeCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICCofgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW50ZXIKQ2FwcyBBICBTICBEICBGICBHICBIICBKICBLICBMICDYICDGICAqCkxvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJwoKU2gtID4gWiAgWCAgQyAgViAgQiAgTiAgTSAgOyAgOiAgXyAgU2hpZnQKaWZ0ICZsdDsgICAgICAgICAgICAgICAgICAgICAgLCAgLiAgLQoKQ3RybCAgQWx0ICAgICAgIFNwYWNlYmFyICAgICAgIEFsdEdyICBDdHJsCiAgICAgIDwvc2NyZWVuPgogICAgICA8cGFyYT4KICAgICAgICBOb3RlIHRoZSAxMDJuZCBrZXksIHdoaWNoIGlzIHRoZSA8a2V5Y2FwPiZsdDs+PC9rZXljYXA+IGtleSwgdG8KICAgICAgICB0aGUgbGVmdCBvZiA8a2V5Y2FwPlo8L2tleWNhcD4uIFRoZSBjaGFyYWN0ZXIgdG8gdGhlIHJpZ2h0IG9mCiAgICAgICAgdGhlIG1haW4gY2hhcmFjdGVyIGlzIHRoZSBjaGFyYWN0ZXIgZ2VuZXJhdGVkIGJ5CiAgICAgICAgPGtleWNhcD5BbHRHcjwva2V5Y2FwPi4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBUaGlzIGtleWJvYXJkIGlzIGRlZmluZWQgYXMgZm9sbG93czoKICAgICAgPC9wYXJhPgogICAgICA8cHJvZ3JhbWxpc3Rpbmc+CnN0YXRpYyBjb25zdCBjaGFyIG1haW5fa2V5X05PW01BSU5fTEVOXVs0XSA9CnsKICJ8pyIsIjEhIiwiMlwiQCIsIjMjoyIsIjSkJCIsIjUlIiwiNiYiLCI3L3siLCI4KFsiLCI5KV0iLCIwPX0iLCIrPyIsIlxctCIsCiAicVEiLCJ3VyIsImVFIiwiclIiLCJ0VCIsInlZIiwidVUiLCJpSSIsIm9PIiwicFAiLCLlxSIsIqhefiIsCiAiYUEiLCJzUyIsImREIiwiZkYiLCJnRyIsImhIIiwiakoiLCJrSyIsImxMIiwi+NgiLCLmxiIsIicqIiwKICJ6WiIsInhYIiwiY0MiLCJ2ViIsImJCIiwibk4iLCJtTSIsIiw7IiwiLjoiLCItXyIsCiAiJmx0Oz4iCn07ICAgCiAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgIDxwYXJhPgogICAgICAgIEV4Y2VwdCB0aGF0ICIgYW5kIFwgbmVlZHMgdG8gYmUgcXVvdGVkIHdpdGggYSBiYWNrc2xhc2gsIGFuZAogICAgICAgIHRoYXQgdGhlIDEwMm5kIGtleSBpcyBvbiBhIHNlcGFyYXRlIGxpbmUsIGl0J3MgcHJldHR5CiAgICAgICAgc3RyYWlnaHRmb3J3YXJkLgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIEFmdGVyIHlvdSBoYXZlIHdyaXR0ZW4gc3VjaCBhIHRhYmxlLCB5b3UgbmVlZCB0byBhZGQgaXQgdG8gdGhlCiAgICAgICAgPGZ1bmN0aW9uPm1haW5fa2V5X3RhYltdPC9mdW5jdGlvbj4gbGF5b3V0IGluZGV4IHRhYmxlLiBUaGlzCiAgICAgICAgd2lsbCBsb29rIGxpa2UgdGhpczoKICAgICAgPC9wYXJhPgogICAgICA8cHJvZ3JhbWxpc3Rpbmc+CnN0YXRpYyBzdHJ1Y3QgewogV09SRCBsYW5nLCBhbnNpX2NvZGVwYWdlLCBvZW1fY29kZXBhZ2U7CiBjb25zdCBjaGFyICgqa2V5KVtNQUlOX0xFTl1bNF07Cn0gbWFpbl9rZXlfdGFiW109ewouLi4KLi4uCiB7TUFLRUxBTkdJRChMQU5HX05PUldFR0lBTixTVUJMQU5HX0RFRkFVTFQpLCAgMTI1MiwgODY1LCAmYW1wO21haW5fa2V5X05PfSwgIAouLi4KICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgPHBhcmE+CiAgICAgICAgQWZ0ZXIgeW91IGhhdmUgYWRkZWQgeW91ciB0YWJsZSwgcmVjb21waWxlIFdpbmUgYW5kIHRlc3QgdGhhdAogICAgICAgIGl0IHdvcmtzLiBJZiBpdCBmYWlscyB0byBkZXRlY3QgeW91ciB0YWJsZSwgdHJ5IHJ1bm5pbmcKICAgICAgPC9wYXJhPgogICAgICA8c2NyZWVuPgp3aW5lIC0tZGVidWdtc2cgK2tleSwra2V5Ym9hcmQgPiYga2V5LmxvZwogICAgICA8L3NjcmVlbj4KICAgICAgPHBhcmE+CiAgICAgICAgYW5kIGxvb2sgaW4gdGhlIHJlc3VsdGluZyA8ZmlsZW5hbWU+a2V5LmxvZzwvZmlsZW5hbWU+IGZpbGUgdG8KICAgICAgICBmaW5kIHRoZSBlcnJvciBtZXNzYWdlcyBpdCBnaXZlcyBmb3IgeW91ciBsYXlvdXQuCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgTm90ZSB0aGF0IHRoZSA8Y29uc3RhbnQ+TEFOR18qPC9jb25zdGFudD4gYW5kCiAgICAgICAgPGNvbnN0YW50PlNVQkxBTkdfKjwvY29uc3RhbnQ+IGRlZmluaXRpb25zIGFyZSBpbgogICAgICAgIDxmaWxlbmFtZT5pbmNsdWRlL3dpbm5scy5oPC9maWxlbmFtZT4sIHdoaWNoIHlvdSBtaWdodCBuZWVkIHRvCiAgICAgICAga25vdyB0byBmaW5kIG91dCB3aGljaCBudW1iZXJzIHlvdXIgbGFuZ3VhZ2UgaXMgYXNzaWduZWQsIGFuZAogICAgICAgIGZpbmQgaXQgaW4gdGhlIGRlYnVnbXNnIG91dHB1dC4gVGhlIG51bWJlcnMgd2lsbCBiZQogICAgICAgIDxsaXRlcmFsPihTVUJMQU5HICogMHg0MDAgKyBMQU5HKTwvbGl0ZXJhbD4sIHNvLCBmb3IgZXhhbXBsZQogICAgICAgIHRoZSBjb21iaW5hdGlvbiA8bGl0ZXJhbD5MQU5HX05PUldFR0lBTiAoMHgxNCk8L2xpdGVyYWw+IGFuZAogICAgICAgIDxsaXRlcmFsPlNVQkxBTkdfREVGQVVMVCAoMHgxKTwvbGl0ZXJhbD4gd2lsbCBiZSAoaW4gaGV4KQogICAgICAgIDxsaXRlcmFsPjE0ICsgMSo0MDAgPSA0MTQ8L2xpdGVyYWw+LCBzbyBzaW5jZSBJJ20gTm9yd2VnaWFuLCBJCiAgICAgICAgY291bGQgbG9vayBmb3IgPGxpdGVyYWw+MDQxNDwvbGl0ZXJhbD4gaW4gdGhlIGRlYnVnbXNnIG91dHB1dAogICAgICAgIHRvIGZpbmQgb3V0IHdoeSBteSBrZXlib2FyZCB3b24ndCBkZXRlY3QuCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgT25jZSBpdCB3b3Jrcywgc3VibWl0IGl0IHRvIHRoZSBXaW5lIHByb2plY3QuIElmIHlvdSB1c2UgQ1ZTLAogICAgICAgIHlvdSB3aWxsIGp1c3QgaGF2ZSB0byBkbwogICAgICA8L3BhcmE+CiAgICAgIDxzY3JlZW4+CmN2cyAtejMgZGlmZiAtdSB3aW5kb3dzL3gxMWRydi9rZXlib2FyZC5jID4gbGF5b3V0LmRpZmYKICAgICAgPC9zY3JlZW4+CiAgICAgIDxwYXJhPgogICAgICAgIGZyb20geW91ciBtYWluIFdpbmUgZGlyZWN0b3J5LCB0aGVuIHN1Ym1pdAogICAgICAgIDxmaWxlbmFtZT5sYXlvdXQuZGlmZjwvZmlsZW5hbWU+IHRvCiAgICAgICAgPGVtYWlsPndpbmUtcGF0Y2hlc0B3aW5laHEuY29tPC9lbWFpbD4gYWxvbmcgd2l0aCBhIGJyaWVmIG5vdGUKICAgICAgICBvZiB3aGF0IGl0IGlzLgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIElmIHlvdSBkb24ndCB1c2UgQ1ZTLCB5b3UgbmVlZCB0byBkbwogICAgICA8L3BhcmE+CiAgICAgIDxzY3JlZW4+CmRpZmYgLXUgdGhlX2JhY2t1cF9maWxlX3lvdV9tYWRlIHdpbmRvd3MveDExZHJ2L2tleWJvYXJkLmMgPiBsYXlvdXQuZGlmZgogICAgICA8L3NjcmVlbj4KICAgICAgPHBhcmE+CiAgICAgICAgYW5kIHN1Ym1pdCBpdCBhcyBleHBsYWluZWQgYWJvdmUuCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgSWYgeW91IGRpZCBpdCByaWdodCwgaXQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgbmV4dCBXaW5lCiAgICAgICAgcmVsZWFzZSwgYW5kIGFsbCB0aGUgdHJvdWJsZXNvbWUgYXBwbGljYXRpb25zIChlc3BlY2lhbGx5CiAgICAgICAgcmVtb3RlLWNvbnRyb2wgYXBwbGljYXRpb25zKSBhbmQgZ2FtZXMgdGhhdCB1c2Ugc2NhbmNvZGVzIHdpbGwKICAgICAgICBiZSBoYXBwaWx5IHVzaW5nIHlvdXIga2V5Ym9hcmQgbGF5b3V0LCBhbmQgeW91IHdvbid0IGdldCB0aG9zZQogICAgICAgIGFubm95aW5nIGZpeG1lIG1lc3NhZ2VzIGVpdGhlci4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBHb29kIGx1Y2suCiAgICAgIDwvcGFyYT4KICAgIDwvc2VjdDE+CgogICAgJmZvbnRzOwogICAgJnByaW50aW5nOwoKICA8L2NoYXB0ZXI+Cgo8IS0tIEtlZXAgdGhpcyBjb21tZW50IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUKTG9jYWwgdmFyaWFibGVzOgptb2RlOiBzZ21sCnNnbWwtcGFyZW50LWRvY3VtZW50Oigid2luZS1kb2Muc2dtbCIgInNldCIgImJvb2siICJjaGFwdGVyIiAiIikKRW5kOgotLT4K