Auth/a> provides functions to handle the authentication per user.<\/p>\n<h2 id=\"content-required-header\"><a href=https://samsungtizenos.com/"#content-required-header\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Required Header<\/h2>\n<p>#include <hal\/hal-security-auth.h><\/p>\n<h2 id=\"content-overview\"><a href=https://samsungtizenos.com/"#content-overview\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Overview<\/h2>\n<p>The Security Auth provides functions to handle the authentication per user.<\/p>\n<p>The Security Auth functions provide methods to:<\/p>\n<ul>\n<li>Create password file<\/li>\n<li>Write password auth parameters from memory to file<\/li>\n<li>Write the number of attempts to enter password auth till now<\/li>\n<li>Set a new password auth context<\/li>\n<li>Check if the entered password auth context is the same as the current password<\/li>\n<li>Set the maximum number of history size to store password context in the past<\/li>\n<li>Get the maximum number of history size<\/li>\n<li>Get the expire time period in days<\/li>\n<li>Set the expire time period in days<\/li>\n<li>Get the expire time left in seconds<\/li>\n<li>Set the expire time left in seconds<\/li>\n<li>Get the accumulated attempt number for user's password auth tries<\/li>\n<li>Reset the accumulated attempt number for user's password auth tries<\/li>\n<li>Increase the accumulated attempt number for user's password auth tries<\/li>\n<li>Get the limited maximum attempt number of user's password auth tries<\/li>\n<li>Set the limited maximum attempt number of user's password auth tries<\/li>\n<li>Get the active status of user's password auth context<\/li>\n<li>Check if the entered password context has the previously-used history<\/li>\n<li>Check if the password auth context has expired<\/li>\n<li>Check if the accumulated attempt number for user's password auth try exceeds the limited maximum attempt<\/li>\n<li>Check if the new attempt interval elapsed the ignore period(ex. RETRY_TIMEOUT = 0.5 secs)<\/li>\n<li>Check if the history for storing the previous password context is activated<\/li>\n<li>Get the password type regarding to the user For more information on the Security Auth features and the macros, see HAL Security programming guides and tutorials.<\/li>\n<\/ul>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>Typedefs<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>typedef struct <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#struct__hal__backend__security__auth__funcs\">_hal_backend_security_auth_funcs<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ga0569ceefd8c0454ce502cb7a66d3b1c7\">hal_backend_security_auth_funcs<\/a><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Structure for security auth-fw functions.<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<hr \/>\n<h2 id=\"content-data-structure-documentation\"><a href=https://samsungtizenos.com/"#content-data-structure-documentation\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Data Structure Documentation<\/h2>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>struct _hal_backend_security_auth_funcs<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Structure for security auth-fw functions.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_SECURITY_AUTH 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>Data Fields<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a0c2f0de292ae14eba06cf3db237ae495\">create_password_file<\/a> )(uid_t user_id, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ga743c3b53ef987186fd8b7945154a81a9\">hal_security_auth_password_type_e<\/a> type)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a31195143d02e6550f6bcbd7969a97d54\">write_memory_to_file<\/a> )(uid_t user_id)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#af92c47364a95778c47be0230c2585158\">write_attempt_to_file<\/a> )(uid_t user_id)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ad462a17e191f1964a994c182dde8aea0\">set_password<\/a> )(uid_t user_id, const char *password)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a8874a25507a5aed72e9593ab0eb57e97\">check_password<\/a> )(uid_t user_id, const char *password)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a6f4495498cf29be2d0ab19a94138a195\">set_max_history_size<\/a> )(uid_t user_id, unsigned int history_size)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ab8e216fa7304d64459399037c3e29fbe\">get_max_history_size<\/a> )(uid_t user_id, unsigned int *history_size)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a25cf611fe751c2e837a090924fa7b338\">get_expire_time<\/a> )(uid_t user_id, unsigned int *expire_time)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#aa2e2679742bd2cca0b12c7b316f1c4e5\">set_expire_time<\/a> )(uid_t user_id, unsigned int expire_time)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a796c8b51705d0c8764ef2862f6e107e3\">get_expire_time_left<\/a> )(uid_t user_id, unsigned int *expire_time_left)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a36c03df80d817f00d0434c550a9daa76\">set_expire_time_left<\/a> )(uid_t user_id, unsigned int expire_time_left)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a2be0b14564b8426f46334acf5e21702c\">get_attempt<\/a> )(uid_t user_id, unsigned int *attempt)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#af933279e3ef932e7a11edbfef5e38632\">reset_attempt<\/a> )(uid_t user_id)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a32185f7c1d13e1e3ea7e2ed5975119fa\">increment_attempt<\/a> )(uid_t user_id)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a44ba3d782bd853103ec62f56ae26297a\">get_max_attempt<\/a> )(uid_t user_id, unsigned int *max_attempt)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ac469370080fef3838fa2f36e951af5ff\">set_max_attempt<\/a> )(uid_t user_id, unsigned int max_attempt)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a04320cda6bf8349492620dfd1b50e35e\">is_password_active<\/a> )(uid_t user_id)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a62eed840acd3e6c785d84d0523531dea\">is_password_reused<\/a> )(uid_t user_id, const char *password)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a96b8f4914a17827c929cf6929f222185\">check_expiration<\/a> )(uid_t user_id)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ab15840d2ae2fccade25dc010a0c9eeea\">check_attempt_exceeded<\/a> )(uid_t user_id)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a0190423b3cf85be78b4695017ca3e259\">is_ignore_period<\/a> )(uid_t user_id)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a33686fc8028d7819c4a7e5bae915a362\">is_history_active<\/a> )(uid_t user_id)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ada5d5a4615a61f90d07046c45dc621a0\">get_password_type<\/a> )(uid_t user_id, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ga743c3b53ef987186fd8b7945154a81a9\">hal_security_auth_password_type_e<\/a> *password_type)<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<hr \/>\n<h4 id=\"content-field-documentation\"><a href=https://samsungtizenos.com/"#content-field-documentation\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Field Documentation<\/h4>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ab15840d2ae2fccade25dc010a0c9eeea\">_hal_backend_security_auth_funcs::check_attempt_exceeded<\/a>)(uid_t user_id)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Check if the accumulated attempt number for user's password auth try exceeds the limited maximum attempt<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a96b8f4914a17827c929cf6929f222185\">_hal_backend_security_auth_funcs::check_expiration<\/a>)(uid_t user_id)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Check if the password auth context has expired<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a8874a25507a5aed72e9593ab0eb57e97\">_hal_backend_security_auth_funcs::check_password<\/a>)(uid_t user_id, const char *password)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Check if the entered password auth context is the same as the current password<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a0c2f0de292ae14eba06cf3db237ae495\">_hal_backend_security_auth_funcs::create_password_file<\/a>)(uid_t user_id, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ga743c3b53ef987186fd8b7945154a81a9\">hal_security_auth_password_type_e<\/a> type)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Create password file<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a2be0b14564b8426f46334acf5e21702c\">_hal_backend_security_auth_funcs::get_attempt<\/a>)(uid_t user_id, unsigned int *attempt)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Get the accumulated attempt number for user's password auth tries<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a25cf611fe751c2e837a090924fa7b338\">_hal_backend_security_auth_funcs::get_expire_time<\/a>)(uid_t user_id, unsigned int *expire_time)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Get the expire time period in days<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a796c8b51705d0c8764ef2862f6e107e3\">_hal_backend_security_auth_funcs::get_expire_time_left<\/a>)(uid_t user_id, unsigned int *expire_time_left)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Get the expire time left in seconds<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a44ba3d782bd853103ec62f56ae26297a\">_hal_backend_security_auth_funcs::get_max_attempt<\/a>)(uid_t user_id, unsigned int *max_attempt)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Get the limited maximum attempt number of user's password auth tries<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ab8e216fa7304d64459399037c3e29fbe\">_hal_backend_security_auth_funcs::get_max_history_size<\/a>)(uid_t user_id, unsigned int *history_size)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Get the maximum number of history size<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ada5d5a4615a61f90d07046c45dc621a0\">_hal_backend_security_auth_funcs::get_password_type<\/a>)(uid_t user_id, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ga743c3b53ef987186fd8b7945154a81a9\">hal_security_auth_password_type_e<\/a> *password_type)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Get the password type regarding to user_id<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a32185f7c1d13e1e3ea7e2ed5975119fa\">_hal_backend_security_auth_funcs::increment_attempt<\/a>)(uid_t user_id)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Increase the accumulated attempt number for user's password auth tries<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a33686fc8028d7819c4a7e5bae915a362\">_hal_backend_security_auth_funcs::is_history_active<\/a>)(uid_t user_id)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Check if the history for storing the previous password context is activated<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a0190423b3cf85be78b4695017ca3e259\">_hal_backend_security_auth_funcs::is_ignore_period<\/a>)(uid_t user_id)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Check if the new attempt interval elapsed the ignore period(ex. RETRY_TIMEOUT = 0.5 secs)<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a04320cda6bf8349492620dfd1b50e35e\">_hal_backend_security_auth_funcs::is_password_active<\/a>)(uid_t user_id)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Get the active status of user's password auth context<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a62eed840acd3e6c785d84d0523531dea\">_hal_backend_security_auth_funcs::is_password_reused<\/a>)(uid_t user_id, const char *password)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Check if the entered password context has the previously-used history<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#af933279e3ef932e7a11edbfef5e38632\">_hal_backend_security_auth_funcs::reset_attempt<\/a>)(uid_t user_id)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Reset the accumulated attempt number for user's password auth tries<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#aa2e2679742bd2cca0b12c7b316f1c4e5\">_hal_backend_security_auth_funcs::set_expire_time<\/a>)(uid_t user_id, unsigned int expire_time)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Set the expire time period in days<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a36c03df80d817f00d0434c550a9daa76\">_hal_backend_security_auth_funcs::set_expire_time_left<\/a>)(uid_t user_id, unsigned int expire_time_left)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Set the expire time left in seconds<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ac469370080fef3838fa2f36e951af5ff\">_hal_backend_security_auth_funcs::set_max_attempt<\/a>)(uid_t user_id, unsigned int max_attempt)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Set the limited maximum attempt number of user's password auth tries<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a6f4495498cf29be2d0ab19a94138a195\">_hal_backend_security_auth_funcs::set_max_history_size<\/a>)(uid_t user_id, unsigned int history_size)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Set the maximum number of history size to store password context in the past<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ad462a17e191f1964a994c182dde8aea0\">_hal_backend_security_auth_funcs::set_password<\/a>)(uid_t user_id, const char *password)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Set a new password auth context<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#af92c47364a95778c47be0230c2585158\">_hal_backend_security_auth_funcs::write_attempt_to_file<\/a>)(uid_t user_id)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Write the number of attempts to enter password auth till now<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a31195143d02e6550f6bcbd7969a97d54\">_hal_backend_security_auth_funcs::write_memory_to_file<\/a>)(uid_t user_id)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Write password auth parameters from memory to file<\/p>\n<hr \/>\n<h2 id=\"content-typedef-documentation\"><a href=https://samsungtizenos.com/"#content-typedef-documentation\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Typedef Documentation<\/h2>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>typedef struct <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#struct__hal__backend__security__auth__funcs\">_hal_backend_security_auth_funcs<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ga0569ceefd8c0454ce502cb7a66d3b1c7\">hal_backend_security_auth_funcs<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Structure for security auth-fw functions.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_SECURITY_AUTH 1.0<\/p>\n<hr \/>\n<h2 id=\"content-enumeration-type-documentation\"><a href=https://samsungtizenos.com/"#content-enumeration-type-documentation\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Enumeration Type Documentation<\/h2>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ga3247b817c2367d83c9f3937e52097436\">hal_security_auth_error_e<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Return Codes exported by the hal-security-auth functions.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_SECURITY_AUTH 1.0<\/p>\n<p><strong>Enumerator:<\/strong>\n: | <em>HAL_SECURITY_AUTH_ERROR_NONE<\/em> | Indicate the result of the one specific API is successful |\n| --- | --- |\n| <em>HAL_SECURITY_AUTH_ERROR_INPUT_PARAM<\/em> | Indicate the API's input parameter is malformed |\n| <em>HAL_SECURITY_AUTH_ERROR_OUT_OF_MEMORY<\/em> | Indicate system is running out of memory state |\n| <em>HAL_SECURITY_AUTH_ERROR_BUFFER_TOO_SMALL<\/em> | Indicate the output buffer size which is passed as parameter is too small |\n| <em>HAL_SECURITY_AUTH_ERROR_NO_USER<\/em> | Indicate there is no user |\n| <em>HAL_SECURITY_AUTH_ERROR_NO_PASSWORD<\/em> | Indicate there is no password set |\n| <em>HAL_SECURITY_AUTH_ERROR_PASSWORD_EXIST<\/em> | Indicate password exists in system |\n| <em>HAL_SECURITY_AUTH_ERROR_PASSWORD_MISMATCH<\/em> | Indicate password mismatch |\n| <em>HAL_SECURITY_AUTH_ERROR_PASSWORD_RETRY_TIMER<\/em> | Indicate password retry timeout has not yet occurred |\n| <em>HAL_SECURITY_AUTH_ERROR_PASSWORD_MAX_ATTEMPTS_EXCEEDED<\/em> | Indicate no more attempts are possible |\n| <em>HAL_SECURITY_AUTH_ERROR_PASSWORD_EXPIRED<\/em> | Indicate password is expired |\n| <em>HAL_SECURITY_AUTH_ERROR_PASSWORD_REUSED<\/em> | Indicate password is reused |\n| <em>HAL_SECURITY_AUTH_ERROR_STATUS<\/em> | Indicate status does not meet the required condition or threshold |\n| <em>HAL_SECURITY_AUTH_ERROR_HAL_INIT_FAIL<\/em> | Indicate there is a failure during HAL initialization |\n| <em>HAL_SECURITY_AUTH_ERROR_UNKNOWN<\/em> | Indicate the error with unknown reason |<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ga743c3b53ef987186fd8b7945154a81a9\">hal_security_auth_password_type_e<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Enumeration for auth password type.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_SECURITY_AUTH 1.0<\/p>\n<p><strong>Enumerator:<\/strong>\n: | <em>HAL_SECURITY_AUTH_PASSWORD_NORMAL<\/em> | Character string for normal password |\n| --- | --- |\n| <em>HAL_SECURITY_AUTH_PASSWORD_PIN<\/em> | Numeric character string for personal identification number |\n| <em>HAL_SECURITY_AUTH_PASSWORD_PATTERN<\/em> | Numeric character string for pattern match |<\/p>\n<hr \/>\n<p>Except as noted, this content - excluding the Code Examples - is licensed under <a href=https://samsungtizenos.com/"http:////creativecommons.org//licenses//by//3.0//legalcode/">Creative Commons Attribution 3.0<\/a>\nand all of the Code Examples contained herein are licensed under <a href=https://samsungtizenos.com/"https:////www.tizen.org//bsd-3-clause-license/">BSD-3-Clause/a>.
Content License<\/a>.<\/p>\n","table_of_content":"<ul class=\"table-of-contents\">\n<li><a href=https://samsungtizenos.com/"#content-required-header\">Required Header<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-overview\">Overview<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-data-structure-documentation\">Data Structure Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-typedef-documentation\">Typedef Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-enumeration-type-documentation\">Enumeration Type Documentation<\/a><\/li>\n<\/ul>\n","title":"Tizen HAL API: Auth","raw":null},{"class":"App\\Services\\Documentation\\Data\\RenderedMarkdown","s":"wrbl"}]},"memo":{"id":"AUjUKxkEimH16R9KOKqK","name":"documentation::article","path":"docs\/platform\/hal\/api\/1.0.0\/group__HALAPI__HAL__SECURITY__AUTH__MODULE","method":"GET","release":"a-a-a","children":[],"scripts":[],"assets":[],"lazyLoaded":false,"lazyIsolated":true,"errors":[],"locale":"en","islands":[]},"checksum":"fec6a2bc152290a9b4860724b43bc22603c0daca946d6d532284deb3ed47467d"}" wire:effects="[]" wire:id="AUjUKxkEimH16R9KOKqK" wire:name="documentation::article" x-init="$wire.__lazyLoad('eyJkYXRhIjp7ImZvck1vdW50IjpbeyJtYXJrZG93biI6W3siYm9keSI6IjxoMSBpZD1cImNvbnRlbnQtdGl6ZW4taGFsLWFwaS1hdXRoXCI+PGEgaHJlZj1cIiNjb250ZW50LXRpemVuLWhhbC1hcGktYXV0aFwiIGNsYXNzPVwiaGVhZGluZy1wZXJtYWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIlBlcm1hbGlua1wiPlx1MDBiNjxcL2E+VGl6ZW4gSEFMIEFQSTogQXV0aDxcL2gxPjxkaXYgZGF0YS1rbm93bGVkZ2UtYmFzZS1tZXRhZGF0YT48XC9kaXY+XG48aHIgXC8+XG48cD5UaGUgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZFwiPkF1dGg8XC9hPiBwcm92aWRlcyBmdW5jdGlvbnMgdG8gaGFuZGxlIHRoZSBhdXRoZW50aWNhdGlvbiBwZXIgdXNlci48XC9wPlxuPGgyIGlkPVwiY29udGVudC1yZXF1aXJlZC1oZWFkZXJcIj48YSBocmVmPVwiI2NvbnRlbnQtcmVxdWlyZWQtaGVhZGVyXCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5SZXF1aXJlZCBIZWFkZXI8XC9oMj5cbjxwPiNpbmNsdWRlICZsdDtoYWxcL2hhbC1zZWN1cml0eS1hdXRoLmgmZ3Q7PFwvcD5cbjxoMiBpZD1cImNvbnRlbnQtb3ZlcnZpZXdcIj48YSBocmVmPVwiI2NvbnRlbnQtb3ZlcnZpZXdcIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPk92ZXJ2aWV3PFwvaDI+XG48cD5UaGUgU2VjdXJpdHkgQXV0aCBwcm92aWRlcyBmdW5jdGlvbnMgdG8gaGFuZGxlIHRoZSBhdXRoZW50aWNhdGlvbiBwZXIgdXNlci48XC9wPlxuPHA+VGhlIFNlY3VyaXR5IEF1dGggZnVuY3Rpb25zIHByb3ZpZGUgbWV0aG9kcyB0bzo8XC9wPlxuPHVsPlxuPGxpPkNyZWF0ZSBwYXNzd29yZCBmaWxlPFwvbGk+XG48bGk+V3JpdGUgcGFzc3dvcmQgYXV0aCBwYXJhbWV0ZXJzIGZyb20gbWVtb3J5IHRvIGZpbGU8XC9saT5cbjxsaT5Xcml0ZSB0aGUgbnVtYmVyIG9mIGF0dGVtcHRzIHRvIGVudGVyIHBhc3N3b3JkIGF1dGggdGlsbCBub3c8XC9saT5cbjxsaT5TZXQgYSBuZXcgcGFzc3dvcmQgYXV0aCBjb250ZXh0PFwvbGk+XG48bGk+Q2hlY2sgaWYgdGhlIGVudGVyZWQgcGFzc3dvcmQgYXV0aCBjb250ZXh0IGlzIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IHBhc3N3b3JkPFwvbGk+XG48bGk+U2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBoaXN0b3J5IHNpemUgdG8gc3RvcmUgcGFzc3dvcmQgY29udGV4dCBpbiB0aGUgcGFzdDxcL2xpPlxuPGxpPkdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgaGlzdG9yeSBzaXplPFwvbGk+XG48bGk+R2V0IHRoZSBleHBpcmUgdGltZSBwZXJpb2QgaW4gZGF5czxcL2xpPlxuPGxpPlNldCB0aGUgZXhwaXJlIHRpbWUgcGVyaW9kIGluIGRheXM8XC9saT5cbjxsaT5HZXQgdGhlIGV4cGlyZSB0aW1lIGxlZnQgaW4gc2Vjb25kczxcL2xpPlxuPGxpPlNldCB0aGUgZXhwaXJlIHRpbWUgbGVmdCBpbiBzZWNvbmRzPFwvbGk+XG48bGk+R2V0IHRoZSBhY2N1bXVsYXRlZCBhdHRlbXB0IG51bWJlciBmb3IgdXNlcidzIHBhc3N3b3JkIGF1dGggdHJpZXM8XC9saT5cbjxsaT5SZXNldCB0aGUgYWNjdW11bGF0ZWQgYXR0ZW1wdCBudW1iZXIgZm9yIHVzZXIncyBwYXNzd29yZCBhdXRoIHRyaWVzPFwvbGk+XG48bGk+SW5jcmVhc2UgdGhlIGFjY3VtdWxhdGVkIGF0dGVtcHQgbnVtYmVyIGZvciB1c2VyJ3MgcGFzc3dvcmQgYXV0aCB0cmllczxcL2xpPlxuPGxpPkdldCB0aGUgbGltaXRlZCBtYXhpbXVtIGF0dGVtcHQgbnVtYmVyIG9mIHVzZXIncyBwYXNzd29yZCBhdXRoIHRyaWVzPFwvbGk+XG48bGk+U2V0IHRoZSBsaW1pdGVkIG1heGltdW0gYXR0ZW1wdCBudW1iZXIgb2YgdXNlcidzIHBhc3N3b3JkIGF1dGggdHJpZXM8XC9saT5cbjxsaT5HZXQgdGhlIGFjdGl2ZSBzdGF0dXMgb2YgdXNlcidzIHBhc3N3b3JkIGF1dGggY29udGV4dDxcL2xpPlxuPGxpPkNoZWNrIGlmIHRoZSBlbnRlcmVkIHBhc3N3b3JkIGNvbnRleHQgaGFzIHRoZSBwcmV2aW91c2x5LXVzZWQgaGlzdG9yeTxcL2xpPlxuPGxpPkNoZWNrIGlmIHRoZSBwYXNzd29yZCBhdXRoIGNvbnRleHQgaGFzIGV4cGlyZWQ8XC9saT5cbjxsaT5DaGVjayBpZiB0aGUgYWNjdW11bGF0ZWQgYXR0ZW1wdCBudW1iZXIgZm9yIHVzZXIncyBwYXNzd29yZCBhdXRoIHRyeSBleGNlZWRzIHRoZSBsaW1pdGVkIG1heGltdW0gYXR0ZW1wdDxcL2xpPlxuPGxpPkNoZWNrIGlmIHRoZSBuZXcgYXR0ZW1wdCBpbnRlcnZhbCBlbGFwc2VkIHRoZSBpZ25vcmUgcGVyaW9kKGV4LiBSRVRSWV9USU1FT1VUID0gMC41IHNlY3MpPFwvbGk+XG48bGk+Q2hlY2sgaWYgdGhlIGhpc3RvcnkgZm9yIHN0b3JpbmcgdGhlIHByZXZpb3VzIHBhc3N3b3JkIGNvbnRleHQgaXMgYWN0aXZhdGVkPFwvbGk+XG48bGk+R2V0IHRoZSBwYXNzd29yZCB0eXBlIHJlZ2FyZGluZyB0byB0aGUgdXNlciBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgU2VjdXJpdHkgQXV0aCBmZWF0dXJlcyBhbmQgdGhlIG1hY3Jvcywgc2VlIEhBTCBTZWN1cml0eSBwcm9ncmFtbWluZyBndWlkZXMgYW5kIHR1dG9yaWFscy48XC9saT5cbjxcL3VsPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+VHlwZWRlZnM8XC90aD5cbjx0aD48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48dGJvZHk+XG48dHI+XG48dGQ+dHlwZWRlZiBzdHJ1Y3QgICA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI3N0cnVjdF9faGFsX19iYWNrZW5kX19zZWN1cml0eV9fYXV0aF9fZnVuY3NcIj5faGFsX2JhY2tlbmRfc2VjdXJpdHlfYXV0aF9mdW5jczxcL2E+PFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNnYTA1NjljZWVmZDhjMDQ1NGNlNTAyY2I3YTY2ZDNiMWM3XCI+aGFsX2JhY2tlbmRfc2VjdXJpdHlfYXV0aF9mdW5jczxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48XC90ZD5cbjx0ZD5TdHJ1Y3R1cmUgZm9yIHNlY3VyaXR5IGF1dGgtZncgZnVuY3Rpb25zLjxcL3RkPlxuPFwvdHI+XG48XC90Ym9keT5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxociBcLz5cbjxoMiBpZD1cImNvbnRlbnQtZGF0YS1zdHJ1Y3R1cmUtZG9jdW1lbnRhdGlvblwiPjxhIGhyZWY9XCIjY29udGVudC1kYXRhLXN0cnVjdHVyZS1kb2N1bWVudGF0aW9uXCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5EYXRhIFN0cnVjdHVyZSBEb2N1bWVudGF0aW9uPFwvaDI+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5zdHJ1Y3QgX2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5TdHJ1Y3R1cmUgZm9yIHNlY3VyaXR5IGF1dGgtZncgZnVuY3Rpb25zLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX1NFQ1VSSVRZX0FVVEggMS4wPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPkRhdGEgRmllbGRzPFwvdGg+XG48dGg+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPHRib2R5PlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhMGMyZjBkZTI5MmFlMTRlYmEwNmNmM2RiMjM3YWU0OTVcIj5jcmVhdGVfcGFzc3dvcmRfZmlsZTxcL2E+ICkodWlkX3QgdXNlcl9pZCwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNnYTc0M2MzYjUzZWY5ODcxODZmZDhiNzk0NTE1NGE4MWE5XCI+aGFsX3NlY3VyaXR5X2F1dGhfcGFzc3dvcmRfdHlwZV9lPFwvYT4gdHlwZSk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhMzExOTUxNDNkMDJlNjU1MGY2YmNiZDc5NjlhOTdkNTRcIj53cml0ZV9tZW1vcnlfdG9fZmlsZTxcL2E+ICkodWlkX3QgdXNlcl9pZCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhZjkyYzQ3MzY0YTk1Nzc4YzQ3YmUwMjMwYzI1ODUxNThcIj53cml0ZV9hdHRlbXB0X3RvX2ZpbGU8XC9hPiApKHVpZF90IHVzZXJfaWQpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYWQ0NjJhMTdlMTkxZjE5NjRhOTk0YzE4MmRkZThhZWEwXCI+c2V0X3Bhc3N3b3JkPFwvYT4gKSh1aWRfdCB1c2VyX2lkLCBjb25zdCBjaGFyICpwYXNzd29yZCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhODg3NGEyNTUwN2E1YWVkNzJlOTU5M2FiMGViNTdlOTdcIj5jaGVja19wYXNzd29yZDxcL2E+ICkodWlkX3QgdXNlcl9pZCwgY29uc3QgY2hhciAqcGFzc3dvcmQpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTZmNDQ5NTQ5OGNmMjliZTJkMGFiMTlhOTQxMzhhMTk1XCI+c2V0X21heF9oaXN0b3J5X3NpemU8XC9hPiApKHVpZF90IHVzZXJfaWQsIHVuc2lnbmVkIGludCBoaXN0b3J5X3NpemUpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYWI4ZTIxNmZhNzMwNGQ2NDQ1OTM5OTAzN2MzZTI5ZmJlXCI+Z2V0X21heF9oaXN0b3J5X3NpemU8XC9hPiApKHVpZF90IHVzZXJfaWQsIHVuc2lnbmVkIGludCAqaGlzdG9yeV9zaXplKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2EyNWNmNjExZmU3NTFjMmU4MzdhMDkwOTI0ZmE3YjMzOFwiPmdldF9leHBpcmVfdGltZTxcL2E+ICkodWlkX3QgdXNlcl9pZCwgdW5zaWduZWQgaW50ICpleHBpcmVfdGltZSk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhYTJlMjY3OTc0MmJkMmNjYTBiMTJjN2IzMTZmMWM0ZTVcIj5zZXRfZXhwaXJlX3RpbWU8XC9hPiApKHVpZF90IHVzZXJfaWQsIHVuc2lnbmVkIGludCBleHBpcmVfdGltZSk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhNzk2YzhiNTE3MDVkMGM4NzY0ZWYyODYyZjZlMTA3ZTNcIj5nZXRfZXhwaXJlX3RpbWVfbGVmdDxcL2E+ICkodWlkX3QgdXNlcl9pZCwgdW5zaWduZWQgaW50ICpleHBpcmVfdGltZV9sZWZ0KTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2EzNmMwM2RmODBkODE3ZjAwZDA0MzRjNTUwYTlkYWE3NlwiPnNldF9leHBpcmVfdGltZV9sZWZ0PFwvYT4gKSh1aWRfdCB1c2VyX2lkLCB1bnNpZ25lZCBpbnQgZXhwaXJlX3RpbWVfbGVmdCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhMmJlMGIxNDU2NGI4NDI2ZjQ2MzM0YWNmNWUyMTcwMmNcIj5nZXRfYXR0ZW1wdDxcL2E+ICkodWlkX3QgdXNlcl9pZCwgdW5zaWduZWQgaW50ICphdHRlbXB0KTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2FmOTMzMjc5ZTNlZjkzMmU3YTExZWRiZmVmNWUzODYzMlwiPnJlc2V0X2F0dGVtcHQ8XC9hPiApKHVpZF90IHVzZXJfaWQpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTMyMTg1ZjdjMWQxM2UxZTNlYTdlMmVkNTk3NTExOWZhXCI+aW5jcmVtZW50X2F0dGVtcHQ8XC9hPiApKHVpZF90IHVzZXJfaWQpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTQ0YmEzZDc4MmJkODUzMTAzZWM2MmY1NmFlMjYyOTdhXCI+Z2V0X21heF9hdHRlbXB0PFwvYT4gKSh1aWRfdCB1c2VyX2lkLCB1bnNpZ25lZCBpbnQgKm1heF9hdHRlbXB0KTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2FjNDY5MzcwMDgwZmVmMzgzOGZhMmYzNmU5NTFhZjVmZlwiPnNldF9tYXhfYXR0ZW1wdDxcL2E+ICkodWlkX3QgdXNlcl9pZCwgdW5zaWduZWQgaW50IG1heF9hdHRlbXB0KTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2EwNDMyMGNkYTZiZjgzNDk0OTI2MjBkZmQxYjUwZTM1ZVwiPmlzX3Bhc3N3b3JkX2FjdGl2ZTxcL2E+ICkodWlkX3QgdXNlcl9pZCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhNjJlZWQ4NDBhY2QzZTZjNzg1ZDg0ZDA1MjM1MzFkZWFcIj5pc19wYXNzd29yZF9yZXVzZWQ8XC9hPiApKHVpZF90IHVzZXJfaWQsIGNvbnN0IGNoYXIgKnBhc3N3b3JkKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2E5NmI4ZjQ5MTRhMTc4MjdjOTI5Y2Y2OTI5ZjIyMjE4NVwiPmNoZWNrX2V4cGlyYXRpb248XC9hPiApKHVpZF90IHVzZXJfaWQpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYWIxNTg0MGQyYWUyZmNjYWRlMjVkYzAxMGEwYzllZWVhXCI+Y2hlY2tfYXR0ZW1wdF9leGNlZWRlZDxcL2E+ICkodWlkX3QgdXNlcl9pZCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhMDE5MDQyM2IzY2Y4NWJlNzhiNDY5NTAxN2NhM2UyNTlcIj5pc19pZ25vcmVfcGVyaW9kPFwvYT4gKSh1aWRfdCB1c2VyX2lkKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2EzMzY4NmZjODAyOGQ3ODE5YzRhN2U1YmFlOTE1YTM2MlwiPmlzX2hpc3RvcnlfYWN0aXZlPFwvYT4gKSh1aWRfdCB1c2VyX2lkKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2FkYTVkNWE0NjE1YTYxZjkwZDA3MDQ2YzQ1ZGM2MjFhMFwiPmdldF9wYXNzd29yZF90eXBlPFwvYT4gKSh1aWRfdCB1c2VyX2lkLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2dhNzQzYzNiNTNlZjk4NzE4NmZkOGI3OTQ1MTU0YTgxYTlcIj5oYWxfc2VjdXJpdHlfYXV0aF9wYXNzd29yZF90eXBlX2U8XC9hPiAqcGFzc3dvcmRfdHlwZSk8XC90ZD5cbjxcL3RyPlxuPFwvdGJvZHk+XG48XC90YWJsZT48XC9kaXY+XG48aHIgXC8+XG48aDQgaWQ9XCJjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb25cIj48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvblwiIGNsYXNzPVwiaGVhZGluZy1wZXJtYWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIlBlcm1hbGlua1wiPlx1MDBiNjxcL2E+RmllbGQgRG9jdW1lbnRhdGlvbjxcL2g0PlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+aW50KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhYjE1ODQwZDJhZTJmY2NhZGUyNWRjMDEwYTBjOWVlZWFcIj5faGFsX2JhY2tlbmRfc2VjdXJpdHlfYXV0aF9mdW5jczo6Y2hlY2tfYXR0ZW1wdF9leGNlZWRlZDxcL2E+KSh1aWRfdCB1c2VyX2lkKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkNoZWNrIGlmIHRoZSBhY2N1bXVsYXRlZCBhdHRlbXB0IG51bWJlciBmb3IgdXNlcidzIHBhc3N3b3JkIGF1dGggdHJ5IGV4Y2VlZHMgdGhlIGxpbWl0ZWQgbWF4aW11bSBhdHRlbXB0PFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTk2YjhmNDkxNGExNzgyN2M5MjljZjY5MjlmMjIyMTg1XCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OmNoZWNrX2V4cGlyYXRpb248XC9hPikodWlkX3QgdXNlcl9pZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5DaGVjayBpZiB0aGUgcGFzc3dvcmQgYXV0aCBjb250ZXh0IGhhcyBleHBpcmVkPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTg4NzRhMjU1MDdhNWFlZDcyZTk1OTNhYjBlYjU3ZTk3XCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OmNoZWNrX3Bhc3N3b3JkPFwvYT4pKHVpZF90IHVzZXJfaWQsIGNvbnN0IGNoYXIgKnBhc3N3b3JkKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkNoZWNrIGlmIHRoZSBlbnRlcmVkIHBhc3N3b3JkIGF1dGggY29udGV4dCBpcyB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCBwYXNzd29yZDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2EwYzJmMGRlMjkyYWUxNGViYTA2Y2YzZGIyMzdhZTQ5NVwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjpjcmVhdGVfcGFzc3dvcmRfZmlsZTxcL2E+KSh1aWRfdCB1c2VyX2lkLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2dhNzQzYzNiNTNlZjk4NzE4NmZkOGI3OTQ1MTU0YTgxYTlcIj5oYWxfc2VjdXJpdHlfYXV0aF9wYXNzd29yZF90eXBlX2U8XC9hPiB0eXBlKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkNyZWF0ZSBwYXNzd29yZCBmaWxlPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTJiZTBiMTQ1NjRiODQyNmY0NjMzNGFjZjVlMjE3MDJjXCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OmdldF9hdHRlbXB0PFwvYT4pKHVpZF90IHVzZXJfaWQsIHVuc2lnbmVkIGludCAqYXR0ZW1wdCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdGhlIGFjY3VtdWxhdGVkIGF0dGVtcHQgbnVtYmVyIGZvciB1c2VyJ3MgcGFzc3dvcmQgYXV0aCB0cmllczxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2EyNWNmNjExZmU3NTFjMmU4MzdhMDkwOTI0ZmE3YjMzOFwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjpnZXRfZXhwaXJlX3RpbWU8XC9hPikodWlkX3QgdXNlcl9pZCwgdW5zaWduZWQgaW50ICpleHBpcmVfdGltZSk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdGhlIGV4cGlyZSB0aW1lIHBlcmlvZCBpbiBkYXlzPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTc5NmM4YjUxNzA1ZDBjODc2NGVmMjg2MmY2ZTEwN2UzXCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OmdldF9leHBpcmVfdGltZV9sZWZ0PFwvYT4pKHVpZF90IHVzZXJfaWQsIHVuc2lnbmVkIGludCAqZXhwaXJlX3RpbWVfbGVmdCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdGhlIGV4cGlyZSB0aW1lIGxlZnQgaW4gc2Vjb25kczxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2E0NGJhM2Q3ODJiZDg1MzEwM2VjNjJmNTZhZTI2Mjk3YVwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjpnZXRfbWF4X2F0dGVtcHQ8XC9hPikodWlkX3QgdXNlcl9pZCwgdW5zaWduZWQgaW50ICptYXhfYXR0ZW1wdCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdGhlIGxpbWl0ZWQgbWF4aW11bSBhdHRlbXB0IG51bWJlciBvZiB1c2VyJ3MgcGFzc3dvcmQgYXV0aCB0cmllczxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2FiOGUyMTZmYTczMDRkNjQ0NTkzOTkwMzdjM2UyOWZiZVwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjpnZXRfbWF4X2hpc3Rvcnlfc2l6ZTxcL2E+KSh1aWRfdCB1c2VyX2lkLCB1bnNpZ25lZCBpbnQgKmhpc3Rvcnlfc2l6ZSk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGhpc3Rvcnkgc2l6ZTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2FkYTVkNWE0NjE1YTYxZjkwZDA3MDQ2YzQ1ZGM2MjFhMFwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjpnZXRfcGFzc3dvcmRfdHlwZTxcL2E+KSh1aWRfdCB1c2VyX2lkLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2dhNzQzYzNiNTNlZjk4NzE4NmZkOGI3OTQ1MTU0YTgxYTlcIj5oYWxfc2VjdXJpdHlfYXV0aF9wYXNzd29yZF90eXBlX2U8XC9hPiAqcGFzc3dvcmRfdHlwZSk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdGhlIHBhc3N3b3JkIHR5cGUgcmVnYXJkaW5nIHRvIHVzZXJfaWQ8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+aW50KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhMzIxODVmN2MxZDEzZTFlM2VhN2UyZWQ1OTc1MTE5ZmFcIj5faGFsX2JhY2tlbmRfc2VjdXJpdHlfYXV0aF9mdW5jczo6aW5jcmVtZW50X2F0dGVtcHQ8XC9hPikodWlkX3QgdXNlcl9pZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5JbmNyZWFzZSB0aGUgYWNjdW11bGF0ZWQgYXR0ZW1wdCBudW1iZXIgZm9yIHVzZXIncyBwYXNzd29yZCBhdXRoIHRyaWVzPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTMzNjg2ZmM4MDI4ZDc4MTljNGE3ZTViYWU5MTVhMzYyXCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OmlzX2hpc3RvcnlfYWN0aXZlPFwvYT4pKHVpZF90IHVzZXJfaWQpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+Q2hlY2sgaWYgdGhlIGhpc3RvcnkgZm9yIHN0b3JpbmcgdGhlIHByZXZpb3VzIHBhc3N3b3JkIGNvbnRleHQgaXMgYWN0aXZhdGVkPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTAxOTA0MjNiM2NmODViZTc4YjQ2OTUwMTdjYTNlMjU5XCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OmlzX2lnbm9yZV9wZXJpb2Q8XC9hPikodWlkX3QgdXNlcl9pZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5DaGVjayBpZiB0aGUgbmV3IGF0dGVtcHQgaW50ZXJ2YWwgZWxhcHNlZCB0aGUgaWdub3JlIHBlcmlvZChleC4gUkVUUllfVElNRU9VVCA9IDAuNSBzZWNzKTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2EwNDMyMGNkYTZiZjgzNDk0OTI2MjBkZmQxYjUwZTM1ZVwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjppc19wYXNzd29yZF9hY3RpdmU8XC9hPikodWlkX3QgdXNlcl9pZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdGhlIGFjdGl2ZSBzdGF0dXMgb2YgdXNlcidzIHBhc3N3b3JkIGF1dGggY29udGV4dDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2E2MmVlZDg0MGFjZDNlNmM3ODVkODRkMDUyMzUzMWRlYVwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjppc19wYXNzd29yZF9yZXVzZWQ8XC9hPikodWlkX3QgdXNlcl9pZCwgY29uc3QgY2hhciAqcGFzc3dvcmQpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+Q2hlY2sgaWYgdGhlIGVudGVyZWQgcGFzc3dvcmQgY29udGV4dCBoYXMgdGhlIHByZXZpb3VzbHktdXNlZCBoaXN0b3J5PFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYWY5MzMyNzllM2VmOTMyZTdhMTFlZGJmZWY1ZTM4NjMyXCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OnJlc2V0X2F0dGVtcHQ8XC9hPikodWlkX3QgdXNlcl9pZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5SZXNldCB0aGUgYWNjdW11bGF0ZWQgYXR0ZW1wdCBudW1iZXIgZm9yIHVzZXIncyBwYXNzd29yZCBhdXRoIHRyaWVzPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYWEyZTI2Nzk3NDJiZDJjY2EwYjEyYzdiMzE2ZjFjNGU1XCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OnNldF9leHBpcmVfdGltZTxcL2E+KSh1aWRfdCB1c2VyX2lkLCB1bnNpZ25lZCBpbnQgZXhwaXJlX3RpbWUpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+U2V0IHRoZSBleHBpcmUgdGltZSBwZXJpb2QgaW4gZGF5czxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2EzNmMwM2RmODBkODE3ZjAwZDA0MzRjNTUwYTlkYWE3NlwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjpzZXRfZXhwaXJlX3RpbWVfbGVmdDxcL2E+KSh1aWRfdCB1c2VyX2lkLCB1bnNpZ25lZCBpbnQgZXhwaXJlX3RpbWVfbGVmdCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5TZXQgdGhlIGV4cGlyZSB0aW1lIGxlZnQgaW4gc2Vjb25kczxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2FjNDY5MzcwMDgwZmVmMzgzOGZhMmYzNmU5NTFhZjVmZlwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjpzZXRfbWF4X2F0dGVtcHQ8XC9hPikodWlkX3QgdXNlcl9pZCwgdW5zaWduZWQgaW50IG1heF9hdHRlbXB0KTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlNldCB0aGUgbGltaXRlZCBtYXhpbXVtIGF0dGVtcHQgbnVtYmVyIG9mIHVzZXIncyBwYXNzd29yZCBhdXRoIHRyaWVzPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTZmNDQ5NTQ5OGNmMjliZTJkMGFiMTlhOTQxMzhhMTk1XCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OnNldF9tYXhfaGlzdG9yeV9zaXplPFwvYT4pKHVpZF90IHVzZXJfaWQsIHVuc2lnbmVkIGludCBoaXN0b3J5X3NpemUpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+U2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBoaXN0b3J5IHNpemUgdG8gc3RvcmUgcGFzc3dvcmQgY29udGV4dCBpbiB0aGUgcGFzdDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2FkNDYyYTE3ZTE5MWYxOTY0YTk5NGMxODJkZGU4YWVhMFwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjpzZXRfcGFzc3dvcmQ8XC9hPikodWlkX3QgdXNlcl9pZCwgY29uc3QgY2hhciAqcGFzc3dvcmQpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+U2V0IGEgbmV3IHBhc3N3b3JkIGF1dGggY29udGV4dDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2FmOTJjNDczNjRhOTU3NzhjNDdiZTAyMzBjMjU4NTE1OFwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjp3cml0ZV9hdHRlbXB0X3RvX2ZpbGU8XC9hPikodWlkX3QgdXNlcl9pZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5Xcml0ZSB0aGUgbnVtYmVyIG9mIGF0dGVtcHRzIHRvIGVudGVyIHBhc3N3b3JkIGF1dGggdGlsbCBub3c8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+aW50KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhMzExOTUxNDNkMDJlNjU1MGY2YmNiZDc5NjlhOTdkNTRcIj5faGFsX2JhY2tlbmRfc2VjdXJpdHlfYXV0aF9mdW5jczo6d3JpdGVfbWVtb3J5X3RvX2ZpbGU8XC9hPikodWlkX3QgdXNlcl9pZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5Xcml0ZSBwYXNzd29yZCBhdXRoIHBhcmFtZXRlcnMgZnJvbSBtZW1vcnkgdG8gZmlsZTxcL3A+XG48aHIgXC8+XG48aDIgaWQ9XCJjb250ZW50LXR5cGVkZWYtZG9jdW1lbnRhdGlvblwiPjxhIGhyZWY9XCIjY29udGVudC10eXBlZGVmLWRvY3VtZW50YXRpb25cIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPlR5cGVkZWYgRG9jdW1lbnRhdGlvbjxcL2gyPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+dHlwZWRlZiBzdHJ1Y3QgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNzdHJ1Y3RfX2hhbF9fYmFja2VuZF9fc2VjdXJpdHlfX2F1dGhfX2Z1bmNzXCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M8XC9hPiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2dhMDU2OWNlZWZkOGMwNDU0Y2U1MDJjYjdhNjZkM2IxYzdcIj5oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5TdHJ1Y3R1cmUgZm9yIHNlY3VyaXR5IGF1dGgtZncgZnVuY3Rpb25zLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX1NFQ1VSSVRZX0FVVEggMS4wPFwvcD5cbjxociBcLz5cbjxoMiBpZD1cImNvbnRlbnQtZW51bWVyYXRpb24tdHlwZS1kb2N1bWVudGF0aW9uXCI+PGEgaHJlZj1cIiNjb250ZW50LWVudW1lcmF0aW9uLXR5cGUtZG9jdW1lbnRhdGlvblwiIGNsYXNzPVwiaGVhZGluZy1wZXJtYWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIlBlcm1hbGlua1wiPlx1MDBiNjxcL2E+RW51bWVyYXRpb24gVHlwZSBEb2N1bWVudGF0aW9uPFwvaDI+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5lbnVtIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjZ2EzMjQ3YjgxN2MyMzY3ZDgzYzlmMzkzN2U1MjA5NzQzNlwiPmhhbF9zZWN1cml0eV9hdXRoX2Vycm9yX2U8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlJldHVybiBDb2RlcyBleHBvcnRlZCBieSB0aGUgaGFsLXNlY3VyaXR5LWF1dGggZnVuY3Rpb25zLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX1NFQ1VSSVRZX0FVVEggMS4wPFwvcD5cbjxwPjxzdHJvbmc+RW51bWVyYXRvcjo8XC9zdHJvbmc+XG46ICAgfCA8ZW0+SEFMX1NFQ1VSSVRZX0FVVEhfRVJST1JfTk9ORTxcL2VtPiB8IEluZGljYXRlIHRoZSByZXN1bHQgb2YgdGhlIG9uZSBzcGVjaWZpYyBBUEkgaXMgc3VjY2Vzc2Z1bCB8XG58IC0tLSB8IC0tLSB8XG58IDxlbT5IQUxfU0VDVVJJVFlfQVVUSF9FUlJPUl9JTlBVVF9QQVJBTTxcL2VtPiB8IEluZGljYXRlIHRoZSBBUEkncyBpbnB1dCBwYXJhbWV0ZXIgaXMgbWFsZm9ybWVkIHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX0VSUk9SX09VVF9PRl9NRU1PUlk8XC9lbT4gfCBJbmRpY2F0ZSBzeXN0ZW0gaXMgcnVubmluZyBvdXQgb2YgbWVtb3J5IHN0YXRlIHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX0VSUk9SX0JVRkZFUl9UT09fU01BTEw8XC9lbT4gfCBJbmRpY2F0ZSB0aGUgb3V0cHV0IGJ1ZmZlciBzaXplIHdoaWNoIGlzIHBhc3NlZCBhcyBwYXJhbWV0ZXIgaXMgdG9vIHNtYWxsIHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX0VSUk9SX05PX1VTRVI8XC9lbT4gfCBJbmRpY2F0ZSB0aGVyZSBpcyBubyB1c2VyIHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX0VSUk9SX05PX1BBU1NXT1JEPFwvZW0+IHwgSW5kaWNhdGUgdGhlcmUgaXMgbm8gcGFzc3dvcmQgc2V0IHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX0VSUk9SX1BBU1NXT1JEX0VYSVNUPFwvZW0+IHwgSW5kaWNhdGUgcGFzc3dvcmQgZXhpc3RzIGluIHN5c3RlbSB8XG58IDxlbT5IQUxfU0VDVVJJVFlfQVVUSF9FUlJPUl9QQVNTV09SRF9NSVNNQVRDSDxcL2VtPiB8IEluZGljYXRlIHBhc3N3b3JkIG1pc21hdGNoIHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX0VSUk9SX1BBU1NXT1JEX1JFVFJZX1RJTUVSPFwvZW0+IHwgSW5kaWNhdGUgcGFzc3dvcmQgcmV0cnkgdGltZW91dCBoYXMgbm90IHlldCBvY2N1cnJlZCB8XG58IDxlbT5IQUxfU0VDVVJJVFlfQVVUSF9FUlJPUl9QQVNTV09SRF9NQVhfQVRURU1QVFNfRVhDRUVERUQ8XC9lbT4gfCBJbmRpY2F0ZSBubyBtb3JlIGF0dGVtcHRzIGFyZSBwb3NzaWJsZSB8XG58IDxlbT5IQUxfU0VDVVJJVFlfQVVUSF9FUlJPUl9QQVNTV09SRF9FWFBJUkVEPFwvZW0+IHwgSW5kaWNhdGUgcGFzc3dvcmQgaXMgZXhwaXJlZCB8XG58IDxlbT5IQUxfU0VDVVJJVFlfQVVUSF9FUlJPUl9QQVNTV09SRF9SRVVTRUQ8XC9lbT4gfCBJbmRpY2F0ZSBwYXNzd29yZCBpcyByZXVzZWQgfFxufCA8ZW0+SEFMX1NFQ1VSSVRZX0FVVEhfRVJST1JfU1RBVFVTPFwvZW0+IHwgSW5kaWNhdGUgc3RhdHVzIGRvZXMgbm90IG1lZXQgdGhlIHJlcXVpcmVkIGNvbmRpdGlvbiBvciB0aHJlc2hvbGQgfFxufCA8ZW0+SEFMX1NFQ1VSSVRZX0FVVEhfRVJST1JfSEFMX0lOSVRfRkFJTDxcL2VtPiB8IEluZGljYXRlIHRoZXJlIGlzIGEgZmFpbHVyZSBkdXJpbmcgSEFMIGluaXRpYWxpemF0aW9uIHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX0VSUk9SX1VOS05PV048XC9lbT4gfCBJbmRpY2F0ZSB0aGUgZXJyb3Igd2l0aCB1bmtub3duIHJlYXNvbiB8PFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmVudW0gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNnYTc0M2MzYjUzZWY5ODcxODZmZDhiNzk0NTE1NGE4MWE5XCI+aGFsX3NlY3VyaXR5X2F1dGhfcGFzc3dvcmRfdHlwZV9lPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5FbnVtZXJhdGlvbiBmb3IgYXV0aCBwYXNzd29yZCB0eXBlLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX1NFQ1VSSVRZX0FVVEggMS4wPFwvcD5cbjxwPjxzdHJvbmc+RW51bWVyYXRvcjo8XC9zdHJvbmc+XG46ICAgfCA8ZW0+SEFMX1NFQ1VSSVRZX0FVVEhfUEFTU1dPUkRfTk9STUFMPFwvZW0+IHwgQ2hhcmFjdGVyIHN0cmluZyBmb3Igbm9ybWFsIHBhc3N3b3JkIHxcbnwgLS0tIHwgLS0tIHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX1BBU1NXT1JEX1BJTjxcL2VtPiB8IE51bWVyaWMgY2hhcmFjdGVyIHN0cmluZyBmb3IgcGVyc29uYWwgaWRlbnRpZmljYXRpb24gbnVtYmVyIHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX1BBU1NXT1JEX1BBVFRFUk48XC9lbT4gfCBOdW1lcmljIGNoYXJhY3RlciBzdHJpbmcgZm9yIHBhdHRlcm4gbWF0Y2ggfDxcL3A+XG48aHIgXC8+XG48cD5FeGNlcHQgYXMgbm90ZWQsIHRoaXMgY29udGVudCAtIGV4Y2x1ZGluZyB0aGUgQ29kZSBFeGFtcGxlcyAtIGlzIGxpY2Vuc2VkIHVuZGVyIDxhIGhyZWY9XCJodHRwOlwvXC9jcmVhdGl2ZWNvbW1vbnMub3JnXC9saWNlbnNlc1wvYnlcLzMuMFwvbGVnYWxjb2RlXCI+Q3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiAzLjA8XC9hPlxuYW5kIGFsbCBvZiB0aGUgQ29kZSBFeGFtcGxlcyBjb250YWluZWQgaGVyZWluIGFyZSBsaWNlbnNlZCB1bmRlciA8YSBocmVmPVwiaHR0cHM6XC9cL3d3dy50aXplbi5vcmdcL2JzZC0zLWNsYXVzZS1saWNlbnNlXCI+QlNELTMtQ2xhdXNlPFwvYT4uPGJyIFwvPlxuRm9yIGRldGFpbHMsIHNlZSB0aGUgPGEgaHJlZj1cImh0dHBzOlwvXC93d3cudGl6ZW4ub3JnXC9jb250ZW50LWxpY2Vuc2VcIj5Db250ZW50IExpY2Vuc2U8XC9hPi48XC9wPlxuIiwidGFibGVfb2ZfY29udGVudCI6Ijx1bCBjbGFzcz1cInRhYmxlLW9mLWNvbnRlbnRzXCI+XG48bGk+PGEgaHJlZj1cIiNjb250ZW50LXJlcXVpcmVkLWhlYWRlclwiPlJlcXVpcmVkIEhlYWRlcjxcL2E+PFwvbGk+XG48bGk+PGEgaHJlZj1cIiNjb250ZW50LW92ZXJ2aWV3XCI+T3ZlcnZpZXc8XC9hPjxcL2xpPlxuPGxpPjxhIGhyZWY9XCIjY29udGVudC1kYXRhLXN0cnVjdHVyZS1kb2N1bWVudGF0aW9uXCI+RGF0YSBTdHJ1Y3R1cmUgRG9jdW1lbnRhdGlvbjxcL2E+PFwvbGk+XG48bGk+PGEgaHJlZj1cIiNjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb25cIj5GaWVsZCBEb2N1bWVudGF0aW9uPFwvYT48XC9saT5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtdHlwZWRlZi1kb2N1bWVudGF0aW9uXCI+VHlwZWRlZiBEb2N1bWVudGF0aW9uPFwvYT48XC9saT5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtZW51bWVyYXRpb24tdHlwZS1kb2N1bWVudGF0aW9uXCI+RW51bWVyYXRpb24gVHlwZSBEb2N1bWVudGF0aW9uPFwvYT48XC9saT5cbjxcL3VsPlxuIiwidGl0bGUiOiJUaXplbiBIQUwgQVBJOiBBdXRoIiwicmF3IjpudWxsfSx7ImNsYXNzIjoiQXBwXFxTZXJ2aWNlc1xcRG9jdW1lbnRhdGlvblxcRGF0YVxcUmVuZGVyZWRNYXJrZG93biIsInMiOiJ3cmJsIn1dfSx7InMiOiJhcnIifV19LCJtZW1vIjp7ImlkIjoiUjZ5NWwxamxwZ1ZsdnJ3YzVGSWwiLCJuYW1lIjoiX19tb3VudFBhcmFtc0NvbnRhaW5lciIsInBhdGgiOiJkb2NzXC9wbGF0Zm9ybVwvaGFsXC9hcGlcLzEuMC4wXC9ncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUiLCJtZXRob2QiOiJHRVQiLCJyZWxlYXNlIjoiYS1hLWEifSwiY2hlY2tzdW0iOiI0OTJkZTU0YmMxNzI5YTIwNmJkZmZkNjRhNTMyNzE3ODY1NTRiNWU2NjQzMDhiZmQ4OTE2NjIwOWZjZjY0MGQ0In0=')" >
Content License<\/a>.<\/p>\n","table_of_content":"<ul class=\"table-of-contents\">\n<li><a href=https://samsungtizenos.com/"#content-required-header\">Required Header<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-overview\">Overview<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-data-structure-documentation\">Data Structure Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-typedef-documentation\">Typedef Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-enumeration-type-documentation\">Enumeration Type Documentation<\/a><\/li>\n<\/ul>\n","title":"Tizen HAL API: Auth","raw":null},{"class":"App\\Services\\Documentation\\Data\\RenderedMarkdown","s":"wrbl"}]},"memo":{"id":"AUjUKxkEimH16R9KOKqK","name":"documentation::article","path":"docs\/platform\/hal\/api\/1.0.0\/group__HALAPI__HAL__SECURITY__AUTH__MODULE","method":"GET","release":"a-a-a","children":[],"scripts":[],"assets":[],"lazyLoaded":false,"lazyIsolated":true,"errors":[],"locale":"en","islands":[]},"checksum":"fec6a2bc152290a9b4860724b43bc22603c0daca946d6d532284deb3ed47467d"}" wire:effects="[]" wire:id="AUjUKxkEimH16R9KOKqK" wire:name="documentation::article" x-init="$wire.__lazyLoad('eyJkYXRhIjp7ImZvck1vdW50IjpbeyJtYXJrZG93biI6W3siYm9keSI6IjxoMSBpZD1cImNvbnRlbnQtdGl6ZW4taGFsLWFwaS1hdXRoXCI+PGEgaHJlZj1cIiNjb250ZW50LXRpemVuLWhhbC1hcGktYXV0aFwiIGNsYXNzPVwiaGVhZGluZy1wZXJtYWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIlBlcm1hbGlua1wiPlx1MDBiNjxcL2E+VGl6ZW4gSEFMIEFQSTogQXV0aDxcL2gxPjxkaXYgZGF0YS1rbm93bGVkZ2UtYmFzZS1tZXRhZGF0YT48XC9kaXY+XG48aHIgXC8+XG48cD5UaGUgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZFwiPkF1dGg8XC9hPiBwcm92aWRlcyBmdW5jdGlvbnMgdG8gaGFuZGxlIHRoZSBhdXRoZW50aWNhdGlvbiBwZXIgdXNlci48XC9wPlxuPGgyIGlkPVwiY29udGVudC1yZXF1aXJlZC1oZWFkZXJcIj48YSBocmVmPVwiI2NvbnRlbnQtcmVxdWlyZWQtaGVhZGVyXCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5SZXF1aXJlZCBIZWFkZXI8XC9oMj5cbjxwPiNpbmNsdWRlICZsdDtoYWxcL2hhbC1zZWN1cml0eS1hdXRoLmgmZ3Q7PFwvcD5cbjxoMiBpZD1cImNvbnRlbnQtb3ZlcnZpZXdcIj48YSBocmVmPVwiI2NvbnRlbnQtb3ZlcnZpZXdcIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPk92ZXJ2aWV3PFwvaDI+XG48cD5UaGUgU2VjdXJpdHkgQXV0aCBwcm92aWRlcyBmdW5jdGlvbnMgdG8gaGFuZGxlIHRoZSBhdXRoZW50aWNhdGlvbiBwZXIgdXNlci48XC9wPlxuPHA+VGhlIFNlY3VyaXR5IEF1dGggZnVuY3Rpb25zIHByb3ZpZGUgbWV0aG9kcyB0bzo8XC9wPlxuPHVsPlxuPGxpPkNyZWF0ZSBwYXNzd29yZCBmaWxlPFwvbGk+XG48bGk+V3JpdGUgcGFzc3dvcmQgYXV0aCBwYXJhbWV0ZXJzIGZyb20gbWVtb3J5IHRvIGZpbGU8XC9saT5cbjxsaT5Xcml0ZSB0aGUgbnVtYmVyIG9mIGF0dGVtcHRzIHRvIGVudGVyIHBhc3N3b3JkIGF1dGggdGlsbCBub3c8XC9saT5cbjxsaT5TZXQgYSBuZXcgcGFzc3dvcmQgYXV0aCBjb250ZXh0PFwvbGk+XG48bGk+Q2hlY2sgaWYgdGhlIGVudGVyZWQgcGFzc3dvcmQgYXV0aCBjb250ZXh0IGlzIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IHBhc3N3b3JkPFwvbGk+XG48bGk+U2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBoaXN0b3J5IHNpemUgdG8gc3RvcmUgcGFzc3dvcmQgY29udGV4dCBpbiB0aGUgcGFzdDxcL2xpPlxuPGxpPkdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgaGlzdG9yeSBzaXplPFwvbGk+XG48bGk+R2V0IHRoZSBleHBpcmUgdGltZSBwZXJpb2QgaW4gZGF5czxcL2xpPlxuPGxpPlNldCB0aGUgZXhwaXJlIHRpbWUgcGVyaW9kIGluIGRheXM8XC9saT5cbjxsaT5HZXQgdGhlIGV4cGlyZSB0aW1lIGxlZnQgaW4gc2Vjb25kczxcL2xpPlxuPGxpPlNldCB0aGUgZXhwaXJlIHRpbWUgbGVmdCBpbiBzZWNvbmRzPFwvbGk+XG48bGk+R2V0IHRoZSBhY2N1bXVsYXRlZCBhdHRlbXB0IG51bWJlciBmb3IgdXNlcidzIHBhc3N3b3JkIGF1dGggdHJpZXM8XC9saT5cbjxsaT5SZXNldCB0aGUgYWNjdW11bGF0ZWQgYXR0ZW1wdCBudW1iZXIgZm9yIHVzZXIncyBwYXNzd29yZCBhdXRoIHRyaWVzPFwvbGk+XG48bGk+SW5jcmVhc2UgdGhlIGFjY3VtdWxhdGVkIGF0dGVtcHQgbnVtYmVyIGZvciB1c2VyJ3MgcGFzc3dvcmQgYXV0aCB0cmllczxcL2xpPlxuPGxpPkdldCB0aGUgbGltaXRlZCBtYXhpbXVtIGF0dGVtcHQgbnVtYmVyIG9mIHVzZXIncyBwYXNzd29yZCBhdXRoIHRyaWVzPFwvbGk+XG48bGk+U2V0IHRoZSBsaW1pdGVkIG1heGltdW0gYXR0ZW1wdCBudW1iZXIgb2YgdXNlcidzIHBhc3N3b3JkIGF1dGggdHJpZXM8XC9saT5cbjxsaT5HZXQgdGhlIGFjdGl2ZSBzdGF0dXMgb2YgdXNlcidzIHBhc3N3b3JkIGF1dGggY29udGV4dDxcL2xpPlxuPGxpPkNoZWNrIGlmIHRoZSBlbnRlcmVkIHBhc3N3b3JkIGNvbnRleHQgaGFzIHRoZSBwcmV2aW91c2x5LXVzZWQgaGlzdG9yeTxcL2xpPlxuPGxpPkNoZWNrIGlmIHRoZSBwYXNzd29yZCBhdXRoIGNvbnRleHQgaGFzIGV4cGlyZWQ8XC9saT5cbjxsaT5DaGVjayBpZiB0aGUgYWNjdW11bGF0ZWQgYXR0ZW1wdCBudW1iZXIgZm9yIHVzZXIncyBwYXNzd29yZCBhdXRoIHRyeSBleGNlZWRzIHRoZSBsaW1pdGVkIG1heGltdW0gYXR0ZW1wdDxcL2xpPlxuPGxpPkNoZWNrIGlmIHRoZSBuZXcgYXR0ZW1wdCBpbnRlcnZhbCBlbGFwc2VkIHRoZSBpZ25vcmUgcGVyaW9kKGV4LiBSRVRSWV9USU1FT1VUID0gMC41IHNlY3MpPFwvbGk+XG48bGk+Q2hlY2sgaWYgdGhlIGhpc3RvcnkgZm9yIHN0b3JpbmcgdGhlIHByZXZpb3VzIHBhc3N3b3JkIGNvbnRleHQgaXMgYWN0aXZhdGVkPFwvbGk+XG48bGk+R2V0IHRoZSBwYXNzd29yZCB0eXBlIHJlZ2FyZGluZyB0byB0aGUgdXNlciBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgU2VjdXJpdHkgQXV0aCBmZWF0dXJlcyBhbmQgdGhlIG1hY3Jvcywgc2VlIEhBTCBTZWN1cml0eSBwcm9ncmFtbWluZyBndWlkZXMgYW5kIHR1dG9yaWFscy48XC9saT5cbjxcL3VsPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+VHlwZWRlZnM8XC90aD5cbjx0aD48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48dGJvZHk+XG48dHI+XG48dGQ+dHlwZWRlZiBzdHJ1Y3QgICA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI3N0cnVjdF9faGFsX19iYWNrZW5kX19zZWN1cml0eV9fYXV0aF9fZnVuY3NcIj5faGFsX2JhY2tlbmRfc2VjdXJpdHlfYXV0aF9mdW5jczxcL2E+PFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNnYTA1NjljZWVmZDhjMDQ1NGNlNTAyY2I3YTY2ZDNiMWM3XCI+aGFsX2JhY2tlbmRfc2VjdXJpdHlfYXV0aF9mdW5jczxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48XC90ZD5cbjx0ZD5TdHJ1Y3R1cmUgZm9yIHNlY3VyaXR5IGF1dGgtZncgZnVuY3Rpb25zLjxcL3RkPlxuPFwvdHI+XG48XC90Ym9keT5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxociBcLz5cbjxoMiBpZD1cImNvbnRlbnQtZGF0YS1zdHJ1Y3R1cmUtZG9jdW1lbnRhdGlvblwiPjxhIGhyZWY9XCIjY29udGVudC1kYXRhLXN0cnVjdHVyZS1kb2N1bWVudGF0aW9uXCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5EYXRhIFN0cnVjdHVyZSBEb2N1bWVudGF0aW9uPFwvaDI+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5zdHJ1Y3QgX2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5TdHJ1Y3R1cmUgZm9yIHNlY3VyaXR5IGF1dGgtZncgZnVuY3Rpb25zLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX1NFQ1VSSVRZX0FVVEggMS4wPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPkRhdGEgRmllbGRzPFwvdGg+XG48dGg+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPHRib2R5PlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhMGMyZjBkZTI5MmFlMTRlYmEwNmNmM2RiMjM3YWU0OTVcIj5jcmVhdGVfcGFzc3dvcmRfZmlsZTxcL2E+ICkodWlkX3QgdXNlcl9pZCwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNnYTc0M2MzYjUzZWY5ODcxODZmZDhiNzk0NTE1NGE4MWE5XCI+aGFsX3NlY3VyaXR5X2F1dGhfcGFzc3dvcmRfdHlwZV9lPFwvYT4gdHlwZSk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhMzExOTUxNDNkMDJlNjU1MGY2YmNiZDc5NjlhOTdkNTRcIj53cml0ZV9tZW1vcnlfdG9fZmlsZTxcL2E+ICkodWlkX3QgdXNlcl9pZCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhZjkyYzQ3MzY0YTk1Nzc4YzQ3YmUwMjMwYzI1ODUxNThcIj53cml0ZV9hdHRlbXB0X3RvX2ZpbGU8XC9hPiApKHVpZF90IHVzZXJfaWQpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYWQ0NjJhMTdlMTkxZjE5NjRhOTk0YzE4MmRkZThhZWEwXCI+c2V0X3Bhc3N3b3JkPFwvYT4gKSh1aWRfdCB1c2VyX2lkLCBjb25zdCBjaGFyICpwYXNzd29yZCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhODg3NGEyNTUwN2E1YWVkNzJlOTU5M2FiMGViNTdlOTdcIj5jaGVja19wYXNzd29yZDxcL2E+ICkodWlkX3QgdXNlcl9pZCwgY29uc3QgY2hhciAqcGFzc3dvcmQpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTZmNDQ5NTQ5OGNmMjliZTJkMGFiMTlhOTQxMzhhMTk1XCI+c2V0X21heF9oaXN0b3J5X3NpemU8XC9hPiApKHVpZF90IHVzZXJfaWQsIHVuc2lnbmVkIGludCBoaXN0b3J5X3NpemUpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYWI4ZTIxNmZhNzMwNGQ2NDQ1OTM5OTAzN2MzZTI5ZmJlXCI+Z2V0X21heF9oaXN0b3J5X3NpemU8XC9hPiApKHVpZF90IHVzZXJfaWQsIHVuc2lnbmVkIGludCAqaGlzdG9yeV9zaXplKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2EyNWNmNjExZmU3NTFjMmU4MzdhMDkwOTI0ZmE3YjMzOFwiPmdldF9leHBpcmVfdGltZTxcL2E+ICkodWlkX3QgdXNlcl9pZCwgdW5zaWduZWQgaW50ICpleHBpcmVfdGltZSk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhYTJlMjY3OTc0MmJkMmNjYTBiMTJjN2IzMTZmMWM0ZTVcIj5zZXRfZXhwaXJlX3RpbWU8XC9hPiApKHVpZF90IHVzZXJfaWQsIHVuc2lnbmVkIGludCBleHBpcmVfdGltZSk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhNzk2YzhiNTE3MDVkMGM4NzY0ZWYyODYyZjZlMTA3ZTNcIj5nZXRfZXhwaXJlX3RpbWVfbGVmdDxcL2E+ICkodWlkX3QgdXNlcl9pZCwgdW5zaWduZWQgaW50ICpleHBpcmVfdGltZV9sZWZ0KTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2EzNmMwM2RmODBkODE3ZjAwZDA0MzRjNTUwYTlkYWE3NlwiPnNldF9leHBpcmVfdGltZV9sZWZ0PFwvYT4gKSh1aWRfdCB1c2VyX2lkLCB1bnNpZ25lZCBpbnQgZXhwaXJlX3RpbWVfbGVmdCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhMmJlMGIxNDU2NGI4NDI2ZjQ2MzM0YWNmNWUyMTcwMmNcIj5nZXRfYXR0ZW1wdDxcL2E+ICkodWlkX3QgdXNlcl9pZCwgdW5zaWduZWQgaW50ICphdHRlbXB0KTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2FmOTMzMjc5ZTNlZjkzMmU3YTExZWRiZmVmNWUzODYzMlwiPnJlc2V0X2F0dGVtcHQ8XC9hPiApKHVpZF90IHVzZXJfaWQpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTMyMTg1ZjdjMWQxM2UxZTNlYTdlMmVkNTk3NTExOWZhXCI+aW5jcmVtZW50X2F0dGVtcHQ8XC9hPiApKHVpZF90IHVzZXJfaWQpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTQ0YmEzZDc4MmJkODUzMTAzZWM2MmY1NmFlMjYyOTdhXCI+Z2V0X21heF9hdHRlbXB0PFwvYT4gKSh1aWRfdCB1c2VyX2lkLCB1bnNpZ25lZCBpbnQgKm1heF9hdHRlbXB0KTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2FjNDY5MzcwMDgwZmVmMzgzOGZhMmYzNmU5NTFhZjVmZlwiPnNldF9tYXhfYXR0ZW1wdDxcL2E+ICkodWlkX3QgdXNlcl9pZCwgdW5zaWduZWQgaW50IG1heF9hdHRlbXB0KTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2EwNDMyMGNkYTZiZjgzNDk0OTI2MjBkZmQxYjUwZTM1ZVwiPmlzX3Bhc3N3b3JkX2FjdGl2ZTxcL2E+ICkodWlkX3QgdXNlcl9pZCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhNjJlZWQ4NDBhY2QzZTZjNzg1ZDg0ZDA1MjM1MzFkZWFcIj5pc19wYXNzd29yZF9yZXVzZWQ8XC9hPiApKHVpZF90IHVzZXJfaWQsIGNvbnN0IGNoYXIgKnBhc3N3b3JkKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2E5NmI4ZjQ5MTRhMTc4MjdjOTI5Y2Y2OTI5ZjIyMjE4NVwiPmNoZWNrX2V4cGlyYXRpb248XC9hPiApKHVpZF90IHVzZXJfaWQpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYWIxNTg0MGQyYWUyZmNjYWRlMjVkYzAxMGEwYzllZWVhXCI+Y2hlY2tfYXR0ZW1wdF9leGNlZWRlZDxcL2E+ICkodWlkX3QgdXNlcl9pZCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhMDE5MDQyM2IzY2Y4NWJlNzhiNDY5NTAxN2NhM2UyNTlcIj5pc19pZ25vcmVfcGVyaW9kPFwvYT4gKSh1aWRfdCB1c2VyX2lkKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2EzMzY4NmZjODAyOGQ3ODE5YzRhN2U1YmFlOTE1YTM2MlwiPmlzX2hpc3RvcnlfYWN0aXZlPFwvYT4gKSh1aWRfdCB1c2VyX2lkKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2FkYTVkNWE0NjE1YTYxZjkwZDA3MDQ2YzQ1ZGM2MjFhMFwiPmdldF9wYXNzd29yZF90eXBlPFwvYT4gKSh1aWRfdCB1c2VyX2lkLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2dhNzQzYzNiNTNlZjk4NzE4NmZkOGI3OTQ1MTU0YTgxYTlcIj5oYWxfc2VjdXJpdHlfYXV0aF9wYXNzd29yZF90eXBlX2U8XC9hPiAqcGFzc3dvcmRfdHlwZSk8XC90ZD5cbjxcL3RyPlxuPFwvdGJvZHk+XG48XC90YWJsZT48XC9kaXY+XG48aHIgXC8+XG48aDQgaWQ9XCJjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb25cIj48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvblwiIGNsYXNzPVwiaGVhZGluZy1wZXJtYWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIlBlcm1hbGlua1wiPlx1MDBiNjxcL2E+RmllbGQgRG9jdW1lbnRhdGlvbjxcL2g0PlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+aW50KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhYjE1ODQwZDJhZTJmY2NhZGUyNWRjMDEwYTBjOWVlZWFcIj5faGFsX2JhY2tlbmRfc2VjdXJpdHlfYXV0aF9mdW5jczo6Y2hlY2tfYXR0ZW1wdF9leGNlZWRlZDxcL2E+KSh1aWRfdCB1c2VyX2lkKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkNoZWNrIGlmIHRoZSBhY2N1bXVsYXRlZCBhdHRlbXB0IG51bWJlciBmb3IgdXNlcidzIHBhc3N3b3JkIGF1dGggdHJ5IGV4Y2VlZHMgdGhlIGxpbWl0ZWQgbWF4aW11bSBhdHRlbXB0PFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTk2YjhmNDkxNGExNzgyN2M5MjljZjY5MjlmMjIyMTg1XCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OmNoZWNrX2V4cGlyYXRpb248XC9hPikodWlkX3QgdXNlcl9pZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5DaGVjayBpZiB0aGUgcGFzc3dvcmQgYXV0aCBjb250ZXh0IGhhcyBleHBpcmVkPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTg4NzRhMjU1MDdhNWFlZDcyZTk1OTNhYjBlYjU3ZTk3XCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OmNoZWNrX3Bhc3N3b3JkPFwvYT4pKHVpZF90IHVzZXJfaWQsIGNvbnN0IGNoYXIgKnBhc3N3b3JkKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkNoZWNrIGlmIHRoZSBlbnRlcmVkIHBhc3N3b3JkIGF1dGggY29udGV4dCBpcyB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCBwYXNzd29yZDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2EwYzJmMGRlMjkyYWUxNGViYTA2Y2YzZGIyMzdhZTQ5NVwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjpjcmVhdGVfcGFzc3dvcmRfZmlsZTxcL2E+KSh1aWRfdCB1c2VyX2lkLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2dhNzQzYzNiNTNlZjk4NzE4NmZkOGI3OTQ1MTU0YTgxYTlcIj5oYWxfc2VjdXJpdHlfYXV0aF9wYXNzd29yZF90eXBlX2U8XC9hPiB0eXBlKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkNyZWF0ZSBwYXNzd29yZCBmaWxlPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTJiZTBiMTQ1NjRiODQyNmY0NjMzNGFjZjVlMjE3MDJjXCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OmdldF9hdHRlbXB0PFwvYT4pKHVpZF90IHVzZXJfaWQsIHVuc2lnbmVkIGludCAqYXR0ZW1wdCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdGhlIGFjY3VtdWxhdGVkIGF0dGVtcHQgbnVtYmVyIGZvciB1c2VyJ3MgcGFzc3dvcmQgYXV0aCB0cmllczxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2EyNWNmNjExZmU3NTFjMmU4MzdhMDkwOTI0ZmE3YjMzOFwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjpnZXRfZXhwaXJlX3RpbWU8XC9hPikodWlkX3QgdXNlcl9pZCwgdW5zaWduZWQgaW50ICpleHBpcmVfdGltZSk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdGhlIGV4cGlyZSB0aW1lIHBlcmlvZCBpbiBkYXlzPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTc5NmM4YjUxNzA1ZDBjODc2NGVmMjg2MmY2ZTEwN2UzXCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OmdldF9leHBpcmVfdGltZV9sZWZ0PFwvYT4pKHVpZF90IHVzZXJfaWQsIHVuc2lnbmVkIGludCAqZXhwaXJlX3RpbWVfbGVmdCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdGhlIGV4cGlyZSB0aW1lIGxlZnQgaW4gc2Vjb25kczxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2E0NGJhM2Q3ODJiZDg1MzEwM2VjNjJmNTZhZTI2Mjk3YVwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjpnZXRfbWF4X2F0dGVtcHQ8XC9hPikodWlkX3QgdXNlcl9pZCwgdW5zaWduZWQgaW50ICptYXhfYXR0ZW1wdCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdGhlIGxpbWl0ZWQgbWF4aW11bSBhdHRlbXB0IG51bWJlciBvZiB1c2VyJ3MgcGFzc3dvcmQgYXV0aCB0cmllczxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2FiOGUyMTZmYTczMDRkNjQ0NTkzOTkwMzdjM2UyOWZiZVwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjpnZXRfbWF4X2hpc3Rvcnlfc2l6ZTxcL2E+KSh1aWRfdCB1c2VyX2lkLCB1bnNpZ25lZCBpbnQgKmhpc3Rvcnlfc2l6ZSk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGhpc3Rvcnkgc2l6ZTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2FkYTVkNWE0NjE1YTYxZjkwZDA3MDQ2YzQ1ZGM2MjFhMFwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjpnZXRfcGFzc3dvcmRfdHlwZTxcL2E+KSh1aWRfdCB1c2VyX2lkLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2dhNzQzYzNiNTNlZjk4NzE4NmZkOGI3OTQ1MTU0YTgxYTlcIj5oYWxfc2VjdXJpdHlfYXV0aF9wYXNzd29yZF90eXBlX2U8XC9hPiAqcGFzc3dvcmRfdHlwZSk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdGhlIHBhc3N3b3JkIHR5cGUgcmVnYXJkaW5nIHRvIHVzZXJfaWQ8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+aW50KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhMzIxODVmN2MxZDEzZTFlM2VhN2UyZWQ1OTc1MTE5ZmFcIj5faGFsX2JhY2tlbmRfc2VjdXJpdHlfYXV0aF9mdW5jczo6aW5jcmVtZW50X2F0dGVtcHQ8XC9hPikodWlkX3QgdXNlcl9pZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5JbmNyZWFzZSB0aGUgYWNjdW11bGF0ZWQgYXR0ZW1wdCBudW1iZXIgZm9yIHVzZXIncyBwYXNzd29yZCBhdXRoIHRyaWVzPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTMzNjg2ZmM4MDI4ZDc4MTljNGE3ZTViYWU5MTVhMzYyXCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OmlzX2hpc3RvcnlfYWN0aXZlPFwvYT4pKHVpZF90IHVzZXJfaWQpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+Q2hlY2sgaWYgdGhlIGhpc3RvcnkgZm9yIHN0b3JpbmcgdGhlIHByZXZpb3VzIHBhc3N3b3JkIGNvbnRleHQgaXMgYWN0aXZhdGVkPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTAxOTA0MjNiM2NmODViZTc4YjQ2OTUwMTdjYTNlMjU5XCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OmlzX2lnbm9yZV9wZXJpb2Q8XC9hPikodWlkX3QgdXNlcl9pZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5DaGVjayBpZiB0aGUgbmV3IGF0dGVtcHQgaW50ZXJ2YWwgZWxhcHNlZCB0aGUgaWdub3JlIHBlcmlvZChleC4gUkVUUllfVElNRU9VVCA9IDAuNSBzZWNzKTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2EwNDMyMGNkYTZiZjgzNDk0OTI2MjBkZmQxYjUwZTM1ZVwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjppc19wYXNzd29yZF9hY3RpdmU8XC9hPikodWlkX3QgdXNlcl9pZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdGhlIGFjdGl2ZSBzdGF0dXMgb2YgdXNlcidzIHBhc3N3b3JkIGF1dGggY29udGV4dDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2E2MmVlZDg0MGFjZDNlNmM3ODVkODRkMDUyMzUzMWRlYVwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjppc19wYXNzd29yZF9yZXVzZWQ8XC9hPikodWlkX3QgdXNlcl9pZCwgY29uc3QgY2hhciAqcGFzc3dvcmQpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+Q2hlY2sgaWYgdGhlIGVudGVyZWQgcGFzc3dvcmQgY29udGV4dCBoYXMgdGhlIHByZXZpb3VzbHktdXNlZCBoaXN0b3J5PFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYWY5MzMyNzllM2VmOTMyZTdhMTFlZGJmZWY1ZTM4NjMyXCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OnJlc2V0X2F0dGVtcHQ8XC9hPikodWlkX3QgdXNlcl9pZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5SZXNldCB0aGUgYWNjdW11bGF0ZWQgYXR0ZW1wdCBudW1iZXIgZm9yIHVzZXIncyBwYXNzd29yZCBhdXRoIHRyaWVzPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYWEyZTI2Nzk3NDJiZDJjY2EwYjEyYzdiMzE2ZjFjNGU1XCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OnNldF9leHBpcmVfdGltZTxcL2E+KSh1aWRfdCB1c2VyX2lkLCB1bnNpZ25lZCBpbnQgZXhwaXJlX3RpbWUpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+U2V0IHRoZSBleHBpcmUgdGltZSBwZXJpb2QgaW4gZGF5czxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2EzNmMwM2RmODBkODE3ZjAwZDA0MzRjNTUwYTlkYWE3NlwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjpzZXRfZXhwaXJlX3RpbWVfbGVmdDxcL2E+KSh1aWRfdCB1c2VyX2lkLCB1bnNpZ25lZCBpbnQgZXhwaXJlX3RpbWVfbGVmdCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5TZXQgdGhlIGV4cGlyZSB0aW1lIGxlZnQgaW4gc2Vjb25kczxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2FjNDY5MzcwMDgwZmVmMzgzOGZhMmYzNmU5NTFhZjVmZlwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjpzZXRfbWF4X2F0dGVtcHQ8XC9hPikodWlkX3QgdXNlcl9pZCwgdW5zaWduZWQgaW50IG1heF9hdHRlbXB0KTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlNldCB0aGUgbGltaXRlZCBtYXhpbXVtIGF0dGVtcHQgbnVtYmVyIG9mIHVzZXIncyBwYXNzd29yZCBhdXRoIHRyaWVzPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTZmNDQ5NTQ5OGNmMjliZTJkMGFiMTlhOTQxMzhhMTk1XCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OnNldF9tYXhfaGlzdG9yeV9zaXplPFwvYT4pKHVpZF90IHVzZXJfaWQsIHVuc2lnbmVkIGludCBoaXN0b3J5X3NpemUpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+U2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBoaXN0b3J5IHNpemUgdG8gc3RvcmUgcGFzc3dvcmQgY29udGV4dCBpbiB0aGUgcGFzdDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2FkNDYyYTE3ZTE5MWYxOTY0YTk5NGMxODJkZGU4YWVhMFwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjpzZXRfcGFzc3dvcmQ8XC9hPikodWlkX3QgdXNlcl9pZCwgY29uc3QgY2hhciAqcGFzc3dvcmQpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+U2V0IGEgbmV3IHBhc3N3b3JkIGF1dGggY29udGV4dDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2FmOTJjNDczNjRhOTU3NzhjNDdiZTAyMzBjMjU4NTE1OFwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjp3cml0ZV9hdHRlbXB0X3RvX2ZpbGU8XC9hPikodWlkX3QgdXNlcl9pZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5Xcml0ZSB0aGUgbnVtYmVyIG9mIGF0dGVtcHRzIHRvIGVudGVyIHBhc3N3b3JkIGF1dGggdGlsbCBub3c8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+aW50KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhMzExOTUxNDNkMDJlNjU1MGY2YmNiZDc5NjlhOTdkNTRcIj5faGFsX2JhY2tlbmRfc2VjdXJpdHlfYXV0aF9mdW5jczo6d3JpdGVfbWVtb3J5X3RvX2ZpbGU8XC9hPikodWlkX3QgdXNlcl9pZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5Xcml0ZSBwYXNzd29yZCBhdXRoIHBhcmFtZXRlcnMgZnJvbSBtZW1vcnkgdG8gZmlsZTxcL3A+XG48aHIgXC8+XG48aDIgaWQ9XCJjb250ZW50LXR5cGVkZWYtZG9jdW1lbnRhdGlvblwiPjxhIGhyZWY9XCIjY29udGVudC10eXBlZGVmLWRvY3VtZW50YXRpb25cIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPlR5cGVkZWYgRG9jdW1lbnRhdGlvbjxcL2gyPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+dHlwZWRlZiBzdHJ1Y3QgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNzdHJ1Y3RfX2hhbF9fYmFja2VuZF9fc2VjdXJpdHlfX2F1dGhfX2Z1bmNzXCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M8XC9hPiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2dhMDU2OWNlZWZkOGMwNDU0Y2U1MDJjYjdhNjZkM2IxYzdcIj5oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5TdHJ1Y3R1cmUgZm9yIHNlY3VyaXR5IGF1dGgtZncgZnVuY3Rpb25zLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX1NFQ1VSSVRZX0FVVEggMS4wPFwvcD5cbjxociBcLz5cbjxoMiBpZD1cImNvbnRlbnQtZW51bWVyYXRpb24tdHlwZS1kb2N1bWVudGF0aW9uXCI+PGEgaHJlZj1cIiNjb250ZW50LWVudW1lcmF0aW9uLXR5cGUtZG9jdW1lbnRhdGlvblwiIGNsYXNzPVwiaGVhZGluZy1wZXJtYWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIlBlcm1hbGlua1wiPlx1MDBiNjxcL2E+RW51bWVyYXRpb24gVHlwZSBEb2N1bWVudGF0aW9uPFwvaDI+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5lbnVtIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjZ2EzMjQ3YjgxN2MyMzY3ZDgzYzlmMzkzN2U1MjA5NzQzNlwiPmhhbF9zZWN1cml0eV9hdXRoX2Vycm9yX2U8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlJldHVybiBDb2RlcyBleHBvcnRlZCBieSB0aGUgaGFsLXNlY3VyaXR5LWF1dGggZnVuY3Rpb25zLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX1NFQ1VSSVRZX0FVVEggMS4wPFwvcD5cbjxwPjxzdHJvbmc+RW51bWVyYXRvcjo8XC9zdHJvbmc+XG46ICAgfCA8ZW0+SEFMX1NFQ1VSSVRZX0FVVEhfRVJST1JfTk9ORTxcL2VtPiB8IEluZGljYXRlIHRoZSByZXN1bHQgb2YgdGhlIG9uZSBzcGVjaWZpYyBBUEkgaXMgc3VjY2Vzc2Z1bCB8XG58IC0tLSB8IC0tLSB8XG58IDxlbT5IQUxfU0VDVVJJVFlfQVVUSF9FUlJPUl9JTlBVVF9QQVJBTTxcL2VtPiB8IEluZGljYXRlIHRoZSBBUEkncyBpbnB1dCBwYXJhbWV0ZXIgaXMgbWFsZm9ybWVkIHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX0VSUk9SX09VVF9PRl9NRU1PUlk8XC9lbT4gfCBJbmRpY2F0ZSBzeXN0ZW0gaXMgcnVubmluZyBvdXQgb2YgbWVtb3J5IHN0YXRlIHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX0VSUk9SX0JVRkZFUl9UT09fU01BTEw8XC9lbT4gfCBJbmRpY2F0ZSB0aGUgb3V0cHV0IGJ1ZmZlciBzaXplIHdoaWNoIGlzIHBhc3NlZCBhcyBwYXJhbWV0ZXIgaXMgdG9vIHNtYWxsIHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX0VSUk9SX05PX1VTRVI8XC9lbT4gfCBJbmRpY2F0ZSB0aGVyZSBpcyBubyB1c2VyIHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX0VSUk9SX05PX1BBU1NXT1JEPFwvZW0+IHwgSW5kaWNhdGUgdGhlcmUgaXMgbm8gcGFzc3dvcmQgc2V0IHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX0VSUk9SX1BBU1NXT1JEX0VYSVNUPFwvZW0+IHwgSW5kaWNhdGUgcGFzc3dvcmQgZXhpc3RzIGluIHN5c3RlbSB8XG58IDxlbT5IQUxfU0VDVVJJVFlfQVVUSF9FUlJPUl9QQVNTV09SRF9NSVNNQVRDSDxcL2VtPiB8IEluZGljYXRlIHBhc3N3b3JkIG1pc21hdGNoIHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX0VSUk9SX1BBU1NXT1JEX1JFVFJZX1RJTUVSPFwvZW0+IHwgSW5kaWNhdGUgcGFzc3dvcmQgcmV0cnkgdGltZW91dCBoYXMgbm90IHlldCBvY2N1cnJlZCB8XG58IDxlbT5IQUxfU0VDVVJJVFlfQVVUSF9FUlJPUl9QQVNTV09SRF9NQVhfQVRURU1QVFNfRVhDRUVERUQ8XC9lbT4gfCBJbmRpY2F0ZSBubyBtb3JlIGF0dGVtcHRzIGFyZSBwb3NzaWJsZSB8XG58IDxlbT5IQUxfU0VDVVJJVFlfQVVUSF9FUlJPUl9QQVNTV09SRF9FWFBJUkVEPFwvZW0+IHwgSW5kaWNhdGUgcGFzc3dvcmQgaXMgZXhwaXJlZCB8XG58IDxlbT5IQUxfU0VDVVJJVFlfQVVUSF9FUlJPUl9QQVNTV09SRF9SRVVTRUQ8XC9lbT4gfCBJbmRpY2F0ZSBwYXNzd29yZCBpcyByZXVzZWQgfFxufCA8ZW0+SEFMX1NFQ1VSSVRZX0FVVEhfRVJST1JfU1RBVFVTPFwvZW0+IHwgSW5kaWNhdGUgc3RhdHVzIGRvZXMgbm90IG1lZXQgdGhlIHJlcXVpcmVkIGNvbmRpdGlvbiBvciB0aHJlc2hvbGQgfFxufCA8ZW0+SEFMX1NFQ1VSSVRZX0FVVEhfRVJST1JfSEFMX0lOSVRfRkFJTDxcL2VtPiB8IEluZGljYXRlIHRoZXJlIGlzIGEgZmFpbHVyZSBkdXJpbmcgSEFMIGluaXRpYWxpemF0aW9uIHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX0VSUk9SX1VOS05PV048XC9lbT4gfCBJbmRpY2F0ZSB0aGUgZXJyb3Igd2l0aCB1bmtub3duIHJlYXNvbiB8PFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmVudW0gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNnYTc0M2MzYjUzZWY5ODcxODZmZDhiNzk0NTE1NGE4MWE5XCI+aGFsX3NlY3VyaXR5X2F1dGhfcGFzc3dvcmRfdHlwZV9lPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5FbnVtZXJhdGlvbiBmb3IgYXV0aCBwYXNzd29yZCB0eXBlLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX1NFQ1VSSVRZX0FVVEggMS4wPFwvcD5cbjxwPjxzdHJvbmc+RW51bWVyYXRvcjo8XC9zdHJvbmc+XG46ICAgfCA8ZW0+SEFMX1NFQ1VSSVRZX0FVVEhfUEFTU1dPUkRfTk9STUFMPFwvZW0+IHwgQ2hhcmFjdGVyIHN0cmluZyBmb3Igbm9ybWFsIHBhc3N3b3JkIHxcbnwgLS0tIHwgLS0tIHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX1BBU1NXT1JEX1BJTjxcL2VtPiB8IE51bWVyaWMgY2hhcmFjdGVyIHN0cmluZyBmb3IgcGVyc29uYWwgaWRlbnRpZmljYXRpb24gbnVtYmVyIHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX1BBU1NXT1JEX1BBVFRFUk48XC9lbT4gfCBOdW1lcmljIGNoYXJhY3RlciBzdHJpbmcgZm9yIHBhdHRlcm4gbWF0Y2ggfDxcL3A+XG48aHIgXC8+XG48cD5FeGNlcHQgYXMgbm90ZWQsIHRoaXMgY29udGVudCAtIGV4Y2x1ZGluZyB0aGUgQ29kZSBFeGFtcGxlcyAtIGlzIGxpY2Vuc2VkIHVuZGVyIDxhIGhyZWY9XCJodHRwOlwvXC9jcmVhdGl2ZWNvbW1vbnMub3JnXC9saWNlbnNlc1wvYnlcLzMuMFwvbGVnYWxjb2RlXCI+Q3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiAzLjA8XC9hPlxuYW5kIGFsbCBvZiB0aGUgQ29kZSBFeGFtcGxlcyBjb250YWluZWQgaGVyZWluIGFyZSBsaWNlbnNlZCB1bmRlciA8YSBocmVmPVwiaHR0cHM6XC9cL3d3dy50aXplbi5vcmdcL2JzZC0zLWNsYXVzZS1saWNlbnNlXCI+QlNELTMtQ2xhdXNlPFwvYT4uPGJyIFwvPlxuRm9yIGRldGFpbHMsIHNlZSB0aGUgPGEgaHJlZj1cImh0dHBzOlwvXC93d3cudGl6ZW4ub3JnXC9jb250ZW50LWxpY2Vuc2VcIj5Db250ZW50IExpY2Vuc2U8XC9hPi48XC9wPlxuIiwidGFibGVfb2ZfY29udGVudCI6Ijx1bCBjbGFzcz1cInRhYmxlLW9mLWNvbnRlbnRzXCI+XG48bGk+PGEgaHJlZj1cIiNjb250ZW50LXJlcXVpcmVkLWhlYWRlclwiPlJlcXVpcmVkIEhlYWRlcjxcL2E+PFwvbGk+XG48bGk+PGEgaHJlZj1cIiNjb250ZW50LW92ZXJ2aWV3XCI+T3ZlcnZpZXc8XC9hPjxcL2xpPlxuPGxpPjxhIGhyZWY9XCIjY29udGVudC1kYXRhLXN0cnVjdHVyZS1kb2N1bWVudGF0aW9uXCI+RGF0YSBTdHJ1Y3R1cmUgRG9jdW1lbnRhdGlvbjxcL2E+PFwvbGk+XG48bGk+PGEgaHJlZj1cIiNjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb25cIj5GaWVsZCBEb2N1bWVudGF0aW9uPFwvYT48XC9saT5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtdHlwZWRlZi1kb2N1bWVudGF0aW9uXCI+VHlwZWRlZiBEb2N1bWVudGF0aW9uPFwvYT48XC9saT5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtZW51bWVyYXRpb24tdHlwZS1kb2N1bWVudGF0aW9uXCI+RW51bWVyYXRpb24gVHlwZSBEb2N1bWVudGF0aW9uPFwvYT48XC9saT5cbjxcL3VsPlxuIiwidGl0bGUiOiJUaXplbiBIQUwgQVBJOiBBdXRoIiwicmF3IjpudWxsfSx7ImNsYXNzIjoiQXBwXFxTZXJ2aWNlc1xcRG9jdW1lbnRhdGlvblxcRGF0YVxcUmVuZGVyZWRNYXJrZG93biIsInMiOiJ3cmJsIn1dfSx7InMiOiJhcnIifV19LCJtZW1vIjp7ImlkIjoiUjZ5NWwxamxwZ1ZsdnJ3YzVGSWwiLCJuYW1lIjoiX19tb3VudFBhcmFtc0NvbnRhaW5lciIsInBhdGgiOiJkb2NzXC9wbGF0Zm9ybVwvaGFsXC9hcGlcLzEuMC4wXC9ncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUiLCJtZXRob2QiOiJHRVQiLCJyZWxlYXNlIjoiYS1hLWEifSwiY2hlY2tzdW0iOiI0OTJkZTU0YmMxNzI5YTIwNmJkZmZkNjRhNTMyNzE3ODY1NTRiNWU2NjQzMDhiZmQ4OTE2NjIwOWZjZjY0MGQ0In0=')" >